piclist 1.9.12 → 1.9.14
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +32 -0
- package/dist/core/Lifecycle.d.ts +17 -1
- package/dist/i18n/zh-CN.d.ts +23 -15
- package/dist/index.cjs.js +2 -2
- package/dist/index.esm.js +2 -2
- package/dist/plugins/beforetransformer/skipProcess.d.ts +5 -0
- package/dist/plugins/uploader/utils.d.ts +2 -0
- package/dist/types/index.d.ts +7 -0
- package/package.json +3 -3
package/dist/index.esm.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{EventEmitter as e}from"events";import t,{readFile as r,readJSONSync as n,ensureDirSync as a,createFileSync as i,emptyDirSync as s,removeSync as E,moveSync as o,pathExistsSync as I,ensureFileSync as _,remove as S}from"fs-extra";import{cloneDeep as l,merge as P,get as u,set as c,unset as A}from"lodash";import p,{homedir as C}from"os";import D from"path";import{Command as T}from"commander";import g from"inquirer";import{imageSize as d}from"image-size";import L,{URL as m}from"url";import f from"text-to-svg";import h from"sharp";import B from"crypto";import{v4 as N}from"uuid";import U from"chalk";import R from"download-git-repo";import{sync as O}from"rimraf";import M from"minimatch";import y from"globby";import{render as G}from"ejs";import b from"dayjs";import w from"util";import{spawn as x}from"cross-spawn";import{sync as W}from"resolve";import K from"axios";import F from"form-data";import H from"https";import{httpsOverHttp as $}from"tunnel";import v from"heic-convert";import{lookup as k}from"mime-types";import{S3Client as Y,PutObjectCommand as V,GetObjectCommand as q}from"@aws-sdk/client-s3";import{getSignedUrl as j}from"@aws-sdk/s3-request-presigner";import{NodeHttpHandler as z}from"@smithy/node-http-handler";import X from"file-type";import Q from"mime";import{HttpsProxyAgent as Z,HttpProxyAgent as J}from"hpagent";import ee from"qiniu";import{NodeSSH as te}from"node-ssh-no-cpu-features";import{AuthType as re,createClient as ne}from"webdav";import{spawn as ae}from"child_process";import ie from"is-wsl";import{JSONStore as se}from"@picgo/store";import Ee from"js-yaml";import{ObjectAdapter as oe,I18n as Ie}from"@picgo/i18n";const _e=(e,t,r,n,a,i)=>{let s=e.program.command(t).description(r).alias(n);(null==i?void 0:i.proxy)&&(s=s.option("-p, --proxy <proxy>","Add proxy for installing plugins")),(null==i?void 0:i.registry)&&(s=s.option("-r, --registry <registry>","Choose a registry for installing plugins")),s.action(a)},Se={handle:e=>{const t=e.cmd;_e(t,"install <plugins...>","install picgo plugin","add",((t,r)=>{const{proxy:n,registry:a}=r,i={proxy:n,registry:a};e.pluginHandler.install(t,i).catch((t=>{e.log.error(t)}))}),{proxy:!0,registry:!0}),_e(t,"uninstall <plugins...>","uninstall picgo plugin","rm",(t=>{e.pluginHandler.uninstall(t).catch((t=>{e.log.error(t)}))})),_e(t,"update <plugins...>","update picgo plugin","up",((t,r)=>{const{proxy:n,registry:a}=r,i={proxy:n,registry:a};e.pluginHandler.update(t,i).catch((t=>{e.log.error(t)}))}),{proxy:!0,registry:!0})}},le={handle:e=>{e.cmd.program.option("-c, --config <path>","set config path")}};function Pe(e){const t="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";return Array.from({length:e}).map((()=>t.charAt(Math.floor(Math.random()*t.length)))).join("")}function ue(e){return 1===e.toString().length?`0${e}`:e.toString()}function ce(e){return B.createHash("md5").update(e).digest("hex")}function Ae(e,t,r,n){const a=new Date,i=a.getFullYear().toString(),s=D.basename(e,D.extname(e)),E={"{Y}":()=>i,"{y}":()=>i.slice(2),"{m}":()=>ue(a.getMonth()+1),"{d}":()=>ue(a.getDate()),"{h}":()=>ue(a.getHours()),"{i}":()=>ue(a.getMinutes()),"{s}":()=>ue(a.getSeconds()),"{ms}":()=>a.getMilliseconds().toString().padStart(3,"0"),"{md5}":()=>ce(n||s),"{md5-16}":()=>ce(n||s).slice(0,16),"{filename}":()=>r?D.basename(r,D.extname(r)):s,"{uuid}":()=>N().replace(/-/g,""),"{timestamp}":()=>a.getTime().toString()};if(void 0===t||!Object.keys(E).some((e=>t.includes(e)))&&!t.includes("localFolder:")&&!t.includes("str-"))return e;const o=D.extname(e);let I=Object.keys(E).reduce(((e,t)=>e.replace(new RegExp(t,"g"),E[t]())),t)+o;return I=I.replace(/{str-(\d+)}/gi,((e,t)=>Pe(parseInt(t,10)))),I=I.replace(/{(localFolder:?(\d+)?)}/gi,((t,r,n)=>{n=Math.max(1,n||0);return D.dirname(e).split(D.sep).slice(0-n).reduce(((e,t)=>`${e}/${t}`)).replace(/:/g,"")})),I}const pe=e=>/^https?:\/\//.test(e),Ce=e=>{e=e||"";try{return e!==decodeURI(e)}catch(e){return!1}},De=e=>(Ce(e)||(e=encodeURI(e)),e),Te=e=>{try{const{width:t=0,height:r=0,type:n}=d(e);return{real:!0,width:t,height:r,extname:n?`.${n}`:".png"}}catch(e){return{real:!1,width:200,height:200,extname:".png"}}},ge=async e=>{try{return{extname:D.extname(e),fileName:D.basename(e),buffer:await r(e),success:!0}}catch(t){return{reason:`read file ${e} error`,success:!1}}},de=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 m(e).pathname;let s="";try{s=new m(e).searchParams.get("wx_fmt")||D.extname(i)||""}catch(e){s=D.extname(i)||""}!s.startsWith(".")&&s&&(s=`.${s}`),n({buffer:a,fileName:D.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])},Le=e=>/^@[^/]+\/picgo-plugin-/.test(e)?"scope":e.startsWith("picgo-plugin-")?"normal":me(e)?"simple":"unknown",me=e=>{if(D.isAbsolute(e))return!1;const r=D.join(process.cwd(),e);return!t.existsSync(r)&&(!e.includes("/")&&!e.includes("\\"))},fe=(e,t="")=>t?`@${t}/picgo-plugin-${e}`:`picgo-plugin-${e}`,he=(e,r=console)=>{switch(Le(e)){case"normal":case"scope":return e;case"simple":return fe(e);default:{let n=e;return D.isAbsolute(e)&&t.existsSync(e)?Ne(n):(n=D.join(process.cwd(),e),t.existsSync(n)?Ne(n):(r.warn(`Can't find plugin ${e}`),""))}}},Be=(e,r=console)=>{var a;switch(Le(e)){case"normal":return Ue(e);case"scope":return Ue(e,!0);case"simple":return Ue(fe(e));default:{if(!t.existsSync(e))return r.warn(`Can't find plugin: ${e}`),"";const i=D.posix.join(e,"package.json");if(t.existsSync(i)){const e=n(i)||{};return(null===(a=e.name)||void 0===a?void 0:a.includes("picgo-plugin-"))?e.name:(r.warn(`The plugin package.json's name filed is ${e.name||"empty"}, need to include the prefix: picgo-plugin-`),"")}return r.warn(`Can't find plugin: ${e}`),""}}},Ne=e=>e.split(D.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},Re=[],Oe=e=>Re.some((t=>e.startsWith(t))),Me=e=>"object"==typeof e&&!Array.isArray(e)&&Object.keys(e).length>0;function ye(e){try{return JSON.parse(e)}catch(t){return e}}const Ge=(e=0)=>isNaN(Number(e))?0:Number(e),be=()=>"development"===process.env.NODE_ENV;const we=D.join(__dirname,"assets","piclist.png");async function xe(e,t,r,n,a,i,s,E,o,I,_){E=!E||E<0||E>1?.15:E;const S=h(e,{animated:!0}),{width:l=200}=await S.metadata(),P=await async function(e,t,r,n,a,i,s,E=200,o=0){let I;"image"===e?(s=s||we,I=await h(s).toBuffer()):I=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=f.loadSync(n).getSVG(t,a);return Buffer.from(i)}(t,r,i,n||t);const{width:_,height:S}=await async function(e){const{width:t,height:r}=await h(e).metadata();return{width:t||200,height:r||200}}(I),l=Math.floor(E*Ge(a)),P=Math.floor(l*S/_);return await h(I).resize(l,P,{fit:"inside"}).rotate(o,{background:{r:255,g:255,b:255,alpha:0}}).toBuffer()}(t,r,i,s,E,o,I,l,a);return await S.composite([{input:P,gravity:_||"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))),Ke=["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","gif"],He=e=>Ke.includes(e);async function $e(e,t,r,n){try{let n=h(e,{animated:!0});return n=h(await xe(e,t.watermarkType||"text",r,t.isFullScreenWatermark,Ge(t.watermarkDegree),t.watermarkText,t.watermarkFontPath,Ge(t.watermarkScaleRatio),t.watermarkColor,t.watermarkImagePath,t.watermarkPosition),{animated:!0}),await n.toBuffer()}catch(t){return n.error(`Image add watermark error: ${t}`),e}}function ve(e){const t="string"==typeof e.formatConvertObj?ye(e.formatConvertObj):e.formatConvertObj;return{quality:Ge(e.quality),isConvert:e.isConvert||!1,convertFormat:e.convertFormat||"jpg",isReSize:e.isReSize||!1,reSizeHeight:Ge(e.reSizeHeight),reSizeWidth:Ge(e.reSizeWidth),skipReSizeOfSmallImg:e.skipReSizeOfSmallImg||!1,isReSizeByPercent:e.isReSizeByPercent||!1,reSizePercent:Ge(e.reSizePercent),isRotate:e.isRotate||!1,isFlip:e.isFlip||!1,isFlop:e.isFlop||!1,rotateDegree:Ge(e.rotateDegree),picBed:e.picBed||"smms",formatConvertObj:t||{}}}async function ke(e,t,r,n){t=ve(t);try{if(r=Ye(r),!Fe.includes(r)||"gif"===r)return e;let n=h(e,{animated:!0}),a=100;if(We(t.quality)&&t.quality<100&&(a=Math.min(Math.max(Math.round(t.quality),1),100)),t.isReSizeByPercent){if(We(t.reSizePercent)){const e=await n.metadata().then((e=>e.width)),r=await n.metadata().then((e=>e.height));e&&r&&(n=n.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)n=n.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 n.metadata().then((e=>e.width)),r=await n.metadata().then((e=>e.height));if(e&&r&&(!t.skipReSizeOfSmallImg||t.skipReSizeOfSmallImg&&t.reSizeHeight<r)){const a=t.reSizeHeight/r;n=n.resize(Math.round(e*a),t.reSizeHeight,{fit:"inside"})}}else if("number"==typeof t.reSizeWidth&&t.reSizeWidth>0&&("number"!=typeof t.reSizeHeight||0===t.reSizeHeight)){const e=await n.metadata().then((e=>e.width)),r=await n.metadata().then((e=>e.height));if(e&&r&&(!t.skipReSizeOfSmallImg||t.skipReSizeOfSmallImg&&t.reSizeWidth<e)){const a=t.reSizeWidth/e;n=n.resize(t.reSizeWidth,Math.round(r*a),{fit:"inside"})}}if(t.isRotate&&t.rotateDegree&&(n=n.rotate(t.rotateDegree,{background:{r:255,g:255,b:255,alpha:0}})),t.isFlip&&(n=n.flip()),t.isFlop&&(n=n.flop()),t.isConvert){const e=Ve(t,r);e!==r&&(n=n.toFormat(e,{quality:a,mozjpeg:!0}))}else n=r&&He(r)?n.toFormat(r,{quality:a,mozjpeg:!0}):n.toFormat("jpg",{quality:a,mozjpeg:!0});return await n.toBuffer()}catch(t){return n.error(`Image process error: ${t}`),e}}const Ye=e=>e.toLowerCase().replace(".","");function Ve(e,t){if(e=ve(e||{}),"gif"===(t=Ye(t)))return"gif";let r=(null==e?void 0:e.convertFormat)||"jpg";if((null==e?void 0:e.formatConvertObj)&&Object.keys(e.formatConvertObj).length>0){const n=e.formatConvertObj;Object.keys(n).includes(t)&&(r=n[t],He(r)||(r="jpg"))}return"imgur"===(null==e?void 0:e.picBed)&&"webp"===r&&(r="jpg"),r}const qe=(e,t)=>(t=Ye(t),!!e&&!!e.isAddWatermark&&Fe.includes(t)&&"svg"!==t),je=(e,t)=>{if(!Fe.includes(Ye(t))||!e)return!1;const{quality:r,isReSizeByPercent:n,reSizePercent:a,isReSize:i,reSizeHeight:s,reSizeWidth:E,isRotate:o,rotateDegree:I,isConvert:_,convertFormat:S,isFlip:l,isFlop:P}=ve(e);if(We(r)&&r<100)return!0;if(n&&We(a))return!0;if(i&&("number"==typeof s&&s>0||"number"==typeof E&&E>0))return!0;if(o&&I)return!0;if(l||P)return!0;if(_){return t!==(S||"jpg")}return!1},ze=async(e,t)=>(t=Ye(t),Fe.includes(t)&&"svg"!==t?await h(e,{animated:!0}).toBuffer():e);var Xe=Object.freeze({__proto__:null,randomStringGenerator:Pe,renameFileNameWithTimestamp:function(e){return`${Math.floor(Date.now()/1e3)}${Pe(5)}${D.extname(e)}`},renameFileNameWithRandomString:function(e,t=5){return`${Pe(t)}${D.extname(e)}`},renameFileNameWithCustomString:Ae,isUrl:pe,isUrlEncode:Ce,handleUrlEncode:De,getImageSize:Te,getFSFile:ge,getURLFile:de,getPluginNameType:Le,isSimpleName:me,handleStreamlinePluginName:e=>/^@[^/]+\/picgo-plugin-/.test(e)?e.replace(/^@[^/]+\/picgo-plugin-/,""):e.replace(/picgo-plugin-/,""),handleCompletePluginName:fe,getProcessPluginName:he,getNormalPluginName:Be,handleUnixStylePath:Ne,removePluginVersion:Ue,configBlackList:Re,isConfigKeyInBlackList:Oe,isInputConfigValid:Me,safeParse:ye,forceNumber:Ge,isDev:be,AddWatermark:xe,imageAddWaterMark:$e,imageCompress:ke,getConvertedFormat:Ve,isNeedAddWatermark:qe,isNeedCompress:je,removeExif:ze});const Qe={handle:e=>{e.cmd.program.command("upload").description("upload, go go go").arguments("[input...]").alias("u").action((r=>{(async()=>{const n=r.map((e=>pe(e)?e:D.resolve(e))).filter((r=>{const n=t.existsSync(r)||pe(r);return n||e.log.warn(`${r} does not exist.`),n}));await e.upload(n)})().catch((t=>{e.log.error(t)}))}))}};var Ze=e=>{const t=e.getConfig("buildIn.compress")||{};return[{name:"quality",type:"input",get prefix(){return e.i18n.translate("BUILDIN_COMPRESS_QUALITY")},get alias(){return e.i18n.translate("BUILDIN_COMPRESS_QUALITY")},required:!1,default:t.quality||100},{name:"isConvert",type:"confirm",get prefix(){return e.i18n.translate("BUILDIN_COMPRESS_ISCONVERT")},get alias(){return e.i18n.translate("BUILDIN_COMPRESS_ISCONVERT")},required:!1,default:t.isConvert||!1},{name:"convertFormat",type:"list",get prefix(){return e.i18n.translate("BUILDIN_COMPRESS_CONVERTFORMAT")},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 prefix(){return e.i18n.translate("BUILDIN_COMPRESS_ISRESIZE")},get alias(){return e.i18n.translate("BUILDIN_COMPRESS_ISRESIZE")},required:!1,default:t.isReSize||!1},{name:"reSizeWidth",type:"input",get prefix(){return e.i18n.translate("BUILDIN_COMPRESS_RESIZEWIDTH")},get alias(){return e.i18n.translate("BUILDIN_COMPRESS_RESIZEWIDTH")},required:!1,default:t.reSizeWidth||500},{name:"reSizeHeight",type:"input",get prefix(){return e.i18n.translate("BUILDIN_COMPRESS_RESIZEHEIGHT")},get alias(){return e.i18n.translate("BUILDIN_COMPRESS_RESIZEHEIGHT")},required:!1,default:t.reSizeHeight||500},{name:"skipReSizeOfSmallImg",type:"confirm",get prefix(){return e.i18n.translate("BUILDIN_COMPRESS_SKIPRESIZEOFSMALLIMG")},get alias(){return e.i18n.translate("BUILDIN_COMPRESS_SKIPRESIZEOFSMALLIMG")},required:!1,default:t.skipReSizeOfSmallImg||!1},{name:"isReSizeByPercent",type:"confirm",get prefix(){return e.i18n.translate("BUILDIN_COMPRESS_ISRESIZEBYPERCENT")},get alias(){return e.i18n.translate("BUILDIN_COMPRESS_ISRESIZEBYPERCENT")},required:!1,default:t.isReSizeByPercent||!1},{name:"reSizePercent",type:"input",get prefix(){return e.i18n.translate("BUILDIN_COMPRESS_RESIZEPERCENT")},get alias(){return e.i18n.translate("BUILDIN_COMPRESS_RESIZEPERCENT")},required:!1,default:t.reSizePercent||50},{name:"isFlip",type:"confirm",get prefix(){return e.i18n.translate("BUILDIN_COMPRESS_ISFLIP")},get alias(){return e.i18n.translate("BUILDIN_COMPRESS_ISFLIP")},required:!1,default:t.isFlip||!1},{name:"isFlop",type:"confirm",get prefix(){return e.i18n.translate("BUILDIN_COMPRESS_ISFLOP")},get alias(){return e.i18n.translate("BUILDIN_COMPRESS_ISFLOP")},required:!1,default:t.isFlop||!1},{name:"isRotate",type:"confirm",get prefix(){return e.i18n.translate("BUILDIN_COMPRESS_ISROTATE")},get alias(){return e.i18n.translate("BUILDIN_COMPRESS_ISROTATE")},required:!1,default:t.isRotate||!1},{name:"rotateDegree",type:"input",get prefix(){return e.i18n.translate("BUILDIN_COMPRESS_ROTATEDEGREE")},get alias(){return e.i18n.translate("BUILDIN_COMPRESS_ROTATEDEGREE")},required:!1,default:t.rotateDegree||90},{name:"isRemoveExif",type:"confirm",get prefix(){return e.i18n.translate("BUILDIN_COMPRESS_ISREMOVEEXIF")},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 prefix(){return e.i18n.translate("BUILDIN_WATERMARK_ISADDWATERMARK")},get alias(){return e.i18n.translate("BUILDIN_WATERMARK_ISADDWATERMARK")},required:!1,default:t.isAddWatermark||!1},{name:"watermarkType",type:"list",get prefix(){return e.i18n.translate("BUILDIN_WATERMARK_WATERMARKTYPE")},get alias(){return e.i18n.translate("BUILDIN_WATERMARK_WATERMARKTYPE")},required:!1,choices:["text","image"],default:t.watermarkType||"text"},{name:"isFullScreenWatermark",type:"confirm",get prefix(){return e.i18n.translate("BUILDIN_WATERMARK_ISFULLSCREENWATERMARK")},get alias(){return e.i18n.translate("BUILDIN_WATERMARK_ISFULLSCREENWATERMARK")},required:!1,default:t.isFullScreenWatermark||!1},{name:"watermarkDegree",type:"input",get prefix(){return e.i18n.translate("BUILDIN_WATERMARK_WATERMARKDEGREE")},get alias(){return e.i18n.translate("BUILDIN_WATERMARK_WATERMARKDEGREE")},required:!1,default:t.watermarkDegree||0},{name:"watermarkText",type:"input",get prefix(){return e.i18n.translate("BUILDIN_WATERMARK_WATERMARKTEXT")},get alias(){return e.i18n.translate("BUILDIN_WATERMARK_WATERMARKTEXT")},required:!1,default:t.watermarkText||""},{name:"watermarkFontPath",type:"input",get prefix(){return e.i18n.translate("BUILDIN_WATERMARK_WATERMARKTEXTFONTPATH")},get alias(){return e.i18n.translate("BUILDIN_WATERMARK_WATERMARKTEXTFONTPATH")},required:!1,default:t.watermarkFontPath||""},{name:"watermarkScaleRatio",type:"input",get prefix(){return e.i18n.translate("BUILDIN_WATERMARK_WATERMARKFONTRATIO")},get alias(){return e.i18n.translate("BUILDIN_WATERMARK_WATERMARKFONTRATIO")},required:!1,default:t.watermarkScaleRatio||.15},{name:"watermarkColor",type:"input",get prefix(){return e.i18n.translate("BUILDIN_WATERMARK_WATERMARKFONTCOLOR")},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 prefix(){return e.i18n.translate("BUILDIN_WATERMARK_WATERMARKIMAGEPATH")},get alias(){return e.i18n.translate("BUILDIN_WATERMARK_WATERMARKIMAGEPATH")},required:!1,default:t.watermarkImagePath||""},{name:"watermarkPosition",type:"list",get prefix(){return e.i18n.translate("BUILDIN_WATERMARK_WATERMARKPOSITION")},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 et=e=>{const t=e.getConfig("buildIn.rename")||{};return[{name:"format",type:"input",get prefix(){return e.i18n.translate("BUILDIN_RENAME_FORMAT")},get alias(){return e.i18n.translate("BUILDIN_RENAME_FORMAT")},required:!1,default:t.format||"{filename}"},{name:"enable",type:"confirm",get prefix(){return e.i18n.translate("BUILDIN_RENAME_ENABLE")},get alias(){return e.i18n.translate("BUILDIN_RENAME_ENABLE")},required:!1,default:t.enable||!1}]};const tt=e=>({advancedplist:e.i18n.translate("PICBED_ADVANCEDPLIST"),alistplist:e.i18n.translate("PICBED_ALIST_PLIST"),aliyun:e.i18n.translate("PICBED_ALICLOUD"),"aws-s3-plist":e.i18n.translate("PICBED_AWSS3PLIST"),github:e.i18n.translate("PICBED_GITHUB"),imgur:e.i18n.translate("PICBED_IMGUR"),local:e.i18n.translate("PICBED_LOCAL"),lskyplist:e.i18n.translate("PICBED_LSKY_PLIST"),piclist:e.i18n.translate("PICBED_PICLIST"),qiniu:e.i18n.translate("PICBED_QINIU"),sftpplist:e.i18n.translate("PICBED_SFTPPLIST"),smms:e.i18n.translate("PICBED_SMMS"),tcyun:e.i18n.translate("PICBED_TENCENTCLOUD"),upyun:e.i18n.translate("PICBED_UPYUN"),webdavplist:e.i18n.translate("PICBED_WEBDAVPLIST")}),rt=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})},nt={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 rt(e,Ze(e),t,r);else if("watermark"===r)await rt(e,Je(e),t,r);else if("rename"===r)await rt(e,et(e),t,r);else{const r=[{type:"list",name:"buildin",choices:[{name:e.i18n.translate("BUILDIN_COMPRESS"),value:"compress"},{name:e.i18n.translate("BUILDIN_WATERMARK"),value:"watermark"},{name:e.i18n.translate("BUILDIN_RENAME"),value:"rename"}],message:"Choose a buildin module"}],n=await e.cmd.inquirer.prompt(r);"compress"===n.buildin?await rt(e,Ze(e),t,n.buildin):"watermark"===n.buildin?await rt(e,Je(e),t,n.buildin):"rename"===n.buildin&&await rt(e,et(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 rt(e,n.config(e),t,r)}else{const r=[{type:"list",name:`${t}`,choices:e.helper[t].getIdList().map((t=>({name:tt(e)[t]||t,value:t}))),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 rt(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 rt(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 rt(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)}))}))}},at={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().map((t=>({name:tt(e)[t]||t,value:t}))),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 saved successfully!")}catch(t){if(e.log.error(t),process.argv.includes("--debug"))throw t}})().catch((t=>{e.log.error(t)}))}))}},it={handle:e=>{e.cmd.program.option("-p, --proxy <url>","set proxy for uploading",(t=>{e.setConfig({"picBed.proxy":t})}))}},st=async(e,t)=>{try{const r=ot(t.tmp),n=D.join(t.tmp,"template");let a={};r.prompts&&r.prompts.length>0&&(a=await e.cmd.inquirer.prompt(r.prompts));let i=await y(["**/*"],{cwd:n,dot:!0});if(i=i.filter((t=>{let n="";return Object.keys(r.filters).forEach((e=>{M(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=It(i,n,a);_t(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}},ot=e=>{const r=D.join(e,"index.js");if(t.existsSync(r)){return require(r)}return{}},It=(e,r,n)=>{const a={};return e.forEach((e=>{const i=t.readFileSync(D.join(r,e),"utf8"),s=G(i,n);(Buffer.isBuffer(s)||/[^\s]/.test(s))&&(a[e]=s)})),a},_t=(e,r)=>{Object.keys(r).forEach((n=>{const i=D.join(e,n);a(D.dirname(i)),t.writeFileSync(i,r[n])}))},St=(e,r)=>{r.offline?t.existsSync(r.template)?st(e,r).catch((t=>{e.log.error(t)})):e.log.error(`Local template ${r.template} not found`):(r.template=r.hasSlash?r.template:"PicGo/picgo-template-"+r.template,lt(e,r))},lt=(e,r)=>{t.existsSync(r.tmp)&&O(r.tmp),e.log.info("Template files are downloading..."),R(r.template,r.tmp,{clone:r.clone},(t=>{t?e.log.error(t):(e.log.success("Template files are downloaded!"),st(e,r).catch((t=>{e.log.error(t)})))}))},Pt={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(((r,n,a)=>{(async()=>{try{const i=r.includes("/"),s=!n||"."===n,E=D.resolve(n||"."),o=a.clone||!1,I=a.offline||!1,_=D.join(C(),".piclist/templates",r.replace(/[/:]/g,"-"));a.offline&&(r=_);const S={template:r,project:n,hasSlash:i,inPlace:s,dest:E,clone:o,tmp:_,offline:I};s||t.existsSync(E)?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,S)})):St(e,S)}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(U.gray(" # create a new project with an official template")),console.log(" $ picgo init plugin my-project"),console.log(),console.log(U.gray(" # create a new project straight from a github template")),console.log(" $ picgo init username/repo my-project"),console.log()}))}},ut={handle:e=>{e.cmd.program.command("i18n").arguments("[lang]").description("change language, zh-CN, zh-TW, en").action((async(t="")=>{const r=e.i18n.getLanguageList();if(!t){const n=[{type:"list",name:"i18n",choices:r,message:"Choose a language",default:e.getConfig("settings.language")||"zh-CN"}];t=(await e.cmd.inquirer.prompt(n)).i18n}r.includes(t)?(e.i18n.setLanguage(t),e.log.success(`Language set to ${t}`)):e.log.warn("No such language")}))}};class ct{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),ct.currentPlugin&&(this.pluginIdMap.has(ct.currentPlugin)?null===(r=this.pluginIdMap.get(ct.currentPlugin))||void 0===r||r.push(e):this.pluginIdMap.set(ct.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 At=(e=null)=>{ct.currentPlugin=e};class pt{constructor(e){this.name="commander",this.list=new Map,this.pluginIdMap=new Map,this.program=new T,this.inquirer=g,this.ctx=e}getName(){return this.name}init(){var e;this.program.version("1.9.12","-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",Se),e.cmd.register("config",le),e.cmd.register("setting",nt),e.cmd.register("upload",Qe),e.cmd.register("use",at),e.cmd.register("proxy",it),e.cmd.register("init",Pt),e.cmd.register("i18n",ut)}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=ct.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,Dt,Tt;!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"}(Dt||(Dt={})),function(e){e.CONFIG_CHANGE="CONFIG_CHANGE"}(Tt||(Tt={}));class gt{constructor(e){this.level={[Ct.success]:"green",[Ct.info]:"blue",[Ct.warn]:"yellow",[Ct.error]:"red"},this.ctx=e}handleLog(e,...t){if(this.logLevel=this.ctx.getConfig("settings.logLevel"),!this.ctx.getConfig("silent")&&this.checkLogLevel(e,this.logLevel)){const r=U[this.level[e]](`[PicList ${e.toUpperCase()}]:`);console.log(r,...t),this.logPath=this.ctx.getConfig("settings.logPath")||D.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(U.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(t.existsSync(e)){const r=t.statSync(e).size,n=1024*Ge(this.ctx.getConfig("settings.logFileSizeLimit")||10)*1024;return{isLarge:r>n,logFileSize:r,logFileSizeLimit:n}}return{isLarge:!1}}recreateLogFile(e){t.existsSync(e)&&(t.unlinkSync(e),i(e))}handleWriteLog(e,r,...n){try{let a=`${b().format("YYYY-MM-DD HH:mm:ss")} [PicList ${r.toUpperCase()}] `;n.forEach((e=>{e instanceof Error&&"error"===r?a+=`\n------Error Stack Begin------\n${w.format(null==e?void 0:e.stack)}\n-------Error Stack End------- `:("object"==typeof e&&(e=JSON.stringify(e,null,2)),a+=`${e} `)})),a+="\n",t.appendFileSync(e,a)}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(Ct.success,...e)}info(...e){this.handleLog(Ct.info,...e)}error(...e){this.handleLog(Ct.error,...e)}warn(...e){this.handleLog(Ct.warn,...e)}debug(...e){be()&&this.handleLog(Ct.info,...e)}}class dt{constructor(e){this.ctx=e}async install(e,t={},r){const n=[],a=e.map((e=>Lt(this.ctx,e))).filter((e=>this.ctx.pluginLoader.hasPlugin(e.pkgName)?(n.push(e.pkgName),this.ctx.log.success(`PicList 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=>Lt(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=>Lt(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 E,o;let I=[e].concat(t).concat("--color=always").concat("--save");i&&(I=I.concat(`--registry=${i}`)),s&&(I=I.concat(`--proxy=${s}`));try{const e=x("npm",I,{cwd:r,env:Object.assign({},process.env,a)});let t="";null===(E=e.stdout)||void 0===E||E.on("data",(e=>{t+=e})).pipe(process.stdout),null===(o=e.stderr)||void 0===o||o.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(Dt.FAILED,"NPM is not installed")}))}catch(e){this.ctx.log.error(e),this.ctx.emit(Dt.FAILED,e)}}))}}const Lt=(e,t)=>{const r={success:!1,fullName:"",pkgName:""},n=he(t,e.log);if(!n)return r;const a=Be(n,e.log);return a?{success:!0,fullName:n,pkgName:a}:r};class mt{constructor(e){this.list=[],this.fullList=new Set,this.pluginMap=new Map,this.ctx=e,this.init()}init(){const e=D.join(this.ctx.baseDir,"package.json");if(!t.existsSync(e)){const r={name:"picgo-plugins",description:"picgo-plugins",repository:"https://github.com/Kuingsmile/PicList-Core",license:"MIT"};t.writeFileSync(e,JSON.stringify(r),"utf8")}}resolvePlugin(e,t){try{return W(t,{basedir:e.baseDir})}catch(r){return D.join(e.baseDir,"node_modules",t)}}load(){const e=D.join(this.ctx.baseDir,"node_modules/");if(!t.existsSync(e))return!1;const r=D.join(this.ctx.baseDir,"package.json"),a=n(r),i=Object.keys(a.dependencies||{}),s=Object.keys(a.devDependencies||{}),E=i.concat(s).filter((e=>{if(!/^picgo-plugin-|^@[^/]+\/picgo-plugin-/.test(e))return!1;const r=this.resolvePlugin(this.ctx,e);return t.existsSync(r)}));for(const e of E)this.registerPlugin(e);return!0}registerPlugin(e,t){if(e&&"string"==typeof e){this.fullList.add(e);try{if(t){this.list.push(e),At(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),At(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(Dt.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),At(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=D.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 ft=new e,ht=new H.Agent({maxVersion:"TLSv1.2",minVersion:"TLSv1.2",rejectUnauthorized:!1});function Bt(e,t,r){"object"==typeof r&&"value"in r&&"options"in r?e.append(t,r.value,r.options):e.append(t,r)}function Nt(e){return Object.assign(Object.assign({},e),{statusCode:e.status,body:e.data})}function Ut(e){var t,r,n,a,i,s,E;const o={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===(E=null==e?void 0:e.response)||void 0===E?void 0:E.data)||""}};return Promise.reject(o)}class Rt{constructor(e){this.proxy="",this.options={},this.ctx=e,this.init(),ft.on(Tt.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 m(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=$({proxy:{host:this.options.proxy.host,port:this.options.proxy.port}}),this.options.proxy=!1):this.options.httpsAgent=ht;const r=K.create(this.options);r.interceptors.response.use(Nt,Ut);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 m(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=$({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 F;for(const r in e.formData)Bt(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 Ot extends e{constructor(e){super(),this.ctx=e,this.ttfPath=D.join(e.baseDir,"assets","simhei.ttf"),a(D.join(e.baseDir,"imgTemp"));e.getConfig("settings.enableSecondUploader")||!1||s(D.join(e.baseDir,"piclistTemp"))}async downloadTTF(){try{if(a(D.dirname(this.ttfPath)),t.existsSync(this.ttfPath)&&t.statSync(this.ttfPath).size>0)return!0;this.ctx.log.info("Download ttf file.");const e=await K.get("https://release.piclist.cn/simhei.ttf",{responseType:"arraybuffer"});return t.writeFileSync(this.ttfPath,e.data),this.ctx.log.info("Download ttf file successfully."),!0}catch(e){return this.ctx.log.error("Download ttf file failed."),!1}}helpGetOption(e){const t=e.getConfig("buildIn.compress"),r=e.getConfig("buildIn.watermark"),n=e.getConfig("picBed.uploader")||e.getConfig("picBed.current")||"smms";return!e.helper.uploader.get(n)&&t?t.picBed="smms":t&&(t.picBed=n),{compressOptions:t,watermarkOptions:r}}async start(e,t=!1){const r=(e=>({configPath:e.configPath,baseDir:e.baseDir,log:e.log,cmd:e.cmd,output:[],input:[],rawInput:[],processedInput:[],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),uploadReturnCtx:e.uploadReturnCtx.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.");return r.input=e,r.output=[],r.rawInputPath=[],r.rawInput=l(e),t?(r.log.info("Skip process."),r.output=e,await this.doUpload(r),r.input=r.rawInput,await this.afterUpload(r),r):(await this.preprocess(r),await this.beforeTransform(r),await this.doTransform(r),await this.buildInRename(r),await this.beforeUpload(r),r.processedInput=l(r.output),await this.doUpload(r),r.input=r.rawInput,await this.afterUpload(r),r)}catch(e){if(r.log.warn(Dt.FAILED),r.emit(Dt.UPLOAD_PROGRESS,-1),r.emit(Dt.FAILED,e),r.log.error(e),r.getConfig("debug"))throw e;return r}}async preprocess(e){const{compressOptions:r,watermarkOptions:n}=this.helpGetOption(e);if(e.emit(Dt.UPLOAD_PROGRESS,0),e.emit(Dt.BEFORE_TRANSFORM,e),e.log.info("Before transform"),r||n){const a=D.join(e.baseDir,"piclistTemp");await Promise.allSettled(e.input.map((async(i,s)=>{const E=pe(i),o=E?await de(i,e):{success:!1};if(E&&(!o.success||!o.buffer))return;let I,_=!1;e.rawInputPath[s]=i;const S=E?o.extname||"":D.extname(i),l=E?o.buffer:t.readFileSync(i);if(qe(n,S)){if(!(null==n?void 0:n.watermarkFontPath)&&"image"!==(null==n?void 0:n.watermarkType)){await this.downloadTTF()||(this.ctx.log.warn("Download ttf file failed, skip add watermark."),_=!0)}_||(e.log.info("Add watermark to image"),I=await $e(l,n,this.ttfPath,e.log))}if(je(r,S))if(e.log.info("Compress or convert image"),E||".heic"!==S.toLowerCase()&&".heif"!==S.toLowerCase())I=await ke(null!=I?I:l,r,S,e.log);else{const n=await v({buffer:l,format:"JPEG",quality:1}),s=D.join(a,`${D.basename(i,S)}.jpg`);t.writeFileSync(s,Buffer.from(n)),I=await ke(t.readFileSync(s),r,".jpg",e.log)}if(!I&&(null==r?void 0:r.isRemoveExif)&&(e.log.info("Remove exif info."),I=await ze(l,S)),I){let n=(null==r?void 0:r.isConvert)?Ve(r,S):S;n=n.startsWith(".")?n:`.${n}`;const _=E?D.join(a,`${o.fileName?`${D.basename(o.fileName,D.extname(o.fileName))}`:(new Date).getTime()}${n}`):D.join(a,`${D.basename(i,S)}${n}`);e.rawInputPath[s]=D.join(D.dirname(i),E?D.basename(_):`${D.basename(i,S)}${n}`),t.writeFileSync(_,I),e.input[s]=_}})))}else for(const t of e.input)e.rawInputPath.push(t);return e}async buildInRename(e){const t=e.getConfig("buildIn.rename")||{};if(t.enable){const r=t.format||"{filename}";e.output=e.output.map(((t,n)=>{let a=t.fileName;return r&&(a=Ae(e.rawInputPath[n],r,void 0,t.base64Image?t.base64Image:t.buffer),a=a.replace(/\/+/g,"/"),"/"===a.slice(-1)&&(a+=n.toString())),t.fileName=a,t}))}return e}async beforeTransform(e){return await this.handlePlugins(e.helper.beforeTransformPlugins,e),e}async doTransform(e){e.emit(Dt.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(Dt.UPLOAD_PROGRESS,60),e.log.info("Before upload"),e.emit(Dt.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||(e.log.warn(`Can't find uploader - ${t}, switch to default uploader - smms`),t="smms",n="smms",r=e.helper.uploader.get("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(Dt.AFTER_UPLOAD,e),e.emit(Dt.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(Dt.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}}function Mt({path:e,startSlash:t=!1,endSlash:r=!0,rootToEmpty:n=!0}){const a=null==e?void 0:e.replace(/^\/+|\/+$/g,"").replace(/\/{2,}/g,"/");return a?`${t?"/":""}${a}${r?"/":""}`:n?"":"/"}function yt(e){return e.replace(/\/{2,}/g,"/").split("/").map((e=>encodeURIComponent(e))).join("/")}const Gt="advancedplist",bt="alistplist",wt="aliyun",xt="aws-s3-plist",Wt="github",Kt="imgur",Ft="local",Ht="lskyplist",$t="piclist",vt="qiniu",kt="sftpplist",Yt="smms",Vt="tcyun",qt="upyun",jt="webdavplist",zt=(e,t,r,n,a,i,s)=>({method:n.toUpperCase(),url:r,headers:Object.assign(Object.assign({},{contentType:"multipart/form-data","User-Agent":"PicList"}),a),formData:Object.assign({[s]:{value:e,options:{filename:t}}},i),json:!0}),Xt=async e=>{const t=e.getConfig("picBed.advancedplist");if(!t)throw new Error("Can not find advancedplist 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=zt(r,n.fileName,t.endpoint,t.method,JSON.parse(t.headers||"{}"),JSON.parse(t.body||"{}"),t.formDataKey||"file");let i=await e.request(a);i="string"==typeof i?JSON.parse(i):i;let s=i;const E=t.resDataPath||"data.url";for(const e of E.split(".")){if(!s||"object"!=typeof s||!(e in s)){s=void 0;break}s=s[e]}if(!s||"string"!=typeof s)throw e.emit(Dt.NOTIFICATION,{title:e.i18n.translate("UPLOAD_FAILED"),body:i.message}),new Error(i.message);delete n.base64Image,delete n.buffer,t.customPrefix?n.imgUrl=t.customPrefix+s:n.imgUrl=s}return e},Qt=e=>{const t=e.getConfig("picBed.advancedplist")||{};return[{name:"endpoint",type:"input",get prefix(){return e.i18n.translate("PICBED_ADVANCEDPLIST_ENDPOINT")},get alias(){return e.i18n.translate("PICBED_ADVANCEDPLIST_ENDPOINT")},get message(){return e.i18n.translate("PICBED_ADVANCEDPLIST_MESSAGE_ENDPOINT")},default:t.endpoint||"",required:!0},{name:"method",type:"list",choices:["POST","PUT","GET"],get prefix(){return e.i18n.translate("PICBED_ADVANCEDPLIST_METHOD")},get alias(){return e.i18n.translate("PICBED_ADVANCEDPLIST_METHOD")},get message(){return e.i18n.translate("PICBED_ADVANCEDPLIST_MESSAGE_METHOD")},default:t.method||"POST",required:!1},{name:"formDataKey",type:"input",get prefix(){return e.i18n.translate("PICBED_ADVANCEDPLIST_FORM_DATA_KEY")},get alias(){return e.i18n.translate("PICBED_ADVANCEDPLIST_FORM_DATA_KEY")},get message(){return e.i18n.translate("PICBED_ADVANCEDPLIST_MESSAGE_FORM_DATA_KEY")},default:t.formDataKey||"file",required:!1},{name:"headers",type:"input",get prefix(){return e.i18n.translate("PICBED_ADVANCEDPLIST_HEADERS")},get alias(){return e.i18n.translate("PICBED_ADVANCEDPLIST_HEADERS")},get message(){return e.i18n.translate("PICBED_ADVANCEDPLIST_MESSAGE_HEADERS")},default:t.headers||"{}",required:!1},{name:"body",type:"input",get prefix(){return e.i18n.translate("PICBED_ADVANCEDPLIST_BODY")},get alias(){return e.i18n.translate("PICBED_ADVANCEDPLIST_BODY")},get message(){return e.i18n.translate("PICBED_ADVANCEDPLIST_MESSAGE_BODY")},default:t.body||"{}",required:!1},{name:"customPrefix",type:"input",get prefix(){return e.i18n.translate("PICBED_ADVANCEDPLIST_CUSTOM_PREFIX")},get alias(){return e.i18n.translate("PICBED_ADVANCEDPLIST_CUSTOM_PREFIX")},get message(){return e.i18n.translate("PICBED_ADVANCEDPLIST_MESSAGE_CUSTOM_PREFIX")},default:t.customPrefix||"",required:!1},{name:"resDataPath",type:"input",get prefix(){return e.i18n.translate("PICBED_ADVANCEDPLIST_RES_DATA_PATH")},get alias(){return e.i18n.translate("PICBED_ADVANCEDPLIST_RES_DATA_PATH")},get message(){return e.i18n.translate("PICBED_ADVANCEDPLIST_MESSAGE_RES_DATA_PATH")},default:t.resDataPath||"data.url",required:!1}]};const Zt=(e,t,r,n,a)=>({method:"PUT",url:`${e}/api/fs/form`,headers:{contentType:"multipart/form-data","User-Agent":"PicList",Authorization:t,"File-Path":encodeURIComponent(n)},formData:{file:{value:a,options:{filename:r}}},resolveWithFullResponse:!0}),Jt=(e,t)=>{if(200!==t.statusCode||200!==t.body.code||"success"!==t.body.message)throw e.emit(Dt.NOTIFICATION,{title:e.i18n.translate("UPLOAD_FAILED"),body:e.i18n.translate("CHECK_SETTINGS_AND_NETWORK"),text:t.body.message}),new Error(t.body.message)},er=e=>{const{url:t,token:r,username:n,password:a,uploadPath:i,webPath:s,customUrl:E}=e;return{url:(t||"").replace(/\/$/,""),token:r||"",username:n||"",password:a||"",uploadPath:Mt({path:i||"",startSlash:!0,endSlash:!0,rootToEmpty:!1}),webPath:s?Mt({path:s||"",startSlash:!0,endSlash:!0,rootToEmpty:!1}):"",customUrl:(E||"").replace(/\/$/,"")}},tr=async e=>{const t=e.getConfig("picBed.alistplist");if(!t)throw new Error("Can not find alist config!");const{url:r,username:n,password:a,uploadPath:i,webPath:s,customUrl:E}=er(t);let{token:o}=er(t);if(o||(o=await(async(e,t,r,n)=>{const a=e.getConfig("picgo-plugin-buildin-alistplist");if(a&&a.refreshedAt&&Date.now()-a.refreshedAt<36e5&&a.token)return a.token;const i=await K.post(`${t}/api/auth/login`,{username:r,password:n});if(200===i.data.code&&"success"===i.data.message){const t=i.data.data.token;return e.saveConfig({"picgo-plugin-buildin-alistplist":{token:t,refreshedAt:Date.now()}}),t}throw new Error("Get token failed")})(e,r,n,a)),!r||!(o||n&&a))throw new Error("Please check your alist config!");const I=e.output;for(const t of I)if(t.fileName&&t.buffer){let n=t.buffer;!n&&t.base64Image&&(n=Buffer.from(t.base64Image,"base64"));const a=`${i}${t.fileName}`,I=Zt(r,o,t.fileName,a,n),_=await e.request(I);Jt(e,_);const S=`${r}/api/fs/list`,l=`${r}/api/fs/get`,P=await e.request({method:"POST",url:S,headers:{Authorization:o,"Content-Type":"application/json"},body:{password:"",page:1,per_page:1,refresh:!0,path:D.dirname(a)},resolveWithFullResponse:!0});Jt(e,P);const u=await e.request({method:"POST",url:l,headers:{Authorization:o,"Content-Type":"application/json"},body:{password:"",path:a,page:1,per_page:1,refresh:!0},resolveWithFullResponse:!0});Jt(e,u);const c=u.body.data.sign,A=yt(`${s||i}${t.fileName}`);t.imgUrl=`${E||r}${E&&E!==r?"":"/d"}${A}`,t.imgUrl+=E&&E!==r||!c?"":`?sign=${c}`,delete t.base64Image,delete t.buffer}return e},rr=e=>{const t=e.getConfig("picBed.alistplist")||{};return[{name:"url",type:"input",get prefix(){return e.i18n.translate("PICBED_ALIST_URL")},get alias(){return e.i18n.translate("PICBED_ALIST_URL")},get message(){return e.i18n.translate("PICBED_ALIST_MESSAGE_URL")},default:t.url||"",required:!0},{name:"token",type:"input",get prefix(){return e.i18n.translate("PICBED_ALIST_TOKEN")},get alias(){return e.i18n.translate("PICBED_ALIST_TOKEN")},get message(){return e.i18n.translate("PICBED_ALIST_MESSAGE_TOKEN")},default:t.token||"",required:!1},{name:"username",type:"input",get prefix(){return e.i18n.translate("PICBED_ALIST_USERNAME")},get alias(){return e.i18n.translate("PICBED_ALIST_USERNAME")},get message(){return e.i18n.translate("PICBED_ALIST_MESSAGE_USERNAME")},default:t.username||"",required:!1},{name:"password",type:"input",get prefix(){return e.i18n.translate("PICBED_ALIST_PASSWORD")},get alias(){return e.i18n.translate("PICBED_ALIST_PASSWORD")},get message(){return e.i18n.translate("PICBED_ALIST_MESSAGE_PASSWORD")},default:t.password||"",required:!1},{name:"uploadPath",type:"input",get prefix(){return e.i18n.translate("PICBED_ALIST_UPLOAD_PATH")},get alias(){return e.i18n.translate("PICBED_ALIST_UPLOAD_PATH")},get message(){return e.i18n.translate("PICBED_ALIST_MESSAGE_UPLOAD_PATH")},default:t.uploadPath||"",required:!1},{name:"webPath",type:"input",get prefix(){return e.i18n.translate("PICBED_ALIST_WEB_PATH")},get alias(){return e.i18n.translate("PICBED_ALIST_WEB_PATH")},get message(){return e.i18n.translate("PICBED_ALIST_MESSAGE_WEB_PATH")},default:t.webPath||"",required:!1},{name:"customUrl",type:"input",get prefix(){return e.i18n.translate("PICBED_ALIST_CUSTOMURL")},get alias(){return e.i18n.translate("PICBED_ALIST_CUSTOMURL")},get message(){return e.i18n.translate("PICBED_ALIST_MESSAGE_CUSTOMURL")},default:t.customUrl||"",required:!1}]};const nr=()=>(new Date).toUTCString(),ar=(e,t)=>{const r=nr(),n=`PUT\n\n${k(t)||"application/octet-stream"}\n${r}\n/${e.bucket}/${e.path}${t}`,a=B.createHmac("sha1",e.accessKeySecret).update(n).digest("base64");return`OSS ${e.accessKeyId}:${a}`},ir=(e,t,r,n)=>({method:"PUT",url:`https://${e.bucket}.${e.area}.aliyuncs.com/${yt(`${e.path}${t}`)}`,headers:{Host:`${e.bucket}.${e.area}.aliyuncs.com`,Authorization:r,Date:nr(),"Content-Type":k(t)||"application/octet-stream"},body:n,resolveWithFullResponse:!0}),sr=async e=>{const t=e.getConfig("picBed.aliyun");if(!t)throw new Error("Can't find aliYun OSS config");t.path=Mt({path:t.path});try{const r=e.output,n=(t.customUrl||"").replace(/\/$/,""),a=t.path;for(const i of r)if(i.fileName&&i.buffer){const r=ar(t,i.fileName);let s=i.buffer;!s&&i.base64Image&&(s=Buffer.from(i.base64Image,"base64"));const E=ir(t,i.fileName,r,s);if(200!==(await e.request(E)).statusCode)throw new Error("Upload failed");{delete i.base64Image,delete i.buffer;const e=t.options||"";i.imgUrl=n?`${n}/${yt(`${a}${i.fileName}`)}${e}`:`https://${t.bucket}.${t.area}.aliyuncs.com/${yt(`${a}${i.fileName}`)}${e}`}}return e}catch(t){throw e.emit(Dt.NOTIFICATION,{title:e.i18n.translate("UPLOAD_FAILED"),body:e.i18n.translate("CHECK_SETTINGS")}),t}},Er=e=>{const t=e.getConfig("picBed.aliyun")||{};return[{name:"accessKeyId",type:"input",get prefix(){return e.i18n.translate("PICBED_ALICLOUD_ACCESSKEYID")},get alias(){return e.i18n.translate("PICBED_ALICLOUD_ACCESSKEYID")},default:t.accessKeyId||"",required:!0},{name:"accessKeySecret",type:"input",get prefix(){return e.i18n.translate("PICBED_ALICLOUD_ACCESSKEYSECRET")},get alias(){return e.i18n.translate("PICBED_ALICLOUD_ACCESSKEYSECRET")},default:t.accessKeySecret||"",required:!0},{name:"bucket",type:"input",get prefix(){return e.i18n.translate("PICBED_ALICLOUD_BUCKET")},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}]};class or{constructor(e){this.date=new Date,this.info=e}year(){return`${this.date.getFullYear()}`}month(){return(this.date.getMonth()+1).toString().padStart(2,"0")}day(){return this.date.getDate().toString().padStart(2,"0")}fullName(){return this.info.fileName}fileName(){var e,t;return(null!==(e=this.info.fileName)&&void 0!==e?e:"").replace(null!==(t=this.info.extname)&&void 0!==t?t:"","")}extName(){var e;return(null!==(e=this.info.extname)&&void 0!==e?e:"").replace(".","")}md5(){return B.createHash("md5").update(this.imgBuffer()).digest("hex")}md5B64(){return B.createHash("md5").update(this.imgBuffer()).digest("base64").replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/,"")}md5B64Short(){return B.createHash("md5").update(this.imgBuffer()).digest("base64").replace(/\+/g,"-").replace(/\//g,"_").slice(0,7)}sha1(){return B.createHash("sha1").update(this.imgBuffer()).digest("hex")}sha256(){return B.createHash("sha256").update(this.imgBuffer()).digest("hex")}timestamp(){return Math.floor(Date.now()/1e3).toString()}timestampMS(){return Date.now().toString()}imgBuffer(){return this.info.base64Image?this.info.base64Image:this.info.buffer}}function Ir(e,t){if(!t)return e.fileName;const r=new or(e);let n=t;for(const e of or.fields){const t=new RegExp(`{${e}}`,"g");n=n.replace(t,r[e]())}return n}function _r(e,t,r){const n=function(e=""){if(!e)return"";if(!/^https?:\/\//.test(e)){const[t,r]=e.split(":");return`http://${t.replace("127.0.0.1","localhost")}:${r}`}try{const{protocol:t,hostname:r,port:n}=new m(e);return`${t}//${r.replace("127.0.0.1","localhost")}:${n}`}catch(e){return""}}(e);if(!n)return;return new(t?Z:J)({keepAlive:!0,keepAliveMsecs:1e3,scheduling:"lifo",rejectUnauthorized:r,proxy:n})}async function Sr(e,t,r){const n=await j(e.client,new q({Bucket:e.bucketName,Key:e.path,IfMatch:t,VersionId:r}),{expiresIn:3600}),a=new L.URL(n);return a.search="",a.href}or.fields=["year","month","day","fullName","fileName","extName","md5","md5B64","md5B64Short","sha1","sha256","timestamp","timestampMS"];var lr={createS3Client:function(e){var t,r;let n=!0;try{n="https:"===new L.URL(e.endpoint).protocol}catch(e){}const a={};n?a.httpsAgent=_r(e.proxy,!0,null!==(t=e.rejectUnauthorized)&&void 0!==t&&t):a.httpAgent=_r(e.proxy,!1,null!==(r=e.rejectUnauthorized)&&void 0!==r&&r);const i={region:e.region||"auto",endpoint:e.endpoint||void 0,credentials:{accessKeyId:e.accessKeyID,secretAccessKey:e.secretAccessKey},tls:n,forcePathStyle:e.pathStyleAccess,requestHandler:new z(a)};return new Y(i)},createUploadTask:async function(e){if(!e.item.buffer&&!e.item.base64Image)throw new Error("undefined image");try{const{body:t,contentType:r,contentEncoding:n}=await async function(e){var t;const r={};if(e.base64Image){const n=e.base64Image.replace(/^data:[/\w]+;base64,/,"");r.contentType=null===(t=e.base64Image.match(/[^:]\w+\/[\w-+\d.]+(?=;|,)/))||void 0===t?void 0:t[0],r.body=Buffer.from(n,"base64"),r.contentEncoding="base64"}else e.extname&&(r.contentType=Q.getType(e.extname)),r.body=e.buffer;if(!r.contentType){const e=await X.fromBuffer(r.body);r.contentType=null==e?void 0:e.mime}return r}(e.item),a=new V({Bucket:e.bucketName,Key:e.path,ACL:e.acl,Body:t,ContentType:r,ContentEncoding:n}),i=await e.client.send(a);let s;return s=e.urlPrefix?`${e.urlPrefix}/${e.path}`:await Sr(e,i.ETag,i.VersionId),{key:e.path,url:s,imgURL:s,versionId:i.VersionId,eTag:i.ETag}}catch(e){return Promise.reject(e)}}};function Pr(e){return"string"==typeof e?"true"===e.toLowerCase():Boolean(e)}const ur=async e=>{const t=e.getConfig("picBed.aws-s3-plist");if(!t)throw new Error("Can't find aws s3 uploader config");try{const r=Pr(t.disableBucketPrefixToURL);let n=t.urlPrefix;n&&(n=n.replace(/\/?$/,""),t.pathStyleAccess&&!r&&(n+="/"+t.bucketName));const a=lr.createS3Client(t),i=e.output;for(const e of i){const r=await lr.createUploadTask({client:a,bucketName:t.bucketName,path:Ir(e,t.uploadPath),item:e,acl:t.acl||"public-read",urlPrefix:n});delete e.buffer,delete e.base64Image,e.imgUrl=r.imgURL,e.url=r.url}return e}catch(t){throw e.emit(Dt.NOTIFICATION,{title:e.i18n.translate("UPLOAD_FAILED"),body:e.i18n.translate("CHECK_SETTINGS_AND_NETWORK"),text:""}),t}},cr=e=>{let t=e.getConfig("picBed.aws-s3-plist")||{};t=Object.assign(Object.assign({},{accessKeyID:"",secretAccessKey:"",bucketName:"",uploadPath:"{year}/{month}/{md5}.{extName}",pathStyleAccess:!1,rejectUnauthorized:!1,acl:"public-read"}),t);return[{name:"accessKeyID",type:"input",default:t.accessKeyID,required:!0,get prefix(){return e.i18n.translate("PICBED_AWSS3PLIST_ACCESSKEYID")},get alias(){return e.i18n.translate("PICBED_AWSS3PLIST_ACCESSKEYID")},get message(){return e.i18n.translate("PICBED_AWSS3PLIST_MESSAGE_ACCESSKEYID")}},{name:"secretAccessKey",type:"input",default:t.secretAccessKey,required:!0,get prefix(){return e.i18n.translate("PICBED_AWSS3PLIST_SECRET_ACCESSKEY")},get alias(){return e.i18n.translate("PICBED_AWSS3PLIST_SECRET_ACCESSKEY")},get message(){return e.i18n.translate("PICBED_AWSS3PLIST_MESSAGE_SECRET_ACCESSKEY")}},{name:"bucketName",type:"input",default:t.bucketName,required:!0,get prefix(){return e.i18n.translate("PICBED_AWSS3PLIST_BUCKET")},get alias(){return e.i18n.translate("PICBED_AWSS3PLIST_BUCKET")},get message(){return e.i18n.translate("PICBED_AWSS3PLIST_MESSAGE_BUCKET")}},{name:"uploadPath",type:"input",default:t.uploadPath,required:!0,get prefix(){return e.i18n.translate("PICBED_AWSS3PLIST_UPLOADPATH")},get alias(){return e.i18n.translate("PICBED_AWSS3PLIST_UPLOADPATH")},get message(){return e.i18n.translate("PICBED_AWSS3PLIST_MESSAGE_UPLOADPATH")}},{name:"region",type:"input",default:t.region,required:!1,get prefix(){return e.i18n.translate("PICBED_AWSS3PLIST_REGION")},get alias(){return e.i18n.translate("PICBED_AWSS3PLIST_REGION")},get message(){return e.i18n.translate("PICBED_AWSS3PLIST_MESSAGE_REGION")}},{name:"endpoint",type:"input",default:t.endpoint,required:!1,get prefix(){return e.i18n.translate("PICBED_AWSS3PLIST_ENDPOINT")},get alias(){return e.i18n.translate("PICBED_AWSS3PLIST_ENDPOINT")},get message(){return e.i18n.translate("PICBED_AWSS3PLIST_MESSAGE_ENDPOINT")}},{name:"proxy",type:"input",default:t.proxy,required:!1,get prefix(){return e.i18n.translate("PICBED_AWSS3PLIST_PROXY")},get alias(){return e.i18n.translate("PICBED_AWSS3PLIST_PROXY")},get message(){return e.i18n.translate("PICBED_AWSS3PLIST_MESSAGE_PROXY")}},{name:"urlPrefix",type:"input",default:t.urlPrefix,required:!1,get prefix(){return e.i18n.translate("PICBED_AWSS3PLIST_URLPREFIX")},get alias(){return e.i18n.translate("PICBED_AWSS3PLIST_URLPREFIX")},get message(){return e.i18n.translate("PICBED_AWSS3PLIST_MESSAGE_URLPREFIX")}},{name:"pathStyleAccess",type:"confirm",default:t.pathStyleAccess||!1,required:!1,get prefix(){return e.i18n.translate("PICBED_AWSS3PLIST_PATHSTYLEACCESS")},get alias(){return e.i18n.translate("PICBED_AWSS3PLIST_PATHSTYLEACCESS")},get message(){return e.i18n.translate("PICBED_AWSS3PLIST_MESSAGE_PATHSTYLEACCESS")}},{name:"rejectUnauthorized",type:"confirm",default:t.rejectUnauthorized||!1,required:!1,get prefix(){return e.i18n.translate("PICBED_AWSS3PLIST_REJECTUNAUTHORIZED")},get alias(){return e.i18n.translate("PICBED_AWSS3PLIST_REJECTUNAUTHORIZED")},get message(){return e.i18n.translate("PICBED_AWSS3PLIST_MESSAGE_REJECTUNAUTHORIZED")}},{name:"acl",type:"list",default:t.acl||"public-read",choices:["private","public-read","public-read-write","authenticated-read","aws-exec-read","bucket-owner-read","bucket-owner-full-control"],required:!1,get prefix(){return e.i18n.translate("PICBED_AWSS3PLIST_ACL")},get alias(){return e.i18n.translate("PICBED_AWSS3PLIST_ACL")},get message(){return e.i18n.translate("PICBED_AWSS3PLIST_MESSAGE_ACL")}},{name:"disableBucketPrefixToURL",type:"confirm",default:Pr(t.disableBucketPrefixToURL)||!1,required:!1,get prefix(){return e.i18n.translate("PICBED_AWSS3PLIST_DISABLEBUCKETPREFIXTOURL")},get alias(){return e.i18n.translate("PICBED_AWSS3PLIST_DISABLEBUCKETPREFIXTOURL")},get message(){return e.i18n.translate("PICBED_AWSS3PLIST_MESSAGE_DISABLEBUCKETPREFIXTOURL")}}]};function Ar(e,t,r,n=""){return`https://api.github.com/repos/${e}/contents/${yt(`${t}${r}`)}${n}`}const pr=(e,t,r)=>{const{token:n,repo:a}=t,i=k(e)||"application/octet-stream";return{method:"PUT",url:Ar(a,t.path,e),headers:{Authorization:`token ${n}`,"User-Agent":"PicList","Content-Type":i},body:r,json:!0}},Cr=(e,t)=>{const{token:r,repo:n,branch:a}=t;return{method:"GET",url:Ar(n,t.path,e,`?ref=${a}`),headers:{Authorization:`token ${r}`,"User-Agent":"PicList"},json:!0}},Dr=async e=>{const t=e.getConfig("picBed.github");if(!t)throw new Error("Can't find github config");const r=Mt({path:t.path});t.path=r,t.customUrl=(t.customUrl||"").replace(/\/$/,"");try{const n=e.output;for(const a of n)if(a.fileName&&a.buffer){const n=a.base64Image||Buffer.from(a.buffer).toString("base64"),i={message:"Upload by PicList",branch:t.branch,content:n,path:r+encodeURI(a.fileName)},s=pr(a.fileName,t,i);try{const n=await e.request(s);if(!n)throw new Error("Server error, please try again");delete a.base64Image,delete a.buffer,a.imgUrl=t.customUrl?`${t.customUrl}/${yt(`${r}${a.fileName}`)}`:n.content.download_url,a.hash=n.content.sha}catch(n){if(422!==n.statusCode)throw n;delete a.base64Image,delete a.buffer;const i=await e.request(Cr(a.fileName,t));if(!Object.keys(i).length)throw n;a.hash=i.sha,a.imgUrl=t.customUrl?`${t.customUrl}/${yt(`${r}${a.fileName}`)}`:i.download_url}}return e}catch(t){throw e.emit(Dt.NOTIFICATION,{title:e.i18n.translate("UPLOAD_FAILED"),body:e.i18n.translate("CHECK_SETTINGS_AND_NETWORK")}),t}},Tr=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:"input",get prefix(){return e.i18n.translate("PICBED_GITHUB_TOKEN")},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}]};const gr=async(e,t,r,n)=>{const a=t.clientId||"",i=t.username||"",s=(e=>e?e.startsWith("Bearer")?e:`Bearer ${e}`:"")(t.accessToken||""),E=t.album||"";let o;if(i&&s)o=s;else{if(!a)throw new Error("clientId or accessToken is required");o=`Client-ID ${a}`}const I={method:"POST",url:"https://api.imgur.com/3/image",headers:{Authorization:o,"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&&E){let r,n=0,a="";do{const s={method:"GET",url:`https://api.imgur.com/3/account/${i}/albums/${n}`,headers:{Authorization:o},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 I=r.body.data;for(const e of I)if(e.title===E){a=e.id;break}n++}while(r.body.data.length>0);a&&I.formData&&(I.formData.album=a)}return t.proxy&&(I.proxy=t.proxy),I},dr=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 gr(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(Dt.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}},Lr=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 mr=async e=>{var r;const n=e.getConfig("picBed.local");if(!n)throw new Error("Can not find local config!");const i=n.path||"",s=(n.customUrl||"").replace(/\/$/,""),E=Mt({path:null===(r=n.webPath)||void 0===r?void 0:r.replace(/\\/g,"/")}),o=e.output;for(const r of o)if(r.fileName&&r.buffer){let n=r.buffer;!n&&r.base64Image&&(n=Buffer.from(r.base64Image,"base64"));try{const o=D.join(e.baseDir,"imgTemp","local"),I=D.join(o,r.fileName),_=D.join(i,r.fileName);a(D.dirname(_)),a(D.dirname(I)),t.writeFileSync(_,n),t.copyFileSync(_,I),delete r.base64Image,delete r.buffer,r.imgUrl=s?`${s}/${yt(`${E}${r.fileName}`)}`:D.join(i,r.fileName),r.hash=D.join(i,r.fileName),r.galleryPath=`http://localhost:36699/local/${yt(r.fileName).replace(/^\//,"")}`}catch(t){throw e.emit(Dt.NOTIFICATION,{title:e.i18n.translate("UPLOAD_FAILED"),body:"failed to upload image"}),new Error("failed to upload image")}}return e},fr=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 prefix(){return e.i18n.translate("PICBED_LOCAL_WEBPATH")},get alias(){return e.i18n.translate("PICBED_LOCAL_WEBPATH")},default:t.webPath||"",required:!1,get message(){return e.i18n.translate("PICBED_LOCAL_MESSAGE_WEBPATH")}}]};const hr=(e,t,r)=>{let n=e.host;n=n.replace(/\/$/,"");const a="V2"===e.version,i=e.token,s={"Content-Type":"multipart/form-data","User-Agent":"PicList",Connection:"keep-alive",token:i||void 0},E={image:{value:r,options:{filename:t}},ssl:"true"},o={"Content-Type":"multipart/form-data","User-Agent":"PicList",Connection:"keep-alive",Accept:"application/json",Authorization:i||void 0},I=e.strategyId,_=e.albumId;let S=e.permission.value;void 0===S&&(S=e.permission);const l={file:{value:r,options:{filename:t}},ssl:"true",strategy_id:I,album_id:_,permission:S};I||delete l.strategy_id,_||delete l.album_id,0!==S&&1!==S&&delete l.permission;return{method:"POST",url:a?`${n}/api/v1/upload`:`${n}/api/upload`,agent:new H.Agent({rejectUnauthorized:!1}),headers:a?o:s,formData:a?l:E}},Br=async e=>{const t=e.getConfig("picBed.lskyplist");if(!t)throw new Error("Can't find lsky uploader config");const r=e.output;for(const n of r){let r=n.buffer;!r&&n.base64Image&&(r=Buffer.from(n.base64Image,"base64"));const a=hr(t,n.fileName,r);let i=await e.request(a);i="string"==typeof i?JSON.parse(i):i;const s="V2"===t.version;if(!(s?!0===i.status:200===i.code))throw e.emit(Dt.NOTIFICATION,{title:"upload failed",body:i.message}),new Error(i.message);delete n.base64Image,delete n.buffer,n.imgUrl=s?i.data.links.url:i.data.url,s&&(n.hash=i.data.key)}return e},Nr=e=>{const t=e.getConfig("picBed.lskyplist")||{};return[{name:"version",type:"list",default:t.version||"V1",get prefix(){return e.i18n.translate("PICBED_LSKY_VERSION")},get alias(){return e.i18n.translate("PICBED_LSKY_VERSION")},get message(){return e.i18n.translate("PICBED_LSKY_MESSAGE_VERSION")},choices:["V1","V2"],required:!0},{name:"host",type:"input",get prefix(){return e.i18n.translate("PICBED_LSKY_HOST")},get alias(){return e.i18n.translate("PICBED_LSKY_HOST")},get message(){return e.i18n.translate("PICBED_LSKY_MESSAGE_HOST")},default:t.host||"",required:!0},{name:"token",type:"input",get prefix(){return e.i18n.translate("PICBED_LSKY_TOKEN")},get alias(){return e.i18n.translate("PICBED_LSKY_TOKEN")},get message(){return e.i18n.translate("PICBED_LSKY_MESSAGE_TOKEN")},default:t.token,required:!0},{name:"strategyId",type:"input",default:t.strategyId,required:!1,get prefix(){return e.i18n.translate("PICBED_LSKY_STRATEGY_ID")},get alias(){return e.i18n.translate("PICBED_LSKY_STRATEGY_ID")},get message(){return e.i18n.translate("PICBED_LSKY_MESSAGE_STRATEGY_ID")}},{name:"albumId",type:"input",default:t.albumId,required:!1,get prefix(){return e.i18n.translate("PICBED_LSKY_ALBUM_ID")},get alias(){return e.i18n.translate("PICBED_LSKY_ALBUM_ID")},get message(){return e.i18n.translate("PICBED_LSKY_MESSAGE_ALBUM_ID")}},{name:"permission",type:"list",default:t.permission||"private(default)",choices:[{name:"private(default)",value:0},{name:"public",value:1}],required:!1,get prefix(){return e.i18n.translate("PICBED_LSKY_PERMISSION")},get alias(){return e.i18n.translate("PICBED_LSKY_PERMISSION")},get message(){return e.i18n.translate("PICBED_LSKY_MESSAGE_PERMISSION")}}]};const Ur=(e,t,r)=>{const{host:n="127.0.0.1",port:a="",picbed:i="",configName:s="Default",serverKey:E=""}=e,o=n.match(/(\d+)\.(\d+)\.(\d+)\.(\d+)/),I=n.startsWith("https://")?"https://":"http://",_=n.replace(/(http:\/\/|https:\/\/)/,"");return{method:"POST",url:`${o?`${I}${_}:${a||"36677"}`:`${I}${_}${a?`:${a}`:""}`}/upload?configName=${s}${i?`&picbed=${i}`:""}${E?`&key=${E}`:""}`,headers:{"content-type":"multipart/form-data"},formData:{file:{value:r,options:{filename:t,contentType:k(t)}}},resolveWithFullResponse:!0}},Rr=async e=>{var t;const r=e.getConfig("picBed.piclist");if(!r)throw new Error("Can't find PicList config");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=Ur(r,a.fileName,n),s=await e.request(i).then((e=>e)).catch((t=>({statusCode:400,body:{msg:e.i18n.translate("AUTH_FAILED"),err:t}})));if(200!==s.statusCode||!(null===(t=s.body)||void 0===t?void 0:t.success))throw new Error(s.body.message);delete a.base64Image,delete a.buffer,a.imgUrl=s.body.result[0],a.fullResult=s.body.fullResult?s.body.fullResult[0]:""}return e}catch(t){throw e.emit(Dt.NOTIFICATION,{title:e.i18n.translate("UPLOAD_FAILED"),body:e.i18n.translate("CHECK_SETTINGS")}),t}},Or=e=>{const t=e.getConfig("picBed.piclist")||{};return[{name:"host",type:"input",get prefix(){return e.i18n.translate("PICBED_PICLIST_HOST")},get alias(){return e.i18n.translate("PICBED_PICLIST_HOST")},default:t.host||"127.0.0.1",required:!0},{name:"port",type:"input",get prefix(){return e.i18n.translate("PICBED_PICLIST_PORT")},get alias(){return e.i18n.translate("PICBED_PICLIST_PORT")},default:t.port||36677,required:!1},{name:"picbed",type:"input",get prefix(){return e.i18n.translate("PICBED_PICLIST_PICBED")},get alias(){return e.i18n.translate("PICBED_PICLIST_PICBED")},default:t.picbed||"",required:!1},{name:"configName",type:"input",get prefix(){return e.i18n.translate("PICBED_PICLIST_CONFIGNAME")},get alias(){return e.i18n.translate("PICBED_PICLIST_CONFIGNAME")},default:t.configName||"",required:!1},{name:"serverKey",type:"input",get prefix(){return e.i18n.translate("PICBED_PICLIST_KEY")},get alias(){return e.i18n.translate("PICBED_PICLIST_KEY")},default:t.serverKey||"",required:!1}]};function Mr(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":k(t)||"application/octet-stream"},body:n}}function yr(e){const t=e.accessKey,r=e.secretKey,n=new ee.auth.digest.Mac(t,r),a={scope:e.bucket};return new ee.rs.PutPolicy(a).uploadToken(n)}const Gr=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=Mr(t,n.fileName,yr(t),r),i=await e.request(a),s=JSON.parse(i);if(!(null==s?void 0:s.key))throw e.emit(Dt.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(Dt.NOTIFICATION,{title:e.i18n.translate("UPLOAD_FAILED"),body:r.error})}throw t}},br=e=>{const t=e.getConfig("picBed.qiniu")||{};return[{name:"accessKey",type:"input",get prefix(){return e.i18n.translate("PICBED_QINIU_ACCESSKEY")},get alias(){return e.i18n.translate("PICBED_QINIU_ACCESSKEY")},default:t.accessKey||"",required:!0},{name:"secretKey",type:"input",get prefix(){return e.i18n.translate("PICBED_QINIU_SECRETKEY")},get alias(){return e.i18n.translate("PICBED_QINIU_SECRETKEY")},default:t.secretKey||"",required:!0},{name:"bucket",type:"input",get prefix(){return e.i18n.translate("PICBED_QINIU_BUCKET")},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}]};class wr{constructor(){this.client=new te,this.isConnected=!1}static getInstance(){return wr.instance||(wr.instance=new wr),wr.instance}static changeWinStylePathToUnix(e){return e.replace(/\\/g,"/")}async connect(e){const{host:t,port:r,username:n,password:a,privateKey:i,passphrase:s}=e,E=i?{username:n,privateKeyPath:i,passphrase:s||void 0}:{username:n,password:a};try{await this.client.connect(Object.assign({host:t,port:Number(r)||22},E)),this.isConnected=!0}catch(e){throw new Error(e)}}async upload(e,t,r){if(!this.isConnected)throw new Error("SSH client is not connected");try{t=wr.changeWinStylePathToUnix(t),await this.mkdir(D.dirname(t).replace(/^\/+|\/+$/g,""),r),await this.client.putFile(e,t);const n=r.fileMode||"0644";"0644"!==n&&await this.exec(`chmod ${n} "${t}"`)}catch(e){throw new Error(e)}}async mkdir(e,t){if(!this.client.isConnected())throw new Error("sftp client is not connected");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=`cd / && mkdir -p "${e}"`;await this.exec(t)}}async chown(e,t,r){e=wr.changeWinStylePathToUnix(e);const[n,a]=r?[t,r]:t.includes(":")?t.split(":"):[t,t];await this.exec(`chown ${n}:${a} "${e}"`)}async exec(e){return 0===(await this.client.execCommand(e)).code}close(){this.client.dispose(),this.isConnected=!1}}const xr=async e=>{const r=e.getConfig("picBed.sftpplist");if(!r)throw new Error("Can not find sftpplist config!");r.port=Number(r.port)||22,(r.port<0||r.port>65535)&&(r.port=22),r.uploadPath=Mt({path:r.uploadPath,rootToEmpty:!1});const n=Mt({path:r.webPath,rootToEmpty:!1});try{const i=e.output;for(const s of i)if(s.fileName&&s.buffer){let i=s.buffer;!i&&s.base64Image&&(i=Buffer.from(s.base64Image,"base64"));const I=D.join(e.baseDir,"uploadTemp"),_=D.join(e.baseDir,"imgTemp","sftpplist");a(_);const S=D.join(I,s.fileName);a(D.dirname(S)),t.writeFileSync(S,i);const l=wr.getInstance();await l.connect(r);const P=D.join(`/${r.uploadPath}`.replace(/\/\/+/g,"/"),s.fileName);await l.upload(S,P,r),r.fileUser&&await l.chown(P,r.fileUser),delete s.base64Image,delete s.buffer;const u=r.customUrl||r.host;r.webPath?s.imgUrl=`${u}/${yt(`${"/"===n?"":n}${s.fileName}`)}`:s.imgUrl=`${u}/${yt(`${"/"===r.uploadPath?"":r.uploadPath}${s.fileName}`)}`;const c=D.join(_,s.fileName);a(D.dirname(c)),E(c),o(S,D.join(_,s.fileName)),s.galleryPath=`http://localhost:36699/sftpplist/${encodeURIComponent(s.fileName)}`,l.close()}return e}catch(t){throw e.emit(Dt.NOTIFICATION,{title:e.i18n.translate("UPLOAD_FAILED"),body:e.i18n.translate("CHECK_SETTINGS")}),t}},Wr=e=>{const t=e.getConfig("picBed.sftpplist")||{};return[{name:"host",type:"input",get prefix(){return e.i18n.translate("PICBED_SFTPPLIST_HOST")},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 prefix(){return e.i18n.translate("PICBED_SFTPPLIST_PORT")},get alias(){return e.i18n.translate("PICBED_SFTPPLIST_PORT")},get message(){return e.i18n.translate("PICBED_SFTPPLIST_MESSAGE_PORT")},default:t.port||22,required:!1},{name:"username",type:"input",get prefix(){return e.i18n.translate("PICBED_SFTPPLIST_USERNAME")},get alias(){return e.i18n.translate("PICBED_SFTPPLIST_USERNAME")},default:t.username||"",required:!0},{name:"password",type:"input",get prefix(){return e.i18n.translate("PICBED_SFTPPLIST_PASSWORD")},get alias(){return e.i18n.translate("PICBED_SFTPPLIST_PASSWORD")},default:t.password||"",required:!1},{name:"privateKey",type:"input",get prefix(){return e.i18n.translate("PICBED_SFTPPLIST_PRIVATEKEY")},get alias(){return e.i18n.translate("PICBED_SFTPPLIST_PRIVATEKEY")},get message(){return e.i18n.translate("PICBED_SFTPPLIST_MESSAGE_PRIVATEKEY")},default:t.privateKey||"",required:!1},{name:"passphrase",type:"input",get prefix(){return e.i18n.translate("PICBED_SFTPPLIST_PRIVATEKEY_PASSPHRASE")},get alias(){return e.i18n.translate("PICBED_SFTPPLIST_PRIVATEKEY_PASSPHRASE")},get message(){return e.i18n.translate("PICBED_SFTPPLIST_MESSAGE_PRIVATEKEY_PASSPHRASE")},default:t.passphrase||"",required:!1},{name:"uploadPath",type:"input",get prefix(){return e.i18n.translate("PICBED_SFTPPLIST_UPLOADPATH")},get alias(){return e.i18n.translate("PICBED_SFTPPLIST_UPLOADPATH")},get message(){return e.i18n.translate("PICBED_SFTPPLIST_MESSAGE_UPLOADPATH")},default:t.uploadPath||"",required:!1},{name:"customUrl",type:"input",get prefix(){return e.i18n.translate("PICBED_SFTPPLIST_CUSTOMURL")},get alias(){return e.i18n.translate("PICBED_SFTPPLIST_CUSTOMURL")},get message(){return e.i18n.translate("PICBED_SFTPPLIST_MESSAGE_CUSTOMURL")},default:t.customUrl||"",required:!1},{name:"webPath",type:"input",get prefix(){return e.i18n.translate("PICBED_SFTPPLIST_WEBSITE_PATH")},get alias(){return e.i18n.translate("PICBED_SFTPPLIST_WEBSITE_PATH")},get message(){return e.i18n.translate("PICBED_SFTPPLIST_MESSAGE_WEBSITE_PATH")},default:t.webPath||"",required:!1},{name:"fileUser",type:"input",get prefix(){return e.i18n.translate("PICBED_SFTPPLIST_FILE_USER")},get alias(){return e.i18n.translate("PICBED_SFTPPLIST_FILE_USER")},get message(){return e.i18n.translate("PICBED_SFTPPLIST_MESSAGE_FILE_USER")},default:t.fileUser||"",required:!1},{name:"fileMode",type:"input",get prefix(){return e.i18n.translate("PICBED_SFTPPLIST_FILE_MODE")},get alias(){return e.i18n.translate("PICBED_SFTPPLIST_FILE_MODE")},get message(){return e.i18n.translate("PICBED_SFTPPLIST_MESSAGE_FILE_MODE")},default:t.fileMode||"",required:!1},{name:"dirMode",type:"input",get prefix(){return e.i18n.translate("PICBED_SFTPPLIST_DIR_MODE")},get alias(){return e.i18n.translate("PICBED_SFTPPLIST_DIR_MODE")},get message(){return e.i18n.translate("PICBED_SFTPPLIST_MESSAGE_DIR_MODE")},default:t.dirMode||"",required:!1}]};const Kr=(e,t,r,n="")=>{let a=n||"sm.ms";return a=a.replace(/^https?:\/\//,"").replace(/\/$/,""),{method:"POST",url:`https://${a}/api/v2/upload`,headers:{contentType:"multipart/form-data","User-Agent":"PicList",Authorization:r},formData:{smfile:{value:t,options:{filename:e}},ssl:"true"}}},Fr=async e=>{const t=e.getConfig("picBed.smms");if(!t)throw new Error("Can not find smms config!");if(!t.token||""===t.token.trim())throw new Error("SM.MS token is required!");const r=e.output;for(const n of r){if(!n.fileName)continue;let r=n.buffer;if(!r&&n.base64Image&&(r=Buffer.from(n.base64Image,"base64")),!r)continue;const a=Kr(n.fileName,r,t.token,t.backupDomain),i=await e.request(a),s=JSON.parse(i);if("success"===s.code)delete n.base64Image,delete n.buffer,n.imgUrl=s.data.url,n.hash=s.data.hash;else{if("image_repeated"!==s.code||"string"!=typeof s.images)throw e.emit(Dt.NOTIFICATION,{title:e.i18n.translate("UPLOAD_FAILED"),body:s.message}),new Error(s.message);{delete n.base64Image,delete n.buffer,n.imgUrl=s.images;const e=await K.get("https://sm.ms/api/v2/upload_history",{headers:{Authorization:t.token}});if("success"===e.data.code){const t=e.data.data;for(const e of t)if(e.url===s.images){n.hash=e.hash;break}}}}}return e},Hr=e=>{const t=e.getConfig("picBed.smms")||{};return[{name:"token",type:"input",get prefix(){return e.i18n.translate("PICBED_SMMS_TOKEN")},get alias(){return e.i18n.translate("PICBED_SMMS_TOKEN")},get message(){return e.i18n.translate("PICBED_SMMS_MESSAGE_TOKEN")},default:t.token||"",required:!0},{name:"backupDomain",type:"input",get prefix(){return e.i18n.translate("PICBED_SMMS_BACKUP_DOMAIN")},get alias(){return e.i18n.translate("PICBED_SMMS_BACKUP_DOMAIN")},get message(){return e.i18n.translate("PICBED_SMMS_MESSAGE_BACKUP_DOMAIN")},default:t.backupDomain||"",required:!1}]};const $r=(e,t)=>{const r=e.secretId,n=e.secretKey,a=e.appId,i=e.bucket;let s,E="";if(e.version&&"v4"!==e.version){const r=Math.floor((new Date).getTime()/1e3);E=`${r};${r+86400}`;const a=B.createHmac("sha1",n).update(E).digest("hex"),i=e.endpoint?e.endpoint:`cos.${e.area}.myqcloud.com`,o=`put\n/${e.path}${t}\n\nhost=${e.bucket}.${i}\n`,I=`sha1\n${E}\n${B.createHash("sha1").update(o).digest("hex")}\n`;s=B.createHmac("sha1",a).update(I).digest("hex")}else{const e=Math.floor(1e10*Math.random()),t=Math.floor((new Date).getTime()/1e3)-1,E=`a=${a}&b=${i}&k=${r}&e=${t+3600}&t=${t}&r=${e}&f=`,o=B.createHmac("sha1",n).update(E).digest(),I=Buffer.concat([o,Buffer.from(E)]);s=Buffer.from(I).toString("base64")}return{signature:s,appId:a,bucket:i,signTime:E}},vr=(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}/${yt(`${s}${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:k(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}},kr=async e=>{var t,r,n;const a=e.getConfig("picBed.tcyun");if(!a)throw new Error("Can't find tencent COS config");try{const i=e.output,s=(a.customUrl||"").replace(/\/$/,""),E=Mt({path:a.path});a.path=E;const o=!a.version||"v4"===a.version;for(const I of i)if(I.fileName&&I.buffer){const i=$r(a,I.fileName);if(!i)return!1;let _=I.buffer;!_&&I.base64Image&&(_=Buffer.from(I.base64Image,"base64"));const S=vr(a,I.fileName,i,_,e.GUI_VERSION||e.VERSION),l=await e.request(S).then((e=>e)).catch((t=>({statusCode:400,body:{msg:e.i18n.translate("AUTH_FAILED"),err:t}})));let P;if(P=o&&"string"==typeof l?JSON.parse(l):l,400===P.statusCode)throw(null===(t=null==P?void 0:P.body)||void 0===t?void 0:t.err)?P.body.err:new Error((null===(r=null==P?void 0:P.body)||void 0===r?void 0:r.msg)||(null===(n=null==P?void 0:P.body)||void 0===n?void 0:n.message));const u=a.options||"",c=void 0!==a.slim&&!!a.slim;if(o&&"SUCCESS"===P.message)delete I.base64Image,delete I.buffer,I.imgUrl=s?`${s}/${yt(`${E}${I.fileName}`)}${u}`:`${P.data.source_url}${u}`;else{if(o||!P||200!==P.statusCode)throw new Error(l.body.msg);if(delete I.base64Image,delete I.buffer,s)I.imgUrl=`${s}/${yt(`${E}${I.fileName}`)}${u}`;else{const e=a.endpoint?a.endpoint:`cos.${a.area}.myqcloud.com`;I.imgUrl=`https://${a.bucket}.${e}/${yt(`${E}${I.fileName}`)}${u}`}}c&&(I.imgUrl+=u?"&imageSlim":"?imageSlim")}return e}catch(t){if(!a.version||"v4"===a.version)try{const r=JSON.parse(t.error);e.emit(Dt.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}},Yr=e=>{const t=e.getConfig("picBed.tcyun")||{};return[{name:"version",type:"list",get prefix(){return e.i18n.translate("PICBED_TENCENTCLOUD_VERSION")},alias:e.i18n.translate("PICBED_TENCENTCLOUD_VERSION"),choices:["v4","v5"],default:"v5",required:!1},{name:"secretId",type:"input",get prefix(){return e.i18n.translate("PICBED_TENCENTCLOUD_SECRETID")},get alias(){return e.i18n.translate("PICBED_TENCENTCLOUD_SECRETID")},default:t.secretId||"",required:!0},{name:"secretKey",type:"input",get prefix(){return e.i18n.translate("PICBED_TENCENTCLOUD_SECRETKEY")},get alias(){return e.i18n.translate("PICBED_TENCENTCLOUD_SECRETKEY")},default:t.secretKey||"",required:!0},{name:"bucket",type:"input",get prefix(){return e.i18n.translate("PICBED_TENCENTCLOUD_BUCKET")},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 Vr=(e,t)=>{const r=e.path||"",n=e.operator,a=jr(e.password),i=(new Date).toUTCString(),s=`PUT&${`/${e.bucket}/${yt(`${r}${t}`)}`}&${i}`;return`UPYUN ${n}:${B.createHmac("sha1",a).update(s).digest("base64")}`},qr=(e,t,r,n)=>{const a=e.bucket,i=e.path;let s=(e.endpoint||"https://v0.api.upyun.com").replace(/\/+$/g,"");return s.startsWith("http")||(s=`https://${s}`),{method:"PUT",url:`${s}/${a}/${yt(`${i}${t}`)}`,headers:{Authorization:r,Date:(new Date).toUTCString(),"Content-Type":k(t)||"application/octet-stream"},body:n,resolveWithFullResponse:!0}};function jr(e){return B.createHash("md5").update(e).digest("hex")}const zr=(e,t,r,n)=>{const a=`/${r.path||""}${n}`.replace(/%2F/g,"/").replace(/^\/+/g,"/"),i=Math.round((new Date).getTime()/1e3),s=t?i+parseInt(t.toString(),10):i+1800;return`_upt=${`${jr(`${e}&${s}&${a}`).substring(12,20)}${s}`}`},Xr=async e=>{const t=e.getConfig("picBed.upyun");if(!t)throw new Error("Can't find upYun config");try{const r=e.output,n=Mt({path:t.path});t.path=n;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=Vr(t,a.fileName),s=qr(t,a.fileName,i,r),E=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}/${yt(`${n}${a.fileName}`)}${E}`,t.antiLeechToken){const e=zr(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(Dt.NOTIFICATION,{title:e.i18n.translate("UPLOAD_FAILED"),body:e.i18n.translate("CHECK_SETTINGS")});else{const r=ye(t.error);e.emit(Dt.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}},Qr=e=>{const t=e.getConfig("picBed.upyun")||{};return[{name:"bucket",type:"input",get prefix(){return e.i18n.translate("PICBED_UPYUN_BUCKET")},get alias(){return e.i18n.translate("PICBED_UPYUN_BUCKET")},default:t.bucket||"",required:!0},{name:"operator",type:"input",get prefix(){return e.i18n.translate("PICBED_UPYUN_OPERATOR")},get alias(){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:"input",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 prefix(){return e.i18n.translate("PICBED_UPYUN_URL")},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},{name:"endpoint",type:"input",get prefix(){return e.i18n.translate("PICBED_UPYUN_ENDPOINT")},get alias(){return e.i18n.translate("PICBED_UPYUN_ENDPOINT")},get message(){return e.i18n.translate("PICBED_UPYUN_MESSAGE_ENDPOINT")},default:t.endpoint||"https://v0.api.upyun.com",required:!1}]};const Zr=async e=>{const r=e.getConfig("picBed.webdavplist");if(!r)throw new Error("Can't find webdavplist config");r.host=r.host.replace(/^https?:\/\/|\/+$/g,""),r.host=(r.sslEnabled?"https://":"http://")+r.host,r.path=Mt({path:r.path,rootToEmpty:!1});const n=r.authType||"basic",i=Mt({path:r.webpath,rootToEmpty:!1}),s=r.options||"";try{const E=e.output,o=r.customUrl,I=r.path;for(const _ of E)if(_.fileName&&_.buffer){let E=_.buffer;!E&&_.base64Image&&(E=Buffer.from(_.base64Image,"base64"));const S={username:r.username,password:r.password,maxBodyLength:4294967296,maxContentLength:4294967296};"digest"===n&&(S.authType=re.Digest);const l=ne(r.host,S),P=D.dirname(`${I}${_.fileName}`),u="/"===P?"":P;u&&await l.createDirectory(u,{recursive:!0});if(!await l.putFileContents(`${I}${_.fileName}`.replace(/^\/+|\/+$/g,""),E,{overwrite:!0}))throw new Error("Upload failed");{const n=D.join(e.baseDir,"imgTemp","webdavplist"),S=D.join(n,_.fileName);a(D.dirname(S)),t.writeFileSync(S,E),delete _.base64Image,delete _.buffer;const l=o||r.host;r.webpath?_.imgUrl=`${l}/${yt(`${i}${_.fileName}`).replace(/^\/+/g,"")}${s}`:_.imgUrl=`${l}/${yt(`${I}${_.fileName}`).replace(/^\/+/g,"")}${s}`,_.galleryPath=`http://localhost:36699/webdavplist/${encodeURIComponent(_.fileName)}`}}return e}catch(t){throw e.emit(Dt.NOTIFICATION,{title:e.i18n.translate("UPLOAD_FAILED"),body:e.i18n.translate("CHECK_SETTINGS")}),t}},Jr=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 prefix(){return e.i18n.translate("PICBED_WEBDAVPLIST_SSLENABLED")},get alias(){return e.i18n.translate("PICBED_WEBDAVPLIST_SSLENABLED")},required:!1,default:null!==(t=r.sslEnabled)&&void 0!==t&&t,get message(){return e.i18n.translate("PICBED_WEBDAVPLIST_MESSAGE_SSLENABLED")}},{name:"username",type:"input",get prefix(){return e.i18n.translate("PICBED_WEBDAVPLIST_USERNAME")},get alias(){return e.i18n.translate("PICBED_WEBDAVPLIST_USERNAME")},default:r.username||"",required:!0,get message(){return e.i18n.translate("PICBED_WEBDAVPLIST_MESSAGE_USERNAME")}},{name:"password",type:"input",get prefix(){return e.i18n.translate("PICBED_WEBDAVPLIST_PASSWORD")},get alias(){return e.i18n.translate("PICBED_WEBDAVPLIST_PASSWORD")},default:r.password||"",required:!0,get message(){return e.i18n.translate("PICBED_WEBDAVPLIST_MESSAGE_PASSWORD")}},{name:"path",type:"input",get prefix(){return e.i18n.translate("PICBED_WEBDAVPLIST_PATH")},get alias(){return e.i18n.translate("PICBED_WEBDAVPLIST_PATH")},default:r.path||"",required:!1,get message(){return e.i18n.translate("PICBED_WEBDAVPLIST_MESSAGE_PATH")}},{name:"webpath",type:"input",get prefix(){return e.i18n.translate("PICBED_WEBDAVPLIST_WEBSITE_PATH")},get alias(){return e.i18n.translate("PICBED_WEBDAVPLIST_WEBSITE_PATH")},default:r.path||"",required:!1,get message(){return e.i18n.translate("PICBED_WEBDAVPLIST_MESSAGE_WEBSITE_PATH")}},{name:"customUrl",type:"input",get prefix(){return e.i18n.translate("PICBED_WEBDAVPLIST_CUSTOMURL")},get alias(){return e.i18n.translate("PICBED_WEBDAVPLIST_CUSTOMURL")},default:r.customUrl||"",required:!1,get message(){return e.i18n.translate("PICBED_WEBDAVPLIST_MESSAGE_CUSTOMURL")}},{name:"authType",type:"list",get prefix(){return e.i18n.translate("PICBED_WEBDAVPLIST_AUTHTYPE")},get alias(){return e.i18n.translate("PICBED_WEBDAVPLIST_AUTHTYPE")},choices:["basic","digest"],default:r.authType||"basic",required:!1},{name:"options",type:"input",get prefix(){return e.i18n.translate("PICBED_WEBDAVPLIST_OPTIONS")},get alias(){return e.i18n.translate("PICBED_WEBDAVPLIST_OPTIONS")},get message(){return e.i18n.translate("PICBED_WEBDAVPLIST_MESSAGE_OPTIONS")},default:r.options||"",required:!1}]};const en=()=>({register(e){!function(e){e.helper.uploader.register(Gt,{get name(){return e.i18n.translate("PICBED_ADVANCEDPLIST")},handle:Xt,config:Qt})}(e),function(e){e.helper.uploader.register(bt,{get name(){return e.i18n.translate("PICBED_ALIST_PLIST")},handle:tr,config:rr})}(e),function(e){e.helper.uploader.register(wt,{get name(){return e.i18n.translate("PICBED_ALICLOUD")},handle:sr,config:Er})}(e),function(e){e.helper.uploader.register(xt,{get name(){return e.i18n.translate("PICBED_AWSS3PLIST")},handle:ur,config:cr})}(e),function(e){e.helper.uploader.register(Wt,{get name(){return e.i18n.translate("PICBED_GITHUB")},handle:Dr,config:Tr})}(e),function(e){e.helper.uploader.register(Kt,{get name(){return e.i18n.translate("PICBED_IMGUR")},handle:dr,config:Lr})}(e),function(e){e.helper.uploader.register(Ft,{get name(){return e.i18n.translate("PICBED_LOCAL")},handle:mr,config:fr})}(e),function(e){e.helper.uploader.register(Ht,{get name(){return e.i18n.translate("PICBED_LSKY_PLIST")},handle:Br,config:Nr})}(e),function(e){e.helper.uploader.register($t,{get name(){return e.i18n.translate("PICBED_PICLIST")},handle:Rr,config:Or})}(e),function(e){e.helper.uploader.register(vt,{get name(){return e.i18n.translate("PICBED_QINIU")},handle:Gr,config:br})}(e),function(e){e.helper.uploader.register(kt,{get name(){return e.i18n.translate("PICBED_SFTPPLIST")},handle:xr,config:Wr})}(e),function(e){e.helper.uploader.register(Yt,{get name(){return e.i18n.translate("PICBED_SMMS")},handle:Fr,config:Hr})}(e),function(e){e.helper.uploader.register(Vt,{get name(){return e.i18n.translate("PICBED_TENCENTCLOUD")},handle:kr,config:Yr})}(e),function(e){e.helper.uploader.register(qt,{get name(){return e.i18n.translate("PICBED_UPYUN")},handle:Xr,config:Qr})}(e),function(e){e.helper.uploader.register(jt,{get name(){return e.i18n.translate("PICBED_WEBDAVPLIST")},handle:Zr,config:Jr})}(e)}}),tn=(e,t,r)=>{const n=Te(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 rn={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:""}:pe(r)?await de(r,e):await ge(r),a.success&&a.buffer){const i=tn(e,a.buffer,r),s=a.extname||i.extname||".png";t[n]={buffer:a.buffer,fileName:a.fileName||`${b().format("YYYYMMDDHHmmssSSS")}${s}`,width:i.width,height:i.height,extname:a.extname}}else e.log.error(a.reason)}))),e.output=t.filter((e=>e)),e}};var nn={handle:async e=>(e.output.push(...e.input),e)};const an={darwin:'-- From https://github.com/mushanshitiancai/vscode-paste-image\nproperty fileTypes : {{«class PNGf», ".png"}}\n\non run argv\n\tif argv is {} then\n\t\treturn ""\n\tend if\n\n\tif ((clipboard info) as string) contains "«class furl»" then\n\t\treturn POSIX path of (the clipboard as «class furl»)\n\telse\n\t\tset imagePath to (item 1 of argv)\n\t\tset theType to getType()\n\n\t\tif theType is not missing value then\n\t\t\ttry\n\t\t\t\tset myFile to (open for access imagePath with write permission)\n\t\t\t\tset eof myFile to 0\n\t\t\t\twrite (the clipboard as (first item of theType)) to myFile\n\t\t\t\tclose access myFile\n\t\t\t\treturn (POSIX path of imagePath)\n\t\t\ton error\n\t\t\t\ttry\n\t\t\t\t\tclose access myFile\n\t\t\t\tend try\n\t\t\t\treturn "no image"\n\t\t\tend try\n\t\telse\n\t\t\treturn "no image"\n\t\tend if\n\tend if\nend run\n\non getType()\n\trepeat with aType in fileTypes\n\t\trepeat with theInfo in (clipboard info)\n\t\t\tif (first item of theInfo) is equal to (first item of aType) then return aType\n\t\tend repeat\n\tend repeat\n\treturn missing value\nend getType\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 ($null -eq $img) {\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 ($null -eq $img) {\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 ($null -ne $file) {\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\n\nif [ -z "$DISPLAY" ]; then\n echo "no support" >&2\n exit 1\nfi\n\ncase "$XDG_SESSION_TYPE" in\nwayland)\n command -v wl-copy >/dev/null 2>&1 || {\n echo >&2 "no wl-clipboard"\n exit 1\n }\n filePath=$(wl-copy -o 2>/dev/null | grep ^file:// | cut -c8-)\n if [ -z "$filePath" ]; then\n if\n wl-copy -t image/png image/png -o >"$1" 2>/dev/null\n then\n echo "$1"\n else\n rm -f "$1"\n echo "no image"\n fi\n else\n echo "$filePath"\n fi\n ;;\nx11 | tty)\n # require xclip(see http://stackoverflow.com/questions/592620/check-if-a-program-exists-from-a-bash-script/677212#677212)\n command -v xclip >/dev/null 2>&1 || {\n echo >&2 "no xclip"\n exit 1\n }\n # write image in clipboard to file (see http://unix.stackexchange.com/questions/145131/copy-image-from-clipboard-to-file)\n filePath=$(xclip -selection clipboard -o 2>/dev/null | grep ^file:// | cut -c8-)\n if [ -z "$filePath" ]; then\n if\n xclip -selection clipboard -target image/png -o >"$1" 2>/dev/null\n then\n echo "$1"\n else\n rm -f "$1"\n echo "no image"\n fi\n else\n echo "$filePath"\n fi\n ;;\nesac\n',wsl:'#!/bin/sh\n# grab the paths\nscriptPath=$(echo $0 | awk \'{ print substr( $0, 1, length($0)-6 ) }\')"windows10.ps1"\nimagePath=$(echo $1 | awk \'{ print substr( $0, 1, length($0)-18 ) }\')\nimageName=$(echo $1 | awk \'{ print substr( $0, length($0)-17, length($0) ) }\')\n\n# run the powershell script\nres=$(powershell.exe -noprofile -noninteractive -nologo -sta -executionpolicy unrestricted -file $(wslpath -w $scriptPath) $(wslpath -w $imagePath)"\\\\"$imageName)\n\n# note that there is a return symbol in powershell result\nnoImage=$(echo "no image\\r")\n\n# check whether image exists\nif [ "$res" = "$noImage" ] ;then\n echo "no image"\nelse\n echo $(wslpath -u -a "${res}")\nfi\n'},sn={darwin:"mac.applescript",win32:"windows.ps1",win10:"windows10.ps1",linux:"linux.sh",wsl:"wsl.sh"};const En=async e=>{!function(e){const t=D.join(e.baseDir,"piclist-clipboard-images");a(t)}(e);const r=D.join(e.baseDir,"piclist-clipboard-images",`${b().format("YYYYMMDDHHmmssSSS")}.png`);return await new Promise(((n,a)=>{const i=(()=>{const e=process.platform;return ie?"wsl":"win32"===e?"10"===p.release().split(".")[0]?"win10":"win32":"darwin"===e?"darwin":"linux"})(),s=D.join(e.baseDir,sn[i]);let E;t.existsSync(s)||t.writeFileSync(s,an[i],"utf8"),E="darwin"===i?ae("osascript",[s,r]):"win32"===i||"win10"===i?ae("powershell",["-noprofile","-noninteractive","-nologo","-sta","-executionpolicy","unrestricted","-file",s,r]):ae("sh",[s,r]),E.stdout.on("data",(s=>{if("linux"===i&&"no xclip or wl-clipboard"===s.toString().trim())return e.emit(Dt.NOTIFICATION,{title:"xclip or wl-clipboard not found",body:"Please install xclip(for x11) or wl-clipboard(for wayland) before run picgo"}),a(new Error("Please install xclip(for x11) or wl-clipboard(for wayland) before run picgo"));const E=s.toString().trim();let o=!1;if(D.basename(E)!==D.basename(r)&&t.existsSync(E)&&(o=!0),"no image"!==E&&!t.existsSync(E))return a(new Error(`Can't find ${E}`));n({imgPath:E,shouldKeepAfterUploading:o})}))}))};class on{constructor(e){if(this.ctx=e,this.db=new se(this.ctx.configPath),!this.db.has("picBed"))try{this.db.set("picBed",{uploader:"smms",current:"smms",smms:{token:""}})}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])}))}}const In={"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_MESSAGE_TOKEN:"请填写Token",PICBED_SMMS_BACKUP_DOMAIN:"备用上传域名",PICBED_SMMS_MESSAGE_BACKUP_DOMAIN:"例如 smms.app",PICBED_ADVANCEDPLIST:"高级自定义",PICBED_ADVANCEDPLIST_ENDPOINT:"设定接口网址",PICBED_ADVANCEDPLIST_MESSAGE_ENDPOINT:"例如:https://example.com/upload",PICBED_ADVANCEDPLIST_METHOD:"设定请求方法",PICBED_ADVANCEDPLIST_MESSAGE_METHOD:"请选择请求方法",PICBED_ADVANCEDPLIST_FORM_DATA_KEY:"设定表单参数名",PICBED_ADVANCEDPLIST_MESSAGE_FORM_DATA_KEY:"例如:file",PICBED_ADVANCEDPLIST_HEADERS:"设定请求头",PICBED_ADVANCEDPLIST_MESSAGE_HEADERS:'例如:{"Content-Type": "multipart/form-data"}',PICBED_ADVANCEDPLIST_BODY:"设定请求体",PICBED_ADVANCEDPLIST_MESSAGE_BODY:'例如:{"key": "value"}',PICBED_ADVANCEDPLIST_CUSTOM_PREFIX:"设定自定义前缀",PICBED_ADVANCEDPLIST_MESSAGE_CUSTOM_PREFIX:"例如:https://example.com/",PICBED_ADVANCEDPLIST_RES_DATA_PATH:"设定返回数据URL路径",PICBED_ADVANCEDPLIST_MESSAGE_RES_DATA_PATH:"例如:data.url",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_ALIST_PLIST:"AList",PICBED_ALIST_URL:"设定URL",PICBED_ALIST_MESSAGE_URL:"例如:https://alist.example.com",PICBED_ALIST_TOKEN:"设定Token",PICBED_ALIST_MESSAGE_TOKEN:"请输入Token(与用户名-密码二选一)",PICBED_ALIST_USERNAME:"设定用户名",PICBED_ALIST_MESSAGE_USERNAME:"请输入用户名(与Token二选一)",PICBED_ALIST_PASSWORD:"设定密码",PICBED_ALIST_MESSAGE_PASSWORD:"请输入密码",PICBED_ALIST_UPLOAD_PATH:"设定上传路径",PICBED_ALIST_MESSAGE_UPLOAD_PATH:"例如:/test",PICBED_ALIST_WEB_PATH:"设定网站路径",PICBED_ALIST_MESSAGE_WEB_PATH:"用于拼接网址路径",PICBED_ALIST_CUSTOMURL:"设定自定义域名",PICBED_ALIST_MESSAGE_CUSTOMURL:"例如:https://test.com",PICBED_ALICLOUD:"阿里云OSS",PICBED_ALICLOUD_ACCESSKEYID:"设定accessKeyId",PICBED_ALICLOUD_ACCESSKEYSECRET:"设定accessKeySecret",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/86438)",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_ENDPOINT:"设定自定义API接入点",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_UPYUN_MESSAGE_ENDPOINT:"例如:https://v0.api.upyun.com",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_AUTHTYPE:"设定认证方式",PICBED_WEBDAVPLIST_OPTIONS:"设定网址后缀",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_WEBDAVPLIST_MESSAGE_OPTIONS:"例如:?key=123456",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",PICBED_PICLIST:"PicList",PICBED_PICLIST_HOST:"设定主机",PICBED_PICLIST_PORT:"设定端口",PICBED_PICLIST_PICBED:"设定图床",PICBED_PICLIST_CONFIGNAME:"设定配置名",PICBED_PICLIST_KEY:"设定鉴权Key",PICBED_LSKY_PLIST:"兰空图床",PICBED_LSKY_VERSION:"设定版本",PICBED_LSKY_MESSAGE_VERSION:"例如V1",PICBED_LSKY_HOST:"设定主机",PICBED_LSKY_MESSAGE_HOST:"例如:https://example.com",PICBED_LSKY_TOKEN:"设定Token",PICBED_LSKY_MESSAGE_TOKEN:"例如:1234567890",PICBED_LSKY_STRATEGY_ID:"设定策略ID",PICBED_LSKY_MESSAGE_STRATEGY_ID:"例如:1",PICBED_LSKY_ALBUM_ID:"设定相册ID",PICBED_LSKY_MESSAGE_ALBUM_ID:"选填,V2版本限定",PICBED_LSKY_PERMISSION:"设定权限",PICBED_LSKY_MESSAGE_PERMISSION:"例如:public",PICBED_AWSS3PLIST:"AWS S3",PICBED_AWSS3PLIST_ACCESSKEYID:"设定AccessKeyId",PICBED_AWSS3PLIST_SECRET_ACCESSKEY:"设定SecretAccessKey",PICBED_AWSS3PLIST_BUCKET:"设定Bucket",PICBED_AWSS3PLIST_REGION:"设定Region",PICBED_AWSS3PLIST_UPLOADPATH:"设定上传路径",PICBED_AWSS3PLIST_ENDPOINT:"设定自定义节点",PICBED_AWSS3PLIST_PROXY:"设定代理",PICBED_AWSS3PLIST_URLPREFIX:"设定自定义域名",PICBED_AWSS3PLIST_PATHSTYLEACCESS:"启用s3ForcePathStyle",PICBED_AWSS3PLIST_REJECTUNAUTHORIZED:"拒绝无效TLS证书连接",PICBED_AWSS3PLIST_ACL:"设定上传资源的访问策略",PICBED_AWSS3PLIST_DISABLEBUCKETPREFIXTOURL:"开启 `pathStyleAccess` 时,是否要禁用最终生成URL中添加 bucket 前缀",PICBED_AWSS3PLIST_MESSAGE_ACCESSKEYID:"例如:AKIAxxxxxxxxxxxxx",PICBED_AWSS3PLIST_MESSAGE_SECRET_ACCESSKEY:"例如:xxxxxxxxxx",PICBED_AWSS3PLIST_MESSAGE_BUCKET:"例如:test",PICBED_AWSS3PLIST_MESSAGE_REGION:"例如:us-east-1",PICBED_AWSS3PLIST_MESSAGE_UPLOADPATH:"例如:test/{fullName}",PICBED_AWSS3PLIST_MESSAGE_ENDPOINT:"例如:https://s3.us-east-1.amazonaws.com",PICBED_AWSS3PLIST_MESSAGE_PROXY:"例如:http://127.0.0.1:1080",PICBED_AWSS3PLIST_MESSAGE_URLPREFIX:"例如:https://test.com",PICBED_AWSS3PLIST_MESSAGE_PATHSTYLEACCESS:"需要时启用",PICBED_AWSS3PLIST_MESSAGE_REJECTUNAUTHORIZED:"需要时启用",PICBED_AWSS3PLIST_MESSAGE_ACL:"例如:public-read",PICBED_AWSS3PLIST_MESSAGE_DISABLEBUCKETPREFIXTOURL:"需要时启用",BUILDIN_WATERMARK:"水印设置",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:"重命名设置",BUILDIN_RENAME_FORMAT:"设定重命名格式",BUILDIN_RENAME_ENABLE:"是否启用重命名",BUILDIN_COMPRESS:"图片处理",BUILDIN_COMPRESS_QUALITY:"设定图片质量",BUILDIN_COMPRESS_MESSAGE_QUALITY:"请输入1-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_ISFLIP:"是否垂直翻转图片",BUILDIN_COMPRESS_ISFLOP:"是否水平翻转图片",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_MESSAGE_TOKEN:"請輸入Token",PICBED_SMMS_BACKUP_DOMAIN:"備用上傳網址",PICBED_SMMS_MESSAGE_BACKUP_DOMAIN:"例如 smms.app",PICBED_ADVANCEDPLIST:"高級自定義",PICBED_ADVANCEDPLIST_ENDPOINT:"設定API主機",PICBED_ADVANCEDPLIST_MESSAGE_ENDPOINT:"例如:https://example.com/upload",PICBED_ADVANCEDPLIST_METHOD:"設定請求方法",PICBED_ADVANCEDPLIST_MESSAGE_METHOD:"請選擇請求方法",PICBED_ADVANCEDPLIST_FORM_DATA_KEY:"設定表單Key",PICBED_ADVANCEDPLIST_MESSAGE_FORM_DATA_KEY:"例如:file",PICBED_ADVANCEDPLIST_HEADERS:"設定請求頭",PICBED_ADVANCEDPLIST_MESSAGE_HEADERS:'例如:{"Content-Type": "multipart/form-data"}',PICBED_ADVANCEDPLIST_BODY:"設定請求體",PICBED_ADVANCEDPLIST_MESSAGE_BODY:'例如:{"key": "value"}',PICBED_ADVANCEDPLIST_CUSTOM_PREFIX:"設定自定義前綴",PICBED_ADVANCEDPLIST_MESSAGE_CUSTOM_PREFIX:"例如:https://example.com/",PICBED_ADVANCEDPLIST_RES_DATA_PATH:"設定返回數據路徑",PICBED_ADVANCEDPLIST_MESSAGE_RES_DATA_PATH:"例如:data.url",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_ALIST_PLIST:"AList",PICBED_ALIST_URL:"設定URL",PICBED_ALIST_MESSAGE_URL:"例如:https://alist.example.com",PICBED_ALIST_TOKEN:"設定Token",PICBED_ALIST_MESSAGE_TOKEN:"請輸入Token(與用戶名-密碼二選一)",PICBED_ALIST_USERNAME:"設定用戶名",PICBED_ALIST_MESSAGE_USERNAME:"請輸入用戶名(與Token二選一)",PICBED_ALIST_PASSWORD:"設定密碼",PICBED_ALIST_MESSAGE_PASSWORD:"請輸入密碼",PICBED_ALIST_UPLOAD_PATH:"設定上傳路徑",PICBED_ALIST_MESSAGE_UPLOAD_PATH:"例如:/test",PICBED_ALIST_WEB_PATH:"設定網址路徑",PICBED_ALIST_MESSAGE_WEB_PATH:"用于網頁顯示的路徑",PICBED_ALIST_CUSTOMURL:"設定自訂網址",PICBED_ALIST_MESSAGE_CUSTOMURL:"例如:https://test.com",PICBED_ALICLOUD:"阿里云OSS",PICBED_ALICLOUD_ACCESSKEYID:"設定accessKeyId",PICBED_ALICLOUD_ACCESSKEYSECRET:"設定accessKeySecret",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_CANCEL:"關閉",PICBED_TENCENTCLOUD_SLIM_CONFIRM:"開啓",PICBED_TENCENTCLOUD_SLIM_TIP:"圖片極智壓縮,詳情請參考[文檔說明](https://cloud.tencent.com/document/product/436/49259)",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_ENDPOINT:"設定接入點",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_UPYUN_MESSAGE_ENDPOINT:"例如:https://v0.api.upyun.com",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_AUTHTYPE:"設定認證方式",PICBED_WEBDAVPLIST_OPTIONS:"設定網址後綴",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_WEBDAVPLIST_MESSAGE_OPTIONS:"例如:?key=value",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",PICBED_PICLIST:"PicList",PICBED_PICLIST_HOST:"設定主機",PICBED_PICLIST_PORT:"設定端口",PICBED_PICLIST_PICBED:"設定圖床",PICBED_PICLIST_CONFIGNAME:"設定配置名",PICBED_PICLIST_KEY:"設定鑒權Key",PICBED_LSKY_PLIST:"蘭空圖床",PICBED_LSKY_VERSION:"設定版本",PICBED_LSKY_MESSAGE_VERSION:"請選擇版本",PICBED_LSKY_HOST:"設定主機",PICBED_LSKY_MESSAGE_HOST:"例如:https://example.com",PICBED_LSKY_TOKEN:"設定Token",PICBED_LSKY_MESSAGE_TOKEN:"請輸入Token",PICBED_LSKY_STRATEGY_ID:"設定策略ID",PICBED_LSKY_MESSAGE_STRATEGY_ID:"例如1",PICBED_LSKY_ALBUM_ID:"設定相冊ID",PICBED_LSKY_MESSAGE_ALBUM_ID:"例如1",PICBED_LSKY_PERMISSION:"設定上傳權限",PICBED_LSKY_MESSAGE_PERMISSION:"請選擇上傳權限",PICBED_AWSS3PLIST:"AWS S3",PICBED_AWSS3PLIST_ACCESSKEYID:"設定AccessKeyId",PICBED_AWSS3PLIST_SECRET_ACCESSKEY:"設定SecretAccessKey",PICBED_AWSS3PLIST_BUCKET:"設定Bucket",PICBED_AWSS3PLIST_REGION:"設定Region",PICBED_AWSS3PLIST_UPLOADPATH:"設定上傳路徑",PICBED_AWSS3PLIST_ENDPOINT:"設定自定義節點",PICBED_AWSS3PLIST_PROXY:"設定代理",PICBED_AWSS3PLIST_URLPREFIX:"設定自定義網址",PICBED_AWSS3PLIST_PATHSTYLEACCESS:"開啟 `pathStyleAccess`",PICBED_AWSS3PLIST_REJECTUNAUTHORIZED:"開啟 `rejectUnauthorized`",PICBED_AWSS3PLIST_ACL:"設定ACL",PICBED_AWSS3PLIST_DISABLEBUCKETPREFIXTOURL:"開啟 `pathStyleAccess` 時,是否要禁用最終生成URL中添加 bucket 前綴",PICBED_AWSS3PLIST_MESSAGE_ACCESSKEYID:"例如:AKIAxxxxxxxxxxxxx",PICBED_AWSS3PLIST_MESSAGE_SECRET_ACCESSKEY:"例如:xxxxxxxxxx",PICBED_AWSS3PLIST_MESSAGE_BUCKET:"例如:test/{fullName}",PICBED_AWSS3PLIST_MESSAGE_REGION:"例如:us-east-1",PICBED_AWSS3PLIST_MESSAGE_UPLOADPATH:"例如:test/",PICBED_AWSS3PLIST_MESSAGE_ENDPOINT:"例如:https://s3.us-east-1.amazonaws.com",PICBED_AWSS3PLIST_MESSAGE_PROXY:"例如:http://127.0.0.1:1080",PICBED_AWSS3PLIST_MESSAGE_URLPREFIX:"例如:https://test.com",PICBED_AWSS3PLIST_MESSAGE_PATHSTYLEACCESS:"需要時啟用",PICBED_AWSS3PLIST_MESSAGE_REJECTUNAUTHORIZED:"需要時啟用",PICBED_AWSS3PLIST_MESSAGE_ACL:"例如:public-read",PICBED_AWSS3PLIST_MESSAGE_DISABLEBUCKETPREFIXTOURL:"需要時啟用",BUILDIN_WATERMARK:"水印設定",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:"重命名設定",BUILDIN_RENAME_FORMAT:"設定重命名格式",BUILDIN_RENAME_ENABLE:"是否啟用重命名",BUILDIN_COMPRESS:"圖片處理設定",BUILDIN_COMPRESS_QUALITY:"設定圖片質量",BUILDIN_COMPRESS_MESSAGE_QUALITY:"請輸入1-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_ISFLIP:"是否垂直翻轉圖片",BUILDIN_COMPRESS_ISFLOP:"是否水平翻轉圖片",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_MESSAGE_TOKEN:"Please enter the token",PICBED_SMMS_BACKUP_DOMAIN:"Set Backup Upload Domain",PICBED_SMMS_MESSAGE_BACKUP_DOMAIN:"Ex. smms.app",PICBED_ADVANCEDPLIST:"Advanced",PICBED_ADVANCEDPLIST_ENDPOINT:"Set Endpoint",PICBED_ADVANCEDPLIST_MESSAGE_ENDPOINT:"Please enter the endpoint",PICBED_ADVANCEDPLIST_METHOD:"Set Method",PICBED_ADVANCEDPLIST_MESSAGE_METHOD:"Please select the request method",PICBED_ADVANCEDPLIST_FORM_DATA_KEY:"Set FormData Key",PICBED_ADVANCEDPLIST_MESSAGE_FORM_DATA_KEY:"Please enter the FormData key",PICBED_ADVANCEDPLIST_HEADERS:"Set Headers",PICBED_ADVANCEDPLIST_MESSAGE_HEADERS:'such as {"Content-Type": "multipart/form-data"}',PICBED_ADVANCEDPLIST_BODY:"Set Body",PICBED_ADVANCEDPLIST_MESSAGE_BODY:'such as {"key": "value"}',PICBED_ADVANCEDPLIST_CUSTOM_PREFIX:"Set Custom Prefix",PICBED_ADVANCEDPLIST_MESSAGE_CUSTOM_PREFIX:"such as https://example.com/",PICBED_ADVANCEDPLIST_RES_DATA_PATH:"Set Response Data Path",PICBED_ADVANCEDPLIST_MESSAGE_RES_DATA_PATH:"such as data.url",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_ALIST_PLIST:"AList",PICBED_ALIST_URL:"Set URL",PICBED_ALIST_MESSAGE_URL:"Ex. https://alist.example.com",PICBED_ALIST_TOKEN:"Set Token",PICBED_ALIST_MESSAGE_TOKEN:"Please enter the token(choose one of either username-password or token)",PICBED_ALIST_USERNAME:"Set Username",PICBED_ALIST_MESSAGE_USERNAME:"Please enter the username(choose one of either username-password or token)",PICBED_ALIST_PASSWORD:"Set Password",PICBED_ALIST_MESSAGE_PASSWORD:"Please enter the password",PICBED_ALIST_UPLOAD_PATH:"Set Upload Path",PICBED_ALIST_MESSAGE_UPLOAD_PATH:"Ex. /test/",PICBED_ALIST_WEB_PATH:"Set Web Path",PICBED_ALIST_MESSAGE_WEB_PATH:"Used to generate url path",PICBED_ALIST_CUSTOMURL:"Set Custom URL",PICBED_ALIST_MESSAGE_CUSTOMURL:"Ex. https://test.com",PICBED_ALICLOUD:"Ali Cloud",PICBED_ALICLOUD_ACCESSKEYID:"Set accessKeyId",PICBED_ALICLOUD_ACCESSKEYSECRET:"Set accessKeySecret",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:"Set ImageSlim",PICBED_TENCENTCLOUD_SLIM_TIP:"Image extremely intelligent compression, please refer to the [document description](https://cloud.tencent.com/document/product/436/86438)",PICBED_TENCENTCLOUD_SLIM_CONFIRM:"OPEN",PICBED_TENCENTCLOUD_SLIM_CANCEL:"CLOSE",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:"Ex. test",PICBED_IMGUR_MESSAGE_PROXY:"Ex. http://127.0.0.1:1080",PICBED_UPYUN:"Upyun",PICBED_UPYUN_BUCKET:"Set Bucket",PICBED_UPYUN_ENDPOINT:"Set Endpoint",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_UPYUN_MESSAGE_ENDPOINT:"Ex. https://v0.api.upyun.com",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_AUTHTYPE:"Set Auth Type",PICBED_WEBDAVPLIST_OPTIONS:"Set URL Suffix",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_WEBDAVPLIST_MESSAGE_OPTIONS:"Ex. ?key=value",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",PICBED_PICLIST:"PicList",PICBED_PICLIST_HOST:"Set Host",PICBED_PICLIST_PORT:"Set Port",PICBED_PICLIST_PICBED:"Set PicBed",PICBED_PICLIST_CONFIGNAME:"Set Config Name",PICBED_PICLIST_KEY:"Set Key",PICBED_LSKY_PLIST:"Lsky",PICBED_LSKY_VERSION:"Set Version",PICBED_LSKY_MESSAGE_VERSION:"Ex. v1",PICBED_LSKY_HOST:"Set Host",PICBED_LSKY_MESSAGE_HOST:"Ex. https://lsky.co",PICBED_LSKY_TOKEN:"Set Token",PICBED_LSKY_MESSAGE_TOKEN:"Ex. xxx",PICBED_LSKY_STRATEGY_ID:"Set Strategy ID",PICBED_LSKY_MESSAGE_STRATEGY_ID:"Ex. 1",PICBED_LSKY_ALBUM_ID:"Set Album ID",PICBED_LSKY_MESSAGE_ALBUM_ID:"Optional, only for V2",PICBED_LSKY_PERMISSION:"Set Permission",PICBED_LSKY_MESSAGE_PERMISSION:"Ex. public",PICBED_AWSS3PLIST:"AWS S3",PICBED_AWSS3PLIST_ACCESSKEYID:"Set AccessKeyId",PICBED_AWSS3PLIST_SECRET_ACCESSKEY:"Set SecretAccessKey",PICBED_AWSS3PLIST_BUCKET:"Set Bucket",PICBED_AWSS3PLIST_REGION:"Set Region",PICBED_AWSS3PLIST_UPLOADPATH:"Set Upload Path",PICBED_AWSS3PLIST_ENDPOINT:"Set Endpoint",PICBED_AWSS3PLIST_PROXY:"Set Proxy",PICBED_AWSS3PLIST_URLPREFIX:"Set Custom URL",PICBED_AWSS3PLIST_PATHSTYLEACCESS:"Set PathStyleAccess",PICBED_AWSS3PLIST_REJECTUNAUTHORIZED:"Set RejectUnauthorized",PICBED_AWSS3PLIST_ACL:"Set ACL",PICBED_AWSS3PLIST_DISABLEBUCKETPREFIXTOURL:"when `pathStyleAccess` is enabled, whether to disable adding bucket prefix to url",PICBED_AWSS3PLIST_MESSAGE_ACCESSKEYID:"Ex. xxx",PICBED_AWSS3PLIST_MESSAGE_SECRET_ACCESSKEY:"Ex. xxx",PICBED_AWSS3PLIST_MESSAGE_BUCKET:"Ex. test",PICBED_AWSS3PLIST_MESSAGE_REGION:"Ex. us-east-1",PICBED_AWSS3PLIST_MESSAGE_UPLOADPATH:"Ex. test/{fullName}",PICBED_AWSS3PLIST_MESSAGE_ENDPOINT:"Ex. https://s3.us-east-1.amazonaws.com",PICBED_AWSS3PLIST_MESSAGE_PROXY:"Ex. http://127.0.0.1:1080",PICBED_AWSS3PLIST_MESSAGE_URLPREFIX:"Ex. https://test.com",PICBED_AWSS3PLIST_MESSAGE_PATHSTYLEACCESS:"Enable when `pathStyleAccess` is required",PICBED_AWSS3PLIST_MESSAGE_REJECTUNAUTHORIZED:"Enable when rejecting invalid TLS certificate connection is required",PICBED_AWSS3PLIST_MESSAGE_ACL:"Ex. public-read",PICBED_AWSS3PLIST_MESSAGE_DISABLEBUCKETPREFIXTOURL:"Enable when `pathStyleAccess` is enabled",BUILDIN_RENAME:"Rename Settings",BUILDIN_RENAME_FORMAT:"Set rename format",BUILDIN_RENAME_ENABLE:"Enable rename",BUILDIN_WATERMARK:"Watermark Settings",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:"Processing Settings",BUILDIN_COMPRESS_QUALITY:"Set image quality",BUILDIN_COMPRESS_MESSAGE_QUALITY:"Please enter an integer between 1-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_ISFLIP:"Whether to flip the image vertically",BUILDIN_COMPRESS_ISFLOP:"Whether to flip the image horizontally",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 _n{constructor(e){this.ctx=e,this.objectAdapter=new oe(In);let t=this.ctx.getConfig("settings.language")||"zh-CN";In[t]||(t="zh-CN"),this.i18n=new Ie({adapter:this.objectAdapter,defaultLanguage:t}),this.loadOutterI18n()}loadOutterI18n(){const e=this.getOutterI18nFolder();t.readdirSync(e,{withFileTypes:!0}).forEach((r=>{if(r.isFile()&&r.name.endsWith(".yml")){const n=D.join(e,r.name),a=t.readFileSync(n,"utf8");try{const e=Ee.load(a);In[r.name.replace(/\.yml$/,"")]=e}catch(e){console.error(e)}}}))}getOutterI18nFolder(){const e=D.join(this.ctx.baseDir,"i18n-cli");return I(e)||a(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=P(r,t);return this.objectAdapter.setLocale(e,n),!0}addLanguage(e,t){return!this.objectAdapter.getLocale(e)&&(this.objectAdapter.setLocale(e,t),In[e]=t,!0)}getLanguageList(){return Object.keys(In)}}class Sn extends e{get pluginLoader(){return this._pluginLoader}constructor(e=""){super(),this.VERSION="1.9.12",this.configPath=e,this.input=[],this.rawInput=[],this.processedInput=[],this.output=[],this.helper={transformer:new ct("transformer"),uploader:new ct("uploader"),beforeTransformPlugins:new ct("beforeTransformPlugins"),beforeUploadPlugins:new ct("beforeUploadPlugins"),afterUploadPlugins:new ct("afterUploadPlugins")},this.initConfigPath(),this.log=new gt(this),this.cmd=new pt(this),this.pluginHandler=new dt(this),this.initConfig(),this.init()}initConfigPath(){if(this.configPath=this.configPath||D.join(C(),".piclist/config.json"),".JSON"!==D.extname(this.configPath).toUpperCase())throw this.configPath="",Error("The configuration file only supports JSON format.");this.baseDir=D.dirname(this.configPath),I(this.configPath)||_(`${this.configPath}`)}initConfig(){this.db=new on(this),this._config=this.db.read(!0)}init(){try{this.i18n=new _n(this),this.Request=new Rt(this),this._pluginLoader=new mt(this),At("picgo"),en().register(this),{register(e){e.helper.transformer.register("path",rn),e.helper.transformer.register("base64",nn)}}.register(this),At(""),this._pluginLoader.load(),this.lifecycle=new Ot(this)}catch(e){throw this.emit(Dt.UPLOAD_PROGRESS,-1),this.log.error(e),e}}use(e,t){return t?(this.pluginLoader.registerPlugin(t,e),this.pluginLoader.getPlugin(t)):e(this)}registerCommands(){""!==this.configPath&&(this.cmd.init(),this.cmd.loadCommands())}getConfig(e){return this._config=this.db.read(!0),e?u(this._config,e):this._config}saveConfig(e){Me(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&&(Oe(e)?this.log.warn(`the config.${e} can't be removed`):(this.unsetConfig(e,t),this.db.unset(e,t)))}setConfig(e){Me(e)?Object.keys(e).forEach((t=>{Oe(t)&&(this.log.warn(`the config.${t} can't be modified`),delete e[t]),c(this._config,t,e[t]),ft.emit(Tt.CONFIG_CHANGE,{configName:t,value:e[t]})})):this.log.warn("the format of config is invalid, please provide object")}unsetConfig(e,t){e&&t&&(Oe(e)?this.log.warn(`the config.${e} can't be unset`):A(this.getConfig(e),t))}get request(){return this.Request.request.bind(this.Request)}async upload(e){if(""===this.configPath)return this.log.error("No config file found, please check your config file path"),[];if(void 0!==e&&0!==e.length){const{output:t}=await this.lifecycle.start(e);return t}try{const{imgPath:e,shouldKeepAfterUploading:t}=await En(this),r=()=>{t||S(e).catch((e=>{this.log.error(e)}))};if("no image"===e)throw new Error("image not found in clipboard");{this.once(Dt.FAILED,r),this.once(Dt.FINISHED,r);const{output:t}=await this.lifecycle.start([e]);return t}}catch(e){throw this.emit(Dt.FAILED,e),e}}async uploadReturnCtx(e,t=!1){if(""===this.configPath)return this.log.error("No config file found, please check your config file path"),this;if(void 0!==e&&0!==e.length)return await this.lifecycle.start(e,t);try{const{imgPath:e,shouldKeepAfterUploading:r}=await En(this),n=()=>{r||S(e).catch((e=>{this.log.error(e)}))};if("no image"===e)throw new Error("image not found in clipboard");return this.once(Dt.FAILED,n),this.once(Dt.FINISHED,n),await this.lifecycle.start([e],t)}catch(e){throw this.emit(Dt.FAILED,e),e}}}export{pt as Commander,Ot as Lifecycle,ct as LifecyclePlugins,gt as Logger,Sn as PicGo,Xe as PicGoUtils,dt as PluginHandler,mt as PluginLoader,Rt as Request};
|
|
2
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguZXNtLmpzIiwic291cmNlcyI6WyIuLi9zcmMvcGx1Z2lucy9jb21tYW5kZXIvcGx1Z2luSGFuZGxlci50cyIsIi4uL3NyYy9wbHVnaW5zL2NvbW1hbmRlci9jb25maWcudHMiLCIuLi9zcmMvdXRpbHMvY29tbW9uLnRzIiwiLi4vc3JjL3BsdWdpbnMvY29tbWFuZGVyL3VwbG9hZC50cyIsIi4uL3NyYy9wbHVnaW5zL2JlZm9yZXRyYW5zZm9ybWVyL2NvbXByZXNzLnRzIiwiLi4vc3JjL3BsdWdpbnMvYmVmb3JldHJhbnNmb3JtZXIvd2F0ZXJtYXJrLnRzIiwiLi4vc3JjL3BsdWdpbnMvYmVmb3JldXBsb2FkL2J1aWxkSW5SZW5hbWUudHMiLCIuLi9zcmMvcGx1Z2lucy9jb21tYW5kZXIvdXRpbHMudHMiLCIuLi9zcmMvcGx1Z2lucy9jb21tYW5kZXIvc2V0dGluZy50cyIsIi4uL3NyYy9wbHVnaW5zL2NvbW1hbmRlci91c2UudHMiLCIuLi9zcmMvcGx1Z2lucy9jb21tYW5kZXIvcHJveHkudHMiLCIuLi9zcmMvdXRpbHMvaW5pdFV0aWxzLnRzIiwiLi4vc3JjL3BsdWdpbnMvY29tbWFuZGVyL2luaXQudHMiLCIuLi9zcmMvcGx1Z2lucy9jb21tYW5kZXIvaTE4bi50cyIsIi4uL3NyYy9saWIvTGlmZWN5Y2xlUGx1Z2lucy50cyIsIi4uL3NyYy9saWIvQ29tbWFuZGVyLnRzIiwiLi4vc3JjL3BsdWdpbnMvY29tbWFuZGVyL2luZGV4LnRzIiwiLi4vc3JjL3V0aWxzL2VudW0udHMiLCIuLi9zcmMvbGliL0xvZ2dlci50cyIsIi4uL3NyYy9saWIvUGx1Z2luSGFuZGxlci50cyIsIi4uL3NyYy9saWIvUGx1Z2luTG9hZGVyLnRzIiwiLi4vc3JjL3V0aWxzL2V2ZW50QnVzLnRzIiwiLi4vc3JjL2xpYi9SZXF1ZXN0LnRzIiwiLi4vc3JjL2NvcmUvTGlmZWN5Y2xlLnRzIiwiLi4vc3JjL3V0aWxzL2NyZWF0ZUNvbnRleHQudHMiLCIuLi9zcmMvcGx1Z2lucy91cGxvYWRlci91dGlscy50cyIsIi4uL3NyYy9wbHVnaW5zL3VwbG9hZGVyL2FkdmFuY2VkcGxpc3QudHMiLCIuLi9zcmMvcGx1Z2lucy91cGxvYWRlci9hbGlzdC50cyIsIi4uL3NyYy9wbHVnaW5zL3VwbG9hZGVyL2FsaXl1bi50cyIsIi4uL3NyYy9wbHVnaW5zL3VwbG9hZGVyL3MzL3V0aWxzLnRzIiwiLi4vc3JjL3BsdWdpbnMvdXBsb2FkZXIvczMvdXBsb2FkZXIudHMiLCIuLi9zcmMvcGx1Z2lucy91cGxvYWRlci9hd3NzM3BsaXN0LnRzIiwiLi4vc3JjL3BsdWdpbnMvdXBsb2FkZXIvZ2l0aHViLnRzIiwiLi4vc3JjL3BsdWdpbnMvdXBsb2FkZXIvaW1ndXIudHMiLCIuLi9zcmMvcGx1Z2lucy91cGxvYWRlci9sb2NhbC50cyIsIi4uL3NyYy9wbHVnaW5zL3VwbG9hZGVyL2xza3kudHMiLCIuLi9zcmMvcGx1Z2lucy91cGxvYWRlci9waWNsaXN0LnRzIiwiLi4vc3JjL3BsdWdpbnMvdXBsb2FkZXIvcWluaXUudHMiLCIuLi9zcmMvdXRpbHMvc3NoQ2xpZW50LnRzIiwiLi4vc3JjL3BsdWdpbnMvdXBsb2FkZXIvc2Z0cC50cyIsIi4uL3NyYy9wbHVnaW5zL3VwbG9hZGVyL3NtbXMudHMiLCIuLi9zcmMvcGx1Z2lucy91cGxvYWRlci90Y3l1bi50cyIsIi4uL3NyYy9wbHVnaW5zL3VwbG9hZGVyL3VweXVuLnRzIiwiLi4vc3JjL3BsdWdpbnMvdXBsb2FkZXIvd2ViZGF2LnRzIiwiLi4vc3JjL3BsdWdpbnMvdXBsb2FkZXIvaW5kZXgudHMiLCIuLi9zcmMvcGx1Z2lucy90cmFuc2Zvcm1lci9wYXRoLnRzIiwiLi4vc3JjL3BsdWdpbnMvdHJhbnNmb3JtZXIvYmFzZTY0LnRzIiwiLi4vc3JjL3V0aWxzL3N0YXRpYy50cyIsIi4uL3NyYy91dGlscy9nZXRDbGlwYm9hcmRJbWFnZS50cyIsIi4uL3NyYy91dGlscy9kYi50cyIsIi4uL3NyYy9pMThuL3poLUNOLnRzIiwiLi4vc3JjL2kxOG4vaW5kZXgudHMiLCIuLi9zcmMvaTE4bi96aC1UVy50cyIsIi4uL3NyYy9pMThuL2VuLnRzIiwiLi4vc3JjL2NvcmUvUGljR28udHMiLCIuLi9zcmMvcGx1Z2lucy90cmFuc2Zvcm1lci9pbmRleC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJUGljR28sIElQbHVnaW4gfSBmcm9tICcuLi8uLi90eXBlcydcblxudHlwZSBhY3Rpb25GdW5jID0gKHBsdWdpbnM6IHN0cmluZ1tdLCBwcm9ncmFtOiBhbnkpID0+IHZvaWRcblxuY29uc3QgY3JlYXRlQ29tbWFuZCA9IChcbiAgY21kOiBhbnksXG4gIGNvbW1hbmQ6IHN0cmluZyxcbiAgZGVzY3JpcHRpb246IHN0cmluZyxcbiAgYWxpYXM6IHN0cmluZyxcbiAgYWN0aW9uOiBhY3Rpb25GdW5jLFxuICBvcHRpb25zPzogeyBwcm94eTogYm9vbGVhbjsgcmVnaXN0cnk6IGJvb2xlYW4gfVxuKTogdm9pZCA9PiB7XG4gIGxldCBwcm9ncmFtID0gY21kLnByb2dyYW0uY29tbWFuZChjb21tYW5kKS5kZXNjcmlwdGlvbihkZXNjcmlwdGlvbikuYWxpYXMoYWxpYXMpXG4gIGlmIChvcHRpb25zPy5wcm94eSkge1xuICAgIHByb2dyYW0gPSBwcm9ncmFtLm9wdGlvbignLXAsIC0tcHJveHkgPHByb3h5PicsICdBZGQgcHJveHkgZm9yIGluc3RhbGxpbmcgcGx1Z2lucycpXG4gIH1cbiAgaWYgKG9wdGlvbnM/LnJlZ2lzdHJ5KSB7XG4gICAgcHJvZ3JhbSA9IHByb2dyYW0ub3B0aW9uKCctciwgLS1yZWdpc3RyeSA8cmVnaXN0cnk+JywgJ0Nob29zZSBhIHJlZ2lzdHJ5IGZvciBpbnN0YWxsaW5nIHBsdWdpbnMnKVxuICB9XG4gIHByb2dyYW0uYWN0aW9uKGFjdGlvbilcbn1cblxuY29uc3QgcGx1Z2luSGFuZGxlcjogSVBsdWdpbiA9IHtcbiAgaGFuZGxlOiAoY3R4OiBJUGljR28pID0+IHtcbiAgICBjb25zdCBjbWQgPSBjdHguY21kXG4gICAgY3JlYXRlQ29tbWFuZChcbiAgICAgIGNtZCxcbiAgICAgICdpbnN0YWxsIDxwbHVnaW5zLi4uPicsXG4gICAgICAnaW5zdGFsbCBwaWNnbyBwbHVnaW4nLFxuICAgICAgJ2FkZCcsXG4gICAgICAocGx1Z2luczogc3RyaW5nW10sIHByb2dyYW06IGFueSkgPT4ge1xuICAgICAgICBjb25zdCB7IHByb3h5LCByZWdpc3RyeSB9ID0gcHJvZ3JhbVxuICAgICAgICBjb25zdCBvcHRpb25zID0geyBwcm94eSwgcmVnaXN0cnkgfVxuICAgICAgICBjdHgucGx1Z2luSGFuZGxlci5pbnN0YWxsKHBsdWdpbnMsIG9wdGlvbnMpLmNhdGNoKGUgPT4ge1xuICAgICAgICAgIGN0eC5sb2cuZXJyb3IoZSlcbiAgICAgICAgfSlcbiAgICAgIH0sXG4gICAgICB7IHByb3h5OiB0cnVlLCByZWdpc3RyeTogdHJ1ZSB9XG4gICAgKVxuICAgIGNyZWF0ZUNvbW1hbmQoY21kLCAndW5pbnN0YWxsIDxwbHVnaW5zLi4uPicsICd1bmluc3RhbGwgcGljZ28gcGx1Z2luJywgJ3JtJywgKHBsdWdpbnM6IHN0cmluZ1tdKSA9PiB7XG4gICAgICBjdHgucGx1Z2luSGFuZGxlci51bmluc3RhbGwocGx1Z2lucykuY2F0Y2goZSA9PiB7XG4gICAgICAgIGN0eC5sb2cuZXJyb3IoZSlcbiAgICAgIH0pXG4gICAgfSlcbiAgICBjcmVhdGVDb21tYW5kKFxuICAgICAgY21kLFxuICAgICAgJ3VwZGF0ZSA8cGx1Z2lucy4uLj4nLFxuICAgICAgJ3VwZGF0ZSBwaWNnbyBwbHVnaW4nLFxuICAgICAgJ3VwJyxcbiAgICAgIChwbHVnaW5zOiBzdHJpbmdbXSwgcHJvZ3JhbTogYW55KSA9PiB7XG4gICAgICAgIGNvbnN0IHsgcHJveHksIHJlZ2lzdHJ5IH0gPSBwcm9ncmFtXG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSB7IHByb3h5LCByZWdpc3RyeSB9XG4gICAgICAgIGN0eC5wbHVnaW5IYW5kbGVyLnVwZGF0ZShwbHVnaW5zLCBvcHRpb25zKS5jYXRjaCgoZTogRXJyb3IpID0+IHtcbiAgICAgICAgICBjdHgubG9nLmVycm9yKGUpXG4gICAgICAgIH0pXG4gICAgICB9LFxuICAgICAgeyBwcm94eTogdHJ1ZSwgcmVnaXN0cnk6IHRydWUgfVxuICAgIClcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBwbHVnaW5IYW5kbGVyXG4iLCJpbXBvcnQgeyBJUGljR28sIElQbHVnaW4gfSBmcm9tICcuLi8uLi90eXBlcydcblxuY29uc3QgY29uZmlnOiBJUGx1Z2luID0ge1xuICBoYW5kbGU6IChjdHg6IElQaWNHbykgPT4ge1xuICAgIGNvbnN0IGNtZCA9IGN0eC5jbWRcbiAgICBjbWQucHJvZ3JhbS5vcHRpb24oJy1jLCAtLWNvbmZpZyA8cGF0aD4nLCAnc2V0IGNvbmZpZyBwYXRoJylcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBjb25maWdcbiIsImltcG9ydCBmcywgeyByZWFkRmlsZSwgcmVhZEpTT05TeW5jIH0gZnJvbSAnZnMtZXh0cmEnXG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJ1xuaW1wb3J0IHsgaW1hZ2VTaXplIH0gZnJvbSAnaW1hZ2Utc2l6ZSdcbmltcG9ydCB7IFVSTCB9IGZyb20gJ3VybCdcbmltcG9ydCBUZXh0VG9TVkcgZnJvbSAndGV4dC10by1zdmcnXG5pbXBvcnQgc2hhcnAgZnJvbSAnc2hhcnAnXG5pbXBvcnQgY3J5cHRvIGZyb20gJ2NyeXB0bydcbmltcG9ydCB7IHY0IGFzIHV1aWR2NCB9IGZyb20gJ3V1aWQnXG5cbmltcG9ydCB7XG4gIElJbWdTaXplLFxuICBJUGF0aFRyYW5zZm9ybWVkSW1nSW5mbyxcbiAgSVBsdWdpbk5hbWVUeXBlLFxuICBJTG9nZ2VyLFxuICBJUGljR28sXG4gIElCdWlsZEluQ29tcHJlc3NPcHRpb25zLFxuICBJQnVpbGRJbldhdGVyTWFya09wdGlvbnNcbn0gZnJvbSAnLi4vdHlwZXMnXG5cbmV4cG9ydCBmdW5jdGlvbiByYW5kb21TdHJpbmdHZW5lcmF0b3IobGVuZ3RoOiBudW1iZXIpOiBzdHJpbmcge1xuICBjb25zdCBjaGFycyA9ICdBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSdcbiAgcmV0dXJuIEFycmF5LmZyb20oeyBsZW5ndGggfSlcbiAgICAubWFwKCgpID0+IGNoYXJzLmNoYXJBdChNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiBjaGFycy5sZW5ndGgpKSlcbiAgICAuam9pbignJylcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlbmFtZUZpbGVOYW1lV2l0aFRpbWVzdGFtcChvbGROYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gYCR7TWF0aC5mbG9vcihEYXRlLm5vdygpIC8gMTAwMCl9JHtyYW5kb21TdHJpbmdHZW5lcmF0b3IoNSl9JHtwYXRoLmV4dG5hbWUob2xkTmFtZSl9YFxufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVuYW1lRmlsZU5hbWVXaXRoUmFuZG9tU3RyaW5nKG9sZE5hbWU6IHN0cmluZywgbGVuZ3RoOiBudW1iZXIgPSA1KTogc3RyaW5nIHtcbiAgcmV0dXJuIGAke3JhbmRvbVN0cmluZ0dlbmVyYXRvcihsZW5ndGgpfSR7cGF0aC5leHRuYW1lKG9sZE5hbWUpfWBcbn1cblxuZnVuY3Rpb24gZm9ybWF0SGVscGVyKG51bTogbnVtYmVyKTogc3RyaW5nIHtcbiAgcmV0dXJuIG51bS50b1N0cmluZygpLmxlbmd0aCA9PT0gMSA/IGAwJHtudW19YCA6IG51bS50b1N0cmluZygpXG59XG5cbmZ1bmN0aW9uIGdldE1kNShpbnB1dDogY3J5cHRvLkJpbmFyeUxpa2UpOiBzdHJpbmcge1xuICByZXR1cm4gY3J5cHRvLmNyZWF0ZUhhc2goJ21kNScpLnVwZGF0ZShpbnB1dCkuZGlnZXN0KCdoZXgnKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVuYW1lRmlsZU5hbWVXaXRoQ3VzdG9tU3RyaW5nKFxuICBvbGROYW1lOiBzdHJpbmcsXG4gIGN1c3RvbUZvcm1hdDogc3RyaW5nLFxuICBhZmZpeEZpbGVOYW1lPzogc3RyaW5nLFxuICBmaWxlQnVmZmVyPzogY3J5cHRvLkJpbmFyeUxpa2Vcbik6IHN0cmluZyB7XG4gIGNvbnN0IG5vdyA9IG5ldyBEYXRlKClcbiAgY29uc3QgeWVhciA9IG5vdy5nZXRGdWxsWWVhcigpLnRvU3RyaW5nKClcbiAgY29uc3QgZmlsZWJhc2VuYW1lID0gcGF0aC5iYXNlbmFtZShvbGROYW1lLCBwYXRoLmV4dG5hbWUob2xkTmFtZSkpXG4gIGNvbnN0IGNvbnZlcnNpb25NYXA6IFJlY29yZDxzdHJpbmcsICgpID0+IHN0cmluZz4gPSB7XG4gICAgJ3tZfSc6ICgpID0+IHllYXIsXG4gICAgJ3t5fSc6ICgpID0+IHllYXIuc2xpY2UoMiksXG4gICAgJ3ttfSc6ICgpID0+IGZvcm1hdEhlbHBlcihub3cuZ2V0TW9udGgoKSArIDEpLFxuICAgICd7ZH0nOiAoKSA9PiBmb3JtYXRIZWxwZXIobm93LmdldERhdGUoKSksXG4gICAgJ3tofSc6ICgpID0+IGZvcm1hdEhlbHBlcihub3cuZ2V0SG91cnMoKSksXG4gICAgJ3tpfSc6ICgpID0+IGZvcm1hdEhlbHBlcihub3cuZ2V0TWludXRlcygpKSxcbiAgICAne3N9JzogKCkgPT4gZm9ybWF0SGVscGVyKG5vdy5nZXRTZWNvbmRzKCkpLFxuICAgICd7bXN9JzogKCkgPT4gbm93LmdldE1pbGxpc2Vjb25kcygpLnRvU3RyaW5nKCkucGFkU3RhcnQoMywgJzAnKSxcbiAgICAne21kNX0nOiAoKSA9PiBnZXRNZDUoZmlsZUJ1ZmZlciB8fCBmaWxlYmFzZW5hbWUpLFxuICAgICd7bWQ1LTE2fSc6ICgpID0+IGdldE1kNShmaWxlQnVmZmVyIHx8IGZpbGViYXNlbmFtZSkuc2xpY2UoMCwgMTYpLFxuICAgICd7ZmlsZW5hbWV9JzogKCkgPT4gKGFmZml4RmlsZU5hbWUgPyBwYXRoLmJhc2VuYW1lKGFmZml4RmlsZU5hbWUsIHBhdGguZXh0bmFtZShhZmZpeEZpbGVOYW1lKSkgOiBmaWxlYmFzZW5hbWUpLFxuICAgICd7dXVpZH0nOiAoKSA9PiB1dWlkdjQoKS5yZXBsYWNlKC8tL2csICcnKSxcbiAgICAne3RpbWVzdGFtcH0nOiAoKSA9PiBub3cuZ2V0VGltZSgpLnRvU3RyaW5nKClcbiAgfVxuICBpZiAoXG4gICAgY3VzdG9tRm9ybWF0ID09PSB1bmRlZmluZWQgfHxcbiAgICAoIU9iamVjdC5rZXlzKGNvbnZlcnNpb25NYXApLnNvbWUoaXRlbSA9PiBjdXN0b21Gb3JtYXQuaW5jbHVkZXMoaXRlbSkpICYmXG4gICAgICAhY3VzdG9tRm9ybWF0LmluY2x1ZGVzKCdsb2NhbEZvbGRlcjonKSAmJlxuICAgICAgIWN1c3RvbUZvcm1hdC5pbmNsdWRlcygnc3RyLScpKVxuICApIHtcbiAgICByZXR1cm4gb2xkTmFtZVxuICB9XG4gIGNvbnN0IGV4dCA9IHBhdGguZXh0bmFtZShvbGROYW1lKVxuICBsZXQgbmV3TmFtZSA9XG4gICAgT2JqZWN0LmtleXMoY29udmVyc2lvbk1hcCkucmVkdWNlKChhY2MsIGN1cikgPT4ge1xuICAgICAgcmV0dXJuIGFjYy5yZXBsYWNlKG5ldyBSZWdFeHAoY3VyLCAnZycpLCBjb252ZXJzaW9uTWFwW2N1cl0oKSlcbiAgICB9LCBjdXN0b21Gb3JtYXQpICsgZXh0XG4gIGNvbnN0IHN0clJlZ2V4ID0gL3tzdHItKFxcZCspfS9naVxuICBuZXdOYW1lID0gbmV3TmFtZS5yZXBsYWNlKHN0clJlZ2V4LCAoXywgZ3JvdXAxKSA9PiB7XG4gICAgY29uc3QgbGVuZ3RoID0gcGFyc2VJbnQoZ3JvdXAxLCAxMClcbiAgICByZXR1cm4gcmFuZG9tU3RyaW5nR2VuZXJhdG9yKGxlbmd0aClcbiAgfSlcbiAgbmV3TmFtZSA9IG5ld05hbWUucmVwbGFjZSgveyhsb2NhbEZvbGRlcjo/KFxcZCspPyl9L2dpLCAoX3Jlc3VsdCwga2V5LCBjb3VudCkgPT4ge1xuICAgIGNvdW50ID0gTWF0aC5tYXgoMSwgY291bnQgfHwgMClcbiAgICBjb25zdCBwYXRocyA9IHBhdGguZGlybmFtZShvbGROYW1lKS5zcGxpdChwYXRoLnNlcClcbiAgICBrZXkgPSBwYXRocy5zbGljZSgwIC0gY291bnQpLnJlZHVjZSgoYSwgYikgPT4gYCR7YX0vJHtifWApXG4gICAgcmV0dXJuIGtleS5yZXBsYWNlKC86L2csICcnKVxuICB9KVxuICByZXR1cm4gbmV3TmFtZVxufVxuXG5leHBvcnQgY29uc3QgaXNVcmwgPSAodXJsOiBzdHJpbmcpOiBib29sZWFuID0+IC9eaHR0cHM/OlxcL1xcLy8udGVzdCh1cmwpXG5cbmV4cG9ydCBjb25zdCBpc1VybEVuY29kZSA9ICh1cmw6IHN0cmluZyk6IGJvb2xlYW4gPT4ge1xuICB1cmwgPSB1cmwgfHwgJydcbiAgdHJ5IHtcbiAgICAvLyB0aGUgd2hvbGUgdXJsIGVuY29kZSBvciBkZWNvZGUgc2hvbGQgbm90IHVzZSBlbmNvZGVVUklDb21wb25lbnQgb3IgZGVjb2RlVVJJQ29tcG9uZW50XG4gICAgcmV0dXJuIHVybCAhPT0gZGVjb2RlVVJJKHVybClcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG59XG5leHBvcnQgY29uc3QgaGFuZGxlVXJsRW5jb2RlID0gKHVybDogc3RyaW5nKTogc3RyaW5nID0+IHtcbiAgaWYgKCFpc1VybEVuY29kZSh1cmwpKSB7XG4gICAgdXJsID0gZW5jb2RlVVJJKHVybClcbiAgfVxuICByZXR1cm4gdXJsXG59XG5cbmV4cG9ydCBjb25zdCBnZXRJbWFnZVNpemUgPSAoZmlsZTogQnVmZmVyKTogSUltZ1NpemUgPT4ge1xuICB0cnkge1xuICAgIGNvbnN0IHsgd2lkdGggPSAwLCBoZWlnaHQgPSAwLCB0eXBlIH0gPSBpbWFnZVNpemUoZmlsZSlcbiAgICBjb25zdCBleHRuYW1lID0gdHlwZSA/IGAuJHt0eXBlfWAgOiAnLnBuZydcbiAgICByZXR1cm4ge1xuICAgICAgcmVhbDogdHJ1ZSxcbiAgICAgIHdpZHRoLFxuICAgICAgaGVpZ2h0LFxuICAgICAgZXh0bmFtZVxuICAgIH1cbiAgfSBjYXRjaCAoZSkge1xuICAgIC8vIGZhbGxiYWNrIHRvIDIwMCAqIDIwMFxuICAgIHJldHVybiB7XG4gICAgICByZWFsOiBmYWxzZSxcbiAgICAgIHdpZHRoOiAyMDAsXG4gICAgICBoZWlnaHQ6IDIwMCxcbiAgICAgIGV4dG5hbWU6ICcucG5nJ1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgY29uc3QgZ2V0RlNGaWxlID0gYXN5bmMgKGZpbGVQYXRoOiBzdHJpbmcpOiBQcm9taXNlPElQYXRoVHJhbnNmb3JtZWRJbWdJbmZvPiA9PiB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGV4dG5hbWU6IHBhdGguZXh0bmFtZShmaWxlUGF0aCksXG4gICAgICBmaWxlTmFtZTogcGF0aC5iYXNlbmFtZShmaWxlUGF0aCksXG4gICAgICBidWZmZXI6IGF3YWl0IHJlYWRGaWxlKGZpbGVQYXRoKSxcbiAgICAgIHN1Y2Nlc3M6IHRydWVcbiAgICB9XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiB7XG4gICAgICByZWFzb246IGByZWFkIGZpbGUgJHtmaWxlUGF0aH0gZXJyb3JgLFxuICAgICAgc3VjY2VzczogZmFsc2VcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGNvbnN0IGdldFVSTEZpbGUgPSBhc3luYyAodXJsOiBzdHJpbmcsIGN0eDogSVBpY0dvKTogUHJvbWlzZTxJUGF0aFRyYW5zZm9ybWVkSW1nSW5mbz4gPT4ge1xuICB1cmwgPSBoYW5kbGVVcmxFbmNvZGUodXJsKVxuICBsZXQgdGltZW91dElkOiBOb2RlSlMuVGltZW91dFxuICBjb25zdCByZXF1ZXN0Rm4gPSBuZXcgUHJvbWlzZTxJUGF0aFRyYW5zZm9ybWVkSW1nSW5mbz4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIDsoYXN5bmMgKCkgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgY3R4XG4gICAgICAgICAgLnJlcXVlc3Qoe1xuICAgICAgICAgICAgbWV0aG9kOiAnZ2V0JyxcbiAgICAgICAgICAgIHVybCxcbiAgICAgICAgICAgIHJlc29sdmVXaXRoRnVsbFJlc3BvbnNlOiB0cnVlLFxuICAgICAgICAgICAgcmVzcG9uc2VUeXBlOiAnYXJyYXlidWZmZXInXG4gICAgICAgICAgfSlcbiAgICAgICAgICAudGhlbihyZXNwID0+IHtcbiAgICAgICAgICAgIHJldHVybiByZXNwLmRhdGEgYXMgQnVmZmVyXG4gICAgICAgICAgfSlcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXRJZClcbiAgICAgICAgY29uc3QgdXJsUGF0aCA9IG5ldyBVUkwodXJsKS5wYXRobmFtZVxuICAgICAgICBsZXQgZXh0bmFtZSA9ICcnXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgdXJsUGFyYW1zID0gbmV3IFVSTCh1cmwpLnNlYXJjaFBhcmFtc1xuICAgICAgICAgIGV4dG5hbWUgPSB1cmxQYXJhbXMuZ2V0KCd3eF9mbXQnKSB8fCBwYXRoLmV4dG5hbWUodXJsUGF0aCkgfHwgJydcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICBleHRuYW1lID0gcGF0aC5leHRuYW1lKHVybFBhdGgpIHx8ICcnXG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFleHRuYW1lLnN0YXJ0c1dpdGgoJy4nKSAmJiBleHRuYW1lKSB7XG4gICAgICAgICAgZXh0bmFtZSA9IGAuJHtleHRuYW1lfWBcbiAgICAgICAgfVxuICAgICAgICByZXNvbHZlKHtcbiAgICAgICAgICBidWZmZXI6IHJlcyxcbiAgICAgICAgICBmaWxlTmFtZTogcGF0aC5iYXNlbmFtZSh1cmxQYXRoKSxcbiAgICAgICAgICBleHRuYW1lLFxuICAgICAgICAgIHN1Y2Nlc3M6IHRydWVcbiAgICAgICAgfSlcbiAgICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXRJZClcbiAgICAgICAgcmVzb2x2ZSh7XG4gICAgICAgICAgc3VjY2VzczogZmFsc2UsXG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9yZXN0cmljdC10ZW1wbGF0ZS1leHByZXNzaW9uc1xuICAgICAgICAgIHJlYXNvbjogYHJlcXVlc3QgJHt1cmx9IGVycm9yLCAke2Vycm9yPy5tZXNzYWdlID8/ICcnfWBcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9KSgpLmNhdGNoKHJlamVjdClcbiAgfSlcbiAgY29uc3QgdGltZW91dFByb21pc2UgPSBuZXcgUHJvbWlzZTxJUGF0aFRyYW5zZm9ybWVkSW1nSW5mbz4oKHJlc29sdmUpOiB2b2lkID0+IHtcbiAgICB0aW1lb3V0SWQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHJlc29sdmUoe1xuICAgICAgICBzdWNjZXNzOiBmYWxzZSxcbiAgICAgICAgcmVhc29uOiBgcmVxdWVzdCAke3VybH0gdGltZW91dGBcbiAgICAgIH0pXG4gICAgfSwgMzAwMDApXG4gIH0pXG4gIHJldHVybiBQcm9taXNlLnJhY2UoW3JlcXVlc3RGbiwgdGltZW91dFByb21pc2VdKVxufVxuXG4vKipcbiAqIGRldGVjdCB0aGUgaW5wdXQgc3RyaW5nJ3MgdHlwZVxuICogZm9yIGV4YW1wbGVcbiAqIDEuIEB4eHgvcGljZ28tcGx1Z2luLXh4eCAtPiBzY29wZVxuICogMi4gcGljZ28tcGx1Z2luLXh4eCAtPiBub3JtYWxcbiAqIDMuIHh4eCAtPiBzaW1wbGVcbiAqIDQuIG5vdCBleGlzdHMgb3IgaXMgYSBwYXRoIC0+IHVua25vd25cbiAqIEBwYXJhbSBuYW1lXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRQbHVnaW5OYW1lVHlwZSA9IChuYW1lOiBzdHJpbmcpOiBJUGx1Z2luTmFtZVR5cGUgPT4ge1xuICBpZiAoL15AW14vXStcXC9waWNnby1wbHVnaW4tLy50ZXN0KG5hbWUpKSB7XG4gICAgcmV0dXJuICdzY29wZSdcbiAgfSBlbHNlIGlmIChuYW1lLnN0YXJ0c1dpdGgoJ3BpY2dvLXBsdWdpbi0nKSkge1xuICAgIHJldHVybiAnbm9ybWFsJ1xuICB9IGVsc2UgaWYgKGlzU2ltcGxlTmFtZShuYW1lKSkge1xuICAgIHJldHVybiAnc2ltcGxlJ1xuICB9XG4gIHJldHVybiAndW5rbm93bidcbn1cblxuLyoqXG4gKiBkZXRlY3QgdGhlIGlucHV0IHN0cmluZyBpcyBhIHNpbXBsZSBwbHVnaW4gbmFtZSBvciBub3RcbiAqIGZvciBleGFtcGxlXG4gKiAxLiB4eHggLT4gdHJ1ZVxuICogMi4gL1Vzci94eC94eHh4L3BpY2dvLXBsdWdpbi14eHggLT4gZmFsc2VcbiAqIEBwYXJhbSBuYW1lIHBsdWdpbk5hbWVPclBhdGhcbiAqL1xuZXhwb3J0IGNvbnN0IGlzU2ltcGxlTmFtZSA9IChuYW1lT3JQYXRoOiBzdHJpbmcpOiBib29sZWFuID0+IHtcbiAgaWYgKHBhdGguaXNBYnNvbHV0ZShuYW1lT3JQYXRoKSkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG4gIGNvbnN0IHBsdWdpblBhdGggPSBwYXRoLmpvaW4ocHJvY2Vzcy5jd2QoKSwgbmFtZU9yUGF0aClcbiAgaWYgKGZzLmV4aXN0c1N5bmMocGx1Z2luUGF0aCkpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuICBpZiAobmFtZU9yUGF0aC5pbmNsdWRlcygnLycpIHx8IG5hbWVPclBhdGguaW5jbHVkZXMoJ1xcXFwnKSkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG4gIHJldHVybiB0cnVlXG59XG5cbi8qKlxuICogc3RyZWFtbGluZSB0aGUgZnVsbCBwbHVnaW4gbmFtZSB0byBhIHNpbXBsZSBvbmVcbiAqIGZvciBleGFtcGxlOlxuICogMS4gcGljZ28tcGx1Z2luLXh4eCAtPiB4eHhcbiAqIDIuIEB4eHgvcGljZ28tcGx1Z2luLXl5eSAtPiB5eXlcbiAqIEBwYXJhbSBuYW1lIHBsdWdpbkZ1bGxOYW1lXG4gKi9cbmV4cG9ydCBjb25zdCBoYW5kbGVTdHJlYW1saW5lUGx1Z2luTmFtZSA9IChuYW1lOiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xuICBpZiAoL15AW14vXStcXC9waWNnby1wbHVnaW4tLy50ZXN0KG5hbWUpKSB7XG4gICAgcmV0dXJuIG5hbWUucmVwbGFjZSgvXkBbXi9dK1xcL3BpY2dvLXBsdWdpbi0vLCAnJylcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gbmFtZS5yZXBsYWNlKC9waWNnby1wbHVnaW4tLywgJycpXG4gIH1cbn1cblxuLyoqXG4gKiBjb21wbGV0ZSBwbHVnaW4gbmFtZSB0byBmdWxsIG5hbWVcbiAqIGZvciBleGFtcGxlOlxuICogMS4geHh4IC0+IHBpY2dvLXBsdWdpbi14eHhcbiAqIDIuIHBpY2dvLXBsdWdpbi14eHggLT4gcGljZ28tcGx1Z2luLXh4eFxuICogQHBhcmFtIG5hbWUgcGx1Z2luU2ltcGxlTmFtZVxuICogQHBhcmFtIHNjb3BlIHBsdWdpblNjb3BlXG4gKi9cbmV4cG9ydCBjb25zdCBoYW5kbGVDb21wbGV0ZVBsdWdpbk5hbWUgPSAobmFtZTogc3RyaW5nLCBzY29wZSA9ICcnKTogc3RyaW5nID0+XG4gIHNjb3BlID8gYEAke3Njb3BlfS9waWNnby1wbHVnaW4tJHtuYW1lfWAgOiBgcGljZ28tcGx1Z2luLSR7bmFtZX1gXG5cbi8qKlxuICogaGFuZGxlIGluc3RhbGwvdW5pbnN0YWxsL3VwZGF0ZSBwbHVnaW4gbmFtZSBvciBwYXRoXG4gKiBmb3IgZXhhbXBsZVxuICogMS4gcGljZ28tcGx1Z2luLXh4eCAtPiBwaWNnby1wbHVnaW4teHh4XG4gKiAyLiBAeHh4L3BpY2dvLXBsdWdpbi14eHggLT4gQHh4eC9waWNnby1wbHVnaW4teHh4XG4gKiAzLiB4eHggLT4gcGljZ28tcGx1Z2luLXh4eFxuICogNC4gLi94eHh4L3BpY2dvLXBsdWdpbi14eHggLT4gL2Fic29sdXRlUGF0aC8uLi4veHh4eC9waWNnby1wbHVnaW4teHh4XG4gKiA1LiAvYWJzb2x1dGVQYXRoLy4uLi9waWNnby1wbHVnaW4teHh4IC0+IC9hYnNvbHV0ZVBhdGgvLi4uL3BpY2dvLXBsdWdpbi14eHhcbiAqIEBwYXJhbSBuYW1lT3JQYXRoIHBsdWdpbk5hbWUgb3IgcGx1Z2luUGF0aFxuICovXG5leHBvcnQgY29uc3QgZ2V0UHJvY2Vzc1BsdWdpbk5hbWUgPSAobmFtZU9yUGF0aDogc3RyaW5nLCBsb2dnZXI6IElMb2dnZXIgfCBDb25zb2xlID0gY29uc29sZSk6IHN0cmluZyA9PiB7XG4gIGNvbnN0IHBsdWdpbk5hbWVUeXBlID0gZ2V0UGx1Z2luTmFtZVR5cGUobmFtZU9yUGF0aClcbiAgc3dpdGNoIChwbHVnaW5OYW1lVHlwZSkge1xuICAgIGNhc2UgJ25vcm1hbCc6XG4gICAgY2FzZSAnc2NvcGUnOlxuICAgICAgcmV0dXJuIG5hbWVPclBhdGhcbiAgICBjYXNlICdzaW1wbGUnOlxuICAgICAgcmV0dXJuIGhhbmRsZUNvbXBsZXRlUGx1Z2luTmFtZShuYW1lT3JQYXRoKVxuICAgIGRlZmF1bHQ6IHtcbiAgICAgIC8vIG5vdywgdGhlIHBsdWdpbk5hbWVUeXBlIGlzIHVua25vdyBoZXJlXG4gICAgICAvLyAxLiBjaGVjayBpZiBpcyBhbiBhYnNvbHV0ZSBwYXRoXG4gICAgICBsZXQgcGx1Z2luUGF0aCA9IG5hbWVPclBhdGhcbiAgICAgIGlmIChwYXRoLmlzQWJzb2x1dGUobmFtZU9yUGF0aCkgJiYgZnMuZXhpc3RzU3luYyhuYW1lT3JQYXRoKSkge1xuICAgICAgICByZXR1cm4gaGFuZGxlVW5peFN0eWxlUGF0aChwbHVnaW5QYXRoKVxuICAgICAgfVxuICAgICAgLy8gMi4gY2hlY2sgaWYgaXMgYSByZWxhdGl2ZSBwYXRoXG4gICAgICBwbHVnaW5QYXRoID0gcGF0aC5qb2luKHByb2Nlc3MuY3dkKCksIG5hbWVPclBhdGgpXG4gICAgICBpZiAoZnMuZXhpc3RzU3luYyhwbHVnaW5QYXRoKSkge1xuICAgICAgICByZXR1cm4gaGFuZGxlVW5peFN0eWxlUGF0aChwbHVnaW5QYXRoKVxuICAgICAgfVxuICAgICAgLy8gMy4gaW52YWxpZCBuYW1lT3JQYXRoXG4gICAgICBsb2dnZXIud2FybihgQ2FuJ3QgZmluZCBwbHVnaW4gJHtuYW1lT3JQYXRofWApXG4gICAgICByZXR1cm4gJydcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBnZXQgdGhlIG5vcm1hbCBwbHVnaW4gbmFtZVxuICogZm9yIGV4YW1wbGU6XG4gKiAxLiBwaWNnby1wbHVnaW4teHh4IC0+IHBpY2dvLXBsdWdpbi14eHhcbiAqIDIuIEB4eHgvcGljZ28tcGx1Z2luLXh4eCAtPiBAeHh4L3BpY2dvLXBsdWdpbi14eHhcbiAqIDMuIC4veHh4eC9waWNnby1wbHVnaW4teHh4IC0+IHBpY2dvLXBsdWdpbi14eHhcbiAqIDQuIC9hYnNvbHV0ZVBhdGgvLi4uL3BpY2dvLXBsdWdpbi14eHggLT4gcGljZ28tcGx1Z2luLXh4eFxuICogNS4gYW4gZXhjZXB0aW9uOiBbcGFja2FnZS5qc29uJ3MgbmFtZV0gIT09IFtmb2xkZXIgbmFtZV1cbiAqIHRoZW4gdXNlIFtwYWNrYWdlLmpzb24ncyBuYW1lXSwgdXN1YWxseSBtYXRjaCB0aGUgc2NvcGUgcGFja2FnZS5cbiAqIDYuIGlmIHBsdWdpbiBuYW1lIGhhcyB2ZXJzaW9uOiBwaWNnby1wbHVnaW4teHh4QHgueC54IHRoZW4gcmVtb3ZlIHRoZSB2ZXJzaW9uXG4gKiBAcGFyYW0gbmFtZU9yUGF0aFxuICovXG5leHBvcnQgY29uc3QgZ2V0Tm9ybWFsUGx1Z2luTmFtZSA9IChuYW1lT3JQYXRoOiBzdHJpbmcsIGxvZ2dlcjogSUxvZ2dlciB8IENvbnNvbGUgPSBjb25zb2xlKTogc3RyaW5nID0+IHtcbiAgY29uc3QgcGx1Z2luTmFtZVR5cGUgPSBnZXRQbHVnaW5OYW1lVHlwZShuYW1lT3JQYXRoKVxuICBzd2l0Y2ggKHBsdWdpbk5hbWVUeXBlKSB7XG4gICAgY2FzZSAnbm9ybWFsJzpcbiAgICAgIHJldHVybiByZW1vdmVQbHVnaW5WZXJzaW9uKG5hbWVPclBhdGgpXG4gICAgY2FzZSAnc2NvcGUnOlxuICAgICAgcmV0dXJuIHJlbW92ZVBsdWdpblZlcnNpb24obmFtZU9yUGF0aCwgdHJ1ZSlcbiAgICBjYXNlICdzaW1wbGUnOlxuICAgICAgcmV0dXJuIHJlbW92ZVBsdWdpblZlcnNpb24oaGFuZGxlQ29tcGxldGVQbHVnaW5OYW1lKG5hbWVPclBhdGgpKVxuICAgIGRlZmF1bHQ6IHtcbiAgICAgIC8vIG5vdywgdGhlIG5hbWVPclBhdGggbXVzdCBiZSBwYXRoXG4gICAgICAvLyB0aGUgbmFtZU9yUGF0aCBoZXJlIHdpbGwgYmUgZW5zdXJlZCB3aXRoIHVuaXggc3R5bGVcbiAgICAgIC8vIHdlIG5lZWQgdG8gZmluZCB0aGUgcGFja2FnZS5qc29uJ3MgbmFtZSBjYXVzZSBucG0gdXNpbmcgdGhlIG5hbWUgaW4gcGFja2FnZS5qc29uJ3MgbmFtZSBmaWxlZFxuICAgICAgaWYgKCFmcy5leGlzdHNTeW5jKG5hbWVPclBhdGgpKSB7XG4gICAgICAgIGxvZ2dlci53YXJuKGBDYW4ndCBmaW5kIHBsdWdpbjogJHtuYW1lT3JQYXRofWApXG4gICAgICAgIHJldHVybiAnJ1xuICAgICAgfVxuICAgICAgY29uc3QgcGFja2FnZUpTT05QYXRoID0gcGF0aC5wb3NpeC5qb2luKG5hbWVPclBhdGgsICdwYWNrYWdlLmpzb24nKVxuICAgICAgaWYgKCFmcy5leGlzdHNTeW5jKHBhY2thZ2VKU09OUGF0aCkpIHtcbiAgICAgICAgbG9nZ2VyLndhcm4oYENhbid0IGZpbmQgcGx1Z2luOiAke25hbWVPclBhdGh9YClcbiAgICAgICAgcmV0dXJuICcnXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBwa2cgPSByZWFkSlNPTlN5bmMocGFja2FnZUpTT05QYXRoKSB8fCB7fVxuICAgICAgICBpZiAoIXBrZy5uYW1lPy5pbmNsdWRlcygncGljZ28tcGx1Z2luLScpKSB7XG4gICAgICAgICAgbG9nZ2VyLndhcm4oXG4gICAgICAgICAgICBgVGhlIHBsdWdpbiBwYWNrYWdlLmpzb24ncyBuYW1lIGZpbGVkIGlzICR7KHBrZy5uYW1lIGFzIHN0cmluZykgfHwgJ2VtcHR5J30sIG5lZWQgdG8gaW5jbHVkZSB0aGUgcHJlZml4OiBwaWNnby1wbHVnaW4tYFxuICAgICAgICAgIClcbiAgICAgICAgICByZXR1cm4gJydcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcGtnLm5hbWVcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBoYW5kbGUgdHJhbnNmb3JtIHRoZSBwYXRoIHRvIHVuaXggc3R5bGVcbiAqIGZvciBleGFtcGxlXG4gKiAxLiBDOlxcXFx4eHhcXFxceHh4IC0+IEM6L3h4eC94eHhcbiAqIDIuIC94eHgveHh4IC0+IC94eHgveHh4XG4gKiBAcGFyYW0gcGF0aFxuICovXG5leHBvcnQgY29uc3QgaGFuZGxlVW5peFN0eWxlUGF0aCA9IChwYXRoU3RyOiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xuICBjb25zdCBwYXRoQXJyID0gcGF0aFN0ci5zcGxpdChwYXRoLnNlcClcbiAgcmV0dXJuIHBhdGhBcnIuam9pbignLycpXG59XG5cbi8qKlxuICogcmVtb3ZlIHBsdWdpbiB2ZXJzaW9uIHdoZW4gcmVnaXN0ZXIgcGx1Z2luIG5hbWVcbiAqIDEuIHBpY2dvLXBsdWdpbi14eHhAMS4wLjAgLT4gcGljZ28tcGx1Z2luLXh4eFxuICogMi4gQHh4eC9waWNnby1wbHVnaW4teHh4QDEuMC4wIC0+IEB4eHgvcGljZ28tcGx1Z2luLXh4eFxuICogQHBhcmFtIG5hbWVPclBhdGhcbiAqIEBwYXJhbSBzY29wZVxuICovXG5leHBvcnQgY29uc3QgcmVtb3ZlUGx1Z2luVmVyc2lvbiA9IChuYW1lT3JQYXRoOiBzdHJpbmcsIHNjb3BlOiBib29sZWFuID0gZmFsc2UpOiBzdHJpbmcgPT4ge1xuICBpZiAoIW5hbWVPclBhdGguaW5jbHVkZXMoJ0AnKSkge1xuICAgIHJldHVybiBuYW1lT3JQYXRoXG4gIH0gZWxzZSB7XG4gICAgbGV0IHJlZyA9IC8oLitcXC8pPyhwaWNnby1wbHVnaW4tXFx3KykoQC4rKSovXG4gICAgLy8gaWYgaXMgYSBzY29wZSBwa2dcbiAgICBpZiAoc2NvcGUpIHtcbiAgICAgIHJlZyA9IC8oLitcXC8pPyheQFteL10rXFwvcGljZ28tcGx1Z2luLVxcdyspKEAuKykqL1xuICAgIH1cbiAgICBjb25zdCBtYXRjaEFyciA9IG5hbWVPclBhdGgubWF0Y2gocmVnKVxuICAgIGlmICghbWF0Y2hBcnIpIHtcbiAgICAgIGNvbnNvbGUud2FybignY2FuIG5vdCByZW1vdmUgcGx1Z2luIHZlcnNpb24nKVxuICAgICAgcmV0dXJuIG5hbWVPclBhdGhcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG1hdGNoQXJyWzJdXG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogdGhlIGNvbmZpZyBibGFjayBpdGVtIGxpc3Qgd2hpY2ggd29uJ3QgYmUgc2V0dGVkXG4gKiBvbmx5IGNhbiBiZSBnb3RcbiAqL1xuZXhwb3J0IGNvbnN0IGNvbmZpZ0JsYWNrTGlzdCA9IFtdXG5cbi8qKlxuICogY2hlY2sgc29tZSBjb25maWcga2V5IGlzIGluIGJsYWNrTGlzdFxuICogQHBhcmFtIGtleVxuICovXG5leHBvcnQgY29uc3QgaXNDb25maWdLZXlJbkJsYWNrTGlzdCA9IChrZXk6IHN0cmluZyk6IGJvb2xlYW4gPT4ge1xuICByZXR1cm4gY29uZmlnQmxhY2tMaXN0LnNvbWUoYmxhY2tJdGVtID0+IGtleS5zdGFydHNXaXRoKGJsYWNrSXRlbSkpXG59XG5cbi8qKlxuICogY2hlY2sgdGhlIGlucHV0IGNvbmZpZyBpcyB2YWxpZFxuICogY29uZmlnIG11c3QgYmUgb2JqZWN0IHN1Y2ggYXMgeyB4eHg6ICd4eHgnIH1cbiAqICYmIGNhbid0IGJlIGFycmF5XG4gKiBAcGFyYW0gY29uZmlnXG4gKiBAcmV0dXJuc1xuICovXG5leHBvcnQgY29uc3QgaXNJbnB1dENvbmZpZ1ZhbGlkID0gKGNvbmZpZzogYW55KTogYm9vbGVhbiA9PiB7XG4gIGlmICh0eXBlb2YgY29uZmlnID09PSAnb2JqZWN0JyAmJiAhQXJyYXkuaXNBcnJheShjb25maWcpICYmIE9iamVjdC5rZXlzKGNvbmZpZykubGVuZ3RoID4gMCkge1xuICAgIHJldHVybiB0cnVlXG4gIH1cbiAgcmV0dXJuIGZhbHNlXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzYWZlUGFyc2U8VD4oc3RyOiBzdHJpbmcpOiBUIHwgc3RyaW5nIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gSlNPTi5wYXJzZShzdHIpXG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuIHN0clxuICB9XG59XG5cbmV4cG9ydCBjb25zdCBmb3JjZU51bWJlciA9IChudW06IHN0cmluZyB8IG51bWJlciA9IDApOiBudW1iZXIgPT4ge1xuICByZXR1cm4gaXNOYU4oTnVtYmVyKG51bSkpID8gMCA6IE51bWJlcihudW0pXG59XG5cbmV4cG9ydCBjb25zdCBpc0RldiA9ICgpOiBib29sZWFuID0+IHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAnZGV2ZWxvcG1lbnQnXG5cbmFzeW5jIGZ1bmN0aW9uIHRleHQyU1ZHKFxuICBkZWZhdWx0V2F0ZXJtYXJrRm9udFBhdGg6IHN0cmluZyxcbiAgdGV4dD86IHN0cmluZyxcbiAgY29sb3I/OiBzdHJpbmcsXG4gIGZvbnRGYW1pbHk/OiBzdHJpbmdcbik6IFByb21pc2U8QnVmZmVyPiB7XG4gIHRleHQgPSAhdGV4dCA/ICfmtYvor5UnIDogdGV4dFxuICBmb250RmFtaWx5ID0gIWZvbnRGYW1pbHkgPyBkZWZhdWx0V2F0ZXJtYXJrRm9udFBhdGggOiBmb250RmFtaWx5XG4gIGNvbG9yID0gIWNvbG9yID8gJ3JnYmEoMjA0LCAyMDQsIDIwNCwgMC40NSknIDogY29sb3JcbiAgY29uc3QgdGV4dDJTVkcgPSBUZXh0VG9TVkcubG9hZFN5bmMoZm9udEZhbWlseSlcbiAgY29uc3Qgb3B0aW9uczogVGV4dFRvU1ZHLkdlbmVyYXRpb25PcHRpb25zID0ge1xuICAgIGFuY2hvcjogJ3RvcCcsXG4gICAgYXR0cmlidXRlczoge1xuICAgICAgZmlsbDogY29sb3JcbiAgICB9XG4gIH1cbiAgY29uc3QgdGV4dFNWRyA9IHRleHQyU1ZHLmdldFNWRyh0ZXh0LCBvcHRpb25zKVxuICByZXR1cm4gQnVmZmVyLmZyb20odGV4dFNWRylcbn1cblxuY29uc3QgZGVmYXVsdFdhdGVybWFya0ltYWdlUGF0aCA9IHBhdGguam9pbihfX2Rpcm5hbWUsICdhc3NldHMnLCAncGljbGlzdC5wbmcnKVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gQWRkV2F0ZXJtYXJrKFxuICBpbWc6IEJ1ZmZlcixcbiAgd2F0ZXJtYXJrVHlwZTogJ3RleHQnIHwgJ2ltYWdlJyxcbiAgZGVmYXVsdFdhdGVybWFya0ZvbnRQYXRoOiBzdHJpbmcsXG4gIGlzRnVsbFNjcmVlbldhdGVybWFyaz86IGJvb2xlYW4sXG4gIHdhdGVybWFya0RlZ3JlZT86IG51bWJlcixcbiAgdGV4dD86IHN0cmluZyxcbiAgd2F0ZXJtYXJrRm9udFBhdGg/OiBzdHJpbmcsXG4gIHdhdGVybWFya1NjYWxlUmF0aW8/OiBudW1iZXIsXG4gIHdhdGVybWFya0NvbG9yPzogc3RyaW5nLFxuICB3YXRlcm1hcmtJbWFnZVBhdGg/OiBzdHJpbmcsXG4gIHBvc2l0aW9uPzogc2hhcnAuR3Jhdml0eVxuKTogUHJvbWlzZTxCdWZmZXI+IHtcbiAgd2F0ZXJtYXJrU2NhbGVSYXRpbyA9XG4gICAgIXdhdGVybWFya1NjYWxlUmF0aW8gfHwgd2F0ZXJtYXJrU2NhbGVSYXRpbyA8IDAgfHwgd2F0ZXJtYXJrU2NhbGVSYXRpbyA+IDEgPyAwLjE1IDogd2F0ZXJtYXJrU2NhbGVSYXRpb1xuICBjb25zdCBpbWFnZSA9IHNoYXJwKGltZywgeyBhbmltYXRlZDogdHJ1ZSB9KVxuICBjb25zdCB7IHdpZHRoOiBpbWdXaWR0aCA9IDIwMCB9ID0gYXdhaXQgaW1hZ2UubWV0YWRhdGEoKVxuICBjb25zdCB3YXRlcm1hcmsgPSBhd2FpdCBjcmVhdGVXYXRlcm1hcmsoXG4gICAgd2F0ZXJtYXJrVHlwZSxcbiAgICBkZWZhdWx0V2F0ZXJtYXJrRm9udFBhdGgsXG4gICAgdGV4dCxcbiAgICB3YXRlcm1hcmtGb250UGF0aCxcbiAgICB3YXRlcm1hcmtTY2FsZVJhdGlvLFxuICAgIHdhdGVybWFya0NvbG9yLFxuICAgIHdhdGVybWFya0ltYWdlUGF0aCxcbiAgICBpbWdXaWR0aCxcbiAgICB3YXRlcm1hcmtEZWdyZWVcbiAgKVxuICByZXR1cm4gYXdhaXQgaW1hZ2VcbiAgICAuY29tcG9zaXRlKFtcbiAgICAgIHtcbiAgICAgICAgaW5wdXQ6IHdhdGVybWFyayxcbiAgICAgICAgZ3Jhdml0eTogcG9zaXRpb24gfHwgJ3NvdXRoZWFzdCcsXG4gICAgICAgIHRpbGU6IGlzRnVsbFNjcmVlbldhdGVybWFya1xuICAgICAgfVxuICAgIF0pXG4gICAgLnRvQnVmZmVyKClcbn1cblxuYXN5bmMgZnVuY3Rpb24gY3JlYXRlV2F0ZXJtYXJrKFxuICB3YXRlcm1hcmtUeXBlOiAndGV4dCcgfCAnaW1hZ2UnLFxuICBkZWZhdWx0V2F0ZXJtYXJrRm9udFBhdGg6IHN0cmluZyxcbiAgdGV4dD86IHN0cmluZyxcbiAgd2F0ZXJtYXJrRm9udFBhdGg/OiBzdHJpbmcsXG4gIHdhdGVybWFya1NjYWxlUmF0aW8/OiBudW1iZXIsXG4gIHdhdGVybWFya0NvbG9yPzogc3RyaW5nLFxuICB3YXRlcm1hcmtJbWFnZVBhdGg/OiBzdHJpbmcsXG4gIGltZ1dpZHRoOiBudW1iZXIgPSAyMDAsXG4gIHdhdGVybWFya0RlZ3JlZTogbnVtYmVyID0gMFxuKTogUHJvbWlzZTxCdWZmZXI+IHtcbiAgbGV0IHdhdGVybWFyazogYW55XG4gIGlmICh3YXRlcm1hcmtUeXBlID09PSAnaW1hZ2UnKSB7XG4gICAgd2F0ZXJtYXJrSW1hZ2VQYXRoID0gd2F0ZXJtYXJrSW1hZ2VQYXRoIHx8IGRlZmF1bHRXYXRlcm1hcmtJbWFnZVBhdGhcbiAgICB3YXRlcm1hcmsgPSBhd2FpdCBzaGFycCh3YXRlcm1hcmtJbWFnZVBhdGgpLnRvQnVmZmVyKClcbiAgfSBlbHNlIHtcbiAgICB3YXRlcm1hcmsgPSBhd2FpdCB0ZXh0MlNWRyhcbiAgICAgIGRlZmF1bHRXYXRlcm1hcmtGb250UGF0aCxcbiAgICAgIHRleHQsXG4gICAgICB3YXRlcm1hcmtDb2xvcixcbiAgICAgIHdhdGVybWFya0ZvbnRQYXRoIHx8IGRlZmF1bHRXYXRlcm1hcmtGb250UGF0aFxuICAgIClcbiAgfVxuICBjb25zdCB7IHdpZHRoOiB3YXRlcm1hcmtXaWR0aCwgaGVpZ2h0OiB3YXRlcm1hcmtIZWlnaHQgfSA9IGF3YWl0IGdldFNpemUod2F0ZXJtYXJrKVxuICBjb25zdCB3YXRlcm1hcmtSZXNpemVXaWR0aCA9IE1hdGguZmxvb3IoaW1nV2lkdGggKiBmb3JjZU51bWJlcih3YXRlcm1hcmtTY2FsZVJhdGlvKSlcbiAgY29uc3Qgd2F0ZXJtYXJrUmVzaXplSGVpZ2h0ID0gTWF0aC5mbG9vcigod2F0ZXJtYXJrUmVzaXplV2lkdGggKiB3YXRlcm1hcmtIZWlnaHQpIC8gd2F0ZXJtYXJrV2lkdGgpXG4gIHJldHVybiBhd2FpdCBzaGFycCh3YXRlcm1hcmspXG4gICAgLnJlc2l6ZSh3YXRlcm1hcmtSZXNpemVXaWR0aCwgd2F0ZXJtYXJrUmVzaXplSGVpZ2h0LCB7XG4gICAgICBmaXQ6ICdpbnNpZGUnXG4gICAgfSlcbiAgICAucm90YXRlKHdhdGVybWFya0RlZ3JlZSwge1xuICAgICAgYmFja2dyb3VuZDogeyByOiAyNTUsIGc6IDI1NSwgYjogMjU1LCBhbHBoYTogMCB9XG4gICAgfSlcbiAgICAudG9CdWZmZXIoKVxufVxuXG5hc3luYyBmdW5jdGlvbiBnZXRTaXplKGltYWdlOiBCdWZmZXIpOiBQcm9taXNlPHsgd2lkdGg6IG51bWJlcjsgaGVpZ2h0OiBudW1iZXIgfT4ge1xuICBjb25zdCB7IHdpZHRoLCBoZWlnaHQgfSA9IGF3YWl0IHNoYXJwKGltYWdlKS5tZXRhZGF0YSgpXG4gIHJldHVybiB7IHdpZHRoOiB3aWR0aCB8fCAyMDAsIGhlaWdodDogaGVpZ2h0IHx8IDIwMCB9XG59XG5cbmNvbnN0IHZhbGlkUGFyYW0gPSAoLi4ucGFyYW1zOiBhbnlbXSk6IGJvb2xlYW4gPT4ge1xuICByZXR1cm4gcGFyYW1zLmV2ZXJ5KHBhcmFtID0+IHtcbiAgICBpZiAocGFyYW0gPT09IHVuZGVmaW5lZCB8fCBwYXJhbSA9PT0gbnVsbCkgcmV0dXJuIGZhbHNlXG4gICAgaWYgKHR5cGVvZiBwYXJhbSA9PT0gJ3N0cmluZycpIHJldHVybiBwYXJhbSAhPT0gJydcbiAgICBpZiAodHlwZW9mIHBhcmFtID09PSAnbnVtYmVyJykgcmV0dXJuIHBhcmFtID4gMFxuICAgIGlmICh0eXBlb2YgcGFyYW0gPT09ICdvYmplY3QnKSByZXR1cm4gT2JqZWN0LmtleXMocGFyYW0pLmxlbmd0aCA+IDBcbiAgICByZXR1cm4gdHJ1ZVxuICB9KVxufVxuXG4vKipcbiAqIOi9rOaNouWQjuWPr+S7pei+k+WHuueahOagvOW8j+WIl+ihqFxuICovXG5jb25zdCBhdmFpbGFibGVDb252ZXJ0Rm9ybWF0TGlzdCA9IFtcbiAgJ2F2aWYnLFxuICAnZHonLFxuICAnZml0cycsXG4gICdnaWYnLFxuICAnaGVpZicsXG4gICdpbnB1dCcsXG4gICdqcGVnJyxcbiAgJ2pwZycsXG4gICdqcDInLFxuICAnanhsJyxcbiAgJ21hZ2ljaycsXG4gICdvcGVuc2xpZGUnLFxuICAncGRmJyxcbiAgJ3BuZycsXG4gICdwcG0nLFxuICAncmF3JyxcbiAgJ3N2ZycsXG4gICd0aWZmJyxcbiAgJ3RpZicsXG4gICd2JyxcbiAgJ3dlYnAnXG5dXG5cbi8qKlxuICog5Y+v5Lul5aSE55CG55qE5Zu+54mH5qC85byP5YiX6KGoXG4gKi9cbmNvbnN0IGltYWdlRm9ybWF0TGlzdCA9IFtcbiAgJ2pwZycsXG4gICdqcGVnJyxcbiAgJ3BuZycsXG4gICd3ZWJwJyxcbiAgJ2JtcCcsXG4gICd0aWZmJyxcbiAgJ3RpZicsXG4gICdzdmcnLFxuICAnaWNvJyxcbiAgJ2F2aWYnLFxuICAnaGVpZicsXG4gICdoZWljJyxcbiAgJ2dpZidcbl1cblxuY29uc3QgdmFsaWRPdXRwdXRGb3JtYXQgPSAoZm9ybWF0OiBzdHJpbmcpOiBib29sZWFuID0+IGF2YWlsYWJsZUNvbnZlcnRGb3JtYXRMaXN0LmluY2x1ZGVzKGZvcm1hdClcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGltYWdlQWRkV2F0ZXJNYXJrKFxuICBpbWc6IEJ1ZmZlcixcbiAgb3B0aW9uczogSUJ1aWxkSW5XYXRlck1hcmtPcHRpb25zLFxuICBkZWZhdWx0V2F0ZXJtYXJrRm9udFBhdGg6IHN0cmluZyxcbiAgbG9nZ2VyOiBJTG9nZ2VyXG4pOiBQcm9taXNlPEJ1ZmZlcj4ge1xuICB0cnkge1xuICAgIGxldCBpbWFnZTogc2hhcnAuU2hhcnAgPSBzaGFycChpbWcsIHsgYW5pbWF0ZWQ6IHRydWUgfSlcbiAgICBpbWFnZSA9IHNoYXJwKFxuICAgICAgYXdhaXQgQWRkV2F0ZXJtYXJrKFxuICAgICAgICBpbWcsXG4gICAgICAgIG9wdGlvbnMud2F0ZXJtYXJrVHlwZSB8fCAndGV4dCcsXG4gICAgICAgIGRlZmF1bHRXYXRlcm1hcmtGb250UGF0aCxcbiAgICAgICAgb3B0aW9ucy5pc0Z1bGxTY3JlZW5XYXRlcm1hcmssXG4gICAgICAgIGZvcmNlTnVtYmVyKG9wdGlvbnMud2F0ZXJtYXJrRGVncmVlKSxcbiAgICAgICAgb3B0aW9ucy53YXRlcm1hcmtUZXh0LFxuICAgICAgICBvcHRpb25zLndhdGVybWFya0ZvbnRQYXRoLFxuICAgICAgICBmb3JjZU51bWJlcihvcHRpb25zLndhdGVybWFya1NjYWxlUmF0aW8pLFxuICAgICAgICBvcHRpb25zLndhdGVybWFya0NvbG9yLFxuICAgICAgICBvcHRpb25zLndhdGVybWFya0ltYWdlUGF0aCxcbiAgICAgICAgb3B0aW9ucy53YXRlcm1hcmtQb3NpdGlvblxuICAgICAgKSxcbiAgICAgIHsgYW5pbWF0ZWQ6IHRydWUgfVxuICAgIClcbiAgICByZXR1cm4gYXdhaXQgaW1hZ2UudG9CdWZmZXIoKVxuICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgbG9nZ2VyLmVycm9yKGBJbWFnZSBhZGQgd2F0ZXJtYXJrIGVycm9yOiAke2Vycm9yfWApXG4gICAgcmV0dXJuIGltZ1xuICB9XG59XG5cbmZ1bmN0aW9uIGZvcm1hdE9wdGlvbnMob3B0aW9uczogSUJ1aWxkSW5Db21wcmVzc09wdGlvbnMpOiBJQnVpbGRJbkNvbXByZXNzT3B0aW9ucyB7XG4gIGNvbnN0IGZvcm1hdENvbnZlcnRPYmogPVxuICAgIHR5cGVvZiBvcHRpb25zLmZvcm1hdENvbnZlcnRPYmogPT09ICdzdHJpbmcnID8gc2FmZVBhcnNlKG9wdGlvbnMuZm9ybWF0Q29udmVydE9iaikgOiBvcHRpb25zLmZvcm1hdENvbnZlcnRPYmpcbiAgcmV0dXJuIHtcbiAgICBxdWFsaXR5OiBmb3JjZU51bWJlcihvcHRpb25zLnF1YWxpdHkpLFxuICAgIGlzQ29udmVydDogb3B0aW9ucy5pc0NvbnZlcnQgfHwgZmFsc2UsXG4gICAgY29udmVydEZvcm1hdDogb3B0aW9ucy5jb252ZXJ0Rm9ybWF0IHx8ICdqcGcnLFxuICAgIGlzUmVTaXplOiBvcHRpb25zLmlzUmVTaXplIHx8IGZhbHNlLFxuICAgIHJlU2l6ZUhlaWdodDogZm9yY2VOdW1iZXIob3B0aW9ucy5yZVNpemVIZWlnaHQpLFxuICAgIHJlU2l6ZVdpZHRoOiBmb3JjZU51bWJlcihvcHRpb25zLnJlU2l6ZVdpZHRoKSxcbiAgICBza2lwUmVTaXplT2ZTbWFsbEltZzogb3B0aW9ucy5za2lwUmVTaXplT2ZTbWFsbEltZyB8fCBmYWxzZSxcbiAgICBpc1JlU2l6ZUJ5UGVyY2VudDogb3B0aW9ucy5pc1JlU2l6ZUJ5UGVyY2VudCB8fCBmYWxzZSxcbiAgICByZVNpemVQZXJjZW50OiBmb3JjZU51bWJlcihvcHRpb25zLnJlU2l6ZVBlcmNlbnQpLFxuICAgIGlzUm90YXRlOiBvcHRpb25zLmlzUm90YXRlIHx8IGZhbHNlLFxuICAgIGlzRmxpcDogb3B0aW9ucy5pc0ZsaXAgfHwgZmFsc2UsXG4gICAgaXNGbG9wOiBvcHRpb25zLmlzRmxvcCB8fCBmYWxzZSxcbiAgICByb3RhdGVEZWdyZWU6IGZvcmNlTnVtYmVyKG9wdGlvbnMucm90YXRlRGVncmVlKSxcbiAgICBwaWNCZWQ6IG9wdGlvbnMucGljQmVkIHx8ICdzbW1zJyxcbiAgICBmb3JtYXRDb252ZXJ0T2JqOiBmb3JtYXRDb252ZXJ0T2JqIHx8IHt9XG4gIH1cbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGltYWdlQ29tcHJlc3MoXG4gIGltZzogQnVmZmVyLFxuICBvcHRpb25zOiBJQnVpbGRJbkNvbXByZXNzT3B0aW9ucyxcbiAgcmF3Rm9ybWF0OiBzdHJpbmcsXG4gIGxvZ2dlcjogSUxvZ2dlclxuKTogUHJvbWlzZTxCdWZmZXI+IHtcbiAgb3B0aW9ucyA9IGZvcm1hdE9wdGlvbnMob3B0aW9ucylcbiAgdHJ5IHtcbiAgICByYXdGb3JtYXQgPSBub3JtYWxpemVJbWFnZUV4dChyYXdGb3JtYXQpXG4gICAgaWYgKCFpbWFnZUZvcm1hdExpc3QuaW5jbHVkZXMocmF3Rm9ybWF0KSB8fCByYXdGb3JtYXQgPT09ICdnaWYnKSByZXR1cm4gaW1nXG4gICAgbGV0IGltYWdlOiBzaGFycC5TaGFycCA9IHNoYXJwKGltZywgeyBhbmltYXRlZDogdHJ1ZSB9KVxuICAgIGxldCBxdWFsaXR5ID0gMTAwXG4gICAgaWYgKHZhbGlkUGFyYW0ob3B0aW9ucy5xdWFsaXR5KSAmJiBvcHRpb25zLnF1YWxpdHkhIDwgMTAwKSB7XG4gICAgICBxdWFsaXR5ID0gTWF0aC5taW4oTWF0aC5tYXgoTWF0aC5yb3VuZChvcHRpb25zLnF1YWxpdHkhKSwgMSksIDEwMClcbiAgICB9XG4gICAgaWYgKG9wdGlvbnMuaXNSZVNpemVCeVBlcmNlbnQpIHtcbiAgICAgIGlmICh2YWxpZFBhcmFtKG9wdGlvbnMucmVTaXplUGVyY2VudCkpIHtcbiAgICAgICAgY29uc3QgaW1hZ2VXaWR0aCA9IGF3YWl0IGltYWdlLm1ldGFkYXRhKCkudGhlbihtZXRhZGF0YSA9PiBtZXRhZGF0YS53aWR0aClcbiAgICAgICAgY29uc3QgaW1hZ2VIZWlnaHQgPSBhd2FpdCBpbWFnZS5tZXRhZGF0YSgpLnRoZW4obWV0YWRhdGEgPT4gbWV0YWRhdGEuaGVpZ2h0KVxuICAgICAgICBpZiAoaW1hZ2VXaWR0aCAmJiBpbWFnZUhlaWdodCkge1xuICAgICAgICAgIGltYWdlID0gaW1hZ2UucmVzaXplKFxuICAgICAgICAgICAgTWF0aC5yb3VuZCgoaW1hZ2VXaWR0aCAqIG9wdGlvbnMucmVTaXplUGVyY2VudCEpIC8gMTAwKSxcbiAgICAgICAgICAgIE1hdGgucm91bmQoKGltYWdlSGVpZ2h0ICogb3B0aW9ucy5yZVNpemVQZXJjZW50ISkgLyAxMDApLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBmaXQ6ICdpbnNpZGUnXG4gICAgICAgICAgICB9XG4gICAgICAgICAgKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChvcHRpb25zLmlzUmVTaXplKSB7XG4gICAgICBpZiAoXG4gICAgICAgIHR5cGVvZiBvcHRpb25zLnJlU2l6ZUhlaWdodCA9PT0gJ251bWJlcicgJiZcbiAgICAgICAgb3B0aW9ucy5yZVNpemVIZWlnaHQgPiAwICYmXG4gICAgICAgIHR5cGVvZiBvcHRpb25zLnJlU2l6ZVdpZHRoID09PSAnbnVtYmVyJyAmJlxuICAgICAgICBvcHRpb25zLnJlU2l6ZVdpZHRoID4gMFxuICAgICAgKSB7XG4gICAgICAgIGltYWdlID0gaW1hZ2UucmVzaXplKG9wdGlvbnMucmVTaXplV2lkdGgsIG9wdGlvbnMucmVTaXplSGVpZ2h0LCB7XG4gICAgICAgICAgZml0OiAnZmlsbCdcbiAgICAgICAgfSlcbiAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgIHR5cGVvZiBvcHRpb25zLnJlU2l6ZUhlaWdodCA9PT0gJ251bWJlcicgJiZcbiAgICAgICAgb3B0aW9ucy5yZVNpemVIZWlnaHQgPiAwICYmXG4gICAgICAgICh0eXBlb2Ygb3B0aW9ucy5yZVNpemVXaWR0aCAhPT0gJ251bWJlcicgfHwgb3B0aW9ucy5yZVNpemVXaWR0aCA9PT0gMClcbiAgICAgICkge1xuICAgICAgICBjb25zdCBpbWFnZVdpZHRoID0gYXdhaXQgaW1hZ2UubWV0YWRhdGEoKS50aGVuKG1ldGFkYXRhID0+IG1ldGFkYXRhLndpZHRoKVxuICAgICAgICBjb25zdCBpbWFnZUhlaWdodCA9IGF3YWl0IGltYWdlLm1ldGFkYXRhKCkudGhlbihtZXRhZGF0YSA9PiBtZXRhZGF0YS5oZWlnaHQpXG4gICAgICAgIGlmIChpbWFnZVdpZHRoICYmIGltYWdlSGVpZ2h0KSB7XG4gICAgICAgICAgaWYgKCFvcHRpb25zLnNraXBSZVNpemVPZlNtYWxsSW1nIHx8IChvcHRpb25zLnNraXBSZVNpemVPZlNtYWxsSW1nICYmIG9wdGlvbnMucmVTaXplSGVpZ2h0IDwgaW1hZ2VIZWlnaHQpKSB7XG4gICAgICAgICAgICBjb25zdCBzY2FsZVJhdGlvID0gb3B0aW9ucy5yZVNpemVIZWlnaHQgLyBpbWFnZUhlaWdodFxuICAgICAgICAgICAgaW1hZ2UgPSBpbWFnZS5yZXNpemUoTWF0aC5yb3VuZChpbWFnZVdpZHRoICogc2NhbGVSYXRpbyksIG9wdGlvbnMucmVTaXplSGVpZ2h0LCB7XG4gICAgICAgICAgICAgIGZpdDogJ2luc2lkZSdcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKFxuICAgICAgICB0eXBlb2Ygb3B0aW9ucy5yZVNpemVXaWR0aCA9PT0gJ251bWJlcicgJiZcbiAgICAgICAgb3B0aW9ucy5yZVNpemVXaWR0aCA+IDAgJiZcbiAgICAgICAgKHR5cGVvZiBvcHRpb25zLnJlU2l6ZUhlaWdodCAhPT0gJ251bWJlcicgfHwgb3B0aW9ucy5yZVNpemVIZWlnaHQgPT09IDApXG4gICAgICApIHtcbiAgICAgICAgY29uc3QgaW1hZ2VXaWR0aCA9IGF3YWl0IGltYWdlLm1ldGFkYXRhKCkudGhlbihtZXRhZGF0YSA9PiBtZXRhZGF0YS53aWR0aClcbiAgICAgICAgY29uc3QgaW1hZ2VIZWlnaHQgPSBhd2FpdCBpbWFnZS5tZXRhZGF0YSgpLnRoZW4obWV0YWRhdGEgPT4gbWV0YWRhdGEuaGVpZ2h0KVxuICAgICAgICBpZiAoaW1hZ2VXaWR0aCAmJiBpbWFnZUhlaWdodCkge1xuICAgICAgICAgIGlmICghb3B0aW9ucy5za2lwUmVTaXplT2ZTbWFsbEltZyB8fCAob3B0aW9ucy5za2lwUmVTaXplT2ZTbWFsbEltZyAmJiBvcHRpb25zLnJlU2l6ZVdpZHRoIDwgaW1hZ2VXaWR0aCkpIHtcbiAgICAgICAgICAgIGNvbnN0IHNjYWxlUmF0aW8gPSBvcHRpb25zLnJlU2l6ZVdpZHRoIC8gaW1hZ2VXaWR0aFxuICAgICAgICAgICAgaW1hZ2UgPSBpbWFnZS5yZXNpemUob3B0aW9ucy5yZVNpemVXaWR0aCwgTWF0aC5yb3VuZChpbWFnZUhlaWdodCAqIHNjYWxlUmF0aW8pLCB7XG4gICAgICAgICAgICAgIGZpdDogJ2luc2lkZSdcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChvcHRpb25zLmlzUm90YXRlICYmIG9wdGlvbnMucm90YXRlRGVncmVlKSB7XG4gICAgICBpbWFnZSA9IGltYWdlLnJvdGF0ZShvcHRpb25zLnJvdGF0ZURlZ3JlZSwge1xuICAgICAgICBiYWNrZ3JvdW5kOiB7IHI6IDI1NSwgZzogMjU1LCBiOiAyNTUsIGFscGhhOiAwIH1cbiAgICAgIH0pXG4gICAgfVxuICAgIGlmIChvcHRpb25zLmlzRmxpcCkge1xuICAgICAgaW1hZ2UgPSBpbWFnZS5mbGlwKClcbiAgICB9XG4gICAgaWYgKG9wdGlvbnMuaXNGbG9wKSB7XG4gICAgICBpbWFnZSA9IGltYWdlLmZsb3AoKVxuICAgIH1cbiAgICBpZiAob3B0aW9ucy5pc0NvbnZlcnQpIHtcbiAgICAgIGNvbnN0IG5ld0Zvcm1hdCA9IGdldENvbnZlcnRlZEZvcm1hdChvcHRpb25zLCByYXdGb3JtYXQpIGFzIGFueVxuICAgICAgaWYgKG5ld0Zvcm1hdCAhPT0gcmF3Rm9ybWF0KSB7XG4gICAgICAgIGltYWdlID0gaW1hZ2UudG9Gb3JtYXQobmV3Rm9ybWF0LCB7XG4gICAgICAgICAgcXVhbGl0eSxcbiAgICAgICAgICBtb3pqcGVnOiB0cnVlXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChyYXdGb3JtYXQgJiYgdmFsaWRPdXRwdXRGb3JtYXQocmF3Rm9ybWF0KSkge1xuICAgICAgICBpbWFnZSA9IGltYWdlLnRvRm9ybWF0KHJhd0Zvcm1hdCBhcyBhbnksIHtcbiAgICAgICAgICBxdWFsaXR5LFxuICAgICAgICAgIG1vempwZWc6IHRydWVcbiAgICAgICAgfSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGltYWdlID0gaW1hZ2UudG9Gb3JtYXQoJ2pwZycsIHtcbiAgICAgICAgICBxdWFsaXR5LFxuICAgICAgICAgIG1vempwZWc6IHRydWVcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGF3YWl0IGltYWdlLnRvQnVmZmVyKClcbiAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgIGxvZ2dlci5lcnJvcihgSW1hZ2UgcHJvY2VzcyBlcnJvcjogJHtlcnJvcn1gKVxuICAgIHJldHVybiBpbWdcbiAgfVxufVxuXG5jb25zdCBub3JtYWxpemVJbWFnZUV4dCA9IChleHQ6IHN0cmluZyk6IHN0cmluZyA9PiB7XG4gIHJldHVybiBleHQudG9Mb3dlckNhc2UoKS5yZXBsYWNlKCcuJywgJycpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRDb252ZXJ0ZWRGb3JtYXQob3B0aW9uczogSUJ1aWxkSW5Db21wcmVzc09wdGlvbnMgfCB1bmRlZmluZWQsIHJhd0Zvcm1hdDogc3RyaW5nKTogc3RyaW5nIHtcbiAgb3B0aW9ucyA9IGZvcm1hdE9wdGlvbnMob3B0aW9ucyB8fCB7fSlcbiAgcmF3Rm9ybWF0ID0gbm9ybWFsaXplSW1hZ2VFeHQocmF3Rm9ybWF0KVxuICBpZiAocmF3Rm9ybWF0ID09PSAnZ2lmJykgcmV0dXJuICdnaWYnXG4gIGxldCBuZXdGb3JtYXQgPSBvcHRpb25zPy5jb252ZXJ0Rm9ybWF0IHx8ICdqcGcnXG4gIGlmIChvcHRpb25zPy5mb3JtYXRDb252ZXJ0T2JqICYmIE9iamVjdC5rZXlzKG9wdGlvbnMuZm9ybWF0Q29udmVydE9iaikubGVuZ3RoID4gMCkge1xuICAgIGNvbnN0IGZvcm1hdENvbnZlcnRPYmogPSBvcHRpb25zLmZvcm1hdENvbnZlcnRPYmpcbiAgICBjb25zdCBmb3JtYXRDb252ZXJ0T2JqS2V5cyA9IE9iamVjdC5rZXlzKGZvcm1hdENvbnZlcnRPYmopXG4gICAgaWYgKGZvcm1hdENvbnZlcnRPYmpLZXlzLmluY2x1ZGVzKHJhd0Zvcm1hdCkpIHtcbiAgICAgIG5ld0Zvcm1hdCA9IGZvcm1hdENvbnZlcnRPYmpbcmF3Rm9ybWF0XVxuICAgICAgaWYgKCF2YWxpZE91dHB1dEZvcm1hdChuZXdGb3JtYXQpKSB7XG4gICAgICAgIG5ld0Zvcm1hdCA9ICdqcGcnXG4gICAgICB9XG4gICAgfVxuICB9XG4gIGlmIChvcHRpb25zPy5waWNCZWQgPT09ICdpbWd1cicgJiYgbmV3Rm9ybWF0ID09PSAnd2VicCcpIHtcbiAgICBuZXdGb3JtYXQgPSAnanBnJ1xuICB9XG4gIHJldHVybiBuZXdGb3JtYXRcbn1cblxuZXhwb3J0IGNvbnN0IGlzTmVlZEFkZFdhdGVybWFyayA9IChcbiAgd2F0ZXJtYXJrT3B0aW9uczogSUJ1aWxkSW5XYXRlck1hcmtPcHRpb25zIHwgdW5kZWZpbmVkLFxuICBmaWxlRXh0OiBzdHJpbmdcbik6IGJvb2xlYW4gPT4ge1xuICBmaWxlRXh0ID0gbm9ybWFsaXplSW1hZ2VFeHQoZmlsZUV4dClcbiAgcmV0dXJuIChcbiAgICAhIXdhdGVybWFya09wdGlvbnMgJiYgISF3YXRlcm1hcmtPcHRpb25zLmlzQWRkV2F0ZXJtYXJrICYmIGltYWdlRm9ybWF0TGlzdC5pbmNsdWRlcyhmaWxlRXh0KSAmJiBmaWxlRXh0ICE9PSAnc3ZnJ1xuICApXG59XG5cbmV4cG9ydCBjb25zdCBpc05lZWRDb21wcmVzcyA9IChjb21wcmVzc09wdGlvbnM6IElCdWlsZEluQ29tcHJlc3NPcHRpb25zIHwgdW5kZWZpbmVkLCBmaWxlRXh0OiBzdHJpbmcpOiBib29sZWFuID0+IHtcbiAgaWYgKCFpbWFnZUZvcm1hdExpc3QuaW5jbHVkZXMobm9ybWFsaXplSW1hZ2VFeHQoZmlsZUV4dCkpIHx8ICFjb21wcmVzc09wdGlvbnMpIHJldHVybiBmYWxzZVxuXG4gIGNvbnN0IHtcbiAgICBxdWFsaXR5LFxuICAgIGlzUmVTaXplQnlQZXJjZW50LFxuICAgIHJlU2l6ZVBlcmNlbnQsXG4gICAgaXNSZVNpemUsXG4gICAgcmVTaXplSGVpZ2h0LFxuICAgIHJlU2l6ZVdpZHRoLFxuICAgIGlzUm90YXRlLFxuICAgIHJvdGF0ZURlZ3JlZSxcbiAgICBpc0NvbnZlcnQsXG4gICAgY29udmVydEZvcm1hdCxcbiAgICBpc0ZsaXAsXG4gICAgaXNGbG9wXG4gIH0gPSBmb3JtYXRPcHRpb25zKGNvbXByZXNzT3B0aW9ucylcblxuICBpZiAodmFsaWRQYXJhbShxdWFsaXR5KSAmJiBxdWFsaXR5ISA8IDEwMCkgcmV0dXJuIHRydWVcbiAgaWYgKGlzUmVTaXplQnlQZXJjZW50ICYmIHZhbGlkUGFyYW0ocmVTaXplUGVyY2VudCkpIHJldHVybiB0cnVlXG4gIGlmIChcbiAgICBpc1JlU2l6ZSAmJlxuICAgICgodHlwZW9mIHJlU2l6ZUhlaWdodCA9PT0gJ251bWJlcicgJiYgcmVTaXplSGVpZ2h0ID4gMCkgfHwgKHR5cGVvZiByZVNpemVXaWR0aCA9PT0gJ251bWJlcicgJiYgcmVTaXplV2lkdGggPiAwKSlcbiAgKSB7XG4gICAgcmV0dXJuIHRydWVcbiAgfVxuICBpZiAoaXNSb3RhdGUgJiYgcm90YXRlRGVncmVlKSByZXR1cm4gdHJ1ZVxuICBpZiAoaXNGbGlwIHx8IGlzRmxvcCkgcmV0dXJuIHRydWVcbiAgaWYgKGlzQ29udmVydCkge1xuICAgIGNvbnN0IG5ld0Zvcm1hdCA9IGNvbnZlcnRGb3JtYXQgfHwgJ2pwZydcbiAgICByZXR1cm4gZmlsZUV4dCAhPT0gbmV3Rm9ybWF0XG4gIH1cbiAgcmV0dXJuIGZhbHNlXG59XG5cbmV4cG9ydCBjb25zdCByZW1vdmVFeGlmID0gYXN5bmMgKGltZzogQnVmZmVyLCBmaWxlRXh0OiBzdHJpbmcpOiBQcm9taXNlPEJ1ZmZlcj4gPT4ge1xuICBmaWxlRXh0ID0gbm9ybWFsaXplSW1hZ2VFeHQoZmlsZUV4dClcbiAgaWYgKCFpbWFnZUZvcm1hdExpc3QuaW5jbHVkZXMoZmlsZUV4dCkgfHwgZmlsZUV4dCA9PT0gJ3N2ZycpIHJldHVybiBpbWdcbiAgcmV0dXJuIGF3YWl0IHNoYXJwKGltZywge1xuICAgIGFuaW1hdGVkOiB0cnVlXG4gIH0pLnRvQnVmZmVyKClcbn1cbiIsImltcG9ydCBwYXRoIGZyb20gJ3BhdGgnXG5pbXBvcnQgZnMgZnJvbSAnZnMtZXh0cmEnXG5pbXBvcnQgeyBpc1VybCB9IGZyb20gJy4uLy4uL3V0aWxzL2NvbW1vbidcbmltcG9ydCB7IElQaWNHbywgSVBsdWdpbiB9IGZyb20gJy4uLy4uL3R5cGVzJ1xuXG5jb25zdCB1cGxvYWQ6IElQbHVnaW4gPSB7XG4gIGhhbmRsZTogKGN0eDogSVBpY0dvKSA9PiB7XG4gICAgY3R4LmNtZC5wcm9ncmFtXG4gICAgICAuY29tbWFuZCgndXBsb2FkJylcbiAgICAgIC5kZXNjcmlwdGlvbigndXBsb2FkLCBnbyBnbyBnbycpXG4gICAgICAuYXJndW1lbnRzKCdbaW5wdXQuLi5dJylcbiAgICAgIC5hbGlhcygndScpXG4gICAgICAuYWN0aW9uKChpbnB1dDogc3RyaW5nW10pID0+IHtcbiAgICAgICAgOyhhc3luYyAoKSA9PiB7XG4gICAgICAgICAgY29uc3QgaW5wdXRMaXN0ID0gaW5wdXRcbiAgICAgICAgICAgIC5tYXAoKGl0ZW06IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgICByZXR1cm4gaXNVcmwoaXRlbSkgPyBpdGVtIDogcGF0aC5yZXNvbHZlKGl0ZW0pXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLmZpbHRlcigoaXRlbTogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IGV4aXN0ID0gZnMuZXhpc3RzU3luYyhpdGVtKSB8fCBpc1VybChpdGVtKVxuICAgICAgICAgICAgICBpZiAoIWV4aXN0KSB7XG4gICAgICAgICAgICAgICAgY3R4LmxvZy53YXJuKGAke2l0ZW19IGRvZXMgbm90IGV4aXN0LmApXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcmV0dXJuIGV4aXN0XG4gICAgICAgICAgICB9KVxuICAgICAgICAgIGF3YWl0IGN0eC51cGxvYWQoaW5wdXRMaXN0KVxuICAgICAgICB9KSgpLmNhdGNoKGUgPT4ge1xuICAgICAgICAgIGN0eC5sb2cuZXJyb3IoZSlcbiAgICAgICAgfSlcbiAgICAgIH0pXG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgdXBsb2FkXG4iLCJpbXBvcnQgeyBJUGljR28sIElQbHVnaW5Db25maWcsIElCdWlsZEluQ29tcHJlc3NPcHRpb25zIH0gZnJvbSAnLi4vLi4vdHlwZXMnXG5pbXBvcnQgeyBJTG9jYWxlc0tleSB9IGZyb20gJy4uLy4uL2kxOG4vemgtQ04nXG5cbmNvbnN0IGNvbmZpZyA9IChjdHg6IElQaWNHbyk6IElQbHVnaW5Db25maWdbXSA9PiB7XG4gIGNvbnN0IHVzZXJDb25maWcgPSBjdHguZ2V0Q29uZmlnPElCdWlsZEluQ29tcHJlc3NPcHRpb25zPignYnVpbGRJbi5jb21wcmVzcycpIHx8IHt9XG4gIGNvbnN0IGNvbmZpZzogSVBsdWdpbkNvbmZpZ1tdID0gW1xuICAgIHtcbiAgICAgIG5hbWU6ICdxdWFsaXR5JyxcbiAgICAgIHR5cGU6ICdpbnB1dCcsXG4gICAgICBnZXQgcHJlZml4KCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQlVJTERJTl9DT01QUkVTU19RVUFMSVRZJylcbiAgICAgIH0sXG4gICAgICBnZXQgYWxpYXMoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdCVUlMRElOX0NPTVBSRVNTX1FVQUxJVFknKVxuICAgICAgfSxcbiAgICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcucXVhbGl0eSB8fCAxMDBcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdpc0NvbnZlcnQnLFxuICAgICAgdHlwZTogJ2NvbmZpcm0nLFxuICAgICAgZ2V0IHByZWZpeCgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0JVSUxESU5fQ09NUFJFU1NfSVNDT05WRVJUJylcbiAgICAgIH0sXG4gICAgICBnZXQgYWxpYXMoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdCVUlMRElOX0NPTVBSRVNTX0lTQ09OVkVSVCcpXG4gICAgICB9LFxuICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5pc0NvbnZlcnQgfHwgZmFsc2VcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdjb252ZXJ0Rm9ybWF0JyxcbiAgICAgIHR5cGU6ICdsaXN0JyxcbiAgICAgIGdldCBwcmVmaXgoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdCVUlMRElOX0NPTVBSRVNTX0NPTlZFUlRGT1JNQVQnKVxuICAgICAgfSxcbiAgICAgIGdldCBhbGlhcygpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0JVSUxESU5fQ09NUFJFU1NfQ09OVkVSVEZPUk1BVCcpXG4gICAgICB9LFxuICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgICAgY2hvaWNlczogW1xuICAgICAgICAnYXZpZicsXG4gICAgICAgICdkeicsXG4gICAgICAgICdmaXRzJyxcbiAgICAgICAgJ2dpZicsXG4gICAgICAgICdoZWlmJyxcbiAgICAgICAgJ2lucHV0JyxcbiAgICAgICAgJ2pwZWcnLFxuICAgICAgICAnanBnJyxcbiAgICAgICAgJ2pwMicsXG4gICAgICAgICdqeGwnLFxuICAgICAgICAnbWFnaWNrJyxcbiAgICAgICAgJ29wZW5zbGlkZScsXG4gICAgICAgICdwZGYnLFxuICAgICAgICAncG5nJyxcbiAgICAgICAgJ3BwbScsXG4gICAgICAgICdyYXcnLFxuICAgICAgICAnc3ZnJyxcbiAgICAgICAgJ3RpZmYnLFxuICAgICAgICAndGlmJyxcbiAgICAgICAgJ3YnLFxuICAgICAgICAnd2VicCdcbiAgICAgIF0sXG4gICAgICBkZWZhdWx0OiAnanBnJ1xuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ2lzUmVTaXplJyxcbiAgICAgIHR5cGU6ICdjb25maXJtJyxcbiAgICAgIGdldCBwcmVmaXgoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdCVUlMRElOX0NPTVBSRVNTX0lTUkVTSVpFJylcbiAgICAgIH0sXG4gICAgICBnZXQgYWxpYXMoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdCVUlMRElOX0NPTVBSRVNTX0lTUkVTSVpFJylcbiAgICAgIH0sXG4gICAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLmlzUmVTaXplIHx8IGZhbHNlXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAncmVTaXplV2lkdGgnLFxuICAgICAgdHlwZTogJ2lucHV0JyxcbiAgICAgIGdldCBwcmVmaXgoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdCVUlMRElOX0NPTVBSRVNTX1JFU0laRVdJRFRIJylcbiAgICAgIH0sXG4gICAgICBnZXQgYWxpYXMoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdCVUlMRElOX0NPTVBSRVNTX1JFU0laRVdJRFRIJylcbiAgICAgIH0sXG4gICAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLnJlU2l6ZVdpZHRoIHx8IDUwMFxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ3JlU2l6ZUhlaWdodCcsXG4gICAgICB0eXBlOiAnaW5wdXQnLFxuICAgICAgZ2V0IHByZWZpeCgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0JVSUxESU5fQ09NUFJFU1NfUkVTSVpFSEVJR0hUJylcbiAgICAgIH0sXG4gICAgICBnZXQgYWxpYXMoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdCVUlMRElOX0NPTVBSRVNTX1JFU0laRUhFSUdIVCcpXG4gICAgICB9LFxuICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5yZVNpemVIZWlnaHQgfHwgNTAwXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAnc2tpcFJlU2l6ZU9mU21hbGxJbWcnLFxuICAgICAgdHlwZTogJ2NvbmZpcm0nLFxuICAgICAgZ2V0IHByZWZpeCgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0JVSUxESU5fQ09NUFJFU1NfU0tJUFJFU0laRU9GU01BTExJTUcnKVxuICAgICAgfSxcbiAgICAgIGdldCBhbGlhcygpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0JVSUxESU5fQ09NUFJFU1NfU0tJUFJFU0laRU9GU01BTExJTUcnKVxuICAgICAgfSxcbiAgICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuc2tpcFJlU2l6ZU9mU21hbGxJbWcgfHwgZmFsc2VcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdpc1JlU2l6ZUJ5UGVyY2VudCcsXG4gICAgICB0eXBlOiAnY29uZmlybScsXG4gICAgICBnZXQgcHJlZml4KCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQlVJTERJTl9DT01QUkVTU19JU1JFU0laRUJZUEVSQ0VOVCcpXG4gICAgICB9LFxuICAgICAgZ2V0IGFsaWFzKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQlVJTERJTl9DT01QUkVTU19JU1JFU0laRUJZUEVSQ0VOVCcpXG4gICAgICB9LFxuICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5pc1JlU2l6ZUJ5UGVyY2VudCB8fCBmYWxzZVxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ3JlU2l6ZVBlcmNlbnQnLFxuICAgICAgdHlwZTogJ2lucHV0JyxcbiAgICAgIGdldCBwcmVmaXgoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdCVUlMRElOX0NPTVBSRVNTX1JFU0laRVBFUkNFTlQnKVxuICAgICAgfSxcbiAgICAgIGdldCBhbGlhcygpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0JVSUxESU5fQ09NUFJFU1NfUkVTSVpFUEVSQ0VOVCcpXG4gICAgICB9LFxuICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5yZVNpemVQZXJjZW50IHx8IDUwXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAnaXNGbGlwJyxcbiAgICAgIHR5cGU6ICdjb25maXJtJyxcbiAgICAgIGdldCBwcmVmaXgoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdCVUlMRElOX0NPTVBSRVNTX0lTRkxJUCcpXG4gICAgICB9LFxuICAgICAgZ2V0IGFsaWFzKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQlVJTERJTl9DT01QUkVTU19JU0ZMSVAnKVxuICAgICAgfSxcbiAgICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuaXNGbGlwIHx8IGZhbHNlXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAnaXNGbG9wJyxcbiAgICAgIHR5cGU6ICdjb25maXJtJyxcbiAgICAgIGdldCBwcmVmaXgoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdCVUlMRElOX0NPTVBSRVNTX0lTRkxPUCcpXG4gICAgICB9LFxuICAgICAgZ2V0IGFsaWFzKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQlVJTERJTl9DT01QUkVTU19JU0ZMT1AnKVxuICAgICAgfSxcbiAgICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuaXNGbG9wIHx8IGZhbHNlXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAnaXNSb3RhdGUnLFxuICAgICAgdHlwZTogJ2NvbmZpcm0nLFxuICAgICAgZ2V0IHByZWZpeCgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0JVSUxESU5fQ09NUFJFU1NfSVNST1RBVEUnKVxuICAgICAgfSxcbiAgICAgIGdldCBhbGlhcygpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0JVSUxESU5fQ09NUFJFU1NfSVNST1RBVEUnKVxuICAgICAgfSxcbiAgICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuaXNSb3RhdGUgfHwgZmFsc2VcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdyb3RhdGVEZWdyZWUnLFxuICAgICAgdHlwZTogJ2lucHV0JyxcbiAgICAgIGdldCBwcmVmaXgoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdCVUlMRElOX0NPTVBSRVNTX1JPVEFURURFR1JFRScpXG4gICAgICB9LFxuICAgICAgZ2V0IGFsaWFzKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQlVJTERJTl9DT01QUkVTU19ST1RBVEVERUdSRUUnKVxuICAgICAgfSxcbiAgICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcucm90YXRlRGVncmVlIHx8IDkwXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAnaXNSZW1vdmVFeGlmJyxcbiAgICAgIHR5cGU6ICdjb25maXJtJyxcbiAgICAgIGdldCBwcmVmaXgoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdCVUlMRElOX0NPTVBSRVNTX0lTUkVNT1ZFRVhJRicpXG4gICAgICB9LFxuICAgICAgZ2V0IGFsaWFzKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQlVJTERJTl9DT01QUkVTU19JU1JFTU9WRUVYSUYnKVxuICAgICAgfSxcbiAgICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuaXNSZW1vdmVFeGlmIHx8IGZhbHNlXG4gICAgfVxuICBdXG4gIHJldHVybiBjb25maWdcbn1cblxuZXhwb3J0IGRlZmF1bHQge1xuICBjb25maWdcbn1cbiIsImltcG9ydCB7IElQaWNHbywgSVBsdWdpbkNvbmZpZywgSUJ1aWxkSW5XYXRlck1hcmtPcHRpb25zIH0gZnJvbSAnLi4vLi4vdHlwZXMnXG5pbXBvcnQgeyBJTG9jYWxlc0tleSB9IGZyb20gJy4uLy4uL2kxOG4vemgtQ04nXG5cbmNvbnN0IGNvbmZpZyA9IChjdHg6IElQaWNHbyk6IElQbHVnaW5Db25maWdbXSA9PiB7XG4gIGNvbnN0IHVzZXJDb25maWcgPSBjdHguZ2V0Q29uZmlnPElCdWlsZEluV2F0ZXJNYXJrT3B0aW9ucz4oJ2J1aWxkSW4ud2F0ZXJtYXJrJykgfHwge31cbiAgY29uc3QgY29uZmlnOiBJUGx1Z2luQ29uZmlnW10gPSBbXG4gICAge1xuICAgICAgbmFtZTogJ2lzQWRkV2F0ZXJtYXJrJyxcbiAgICAgIHR5cGU6ICdjb25maXJtJyxcbiAgICAgIGdldCBwcmVmaXgoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdCVUlMRElOX1dBVEVSTUFSS19JU0FERFdBVEVSTUFSSycpXG4gICAgICB9LFxuICAgICAgZ2V0IGFsaWFzKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQlVJTERJTl9XQVRFUk1BUktfSVNBRERXQVRFUk1BUksnKVxuICAgICAgfSxcbiAgICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuaXNBZGRXYXRlcm1hcmsgfHwgZmFsc2VcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICd3YXRlcm1hcmtUeXBlJyxcbiAgICAgIHR5cGU6ICdsaXN0JyxcbiAgICAgIGdldCBwcmVmaXgoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdCVUlMRElOX1dBVEVSTUFSS19XQVRFUk1BUktUWVBFJylcbiAgICAgIH0sXG4gICAgICBnZXQgYWxpYXMoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdCVUlMRElOX1dBVEVSTUFSS19XQVRFUk1BUktUWVBFJylcbiAgICAgIH0sXG4gICAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgICBjaG9pY2VzOiBbJ3RleHQnLCAnaW1hZ2UnXSxcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcud2F0ZXJtYXJrVHlwZSB8fCAndGV4dCdcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdpc0Z1bGxTY3JlZW5XYXRlcm1hcmsnLFxuICAgICAgdHlwZTogJ2NvbmZpcm0nLFxuICAgICAgZ2V0IHByZWZpeCgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0JVSUxESU5fV0FURVJNQVJLX0lTRlVMTFNDUkVFTldBVEVSTUFSSycpXG4gICAgICB9LFxuICAgICAgZ2V0IGFsaWFzKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQlVJTERJTl9XQVRFUk1BUktfSVNGVUxMU0NSRUVOV0FURVJNQVJLJylcbiAgICAgIH0sXG4gICAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLmlzRnVsbFNjcmVlbldhdGVybWFyayB8fCBmYWxzZVxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ3dhdGVybWFya0RlZ3JlZScsXG4gICAgICB0eXBlOiAnaW5wdXQnLFxuICAgICAgZ2V0IHByZWZpeCgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0JVSUxESU5fV0FURVJNQVJLX1dBVEVSTUFSS0RFR1JFRScpXG4gICAgICB9LFxuICAgICAgZ2V0IGFsaWFzKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQlVJTERJTl9XQVRFUk1BUktfV0FURVJNQVJLREVHUkVFJylcbiAgICAgIH0sXG4gICAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLndhdGVybWFya0RlZ3JlZSB8fCAwXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAnd2F0ZXJtYXJrVGV4dCcsXG4gICAgICB0eXBlOiAnaW5wdXQnLFxuICAgICAgZ2V0IHByZWZpeCgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0JVSUxESU5fV0FURVJNQVJLX1dBVEVSTUFSS1RFWFQnKVxuICAgICAgfSxcbiAgICAgIGdldCBhbGlhcygpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0JVSUxESU5fV0FURVJNQVJLX1dBVEVSTUFSS1RFWFQnKVxuICAgICAgfSxcbiAgICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcud2F0ZXJtYXJrVGV4dCB8fCAnJ1xuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ3dhdGVybWFya0ZvbnRQYXRoJyxcbiAgICAgIHR5cGU6ICdpbnB1dCcsXG4gICAgICBnZXQgcHJlZml4KCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQlVJTERJTl9XQVRFUk1BUktfV0FURVJNQVJLVEVYVEZPTlRQQVRIJylcbiAgICAgIH0sXG4gICAgICBnZXQgYWxpYXMoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdCVUlMRElOX1dBVEVSTUFSS19XQVRFUk1BUktURVhURk9OVFBBVEgnKVxuICAgICAgfSxcbiAgICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcud2F0ZXJtYXJrRm9udFBhdGggfHwgJydcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICd3YXRlcm1hcmtTY2FsZVJhdGlvJyxcbiAgICAgIHR5cGU6ICdpbnB1dCcsXG4gICAgICBnZXQgcHJlZml4KCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQlVJTERJTl9XQVRFUk1BUktfV0FURVJNQVJLRk9OVFJBVElPJylcbiAgICAgIH0sXG4gICAgICBnZXQgYWxpYXMoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdCVUlMRElOX1dBVEVSTUFSS19XQVRFUk1BUktGT05UUkFUSU8nKVxuICAgICAgfSxcbiAgICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcud2F0ZXJtYXJrU2NhbGVSYXRpbyB8fCAwLjE1XG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAnd2F0ZXJtYXJrQ29sb3InLFxuICAgICAgdHlwZTogJ2lucHV0JyxcbiAgICAgIGdldCBwcmVmaXgoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdCVUlMRElOX1dBVEVSTUFSS19XQVRFUk1BUktGT05UQ09MT1InKVxuICAgICAgfSxcbiAgICAgIGdldCBhbGlhcygpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0JVSUxESU5fV0FURVJNQVJLX1dBVEVSTUFSS0ZPTlRDT0xPUicpXG4gICAgICB9LFxuICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy53YXRlcm1hcmtDb2xvciB8fCAncmdiYSgyMDQsIDIwNCwgMjA0LCAwLjQ1KSdcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICd3YXRlcm1hcmtJbWFnZVBhdGgnLFxuICAgICAgdHlwZTogJ2lucHV0JyxcbiAgICAgIGdldCBwcmVmaXgoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdCVUlMRElOX1dBVEVSTUFSS19XQVRFUk1BUktJTUFHRVBBVEgnKVxuICAgICAgfSxcbiAgICAgIGdldCBhbGlhcygpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0JVSUxESU5fV0FURVJNQVJLX1dBVEVSTUFSS0lNQUdFUEFUSCcpXG4gICAgICB9LFxuICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy53YXRlcm1hcmtJbWFnZVBhdGggfHwgJydcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICd3YXRlcm1hcmtQb3NpdGlvbicsXG4gICAgICB0eXBlOiAnbGlzdCcsXG4gICAgICBnZXQgcHJlZml4KCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQlVJTERJTl9XQVRFUk1BUktfV0FURVJNQVJLUE9TSVRJT04nKVxuICAgICAgfSxcbiAgICAgIGdldCBhbGlhcygpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0JVSUxESU5fV0FURVJNQVJLX1dBVEVSTUFSS1BPU0lUSU9OJylcbiAgICAgIH0sXG4gICAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgICBjaG9pY2VzOiBbXG4gICAgICAgICdub3J0aCcsXG4gICAgICAgICdub3J0aGVhc3QnLFxuICAgICAgICAnc291dGhlYXN0JyxcbiAgICAgICAgJ3NvdXRoJyxcbiAgICAgICAgJ3NvdXRod2VzdCcsXG4gICAgICAgICdub3J0aHdlc3QnLFxuICAgICAgICAnd2VzdCcsXG4gICAgICAgICdlYXN0JyxcbiAgICAgICAgJ2NlbnRlcicsXG4gICAgICAgICdjZW50cmUnXG4gICAgICBdLFxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy53YXRlcm1hcmtQb3NpdGlvbiB8fCAnc291dGhlYXN0J1xuICAgIH1cbiAgXVxuICByZXR1cm4gY29uZmlnXG59XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgY29uZmlnXG59XG4iLCJpbXBvcnQgeyBJUGljR28sIElQbHVnaW5Db25maWcgfSBmcm9tICcuLi8uLi90eXBlcydcbmltcG9ydCB7IElMb2NhbGVzS2V5IH0gZnJvbSAnLi4vLi4vaTE4bi96aC1DTidcblxuY29uc3QgY29uZmlnID0gKGN0eDogSVBpY0dvKTogSVBsdWdpbkNvbmZpZ1tdID0+IHtcbiAgY29uc3QgdXNlckNvbmZpZyA9IGN0eC5nZXRDb25maWc8YW55PignYnVpbGRJbi5yZW5hbWUnKSB8fCB7fVxuICBjb25zdCBjb25maWc6IElQbHVnaW5Db25maWdbXSA9IFtcbiAgICB7XG4gICAgICBuYW1lOiAnZm9ybWF0JyxcbiAgICAgIHR5cGU6ICdpbnB1dCcsXG4gICAgICBnZXQgcHJlZml4KCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQlVJTERJTl9SRU5BTUVfRk9STUFUJylcbiAgICAgIH0sXG4gICAgICBnZXQgYWxpYXMoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdCVUlMRElOX1JFTkFNRV9GT1JNQVQnKVxuICAgICAgfSxcbiAgICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuZm9ybWF0IHx8ICd7ZmlsZW5hbWV9J1xuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ2VuYWJsZScsXG4gICAgICB0eXBlOiAnY29uZmlybScsXG4gICAgICBnZXQgcHJlZml4KCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQlVJTERJTl9SRU5BTUVfRU5BQkxFJylcbiAgICAgIH0sXG4gICAgICBnZXQgYWxpYXMoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdCVUlMRElOX1JFTkFNRV9FTkFCTEUnKVxuICAgICAgfSxcbiAgICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuZW5hYmxlIHx8IGZhbHNlXG4gICAgfVxuICBdXG4gIHJldHVybiBjb25maWdcbn1cblxuZXhwb3J0IGRlZmF1bHQge1xuICBjb25maWdcbn1cbiIsImltcG9ydCB7IElMb2NhbGVzS2V5IH0gZnJvbSAnLi4vLi4vaTE4bi96aC1DTidcbmltcG9ydCB7IElQaWNHbywgSVN0cmluZ0tleU1hcCB9IGZyb20gJy4uLy4uL3R5cGVzJ1xuXG5leHBvcnQgY29uc3QgdXBsb2FkZXJUcmFuc2xhdG9ycyA9IChjdHg6IElQaWNHbykgPT4ge1xuICByZXR1cm4ge1xuICAgIGFkdmFuY2VkcGxpc3Q6IGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BRFZBTkNFRFBMSVNUJyksXG4gICAgYWxpc3RwbGlzdDogY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FMSVNUX1BMSVNUJyksXG4gICAgYWxpeXVuOiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQUxJQ0xPVUQnKSxcbiAgICAnYXdzLXMzLXBsaXN0JzogY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FXU1MzUExJU1QnKSxcbiAgICBnaXRodWI6IGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9HSVRIVUInKSxcbiAgICBpbWd1cjogY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0lNR1VSJyksXG4gICAgbG9jYWw6IGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9MT0NBTCcpLFxuICAgIGxza3lwbGlzdDogY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0xTS1lfUExJU1QnKSxcbiAgICBwaWNsaXN0OiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfUElDTElTVCcpLFxuICAgIHFpbml1OiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfUUlOSVUnKSxcbiAgICBzZnRwcGxpc3Q6IGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9TRlRQUExJU1QnKSxcbiAgICBzbW1zOiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfU01NUycpLFxuICAgIHRjeXVuOiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVEVOQ0VOVENMT1VEJyksXG4gICAgdXB5dW46IGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9VUFlVTicpLFxuICAgIHdlYmRhdnBsaXN0OiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfV0VCREFWUExJU1QnKVxuICB9IGFzIElTdHJpbmdLZXlNYXA8YW55PlxufVxuIiwiaW1wb3J0IHsgSUxvY2FsZXNLZXkgfSBmcm9tICcuLi8uLi9pMThuL3poLUNOJ1xuaW1wb3J0IHsgSVBpY0dvLCBJUGx1Z2luQ29uZmlnLCBJU3RyaW5nS2V5TWFwIH0gZnJvbSAnLi4vLi4vdHlwZXMnXG5pbXBvcnQgY29tcHJlc3MgZnJvbSAnLi4vYmVmb3JldHJhbnNmb3JtZXIvY29tcHJlc3MnXG5pbXBvcnQgd2F0ZXJtYXJrIGZyb20gJy4uL2JlZm9yZXRyYW5zZm9ybWVyL3dhdGVybWFyaydcbmltcG9ydCByZW5hbWUgZnJvbSAnLi4vYmVmb3JldXBsb2FkL2J1aWxkSW5SZW5hbWUnXG5pbXBvcnQgeyB1cGxvYWRlclRyYW5zbGF0b3JzIH0gZnJvbSAnLi91dGlscydcblxuLy8gaGFuZGxlIG1vZHVsZXMgY29uZmlnIC0+IHNhdmUgdG8gcGljZ28gY29uZmlnIGZpbGVcbmNvbnN0IGhhbmRsZUNvbmZpZyA9IGFzeW5jIChjdHg6IElQaWNHbywgcHJvbXB0czogSVBsdWdpbkNvbmZpZ1tdLCBtb2R1bGU6IHN0cmluZywgbmFtZTogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gIGNvbnN0IGFuc3dlciA9IGF3YWl0IGN0eC5jbWQuaW5xdWlyZXIucHJvbXB0KHByb21wdHMpXG4gIGNvbnN0IGNvbmZpZ05hbWUgPVxuICAgIG1vZHVsZSA9PT0gJ3VwbG9hZGVyJ1xuICAgICAgPyBgcGljQmVkLiR7bmFtZX1gXG4gICAgICA6IG1vZHVsZSA9PT0gJ3RyYW5zZm9ybWVyJ1xuICAgICAgICA/IGB0cmFuc2Zvcm1lci4ke25hbWV9YFxuICAgICAgICA6IG1vZHVsZSA9PT0gJ2J1aWxkaW4nXG4gICAgICAgICAgPyBgYnVpbGRJbi4ke25hbWV9YFxuICAgICAgICAgIDogbmFtZVxuICBjdHguc2F2ZUNvbmZpZyh7XG4gICAgW2NvbmZpZ05hbWVdOiBhbnN3ZXJcbiAgfSlcbiAgaWYgKG1vZHVsZSA9PT0gJ3VwbG9hZGVyJykge1xuICAgIGN0eC5zYXZlQ29uZmlnKHtcbiAgICAgICdwaWNCZWQuY3VycmVudCc6IG5hbWUsXG4gICAgICAncGljQmVkLnVwbG9hZGVyJzogbmFtZVxuICAgIH0pXG4gIH0gZWxzZSBpZiAobW9kdWxlID09PSAndHJhbnNmb3JtZXInKSB7XG4gICAgY3R4LnNhdmVDb25maWcoe1xuICAgICAgJ3BpY0JlZC50cmFuc2Zvcm1lcic6IG5hbWVcbiAgICB9KVxuICB9XG59XG5cbmNvbnN0IHNldHRpbmcgPSB7XG4gIGhhbmRsZTogKGN0eDogSVBpY0dvKSA9PiB7XG4gICAgY29uc3QgY21kID0gY3R4LmNtZFxuICAgIGNtZC5wcm9ncmFtXG4gICAgICAuY29tbWFuZCgnc2V0JylcbiAgICAgIC5hbGlhcygnY29uZmlnJylcbiAgICAgIC5hcmd1bWVudHMoJzxtb2R1bGU+IFtuYW1lXScpXG4gICAgICAuZGVzY3JpcHRpb24oJ2NvbmZpZ3VyZSBjb25maWcgb2YgcGljZ28gbW9kdWxlcywgdXBsb2FkZXJ8dHJhbnNmb3JtZXJ8cGx1Z2lufGJ1aWxkaW4nKVxuICAgICAgLmFjdGlvbigobW9kdWxlOiBzdHJpbmcsIG5hbWU6IHN0cmluZykgPT4ge1xuICAgICAgICA7KGFzeW5jICgpID0+IHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgLy8gLy8gbG9hZCB0aGlyZC1wYXJ0eSBwbHVnaW5zXG4gICAgICAgICAgICAvLyBhd2FpdCBjdHgucGx1Z2luTG9hZGVyLmxvYWQoKVxuICAgICAgICAgICAgLy8gaWYgYSBtb2R1bGUgaXMgc3BlY2lmaWMsIHRoZW4ganVzdCBzZXQgdGhpcyBvcHRpb24gaW4gY29uZmlnXG4gICAgICAgICAgICBzd2l0Y2ggKG1vZHVsZSkge1xuICAgICAgICAgICAgICBjYXNlICdidWlsZGluJzpcbiAgICAgICAgICAgICAgICBpZiAobmFtZSA9PT0gJ2NvbXByZXNzJykge1xuICAgICAgICAgICAgICAgICAgYXdhaXQgaGFuZGxlQ29uZmlnKGN0eCwgY29tcHJlc3MuY29uZmlnKGN0eCksIG1vZHVsZSwgbmFtZSlcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG5hbWUgPT09ICd3YXRlcm1hcmsnKSB7XG4gICAgICAgICAgICAgICAgICBhd2FpdCBoYW5kbGVDb25maWcoY3R4LCB3YXRlcm1hcmsuY29uZmlnKGN0eCksIG1vZHVsZSwgbmFtZSlcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG5hbWUgPT09ICdyZW5hbWUnKSB7XG4gICAgICAgICAgICAgICAgICBhd2FpdCBoYW5kbGVDb25maWcoY3R4LCByZW5hbWUuY29uZmlnKGN0eCksIG1vZHVsZSwgbmFtZSlcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgY29uc3QgcHJvbXB0cyA9IFtcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICdsaXN0JyxcbiAgICAgICAgICAgICAgICAgICAgICBuYW1lOiAnYnVpbGRpbicsXG4gICAgICAgICAgICAgICAgICAgICAgY2hvaWNlczogW1xuICAgICAgICAgICAgICAgICAgICAgICAgeyBuYW1lOiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdCVUlMRElOX0NPTVBSRVNTJyksIHZhbHVlOiAnY29tcHJlc3MnIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB7IG5hbWU6IGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0JVSUxESU5fV0FURVJNQVJLJyksIHZhbHVlOiAnd2F0ZXJtYXJrJyB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgeyBuYW1lOiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdCVUlMRElOX1JFTkFNRScpLCB2YWx1ZTogJ3JlbmFtZScgfVxuICAgICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogJ0Nob29zZSBhIGJ1aWxkaW4gbW9kdWxlJ1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgICBjb25zdCBhbnN3ZXIgPSBhd2FpdCBjdHguY21kLmlucXVpcmVyLnByb21wdDxJU3RyaW5nS2V5TWFwPGFueT4+KHByb21wdHMpXG4gICAgICAgICAgICAgICAgICBpZiAoYW5zd2VyLmJ1aWxkaW4gPT09ICdjb21wcmVzcycpIHtcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgaGFuZGxlQ29uZmlnKGN0eCwgY29tcHJlc3MuY29uZmlnKGN0eCksIG1vZHVsZSwgYW5zd2VyLmJ1aWxkaW4pXG4gICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGFuc3dlci5idWlsZGluID09PSAnd2F0ZXJtYXJrJykge1xuICAgICAgICAgICAgICAgICAgICBhd2FpdCBoYW5kbGVDb25maWcoY3R4LCB3YXRlcm1hcmsuY29uZmlnKGN0eCksIG1vZHVsZSwgYW5zd2VyLmJ1aWxkaW4pXG4gICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGFuc3dlci5idWlsZGluID09PSAncmVuYW1lJykge1xuICAgICAgICAgICAgICAgICAgICBhd2FpdCBoYW5kbGVDb25maWcoY3R4LCByZW5hbWUuY29uZmlnKGN0eCksIG1vZHVsZSwgYW5zd2VyLmJ1aWxkaW4pXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICAgIGNhc2UgJ3VwbG9hZGVyJzpcbiAgICAgICAgICAgICAgY2FzZSAndHJhbnNmb3JtZXInOlxuICAgICAgICAgICAgICAgIGlmIChuYW1lKSB7XG4gICAgICAgICAgICAgICAgICBjb25zdCBpdGVtID0gY3R4LmhlbHBlclttb2R1bGVdLmdldChuYW1lKVxuICAgICAgICAgICAgICAgICAgaWYgKCFpdGVtKSB7XG4gICAgICAgICAgICAgICAgICAgIGN0eC5sb2cuZXJyb3IoYE5vICR7bW9kdWxlfSBuYW1lZCAke25hbWV9YClcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBpZiAoaXRlbS5jb25maWcpIHtcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgaGFuZGxlQ29uZmlnKGN0eCwgaXRlbS5jb25maWcoY3R4KSwgbW9kdWxlLCBuYW1lKVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICBjb25zdCBwcm9tcHRzID0gW1xuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ2xpc3QnLFxuICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IGAke21vZHVsZX1gLFxuICAgICAgICAgICAgICAgICAgICAgIGNob2ljZXM6IGN0eC5oZWxwZXJbbW9kdWxlXS5nZXRJZExpc3QoKS5tYXAoKGl0ZW06IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogdXBsb2FkZXJUcmFuc2xhdG9ycyhjdHgpW2l0ZW1dIHx8IGl0ZW0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBpdGVtXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogYENob29zZSBhKG4pICR7bW9kdWxlfWBcbiAgICAgICAgICAgICAgICAgICAgICAvLyBkZWZhdWx0OiBjdHguZ2V0Q29uZmlnKCdwaWNCZWQudXBsb2FkZXInKSB8fCBjdHguZ2V0Q29uZmlnKCdwaWNCZWQuY3VycmVudCcpXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgIGNvbnN0IGFuc3dlciA9IGF3YWl0IGN0eC5jbWQuaW5xdWlyZXIucHJvbXB0PElTdHJpbmdLZXlNYXA8YW55Pj4ocHJvbXB0cylcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGl0ZW0gPSBjdHguaGVscGVyW21vZHVsZV0uZ2V0KGFuc3dlclttb2R1bGVdKVxuICAgICAgICAgICAgICAgICAgaWYgKGl0ZW0/LmNvbmZpZykge1xuICAgICAgICAgICAgICAgICAgICBhd2FpdCBoYW5kbGVDb25maWcoY3R4LCBpdGVtLmNvbmZpZyhjdHgpLCBtb2R1bGUsIGFuc3dlclttb2R1bGVdKVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgICBjYXNlICdwbHVnaW4nOlxuICAgICAgICAgICAgICAgIGlmIChuYW1lKSB7XG4gICAgICAgICAgICAgICAgICBpZiAoIW5hbWUuaW5jbHVkZXMoJ3BpY2dvLXBsdWdpbi0nKSkge1xuICAgICAgICAgICAgICAgICAgICBuYW1lID0gYHBpY2dvLXBsdWdpbi0ke25hbWV9YFxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgaWYgKE9iamVjdC5rZXlzKGN0eC5nZXRDb25maWcoJ3BpY2dvUGx1Z2lucycpKS5pbmNsdWRlcyhuYW1lKSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoY3R4LnBsdWdpbkxvYWRlci5nZXRQbHVnaW4obmFtZSk/LmNvbmZpZykge1xuICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IGhhbmRsZUNvbmZpZyhjdHgsIGN0eC5wbHVnaW5Mb2FkZXIuZ2V0UGx1Z2luKG5hbWUpIS5jb25maWchKGN0eCksICdwbHVnaW4nLCBuYW1lKVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjdHgubG9nLmVycm9yKGBObyBwbHVnaW4gbmFtZWQgJHtuYW1lfWApXG4gICAgICAgICAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICBjb25zdCBwcm9tcHRzID0gW1xuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ2xpc3QnLFxuICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICdwbHVnaW4nLFxuICAgICAgICAgICAgICAgICAgICAgIGNob2ljZXM6IGN0eC5wbHVnaW5Mb2FkZXIuZ2V0RnVsbExpc3QoKSxcbiAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiAnQ2hvb3NlIGEgcGx1Z2luJ1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgICBjb25zdCBhbnN3ZXIgPSBhd2FpdCBjdHguY21kLmlucXVpcmVyLnByb21wdDxhbnk+KHByb21wdHMpXG4gICAgICAgICAgICAgICAgICBpZiAoY3R4LnBsdWdpbkxvYWRlci5nZXRQbHVnaW4oYW5zd2VyLnBsdWdpbik/LmNvbmZpZykge1xuICAgICAgICAgICAgICAgICAgICBhd2FpdCBoYW5kbGVDb25maWcoXG4gICAgICAgICAgICAgICAgICAgICAgY3R4LFxuICAgICAgICAgICAgICAgICAgICAgIGN0eC5wbHVnaW5Mb2FkZXIuZ2V0UGx1Z2luKGFuc3dlci5wbHVnaW4pIS5jb25maWchKGN0eCksXG4gICAgICAgICAgICAgICAgICAgICAgJ3BsdWdpbicsXG4gICAgICAgICAgICAgICAgICAgICAgYW5zd2VyLnBsdWdpblxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgY3R4LmxvZy53YXJuKGBObyBtb2R1bGUgbmFtZWQgJHttb2R1bGV9YClcbiAgICAgICAgICAgICAgICBjdHgubG9nLndhcm4oJ0F2YWlsYWJsZSBtb2R1bGVzIGFyZSB1cGxvYWRlcnx0cmFuc2Zvcm1lcnxwbHVnaW58YnVpbGRpbicpXG4gICAgICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjdHgubG9nLnN1Y2Nlc3MoJ0NvbmZpZ3VyZSBjb25maWcgc3VjY2Vzc2Z1bGx5IScpXG4gICAgICAgICAgICBpZiAobW9kdWxlID09PSAncGx1Z2luJykge1xuICAgICAgICAgICAgICBjdHgubG9nLmluZm8oXCJJZiB5b3Ugd2FudCB0byB1c2UgdGhpcyBjb25maWcsIHBsZWFzZSBydW4gJ3BpY2dvIHVzZSBwbHVnaW5zJ1wiKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gY2F0Y2ggKGU6IGFueSkge1xuICAgICAgICAgICAgY3R4LmxvZy5lcnJvcihlKVxuICAgICAgICAgICAgaWYgKHByb2Nlc3MuYXJndi5pbmNsdWRlcygnLS1kZWJ1ZycpKSB7XG4gICAgICAgICAgICAgIHRocm93IGVcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0pKCkuY2F0Y2goZSA9PiB7XG4gICAgICAgICAgY3R4LmxvZy5lcnJvcihlKVxuICAgICAgICB9KVxuICAgICAgfSlcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBzZXR0aW5nXG4iLCJpbXBvcnQgeyBJUGljR28sIElQbHVnaW4sIFVuZGVmaW5hYmxlLCBJQ0xJQ29uZmlncywgSVN0cmluZ0tleU1hcCB9IGZyb20gJy4uLy4uL3R5cGVzJ1xuaW1wb3J0IHsgdXBsb2FkZXJUcmFuc2xhdG9ycyB9IGZyb20gJy4vdXRpbHMnXG5cbmNvbnN0IHVzZTogSVBsdWdpbiA9IHtcbiAgaGFuZGxlOiBhc3luYyAoY3R4OiBJUGljR28pID0+IHtcbiAgICBjb25zdCBjbWQgPSBjdHguY21kXG4gICAgY21kLnByb2dyYW1cbiAgICAgIC5jb21tYW5kKCd1c2UnKVxuICAgICAgLmFyZ3VtZW50cygnW21vZHVsZV0nKVxuICAgICAgLmRlc2NyaXB0aW9uKCd1c2UgbW9kdWxlcyBvZiBwaWNnbycpXG4gICAgICAuYWN0aW9uKChtb2R1bGU6IHN0cmluZykgPT4ge1xuICAgICAgICA7KGFzeW5jICgpID0+IHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgbGV0IHByb21wdHM6IGFueVtdID0gW11cbiAgICAgICAgICAgIGNvbnN0IGNvbmZpZzogSUNMSUNvbmZpZ3MgPSB7XG4gICAgICAgICAgICAgIHVwbG9hZGVyOiB7XG4gICAgICAgICAgICAgICAgdHlwZTogJ2xpc3QnLFxuICAgICAgICAgICAgICAgIG5hbWU6ICd1cGxvYWRlcicsXG4gICAgICAgICAgICAgICAgbWVzc2FnZTogJ1VzZSBhbiB1cGxvYWRlcicsXG4gICAgICAgICAgICAgICAgY2hvaWNlczogY3R4LmhlbHBlci51cGxvYWRlci5nZXRJZExpc3QoKS5tYXAoKGl0ZW06IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogdXBsb2FkZXJUcmFuc2xhdG9ycyhjdHgpW2l0ZW1dIHx8IGl0ZW0sXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiBpdGVtXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgZGVmYXVsdDogY3R4LmdldENvbmZpZygncGljQmVkLnVwbG9hZGVyJykgfHwgY3R4LmdldENvbmZpZygncGljQmVkLmN1cnJlbnQnKSB8fCAnc21tcydcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgdHJhbnNmb3JtZXI6IHtcbiAgICAgICAgICAgICAgICB0eXBlOiAnbGlzdCcsXG4gICAgICAgICAgICAgICAgbmFtZTogJ3RyYW5zZm9ybWVyJyxcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiAnVXNlIGEgdHJhbnNmb3JtZXInLFxuICAgICAgICAgICAgICAgIGNob2ljZXM6IGN0eC5oZWxwZXIudHJhbnNmb3JtZXIuZ2V0SWRMaXN0KCksXG4gICAgICAgICAgICAgICAgZGVmYXVsdDogY3R4LmdldENvbmZpZzxVbmRlZmluYWJsZTxzdHJpbmc+PigncGljQmVkLnRyYW5zZm9ybWVyJykgfHwgJ3BhdGgnXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIHBsdWdpbnM6IHtcbiAgICAgICAgICAgICAgICB0eXBlOiAnY2hlY2tib3gnLFxuICAgICAgICAgICAgICAgIG5hbWU6ICdwbHVnaW5zJyxcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiAnVXNlIHBsdWdpbnMnLFxuICAgICAgICAgICAgICAgIGNob2ljZXM6IGN0eC5wbHVnaW5Mb2FkZXIuZ2V0RnVsbExpc3QoKSxcbiAgICAgICAgICAgICAgICBkZWZhdWx0OiBPYmplY3Qua2V5cyhjdHguZ2V0Q29uZmlnKCdwaWNnb1BsdWdpbnMnKSkuZmlsdGVyKChpdGVtOiBzdHJpbmcpID0+XG4gICAgICAgICAgICAgICAgICBjdHguZ2V0Q29uZmlnKGBwaWNnb1BsdWdpbnMuJHtpdGVtfWApXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBpZiBhbiBvcHRpb24gaXMgc3BlY2lmaWMsIHRoZW4ganVzdCBzZXQgdGhpcyBvcHRpb24gaW4gY29uZmlnXG4gICAgICAgICAgICBpZiAobW9kdWxlKSB7XG4gICAgICAgICAgICAgIGlmIChjb25maWdbbW9kdWxlXSkge1xuICAgICAgICAgICAgICAgIHByb21wdHMucHVzaChjb25maWdbbW9kdWxlXSlcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjdHgubG9nLndhcm4oYE5vIG1vZHVsZSBuYW1lZCAke21vZHVsZX1gKVxuICAgICAgICAgICAgICAgIGN0eC5sb2cud2FybignQXZhaWxhYmxlIG1vZHVsZXMgYXJlIHVwbG9hZGVyfHRyYW5zZm9ybWVyfHBsdWdpbnMnKVxuICAgICAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBwcm9tcHRzID0gT2JqZWN0LmtleXMoY29uZmlnKS5tYXAoKGl0ZW06IHN0cmluZykgPT4gY29uZmlnW2l0ZW1dKVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgYW5zd2VyID0gYXdhaXQgY21kLmlucXVpcmVyLnByb21wdDxhbnk+KHByb21wdHMpXG5cbiAgICAgICAgICAgIC8vIGhhbmRsZSBmb3IgcGx1Z2lucyBvcHRpb24gZnJvbSBBcnJheSB0byBvYmplY3RcbiAgICAgICAgICAgIGlmIChhbnN3ZXIucGx1Z2lucykge1xuICAgICAgICAgICAgICBjb25zdCBwbHVnaW5zID0gY3R4LmdldENvbmZpZzxJU3RyaW5nS2V5TWFwPGJvb2xlYW4+PigncGljZ29QbHVnaW5zJylcbiAgICAgICAgICAgICAgT2JqZWN0LmtleXMocGx1Z2lucykuZm9yRWFjaCgoaXRlbTogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGFuc3dlci5wbHVnaW5zLmluY2x1ZGVzKGl0ZW0pKSB7XG4gICAgICAgICAgICAgICAgICBwbHVnaW5zW2l0ZW1dID0gdHJ1ZVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICBwbHVnaW5zW2l0ZW1dID0gZmFsc2VcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgIC8vIHNhdmUgY29uZmlnIGZvciBwbHVnaW5zXG4gICAgICAgICAgICAgIGN0eC5zYXZlQ29uZmlnKHtcbiAgICAgICAgICAgICAgICBwaWNnb1BsdWdpbnM6IHBsdWdpbnNcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIHNhdmUgY29uZmlnIGZvciB1cGxvYWRlciAmIHRyYW5zZm9ybWVyXG4gICAgICAgICAgICBjdHguc2F2ZUNvbmZpZyh7XG4gICAgICAgICAgICAgICdwaWNCZWQuY3VycmVudCc6IGFuc3dlci51cGxvYWRlciB8fCBjdHguZ2V0Q29uZmlnPHN0cmluZz4oJ3BpY0JlZC5jdXJyZW50JyksXG4gICAgICAgICAgICAgICdwaWNCZWQudXBsb2FkZXInOiBhbnN3ZXIudXBsb2FkZXIgfHwgY3R4LmdldENvbmZpZzxzdHJpbmc+KCdwaWNCZWQuY3VycmVudCcpLFxuICAgICAgICAgICAgICAncGljQmVkLnRyYW5zZm9ybWVyJzogYW5zd2VyLnRyYW5zZm9ybWVyIHx8ICdwYXRoJ1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIGN0eC5sb2cuc3VjY2VzcygnQ29uZmlndXJlIHNhdmVkIHN1Y2Nlc3NmdWxseSEnKVxuICAgICAgICAgIH0gY2F0Y2ggKGU6IGFueSkge1xuICAgICAgICAgICAgY3R4LmxvZy5lcnJvcihlKVxuICAgICAgICAgICAgaWYgKHByb2Nlc3MuYXJndi5pbmNsdWRlcygnLS1kZWJ1ZycpKSB7XG4gICAgICAgICAgICAgIHRocm93IGVcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0pKCkuY2F0Y2goZSA9PiB7XG4gICAgICAgICAgY3R4LmxvZy5lcnJvcihlKVxuICAgICAgICB9KVxuICAgICAgfSlcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCB1c2VcbiIsImltcG9ydCB7IElQaWNHbywgSVBsdWdpbiB9IGZyb20gJy4uLy4uL3R5cGVzJ1xuXG5jb25zdCBwcm94eTogSVBsdWdpbiA9IHtcbiAgaGFuZGxlOiAoY3R4OiBJUGljR28pID0+IHtcbiAgICBjb25zdCBjbWQgPSBjdHguY21kXG4gICAgY21kLnByb2dyYW0ub3B0aW9uKCctcCwgLS1wcm94eSA8dXJsPicsICdzZXQgcHJveHkgZm9yIHVwbG9hZGluZycsIChwcm94eTogc3RyaW5nKSA9PiB7XG4gICAgICBjdHguc2V0Q29uZmlnKHtcbiAgICAgICAgJ3BpY0JlZC5wcm94eSc6IHByb3h5XG4gICAgICB9KVxuICAgIH0pXG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgcHJveHlcbiIsImltcG9ydCBtYXRjaCBmcm9tICdtaW5pbWF0Y2gnXG5cbmltcG9ydCBmcywgeyBlbnN1cmVEaXJTeW5jIH0gZnJvbSAnZnMtZXh0cmEnXG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJ1xuaW1wb3J0IGdsb2JieSBmcm9tICdnbG9iYnknXG5pbXBvcnQgeyByZW5kZXIgYXMgZWpzUmVuZGVyIH0gZnJvbSAnZWpzJ1xuXG5pbXBvcnQgeyBJUGljR28sIElPcHRpb25zLCBJRmlsZVRyZWUgfSBmcm9tICcuLi90eXBlcydcblxuLyoqXG4gKiBHZW5lcmF0ZSB0ZW1wbGF0ZSBmaWxlcyB0byBkZXN0aW5hdGlvbiBmaWxlcy5cbiAqIEBwYXJhbSB7UGljR299IGN0eFxuICogQHBhcmFtIHtJT3B0aW9uc30gb3B0aW9uc1xuICovXG5jb25zdCBnZW5lcmF0ZSA9IGFzeW5jIChjdHg6IElQaWNHbywgb3B0aW9uczogSU9wdGlvbnMpOiBQcm9taXNlPGFueT4gPT4ge1xuICB0cnkge1xuICAgIGNvbnN0IG9wdHMgPSBnZXRPcHRpb25zKG9wdGlvbnMudG1wKVxuICAgIGNvbnN0IHNvdXJjZSA9IHBhdGguam9pbihvcHRpb25zLnRtcCwgJ3RlbXBsYXRlJylcbiAgICBsZXQgYW5zd2VycyA9IHt9XG4gICAgaWYgKG9wdHMucHJvbXB0cyAmJiBvcHRzLnByb21wdHMubGVuZ3RoID4gMCkge1xuICAgICAgYW5zd2VycyA9IGF3YWl0IGN0eC5jbWQuaW5xdWlyZXIucHJvbXB0KG9wdHMucHJvbXB0cylcbiAgICB9XG4gICAgbGV0IF9maWxlczogc3RyaW5nW10gPSBhd2FpdCBnbG9iYnkoWycqKi8qJ10sIHsgY3dkOiBzb3VyY2UsIGRvdDogdHJ1ZSB9KSAvLyBnZXQgZmlsZXMnIG5hbWUgYXJyYXlcbiAgICBfZmlsZXMgPSBfZmlsZXMuZmlsdGVyKChpdGVtOiBzdHJpbmcpID0+IHtcbiAgICAgIGxldCBnbG9iID0gJydcbiAgICAgIE9iamVjdC5rZXlzKG9wdHMuZmlsdGVycykuZm9yRWFjaCgoa2V5OiBzdHJpbmcpID0+IHtcbiAgICAgICAgaWYgKG1hdGNoKGl0ZW0sIGtleSwgeyBkb3Q6IHRydWUgfSkpIHtcbiAgICAgICAgICBnbG9iID0gaXRlbVxuICAgICAgICB9XG4gICAgICB9KVxuICAgICAgaWYgKGdsb2IpIHtcbiAgICAgICAgLy8gZmluZCBhIGZpbHRlciBleHByZXNzaW9uXG4gICAgICAgIHJldHVybiBmaWx0ZXJzKGN0eCwgb3B0cy5maWx0ZXJzW2dsb2JdLCBhbnN3ZXJzKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgIH1cbiAgICB9KVxuICAgIGlmIChfZmlsZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICBjdHgubG9nLndhcm4oJ1RlbXBsYXRlIGZpbGVzIG5vdCBmb3VuZCEnKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGNvbnN0IGZpbGVzID0gcmVuZGVyKF9maWxlcywgc291cmNlLCBhbnN3ZXJzKVxuICAgIHdyaXRlRmlsZVRyZWUob3B0aW9ucy5kZXN0LCBmaWxlcylcbiAgICBpZiAodHlwZW9mIG9wdHMuY29tcGxldGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIG9wdHMuY29tcGxldGUoeyBhbnN3ZXJzLCBvcHRpb25zLCBmaWxlczogX2ZpbGVzLCBjdHggfSlcbiAgICB9XG4gICAgaWYgKG9wdHMuY29tcGxldGVNZXNzYWdlKSB7XG4gICAgICBjdHgubG9nLnN1Y2Nlc3Mob3B0cy5jb21wbGV0ZU1lc3NhZ2UpXG4gICAgfVxuICAgIGN0eC5sb2cuc3VjY2VzcygnRG9uZSEnKVxuICB9IGNhdGNoIChlOiBhbnkpIHtcbiAgICBjdHgubG9nLmVycm9yKGUpXG4gIH1cbn1cblxuLyoqXG4gKiBSZXR1cm4gdGhlIGZpbHRlcnMnIHJlc3VsdFxuICogQHBhcmFtIGN0eCBQaWNHb1xuICogQHBhcmFtIGV4cCBjb25kaXRpb24gZXhwcmVzc2lvblxuICogQHBhcmFtIGRhdGEgb3B0aW9ucyBkYXRhXG4gKi9cbmNvbnN0IGZpbHRlcnMgPSAoY3R4OiBJUGljR28sIGV4cDogYW55LCBkYXRhOiBhbnkpOiBib29sZWFuID0+IHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9yZXN0cmljdC1wbHVzLW9wZXJhbmRzLCBuby1uZXctZnVuYywgQHR5cGVzY3JpcHQtZXNsaW50L25vLWltcGxpZWQtZXZhbFxuICBjb25zdCBmbiA9IG5ldyBGdW5jdGlvbignZGF0YScsICd3aXRoIChkYXRhKSB7IHJldHVybiAnICsgZXhwICsgJ30nKVxuICB0cnkge1xuICAgIHJldHVybiBmbihkYXRhKVxuICB9IGNhdGNoIChlKSB7XG4gICAgY3R4LmxvZy5lcnJvcihgRXJyb3Igd2hlbiBldmFsdWF0aW5nIGZpbHRlciBjb25kaXRpb246ICR7SlNPTi5zdHJpbmdpZnkoZXhwKX1gKVxuICAgIHJldHVybiBmYWxzZVxuICB9XG59XG5cbi8qKlxuICogR2V0IHRlbXBsYXRlIG9wdGlvbnNcbiAqIEBwYXJhbSB7c3RyaW5nfSB0ZW1wbGF0ZVBhdGhcbiAqL1xuY29uc3QgZ2V0T3B0aW9ucyA9ICh0ZW1wbGF0ZVBhdGg6IHN0cmluZyk6IGFueSA9PiB7XG4gIGNvbnN0IG9wdGlvbnNQYXRoID0gcGF0aC5qb2luKHRlbXBsYXRlUGF0aCwgJ2luZGV4LmpzJylcbiAgaWYgKGZzLmV4aXN0c1N5bmMob3B0aW9uc1BhdGgpKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby12YXItcmVxdWlyZXNcbiAgICBjb25zdCBvcHRpb25zID0gcmVxdWlyZShvcHRpb25zUGF0aClcbiAgICByZXR1cm4gb3B0aW9uc1xuICB9IGVsc2Uge1xuICAgIHJldHVybiB7fVxuICB9XG59XG5cbi8qKlxuICogUmVuZGVyIGZpbGVzIHRvIGEgdmlydHVhbCB0cmVlIG9iamVjdFxuICogQHBhcmFtIHthcnJheX0gZmlsZXNcbiAqL1xuY29uc3QgcmVuZGVyID0gKGZpbGVzOiBzdHJpbmdbXSwgc291cmNlOiBzdHJpbmcsIG9wdGlvbnM6IGFueSk6IGFueSA9PiB7XG4gIGNvbnN0IGZpbGVUcmVlOiBJRmlsZVRyZWUgPSB7fVxuICBmaWxlcy5mb3JFYWNoKChmaWxlUGF0aDogc3RyaW5nKTogdm9pZCA9PiB7XG4gICAgY29uc3QgZmlsZSA9IGZzLnJlYWRGaWxlU3luYyhwYXRoLmpvaW4oc291cmNlLCBmaWxlUGF0aCksICd1dGY4JylcbiAgICBjb25zdCBjb250ZW50ID0gZWpzUmVuZGVyKGZpbGUsIG9wdGlvbnMpXG4gICAgaWYgKEJ1ZmZlci5pc0J1ZmZlcihjb250ZW50KSB8fCAvW15cXHNdLy50ZXN0KGNvbnRlbnQpKSB7XG4gICAgICBmaWxlVHJlZVtmaWxlUGF0aF0gPSBjb250ZW50XG4gICAgfVxuICB9KVxuICByZXR1cm4gZmlsZVRyZWVcbn1cblxuLyoqXG4gKiBXcml0ZSByZW5kZXJlZCBmaWxlcycgY29udGVudCB0byByZWFsIGZpbGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBkaXJcbiAqIEBwYXJhbSB7b2JqZWN0fSBmaWxlc1xuICovXG5jb25zdCB3cml0ZUZpbGVUcmVlID0gKGRpcjogc3RyaW5nLCBmaWxlczogYW55KTogdm9pZCA9PiB7XG4gIE9iamVjdC5rZXlzKGZpbGVzKS5mb3JFYWNoKChuYW1lOiBzdHJpbmcpID0+IHtcbiAgICBjb25zdCBmaWxlUGF0aCA9IHBhdGguam9pbihkaXIsIG5hbWUpXG4gICAgZW5zdXJlRGlyU3luYyhwYXRoLmRpcm5hbWUoZmlsZVBhdGgpKVxuICAgIGZzLndyaXRlRmlsZVN5bmMoZmlsZVBhdGgsIGZpbGVzW25hbWVdKVxuICB9KVxufVxuXG5leHBvcnQgeyBmaWx0ZXJzLCBnZW5lcmF0ZSwgcmVuZGVyLCB3cml0ZUZpbGVUcmVlIH1cbiIsImltcG9ydCBjaGFsayBmcm9tICdjaGFsaydcbmltcG9ydCBkb3dubG9hZCBmcm9tICdkb3dubG9hZC1naXQtcmVwbydcbmltcG9ydCBmcyBmcm9tICdmcy1leHRyYSdcbmltcG9ydCB7IGhvbWVkaXIgfSBmcm9tICdvcydcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnXG5pbXBvcnQgeyBzeW5jIH0gZnJvbSAncmltcmFmJ1xuXG5pbXBvcnQgeyBnZW5lcmF0ZSB9IGZyb20gJy4uLy4uL3V0aWxzL2luaXRVdGlscydcbmltcG9ydCB7IElPcHRpb25zLCBJUGx1Z2luLCBJUGljR28gfSBmcm9tICcuLi8uLi90eXBlcydcblxuY29uc3QgcnVuID0gKGN0eDogSVBpY0dvLCBvcHRpb25zOiBJT3B0aW9ucyk6IHZvaWQgPT4ge1xuICBpZiAob3B0aW9ucy5vZmZsaW5lKSB7XG4gICAgLy8gb2ZmbGluZSBtb2RlXG4gICAgaWYgKGZzLmV4aXN0c1N5bmMob3B0aW9ucy50ZW1wbGF0ZSkpIHtcbiAgICAgIGdlbmVyYXRlKGN0eCwgb3B0aW9ucykuY2F0Y2goZSA9PiB7XG4gICAgICAgIGN0eC5sb2cuZXJyb3IoZSlcbiAgICAgIH0pXG4gICAgfSBlbHNlIHtcbiAgICAgIGN0eC5sb2cuZXJyb3IoYExvY2FsIHRlbXBsYXRlICR7b3B0aW9ucy50ZW1wbGF0ZX0gbm90IGZvdW5kYClcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgLy8gb25saW5lIG1vZGVcbiAgICBvcHRpb25zLnRlbXBsYXRlID0gIW9wdGlvbnMuaGFzU2xhc2hcbiAgICAgID8gJ1BpY0dvL3BpY2dvLXRlbXBsYXRlLScgKyBvcHRpb25zLnRlbXBsYXRlIC8vIG9mZmljaWFsIHRlbXBsYXRlXG4gICAgICA6IG9wdGlvbnMudGVtcGxhdGVcbiAgICBkb3dubG9hZEFuZEdlbmVyYXRlKGN0eCwgb3B0aW9ucylcbiAgfVxufVxuXG4vKipcbiAqIGRvd25sb2FkIHRlbXBsYXRlICYgZ2VuZXJhdGVcbiAqIEBwYXJhbSB7IFBpY0dvIH0gY3R4XG4gKiBAcGFyYW0geyBJT3B0aW9ucyB9IG9wdGlvbnNcbiAqL1xuY29uc3QgZG93bmxvYWRBbmRHZW5lcmF0ZSA9IChjdHg6IElQaWNHbywgb3B0aW9uczogSU9wdGlvbnMpOiB2b2lkID0+IHtcbiAgaWYgKGZzLmV4aXN0c1N5bmMob3B0aW9ucy50bXApKSB7XG4gICAgc3luYyhvcHRpb25zLnRtcClcbiAgfVxuICBjdHgubG9nLmluZm8oJ1RlbXBsYXRlIGZpbGVzIGFyZSBkb3dubG9hZGluZy4uLicpXG4gIGRvd25sb2FkKG9wdGlvbnMudGVtcGxhdGUsIG9wdGlvbnMudG1wLCB7IGNsb25lOiBvcHRpb25zLmNsb25lIH0sIChlcnI6IEVycm9yKSA9PiB7XG4gICAgaWYgKGVycikge1xuICAgICAgY3R4LmxvZy5lcnJvcihlcnIpXG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgY3R4LmxvZy5zdWNjZXNzKCdUZW1wbGF0ZSBmaWxlcyBhcmUgZG93bmxvYWRlZCEnKVxuICAgIGdlbmVyYXRlKGN0eCwgb3B0aW9ucykuY2F0Y2goZSA9PiB7XG4gICAgICBjdHgubG9nLmVycm9yKGUpXG4gICAgfSlcbiAgfSlcbn1cblxuY29uc3QgaW5pdDogSVBsdWdpbiA9IHtcbiAgaGFuZGxlOiBhc3luYyAoY3R4OiBJUGljR28pID0+IHtcbiAgICBjb25zdCBjbWQgPSBjdHguY21kXG4gICAgY21kLnByb2dyYW1cbiAgICAgIC5jb21tYW5kKCdpbml0JylcbiAgICAgIC5hcmd1bWVudHMoJzx0ZW1wbGF0ZT4gW3Byb2plY3RdJylcbiAgICAgIC5vcHRpb24oJy0tY2xvbmUnLCAndXNlIGdpdCBjbG9uZScpXG4gICAgICAub3B0aW9uKCctLW9mZmxpbmUnLCAndXNlIGNhY2hlZCB0ZW1wbGF0ZScpXG4gICAgICAuZGVzY3JpcHRpb24oXCJjcmVhdGUgcGljZ28gcGx1Z2luJ3MgZGV2ZWxvcG1lbnQgdGVtcGxhdGVzXCIpXG4gICAgICAuYWN0aW9uKCh0ZW1wbGF0ZTogc3RyaW5nLCBwcm9qZWN0OiBzdHJpbmcsIHByb2dyYW06IGFueSkgPT4ge1xuICAgICAgICA7KGFzeW5jICgpID0+IHtcbiAgICAgICAgICAvLyBUaGFua3MgdG8gdnVlLWNsaSBpbml0OiBodHRwczovL2dpdGh1Yi5jb20vdnVlanMvdnVlLWNsaS9ibG9iL21hc3Rlci9iaW4vdnVlLWluaXRcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgaGFzU2xhc2ggPSB0ZW1wbGF0ZS5pbmNsdWRlcygnLycpXG4gICAgICAgICAgICBjb25zdCBpblBsYWNlID0gIXByb2plY3QgfHwgcHJvamVjdCA9PT0gJy4nXG4gICAgICAgICAgICBjb25zdCBkZXN0ID0gcGF0aC5yZXNvbHZlKHByb2plY3QgfHwgJy4nKVxuICAgICAgICAgICAgY29uc3QgY2xvbmUgPSBwcm9ncmFtLmNsb25lIHx8IGZhbHNlXG4gICAgICAgICAgICBjb25zdCBvZmZsaW5lID0gcHJvZ3JhbS5vZmZsaW5lIHx8IGZhbHNlXG4gICAgICAgICAgICBjb25zdCB0bXAgPSBwYXRoLmpvaW4oaG9tZWRpcigpLCAnLnBpY2xpc3QvdGVtcGxhdGVzJywgdGVtcGxhdGUucmVwbGFjZSgvWy86XS9nLCAnLScpKSAvLyBmb3IgY2FjaGluZyB0ZW1wbGF0ZVxuXG4gICAgICAgICAgICBpZiAocHJvZ3JhbS5vZmZsaW5lKSB7XG4gICAgICAgICAgICAgIHRlbXBsYXRlID0gdG1wXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IG9wdGlvbnMgPSB7XG4gICAgICAgICAgICAgIHRlbXBsYXRlLFxuICAgICAgICAgICAgICBwcm9qZWN0LFxuICAgICAgICAgICAgICBoYXNTbGFzaCxcbiAgICAgICAgICAgICAgaW5QbGFjZSxcbiAgICAgICAgICAgICAgZGVzdCxcbiAgICAgICAgICAgICAgY2xvbmUsXG4gICAgICAgICAgICAgIHRtcCxcbiAgICAgICAgICAgICAgb2ZmbGluZVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBjaGVjayBpZiBwcm9qZWN0IGlzIGVtcHR5IG9yIGV4aXN0XG4gICAgICAgICAgICBpZiAoaW5QbGFjZSB8fCBmcy5leGlzdHNTeW5jKGRlc3QpKSB7XG4gICAgICAgICAgICAgIGF3YWl0IGN0eC5jbWQuaW5xdWlyZXJcbiAgICAgICAgICAgICAgICAucHJvbXB0KFtcbiAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogJ2NvbmZpcm0nLFxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBpblBsYWNlID8gJ0dlbmVyYXRlIHByb2plY3QgaW4gY3VycmVudCBkaXJlY3Rvcnk/JyA6ICdUYXJnZXQgZGlyZWN0b3J5IGV4aXN0cy4gQ29udGludWU/JyxcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogJ29rJ1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIF0pXG4gICAgICAgICAgICAgICAgLnRoZW4oKGFuc3dlcjogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgICBpZiAoYW5zd2VyLm9rKSB7XG4gICAgICAgICAgICAgICAgICAgIHJ1bihjdHgsIG9wdGlvbnMpXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIC8vIHByb2plY3QgaXMgZ2l2ZW5cbiAgICAgICAgICAgICAgcnVuKGN0eCwgb3B0aW9ucylcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGNhdGNoIChlOiBhbnkpIHtcbiAgICAgICAgICAgIGN0eC5sb2cuZXJyb3IoZSlcbiAgICAgICAgICAgIGlmIChwcm9jZXNzLmFyZ3YuaW5jbHVkZXMoJy0tZGVidWcnKSkge1xuICAgICAgICAgICAgICB0aHJvdyBlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KSgpLmNhdGNoKGUgPT4ge1xuICAgICAgICAgIGN0eC5sb2cuZXJyb3IoZSlcbiAgICAgICAgfSlcbiAgICAgIH0pXG4gICAgICAub24oJy0taGVscCcsICgpID0+IHtcbiAgICAgICAgY29uc29sZS5sb2coKVxuICAgICAgICBjb25zb2xlLmxvZygnRXhhbXBsZXM6JylcbiAgICAgICAgY29uc29sZS5sb2coKVxuICAgICAgICBjb25zb2xlLmxvZyhjaGFsay5ncmF5KCcgICMgY3JlYXRlIGEgbmV3IHByb2plY3Qgd2l0aCBhbiBvZmZpY2lhbCB0ZW1wbGF0ZScpKVxuICAgICAgICBjb25zb2xlLmxvZygnICAkIHBpY2dvIGluaXQgcGx1Z2luIG15LXByb2plY3QnKVxuICAgICAgICBjb25zb2xlLmxvZygpXG4gICAgICAgIGNvbnNvbGUubG9nKGNoYWxrLmdyYXkoJyAgIyBjcmVhdGUgYSBuZXcgcHJvamVjdCBzdHJhaWdodCBmcm9tIGEgZ2l0aHViIHRlbXBsYXRlJykpXG4gICAgICAgIGNvbnNvbGUubG9nKCcgICQgcGljZ28gaW5pdCB1c2VybmFtZS9yZXBvIG15LXByb2plY3QnKVxuICAgICAgICBjb25zb2xlLmxvZygpXG4gICAgICB9KVxuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IGluaXRcbiIsImltcG9ydCB7IElQbHVnaW4sIElQaWNHbywgSVN0cmluZ0tleU1hcCB9IGZyb20gJy4uLy4uL3R5cGVzJ1xuXG5jb25zdCBpMThuOiBJUGx1Z2luID0ge1xuICBoYW5kbGU6IChjdHg6IElQaWNHbykgPT4ge1xuICAgIGNvbnN0IGNtZCA9IGN0eC5jbWRcbiAgICBjbWQucHJvZ3JhbVxuICAgICAgLmNvbW1hbmQoJ2kxOG4nKVxuICAgICAgLmFyZ3VtZW50cygnW2xhbmddJylcbiAgICAgIC5kZXNjcmlwdGlvbignY2hhbmdlIGxhbmd1YWdlLCB6aC1DTiwgemgtVFcsIGVuJylcbiAgICAgIC5hY3Rpb24oYXN5bmMgKGxhbmc6IHN0cmluZyA9ICcnKSA9PiB7XG4gICAgICAgIGNvbnN0IGxpc3QgPSBjdHguaTE4bi5nZXRMYW5ndWFnZUxpc3QoKVxuICAgICAgICBpZiAoIWxhbmcpIHtcbiAgICAgICAgICBjb25zdCBwcm9tcHRzID0gW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICB0eXBlOiAnbGlzdCcsXG4gICAgICAgICAgICAgIG5hbWU6ICdpMThuJyxcbiAgICAgICAgICAgICAgY2hvaWNlczogbGlzdCxcbiAgICAgICAgICAgICAgbWVzc2FnZTogJ0Nob29zZSBhIGxhbmd1YWdlJyxcbiAgICAgICAgICAgICAgZGVmYXVsdDogY3R4LmdldENvbmZpZygnc2V0dGluZ3MubGFuZ3VhZ2UnKSB8fCAnemgtQ04nXG4gICAgICAgICAgICB9XG4gICAgICAgICAgXVxuICAgICAgICAgIGNvbnN0IGFuc3dlciA9IGF3YWl0IGN0eC5jbWQuaW5xdWlyZXIucHJvbXB0PElTdHJpbmdLZXlNYXA8c3RyaW5nPj4ocHJvbXB0cylcbiAgICAgICAgICBsYW5nID0gYW5zd2VyLmkxOG5cbiAgICAgICAgfVxuICAgICAgICBpZiAoIWxpc3QuaW5jbHVkZXMobGFuZykpIHtcbiAgICAgICAgICBjdHgubG9nLndhcm4oJ05vIHN1Y2ggbGFuZ3VhZ2UnKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGN0eC5pMThuLnNldExhbmd1YWdlKGxhbmcpXG4gICAgICAgICAgY3R4LmxvZy5zdWNjZXNzKGBMYW5ndWFnZSBzZXQgdG8gJHtsYW5nfWApXG4gICAgICAgIH1cbiAgICAgIH0pXG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgaTE4blxuIiwiaW1wb3J0IHsgSVBsdWdpbiwgSUxpZmVjeWNsZVBsdWdpbnMgfSBmcm9tICcuLi90eXBlcydcblxuZXhwb3J0IGNsYXNzIExpZmVjeWNsZVBsdWdpbnMgaW1wbGVtZW50cyBJTGlmZWN5Y2xlUGx1Z2lucyB7XG4gIHN0YXRpYyBjdXJyZW50UGx1Z2luOiBzdHJpbmcgfCBudWxsXG5cbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBwbHVnaW5cbiAgICovXG4gIHByaXZhdGUgcmVhZG9ubHkgbmFtZTogc3RyaW5nXG4gIC8qKlxuICAgKiBUaGUgbGlzdCBvZiBwbHVnaW5zXG4gICAqL1xuICBwcml2YXRlIHJlYWRvbmx5IGxpc3Q6IE1hcDxzdHJpbmcsIElQbHVnaW4+XG4gIC8qKlxuICAgKiBUaGUgbWFwIG9mIHBsdWdpbiBpZFxuICAgKi9cbiAgcHJpdmF0ZSByZWFkb25seSBwbHVnaW5JZE1hcDogTWFwPHN0cmluZywgc3RyaW5nW10+XG5cbiAgY29uc3RydWN0b3IobmFtZTogc3RyaW5nKSB7XG4gICAgdGhpcy5uYW1lID0gbmFtZVxuICAgIHRoaXMubGlzdCA9IG5ldyBNYXAoKVxuICAgIHRoaXMucGx1Z2luSWRNYXAgPSBuZXcgTWFwKClcbiAgfVxuXG4gIHJlZ2lzdGVyKGlkOiBzdHJpbmcsIHBsdWdpbjogSVBsdWdpbik6IHZvaWQge1xuICAgIGlmICghaWQpIHRocm93IG5ldyBUeXBlRXJyb3IoJ2lkIGlzIHJlcXVpcmVkIScpXG4gICAgaWYgKHR5cGVvZiBwbHVnaW4uaGFuZGxlICE9PSAnZnVuY3Rpb24nKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdwbHVnaW4uaGFuZGxlIG11c3QgYmUgYSBmdW5jdGlvbiEnKVxuICAgIGlmICh0aGlzLmxpc3QuaGFzKGlkKSkgdGhyb3cgbmV3IFR5cGVFcnJvcihgJHt0aGlzLm5hbWV9IGR1cGxpY2F0ZSBpZDogJHtpZH0hYClcblxuICAgIHRoaXMubGlzdC5zZXQoaWQsIHBsdWdpbilcblxuICAgIGlmIChMaWZlY3ljbGVQbHVnaW5zLmN1cnJlbnRQbHVnaW4pIHtcbiAgICAgIGlmICh0aGlzLnBsdWdpbklkTWFwLmhhcyhMaWZlY3ljbGVQbHVnaW5zLmN1cnJlbnRQbHVnaW4pKSB7XG4gICAgICAgIHRoaXMucGx1Z2luSWRNYXAuZ2V0KExpZmVjeWNsZVBsdWdpbnMuY3VycmVudFBsdWdpbik/LnB1c2goaWQpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnBsdWdpbklkTWFwLnNldChMaWZlY3ljbGVQbHVnaW5zLmN1cnJlbnRQbHVnaW4sIFtpZF0pXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgdW5yZWdpc3RlcihwbHVnaW5OYW1lOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5wbHVnaW5JZE1hcC5oYXMocGx1Z2luTmFtZSkpIHtcbiAgICAgIGNvbnN0IHBsdWdpbkxpc3QgPSB0aGlzLnBsdWdpbklkTWFwLmdldChwbHVnaW5OYW1lKVxuICAgICAgcGx1Z2luTGlzdD8uZm9yRWFjaCgocGx1Z2luOiBzdHJpbmcpID0+IHtcbiAgICAgICAgdGhpcy5saXN0LmRlbGV0ZShwbHVnaW4pXG4gICAgICB9KVxuICAgIH1cbiAgfVxuXG4gIGdldE5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5uYW1lXG4gIH1cblxuICBnZXQoaWQ6IHN0cmluZyk6IElQbHVnaW4gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLmxpc3QuZ2V0KGlkKVxuICB9XG5cbiAgZ2V0TGlzdCgpOiBJUGx1Z2luW10ge1xuICAgIHJldHVybiBbLi4udGhpcy5saXN0LnZhbHVlcygpXVxuICB9XG5cbiAgZ2V0SWRMaXN0KCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gWy4uLnRoaXMubGlzdC5rZXlzKCldXG4gIH1cbn1cblxuZXhwb3J0IGNvbnN0IHNldEN1cnJlbnRQbHVnaW5OYW1lID0gKG5hbWU6IHN0cmluZyB8IG51bGwgPSBudWxsKTogdm9pZCA9PiB7XG4gIExpZmVjeWNsZVBsdWdpbnMuY3VycmVudFBsdWdpbiA9IG5hbWVcbn1cblxuZXhwb3J0IGNvbnN0IGdldEN1cnJlbnRQbHVnaW5OYW1lID0gKCk6IHN0cmluZyB8IG51bGwgPT4ge1xuICByZXR1cm4gTGlmZWN5Y2xlUGx1Z2lucy5jdXJyZW50UGx1Z2luXG59XG5cbmV4cG9ydCBkZWZhdWx0IExpZmVjeWNsZVBsdWdpbnNcbiIsIi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1taXN1c2VkLXByb21pc2VzICovXG5pbXBvcnQgeyBDb21tYW5kIH0gZnJvbSAnY29tbWFuZGVyJ1xuaW1wb3J0IGlucXVpcmVyLCB7IElucXVpcmVyIH0gZnJvbSAnaW5xdWlyZXInXG5cbmltcG9ydCBjb21tYW5kZXJzIGZyb20gJy4uL3BsdWdpbnMvY29tbWFuZGVyJ1xuaW1wb3J0IHsgZ2V0Q3VycmVudFBsdWdpbk5hbWUgfSBmcm9tICcuL0xpZmVjeWNsZVBsdWdpbnMnXG5cbmltcG9ydCB7IElQbHVnaW4sIElDb21tYW5kZXIsIElQaWNHbyB9IGZyb20gJy4uL3R5cGVzJ1xuXG5leHBvcnQgY2xhc3MgQ29tbWFuZGVyIGltcGxlbWVudHMgSUNvbW1hbmRlciB7XG4gIHByaXZhdGUgcmVhZG9ubHkgbmFtZSA9ICdjb21tYW5kZXInXG4gIHN0YXRpYyBjdXJyZW50UGx1Z2luOiBzdHJpbmcgfCBudWxsXG4gIHByaXZhdGUgcmVhZG9ubHkgbGlzdCA9IG5ldyBNYXA8c3RyaW5nLCBJUGx1Z2luPigpXG4gIHByaXZhdGUgcmVhZG9ubHkgcGx1Z2luSWRNYXAgPSBuZXcgTWFwPHN0cmluZywgc3RyaW5nW10+KClcbiAgcHJpdmF0ZSByZWFkb25seSBjdHg6IElQaWNHb1xuXG4gIHByb2dyYW06IENvbW1hbmRcbiAgaW5xdWlyZXI6IElucXVpcmVyXG5cbiAgY29uc3RydWN0b3IoY3R4OiBJUGljR28pIHtcbiAgICB0aGlzLnByb2dyYW0gPSBuZXcgQ29tbWFuZCgpXG4gICAgdGhpcy5pbnF1aXJlciA9IGlucXVpcmVyXG4gICAgdGhpcy5jdHggPSBjdHhcbiAgfVxuXG4gIGdldE5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5uYW1lXG4gIH1cblxuICBpbml0KCk6IHZvaWQge1xuICAgIHRoaXMucHJvZ3JhbVxuICAgICAgLnZlcnNpb24ocHJvY2Vzcy5lbnYuUElDR09fVkVSU0lPTiwgJy12LCAtLXZlcnNpb24nKVxuICAgICAgLm9wdGlvbignLWQsIC0tZGVidWcnLCAnZGVidWcgbW9kZScsICgpID0+IHtcbiAgICAgICAgdGhpcy5jdHguc2V0Q29uZmlnKHtcbiAgICAgICAgICBkZWJ1ZzogdHJ1ZVxuICAgICAgICB9KVxuICAgICAgfSlcbiAgICAgIC5vcHRpb24oJy1zLCAtLXNpbGVudCcsICdzaWxlbnQgbW9kZScsICgpID0+IHtcbiAgICAgICAgdGhpcy5jdHguc2V0Q29uZmlnKHtcbiAgICAgICAgICBzaWxlbnQ6IHRydWVcbiAgICAgICAgfSlcbiAgICAgIH0pXG4gICAgICAub24oJ2NvbW1hbmQ6KicsICgpID0+IHtcbiAgICAgICAgdGhpcy5jdHgubG9nLmVycm9yKFxuICAgICAgICAgIGBJbnZhbGlkIGNvbW1hbmQ6ICR7dGhpcy5wcm9ncmFtLmFyZ3Muam9pbignICcpfVxcblNlZSAtLWhlbHAgZm9yIGEgbGlzdCBvZiBhdmFpbGFibGUgY29tbWFuZHMuYFxuICAgICAgICApXG4gICAgICAgIHByb2Nlc3MuZXhpdCgxKVxuICAgICAgfSlcblxuICAgIC8vIGJ1aWx0LWluIGNvbW1hbmRzXG4gICAgY29tbWFuZGVycyh0aGlzLmN0eClcbiAgfVxuXG4gIHJlZ2lzdGVyKGlkOiBzdHJpbmcsIHBsdWdpbjogSVBsdWdpbik6IHZvaWQge1xuICAgIGlmICghaWQpIHRocm93IG5ldyBUeXBlRXJyb3IoJ25hbWUgaXMgcmVxdWlyZWQhJylcbiAgICBpZiAodHlwZW9mIHBsdWdpbi5oYW5kbGUgIT09ICdmdW5jdGlvbicpIHRocm93IG5ldyBUeXBlRXJyb3IoJ3BsdWdpbi5oYW5kbGUgbXVzdCBiZSBhIGZ1bmN0aW9uIScpXG4gICAgaWYgKHRoaXMubGlzdC5oYXMoaWQpKSB0aHJvdyBuZXcgVHlwZUVycm9yKGAke3RoaXMubmFtZX0gcGx1Z2luIGR1cGxpY2F0ZSBpZDogJHtpZH0hYClcbiAgICB0aGlzLmxpc3Quc2V0KGlkLCBwbHVnaW4pXG4gICAgY29uc3QgY3VycmVudFBsdWdpbk5hbWUgPSBnZXRDdXJyZW50UGx1Z2luTmFtZSgpXG4gICAgaWYgKGN1cnJlbnRQbHVnaW5OYW1lICE9PSBudWxsKSB7XG4gICAgICBpZiAodGhpcy5wbHVnaW5JZE1hcC5oYXMoY3VycmVudFBsdWdpbk5hbWUpKSB7XG4gICAgICAgIHRoaXMucGx1Z2luSWRNYXAuZ2V0KGN1cnJlbnRQbHVnaW5OYW1lKT8ucHVzaChpZClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMucGx1Z2luSWRNYXAuc2V0KGN1cnJlbnRQbHVnaW5OYW1lLCBbaWRdKVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHVucmVnaXN0ZXIocGx1Z2luTmFtZTogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKHRoaXMucGx1Z2luSWRNYXAuaGFzKHBsdWdpbk5hbWUpKSB7XG4gICAgICBjb25zdCBwbHVnaW5MaXN0ID0gdGhpcy5wbHVnaW5JZE1hcC5nZXQocGx1Z2luTmFtZSlcbiAgICAgIHBsdWdpbkxpc3Q/LmZvckVhY2goKHBsdWdpbjogc3RyaW5nKSA9PiB7XG4gICAgICAgIHRoaXMubGlzdC5kZWxldGUocGx1Z2luKVxuICAgICAgfSlcbiAgICB9XG4gIH1cblxuICBsb2FkQ29tbWFuZHMoKTogdm9pZCB7XG4gICAgdGhpcy5nZXRMaXN0KCkuZm9yRWFjaCgoaXRlbTogSVBsdWdpbikgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgaXRlbS5oYW5kbGUodGhpcy5jdHgpXG4gICAgICB9IGNhdGNoIChlOiBhbnkpIHtcbiAgICAgICAgdGhpcy5jdHgubG9nLmVycm9yKGUpXG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIGdldChpZDogc3RyaW5nKTogSVBsdWdpbiB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMubGlzdC5nZXQoaWQpXG4gIH1cblxuICBnZXRMaXN0KCk6IElQbHVnaW5bXSB7XG4gICAgcmV0dXJuIFsuLi50aGlzLmxpc3QudmFsdWVzKCldXG4gIH1cblxuICBnZXRJZExpc3QoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBbLi4udGhpcy5saXN0LmtleXMoKV1cbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBDb21tYW5kZXJcbiIsImltcG9ydCBwbHVnaW5IYW5kbGVyIGZyb20gJy4vcGx1Z2luSGFuZGxlcidcbmltcG9ydCBjb25maWcgZnJvbSAnLi9jb25maWcnXG5pbXBvcnQgdXBsb2FkIGZyb20gJy4vdXBsb2FkJ1xuaW1wb3J0IHNldHRpbmcgZnJvbSAnLi9zZXR0aW5nJ1xuaW1wb3J0IHVzZSBmcm9tICcuL3VzZSdcbmltcG9ydCBwcm94eSBmcm9tICcuL3Byb3h5J1xuaW1wb3J0IGluaXQgZnJvbSAnLi9pbml0J1xuaW1wb3J0IGkxOG4gZnJvbSAnLi9pMThuJ1xuXG5pbXBvcnQgeyBJUGljR28gfSBmcm9tICcuLi8uLi90eXBlcydcblxuZXhwb3J0IGRlZmF1bHQgKGN0eDogSVBpY0dvKTogdm9pZCA9PiB7XG4gIGN0eC5jbWQucmVnaXN0ZXIoJ3BsdWdpbkhhbmRsZXInLCBwbHVnaW5IYW5kbGVyKVxuICBjdHguY21kLnJlZ2lzdGVyKCdjb25maWcnLCBjb25maWcpXG4gIGN0eC5jbWQucmVnaXN0ZXIoJ3NldHRpbmcnLCBzZXR0aW5nKVxuICBjdHguY21kLnJlZ2lzdGVyKCd1cGxvYWQnLCB1cGxvYWQpXG4gIGN0eC5jbWQucmVnaXN0ZXIoJ3VzZScsIHVzZSlcbiAgY3R4LmNtZC5yZWdpc3RlcigncHJveHknLCBwcm94eSlcbiAgY3R4LmNtZC5yZWdpc3RlcignaW5pdCcsIGluaXQpXG4gIGN0eC5jbWQucmVnaXN0ZXIoJ2kxOG4nLCBpMThuKVxufVxuIiwiZXhwb3J0IGVudW0gSUxvZ1R5cGUge1xuICBzdWNjZXNzID0gJ3N1Y2Nlc3MnLFxuICBpbmZvID0gJ2luZm8nLFxuICB3YXJuID0gJ3dhcm4nLFxuICBlcnJvciA9ICdlcnJvcidcbn1cblxuLyoqXG4gKiB0aGVzZSBldmVudHMgd2lsbCBiZSBjYXRjaGVkIGJ5IHVzZXJzXG4gKi9cbmV4cG9ydCBlbnVtIElCdWlsZEluRXZlbnQge1xuICBVUExPQURfUFJPR1JFU1MgPSAndXBsb2FkUHJvZ3Jlc3MnLFxuICBGQUlMRUQgPSAnZmFpbGVkJyxcbiAgQkVGT1JFX1RSQU5TRk9STSA9ICdiZWZvcmVUcmFuc2Zvcm0nLFxuICBCRUZPUkVfVVBMT0FEID0gJ2JlZm9yZVVwbG9hZCcsXG4gIEFGVEVSX1VQTE9BRCA9ICdhZnRlclVwbG9hZCcsXG4gIEZJTklTSEVEID0gJ2ZpbmlzaGVkJyxcbiAgSU5TVEFMTCA9ICdpbnN0YWxsJyxcbiAgVU5JTlNUQUxMID0gJ3VuaW5zdGFsbCcsXG4gIFVQREFURSA9ICd1cGRhdGUnLFxuICBOT1RJRklDQVRJT04gPSAnbm90aWZpY2F0aW9uJ1xufVxuXG4vKipcbiAqIHRoZXNlIGV2ZW50cyB3aWxsIGJlIGNhdGNoZWQgb25seSBieSBwaWNnb1xuICovXG5leHBvcnQgZW51bSBJQnVzRXZlbnQge1xuICBDT05GSUdfQ0hBTkdFID0gJ0NPTkZJR19DSEFOR0UnXG59XG4iLCJpbXBvcnQgY2hhbGsgZnJvbSAnY2hhbGsnXG5pbXBvcnQgZGF5anMgZnJvbSAnZGF5anMnXG5pbXBvcnQgZnMsIHsgY3JlYXRlRmlsZVN5bmMgfSBmcm9tICdmcy1leHRyYSdcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnXG5pbXBvcnQgdXRpbCBmcm9tICd1dGlsJ1xuXG5pbXBvcnQgeyBJTG9nVHlwZSB9IGZyb20gJy4uL3V0aWxzL2VudW0nXG5pbXBvcnQgeyBJTG9nQXJndlR5cGUsIElMb2dBcmd2VHlwZVdpdGhFcnJvciwgVW5kZWZpbmFibGUsIElMb2dDb2xvciwgSUxvZ2dlciwgSVBpY0dvIH0gZnJvbSAnLi4vdHlwZXMnXG5pbXBvcnQgeyBmb3JjZU51bWJlciwgaXNEZXYgfSBmcm9tICcuLi91dGlscy9jb21tb24nXG5cbmV4cG9ydCBjbGFzcyBMb2dnZXIgaW1wbGVtZW50cyBJTG9nZ2VyIHtcbiAgcHJpdmF0ZSByZWFkb25seSBsZXZlbCA9IHtcbiAgICBbSUxvZ1R5cGUuc3VjY2Vzc106ICdncmVlbicsXG4gICAgW0lMb2dUeXBlLmluZm9dOiAnYmx1ZScsXG4gICAgW0lMb2dUeXBlLndhcm5dOiAneWVsbG93JyxcbiAgICBbSUxvZ1R5cGUuZXJyb3JdOiAncmVkJ1xuICB9XG5cbiAgcHJpdmF0ZSByZWFkb25seSBjdHg6IElQaWNHb1xuICBwcml2YXRlIGxvZ0xldmVsITogc3RyaW5nIHwgc3RyaW5nW11cbiAgcHJpdmF0ZSBsb2dQYXRoITogc3RyaW5nXG4gIGNvbnN0cnVjdG9yKGN0eDogSVBpY0dvKSB7XG4gICAgdGhpcy5jdHggPSBjdHhcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlTG9nKHR5cGU6IElMb2dUeXBlLCAuLi5tc2c6IElMb2dBcmd2VHlwZVdpdGhFcnJvcltdKTogdm9pZCB7XG4gICAgdGhpcy5sb2dMZXZlbCA9IHRoaXMuY3R4LmdldENvbmZpZygnc2V0dGluZ3MubG9nTGV2ZWwnKVxuICAgIGlmICghdGhpcy5jdHguZ2V0Q29uZmlnPFVuZGVmaW5hYmxlPHN0cmluZz4+KCdzaWxlbnQnKSAmJiB0aGlzLmNoZWNrTG9nTGV2ZWwodHlwZSwgdGhpcy5sb2dMZXZlbCkpIHtcbiAgICAgIGNvbnN0IGxvZ0hlYWRlciA9IGNoYWxrW3RoaXMubGV2ZWxbdHlwZV0gYXMgSUxvZ0NvbG9yXShgW1BpY0xpc3QgJHt0eXBlLnRvVXBwZXJDYXNlKCl9XTpgKVxuICAgICAgY29uc29sZS5sb2cobG9nSGVhZGVyLCAuLi5tc2cpXG4gICAgICB0aGlzLmxvZ1BhdGggPVxuICAgICAgICB0aGlzLmN0eC5nZXRDb25maWc8VW5kZWZpbmFibGU8c3RyaW5nPj4oJ3NldHRpbmdzLmxvZ1BhdGgnKSB8fCBwYXRoLmpvaW4odGhpcy5jdHguYmFzZURpciwgJy4vcGljbGlzdC5sb2cnKVxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgcmVzdWx0ID0gdGhpcy5jaGVja0xvZ0ZpbGVJc0xhcmdlKHRoaXMubG9nUGF0aClcbiAgICAgICAgICBpZiAocmVzdWx0LmlzTGFyZ2UpIHtcbiAgICAgICAgICAgIGNvbnN0IHdhcm5pbmdNc2cgPSBgTG9nIGZpbGUgaXMgdG9vIGxhcmdlICg+ICR7cmVzdWx0LmxvZ0ZpbGVTaXplTGltaXQhIC8gMTAyNCAvIDEwMjQgfHwgJzEwJ30gTUIpLCByZWNyZWF0ZSBsb2cgZmlsZWBcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGNoYWxrLnllbGxvdygnW1BpY0xpc3QgV0FSTl06JyksIHdhcm5pbmdNc2cpXG4gICAgICAgICAgICB0aGlzLnJlY3JlYXRlTG9nRmlsZSh0aGlzLmxvZ1BhdGgpXG4gICAgICAgICAgICBtc2cudW5zaGlmdCh3YXJuaW5nTXNnKVxuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLmhhbmRsZVdyaXRlTG9nKHRoaXMubG9nUGF0aCwgdHlwZSwgLi4ubXNnKVxuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcignW1BpY0xpc3QgRXJyb3JdIG9uIGNoZWNraW5nIGxvZyBmaWxlIHNpemUnLCBlKVxuICAgICAgICB9XG4gICAgICB9LCAwKVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgY2hlY2tMb2dGaWxlSXNMYXJnZShsb2dQYXRoOiBzdHJpbmcpOiB7XG4gICAgaXNMYXJnZTogYm9vbGVhblxuICAgIGxvZ0ZpbGVTaXplPzogbnVtYmVyXG4gICAgbG9nRmlsZVNpemVMaW1pdD86IG51bWJlclxuICB9IHtcbiAgICBpZiAoZnMuZXhpc3RzU3luYyhsb2dQYXRoKSkge1xuICAgICAgY29uc3QgbG9nRmlsZVNpemUgPSBmcy5zdGF0U3luYyhsb2dQYXRoKS5zaXplXG4gICAgICBjb25zdCBsb2dGaWxlU2l6ZUxpbWl0ID1cbiAgICAgICAgZm9yY2VOdW1iZXIodGhpcy5jdHguZ2V0Q29uZmlnPFVuZGVmaW5hYmxlPG51bWJlcj4+KCdzZXR0aW5ncy5sb2dGaWxlU2l6ZUxpbWl0JykgfHwgMTApICogMTAyNCAqIDEwMjQgLy8gMTAgTUIgZGVmYXVsdFxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaXNMYXJnZTogbG9nRmlsZVNpemUgPiBsb2dGaWxlU2l6ZUxpbWl0LFxuICAgICAgICBsb2dGaWxlU2l6ZSxcbiAgICAgICAgbG9nRmlsZVNpemVMaW1pdFxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4geyBpc0xhcmdlOiBmYWxzZSB9XG4gIH1cblxuICBwcml2YXRlIHJlY3JlYXRlTG9nRmlsZShsb2dQYXRoOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAoZnMuZXhpc3RzU3luYyhsb2dQYXRoKSkge1xuICAgICAgZnMudW5saW5rU3luYyhsb2dQYXRoKVxuICAgICAgY3JlYXRlRmlsZVN5bmMobG9nUGF0aClcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZVdyaXRlTG9nKGxvZ1BhdGg6IHN0cmluZywgdHlwZTogc3RyaW5nLCAuLi5tc2c6IElMb2dBcmd2VHlwZVdpdGhFcnJvcltdKTogdm9pZCB7XG4gICAgdHJ5IHtcbiAgICAgIGxldCBsb2cgPSBgJHtkYXlqcygpLmZvcm1hdCgnWVlZWS1NTS1ERCBISDptbTpzcycpfSBbUGljTGlzdCAke3R5cGUudG9VcHBlckNhc2UoKX1dIGBcbiAgICAgIG1zZy5mb3JFYWNoKChpdGVtOiBJTG9nQXJndlR5cGVXaXRoRXJyb3IpID0+IHtcbiAgICAgICAgaWYgKGl0ZW0gaW5zdGFuY2VvZiBFcnJvciAmJiB0eXBlID09PSAnZXJyb3InKSB7XG4gICAgICAgICAgbG9nICs9IGBcXG4tLS0tLS1FcnJvciBTdGFjayBCZWdpbi0tLS0tLVxcbiR7dXRpbC5mb3JtYXQoaXRlbT8uc3RhY2spfVxcbi0tLS0tLS1FcnJvciBTdGFjayBFbmQtLS0tLS0tIGBcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAodHlwZW9mIGl0ZW0gPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICBpdGVtID0gSlNPTi5zdHJpbmdpZnkoaXRlbSwgbnVsbCwgMilcbiAgICAgICAgICB9XG4gICAgICAgICAgbG9nICs9IGAke2l0ZW0gYXMgc3RyaW5nfSBgXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgICBsb2cgKz0gJ1xcbidcbiAgICAgIGZzLmFwcGVuZEZpbGVTeW5jKGxvZ1BhdGgsIGxvZylcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdbUGljTGlzdCBFcnJvcl0gb24gd3JpdGluZyBsb2cgZmlsZScsIGUpXG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBjaGVja0xvZ0xldmVsKHR5cGU6IHN0cmluZywgbGV2ZWw6IHVuZGVmaW5lZCB8IHN0cmluZyB8IHN0cmluZ1tdKTogYm9vbGVhbiB7XG4gICAgaWYgKGxldmVsID09PSB1bmRlZmluZWQgfHwgbGV2ZWwgPT09ICdhbGwnKSByZXR1cm4gdHJ1ZVxuICAgIGlmIChBcnJheS5pc0FycmF5KGxldmVsKSkge1xuICAgICAgcmV0dXJuIGxldmVsLnNvbWUoKGl0ZW06IHN0cmluZykgPT4gaXRlbSA9PT0gdHlwZSB8fCBpdGVtID09PSAnYWxsJylcbiAgICB9XG4gICAgcmV0dXJuIHR5cGUgPT09IGxldmVsXG4gIH1cblxuICBzdWNjZXNzKC4uLm1zZzogSUxvZ0FyZ3ZUeXBlW10pOiB2b2lkIHtcbiAgICB0aGlzLmhhbmRsZUxvZyhJTG9nVHlwZS5zdWNjZXNzLCAuLi5tc2cpXG4gIH1cblxuICBpbmZvKC4uLm1zZzogSUxvZ0FyZ3ZUeXBlW10pOiB2b2lkIHtcbiAgICB0aGlzLmhhbmRsZUxvZyhJTG9nVHlwZS5pbmZvLCAuLi5tc2cpXG4gIH1cblxuICBlcnJvciguLi5tc2c6IElMb2dBcmd2VHlwZVdpdGhFcnJvcltdKTogdm9pZCB7XG4gICAgdGhpcy5oYW5kbGVMb2coSUxvZ1R5cGUuZXJyb3IsIC4uLm1zZylcbiAgfVxuXG4gIHdhcm4oLi4ubXNnOiBJTG9nQXJndlR5cGVbXSk6IHZvaWQge1xuICAgIHRoaXMuaGFuZGxlTG9nKElMb2dUeXBlLndhcm4sIC4uLm1zZylcbiAgfVxuXG4gIGRlYnVnKC4uLm1zZzogSUxvZ0FyZ3ZUeXBlW10pOiB2b2lkIHtcbiAgICBpZiAoaXNEZXYoKSkge1xuICAgICAgdGhpcy5oYW5kbGVMb2coSUxvZ1R5cGUuaW5mbywgLi4ubXNnKVxuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBMb2dnZXJcbiIsImltcG9ydCB7IHNwYXduIH0gZnJvbSAnY3Jvc3Mtc3Bhd24nXG5pbXBvcnQge1xuICBJUmVzdWx0LFxuICBJUHJvY2Vzc0VudixcbiAgSVBsdWdpblByb2Nlc3NSZXN1bHQsXG4gIElQbHVnaW5IYW5kbGVyLFxuICBJUGx1Z2luSGFuZGxlck9wdGlvbnMsXG4gIFVuZGVmaW5hYmxlLFxuICBJUGljR28sXG4gIElQbHVnaW5IYW5kbGVyUmVzdWx0XG59IGZyb20gJy4uL3R5cGVzJ1xuaW1wb3J0IHsgSUJ1aWxkSW5FdmVudCB9IGZyb20gJy4uL3V0aWxzL2VudW0nXG5pbXBvcnQgeyBnZXRQcm9jZXNzUGx1Z2luTmFtZSwgZ2V0Tm9ybWFsUGx1Z2luTmFtZSB9IGZyb20gJy4uL3V0aWxzL2NvbW1vbidcbmltcG9ydCB7IElMb2NhbGVzS2V5IH0gZnJvbSAnLi4vaTE4bi96aC1DTidcblxuZXhwb3J0IGNsYXNzIFBsdWdpbkhhbmRsZXIgaW1wbGVtZW50cyBJUGx1Z2luSGFuZGxlciB7XG4gIC8vIFRoYW5rcyB0byBmZWZsb3cgLT4gaHR0cHM6Ly9naXRodWIuY29tL2ZlZmxvdy9mZWZsb3cvYmxvYi9tYXN0ZXIvbGliL2ludGVybmFsL2luc3RhbGwvcGx1Z2luLmpzXG4gIHByaXZhdGUgcmVhZG9ubHkgY3R4OiBJUGljR29cbiAgY29uc3RydWN0b3IoY3R4OiBJUGljR28pIHtcbiAgICB0aGlzLmN0eCA9IGN0eFxuICB9XG5cbiAgYXN5bmMgaW5zdGFsbChcbiAgICBwbHVnaW5zOiBzdHJpbmdbXSxcbiAgICBvcHRpb25zOiBJUGx1Z2luSGFuZGxlck9wdGlvbnMgPSB7fSxcbiAgICBlbnY/OiBJUHJvY2Vzc0VudlxuICApOiBQcm9taXNlPElQbHVnaW5IYW5kbGVyUmVzdWx0PGJvb2xlYW4+PiB7XG4gICAgY29uc3QgaW5zdGFsbGVkUGx1Z2luczogc3RyaW5nW10gPSBbXVxuICAgIGNvbnN0IHByb2Nlc3NQbHVnaW5zID0gcGx1Z2luc1xuICAgICAgLm1hcCgoaXRlbTogc3RyaW5nKSA9PiBoYW5kbGVQbHVnaW5OYW1lUHJvY2Vzcyh0aGlzLmN0eCwgaXRlbSkpXG4gICAgICAuZmlsdGVyKGl0ZW0gPT4ge1xuICAgICAgICAvLyBkZXRlY3QgaWYgaGFzIGFscmVhZHkgaW5zdGFsbGVkXG4gICAgICAgIC8vIG9yIHdpbGwgY2F1c2UgZXJyb3JcbiAgICAgICAgaWYgKHRoaXMuY3R4LnBsdWdpbkxvYWRlci5oYXNQbHVnaW4oaXRlbS5wa2dOYW1lKSkge1xuICAgICAgICAgIGluc3RhbGxlZFBsdWdpbnMucHVzaChpdGVtLnBrZ05hbWUpXG4gICAgICAgICAgdGhpcy5jdHgubG9nLnN1Y2Nlc3MoYFBpY0xpc3QgaGFzIGFscmVhZHkgaW5zdGFsbGVkICR7aXRlbS5wa2dOYW1lfWApXG4gICAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICAgIH1cbiAgICAgICAgLy8gaWYgc29tZXRoaW5nIHdyb25nLCBmaWx0ZXIgaXQgb3V0XG4gICAgICAgIGlmICghaXRlbS5zdWNjZXNzKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgIH0pXG4gICAgY29uc3QgZnVsbE5hbWVMaXN0ID0gcHJvY2Vzc1BsdWdpbnMubWFwKGl0ZW0gPT4gaXRlbS5mdWxsTmFtZSlcbiAgICBjb25zdCBwa2dOYW1lTGlzdCA9IHByb2Nlc3NQbHVnaW5zLm1hcChpdGVtID0+IGl0ZW0ucGtnTmFtZSlcbiAgICBpZiAoZnVsbE5hbWVMaXN0Lmxlbmd0aCA+IDApIHtcbiAgICAgIC8vIGluc3RhbGwgcGx1Z2lucyBtdXN0IHVzZSBmdWxsTmFtZUxpc3Q6XG4gICAgICAvLyAxLiBpbnN0YWxsIHJlbW90ZSBwYWNhZ2VcbiAgICAgIC8vIDIuIGluc3RhbGwgbG9jYWwgcGFjYWdlXG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLmV4ZWNDb21tYW5kKCdpbnN0YWxsJywgZnVsbE5hbWVMaXN0LCB0aGlzLmN0eC5iYXNlRGlyLCBvcHRpb25zLCBlbnYpXG4gICAgICBpZiAoIXJlc3VsdC5jb2RlKSB7XG4gICAgICAgIHBrZ05hbWVMaXN0LmZvckVhY2goKHBsdWdpbk5hbWU6IHN0cmluZykgPT4ge1xuICAgICAgICAgIHRoaXMuY3R4LnBsdWdpbkxvYWRlci5yZWdpc3RlclBsdWdpbihwbHVnaW5OYW1lKVxuICAgICAgICB9KVxuICAgICAgICB0aGlzLmN0eC5sb2cuc3VjY2Vzcyh0aGlzLmN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BMVUdJTl9IQU5ETEVSX1BMVUdJTl9JTlNUQUxMX1NVQ0NFU1MnKSlcbiAgICAgICAgdGhpcy5jdHguZW1pdCgnaW5zdGFsbFN1Y2Nlc3MnLCB7XG4gICAgICAgICAgdGl0bGU6IHRoaXMuY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUExVR0lOX0hBTkRMRVJfUExVR0lOX0lOU1RBTExfU1VDQ0VTUycpLFxuICAgICAgICAgIGJvZHk6IFsuLi5wa2dOYW1lTGlzdCwgLi4uaW5zdGFsbGVkUGx1Z2luc11cbiAgICAgICAgfSlcbiAgICAgICAgY29uc3QgcmVzOiBJUGx1Z2luSGFuZGxlclJlc3VsdDx0cnVlPiA9IHtcbiAgICAgICAgICBzdWNjZXNzOiB0cnVlLFxuICAgICAgICAgIGJvZHk6IFsuLi5wa2dOYW1lTGlzdCwgLi4uaW5zdGFsbGVkUGx1Z2luc11cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBlcnIgPSB0aGlzLmN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BMVUdJTl9IQU5ETEVSX1BMVUdJTl9JTlNUQUxMX0ZBSUxFRF9SRUFTT04nLCB7XG4gICAgICAgICAgY29kZTogYCR7cmVzdWx0LmNvZGV9YCxcbiAgICAgICAgICBkYXRhOiByZXN1bHQuZGF0YVxuICAgICAgICB9KVxuICAgICAgICB0aGlzLmN0eC5sb2cuZXJyb3IoZXJyKVxuICAgICAgICB0aGlzLmN0eC5lbWl0KCdpbnN0YWxsRmFpbGVkJywge1xuICAgICAgICAgIHRpdGxlOiB0aGlzLmN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BMVUdJTl9IQU5ETEVSX1BMVUdJTl9JTlNUQUxMX0ZBSUxFRCcpLFxuICAgICAgICAgIGJvZHk6IGVyclxuICAgICAgICB9KVxuICAgICAgICBjb25zdCByZXM6IElQbHVnaW5IYW5kbGVyUmVzdWx0PGZhbHNlPiA9IHtcbiAgICAgICAgICBzdWNjZXNzOiBmYWxzZSxcbiAgICAgICAgICBib2R5OiBlcnJcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzXG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChpbnN0YWxsZWRQbHVnaW5zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgY29uc3QgZXJyID0gdGhpcy5jdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQTFVHSU5fSEFORExFUl9QTFVHSU5fVU5JTlNUQUxMX0ZBSUxFRF9WQUxJRCcpXG4gICAgICB0aGlzLmN0eC5sb2cuZXJyb3IoZXJyKVxuICAgICAgdGhpcy5jdHguZW1pdCgnaW5zdGFsbEZhaWxlZCcsIHtcbiAgICAgICAgdGl0bGU6IHRoaXMuY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUExVR0lOX0hBTkRMRVJfUExVR0lOX0lOU1RBTExfRkFJTEVEJyksXG4gICAgICAgIGJvZHk6IGVyclxuICAgICAgfSlcbiAgICAgIGNvbnN0IHJlczogSVBsdWdpbkhhbmRsZXJSZXN1bHQ8ZmFsc2U+ID0ge1xuICAgICAgICBzdWNjZXNzOiBmYWxzZSxcbiAgICAgICAgYm9keTogZXJyXG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY3R4LmxvZy5zdWNjZXNzKHRoaXMuY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUExVR0lOX0hBTkRMRVJfUExVR0lOX0lOU1RBTExfU1VDQ0VTUycpKVxuICAgICAgdGhpcy5jdHguZW1pdCgnaW5zdGFsbFN1Y2Nlc3MnLCB7XG4gICAgICAgIHRpdGxlOiB0aGlzLmN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BMVUdJTl9IQU5ETEVSX1BMVUdJTl9JTlNUQUxMX1NVQ0NFU1MnKSxcbiAgICAgICAgYm9keTogWy4uLnBrZ05hbWVMaXN0LCAuLi5pbnN0YWxsZWRQbHVnaW5zXVxuICAgICAgfSlcbiAgICAgIGNvbnN0IHJlczogSVBsdWdpbkhhbmRsZXJSZXN1bHQ8dHJ1ZT4gPSB7XG4gICAgICAgIHN1Y2Nlc3M6IHRydWUsXG4gICAgICAgIGJvZHk6IFsuLi5wa2dOYW1lTGlzdCwgLi4uaW5zdGFsbGVkUGx1Z2luc11cbiAgICAgIH1cbiAgICAgIHJldHVybiByZXNcbiAgICB9XG4gIH1cblxuICBhc3luYyB1bmluc3RhbGwocGx1Z2luczogc3RyaW5nW10pOiBQcm9taXNlPElQbHVnaW5IYW5kbGVyUmVzdWx0PGJvb2xlYW4+PiB7XG4gICAgY29uc3QgcHJvY2Vzc1BsdWdpbnMgPSBwbHVnaW5zXG4gICAgICAubWFwKChpdGVtOiBzdHJpbmcpID0+IGhhbmRsZVBsdWdpbk5hbWVQcm9jZXNzKHRoaXMuY3R4LCBpdGVtKSlcbiAgICAgIC5maWx0ZXIoaXRlbSA9PiBpdGVtLnN1Y2Nlc3MpXG4gICAgY29uc3QgcGtnTmFtZUxpc3QgPSBwcm9jZXNzUGx1Z2lucy5tYXAoaXRlbSA9PiBpdGVtLnBrZ05hbWUpXG4gICAgaWYgKHBrZ05hbWVMaXN0Lmxlbmd0aCA+IDApIHtcbiAgICAgIC8vIHVuaW5zdGFsbCBwbHVnaW5zIG11c3QgdXNlIHBrZ05hbWVMaXN0OlxuICAgICAgLy8gbnBtIHVuaW5zdGFsbCB3aWxsIHVzZSB0aGUgcGFja2FnZS5qc29uJ3MgbmFtZVxuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5leGVjQ29tbWFuZCgndW5pbnN0YWxsJywgcGtnTmFtZUxpc3QsIHRoaXMuY3R4LmJhc2VEaXIpXG4gICAgICBpZiAoIXJlc3VsdC5jb2RlKSB7XG4gICAgICAgIHBrZ05hbWVMaXN0LmZvckVhY2goKHBsdWdpbk5hbWU6IHN0cmluZykgPT4ge1xuICAgICAgICAgIHRoaXMuY3R4LnBsdWdpbkxvYWRlci51bnJlZ2lzdGVyUGx1Z2luKHBsdWdpbk5hbWUpXG4gICAgICAgIH0pXG4gICAgICAgIHRoaXMuY3R4LmxvZy5zdWNjZXNzKHRoaXMuY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUExVR0lOX0hBTkRMRVJfUExVR0lOX1VOSU5TVEFMTF9TVUNDRVNTJykpXG4gICAgICAgIHRoaXMuY3R4LmVtaXQoJ3VuaW5zdGFsbFN1Y2Nlc3MnLCB7XG4gICAgICAgICAgdGl0bGU6IHRoaXMuY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUExVR0lOX0hBTkRMRVJfUExVR0lOX1VOSU5TVEFMTF9TVUNDRVNTJyksXG4gICAgICAgICAgYm9keTogcGtnTmFtZUxpc3RcbiAgICAgICAgfSlcbiAgICAgICAgY29uc3QgcmVzOiBJUGx1Z2luSGFuZGxlclJlc3VsdDx0cnVlPiA9IHtcbiAgICAgICAgICBzdWNjZXNzOiB0cnVlLFxuICAgICAgICAgIGJvZHk6IHBrZ05hbWVMaXN0XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgZXJyID0gdGhpcy5jdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQTFVHSU5fSEFORExFUl9QTFVHSU5fVU5JTlNUQUxMX0ZBSUxFRF9SRUFTT04nLCB7XG4gICAgICAgICAgY29kZTogYCR7cmVzdWx0LmNvZGV9YCxcbiAgICAgICAgICBkYXRhOiByZXN1bHQuZGF0YVxuICAgICAgICB9KVxuICAgICAgICB0aGlzLmN0eC5sb2cuZXJyb3IoZXJyKVxuICAgICAgICB0aGlzLmN0eC5lbWl0KCd1bmluc3RhbGxGYWlsZWQnLCB7XG4gICAgICAgICAgdGl0bGU6IHRoaXMuY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUExVR0lOX0hBTkRMRVJfUExVR0lOX1VOSU5TVEFMTF9GQUlMRUQnKSxcbiAgICAgICAgICBib2R5OiBlcnJcbiAgICAgICAgfSlcbiAgICAgICAgY29uc3QgcmVzOiBJUGx1Z2luSGFuZGxlclJlc3VsdDxmYWxzZT4gPSB7XG4gICAgICAgICAgc3VjY2VzczogZmFsc2UsXG4gICAgICAgICAgYm9keTogZXJyXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBlcnIgPSB0aGlzLmN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BMVUdJTl9IQU5ETEVSX1BMVUdJTl9VTklOU1RBTExfRkFJTEVEX1ZBTElEJylcbiAgICAgIHRoaXMuY3R4LmxvZy5lcnJvcihlcnIpXG4gICAgICB0aGlzLmN0eC5lbWl0KCd1bmluc3RhbGxGYWlsZWQnLCB7XG4gICAgICAgIHRpdGxlOiB0aGlzLmN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BMVUdJTl9IQU5ETEVSX1BMVUdJTl9VTklOU1RBTExfRkFJTEVEJyksXG4gICAgICAgIGJvZHk6IGVyclxuICAgICAgfSlcbiAgICAgIGNvbnN0IHJlczogSVBsdWdpbkhhbmRsZXJSZXN1bHQ8ZmFsc2U+ID0ge1xuICAgICAgICBzdWNjZXNzOiBmYWxzZSxcbiAgICAgICAgYm9keTogZXJyXG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzXG4gICAgfVxuICB9XG5cbiAgYXN5bmMgdXBkYXRlKFxuICAgIHBsdWdpbnM6IHN0cmluZ1tdLFxuICAgIG9wdGlvbnM6IElQbHVnaW5IYW5kbGVyT3B0aW9ucyA9IHt9LFxuICAgIGVudj86IElQcm9jZXNzRW52XG4gICk6IFByb21pc2U8SVBsdWdpbkhhbmRsZXJSZXN1bHQ8Ym9vbGVhbj4+IHtcbiAgICBjb25zdCBwcm9jZXNzUGx1Z2lucyA9IHBsdWdpbnNcbiAgICAgIC5tYXAoKGl0ZW06IHN0cmluZykgPT4gaGFuZGxlUGx1Z2luTmFtZVByb2Nlc3ModGhpcy5jdHgsIGl0ZW0pKVxuICAgICAgLmZpbHRlcihpdGVtID0+IGl0ZW0uc3VjY2VzcylcbiAgICBjb25zdCBwa2dOYW1lTGlzdCA9IHByb2Nlc3NQbHVnaW5zLm1hcChpdGVtID0+IGl0ZW0ucGtnTmFtZSlcbiAgICBpZiAocGtnTmFtZUxpc3QubGVuZ3RoID4gMCkge1xuICAgICAgLy8gdXBkYXRlIHBsdWdpbnMgbXVzdCB1c2UgcGtnTmFtZUxpc3Q6XG4gICAgICAvLyBucG0gdXBkYXRlIHdpbGwgdXNlIHRoZSBwYWNrYWdlLmpzb24ncyBuYW1lXG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLmV4ZWNDb21tYW5kKCd1cGRhdGUnLCBwa2dOYW1lTGlzdCwgdGhpcy5jdHguYmFzZURpciwgb3B0aW9ucywgZW52KVxuICAgICAgaWYgKCFyZXN1bHQuY29kZSkge1xuICAgICAgICB0aGlzLmN0eC5sb2cuc3VjY2Vzcyh0aGlzLmN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BMVUdJTl9IQU5ETEVSX1BMVUdJTl9VUERBVEVfU1VDQ0VTUycpKVxuICAgICAgICB0aGlzLmN0eC5lbWl0KCd1cGRhdGVTdWNjZXNzJywge1xuICAgICAgICAgIHRpdGxlOiB0aGlzLmN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BMVUdJTl9IQU5ETEVSX1BMVUdJTl9VUERBVEVfU1VDQ0VTUycpLFxuICAgICAgICAgIGJvZHk6IHBrZ05hbWVMaXN0XG4gICAgICAgIH0pXG4gICAgICAgIGNvbnN0IHJlczogSVBsdWdpbkhhbmRsZXJSZXN1bHQ8dHJ1ZT4gPSB7XG4gICAgICAgICAgc3VjY2VzczogdHJ1ZSxcbiAgICAgICAgICBib2R5OiBwa2dOYW1lTGlzdFxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXNcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGVyciA9IHRoaXMuY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUExVR0lOX0hBTkRMRVJfUExVR0lOX1VQREFURV9GQUlMRURfUkVBU09OJywge1xuICAgICAgICAgIGNvZGU6IGAke3Jlc3VsdC5jb2RlfWAsXG4gICAgICAgICAgZGF0YTogcmVzdWx0LmRhdGFcbiAgICAgICAgfSlcbiAgICAgICAgdGhpcy5jdHgubG9nLmVycm9yKGVycilcbiAgICAgICAgdGhpcy5jdHguZW1pdCgndXBkYXRlRmFpbGVkJywge1xuICAgICAgICAgIHRpdGxlOiB0aGlzLmN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BMVUdJTl9IQU5ETEVSX1BMVUdJTl9VUERBVEVfRkFJTEVEJyksXG4gICAgICAgICAgYm9keTogZXJyXG4gICAgICAgIH0pXG4gICAgICAgIGNvbnN0IHJlczogSVBsdWdpbkhhbmRsZXJSZXN1bHQ8ZmFsc2U+ID0ge1xuICAgICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxuICAgICAgICAgIGJvZHk6IGVyclxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXNcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgZXJyID0gdGhpcy5jdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQTFVHSU5fSEFORExFUl9QTFVHSU5fVVBEQVRFX0ZBSUxFRF9WQUxJRCcpXG4gICAgICB0aGlzLmN0eC5sb2cuZXJyb3IoZXJyKVxuICAgICAgdGhpcy5jdHguZW1pdCgndXBkYXRlRmFpbGVkJywge1xuICAgICAgICB0aXRsZTogdGhpcy5jdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQTFVHSU5fSEFORExFUl9QTFVHSU5fVVBEQVRFX0ZBSUxFRCcpLFxuICAgICAgICBib2R5OiBlcnJcbiAgICAgIH0pXG4gICAgICBjb25zdCByZXM6IElQbHVnaW5IYW5kbGVyUmVzdWx0PGZhbHNlPiA9IHtcbiAgICAgICAgc3VjY2VzczogZmFsc2UsXG4gICAgICAgIGJvZHk6IGVyclxuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZXhlY0NvbW1hbmQoXG4gICAgY21kOiBzdHJpbmcsXG4gICAgbW9kdWxlczogc3RyaW5nW10sXG4gICAgd2hlcmU6IHN0cmluZyxcbiAgICBvcHRpb25zOiBJUGx1Z2luSGFuZGxlck9wdGlvbnMgPSB7fSxcbiAgICBlbnY6IElQcm9jZXNzRW52ID0ge31cbiAgKTogUHJvbWlzZTxJUmVzdWx0PiB7XG4gICAgLy8gb3B0aW9ucyBmaXJzdFxuICAgIGNvbnN0IHJlZ2lzdHJ5ID0gb3B0aW9ucy5yZWdpc3RyeSB8fCB0aGlzLmN0eC5nZXRDb25maWc8VW5kZWZpbmFibGU8c3RyaW5nPj4oJ3NldHRpbmdzLnJlZ2lzdHJ5JylcbiAgICBjb25zdCBwcm94eSA9IG9wdGlvbnMucHJveHkgfHwgdGhpcy5jdHguZ2V0Q29uZmlnPFVuZGVmaW5hYmxlPHN0cmluZz4+KCdzZXR0aW5ncy5wcm94eScpXG4gICAgcmV0dXJuIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlOiBhbnkpOiB2b2lkID0+IHtcbiAgICAgIGxldCBhcmdzID0gW2NtZF0uY29uY2F0KG1vZHVsZXMpLmNvbmNhdCgnLS1jb2xvcj1hbHdheXMnKS5jb25jYXQoJy0tc2F2ZScpXG4gICAgICBpZiAocmVnaXN0cnkpIHtcbiAgICAgICAgYXJncyA9IGFyZ3MuY29uY2F0KGAtLXJlZ2lzdHJ5PSR7cmVnaXN0cnl9YClcbiAgICAgIH1cbiAgICAgIGlmIChwcm94eSkge1xuICAgICAgICBhcmdzID0gYXJncy5jb25jYXQoYC0tcHJveHk9JHtwcm94eX1gKVxuICAgICAgfVxuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgbnBtID0gc3Bhd24oJ25wbScsIGFyZ3MsIHtcbiAgICAgICAgICBjd2Q6IHdoZXJlLFxuICAgICAgICAgIGVudjogT2JqZWN0LmFzc2lnbih7fSwgcHJvY2Vzcy5lbnYsIGVudilcbiAgICAgICAgfSlcblxuICAgICAgICBsZXQgb3V0cHV0ID0gJydcbiAgICAgICAgbnBtLnN0ZG91dFxuICAgICAgICAgID8ub24oJ2RhdGEnLCAoZGF0YTogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgICBvdXRwdXQgKz0gZGF0YVxuICAgICAgICAgIH0pXG4gICAgICAgICAgLnBpcGUocHJvY2Vzcy5zdGRvdXQpXG5cbiAgICAgICAgbnBtLnN0ZGVyclxuICAgICAgICAgID8ub24oJ2RhdGEnLCAoZGF0YTogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgICBvdXRwdXQgKz0gZGF0YVxuICAgICAgICAgIH0pXG4gICAgICAgICAgLnBpcGUocHJvY2Vzcy5zdGRlcnIpXG5cbiAgICAgICAgbnBtLm9uKCdjbG9zZScsIChjb2RlOiBudW1iZXIpID0+IHtcbiAgICAgICAgICBpZiAoIWNvZGUpIHtcbiAgICAgICAgICAgIHJlc29sdmUoeyBjb2RlOiAwLCBkYXRhOiBvdXRwdXQgfSlcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVzb2x2ZSh7IGNvZGUsIGRhdGE6IG91dHB1dCB9KVxuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgICAgLy8gZm9yIHVzZXJzIHdobyBoYXZlbid0IGluc3RhbGxlZCBub2RlLmpzXG4gICAgICAgIG5wbS5vbignZXJyb3InLCAoZXJyOiBFcnJvcikgPT4ge1xuICAgICAgICAgIHRoaXMuY3R4LmxvZy5lcnJvcihlcnIpXG4gICAgICAgICAgdGhpcy5jdHgubG9nLmVycm9yKCdOUE0gaXMgbm90IGluc3RhbGxlZCcpXG4gICAgICAgICAgdGhpcy5jdHguZW1pdChJQnVpbGRJbkV2ZW50LkZBSUxFRCwgJ05QTSBpcyBub3QgaW5zdGFsbGVkJylcbiAgICAgICAgfSlcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgdGhpcy5jdHgubG9nLmVycm9yKGUgYXMgRXJyb3IpXG4gICAgICAgIHRoaXMuY3R4LmVtaXQoSUJ1aWxkSW5FdmVudC5GQUlMRUQsIGUpXG4gICAgICB9XG4gICAgfSlcbiAgfVxufVxuXG4vKipcbiAqIHRyYW5zZm9ybSB0aGUgaW5wdXQgcGx1Z2luIG5hbWUgb3IgcGF0aCBzdHJpbmcgdG8gdmFsaWQgcmVzdWx0XG4gKiBAcGFyYW0gY3R4XG4gKiBAcGFyYW0gbmFtZU9yUGF0aFxuICovXG5jb25zdCBoYW5kbGVQbHVnaW5OYW1lUHJvY2VzcyA9IChjdHg6IElQaWNHbywgbmFtZU9yUGF0aDogc3RyaW5nKTogSVBsdWdpblByb2Nlc3NSZXN1bHQgPT4ge1xuICBjb25zdCByZXMgPSB7XG4gICAgc3VjY2VzczogZmFsc2UsXG4gICAgZnVsbE5hbWU6ICcnLFxuICAgIHBrZ05hbWU6ICcnXG4gIH1cbiAgY29uc3QgcmVzdWx0ID0gZ2V0UHJvY2Vzc1BsdWdpbk5hbWUobmFtZU9yUGF0aCwgY3R4LmxvZylcbiAgaWYgKCFyZXN1bHQpIHtcbiAgICByZXR1cm4gcmVzXG4gIH1cbiAgLy8gZmlyc3QgZ2V0IHJlc3VsdCB0aGVuIGRvIHRoaXMgcHJvY2Vzc1xuICAvLyBvciBzb21lIGVycm9yIHdpbGwgbG9nIHR3aWNlXG4gIGNvbnN0IHBrZ05hbWUgPSBnZXROb3JtYWxQbHVnaW5OYW1lKHJlc3VsdCwgY3R4LmxvZylcbiAgaWYgKCFwa2dOYW1lKSB7XG4gICAgcmV0dXJuIHJlc1xuICB9XG4gIHJldHVybiB7XG4gICAgc3VjY2VzczogdHJ1ZSxcbiAgICBmdWxsTmFtZTogcmVzdWx0LFxuICAgIHBrZ05hbWVcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBQbHVnaW5IYW5kbGVyXG4iLCJpbXBvcnQgZnMsIHsgcmVhZEpTT05TeW5jIH0gZnJvbSAnZnMtZXh0cmEnXG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJ1xuaW1wb3J0IHsgc3luYyB9IGZyb20gJ3Jlc29sdmUnXG5pbXBvcnQgeyBJQnVpbGRJbkV2ZW50IH0gZnJvbSAnLi4vdXRpbHMvZW51bSdcbmltcG9ydCB7IElQaWNHbywgSVBpY0dvUGx1Z2luLCBJUGx1Z2luTG9hZGVyLCBJUGljR29QbHVnaW5JbnRlcmZhY2UgfSBmcm9tICcuLi90eXBlcy9pbmRleCdcbmltcG9ydCB7IHNldEN1cnJlbnRQbHVnaW5OYW1lIH0gZnJvbSAnLi9MaWZlY3ljbGVQbHVnaW5zJ1xuXG4vKipcbiAqIExvY2FsIHBsdWdpbiBsb2FkZXIsIGZpbGUgc3lzdGVtIGlzIHJlcXVpcmVkXG4gKi9cbmV4cG9ydCBjbGFzcyBQbHVnaW5Mb2FkZXIgaW1wbGVtZW50cyBJUGx1Z2luTG9hZGVyIHtcbiAgcHJpdmF0ZSByZWFkb25seSBjdHg6IElQaWNHb1xuICBwcml2YXRlIGxpc3Q6IHN0cmluZ1tdID0gW11cbiAgcHJpdmF0ZSByZWFkb25seSBmdWxsTGlzdCA9IG5ldyBTZXQ8c3RyaW5nPigpXG4gIHByaXZhdGUgcmVhZG9ubHkgcGx1Z2luTWFwID0gbmV3IE1hcDxzdHJpbmcsIElQaWNHb1BsdWdpbkludGVyZmFjZT4oKVxuICBjb25zdHJ1Y3RvcihjdHg6IElQaWNHbykge1xuICAgIHRoaXMuY3R4ID0gY3R4XG4gICAgdGhpcy5pbml0KClcbiAgfVxuXG4gIHByaXZhdGUgaW5pdCgpOiB2b2lkIHtcbiAgICBjb25zdCBwYWNrYWdlUGF0aCA9IHBhdGguam9pbih0aGlzLmN0eC5iYXNlRGlyLCAncGFja2FnZS5qc29uJylcbiAgICBpZiAoIWZzLmV4aXN0c1N5bmMocGFja2FnZVBhdGgpKSB7XG4gICAgICBjb25zdCBwa2cgPSB7XG4gICAgICAgIG5hbWU6ICdwaWNnby1wbHVnaW5zJyxcbiAgICAgICAgZGVzY3JpcHRpb246ICdwaWNnby1wbHVnaW5zJyxcbiAgICAgICAgcmVwb3NpdG9yeTogJ2h0dHBzOi8vZ2l0aHViLmNvbS9LdWluZ3NtaWxlL1BpY0xpc3QtQ29yZScsXG4gICAgICAgIGxpY2Vuc2U6ICdNSVQnXG4gICAgICB9XG4gICAgICBmcy53cml0ZUZpbGVTeW5jKHBhY2thZ2VQYXRoLCBKU09OLnN0cmluZ2lmeShwa2cpLCAndXRmOCcpXG4gICAgfVxuICB9XG5cbiAgLy8gZ2V0IHBsdWdpbiBlbnRyeVxuICBwcml2YXRlIHJlc29sdmVQbHVnaW4oY3R4OiBJUGljR28sIG5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBzeW5jKG5hbWUsIHsgYmFzZWRpcjogY3R4LmJhc2VEaXIgfSlcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHJldHVybiBwYXRoLmpvaW4oY3R4LmJhc2VEaXIsICdub2RlX21vZHVsZXMnLCBuYW1lKVxuICAgIH1cbiAgfVxuXG4gIC8vIGxvYWQgYWxsIHRoaXJkIHBhcnR5IHBsdWdpblxuICBsb2FkKCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHBsdWdpbkRpciA9IHBhdGguam9pbih0aGlzLmN0eC5iYXNlRGlyLCAnbm9kZV9tb2R1bGVzLycpXG4gICAgLy8gVGhhbmtzIHRvIGhleG8gLT4gaHR0cHM6Ly9naXRodWIuY29tL2hleG9qcy9oZXhvL2Jsb2IvbWFzdGVyL2xpYi9oZXhvL2xvYWRfcGx1Z2lucy5qc1xuICAgIGlmICghZnMuZXhpc3RzU3luYyhwbHVnaW5EaXIpKSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG4gICAgY29uc3QgcGFja2FnZVBhdGggPSBwYXRoLmpvaW4odGhpcy5jdHguYmFzZURpciwgJ3BhY2thZ2UuanNvbicpXG4gICAgY29uc3QganNvbiA9IHJlYWRKU09OU3luYyhwYWNrYWdlUGF0aClcbiAgICBjb25zdCBkZXBzID0gT2JqZWN0LmtleXMoanNvbi5kZXBlbmRlbmNpZXMgfHwge30pXG4gICAgY29uc3QgZGV2RGVwcyA9IE9iamVjdC5rZXlzKGpzb24uZGV2RGVwZW5kZW5jaWVzIHx8IHt9KVxuICAgIGNvbnN0IG1vZHVsZXMgPSBkZXBzLmNvbmNhdChkZXZEZXBzKS5maWx0ZXIoKG5hbWU6IHN0cmluZykgPT4ge1xuICAgICAgaWYgKCEvXnBpY2dvLXBsdWdpbi18XkBbXi9dK1xcL3BpY2dvLXBsdWdpbi0vLnRlc3QobmFtZSkpIHJldHVybiBmYWxzZVxuICAgICAgY29uc3QgcGF0aCA9IHRoaXMucmVzb2x2ZVBsdWdpbih0aGlzLmN0eCwgbmFtZSlcbiAgICAgIHJldHVybiBmcy5leGlzdHNTeW5jKHBhdGgpXG4gICAgfSlcbiAgICBmb3IgKGNvbnN0IG1vZHVsZSBvZiBtb2R1bGVzKSB7XG4gICAgICB0aGlzLnJlZ2lzdGVyUGx1Z2luKG1vZHVsZSlcbiAgICB9XG4gICAgcmV0dXJuIHRydWVcbiAgfVxuXG4gIHJlZ2lzdGVyUGx1Z2luKG5hbWU6IHN0cmluZywgcGx1Z2luPzogSVBpY0dvUGx1Z2luKTogdm9pZCB7XG4gICAgaWYgKCFuYW1lIHx8IHR5cGVvZiBuYW1lICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhpcy5jdHgubG9nLndhcm4oJ1BsZWFzZSBwcm92aWRlIHZhbGlkIHBsdWdpbicpXG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgdGhpcy5mdWxsTGlzdC5hZGQobmFtZSlcbiAgICB0cnkge1xuICAgICAgLy8gcmVnaXN0ZXIgbG9jYWwgcGx1Z2luXG4gICAgICBpZiAoIXBsdWdpbikge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgdGhpcy5jdHguZ2V0Q29uZmlnKGBwaWNnb1BsdWdpbnMuJHtuYW1lfWApID09PSB0cnVlIHx8XG4gICAgICAgICAgdGhpcy5jdHguZ2V0Q29uZmlnKGBwaWNnb1BsdWdpbnMuJHtuYW1lfWApID09PSB1bmRlZmluZWRcbiAgICAgICAgKSB7XG4gICAgICAgICAgdGhpcy5saXN0LnB1c2gobmFtZSlcbiAgICAgICAgICBzZXRDdXJyZW50UGx1Z2luTmFtZShuYW1lKVxuICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tbm9uLW51bGwtYXNzZXJ0aW9uXG4gICAgICAgICAgdGhpcy5nZXRQbHVnaW4obmFtZSkhLnJlZ2lzdGVyKHRoaXMuY3R4KVxuICAgICAgICAgIGNvbnN0IHBsdWdpbiA9IGBwaWNnb1BsdWdpbnNbJHtuYW1lfV1gXG4gICAgICAgICAgdGhpcy5jdHguc2F2ZUNvbmZpZyh7XG4gICAgICAgICAgICBbcGx1Z2luXTogdHJ1ZVxuICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIHJlZ2lzdGVyIHByb3ZpZGVkIHBsdWdpblxuICAgICAgICAvLyAmJiB3b24ndCB3cml0ZSBjb25maWcgdG8gZmlsZXNcbiAgICAgICAgdGhpcy5saXN0LnB1c2gobmFtZSlcbiAgICAgICAgc2V0Q3VycmVudFBsdWdpbk5hbWUobmFtZSlcbiAgICAgICAgY29uc3QgcGx1Z2luSW50ZXJmYWNlID0gcGx1Z2luKHRoaXMuY3R4KVxuICAgICAgICB0aGlzLnBsdWdpbk1hcC5zZXQobmFtZSwgcGx1Z2luSW50ZXJmYWNlKVxuICAgICAgICBwbHVnaW5JbnRlcmZhY2UucmVnaXN0ZXIodGhpcy5jdHgpXG4gICAgICB9XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhpcy5wbHVnaW5NYXAuZGVsZXRlKG5hbWUpXG4gICAgICB0aGlzLmxpc3QgPSB0aGlzLmxpc3QuZmlsdGVyKChpdGVtOiBzdHJpbmcpID0+IGl0ZW0gIT09IG5hbWUpXG4gICAgICB0aGlzLmZ1bGxMaXN0LmRlbGV0ZShuYW1lKVxuICAgICAgdGhpcy5jdHgubG9nLmVycm9yKGUgYXMgRXJyb3IpXG4gICAgICB0aGlzLmN0eC5lbWl0KElCdWlsZEluRXZlbnQuTk9USUZJQ0FUSU9OLCB7XG4gICAgICAgIHRpdGxlOiBgUGx1Z2luICR7bmFtZX0gTG9hZCBFcnJvcmAsXG4gICAgICAgIGJvZHk6IGVcbiAgICAgIH0pXG4gICAgfVxuICB9XG5cbiAgdW5yZWdpc3RlclBsdWdpbihuYW1lOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLmxpc3QgPSB0aGlzLmxpc3QuZmlsdGVyKChpdGVtOiBzdHJpbmcpID0+IGl0ZW0gIT09IG5hbWUpXG4gICAgdGhpcy5mdWxsTGlzdC5kZWxldGUobmFtZSlcbiAgICB0aGlzLnBsdWdpbk1hcC5kZWxldGUobmFtZSlcbiAgICBzZXRDdXJyZW50UGx1Z2luTmFtZShuYW1lKVxuICAgIHRoaXMuY3R4LmhlbHBlci51cGxvYWRlci51bnJlZ2lzdGVyKG5hbWUpXG4gICAgdGhpcy5jdHguaGVscGVyLnRyYW5zZm9ybWVyLnVucmVnaXN0ZXIobmFtZSlcbiAgICB0aGlzLmN0eC5oZWxwZXIuYmVmb3JlVHJhbnNmb3JtUGx1Z2lucy51bnJlZ2lzdGVyKG5hbWUpXG4gICAgdGhpcy5jdHguaGVscGVyLmJlZm9yZVVwbG9hZFBsdWdpbnMudW5yZWdpc3RlcihuYW1lKVxuICAgIHRoaXMuY3R4LmhlbHBlci5hZnRlclVwbG9hZFBsdWdpbnMudW5yZWdpc3RlcihuYW1lKVxuICAgIHRoaXMuY3R4LmNtZC51bnJlZ2lzdGVyKG5hbWUpXG4gICAgdGhpcy5jdHgucmVtb3ZlQ29uZmlnKCdwaWNnb1BsdWdpbnMnLCBuYW1lKVxuICB9XG5cbiAgLy8gZ2V0IHBsdWdpbiBieSBuYW1lXG4gIGdldFBsdWdpbihuYW1lOiBzdHJpbmcpOiBJUGljR29QbHVnaW5JbnRlcmZhY2UgfCB1bmRlZmluZWQge1xuICAgIGlmICh0aGlzLnBsdWdpbk1hcC5oYXMobmFtZSkpIHtcbiAgICAgIHJldHVybiB0aGlzLnBsdWdpbk1hcC5nZXQobmFtZSlcbiAgICB9XG4gICAgY29uc3QgcGx1Z2luRGlyID0gcGF0aC5qb2luKHRoaXMuY3R4LmJhc2VEaXIsICdub2RlX21vZHVsZXMvJylcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXZhci1yZXF1aXJlc1xuICAgIGNvbnN0IHBsdWdpbiA9IHJlcXVpcmUocGx1Z2luRGlyICsgbmFtZSkodGhpcy5jdHgpXG4gICAgdGhpcy5wbHVnaW5NYXAuc2V0KG5hbWUsIHBsdWdpbilcbiAgICByZXR1cm4gcGx1Z2luXG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBsaXN0IG9mIGVuYWJsZWQgcGx1Z2luc1xuICAgKi9cbiAgZ2V0TGlzdCgpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIHRoaXMubGlzdFxuICB9XG5cbiAgaGFzUGx1Z2luKG5hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmZ1bGxMaXN0LmhhcyhuYW1lKVxuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgZnVsbCBsaXN0IG9mIHBsdWdpbnMsIHdoZXRoZXIgaXQgaXMgZW5hYmxlZCBvciBub3RcbiAgICovXG4gIGdldEZ1bGxMaXN0KCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gWy4uLnRoaXMuZnVsbExpc3RdXG4gIH1cbn1cbmV4cG9ydCBkZWZhdWx0IFBsdWdpbkxvYWRlclxuIiwiaW1wb3J0IHsgRXZlbnRFbWl0dGVyIH0gZnJvbSAnZXZlbnRzJ1xuXG5jb25zdCBldmVudEJ1cyA9IG5ldyBFdmVudEVtaXR0ZXIoKVxuXG5leHBvcnQgeyBldmVudEJ1cyB9XG4iLCJpbXBvcnQgYXhpb3MgZnJvbSAnYXhpb3MnXG5pbXBvcnQgdHlwZSB7IEF4aW9zUmVxdWVzdENvbmZpZywgQXhpb3NSZXNwb25zZSB9IGZyb20gJ2F4aW9zJ1xuaW1wb3J0IEZvcm1EYXRhIGZyb20gJ2Zvcm0tZGF0YSdcbmltcG9ydCBodHRwcyBmcm9tICdodHRwcydcbmltcG9ydCB7IGh0dHBzT3Zlckh0dHAgfSBmcm9tICd0dW5uZWwnXG5pbXBvcnQgeyBVUkwgfSBmcm9tICd1cmwnXG5cbmltcG9ydCB0eXBlIHtcbiAgSVBpY0dvLFxuICBVbmRlZmluYWJsZSxcbiAgSUNvbmZpZ0NoYW5nZVBheWxvYWQsXG4gIElDb25maWcsXG4gIElSZXF1ZXN0Q29uZmlnLFxuICBJT2xkUmVxT3B0aW9ucyxcbiAgSVJlc3BvbnNlLFxuICBJRnVsbFJlc3BvbnNlLFxuICBJUmVxdWVzdFxufSBmcm9tICcuLi90eXBlcydcbmltcG9ydCB7IElCdXNFdmVudCB9IGZyb20gJy4uL3V0aWxzL2VudW0nXG5pbXBvcnQgeyBldmVudEJ1cyB9IGZyb20gJy4uL3V0aWxzL2V2ZW50QnVzJ1xuXG5jb25zdCBodHRwc0FnZW50ID0gbmV3IGh0dHBzLkFnZW50KHtcbiAgbWF4VmVyc2lvbjogJ1RMU3YxLjInLFxuICBtaW5WZXJzaW9uOiAnVExTdjEuMicsXG4gIHJlamVjdFVuYXV0aG9yaXplZDogZmFsc2Vcbn0pXG5cbi8vIHRoYW5rcyBmb3IgaHR0cHM6Ly9naXRodWIuZGV2L3JlcXVlc3QvcmVxdWVzdC9ibG9iL21hc3Rlci9pbmRleC5qc1xuZnVuY3Rpb24gYXBwZW5kRm9ybURhdGEoZm9ybTogRm9ybURhdGEsIGtleTogc3RyaW5nLCBkYXRhOiBhbnkpOiB2b2lkIHtcbiAgaWYgKHR5cGVvZiBkYXRhID09PSAnb2JqZWN0JyAmJiAndmFsdWUnIGluIGRhdGEgJiYgJ29wdGlvbnMnIGluIGRhdGEpIHtcbiAgICBmb3JtLmFwcGVuZChrZXksIGRhdGEudmFsdWUsIGRhdGEub3B0aW9ucylcbiAgfSBlbHNlIHtcbiAgICBmb3JtLmFwcGVuZChrZXksIGRhdGEpXG4gIH1cbn1cblxuZnVuY3Rpb24gcmVxdWVzdEludGVyY2VwdG9yKG9wdGlvbnM6IElPbGRSZXFPcHRpb25zIHwgQXhpb3NSZXF1ZXN0Q29uZmlnKTogQXhpb3NSZXF1ZXN0Q29uZmlnICYge1xuICBfX2lzT2xkT3B0aW9ucz86IGJvb2xlYW5cbn0ge1xuICBsZXQgX19pc09sZE9wdGlvbnMgPSBmYWxzZVxuICBjb25zdCBvcHQ6IEF4aW9zUmVxdWVzdENvbmZpZzxhbnk+ICYge1xuICAgIF9faXNPbGRPcHRpb25zPzogYm9vbGVhblxuICB9ID0ge1xuICAgIC4uLm9wdGlvbnMsXG4gICAgdXJsOiAob3B0aW9ucy51cmwgYXMgc3RyaW5nKSB8fCAnJyxcbiAgICBoZWFkZXJzOiBvcHRpb25zLmhlYWRlcnMgfHwge31cbiAgfVxuICAvLyB1c2VyIHJlcXVlc3QgY29uZmlnIHByb3h5XG4gIGlmIChvcHRpb25zLnByb3h5KSB7XG4gICAgbGV0IHByb3h5T3B0aW9ucyA9IG9wdGlvbnMucHJveHlcbiAgICBpZiAodHlwZW9mIHByb3h5T3B0aW9ucyA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHByb3h5T3B0aW9ucyA9IG5ldyBVUkwob3B0aW9ucy5wcm94eSlcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgcHJveHlPcHRpb25zID0gZmFsc2VcbiAgICAgICAgb3B0LnByb3h5ID0gZmFsc2VcbiAgICAgICAgY29uc29sZS5lcnJvcihlKVxuICAgICAgfVxuICAgICAgX19pc09sZE9wdGlvbnMgPSB0cnVlXG4gICAgfVxuICAgIGlmIChwcm94eU9wdGlvbnMpIHtcbiAgICAgIGlmIChvcHRpb25zLnVybD8uc3RhcnRzV2l0aCgnaHR0cHM6Ly8nKSkge1xuICAgICAgICBvcHQucHJveHkgPSBmYWxzZVxuICAgICAgICBvcHQuaHR0cHNBZ2VudCA9IGh0dHBzT3Zlckh0dHAoe1xuICAgICAgICAgIHByb3h5OiB7XG4gICAgICAgICAgICBob3N0OiBwcm94eU9wdGlvbnM/Lmhvc3RuYW1lLFxuICAgICAgICAgICAgcG9ydDogcGFyc2VJbnQocHJveHlPcHRpb25zPy5wb3J0LCAxMClcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvcHQucHJveHkgPSB7XG4gICAgICAgICAgaG9zdDogcHJveHlPcHRpb25zLmhvc3RuYW1lLFxuICAgICAgICAgIHBvcnQ6IHBhcnNlSW50KHByb3h5T3B0aW9ucy5wb3J0LCAxMCksXG4gICAgICAgICAgcHJvdG9jb2w6ICdodHRwJ1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGlmICgnZm9ybURhdGEnIGluIG9wdGlvbnMpIHtcbiAgICBjb25zdCBmb3JtID0gbmV3IEZvcm1EYXRhKClcbiAgICBmb3IgKGNvbnN0IGtleSBpbiBvcHRpb25zLmZvcm1EYXRhKSB7XG4gICAgICBjb25zdCBkYXRhID0gb3B0aW9ucy5mb3JtRGF0YVtrZXldXG4gICAgICBhcHBlbmRGb3JtRGF0YShmb3JtLCBrZXksIGRhdGEpXG4gICAgfVxuICAgIG9wdC5kYXRhID0gZm9ybVxuICAgIG9wdC5oZWFkZXJzID0gT2JqZWN0LmFzc2lnbihvcHQuaGVhZGVycyB8fCB7fSwgZm9ybS5nZXRIZWFkZXJzKCkpXG4gICAgX19pc09sZE9wdGlvbnMgPSB0cnVlXG4gICAgLy8gQHRzLWV4cGVjdC1lcnJvciB0aGlzIGlzIG9sZCBvcHRpb25cbiAgICBkZWxldGUgb3B0LmZvcm1EYXRhXG4gIH1cbiAgaWYgKCdib2R5JyBpbiBvcHRpb25zKSB7XG4gICAgb3B0LmRhdGEgPSBvcHRpb25zLmJvZHlcbiAgICBfX2lzT2xkT3B0aW9ucyA9IHRydWVcbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yIHRoaXMgaXMgb2xkIG9wdGlvbnNcbiAgICBkZWxldGUgb3B0LmJvZHlcbiAgfVxuICBpZiAoJ3FzJyBpbiBvcHRpb25zKSB7XG4gICAgb3B0LnBhcmFtcyA9IG9wdGlvbnMucXNcbiAgICBfX2lzT2xkT3B0aW9ucyA9IHRydWVcbiAgfVxuICBvcHQuX19pc09sZE9wdGlvbnMgPSBfX2lzT2xkT3B0aW9uc1xuICByZXR1cm4gb3B0XG59XG5cbmZ1bmN0aW9uIHJlc3BvbnNlSW50ZXJjZXB0b3IocmVzcG9uc2U6IEF4aW9zUmVzcG9uc2UpOiBJRnVsbFJlc3BvbnNlIHtcbiAgcmV0dXJuIHtcbiAgICAuLi5yZXNwb25zZSxcbiAgICBzdGF0dXNDb2RlOiByZXNwb25zZS5zdGF0dXMsXG4gICAgYm9keTogcmVzcG9uc2UuZGF0YVxuICB9XG59XG5cbmZ1bmN0aW9uIHJlc3BvbnNlRXJyb3JIYW5kbGVyKGVycm9yOiBhbnkpIHtcbiAgY29uc3QgZXJyb3JPYmogPSB7XG4gICAgbWV0aG9kOiBlcnJvcj8uY29uZmlnPy5tZXRob2Q/LnRvVXBwZXJDYXNlKCkgfHwgJycsXG4gICAgdXJsOiBlcnJvcj8uY29uZmlnPy51cmwgfHwgJycsXG4gICAgc3RhdHVzQ29kZTogZXJyb3I/LnJlc3BvbnNlPy5zdGF0dXMgfHwgMCxcbiAgICBtZXNzYWdlOiBlcnJvcj8ubWVzc2FnZSB8fCAnJyxcbiAgICBzdGFjazogZXJyb3I/LnN0YWNrIHx8IHt9LFxuICAgIHJlc3BvbnNlOiB7XG4gICAgICBzdGF0dXM6IGVycm9yPy5yZXNwb25zZT8uc3RhdHVzIHx8IDAsXG4gICAgICBzdGF0dXNDb2RlOiBlcnJvcj8ucmVzcG9uc2U/LnN0YXR1cyB8fCAwLFxuICAgICAgYm9keTogZXJyb3I/LnJlc3BvbnNlPy5kYXRhIHx8ICcnXG4gICAgfVxuICB9XG4gIHJldHVybiBQcm9taXNlLnJlamVjdChlcnJvck9iailcbn1cblxuZXhwb3J0IGNsYXNzIFJlcXVlc3QgaW1wbGVtZW50cyBJUmVxdWVzdCB7XG4gIHByaXZhdGUgcmVhZG9ubHkgY3R4OiBJUGljR29cbiAgcHJpdmF0ZSBwcm94eTogVW5kZWZpbmFibGU8c3RyaW5nPiA9ICcnXG4gIG9wdGlvbnM6IEF4aW9zUmVxdWVzdENvbmZpZzxhbnk+ID0ge31cbiAgY29uc3RydWN0b3IoY3R4OiBJUGljR28pIHtcbiAgICB0aGlzLmN0eCA9IGN0eFxuICAgIHRoaXMuaW5pdCgpXG4gICAgZXZlbnRCdXMub24oSUJ1c0V2ZW50LkNPTkZJR19DSEFOR0UsIChkYXRhOiBJQ29uZmlnQ2hhbmdlUGF5bG9hZDxzdHJpbmcgfCBJQ29uZmlnWydwaWNCZWQnXT4pID0+IHtcbiAgICAgIHN3aXRjaCAoZGF0YS5jb25maWdOYW1lKSB7XG4gICAgICAgIGNhc2UgJ3BpY0JlZCc6XG4gICAgICAgICAgaWYgKChkYXRhLnZhbHVlIGFzIElDb25maWdbJ3BpY0JlZCddKT8ucHJveHkpIHtcbiAgICAgICAgICAgIHRoaXMucHJveHkgPSAoZGF0YS52YWx1ZSBhcyBJQ29uZmlnWydwaWNCZWQnXSkucHJveHlcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAncGljQmVkLnByb3h5JzpcbiAgICAgICAgICB0aGlzLnByb3h5ID0gZGF0YS52YWx1ZSBhcyBzdHJpbmdcbiAgICAgICAgICBicmVha1xuICAgICAgfVxuICAgIH0pXG4gIH1cblxuICBwcml2YXRlIGluaXQoKTogdm9pZCB7XG4gICAgY29uc3QgcHJveHkgPSB0aGlzLmN0eC5nZXRDb25maWc8VW5kZWZpbmFibGU8c3RyaW5nPj4oJ3BpY0JlZC5wcm94eScpXG4gICAgaWYgKHByb3h5KSB7XG4gICAgICB0aGlzLnByb3h5ID0gcHJveHlcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZVByb3h5KCk6IEF4aW9zUmVxdWVzdENvbmZpZ1sncHJveHknXSB8IGZhbHNlIHtcbiAgICBpZiAodGhpcy5wcm94eSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcHJveHlPcHRpb25zID0gbmV3IFVSTCh0aGlzLnByb3h5KVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGhvc3Q6IHByb3h5T3B0aW9ucy5ob3N0bmFtZSxcbiAgICAgICAgICBwb3J0OiBwYXJzZUludChwcm94eU9wdGlvbnMucG9ydCB8fCAnMCcsIDEwKSxcbiAgICAgICAgICBwcm90b2NvbDogcHJveHlPcHRpb25zLnByb3RvY29sXG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgLyogZW1wdHkgKi9cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICAvLyAjNjQgZHluYW1pYyBnZXQgcHJveHkgdmFsdWVcbiAgcmVxdWVzdDxcbiAgICBULFxuICAgIFUgZXh0ZW5kcyBJUmVxdWVzdENvbmZpZzxVPiBleHRlbmRzIElPbGRSZXFPcHRpb25zXG4gICAgICA/IElPbGRSZXFPcHRpb25zXG4gICAgICA6IElSZXF1ZXN0Q29uZmlnPFU+IGV4dGVuZHMgQXhpb3NSZXF1ZXN0Q29uZmlnXG4gICAgICAgID8gQXhpb3NSZXF1ZXN0Q29uZmlnXG4gICAgICAgIDogbmV2ZXJcbiAgPihvcHRpb25zOiBVKTogUHJvbWlzZTxJUmVzcG9uc2U8VCwgVT4+IHtcbiAgICB0aGlzLm9wdGlvbnMucHJveHkgPSB0aGlzLmhhbmRsZVByb3h5KClcbiAgICB0aGlzLm9wdGlvbnMuaGVhZGVycyA9IG9wdGlvbnMuaGVhZGVycyB8fCB7fVxuICAgIHRoaXMub3B0aW9ucy5tYXhCb2R5TGVuZ3RoID0gSW5maW5pdHlcbiAgICB0aGlzLm9wdGlvbnMubWF4Q29udGVudExlbmd0aCA9IEluZmluaXR5XG4gICAgaWYgKHRoaXMub3B0aW9ucy5wcm94eSAmJiBvcHRpb25zLnVybD8uc3RhcnRzV2l0aCgnaHR0cHM6Ly8nKSkge1xuICAgICAgdGhpcy5vcHRpb25zLmh0dHBzQWdlbnQgPSBodHRwc092ZXJIdHRwKHtcbiAgICAgICAgcHJveHk6IHtcbiAgICAgICAgICBob3N0OiB0aGlzLm9wdGlvbnMucHJveHkuaG9zdCxcbiAgICAgICAgICBwb3J0OiB0aGlzLm9wdGlvbnMucHJveHkucG9ydFxuICAgICAgICB9XG4gICAgICB9KVxuICAgICAgdGhpcy5vcHRpb25zLnByb3h5ID0gZmFsc2VcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5vcHRpb25zLmh0dHBzQWdlbnQgPSBodHRwc0FnZW50XG4gICAgfVxuICAgIC8vICFOT1RJQ0UgdGhpcy5vcHRpb25zICE9PSBvcHRpb25zXG4gICAgLy8gdGhpcy5vcHRpb25zIGlzIHRoZSBkZWZhdWx0IG9wdGlvbnNcbiAgICBjb25zdCBpbnN0YW5jZSA9IGF4aW9zLmNyZWF0ZSh0aGlzLm9wdGlvbnMpXG4gICAgaW5zdGFuY2UuaW50ZXJjZXB0b3JzLnJlc3BvbnNlLnVzZShyZXNwb25zZUludGVyY2VwdG9yLCByZXNwb25zZUVycm9ySGFuZGxlcilcblxuICAgIC8vIGNvbXBhdGlibGUgd2l0aCBvbGQgcmVxdWVzdCBvcHRpb25zIHRvIG5ldyBvcHRpb25zXG4gICAgY29uc3Qgb3B0ID0gcmVxdWVzdEludGVyY2VwdG9yKG9wdGlvbnMpXG5cbiAgICBpbnN0YW5jZS5pbnRlcmNlcHRvcnMucmVxdWVzdC51c2UoZnVuY3Rpb24gKG9iaikge1xuICAgICAgLy8gaGFuZGxlIENvbnRlbnQtVHlwZVxuICAgICAgbGV0IGNvbnRlbnRUeXBlID0gJydcbiAgICAgIGlmIChvYmo/LmhlYWRlcnM/LmNvbnRlbnRUeXBlKSB7XG4gICAgICAgIGNvbnRlbnRUeXBlID0gb2JqLmhlYWRlcnMuY29udGVudFR5cGUgYXMgc3RyaW5nXG4gICAgICAgIGRlbGV0ZSBvYmouaGVhZGVycy5jb250ZW50VHlwZVxuICAgICAgfSBlbHNlIGlmIChvYmo/LmhlYWRlcnM/LkNvbnRlbnRUeXBlKSB7XG4gICAgICAgIGNvbnRlbnRUeXBlID0gb2JqLmhlYWRlcnMuQ29udGVudFR5cGUgYXMgc3RyaW5nXG4gICAgICAgIGRlbGV0ZSBvYmouaGVhZGVycy5Db250ZW50VHlwZVxuICAgICAgfSBlbHNlIGlmIChvYmo/LmhlYWRlcnM/LlsnY29udGVudC10eXBlJ10pIHtcbiAgICAgICAgY29udGVudFR5cGUgPSBvYmouaGVhZGVyc1snY29udGVudC10eXBlJ10gYXMgc3RyaW5nXG4gICAgICAgIGRlbGV0ZSBvYmouaGVhZGVyc1snY29udGVudC10eXBlJ11cbiAgICAgIH1cbiAgICAgIGlmIChjb250ZW50VHlwZSAhPT0gJycgJiYgb2JqLmhlYWRlcnMpIHtcbiAgICAgICAgb2JqLmhlYWRlcnNbJ0NvbnRlbnQtVHlwZSddID0gY29udGVudFR5cGVcbiAgICAgIH1cbiAgICAgIHJldHVybiBvYmpcbiAgICB9KVxuICAgIGlmICgncmVzb2x2ZVdpdGhGdWxsUmVzcG9uc2UnIGluIG9wdGlvbnMgJiYgb3B0aW9ucy5yZXNvbHZlV2l0aEZ1bGxSZXNwb25zZSkge1xuICAgICAgcmV0dXJuIGluc3RhbmNlLnJlcXVlc3Qob3B0KVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gaW5zdGFuY2UucmVxdWVzdChvcHQpLnRoZW4ocmVzID0+IHtcbiAgICAgICAgLy8gdXNlIG9sZCByZXF1ZXN0IG9wdGlvbiBmb3JtYXRcbiAgICAgICAgaWYgKG9wdC5fX2lzT2xkT3B0aW9ucykge1xuICAgICAgICAgIGlmICgnanNvbicgaW4gb3B0aW9ucykge1xuICAgICAgICAgICAgaWYgKG9wdGlvbnMuanNvbikge1xuICAgICAgICAgICAgICByZXR1cm4gcmVzLmRhdGFcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHJlcy5kYXRhKVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gcmVzLmRhdGFcbiAgICAgICAgfVxuICAgICAgfSkgYXMgUHJvbWlzZTxJUmVzcG9uc2U8VCwgVT4+XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFJlcXVlc3RcbiIsImltcG9ydCBheGlvcyBmcm9tICdheGlvcydcbmltcG9ydCB7IEV2ZW50RW1pdHRlciB9IGZyb20gJ2V2ZW50cydcbmltcG9ydCBmcywgeyBlbXB0eURpclN5bmMsIGVuc3VyZURpclN5bmMgfSBmcm9tICdmcy1leHRyYSdcbmltcG9ydCBoZWljQ29udmVydCBmcm9tICdoZWljLWNvbnZlcnQnXG5pbXBvcnQgeyBjbG9uZURlZXAgfSBmcm9tICdsb2Rhc2gnXG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJ1xuXG5pbXBvcnQge1xuICBJQnVpbGRJbldhdGVyTWFya09wdGlvbnMsXG4gIElCdWlsZEluQ29tcHJlc3NPcHRpb25zLFxuICBJTGlmZWN5Y2xlUGx1Z2lucyxcbiAgSVBhdGhUcmFuc2Zvcm1lZEltZ0luZm8sXG4gIElQaWNHbyxcbiAgSVBsdWdpbixcbiAgVW5kZWZpbmFibGUsXG4gIElJbWdJbmZvXG59IGZyb20gJy4uL3R5cGVzJ1xuaW1wb3J0IHtcbiAgZ2V0VVJMRmlsZSxcbiAgaGFuZGxlVXJsRW5jb2RlLFxuICBpbWFnZUNvbXByZXNzLFxuICBpc1VybCxcbiAgaXNOZWVkQ29tcHJlc3MsXG4gIGlzTmVlZEFkZFdhdGVybWFyayxcbiAgaW1hZ2VBZGRXYXRlck1hcmssXG4gIHJlbW92ZUV4aWYsXG4gIHJlbmFtZUZpbGVOYW1lV2l0aEN1c3RvbVN0cmluZyxcbiAgZ2V0Q29udmVydGVkRm9ybWF0XG59IGZyb20gJy4uL3V0aWxzL2NvbW1vbidcbmltcG9ydCB7IElCdWlsZEluRXZlbnQgfSBmcm9tICcuLi91dGlscy9lbnVtJ1xuaW1wb3J0IHsgY3JlYXRlQ29udGV4dCB9IGZyb20gJy4uL3V0aWxzL2NyZWF0ZUNvbnRleHQnXG5cbmNvbnN0IHdhdGVybWFya01zZyA9ICdBZGQgd2F0ZXJtYXJrIHRvIGltYWdlJ1xuY29uc3QgY29tcHJlc3NNc2cgPSAnQ29tcHJlc3Mgb3IgY29udmVydCBpbWFnZSdcblxuY29uc3QgdHRmRmlsZUxpbmsgPSAnaHR0cHM6Ly9yZWxlYXNlLnBpY2xpc3QuY24vc2ltaGVpLnR0ZidcblxuZXhwb3J0IGNsYXNzIExpZmVjeWNsZSBleHRlbmRzIEV2ZW50RW1pdHRlciB7XG4gIHByaXZhdGUgcmVhZG9ubHkgY3R4OiBJUGljR29cbiAgdHRmUGF0aDogc3RyaW5nXG5cbiAgY29uc3RydWN0b3IoY3R4OiBJUGljR28pIHtcbiAgICBzdXBlcigpXG4gICAgdGhpcy5jdHggPSBjdHhcbiAgICB0aGlzLnR0ZlBhdGggPSBwYXRoLmpvaW4oY3R4LmJhc2VEaXIsICdhc3NldHMnLCAnc2ltaGVpLnR0ZicpXG4gICAgZW5zdXJlRGlyU3luYyhwYXRoLmpvaW4oY3R4LmJhc2VEaXIsICdpbWdUZW1wJykpXG4gICAgY29uc3QgZW5hYmxlU2Vjb25kVXBsb2FkZXIgPSBjdHguZ2V0Q29uZmlnPFVuZGVmaW5hYmxlPGJvb2xlYW4+Pignc2V0dGluZ3MuZW5hYmxlU2Vjb25kVXBsb2FkZXInKSB8fCBmYWxzZVxuICAgIGlmICghZW5hYmxlU2Vjb25kVXBsb2FkZXIpIHtcbiAgICAgIGVtcHR5RGlyU3luYyhwYXRoLmpvaW4oY3R4LmJhc2VEaXIsICdwaWNsaXN0VGVtcCcpKVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZG93bmxvYWRUVEYoKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgdHJ5IHtcbiAgICAgIGVuc3VyZURpclN5bmMocGF0aC5kaXJuYW1lKHRoaXMudHRmUGF0aCkpXG4gICAgICBpZiAoZnMuZXhpc3RzU3luYyh0aGlzLnR0ZlBhdGgpICYmIGZzLnN0YXRTeW5jKHRoaXMudHRmUGF0aCkuc2l6ZSA+IDApIHJldHVybiB0cnVlXG4gICAgICB0aGlzLmN0eC5sb2cuaW5mbygnRG93bmxvYWQgdHRmIGZpbGUuJylcbiAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IGF4aW9zLmdldCh0dGZGaWxlTGluaywgeyByZXNwb25zZVR5cGU6ICdhcnJheWJ1ZmZlcicgfSlcbiAgICAgIGZzLndyaXRlRmlsZVN5bmModGhpcy50dGZQYXRoLCByZXMuZGF0YSlcbiAgICAgIHRoaXMuY3R4LmxvZy5pbmZvKCdEb3dubG9hZCB0dGYgZmlsZSBzdWNjZXNzZnVsbHkuJylcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfSBjYXRjaCAoZTogYW55KSB7XG4gICAgICB0aGlzLmN0eC5sb2cuZXJyb3IoJ0Rvd25sb2FkIHR0ZiBmaWxlIGZhaWxlZC4nKVxuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBoZWxwR2V0T3B0aW9uKGN0eDogSVBpY0dvKToge1xuICAgIGNvbXByZXNzT3B0aW9uczogVW5kZWZpbmFibGU8SUJ1aWxkSW5Db21wcmVzc09wdGlvbnM+XG4gICAgd2F0ZXJtYXJrT3B0aW9uczogVW5kZWZpbmFibGU8SUJ1aWxkSW5XYXRlck1hcmtPcHRpb25zPlxuICB9IHtcbiAgICBjb25zdCBjb21wcmVzc09wdGlvbnMgPSBjdHguZ2V0Q29uZmlnPFVuZGVmaW5hYmxlPElCdWlsZEluQ29tcHJlc3NPcHRpb25zPj4oJ2J1aWxkSW4uY29tcHJlc3MnKVxuICAgIGNvbnN0IHdhdGVybWFya09wdGlvbnMgPSBjdHguZ2V0Q29uZmlnPFVuZGVmaW5hYmxlPElCdWlsZEluV2F0ZXJNYXJrT3B0aW9ucz4+KCdidWlsZEluLndhdGVybWFyaycpXG4gICAgY29uc3QgdHlwZSA9XG4gICAgICBjdHguZ2V0Q29uZmlnPFVuZGVmaW5hYmxlPHN0cmluZz4+KCdwaWNCZWQudXBsb2FkZXInKSB8fFxuICAgICAgY3R4LmdldENvbmZpZzxVbmRlZmluYWJsZTxzdHJpbmc+PigncGljQmVkLmN1cnJlbnQnKSB8fFxuICAgICAgJ3NtbXMnXG4gICAgY29uc3QgdXBsb2FkZXIgPSBjdHguaGVscGVyLnVwbG9hZGVyLmdldCh0eXBlKVxuICAgIGlmICghdXBsb2FkZXIgJiYgY29tcHJlc3NPcHRpb25zKSB7XG4gICAgICBjb21wcmVzc09wdGlvbnMucGljQmVkID0gJ3NtbXMnXG4gICAgfSBlbHNlIGlmIChjb21wcmVzc09wdGlvbnMpIHtcbiAgICAgIGNvbXByZXNzT3B0aW9ucy5waWNCZWQgPSB0eXBlXG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICBjb21wcmVzc09wdGlvbnMsXG4gICAgICB3YXRlcm1hcmtPcHRpb25zXG4gICAgfVxuICB9XG5cbiAgYXN5bmMgc3RhcnQoaW5wdXQ6IGFueVtdLCBza2lwUHJvY2VzcyA9IGZhbHNlKTogUHJvbWlzZTxJUGljR28+IHtcbiAgICAvLyBlbnN1cmUgZXZlcnkgdXBsb2FkIHByb2Nlc3MgaGFzIGFuIHVuaXF1ZSBjb250ZXh0XG4gICAgY29uc3QgY3R4ID0gY3JlYXRlQ29udGV4dCh0aGlzLmN0eClcbiAgICB0cnkge1xuICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGlucHV0KSkgdGhyb3cgbmV3IEVycm9yKCdJbnB1dCBtdXN0IGJlIGFuIGFycmF5LicpXG4gICAgICBjdHguaW5wdXQgPSBpbnB1dFxuICAgICAgY3R4Lm91dHB1dCA9IFtdIGFzIElJbWdJbmZvW11cbiAgICAgIGN0eC5yYXdJbnB1dFBhdGggPSBbXSBhcyBzdHJpbmdbXVxuICAgICAgY3R4LnJhd0lucHV0ID0gY2xvbmVEZWVwKGlucHV0KVxuICAgICAgaWYgKHNraXBQcm9jZXNzKSB7XG4gICAgICAgIGN0eC5sb2cuaW5mbygnU2tpcCBwcm9jZXNzLicpXG4gICAgICAgIGN0eC5vdXRwdXQgPSBpbnB1dFxuICAgICAgICBhd2FpdCB0aGlzLmRvVXBsb2FkKGN0eClcbiAgICAgICAgY3R4LmlucHV0ID0gY3R4LnJhd0lucHV0XG4gICAgICAgIGF3YWl0IHRoaXMuYWZ0ZXJVcGxvYWQoY3R4KVxuICAgICAgICByZXR1cm4gY3R4XG4gICAgICB9XG4gICAgICAvLyBsaWZlY3ljbGUgbWFpblxuICAgICAgYXdhaXQgdGhpcy5wcmVwcm9jZXNzKGN0eClcbiAgICAgIGF3YWl0IHRoaXMuYmVmb3JlVHJhbnNmb3JtKGN0eClcbiAgICAgIGF3YWl0IHRoaXMuZG9UcmFuc2Zvcm0oY3R4KVxuICAgICAgYXdhaXQgdGhpcy5idWlsZEluUmVuYW1lKGN0eClcbiAgICAgIGF3YWl0IHRoaXMuYmVmb3JlVXBsb2FkKGN0eClcbiAgICAgIGN0eC5wcm9jZXNzZWRJbnB1dCA9IGNsb25lRGVlcChjdHgub3V0cHV0KVxuICAgICAgYXdhaXQgdGhpcy5kb1VwbG9hZChjdHgpXG4gICAgICBjdHguaW5wdXQgPSBjdHgucmF3SW5wdXRcbiAgICAgIGF3YWl0IHRoaXMuYWZ0ZXJVcGxvYWQoY3R4KVxuICAgICAgcmV0dXJuIGN0eFxuICAgIH0gY2F0Y2ggKGU6IGFueSkge1xuICAgICAgY3R4LmxvZy53YXJuKElCdWlsZEluRXZlbnQuRkFJTEVEKVxuICAgICAgY3R4LmVtaXQoSUJ1aWxkSW5FdmVudC5VUExPQURfUFJPR1JFU1MsIC0xKVxuICAgICAgY3R4LmVtaXQoSUJ1aWxkSW5FdmVudC5GQUlMRUQsIGUpXG4gICAgICBjdHgubG9nLmVycm9yKGUpXG4gICAgICBpZiAoY3R4LmdldENvbmZpZzxVbmRlZmluYWJsZTxzdHJpbmc+PignZGVidWcnKSkge1xuICAgICAgICB0aHJvdyBlXG4gICAgICB9XG4gICAgICByZXR1cm4gY3R4XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBwcmVwcm9jZXNzKGN0eDogSVBpY0dvKTogUHJvbWlzZTxJUGljR28+IHtcbiAgICBjb25zdCB7IGNvbXByZXNzT3B0aW9ucywgd2F0ZXJtYXJrT3B0aW9ucyB9ID0gdGhpcy5oZWxwR2V0T3B0aW9uKGN0eClcbiAgICBjdHguZW1pdChJQnVpbGRJbkV2ZW50LlVQTE9BRF9QUk9HUkVTUywgMClcbiAgICBjdHguZW1pdChJQnVpbGRJbkV2ZW50LkJFRk9SRV9UUkFOU0ZPUk0sIGN0eClcbiAgICBjdHgubG9nLmluZm8oJ0JlZm9yZSB0cmFuc2Zvcm0nKVxuICAgIGlmIChjb21wcmVzc09wdGlvbnMgfHwgd2F0ZXJtYXJrT3B0aW9ucykge1xuICAgICAgY29uc3QgdGVtcEZpbGVQYXRoID0gcGF0aC5qb2luKGN0eC5iYXNlRGlyLCAncGljbGlzdFRlbXAnKVxuXG4gICAgICBhd2FpdCBQcm9taXNlLmFsbFNldHRsZWQoXG4gICAgICAgIGN0eC5pbnB1dC5tYXAoYXN5bmMgKGl0ZW06IHN0cmluZywgaW5kZXg6IG51bWJlcikgPT4ge1xuICAgICAgICAgIGNvbnN0IGl0ZW1Jc1VybCA9IGlzVXJsKGl0ZW0pXG4gICAgICAgICAgY29uc3QgaW5mbzogSVBhdGhUcmFuc2Zvcm1lZEltZ0luZm8gPSBpdGVtSXNVcmwgPyBhd2FpdCBnZXRVUkxGaWxlKGl0ZW0sIGN0eCkgOiB7IHN1Y2Nlc3M6IGZhbHNlIH1cbiAgICAgICAgICBpZiAoaXRlbUlzVXJsICYmICghaW5mby5zdWNjZXNzIHx8ICFpbmZvLmJ1ZmZlcikpIHJldHVyblxuXG4gICAgICAgICAgbGV0IHRyYW5zZm9ybWVkQnVmZmVyOiBVbmRlZmluYWJsZTxCdWZmZXI+XG4gICAgICAgICAgbGV0IGlzU2tpcCA9IGZhbHNlXG4gICAgICAgICAgY3R4LnJhd0lucHV0UGF0aCFbaW5kZXhdID0gaXRlbVxuICAgICAgICAgIGNvbnN0IGV4dGVudGlvbiA9IGl0ZW1Jc1VybCA/IGluZm8uZXh0bmFtZSB8fCAnJyA6IHBhdGguZXh0bmFtZShpdGVtKVxuICAgICAgICAgIGNvbnN0IGZpbGVCdWZmZXI6IEJ1ZmZlciA9IGl0ZW1Jc1VybCA/IGluZm8uYnVmZmVyISA6IGZzLnJlYWRGaWxlU3luYyhpdGVtKVxuICAgICAgICAgIGlmIChpc05lZWRBZGRXYXRlcm1hcmsod2F0ZXJtYXJrT3B0aW9ucywgZXh0ZW50aW9uKSkge1xuICAgICAgICAgICAgaWYgKCEod2F0ZXJtYXJrT3B0aW9ucz8ud2F0ZXJtYXJrRm9udFBhdGggfHwgd2F0ZXJtYXJrT3B0aW9ucz8ud2F0ZXJtYXJrVHlwZSA9PT0gJ2ltYWdlJykpIHtcbiAgICAgICAgICAgICAgY29uc3QgZG93bmxvYWRUVEZSZXQgPSBhd2FpdCB0aGlzLmRvd25sb2FkVFRGKClcbiAgICAgICAgICAgICAgaWYgKCFkb3dubG9hZFRURlJldCkge1xuICAgICAgICAgICAgICAgIHRoaXMuY3R4LmxvZy53YXJuKCdEb3dubG9hZCB0dGYgZmlsZSBmYWlsZWQsIHNraXAgYWRkIHdhdGVybWFyay4nKVxuICAgICAgICAgICAgICAgIGlzU2tpcCA9IHRydWVcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFpc1NraXApIHtcbiAgICAgICAgICAgICAgY3R4LmxvZy5pbmZvKHdhdGVybWFya01zZylcbiAgICAgICAgICAgICAgdHJhbnNmb3JtZWRCdWZmZXIgPSBhd2FpdCBpbWFnZUFkZFdhdGVyTWFyayhmaWxlQnVmZmVyLCB3YXRlcm1hcmtPcHRpb25zISwgdGhpcy50dGZQYXRoLCBjdHgubG9nKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoaXNOZWVkQ29tcHJlc3MoY29tcHJlc3NPcHRpb25zLCBleHRlbnRpb24pKSB7XG4gICAgICAgICAgICBjdHgubG9nLmluZm8oY29tcHJlc3NNc2cpXG4gICAgICAgICAgICBpZiAoIWl0ZW1Jc1VybCAmJiAoZXh0ZW50aW9uLnRvTG93ZXJDYXNlKCkgPT09ICcuaGVpYycgfHwgZXh0ZW50aW9uLnRvTG93ZXJDYXNlKCkgPT09ICcuaGVpZicpKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGhlaWNSZXN1bHQgPSBhd2FpdCBoZWljQ29udmVydCh7XG4gICAgICAgICAgICAgICAgYnVmZmVyOiBmaWxlQnVmZmVyLFxuICAgICAgICAgICAgICAgIGZvcm1hdDogJ0pQRUcnLFxuICAgICAgICAgICAgICAgIHF1YWxpdHk6IDFcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgY29uc3QgdGVtcEhlaWNDb252ZXJ0RmlsZSA9IHBhdGguam9pbih0ZW1wRmlsZVBhdGgsIGAke3BhdGguYmFzZW5hbWUoaXRlbSwgZXh0ZW50aW9uKX0uanBnYClcbiAgICAgICAgICAgICAgZnMud3JpdGVGaWxlU3luYyh0ZW1wSGVpY0NvbnZlcnRGaWxlLCBCdWZmZXIuZnJvbShoZWljUmVzdWx0KSlcbiAgICAgICAgICAgICAgdHJhbnNmb3JtZWRCdWZmZXIgPSBhd2FpdCBpbWFnZUNvbXByZXNzKFxuICAgICAgICAgICAgICAgIGZzLnJlYWRGaWxlU3luYyh0ZW1wSGVpY0NvbnZlcnRGaWxlKSxcbiAgICAgICAgICAgICAgICBjb21wcmVzc09wdGlvbnMhLFxuICAgICAgICAgICAgICAgICcuanBnJyxcbiAgICAgICAgICAgICAgICBjdHgubG9nXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHRyYW5zZm9ybWVkQnVmZmVyID0gYXdhaXQgaW1hZ2VDb21wcmVzcyhcbiAgICAgICAgICAgICAgICB0cmFuc2Zvcm1lZEJ1ZmZlciA/PyBmaWxlQnVmZmVyLFxuICAgICAgICAgICAgICAgIGNvbXByZXNzT3B0aW9ucyEsXG4gICAgICAgICAgICAgICAgZXh0ZW50aW9uLFxuICAgICAgICAgICAgICAgIGN0eC5sb2dcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoIXRyYW5zZm9ybWVkQnVmZmVyICYmIGNvbXByZXNzT3B0aW9ucz8uaXNSZW1vdmVFeGlmKSB7XG4gICAgICAgICAgICBjdHgubG9nLmluZm8oJ1JlbW92ZSBleGlmIGluZm8uJylcbiAgICAgICAgICAgIHRyYW5zZm9ybWVkQnVmZmVyID0gYXdhaXQgcmVtb3ZlRXhpZihmaWxlQnVmZmVyLCBleHRlbnRpb24pXG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICh0cmFuc2Zvcm1lZEJ1ZmZlcikge1xuICAgICAgICAgICAgbGV0IG5ld0V4dCA9IGNvbXByZXNzT3B0aW9ucz8uaXNDb252ZXJ0ID8gZ2V0Q29udmVydGVkRm9ybWF0KGNvbXByZXNzT3B0aW9ucywgZXh0ZW50aW9uKSA6IGV4dGVudGlvblxuICAgICAgICAgICAgbmV3RXh0ID0gbmV3RXh0LnN0YXJ0c1dpdGgoJy4nKSA/IG5ld0V4dCA6IGAuJHtuZXdFeHR9YFxuICAgICAgICAgICAgY29uc3QgdGVtcEZpbGUgPSBpdGVtSXNVcmxcbiAgICAgICAgICAgICAgPyBwYXRoLmpvaW4oXG4gICAgICAgICAgICAgICAgICB0ZW1wRmlsZVBhdGgsXG4gICAgICAgICAgICAgICAgICBgJHtcbiAgICAgICAgICAgICAgICAgICAgaW5mby5maWxlTmFtZVxuICAgICAgICAgICAgICAgICAgICAgID8gYCR7cGF0aC5iYXNlbmFtZShpbmZvLmZpbGVOYW1lLCBwYXRoLmV4dG5hbWUoaW5mby5maWxlTmFtZSkpfWBcbiAgICAgICAgICAgICAgICAgICAgICA6IG5ldyBEYXRlKCkuZ2V0VGltZSgpXG4gICAgICAgICAgICAgICAgICB9JHtuZXdFeHR9YFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgOiBwYXRoLmpvaW4odGVtcEZpbGVQYXRoLCBgJHtwYXRoLmJhc2VuYW1lKGl0ZW0sIGV4dGVudGlvbil9JHtuZXdFeHR9YClcbiAgICAgICAgICAgIGN0eC5yYXdJbnB1dFBhdGghW2luZGV4XSA9IHBhdGguam9pbihcbiAgICAgICAgICAgICAgcGF0aC5kaXJuYW1lKGl0ZW0pLFxuICAgICAgICAgICAgICBpdGVtSXNVcmwgPyBwYXRoLmJhc2VuYW1lKHRlbXBGaWxlKSA6IGAke3BhdGguYmFzZW5hbWUoaXRlbSwgZXh0ZW50aW9uKX0ke25ld0V4dH1gXG4gICAgICAgICAgICApXG4gICAgICAgICAgICBmcy53cml0ZUZpbGVTeW5jKHRlbXBGaWxlLCB0cmFuc2Zvcm1lZEJ1ZmZlcilcbiAgICAgICAgICAgIGN0eC5pbnB1dFtpbmRleF0gPSB0ZW1wRmlsZVxuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgIClcbiAgICB9IGVsc2Uge1xuICAgICAgZm9yIChjb25zdCBpdGVtIG9mIGN0eC5pbnB1dCkge1xuICAgICAgICBjdHgucmF3SW5wdXRQYXRoIS5wdXNoKGl0ZW0pXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBjdHhcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgYnVpbGRJblJlbmFtZShjdHg6IElQaWNHbyk6IFByb21pc2U8SVBpY0dvPiB7XG4gICAgY29uc3QgcmVuYW1lQ29uZmlnID0gY3R4LmdldENvbmZpZzxhbnk+KCdidWlsZEluLnJlbmFtZScpIHx8IHt9XG4gICAgaWYgKHJlbmFtZUNvbmZpZy5lbmFibGUpIHtcbiAgICAgIGNvbnN0IGZvcm1hdCA9IHJlbmFtZUNvbmZpZy5mb3JtYXQgfHwgJ3tmaWxlbmFtZX0nXG4gICAgICBjdHgub3V0cHV0ID0gY3R4Lm91dHB1dC5tYXAoKGl0ZW06IElJbWdJbmZvLCBpbmRleDogbnVtYmVyKSA9PiB7XG4gICAgICAgIGxldCBmaWxlTmFtZSA9IGl0ZW0uZmlsZU5hbWVcbiAgICAgICAgaWYgKGZvcm1hdCkge1xuICAgICAgICAgIGZpbGVOYW1lID0gcmVuYW1lRmlsZU5hbWVXaXRoQ3VzdG9tU3RyaW5nKFxuICAgICAgICAgICAgY3R4LnJhd0lucHV0UGF0aCFbaW5kZXhdLFxuICAgICAgICAgICAgZm9ybWF0LFxuICAgICAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICAgICAgaXRlbS5iYXNlNjRJbWFnZSA/IGl0ZW0uYmFzZTY0SW1hZ2UgOiBpdGVtLmJ1ZmZlclxuICAgICAgICAgIClcbiAgICAgICAgICBmaWxlTmFtZSA9IGZpbGVOYW1lLnJlcGxhY2UoL1xcLysvZywgJy8nKVxuICAgICAgICAgIGlmIChmaWxlTmFtZS5zbGljZSgtMSkgPT09ICcvJykge1xuICAgICAgICAgICAgZmlsZU5hbWUgPSBmaWxlTmFtZSArIGluZGV4LnRvU3RyaW5nKClcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaXRlbS5maWxlTmFtZSA9IGZpbGVOYW1lXG4gICAgICAgIHJldHVybiBpdGVtXG4gICAgICB9KVxuICAgIH1cbiAgICByZXR1cm4gY3R4XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGJlZm9yZVRyYW5zZm9ybShjdHg6IElQaWNHbyk6IFByb21pc2U8SVBpY0dvPiB7XG4gICAgYXdhaXQgdGhpcy5oYW5kbGVQbHVnaW5zKGN0eC5oZWxwZXIuYmVmb3JlVHJhbnNmb3JtUGx1Z2lucywgY3R4KVxuICAgIHJldHVybiBjdHhcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZG9UcmFuc2Zvcm0oY3R4OiBJUGljR28pOiBQcm9taXNlPElQaWNHbz4ge1xuICAgIGN0eC5lbWl0KElCdWlsZEluRXZlbnQuVVBMT0FEX1BST0dSRVNTLCAzMClcbiAgICBjb25zdCB0eXBlID0gY3R4LmdldENvbmZpZzxVbmRlZmluYWJsZTxzdHJpbmc+PigncGljQmVkLnRyYW5zZm9ybWVyJykgfHwgJ3BhdGgnXG4gICAgbGV0IGN1cnJlbnRUcmFuc2Zvcm1lciA9IHR5cGVcbiAgICBsZXQgdHJhbnNmb3JtZXIgPSBjdHguaGVscGVyLnRyYW5zZm9ybWVyLmdldCh0eXBlKVxuICAgIGlmICghdHJhbnNmb3JtZXIpIHtcbiAgICAgIHRyYW5zZm9ybWVyID0gY3R4LmhlbHBlci50cmFuc2Zvcm1lci5nZXQoJ3BhdGgnKVxuICAgICAgY3VycmVudFRyYW5zZm9ybWVyID0gJ3BhdGgnXG4gICAgICBjdHgubG9nLndhcm4oYENhbid0IGZpbmQgdHJhbnNmb3JtZXIgLSAke3R5cGV9LCBzd2l0Y2ggdG8gZGVmYXVsdCB0cmFuc2Zvcm1lciAtIHBhdGhgKVxuICAgIH1cbiAgICBjdHgubG9nLmluZm8oYFRyYW5zZm9ybWluZy4uLiBDdXJyZW50IHRyYW5zZm9ybWVyIGlzIFske2N1cnJlbnRUcmFuc2Zvcm1lcn1dYClcbiAgICBhd2FpdCB0cmFuc2Zvcm1lcj8uaGFuZGxlKGN0eClcbiAgICByZXR1cm4gY3R4XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGJlZm9yZVVwbG9hZChjdHg6IElQaWNHbyk6IFByb21pc2U8SVBpY0dvPiB7XG4gICAgY3R4LmVtaXQoSUJ1aWxkSW5FdmVudC5VUExPQURfUFJPR1JFU1MsIDYwKVxuICAgIGN0eC5sb2cuaW5mbygnQmVmb3JlIHVwbG9hZCcpXG4gICAgY3R4LmVtaXQoSUJ1aWxkSW5FdmVudC5CRUZPUkVfVVBMT0FELCBjdHgpXG4gICAgYXdhaXQgdGhpcy5oYW5kbGVQbHVnaW5zKGN0eC5oZWxwZXIuYmVmb3JlVXBsb2FkUGx1Z2lucywgY3R4KVxuICAgIHJldHVybiBjdHhcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZG9VcGxvYWQoY3R4OiBJUGljR28pOiBQcm9taXNlPElQaWNHbz4ge1xuICAgIGxldCB0eXBlID1cbiAgICAgIGN0eC5nZXRDb25maWc8VW5kZWZpbmFibGU8c3RyaW5nPj4oJ3BpY0JlZC51cGxvYWRlcicpIHx8XG4gICAgICBjdHguZ2V0Q29uZmlnPFVuZGVmaW5hYmxlPHN0cmluZz4+KCdwaWNCZWQuY3VycmVudCcpIHx8XG4gICAgICAnc21tcydcbiAgICBsZXQgdXBsb2FkZXIgPSBjdHguaGVscGVyLnVwbG9hZGVyLmdldCh0eXBlKVxuICAgIGxldCBjdXJyZW50VHJhbnNmb3JtZXIgPSB0eXBlXG4gICAgaWYgKCF1cGxvYWRlcikge1xuICAgICAgY3R4LmxvZy53YXJuKGBDYW4ndCBmaW5kIHVwbG9hZGVyIC0gJHt0eXBlfSwgc3dpdGNoIHRvIGRlZmF1bHQgdXBsb2FkZXIgLSBzbW1zYClcbiAgICAgIHR5cGUgPSAnc21tcydcbiAgICAgIGN1cnJlbnRUcmFuc2Zvcm1lciA9ICdzbW1zJ1xuICAgICAgdXBsb2FkZXIgPSBjdHguaGVscGVyLnVwbG9hZGVyLmdldCgnc21tcycpXG4gICAgfVxuICAgIGN0eC5sb2cuaW5mbyhgVXBsb2FkaW5nLi4uIEN1cnJlbnQgdXBsb2FkZXIgaXMgWyR7Y3VycmVudFRyYW5zZm9ybWVyfV1gKVxuICAgIGF3YWl0IHVwbG9hZGVyPy5oYW5kbGUoY3R4KVxuICAgIGZvciAoY29uc3Qgb3V0cHV0SW1nIG9mIGN0eC5vdXRwdXQpIHtcbiAgICAgIG91dHB1dEltZy50eXBlID0gdHlwZVxuICAgIH1cbiAgICByZXR1cm4gY3R4XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGFmdGVyVXBsb2FkKGN0eDogSVBpY0dvKTogUHJvbWlzZTxJUGljR28+IHtcbiAgICBjdHguZW1pdChJQnVpbGRJbkV2ZW50LkFGVEVSX1VQTE9BRCwgY3R4KVxuICAgIGN0eC5lbWl0KElCdWlsZEluRXZlbnQuVVBMT0FEX1BST0dSRVNTLCAxMDApXG4gICAgYXdhaXQgdGhpcy5oYW5kbGVQbHVnaW5zKGN0eC5oZWxwZXIuYWZ0ZXJVcGxvYWRQbHVnaW5zLCBjdHgpXG4gICAgbGV0IG1zZyA9ICcnXG4gICAgY29uc3QgbGVuZ3RoID0gY3R4Lm91dHB1dC5sZW5ndGhcbiAgICBjb25zdCBpc0VuY29kZU91dHB1dFVSTCA9IGN0eC5nZXRDb25maWc8VW5kZWZpbmFibGU8Ym9vbGVhbj4+KCdzZXR0aW5ncy5lbmNvZGVPdXRwdXRVUkwnKSA9PT0gdHJ1ZVxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmICh0eXBlb2YgY3R4Lm91dHB1dFtpXS5pbWdVcmwgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIG1zZyArPSBpc0VuY29kZU91dHB1dFVSTCA/IGhhbmRsZVVybEVuY29kZShjdHgub3V0cHV0W2ldLmltZ1VybCEpIDogY3R4Lm91dHB1dFtpXS5pbWdVcmwhXG4gICAgICAgIGlmIChpICE9PSBsZW5ndGggLSAxKSB7XG4gICAgICAgICAgbXNnICs9ICdcXG4nXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGRlbGV0ZSBjdHgub3V0cHV0W2ldLmJhc2U2NEltYWdlXG4gICAgICBkZWxldGUgY3R4Lm91dHB1dFtpXS5idWZmZXJcbiAgICB9XG4gICAgY3R4LmVtaXQoSUJ1aWxkSW5FdmVudC5GSU5JU0hFRCwgY3R4KVxuICAgIGN0eC5sb2cuc3VjY2VzcyhgXFxuJHttc2d9YClcbiAgICByZXR1cm4gY3R4XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGhhbmRsZVBsdWdpbnMobGlmZUN5Y2xlUGx1Z2luczogSUxpZmVjeWNsZVBsdWdpbnMsIGN0eDogSVBpY0dvKTogUHJvbWlzZTxJUGljR28+IHtcbiAgICBjb25zdCBwbHVnaW5zID0gbGlmZUN5Y2xlUGx1Z2lucy5nZXRMaXN0KClcbiAgICBjb25zdCBwbHVnaW5OYW1lcyA9IGxpZmVDeWNsZVBsdWdpbnMuZ2V0SWRMaXN0KClcbiAgICBjb25zdCBsaWZlQ3ljbGVOYW1lID0gbGlmZUN5Y2xlUGx1Z2lucy5nZXROYW1lKClcbiAgICBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgIHBsdWdpbnMubWFwKGFzeW5jIChwbHVnaW46IElQbHVnaW4sIGluZGV4OiBudW1iZXIpID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjdHgubG9nLmluZm8oYCR7bGlmZUN5Y2xlTmFtZX06ICR7cGx1Z2luTmFtZXNbaW5kZXhdfSBydW5uaW5nYClcbiAgICAgICAgICBhd2FpdCBwbHVnaW4uaGFuZGxlKGN0eClcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIGN0eC5sb2cuZXJyb3IoYCR7bGlmZUN5Y2xlTmFtZX06ICR7cGx1Z2luTmFtZXNbaW5kZXhdfSBlcnJvcmApXG4gICAgICAgICAgdGhyb3cgZVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIClcbiAgICByZXR1cm4gY3R4XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgTGlmZWN5Y2xlXG4iLCJpbXBvcnQgeyBJUGljR28gfSBmcm9tICcuLi90eXBlcydcblxuLyoqXG4gKiBjcmVhdGUgYW4gdW5pcXVlIGNvbnRleHQgZm9yIGVhY2ggdXBsb2FkIHByb2Nlc3NcbiAqIEBwYXJhbSBjdHhcbiAqL1xuZXhwb3J0IGNvbnN0IGNyZWF0ZUNvbnRleHQgPSAoY3R4OiBJUGljR28pOiBJUGljR28gPT4ge1xuICByZXR1cm4ge1xuICAgIGNvbmZpZ1BhdGg6IGN0eC5jb25maWdQYXRoLFxuICAgIGJhc2VEaXI6IGN0eC5iYXNlRGlyLFxuICAgIGxvZzogY3R4LmxvZyxcbiAgICBjbWQ6IGN0eC5jbWQsXG4gICAgb3V0cHV0OiBbXSxcbiAgICBpbnB1dDogW10sXG4gICAgcmF3SW5wdXQ6IFtdLFxuICAgIHByb2Nlc3NlZElucHV0OiBbXSxcbiAgICBwbHVnaW5Mb2FkZXI6IGN0eC5wbHVnaW5Mb2FkZXIsXG4gICAgcGx1Z2luSGFuZGxlcjogY3R4LnBsdWdpbkhhbmRsZXIsXG4gICAgUmVxdWVzdDogY3R4LlJlcXVlc3QsXG4gICAgaGVscGVyOiBjdHguaGVscGVyLFxuICAgIFZFUlNJT046IGN0eC5WRVJTSU9OLFxuICAgIEdVSV9WRVJTSU9OOiBjdHguR1VJX1ZFUlNJT04sXG4gICAgcmVxdWVzdDogY3R4LnJlcXVlc3QsXG4gICAgaTE4bjogY3R4LmkxOG4sXG4gICAgZ2V0Q29uZmlnOiBjdHguZ2V0Q29uZmlnLmJpbmQoY3R4KSxcbiAgICBzYXZlQ29uZmlnOiBjdHguc2F2ZUNvbmZpZy5iaW5kKGN0eCksXG4gICAgcmVtb3ZlQ29uZmlnOiBjdHgucmVtb3ZlQ29uZmlnLmJpbmQoY3R4KSxcbiAgICBzZXRDb25maWc6IGN0eC5zZXRDb25maWcuYmluZChjdHgpLFxuICAgIHVuc2V0Q29uZmlnOiBjdHgudW5zZXRDb25maWcuYmluZChjdHgpLFxuICAgIHVwbG9hZDogY3R4LnVwbG9hZC5iaW5kKGN0eCksXG4gICAgdXBsb2FkUmV0dXJuQ3R4OiBjdHgudXBsb2FkUmV0dXJuQ3R4LmJpbmQoY3R4KSxcbiAgICBhZGRMaXN0ZW5lcjogY3R4LmFkZExpc3RlbmVyLmJpbmQoY3R4KSxcbiAgICBvbjogY3R4Lm9uLmJpbmQoY3R4KSxcbiAgICBvbmNlOiBjdHgub25jZS5iaW5kKGN0eCksXG4gICAgcmVtb3ZlTGlzdGVuZXI6IGN0eC5yZW1vdmVMaXN0ZW5lci5iaW5kKGN0eCksXG4gICAgb2ZmOiBjdHgub2ZmLmJpbmQoY3R4KSxcbiAgICByZW1vdmVBbGxMaXN0ZW5lcnM6IGN0eC5yZW1vdmVBbGxMaXN0ZW5lcnMuYmluZChjdHgpLFxuICAgIHNldE1heExpc3RlbmVyczogY3R4LnNldE1heExpc3RlbmVycy5iaW5kKGN0eCksXG4gICAgZ2V0TWF4TGlzdGVuZXJzOiBjdHguZ2V0TWF4TGlzdGVuZXJzLmJpbmQoY3R4KSxcbiAgICBsaXN0ZW5lcnM6IGN0eC5saXN0ZW5lcnMuYmluZChjdHgpLFxuICAgIHJhd0xpc3RlbmVyczogY3R4LnJhd0xpc3RlbmVycy5iaW5kKGN0eCksXG4gICAgZW1pdDogY3R4LmVtaXQuYmluZChjdHgpLFxuICAgIGxpc3RlbmVyQ291bnQ6IGN0eC5saXN0ZW5lckNvdW50LmJpbmQoY3R4KSxcbiAgICBwcmVwZW5kTGlzdGVuZXI6IGN0eC5wcmVwZW5kTGlzdGVuZXIuYmluZChjdHgpLFxuICAgIHByZXBlbmRPbmNlTGlzdGVuZXI6IGN0eC5wcmVwZW5kT25jZUxpc3RlbmVyLmJpbmQoY3R4KSxcbiAgICBldmVudE5hbWVzOiBjdHguZXZlbnROYW1lcy5iaW5kKGN0eClcbiAgfVxufVxuIiwiZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdFBhdGhIZWxwZXIoe1xuICBwYXRoLFxuICBzdGFydFNsYXNoID0gZmFsc2UsXG4gIGVuZFNsYXNoID0gdHJ1ZSxcbiAgcm9vdFRvRW1wdHkgPSB0cnVlXG59OiB7XG4gIHBhdGg/OiBzdHJpbmdcbiAgc3RhcnRTbGFzaD86IGJvb2xlYW5cbiAgZW5kU2xhc2g/OiBib29sZWFuXG4gIHJvb3RUb0VtcHR5PzogYm9vbGVhblxufSk6IHN0cmluZyB7XG4gIGNvbnN0IGNsZWFuUGF0aCA9IHBhdGg/LnJlcGxhY2UoL15cXC8rfFxcLyskL2csICcnKS5yZXBsYWNlKC9cXC97Mix9L2csICcvJylcbiAgaWYgKCFjbGVhblBhdGgpIHtcbiAgICByZXR1cm4gcm9vdFRvRW1wdHkgPyAnJyA6ICcvJ1xuICB9XG4gIHJldHVybiBgJHtzdGFydFNsYXNoID8gJy8nIDogJyd9JHtjbGVhblBhdGh9JHtlbmRTbGFzaCA/ICcvJyA6ICcnfWBcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVuY29kZVBhdGgocGF0aDogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHBhdGhcbiAgICAucmVwbGFjZSgvXFwvezIsfS9nLCAnLycpXG4gICAgLnNwbGl0KCcvJylcbiAgICAubWFwKHAgPT4gZW5jb2RlVVJJQ29tcG9uZW50KHApKVxuICAgIC5qb2luKCcvJylcbn1cblxuZXhwb3J0IGNvbnN0IGJ1aWxkSW5VcGxvYWRlck5hbWVzID0ge1xuICBhZHZhbmNlZHBsaXN0OiAnYWR2YW5jZWRwbGlzdCcsXG4gIGFsaXN0cGxpc3Q6ICdhbGlzdHBsaXN0JyxcbiAgYWxpeXVuOiAnYWxpeXVuJyxcbiAgJ2F3cy1zMy1wbGlzdCc6ICdhd3MtczMtcGxpc3QnLFxuICBnaXRodWI6ICdnaXRodWInLFxuICBpbWd1cjogJ2ltZ3VyJyxcbiAgbG9jYWw6ICdsb2NhbCcsXG4gIGxza3lwbGlzdDogJ2xza3lwbGlzdCcsXG4gIHBpY2xpc3Q6ICdwaWNsaXN0JyxcbiAgcWluaXU6ICdxaW5pdScsXG4gIHNmdHBwbGlzdDogJ3NmdHBwbGlzdCcsXG4gIHNtbXM6ICdzbW1zJyxcbiAgdGN5dW46ICd0Y3l1bicsXG4gIHVweXVuOiAndXB5dW4nLFxuICB3ZWJkYXZwbGlzdDogJ3dlYmRhdnBsaXN0J1xufVxuIiwiaW1wb3J0IHsgSVBpY0dvLCBJUGx1Z2luQ29uZmlnLCBJT2xkUmVxT3B0aW9ucywgSUFkdmFuY2VkUGxpc3RDb25maWcgfSBmcm9tICcuLi8uLi90eXBlcydcbmltcG9ydCB7IElCdWlsZEluRXZlbnQgfSBmcm9tICcuLi8uLi91dGlscy9lbnVtJ1xuaW1wb3J0IHsgSUxvY2FsZXNLZXkgfSBmcm9tICcuLi8uLi9pMThuL3poLUNOJ1xuaW1wb3J0IHsgYnVpbGRJblVwbG9hZGVyTmFtZXMgfSBmcm9tICcuL3V0aWxzJ1xuXG5jb25zdCBwb3N0T3B0aW9ucyA9IChcbiAgaW1hZ2U6IEJ1ZmZlcixcbiAgZmlsZU5hbWU6IHN0cmluZyxcbiAgZW5kcG9pbnQ6IHN0cmluZyxcbiAgbWV0aG9kOiBhbnksXG4gIGhlYWRlcnM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4sXG4gIGJvZHk6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4sXG4gIGZvcm1EYXRhS2V5OiBzdHJpbmdcbik6IElPbGRSZXFPcHRpb25zID0+IHtcbiAgY29uc3QgZGVmYXVsdEhlYWRlcnMgPSB7XG4gICAgY29udGVudFR5cGU6ICdtdWx0aXBhcnQvZm9ybS1kYXRhJyxcbiAgICAnVXNlci1BZ2VudCc6ICdQaWNMaXN0J1xuICB9XG4gIHJldHVybiB7XG4gICAgbWV0aG9kOiBtZXRob2QudG9VcHBlckNhc2UoKSxcbiAgICB1cmw6IGVuZHBvaW50LFxuICAgIGhlYWRlcnM6IHtcbiAgICAgIC4uLmRlZmF1bHRIZWFkZXJzLFxuICAgICAgLi4uaGVhZGVyc1xuICAgIH0sXG4gICAgZm9ybURhdGE6IHtcbiAgICAgIFtmb3JtRGF0YUtleV06IHtcbiAgICAgICAgdmFsdWU6IGltYWdlLFxuICAgICAgICBvcHRpb25zOiB7XG4gICAgICAgICAgZmlsZW5hbWU6IGZpbGVOYW1lXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICAuLi5ib2R5XG4gICAgfSxcbiAgICBqc29uOiB0cnVlXG4gIH1cbn1cblxuY29uc3QgaGFuZGxlID0gYXN5bmMgKGN0eDogSVBpY0dvKTogUHJvbWlzZTxJUGljR28+ID0+IHtcbiAgY29uc3QgYWR2YW5jZWRwbGlzdENvbmZpZyA9IGN0eC5nZXRDb25maWc8SUFkdmFuY2VkUGxpc3RDb25maWc+KCdwaWNCZWQuYWR2YW5jZWRwbGlzdCcpXG4gIGlmICghYWR2YW5jZWRwbGlzdENvbmZpZykgdGhyb3cgbmV3IEVycm9yKCdDYW4gbm90IGZpbmQgYWR2YW5jZWRwbGlzdCBjb25maWcnKVxuXG4gIGNvbnN0IGltZ0xpc3QgPSBjdHgub3V0cHV0XG4gIGZvciAoY29uc3QgaW1nIG9mIGltZ0xpc3QpIHtcbiAgICBpZiAoaW1nLmZpbGVOYW1lICYmIGltZy5idWZmZXIpIHtcbiAgICAgIGxldCBpbWFnZSA9IGltZy5idWZmZXJcbiAgICAgIGlmICghaW1hZ2UgJiYgaW1nLmJhc2U2NEltYWdlKSB7XG4gICAgICAgIGltYWdlID0gQnVmZmVyLmZyb20oaW1nLmJhc2U2NEltYWdlLCAnYmFzZTY0JylcbiAgICAgIH1cbiAgICAgIGNvbnN0IHBvc3RDb25maWcgPSBwb3N0T3B0aW9ucyhcbiAgICAgICAgaW1hZ2UsXG4gICAgICAgIGltZy5maWxlTmFtZSxcbiAgICAgICAgYWR2YW5jZWRwbGlzdENvbmZpZy5lbmRwb2ludCxcbiAgICAgICAgYWR2YW5jZWRwbGlzdENvbmZpZy5tZXRob2QsXG4gICAgICAgIEpTT04ucGFyc2UoYWR2YW5jZWRwbGlzdENvbmZpZy5oZWFkZXJzIHx8ICd7fScpLFxuICAgICAgICBKU09OLnBhcnNlKGFkdmFuY2VkcGxpc3RDb25maWcuYm9keSB8fCAne30nKSxcbiAgICAgICAgYWR2YW5jZWRwbGlzdENvbmZpZy5mb3JtRGF0YUtleSB8fCAnZmlsZSdcbiAgICAgIClcblxuICAgICAgbGV0IGJvZHkgPSAoYXdhaXQgY3R4LnJlcXVlc3QocG9zdENvbmZpZykpIGFzIGFueVxuICAgICAgYm9keSA9IHR5cGVvZiBib2R5ID09PSAnc3RyaW5nJyA/IEpTT04ucGFyc2UoYm9keSkgOiBib2R5XG4gICAgICBsZXQgaW1hZ2VVcmwgPSBib2R5XG4gICAgICBjb25zdCByZXNEYXRhUGF0aCA9IGFkdmFuY2VkcGxpc3RDb25maWcucmVzRGF0YVBhdGggfHwgJ2RhdGEudXJsJ1xuICAgICAgZm9yIChjb25zdCBrZXkgb2YgcmVzRGF0YVBhdGguc3BsaXQoJy4nKSkge1xuICAgICAgICBpZiAoaW1hZ2VVcmwgJiYgdHlwZW9mIGltYWdlVXJsID09PSAnb2JqZWN0JyAmJiBrZXkgaW4gaW1hZ2VVcmwpIHtcbiAgICAgICAgICBpbWFnZVVybCA9IGltYWdlVXJsW2tleV1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpbWFnZVVybCA9IHVuZGVmaW5lZFxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChpbWFnZVVybCAmJiB0eXBlb2YgaW1hZ2VVcmwgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGRlbGV0ZSBpbWcuYmFzZTY0SW1hZ2VcbiAgICAgICAgZGVsZXRlIGltZy5idWZmZXJcbiAgICAgICAgaWYgKGFkdmFuY2VkcGxpc3RDb25maWcuY3VzdG9tUHJlZml4KSB7XG4gICAgICAgICAgaW1nLmltZ1VybCA9IGFkdmFuY2VkcGxpc3RDb25maWcuY3VzdG9tUHJlZml4ICsgaW1hZ2VVcmxcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpbWcuaW1nVXJsID0gaW1hZ2VVcmxcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY3R4LmVtaXQoSUJ1aWxkSW5FdmVudC5OT1RJRklDQVRJT04sIHtcbiAgICAgICAgICB0aXRsZTogY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignVVBMT0FEX0ZBSUxFRCcpLFxuICAgICAgICAgIGJvZHk6IGJvZHkubWVzc2FnZVxuICAgICAgICB9KVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYm9keS5tZXNzYWdlKVxuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gY3R4XG59XG5cbmNvbnN0IGNvbmZpZyA9IChjdHg6IElQaWNHbyk6IElQbHVnaW5Db25maWdbXSA9PiB7XG4gIGNvbnN0IHVzZXJDb25maWcgPSBjdHguZ2V0Q29uZmlnPElBZHZhbmNlZFBsaXN0Q29uZmlnPigncGljQmVkLmFkdmFuY2VkcGxpc3QnKSB8fCB7fVxuICBjb25zdCBjb25maWc6IElQbHVnaW5Db25maWdbXSA9IFtcbiAgICB7XG4gICAgICBuYW1lOiAnZW5kcG9pbnQnLFxuICAgICAgdHlwZTogJ2lucHV0JyxcbiAgICAgIGdldCBwcmVmaXgoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQURWQU5DRURQTElTVF9FTkRQT0lOVCcpXG4gICAgICB9LFxuICAgICAgZ2V0IGFsaWFzKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FEVkFOQ0VEUExJU1RfRU5EUE9JTlQnKVxuICAgICAgfSxcbiAgICAgIGdldCBtZXNzYWdlKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FEVkFOQ0VEUExJU1RfTUVTU0FHRV9FTkRQT0lOVCcpXG4gICAgICB9LFxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5lbmRwb2ludCB8fCAnJyxcbiAgICAgIHJlcXVpcmVkOiB0cnVlXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAnbWV0aG9kJyxcbiAgICAgIHR5cGU6ICdsaXN0JyxcbiAgICAgIGNob2ljZXM6IFsnUE9TVCcsICdQVVQnLCAnR0VUJ10sXG4gICAgICBnZXQgcHJlZml4KCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FEVkFOQ0VEUExJU1RfTUVUSE9EJylcbiAgICAgIH0sXG4gICAgICBnZXQgYWxpYXMoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQURWQU5DRURQTElTVF9NRVRIT0QnKVxuICAgICAgfSxcbiAgICAgIGdldCBtZXNzYWdlKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FEVkFOQ0VEUExJU1RfTUVTU0FHRV9NRVRIT0QnKVxuICAgICAgfSxcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcubWV0aG9kIHx8ICdQT1NUJyxcbiAgICAgIHJlcXVpcmVkOiBmYWxzZVxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ2Zvcm1EYXRhS2V5JyxcbiAgICAgIHR5cGU6ICdpbnB1dCcsXG4gICAgICBnZXQgcHJlZml4KCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FEVkFOQ0VEUExJU1RfRk9STV9EQVRBX0tFWScpXG4gICAgICB9LFxuICAgICAgZ2V0IGFsaWFzKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FEVkFOQ0VEUExJU1RfRk9STV9EQVRBX0tFWScpXG4gICAgICB9LFxuICAgICAgZ2V0IG1lc3NhZ2UoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQURWQU5DRURQTElTVF9NRVNTQUdFX0ZPUk1fREFUQV9LRVknKVxuICAgICAgfSxcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuZm9ybURhdGFLZXkgfHwgJ2ZpbGUnLFxuICAgICAgcmVxdWlyZWQ6IGZhbHNlXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAnaGVhZGVycycsXG4gICAgICB0eXBlOiAnaW5wdXQnLFxuICAgICAgZ2V0IHByZWZpeCgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BRFZBTkNFRFBMSVNUX0hFQURFUlMnKVxuICAgICAgfSxcbiAgICAgIGdldCBhbGlhcygpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BRFZBTkNFRFBMSVNUX0hFQURFUlMnKVxuICAgICAgfSxcbiAgICAgIGdldCBtZXNzYWdlKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FEVkFOQ0VEUExJU1RfTUVTU0FHRV9IRUFERVJTJylcbiAgICAgIH0sXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLmhlYWRlcnMgfHwgJ3t9JyxcbiAgICAgIHJlcXVpcmVkOiBmYWxzZVxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ2JvZHknLFxuICAgICAgdHlwZTogJ2lucHV0JyxcbiAgICAgIGdldCBwcmVmaXgoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQURWQU5DRURQTElTVF9CT0RZJylcbiAgICAgIH0sXG4gICAgICBnZXQgYWxpYXMoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQURWQU5DRURQTElTVF9CT0RZJylcbiAgICAgIH0sXG4gICAgICBnZXQgbWVzc2FnZSgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BRFZBTkNFRFBMSVNUX01FU1NBR0VfQk9EWScpXG4gICAgICB9LFxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5ib2R5IHx8ICd7fScsXG4gICAgICByZXF1aXJlZDogZmFsc2VcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdjdXN0b21QcmVmaXgnLFxuICAgICAgdHlwZTogJ2lucHV0JyxcbiAgICAgIGdldCBwcmVmaXgoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQURWQU5DRURQTElTVF9DVVNUT01fUFJFRklYJylcbiAgICAgIH0sXG4gICAgICBnZXQgYWxpYXMoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQURWQU5DRURQTElTVF9DVVNUT01fUFJFRklYJylcbiAgICAgIH0sXG4gICAgICBnZXQgbWVzc2FnZSgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BRFZBTkNFRFBMSVNUX01FU1NBR0VfQ1VTVE9NX1BSRUZJWCcpXG4gICAgICB9LFxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5jdXN0b21QcmVmaXggfHwgJycsXG4gICAgICByZXF1aXJlZDogZmFsc2VcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdyZXNEYXRhUGF0aCcsXG4gICAgICB0eXBlOiAnaW5wdXQnLFxuICAgICAgZ2V0IHByZWZpeCgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BRFZBTkNFRFBMSVNUX1JFU19EQVRBX1BBVEgnKVxuICAgICAgfSxcbiAgICAgIGdldCBhbGlhcygpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BRFZBTkNFRFBMSVNUX1JFU19EQVRBX1BBVEgnKVxuICAgICAgfSxcbiAgICAgIGdldCBtZXNzYWdlKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FEVkFOQ0VEUExJU1RfTUVTU0FHRV9SRVNfREFUQV9QQVRIJylcbiAgICAgIH0sXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLnJlc0RhdGFQYXRoIHx8ICdkYXRhLnVybCcsXG4gICAgICByZXF1aXJlZDogZmFsc2VcbiAgICB9XG4gIF1cbiAgcmV0dXJuIGNvbmZpZ1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiByZWdpc3RlcihjdHg6IElQaWNHbyk6IHZvaWQge1xuICBjdHguaGVscGVyLnVwbG9hZGVyLnJlZ2lzdGVyKGJ1aWxkSW5VcGxvYWRlck5hbWVzLmFkdmFuY2VkcGxpc3QsIHtcbiAgICBnZXQgbmFtZSgpIHtcbiAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQURWQU5DRURQTElTVCcpXG4gICAgfSxcbiAgICBoYW5kbGUsXG4gICAgY29uZmlnXG4gIH0pXG59XG4iLCJpbXBvcnQgYXhpb3MgZnJvbSAnYXhpb3MnXG5pbXBvcnQgeyBJUGljR28sIElQbHVnaW5Db25maWcsIElBbGlzdENvbmZpZywgSU9sZFJlcU9wdGlvbnMsIElGdWxsUmVzcG9uc2UgfSBmcm9tICcuLi8uLi90eXBlcydcbmltcG9ydCB7IElCdWlsZEluRXZlbnQgfSBmcm9tICcuLi8uLi91dGlscy9lbnVtJ1xuaW1wb3J0IHsgSUxvY2FsZXNLZXkgfSBmcm9tICcuLi8uLi9pMThuL3poLUNOJ1xuaW1wb3J0IHsgYnVpbGRJblVwbG9hZGVyTmFtZXMsIGVuY29kZVBhdGgsIGZvcm1hdFBhdGhIZWxwZXIgfSBmcm9tICcuL3V0aWxzJ1xuaW1wb3J0IHBhdGggZnJvbSAncGF0aCdcblxuaW50ZXJmYWNlIElBbGlzdFRva2VuU3RvcmUge1xuICB0b2tlbjogc3RyaW5nXG4gIHJlZnJlc2hlZEF0OiBudW1iZXJcbn1cblxuY29uc3QgZ2V0QWxpc3RUb2tlbiA9IGFzeW5jIChjdHg6IElQaWNHbywgdXJsOiBzdHJpbmcsIHVzZXJuYW1lOiBzdHJpbmcsIHBhc3N3b3JkOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4gPT4ge1xuICBjb25zdCB0b2tlblN0b3JlID0gY3R4LmdldENvbmZpZzxJQWxpc3RUb2tlblN0b3JlPigncGljZ28tcGx1Z2luLWJ1aWxkaW4tYWxpc3RwbGlzdCcpXG4gIGlmICh0b2tlblN0b3JlICYmIHRva2VuU3RvcmUucmVmcmVzaGVkQXQgJiYgRGF0ZS5ub3coKSAtIHRva2VuU3RvcmUucmVmcmVzaGVkQXQgPCAzNjAwMDAwICYmIHRva2VuU3RvcmUudG9rZW4pIHtcbiAgICByZXR1cm4gdG9rZW5TdG9yZS50b2tlblxuICB9XG4gIGNvbnN0IHJlcyA9IGF3YWl0IGF4aW9zLnBvc3QoYCR7dXJsfS9hcGkvYXV0aC9sb2dpbmAsIHtcbiAgICB1c2VybmFtZSxcbiAgICBwYXNzd29yZFxuICB9KVxuICBpZiAocmVzLmRhdGEuY29kZSA9PT0gMjAwICYmIHJlcy5kYXRhLm1lc3NhZ2UgPT09ICdzdWNjZXNzJykge1xuICAgIGNvbnN0IHRva2VuID0gcmVzLmRhdGEuZGF0YS50b2tlblxuICAgIGN0eC5zYXZlQ29uZmlnKHtcbiAgICAgICdwaWNnby1wbHVnaW4tYnVpbGRpbi1hbGlzdHBsaXN0Jzoge1xuICAgICAgICB0b2tlbixcbiAgICAgICAgcmVmcmVzaGVkQXQ6IERhdGUubm93KClcbiAgICAgIH1cbiAgICB9KVxuICAgIHJldHVybiB0b2tlblxuICB9XG4gIHRocm93IG5ldyBFcnJvcignR2V0IHRva2VuIGZhaWxlZCcpXG59XG5cbmNvbnN0IHBvc3RPcHRpb25zID0gKHVybDogc3RyaW5nLCB0b2tlbjogc3RyaW5nLCBmaWxlTmFtZTogc3RyaW5nLCBmaWxlUGF0aDogc3RyaW5nLCBpbWFnZTogQnVmZmVyKTogSU9sZFJlcU9wdGlvbnMgPT4ge1xuICByZXR1cm4ge1xuICAgIG1ldGhvZDogJ1BVVCcsXG4gICAgdXJsOiBgJHt1cmx9L2FwaS9mcy9mb3JtYCxcbiAgICBoZWFkZXJzOiB7XG4gICAgICBjb250ZW50VHlwZTogJ211bHRpcGFydC9mb3JtLWRhdGEnLFxuICAgICAgJ1VzZXItQWdlbnQnOiAnUGljTGlzdCcsXG4gICAgICBBdXRob3JpemF0aW9uOiB0b2tlbixcbiAgICAgICdGaWxlLVBhdGgnOiBlbmNvZGVVUklDb21wb25lbnQoZmlsZVBhdGgpXG4gICAgfSxcbiAgICBmb3JtRGF0YToge1xuICAgICAgZmlsZToge1xuICAgICAgICB2YWx1ZTogaW1hZ2UsXG4gICAgICAgIG9wdGlvbnM6IHtcbiAgICAgICAgICBmaWxlbmFtZTogZmlsZU5hbWVcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gICAgcmVzb2x2ZVdpdGhGdWxsUmVzcG9uc2U6IHRydWVcbiAgfVxufVxuXG5jb25zdCBoYW5kbGVSZXNFcnJvciA9IChjdHg6IElQaWNHbywgcmVzOiBJRnVsbFJlc3BvbnNlKTogdm9pZCA9PiB7XG4gIGlmIChyZXMuc3RhdHVzQ29kZSAhPT0gMjAwIHx8IHJlcy5ib2R5LmNvZGUgIT09IDIwMCB8fCByZXMuYm9keS5tZXNzYWdlICE9PSAnc3VjY2VzcycpIHtcbiAgICBjdHguZW1pdChJQnVpbGRJbkV2ZW50Lk5PVElGSUNBVElPTiwge1xuICAgICAgdGl0bGU6IGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1VQTE9BRF9GQUlMRUQnKSxcbiAgICAgIGJvZHk6IGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0NIRUNLX1NFVFRJTkdTX0FORF9ORVRXT1JLJyksXG4gICAgICB0ZXh0OiByZXMuYm9keS5tZXNzYWdlXG4gICAgfSlcbiAgICB0aHJvdyBuZXcgRXJyb3IocmVzLmJvZHkubWVzc2FnZSlcbiAgfVxufVxuXG5jb25zdCBleHRyYWN0Q29uZmlnID0gKGNvbmZpZzogSUFsaXN0Q29uZmlnKSA9PiB7XG4gIGNvbnN0IHsgdXJsLCB0b2tlbiwgdXNlcm5hbWUsIHBhc3N3b3JkLCB1cGxvYWRQYXRoLCB3ZWJQYXRoLCBjdXN0b21VcmwgfSA9IGNvbmZpZ1xuICByZXR1cm4ge1xuICAgIHVybDogKHVybCB8fCAnJykucmVwbGFjZSgvXFwvJC8sICcnKSxcbiAgICB0b2tlbjogdG9rZW4gfHwgJycsXG4gICAgdXNlcm5hbWU6IHVzZXJuYW1lIHx8ICcnLFxuICAgIHBhc3N3b3JkOiBwYXNzd29yZCB8fCAnJyxcbiAgICB1cGxvYWRQYXRoOiBmb3JtYXRQYXRoSGVscGVyKHtcbiAgICAgIHBhdGg6IHVwbG9hZFBhdGggfHwgJycsXG4gICAgICBzdGFydFNsYXNoOiB0cnVlLFxuICAgICAgZW5kU2xhc2g6IHRydWUsXG4gICAgICByb290VG9FbXB0eTogZmFsc2VcbiAgICB9KSxcbiAgICB3ZWJQYXRoOiB3ZWJQYXRoXG4gICAgICA/IGZvcm1hdFBhdGhIZWxwZXIoe1xuICAgICAgICAgIHBhdGg6IHdlYlBhdGggfHwgJycsXG4gICAgICAgICAgc3RhcnRTbGFzaDogdHJ1ZSxcbiAgICAgICAgICBlbmRTbGFzaDogdHJ1ZSxcbiAgICAgICAgICByb290VG9FbXB0eTogZmFsc2VcbiAgICAgICAgfSlcbiAgICAgIDogJycsXG4gICAgY3VzdG9tVXJsOiAoY3VzdG9tVXJsIHx8ICcnKS5yZXBsYWNlKC9cXC8kLywgJycpXG4gIH1cbn1cblxuY29uc3QgaGFuZGxlID0gYXN5bmMgKGN0eDogSVBpY0dvKTogUHJvbWlzZTxJUGljR28+ID0+IHtcbiAgY29uc3QgYWxpc3RDb25maWcgPSBjdHguZ2V0Q29uZmlnPElBbGlzdENvbmZpZz4oJ3BpY0JlZC5hbGlzdHBsaXN0JylcbiAgaWYgKCFhbGlzdENvbmZpZykgdGhyb3cgbmV3IEVycm9yKCdDYW4gbm90IGZpbmQgYWxpc3QgY29uZmlnIScpXG5cbiAgY29uc3QgeyB1cmwsIHVzZXJuYW1lLCBwYXNzd29yZCwgdXBsb2FkUGF0aCwgd2ViUGF0aCwgY3VzdG9tVXJsIH0gPSBleHRyYWN0Q29uZmlnKGFsaXN0Q29uZmlnKVxuICBsZXQgeyB0b2tlbiB9ID0gZXh0cmFjdENvbmZpZyhhbGlzdENvbmZpZylcbiAgaWYgKCF0b2tlbikge1xuICAgIHRva2VuID0gYXdhaXQgZ2V0QWxpc3RUb2tlbihjdHgsIHVybCwgdXNlcm5hbWUsIHBhc3N3b3JkKVxuICB9XG4gIGlmICghdXJsIHx8ICEodG9rZW4gfHwgKHVzZXJuYW1lICYmIHBhc3N3b3JkKSkpIHRocm93IG5ldyBFcnJvcignUGxlYXNlIGNoZWNrIHlvdXIgYWxpc3QgY29uZmlnIScpXG5cbiAgY29uc3QgaW1nTGlzdCA9IGN0eC5vdXRwdXRcbiAgZm9yIChjb25zdCBpbWcgb2YgaW1nTGlzdCkge1xuICAgIGlmIChpbWcuZmlsZU5hbWUgJiYgaW1nLmJ1ZmZlcikge1xuICAgICAgbGV0IGltYWdlID0gaW1nLmJ1ZmZlclxuICAgICAgaWYgKCFpbWFnZSAmJiBpbWcuYmFzZTY0SW1hZ2UpIHtcbiAgICAgICAgaW1hZ2UgPSBCdWZmZXIuZnJvbShpbWcuYmFzZTY0SW1hZ2UsICdiYXNlNjQnKVxuICAgICAgfVxuICAgICAgY29uc3QgZnVsbFVwbG9hZFBhdGggPSBgJHt1cGxvYWRQYXRofSR7aW1nLmZpbGVOYW1lfWBcbiAgICAgIGNvbnN0IHBvc3RDb25maWcgPSBwb3N0T3B0aW9ucyh1cmwsIHRva2VuLCBpbWcuZmlsZU5hbWUsIGZ1bGxVcGxvYWRQYXRoLCBpbWFnZSlcbiAgICAgIGNvbnN0IHVwbG9hZFJlcyA9IChhd2FpdCBjdHgucmVxdWVzdChwb3N0Q29uZmlnKSkgYXMgdW5rbm93biBhcyBJRnVsbFJlc3BvbnNlXG4gICAgICBoYW5kbGVSZXNFcnJvcihjdHgsIHVwbG9hZFJlcylcbiAgICAgIGNvbnN0IHJlZnJlc2hVcmwgPSBgJHt1cmx9L2FwaS9mcy9saXN0YFxuICAgICAgY29uc3QgZ2V0SW5mb1VybCA9IGAke3VybH0vYXBpL2ZzL2dldGBcbiAgICAgIGNvbnN0IHJlZnJlc2hSZXMgPSAoYXdhaXQgY3R4LnJlcXVlc3Qoe1xuICAgICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgICAgdXJsOiByZWZyZXNoVXJsLFxuICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgQXV0aG9yaXphdGlvbjogdG9rZW4sXG4gICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJ1xuICAgICAgICB9LFxuICAgICAgICBib2R5OiB7XG4gICAgICAgICAgcGFzc3dvcmQ6ICcnLFxuICAgICAgICAgIHBhZ2U6IDEsXG4gICAgICAgICAgcGVyX3BhZ2U6IDEsXG4gICAgICAgICAgcmVmcmVzaDogdHJ1ZSxcbiAgICAgICAgICBwYXRoOiBwYXRoLmRpcm5hbWUoZnVsbFVwbG9hZFBhdGgpXG4gICAgICAgIH0sXG4gICAgICAgIHJlc29sdmVXaXRoRnVsbFJlc3BvbnNlOiB0cnVlXG4gICAgICB9KSkgYXMgdW5rbm93biBhcyBJRnVsbFJlc3BvbnNlXG4gICAgICBoYW5kbGVSZXNFcnJvcihjdHgsIHJlZnJlc2hSZXMpXG4gICAgICBjb25zdCBnZXRJbmZvUmVzID0gKGF3YWl0IGN0eC5yZXF1ZXN0KHtcbiAgICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICAgIHVybDogZ2V0SW5mb1VybCxcbiAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgIEF1dGhvcml6YXRpb246IHRva2VuLFxuICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbidcbiAgICAgICAgfSxcbiAgICAgICAgYm9keToge1xuICAgICAgICAgIHBhc3N3b3JkOiAnJyxcbiAgICAgICAgICBwYXRoOiBmdWxsVXBsb2FkUGF0aCxcbiAgICAgICAgICBwYWdlOiAxLFxuICAgICAgICAgIHBlcl9wYWdlOiAxLFxuICAgICAgICAgIHJlZnJlc2g6IHRydWVcbiAgICAgICAgfSxcbiAgICAgICAgcmVzb2x2ZVdpdGhGdWxsUmVzcG9uc2U6IHRydWVcbiAgICAgIH0pKSBhcyB1bmtub3duIGFzIElGdWxsUmVzcG9uc2VcbiAgICAgIGhhbmRsZVJlc0Vycm9yKGN0eCwgZ2V0SW5mb1JlcylcbiAgICAgIGNvbnN0IHNpZ24gPSBnZXRJbmZvUmVzLmJvZHkuZGF0YS5zaWduXG4gICAgICBjb25zdCBlbmNvZGVkUGF0aCA9IGVuY29kZVBhdGgoYCR7d2ViUGF0aCB8fCB1cGxvYWRQYXRofSR7aW1nLmZpbGVOYW1lfWApXG4gICAgICBpbWcuaW1nVXJsID0gYCR7Y3VzdG9tVXJsIHx8IHVybH0ke2N1c3RvbVVybCAmJiBjdXN0b21VcmwgIT09IHVybCA/ICcnIDogJy9kJ30ke2VuY29kZWRQYXRofWBcbiAgICAgIGltZy5pbWdVcmwgKz0gKCFjdXN0b21VcmwgfHwgY3VzdG9tVXJsID09PSB1cmwpICYmIHNpZ24gPyBgP3NpZ249JHtzaWdufWAgOiAnJ1xuICAgICAgZGVsZXRlIGltZy5iYXNlNjRJbWFnZVxuICAgICAgZGVsZXRlIGltZy5idWZmZXJcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGN0eFxufVxuXG5jb25zdCBjb25maWcgPSAoY3R4OiBJUGljR28pOiBJUGx1Z2luQ29uZmlnW10gPT4ge1xuICBjb25zdCB1c2VyQ29uZmlnID0gY3R4LmdldENvbmZpZzxJQWxpc3RDb25maWc+KCdwaWNCZWQuYWxpc3RwbGlzdCcpIHx8IHt9XG4gIGNvbnN0IGNvbmZpZzogSVBsdWdpbkNvbmZpZ1tdID0gW1xuICAgIHtcbiAgICAgIG5hbWU6ICd1cmwnLFxuICAgICAgdHlwZTogJ2lucHV0JyxcbiAgICAgIGdldCBwcmVmaXgoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQUxJU1RfVVJMJylcbiAgICAgIH0sXG4gICAgICBnZXQgYWxpYXMoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQUxJU1RfVVJMJylcbiAgICAgIH0sXG4gICAgICBnZXQgbWVzc2FnZSgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BTElTVF9NRVNTQUdFX1VSTCcpXG4gICAgICB9LFxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy51cmwgfHwgJycsXG4gICAgICByZXF1aXJlZDogdHJ1ZVxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ3Rva2VuJyxcbiAgICAgIHR5cGU6ICdpbnB1dCcsXG4gICAgICBnZXQgcHJlZml4KCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FMSVNUX1RPS0VOJylcbiAgICAgIH0sXG4gICAgICBnZXQgYWxpYXMoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQUxJU1RfVE9LRU4nKVxuICAgICAgfSxcbiAgICAgIGdldCBtZXNzYWdlKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FMSVNUX01FU1NBR0VfVE9LRU4nKVxuICAgICAgfSxcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcudG9rZW4gfHwgJycsXG4gICAgICByZXF1aXJlZDogZmFsc2VcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICd1c2VybmFtZScsXG4gICAgICB0eXBlOiAnaW5wdXQnLFxuICAgICAgZ2V0IHByZWZpeCgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BTElTVF9VU0VSTkFNRScpXG4gICAgICB9LFxuICAgICAgZ2V0IGFsaWFzKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FMSVNUX1VTRVJOQU1FJylcbiAgICAgIH0sXG4gICAgICBnZXQgbWVzc2FnZSgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BTElTVF9NRVNTQUdFX1VTRVJOQU1FJylcbiAgICAgIH0sXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLnVzZXJuYW1lIHx8ICcnLFxuICAgICAgcmVxdWlyZWQ6IGZhbHNlXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAncGFzc3dvcmQnLFxuICAgICAgdHlwZTogJ2lucHV0JyxcbiAgICAgIGdldCBwcmVmaXgoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQUxJU1RfUEFTU1dPUkQnKVxuICAgICAgfSxcbiAgICAgIGdldCBhbGlhcygpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BTElTVF9QQVNTV09SRCcpXG4gICAgICB9LFxuICAgICAgZ2V0IG1lc3NhZ2UoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQUxJU1RfTUVTU0FHRV9QQVNTV09SRCcpXG4gICAgICB9LFxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5wYXNzd29yZCB8fCAnJyxcbiAgICAgIHJlcXVpcmVkOiBmYWxzZVxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ3VwbG9hZFBhdGgnLFxuICAgICAgdHlwZTogJ2lucHV0JyxcbiAgICAgIGdldCBwcmVmaXgoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQUxJU1RfVVBMT0FEX1BBVEgnKVxuICAgICAgfSxcbiAgICAgIGdldCBhbGlhcygpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BTElTVF9VUExPQURfUEFUSCcpXG4gICAgICB9LFxuICAgICAgZ2V0IG1lc3NhZ2UoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQUxJU1RfTUVTU0FHRV9VUExPQURfUEFUSCcpXG4gICAgICB9LFxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy51cGxvYWRQYXRoIHx8ICcnLFxuICAgICAgcmVxdWlyZWQ6IGZhbHNlXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAnd2ViUGF0aCcsXG4gICAgICB0eXBlOiAnaW5wdXQnLFxuICAgICAgZ2V0IHByZWZpeCgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BTElTVF9XRUJfUEFUSCcpXG4gICAgICB9LFxuICAgICAgZ2V0IGFsaWFzKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FMSVNUX1dFQl9QQVRIJylcbiAgICAgIH0sXG4gICAgICBnZXQgbWVzc2FnZSgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BTElTVF9NRVNTQUdFX1dFQl9QQVRIJylcbiAgICAgIH0sXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLndlYlBhdGggfHwgJycsXG4gICAgICByZXF1aXJlZDogZmFsc2VcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdjdXN0b21VcmwnLFxuICAgICAgdHlwZTogJ2lucHV0JyxcbiAgICAgIGdldCBwcmVmaXgoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQUxJU1RfQ1VTVE9NVVJMJylcbiAgICAgIH0sXG4gICAgICBnZXQgYWxpYXMoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQUxJU1RfQ1VTVE9NVVJMJylcbiAgICAgIH0sXG4gICAgICBnZXQgbWVzc2FnZSgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BTElTVF9NRVNTQUdFX0NVU1RPTVVSTCcpXG4gICAgICB9LFxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5jdXN0b21VcmwgfHwgJycsXG4gICAgICByZXF1aXJlZDogZmFsc2VcbiAgICB9XG4gIF1cbiAgcmV0dXJuIGNvbmZpZ1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiByZWdpc3RlcihjdHg6IElQaWNHbyk6IHZvaWQge1xuICBjdHguaGVscGVyLnVwbG9hZGVyLnJlZ2lzdGVyKGJ1aWxkSW5VcGxvYWRlck5hbWVzLmFsaXN0cGxpc3QsIHtcbiAgICBnZXQgbmFtZSgpIHtcbiAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQUxJU1RfUExJU1QnKVxuICAgIH0sXG4gICAgaGFuZGxlLFxuICAgIGNvbmZpZ1xuICB9KVxufVxuIiwiaW1wb3J0IGNyeXB0byBmcm9tICdjcnlwdG8nXG5pbXBvcnQgeyBsb29rdXAgfSBmcm9tICdtaW1lLXR5cGVzJ1xuaW1wb3J0IHsgSUJ1aWxkSW5FdmVudCB9IGZyb20gJy4uLy4uL3V0aWxzL2VudW0nXG5pbXBvcnQgeyBJTG9jYWxlc0tleSB9IGZyb20gJy4uLy4uL2kxOG4vemgtQ04nXG5pbXBvcnQgeyBidWlsZEluVXBsb2FkZXJOYW1lcywgZW5jb2RlUGF0aCwgZm9ybWF0UGF0aEhlbHBlciB9IGZyb20gJy4vdXRpbHMnXG5pbXBvcnQgeyBJUGljR28sIElQbHVnaW5Db25maWcsIElBbGl5dW5Db25maWcsIElPbGRSZXFPcHRpb25zV2l0aEZ1bGxSZXNwb25zZSB9IGZyb20gJy4uLy4uL3R5cGVzJ1xuXG5jb25zdCBnZXRDdXJyZW50VVRDRGF0ZSA9ICgpOiBzdHJpbmcgPT4gbmV3IERhdGUoKS50b1VUQ1N0cmluZygpXG5cbi8vIGdlbmVyYXRlIE9TUyBzaWduYXR1cmVcbmNvbnN0IGdlbmVyYXRlU2lnbmF0dXJlID0gKG9wdGlvbnM6IElBbGl5dW5Db25maWcsIGZpbGVOYW1lOiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xuICBjb25zdCBkYXRlID0gZ2V0Q3VycmVudFVUQ0RhdGUoKVxuICBjb25zdCBtaW1lVHlwZSA9IGxvb2t1cChmaWxlTmFtZSkgfHwgJ2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSdcbiAgY29uc3Qgc2lnblN0cmluZyA9IGBQVVRcXG5cXG4ke21pbWVUeXBlfVxcbiR7ZGF0ZX1cXG4vJHtvcHRpb25zLmJ1Y2tldH0vJHtvcHRpb25zLnBhdGh9JHtmaWxlTmFtZX1gXG4gIGNvbnN0IHNpZ25hdHVyZSA9IGNyeXB0by5jcmVhdGVIbWFjKCdzaGExJywgb3B0aW9ucy5hY2Nlc3NLZXlTZWNyZXQpLnVwZGF0ZShzaWduU3RyaW5nKS5kaWdlc3QoJ2Jhc2U2NCcpXG4gIHJldHVybiBgT1NTICR7b3B0aW9ucy5hY2Nlc3NLZXlJZH06JHtzaWduYXR1cmV9YFxufVxuXG5jb25zdCBwb3N0T3B0aW9ucyA9IChcbiAgb3B0aW9uczogSUFsaXl1bkNvbmZpZyxcbiAgZmlsZU5hbWU6IHN0cmluZyxcbiAgc2lnbmF0dXJlOiBzdHJpbmcsXG4gIGltYWdlOiBCdWZmZXJcbik6IElPbGRSZXFPcHRpb25zV2l0aEZ1bGxSZXNwb25zZSA9PiB7XG4gIHJldHVybiB7XG4gICAgbWV0aG9kOiAnUFVUJyxcbiAgICB1cmw6IGBodHRwczovLyR7b3B0aW9ucy5idWNrZXR9LiR7b3B0aW9ucy5hcmVhfS5hbGl5dW5jcy5jb20vJHtlbmNvZGVQYXRoKGAke29wdGlvbnMucGF0aH0ke2ZpbGVOYW1lfWApfWAsXG4gICAgaGVhZGVyczoge1xuICAgICAgSG9zdDogYCR7b3B0aW9ucy5idWNrZXR9LiR7b3B0aW9ucy5hcmVhfS5hbGl5dW5jcy5jb21gLFxuICAgICAgQXV0aG9yaXphdGlvbjogc2lnbmF0dXJlLFxuICAgICAgRGF0ZTogZ2V0Q3VycmVudFVUQ0RhdGUoKSxcbiAgICAgICdDb250ZW50LVR5cGUnOiBsb29rdXAoZmlsZU5hbWUpIHx8ICdhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0nXG4gICAgfSxcbiAgICBib2R5OiBpbWFnZSxcbiAgICByZXNvbHZlV2l0aEZ1bGxSZXNwb25zZTogdHJ1ZVxuICB9XG59XG5cbmNvbnN0IGhhbmRsZSA9IGFzeW5jIChjdHg6IElQaWNHbyk6IFByb21pc2U8SVBpY0dvPiA9PiB7XG4gIGNvbnN0IGFsaVl1bk9wdGlvbnMgPSBjdHguZ2V0Q29uZmlnPElBbGl5dW5Db25maWc+KCdwaWNCZWQuYWxpeXVuJylcbiAgaWYgKCFhbGlZdW5PcHRpb25zKSB0aHJvdyBuZXcgRXJyb3IoXCJDYW4ndCBmaW5kIGFsaVl1biBPU1MgY29uZmlnXCIpXG4gIGFsaVl1bk9wdGlvbnMucGF0aCA9IGZvcm1hdFBhdGhIZWxwZXIoeyBwYXRoOiBhbGlZdW5PcHRpb25zLnBhdGggfSlcbiAgdHJ5IHtcbiAgICBjb25zdCBpbWdMaXN0ID0gY3R4Lm91dHB1dFxuICAgIGNvbnN0IGN1c3RvbVVybCA9IChhbGlZdW5PcHRpb25zLmN1c3RvbVVybCB8fCAnJykucmVwbGFjZSgvXFwvJC8sICcnKVxuICAgIGNvbnN0IHBhdGggPSBhbGlZdW5PcHRpb25zLnBhdGhcbiAgICBmb3IgKGNvbnN0IGltZyBvZiBpbWdMaXN0KSB7XG4gICAgICBpZiAoaW1nLmZpbGVOYW1lICYmIGltZy5idWZmZXIpIHtcbiAgICAgICAgY29uc3Qgc2lnbmF0dXJlID0gZ2VuZXJhdGVTaWduYXR1cmUoYWxpWXVuT3B0aW9ucywgaW1nLmZpbGVOYW1lKVxuICAgICAgICBsZXQgaW1hZ2UgPSBpbWcuYnVmZmVyXG4gICAgICAgIGlmICghaW1hZ2UgJiYgaW1nLmJhc2U2NEltYWdlKSB7XG4gICAgICAgICAgaW1hZ2UgPSBCdWZmZXIuZnJvbShpbWcuYmFzZTY0SW1hZ2UsICdiYXNlNjQnKVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSBwb3N0T3B0aW9ucyhhbGlZdW5PcHRpb25zLCBpbWcuZmlsZU5hbWUsIHNpZ25hdHVyZSwgaW1hZ2UpXG4gICAgICAgIGNvbnN0IGJvZHkgPSBhd2FpdCBjdHgucmVxdWVzdChvcHRpb25zKVxuICAgICAgICBpZiAoYm9keS5zdGF0dXNDb2RlID09PSAyMDApIHtcbiAgICAgICAgICBkZWxldGUgaW1nLmJhc2U2NEltYWdlXG4gICAgICAgICAgZGVsZXRlIGltZy5idWZmZXJcbiAgICAgICAgICBjb25zdCBvcHRpb25VcmwgPSBhbGlZdW5PcHRpb25zLm9wdGlvbnMgfHwgJydcbiAgICAgICAgICBpZiAoY3VzdG9tVXJsKSB7XG4gICAgICAgICAgICBpbWcuaW1nVXJsID0gYCR7Y3VzdG9tVXJsfS8ke2VuY29kZVBhdGgoYCR7cGF0aH0ke2ltZy5maWxlTmFtZX1gKX0ke29wdGlvblVybH1gXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGltZy5pbWdVcmwgPSBgaHR0cHM6Ly8ke2FsaVl1bk9wdGlvbnMuYnVja2V0fS4ke2FsaVl1bk9wdGlvbnMuYXJlYX0uYWxpeXVuY3MuY29tLyR7ZW5jb2RlUGF0aChgJHtwYXRofSR7aW1nLmZpbGVOYW1lfWApfSR7b3B0aW9uVXJsfWBcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVcGxvYWQgZmFpbGVkJylcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gY3R4XG4gIH0gY2F0Y2ggKGVycjogYW55KSB7XG4gICAgY3R4LmVtaXQoSUJ1aWxkSW5FdmVudC5OT1RJRklDQVRJT04sIHtcbiAgICAgIHRpdGxlOiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdVUExPQURfRkFJTEVEJyksXG4gICAgICBib2R5OiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdDSEVDS19TRVRUSU5HUycpXG4gICAgfSlcbiAgICB0aHJvdyBlcnJcbiAgfVxufVxuXG5jb25zdCBjb25maWcgPSAoY3R4OiBJUGljR28pOiBJUGx1Z2luQ29uZmlnW10gPT4ge1xuICBjb25zdCB1c2VyQ29uZmlnID0gY3R4LmdldENvbmZpZzxJQWxpeXVuQ29uZmlnPigncGljQmVkLmFsaXl1bicpIHx8IHt9XG4gIGNvbnN0IGNvbmZpZzogSVBsdWdpbkNvbmZpZ1tdID0gW1xuICAgIHtcbiAgICAgIG5hbWU6ICdhY2Nlc3NLZXlJZCcsXG4gICAgICB0eXBlOiAnaW5wdXQnLFxuICAgICAgZ2V0IHByZWZpeCgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BTElDTE9VRF9BQ0NFU1NLRVlJRCcpXG4gICAgICB9LFxuICAgICAgZ2V0IGFsaWFzKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FMSUNMT1VEX0FDQ0VTU0tFWUlEJylcbiAgICAgIH0sXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLmFjY2Vzc0tleUlkIHx8ICcnLFxuICAgICAgcmVxdWlyZWQ6IHRydWVcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdhY2Nlc3NLZXlTZWNyZXQnLFxuICAgICAgdHlwZTogJ2lucHV0JyxcbiAgICAgIGdldCBwcmVmaXgoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQUxJQ0xPVURfQUNDRVNTS0VZU0VDUkVUJylcbiAgICAgIH0sXG4gICAgICBnZXQgYWxpYXMoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQUxJQ0xPVURfQUNDRVNTS0VZU0VDUkVUJylcbiAgICAgIH0sXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLmFjY2Vzc0tleVNlY3JldCB8fCAnJyxcbiAgICAgIHJlcXVpcmVkOiB0cnVlXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAnYnVja2V0JyxcbiAgICAgIHR5cGU6ICdpbnB1dCcsXG4gICAgICBnZXQgcHJlZml4KCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FMSUNMT1VEX0JVQ0tFVCcpXG4gICAgICB9LFxuICAgICAgZ2V0IGFsaWFzKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FMSUNMT1VEX0JVQ0tFVCcpXG4gICAgICB9LFxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5idWNrZXQgfHwgJycsXG4gICAgICByZXF1aXJlZDogdHJ1ZVxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ2FyZWEnLFxuICAgICAgdHlwZTogJ2lucHV0JyxcbiAgICAgIGdldCBwcmVmaXgoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQUxJQ0xPVURfQVJFQScpXG4gICAgICB9LFxuICAgICAgZ2V0IGFsaWFzKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FMSUNMT1VEX0FSRUEnKVxuICAgICAgfSxcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuYXJlYSB8fCAnJyxcbiAgICAgIGdldCBtZXNzYWdlKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FMSUNMT1VEX01FU1NBR0VfQVJFQScpXG4gICAgICB9LFxuICAgICAgcmVxdWlyZWQ6IHRydWVcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdwYXRoJyxcbiAgICAgIHR5cGU6ICdpbnB1dCcsXG4gICAgICBnZXQgcHJlZml4KCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FMSUNMT1VEX1BBVEgnKVxuICAgICAgfSxcbiAgICAgIGdldCBhbGlhcygpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BTElDTE9VRF9QQVRIJylcbiAgICAgIH0sXG4gICAgICBnZXQgbWVzc2FnZSgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BTElDTE9VRF9NRVNTQUdFX1BBVEgnKVxuICAgICAgfSxcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcucGF0aCB8fCAnJyxcbiAgICAgIHJlcXVpcmVkOiBmYWxzZVxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ2N1c3RvbVVybCcsXG4gICAgICB0eXBlOiAnaW5wdXQnLFxuICAgICAgZ2V0IHByZWZpeCgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BTElDTE9VRF9DVVNUT01VUkwnKVxuICAgICAgfSxcbiAgICAgIGdldCBhbGlhcygpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BTElDTE9VRF9DVVNUT01VUkwnKVxuICAgICAgfSxcbiAgICAgIGdldCBtZXNzYWdlKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FMSUNMT1VEX01FU1NBR0VfQ1VTVE9NVVJMJylcbiAgICAgIH0sXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLmN1c3RvbVVybCB8fCAnJyxcbiAgICAgIHJlcXVpcmVkOiBmYWxzZVxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ29wdGlvbnMnLFxuICAgICAgdHlwZTogJ2lucHV0JyxcbiAgICAgIGdldCBwcmVmaXgoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQUxJQ0xPVURfT1BUSU9OUycpXG4gICAgICB9LFxuICAgICAgZ2V0IGFsaWFzKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FMSUNMT1VEX09QVElPTlMnKVxuICAgICAgfSxcbiAgICAgIGdldCBtZXNzYWdlKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FMSUNMT1VEX01FU1NBR0VfT1BUSU9OUycpXG4gICAgICB9LFxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5vcHRpb25zIHx8ICcnLFxuICAgICAgcmVxdWlyZWQ6IGZhbHNlXG4gICAgfVxuICBdXG4gIHJldHVybiBjb25maWdcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcmVnaXN0ZXIoY3R4OiBJUGljR28pOiB2b2lkIHtcbiAgY3R4LmhlbHBlci51cGxvYWRlci5yZWdpc3RlcihidWlsZEluVXBsb2FkZXJOYW1lcy5hbGl5dW4sIHtcbiAgICBnZXQgbmFtZSgpIHtcbiAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQUxJQ0xPVUQnKVxuICAgIH0sXG4gICAgaGFuZGxlLFxuICAgIGNvbmZpZ1xuICB9KVxufVxuIiwiaW1wb3J0IGNyeXB0byBmcm9tICdjcnlwdG8nXG5pbXBvcnQgRmlsZVR5cGUgZnJvbSAnZmlsZS10eXBlJ1xuaW1wb3J0IG1pbWUgZnJvbSAnbWltZSdcbmltcG9ydCB7IEh0dHBzUHJveHlBZ2VudCwgSHR0cFByb3h5QWdlbnQgfSBmcm9tICdocGFnZW50J1xuaW1wb3J0IHsgSUltZ0luZm8gfSBmcm9tICcuLi8uLi8uLi90eXBlcydcbmltcG9ydCB7IFVSTCB9IGZyb20gJ3VybCdcblxuY2xhc3MgRmlsZU5hbWVHZW5lcmF0b3Ige1xuICBkYXRlOiBEYXRlXG4gIGluZm86IElJbWdJbmZvXG5cbiAgc3RhdGljIGZpZWxkcyA9IFtcbiAgICAneWVhcicsIC8vIOW9k+WJjeaXpeacnyAtIOW5tFxuICAgICdtb250aCcsIC8vIOW9k+WJjeaXpeacnyAtIOaciFxuICAgICdkYXknLCAvLyDlvZPliY3ml6XmnJ8gLSDml6VcbiAgICAnZnVsbE5hbWUnLCAvLyDmlofku7blkI0sIOWMheWQq+aJqeWxleWQjVxuICAgICdmaWxlTmFtZScsIC8vIOaWh+S7tuWQjSwg5LiN5YyF5ZCr5omp5bGV5ZCNXG4gICAgJ2V4dE5hbWUnLCAvLyDmianlsZXlkI1cbiAgICAnbWQ1JywgLy8gbWQ1XG4gICAgJ21kNUI2NCcsIC8vIG1kNSBiYXNlNjRcbiAgICAnbWQ1QjY0U2hvcnQnLCAvLyBtZDUgYmFzZTY0IHNob3J0XG4gICAgJ3NoYTEnLCAvLyBzaGExXG4gICAgJ3NoYTI1NicsIC8vIHNoYTI1NlxuICAgICd0aW1lc3RhbXAnLCAvLyDlvZPliY3ml7bpl7TmiLMsIOenklxuICAgICd0aW1lc3RhbXBNUycgLy8g5b2T5YmN5pe26Ze05oizLCDmr6vnp5JcbiAgXVxuXG4gIGNvbnN0cnVjdG9yKGluZm86IElJbWdJbmZvKSB7XG4gICAgdGhpcy5kYXRlID0gbmV3IERhdGUoKVxuICAgIHRoaXMuaW5mbyA9IGluZm9cbiAgfVxuXG4gIHB1YmxpYyB5ZWFyKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGAke3RoaXMuZGF0ZS5nZXRGdWxsWWVhcigpfWBcbiAgfVxuXG4gIHB1YmxpYyBtb250aCgpOiBzdHJpbmcge1xuICAgIHJldHVybiAodGhpcy5kYXRlLmdldE1vbnRoKCkgKyAxKS50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJylcbiAgfVxuXG4gIHB1YmxpYyBkYXkoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5kYXRlLmdldERhdGUoKS50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJylcbiAgfVxuXG4gIHB1YmxpYyBmdWxsTmFtZSgpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLmluZm8uZmlsZU5hbWVcbiAgfVxuXG4gIHB1YmxpYyBmaWxlTmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiAodGhpcy5pbmZvLmZpbGVOYW1lID8/ICcnKS5yZXBsYWNlKHRoaXMuaW5mby5leHRuYW1lID8/ICcnLCAnJylcbiAgfVxuXG4gIHB1YmxpYyBleHROYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuICh0aGlzLmluZm8uZXh0bmFtZSA/PyAnJykucmVwbGFjZSgnLicsICcnKVxuICB9XG5cbiAgcHVibGljIG1kNSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBjcnlwdG8uY3JlYXRlSGFzaCgnbWQ1JykudXBkYXRlKHRoaXMuaW1nQnVmZmVyKCkhKS5kaWdlc3QoJ2hleCcpXG4gIH1cblxuICBwdWJsaWMgbWQ1QjY0KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGNyeXB0b1xuICAgICAgLmNyZWF0ZUhhc2goJ21kNScpXG4gICAgICAudXBkYXRlKHRoaXMuaW1nQnVmZmVyKCkhKVxuICAgICAgLmRpZ2VzdCgnYmFzZTY0JylcbiAgICAgIC5yZXBsYWNlKC9cXCsvZywgJy0nKVxuICAgICAgLnJlcGxhY2UoL1xcLy9nLCAnXycpXG4gICAgICAucmVwbGFjZSgvPSskLywgJycpXG4gIH1cblxuICBwdWJsaWMgbWQ1QjY0U2hvcnQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gY3J5cHRvXG4gICAgICAuY3JlYXRlSGFzaCgnbWQ1JylcbiAgICAgIC51cGRhdGUodGhpcy5pbWdCdWZmZXIoKSEpXG4gICAgICAuZGlnZXN0KCdiYXNlNjQnKVxuICAgICAgLnJlcGxhY2UoL1xcKy9nLCAnLScpXG4gICAgICAucmVwbGFjZSgvXFwvL2csICdfJylcbiAgICAgIC5zbGljZSgwLCA3KVxuICB9XG5cbiAgcHVibGljIHNoYTEoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gY3J5cHRvLmNyZWF0ZUhhc2goJ3NoYTEnKS51cGRhdGUodGhpcy5pbWdCdWZmZXIoKSEpLmRpZ2VzdCgnaGV4JylcbiAgfVxuXG4gIHB1YmxpYyBzaGEyNTYoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gY3J5cHRvLmNyZWF0ZUhhc2goJ3NoYTI1NicpLnVwZGF0ZSh0aGlzLmltZ0J1ZmZlcigpISkuZGlnZXN0KCdoZXgnKVxuICB9XG5cbiAgcHVibGljIHRpbWVzdGFtcCgpOiBzdHJpbmcge1xuICAgIHJldHVybiBNYXRoLmZsb29yKERhdGUubm93KCkgLyAxMDAwKS50b1N0cmluZygpXG4gIH1cblxuICBwdWJsaWMgdGltZXN0YW1wTVMoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gRGF0ZS5ub3coKS50b1N0cmluZygpXG4gIH1cblxuICBwcml2YXRlIGltZ0J1ZmZlcigpOiBzdHJpbmcgfCBCdWZmZXIgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLmluZm8uYmFzZTY0SW1hZ2UgPyB0aGlzLmluZm8uYmFzZTY0SW1hZ2UgOiB0aGlzLmluZm8uYnVmZmVyXG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdFBhdGgoaW5mbzogSUltZ0luZm8sIGZvcm1hdD86IHN0cmluZyk6IHN0cmluZyB7XG4gIGlmICghZm9ybWF0KSB7XG4gICAgcmV0dXJuIGluZm8uZmlsZU5hbWUhXG4gIH1cblxuICBjb25zdCBmaWxlTmFtZUdlbmVyYXRvciA9IG5ldyBGaWxlTmFtZUdlbmVyYXRvcihpbmZvKVxuXG4gIGxldCBmb3JtYXRQYXRoOiBzdHJpbmcgPSBmb3JtYXRcblxuICBmb3IgKGNvbnN0IGtleSBvZiBGaWxlTmFtZUdlbmVyYXRvci5maWVsZHMpIHtcbiAgICBjb25zdCByZSA9IG5ldyBSZWdFeHAoYHske2tleX19YCwgJ2cnKVxuICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgdHMtbWlncmF0ZSgyNTMyKSBGSVhNRTogT2JqZWN0IGlzIHBvc3NpYmx5ICd1bmRlZmluZWQnLlxuICAgIGZvcm1hdFBhdGggPSBmb3JtYXRQYXRoLnJlcGxhY2UocmUsIGZpbGVOYW1lR2VuZXJhdG9yW2tleV0oKSlcbiAgfVxuXG4gIHJldHVybiBmb3JtYXRQYXRoXG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBleHRyYWN0SW5mbyhpbmZvOiBJSW1nSW5mbyk6IFByb21pc2U8e1xuICBib2R5PzogQnVmZmVyXG4gIGNvbnRlbnRUeXBlPzogc3RyaW5nXG4gIGNvbnRlbnRFbmNvZGluZz86IHN0cmluZ1xufT4ge1xuICBjb25zdCByZXN1bHQ6IHtcbiAgICBib2R5PzogQnVmZmVyXG4gICAgY29udGVudFR5cGU/OiBzdHJpbmdcbiAgICBjb250ZW50RW5jb2Rpbmc/OiBzdHJpbmdcbiAgfSA9IHt9XG5cbiAgaWYgKGluZm8uYmFzZTY0SW1hZ2UpIHtcbiAgICBjb25zdCBib2R5ID0gaW5mby5iYXNlNjRJbWFnZS5yZXBsYWNlKC9eZGF0YTpbL1xcd10rO2Jhc2U2NCwvLCAnJylcbiAgICByZXN1bHQuY29udGVudFR5cGUgPSBpbmZvLmJhc2U2NEltYWdlLm1hdGNoKC9bXjpdXFx3K1xcL1tcXHctK1xcZC5dKyg/PTt8LCkvKT8uWzBdXG4gICAgcmVzdWx0LmJvZHkgPSBCdWZmZXIuZnJvbShib2R5LCAnYmFzZTY0JylcbiAgICByZXN1bHQuY29udGVudEVuY29kaW5nID0gJ2Jhc2U2NCdcbiAgfSBlbHNlIHtcbiAgICBpZiAoaW5mby5leHRuYW1lKSB7XG4gICAgICByZXN1bHQuY29udGVudFR5cGUgPSBtaW1lLmdldFR5cGUoaW5mby5leHRuYW1lKSFcbiAgICB9XG4gICAgcmVzdWx0LmJvZHkgPSBpbmZvLmJ1ZmZlclxuICB9XG5cbiAgLy8gZmFsbGJhY2sgdG8gZGV0ZWN0IGZyb20gYnVmZmVyXG4gIGlmICghcmVzdWx0LmNvbnRlbnRUeXBlKSB7XG4gICAgY29uc3QgZmlsZVR5cGUgPSBhd2FpdCBGaWxlVHlwZS5mcm9tQnVmZmVyKHJlc3VsdC5ib2R5ISlcbiAgICByZXN1bHQuY29udGVudFR5cGUgPSBmaWxlVHlwZT8ubWltZVxuICB9XG5cbiAgcmV0dXJuIHJlc3VsdFxufVxuXG5mdW5jdGlvbiBmb3JtYXRIdHRwUHJveHlVUkwodXJsID0gJycpOiBzdHJpbmcge1xuICBpZiAoIXVybCkgcmV0dXJuICcnXG5cbiAgaWYgKCEvXmh0dHBzPzpcXC9cXC8vLnRlc3QodXJsKSkge1xuICAgIGNvbnN0IFtob3N0LCBwb3J0XSA9IHVybC5zcGxpdCgnOicpXG4gICAgcmV0dXJuIGBodHRwOi8vJHtob3N0LnJlcGxhY2UoJzEyNy4wLjAuMScsICdsb2NhbGhvc3QnKX06JHtwb3J0fWBcbiAgfVxuXG4gIHRyeSB7XG4gICAgY29uc3QgeyBwcm90b2NvbCwgaG9zdG5hbWUsIHBvcnQgfSA9IG5ldyBVUkwodXJsKVxuICAgIHJldHVybiBgJHtwcm90b2NvbH0vLyR7aG9zdG5hbWUucmVwbGFjZSgnMTI3LjAuMC4xJywgJ2xvY2FsaG9zdCcpfToke3BvcnR9YFxuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuICcnXG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFByb3h5QWdlbnQoXG4gIHByb3h5OiBzdHJpbmcgfCB1bmRlZmluZWQsXG4gIHNzbEVuYWJsZWQ6IGJvb2xlYW4sXG4gIHJlamVjdFVuYXV0aG9yaXplZDogYm9vbGVhblxuKTogSHR0cFByb3h5QWdlbnQgfCBIdHRwc1Byb3h5QWdlbnQgfCB1bmRlZmluZWQge1xuICBjb25zdCBmb3JtYXRlZFByb3h5ID0gZm9ybWF0SHR0cFByb3h5VVJMKHByb3h5KVxuICBpZiAoIWZvcm1hdGVkUHJveHkpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkXG4gIH1cblxuICBjb25zdCBBZ2VudCA9IHNzbEVuYWJsZWQgPyBIdHRwc1Byb3h5QWdlbnQgOiBIdHRwUHJveHlBZ2VudFxuICBjb25zdCBvcHRpb25zID0ge1xuICAgIGtlZXBBbGl2ZTogdHJ1ZSxcbiAgICBrZWVwQWxpdmVNc2VjczogMTAwMCxcbiAgICBzY2hlZHVsaW5nOiAnbGlmbycgYXMgJ2xpZm8nIHwgJ2ZpZm8nIHwgdW5kZWZpbmVkLFxuICAgIHJlamVjdFVuYXV0aG9yaXplZCxcbiAgICBwcm94eTogZm9ybWF0ZWRQcm94eVxuICB9XG5cbiAgcmV0dXJuIG5ldyBBZ2VudChvcHRpb25zKVxufVxuIiwiaW1wb3J0IHtcbiAgUzNDbGllbnRDb25maWcsXG4gIFMzQ2xpZW50LFxuICBQdXRPYmplY3RDb21tYW5kLFxuICBHZXRPYmplY3RDb21tYW5kLFxuICBQdXRPYmplY3RDb21tYW5kT3V0cHV0XG59IGZyb20gJ0Bhd3Mtc2RrL2NsaWVudC1zMydcbmltcG9ydCB7IGdldFNpZ25lZFVybCB9IGZyb20gJ0Bhd3Mtc2RrL3MzLXJlcXVlc3QtcHJlc2lnbmVyJ1xuaW1wb3J0IHsgTm9kZUh0dHBIYW5kbGVyLCBOb2RlSHR0cEhhbmRsZXJPcHRpb25zIH0gZnJvbSAnQHNtaXRoeS9ub2RlLWh0dHAtaGFuZGxlcidcblxuaW1wb3J0IHVybCBmcm9tICd1cmwnXG5pbXBvcnQgeyBIdHRwUHJveHlBZ2VudCwgSHR0cHNQcm94eUFnZW50IH0gZnJvbSAnaHBhZ2VudCdcbmltcG9ydCB7IElBd3NTM1BMaXN0VXNlckNvbmZpZywgSUltZ0luZm8gfSBmcm9tICcuLi8uLi8uLi90eXBlcydcbmltcG9ydCB7IGV4dHJhY3RJbmZvLCBnZXRQcm94eUFnZW50IH0gZnJvbSAnLi91dGlscydcblxuZXhwb3J0IGludGVyZmFjZSBJVXBsb2FkUmVzdWx0IHtcbiAga2V5OiBzdHJpbmdcbiAgdXJsOiBzdHJpbmdcbiAgaW1nVVJMOiBzdHJpbmdcbiAgdmVyc2lvbklkPzogc3RyaW5nXG4gIGVUYWc/OiBzdHJpbmdcbn1cblxuZnVuY3Rpb24gY3JlYXRlUzNDbGllbnQob3B0czogSUF3c1MzUExpc3RVc2VyQ29uZmlnKTogUzNDbGllbnQge1xuICBsZXQgc3NsRW5hYmxlZCA9IHRydWVcbiAgdHJ5IHtcbiAgICBjb25zdCB1ID0gbmV3IHVybC5VUkwob3B0cy5lbmRwb2ludCEpXG4gICAgc3NsRW5hYmxlZCA9IHUucHJvdG9jb2wgPT09ICdodHRwczonXG4gIH0gY2F0Y2gge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1lbXB0eVxuICB9XG5cbiAgY29uc3QgaHR0cEhhbmRsZXJPcHRzOiBOb2RlSHR0cEhhbmRsZXJPcHRpb25zID0ge31cbiAgaWYgKHNzbEVuYWJsZWQpIHtcbiAgICBodHRwSGFuZGxlck9wdHMuaHR0cHNBZ2VudCA9IGdldFByb3h5QWdlbnQob3B0cy5wcm94eSwgdHJ1ZSwgb3B0cy5yZWplY3RVbmF1dGhvcml6ZWQgPz8gZmFsc2UpIGFzIEh0dHBzUHJveHlBZ2VudFxuICB9IGVsc2Uge1xuICAgIGh0dHBIYW5kbGVyT3B0cy5odHRwQWdlbnQgPSBnZXRQcm94eUFnZW50KG9wdHMucHJveHksIGZhbHNlLCBvcHRzLnJlamVjdFVuYXV0aG9yaXplZCA/PyBmYWxzZSkgYXMgSHR0cFByb3h5QWdlbnRcbiAgfVxuXG4gIGNvbnN0IGNsaWVudE9wdGlvbnM6IFMzQ2xpZW50Q29uZmlnID0ge1xuICAgIHJlZ2lvbjogb3B0cy5yZWdpb24gfHwgJ2F1dG8nLFxuICAgIGVuZHBvaW50OiBvcHRzLmVuZHBvaW50IHx8IHVuZGVmaW5lZCxcbiAgICBjcmVkZW50aWFsczoge1xuICAgICAgYWNjZXNzS2V5SWQ6IG9wdHMuYWNjZXNzS2V5SUQsXG4gICAgICBzZWNyZXRBY2Nlc3NLZXk6IG9wdHMuc2VjcmV0QWNjZXNzS2V5XG4gICAgfSxcbiAgICB0bHM6IHNzbEVuYWJsZWQsXG4gICAgZm9yY2VQYXRoU3R5bGU6IG9wdHMucGF0aFN0eWxlQWNjZXNzLFxuICAgIHJlcXVlc3RIYW5kbGVyOiBuZXcgTm9kZUh0dHBIYW5kbGVyKGh0dHBIYW5kbGVyT3B0cylcbiAgfVxuXG4gIHJldHVybiBuZXcgUzNDbGllbnQoY2xpZW50T3B0aW9ucylcbn1cblxuaW50ZXJmYWNlIElDcmVhdGVVcGxvYWRUYXNrT3B0cyB7XG4gIGNsaWVudDogYW55XG4gIGJ1Y2tldE5hbWU6IHN0cmluZ1xuICBwYXRoOiBzdHJpbmdcbiAgaXRlbTogSUltZ0luZm9cbiAgYWNsOiBzdHJpbmdcbiAgdXJsUHJlZml4Pzogc3RyaW5nXG59XG5cbmFzeW5jIGZ1bmN0aW9uIGNyZWF0ZVVwbG9hZFRhc2sob3B0czogSUNyZWF0ZVVwbG9hZFRhc2tPcHRzKTogUHJvbWlzZTxJVXBsb2FkUmVzdWx0PiB7XG4gIGlmICghb3B0cy5pdGVtLmJ1ZmZlciAmJiAhb3B0cy5pdGVtLmJhc2U2NEltYWdlKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCd1bmRlZmluZWQgaW1hZ2UnKVxuICB9XG4gIHRyeSB7XG4gICAgY29uc3QgeyBib2R5LCBjb250ZW50VHlwZSwgY29udGVudEVuY29kaW5nIH0gPSBhd2FpdCBleHRyYWN0SW5mbyhvcHRzLml0ZW0pXG5cbiAgICBjb25zdCBjb21tYW5kID0gbmV3IFB1dE9iamVjdENvbW1hbmQoe1xuICAgICAgQnVja2V0OiBvcHRzLmJ1Y2tldE5hbWUsXG4gICAgICBLZXk6IG9wdHMucGF0aCxcbiAgICAgIEFDTDogb3B0cy5hY2wsXG4gICAgICBCb2R5OiBib2R5LFxuICAgICAgQ29udGVudFR5cGU6IGNvbnRlbnRUeXBlLFxuICAgICAgQ29udGVudEVuY29kaW5nOiBjb250ZW50RW5jb2RpbmdcbiAgICB9KVxuXG4gICAgY29uc3Qgb3V0cHV0OiBQdXRPYmplY3RDb21tYW5kT3V0cHV0ID0gYXdhaXQgb3B0cy5jbGllbnQuc2VuZChjb21tYW5kKVxuXG4gICAgbGV0IHVybDogc3RyaW5nXG4gICAgaWYgKCFvcHRzLnVybFByZWZpeCkge1xuICAgICAgdXJsID0gYXdhaXQgZ2V0RmlsZVVSTChvcHRzLCBvdXRwdXQuRVRhZyEsIG91dHB1dC5WZXJzaW9uSWQhKVxuICAgIH0gZWxzZSB7XG4gICAgICB1cmwgPSBgJHtvcHRzLnVybFByZWZpeH0vJHtvcHRzLnBhdGh9YFxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBrZXk6IG9wdHMucGF0aCxcbiAgICAgIHVybCxcbiAgICAgIGltZ1VSTDogdXJsLFxuICAgICAgdmVyc2lvbklkOiBvdXRwdXQuVmVyc2lvbklkLFxuICAgICAgZVRhZzogb3V0cHV0LkVUYWdcbiAgICB9XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHJldHVybiBQcm9taXNlLnJlamVjdChlcnIpXG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gZ2V0RmlsZVVSTChvcHRzOiBJQ3JlYXRlVXBsb2FkVGFza09wdHMsIGVUYWc6IHN0cmluZywgdmVyc2lvbklkOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCBzaWduZWRVcmwgPSBhd2FpdCBnZXRTaWduZWRVcmwoXG4gICAgb3B0cy5jbGllbnQsXG4gICAgbmV3IEdldE9iamVjdENvbW1hbmQoe1xuICAgICAgQnVja2V0OiBvcHRzLmJ1Y2tldE5hbWUsXG4gICAgICBLZXk6IG9wdHMucGF0aCxcbiAgICAgIElmTWF0Y2g6IGVUYWcsXG4gICAgICBWZXJzaW9uSWQ6IHZlcnNpb25JZFxuICAgIH0pLFxuICAgIHsgZXhwaXJlc0luOiAzNjAwIH1cbiAgKVxuICBjb25zdCB1cmxPYmplY3QgPSBuZXcgdXJsLlVSTChzaWduZWRVcmwpXG4gIHVybE9iamVjdC5zZWFyY2ggPSAnJ1xuICByZXR1cm4gdXJsT2JqZWN0LmhyZWZcbn1cblxuZXhwb3J0IGRlZmF1bHQge1xuICBjcmVhdGVTM0NsaWVudCxcbiAgY3JlYXRlVXBsb2FkVGFza1xufVxuIiwiaW1wb3J0IHVwbG9hZGVyIGZyb20gJy4vczMvdXBsb2FkZXInXG5cbmltcG9ydCB7IGZvcm1hdFBhdGggfSBmcm9tICcuL3MzL3V0aWxzJ1xuaW1wb3J0IHsgSUF3c1MzUExpc3RVc2VyQ29uZmlnLCBJUGljR28sIElQbHVnaW5Db25maWcgfSBmcm9tICcuLi8uLi90eXBlcydcbmltcG9ydCB7IElMb2NhbGVzS2V5IH0gZnJvbSAnLi4vLi4vaTE4bi96aC1DTidcbmltcG9ydCB7IElCdWlsZEluRXZlbnQgfSBmcm9tICcuLi8uLi91dGlscy9lbnVtJ1xuaW1wb3J0IHsgYnVpbGRJblVwbG9hZGVyTmFtZXMgfSBmcm9tICcuL3V0aWxzJ1xuXG5mdW5jdGlvbiBmb3JtYXREaXNhYmxlQnVja2V0UHJlZml4VG9VUkwoZGlzYWJsZUJ1Y2tldFByZWZpeFRvVVJMOiBzdHJpbmcgfCBib29sZWFuIHwgdW5kZWZpbmVkKTogYm9vbGVhbiB7XG4gIGlmICh0eXBlb2YgZGlzYWJsZUJ1Y2tldFByZWZpeFRvVVJMID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBkaXNhYmxlQnVja2V0UHJlZml4VG9VUkwudG9Mb3dlckNhc2UoKSA9PT0gJ3RydWUnXG4gIH1cbiAgcmV0dXJuIEJvb2xlYW4oZGlzYWJsZUJ1Y2tldFByZWZpeFRvVVJMKVxufVxuXG5jb25zdCBoYW5kbGUgPSBhc3luYyAoY3R4OiBJUGljR28pOiBQcm9taXNlPElQaWNHbz4gPT4ge1xuICBjb25zdCB1c2VyQ29uZmlnOiBJQXdzUzNQTGlzdFVzZXJDb25maWcgPSBjdHguZ2V0Q29uZmlnKCdwaWNCZWQuYXdzLXMzLXBsaXN0JylcbiAgaWYgKCF1c2VyQ29uZmlnKSB0aHJvdyBuZXcgRXJyb3IoXCJDYW4ndCBmaW5kIGF3cyBzMyB1cGxvYWRlciBjb25maWdcIilcbiAgdHJ5IHtcbiAgICBjb25zdCBkaXNhYmxlQnVja2V0UHJlZml4VG9VUkwgPSBmb3JtYXREaXNhYmxlQnVja2V0UHJlZml4VG9VUkwodXNlckNvbmZpZy5kaXNhYmxlQnVja2V0UHJlZml4VG9VUkwpXG4gICAgbGV0IHVybFByZWZpeCA9IHVzZXJDb25maWcudXJsUHJlZml4XG4gICAgaWYgKHVybFByZWZpeCkge1xuICAgICAgdXJsUHJlZml4ID0gdXJsUHJlZml4LnJlcGxhY2UoL1xcLz8kLywgJycpXG4gICAgICBpZiAodXNlckNvbmZpZy5wYXRoU3R5bGVBY2Nlc3MgJiYgIWRpc2FibGVCdWNrZXRQcmVmaXhUb1VSTCkge1xuICAgICAgICB1cmxQcmVmaXggKz0gJy8nICsgdXNlckNvbmZpZy5idWNrZXROYW1lXG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IGNsaWVudCA9IHVwbG9hZGVyLmNyZWF0ZVMzQ2xpZW50KHVzZXJDb25maWcpXG4gICAgY29uc3QgaW1nTGlzdCA9IGN0eC5vdXRwdXRcbiAgICBmb3IgKGNvbnN0IGltZyBvZiBpbWdMaXN0KSB7XG4gICAgICBjb25zdCB0YXNrID0gYXdhaXQgdXBsb2FkZXIuY3JlYXRlVXBsb2FkVGFzayh7XG4gICAgICAgIGNsaWVudCxcbiAgICAgICAgYnVja2V0TmFtZTogdXNlckNvbmZpZy5idWNrZXROYW1lLFxuICAgICAgICBwYXRoOiBmb3JtYXRQYXRoKGltZywgdXNlckNvbmZpZy51cGxvYWRQYXRoKSxcbiAgICAgICAgaXRlbTogaW1nLFxuICAgICAgICBhY2w6IHVzZXJDb25maWcuYWNsIHx8ICdwdWJsaWMtcmVhZCcsXG4gICAgICAgIHVybFByZWZpeFxuICAgICAgfSlcbiAgICAgIGRlbGV0ZSBpbWcuYnVmZmVyXG4gICAgICBkZWxldGUgaW1nLmJhc2U2NEltYWdlXG4gICAgICBpbWcuaW1nVXJsID0gdGFzay5pbWdVUkxcbiAgICAgIGltZy51cmwgPSB0YXNrLnVybFxuICAgIH1cblxuICAgIHJldHVybiBjdHhcbiAgfSBjYXRjaCAoZXJyOiBhbnkpIHtcbiAgICBjdHguZW1pdChJQnVpbGRJbkV2ZW50Lk5PVElGSUNBVElPTiwge1xuICAgICAgdGl0bGU6IGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1VQTE9BRF9GQUlMRUQnKSxcbiAgICAgIGJvZHk6IGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0NIRUNLX1NFVFRJTkdTX0FORF9ORVRXT1JLJyksXG4gICAgICB0ZXh0OiAnJ1xuICAgIH0pXG4gICAgdGhyb3cgZXJyXG4gIH1cbn1cblxuY29uc3QgY29uZmlnID0gKGN0eDogSVBpY0dvKTogSVBsdWdpbkNvbmZpZ1tdID0+IHtcbiAgY29uc3QgZGVmYXVsdENvbmZpZzogSUF3c1MzUExpc3RVc2VyQ29uZmlnID0ge1xuICAgIGFjY2Vzc0tleUlEOiAnJyxcbiAgICBzZWNyZXRBY2Nlc3NLZXk6ICcnLFxuICAgIGJ1Y2tldE5hbWU6ICcnLFxuICAgIHVwbG9hZFBhdGg6ICd7eWVhcn0ve21vbnRofS97bWQ1fS57ZXh0TmFtZX0nLFxuICAgIHBhdGhTdHlsZUFjY2VzczogZmFsc2UsXG4gICAgcmVqZWN0VW5hdXRob3JpemVkOiBmYWxzZSxcbiAgICBhY2w6ICdwdWJsaWMtcmVhZCdcbiAgfVxuICBsZXQgdXNlckNvbmZpZyA9IGN0eC5nZXRDb25maWc8SUF3c1MzUExpc3RVc2VyQ29uZmlnPigncGljQmVkLmF3cy1zMy1wbGlzdCcpIHx8IHt9XG4gIHVzZXJDb25maWcgPSB7IC4uLmRlZmF1bHRDb25maWcsIC4uLnVzZXJDb25maWcgfVxuICBjb25zdCBjb25maWc6IElQbHVnaW5Db25maWdbXSA9IFtcbiAgICB7XG4gICAgICBuYW1lOiAnYWNjZXNzS2V5SUQnLFxuICAgICAgdHlwZTogJ2lucHV0JyxcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuYWNjZXNzS2V5SUQsXG4gICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgIGdldCBwcmVmaXgoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQVdTUzNQTElTVF9BQ0NFU1NLRVlJRCcpXG4gICAgICB9LFxuICAgICAgZ2V0IGFsaWFzKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FXU1MzUExJU1RfQUNDRVNTS0VZSUQnKVxuICAgICAgfSxcbiAgICAgIGdldCBtZXNzYWdlKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FXU1MzUExJU1RfTUVTU0FHRV9BQ0NFU1NLRVlJRCcpXG4gICAgICB9XG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAnc2VjcmV0QWNjZXNzS2V5JyxcbiAgICAgIHR5cGU6ICdpbnB1dCcsXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLnNlY3JldEFjY2Vzc0tleSxcbiAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgZ2V0IHByZWZpeCgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BV1NTM1BMSVNUX1NFQ1JFVF9BQ0NFU1NLRVknKVxuICAgICAgfSxcbiAgICAgIGdldCBhbGlhcygpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BV1NTM1BMSVNUX1NFQ1JFVF9BQ0NFU1NLRVknKVxuICAgICAgfSxcbiAgICAgIGdldCBtZXNzYWdlKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FXU1MzUExJU1RfTUVTU0FHRV9TRUNSRVRfQUNDRVNTS0VZJylcbiAgICAgIH1cbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdidWNrZXROYW1lJyxcbiAgICAgIHR5cGU6ICdpbnB1dCcsXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLmJ1Y2tldE5hbWUsXG4gICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgIGdldCBwcmVmaXgoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQVdTUzNQTElTVF9CVUNLRVQnKVxuICAgICAgfSxcbiAgICAgIGdldCBhbGlhcygpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BV1NTM1BMSVNUX0JVQ0tFVCcpXG4gICAgICB9LFxuICAgICAgZ2V0IG1lc3NhZ2UoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQVdTUzNQTElTVF9NRVNTQUdFX0JVQ0tFVCcpXG4gICAgICB9XG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAndXBsb2FkUGF0aCcsXG4gICAgICB0eXBlOiAnaW5wdXQnLFxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy51cGxvYWRQYXRoLFxuICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICBnZXQgcHJlZml4KCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FXU1MzUExJU1RfVVBMT0FEUEFUSCcpXG4gICAgICB9LFxuICAgICAgZ2V0IGFsaWFzKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FXU1MzUExJU1RfVVBMT0FEUEFUSCcpXG4gICAgICB9LFxuICAgICAgZ2V0IG1lc3NhZ2UoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQVdTUzNQTElTVF9NRVNTQUdFX1VQTE9BRFBBVEgnKVxuICAgICAgfVxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ3JlZ2lvbicsXG4gICAgICB0eXBlOiAnaW5wdXQnLFxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5yZWdpb24sXG4gICAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgICBnZXQgcHJlZml4KCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FXU1MzUExJU1RfUkVHSU9OJylcbiAgICAgIH0sXG4gICAgICBnZXQgYWxpYXMoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQVdTUzNQTElTVF9SRUdJT04nKVxuICAgICAgfSxcbiAgICAgIGdldCBtZXNzYWdlKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FXU1MzUExJU1RfTUVTU0FHRV9SRUdJT04nKVxuICAgICAgfVxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ2VuZHBvaW50JyxcbiAgICAgIHR5cGU6ICdpbnB1dCcsXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLmVuZHBvaW50LFxuICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgICAgZ2V0IHByZWZpeCgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BV1NTM1BMSVNUX0VORFBPSU5UJylcbiAgICAgIH0sXG4gICAgICBnZXQgYWxpYXMoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQVdTUzNQTElTVF9FTkRQT0lOVCcpXG4gICAgICB9LFxuICAgICAgZ2V0IG1lc3NhZ2UoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQVdTUzNQTElTVF9NRVNTQUdFX0VORFBPSU5UJylcbiAgICAgIH1cbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdwcm94eScsXG4gICAgICB0eXBlOiAnaW5wdXQnLFxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5wcm94eSxcbiAgICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICAgIGdldCBwcmVmaXgoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQVdTUzNQTElTVF9QUk9YWScpXG4gICAgICB9LFxuICAgICAgZ2V0IGFsaWFzKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FXU1MzUExJU1RfUFJPWFknKVxuICAgICAgfSxcbiAgICAgIGdldCBtZXNzYWdlKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FXU1MzUExJU1RfTUVTU0FHRV9QUk9YWScpXG4gICAgICB9XG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAndXJsUHJlZml4JyxcbiAgICAgIHR5cGU6ICdpbnB1dCcsXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLnVybFByZWZpeCxcbiAgICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICAgIGdldCBwcmVmaXgoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQVdTUzNQTElTVF9VUkxQUkVGSVgnKVxuICAgICAgfSxcbiAgICAgIGdldCBhbGlhcygpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BV1NTM1BMSVNUX1VSTFBSRUZJWCcpXG4gICAgICB9LFxuICAgICAgZ2V0IG1lc3NhZ2UoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQVdTUzNQTElTVF9NRVNTQUdFX1VSTFBSRUZJWCcpXG4gICAgICB9XG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAncGF0aFN0eWxlQWNjZXNzJyxcbiAgICAgIHR5cGU6ICdjb25maXJtJyxcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcucGF0aFN0eWxlQWNjZXNzIHx8IGZhbHNlLFxuICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgICAgZ2V0IHByZWZpeCgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BV1NTM1BMSVNUX1BBVEhTVFlMRUFDQ0VTUycpXG4gICAgICB9LFxuICAgICAgZ2V0IGFsaWFzKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FXU1MzUExJU1RfUEFUSFNUWUxFQUNDRVNTJylcbiAgICAgIH0sXG4gICAgICBnZXQgbWVzc2FnZSgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BV1NTM1BMSVNUX01FU1NBR0VfUEFUSFNUWUxFQUNDRVNTJylcbiAgICAgIH1cbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdyZWplY3RVbmF1dGhvcml6ZWQnLFxuICAgICAgdHlwZTogJ2NvbmZpcm0nLFxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5yZWplY3RVbmF1dGhvcml6ZWQgfHwgZmFsc2UsXG4gICAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgICBnZXQgcHJlZml4KCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FXU1MzUExJU1RfUkVKRUNUVU5BVVRIT1JJWkVEJylcbiAgICAgIH0sXG4gICAgICBnZXQgYWxpYXMoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQVdTUzNQTElTVF9SRUpFQ1RVTkFVVEhPUklaRUQnKVxuICAgICAgfSxcbiAgICAgIGdldCBtZXNzYWdlKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FXU1MzUExJU1RfTUVTU0FHRV9SRUpFQ1RVTkFVVEhPUklaRUQnKVxuICAgICAgfVxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ2FjbCcsXG4gICAgICB0eXBlOiAnbGlzdCcsXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLmFjbCB8fCAncHVibGljLXJlYWQnLFxuICAgICAgY2hvaWNlczogW1xuICAgICAgICAncHJpdmF0ZScsXG4gICAgICAgICdwdWJsaWMtcmVhZCcsXG4gICAgICAgICdwdWJsaWMtcmVhZC13cml0ZScsXG4gICAgICAgICdhdXRoZW50aWNhdGVkLXJlYWQnLFxuICAgICAgICAnYXdzLWV4ZWMtcmVhZCcsXG4gICAgICAgICdidWNrZXQtb3duZXItcmVhZCcsXG4gICAgICAgICdidWNrZXQtb3duZXItZnVsbC1jb250cm9sJ1xuICAgICAgXSxcbiAgICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICAgIGdldCBwcmVmaXgoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQVdTUzNQTElTVF9BQ0wnKVxuICAgICAgfSxcbiAgICAgIGdldCBhbGlhcygpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BV1NTM1BMSVNUX0FDTCcpXG4gICAgICB9LFxuICAgICAgZ2V0IG1lc3NhZ2UoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQVdTUzNQTElTVF9NRVNTQUdFX0FDTCcpXG4gICAgICB9XG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAnZGlzYWJsZUJ1Y2tldFByZWZpeFRvVVJMJyxcbiAgICAgIHR5cGU6ICdjb25maXJtJyxcbiAgICAgIGRlZmF1bHQ6IGZvcm1hdERpc2FibGVCdWNrZXRQcmVmaXhUb1VSTCh1c2VyQ29uZmlnLmRpc2FibGVCdWNrZXRQcmVmaXhUb1VSTCkgfHwgZmFsc2UsXG4gICAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgICBnZXQgcHJlZml4KCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FXU1MzUExJU1RfRElTQUJMRUJVQ0tFVFBSRUZJWFRPVVJMJylcbiAgICAgIH0sXG4gICAgICBnZXQgYWxpYXMoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQVdTUzNQTElTVF9ESVNBQkxFQlVDS0VUUFJFRklYVE9VUkwnKVxuICAgICAgfSxcbiAgICAgIGdldCBtZXNzYWdlKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FXU1MzUExJU1RfTUVTU0FHRV9ESVNBQkxFQlVDS0VUUFJFRklYVE9VUkwnKVxuICAgICAgfVxuICAgIH1cbiAgXVxuICByZXR1cm4gY29uZmlnXG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHJlZ2lzdGVyKGN0eDogSVBpY0dvKTogdm9pZCB7XG4gIGN0eC5oZWxwZXIudXBsb2FkZXIucmVnaXN0ZXIoYnVpbGRJblVwbG9hZGVyTmFtZXNbJ2F3cy1zMy1wbGlzdCddLCB7XG4gICAgZ2V0IG5hbWUoKSB7XG4gICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FXU1MzUExJU1QnKVxuICAgIH0sXG4gICAgaGFuZGxlLFxuICAgIGNvbmZpZ1xuICB9KVxufVxuIiwiaW1wb3J0IHsgbG9va3VwIH0gZnJvbSAnbWltZS10eXBlcydcblxuaW1wb3J0IHsgSVBpY0dvLCBJUGx1Z2luQ29uZmlnLCBJR2l0aHViQ29uZmlnLCBJT2xkUmVxT3B0aW9uc1dpdGhKU09OIH0gZnJvbSAnLi4vLi4vdHlwZXMnXG5pbXBvcnQgeyBJQnVpbGRJbkV2ZW50IH0gZnJvbSAnLi4vLi4vdXRpbHMvZW51bSdcbmltcG9ydCB7IElMb2NhbGVzS2V5IH0gZnJvbSAnLi4vLi4vaTE4bi96aC1DTidcbmltcG9ydCB7IGJ1aWxkSW5VcGxvYWRlck5hbWVzLCBlbmNvZGVQYXRoLCBmb3JtYXRQYXRoSGVscGVyIH0gZnJvbSAnLi91dGlscydcblxuZnVuY3Rpb24gYnVpbGRHaXRodWJBcGlVcmwocmVwbzogc3RyaW5nLCBwYXRoOiBzdHJpbmcsIGZpbGVOYW1lOiBzdHJpbmcsIGV4dHJhOiBzdHJpbmcgPSAnJyk6IHN0cmluZyB7XG4gIHJldHVybiBgaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS9yZXBvcy8ke3JlcG99L2NvbnRlbnRzLyR7ZW5jb2RlUGF0aChgJHtwYXRofSR7ZmlsZU5hbWV9YCl9JHtleHRyYX1gXG59XG5cbmNvbnN0IHBvc3RPcHRpb25zID0gKGZpbGVOYW1lOiBzdHJpbmcsIG9wdGlvbnM6IElHaXRodWJDb25maWcsIGRhdGE6IGFueSk6IElPbGRSZXFPcHRpb25zV2l0aEpTT04gPT4ge1xuICBjb25zdCB7IHRva2VuLCByZXBvIH0gPSBvcHRpb25zXG4gIGNvbnN0IGNvbnRlbnRUeXBlID0gbG9va3VwKGZpbGVOYW1lKSB8fCAnYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtJ1xuICByZXR1cm4ge1xuICAgIG1ldGhvZDogJ1BVVCcsXG4gICAgdXJsOiBidWlsZEdpdGh1YkFwaVVybChyZXBvLCBvcHRpb25zLnBhdGgsIGZpbGVOYW1lKSxcbiAgICBoZWFkZXJzOiB7XG4gICAgICBBdXRob3JpemF0aW9uOiBgdG9rZW4gJHt0b2tlbn1gLFxuICAgICAgJ1VzZXItQWdlbnQnOiAnUGljTGlzdCcsXG4gICAgICAnQ29udGVudC1UeXBlJzogY29udGVudFR5cGVcbiAgICB9LFxuICAgIGJvZHk6IGRhdGEsXG4gICAganNvbjogdHJ1ZVxuICB9IGFzIGNvbnN0XG59XG5cbmNvbnN0IGdldE9wdGlvbnMgPSAoZmlsZU5hbWU6IHN0cmluZywgb3B0aW9uczogSUdpdGh1YkNvbmZpZyk6IElPbGRSZXFPcHRpb25zV2l0aEpTT04gPT4ge1xuICBjb25zdCB7IHRva2VuLCByZXBvLCBicmFuY2ggfSA9IG9wdGlvbnNcbiAgcmV0dXJuIHtcbiAgICBtZXRob2Q6ICdHRVQnLFxuICAgIHVybDogYnVpbGRHaXRodWJBcGlVcmwocmVwbywgb3B0aW9ucy5wYXRoLCBmaWxlTmFtZSwgYD9yZWY9JHticmFuY2h9YCksXG4gICAgaGVhZGVyczoge1xuICAgICAgQXV0aG9yaXphdGlvbjogYHRva2VuICR7dG9rZW59YCxcbiAgICAgICdVc2VyLUFnZW50JzogJ1BpY0xpc3QnXG4gICAgfSxcbiAgICBqc29uOiB0cnVlXG4gIH1cbn1cblxuY29uc3QgaGFuZGxlID0gYXN5bmMgKGN0eDogSVBpY0dvKTogUHJvbWlzZTxJUGljR28+ID0+IHtcbiAgY29uc3QgZ2l0aHViT3B0aW9ucyA9IGN0eC5nZXRDb25maWc8SUdpdGh1YkNvbmZpZz4oJ3BpY0JlZC5naXRodWInKVxuICBpZiAoIWdpdGh1Yk9wdGlvbnMpIHRocm93IG5ldyBFcnJvcihcIkNhbid0IGZpbmQgZ2l0aHViIGNvbmZpZ1wiKVxuXG4gIGNvbnN0IHVwbG9hZFBhdGggPSBmb3JtYXRQYXRoSGVscGVyKHsgcGF0aDogZ2l0aHViT3B0aW9ucy5wYXRoIH0pXG4gIGdpdGh1Yk9wdGlvbnMucGF0aCA9IHVwbG9hZFBhdGhcbiAgZ2l0aHViT3B0aW9ucy5jdXN0b21VcmwgPSAoZ2l0aHViT3B0aW9ucy5jdXN0b21VcmwgfHwgJycpLnJlcGxhY2UoL1xcLyQvLCAnJylcbiAgdHJ5IHtcbiAgICBjb25zdCBpbWdMaXN0ID0gY3R4Lm91dHB1dFxuICAgIGZvciAoY29uc3QgaW1nIG9mIGltZ0xpc3QpIHtcbiAgICAgIGlmIChpbWcuZmlsZU5hbWUgJiYgaW1nLmJ1ZmZlcikge1xuICAgICAgICBjb25zdCBiYXNlNjRJbWFnZSA9IGltZy5iYXNlNjRJbWFnZSB8fCBCdWZmZXIuZnJvbShpbWcuYnVmZmVyKS50b1N0cmluZygnYmFzZTY0JylcbiAgICAgICAgY29uc3QgZGF0YSA9IHtcbiAgICAgICAgICBtZXNzYWdlOiAnVXBsb2FkIGJ5IFBpY0xpc3QnLFxuICAgICAgICAgIGJyYW5jaDogZ2l0aHViT3B0aW9ucy5icmFuY2gsXG4gICAgICAgICAgY29udGVudDogYmFzZTY0SW1hZ2UsXG4gICAgICAgICAgcGF0aDogdXBsb2FkUGF0aCArIGVuY29kZVVSSShpbWcuZmlsZU5hbWUpXG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcG9zdENvbmZpZyA9IHBvc3RPcHRpb25zKGltZy5maWxlTmFtZSwgZ2l0aHViT3B0aW9ucywgZGF0YSlcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCBib2R5OiB7XG4gICAgICAgICAgICBjb250ZW50OiB7XG4gICAgICAgICAgICAgIGRvd25sb2FkX3VybDogc3RyaW5nXG4gICAgICAgICAgICAgIHNoYTogc3RyaW5nXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSA9IGF3YWl0IGN0eC5yZXF1ZXN0KHBvc3RDb25maWcpXG4gICAgICAgICAgaWYgKGJvZHkpIHtcbiAgICAgICAgICAgIGRlbGV0ZSBpbWcuYmFzZTY0SW1hZ2VcbiAgICAgICAgICAgIGRlbGV0ZSBpbWcuYnVmZmVyXG4gICAgICAgICAgICBpbWcuaW1nVXJsID0gZ2l0aHViT3B0aW9ucy5jdXN0b21VcmxcbiAgICAgICAgICAgICAgPyBgJHtnaXRodWJPcHRpb25zLmN1c3RvbVVybH0vJHtlbmNvZGVQYXRoKGAke3VwbG9hZFBhdGh9JHtpbWcuZmlsZU5hbWV9YCl9YFxuICAgICAgICAgICAgICA6IGJvZHkuY29udGVudC5kb3dubG9hZF91cmxcbiAgICAgICAgICAgIGltZy5oYXNoID0gYm9keS5jb250ZW50LnNoYVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1NlcnZlciBlcnJvciwgcGxlYXNlIHRyeSBhZ2FpbicpXG4gICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIChlcnI6IGFueSkge1xuICAgICAgICAgIGlmIChlcnIuc3RhdHVzQ29kZSAhPT0gNDIyKSB0aHJvdyBlcnJcbiAgICAgICAgICBkZWxldGUgaW1nLmJhc2U2NEltYWdlXG4gICAgICAgICAgZGVsZXRlIGltZy5idWZmZXJcbiAgICAgICAgICBjb25zdCByZXMgPSAoYXdhaXQgY3R4LnJlcXVlc3QoZ2V0T3B0aW9ucyhpbWcuZmlsZU5hbWUsIGdpdGh1Yk9wdGlvbnMpKSkgYXMgYW55XG4gICAgICAgICAgaWYgKE9iamVjdC5rZXlzKHJlcykubGVuZ3RoKSB7XG4gICAgICAgICAgICBpbWcuaGFzaCA9IHJlcy5zaGFcbiAgICAgICAgICAgIGltZy5pbWdVcmwgPSBnaXRodWJPcHRpb25zLmN1c3RvbVVybFxuICAgICAgICAgICAgICA/IGAke2dpdGh1Yk9wdGlvbnMuY3VzdG9tVXJsfS8ke2VuY29kZVBhdGgoYCR7dXBsb2FkUGF0aH0ke2ltZy5maWxlTmFtZX1gKX1gXG4gICAgICAgICAgICAgIDogcmVzLmRvd25sb2FkX3VybFxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBlcnJcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGN0eFxuICB9IGNhdGNoIChlcnI6IGFueSkge1xuICAgIGN0eC5lbWl0KElCdWlsZEluRXZlbnQuTk9USUZJQ0FUSU9OLCB7XG4gICAgICB0aXRsZTogY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignVVBMT0FEX0ZBSUxFRCcpLFxuICAgICAgYm9keTogY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQ0hFQ0tfU0VUVElOR1NfQU5EX05FVFdPUksnKVxuICAgIH0pXG4gICAgdGhyb3cgZXJyXG4gIH1cbn1cblxuY29uc3QgY29uZmlnID0gKGN0eDogSVBpY0dvKTogSVBsdWdpbkNvbmZpZ1tdID0+IHtcbiAgY29uc3QgdXNlckNvbmZpZyA9IGN0eC5nZXRDb25maWc8SUdpdGh1YkNvbmZpZz4oJ3BpY0JlZC5naXRodWInKSB8fCB7fVxuICBjb25zdCBjb25maWc6IElQbHVnaW5Db25maWdbXSA9IFtcbiAgICB7XG4gICAgICBuYW1lOiAncmVwbycsXG4gICAgICB0eXBlOiAnaW5wdXQnLFxuICAgICAgZ2V0IHByZWZpeCgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9HSVRIVUJfUkVQTycpXG4gICAgICB9LFxuICAgICAgZ2V0IGFsaWFzKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0dJVEhVQl9SRVBPJylcbiAgICAgIH0sXG4gICAgICBnZXQgbWVzc2FnZSgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9HSVRIVUJfTUVTU0FHRV9SRVBPJylcbiAgICAgIH0sXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLnJlcG8gfHwgJycsXG4gICAgICByZXF1aXJlZDogdHJ1ZVxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ2JyYW5jaCcsXG4gICAgICB0eXBlOiAnaW5wdXQnLFxuICAgICAgZ2V0IHByZWZpeCgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9HSVRIVUJfQlJBTkNIJylcbiAgICAgIH0sXG4gICAgICBnZXQgYWxpYXMoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfR0lUSFVCX0JSQU5DSCcpXG4gICAgICB9LFxuICAgICAgZ2V0IG1lc3NhZ2UoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfR0lUSFVCX01FU1NBR0VfQlJBTkNIJylcbiAgICAgIH0sXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLmJyYW5jaCB8fCAnbWFzdGVyJyxcbiAgICAgIHJlcXVpcmVkOiB0cnVlXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAndG9rZW4nLFxuICAgICAgdHlwZTogJ2lucHV0JyxcbiAgICAgIGdldCBwcmVmaXgoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfR0lUSFVCX1RPS0VOJylcbiAgICAgIH0sXG4gICAgICBnZXQgYWxpYXMoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfR0lUSFVCX1RPS0VOJylcbiAgICAgIH0sXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLnRva2VuIHx8ICcnLFxuICAgICAgcmVxdWlyZWQ6IHRydWVcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdwYXRoJyxcbiAgICAgIHR5cGU6ICdpbnB1dCcsXG4gICAgICBnZXQgcHJlZml4KCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0dJVEhVQl9QQVRIJylcbiAgICAgIH0sXG4gICAgICBnZXQgYWxpYXMoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfR0lUSFVCX1BBVEgnKVxuICAgICAgfSxcbiAgICAgIGdldCBtZXNzYWdlKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0dJVEhVQl9NRVNTQUdFX1BBVEgnKVxuICAgICAgfSxcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcucGF0aCB8fCAnJyxcbiAgICAgIHJlcXVpcmVkOiBmYWxzZVxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ2N1c3RvbVVybCcsXG4gICAgICB0eXBlOiAnaW5wdXQnLFxuICAgICAgZ2V0IHByZWZpeCgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9HSVRIVUJfQ1VTVE9NVVJMJylcbiAgICAgIH0sXG4gICAgICBnZXQgYWxpYXMoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfR0lUSFVCX0NVU1RPTVVSTCcpXG4gICAgICB9LFxuICAgICAgZ2V0IG1lc3NhZ2UoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfR0lUSFVCX01FU1NBR0VfQ1VTVE9NVVJMJylcbiAgICAgIH0sXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLmN1c3RvbVVybCB8fCAnJyxcbiAgICAgIHJlcXVpcmVkOiBmYWxzZVxuICAgIH1cbiAgXVxuICByZXR1cm4gY29uZmlnXG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHJlZ2lzdGVyKGN0eDogSVBpY0dvKTogdm9pZCB7XG4gIGN0eC5oZWxwZXIudXBsb2FkZXIucmVnaXN0ZXIoYnVpbGRJblVwbG9hZGVyTmFtZXMuZ2l0aHViLCB7XG4gICAgZ2V0IG5hbWUoKSB7XG4gICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0dJVEhVQicpXG4gICAgfSxcbiAgICBoYW5kbGUsXG4gICAgY29uZmlnXG4gIH0pXG59XG4iLCJpbXBvcnQgeyBJUGljR28sIElQbHVnaW5Db25maWcsIElJbWd1ckNvbmZpZywgSU9sZFJlcU9wdGlvbnMsIElGdWxsUmVzcG9uc2UgfSBmcm9tICcuLi8uLi90eXBlcydcbmltcG9ydCB7IElCdWlsZEluRXZlbnQgfSBmcm9tICcuLi8uLi91dGlscy9lbnVtJ1xuaW1wb3J0IHsgSUxvY2FsZXNLZXkgfSBmcm9tICcuLi8uLi9pMThuL3poLUNOJ1xuaW1wb3J0IHsgYnVpbGRJblVwbG9hZGVyTmFtZXMgfSBmcm9tICcuL3V0aWxzJ1xuXG5jb25zdCBmb3JtYXRBY2Nlc3NUb2tlbiA9IChhY2Nlc3NUb2tlbjogc3RyaW5nKTogc3RyaW5nID0+XG4gIGFjY2Vzc1Rva2VuID8gKGFjY2Vzc1Rva2VuLnN0YXJ0c1dpdGgoJ0JlYXJlcicpID8gYWNjZXNzVG9rZW4gOiBgQmVhcmVyICR7YWNjZXNzVG9rZW59YCkgOiAnJ1xuXG5jb25zdCBwb3N0T3B0aW9ucyA9IGFzeW5jIChcbiAgY3R4OiBJUGljR28sXG4gIG9wdGlvbnM6IElJbWd1ckNvbmZpZyxcbiAgZmlsZU5hbWU6IHN0cmluZyxcbiAgaW1nQmFzZTY0OiBzdHJpbmdcbik6IFByb21pc2U8SU9sZFJlcU9wdGlvbnM+ID0+IHtcbiAgY29uc3QgY2xpZW50SWQgPSBvcHRpb25zLmNsaWVudElkIHx8ICcnXG4gIGNvbnN0IHVzZXJuYW1lID0gb3B0aW9ucy51c2VybmFtZSB8fCAnJ1xuICBjb25zdCBhY2Nlc3NUb2tlbiA9IGZvcm1hdEFjY2Vzc1Rva2VuKG9wdGlvbnMuYWNjZXNzVG9rZW4gfHwgJycpXG4gIGNvbnN0IGFsYnVtID0gb3B0aW9ucy5hbGJ1bSB8fCAnJ1xuICBsZXQgYXV0aG9yaXphdGlvblxuICBpZiAodXNlcm5hbWUgJiYgYWNjZXNzVG9rZW4pIHtcbiAgICBhdXRob3JpemF0aW9uID0gYWNjZXNzVG9rZW5cbiAgfSBlbHNlIGlmIChjbGllbnRJZCkge1xuICAgIGF1dGhvcml6YXRpb24gPSBgQ2xpZW50LUlEICR7Y2xpZW50SWR9YFxuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBFcnJvcignY2xpZW50SWQgb3IgYWNjZXNzVG9rZW4gaXMgcmVxdWlyZWQnKVxuICB9XG4gIGNvbnN0IHJlcXVlc3RPcHRpb25zOiBJT2xkUmVxT3B0aW9ucyA9IHtcbiAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICB1cmw6ICdodHRwczovL2FwaS5pbWd1ci5jb20vMy9pbWFnZScsXG4gICAgaGVhZGVyczoge1xuICAgICAgQXV0aG9yaXphdGlvbjogYXV0aG9yaXphdGlvbixcbiAgICAgICdjb250ZW50LXR5cGUnOiAnbXVsdGlwYXJ0L2Zvcm0tZGF0YScsXG4gICAgICBIb3N0OiAnYXBpLmltZ3VyLmNvbScsXG4gICAgICAnVXNlci1BZ2VudCc6ICdQaWNMaXN0J1xuICAgIH0sXG4gICAgZm9ybURhdGE6IHtcbiAgICAgIGltYWdlOiBpbWdCYXNlNjQsXG4gICAgICB0eXBlOiAnYmFzZTY0JyxcbiAgICAgIG5hbWU6IGZpbGVOYW1lLFxuICAgICAgZGVzY3JpcHRpb246ICdVcGxvYWRlZCB3aXRoIFBpY0xpc3QnXG4gICAgfVxuICB9XG4gIGlmICh1c2VybmFtZSAmJiBhY2Nlc3NUb2tlbiAmJiBhbGJ1bSkge1xuICAgIGxldCBpbml0UGFnZXMgPSAwXG4gICAgbGV0IHJlc1xuICAgIGxldCBhbGJ1bUhhc2ggPSAnJ1xuICAgIGRvIHtcbiAgICAgIGNvbnN0IGdldEFsYnVtSGFzaE9wdGlvbnM6IElPbGRSZXFPcHRpb25zID0ge1xuICAgICAgICBtZXRob2Q6ICdHRVQnLFxuICAgICAgICB1cmw6IGBodHRwczovL2FwaS5pbWd1ci5jb20vMy9hY2NvdW50LyR7dXNlcm5hbWV9L2FsYnVtcy8ke2luaXRQYWdlc31gLFxuICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgQXV0aG9yaXphdGlvbjogYXV0aG9yaXphdGlvblxuICAgICAgICB9LFxuICAgICAgICBqc29uOiB0cnVlLFxuICAgICAgICByZXNvbHZlV2l0aEZ1bGxSZXNwb25zZTogdHJ1ZSxcbiAgICAgICAgdGltZW91dDogMTAwMDBcbiAgICAgIH1cbiAgICAgIGlmIChvcHRpb25zLnByb3h5KSB7XG4gICAgICAgIGdldEFsYnVtSGFzaE9wdGlvbnMucHJveHkgPSBvcHRpb25zLnByb3h5XG4gICAgICB9XG4gICAgICByZXMgPSAoYXdhaXQgY3R4LnJlcXVlc3QoZ2V0QWxidW1IYXNoT3B0aW9ucykpIGFzIHVua25vd24gYXMgSUZ1bGxSZXNwb25zZVxuICAgICAgaWYgKCEocmVzLnN0YXR1c0NvZGUgPT09IDIwMCAmJiByZXMuYm9keS5zdWNjZXNzKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1NlcnZlciBlcnJvciwgcGxlYXNlIHRyeSBhZ2FpbicpXG4gICAgICB9XG4gICAgICBjb25zdCBhbGJ1bUxpc3QgPSByZXMuYm9keS5kYXRhXG4gICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgYWxidW1MaXN0KSB7XG4gICAgICAgIGlmIChpdGVtLnRpdGxlID09PSBhbGJ1bSkge1xuICAgICAgICAgIGFsYnVtSGFzaCA9IGl0ZW0uaWRcbiAgICAgICAgICBicmVha1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpbml0UGFnZXMrK1xuICAgIH0gd2hpbGUgKHJlcy5ib2R5LmRhdGEubGVuZ3RoID4gMClcbiAgICBpZiAoYWxidW1IYXNoICYmIHJlcXVlc3RPcHRpb25zLmZvcm1EYXRhKSB7XG4gICAgICByZXF1ZXN0T3B0aW9ucy5mb3JtRGF0YS5hbGJ1bSA9IGFsYnVtSGFzaFxuICAgIH1cbiAgfVxuICBpZiAob3B0aW9ucy5wcm94eSkge1xuICAgIHJlcXVlc3RPcHRpb25zLnByb3h5ID0gb3B0aW9ucy5wcm94eVxuICB9XG4gIHJldHVybiByZXF1ZXN0T3B0aW9uc1xufVxuXG5jb25zdCBoYW5kbGUgPSBhc3luYyAoY3R4OiBJUGljR28pOiBQcm9taXNlPElQaWNHbz4gPT4ge1xuICBjb25zdCBpbWd1ck9wdGlvbnMgPSBjdHguZ2V0Q29uZmlnPElJbWd1ckNvbmZpZz4oJ3BpY0JlZC5pbWd1cicpXG4gIGlmICghaW1ndXJPcHRpb25zKSB0aHJvdyBuZXcgRXJyb3IoXCJDYW4ndCBmaW5kIGltZ3VyIGNvbmZpZ1wiKVxuICB0cnkge1xuICAgIGNvbnN0IGltZ0xpc3QgPSBjdHgub3V0cHV0XG4gICAgZm9yIChjb25zdCBpbWcgb2YgaW1nTGlzdCkge1xuICAgICAgaWYgKGltZy5maWxlTmFtZSAmJiBpbWcuYnVmZmVyKSB7XG4gICAgICAgIGNvbnN0IGJhc2U2NEltYWdlID0gaW1nLmJhc2U2NEltYWdlIHx8IEJ1ZmZlci5mcm9tKGltZy5idWZmZXIpLnRvU3RyaW5nKCdiYXNlNjQnKVxuICAgICAgICBjb25zdCBvcHRpb25zID0gYXdhaXQgcG9zdE9wdGlvbnMoY3R4LCBpbWd1ck9wdGlvbnMsIGltZy5maWxlTmFtZSwgYmFzZTY0SW1hZ2UpXG4gICAgICAgIGNvbnN0IHJlczogc3RyaW5nID0gYXdhaXQgY3R4LnJlcXVlc3Qob3B0aW9ucylcbiAgICAgICAgY29uc3QgYm9keSA9IHR5cGVvZiByZXMgPT09ICdzdHJpbmcnID8gSlNPTi5wYXJzZShyZXMpIDogcmVzXG4gICAgICAgIGlmIChib2R5LnN1Y2Nlc3MpIHtcbiAgICAgICAgICBkZWxldGUgaW1nLmJhc2U2NEltYWdlXG4gICAgICAgICAgZGVsZXRlIGltZy5idWZmZXJcbiAgICAgICAgICBpbWcuaW1nVXJsID0gYm9keS5kYXRhLmxpbmtcbiAgICAgICAgICBpbWcuaGFzaCA9IGJvZHkuZGF0YS5kZWxldGVoYXNoXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdTZXJ2ZXIgZXJyb3IsIHBsZWFzZSB0cnkgYWdhaW4nKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBjdHhcbiAgfSBjYXRjaCAoZXJyOiBhbnkpIHtcbiAgICBjdHguZW1pdChJQnVpbGRJbkV2ZW50Lk5PVElGSUNBVElPTiwge1xuICAgICAgdGl0bGU6IGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1VQTE9BRF9GQUlMRUQnKSxcbiAgICAgIGJvZHk6IGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0NIRUNLX1NFVFRJTkdTX0FORF9ORVRXT1JLJyksXG4gICAgICB0ZXh0OiAnaHR0cDovL2RvY3MuaW1ndXIuY29tL2FwaS9lcnJuby8nXG4gICAgfSlcbiAgICB0aHJvdyBlcnI/LnJlc3BvbnNlPy5kYXRhIHx8IGVyclxuICB9XG59XG5cbmNvbnN0IGNvbmZpZyA9IChjdHg6IElQaWNHbyk6IElQbHVnaW5Db25maWdbXSA9PiB7XG4gIGNvbnN0IHVzZXJDb25maWcgPSBjdHguZ2V0Q29uZmlnPElJbWd1ckNvbmZpZz4oJ3BpY0JlZC5pbWd1cicpIHx8IHt9XG4gIGNvbnN0IGNvbmZpZzogSVBsdWdpbkNvbmZpZ1tdID0gW1xuICAgIHtcbiAgICAgIG5hbWU6ICdjbGllbnRJZCcsXG4gICAgICB0eXBlOiAnaW5wdXQnLFxuICAgICAgZ2V0IHByZWZpeCgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9JTUdVUl9DTElFTlRJRCcpXG4gICAgICB9LFxuICAgICAgZ2V0IGFsaWFzKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0lNR1VSX0NMSUVOVElEJylcbiAgICAgIH0sXG4gICAgICBnZXQgbWVzc2FnZSgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9JTUdVUl9NRVNTQUdFX0NMSUVOVElEJylcbiAgICAgIH0sXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLmNsaWVudElkIHx8ICcnLFxuICAgICAgcmVxdWlyZWQ6IGZhbHNlXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAndXNlcm5hbWUnLFxuICAgICAgdHlwZTogJ2lucHV0JyxcbiAgICAgIGdldCBwcmVmaXgoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfSU1HVVJfVVNFUk5BTUUnKVxuICAgICAgfSxcbiAgICAgIGdldCBhbGlhcygpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9JTUdVUl9VU0VSTkFNRScpXG4gICAgICB9LFxuICAgICAgZ2V0IG1lc3NhZ2UoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfSU1HVVJfTUVTU0FHRV9VU0VSTkFNRScpXG4gICAgICB9LFxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy51c2VybmFtZSB8fCAnJyxcbiAgICAgIHJlcXVpcmVkOiBmYWxzZVxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ2FjY2Vzc1Rva2VuJyxcbiAgICAgIHR5cGU6ICdpbnB1dCcsXG4gICAgICBnZXQgcHJlZml4KCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0lNR1VSX0FDQ0VTU19UT0tFTicpXG4gICAgICB9LFxuICAgICAgZ2V0IGFsaWFzKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0lNR1VSX0FDQ0VTU19UT0tFTicpXG4gICAgICB9LFxuICAgICAgZ2V0IG1lc3NhZ2UoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfSU1HVVJfTUVTU0FHRV9BQ0NFU1NfVE9LRU4nKVxuICAgICAgfSxcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuYWNjZXNzVG9rZW4gfHwgJycsXG4gICAgICByZXF1aXJlZDogZmFsc2VcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdhbGJ1bScsXG4gICAgICB0eXBlOiAnaW5wdXQnLFxuICAgICAgZ2V0IHByZWZpeCgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9JTUdVUl9BTEJVTScpXG4gICAgICB9LFxuICAgICAgZ2V0IGFsaWFzKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0lNR1VSX0FMQlVNJylcbiAgICAgIH0sXG4gICAgICBnZXQgbWVzc2FnZSgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9JTUdVUl9NRVNTQUdFX0FMQlVNJylcbiAgICAgIH0sXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLmFsYnVtIHx8ICcnLFxuICAgICAgcmVxdWlyZWQ6IGZhbHNlXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAncHJveHknLFxuICAgICAgdHlwZTogJ2lucHV0JyxcbiAgICAgIGdldCBwcmVmaXgoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfSU1HVVJfUFJPWFknKVxuICAgICAgfSxcbiAgICAgIGdldCBhbGlhcygpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9JTUdVUl9QUk9YWScpXG4gICAgICB9LFxuICAgICAgZ2V0IG1lc3NhZ2UoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfSU1HVVJfTUVTU0FHRV9QUk9YWScpXG4gICAgICB9LFxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5wcm94eSB8fCAnJyxcbiAgICAgIHJlcXVpcmVkOiBmYWxzZVxuICAgIH1cbiAgXVxuICByZXR1cm4gY29uZmlnXG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHJlZ2lzdGVyKGN0eDogSVBpY0dvKTogdm9pZCB7XG4gIGN0eC5oZWxwZXIudXBsb2FkZXIucmVnaXN0ZXIoYnVpbGRJblVwbG9hZGVyTmFtZXMuaW1ndXIsIHtcbiAgICBnZXQgbmFtZSgpIHtcbiAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfSU1HVVInKVxuICAgIH0sXG4gICAgaGFuZGxlLFxuICAgIGNvbmZpZ1xuICB9KVxufVxuIiwiaW1wb3J0IGZzLCB7IGVuc3VyZURpclN5bmMgfSBmcm9tICdmcy1leHRyYSdcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnXG5cbmltcG9ydCB7IElQaWNHbywgSVBsdWdpbkNvbmZpZywgSUxvY2FsQ29uZmlnIH0gZnJvbSAnLi4vLi4vdHlwZXMnXG5pbXBvcnQgeyBJQnVpbGRJbkV2ZW50IH0gZnJvbSAnLi4vLi4vdXRpbHMvZW51bSdcbmltcG9ydCB7IElMb2NhbGVzS2V5IH0gZnJvbSAnLi4vLi4vaTE4bi96aC1DTidcblxuaW1wb3J0IHsgYnVpbGRJblVwbG9hZGVyTmFtZXMsIGVuY29kZVBhdGgsIGZvcm1hdFBhdGhIZWxwZXIgfSBmcm9tICcuL3V0aWxzJ1xuXG5jb25zdCBoYW5kbGUgPSBhc3luYyAoY3R4OiBJUGljR28pOiBQcm9taXNlPElQaWNHbz4gPT4ge1xuICBjb25zdCBsb2NhbENvbmZpZyA9IGN0eC5nZXRDb25maWc8SUxvY2FsQ29uZmlnPigncGljQmVkLmxvY2FsJylcbiAgaWYgKCFsb2NhbENvbmZpZykgdGhyb3cgbmV3IEVycm9yKCdDYW4gbm90IGZpbmQgbG9jYWwgY29uZmlnIScpXG5cbiAgY29uc3QgdXBsb2FkUGF0aCA9IGxvY2FsQ29uZmlnLnBhdGggfHwgJydcbiAgY29uc3QgY3VzdG9tVXJsID0gKGxvY2FsQ29uZmlnLmN1c3RvbVVybCB8fCAnJykucmVwbGFjZSgvXFwvJC8sICcnKVxuICBjb25zdCB3ZWJQYXRoID0gZm9ybWF0UGF0aEhlbHBlcih7XG4gICAgcGF0aDogbG9jYWxDb25maWcud2ViUGF0aD8ucmVwbGFjZSgvXFxcXC9nLCAnLycpXG4gIH0pXG4gIGNvbnN0IGltZ0xpc3QgPSBjdHgub3V0cHV0XG4gIGZvciAoY29uc3QgaW1nIG9mIGltZ0xpc3QpIHtcbiAgICBpZiAoaW1nLmZpbGVOYW1lICYmIGltZy5idWZmZXIpIHtcbiAgICAgIGxldCBpbWFnZSA9IGltZy5idWZmZXJcbiAgICAgIGlmICghaW1hZ2UgJiYgaW1nLmJhc2U2NEltYWdlKSB7XG4gICAgICAgIGltYWdlID0gQnVmZmVyLmZyb20oaW1nLmJhc2U2NEltYWdlLCAnYmFzZTY0JylcbiAgICAgIH1cbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGltZ1RlbXBQYXRoID0gcGF0aC5qb2luKGN0eC5iYXNlRGlyLCAnaW1nVGVtcCcsICdsb2NhbCcpXG4gICAgICAgIGNvbnN0IGZpbGVJbWdUZW1wUGF0aCA9IHBhdGguam9pbihpbWdUZW1wUGF0aCwgaW1nLmZpbGVOYW1lKVxuICAgICAgICBjb25zdCBmaWxlVXBsb2FkUGF0aCA9IHBhdGguam9pbih1cGxvYWRQYXRoLCBpbWcuZmlsZU5hbWUpXG4gICAgICAgIGVuc3VyZURpclN5bmMocGF0aC5kaXJuYW1lKGZpbGVVcGxvYWRQYXRoKSlcbiAgICAgICAgZW5zdXJlRGlyU3luYyhwYXRoLmRpcm5hbWUoZmlsZUltZ1RlbXBQYXRoKSlcbiAgICAgICAgZnMud3JpdGVGaWxlU3luYyhmaWxlVXBsb2FkUGF0aCwgaW1hZ2UpXG4gICAgICAgIGZzLmNvcHlGaWxlU3luYyhmaWxlVXBsb2FkUGF0aCwgZmlsZUltZ1RlbXBQYXRoKVxuICAgICAgICBkZWxldGUgaW1nLmJhc2U2NEltYWdlXG4gICAgICAgIGRlbGV0ZSBpbWcuYnVmZmVyXG4gICAgICAgIGlmIChjdXN0b21VcmwpIHtcbiAgICAgICAgICBpbWcuaW1nVXJsID0gYCR7Y3VzdG9tVXJsfS8ke2VuY29kZVBhdGgoYCR7d2ViUGF0aH0ke2ltZy5maWxlTmFtZX1gKX1gXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaW1nLmltZ1VybCA9IHBhdGguam9pbih1cGxvYWRQYXRoLCBpbWcuZmlsZU5hbWUpXG4gICAgICAgIH1cbiAgICAgICAgaW1nLmhhc2ggPSBwYXRoLmpvaW4odXBsb2FkUGF0aCwgaW1nLmZpbGVOYW1lKVxuICAgICAgICBpbWcuZ2FsbGVyeVBhdGggPSBgaHR0cDovL2xvY2FsaG9zdDozNjY5OS9sb2NhbC8ke2VuY29kZVBhdGgoaW1nLmZpbGVOYW1lKS5yZXBsYWNlKC9eXFwvLywgJycpfWBcbiAgICAgIH0gY2F0Y2ggKGU6IGFueSkge1xuICAgICAgICBjdHguZW1pdChJQnVpbGRJbkV2ZW50Lk5PVElGSUNBVElPTiwge1xuICAgICAgICAgIHRpdGxlOiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdVUExPQURfRkFJTEVEJyksXG4gICAgICAgICAgYm9keTogJ2ZhaWxlZCB0byB1cGxvYWQgaW1hZ2UnXG4gICAgICAgIH0pXG4gICAgICAgIHRocm93IG5ldyBFcnJvcignZmFpbGVkIHRvIHVwbG9hZCBpbWFnZScpXG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBjdHhcbn1cblxuY29uc3QgY29uZmlnID0gKGN0eDogSVBpY0dvKTogSVBsdWdpbkNvbmZpZ1tdID0+IHtcbiAgY29uc3QgdXNlckNvbmZpZyA9IGN0eC5nZXRDb25maWc8SUxvY2FsQ29uZmlnPigncGljQmVkLmxvY2FsJykgfHwge31cbiAgY29uc3QgY29uZmlnOiBJUGx1Z2luQ29uZmlnW10gPSBbXG4gICAge1xuICAgICAgbmFtZTogJ3BhdGgnLFxuICAgICAgdHlwZTogJ2lucHV0JyxcbiAgICAgIGdldCBwcmVmaXgoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfTE9DQUxfUEFUSCcpXG4gICAgICB9LFxuICAgICAgZ2V0IGFsaWFzKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0xPQ0FMX1BBVEgnKVxuICAgICAgfSxcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcucGF0aCB8fCAnJyxcbiAgICAgIGdldCBtZXNzYWdlKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0xPQ0FMX01FU1NBR0VfUEFUSCcpXG4gICAgICB9LFxuICAgICAgcmVxdWlyZWQ6IHRydWVcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdjdXN0b21VcmwnLFxuICAgICAgdHlwZTogJ2lucHV0JyxcbiAgICAgIGdldCBwcmVmaXgoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfTE9DQUxfQ1VTVE9NVVJMJylcbiAgICAgIH0sXG4gICAgICBnZXQgYWxpYXMoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfTE9DQUxfQ1VTVE9NVVJMJylcbiAgICAgIH0sXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLmN1c3RvbVVybCB8fCAnJyxcbiAgICAgIGdldCBtZXNzYWdlKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0xPQ0FMX01FU1NBR0VfQ1VTVE9NVVJMJylcbiAgICAgIH0sXG4gICAgICByZXF1aXJlZDogZmFsc2VcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICd3ZWJQYXRoJyxcbiAgICAgIHR5cGU6ICdpbnB1dCcsXG4gICAgICBnZXQgcHJlZml4KCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0xPQ0FMX1dFQlBBVEgnKVxuICAgICAgfSxcbiAgICAgIGdldCBhbGlhcygpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9MT0NBTF9XRUJQQVRIJylcbiAgICAgIH0sXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLndlYlBhdGggfHwgJycsXG4gICAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgICBnZXQgbWVzc2FnZSgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9MT0NBTF9NRVNTQUdFX1dFQlBBVEgnKVxuICAgICAgfVxuICAgIH1cbiAgXVxuICByZXR1cm4gY29uZmlnXG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHJlZ2lzdGVyKGN0eDogSVBpY0dvKTogdm9pZCB7XG4gIGN0eC5oZWxwZXIudXBsb2FkZXIucmVnaXN0ZXIoYnVpbGRJblVwbG9hZGVyTmFtZXMubG9jYWwsIHtcbiAgICBnZXQgbmFtZSgpIHtcbiAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfTE9DQUwnKVxuICAgIH0sXG4gICAgaGFuZGxlLFxuICAgIGNvbmZpZ1xuICB9KVxufVxuIiwiLy8gaHR0cHM6Ly9naXRodWIuY29tL2hlbGxvZGszNC9waWNnby1wbHVnaW4tbGFua29uZ1xuLy8gTElDRU5TRTogTUlUXG5cbmltcG9ydCBodHRwcyBmcm9tICdodHRwcydcbmltcG9ydCB7IElMc2t5Q29uZmlnLCBJUGljR28sIElQbHVnaW5Db25maWcgfSBmcm9tICcuLi8uLi90eXBlcydcbmltcG9ydCB7IElMb2NhbGVzS2V5IH0gZnJvbSAnLi4vLi4vaTE4bi96aC1DTidcbmltcG9ydCB7IElCdWlsZEluRXZlbnQgfSBmcm9tICcuLi8uLi91dGlscy9lbnVtJ1xuaW1wb3J0IHsgYnVpbGRJblVwbG9hZGVyTmFtZXMgfSBmcm9tICcuL3V0aWxzJ1xuXG5leHBvcnQgaW50ZXJmYWNlIElNR1RZUEUge1xuICBpbWdVcmw/OiBzdHJpbmdcbiAgdHlwZT86IHN0cmluZ1xuICBrZXk/OiBzdHJpbmdcbiAgaWQ/OiBzdHJpbmdcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJVjJGT1JNREFUQSB7XG4gIGZpbGU6IHtcbiAgICB2YWx1ZTogQnVmZmVyXG4gICAgb3B0aW9uczoge1xuICAgICAgZmlsZW5hbWU6IHN0cmluZ1xuICAgIH1cbiAgfVxuICBzc2w6IHN0cmluZ1xuICBzdHJhdGVneV9pZD86IHN0cmluZ1xuICBhbGJ1bV9pZD86IHN0cmluZ1xuICBwZXJtaXNzaW9uPzogbnVtYmVyXG59XG5cbmNvbnN0IHBvc3RPcHRpb25zID0gKG9wdGlvbnM6IElMc2t5Q29uZmlnLCBmaWxlTmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkLCBpbWFnZTogQnVmZmVyKTogYW55ID0+IHtcbiAgbGV0IGhvc3QgPSBvcHRpb25zLmhvc3RcbiAgaG9zdCA9IGhvc3QucmVwbGFjZSgvXFwvJC8sICcnKVxuICBjb25zdCBpc1YyID0gb3B0aW9ucy52ZXJzaW9uID09PSAnVjInXG4gIGNvbnN0IHRva2VuID0gb3B0aW9ucy50b2tlblxuXG4gIGNvbnN0IHYxSGVhZGVycyA9IHtcbiAgICAnQ29udGVudC1UeXBlJzogJ211bHRpcGFydC9mb3JtLWRhdGEnLFxuICAgICdVc2VyLUFnZW50JzogJ1BpY0xpc3QnLFxuICAgIENvbm5lY3Rpb246ICdrZWVwLWFsaXZlJyxcbiAgICB0b2tlbjogdG9rZW4gfHwgdW5kZWZpbmVkXG4gIH1cbiAgY29uc3QgdjFGb3JtRGF0YSA9IHtcbiAgICBpbWFnZToge1xuICAgICAgdmFsdWU6IGltYWdlLFxuICAgICAgb3B0aW9uczoge1xuICAgICAgICBmaWxlbmFtZTogZmlsZU5hbWUhXG4gICAgICB9XG4gICAgfSxcbiAgICBzc2w6ICd0cnVlJ1xuICB9XG5cbiAgY29uc3QgdjJIZWFkZXJzID0ge1xuICAgICdDb250ZW50LVR5cGUnOiAnbXVsdGlwYXJ0L2Zvcm0tZGF0YScsXG4gICAgJ1VzZXItQWdlbnQnOiAnUGljTGlzdCcsXG4gICAgQ29ubmVjdGlvbjogJ2tlZXAtYWxpdmUnLFxuICAgIEFjY2VwdDogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgIEF1dGhvcml6YXRpb246IHRva2VuIHx8IHVuZGVmaW5lZFxuICB9XG4gIGNvbnN0IHN0cmF0ZWd5SWQgPSBvcHRpb25zLnN0cmF0ZWd5SWRcbiAgY29uc3QgYWxidW1JZCA9IG9wdGlvbnMuYWxidW1JZFxuICBsZXQgcGVybWlzc2lvbjogYW55ID0gb3B0aW9ucy5wZXJtaXNzaW9uLnZhbHVlXG4gIGlmIChwZXJtaXNzaW9uID09PSB1bmRlZmluZWQpIHtcbiAgICBwZXJtaXNzaW9uID0gb3B0aW9ucy5wZXJtaXNzaW9uXG4gIH1cbiAgY29uc3QgdjJGb3JtRGF0YTogSVYyRk9STURBVEEgPSB7XG4gICAgZmlsZToge1xuICAgICAgdmFsdWU6IGltYWdlLFxuICAgICAgb3B0aW9uczoge1xuICAgICAgICBmaWxlbmFtZTogZmlsZU5hbWUhXG4gICAgICB9XG4gICAgfSxcbiAgICBzc2w6ICd0cnVlJyxcbiAgICBzdHJhdGVneV9pZDogc3RyYXRlZ3lJZCxcbiAgICBhbGJ1bV9pZDogYWxidW1JZCxcbiAgICBwZXJtaXNzaW9uXG4gIH1cbiAgaWYgKCFzdHJhdGVneUlkKSB7XG4gICAgZGVsZXRlIHYyRm9ybURhdGEuc3RyYXRlZ3lfaWRcbiAgfVxuICBpZiAoIWFsYnVtSWQpIHtcbiAgICBkZWxldGUgdjJGb3JtRGF0YS5hbGJ1bV9pZFxuICB9XG4gIGlmICghKHBlcm1pc3Npb24gPT09IDAgfHwgcGVybWlzc2lvbiA9PT0gMSkpIHtcbiAgICBkZWxldGUgdjJGb3JtRGF0YS5wZXJtaXNzaW9uXG4gIH1cblxuICBjb25zdCByZXF1ZXN0QWdlbnQgPSBuZXcgaHR0cHMuQWdlbnQoe1xuICAgIHJlamVjdFVuYXV0aG9yaXplZDogZmFsc2VcbiAgfSlcbiAgcmV0dXJuIHtcbiAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICB1cmw6IGlzVjIgPyBgJHtob3N0fS9hcGkvdjEvdXBsb2FkYCA6IGAke2hvc3R9L2FwaS91cGxvYWRgLFxuICAgIGFnZW50OiByZXF1ZXN0QWdlbnQsXG4gICAgaGVhZGVyczogaXNWMiA/IHYySGVhZGVycyA6IHYxSGVhZGVycyxcbiAgICBmb3JtRGF0YTogaXNWMiA/IHYyRm9ybURhdGEgOiB2MUZvcm1EYXRhXG4gIH1cbn1cblxuY29uc3QgaGFuZGxlID0gYXN5bmMgKGN0eDogSVBpY0dvKTogUHJvbWlzZTxJUGljR28+ID0+IHtcbiAgY29uc3QgbHNreU9wdGlvbnMgPSBjdHguZ2V0Q29uZmlnPElMc2t5Q29uZmlnPigncGljQmVkLmxza3lwbGlzdCcpXG4gIGlmICghbHNreU9wdGlvbnMpIHRocm93IG5ldyBFcnJvcihcIkNhbid0IGZpbmQgbHNreSB1cGxvYWRlciBjb25maWdcIilcblxuICBjb25zdCBpbWdMaXN0ID0gY3R4Lm91dHB1dFxuICBmb3IgKGNvbnN0IGltZyBvZiBpbWdMaXN0KSB7XG4gICAgbGV0IGltYWdlID0gaW1nLmJ1ZmZlciFcbiAgICBpZiAoIWltYWdlICYmIGltZy5iYXNlNjRJbWFnZSkge1xuICAgICAgaW1hZ2UgPSBCdWZmZXIuZnJvbShpbWcuYmFzZTY0SW1hZ2UsICdiYXNlNjQnKVxuICAgIH1cbiAgICBjb25zdCBwb3N0Q29uZmlnID0gcG9zdE9wdGlvbnMobHNreU9wdGlvbnMsIGltZy5maWxlTmFtZSwgaW1hZ2UpXG4gICAgbGV0IGJvZHkgPSAoYXdhaXQgY3R4LnJlcXVlc3QocG9zdENvbmZpZykpIGFzIGFueVxuICAgIGJvZHkgPSB0eXBlb2YgYm9keSA9PT0gJ3N0cmluZycgPyBKU09OLnBhcnNlKGJvZHkpIDogYm9keVxuICAgIGNvbnN0IGlzVjIgPSBsc2t5T3B0aW9ucy52ZXJzaW9uID09PSAnVjInXG4gICAgY29uc3QgY29uZGl0aW9uID0gaXNWMiA/IGJvZHkuc3RhdHVzID09PSB0cnVlIDogYm9keS5jb2RlID09PSAyMDBcbiAgICBpZiAoY29uZGl0aW9uKSB7XG4gICAgICBkZWxldGUgaW1nLmJhc2U2NEltYWdlXG4gICAgICBkZWxldGUgaW1nLmJ1ZmZlclxuICAgICAgaW1nLmltZ1VybCA9IGlzVjIgPyBib2R5LmRhdGEubGlua3MudXJsIDogYm9keS5kYXRhLnVybFxuICAgICAgaWYgKGlzVjIpIHtcbiAgICAgICAgaW1nLmhhc2ggPSBib2R5LmRhdGEua2V5XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGN0eC5lbWl0KElCdWlsZEluRXZlbnQuTk9USUZJQ0FUSU9OLCB7XG4gICAgICAgIHRpdGxlOiAndXBsb2FkIGZhaWxlZCcsXG4gICAgICAgIGJvZHk6IGJvZHkubWVzc2FnZVxuICAgICAgfSlcbiAgICAgIHRocm93IG5ldyBFcnJvcihib2R5Lm1lc3NhZ2UpXG4gICAgfVxuICB9XG4gIHJldHVybiBjdHhcbn1cblxuY29uc3QgY29uZmlnID0gKGN0eDogSVBpY0dvKTogSVBsdWdpbkNvbmZpZ1tdID0+IHtcbiAgY29uc3QgdXNlckNvbmZpZyA9IGN0eC5nZXRDb25maWc8SUxza3lDb25maWc+KCdwaWNCZWQubHNreXBsaXN0JykgfHwge31cbiAgY29uc3QgY29uZmlnOiBJUGx1Z2luQ29uZmlnW10gPSBbXG4gICAge1xuICAgICAgbmFtZTogJ3ZlcnNpb24nLFxuICAgICAgdHlwZTogJ2xpc3QnLFxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy52ZXJzaW9uIHx8ICdWMScsXG4gICAgICBnZXQgcHJlZml4KCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0xTS1lfVkVSU0lPTicpXG4gICAgICB9LFxuICAgICAgZ2V0IGFsaWFzKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0xTS1lfVkVSU0lPTicpXG4gICAgICB9LFxuICAgICAgZ2V0IG1lc3NhZ2UoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfTFNLWV9NRVNTQUdFX1ZFUlNJT04nKVxuICAgICAgfSxcbiAgICAgIGNob2ljZXM6IFsnVjEnLCAnVjInXSxcbiAgICAgIHJlcXVpcmVkOiB0cnVlXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAnaG9zdCcsXG4gICAgICB0eXBlOiAnaW5wdXQnLFxuICAgICAgZ2V0IHByZWZpeCgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9MU0tZX0hPU1QnKVxuICAgICAgfSxcbiAgICAgIGdldCBhbGlhcygpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9MU0tZX0hPU1QnKVxuICAgICAgfSxcbiAgICAgIGdldCBtZXNzYWdlKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0xTS1lfTUVTU0FHRV9IT1NUJylcbiAgICAgIH0sXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLmhvc3QgfHwgJycsXG4gICAgICByZXF1aXJlZDogdHJ1ZVxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ3Rva2VuJyxcbiAgICAgIHR5cGU6ICdpbnB1dCcsXG4gICAgICBnZXQgcHJlZml4KCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0xTS1lfVE9LRU4nKVxuICAgICAgfSxcbiAgICAgIGdldCBhbGlhcygpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9MU0tZX1RPS0VOJylcbiAgICAgIH0sXG4gICAgICBnZXQgbWVzc2FnZSgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9MU0tZX01FU1NBR0VfVE9LRU4nKVxuICAgICAgfSxcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcudG9rZW4sXG4gICAgICByZXF1aXJlZDogdHJ1ZVxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ3N0cmF0ZWd5SWQnLFxuICAgICAgdHlwZTogJ2lucHV0JyxcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuc3RyYXRlZ3lJZCxcbiAgICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICAgIGdldCBwcmVmaXgoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfTFNLWV9TVFJBVEVHWV9JRCcpXG4gICAgICB9LFxuICAgICAgZ2V0IGFsaWFzKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0xTS1lfU1RSQVRFR1lfSUQnKVxuICAgICAgfSxcbiAgICAgIGdldCBtZXNzYWdlKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0xTS1lfTUVTU0FHRV9TVFJBVEVHWV9JRCcpXG4gICAgICB9XG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAnYWxidW1JZCcsXG4gICAgICB0eXBlOiAnaW5wdXQnLFxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5hbGJ1bUlkLFxuICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgICAgZ2V0IHByZWZpeCgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9MU0tZX0FMQlVNX0lEJylcbiAgICAgIH0sXG4gICAgICBnZXQgYWxpYXMoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfTFNLWV9BTEJVTV9JRCcpXG4gICAgICB9LFxuICAgICAgZ2V0IG1lc3NhZ2UoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfTFNLWV9NRVNTQUdFX0FMQlVNX0lEJylcbiAgICAgIH1cbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdwZXJtaXNzaW9uJyxcbiAgICAgIHR5cGU6ICdsaXN0JyxcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcucGVybWlzc2lvbiB8fCAncHJpdmF0ZShkZWZhdWx0KScsXG4gICAgICBjaG9pY2VzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiAncHJpdmF0ZShkZWZhdWx0KScsXG4gICAgICAgICAgdmFsdWU6IDBcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6ICdwdWJsaWMnLFxuICAgICAgICAgIHZhbHVlOiAxXG4gICAgICAgIH1cbiAgICAgIF0sXG4gICAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgICBnZXQgcHJlZml4KCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0xTS1lfUEVSTUlTU0lPTicpXG4gICAgICB9LFxuICAgICAgZ2V0IGFsaWFzKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0xTS1lfUEVSTUlTU0lPTicpXG4gICAgICB9LFxuICAgICAgZ2V0IG1lc3NhZ2UoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfTFNLWV9NRVNTQUdFX1BFUk1JU1NJT04nKVxuICAgICAgfVxuICAgIH1cbiAgXVxuICByZXR1cm4gY29uZmlnXG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHJlZ2lzdGVyKGN0eDogSVBpY0dvKTogdm9pZCB7XG4gIGN0eC5oZWxwZXIudXBsb2FkZXIucmVnaXN0ZXIoYnVpbGRJblVwbG9hZGVyTmFtZXMubHNreXBsaXN0LCB7XG4gICAgZ2V0IG5hbWUoKSB7XG4gICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0xTS1lfUExJU1QnKVxuICAgIH0sXG4gICAgaGFuZGxlLFxuICAgIGNvbmZpZ1xuICB9KVxufVxuIiwiaW1wb3J0IHsgbG9va3VwIH0gZnJvbSAnbWltZS10eXBlcydcbmltcG9ydCB7IElQaWNMaXN0Q29uZmlnLCBJUGljR28sIElQbHVnaW5Db25maWcsIElPbGRSZXFPcHRpb25zV2l0aEZ1bGxSZXNwb25zZSB9IGZyb20gJy4uLy4uL3R5cGVzJ1xuaW1wb3J0IHsgSUJ1aWxkSW5FdmVudCB9IGZyb20gJy4uLy4uL3V0aWxzL2VudW0nXG5pbXBvcnQgeyBJTG9jYWxlc0tleSB9IGZyb20gJy4uLy4uL2kxOG4vemgtQ04nXG5pbXBvcnQgeyBidWlsZEluVXBsb2FkZXJOYW1lcyB9IGZyb20gJy4vdXRpbHMnXG5cbmNvbnN0IHBvc3RPcHRpb25zID0gKG9wdGlvbnM6IElQaWNMaXN0Q29uZmlnLCBmaWxlTmFtZTogc3RyaW5nLCBpbWFnZTogQnVmZmVyKTogSU9sZFJlcU9wdGlvbnNXaXRoRnVsbFJlc3BvbnNlID0+IHtcbiAgY29uc3QgeyBob3N0ID0gJzEyNy4wLjAuMScsIHBvcnQgPSAnJywgcGljYmVkID0gJycsIGNvbmZpZ05hbWUgPSAnRGVmYXVsdCcsIHNlcnZlcktleSA9ICcnIH0gPSBvcHRpb25zXG4gIGNvbnN0IGlzSXAgPSBob3N0Lm1hdGNoKC8oXFxkKylcXC4oXFxkKylcXC4oXFxkKylcXC4oXFxkKykvKVxuICBjb25zdCBwcm90b2NvbCA9IGhvc3Quc3RhcnRzV2l0aCgnaHR0cHM6Ly8nKSA/ICdodHRwczovLycgOiAnaHR0cDovLydcbiAgY29uc3QgZm9ybWF0SG9zdCA9IGhvc3QucmVwbGFjZSgvKGh0dHA6XFwvXFwvfGh0dHBzOlxcL1xcLykvLCAnJylcbiAgY29uc3QgZGVmYXVsdFBvcnQgPSBwb3J0IHx8ICczNjY3NydcbiAgY29uc3QgZW5kcG9pbnQgPSBpc0lwXG4gICAgPyBgJHtwcm90b2NvbH0ke2Zvcm1hdEhvc3R9OiR7ZGVmYXVsdFBvcnR9YFxuICAgIDogYCR7cHJvdG9jb2x9JHtmb3JtYXRIb3N0fSR7cG9ydCA/IGA6JHtwb3J0fWAgOiAnJ31gXG4gIGNvbnN0IHVybCA9IGAke2VuZHBvaW50fS91cGxvYWQ/Y29uZmlnTmFtZT0ke2NvbmZpZ05hbWV9JHtwaWNiZWQgPyBgJnBpY2JlZD0ke3BpY2JlZH1gIDogJyd9JHtzZXJ2ZXJLZXkgPyBgJmtleT0ke3NlcnZlcktleX1gIDogJyd9YFxuICByZXR1cm4ge1xuICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgIHVybCxcbiAgICBoZWFkZXJzOiB7XG4gICAgICAnY29udGVudC10eXBlJzogJ211bHRpcGFydC9mb3JtLWRhdGEnXG4gICAgfSxcbiAgICBmb3JtRGF0YToge1xuICAgICAgZmlsZToge1xuICAgICAgICB2YWx1ZTogaW1hZ2UsXG4gICAgICAgIG9wdGlvbnM6IHtcbiAgICAgICAgICBmaWxlbmFtZTogZmlsZU5hbWUsXG4gICAgICAgICAgY29udGVudFR5cGU6IGxvb2t1cChmaWxlTmFtZSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gICAgcmVzb2x2ZVdpdGhGdWxsUmVzcG9uc2U6IHRydWVcbiAgfVxufVxuXG5jb25zdCBoYW5kbGUgPSBhc3luYyAoY3R4OiBJUGljR28pOiBQcm9taXNlPElQaWNHbyB8IGJvb2xlYW4+ID0+IHtcbiAgY29uc3QgcGljbGlzdE9wdGlvbnMgPSBjdHguZ2V0Q29uZmlnPElQaWNMaXN0Q29uZmlnPigncGljQmVkLnBpY2xpc3QnKVxuICBpZiAoIXBpY2xpc3RPcHRpb25zKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiQ2FuJ3QgZmluZCBQaWNMaXN0IGNvbmZpZ1wiKVxuICB9XG4gIHRyeSB7XG4gICAgY29uc3QgaW1nTGlzdCA9IGN0eC5vdXRwdXRcbiAgICBmb3IgKGNvbnN0IGltZyBvZiBpbWdMaXN0KSB7XG4gICAgICBpZiAoaW1nLmZpbGVOYW1lICYmIGltZy5idWZmZXIpIHtcbiAgICAgICAgbGV0IGltYWdlID0gaW1nLmJ1ZmZlclxuICAgICAgICBpZiAoIWltYWdlICYmIGltZy5iYXNlNjRJbWFnZSkge1xuICAgICAgICAgIGltYWdlID0gQnVmZmVyLmZyb20oaW1nLmJhc2U2NEltYWdlLCAnYmFzZTY0JylcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBvcHRpb25zID0gcG9zdE9wdGlvbnMocGljbGlzdE9wdGlvbnMsIGltZy5maWxlTmFtZSwgaW1hZ2UpXG5cbiAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgY3R4XG4gICAgICAgICAgLnJlcXVlc3Qob3B0aW9ucylcbiAgICAgICAgICAudGhlbigocmVzOiBhbnkpID0+IHJlcylcbiAgICAgICAgICAuY2F0Y2goKGVycjogRXJyb3IpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIHN0YXR1c0NvZGU6IDQwMCxcbiAgICAgICAgICAgICAgYm9keToge1xuICAgICAgICAgICAgICAgIG1zZzogY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQVVUSF9GQUlMRUQnKSxcbiAgICAgICAgICAgICAgICBlcnJcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG4gICAgICAgIGlmIChyZXMuc3RhdHVzQ29kZSA9PT0gMjAwICYmIHJlcy5ib2R5Py5zdWNjZXNzKSB7XG4gICAgICAgICAgZGVsZXRlIGltZy5iYXNlNjRJbWFnZVxuICAgICAgICAgIGRlbGV0ZSBpbWcuYnVmZmVyXG4gICAgICAgICAgaW1nLmltZ1VybCA9IHJlcy5ib2R5LnJlc3VsdFswXVxuICAgICAgICAgIGltZy5mdWxsUmVzdWx0ID0gcmVzLmJvZHkuZnVsbFJlc3VsdCA/IHJlcy5ib2R5LmZ1bGxSZXN1bHRbMF0gOiAnJ1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihyZXMuYm9keS5tZXNzYWdlKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBjdHhcbiAgfSBjYXRjaCAoZXJyOiBhbnkpIHtcbiAgICBjdHguZW1pdChJQnVpbGRJbkV2ZW50Lk5PVElGSUNBVElPTiwge1xuICAgICAgdGl0bGU6IGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1VQTE9BRF9GQUlMRUQnKSxcbiAgICAgIGJvZHk6IGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0NIRUNLX1NFVFRJTkdTJylcbiAgICB9KVxuICAgIHRocm93IGVyclxuICB9XG59XG5cbmNvbnN0IGNvbmZpZyA9IChjdHg6IElQaWNHbyk6IElQbHVnaW5Db25maWdbXSA9PiB7XG4gIGNvbnN0IHVzZXJDb25maWcgPSBjdHguZ2V0Q29uZmlnPElQaWNMaXN0Q29uZmlnPigncGljQmVkLnBpY2xpc3QnKSB8fCB7fVxuICBjb25zdCBjb25maWc6IElQbHVnaW5Db25maWdbXSA9IFtcbiAgICB7XG4gICAgICBuYW1lOiAnaG9zdCcsXG4gICAgICB0eXBlOiAnaW5wdXQnLFxuICAgICAgZ2V0IHByZWZpeCgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9QSUNMSVNUX0hPU1QnKVxuICAgICAgfSxcbiAgICAgIGdldCBhbGlhcygpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9QSUNMSVNUX0hPU1QnKVxuICAgICAgfSxcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuaG9zdCB8fCAnMTI3LjAuMC4xJyxcbiAgICAgIHJlcXVpcmVkOiB0cnVlXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAncG9ydCcsXG4gICAgICB0eXBlOiAnaW5wdXQnLFxuICAgICAgZ2V0IHByZWZpeCgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9QSUNMSVNUX1BPUlQnKVxuICAgICAgfSxcbiAgICAgIGdldCBhbGlhcygpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9QSUNMSVNUX1BPUlQnKVxuICAgICAgfSxcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcucG9ydCB8fCAzNjY3NyxcbiAgICAgIHJlcXVpcmVkOiBmYWxzZVxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ3BpY2JlZCcsXG4gICAgICB0eXBlOiAnaW5wdXQnLFxuICAgICAgZ2V0IHByZWZpeCgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9QSUNMSVNUX1BJQ0JFRCcpXG4gICAgICB9LFxuICAgICAgZ2V0IGFsaWFzKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1BJQ0xJU1RfUElDQkVEJylcbiAgICAgIH0sXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLnBpY2JlZCB8fCAnJyxcbiAgICAgIHJlcXVpcmVkOiBmYWxzZVxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ2NvbmZpZ05hbWUnLFxuICAgICAgdHlwZTogJ2lucHV0JyxcbiAgICAgIGdldCBwcmVmaXgoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfUElDTElTVF9DT05GSUdOQU1FJylcbiAgICAgIH0sXG4gICAgICBnZXQgYWxpYXMoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfUElDTElTVF9DT05GSUdOQU1FJylcbiAgICAgIH0sXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLmNvbmZpZ05hbWUgfHwgJycsXG4gICAgICByZXF1aXJlZDogZmFsc2VcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdzZXJ2ZXJLZXknLFxuICAgICAgdHlwZTogJ2lucHV0JyxcbiAgICAgIGdldCBwcmVmaXgoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfUElDTElTVF9LRVknKVxuICAgICAgfSxcbiAgICAgIGdldCBhbGlhcygpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9QSUNMSVNUX0tFWScpXG4gICAgICB9LFxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5zZXJ2ZXJLZXkgfHwgJycsXG4gICAgICByZXF1aXJlZDogZmFsc2VcbiAgICB9XG4gIF1cbiAgcmV0dXJuIGNvbmZpZ1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiByZWdpc3RlcihjdHg6IElQaWNHbyk6IHZvaWQge1xuICBjdHguaGVscGVyLnVwbG9hZGVyLnJlZ2lzdGVyKGJ1aWxkSW5VcGxvYWRlck5hbWVzLnBpY2xpc3QsIHtcbiAgICBnZXQgbmFtZSgpIHtcbiAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfUElDTElTVCcpXG4gICAgfSxcbiAgICBoYW5kbGUsXG4gICAgY29uZmlnXG4gIH0pXG59XG4iLCJpbXBvcnQgeyBsb29rdXAgfSBmcm9tICdtaW1lLXR5cGVzJ1xuaW1wb3J0IHFpbml1IGZyb20gJ3Fpbml1J1xuaW1wb3J0IHsgSVBsdWdpbkNvbmZpZywgSVFpbml1Q29uZmlnLCBJUGljR28sIElPbGRSZXFPcHRpb25zIH0gZnJvbSAnLi4vLi4vdHlwZXMnXG5pbXBvcnQgeyBJQnVpbGRJbkV2ZW50IH0gZnJvbSAnLi4vLi4vdXRpbHMvZW51bSdcbmltcG9ydCB7IElMb2NhbGVzS2V5IH0gZnJvbSAnLi4vLi4vaTE4bi96aC1DTidcbmltcG9ydCB7IGJ1aWxkSW5VcGxvYWRlck5hbWVzIH0gZnJvbSAnLi91dGlscydcblxuZnVuY3Rpb24gcG9zdE9wdGlvbnMob3B0aW9uczogSVFpbml1Q29uZmlnLCBmaWxlTmFtZTogc3RyaW5nLCB0b2tlbjogc3RyaW5nLCBpbWdCYXNlNjQ6IHN0cmluZyk6IElPbGRSZXFPcHRpb25zIHtcbiAgY29uc3QgYXJlYSA9IHNlbGVjdEFyZWEob3B0aW9ucy5hcmVhIHx8ICd6MCcpXG4gIGNvbnN0IHBhdGggPSBvcHRpb25zLnBhdGggfHwgJydcbiAgY29uc3QgYmFzZTY0RmlsZU5hbWUgPSBCdWZmZXIuZnJvbShwYXRoICsgZmlsZU5hbWUsICd1dGYtOCcpXG4gICAgLnRvU3RyaW5nKCdiYXNlNjQnKVxuICAgIC5yZXBsYWNlKC9cXCsvZywgJy0nKVxuICAgIC5yZXBsYWNlKC9cXC8vZywgJ18nKVxuICByZXR1cm4ge1xuICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgIHVybDogYGh0dHA6Ly91cGxvYWQke2FyZWF9LnFpbml1cC5jb20vcHV0YjY0Ly0xL2tleS8ke2Jhc2U2NEZpbGVOYW1lfWAsXG4gICAgaGVhZGVyczoge1xuICAgICAgQXV0aG9yaXphdGlvbjogYFVwVG9rZW4gJHt0b2tlbn1gLFxuICAgICAgJ0NvbnRlbnQtVHlwZSc6IGxvb2t1cChmaWxlTmFtZSkgfHwgJ2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSdcbiAgICB9LFxuICAgIGJvZHk6IGltZ0Jhc2U2NFxuICB9XG59XG5cbmZ1bmN0aW9uIHNlbGVjdEFyZWEoYXJlYTogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIGFyZWEgPT09ICd6MCcgPyAnJyA6ICctJyArIGFyZWFcbn1cblxuZnVuY3Rpb24gZ2V0VG9rZW4ocWluaXVPcHRpb25zOiBhbnkpOiBzdHJpbmcge1xuICBjb25zdCBhY2Nlc3NLZXkgPSBxaW5pdU9wdGlvbnMuYWNjZXNzS2V5XG4gIGNvbnN0IHNlY3JldEtleSA9IHFpbml1T3B0aW9ucy5zZWNyZXRLZXlcbiAgY29uc3QgbWFjID0gbmV3IHFpbml1LmF1dGguZGlnZXN0Lk1hYyhhY2Nlc3NLZXksIHNlY3JldEtleSlcbiAgY29uc3Qgb3B0aW9ucyA9IHtcbiAgICBzY29wZTogcWluaXVPcHRpb25zLmJ1Y2tldFxuICB9XG4gIGNvbnN0IHB1dFBvbGljeSA9IG5ldyBxaW5pdS5ycy5QdXRQb2xpY3kob3B0aW9ucylcbiAgcmV0dXJuIHB1dFBvbGljeS51cGxvYWRUb2tlbihtYWMpXG59XG5cbmNvbnN0IGhhbmRsZSA9IGFzeW5jIChjdHg6IElQaWNHbyk6IFByb21pc2U8SVBpY0dvPiA9PiB7XG4gIGNvbnN0IHFpbml1T3B0aW9ucyA9IGN0eC5nZXRDb25maWc8SVFpbml1Q29uZmlnPigncGljQmVkLnFpbml1JylcbiAgaWYgKCFxaW5pdU9wdGlvbnMpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJDYW4ndCBmaW5kIHFpbml1IGNvbmZpZ1wiKVxuICB9XG4gIHRyeSB7XG4gICAgY29uc3QgaW1nTGlzdCA9IGN0eC5vdXRwdXRcbiAgICBmb3IgKGNvbnN0IGltZyBvZiBpbWdMaXN0KSB7XG4gICAgICBpZiAoaW1nLmZpbGVOYW1lICYmIGltZy5idWZmZXIpIHtcbiAgICAgICAgY29uc3QgYmFzZTY0SW1hZ2UgPSBpbWcuYmFzZTY0SW1hZ2UgfHwgQnVmZmVyLmZyb20oaW1nLmJ1ZmZlcikudG9TdHJpbmcoJ2Jhc2U2NCcpXG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSBwb3N0T3B0aW9ucyhxaW5pdU9wdGlvbnMsIGltZy5maWxlTmFtZSwgZ2V0VG9rZW4ocWluaXVPcHRpb25zKSwgYmFzZTY0SW1hZ2UpXG4gICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IGN0eC5yZXF1ZXN0KG9wdGlvbnMpXG4gICAgICAgIGNvbnN0IGJvZHkgPSBKU09OLnBhcnNlKHJlcylcbiAgICAgICAgaWYgKGJvZHk/LmtleSkge1xuICAgICAgICAgIGRlbGV0ZSBpbWcuYmFzZTY0SW1hZ2VcbiAgICAgICAgICBkZWxldGUgaW1nLmJ1ZmZlclxuICAgICAgICAgIGNvbnN0IGJhc2VVcmwgPSBxaW5pdU9wdGlvbnMudXJsXG4gICAgICAgICAgY29uc3QgdXJsT3B0aW9ucyA9IHFpbml1T3B0aW9ucy5vcHRpb25zIHx8ICcnXG4gICAgICAgICAgaW1nLmltZ1VybCA9IGAke2Jhc2VVcmx9LyR7Ym9keS5rZXkgYXMgc3RyaW5nfSR7dXJsT3B0aW9uc31gXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY3R4LmVtaXQoSUJ1aWxkSW5FdmVudC5OT1RJRklDQVRJT04sIHtcbiAgICAgICAgICAgIHRpdGxlOiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdVUExPQURfRkFJTEVEJyksXG4gICAgICAgICAgICBib2R5OiBib2R5Lm1zZ1xuICAgICAgICAgIH0pXG4gICAgICAgICAgY3R4LmxvZy5lcnJvcigncWluaXUgZXJyb3InLCBib2R5KVxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVXBsb2FkIGZhaWxlZCcpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGN0eFxuICB9IGNhdGNoIChlcnI6IGFueSkge1xuICAgIGlmIChlcnIubWVzc2FnZSAhPT0gJ1VwbG9hZCBmYWlsZWQnKSB7XG4gICAgICAvLyBlcnIucmVzcG9uc2UgbWF5YmUgdW5kZWZpbmVkXG4gICAgICBpZiAoZXJyLnJlc3BvbnNlKSB7XG4gICAgICAgIGNvbnN0IGVycm9yID0gZXJyLnJlc3BvbnNlLmJvZHlcbiAgICAgICAgY3R4LmVtaXQoSUJ1aWxkSW5FdmVudC5OT1RJRklDQVRJT04sIHtcbiAgICAgICAgICB0aXRsZTogY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignVVBMT0FEX0ZBSUxFRCcpLFxuICAgICAgICAgIGJvZHk6IGVycm9yLmVycm9yXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfVxuICAgIHRocm93IGVyclxuICB9XG59XG5cbmNvbnN0IGNvbmZpZyA9IChjdHg6IElQaWNHbyk6IElQbHVnaW5Db25maWdbXSA9PiB7XG4gIGNvbnN0IHVzZXJDb25maWcgPSBjdHguZ2V0Q29uZmlnPElRaW5pdUNvbmZpZz4oJ3BpY0JlZC5xaW5pdScpIHx8IHt9XG4gIGNvbnN0IGNvbmZpZzogSVBsdWdpbkNvbmZpZ1tdID0gW1xuICAgIHtcbiAgICAgIG5hbWU6ICdhY2Nlc3NLZXknLFxuICAgICAgdHlwZTogJ2lucHV0JyxcbiAgICAgIGdldCBwcmVmaXgoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfUUlOSVVfQUNDRVNTS0VZJylcbiAgICAgIH0sXG4gICAgICBnZXQgYWxpYXMoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfUUlOSVVfQUNDRVNTS0VZJylcbiAgICAgIH0sXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLmFjY2Vzc0tleSB8fCAnJyxcbiAgICAgIHJlcXVpcmVkOiB0cnVlXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAnc2VjcmV0S2V5JyxcbiAgICAgIHR5cGU6ICdpbnB1dCcsXG4gICAgICBnZXQgcHJlZml4KCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1FJTklVX1NFQ1JFVEtFWScpXG4gICAgICB9LFxuICAgICAgZ2V0IGFsaWFzKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1FJTklVX1NFQ1JFVEtFWScpXG4gICAgICB9LFxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5zZWNyZXRLZXkgfHwgJycsXG4gICAgICByZXF1aXJlZDogdHJ1ZVxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ2J1Y2tldCcsXG4gICAgICB0eXBlOiAnaW5wdXQnLFxuICAgICAgZ2V0IHByZWZpeCgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9RSU5JVV9CVUNLRVQnKVxuICAgICAgfSxcbiAgICAgIGdldCBhbGlhcygpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9RSU5JVV9CVUNLRVQnKVxuICAgICAgfSxcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuYnVja2V0IHx8ICcnLFxuICAgICAgcmVxdWlyZWQ6IHRydWVcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICd1cmwnLFxuICAgICAgdHlwZTogJ2lucHV0JyxcbiAgICAgIGdldCBwcmVmaXgoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfUUlOSVVfVVJMJylcbiAgICAgIH0sXG4gICAgICBnZXQgYWxpYXMoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfUUlOSVVfVVJMJylcbiAgICAgIH0sXG4gICAgICBnZXQgbWVzc2FnZSgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9RSU5JVV9NRVNTQUdFX1VSTCcpXG4gICAgICB9LFxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy51cmwgfHwgJycsXG4gICAgICByZXF1aXJlZDogdHJ1ZVxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ2FyZWEnLFxuICAgICAgdHlwZTogJ2lucHV0JyxcbiAgICAgIGdldCBwcmVmaXgoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfUUlOSVVfQVJFQScpXG4gICAgICB9LFxuICAgICAgZ2V0IGFsaWFzKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1FJTklVX0FSRUEnKVxuICAgICAgfSxcbiAgICAgIGdldCBtZXNzYWdlKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1FJTklVX01FU1NBR0VfQVJFQScpXG4gICAgICB9LFxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5hcmVhIHx8ICcnLFxuICAgICAgcmVxdWlyZWQ6IHRydWVcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdvcHRpb25zJyxcbiAgICAgIHR5cGU6ICdpbnB1dCcsXG4gICAgICBnZXQgcHJlZml4KCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1FJTklVX09QVElPTlMnKVxuICAgICAgfSxcbiAgICAgIGdldCBhbGlhcygpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9RSU5JVV9PUFRJT05TJylcbiAgICAgIH0sXG4gICAgICBnZXQgbWVzc2FnZSgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9RSU5JVV9NRVNTQUdFX09QVElPTlMnKVxuICAgICAgfSxcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcub3B0aW9ucyB8fCAnJyxcbiAgICAgIHJlcXVpcmVkOiBmYWxzZVxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ3BhdGgnLFxuICAgICAgdHlwZTogJ2lucHV0JyxcbiAgICAgIGdldCBwcmVmaXgoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfUUlOSVVfUEFUSCcpXG4gICAgICB9LFxuICAgICAgZ2V0IGFsaWFzKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1FJTklVX1BBVEgnKVxuICAgICAgfSxcbiAgICAgIGdldCBtZXNzYWdlKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1FJTklVX01FU1NBR0VfUEFUSCcpXG4gICAgICB9LFxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5wYXRoIHx8ICcnLFxuICAgICAgcmVxdWlyZWQ6IGZhbHNlXG4gICAgfVxuICBdXG4gIHJldHVybiBjb25maWdcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcmVnaXN0ZXIoY3R4OiBJUGljR28pOiB2b2lkIHtcbiAgY3R4LmhlbHBlci51cGxvYWRlci5yZWdpc3RlcihidWlsZEluVXBsb2FkZXJOYW1lcy5xaW5pdSwge1xuICAgIGdldCBuYW1lKCkge1xuICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9RSU5JVScpXG4gICAgfSxcbiAgICBoYW5kbGUsXG4gICAgY29uZmlnXG4gIH0pXG59XG4iLCJpbXBvcnQgeyBOb2RlU1NILCBDb25maWcgfSBmcm9tICdub2RlLXNzaC1uby1jcHUtZmVhdHVyZXMnXG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJ1xuXG5pbXBvcnQgeyBJU2Z0cFBsaXN0Q29uZmlnIH0gZnJvbSAnLi4vdHlwZXMnXG5cbmNsYXNzIFNTSENsaWVudCB7XG4gIHByaXZhdGUgc3RhdGljIGluc3RhbmNlOiBTU0hDbGllbnRcbiAgcHJpdmF0ZSBjbGllbnQgPSBuZXcgTm9kZVNTSCgpXG4gIGlzQ29ubmVjdGVkID0gZmFsc2VcblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKCkge31cblxuICBwdWJsaWMgc3RhdGljIGdldEluc3RhbmNlKCk6IFNTSENsaWVudCB7XG4gICAgaWYgKCFTU0hDbGllbnQuaW5zdGFuY2UpIHtcbiAgICAgIFNTSENsaWVudC5pbnN0YW5jZSA9IG5ldyBTU0hDbGllbnQoKVxuICAgIH1cbiAgICByZXR1cm4gU1NIQ2xpZW50Lmluc3RhbmNlXG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBjaGFuZ2VXaW5TdHlsZVBhdGhUb1VuaXgocGF0aDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gcGF0aC5yZXBsYWNlKC9cXFxcL2csICcvJylcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBjb25uZWN0KGNvbmZpZzogSVNmdHBQbGlzdENvbmZpZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHsgaG9zdCwgcG9ydCwgdXNlcm5hbWUsIHBhc3N3b3JkLCBwcml2YXRlS2V5LCBwYXNzcGhyYXNlIH0gPSBjb25maWdcbiAgICBjb25zdCBsb2dpbkluZm86IENvbmZpZyA9IHByaXZhdGVLZXlcbiAgICAgID8ge1xuICAgICAgICAgIHVzZXJuYW1lLFxuICAgICAgICAgIHByaXZhdGVLZXlQYXRoOiBwcml2YXRlS2V5LFxuICAgICAgICAgIHBhc3NwaHJhc2U6IHBhc3NwaHJhc2UgfHwgdW5kZWZpbmVkXG4gICAgICAgIH1cbiAgICAgIDogeyB1c2VybmFtZSwgcGFzc3dvcmQgfVxuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLmNsaWVudC5jb25uZWN0KHtcbiAgICAgICAgaG9zdDogaG9zdCxcbiAgICAgICAgcG9ydDogTnVtYmVyKHBvcnQpIHx8IDIyLFxuICAgICAgICAuLi5sb2dpbkluZm9cbiAgICAgIH0pXG4gICAgICB0aGlzLmlzQ29ubmVjdGVkID0gdHJ1ZVxuICAgIH0gY2F0Y2ggKGVycjogYW55KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoZXJyKVxuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBhc3luYyB1cGxvYWQobG9jYWw6IHN0cmluZywgcmVtb3RlOiBzdHJpbmcsIGNvbmZpZzogSVNmdHBQbGlzdENvbmZpZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICghdGhpcy5pc0Nvbm5lY3RlZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdTU0ggY2xpZW50IGlzIG5vdCBjb25uZWN0ZWQnKVxuICAgIH1cbiAgICB0cnkge1xuICAgICAgcmVtb3RlID0gU1NIQ2xpZW50LmNoYW5nZVdpblN0eWxlUGF0aFRvVW5peChyZW1vdGUpXG4gICAgICBhd2FpdCB0aGlzLm1rZGlyKHBhdGguZGlybmFtZShyZW1vdGUpLnJlcGxhY2UoL15cXC8rfFxcLyskL2csICcnKSwgY29uZmlnKVxuICAgICAgYXdhaXQgdGhpcy5jbGllbnQucHV0RmlsZShsb2NhbCwgcmVtb3RlKVxuICAgICAgY29uc3QgZmlsZU1vZGUgPSBjb25maWcuZmlsZU1vZGUgfHwgJzA2NDQnXG4gICAgICBpZiAoZmlsZU1vZGUgIT09ICcwNjQ0Jykge1xuICAgICAgICBhd2FpdCB0aGlzLmV4ZWMoYGNobW9kICR7ZmlsZU1vZGV9IFwiJHtyZW1vdGV9XCJgKVxuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycjogYW55KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoZXJyKVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgbWtkaXIoZGlyUGF0aDogc3RyaW5nLCBjb25maWc6IElTZnRwUGxpc3RDb25maWcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoIXRoaXMuY2xpZW50LmlzQ29ubmVjdGVkKCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignc2Z0cCBjbGllbnQgaXMgbm90IGNvbm5lY3RlZCcpXG4gICAgfVxuICAgIGNvbnN0IGRpcmVjdG9yeU1vZGUgPSBjb25maWcuZGlyTW9kZSB8fCAnMDc1NSdcbiAgICBpZiAoZGlyZWN0b3J5TW9kZSAhPT0gJzA3NTUnKSB7XG4gICAgICBjb25zdCBkaXJzID0gZGlyUGF0aC5zcGxpdCgnLycpXG4gICAgICBsZXQgY3VycmVudFBhdGggPSAnJ1xuICAgICAgZm9yIChjb25zdCBkaXIgb2YgZGlycykge1xuICAgICAgICBpZiAoZGlyKSB7XG4gICAgICAgICAgY3VycmVudFBhdGggKz0gYC8ke2Rpcn1gXG4gICAgICAgICAgY29uc3Qgc2NyaXB0ID0gYG1rZGlyIFwiJHtjdXJyZW50UGF0aH1cIiAmJiBjaG1vZCAke2RpcmVjdG9yeU1vZGV9IFwiJHtjdXJyZW50UGF0aH1cImBcbiAgICAgICAgICBhd2FpdCB0aGlzLmV4ZWMoc2NyaXB0KVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHNjcmlwdCA9IGBjZCAvICYmIG1rZGlyIC1wIFwiJHtkaXJQYXRofVwiYFxuICAgICAgYXdhaXQgdGhpcy5leGVjKHNjcmlwdClcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgY2hvd24ocmVtb3RlOiBzdHJpbmcsIHVzZXI6IHN0cmluZywgZ3JvdXA/OiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZW1vdGUgPSBTU0hDbGllbnQuY2hhbmdlV2luU3R5bGVQYXRoVG9Vbml4KHJlbW90ZSlcbiAgICBjb25zdCBbX3VzZXIsIF9ncm91cF0gPSBncm91cCA/IFt1c2VyLCBncm91cF0gOiB1c2VyLmluY2x1ZGVzKCc6JykgPyB1c2VyLnNwbGl0KCc6JykgOiBbdXNlciwgdXNlcl1cblxuICAgIGF3YWl0IHRoaXMuZXhlYyhgY2hvd24gJHtfdXNlcn06JHtfZ3JvdXB9IFwiJHtyZW1vdGV9XCJgKVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBleGVjKHNjcmlwdDogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3QgZXhlY1Jlc3VsdCA9IGF3YWl0IHRoaXMuY2xpZW50LmV4ZWNDb21tYW5kKHNjcmlwdClcbiAgICByZXR1cm4gZXhlY1Jlc3VsdC5jb2RlID09PSAwXG4gIH1cblxuICBwdWJsaWMgY2xvc2UoKTogdm9pZCB7XG4gICAgdGhpcy5jbGllbnQuZGlzcG9zZSgpXG4gICAgdGhpcy5pc0Nvbm5lY3RlZCA9IGZhbHNlXG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgU1NIQ2xpZW50XG4iLCJpbXBvcnQgZnMsIHsgZW5zdXJlRGlyU3luYywgbW92ZVN5bmMsIHJlbW92ZVN5bmMgfSBmcm9tICdmcy1leHRyYSdcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnXG5cbmltcG9ydCB7IElQaWNHbywgSVBsdWdpbkNvbmZpZywgSVNmdHBQbGlzdENvbmZpZyB9IGZyb20gJy4uLy4uL3R5cGVzJ1xuaW1wb3J0IHsgSUJ1aWxkSW5FdmVudCB9IGZyb20gJy4uLy4uL3V0aWxzL2VudW0nXG5pbXBvcnQgeyBJTG9jYWxlc0tleSB9IGZyb20gJy4uLy4uL2kxOG4vemgtQ04nXG5pbXBvcnQgU1NIQ2xpZW50IGZyb20gJy4uLy4uL3V0aWxzL3NzaENsaWVudCdcbmltcG9ydCB7IGJ1aWxkSW5VcGxvYWRlck5hbWVzLCBlbmNvZGVQYXRoLCBmb3JtYXRQYXRoSGVscGVyIH0gZnJvbSAnLi91dGlscydcblxuY29uc3QgaGFuZGxlID0gYXN5bmMgKGN0eDogSVBpY0dvKTogUHJvbWlzZTxJUGljR28+ID0+IHtcbiAgY29uc3Qgc2Z0cHBsaXN0Q29uZmlnID0gY3R4LmdldENvbmZpZzxJU2Z0cFBsaXN0Q29uZmlnPigncGljQmVkLnNmdHBwbGlzdCcpXG4gIGlmICghc2Z0cHBsaXN0Q29uZmlnKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdDYW4gbm90IGZpbmQgc2Z0cHBsaXN0IGNvbmZpZyEnKVxuICB9XG4gIHNmdHBwbGlzdENvbmZpZy5wb3J0ID0gTnVtYmVyKHNmdHBwbGlzdENvbmZpZy5wb3J0KSB8fCAyMlxuICBpZiAoc2Z0cHBsaXN0Q29uZmlnLnBvcnQgPCAwIHx8IHNmdHBwbGlzdENvbmZpZy5wb3J0ID4gNjU1MzUpIHtcbiAgICBzZnRwcGxpc3RDb25maWcucG9ydCA9IDIyXG4gIH1cbiAgc2Z0cHBsaXN0Q29uZmlnLnVwbG9hZFBhdGggPSBmb3JtYXRQYXRoSGVscGVyKHtcbiAgICBwYXRoOiBzZnRwcGxpc3RDb25maWcudXBsb2FkUGF0aCxcbiAgICByb290VG9FbXB0eTogZmFsc2VcbiAgfSlcbiAgY29uc3Qgd2ViUGF0aCA9IGZvcm1hdFBhdGhIZWxwZXIoe1xuICAgIHBhdGg6IHNmdHBwbGlzdENvbmZpZy53ZWJQYXRoLFxuICAgIHJvb3RUb0VtcHR5OiBmYWxzZVxuICB9KVxuICB0cnkge1xuICAgIGNvbnN0IGltZ0xpc3QgPSBjdHgub3V0cHV0XG4gICAgZm9yIChjb25zdCBpbWcgb2YgaW1nTGlzdCkge1xuICAgICAgaWYgKGltZy5maWxlTmFtZSAmJiBpbWcuYnVmZmVyKSB7XG4gICAgICAgIGxldCBpbWFnZSA9IGltZy5idWZmZXJcbiAgICAgICAgaWYgKCFpbWFnZSAmJiBpbWcuYmFzZTY0SW1hZ2UpIHtcbiAgICAgICAgICBpbWFnZSA9IEJ1ZmZlci5mcm9tKGltZy5iYXNlNjRJbWFnZSwgJ2Jhc2U2NCcpXG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdXBsb2FkVGVtcFBhdGggPSBwYXRoLmpvaW4oY3R4LmJhc2VEaXIsICd1cGxvYWRUZW1wJylcbiAgICAgICAgY29uc3QgaW1nVGVtcFBhdGggPSBwYXRoLmpvaW4oY3R4LmJhc2VEaXIsICdpbWdUZW1wJywgJ3NmdHBwbGlzdCcpXG4gICAgICAgIGVuc3VyZURpclN5bmMoaW1nVGVtcFBhdGgpXG4gICAgICAgIGNvbnN0IHRlbXBGaWxlUGF0aCA9IHBhdGguam9pbih1cGxvYWRUZW1wUGF0aCwgaW1nLmZpbGVOYW1lKVxuICAgICAgICBlbnN1cmVEaXJTeW5jKHBhdGguZGlybmFtZSh0ZW1wRmlsZVBhdGgpKVxuICAgICAgICBmcy53cml0ZUZpbGVTeW5jKHRlbXBGaWxlUGF0aCwgaW1hZ2UpXG4gICAgICAgIGNvbnN0IGNsaWVudCA9IFNTSENsaWVudC5nZXRJbnN0YW5jZSgpXG4gICAgICAgIGF3YWl0IGNsaWVudC5jb25uZWN0KHNmdHBwbGlzdENvbmZpZylcbiAgICAgICAgY29uc3QgcmVtb3RlUGF0aCA9IHBhdGguam9pbihgLyR7c2Z0cHBsaXN0Q29uZmlnLnVwbG9hZFBhdGh9YC5yZXBsYWNlKC9cXC9cXC8rL2csICcvJyksIGltZy5maWxlTmFtZSlcbiAgICAgICAgYXdhaXQgY2xpZW50LnVwbG9hZCh0ZW1wRmlsZVBhdGgsIHJlbW90ZVBhdGgsIHNmdHBwbGlzdENvbmZpZylcbiAgICAgICAgc2Z0cHBsaXN0Q29uZmlnLmZpbGVVc2VyICYmIChhd2FpdCBjbGllbnQuY2hvd24ocmVtb3RlUGF0aCwgc2Z0cHBsaXN0Q29uZmlnLmZpbGVVc2VyKSlcbiAgICAgICAgZGVsZXRlIGltZy5iYXNlNjRJbWFnZVxuICAgICAgICBkZWxldGUgaW1nLmJ1ZmZlclxuICAgICAgICBjb25zdCBiYXNlVXJsID0gc2Z0cHBsaXN0Q29uZmlnLmN1c3RvbVVybCB8fCBzZnRwcGxpc3RDb25maWcuaG9zdFxuICAgICAgICBpZiAoc2Z0cHBsaXN0Q29uZmlnLndlYlBhdGgpIHtcbiAgICAgICAgICBpbWcuaW1nVXJsID0gYCR7YmFzZVVybH0vJHtlbmNvZGVQYXRoKGAke3dlYlBhdGggPT09ICcvJyA/ICcnIDogd2ViUGF0aH0ke2ltZy5maWxlTmFtZX1gKX1gXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaW1nLmltZ1VybCA9IGAke2Jhc2VVcmx9LyR7ZW5jb2RlUGF0aChgJHtzZnRwcGxpc3RDb25maWcudXBsb2FkUGF0aCA9PT0gJy8nID8gJycgOiBzZnRwcGxpc3RDb25maWcudXBsb2FkUGF0aH0ke2ltZy5maWxlTmFtZX1gKX1gXG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaW1nVGVtcEZpbGVQYXRoID0gcGF0aC5qb2luKGltZ1RlbXBQYXRoLCBpbWcuZmlsZU5hbWUpXG4gICAgICAgIGVuc3VyZURpclN5bmMocGF0aC5kaXJuYW1lKGltZ1RlbXBGaWxlUGF0aCkpXG4gICAgICAgIHJlbW92ZVN5bmMoaW1nVGVtcEZpbGVQYXRoKVxuICAgICAgICBtb3ZlU3luYyh0ZW1wRmlsZVBhdGgsIHBhdGguam9pbihpbWdUZW1wUGF0aCwgaW1nLmZpbGVOYW1lKSlcbiAgICAgICAgaW1nLmdhbGxlcnlQYXRoID0gYGh0dHA6Ly9sb2NhbGhvc3Q6MzY2OTkvc2Z0cHBsaXN0LyR7ZW5jb2RlVVJJQ29tcG9uZW50KGltZy5maWxlTmFtZSl9YFxuICAgICAgICBjbGllbnQuY2xvc2UoKVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gY3R4XG4gIH0gY2F0Y2ggKGVycjogYW55KSB7XG4gICAgY3R4LmVtaXQoSUJ1aWxkSW5FdmVudC5OT1RJRklDQVRJT04sIHtcbiAgICAgIHRpdGxlOiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdVUExPQURfRkFJTEVEJyksXG4gICAgICBib2R5OiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdDSEVDS19TRVRUSU5HUycpXG4gICAgfSlcbiAgICB0aHJvdyBlcnJcbiAgfVxufVxuXG5jb25zdCBjb25maWcgPSAoY3R4OiBJUGljR28pOiBJUGx1Z2luQ29uZmlnW10gPT4ge1xuICBjb25zdCB1c2VyQ29uZmlnID0gY3R4LmdldENvbmZpZzxJU2Z0cFBsaXN0Q29uZmlnPigncGljQmVkLnNmdHBwbGlzdCcpIHx8IHt9XG4gIGNvbnN0IGNvbmZpZzogSVBsdWdpbkNvbmZpZ1tdID0gW1xuICAgIHtcbiAgICAgIG5hbWU6ICdob3N0JyxcbiAgICAgIHR5cGU6ICdpbnB1dCcsXG4gICAgICBnZXQgcHJlZml4KCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1NGVFBQTElTVF9IT1NUJylcbiAgICAgIH0sXG4gICAgICBnZXQgYWxpYXMoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfU0ZUUFBMSVNUX0hPU1QnKVxuICAgICAgfSxcbiAgICAgIGdldCBtZXNzYWdlKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1NGVFBQTElTVF9NRVNTQUdFX0hPU1QnKVxuICAgICAgfSxcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuaG9zdCB8fCAnJyxcbiAgICAgIHJlcXVpcmVkOiB0cnVlXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAncG9ydCcsXG4gICAgICB0eXBlOiAnaW5wdXQnLFxuICAgICAgZ2V0IHByZWZpeCgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9TRlRQUExJU1RfUE9SVCcpXG4gICAgICB9LFxuICAgICAgZ2V0IGFsaWFzKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1NGVFBQTElTVF9QT1JUJylcbiAgICAgIH0sXG4gICAgICBnZXQgbWVzc2FnZSgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9TRlRQUExJU1RfTUVTU0FHRV9QT1JUJylcbiAgICAgIH0sXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLnBvcnQgfHwgMjIsXG4gICAgICByZXF1aXJlZDogZmFsc2VcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICd1c2VybmFtZScsXG4gICAgICB0eXBlOiAnaW5wdXQnLFxuICAgICAgZ2V0IHByZWZpeCgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9TRlRQUExJU1RfVVNFUk5BTUUnKVxuICAgICAgfSxcbiAgICAgIGdldCBhbGlhcygpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9TRlRQUExJU1RfVVNFUk5BTUUnKVxuICAgICAgfSxcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcudXNlcm5hbWUgfHwgJycsXG4gICAgICByZXF1aXJlZDogdHJ1ZVxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ3Bhc3N3b3JkJyxcbiAgICAgIHR5cGU6ICdpbnB1dCcsXG4gICAgICBnZXQgcHJlZml4KCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1NGVFBQTElTVF9QQVNTV09SRCcpXG4gICAgICB9LFxuICAgICAgZ2V0IGFsaWFzKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1NGVFBQTElTVF9QQVNTV09SRCcpXG4gICAgICB9LFxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5wYXNzd29yZCB8fCAnJyxcbiAgICAgIHJlcXVpcmVkOiBmYWxzZVxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ3ByaXZhdGVLZXknLFxuICAgICAgdHlwZTogJ2lucHV0JyxcbiAgICAgIGdldCBwcmVmaXgoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfU0ZUUFBMSVNUX1BSSVZBVEVLRVknKVxuICAgICAgfSxcbiAgICAgIGdldCBhbGlhcygpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9TRlRQUExJU1RfUFJJVkFURUtFWScpXG4gICAgICB9LFxuICAgICAgZ2V0IG1lc3NhZ2UoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfU0ZUUFBMSVNUX01FU1NBR0VfUFJJVkFURUtFWScpXG4gICAgICB9LFxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5wcml2YXRlS2V5IHx8ICcnLFxuICAgICAgcmVxdWlyZWQ6IGZhbHNlXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAncGFzc3BocmFzZScsXG4gICAgICB0eXBlOiAnaW5wdXQnLFxuICAgICAgZ2V0IHByZWZpeCgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9TRlRQUExJU1RfUFJJVkFURUtFWV9QQVNTUEhSQVNFJylcbiAgICAgIH0sXG4gICAgICBnZXQgYWxpYXMoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfU0ZUUFBMSVNUX1BSSVZBVEVLRVlfUEFTU1BIUkFTRScpXG4gICAgICB9LFxuICAgICAgZ2V0IG1lc3NhZ2UoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfU0ZUUFBMSVNUX01FU1NBR0VfUFJJVkFURUtFWV9QQVNTUEhSQVNFJylcbiAgICAgIH0sXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLnBhc3NwaHJhc2UgfHwgJycsXG4gICAgICByZXF1aXJlZDogZmFsc2VcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICd1cGxvYWRQYXRoJyxcbiAgICAgIHR5cGU6ICdpbnB1dCcsXG4gICAgICBnZXQgcHJlZml4KCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1NGVFBQTElTVF9VUExPQURQQVRIJylcbiAgICAgIH0sXG4gICAgICBnZXQgYWxpYXMoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfU0ZUUFBMSVNUX1VQTE9BRFBBVEgnKVxuICAgICAgfSxcbiAgICAgIGdldCBtZXNzYWdlKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1NGVFBQTElTVF9NRVNTQUdFX1VQTE9BRFBBVEgnKVxuICAgICAgfSxcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcudXBsb2FkUGF0aCB8fCAnJyxcbiAgICAgIHJlcXVpcmVkOiBmYWxzZVxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ2N1c3RvbVVybCcsXG4gICAgICB0eXBlOiAnaW5wdXQnLFxuICAgICAgZ2V0IHByZWZpeCgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9TRlRQUExJU1RfQ1VTVE9NVVJMJylcbiAgICAgIH0sXG4gICAgICBnZXQgYWxpYXMoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfU0ZUUFBMSVNUX0NVU1RPTVVSTCcpXG4gICAgICB9LFxuICAgICAgZ2V0IG1lc3NhZ2UoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfU0ZUUFBMSVNUX01FU1NBR0VfQ1VTVE9NVVJMJylcbiAgICAgIH0sXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLmN1c3RvbVVybCB8fCAnJyxcbiAgICAgIHJlcXVpcmVkOiBmYWxzZVxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ3dlYlBhdGgnLFxuICAgICAgdHlwZTogJ2lucHV0JyxcbiAgICAgIGdldCBwcmVmaXgoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfU0ZUUFBMSVNUX1dFQlNJVEVfUEFUSCcpXG4gICAgICB9LFxuICAgICAgZ2V0IGFsaWFzKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1NGVFBQTElTVF9XRUJTSVRFX1BBVEgnKVxuICAgICAgfSxcbiAgICAgIGdldCBtZXNzYWdlKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1NGVFBQTElTVF9NRVNTQUdFX1dFQlNJVEVfUEFUSCcpXG4gICAgICB9LFxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy53ZWJQYXRoIHx8ICcnLFxuICAgICAgcmVxdWlyZWQ6IGZhbHNlXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAnZmlsZVVzZXInLFxuICAgICAgdHlwZTogJ2lucHV0JyxcbiAgICAgIGdldCBwcmVmaXgoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfU0ZUUFBMSVNUX0ZJTEVfVVNFUicpXG4gICAgICB9LFxuICAgICAgZ2V0IGFsaWFzKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1NGVFBQTElTVF9GSUxFX1VTRVInKVxuICAgICAgfSxcbiAgICAgIGdldCBtZXNzYWdlKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1NGVFBQTElTVF9NRVNTQUdFX0ZJTEVfVVNFUicpXG4gICAgICB9LFxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5maWxlVXNlciB8fCAnJyxcbiAgICAgIHJlcXVpcmVkOiBmYWxzZVxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ2ZpbGVNb2RlJyxcbiAgICAgIHR5cGU6ICdpbnB1dCcsXG4gICAgICBnZXQgcHJlZml4KCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1NGVFBQTElTVF9GSUxFX01PREUnKVxuICAgICAgfSxcbiAgICAgIGdldCBhbGlhcygpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9TRlRQUExJU1RfRklMRV9NT0RFJylcbiAgICAgIH0sXG4gICAgICBnZXQgbWVzc2FnZSgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9TRlRQUExJU1RfTUVTU0FHRV9GSUxFX01PREUnKVxuICAgICAgfSxcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuZmlsZU1vZGUgfHwgJycsXG4gICAgICByZXF1aXJlZDogZmFsc2VcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdkaXJNb2RlJyxcbiAgICAgIHR5cGU6ICdpbnB1dCcsXG4gICAgICBnZXQgcHJlZml4KCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1NGVFBQTElTVF9ESVJfTU9ERScpXG4gICAgICB9LFxuICAgICAgZ2V0IGFsaWFzKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1NGVFBQTElTVF9ESVJfTU9ERScpXG4gICAgICB9LFxuICAgICAgZ2V0IG1lc3NhZ2UoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfU0ZUUFBMSVNUX01FU1NBR0VfRElSX01PREUnKVxuICAgICAgfSxcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuZGlyTW9kZSB8fCAnJyxcbiAgICAgIHJlcXVpcmVkOiBmYWxzZVxuICAgIH1cbiAgXVxuICByZXR1cm4gY29uZmlnXG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHJlZ2lzdGVyKGN0eDogSVBpY0dvKTogdm9pZCB7XG4gIGN0eC5oZWxwZXIudXBsb2FkZXIucmVnaXN0ZXIoYnVpbGRJblVwbG9hZGVyTmFtZXMuc2Z0cHBsaXN0LCB7XG4gICAgZ2V0IG5hbWUoKSB7XG4gICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1NGVFBQTElTVCcpXG4gICAgfSxcbiAgICBoYW5kbGUsXG4gICAgY29uZmlnXG4gIH0pXG59XG4iLCJpbXBvcnQgYXhpb3MgZnJvbSAnYXhpb3MnXG5pbXBvcnQgeyBJUGljR28sIElQbHVnaW5Db25maWcsIElTbW1zQ29uZmlnLCBJT2xkUmVxT3B0aW9ucyB9IGZyb20gJy4uLy4uL3R5cGVzJ1xuaW1wb3J0IHsgSUJ1aWxkSW5FdmVudCB9IGZyb20gJy4uLy4uL3V0aWxzL2VudW0nXG5pbXBvcnQgeyBJTG9jYWxlc0tleSB9IGZyb20gJy4uLy4uL2kxOG4vemgtQ04nXG5pbXBvcnQgeyBidWlsZEluVXBsb2FkZXJOYW1lcyB9IGZyb20gJy4vdXRpbHMnXG5cbmNvbnN0IHBvc3RPcHRpb25zID0gKGZpbGVOYW1lOiBzdHJpbmcsIGltYWdlOiBCdWZmZXIsIGFwaVRva2VuOiBzdHJpbmcsIGJhY2t1cERvbWFpbiA9ICcnKTogSU9sZFJlcU9wdGlvbnMgPT4ge1xuICBsZXQgZG9tYWluID0gYmFja3VwRG9tYWluIHx8ICdzbS5tcydcbiAgZG9tYWluID0gZG9tYWluLnJlcGxhY2UoL15odHRwcz86XFwvXFwvLywgJycpLnJlcGxhY2UoL1xcLyQvLCAnJylcbiAgcmV0dXJuIHtcbiAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICB1cmw6IGBodHRwczovLyR7ZG9tYWlufS9hcGkvdjIvdXBsb2FkYCxcbiAgICBoZWFkZXJzOiB7XG4gICAgICBjb250ZW50VHlwZTogJ211bHRpcGFydC9mb3JtLWRhdGEnLFxuICAgICAgJ1VzZXItQWdlbnQnOiAnUGljTGlzdCcsXG4gICAgICBBdXRob3JpemF0aW9uOiBhcGlUb2tlblxuICAgIH0sXG4gICAgZm9ybURhdGE6IHtcbiAgICAgIHNtZmlsZToge1xuICAgICAgICB2YWx1ZTogaW1hZ2UsXG4gICAgICAgIG9wdGlvbnM6IHtcbiAgICAgICAgICBmaWxlbmFtZTogZmlsZU5hbWVcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHNzbDogJ3RydWUnXG4gICAgfVxuICB9XG59XG5cbmNvbnN0IGhhbmRsZSA9IGFzeW5jIChjdHg6IElQaWNHbyk6IFByb21pc2U8SVBpY0dvPiA9PiB7XG4gIGNvbnN0IHNtbXNDb25maWcgPSBjdHguZ2V0Q29uZmlnPElTbW1zQ29uZmlnPigncGljQmVkLnNtbXMnKVxuICBpZiAoIXNtbXNDb25maWcpIHRocm93IG5ldyBFcnJvcignQ2FuIG5vdCBmaW5kIHNtbXMgY29uZmlnIScpXG4gIGlmICghc21tc0NvbmZpZy50b2tlbiB8fCBzbW1zQ29uZmlnLnRva2VuLnRyaW0oKSA9PT0gJycpIHRocm93IG5ldyBFcnJvcignU00uTVMgdG9rZW4gaXMgcmVxdWlyZWQhJylcblxuICBjb25zdCBpbWdMaXN0ID0gY3R4Lm91dHB1dFxuICBmb3IgKGNvbnN0IGltZyBvZiBpbWdMaXN0KSB7XG4gICAgaWYgKCFpbWcuZmlsZU5hbWUpIGNvbnRpbnVlXG4gICAgbGV0IGltYWdlQnVmZmVyOiBCdWZmZXIgfCB1bmRlZmluZWQgPSBpbWcuYnVmZmVyXG4gICAgaWYgKCFpbWFnZUJ1ZmZlciAmJiBpbWcuYmFzZTY0SW1hZ2UpIHtcbiAgICAgIGltYWdlQnVmZmVyID0gQnVmZmVyLmZyb20oaW1nLmJhc2U2NEltYWdlLCAnYmFzZTY0JylcbiAgICB9XG4gICAgaWYgKCFpbWFnZUJ1ZmZlcikgY29udGludWVcblxuICAgIGNvbnN0IHBvc3RDb25maWcgPSBwb3N0T3B0aW9ucyhpbWcuZmlsZU5hbWUsIGltYWdlQnVmZmVyLCBzbW1zQ29uZmlnLnRva2VuLCBzbW1zQ29uZmlnLmJhY2t1cERvbWFpbilcblxuICAgIGNvbnN0IHJlczogc3RyaW5nID0gYXdhaXQgY3R4LnJlcXVlc3QocG9zdENvbmZpZylcbiAgICBjb25zdCBib2R5ID0gSlNPTi5wYXJzZShyZXMpXG4gICAgaWYgKGJvZHkuY29kZSA9PT0gJ3N1Y2Nlc3MnKSB7XG4gICAgICBkZWxldGUgaW1nLmJhc2U2NEltYWdlXG4gICAgICBkZWxldGUgaW1nLmJ1ZmZlclxuICAgICAgaW1nLmltZ1VybCA9IGJvZHkuZGF0YS51cmxcbiAgICAgIGltZy5oYXNoID0gYm9keS5kYXRhLmhhc2hcbiAgICB9IGVsc2UgaWYgKGJvZHkuY29kZSA9PT0gJ2ltYWdlX3JlcGVhdGVkJyAmJiB0eXBlb2YgYm9keS5pbWFnZXMgPT09ICdzdHJpbmcnKSB7XG4gICAgICAvLyBkbyBleHRyYSBjaGVjayBzaW5jZSB0aGlzIGVycm9yIHJldHVybiBpcyBub3QgZG9jdW1lbnRlZCBhdCBodHRwczovL2RvYy5zbS5tcy8jYXBpLUltYWdlLVVwbG9hZFxuICAgICAgZGVsZXRlIGltZy5iYXNlNjRJbWFnZVxuICAgICAgZGVsZXRlIGltZy5idWZmZXJcbiAgICAgIGltZy5pbWdVcmwgPSBib2R5LmltYWdlc1xuICAgICAgY29uc3QgdXBsb2FkSGlzdG9yeSA9IGF3YWl0IGF4aW9zLmdldCgnaHR0cHM6Ly9zbS5tcy9hcGkvdjIvdXBsb2FkX2hpc3RvcnknLCB7XG4gICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICBBdXRob3JpemF0aW9uOiBzbW1zQ29uZmlnLnRva2VuXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgICBpZiAodXBsb2FkSGlzdG9yeS5kYXRhLmNvZGUgPT09ICdzdWNjZXNzJykge1xuICAgICAgICBjb25zdCBpbWFnZXMgPSB1cGxvYWRIaXN0b3J5LmRhdGEuZGF0YVxuICAgICAgICBmb3IgKGNvbnN0IGltYWdlIG9mIGltYWdlcykge1xuICAgICAgICAgIGlmIChpbWFnZS51cmwgPT09IGJvZHkuaW1hZ2VzKSB7XG4gICAgICAgICAgICBpbWcuaGFzaCA9IGltYWdlLmhhc2hcbiAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGN0eC5lbWl0KElCdWlsZEluRXZlbnQuTk9USUZJQ0FUSU9OLCB7XG4gICAgICAgIHRpdGxlOiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdVUExPQURfRkFJTEVEJyksXG4gICAgICAgIGJvZHk6IGJvZHkubWVzc2FnZVxuICAgICAgfSlcbiAgICAgIHRocm93IG5ldyBFcnJvcihib2R5Lm1lc3NhZ2UpXG4gICAgfVxuICB9XG4gIHJldHVybiBjdHhcbn1cblxuY29uc3QgY29uZmlnID0gKGN0eDogSVBpY0dvKTogSVBsdWdpbkNvbmZpZ1tdID0+IHtcbiAgY29uc3QgdXNlckNvbmZpZyA9IGN0eC5nZXRDb25maWc8SVNtbXNDb25maWc+KCdwaWNCZWQuc21tcycpIHx8IHt9XG4gIGNvbnN0IGNvbmZpZzogSVBsdWdpbkNvbmZpZ1tdID0gW1xuICAgIHtcbiAgICAgIG5hbWU6ICd0b2tlbicsXG4gICAgICB0eXBlOiAnaW5wdXQnLFxuICAgICAgZ2V0IHByZWZpeCgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9TTU1TX1RPS0VOJylcbiAgICAgIH0sXG4gICAgICBnZXQgYWxpYXMoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfU01NU19UT0tFTicpXG4gICAgICB9LFxuICAgICAgZ2V0IG1lc3NhZ2UoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfU01NU19NRVNTQUdFX1RPS0VOJylcbiAgICAgIH0sXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLnRva2VuIHx8ICcnLFxuICAgICAgcmVxdWlyZWQ6IHRydWVcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdiYWNrdXBEb21haW4nLFxuICAgICAgdHlwZTogJ2lucHV0JyxcbiAgICAgIGdldCBwcmVmaXgoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfU01NU19CQUNLVVBfRE9NQUlOJylcbiAgICAgIH0sXG4gICAgICBnZXQgYWxpYXMoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfU01NU19CQUNLVVBfRE9NQUlOJylcbiAgICAgIH0sXG4gICAgICBnZXQgbWVzc2FnZSgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9TTU1TX01FU1NBR0VfQkFDS1VQX0RPTUFJTicpXG4gICAgICB9LFxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5iYWNrdXBEb21haW4gfHwgJycsXG4gICAgICByZXF1aXJlZDogZmFsc2VcbiAgICB9XG4gIF1cbiAgcmV0dXJuIGNvbmZpZ1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiByZWdpc3RlcihjdHg6IElQaWNHbyk6IHZvaWQge1xuICBjdHguaGVscGVyLnVwbG9hZGVyLnJlZ2lzdGVyKGJ1aWxkSW5VcGxvYWRlck5hbWVzLnNtbXMsIHtcbiAgICBnZXQgbmFtZSgpIHtcbiAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfU01NUycpXG4gICAgfSxcbiAgICBoYW5kbGUsXG4gICAgY29uZmlnXG4gIH0pXG59XG4iLCJpbXBvcnQgY3J5cHRvIGZyb20gJ2NyeXB0bydcbmltcG9ydCB7IGxvb2t1cCB9IGZyb20gJ21pbWUtdHlwZXMnXG5pbXBvcnQgeyBJUGljR28sIElQbHVnaW5Db25maWcsIElUY3l1bkNvbmZpZywgSU9sZFJlcU9wdGlvbnNXaXRoRnVsbFJlc3BvbnNlIH0gZnJvbSAnLi4vLi4vdHlwZXMnXG5pbXBvcnQgeyBJQnVpbGRJbkV2ZW50IH0gZnJvbSAnLi4vLi4vdXRpbHMvZW51bSdcbmltcG9ydCB7IElMb2NhbGVzS2V5IH0gZnJvbSAnLi4vLi4vaTE4bi96aC1DTidcbmltcG9ydCB7IGJ1aWxkSW5VcGxvYWRlck5hbWVzLCBlbmNvZGVQYXRoLCBmb3JtYXRQYXRoSGVscGVyIH0gZnJvbSAnLi91dGlscydcblxuLy8gZ2VuZXJhdGUgQ09TIHNpZ25hdHVyZSBzdHJpbmdcblxuZXhwb3J0IGludGVyZmFjZSBJU2lnbmF0dXJlIHtcbiAgc2lnbmF0dXJlOiBzdHJpbmdcbiAgYXBwSWQ6IHN0cmluZ1xuICBidWNrZXQ6IHN0cmluZ1xuICBzaWduVGltZTogc3RyaW5nXG59XG5cbmNvbnN0IGdlbmVyYXRlU2lnbmF0dXJlID0gKG9wdGlvbnM6IElUY3l1bkNvbmZpZywgZmlsZU5hbWU6IHN0cmluZyk6IElTaWduYXR1cmUgPT4ge1xuICBjb25zdCBzZWNyZXRJZCA9IG9wdGlvbnMuc2VjcmV0SWRcbiAgY29uc3Qgc2VjcmV0S2V5ID0gb3B0aW9ucy5zZWNyZXRLZXlcbiAgY29uc3QgYXBwSWQgPSBvcHRpb25zLmFwcElkXG4gIGNvbnN0IGJ1Y2tldCA9IG9wdGlvbnMuYnVja2V0XG4gIGxldCBzaWduYXR1cmVcbiAgbGV0IHNpZ25UaW1lOiBzdHJpbmcgPSAnJ1xuICBpZiAoIW9wdGlvbnMudmVyc2lvbiB8fCBvcHRpb25zLnZlcnNpb24gPT09ICd2NCcpIHtcbiAgICBjb25zdCByYW5kb20gPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAxMDAwMDAwMDAwMClcbiAgICBjb25zdCBjdXJyZW50ID0gTWF0aC5mbG9vcihuZXcgRGF0ZSgpLmdldFRpbWUoKSAvIDEwMDApIC0gMVxuICAgIGNvbnN0IGV4cGlyZWQgPSBjdXJyZW50ICsgMzYwMFxuXG4gICAgY29uc3QgbXVsdGlTaWduYXR1cmUgPSBgYT0ke2FwcElkfSZiPSR7YnVja2V0fSZrPSR7c2VjcmV0SWR9JmU9JHtleHBpcmVkfSZ0PSR7Y3VycmVudH0mcj0ke3JhbmRvbX0mZj1gXG5cbiAgICBjb25zdCBzaWduSGV4S2V5ID0gY3J5cHRvLmNyZWF0ZUhtYWMoJ3NoYTEnLCBzZWNyZXRLZXkpLnVwZGF0ZShtdWx0aVNpZ25hdHVyZSkuZGlnZXN0KClcbiAgICBjb25zdCB0ZW1wU3RyaW5nID0gQnVmZmVyLmNvbmNhdChbc2lnbkhleEtleSwgQnVmZmVyLmZyb20obXVsdGlTaWduYXR1cmUpXSlcbiAgICBzaWduYXR1cmUgPSBCdWZmZXIuZnJvbSh0ZW1wU3RyaW5nKS50b1N0cmluZygnYmFzZTY0JylcbiAgfSBlbHNlIHtcbiAgICAvLyBodHRwczovL2Nsb3VkLnRlbmNlbnQuY29tL2RvY3VtZW50L3Byb2R1Y3QvNDM2Lzc3Nzgjc2lnbmF0dXJlXG4gICAgY29uc3QgdG9kYXkgPSBNYXRoLmZsb29yKG5ldyBEYXRlKCkuZ2V0VGltZSgpIC8gMTAwMClcbiAgICBjb25zdCB0b21vcnJvdyA9IHRvZGF5ICsgODY0MDBcbiAgICBzaWduVGltZSA9IGAke3RvZGF5fTske3RvbW9ycm93fWBcbiAgICBjb25zdCBzaWduS2V5ID0gY3J5cHRvLmNyZWF0ZUhtYWMoJ3NoYTEnLCBzZWNyZXRLZXkpLnVwZGF0ZShzaWduVGltZSkuZGlnZXN0KCdoZXgnKVxuICAgIGNvbnN0IGVuZHBvaW50ID0gb3B0aW9ucy5lbmRwb2ludCA/IG9wdGlvbnMuZW5kcG9pbnQgOiBgY29zLiR7b3B0aW9ucy5hcmVhfS5teXFjbG91ZC5jb21gXG4gICAgY29uc3QgaHR0cFN0cmluZyA9IGBwdXRcXG4vJHtvcHRpb25zLnBhdGh9JHtmaWxlTmFtZX1cXG5cXG5ob3N0PSR7b3B0aW9ucy5idWNrZXR9LiR7ZW5kcG9pbnR9XFxuYFxuICAgIGNvbnN0IHNoYTFlZEh0dHBTdHJpbmcgPSBjcnlwdG8uY3JlYXRlSGFzaCgnc2hhMScpLnVwZGF0ZShodHRwU3RyaW5nKS5kaWdlc3QoJ2hleCcpXG4gICAgY29uc3Qgc3RyaW5nVG9TaWduID0gYHNoYTFcXG4ke3NpZ25UaW1lfVxcbiR7c2hhMWVkSHR0cFN0cmluZ31cXG5gXG4gICAgc2lnbmF0dXJlID0gY3J5cHRvLmNyZWF0ZUhtYWMoJ3NoYTEnLCBzaWduS2V5KS51cGRhdGUoc3RyaW5nVG9TaWduKS5kaWdlc3QoJ2hleCcpXG4gIH1cbiAgcmV0dXJuIHtcbiAgICBzaWduYXR1cmUsXG4gICAgYXBwSWQsXG4gICAgYnVja2V0LFxuICAgIHNpZ25UaW1lXG4gIH1cbn1cblxuY29uc3QgcG9zdE9wdGlvbnMgPSAoXG4gIG9wdGlvbnM6IElUY3l1bkNvbmZpZyxcbiAgZmlsZU5hbWU6IHN0cmluZyxcbiAgc2lnbmF0dXJlOiBJU2lnbmF0dXJlLFxuICBpbWFnZTogQnVmZmVyLFxuICB2ZXJzaW9uOiBzdHJpbmdcbik6IElPbGRSZXFPcHRpb25zV2l0aEZ1bGxSZXNwb25zZSA9PiB7XG4gIGNvbnN0IGFyZWEgPSBvcHRpb25zLmFyZWFcbiAgY29uc3QgcGF0aCA9IG9wdGlvbnMucGF0aFxuICBpZiAoIW9wdGlvbnMudmVyc2lvbiB8fCBvcHRpb25zLnZlcnNpb24gPT09ICd2NCcpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICB1cmw6IGBodHRwOi8vJHthcmVhfS5maWxlLm15cWNsb3VkLmNvbS9maWxlcy92Mi8ke3NpZ25hdHVyZS5hcHBJZH0vJHtzaWduYXR1cmUuYnVja2V0fS8ke2VuY29kZVVSSShwYXRoKX0ke2ZpbGVOYW1lfWAsXG4gICAgICBoZWFkZXJzOiB7XG4gICAgICAgIEhvc3Q6IGAke2FyZWF9LmZpbGUubXlxY2xvdWQuY29tYCxcbiAgICAgICAgQXV0aG9yaXphdGlvbjogc2lnbmF0dXJlLnNpZ25hdHVyZSxcbiAgICAgICAgY29udGVudFR5cGU6ICdtdWx0aXBhcnQvZm9ybS1kYXRhJyxcbiAgICAgICAgJ1VzZXItQWdlbnQnOiBgUGljR287JHt2ZXJzaW9ufTtudWxsO251bGxgXG4gICAgICB9LFxuICAgICAgZm9ybURhdGE6IHtcbiAgICAgICAgb3A6ICd1cGxvYWQnLFxuICAgICAgICBmaWxlY29udGVudDogaW1hZ2VcbiAgICAgIH0sXG4gICAgICByZXNvbHZlV2l0aEZ1bGxSZXNwb25zZTogdHJ1ZVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBjb25zdCBlbmRwb2ludCA9IG9wdGlvbnMuZW5kcG9pbnQgPyBvcHRpb25zLmVuZHBvaW50IDogYGNvcy4ke29wdGlvbnMuYXJlYX0ubXlxY2xvdWQuY29tYFxuICAgIHJldHVybiB7XG4gICAgICBtZXRob2Q6ICdQVVQnLFxuICAgICAgdXJsOiBgaHR0cDovLyR7b3B0aW9ucy5idWNrZXR9LiR7ZW5kcG9pbnR9LyR7ZW5jb2RlUGF0aChgJHtwYXRofSR7ZmlsZU5hbWV9YCl9YCxcbiAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgSG9zdDogYCR7b3B0aW9ucy5idWNrZXR9LiR7ZW5kcG9pbnR9YCxcbiAgICAgICAgQXV0aG9yaXphdGlvbjogYHEtc2lnbi1hbGdvcml0aG09c2hhMSZxLWFrPSR7b3B0aW9ucy5zZWNyZXRJZH0mcS1zaWduLXRpbWU9JHtzaWduYXR1cmUuc2lnblRpbWV9JnEta2V5LXRpbWU9JHtzaWduYXR1cmUuc2lnblRpbWV9JnEtaGVhZGVyLWxpc3Q9aG9zdCZxLXVybC1wYXJhbS1saXN0PSZxLXNpZ25hdHVyZT0ke3NpZ25hdHVyZS5zaWduYXR1cmV9YCxcbiAgICAgICAgY29udGVudFR5cGU6IGxvb2t1cChmaWxlTmFtZSkgfHwgJ2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbScsXG4gICAgICAgICdVc2VyLUFnZW50JzogYFBpY0dvOyR7dmVyc2lvbn07bnVsbDtudWxsYFxuICAgICAgfSxcbiAgICAgIGJvZHk6IGltYWdlLFxuICAgICAgcmVzb2x2ZVdpdGhGdWxsUmVzcG9uc2U6IHRydWVcbiAgICB9XG4gIH1cbn1cblxuY29uc3QgaGFuZGxlID0gYXN5bmMgKGN0eDogSVBpY0dvKTogUHJvbWlzZTxJUGljR28gfCBib29sZWFuPiA9PiB7XG4gIGNvbnN0IHRjWXVuT3B0aW9ucyA9IGN0eC5nZXRDb25maWc8SVRjeXVuQ29uZmlnPigncGljQmVkLnRjeXVuJylcbiAgaWYgKCF0Y1l1bk9wdGlvbnMpIHRocm93IG5ldyBFcnJvcihcIkNhbid0IGZpbmQgdGVuY2VudCBDT1MgY29uZmlnXCIpXG4gIHRyeSB7XG4gICAgY29uc3QgaW1nTGlzdCA9IGN0eC5vdXRwdXRcbiAgICBjb25zdCBjdXN0b21VcmwgPSAodGNZdW5PcHRpb25zLmN1c3RvbVVybCB8fCAnJykucmVwbGFjZSgvXFwvJC8sICcnKVxuICAgIGNvbnN0IHBhdGggPSBmb3JtYXRQYXRoSGVscGVyKHtcbiAgICAgIHBhdGg6IHRjWXVuT3B0aW9ucy5wYXRoXG4gICAgfSlcbiAgICB0Y1l1bk9wdGlvbnMucGF0aCA9IHBhdGhcbiAgICBjb25zdCB1c2VWNCA9ICF0Y1l1bk9wdGlvbnMudmVyc2lvbiB8fCB0Y1l1bk9wdGlvbnMudmVyc2lvbiA9PT0gJ3Y0J1xuICAgIGZvciAoY29uc3QgaW1nIG9mIGltZ0xpc3QpIHtcbiAgICAgIGlmIChpbWcuZmlsZU5hbWUgJiYgaW1nLmJ1ZmZlcikge1xuICAgICAgICBjb25zdCBzaWduYXR1cmUgPSBnZW5lcmF0ZVNpZ25hdHVyZSh0Y1l1bk9wdGlvbnMsIGltZy5maWxlTmFtZSlcbiAgICAgICAgaWYgKCFzaWduYXR1cmUpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgICAgfVxuICAgICAgICBsZXQgaW1hZ2UgPSBpbWcuYnVmZmVyXG4gICAgICAgIGlmICghaW1hZ2UgJiYgaW1nLmJhc2U2NEltYWdlKSB7XG4gICAgICAgICAgaW1hZ2UgPSBCdWZmZXIuZnJvbShpbWcuYmFzZTY0SW1hZ2UsICdiYXNlNjQnKVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSBwb3N0T3B0aW9ucyh0Y1l1bk9wdGlvbnMsIGltZy5maWxlTmFtZSwgc2lnbmF0dXJlLCBpbWFnZSwgY3R4LkdVSV9WRVJTSU9OIHx8IGN0eC5WRVJTSU9OKVxuICAgICAgICBjb25zdCByZXMgPSBhd2FpdCBjdHhcbiAgICAgICAgICAucmVxdWVzdChvcHRpb25zKVxuICAgICAgICAgIC50aGVuKChyZXM6IGFueSkgPT4gcmVzKVxuICAgICAgICAgIC5jYXRjaCgoZXJyOiBFcnJvcikgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgc3RhdHVzQ29kZTogNDAwLFxuICAgICAgICAgICAgICBib2R5OiB7XG4gICAgICAgICAgICAgICAgbXNnOiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdBVVRIX0ZBSUxFRCcpLFxuICAgICAgICAgICAgICAgIGVyclxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSlcbiAgICAgICAgbGV0IGJvZHlcbiAgICAgICAgaWYgKHVzZVY0ICYmIHR5cGVvZiByZXMgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgYm9keSA9IEpTT04ucGFyc2UocmVzKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGJvZHkgPSByZXNcbiAgICAgICAgfVxuICAgICAgICBpZiAoYm9keS5zdGF0dXNDb2RlID09PSA0MDApIHtcbiAgICAgICAgICBpZiAoYm9keT8uYm9keT8uZXJyKSB7XG4gICAgICAgICAgICB0aHJvdyBib2R5LmJvZHkuZXJyXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihib2R5Py5ib2R5Py5tc2cgfHwgYm9keT8uYm9keT8ubWVzc2FnZSlcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgb3B0aW9uVXJsID0gdGNZdW5PcHRpb25zLm9wdGlvbnMgfHwgJydcbiAgICAgICAgY29uc3Qgc2xpbSA9IHRjWXVuT3B0aW9ucy5zbGltID09PSB1bmRlZmluZWQgPyBmYWxzZSA6ICEhdGNZdW5PcHRpb25zLnNsaW1cbiAgICAgICAgaWYgKHVzZVY0ICYmIGJvZHkubWVzc2FnZSA9PT0gJ1NVQ0NFU1MnKSB7XG4gICAgICAgICAgZGVsZXRlIGltZy5iYXNlNjRJbWFnZVxuICAgICAgICAgIGRlbGV0ZSBpbWcuYnVmZmVyXG4gICAgICAgICAgaWYgKGN1c3RvbVVybCkge1xuICAgICAgICAgICAgaW1nLmltZ1VybCA9IGAke2N1c3RvbVVybH0vJHtlbmNvZGVQYXRoKGAke3BhdGh9JHtpbWcuZmlsZU5hbWV9YCl9JHtvcHRpb25Vcmx9YFxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpbWcuaW1nVXJsID0gYCR7Ym9keS5kYXRhLnNvdXJjZV91cmwgYXMgc3RyaW5nfSR7b3B0aW9uVXJsfWBcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoIXVzZVY0ICYmIGJvZHkgJiYgYm9keS5zdGF0dXNDb2RlID09PSAyMDApIHtcbiAgICAgICAgICBkZWxldGUgaW1nLmJhc2U2NEltYWdlXG4gICAgICAgICAgZGVsZXRlIGltZy5idWZmZXJcbiAgICAgICAgICBpZiAoY3VzdG9tVXJsKSB7XG4gICAgICAgICAgICBpbWcuaW1nVXJsID0gYCR7Y3VzdG9tVXJsfS8ke2VuY29kZVBhdGgoYCR7cGF0aH0ke2ltZy5maWxlTmFtZX1gKX0ke29wdGlvblVybH1gXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IGVuZHBvaW50ID0gdGNZdW5PcHRpb25zLmVuZHBvaW50ID8gdGNZdW5PcHRpb25zLmVuZHBvaW50IDogYGNvcy4ke3RjWXVuT3B0aW9ucy5hcmVhfS5teXFjbG91ZC5jb21gXG4gICAgICAgICAgICBpbWcuaW1nVXJsID0gYGh0dHBzOi8vJHt0Y1l1bk9wdGlvbnMuYnVja2V0fS4ke2VuZHBvaW50fS8ke2VuY29kZVBhdGgoYCR7cGF0aH0ke2ltZy5maWxlTmFtZX1gKX0ke29wdGlvblVybH1gXG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihyZXMuYm9keS5tc2cpXG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNsaW0pIHtcbiAgICAgICAgICBpZiAob3B0aW9uVXJsKSB7XG4gICAgICAgICAgICBpbWcuaW1nVXJsICs9ICcmaW1hZ2VTbGltJ1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpbWcuaW1nVXJsICs9ICc/aW1hZ2VTbGltJ1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gY3R4XG4gIH0gY2F0Y2ggKGVycjogYW55KSB7XG4gICAgaWYgKCF0Y1l1bk9wdGlvbnMudmVyc2lvbiB8fCB0Y1l1bk9wdGlvbnMudmVyc2lvbiA9PT0gJ3Y0Jykge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgYm9keSA9IEpTT04ucGFyc2UoZXJyLmVycm9yKVxuICAgICAgICBjdHguZW1pdChJQnVpbGRJbkV2ZW50Lk5PVElGSUNBVElPTiwge1xuICAgICAgICAgIHRpdGxlOiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdVUExPQURfRkFJTEVEJyksXG4gICAgICAgICAgYm9keTogY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignVVBMT0FEX0ZBSUxFRF9SRUFTT04nLCB7XG4gICAgICAgICAgICBjb2RlOiBib2R5LmNvZGUgYXMgc3RyaW5nXG4gICAgICAgICAgfSksXG4gICAgICAgICAgdGV4dDogJ2h0dHBzOi8vY2xvdWQudGVuY2VudC5jb20vZG9jdW1lbnQvcHJvZHVjdC80MzYvODQzMidcbiAgICAgICAgfSlcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgLyogZW1wdHkgKi9cbiAgICAgIH1cbiAgICB9XG4gICAgdGhyb3cgZXJyXG4gIH1cbn1cblxuY29uc3QgY29uZmlnID0gKGN0eDogSVBpY0dvKTogSVBsdWdpbkNvbmZpZ1tdID0+IHtcbiAgY29uc3QgdXNlckNvbmZpZyA9IGN0eC5nZXRDb25maWc8SVRjeXVuQ29uZmlnPigncGljQmVkLnRjeXVuJykgfHwge31cbiAgY29uc3QgY29uZmlnOiBJUGx1Z2luQ29uZmlnW10gPSBbXG4gICAge1xuICAgICAgbmFtZTogJ3ZlcnNpb24nLFxuICAgICAgdHlwZTogJ2xpc3QnLFxuICAgICAgZ2V0IHByZWZpeCgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9URU5DRU5UQ0xPVURfVkVSU0lPTicpXG4gICAgICB9LFxuICAgICAgYWxpYXM6IGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9URU5DRU5UQ0xPVURfVkVSU0lPTicpLFxuICAgICAgY2hvaWNlczogWyd2NCcsICd2NSddLFxuICAgICAgZGVmYXVsdDogJ3Y1JyxcbiAgICAgIHJlcXVpcmVkOiBmYWxzZVxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ3NlY3JldElkJyxcbiAgICAgIHR5cGU6ICdpbnB1dCcsXG4gICAgICBnZXQgcHJlZml4KCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1RFTkNFTlRDTE9VRF9TRUNSRVRJRCcpXG4gICAgICB9LFxuICAgICAgZ2V0IGFsaWFzKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1RFTkNFTlRDTE9VRF9TRUNSRVRJRCcpXG4gICAgICB9LFxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5zZWNyZXRJZCB8fCAnJyxcbiAgICAgIHJlcXVpcmVkOiB0cnVlXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAnc2VjcmV0S2V5JyxcbiAgICAgIHR5cGU6ICdpbnB1dCcsXG4gICAgICBnZXQgcHJlZml4KCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1RFTkNFTlRDTE9VRF9TRUNSRVRLRVknKVxuICAgICAgfSxcbiAgICAgIGdldCBhbGlhcygpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9URU5DRU5UQ0xPVURfU0VDUkVUS0VZJylcbiAgICAgIH0sXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLnNlY3JldEtleSB8fCAnJyxcbiAgICAgIHJlcXVpcmVkOiB0cnVlXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAnYnVja2V0JyxcbiAgICAgIHR5cGU6ICdpbnB1dCcsXG4gICAgICBnZXQgcHJlZml4KCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1RFTkNFTlRDTE9VRF9CVUNLRVQnKVxuICAgICAgfSxcbiAgICAgIGdldCBhbGlhcygpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9URU5DRU5UQ0xPVURfQlVDS0VUJylcbiAgICAgIH0sXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLmJ1Y2tldCB8fCAnJyxcbiAgICAgIHJlcXVpcmVkOiB0cnVlXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAnYXBwSWQnLFxuICAgICAgdHlwZTogJ2lucHV0JyxcbiAgICAgIGdldCBwcmVmaXgoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVEVOQ0VOVENMT1VEX0FQUElEJylcbiAgICAgIH0sXG4gICAgICBnZXQgYWxpYXMoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVEVOQ0VOVENMT1VEX0FQUElEJylcbiAgICAgIH0sXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLmFwcElkIHx8ICcnLFxuICAgICAgZ2V0IG1lc3NhZ2UoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVEVOQ0VOVENMT1VEX01FU1NBR0VfQVBQSUQnKVxuICAgICAgfSxcbiAgICAgIHJlcXVpcmVkOiB0cnVlXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAnYXJlYScsXG4gICAgICB0eXBlOiAnaW5wdXQnLFxuICAgICAgZ2V0IHByZWZpeCgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9URU5DRU5UQ0xPVURfQVJFQScpXG4gICAgICB9LFxuICAgICAgZ2V0IGFsaWFzKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1RFTkNFTlRDTE9VRF9BUkVBJylcbiAgICAgIH0sXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLmFyZWEgfHwgJycsXG4gICAgICBnZXQgbWVzc2FnZSgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9URU5DRU5UQ0xPVURfTUVTU0FHRV9BUkVBJylcbiAgICAgIH0sXG4gICAgICByZXF1aXJlZDogdHJ1ZVxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ2VuZHBvaW50JyxcbiAgICAgIHR5cGU6ICdpbnB1dCcsXG4gICAgICBnZXQgcHJlZml4KCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1RFTkNFTlRDTE9VRF9FTkRQT0lOVCcpXG4gICAgICB9LFxuICAgICAgZ2V0IGFsaWFzKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1RFTkNFTlRDTE9VRF9FTkRQT0lOVCcpXG4gICAgICB9LFxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5lbmRwb2ludCB8fCAnJyxcbiAgICAgIGdldCBtZXNzYWdlKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1RFTkNFTlRDTE9VRF9NRVNTQUdFX0VORFBPSU5UJylcbiAgICAgIH0sXG4gICAgICByZXF1aXJlZDogZmFsc2VcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdwYXRoJyxcbiAgICAgIHR5cGU6ICdpbnB1dCcsXG4gICAgICBnZXQgcHJlZml4KCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1RFTkNFTlRDTE9VRF9QQVRIJylcbiAgICAgIH0sXG4gICAgICBnZXQgYWxpYXMoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVEVOQ0VOVENMT1VEX1BBVEgnKVxuICAgICAgfSxcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcucGF0aCB8fCAnJyxcbiAgICAgIGdldCBtZXNzYWdlKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1RFTkNFTlRDTE9VRF9NRVNTQUdFX1BBVEgnKVxuICAgICAgfSxcbiAgICAgIHJlcXVpcmVkOiBmYWxzZVxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ2N1c3RvbVVybCcsXG4gICAgICB0eXBlOiAnaW5wdXQnLFxuICAgICAgZ2V0IHByZWZpeCgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9URU5DRU5UQ0xPVURfQ1VTVE9NVVJMJylcbiAgICAgIH0sXG4gICAgICBnZXQgYWxpYXMoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVEVOQ0VOVENMT1VEX0NVU1RPTVVSTCcpXG4gICAgICB9LFxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5jdXN0b21VcmwgfHwgJycsXG4gICAgICBnZXQgbWVzc2FnZSgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9URU5DRU5UQ0xPVURfTUVTU0FHRV9DVVNUT01VUkwnKVxuICAgICAgfSxcbiAgICAgIHJlcXVpcmVkOiBmYWxzZVxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ29wdGlvbnMnLFxuICAgICAgdHlwZTogJ2lucHV0JyxcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcub3B0aW9ucyB8fCAnJyxcbiAgICAgIGdldCBwcmVmaXgoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVEVOQ0VOVENMT1VEX09QVElPTlMnKVxuICAgICAgfSxcbiAgICAgIGdldCBhbGlhcygpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9URU5DRU5UQ0xPVURfT1BUSU9OUycpXG4gICAgICB9LFxuICAgICAgZ2V0IG1lc3NhZ2UoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVEVOQ0VOVENMT1VEX01FU1NBR0VfT1BUSU9OUycpXG4gICAgICB9LFxuICAgICAgcmVxdWlyZWQ6IGZhbHNlXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAnc2xpbScsXG4gICAgICB0eXBlOiAnY29uZmlybScsXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLnNsaW0gPT09IHVuZGVmaW5lZCA/IGZhbHNlIDogISF1c2VyQ29uZmlnLnNsaW0sXG4gICAgICBnZXQgcHJlZml4KCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1RFTkNFTlRDTE9VRF9TTElNJylcbiAgICAgIH0sXG4gICAgICBnZXQgYWxpYXMoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVEVOQ0VOVENMT1VEX1NMSU0nKVxuICAgICAgfSxcbiAgICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICAgIGdldCBjb25maXJtVGV4dCgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9URU5DRU5UQ0xPVURfU0xJTV9DT05GSVJNJylcbiAgICAgIH0sXG4gICAgICBnZXQgY2FuY2VsVGV4dCgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9URU5DRU5UQ0xPVURfU0xJTV9DQU5DRUwnKVxuICAgICAgfSxcbiAgICAgIGdldCB0aXBzKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1RFTkNFTlRDTE9VRF9TTElNX1RJUCcpXG4gICAgICB9XG4gICAgfVxuICBdXG4gIHJldHVybiBjb25maWdcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcmVnaXN0ZXIoY3R4OiBJUGljR28pOiB2b2lkIHtcbiAgY3R4LmhlbHBlci51cGxvYWRlci5yZWdpc3RlcihidWlsZEluVXBsb2FkZXJOYW1lcy50Y3l1biwge1xuICAgIGdldCBuYW1lKCkge1xuICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9URU5DRU5UQ0xPVUQnKVxuICAgIH0sXG4gICAgaGFuZGxlLFxuICAgIGNvbmZpZ1xuICB9KVxufVxuIiwiaW1wb3J0IGNyeXB0byBmcm9tICdjcnlwdG8nXG5pbXBvcnQgeyBsb29rdXAgfSBmcm9tICdtaW1lLXR5cGVzJ1xuXG5pbXBvcnQgeyBJQnVpbGRJbkV2ZW50IH0gZnJvbSAnLi4vLi4vdXRpbHMvZW51bSdcbmltcG9ydCB7IElMb2NhbGVzS2V5IH0gZnJvbSAnLi4vLi4vaTE4bi96aC1DTidcbmltcG9ydCB7IHNhZmVQYXJzZSB9IGZyb20gJy4uLy4uL3V0aWxzL2NvbW1vbidcblxuaW1wb3J0IHsgYnVpbGRJblVwbG9hZGVyTmFtZXMsIGVuY29kZVBhdGgsIGZvcm1hdFBhdGhIZWxwZXIgfSBmcm9tICcuL3V0aWxzJ1xuaW1wb3J0IHsgSVBpY0dvLCBJUGx1Z2luQ29uZmlnLCBJVXB5dW5Db25maWcsIElPbGRSZXFPcHRpb25zV2l0aEZ1bGxSZXNwb25zZSB9IGZyb20gJy4uLy4uL3R5cGVzJ1xuXG4vLyBnZW5lcmF0ZSBDT1Mgc2lnbmF0dXJlIHN0cmluZ1xuY29uc3QgZ2VuZXJhdGVTaWduYXR1cmUgPSAob3B0aW9uczogSVVweXVuQ29uZmlnLCBmaWxlTmFtZTogc3RyaW5nKTogc3RyaW5nID0+IHtcbiAgY29uc3QgcGF0aCA9IG9wdGlvbnMucGF0aCB8fCAnJ1xuICBjb25zdCBvcGVyYXRvciA9IG9wdGlvbnMub3BlcmF0b3JcbiAgY29uc3QgcGFzc3dvcmQgPSBvcHRpb25zLnBhc3N3b3JkXG4gIGNvbnN0IG1kNVBhc3N3b3JkID0gTUQ1KHBhc3N3b3JkKVxuICBjb25zdCBkYXRlID0gbmV3IERhdGUoKS50b1VUQ1N0cmluZygpXG4gIGNvbnN0IHVyaSA9IGAvJHtvcHRpb25zLmJ1Y2tldH0vJHtlbmNvZGVQYXRoKGAke3BhdGh9JHtmaWxlTmFtZX1gKX1gXG4gIGNvbnN0IHZhbHVlID0gYFBVVCYke3VyaX0mJHtkYXRlfWBcbiAgY29uc3Qgc2lnbiA9IGNyeXB0by5jcmVhdGVIbWFjKCdzaGExJywgbWQ1UGFzc3dvcmQpLnVwZGF0ZSh2YWx1ZSkuZGlnZXN0KCdiYXNlNjQnKVxuICByZXR1cm4gYFVQWVVOICR7b3BlcmF0b3J9OiR7c2lnbn1gXG59XG5cbmNvbnN0IHBvc3RPcHRpb25zID0gKFxuICBvcHRpb25zOiBJVXB5dW5Db25maWcsXG4gIGZpbGVOYW1lOiBzdHJpbmcsXG4gIHNpZ25hdHVyZTogc3RyaW5nLFxuICBpbWFnZTogQnVmZmVyXG4pOiBJT2xkUmVxT3B0aW9uc1dpdGhGdWxsUmVzcG9uc2UgPT4ge1xuICBjb25zdCBidWNrZXQgPSBvcHRpb25zLmJ1Y2tldFxuICBjb25zdCBwYXRoID0gb3B0aW9ucy5wYXRoXG4gIGxldCBlbmRwb2ludCA9IChvcHRpb25zLmVuZHBvaW50IHx8ICdodHRwczovL3YwLmFwaS51cHl1bi5jb20nKS5yZXBsYWNlKC9cXC8rJC9nLCAnJylcbiAgaWYgKCFlbmRwb2ludC5zdGFydHNXaXRoKCdodHRwJykpIHtcbiAgICBlbmRwb2ludCA9IGBodHRwczovLyR7ZW5kcG9pbnR9YFxuICB9XG4gIHJldHVybiB7XG4gICAgbWV0aG9kOiAnUFVUJyxcbiAgICB1cmw6IGAke2VuZHBvaW50fS8ke2J1Y2tldH0vJHtlbmNvZGVQYXRoKGAke3BhdGh9JHtmaWxlTmFtZX1gKX1gLFxuICAgIGhlYWRlcnM6IHtcbiAgICAgIEF1dGhvcml6YXRpb246IHNpZ25hdHVyZSxcbiAgICAgIERhdGU6IG5ldyBEYXRlKCkudG9VVENTdHJpbmcoKSxcbiAgICAgICdDb250ZW50LVR5cGUnOiBsb29rdXAoZmlsZU5hbWUpIHx8ICdhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0nXG4gICAgfSxcbiAgICBib2R5OiBpbWFnZSxcbiAgICByZXNvbHZlV2l0aEZ1bGxSZXNwb25zZTogdHJ1ZVxuICB9XG59XG5cbmZ1bmN0aW9uIE1ENShjb250ZW50OiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gY3J5cHRvLmNyZWF0ZUhhc2goJ21kNScpLnVwZGF0ZShjb250ZW50KS5kaWdlc3QoJ2hleCcpXG59XG5cbmNvbnN0IGdldEFudGlMZWVjaFBhcmFtID0gKFxuICBhbnRpTGVlY2hUb2tlbjogc3RyaW5nLFxuICBleHBpcmVUaW1lOiBzdHJpbmcgfCBudW1iZXIgfCB1bmRlZmluZWQsXG4gIG9wdGlvbnM6IElVcHl1bkNvbmZpZyxcbiAgZmlsZU5hbWU6IHN0cmluZ1xuKTogc3RyaW5nID0+IHtcbiAgY29uc3QgdXJpID0gYC8ke29wdGlvbnMucGF0aCB8fCAnJ30ke2ZpbGVOYW1lfWAucmVwbGFjZSgvJTJGL2csICcvJykucmVwbGFjZSgvXlxcLysvZywgJy8nKVxuICBjb25zdCBub3cgPSBNYXRoLnJvdW5kKG5ldyBEYXRlKCkuZ2V0VGltZSgpIC8gMTAwMClcbiAgY29uc3QgZXhwaXJlID0gZXhwaXJlVGltZSA/IG5vdyArIHBhcnNlSW50KGV4cGlyZVRpbWUudG9TdHJpbmcoKSwgMTApIDogbm93ICsgMTgwMFxuICBjb25zdCBzaWduID0gTUQ1KGAke2FudGlMZWVjaFRva2VufSYke2V4cGlyZX0mJHt1cml9YClcbiAgY29uc3QgdXB0ID0gYCR7c2lnbi5zdWJzdHJpbmcoMTIsIDIwKX0ke2V4cGlyZX1gXG4gIHJldHVybiBgX3VwdD0ke3VwdH1gXG59XG5cbmNvbnN0IGhhbmRsZSA9IGFzeW5jIChjdHg6IElQaWNHbyk6IFByb21pc2U8SVBpY0dvPiA9PiB7XG4gIGNvbnN0IHVweXVuT3B0aW9ucyA9IGN0eC5nZXRDb25maWc8SVVweXVuQ29uZmlnPigncGljQmVkLnVweXVuJylcbiAgaWYgKCF1cHl1bk9wdGlvbnMpIHRocm93IG5ldyBFcnJvcihcIkNhbid0IGZpbmQgdXBZdW4gY29uZmlnXCIpXG4gIHRyeSB7XG4gICAgY29uc3QgaW1nTGlzdCA9IGN0eC5vdXRwdXRcbiAgICBjb25zdCBwYXRoID0gZm9ybWF0UGF0aEhlbHBlcih7IHBhdGg6IHVweXVuT3B0aW9ucy5wYXRoIH0pXG4gICAgdXB5dW5PcHRpb25zLnBhdGggPSBwYXRoXG4gICAgZm9yIChjb25zdCBpbWcgb2YgaW1nTGlzdCkge1xuICAgICAgaWYgKGltZy5maWxlTmFtZSAmJiBpbWcuYnVmZmVyKSB7XG4gICAgICAgIGxldCBpbWFnZSA9IGltZy5idWZmZXJcbiAgICAgICAgaWYgKCFpbWFnZSAmJiBpbWcuYmFzZTY0SW1hZ2UpIHtcbiAgICAgICAgICBpbWFnZSA9IEJ1ZmZlci5mcm9tKGltZy5iYXNlNjRJbWFnZSwgJ2Jhc2U2NCcpXG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc2lnbmF0dXJlID0gZ2VuZXJhdGVTaWduYXR1cmUodXB5dW5PcHRpb25zLCBpbWcuZmlsZU5hbWUpXG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSBwb3N0T3B0aW9ucyh1cHl1bk9wdGlvbnMsIGltZy5maWxlTmFtZSwgc2lnbmF0dXJlLCBpbWFnZSlcbiAgICAgICAgY29uc3Qgc3VmZml4ID0gdXB5dW5PcHRpb25zLm9wdGlvbnMgfHwgJydcbiAgICAgICAgY29uc3QgYm9keSA9IGF3YWl0IGN0eC5yZXF1ZXN0KG9wdGlvbnMpXG4gICAgICAgIGlmIChib2R5LnN0YXR1c0NvZGUgPT09IDIwMCkge1xuICAgICAgICAgIGRlbGV0ZSBpbWcuYmFzZTY0SW1hZ2VcbiAgICAgICAgICBkZWxldGUgaW1nLmJ1ZmZlclxuICAgICAgICAgIGltZy5pbWdVcmwgPSBgJHt1cHl1bk9wdGlvbnMudXJsfS8ke2VuY29kZVBhdGgoYCR7cGF0aH0ke2ltZy5maWxlTmFtZX1gKX0ke3N1ZmZpeH1gXG4gICAgICAgICAgaWYgKHVweXVuT3B0aW9ucy5hbnRpTGVlY2hUb2tlbikge1xuICAgICAgICAgICAgY29uc3QgdXB0ID0gZ2V0QW50aUxlZWNoUGFyYW0oXG4gICAgICAgICAgICAgIHVweXVuT3B0aW9ucy5hbnRpTGVlY2hUb2tlbixcbiAgICAgICAgICAgICAgdXB5dW5PcHRpb25zLmV4cGlyZVRpbWUsXG4gICAgICAgICAgICAgIHVweXVuT3B0aW9ucyxcbiAgICAgICAgICAgICAgaW1nLmZpbGVOYW1lXG4gICAgICAgICAgICApXG4gICAgICAgICAgICBpbWcuaW1nVXJsID0gaW1nLmltZ1VybC5pbmNsdWRlcygnPycpID8gYCR7aW1nLmltZ1VybH0mJHt1cHR9YCA6IGAke2ltZy5pbWdVcmx9PyR7dXB0fWBcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVcGxvYWQgZmFpbGVkJylcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gY3R4XG4gIH0gY2F0Y2ggKGVycjogYW55KSB7XG4gICAgaWYgKGVyci5tZXNzYWdlID09PSAnVXBsb2FkIGZhaWxlZCcpIHtcbiAgICAgIGN0eC5lbWl0KElCdWlsZEluRXZlbnQuTk9USUZJQ0FUSU9OLCB7XG4gICAgICAgIHRpdGxlOiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdVUExPQURfRkFJTEVEJyksXG4gICAgICAgIGJvZHk6IGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0NIRUNLX1NFVFRJTkdTJylcbiAgICAgIH0pXG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGJvZHkgPSBzYWZlUGFyc2U8eyBjb2RlOiBzdHJpbmcgfT4oZXJyLmVycm9yKVxuICAgICAgY3R4LmVtaXQoSUJ1aWxkSW5FdmVudC5OT1RJRklDQVRJT04sIHtcbiAgICAgICAgdGl0bGU6IGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1VQTE9BRF9GQUlMRUQnKSxcbiAgICAgICAgYm9keTogY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignVVBMT0FEX0ZBSUxFRF9SRUFTT04nLCB7XG4gICAgICAgICAgY29kZTogdHlwZW9mIGJvZHkgPT09ICdvYmplY3QnID8gYm9keS5jb2RlIDogYm9keVxuICAgICAgICB9KSxcbiAgICAgICAgdGV4dDogJ2h0dHA6Ly9kb2NzLnVweXVuLmNvbS9hcGkvZXJybm8vJ1xuICAgICAgfSlcbiAgICB9XG4gICAgdGhyb3cgZXJyXG4gIH1cbn1cblxuY29uc3QgY29uZmlnID0gKGN0eDogSVBpY0dvKTogSVBsdWdpbkNvbmZpZ1tdID0+IHtcbiAgY29uc3QgdXNlckNvbmZpZyA9IGN0eC5nZXRDb25maWc8SVVweXVuQ29uZmlnPigncGljQmVkLnVweXVuJykgfHwge31cbiAgY29uc3QgY29uZmlnOiBJUGx1Z2luQ29uZmlnW10gPSBbXG4gICAge1xuICAgICAgbmFtZTogJ2J1Y2tldCcsXG4gICAgICB0eXBlOiAnaW5wdXQnLFxuICAgICAgZ2V0IHByZWZpeCgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9VUFlVTl9CVUNLRVQnKVxuICAgICAgfSxcbiAgICAgIGdldCBhbGlhcygpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9VUFlVTl9CVUNLRVQnKVxuICAgICAgfSxcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuYnVja2V0IHx8ICcnLFxuICAgICAgcmVxdWlyZWQ6IHRydWVcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdvcGVyYXRvcicsXG4gICAgICB0eXBlOiAnaW5wdXQnLFxuICAgICAgZ2V0IHByZWZpeCgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9VUFlVTl9PUEVSQVRPUicpXG4gICAgICB9LFxuICAgICAgZ2V0IGFsaWFzKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1VQWVVOX09QRVJBVE9SJylcbiAgICAgIH0sXG4gICAgICBnZXQgbWVzc2FnZSgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9VUFlVTl9NRVNTQUdFX09QRVJBVE9SJylcbiAgICAgIH0sXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLm9wZXJhdG9yIHx8ICcnLFxuICAgICAgcmVxdWlyZWQ6IHRydWVcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdwYXNzd29yZCcsXG4gICAgICB0eXBlOiAnaW5wdXQnLFxuICAgICAgZ2V0IHByZWZpeCgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9VUFlVTl9NRVNTQUdFX1BBU1NXT1JEJylcbiAgICAgIH0sXG4gICAgICBnZXQgYWxpYXMoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVVBZVU5fUEFTU1dPUkQnKVxuICAgICAgfSxcbiAgICAgIGdldCBtZXNzYWdlKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1VQWVVOX01FU1NBR0VfUEFTU1dPUkQnKVxuICAgICAgfSxcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcucGFzc3dvcmQgfHwgJycsXG4gICAgICByZXF1aXJlZDogdHJ1ZVxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ3VybCcsXG4gICAgICB0eXBlOiAnaW5wdXQnLFxuICAgICAgZ2V0IHByZWZpeCgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9VUFlVTl9VUkwnKVxuICAgICAgfSxcbiAgICAgIGdldCBhbGlhcygpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9VUFlVTl9VUkwnKVxuICAgICAgfSxcbiAgICAgIGdldCBtZXNzYWdlKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1VQWVVOX01FU1NBR0VfVVJMJylcbiAgICAgIH0sXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLnVybCB8fCAnJyxcbiAgICAgIHJlcXVpcmVkOiB0cnVlXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAnb3B0aW9ucycsXG4gICAgICB0eXBlOiAnaW5wdXQnLFxuICAgICAgZ2V0IHByZWZpeCgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9VUFlVTl9PUFRJT05TJylcbiAgICAgIH0sXG4gICAgICBnZXQgYWxpYXMoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVVBZVU5fT1BUSU9OUycpXG4gICAgICB9LFxuICAgICAgZ2V0IG1lc3NhZ2UoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVVBZVU5fTUVTU0FHRV9PUFRJT05TJylcbiAgICAgIH0sXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLm9wdGlvbnMgfHwgJycsXG4gICAgICByZXF1aXJlZDogZmFsc2VcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdwYXRoJyxcbiAgICAgIHR5cGU6ICdpbnB1dCcsXG4gICAgICBnZXQgcHJlZml4KCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1VQWVVOX1BBVEgnKVxuICAgICAgfSxcbiAgICAgIGdldCBhbGlhcygpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9VUFlVTl9QQVRIJylcbiAgICAgIH0sXG4gICAgICBnZXQgbWVzc2FnZSgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9VUFlVTl9NRVNTQUdFX1BBVEgnKVxuICAgICAgfSxcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcucGF0aCB8fCAnJyxcbiAgICAgIHJlcXVpcmVkOiBmYWxzZVxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ2FudGlMZWVjaFRva2VuJyxcbiAgICAgIHR5cGU6ICdpbnB1dCcsXG4gICAgICBnZXQgcHJlZml4KCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1VQWVVOX0FOVElfTEVFQ0hfVE9LRU4nKVxuICAgICAgfSxcbiAgICAgIGdldCBhbGlhcygpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9VUFlVTl9BTlRJX0xFRUNIX1RPS0VOJylcbiAgICAgIH0sXG4gICAgICBnZXQgbWVzc2FnZSgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9VUFlVTl9BTlRJX0xFRUNIX1RPS0VOJylcbiAgICAgIH0sXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLmFudGlMZWVjaFRva2VuIHx8ICcnLFxuICAgICAgcmVxdWlyZWQ6IGZhbHNlXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAnZXhwaXJlVGltZScsXG4gICAgICB0eXBlOiAnaW5wdXQnLFxuICAgICAgZ2V0IHByZWZpeCgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9VUFlVTl9FWFBJUkVfVElNRScpXG4gICAgICB9LFxuICAgICAgZ2V0IGFsaWFzKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1VQWVVOX0VYUElSRV9USU1FJylcbiAgICAgIH0sXG4gICAgICBnZXQgbWVzc2FnZSgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9VUFlVTl9FWFBJUkVfVElNRScpXG4gICAgICB9LFxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5leHBpcmVUaW1lIHx8ICcnLFxuICAgICAgcmVxdWlyZWQ6IGZhbHNlXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAnZW5kcG9pbnQnLFxuICAgICAgdHlwZTogJ2lucHV0JyxcbiAgICAgIGdldCBwcmVmaXgoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVVBZVU5fRU5EUE9JTlQnKVxuICAgICAgfSxcbiAgICAgIGdldCBhbGlhcygpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9VUFlVTl9FTkRQT0lOVCcpXG4gICAgICB9LFxuICAgICAgZ2V0IG1lc3NhZ2UoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVVBZVU5fTUVTU0FHRV9FTkRQT0lOVCcpXG4gICAgICB9LFxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5lbmRwb2ludCB8fCAnaHR0cHM6Ly92MC5hcGkudXB5dW4uY29tJyxcbiAgICAgIHJlcXVpcmVkOiBmYWxzZVxuICAgIH1cbiAgXVxuICByZXR1cm4gY29uZmlnXG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHJlZ2lzdGVyKGN0eDogSVBpY0dvKTogdm9pZCB7XG4gIGN0eC5oZWxwZXIudXBsb2FkZXIucmVnaXN0ZXIoYnVpbGRJblVwbG9hZGVyTmFtZXMudXB5dW4sIHtcbiAgICBnZXQgbmFtZSgpIHtcbiAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVVBZVU4nKVxuICAgIH0sXG4gICAgaGFuZGxlLFxuICAgIGNvbmZpZ1xuICB9KVxufVxuIiwiaW1wb3J0IGZzLCB7IGVuc3VyZURpclN5bmMgfSBmcm9tICdmcy1leHRyYSdcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnXG5pbXBvcnQgeyBXZWJEQVZDbGllbnQsIFdlYkRBVkNsaWVudE9wdGlvbnMsIEF1dGhUeXBlLCBjcmVhdGVDbGllbnQgfSBmcm9tICd3ZWJkYXYnXG5cbmltcG9ydCB7IElQaWNHbywgSVBsdWdpbkNvbmZpZywgSVdlYmRhdlBsaXN0Q29uZmlnIH0gZnJvbSAnLi4vLi4vdHlwZXMnXG5pbXBvcnQgeyBJQnVpbGRJbkV2ZW50IH0gZnJvbSAnLi4vLi4vdXRpbHMvZW51bSdcbmltcG9ydCB7IElMb2NhbGVzS2V5IH0gZnJvbSAnLi4vLi4vaTE4bi96aC1DTidcbmltcG9ydCB7IGJ1aWxkSW5VcGxvYWRlck5hbWVzLCBlbmNvZGVQYXRoLCBmb3JtYXRQYXRoSGVscGVyIH0gZnJvbSAnLi91dGlscydcblxuY29uc3QgaGFuZGxlID0gYXN5bmMgKGN0eDogSVBpY0dvKTogUHJvbWlzZTxJUGljR28gfCBib29sZWFuPiA9PiB7XG4gIGNvbnN0IHdlYmRhdnBsaXN0T3B0aW9ucyA9IGN0eC5nZXRDb25maWc8SVdlYmRhdlBsaXN0Q29uZmlnPigncGljQmVkLndlYmRhdnBsaXN0JylcbiAgaWYgKCF3ZWJkYXZwbGlzdE9wdGlvbnMpIHRocm93IG5ldyBFcnJvcihcIkNhbid0IGZpbmQgd2ViZGF2cGxpc3QgY29uZmlnXCIpXG4gIHdlYmRhdnBsaXN0T3B0aW9ucy5ob3N0ID0gd2ViZGF2cGxpc3RPcHRpb25zLmhvc3QucmVwbGFjZSgvXmh0dHBzPzpcXC9cXC98XFwvKyQvZywgJycpXG4gIHdlYmRhdnBsaXN0T3B0aW9ucy5ob3N0ID0gKHdlYmRhdnBsaXN0T3B0aW9ucy5zc2xFbmFibGVkID8gJ2h0dHBzOi8vJyA6ICdodHRwOi8vJykgKyB3ZWJkYXZwbGlzdE9wdGlvbnMuaG9zdFxuICB3ZWJkYXZwbGlzdE9wdGlvbnMucGF0aCA9IGZvcm1hdFBhdGhIZWxwZXIoe1xuICAgIHBhdGg6IHdlYmRhdnBsaXN0T3B0aW9ucy5wYXRoLFxuICAgIHJvb3RUb0VtcHR5OiBmYWxzZVxuICB9KVxuICBjb25zdCBhdXRoVHlwZSA9IHdlYmRhdnBsaXN0T3B0aW9ucy5hdXRoVHlwZSB8fCAnYmFzaWMnXG4gIGNvbnN0IHdlYnBhdGggPSBmb3JtYXRQYXRoSGVscGVyKHtcbiAgICBwYXRoOiB3ZWJkYXZwbGlzdE9wdGlvbnMud2VicGF0aCxcbiAgICByb290VG9FbXB0eTogZmFsc2VcbiAgfSlcbiAgY29uc3Qgc3VmZml4ID0gd2ViZGF2cGxpc3RPcHRpb25zLm9wdGlvbnMgfHwgJydcbiAgdHJ5IHtcbiAgICBjb25zdCBpbWdMaXN0ID0gY3R4Lm91dHB1dFxuICAgIGNvbnN0IGN1c3RvbVVybCA9IHdlYmRhdnBsaXN0T3B0aW9ucy5jdXN0b21VcmxcbiAgICBjb25zdCB1cGxvYWRQYXRoID0gd2ViZGF2cGxpc3RPcHRpb25zLnBhdGhcbiAgICBmb3IgKGNvbnN0IGltZyBvZiBpbWdMaXN0KSB7XG4gICAgICBpZiAoaW1nLmZpbGVOYW1lICYmIGltZy5idWZmZXIpIHtcbiAgICAgICAgbGV0IGltYWdlID0gaW1nLmJ1ZmZlclxuICAgICAgICBpZiAoIWltYWdlICYmIGltZy5iYXNlNjRJbWFnZSkge1xuICAgICAgICAgIGltYWdlID0gQnVmZmVyLmZyb20oaW1nLmJhc2U2NEltYWdlLCAnYmFzZTY0JylcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjbGllbnRPcHRpb25zOiBXZWJEQVZDbGllbnRPcHRpb25zID0ge1xuICAgICAgICAgIHVzZXJuYW1lOiB3ZWJkYXZwbGlzdE9wdGlvbnMudXNlcm5hbWUsXG4gICAgICAgICAgcGFzc3dvcmQ6IHdlYmRhdnBsaXN0T3B0aW9ucy5wYXNzd29yZCxcbiAgICAgICAgICBtYXhCb2R5TGVuZ3RoOiA0ICogMTAyNCAqIDEwMjQgKiAxMDI0LFxuICAgICAgICAgIG1heENvbnRlbnRMZW5ndGg6IDQgKiAxMDI0ICogMTAyNCAqIDEwMjRcbiAgICAgICAgfVxuICAgICAgICBpZiAoYXV0aFR5cGUgPT09ICdkaWdlc3QnKSB7XG4gICAgICAgICAgY2xpZW50T3B0aW9ucy5hdXRoVHlwZSA9IEF1dGhUeXBlLkRpZ2VzdFxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNsaWVudDogV2ViREFWQ2xpZW50ID0gY3JlYXRlQ2xpZW50KHdlYmRhdnBsaXN0T3B0aW9ucy5ob3N0LCBjbGllbnRPcHRpb25zKVxuICAgICAgICBjb25zdCBmdWxsVXBsb2FkRGlyUGF0aCA9IHBhdGguZGlybmFtZShgJHt1cGxvYWRQYXRofSR7aW1nLmZpbGVOYW1lfWApXG4gICAgICAgIGNvbnN0IHBhdGhUb0NyZWF0ZSA9IGZ1bGxVcGxvYWREaXJQYXRoID09PSAnLycgPyAnJyA6IGZ1bGxVcGxvYWREaXJQYXRoXG4gICAgICAgIGlmIChwYXRoVG9DcmVhdGUpIHtcbiAgICAgICAgICBhd2FpdCBjbGllbnQuY3JlYXRlRGlyZWN0b3J5KHBhdGhUb0NyZWF0ZSwgeyByZWN1cnNpdmU6IHRydWUgfSlcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZXMgPSBhd2FpdCBjbGllbnQucHV0RmlsZUNvbnRlbnRzKGAke3VwbG9hZFBhdGh9JHtpbWcuZmlsZU5hbWV9YC5yZXBsYWNlKC9eXFwvK3xcXC8rJC9nLCAnJyksIGltYWdlLCB7XG4gICAgICAgICAgb3ZlcndyaXRlOiB0cnVlXG4gICAgICAgIH0pXG4gICAgICAgIGlmIChyZXMpIHtcbiAgICAgICAgICBjb25zdCBpbWdUZW1wUGF0aCA9IHBhdGguam9pbihjdHguYmFzZURpciwgJ2ltZ1RlbXAnLCAnd2ViZGF2cGxpc3QnKVxuICAgICAgICAgIGNvbnN0IGltZ1RlbXBGaWxlUGF0aCA9IHBhdGguam9pbihpbWdUZW1wUGF0aCwgaW1nLmZpbGVOYW1lKVxuICAgICAgICAgIGVuc3VyZURpclN5bmMocGF0aC5kaXJuYW1lKGltZ1RlbXBGaWxlUGF0aCkpXG4gICAgICAgICAgZnMud3JpdGVGaWxlU3luYyhpbWdUZW1wRmlsZVBhdGgsIGltYWdlKVxuICAgICAgICAgIGRlbGV0ZSBpbWcuYmFzZTY0SW1hZ2VcbiAgICAgICAgICBkZWxldGUgaW1nLmJ1ZmZlclxuICAgICAgICAgIGNvbnN0IGJhc2VVcmwgPSBjdXN0b21VcmwgfHwgd2ViZGF2cGxpc3RPcHRpb25zLmhvc3RcbiAgICAgICAgICBpZiAod2ViZGF2cGxpc3RPcHRpb25zLndlYnBhdGgpIHtcbiAgICAgICAgICAgIGltZy5pbWdVcmwgPSBgJHtiYXNlVXJsfS8ke2VuY29kZVBhdGgoYCR7d2VicGF0aH0ke2ltZy5maWxlTmFtZX1gKS5yZXBsYWNlKC9eXFwvKy9nLCAnJyl9JHtzdWZmaXh9YFxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpbWcuaW1nVXJsID0gYCR7YmFzZVVybH0vJHtlbmNvZGVQYXRoKGAke3VwbG9hZFBhdGh9JHtpbWcuZmlsZU5hbWV9YCkucmVwbGFjZSgvXlxcLysvZywgJycpfSR7c3VmZml4fWBcbiAgICAgICAgICB9XG4gICAgICAgICAgaW1nLmdhbGxlcnlQYXRoID0gYGh0dHA6Ly9sb2NhbGhvc3Q6MzY2OTkvd2ViZGF2cGxpc3QvJHtlbmNvZGVVUklDb21wb25lbnQoaW1nLmZpbGVOYW1lKX1gXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVcGxvYWQgZmFpbGVkJylcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gY3R4XG4gIH0gY2F0Y2ggKGVycjogYW55KSB7XG4gICAgY3R4LmVtaXQoSUJ1aWxkSW5FdmVudC5OT1RJRklDQVRJT04sIHtcbiAgICAgIHRpdGxlOiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdVUExPQURfRkFJTEVEJyksXG4gICAgICBib2R5OiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdDSEVDS19TRVRUSU5HUycpXG4gICAgfSlcbiAgICB0aHJvdyBlcnJcbiAgfVxufVxuXG5jb25zdCBjb25maWcgPSAoY3R4OiBJUGljR28pOiBJUGx1Z2luQ29uZmlnW10gPT4ge1xuICBjb25zdCB1c2VyQ29uZmlnID0gY3R4LmdldENvbmZpZzxJV2ViZGF2UGxpc3RDb25maWc+KCdwaWNCZWQud2ViZGF2cGxpc3QnKSB8fCB7fVxuICBjb25zdCBjb25maWc6IElQbHVnaW5Db25maWdbXSA9IFtcbiAgICB7XG4gICAgICBuYW1lOiAnaG9zdCcsXG4gICAgICB0eXBlOiAnaW5wdXQnLFxuICAgICAgZ2V0IGFsaWFzKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1dFQkRBVlBMSVNUX0hPU1QnKVxuICAgICAgfSxcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuaG9zdCB8fCAnJyxcbiAgICAgIHJlcXVpcmVkOiB0cnVlXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAnc3NsRW5hYmxlZCcsXG4gICAgICB0eXBlOiAnY29uZmlybScsXG4gICAgICBnZXQgcHJlZml4KCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1dFQkRBVlBMSVNUX1NTTEVOQUJMRUQnKVxuICAgICAgfSxcbiAgICAgIGdldCBhbGlhcygpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9XRUJEQVZQTElTVF9TU0xFTkFCTEVEJylcbiAgICAgIH0sXG4gICAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLnNzbEVuYWJsZWQgPz8gZmFsc2UsXG4gICAgICBnZXQgbWVzc2FnZSgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9XRUJEQVZQTElTVF9NRVNTQUdFX1NTTEVOQUJMRUQnKVxuICAgICAgfVxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ3VzZXJuYW1lJyxcbiAgICAgIHR5cGU6ICdpbnB1dCcsXG4gICAgICBnZXQgcHJlZml4KCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1dFQkRBVlBMSVNUX1VTRVJOQU1FJylcbiAgICAgIH0sXG4gICAgICBnZXQgYWxpYXMoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfV0VCREFWUExJU1RfVVNFUk5BTUUnKVxuICAgICAgfSxcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcudXNlcm5hbWUgfHwgJycsXG4gICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgIGdldCBtZXNzYWdlKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1dFQkRBVlBMSVNUX01FU1NBR0VfVVNFUk5BTUUnKVxuICAgICAgfVxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ3Bhc3N3b3JkJyxcbiAgICAgIHR5cGU6ICdpbnB1dCcsXG4gICAgICBnZXQgcHJlZml4KCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1dFQkRBVlBMSVNUX1BBU1NXT1JEJylcbiAgICAgIH0sXG4gICAgICBnZXQgYWxpYXMoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfV0VCREFWUExJU1RfUEFTU1dPUkQnKVxuICAgICAgfSxcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcucGFzc3dvcmQgfHwgJycsXG4gICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgIGdldCBtZXNzYWdlKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1dFQkRBVlBMSVNUX01FU1NBR0VfUEFTU1dPUkQnKVxuICAgICAgfVxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ3BhdGgnLFxuICAgICAgdHlwZTogJ2lucHV0JyxcbiAgICAgIGdldCBwcmVmaXgoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfV0VCREFWUExJU1RfUEFUSCcpXG4gICAgICB9LFxuICAgICAgZ2V0IGFsaWFzKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1dFQkRBVlBMSVNUX1BBVEgnKVxuICAgICAgfSxcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcucGF0aCB8fCAnJyxcbiAgICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICAgIGdldCBtZXNzYWdlKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1dFQkRBVlBMSVNUX01FU1NBR0VfUEFUSCcpXG4gICAgICB9XG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAnd2VicGF0aCcsXG4gICAgICB0eXBlOiAnaW5wdXQnLFxuICAgICAgZ2V0IHByZWZpeCgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9XRUJEQVZQTElTVF9XRUJTSVRFX1BBVEgnKVxuICAgICAgfSxcbiAgICAgIGdldCBhbGlhcygpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9XRUJEQVZQTElTVF9XRUJTSVRFX1BBVEgnKVxuICAgICAgfSxcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcucGF0aCB8fCAnJyxcbiAgICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICAgIGdldCBtZXNzYWdlKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1dFQkRBVlBMSVNUX01FU1NBR0VfV0VCU0lURV9QQVRIJylcbiAgICAgIH1cbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdjdXN0b21VcmwnLFxuICAgICAgdHlwZTogJ2lucHV0JyxcbiAgICAgIGdldCBwcmVmaXgoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfV0VCREFWUExJU1RfQ1VTVE9NVVJMJylcbiAgICAgIH0sXG4gICAgICBnZXQgYWxpYXMoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfV0VCREFWUExJU1RfQ1VTVE9NVVJMJylcbiAgICAgIH0sXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLmN1c3RvbVVybCB8fCAnJyxcbiAgICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICAgIGdldCBtZXNzYWdlKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1dFQkRBVlBMSVNUX01FU1NBR0VfQ1VTVE9NVVJMJylcbiAgICAgIH1cbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdhdXRoVHlwZScsXG4gICAgICB0eXBlOiAnbGlzdCcsXG4gICAgICBnZXQgcHJlZml4KCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1dFQkRBVlBMSVNUX0FVVEhUWVBFJylcbiAgICAgIH0sXG4gICAgICBnZXQgYWxpYXMoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfV0VCREFWUExJU1RfQVVUSFRZUEUnKVxuICAgICAgfSxcbiAgICAgIGNob2ljZXM6IFsnYmFzaWMnLCAnZGlnZXN0J10sXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLmF1dGhUeXBlIHx8ICdiYXNpYycsXG4gICAgICByZXF1aXJlZDogZmFsc2VcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdvcHRpb25zJyxcbiAgICAgIHR5cGU6ICdpbnB1dCcsXG4gICAgICBnZXQgcHJlZml4KCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1dFQkRBVlBMSVNUX09QVElPTlMnKVxuICAgICAgfSxcbiAgICAgIGdldCBhbGlhcygpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9XRUJEQVZQTElTVF9PUFRJT05TJylcbiAgICAgIH0sXG4gICAgICBnZXQgbWVzc2FnZSgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9XRUJEQVZQTElTVF9NRVNTQUdFX09QVElPTlMnKVxuICAgICAgfSxcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcub3B0aW9ucyB8fCAnJyxcbiAgICAgIHJlcXVpcmVkOiBmYWxzZVxuICAgIH1cbiAgXVxuICByZXR1cm4gY29uZmlnXG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHJlZ2lzdGVyKGN0eDogSVBpY0dvKTogdm9pZCB7XG4gIGN0eC5oZWxwZXIudXBsb2FkZXIucmVnaXN0ZXIoYnVpbGRJblVwbG9hZGVyTmFtZXMud2ViZGF2cGxpc3QsIHtcbiAgICBnZXQgbmFtZSgpIHtcbiAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfV0VCREFWUExJU1QnKVxuICAgIH0sXG4gICAgaGFuZGxlLFxuICAgIGNvbmZpZ1xuICB9KVxufVxuIiwiaW1wb3J0IHsgSVBpY0dvIH0gZnJvbSAnLi4vLi4vdHlwZXMnXG5pbXBvcnQgYWR2YW5jZWRwbGlzdFVwbG9hZGVyIGZyb20gJy4vYWR2YW5jZWRwbGlzdCdcbmltcG9ydCBhbGlzdFVwbG9hZGVyIGZyb20gJy4vYWxpc3QnXG5pbXBvcnQgYWxpWXVuVXBsb2FkZXIgZnJvbSAnLi9hbGl5dW4nXG5pbXBvcnQgYXdzczNwbGlzdFVwbG9hZGVyIGZyb20gJy4vYXdzczNwbGlzdCdcbmltcG9ydCBnaXRodWJVcGxvYWRlciBmcm9tICcuL2dpdGh1YidcbmltcG9ydCBpbWd1clVwbG9hZGVyIGZyb20gJy4vaW1ndXInXG5pbXBvcnQgbG9jYWxVcGxvYWRlciBmcm9tICcuL2xvY2FsJ1xuaW1wb3J0IGxza3lVcGxvYWRlciBmcm9tICcuL2xza3knXG5pbXBvcnQgcGljbGlzdFVwbG9hZGVyIGZyb20gJy4vcGljbGlzdCdcbmltcG9ydCBxaW5pdVVwbG9hZGVyIGZyb20gJy4vcWluaXUnXG5pbXBvcnQgc2Z0cFVwbG9hZGVyIGZyb20gJy4vc2Z0cCdcbmltcG9ydCBzbW1zVXBsb2FkZXIgZnJvbSAnLi9zbW1zJ1xuaW1wb3J0IHRjWXVuVXBsb2FkZXIgZnJvbSAnLi90Y3l1bidcbmltcG9ydCB1cFl1blVwbG9hZGVyIGZyb20gJy4vdXB5dW4nXG5pbXBvcnQgd2ViZGF2cGxpc3RVcGxvYWRlciBmcm9tICcuL3dlYmRhdidcblxuY29uc3QgYnVpbGRJblVwbG9hZGVycyA9ICgpID0+IHtcbiAgcmV0dXJuIHtcbiAgICByZWdpc3RlcihjdHg6IElQaWNHbykge1xuICAgICAgYWR2YW5jZWRwbGlzdFVwbG9hZGVyKGN0eClcbiAgICAgIGFsaXN0VXBsb2FkZXIoY3R4KVxuICAgICAgYWxpWXVuVXBsb2FkZXIoY3R4KVxuICAgICAgYXdzczNwbGlzdFVwbG9hZGVyKGN0eClcbiAgICAgIGdpdGh1YlVwbG9hZGVyKGN0eClcbiAgICAgIGltZ3VyVXBsb2FkZXIoY3R4KVxuICAgICAgbG9jYWxVcGxvYWRlcihjdHgpXG4gICAgICBsc2t5VXBsb2FkZXIoY3R4KVxuICAgICAgcGljbGlzdFVwbG9hZGVyKGN0eClcbiAgICAgIHFpbml1VXBsb2FkZXIoY3R4KVxuICAgICAgc2Z0cFVwbG9hZGVyKGN0eClcbiAgICAgIHNtbXNVcGxvYWRlcihjdHgpXG4gICAgICB0Y1l1blVwbG9hZGVyKGN0eClcbiAgICAgIHVwWXVuVXBsb2FkZXIoY3R4KVxuICAgICAgd2ViZGF2cGxpc3RVcGxvYWRlcihjdHgpXG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IGJ1aWxkSW5VcGxvYWRlcnNcbiIsImltcG9ydCBkYXlqcyBmcm9tICdkYXlqcydcblxuaW1wb3J0IHsgaXNVcmwsIGdldEltYWdlU2l6ZSwgZ2V0RlNGaWxlLCBnZXRVUkxGaWxlIH0gZnJvbSAnLi4vLi4vdXRpbHMvY29tbW9uJ1xuaW1wb3J0IHsgSVBpY0dvLCBJUGF0aFRyYW5zZm9ybWVkSW1nSW5mbywgSUltZ0luZm8sIElJbWdTaXplIH0gZnJvbSAnLi4vLi4vdHlwZXMnXG5cbmNvbnN0IGhhbmRsZSA9IGFzeW5jIChjdHg6IElQaWNHbyk6IFByb21pc2U8SVBpY0dvPiA9PiB7XG4gIGNvbnN0IHJlc3VsdHM6IElJbWdJbmZvW10gPSBjdHgub3V0cHV0XG4gIGF3YWl0IFByb21pc2UuYWxsKFxuICAgIGN0eC5pbnB1dC5tYXAoYXN5bmMgKGl0ZW06IHN0cmluZyB8IEJ1ZmZlciwgaW5kZXg6IG51bWJlcikgPT4ge1xuICAgICAgbGV0IGluZm86IElQYXRoVHJhbnNmb3JtZWRJbWdJbmZvXG4gICAgICBpZiAoQnVmZmVyLmlzQnVmZmVyKGl0ZW0pKSB7XG4gICAgICAgIGluZm8gPSB7XG4gICAgICAgICAgc3VjY2VzczogdHJ1ZSxcbiAgICAgICAgICBidWZmZXI6IGl0ZW0sXG4gICAgICAgICAgZmlsZU5hbWU6ICcnLFxuICAgICAgICAgIGV4dG5hbWU6ICcnXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoaXNVcmwoaXRlbSkpIHtcbiAgICAgICAgaW5mbyA9IGF3YWl0IGdldFVSTEZpbGUoaXRlbSwgY3R4KVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaW5mbyA9IGF3YWl0IGdldEZTRmlsZShpdGVtKVxuICAgICAgfVxuICAgICAgaWYgKGluZm8uc3VjY2VzcyAmJiBpbmZvLmJ1ZmZlcikge1xuICAgICAgICBjb25zdCBpbWdTaXplID0gZ2V0SW1nU2l6ZShjdHgsIGluZm8uYnVmZmVyLCBpdGVtKVxuICAgICAgICBjb25zdCBleHRuYW1lID0gaW5mby5leHRuYW1lIHx8IGltZ1NpemUuZXh0bmFtZSB8fCAnLnBuZydcbiAgICAgICAgcmVzdWx0c1tpbmRleF0gPSB7XG4gICAgICAgICAgYnVmZmVyOiBpbmZvLmJ1ZmZlcixcbiAgICAgICAgICBmaWxlTmFtZTogaW5mby5maWxlTmFtZSB8fCBgJHtkYXlqcygpLmZvcm1hdCgnWVlZWU1NRERISG1tc3NTU1MnKX0ke2V4dG5hbWV9YCxcbiAgICAgICAgICB3aWR0aDogaW1nU2l6ZS53aWR0aCxcbiAgICAgICAgICBoZWlnaHQ6IGltZ1NpemUuaGVpZ2h0LFxuICAgICAgICAgIGV4dG5hbWU6IGluZm8uZXh0bmFtZVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjdHgubG9nLmVycm9yKGluZm8ucmVhc29uKVxuICAgICAgfVxuICAgIH0pXG4gIClcbiAgLy8gcmVtb3ZlIGVtcHR5IGl0ZW1cbiAgY3R4Lm91dHB1dCA9IHJlc3VsdHMuZmlsdGVyKGl0ZW0gPT4gaXRlbSlcbiAgcmV0dXJuIGN0eFxufVxuXG5jb25zdCBnZXRJbWdTaXplID0gKGN0eDogSVBpY0dvLCBmaWxlOiBCdWZmZXIsIHBhdGg6IHN0cmluZyB8IEJ1ZmZlcik6IElJbWdTaXplID0+IHtcbiAgY29uc3QgaW1hZ2VTaXplID0gZ2V0SW1hZ2VTaXplKGZpbGUpXG4gIGlmICghaW1hZ2VTaXplLnJlYWwpIHtcbiAgICBpZiAodHlwZW9mIHBhdGggPT09ICdzdHJpbmcnKSB7XG4gICAgICBjdHgubG9nLndhcm4oYGNhbid0IGdldCAke3BhdGh9J3MgaW1hZ2Ugc2l6ZWApXG4gICAgfSBlbHNlIHtcbiAgICAgIGN0eC5sb2cud2FybihcImNhbid0IGdldCBpbWFnZSBzaXplXCIpXG4gICAgfVxuICAgIGN0eC5sb2cud2FybignZmFsbGJhY2sgdG8gMjAwICogMjAwJylcbiAgfVxuICByZXR1cm4gaW1hZ2VTaXplXG59XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgaGFuZGxlXG59XG4iLCJpbXBvcnQgeyBJUGljR28gfSBmcm9tICcuLi8uLi90eXBlcydcblxuY29uc3QgaGFuZGxlID0gYXN5bmMgKGN0eDogSVBpY0dvKTogUHJvbWlzZTxJUGljR28+ID0+IHtcbiAgY3R4Lm91dHB1dC5wdXNoKC4uLmN0eC5pbnB1dClcbiAgcmV0dXJuIGN0eFxufVxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIGhhbmRsZVxufVxuIiwiZXhwb3J0IGNvbnN0IENMSVBCT0FSRF9JTUFHRV9GT0xERVIgPSAncGljbGlzdC1jbGlwYm9hcmQtaW1hZ2VzJ1xuIiwiaW1wb3J0IHsgc3Bhd24gfSBmcm9tICdjaGlsZF9wcm9jZXNzJ1xuaW1wb3J0IGRheWpzIGZyb20gJ2RheWpzJ1xuaW1wb3J0IGZzLCB7IGVuc3VyZURpclN5bmMgfSBmcm9tICdmcy1leHRyYSdcbmltcG9ydCBpc1dzbCBmcm9tICdpcy13c2wnXG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJ1xuaW1wb3J0IG9zIGZyb20gJ29zJ1xuXG5pbXBvcnQgbWFjQ2xpcGJvYXJkU2NyaXB0IGZyb20gJy4vY2xpcGJvYXJkL21hYy5hcHBsZXNjcmlwdCdcbmltcG9ydCB3aW5kb3dzQ2xpcGJvYXJkU2NyaXB0IGZyb20gJy4vY2xpcGJvYXJkL3dpbmRvd3MucHMxJ1xuaW1wb3J0IHdpbmRvd3MxMENsaXBib2FyZFNjcmlwdCBmcm9tICcuL2NsaXBib2FyZC93aW5kb3dzMTAucHMxJ1xuaW1wb3J0IGxpbnV4Q2xpcGJvYXJkU2NyaXB0IGZyb20gJy4vY2xpcGJvYXJkL2xpbnV4LnNoJ1xuaW1wb3J0IHdzbENsaXBib2FyZFNjcmlwdCBmcm9tICcuL2NsaXBib2FyZC93c2wuc2gnXG5pbXBvcnQgeyBJQnVpbGRJbkV2ZW50IH0gZnJvbSAnLi9lbnVtJ1xuaW1wb3J0IHsgSVBpY0dvLCBJQ2xpcGJvYXJkSW1hZ2UgfSBmcm9tICcuLi90eXBlcydcbmltcG9ydCB7IENMSVBCT0FSRF9JTUFHRV9GT0xERVIgfSBmcm9tICcuL3N0YXRpYydcblxuZXhwb3J0IHR5cGUgUGxhdGZvcm0gPSAnZGFyd2luJyB8ICd3aW4zMicgfCAnd2luMTAnIHwgJ2xpbnV4JyB8ICd3c2wnXG5cbmNvbnN0IGdldEN1cnJlbnRQbGF0Zm9ybSA9ICgpOiBQbGF0Zm9ybSA9PiB7XG4gIGNvbnN0IHBsYXRmb3JtID0gcHJvY2Vzcy5wbGF0Zm9ybVxuICBpZiAoaXNXc2wpIHJldHVybiAnd3NsJ1xuICBpZiAocGxhdGZvcm0gPT09ICd3aW4zMicpIHtcbiAgICByZXR1cm4gb3MucmVsZWFzZSgpLnNwbGl0KCcuJylbMF0gPT09ICcxMCcgPyAnd2luMTAnIDogJ3dpbjMyJ1xuICB9IGVsc2UgaWYgKHBsYXRmb3JtID09PSAnZGFyd2luJykge1xuICAgIHJldHVybiAnZGFyd2luJ1xuICB9IGVsc2Uge1xuICAgIHJldHVybiAnbGludXgnXG4gIH1cbn1cblxuY29uc3QgcGxhdGZvcm0yU2NyaXB0Q29udGVudDoge1xuICBba2V5IGluIFBsYXRmb3JtXTogc3RyaW5nXG59ID0ge1xuICBkYXJ3aW46IG1hY0NsaXBib2FyZFNjcmlwdCxcbiAgd2luMzI6IHdpbmRvd3NDbGlwYm9hcmRTY3JpcHQsXG4gIHdpbjEwOiB3aW5kb3dzMTBDbGlwYm9hcmRTY3JpcHQsXG4gIGxpbnV4OiBsaW51eENsaXBib2FyZFNjcmlwdCxcbiAgd3NsOiB3c2xDbGlwYm9hcmRTY3JpcHRcbn1cblxuLyoqXG4gKiBwb3dlcnNoZWxsIHdpbGwgcmVwb3J0IGVycm9yIGlmIGZpbGUgZG9lcyBub3QgaGF2ZSBhICcucHMxJyBleHRlbnNpb24sXG4gKiBzbyB3ZSBzaG91bGQga2VlcCB0aGUgZXh0ZW5zaW9uIG5hbWUgY29uc2lzdGVudCB3aXRoIGNvcnJlc3BvbmRpbmcgc2hlbGxcbiAqL1xuY29uc3QgcGxhdGZvcm0yU2NyaXB0RmlsZW5hbWU6IHtcbiAgW2tleSBpbiBQbGF0Zm9ybV06IHN0cmluZ1xufSA9IHtcbiAgZGFyd2luOiAnbWFjLmFwcGxlc2NyaXB0JyxcbiAgd2luMzI6ICd3aW5kb3dzLnBzMScsXG4gIHdpbjEwOiAnd2luZG93czEwLnBzMScsXG4gIGxpbnV4OiAnbGludXguc2gnLFxuICB3c2w6ICd3c2wuc2gnXG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUltYWdlRm9sZGVyKGN0eDogSVBpY0dvKTogdm9pZCB7XG4gIGNvbnN0IGltYWdlUGF0aCA9IHBhdGguam9pbihjdHguYmFzZURpciwgQ0xJUEJPQVJEX0lNQUdFX0ZPTERFUilcbiAgZW5zdXJlRGlyU3luYyhpbWFnZVBhdGgpXG59XG5cbi8vIFRoYW5rcyB0byB2cy1waWNnbzogaHR0cHM6Ly9naXRodWIuY29tL1NwYWRlcy1TL3ZzLXBpY2dvL2Jsb2IvbWFzdGVyL3NyYy9leHRlbnNpb24udHNcbmNvbnN0IGdldENsaXBib2FyZEltYWdlID0gYXN5bmMgKGN0eDogSVBpY0dvKTogUHJvbWlzZTxJQ2xpcGJvYXJkSW1hZ2U+ID0+IHtcbiAgY3JlYXRlSW1hZ2VGb2xkZXIoY3R4KVxuICAvLyBhZGQgYW4gY2xpcGJvYXJkIGltYWdlIGZvbGRlciB0byBjb250cm9sIHRoZSBpbWFnZSBjYWNoZSBmaWxlXG4gIGNvbnN0IGltYWdlUGF0aCA9IHBhdGguam9pbihjdHguYmFzZURpciwgQ0xJUEJPQVJEX0lNQUdFX0ZPTERFUiwgYCR7ZGF5anMoKS5mb3JtYXQoJ1lZWVlNTURESEhtbXNzU1NTJyl9LnBuZ2ApXG4gIHJldHVybiBhd2FpdCBuZXcgUHJvbWlzZTxJQ2xpcGJvYXJkSW1hZ2U+KChyZXNvbHZlOiBhbnksIHJlamVjdDogYW55KTogdm9pZCA9PiB7XG4gICAgY29uc3QgcGxhdGZvcm0gPSBnZXRDdXJyZW50UGxhdGZvcm0oKVxuICAgIGNvbnN0IHNjcmlwdFBhdGggPSBwYXRoLmpvaW4oY3R4LmJhc2VEaXIsIHBsYXRmb3JtMlNjcmlwdEZpbGVuYW1lW3BsYXRmb3JtXSlcbiAgICAvLyBJZiB0aGUgc2NyaXB0IGRvZXMgbm90IGV4aXN0IHlldCwgd2UgbmVlZCB0byB3cml0ZSB0aGUgY29udGVudCB0byB0aGUgc2NyaXB0IGZpbGVcbiAgICBpZiAoIWZzLmV4aXN0c1N5bmMoc2NyaXB0UGF0aCkpIHtcbiAgICAgIGZzLndyaXRlRmlsZVN5bmMoc2NyaXB0UGF0aCwgcGxhdGZvcm0yU2NyaXB0Q29udGVudFtwbGF0Zm9ybV0sICd1dGY4JylcbiAgICB9XG4gICAgbGV0IGV4ZWN1dGlvblxuICAgIGlmIChwbGF0Zm9ybSA9PT0gJ2RhcndpbicpIHtcbiAgICAgIGV4ZWN1dGlvbiA9IHNwYXduKCdvc2FzY3JpcHQnLCBbc2NyaXB0UGF0aCwgaW1hZ2VQYXRoXSlcbiAgICB9IGVsc2UgaWYgKHBsYXRmb3JtID09PSAnd2luMzInIHx8IHBsYXRmb3JtID09PSAnd2luMTAnKSB7XG4gICAgICBleGVjdXRpb24gPSBzcGF3bigncG93ZXJzaGVsbCcsIFtcbiAgICAgICAgJy1ub3Byb2ZpbGUnLFxuICAgICAgICAnLW5vbmludGVyYWN0aXZlJyxcbiAgICAgICAgJy1ub2xvZ28nLFxuICAgICAgICAnLXN0YScsXG4gICAgICAgICctZXhlY3V0aW9ucG9saWN5JyxcbiAgICAgICAgJ3VucmVzdHJpY3RlZCcsXG4gICAgICAgIC8vIGZpeCB3aW5kb3dzIDEwIG5hdGl2ZSBjbWQgY3Jhc2ggYnVnIHdoZW4gXCJwaWNnbyB1cGxvYWRcIlxuICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vUGljR28vUGljR28tQ29yZS9pc3N1ZXMvMzJcbiAgICAgICAgLy8gJy13aW5kb3dzdHlsZScsJ2hpZGRlbicsXG4gICAgICAgIC8vICctbm9leGl0JyxcbiAgICAgICAgJy1maWxlJyxcbiAgICAgICAgc2NyaXB0UGF0aCxcbiAgICAgICAgaW1hZ2VQYXRoXG4gICAgICBdKVxuICAgIH0gZWxzZSB7XG4gICAgICBleGVjdXRpb24gPSBzcGF3bignc2gnLCBbc2NyaXB0UGF0aCwgaW1hZ2VQYXRoXSlcbiAgICB9XG5cbiAgICBleGVjdXRpb24uc3Rkb3V0Lm9uKCdkYXRhJywgKGRhdGE6IEJ1ZmZlcikgPT4ge1xuICAgICAgaWYgKHBsYXRmb3JtID09PSAnbGludXgnKSB7XG4gICAgICAgIGlmIChkYXRhLnRvU3RyaW5nKCkudHJpbSgpID09PSAnbm8geGNsaXAgb3Igd2wtY2xpcGJvYXJkJykge1xuICAgICAgICAgIGN0eC5lbWl0KElCdWlsZEluRXZlbnQuTk9USUZJQ0FUSU9OLCB7XG4gICAgICAgICAgICB0aXRsZTogJ3hjbGlwIG9yIHdsLWNsaXBib2FyZCBub3QgZm91bmQnLFxuICAgICAgICAgICAgYm9keTogJ1BsZWFzZSBpbnN0YWxsIHhjbGlwKGZvciB4MTEpIG9yIHdsLWNsaXBib2FyZChmb3Igd2F5bGFuZCkgYmVmb3JlIHJ1biBwaWNnbydcbiAgICAgICAgICB9KVxuICAgICAgICAgIHJldHVybiByZWplY3QobmV3IEVycm9yKCdQbGVhc2UgaW5zdGFsbCB4Y2xpcChmb3IgeDExKSBvciB3bC1jbGlwYm9hcmQoZm9yIHdheWxhbmQpIGJlZm9yZSBydW4gcGljZ28nKSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgY29uc3QgaW1nUGF0aCA9IGRhdGEudG9TdHJpbmcoKS50cmltKClcblxuICAgICAgLy8gaWYgdGhlIGZpbGVQYXRoIGlzIHRoZSByZWFsIGZpbGUgaW4gc3lzdGVtXG4gICAgICAvLyB3ZSBzaG91bGQga2VlcCBpdCBpbnN0ZWFkIG9mIHJlbW92aW5nXG4gICAgICBsZXQgc2hvdWxkS2VlcEFmdGVyVXBsb2FkaW5nID0gZmFsc2VcblxuICAgICAgLy8gaW4gbWFjT1MgaWYgeW91ciBjb3B5IHRoZSBmaWxlIGluIHN5c3RlbSwgaXQncyBiYXNlbmFtZSB3aWxsIG5vdCBlcXVhbCB0byBvdXIgZGVmYXVsdCBiYXNlbmFtZVxuICAgICAgaWYgKHBhdGguYmFzZW5hbWUoaW1nUGF0aCkgIT09IHBhdGguYmFzZW5hbWUoaW1hZ2VQYXRoKSkge1xuICAgICAgICAvLyBpZiB0aGUgcGF0aCBpcyBub3QgZ2VuZXJhdGUgYnkgcGljZ29cbiAgICAgICAgLy8gYnV0IHRoZSBwYXRoIGV4aXN0cywgd2Ugc2hvdWxkIGtlZXAgaXRcbiAgICAgICAgaWYgKGZzLmV4aXN0c1N5bmMoaW1nUGF0aCkpIHtcbiAgICAgICAgICBzaG91bGRLZWVwQWZ0ZXJVcGxvYWRpbmcgPSB0cnVlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIC8vIGlmIHRoZSBpbWdQYXRoIGlzIGludmFsaWRcbiAgICAgIGlmIChpbWdQYXRoICE9PSAnbm8gaW1hZ2UnICYmICFmcy5leGlzdHNTeW5jKGltZ1BhdGgpKSB7XG4gICAgICAgIHJldHVybiByZWplY3QobmV3IEVycm9yKGBDYW4ndCBmaW5kICR7aW1nUGF0aH1gKSlcbiAgICAgIH1cblxuICAgICAgcmVzb2x2ZSh7XG4gICAgICAgIGltZ1BhdGgsXG4gICAgICAgIHNob3VsZEtlZXBBZnRlclVwbG9hZGluZ1xuICAgICAgfSlcbiAgICB9KVxuICB9KVxufVxuXG5leHBvcnQgZGVmYXVsdCBnZXRDbGlwYm9hcmRJbWFnZVxuIiwiaW1wb3J0IHsgSUNvbmZpZywgSVBpY0dvIH0gZnJvbSAnLi4vdHlwZXMnXG5pbXBvcnQgeyBKU09OU3RvcmUgfSBmcm9tICdAcGljZ28vc3RvcmUnXG5pbXBvcnQgeyBJSlNPTiB9IGZyb20gJ0BwaWNnby9zdG9yZS9kaXN0L3R5cGVzJ1xuXG5jbGFzcyBEQiB7XG4gIHByaXZhdGUgcmVhZG9ubHkgY3R4OiBJUGljR29cbiAgcHJpdmF0ZSByZWFkb25seSBkYjogSlNPTlN0b3JlXG4gIGNvbnN0cnVjdG9yKGN0eDogSVBpY0dvKSB7XG4gICAgdGhpcy5jdHggPSBjdHhcbiAgICB0aGlzLmRiID0gbmV3IEpTT05TdG9yZSh0aGlzLmN0eC5jb25maWdQYXRoKVxuXG4gICAgaWYgKCF0aGlzLmRiLmhhcygncGljQmVkJykpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHRoaXMuZGIuc2V0KCdwaWNCZWQnLCB7XG4gICAgICAgICAgdXBsb2FkZXI6ICdzbW1zJyxcbiAgICAgICAgICBjdXJyZW50OiAnc21tcycsXG4gICAgICAgICAgc21tczoge1xuICAgICAgICAgICAgdG9rZW46ICcnXG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgfSBjYXRjaCAoZTogYW55KSB7XG4gICAgICAgIHRoaXMuY3R4LmxvZy5lcnJvcihlKVxuICAgICAgICB0aHJvdyBlXG4gICAgICB9XG4gICAgfVxuICAgIGlmICghdGhpcy5kYi5oYXMoJ3BpY2dvUGx1Z2lucycpKSB7XG4gICAgICB0cnkge1xuICAgICAgICB0aGlzLmRiLnNldCgncGljZ29QbHVnaW5zJywge30pXG4gICAgICB9IGNhdGNoIChlOiBhbnkpIHtcbiAgICAgICAgdGhpcy5jdHgubG9nLmVycm9yKGUpXG4gICAgICAgIHRocm93IGVcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZWFkKGZsdXNoPzogYm9vbGVhbik6IElKU09OIHtcbiAgICByZXR1cm4gdGhpcy5kYi5yZWFkKGZsdXNoKVxuICB9XG5cbiAgZ2V0KGtleTogc3RyaW5nID0gJycpOiBhbnkge1xuICAgIHRoaXMucmVhZCh0cnVlKVxuICAgIHJldHVybiB0aGlzLmRiLmdldChrZXkpXG4gIH1cblxuICBzZXQoa2V5OiBzdHJpbmcsIHZhbHVlOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLnJlYWQodHJ1ZSlcbiAgICB0aGlzLmRiLnNldChrZXksIHZhbHVlKVxuICB9XG5cbiAgaGFzKGtleTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgdGhpcy5yZWFkKHRydWUpXG4gICAgcmV0dXJuIHRoaXMuZGIuaGFzKGtleSlcbiAgfVxuXG4gIHVuc2V0KGtleTogc3RyaW5nLCB2YWx1ZTogYW55KTogYm9vbGVhbiB7XG4gICAgdGhpcy5yZWFkKHRydWUpXG4gICAgcmV0dXJuIHRoaXMuZGIudW5zZXQoa2V5LCB2YWx1ZSlcbiAgfVxuXG4gIHNhdmVDb25maWcoY29uZmlnOiBQYXJ0aWFsPElDb25maWc+KTogdm9pZCB7XG4gICAgT2JqZWN0LmtleXMoY29uZmlnKS5mb3JFYWNoKChuYW1lOiBzdHJpbmcpID0+IHtcbiAgICAgIHRoaXMuc2V0KG5hbWUsIGNvbmZpZ1tuYW1lXSlcbiAgICB9KVxuICB9XG5cbiAgcmVtb3ZlQ29uZmlnKGNvbmZpZzogSUNvbmZpZyk6IHZvaWQge1xuICAgIE9iamVjdC5rZXlzKGNvbmZpZykuZm9yRWFjaCgobmFtZTogc3RyaW5nKSA9PiB7XG4gICAgICB0aGlzLnVuc2V0KG5hbWUsIGNvbmZpZ1tuYW1lXSlcbiAgICB9KVxuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IERCXG4iLCIvKiBlc2xpbnQtZGlzYWJsZSBuby10ZW1wbGF0ZS1jdXJseS1pbi1zdHJpbmcgKi9cbmV4cG9ydCBjb25zdCBaSF9DTiA9IHtcbiAgVVBMT0FEX0ZBSUxFRDogJ+S4iuS8oOWksei0pScsXG4gIENIRUNLX1NFVFRJTkdTOiAn6K+35qOA5p+l5L2g55qE6YWN572u6aG55piv5ZCm5q2j56GuJyxcbiAgQ0hFQ0tfU0VUVElOR1NfQU5EX05FVFdPUks6ICfor7fmo4Dmn6XkvaDnmoTphY3nva7pobnku6Xlj4rnvZHnu5wnLFxuICBVUExPQURfRkFJTEVEX1JFQVNPTjogJ+mUmeivr+egge+8miR7Y29kZX3vvIzor7fmiZPlvIDmtY/op4jlmajnspjotLTlnLDlnYDmn6XnnIvnm7jlhbPljp/lm6AnLFxuICBTRVJWRVJfRVJST1I6ICfmnI3liqHnq6/lh7rplJnvvIzor7fph43or5UnLFxuICBBVVRIX0ZBSUxFRDogJ+iupOivgeWksei0pScsXG5cbiAgLy8gc21tc1xuICBQSUNCRURfU01NUzogJ1NNLk1TJyxcbiAgUElDQkVEX1NNTVNfVE9LRU46ICforr7lrppUb2tlbicsXG4gIFBJQ0JFRF9TTU1TX01FU1NBR0VfVE9LRU46ICfor7floavlhplUb2tlbicsXG4gIFBJQ0JFRF9TTU1TX0JBQ0tVUF9ET01BSU46ICflpIfnlKjkuIrkvKDln5/lkI0nLFxuICBQSUNCRURfU01NU19NRVNTQUdFX0JBQ0tVUF9ET01BSU46ICfkvovlpoIgc21tcy5hcHAnLFxuXG4gIC8vIGFkdmFuY2VkcGxpc3RcbiAgUElDQkVEX0FEVkFOQ0VEUExJU1Q6ICfpq5jnuqfoh6rlrprkuYknLFxuICBQSUNCRURfQURWQU5DRURQTElTVF9FTkRQT0lOVDogJ+iuvuWumuaOpeWPo+e9keWdgCcsXG4gIFBJQ0JFRF9BRFZBTkNFRFBMSVNUX01FU1NBR0VfRU5EUE9JTlQ6ICfkvovlpoLvvJpodHRwczovL2V4YW1wbGUuY29tL3VwbG9hZCcsXG4gIFBJQ0JFRF9BRFZBTkNFRFBMSVNUX01FVEhPRDogJ+iuvuWumuivt+axguaWueazlScsXG4gIFBJQ0JFRF9BRFZBTkNFRFBMSVNUX01FU1NBR0VfTUVUSE9EOiAn6K+36YCJ5oup6K+35rGC5pa55rOVJyxcbiAgUElDQkVEX0FEVkFOQ0VEUExJU1RfRk9STV9EQVRBX0tFWTogJ+iuvuWumuihqOWNleWPguaVsOWQjScsXG4gIFBJQ0JFRF9BRFZBTkNFRFBMSVNUX01FU1NBR0VfRk9STV9EQVRBX0tFWTogJ+S+i+Wmgu+8mmZpbGUnLFxuICBQSUNCRURfQURWQU5DRURQTElTVF9IRUFERVJTOiAn6K6+5a6a6K+35rGC5aS0JyxcbiAgUElDQkVEX0FEVkFOQ0VEUExJU1RfTUVTU0FHRV9IRUFERVJTOiAn5L6L5aaC77yae1wiQ29udGVudC1UeXBlXCI6IFwibXVsdGlwYXJ0L2Zvcm0tZGF0YVwifScsXG4gIFBJQ0JFRF9BRFZBTkNFRFBMSVNUX0JPRFk6ICforr7lrpror7fmsYLkvZMnLFxuICBQSUNCRURfQURWQU5DRURQTElTVF9NRVNTQUdFX0JPRFk6ICfkvovlpoLvvJp7XCJrZXlcIjogXCJ2YWx1ZVwifScsXG4gIFBJQ0JFRF9BRFZBTkNFRFBMSVNUX0NVU1RPTV9QUkVGSVg6ICforr7lrproh6rlrprkuYnliY3nvIAnLFxuICBQSUNCRURfQURWQU5DRURQTElTVF9NRVNTQUdFX0NVU1RPTV9QUkVGSVg6ICfkvovlpoLvvJpodHRwczovL2V4YW1wbGUuY29tLycsXG4gIFBJQ0JFRF9BRFZBTkNFRFBMSVNUX1JFU19EQVRBX1BBVEg6ICforr7lrprov5Tlm57mlbDmja5VUkzot6/lvoQnLFxuICBQSUNCRURfQURWQU5DRURQTElTVF9NRVNTQUdFX1JFU19EQVRBX1BBVEg6ICfkvovlpoLvvJpkYXRhLnVybCcsXG5cbiAgLy8gbG9jYWxcbiAgUElDQkVEX0xPQ0FMOiAn5pys5Zyw5LiK5LygJyxcbiAgUElDQkVEX0xPQ0FMX1BBVEg6ICforr7lrprot6/lvoQnLFxuICBQSUNCRURfTE9DQUxfTUVTU0FHRV9QQVRIOiAn5L6L5aaCIC91c3IvbG9jYWwvaW1hZ2VzLycsXG4gIFBJQ0JFRF9MT0NBTF9DVVNUT01VUkw6ICforr7lrproh6rlrprkuYnln5/lkI0nLFxuICBQSUNCRURfTE9DQUxfTUVTU0FHRV9DVVNUT01VUkw6ICfkvovlpoIgaHR0cHM6Ly90ZXN0LmNvbScsXG4gIFBJQ0JFRF9MT0NBTF9XRUJQQVRIOiAn6K6+5a6a572R56uZ6Lev5b6EJyxcbiAgUElDQkVEX0xPQ0FMX01FU1NBR0VfV0VCUEFUSDogJ+eUqOS6juaLvOaOpee9keWdgOi3r+W+hCcsXG5cbiAgLy8gYWxpc3RcbiAgUElDQkVEX0FMSVNUX1BMSVNUOiAnQUxpc3QnLFxuICBQSUNCRURfQUxJU1RfVVJMOiAn6K6+5a6aVVJMJyxcbiAgUElDQkVEX0FMSVNUX01FU1NBR0VfVVJMOiAn5L6L5aaC77yaaHR0cHM6Ly9hbGlzdC5leGFtcGxlLmNvbScsXG4gIFBJQ0JFRF9BTElTVF9UT0tFTjogJ+iuvuWumlRva2VuJyxcbiAgUElDQkVEX0FMSVNUX01FU1NBR0VfVE9LRU46ICfor7fovpPlhaVUb2tlbijkuI7nlKjmiLflkI0t5a+G56CB5LqM6YCJ5LiAKScsXG4gIFBJQ0JFRF9BTElTVF9VU0VSTkFNRTogJ+iuvuWumueUqOaIt+WQjScsXG4gIFBJQ0JFRF9BTElTVF9NRVNTQUdFX1VTRVJOQU1FOiAn6K+36L6T5YWl55So5oi35ZCNKOS4jlRva2Vu5LqM6YCJ5LiAKScsXG4gIFBJQ0JFRF9BTElTVF9QQVNTV09SRDogJ+iuvuWumuWvhueggScsXG4gIFBJQ0JFRF9BTElTVF9NRVNTQUdFX1BBU1NXT1JEOiAn6K+36L6T5YWl5a+G56CBJyxcbiAgUElDQkVEX0FMSVNUX1VQTE9BRF9QQVRIOiAn6K6+5a6a5LiK5Lyg6Lev5b6EJyxcbiAgUElDQkVEX0FMSVNUX01FU1NBR0VfVVBMT0FEX1BBVEg6ICfkvovlpoLvvJovdGVzdCcsXG4gIFBJQ0JFRF9BTElTVF9XRUJfUEFUSDogJ+iuvuWumue9keermei3r+W+hCcsXG4gIFBJQ0JFRF9BTElTVF9NRVNTQUdFX1dFQl9QQVRIOiAn55So5LqO5ou85o6l572R5Z2A6Lev5b6EJyxcbiAgUElDQkVEX0FMSVNUX0NVU1RPTVVSTDogJ+iuvuWumuiHquWumuS5ieWfn+WQjScsXG4gIFBJQ0JFRF9BTElTVF9NRVNTQUdFX0NVU1RPTVVSTDogJ+S+i+Wmgu+8mmh0dHBzOi8vdGVzdC5jb20nLFxuXG4gIC8vIEFsaS1jbG91ZFxuICBQSUNCRURfQUxJQ0xPVUQ6ICfpmL/ph4zkupFPU1MnLFxuICBQSUNCRURfQUxJQ0xPVURfQUNDRVNTS0VZSUQ6ICforr7lrpphY2Nlc3NLZXlJZCcsXG4gIFBJQ0JFRF9BTElDTE9VRF9BQ0NFU1NLRVlTRUNSRVQ6ICforr7lrpphY2Nlc3NLZXlTZWNyZXQnLFxuICBQSUNCRURfQUxJQ0xPVURfQlVDS0VUOiAn6K6+5a6aQnVja2V0JyxcbiAgUElDQkVEX0FMSUNMT1VEX0FSRUE6ICforr7lrprlrZjlgqjljLrln58nLFxuICBQSUNCRURfQUxJQ0xPVURfUEFUSDogJ+iuvuWumuWtmOWCqOi3r+W+hCcsXG4gIFBJQ0JFRF9BTElDTE9VRF9DVVNUT01VUkw6ICforr7lrproh6rlrprkuYnln5/lkI0nLFxuICBQSUNCRURfQUxJQ0xPVURfT1BUSU9OUzogJ+iuvuWumue9keWdgOWQjue8gCcsXG4gIFBJQ0JFRF9BTElDTE9VRF9NRVNTQUdFX0FSRUE6ICfkvovlpoLvvJpvc3MtY24tYmVpamluZycsXG4gIFBJQ0JFRF9BTElDTE9VRF9NRVNTQUdFX1BBVEg6ICfkvovlpoLvvJp0ZXN0LycsXG4gIFBJQ0JFRF9BTElDTE9VRF9NRVNTQUdFX09QVElPTlM6ICfkvovlpoLvvJo/eC1vc3MtcHJvY2Vzcz14eHgnLFxuICBQSUNCRURfQUxJQ0xPVURfTUVTU0FHRV9DVVNUT01VUkw6ICfkvovlpoLvvJpodHRwczovL3Rlc3QuY29tJyxcblxuICAvLyBUZW5jZW50LWNsb3VkXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVUQ6ICfohb7orq/kupFDT1MnLFxuICBQSUNCRURfVEVOQ0VOVENMT1VEX1ZFUlNJT046ICdDT1PniYjmnKwnLFxuICBQSUNCRURfVEVOQ0VOVENMT1VEX1NFQ1JFVElEOiAn6K6+5a6aU2VjcmV0SWQnLFxuICBQSUNCRURfVEVOQ0VOVENMT1VEX1NFQ1JFVEtFWTogJ+iuvuWumlNlY3JldEtleScsXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfQVBQSUQ6ICforr7lrppBcHBJZCcsXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfQlVDS0VUOiAn6K6+5a6aQnVja2V0JyxcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9BUkVBOiAn6K6+5a6a5a2Y5YKo5Yy65Z+fJyxcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9FTkRQT0lOVDogJ+iuvuWumuaOpeWFpeeCuScsXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfUEFUSDogJ+iuvuWumuWtmOWCqOi3r+W+hCcsXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfT1BUSU9OUzogJ+iuvuWumue9keWdgOWQjue8gCcsXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfQ1VTVE9NVVJMOiAn6K6+5a6a6Ieq5a6a5LmJ5Z+f5ZCNJyxcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9NRVNTQUdFX0FQUElEOiAn5L6L5aaC77yaMTIzNDU2Nzg5MCcsXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfTUVTU0FHRV9BUkVBOiAn5L6L5aaC77yaYXAtYmVpamluZycsXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfTUVTU0FHRV9QQVRIOiAn5L6L5aaC77yadGVzdC8nLFxuICBQSUNCRURfVEVOQ0VOVENMT1VEX01FU1NBR0VfQ1VTVE9NVVJMOiAn5L6L5aaC77yaaHR0cHM6Ly90ZXN0LmNvbScsXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfTUVTU0FHRV9PUFRJT05TOiAn5L6L5aaC77yaP2ltYWdlTW9ncjInLFxuICBQSUNCRURfVEVOQ0VOVENMT1VEX01FU1NBR0VfRU5EUE9JTlQ6ICfkvovlpoLvvJpjb3MtaW50ZXJuYWwuYWNjZWxlcmF0ZS50ZW5jZW50Y29zLmNuJyxcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9TTElNOiAn5p6B5pm65Y6L57ypJyxcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9TTElNX1RJUDpcbiAgICAn5Zu+54mH5p6B5pm65Y6L57yp77yM6K+m5oOF6K+35Y+C6ICDW+aWh+aho+ivtOaYjl0oaHR0cHM6Ly9jbG91ZC50ZW5jZW50LmNvbS9kb2N1bWVudC9wcm9kdWN0LzQzNi84NjQzOCknLFxuICBQSUNCRURfVEVOQ0VOVENMT1VEX1NMSU1fQ09ORklSTTogJ+W8gOWQrycsXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfU0xJTV9DQU5DRUw6ICflhbPpl60nLFxuXG4gIC8vIEdpdEh1YlxuICBQSUNCRURfR0lUSFVCOiAnR2l0SHViJyxcbiAgUElDQkVEX0dJVEhVQl9UT0tFTjogJ+iuvuWumlRva2VuJyxcbiAgUElDQkVEX0dJVEhVQl9SRVBPOiAn6K6+5a6a5LuT5bqT5ZCNJyxcbiAgUElDQkVEX0dJVEhVQl9QQVRIOiAn6K6+5a6a5a2Y5YKo6Lev5b6EJyxcbiAgUElDQkVEX0dJVEhVQl9CUkFOQ0g6ICforr7lrprliIbmlK/lkI0nLFxuICBQSUNCRURfR0lUSFVCX0NVU1RPTVVSTDogJ+iuvuWumuiHquWumuS5ieWfn+WQjScsXG4gIFBJQ0JFRF9HSVRIVUJfTUVTU0FHRV9SRVBPOiAn5qC85byP77yadXNlcm5hbWUvcmVwbycsXG4gIFBJQ0JFRF9HSVRIVUJfTUVTU0FHRV9CUkFOQ0g6ICfkvovlpoLvvJptYWluJyxcbiAgUElDQkVEX0dJVEhVQl9NRVNTQUdFX1BBVEg6ICfkvovlpoLvvJp0ZXN0LycsXG4gIFBJQ0JFRF9HSVRIVUJfTUVTU0FHRV9DVVNUT01VUkw6ICfkvovlpoLvvJpodHRwczovL3Rlc3QuY29tJyxcblxuICAvLyBxaW5pdVxuICBQSUNCRURfUUlOSVU6ICfkuIPniZvkupEnLFxuICBQSUNCRURfUUlOSVVfQUNDRVNTS0VZOiAn6K6+5a6aQWNjZXNzS2V5JyxcbiAgUElDQkVEX1FJTklVX1NFQ1JFVEtFWTogJ+iuvuWumlNlY3JldEtleScsXG4gIFBJQ0JFRF9RSU5JVV9CVUNLRVQ6ICforr7lrppCdWNrZXQnLFxuICBQSUNCRURfUUlOSVVfUEFUSDogJ+iuvuWumuWtmOWCqOi3r+W+hCcsXG4gIFBJQ0JFRF9RSU5JVV9VUkw6ICforr7lrprorr/pl67nvZHlnYAnLFxuICBQSUNCRURfUUlOSVVfT1BUSU9OUzogJ+iuvuWumue9keWdgOWQjue8gCcsXG4gIFBJQ0JFRF9RSU5JVV9BUkVBOiAn6K6+5a6a5a2Y5YKo5Yy65Z+fJyxcbiAgUElDQkVEX1FJTklVX01FU1NBR0VfUEFUSDogJ+S+i+Wmgu+8mnRlc3QvJyxcbiAgUElDQkVEX1FJTklVX01FU1NBR0VfQVJFQTogJ+S+i+Wmgu+8mnowJyxcbiAgUElDQkVEX1FJTklVX01FU1NBR0VfT1BUSU9OUzogJ+S+i+Wmgu+8mj9pbWFnZXNsaW0nLFxuICBQSUNCRURfUUlOSVVfTUVTU0FHRV9VUkw6ICfkvovlpoLvvJpodHRwczovL3h4eC55eXkuZ2xiLmNsb3VkZG4uY29tJyxcblxuICAvLyBpbWd1clxuICBQSUNCRURfSU1HVVI6ICdJbWd1cicsXG4gIFBJQ0JFRF9JTUdVUl9DTElFTlRJRDogJ+iuvuWumkNsaWVudElkJyxcbiAgUElDQkVEX0lNR1VSX1VTRVJOQU1FOiAn6K6+5a6a55So5oi35ZCNJyxcbiAgUElDQkVEX0lNR1VSX0FDQ0VTU19UT0tFTjogJ+iuvuWummFjY2Vzc1Rva2VuJyxcbiAgUElDQkVEX0lNR1VSX0FMQlVNOiAn6K6+5a6a55u45YaM5ZCNJyxcbiAgUElDQkVEX0lNR1VSX1BST1hZOiAn6K6+5a6a5Luj55CGJyxcbiAgUElDQkVEX0lNR1VSX01FU1NBR0VfQ0xJRU5USUQ6ICfljL/lkI3kuIrkvKDml7bloavlhpknLFxuICBQSUNCRURfSU1HVVJfTUVTU0FHRV9VU0VSTkFNRTogJ+mcgOimgeS4iuS8oOWIsOi0puaIt+aXtuWhq+WGmScsXG4gIFBJQ0JFRF9JTUdVUl9NRVNTQUdFX0FDQ0VTU19UT0tFTjogJ+mcgOimgeS4iuS8oOWIsOi0puaIt+aXtuWhq+WGmScsXG4gIFBJQ0JFRF9JTUdVUl9NRVNTQUdFX0FMQlVNOiAn5L6L5aaC77yadGVzdCcsXG4gIFBJQ0JFRF9JTUdVUl9NRVNTQUdFX1BST1hZOiAn5L6L5aaC77yaaHR0cDovLzEyNy4wLjAuMToxMDgwJyxcblxuICAvLyB1cHl1blxuICBQSUNCRURfVVBZVU46ICflj4jmi43kupEnLFxuICBQSUNCRURfVVBZVU5fQlVDS0VUOiAn6K6+5a6aQnVja2V0JyxcbiAgUElDQkVEX1VQWVVOX09QRVJBVE9SOiAn6K6+5a6a5pON5L2c5ZGYJyxcbiAgUElDQkVEX1VQWVVOX1BBU1NXT1JEOiAn6K6+5a6a5pON5L2c5ZGY5a+G56CBJyxcbiAgUElDQkVEX1VQWVVOX1BBVEg6ICforr7lrprlrZjlgqjot6/lvoQnLFxuICBQSUNCRURfVVBZVU5fVVJMOiAn6K6+5a6a5Yqg6YCf5Z+f5ZCNJyxcbiAgUElDQkVEX1VQWVVOX09QVElPTlM6ICforr7lrprnvZHlnYDlkI7nvIAnLFxuICBQSUNCRURfVVBZVU5fRU5EUE9JTlQ6ICforr7lrproh6rlrprkuYlBUEnmjqXlhaXngrknLFxuICBQSUNCRURfVVBZVU5fQU5USV9MRUVDSF9UT0tFTjogJ+iuvuWumumYsuebl+mTvlRva2VuJyxcbiAgUElDQkVEX1VQWVVOX0VYUElSRV9USU1FOiAn6K6+5a6a6L+H5pyf5pe26Ze0KOenkiknLFxuICBQSUNCRURfVVBZVU5fTUVTU0FHRV9PUEVSQVRPUjogJ+S+i+Wmgu+8mm1lJyxcbiAgUElDQkVEX1VQWVVOX01FU1NBR0VfUEFTU1dPUkQ6ICfovpPlhaXmk43kvZzlkZjlr4bnoIEnLFxuICBQSUNCRURfVVBZVU5fTUVTU0FHRV9VUkw6ICfkvovlpoLvvJpodHRwOi8veHh4LnRlc3QudXBjZG4ubmV0JyxcbiAgUElDQkVEX1VQWVVOX01FU1NBR0VfT1BUSU9OUzogJ+S+i+Wmgu+8miFpbWdzbGltJyxcbiAgUElDQkVEX1VQWVVOX01FU1NBR0VfUEFUSDogJ+S+i+Wmgu+8mnRlc3QvJyxcbiAgUElDQkVEX1VQWVVOX01FU1NBR0VfRU5EUE9JTlQ6ICfkvovlpoLvvJpodHRwczovL3YwLmFwaS51cHl1bi5jb20nLFxuXG4gIC8vIHdlYmRhdnBsaXN0XG4gIFBJQ0JFRF9XRUJEQVZQTElTVDogJ1dlYkRBVicsXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9IT1NUOiAn6K6+5a6a5o6l5Y+j572R5Z2AJyxcbiAgUElDQkVEX1dFQkRBVlBMSVNUX1NTTEVOQUJMRUQ6ICflkK/nlKhTU0wnLFxuICBQSUNCRURfV0VCREFWUExJU1RfVVNFUk5BTUU6ICforr7lrprnlKjmiLflkI0nLFxuICBQSUNCRURfV0VCREFWUExJU1RfUEFTU1dPUkQ6ICforr7lrprlr4bnoIEnLFxuICBQSUNCRURfV0VCREFWUExJU1RfUEFUSDogJ+iuvuWumuWtmOWCqOi3r+W+hCcsXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9XRUJTSVRFX1BBVEg6ICforr7lrprnvZHlnYDot6/lvoQnLFxuICBQSUNCRURfV0VCREFWUExJU1RfQ1VTVE9NVVJMOiAn6K6+5a6a6Ieq5a6a5LmJ5Z+f5ZCNJyxcbiAgUElDQkVEX1dFQkRBVlBMSVNUX0FVVEhUWVBFOiAn6K6+5a6a6K6k6K+B5pa55byPJyxcbiAgUElDQkVEX1dFQkRBVlBMSVNUX09QVElPTlM6ICforr7lrprnvZHlnYDlkI7nvIAnLFxuICBQSUNCRURfV0VCREFWUExJU1RfTUVTU0FHRV9IT1NUOiAn5L6L5aaC77yaaHR0cHM6Ly9leGFtcGxlLmNvbS93ZWJkYXYnLFxuICBQSUNCRURfV0VCREFWUExJU1RfTUVTU0FHRV9TU0xFTkFCTEVEOiAn6ZyA6KaBSFRUUFPml7blkK/nlKgnLFxuICBQSUNCRURfV0VCREFWUExJU1RfTUVTU0FHRV9VU0VSTkFNRTogJ+S+i+Wmgu+8mm1lJyxcbiAgUElDQkVEX1dFQkRBVlBMSVNUX01FU1NBR0VfUEFTU1dPUkQ6ICfovpPlhaXlr4bnoIEnLFxuICBQSUNCRURfV0VCREFWUExJU1RfTUVTU0FHRV9QQVRIOiAn5L6L5aaC77yadGVzdC8nLFxuICBQSUNCRURfV0VCREFWUExJU1RfTUVTU0FHRV9XRUJTSVRFX1BBVEg6ICfmi7zmjqXnvZHlnYDml7bkvb/nlKgnLFxuICBQSUNCRURfV0VCREFWUExJU1RfTUVTU0FHRV9DVVNUT01VUkw6ICfkvovlpoLvvJpodHRwczovL3Rlc3QuY29tJyxcbiAgUElDQkVEX1dFQkRBVlBMSVNUX01FU1NBR0VfT1BUSU9OUzogJ+S+i+Wmgu+8mj9rZXk9MTIzNDU2JyxcblxuICAvLyBzZnRwcGxpc3RcbiAgUElDQkVEX1NGVFBQTElTVDogJ+WGhee9rlNGVFAnLFxuICBQSUNCRURfU0ZUUFBMSVNUX0hPU1Q6ICforr7lrprkuLvmnLonLFxuICBQSUNCRURfU0ZUUFBMSVNUX1BPUlQ6ICforr7lrprnq6/lj6MnLFxuICBQSUNCRURfU0ZUUFBMSVNUX1VTRVJOQU1FOiAn6K6+5a6a55So5oi35ZCNJyxcbiAgUElDQkVEX1NGVFBQTElTVF9QQVNTV09SRDogJ+iuvuWumuWvhueggScsXG4gIFBJQ0JFRF9TRlRQUExJU1RfUFJJVkFURUtFWTogJ+iuvuWumuengemSpScsXG4gIFBJQ0JFRF9TRlRQUExJU1RfUFJJVkFURUtFWV9QQVNTUEhSQVNFOiAn6K6+5a6a56eB6ZKl5a+G56CBJyxcbiAgUElDQkVEX1NGVFBQTElTVF9VUExPQURQQVRIOiAn6K6+5a6a5LiK5Lyg6Lev5b6EJyxcbiAgUElDQkVEX1NGVFBQTElTVF9DVVNUT01VUkw6ICforr7lrproh6rlrprkuYnln5/lkI0nLFxuICBQSUNCRURfU0ZUUFBMSVNUX1dFQlNJVEVfUEFUSDogJ+iuvuWumue9keermei3r+W+hCcsXG4gIFBJQ0JFRF9TRlRQUExJU1RfRklMRV9VU0VSOiAn6K6+5a6a5paH5Lu255So5oi3Oue7hCcsXG4gIFBJQ0JFRF9TRlRQUExJU1RfRklMRV9NT0RFOiAn6K6+5a6a5paH5Lu25p2D6ZmQJyxcbiAgUElDQkVEX1NGVFBQTElTVF9ESVJfTU9ERTogJ+iuvuWumuaWh+S7tuWkueadg+mZkCcsXG4gIFBJQ0JFRF9TRlRQUExJU1RfTUVTU0FHRV9IT1NUOiAn5L6L5aaC77yaMS4xLjEuMycsXG4gIFBJQ0JFRF9TRlRQUExJU1RfTUVTU0FHRV9QT1JUOiAn6buY6K6kMjInLFxuICBQSUNCRURfU0ZUUFBMSVNUX01FU1NBR0VfUFJJVkFURUtFWTogJ+S+i+Wmgu+8mi9Vc2Vycy94eHgvLnNzaC9pZF9yc2EnLFxuICBQSUNCRURfU0ZUUFBMSVNUX01FU1NBR0VfUFJJVkFURUtFWV9QQVNTUEhSQVNFOiAn6L6T5YWl56eB6ZKl5a+G56CBJyxcbiAgUElDQkVEX1NGVFBQTElTVF9NRVNTQUdFX1VQTE9BRFBBVEg6ICfkvovlpoLvvJp0ZXN0LycsXG4gIFBJQ0JFRF9TRlRQUExJU1RfTUVTU0FHRV9DVVNUT01VUkw6ICfkvovlpoLvvJpodHRwczovL3Rlc3QuY29tJyxcbiAgUElDQkVEX1NGVFBQTElTVF9NRVNTQUdFX1dFQlNJVEVfUEFUSDogJ+aLvOaOpee9keWdgOaXtuS9v+eUqCcsXG4gIFBJQ0JFRF9TRlRQUExJU1RfTUVTU0FHRV9GSUxFX1VTRVI6ICfkvovlpoLvvJp3d3c6ZGF0YScsXG4gIFBJQ0JFRF9TRlRQUExJU1RfTUVTU0FHRV9GSUxFX01PREU6ICfkvovlpoLvvJowNjY0JyxcbiAgUElDQkVEX1NGVFBQTElTVF9NRVNTQUdFX0RJUl9NT0RFOiAn5L6L5aaC77yaMDc3NScsXG5cbiAgLy8gUGljTGlzdFxuICBQSUNCRURfUElDTElTVDogJ1BpY0xpc3QnLFxuICBQSUNCRURfUElDTElTVF9IT1NUOiAn6K6+5a6a5Li75py6JyxcbiAgUElDQkVEX1BJQ0xJU1RfUE9SVDogJ+iuvuWumuerr+WPoycsXG4gIFBJQ0JFRF9QSUNMSVNUX1BJQ0JFRDogJ+iuvuWumuWbvuW6iicsXG4gIFBJQ0JFRF9QSUNMSVNUX0NPTkZJR05BTUU6ICforr7lrprphY3nva7lkI0nLFxuICBQSUNCRURfUElDTElTVF9LRVk6ICforr7lrprpibTmnYNLZXknLFxuXG4gIC8vIExza3kgUHJvXG4gIFBJQ0JFRF9MU0tZX1BMSVNUOiAn5YWw56m65Zu+5bqKJyxcbiAgUElDQkVEX0xTS1lfVkVSU0lPTjogJ+iuvuWumueJiOacrCcsXG4gIFBJQ0JFRF9MU0tZX01FU1NBR0VfVkVSU0lPTjogJ+S+i+WmglYxJyxcbiAgUElDQkVEX0xTS1lfSE9TVDogJ+iuvuWumuS4u+acuicsXG4gIFBJQ0JFRF9MU0tZX01FU1NBR0VfSE9TVDogJ+S+i+Wmgu+8mmh0dHBzOi8vZXhhbXBsZS5jb20nLFxuICBQSUNCRURfTFNLWV9UT0tFTjogJ+iuvuWumlRva2VuJyxcbiAgUElDQkVEX0xTS1lfTUVTU0FHRV9UT0tFTjogJ+S+i+Wmgu+8mjEyMzQ1Njc4OTAnLFxuICBQSUNCRURfTFNLWV9TVFJBVEVHWV9JRDogJ+iuvuWumuetlueVpUlEJyxcbiAgUElDQkVEX0xTS1lfTUVTU0FHRV9TVFJBVEVHWV9JRDogJ+S+i+Wmgu+8mjEnLFxuICBQSUNCRURfTFNLWV9BTEJVTV9JRDogJ+iuvuWumuebuOWGjElEJyxcbiAgUElDQkVEX0xTS1lfTUVTU0FHRV9BTEJVTV9JRDogJ+mAieWhq++8jFYy54mI5pys6ZmQ5a6aJyxcbiAgUElDQkVEX0xTS1lfUEVSTUlTU0lPTjogJ+iuvuWumuadg+mZkCcsXG4gIFBJQ0JFRF9MU0tZX01FU1NBR0VfUEVSTUlTU0lPTjogJ+S+i+Wmgu+8mnB1YmxpYycsXG5cbiAgLy8gQXdzUzNQbGlzdFxuICBQSUNCRURfQVdTUzNQTElTVDogJ0FXUyBTMycsXG4gIFBJQ0JFRF9BV1NTM1BMSVNUX0FDQ0VTU0tFWUlEOiAn6K6+5a6aQWNjZXNzS2V5SWQnLFxuICBQSUNCRURfQVdTUzNQTElTVF9TRUNSRVRfQUNDRVNTS0VZOiAn6K6+5a6aU2VjcmV0QWNjZXNzS2V5JyxcbiAgUElDQkVEX0FXU1MzUExJU1RfQlVDS0VUOiAn6K6+5a6aQnVja2V0JyxcbiAgUElDQkVEX0FXU1MzUExJU1RfUkVHSU9OOiAn6K6+5a6aUmVnaW9uJyxcbiAgUElDQkVEX0FXU1MzUExJU1RfVVBMT0FEUEFUSDogJ+iuvuWumuS4iuS8oOi3r+W+hCcsXG4gIFBJQ0JFRF9BV1NTM1BMSVNUX0VORFBPSU5UOiAn6K6+5a6a6Ieq5a6a5LmJ6IqC54K5JyxcbiAgUElDQkVEX0FXU1MzUExJU1RfUFJPWFk6ICforr7lrprku6PnkIYnLFxuICBQSUNCRURfQVdTUzNQTElTVF9VUkxQUkVGSVg6ICforr7lrproh6rlrprkuYnln5/lkI0nLFxuICBQSUNCRURfQVdTUzNQTElTVF9QQVRIU1RZTEVBQ0NFU1M6ICflkK/nlKhzM0ZvcmNlUGF0aFN0eWxlJyxcbiAgUElDQkVEX0FXU1MzUExJU1RfUkVKRUNUVU5BVVRIT1JJWkVEOiAn5ouS57ud5peg5pWIVExT6K+B5Lmm6L+e5o6lJyxcbiAgUElDQkVEX0FXU1MzUExJU1RfQUNMOiAn6K6+5a6a5LiK5Lyg6LWE5rqQ55qE6K6/6Zeu562W55WlJyxcbiAgUElDQkVEX0FXU1MzUExJU1RfRElTQUJMRUJVQ0tFVFBSRUZJWFRPVVJMOiAn5byA5ZCvIGBwYXRoU3R5bGVBY2Nlc3NgIOaXtu+8jOaYr+WQpuimgeemgeeUqOacgOe7iOeUn+aIkFVSTOS4rea3u+WKoCBidWNrZXQg5YmN57yAJyxcbiAgUElDQkVEX0FXU1MzUExJU1RfTUVTU0FHRV9BQ0NFU1NLRVlJRDogJ+S+i+Wmgu+8mkFLSUF4eHh4eHh4eHh4eHh4JyxcbiAgUElDQkVEX0FXU1MzUExJU1RfTUVTU0FHRV9TRUNSRVRfQUNDRVNTS0VZOiAn5L6L5aaC77yaeHh4eHh4eHh4eCcsXG4gIFBJQ0JFRF9BV1NTM1BMSVNUX01FU1NBR0VfQlVDS0VUOiAn5L6L5aaC77yadGVzdCcsXG4gIFBJQ0JFRF9BV1NTM1BMSVNUX01FU1NBR0VfUkVHSU9OOiAn5L6L5aaC77yadXMtZWFzdC0xJyxcbiAgUElDQkVEX0FXU1MzUExJU1RfTUVTU0FHRV9VUExPQURQQVRIOiAn5L6L5aaC77yadGVzdC97ZnVsbE5hbWV9JyxcbiAgUElDQkVEX0FXU1MzUExJU1RfTUVTU0FHRV9FTkRQT0lOVDogJ+S+i+Wmgu+8mmh0dHBzOi8vczMudXMtZWFzdC0xLmFtYXpvbmF3cy5jb20nLFxuICBQSUNCRURfQVdTUzNQTElTVF9NRVNTQUdFX1BST1hZOiAn5L6L5aaC77yaaHR0cDovLzEyNy4wLjAuMToxMDgwJyxcbiAgUElDQkVEX0FXU1MzUExJU1RfTUVTU0FHRV9VUkxQUkVGSVg6ICfkvovlpoLvvJpodHRwczovL3Rlc3QuY29tJyxcbiAgUElDQkVEX0FXU1MzUExJU1RfTUVTU0FHRV9QQVRIU1RZTEVBQ0NFU1M6ICfpnIDopoHml7blkK/nlKgnLFxuICBQSUNCRURfQVdTUzNQTElTVF9NRVNTQUdFX1JFSkVDVFVOQVVUSE9SSVpFRDogJ+mcgOimgeaXtuWQr+eUqCcsXG4gIFBJQ0JFRF9BV1NTM1BMSVNUX01FU1NBR0VfQUNMOiAn5L6L5aaC77yacHVibGljLXJlYWQnLFxuICBQSUNCRURfQVdTUzNQTElTVF9NRVNTQUdFX0RJU0FCTEVCVUNLRVRQUkVGSVhUT1VSTDogJ+mcgOimgeaXtuWQr+eUqCcsXG5cbiAgQlVJTERJTl9XQVRFUk1BUks6ICfmsLTljbDorr7nva4nLFxuICBCVUlMRElOX1dBVEVSTUFSS19JU0FERFdBVEVSTUFSSzogJ+aYr+WQpua3u+WKoOawtOWNsCcsXG4gIEJVSUxESU5fV0FURVJNQVJLX01FU1NBR0VfSVNBRERXQVRFUk1BUks6ICfpnIDopoHmt7vliqDmsLTljbDml7blkK/nlKgnLFxuICBCVUlMRElOX1dBVEVSTUFSS19XQVRFUk1BUktUWVBFOiAn6K6+5a6a5rC05Y2w57G75Z6LJyxcbiAgQlVJTERJTl9XQVRFUk1BUktfTUVTU0FHRV9XQVRFUk1BUktUWVBFOiAn6K+36YCJ5oup5rC05Y2w57G75Z6LJyxcbiAgQlVJTERJTl9XQVRFUk1BUktfSVNGVUxMU0NSRUVOV0FURVJNQVJLOiAn5piv5ZCm5YWo5bGP5rC05Y2wJyxcbiAgQlVJTERJTl9XQVRFUk1BUktfTUVTU0FHRV9JU0ZVTExTQ1JFRU5XQVRFUk1BUks6ICfpnIDopoHlhajlsY/msLTljbDml7blkK/nlKgnLFxuICBCVUlMRElOX1dBVEVSTUFSS19XQVRFUk1BUktERUdSRUU6ICforr7lrprmsLTljbDop5LluqYnLFxuICBCVUlMRElOX1dBVEVSTUFSS19NRVNTQUdFX1dBVEVSTUFSS0RFR1JFRTogJ+ivt+i+k+WFpeaVsOWtlycsXG4gIEJVSUxESU5fV0FURVJNQVJLX1dBVEVSTUFSS1RFWFQ6ICforr7lrprmsLTljbDmloflrZcnLFxuICBCVUlMRElOX1dBVEVSTUFSS19NRVNTQUdFX1dBVEVSTUFSS1RFWFQ6ICfor7fovpPlhaXmsLTljbDmloflrZcnLFxuICBCVUlMRElOX1dBVEVSTUFSS19XQVRFUk1BUktURVhURk9OVFBBVEg6ICforr7lrprmsLTljbDlrZfkvZPmlofku7bot6/lvoQnLFxuICBCVUlMRElOX1dBVEVSTUFSS19NRVNTQUdFX1dBVEVSTUFSS0ZPTlRQQVRIOiAn6K+36L6T5YWl5rC05Y2w5a2X5L2T5paH5Lu26Lev5b6EJyxcbiAgQlVJTERJTl9XQVRFUk1BUktfV0FURVJNQVJLRk9OVFJBVElPOiAn6K6+5a6a5rC05Y2w55u45a+55LqO5Zu+54mH55qE5q+U5L6LJyxcbiAgQlVJTERJTl9XQVRFUk1BUktfTUVTU0FHRV9XQVRFUk1BUktGT05UUkFUSU86ICfor7fovpPlhaUwLTHnmoTlsI/mlbAnLFxuICBCVUlMRElOX1dBVEVSTUFSS19XQVRFUk1BUktGT05UQ09MT1I6ICforr7lrprmsLTljbDlrZfkvZPpopzoibInLFxuICBCVUlMRElOX1dBVEVSTUFSS19NRVNTQUdFX1dBVEVSTUFSS0ZPTlRDT0xPUjogJ+ivt+i+k+WFpXJnYuminOiJsuWAvCcsXG4gIEJVSUxESU5fV0FURVJNQVJLX1dBVEVSTUFSS0lNQUdFUEFUSDogJ+iuvuWumuawtOWNsOWbvueJh+i3r+W+hCcsXG4gIEJVSUxESU5fV0FURVJNQVJLX01FU1NBR0VfV0FURVJNQVJLSU1BR0VQQVRIOiAn6K+36L6T5YWl5rC05Y2w5Zu+54mH6Lev5b6EJyxcbiAgQlVJTERJTl9XQVRFUk1BUktfV0FURVJNQVJLUE9TSVRJT046ICforr7lrprmsLTljbDkvY3nva4nLFxuICBCVUlMRElOX1dBVEVSTUFSS19NRVNTQUdFX1dBVEVSTUFSS1BPU0lUSU9OOiAn6K+36YCJ5oup5rC05Y2w5L2N572uJyxcblxuICBCVUlMRElOX1JFTkFNRTogJ+mHjeWRveWQjeiuvue9ricsXG4gIEJVSUxESU5fUkVOQU1FX0ZPUk1BVDogJ+iuvuWumumHjeWRveWQjeagvOW8jycsXG4gIEJVSUxESU5fUkVOQU1FX0VOQUJMRTogJ+aYr+WQpuWQr+eUqOmHjeWRveWQjScsXG5cbiAgQlVJTERJTl9DT01QUkVTUzogJ+WbvueJh+WkhOeQhicsXG4gIEJVSUxESU5fQ09NUFJFU1NfUVVBTElUWTogJ+iuvuWumuWbvueJh+i0qOmHjycsXG4gIEJVSUxESU5fQ09NUFJFU1NfTUVTU0FHRV9RVUFMSVRZOiAn6K+36L6T5YWlMS0xMDDnmoTmlbTmlbAnLFxuICBCVUlMRElOX0NPTVBSRVNTX0lTQ09OVkVSVDogJ+aYr+WQpui/m+ihjOagvOW8j+i9rOaNoicsXG4gIEJVSUxESU5fQ09NUFJFU1NfTUVTU0FHRV9JU0NPTlZFUlQ6ICfpnIDopoHovazmjaLml7blkK/nlKgnLFxuICBCVUlMRElOX0NPTVBSRVNTX0NPTlZFUlRGT1JNQVQ6ICforr7lrprovazmjaLmoLzlvI8nLFxuICBCVUlMRElOX0NPTVBSRVNTX01FU1NBR0VfQ09OVkVSVEZPUk1BVDogJ+ivt+mAieaLqei9rOaNouagvOW8jycsXG4gIEJVSUxESU5fQ09NUFJFU1NfSVNSRVNJWkU6ICfmmK/lkKbov5vooYzlm77niYfnvKnmlL4nLFxuICBCVUlMRElOX0NPTVBSRVNTX01FU1NBR0VfSVNSRVNJWkU6ICfpnIDopoHnvKnmlL7ml7blkK/nlKgnLFxuICBCVUlMRElOX0NPTVBSRVNTX1JFU0laRVdJRFRIOiAn6K6+5a6a57yp5pS+5a695bqmJyxcbiAgQlVJTERJTl9DT01QUkVTU19NRVNTQUdFX1JFU0laRVdJRFRIOiAn6K+36L6T5YWl5pWw5a2XJyxcbiAgQlVJTERJTl9DT01QUkVTU19SRVNJWkVIRUlHSFQ6ICforr7lrprnvKnmlL7pq5jluqYnLFxuICBCVUlMRElOX0NPTVBSRVNTX01FU1NBR0VfUkVTSVpFSEVJR0hUOiAn6K+36L6T5YWl5pWw5a2XJyxcbiAgQlVJTERJTl9DT01QUkVTU19JU1JFU0laRUJZUEVSQ0VOVDogJ+aYr+WQpuaMieeZvuWIhuavlOi/m+ihjOe8qeaUvicsXG4gIEJVSUxESU5fQ09NUFJFU1NfTUVTU0FHRV9JU1JFU0laRUJZUEVSQ0VOVDogJ+mcgOimgeaMieeZvuWIhuavlOe8qeaUvuaXtuWQr+eUqCcsXG4gIEJVSUxESU5fQ09NUFJFU1NfSVNGTElQOiAn5piv5ZCm5Z6C55u057+76L2s5Zu+54mHJyxcbiAgQlVJTERJTl9DT01QUkVTU19JU0ZMT1A6ICfmmK/lkKbmsLTlubPnv7vovazlm77niYcnLFxuICBCVUlMRElOX0NPTVBSRVNTX1JFU0laRVBFUkNFTlQ6ICforr7lrprnvKnmlL7nmb7liIbmr5QnLFxuICBCVUlMRElOX0NPTVBSRVNTX01FU1NBR0VfUkVTSVpFUEVSQ0VOVDogJ+ivt+i+k+WFpeaVsOWtlycsXG4gIEJVSUxESU5fQ09NUFJFU1NfU0tJUFJFU0laRU9GU01BTExJTUc6ICfmmK/lkKbot7Pov4flsI/lm77nvKnmlL4nLFxuICBCVUlMRElOX0NPTVBSRVNTX0lTUk9UQVRFOiAn5piv5ZCm6L+b6KGM5Zu+54mH5peL6L2sJyxcbiAgQlVJTERJTl9DT01QUkVTU19NRVNTQUdFX0lTUk9UQVRFOiAn6ZyA6KaB5peL6L2s5pe25ZCv55SoJyxcbiAgQlVJTERJTl9DT01QUkVTU19ST1RBVEVERUdSRUU6ICforr7lrprml4vovazop5LluqYnLFxuICBCVUlMRElOX0NPTVBSRVNTX01FU1NBR0VfUk9UQVRFREVHUkVFOiAn6K+36L6T5YWl5pWw5a2X77yM5Y+v5Li66LSf5pWwJyxcbiAgQlVJTERJTl9DT01QUkVTU19JU1JFTU9WRUVYSUY6ICfmmK/lkKbnp7vpmaRFWElG5L+h5oGvJyxcbiAgQlVJTERJTl9DT01QUkVTU19NRVNTQUdFX0lTUkVNT1ZFRVhJRjogJ+mcgOimgeenu+mZpEVYSUbkv6Hmga/ml7blkK/nlKgnLFxuXG4gIC8vIFBsdWdpbiBIYW5kbGVyXG4gIFBMVUdJTl9IQU5ETEVSX1BMVUdJTl9JTlNUQUxMX1NVQ0NFU1M6ICfmj5Lku7blronoo4XmiJDlip8nLFxuICBQTFVHSU5fSEFORExFUl9QTFVHSU5fSU5TVEFMTF9GQUlMRUQ6ICfmj5Lku7blronoo4XlpLHotKUnLFxuICBQTFVHSU5fSEFORExFUl9QTFVHSU5fSU5TVEFMTF9GQUlMRURfUkVBU09OOiAn5o+S5Lu25a6J6KOF5aSx6LSl77yM5aSx6LSl56CB5Li6JHtjb2Rlfe+8jOmUmeivr+aXpeW/l+S4uiBcXG4gJHtkYXRhfScsXG4gIFBMVUdJTl9IQU5ETEVSX1BMVUdJTl9JTlNUQUxMX0ZBSUxFRF9QQVRIOiAn5o+S5Lu25a6J6KOF5aSx6LSl77yM6K+36L6T5YWl5ZCI5rOV5o+S5Lu25ZCN5oiW5ZCI5rOV5a6J6KOF6Lev5b6EJyxcbiAgUExVR0lOX0hBTkRMRVJfUExVR0lOX1VOSU5TVEFMTF9TVUNDRVNTOiAn5o+S5Lu25Y246L295oiQ5YqfJyxcbiAgUExVR0lOX0hBTkRMRVJfUExVR0lOX1VOSU5TVEFMTF9GQUlMRUQ6ICfmj5Lku7bljbjovb3lpLHotKUnLFxuICBQTFVHSU5fSEFORExFUl9QTFVHSU5fVU5JTlNUQUxMX0ZBSUxFRF9SRUFTT046ICfmj5Lku7bljbjovb3lpLHotKXvvIzlpLHotKXnoIHkuLoke2NvZGV977yM6ZSZ6K+v5pel5b+X5Li6IFxcbiAke2RhdGF9JyxcbiAgUExVR0lOX0hBTkRMRVJfUExVR0lOX1VOSU5TVEFMTF9GQUlMRURfVkFMSUQ6ICfmj5Lku7bljbjovb3lpLHotKXvvIzor7fovpPlhaXlkIjms5Xmj5Lku7blkI0nLFxuICBQTFVHSU5fSEFORExFUl9QTFVHSU5fVVBEQVRFX1NVQ0NFU1M6ICfmj5Lku7bmm7TmlrDmiJDlip8nLFxuICBQTFVHSU5fSEFORExFUl9QTFVHSU5fVVBEQVRFX0ZBSUxFRDogJ+aPkuS7tuabtOaWsOWksei0pScsXG4gIFBMVUdJTl9IQU5ETEVSX1BMVUdJTl9VUERBVEVfRkFJTEVEX1JFQVNPTjogJ+aPkuS7tuabtOaWsOWksei0pe+8jOWksei0peeggeS4uiR7Y29kZX3vvIzplJnor6/ml6Xlv5fkuLogXFxuICR7ZGF0YX0nLFxuICBQTFVHSU5fSEFORExFUl9QTFVHSU5fVVBEQVRFX0ZBSUxFRF9WQUxJRDogJ+aPkuS7tuabtOaWsOWksei0pe+8jOivt+i+k+WFpeWQiOazleaPkuS7tuWQjSdcbn1cblxuZXhwb3J0IHR5cGUgSUxvY2FsZXNLZXkgPSBrZXlvZiB0eXBlb2YgWkhfQ05cbmV4cG9ydCB0eXBlIElMb2NhbGVzID0gdHlwZW9mIFpIX0NOXG4iLCJpbXBvcnQgeyBaSF9DTiwgSUxvY2FsZXNLZXksIElMb2NhbGVzIH0gZnJvbSAnLi96aC1DTidcbmltcG9ydCB7IG1lcmdlIH0gZnJvbSAnbG9kYXNoJ1xuaW1wb3J0IHsgSVBpY0dvLCBJU3RyaW5nS2V5TWFwLCBJSTE4bk1hbmFnZXIgfSBmcm9tICcuLi90eXBlcydcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnXG5pbXBvcnQgZnMsIHsgcGF0aEV4aXN0c1N5bmMsIGVuc3VyZURpclN5bmMgfSBmcm9tICdmcy1leHRyYSdcbmltcG9ydCB5YW1sIGZyb20gJ2pzLXlhbWwnXG5cbmltcG9ydCB7IE9iamVjdEFkYXB0ZXIsIEkxOG4gfSBmcm9tICdAcGljZ28vaTE4bidcblxuaW1wb3J0IHsgSUxvY2FsZSB9IGZyb20gJ0BwaWNnby9pMThuL2Rpc3QvdHlwZXMnXG5pbXBvcnQgeyBFTiB9IGZyb20gJy4vZW4nXG5pbXBvcnQgeyBaSF9UVyB9IGZyb20gJy4vemgtVFcnXG5cbmNvbnN0IGxhbmd1YWdlTGlzdDogSVN0cmluZ0tleU1hcDxJU3RyaW5nS2V5TWFwPHN0cmluZz4+ID0ge1xuICAnemgtQ04nOiBaSF9DTixcbiAgJ3poLVRXJzogWkhfVFcsXG4gIGVuOiBFTlxufVxuXG5jbGFzcyBJMThuTWFuYWdlciBpbXBsZW1lbnRzIElJMThuTWFuYWdlciB7XG4gIHByaXZhdGUgcmVhZG9ubHkgaTE4bjogSTE4blxuICBwcml2YXRlIHJlYWRvbmx5IG9iamVjdEFkYXB0ZXI6IE9iamVjdEFkYXB0ZXJcbiAgcHJpdmF0ZSByZWFkb25seSBjdHg6IElQaWNHb1xuICBjb25zdHJ1Y3RvcihjdHg6IElQaWNHbykge1xuICAgIHRoaXMuY3R4ID0gY3R4XG4gICAgdGhpcy5vYmplY3RBZGFwdGVyID0gbmV3IE9iamVjdEFkYXB0ZXIobGFuZ3VhZ2VMaXN0KVxuICAgIGxldCBsYW5ndWFnZSA9IHRoaXMuY3R4LmdldENvbmZpZzxzdHJpbmc+KCdzZXR0aW5ncy5sYW5ndWFnZScpIHx8ICd6aC1DTidcbiAgICBpZiAoIWxhbmd1YWdlTGlzdFtsYW5ndWFnZV0pIHtcbiAgICAgIGxhbmd1YWdlID0gJ3poLUNOJyAvLyB1c2UgZGVmYXVsdFxuICAgIH1cbiAgICB0aGlzLmkxOG4gPSBuZXcgSTE4bih7XG4gICAgICBhZGFwdGVyOiB0aGlzLm9iamVjdEFkYXB0ZXIsXG4gICAgICBkZWZhdWx0TGFuZ3VhZ2U6IGxhbmd1YWdlXG4gICAgfSlcbiAgICB0aGlzLmxvYWRPdXR0ZXJJMThuKClcbiAgfVxuXG4gIHByaXZhdGUgbG9hZE91dHRlckkxOG4oKTogdm9pZCB7XG4gICAgY29uc3QgaTE4bkZvbGRlciA9IHRoaXMuZ2V0T3V0dGVySTE4bkZvbGRlcigpXG4gICAgY29uc3QgZmlsZXMgPSBmcy5yZWFkZGlyU3luYyhpMThuRm9sZGVyLCB7XG4gICAgICB3aXRoRmlsZVR5cGVzOiB0cnVlXG4gICAgfSlcbiAgICBmaWxlcy5mb3JFYWNoKGZpbGUgPT4ge1xuICAgICAgaWYgKGZpbGUuaXNGaWxlKCkgJiYgZmlsZS5uYW1lLmVuZHNXaXRoKCcueW1sJykpIHtcbiAgICAgICAgY29uc3QgaTE4bkZpbGVQYXRoID0gcGF0aC5qb2luKGkxOG5Gb2xkZXIsIGZpbGUubmFtZSlcbiAgICAgICAgY29uc3QgaTE4bkZpbGUgPSBmcy5yZWFkRmlsZVN5bmMoaTE4bkZpbGVQYXRoLCAndXRmOCcpXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgaTE4bkZpbGVPYmogPSB5YW1sLmxvYWQoaTE4bkZpbGUpIGFzIElMb2NhbGVzXG4gICAgICAgICAgbGFuZ3VhZ2VMaXN0W2ZpbGUubmFtZS5yZXBsYWNlKC9cXC55bWwkLywgJycpXSA9IGkxOG5GaWxlT2JqXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGUpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KVxuICB9XG5cbiAgcHJpdmF0ZSBnZXRPdXR0ZXJJMThuRm9sZGVyKCk6IHN0cmluZyB7XG4gICAgY29uc3QgaTE4bkZvbGRlciA9IHBhdGguam9pbih0aGlzLmN0eC5iYXNlRGlyLCAnaTE4bi1jbGknKVxuICAgIGlmICghcGF0aEV4aXN0c1N5bmMoaTE4bkZvbGRlcikpIHtcbiAgICAgIGVuc3VyZURpclN5bmMoaTE4bkZvbGRlcilcbiAgICB9XG4gICAgcmV0dXJuIGkxOG5Gb2xkZXJcbiAgfVxuXG4gIHRyYW5zbGF0ZTxUIGV4dGVuZHMgc3RyaW5nPihrZXk6IElMb2NhbGVzS2V5IHwgVCwgYXJncz86IElTdHJpbmdLZXlNYXA8c3RyaW5nPik6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuaTE4bi50cmFuc2xhdGUoa2V5LCBhcmdzKSB8fCBrZXlcbiAgfVxuXG4gIHNldExhbmd1YWdlKGxhbmd1YWdlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLmkxOG4uc2V0TGFuZ3VhZ2UobGFuZ3VhZ2UpXG4gICAgdGhpcy5jdHguc2F2ZUNvbmZpZyh7XG4gICAgICAnc2V0dGluZ3MubGFuZ3VhZ2UnOiBsYW5ndWFnZVxuICAgIH0pXG4gIH1cblxuICBhZGRMb2NhbGUobGFuZ3VhZ2U6IHN0cmluZywgbG9jYWxlczogSUxvY2FsZSk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IG9yaWdpbkxvY2FsZXMgPSB0aGlzLm9iamVjdEFkYXB0ZXIuZ2V0TG9jYWxlKGxhbmd1YWdlKVxuICAgIGlmICghb3JpZ2luTG9jYWxlcykge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuICAgIGNvbnN0IG5ld0xvY2FsZXMgPSBtZXJnZShvcmlnaW5Mb2NhbGVzLCBsb2NhbGVzKVxuICAgIHRoaXMub2JqZWN0QWRhcHRlci5zZXRMb2NhbGUobGFuZ3VhZ2UsIG5ld0xvY2FsZXMpXG4gICAgcmV0dXJuIHRydWVcbiAgfVxuXG4gIGFkZExhbmd1YWdlKGxhbmd1YWdlOiBzdHJpbmcsIGxvY2FsZXM6IElMb2NhbGUpOiBib29sZWFuIHtcbiAgICBjb25zdCBvcmlnaW5Mb2NhbGVzID0gdGhpcy5vYmplY3RBZGFwdGVyLmdldExvY2FsZShsYW5ndWFnZSlcbiAgICBpZiAob3JpZ2luTG9jYWxlcykge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuICAgIHRoaXMub2JqZWN0QWRhcHRlci5zZXRMb2NhbGUobGFuZ3VhZ2UsIGxvY2FsZXMpXG4gICAgbGFuZ3VhZ2VMaXN0W2xhbmd1YWdlXSA9IGxvY2FsZXNcbiAgICByZXR1cm4gdHJ1ZVxuICB9XG5cbiAgZ2V0TGFuZ3VhZ2VMaXN0KCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gT2JqZWN0LmtleXMobGFuZ3VhZ2VMaXN0KVxuICB9XG59XG5cbmV4cG9ydCB7IEkxOG5NYW5hZ2VyIH1cbiIsImltcG9ydCB7IElMb2NhbGVzIH0gZnJvbSAnLi96aC1DTidcblxuLyogZXNsaW50LWRpc2FibGUgbm8tdGVtcGxhdGUtY3VybHktaW4tc3RyaW5nICovXG5leHBvcnQgY29uc3QgWkhfVFc6IElMb2NhbGVzID0ge1xuICBVUExPQURfRkFJTEVEOiAn5LiK5YKz5aSx5pWXJyxcbiAgQ0hFQ0tfU0VUVElOR1M6ICfoq4vmqqLmn6XkvaDnmoToqK3lrprmmK/lkKbmraPnoronLFxuICBDSEVDS19TRVRUSU5HU19BTkRfTkVUV09SSzogJ+iri+aqouafpeS9oOeahOioreWumuWPiue2sui3rycsXG4gIFVQTE9BRF9GQUlMRURfUkVBU09OOiAn6Yyv6Kqk56K877yaJHtjb2Rlfe+8jOiri+aJk+mWi+eAj+imveWZqOiyvOS4iuWcsOWdgOafpeeci+ebuOmXnOWOn+WboCcsXG4gIFNFUlZFUl9FUlJPUjogJ+S8uuacjeWZqOWHuumMr++8jOiri+mHjeippicsXG4gIEFVVEhfRkFJTEVEOiAn6KqN6K2J5aSx5pWXJyxcblxuICAvLyBzbW1zXG4gIFBJQ0JFRF9TTU1TOiAnU00uTVMnLFxuICBQSUNCRURfU01NU19UT0tFTjogJ+ioreWumlRva2VuJyxcbiAgUElDQkVEX1NNTVNfTUVTU0FHRV9UT0tFTjogJ+iri+i8uOWFpVRva2VuJyxcbiAgUElDQkVEX1NNTVNfQkFDS1VQX0RPTUFJTjogJ+WCmeeUqOS4iuWCs+e2suWdgCcsXG4gIFBJQ0JFRF9TTU1TX01FU1NBR0VfQkFDS1VQX0RPTUFJTjogJ+S+i+WmgiBzbW1zLmFwcCcsXG5cbiAgLy9hZHZhbmNlZHBsaXN0XG4gIFBJQ0JFRF9BRFZBTkNFRFBMSVNUOiAn6auY57Sa6Ieq5a6a576pJyxcbiAgUElDQkVEX0FEVkFOQ0VEUExJU1RfRU5EUE9JTlQ6ICfoqK3lrppBUEnkuLvmqZ8nLFxuICBQSUNCRURfQURWQU5DRURQTElTVF9NRVNTQUdFX0VORFBPSU5UOiAn5L6L5aaC77yaaHR0cHM6Ly9leGFtcGxlLmNvbS91cGxvYWQnLFxuICBQSUNCRURfQURWQU5DRURQTElTVF9NRVRIT0Q6ICfoqK3lrproq4vmsYLmlrnms5UnLFxuICBQSUNCRURfQURWQU5DRURQTElTVF9NRVNTQUdFX01FVEhPRDogJ+iri+mBuOaTh+iri+axguaWueazlScsXG4gIFBJQ0JFRF9BRFZBTkNFRFBMSVNUX0ZPUk1fREFUQV9LRVk6ICfoqK3lrprooajllq5LZXknLFxuICBQSUNCRURfQURWQU5DRURQTElTVF9NRVNTQUdFX0ZPUk1fREFUQV9LRVk6ICfkvovlpoLvvJpmaWxlJyxcbiAgUElDQkVEX0FEVkFOQ0VEUExJU1RfSEVBREVSUzogJ+ioreWumuiri+axgumgrScsXG4gIFBJQ0JFRF9BRFZBTkNFRFBMSVNUX01FU1NBR0VfSEVBREVSUzogJ+S+i+Wmgu+8mntcIkNvbnRlbnQtVHlwZVwiOiBcIm11bHRpcGFydC9mb3JtLWRhdGFcIn0nLFxuICBQSUNCRURfQURWQU5DRURQTElTVF9CT0RZOiAn6Kit5a6a6KuL5rGC6auUJyxcbiAgUElDQkVEX0FEVkFOQ0VEUExJU1RfTUVTU0FHRV9CT0RZOiAn5L6L5aaC77yae1wia2V5XCI6IFwidmFsdWVcIn0nLFxuICBQSUNCRURfQURWQU5DRURQTElTVF9DVVNUT01fUFJFRklYOiAn6Kit5a6a6Ieq5a6a576p5YmN57a0JyxcbiAgUElDQkVEX0FEVkFOQ0VEUExJU1RfTUVTU0FHRV9DVVNUT01fUFJFRklYOiAn5L6L5aaC77yaaHR0cHM6Ly9leGFtcGxlLmNvbS8nLFxuICBQSUNCRURfQURWQU5DRURQTElTVF9SRVNfREFUQV9QQVRIOiAn6Kit5a6a6L+U5Zue5pW45pOa6Lev5b6RJyxcbiAgUElDQkVEX0FEVkFOQ0VEUExJU1RfTUVTU0FHRV9SRVNfREFUQV9QQVRIOiAn5L6L5aaC77yaZGF0YS51cmwnLFxuXG4gIC8vIGxvY2FsXG4gIFBJQ0JFRF9MT0NBTDogJ+acrOWcsCcsXG4gIFBJQ0JFRF9MT0NBTF9QQVRIOiAn6Kit5a6a5YSy5a2Y6Lev5b6RJyxcbiAgUElDQkVEX0xPQ0FMX01FU1NBR0VfUEFUSDogJ+S+i+WmgiAvdXNyL2xvY2FsL2ltYWdlcy8nLFxuICBQSUNCRURfTE9DQUxfQ1VTVE9NVVJMOiAn6Kit5a6a6Ieq6KiC57ay5Z2AJyxcbiAgUElDQkVEX0xPQ0FMX01FU1NBR0VfQ1VTVE9NVVJMOiAn5L6L5aaCIGh0dHBzOi8vdGVzdC5jb20nLFxuICBQSUNCRURfTE9DQUxfV0VCUEFUSDogJ+ioreWumue2suWdgOi3r+W+kScsXG4gIFBJQ0JFRF9MT0NBTF9NRVNTQUdFX1dFQlBBVEg6ICfnlKjkuo7ntrLpoIHpoa/npLrnmoTot6/lvpEnLFxuXG4gIC8vIGFsaXN0XG4gIFBJQ0JFRF9BTElTVF9QTElTVDogJ0FMaXN0JyxcbiAgUElDQkVEX0FMSVNUX1VSTDogJ+ioreWumlVSTCcsXG4gIFBJQ0JFRF9BTElTVF9NRVNTQUdFX1VSTDogJ+S+i+Wmgu+8mmh0dHBzOi8vYWxpc3QuZXhhbXBsZS5jb20nLFxuICBQSUNCRURfQUxJU1RfVE9LRU46ICfoqK3lrppUb2tlbicsXG4gIFBJQ0JFRF9BTElTVF9NRVNTQUdFX1RPS0VOOiAn6KuL6Ly45YWlVG9rZW4o6IiH55So5oi25ZCNLeWvhueivOS6jOmBuOS4gCknLFxuICBQSUNCRURfQUxJU1RfVVNFUk5BTUU6ICfoqK3lrprnlKjmiLblkI0nLFxuICBQSUNCRURfQUxJU1RfTUVTU0FHRV9VU0VSTkFNRTogJ+iri+i8uOWFpeeUqOaItuWQjSjoiIdUb2tlbuS6jOmBuOS4gCknLFxuICBQSUNCRURfQUxJU1RfUEFTU1dPUkQ6ICfoqK3lrprlr4bnorwnLFxuICBQSUNCRURfQUxJU1RfTUVTU0FHRV9QQVNTV09SRDogJ+iri+i8uOWFpeWvhueivCcsXG4gIFBJQ0JFRF9BTElTVF9VUExPQURfUEFUSDogJ+ioreWumuS4iuWCs+i3r+W+kScsXG4gIFBJQ0JFRF9BTElTVF9NRVNTQUdFX1VQTE9BRF9QQVRIOiAn5L6L5aaC77yaL3Rlc3QnLFxuICBQSUNCRURfQUxJU1RfV0VCX1BBVEg6ICfoqK3lrprntrLlnYDot6/lvpEnLFxuICBQSUNCRURfQUxJU1RfTUVTU0FHRV9XRUJfUEFUSDogJ+eUqOS6jue2sumggemhr+ekuueahOi3r+W+kScsXG4gIFBJQ0JFRF9BTElTVF9DVVNUT01VUkw6ICfoqK3lrproh6roqILntrLlnYAnLFxuICBQSUNCRURfQUxJU1RfTUVTU0FHRV9DVVNUT01VUkw6ICfkvovlpoLvvJpodHRwczovL3Rlc3QuY29tJyxcblxuICAvLyBBbGktY2xvdWRcbiAgUElDQkVEX0FMSUNMT1VEOiAn6Zi/6YeM5LqRT1NTJyxcbiAgUElDQkVEX0FMSUNMT1VEX0FDQ0VTU0tFWUlEOiAn6Kit5a6aYWNjZXNzS2V5SWQnLFxuICBQSUNCRURfQUxJQ0xPVURfQUNDRVNTS0VZU0VDUkVUOiAn6Kit5a6aYWNjZXNzS2V5U2VjcmV0JyxcbiAgUElDQkVEX0FMSUNMT1VEX0JVQ0tFVDogJ+ioreWumkJ1Y2tldCcsXG4gIFBJQ0JFRF9BTElDTE9VRF9BUkVBOiAn6Kit5a6a5YSy5a2Y5Y2A5Z+fJyxcbiAgUElDQkVEX0FMSUNMT1VEX1BBVEg6ICfoqK3lrprlhLLlrZjot6/lvpEnLFxuICBQSUNCRURfQUxJQ0xPVURfQ1VTVE9NVVJMOiAn6Kit5a6a6Ieq6KiC57ay5Z2AJyxcbiAgUElDQkVEX0FMSUNMT1VEX09QVElPTlM6ICfoqK3lrprntrLlnYDlvozntrQnLFxuICBQSUNCRURfQUxJQ0xPVURfTUVTU0FHRV9BUkVBOiAn5L6L5aaC77yab3NzLWNuLWJlaWppbmcnLFxuICBQSUNCRURfQUxJQ0xPVURfTUVTU0FHRV9QQVRIOiAn5L6L5aaC77yadGVzdC8nLFxuICBQSUNCRURfQUxJQ0xPVURfTUVTU0FHRV9PUFRJT05TOiAn5L6L5aaC77yaP3gtb3NzLXByb2Nlc3M9eHh4JyxcbiAgUElDQkVEX0FMSUNMT1VEX01FU1NBR0VfQ1VTVE9NVVJMOiAn5L6L5aaC77yaaHR0cHM6Ly90ZXN0LmNvbScsXG5cbiAgLy8gVGVuY2VudC1jbG91ZFxuICBQSUNCRURfVEVOQ0VOVENMT1VEOiAn6aiw6KiK5LqRQ09TJyxcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9WRVJTSU9OOiAnQ09T54mI5pysJyxcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9TRUNSRVRJRDogJ+ioreWumlNlY3JldElkJyxcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9TRUNSRVRLRVk6ICfoqK3lrppTZWNyZXRLZXknLFxuICBQSUNCRURfVEVOQ0VOVENMT1VEX0FQUElEOiAn6Kit5a6aQXBwSWQnLFxuICBQSUNCRURfVEVOQ0VOVENMT1VEX0JVQ0tFVDogJ+ioreWumkJ1Y2tldCcsXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfQVJFQTogJ+ioreWumuWEsuWtmOWNgOWfnycsXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfRU5EUE9JTlQ6ICfoqK3lrprmjqXlhaXpu54nLFxuICBQSUNCRURfVEVOQ0VOVENMT1VEX1BBVEg6ICfoqK3lrprlhLLlrZjot6/lvpEnLFxuICBQSUNCRURfVEVOQ0VOVENMT1VEX09QVElPTlM6ICfoqK3lrprntrLlnYDlvozntrQnLFxuICBQSUNCRURfVEVOQ0VOVENMT1VEX0NVU1RPTVVSTDogJ+ioreWumuiHquiogue2suWdgCcsXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfTUVTU0FHRV9BUFBJRDogJ+S+i+Wmgu+8mjEyMzQ1Njc4OTAnLFxuICBQSUNCRURfVEVOQ0VOVENMT1VEX01FU1NBR0VfQVJFQTogJ+S+i+Wmgu+8mmFwLWJlaWppbmcnLFxuICBQSUNCRURfVEVOQ0VOVENMT1VEX01FU1NBR0VfUEFUSDogJ+S+i+Wmgu+8mnRlc3QvJyxcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9NRVNTQUdFX0NVU1RPTVVSTDogJ+S+i+Wmgu+8mmh0dHBzOi8vdGVzdC5jb20nLFxuICBQSUNCRURfVEVOQ0VOVENMT1VEX01FU1NBR0VfT1BUSU9OUzogJ+S+i+Wmgu+8mj9pbWFnZU1vZ3IyJyxcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9NRVNTQUdFX0VORFBPSU5UOiAn5L6L5aaC77yaY29zLWludGVybmFsLmFjY2VsZXJhdGUudGVuY2VudGNvcy5jbicsXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfU0xJTTogJ+alteaZuuWjk+e4ricsXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfU0xJTV9DQU5DRUw6ICfpl5zploknLFxuICBQSUNCRURfVEVOQ0VOVENMT1VEX1NMSU1fQ09ORklSTTogJ+mWi+WVkycsXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfU0xJTV9USVA6XG4gICAgJ+WclueJh+alteaZuuWjk+e4ru+8jOips+aDheiri+WPg+iAg1vmlofmqpToqqrmmI5dKGh0dHBzOi8vY2xvdWQudGVuY2VudC5jb20vZG9jdW1lbnQvcHJvZHVjdC80MzYvNDkyNTkpJyxcblxuICAvLyBHaXRIdWJcbiAgUElDQkVEX0dJVEhVQjogJ0dpdEh1YicsXG4gIFBJQ0JFRF9HSVRIVUJfVE9LRU46ICfoqK3lrppUb2tlbicsXG4gIFBJQ0JFRF9HSVRIVUJfUkVQTzogJ+ioreWumuWAieW6q+WQjeeosScsXG4gIFBJQ0JFRF9HSVRIVUJfUEFUSDogJ+ioreWumuWEsuWtmOi3r+W+kScsXG4gIFBJQ0JFRF9HSVRIVUJfQlJBTkNIOiAn6Kit5a6a5YiG5pSv5ZCN56ixJyxcbiAgUElDQkVEX0dJVEhVQl9DVVNUT01VUkw6ICfoqK3lrproh6roqILntrLlnYAnLFxuICBQSUNCRURfR0lUSFVCX01FU1NBR0VfUkVQTzogJ+agvOW8j++8mnVzZXJuYW1lL3JlcG8nLFxuICBQSUNCRURfR0lUSFVCX01FU1NBR0VfQlJBTkNIOiAn5L6L5aaC77yabWFpbicsXG4gIFBJQ0JFRF9HSVRIVUJfTUVTU0FHRV9QQVRIOiAn5L6L5aaC77yadGVzdC8nLFxuICBQSUNCRURfR0lUSFVCX01FU1NBR0VfQ1VTVE9NVVJMOiAn5L6L5aaC77yaaHR0cHM6Ly90ZXN0LmNvbScsXG5cbiAgLy8gcWluaXVcbiAgUElDQkVEX1FJTklVOiAn5LiD54mb5LqRJyxcbiAgUElDQkVEX1FJTklVX0FDQ0VTU0tFWTogJ+ioreWumkFjY2Vzc0tleScsXG4gIFBJQ0JFRF9RSU5JVV9TRUNSRVRLRVk6ICfoqK3lrppTZWNyZXRLZXknLFxuICBQSUNCRURfUUlOSVVfQlVDS0VUOiAn6Kit5a6aQnVja2V0JyxcbiAgUElDQkVEX1FJTklVX1BBVEg6ICfoqK3lrprlhLLlrZjot6/lvpEnLFxuICBQSUNCRURfUUlOSVVfVVJMOiAn6Kit5a6a6Kiq5ZWP57ay5Z2AJyxcbiAgUElDQkVEX1FJTklVX09QVElPTlM6ICfoqK3lrprntrLlnYDlvozntrQnLFxuICBQSUNCRURfUUlOSVVfQVJFQTogJ+ioreWumuWEsuWtmOWNgOWfnycsXG4gIFBJQ0JFRF9RSU5JVV9NRVNTQUdFX1BBVEg6ICfkvovlpoLvvJp0ZXN0LycsXG4gIFBJQ0JFRF9RSU5JVV9NRVNTQUdFX0FSRUE6ICfkvovlpoLvvJp6MCcsXG4gIFBJQ0JFRF9RSU5JVV9NRVNTQUdFX09QVElPTlM6ICfkvovlpoLvvJo/aW1hZ2VzbGltJyxcbiAgUElDQkVEX1FJTklVX01FU1NBR0VfVVJMOiAn5L6L5aaC77yaaHR0cHM6Ly94eHgueXl5LmdsYi5jbG91ZGRuLmNvbScsXG5cbiAgLy8gaW1ndXJcbiAgUElDQkVEX0lNR1VSOiAnSW1ndXInLFxuICBQSUNCRURfSU1HVVJfQ0xJRU5USUQ6ICfoqK3lrppDbGllbnRJZCcsXG4gIFBJQ0JFRF9JTUdVUl9VU0VSTkFNRTogJ+ioreWumueUqOaItuWQjScsXG4gIFBJQ0JFRF9JTUdVUl9BQ0NFU1NfVE9LRU46ICfoqK3lrpphY2Nlc3NUb2tlbicsXG4gIFBJQ0JFRF9JTUdVUl9BTEJVTTogJ+ioreWumuebuOewv+WQjScsXG4gIFBJQ0JFRF9JTUdVUl9QUk9YWTogJ+ioreWumlBST1hZJyxcbiAgUElDQkVEX0lNR1VSX01FU1NBR0VfQ0xJRU5USUQ6ICfljL/lkI3kuIrlgrPmmYLloavlr6snLFxuICBQSUNCRURfSU1HVVJfTUVTU0FHRV9VU0VSTkFNRTogJ+mcgOimgeS4iuWCs+WIsOizrOaItuaZguWhq+WvqycsXG4gIFBJQ0JFRF9JTUdVUl9NRVNTQUdFX0FDQ0VTU19UT0tFTjogJ+mcgOimgeS4iuWCs+WIsOizrOaItuaZguWhq+WvqycsXG4gIFBJQ0JFRF9JTUdVUl9NRVNTQUdFX0FMQlVNOiAn5L6L5aaC77yadGVzdCcsXG4gIFBJQ0JFRF9JTUdVUl9NRVNTQUdFX1BST1hZOiAn5L6L5aaC77yaaHR0cDovLzEyNy4wLjAuMToxMDgwJyxcblxuICAvLyB1cHl1blxuICBQSUNCRURfVVBZVU46ICflj4jmi43kupEnLFxuICBQSUNCRURfVVBZVU5fQlVDS0VUOiAn6Kit5a6aQnVja2V0JyxcbiAgUElDQkVEX1VQWVVOX0VORFBPSU5UOiAn6Kit5a6a5o6l5YWl6bueJyxcbiAgUElDQkVEX1VQWVVOX09QRVJBVE9SOiAn6Kit5a6a5pON5L2c5ZOhJyxcbiAgUElDQkVEX1VQWVVOX1BBU1NXT1JEOiAn6Kit5a6a5pON5L2c5ZOh5a+G56K8JyxcbiAgUElDQkVEX1VQWVVOX1BBVEg6ICfoqK3lrprlhLLlrZjot6/lvpEnLFxuICBQSUNCRURfVVBZVU5fVVJMOiAn6Kit5a6a5Yqg6YCf57ay5Z2AJyxcbiAgUElDQkVEX1VQWVVOX09QVElPTlM6ICfoqK3lrprntrLlnYDlvozntrQnLFxuICBQSUNCRURfVVBZVU5fQU5USV9MRUVDSF9UT0tFTjogJ+ioreWumumYsuebnOmPiFRva2VuJyxcbiAgUElDQkVEX1VQWVVOX0VYUElSRV9USU1FOiAn6Kit5a6a6YGO5pyf5pmC6ZaTKOenkiknLFxuICBQSUNCRURfVVBZVU5fTUVTU0FHRV9PUEVSQVRPUjogJ+S+i+Wmgu+8mm1lJyxcbiAgUElDQkVEX1VQWVVOX01FU1NBR0VfUEFTU1dPUkQ6ICfovLjlhaXmk43kvZzlk6Hlr4bnorwnLFxuICBQSUNCRURfVVBZVU5fTUVTU0FHRV9VUkw6ICfkvovlpoLvvJpodHRwOi8veHh4LnRlc3QudXBjZG4ubmV0JyxcbiAgUElDQkVEX1VQWVVOX01FU1NBR0VfT1BUSU9OUzogJ+S+i+Wmgu+8miFpbWdzbGltJyxcbiAgUElDQkVEX1VQWVVOX01FU1NBR0VfUEFUSDogJ+S+i+Wmgu+8mnRlc3QvJyxcbiAgUElDQkVEX1VQWVVOX01FU1NBR0VfRU5EUE9JTlQ6ICfkvovlpoLvvJpodHRwczovL3YwLmFwaS51cHl1bi5jb20nLFxuXG4gIC8vIHdlYmRhdlxuICBQSUNCRURfV0VCREFWUExJU1Q6ICdXZWJEQVYnLFxuICBQSUNCRURfV0VCREFWUExJU1RfSE9TVDogJ+ioreWumkFQSeS4u+apnycsXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9TU0xFTkFCTEVEOiAn6ZyA6KaBSFRUUFPmmYLllZ/nlKgnLFxuICBQSUNCRURfV0VCREFWUExJU1RfVVNFUk5BTUU6ICfoqK3lrprnlKjmiLblkI0nLFxuICBQSUNCRURfV0VCREFWUExJU1RfUEFTU1dPUkQ6ICfoqK3lrprlr4bnorwnLFxuICBQSUNCRURfV0VCREFWUExJU1RfUEFUSDogJ+ioreWumuWEsuWtmOi3r+W+kScsXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9DVVNUT01VUkw6ICfoqK3lrproh6roqILntrLlnYAnLFxuICBQSUNCRURfV0VCREFWUExJU1RfQVVUSFRZUEU6ICfoqK3lrproqo3orYnmlrnlvI8nLFxuICBQSUNCRURfV0VCREFWUExJU1RfT1BUSU9OUzogJ+ioreWumue2suWdgOW+jOe2tCcsXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9XRUJTSVRFX1BBVEg6ICfoqK3lrprntrLnq5not6/lvpEnLFxuICBQSUNCRURfV0VCREFWUExJU1RfTUVTU0FHRV9IT1NUOiAn5L6L5aaC77yaaHR0cHM6Ly9leGFtcGxlLmNvbS93ZWJkYXYnLFxuICBQSUNCRURfV0VCREFWUExJU1RfTUVTU0FHRV9TU0xFTkFCTEVEOiAn6ZyA6KaBSFRUUFPmmYLllZ/nlKgnLFxuICBQSUNCRURfV0VCREFWUExJU1RfTUVTU0FHRV9VU0VSTkFNRTogJ+S+i+Wmgu+8mm1lJyxcbiAgUElDQkVEX1dFQkRBVlBMSVNUX01FU1NBR0VfUEFTU1dPUkQ6ICfovLjlhaXnlKjmiLblr4bnorwnLFxuICBQSUNCRURfV0VCREFWUExJU1RfTUVTU0FHRV9QQVRIOiAn5L6L5aaC77yadGVzdC8nLFxuICBQSUNCRURfV0VCREFWUExJU1RfTUVTU0FHRV9XRUJTSVRFX1BBVEg6ICfmi7zmjqXntrLlnYDmmYLkvb/nlKgnLFxuICBQSUNCRURfV0VCREFWUExJU1RfTUVTU0FHRV9DVVNUT01VUkw6ICfkvovlpoLvvJpodHRwczovL3Rlc3QuY29tJyxcbiAgUElDQkVEX1dFQkRBVlBMSVNUX01FU1NBR0VfT1BUSU9OUzogJ+S+i+Wmgu+8mj9rZXk9dmFsdWUnLFxuXG4gIC8vIHNmdHBwbGlzdFxuICBQSUNCRURfU0ZUUFBMSVNUOiAn5YWn572uU0ZUUCcsXG4gIFBJQ0JFRF9TRlRQUExJU1RfSE9TVDogJ+ioreWumuS4u+apnycsXG4gIFBJQ0JFRF9TRlRQUExJU1RfUE9SVDogJ+ioreWumuerr+WPoycsXG4gIFBJQ0JFRF9TRlRQUExJU1RfVVNFUk5BTUU6ICfoqK3lrprnlKjmiLblkI0nLFxuICBQSUNCRURfU0ZUUFBMSVNUX1BBU1NXT1JEOiAn6Kit5a6a5a+G56K8JyxcbiAgUElDQkVEX1NGVFBQTElTVF9QUklWQVRFS0VZOiAn6Kit5a6a56eB6ZGwJyxcbiAgUElDQkVEX1NGVFBQTElTVF9QUklWQVRFS0VZX1BBU1NQSFJBU0U6ICfoqK3lrprnp4HpkbDlr4bnorwnLFxuICBQSUNCRURfU0ZUUFBMSVNUX1VQTE9BRFBBVEg6ICfoqK3lrprkuIrlgrPot6/lvpEnLFxuICBQSUNCRURfU0ZUUFBMSVNUX0NVU1RPTVVSTDogJ+ioreWumuiHquiogue2suWdgCcsXG4gIFBJQ0JFRF9TRlRQUExJU1RfV0VCU0lURV9QQVRIOiAn6Kit5a6a57ay56uZ6Lev5b6RJyxcbiAgUElDQkVEX1NGVFBQTElTVF9GSUxFX1VTRVI6ICfoqK3lrprmlofku7bnlKjmiLY657WEJyxcbiAgUElDQkVEX1NGVFBQTElTVF9GSUxFX01PREU6ICfoqK3lrprmlofku7bmrIrpmZAnLFxuICBQSUNCRURfU0ZUUFBMSVNUX0RJUl9NT0RFOiAn6Kit5a6a5paH5Lu25aS+5qyK6ZmQJyxcbiAgUElDQkVEX1NGVFBQTElTVF9NRVNTQUdFX0hPU1Q6ICfkvovlpoLvvJoxLjEuMS4zJyxcbiAgUElDQkVEX1NGVFBQTElTVF9NRVNTQUdFX1BPUlQ6ICfpu5joqo0yMicsXG4gIFBJQ0JFRF9TRlRQUExJU1RfTUVTU0FHRV9QUklWQVRFS0VZOiAn5L6L5aaC77yaL1VzZXJzL3h4eC8uc3NoL2lkX3JzYScsXG4gIFBJQ0JFRF9TRlRQUExJU1RfTUVTU0FHRV9QUklWQVRFS0VZX1BBU1NQSFJBU0U6ICfovLjlhaXnp4HpkbDlr4bnorwnLFxuICBQSUNCRURfU0ZUUFBMSVNUX01FU1NBR0VfVVBMT0FEUEFUSDogJ+S+i+Wmgu+8mnRlc3QvJyxcbiAgUElDQkVEX1NGVFBQTElTVF9NRVNTQUdFX0NVU1RPTVVSTDogJ+S+i+Wmgu+8mmh0dHBzOi8vdGVzdC5jb20nLFxuICBQSUNCRURfU0ZUUFBMSVNUX01FU1NBR0VfV0VCU0lURV9QQVRIOiAn5ou85o6l57ay5Z2A5pmC5L2/55SoJyxcbiAgUElDQkVEX1NGVFBQTElTVF9NRVNTQUdFX0ZJTEVfVVNFUjogJ+S+i+Wmgu+8mnd3dzpkYXRhJyxcbiAgUElDQkVEX1NGVFBQTElTVF9NRVNTQUdFX0ZJTEVfTU9ERTogJ+S+i+Wmgu+8mjA2NjQnLFxuICBQSUNCRURfU0ZUUFBMSVNUX01FU1NBR0VfRElSX01PREU6ICfkvovlpoLvvJowNzc1JyxcblxuICAvLyBQaWNMaXN0XG4gIFBJQ0JFRF9QSUNMSVNUOiAnUGljTGlzdCcsXG4gIFBJQ0JFRF9QSUNMSVNUX0hPU1Q6ICfoqK3lrprkuLvmqZ8nLFxuICBQSUNCRURfUElDTElTVF9QT1JUOiAn6Kit5a6a56uv5Y+jJyxcbiAgUElDQkVEX1BJQ0xJU1RfUElDQkVEOiAn6Kit5a6a5ZyW5bqKJyxcbiAgUElDQkVEX1BJQ0xJU1RfQ09ORklHTkFNRTogJ+ioreWumumFjee9ruWQjScsXG4gIFBJQ0JFRF9QSUNMSVNUX0tFWTogJ+ioreWumumRkuasiktleScsXG5cbiAgLy8gTHNreSBQcm9cbiAgUElDQkVEX0xTS1lfUExJU1Q6ICfomK3nqbrlnJbluoonLFxuICBQSUNCRURfTFNLWV9WRVJTSU9OOiAn6Kit5a6a54mI5pysJyxcbiAgUElDQkVEX0xTS1lfTUVTU0FHRV9WRVJTSU9OOiAn6KuL6YG45pOH54mI5pysJyxcbiAgUElDQkVEX0xTS1lfSE9TVDogJ+ioreWumuS4u+apnycsXG4gIFBJQ0JFRF9MU0tZX01FU1NBR0VfSE9TVDogJ+S+i+Wmgu+8mmh0dHBzOi8vZXhhbXBsZS5jb20nLFxuICBQSUNCRURfTFNLWV9UT0tFTjogJ+ioreWumlRva2VuJyxcbiAgUElDQkVEX0xTS1lfTUVTU0FHRV9UT0tFTjogJ+iri+i8uOWFpVRva2VuJyxcbiAgUElDQkVEX0xTS1lfU1RSQVRFR1lfSUQ6ICfoqK3lrprnrZbnlaVJRCcsXG4gIFBJQ0JFRF9MU0tZX01FU1NBR0VfU1RSQVRFR1lfSUQ6ICfkvovlpoIxJyxcbiAgUElDQkVEX0xTS1lfQUxCVU1fSUQ6ICfoqK3lrprnm7jlhopJRCcsXG4gIFBJQ0JFRF9MU0tZX01FU1NBR0VfQUxCVU1fSUQ6ICfkvovlpoIxJyxcbiAgUElDQkVEX0xTS1lfUEVSTUlTU0lPTjogJ+ioreWumuS4iuWCs+asiumZkCcsXG4gIFBJQ0JFRF9MU0tZX01FU1NBR0VfUEVSTUlTU0lPTjogJ+iri+mBuOaTh+S4iuWCs+asiumZkCcsXG5cbiAgLy8gQXdzUzNQbGlzdFxuICBQSUNCRURfQVdTUzNQTElTVDogJ0FXUyBTMycsXG4gIFBJQ0JFRF9BV1NTM1BMSVNUX0FDQ0VTU0tFWUlEOiAn6Kit5a6aQWNjZXNzS2V5SWQnLFxuICBQSUNCRURfQVdTUzNQTElTVF9TRUNSRVRfQUNDRVNTS0VZOiAn6Kit5a6aU2VjcmV0QWNjZXNzS2V5JyxcbiAgUElDQkVEX0FXU1MzUExJU1RfQlVDS0VUOiAn6Kit5a6aQnVja2V0JyxcbiAgUElDQkVEX0FXU1MzUExJU1RfUkVHSU9OOiAn6Kit5a6aUmVnaW9uJyxcbiAgUElDQkVEX0FXU1MzUExJU1RfVVBMT0FEUEFUSDogJ+ioreWumuS4iuWCs+i3r+W+kScsXG4gIFBJQ0JFRF9BV1NTM1BMSVNUX0VORFBPSU5UOiAn6Kit5a6a6Ieq5a6a576p56+A6bueJyxcbiAgUElDQkVEX0FXU1MzUExJU1RfUFJPWFk6ICfoqK3lrprku6PnkIYnLFxuICBQSUNCRURfQVdTUzNQTElTVF9VUkxQUkVGSVg6ICfoqK3lrproh6rlrprnvqnntrLlnYAnLFxuICBQSUNCRURfQVdTUzNQTElTVF9QQVRIU1RZTEVBQ0NFU1M6ICfplovllZ8gYHBhdGhTdHlsZUFjY2Vzc2AnLFxuICBQSUNCRURfQVdTUzNQTElTVF9SRUpFQ1RVTkFVVEhPUklaRUQ6ICfplovllZ8gYHJlamVjdFVuYXV0aG9yaXplZGAnLFxuICBQSUNCRURfQVdTUzNQTElTVF9BQ0w6ICfoqK3lrppBQ0wnLFxuICBQSUNCRURfQVdTUzNQTElTVF9ESVNBQkxFQlVDS0VUUFJFRklYVE9VUkw6ICfplovllZ8gYHBhdGhTdHlsZUFjY2Vzc2Ag5pmC77yM5piv5ZCm6KaB56aB55So5pyA57WC55Sf5oiQVVJM5Lit5re75YqgIGJ1Y2tldCDliY3ntrQnLFxuICBQSUNCRURfQVdTUzNQTElTVF9NRVNTQUdFX0FDQ0VTU0tFWUlEOiAn5L6L5aaC77yaQUtJQXh4eHh4eHh4eHh4eHgnLFxuICBQSUNCRURfQVdTUzNQTElTVF9NRVNTQUdFX1NFQ1JFVF9BQ0NFU1NLRVk6ICfkvovlpoLvvJp4eHh4eHh4eHh4JyxcbiAgUElDQkVEX0FXU1MzUExJU1RfTUVTU0FHRV9CVUNLRVQ6ICfkvovlpoLvvJp0ZXN0L3tmdWxsTmFtZX0nLFxuICBQSUNCRURfQVdTUzNQTElTVF9NRVNTQUdFX1JFR0lPTjogJ+S+i+Wmgu+8mnVzLWVhc3QtMScsXG4gIFBJQ0JFRF9BV1NTM1BMSVNUX01FU1NBR0VfVVBMT0FEUEFUSDogJ+S+i+Wmgu+8mnRlc3QvJyxcbiAgUElDQkVEX0FXU1MzUExJU1RfTUVTU0FHRV9FTkRQT0lOVDogJ+S+i+Wmgu+8mmh0dHBzOi8vczMudXMtZWFzdC0xLmFtYXpvbmF3cy5jb20nLFxuICBQSUNCRURfQVdTUzNQTElTVF9NRVNTQUdFX1BST1hZOiAn5L6L5aaC77yaaHR0cDovLzEyNy4wLjAuMToxMDgwJyxcbiAgUElDQkVEX0FXU1MzUExJU1RfTUVTU0FHRV9VUkxQUkVGSVg6ICfkvovlpoLvvJpodHRwczovL3Rlc3QuY29tJyxcbiAgUElDQkVEX0FXU1MzUExJU1RfTUVTU0FHRV9QQVRIU1RZTEVBQ0NFU1M6ICfpnIDopoHmmYLllZ/nlKgnLFxuICBQSUNCRURfQVdTUzNQTElTVF9NRVNTQUdFX1JFSkVDVFVOQVVUSE9SSVpFRDogJ+mcgOimgeaZguWVn+eUqCcsXG4gIFBJQ0JFRF9BV1NTM1BMSVNUX01FU1NBR0VfQUNMOiAn5L6L5aaC77yacHVibGljLXJlYWQnLFxuICBQSUNCRURfQVdTUzNQTElTVF9NRVNTQUdFX0RJU0FCTEVCVUNLRVRQUkVGSVhUT1VSTDogJ+mcgOimgeaZguWVn+eUqCcsXG5cbiAgQlVJTERJTl9XQVRFUk1BUks6ICfmsLTljbDoqK3lrponLFxuICBCVUlMRElOX1dBVEVSTUFSS19JU0FERFdBVEVSTUFSSzogJ+aYr+WQpua3u+WKoOawtOWNsCcsXG4gIEJVSUxESU5fV0FURVJNQVJLX01FU1NBR0VfSVNBRERXQVRFUk1BUks6ICfpnIDopoHmt7vliqDmsLTljbDmmYLllZ/nlKgnLFxuICBCVUlMRElOX1dBVEVSTUFSS19XQVRFUk1BUktUWVBFOiAn6Kit5a6a5rC05Y2w6aGe5Z6LJyxcbiAgQlVJTERJTl9XQVRFUk1BUktfTUVTU0FHRV9XQVRFUk1BUktUWVBFOiAn6KuL6YG45pOH5rC05Y2w6aGe5Z6LJyxcbiAgQlVJTERJTl9XQVRFUk1BUktfSVNGVUxMU0NSRUVOV0FURVJNQVJLOiAn5piv5ZCm5YWo5bGP5rC05Y2wJyxcbiAgQlVJTERJTl9XQVRFUk1BUktfTUVTU0FHRV9JU0ZVTExTQ1JFRU5XQVRFUk1BUks6ICfpnIDopoHlhajlsY/msLTljbDmmYLllZ/nlKgnLFxuICBCVUlMRElOX1dBVEVSTUFSS19XQVRFUk1BUktERUdSRUU6ICfoqK3lrprmsLTljbDop5LluqYnLFxuICBCVUlMRElOX1dBVEVSTUFSS19NRVNTQUdFX1dBVEVSTUFSS0RFR1JFRTogJ+iri+i8uOWFpeaVuOWtlycsXG4gIEJVSUxESU5fV0FURVJNQVJLX1dBVEVSTUFSS1RFWFQ6ICfoqK3lrprmsLTljbDmloflrZcnLFxuICBCVUlMRElOX1dBVEVSTUFSS19NRVNTQUdFX1dBVEVSTUFSS1RFWFQ6ICfoq4vovLjlhaXmsLTljbDmloflrZcnLFxuICBCVUlMRElOX1dBVEVSTUFSS19XQVRFUk1BUktURVhURk9OVFBBVEg6ICfoqK3lrprmsLTljbDlrZfpq5QnLFxuICBCVUlMRElOX1dBVEVSTUFSS19NRVNTQUdFX1dBVEVSTUFSS0ZPTlRQQVRIOiAn6KuL6Ly45YWl5rC05Y2w5a2X6auU5paH5Lu26Lev5b6RJyxcbiAgQlVJTERJTl9XQVRFUk1BUktfV0FURVJNQVJLRk9OVFJBVElPOiAn6Kit5a6a5rC05Y2w5ZyW54mH5q+U5L6LJyxcbiAgQlVJTERJTl9XQVRFUk1BUktfTUVTU0FHRV9XQVRFUk1BUktGT05UUkFUSU86ICfoq4vovLjlhaUwLTHnmoTmlbjlrZcnLFxuICBCVUlMRElOX1dBVEVSTUFSS19XQVRFUk1BUktGT05UQ09MT1I6ICfoqK3lrprmsLTljbDlrZfpq5TpoY/oibInLFxuICBCVUlMRElOX1dBVEVSTUFSS19NRVNTQUdFX1dBVEVSTUFSS0ZPTlRDT0xPUjogJ+iri+i8uOWFpXJnYumhj+iJsuWAvCcsXG4gIEJVSUxESU5fV0FURVJNQVJLX1dBVEVSTUFSS0lNQUdFUEFUSDogJ+ioreWumuawtOWNsOWclueJh+i3r+W+kScsXG4gIEJVSUxESU5fV0FURVJNQVJLX01FU1NBR0VfV0FURVJNQVJLSU1BR0VQQVRIOiAn6KuL6Ly45YWl5rC05Y2w5ZyW54mH6Lev5b6RJyxcbiAgQlVJTERJTl9XQVRFUk1BUktfV0FURVJNQVJLUE9TSVRJT046ICfoqK3lrprmsLTljbDkvY3nva4nLFxuICBCVUlMRElOX1dBVEVSTUFSS19NRVNTQUdFX1dBVEVSTUFSS1BPU0lUSU9OOiAn6KuL6YG45pOH5rC05Y2w5L2N572uJyxcblxuICBCVUlMRElOX1JFTkFNRTogJ+mHjeWRveWQjeioreWumicsXG4gIEJVSUxESU5fUkVOQU1FX0ZPUk1BVDogJ+ioreWumumHjeWRveWQjeagvOW8jycsXG4gIEJVSUxESU5fUkVOQU1FX0VOQUJMRTogJ+aYr+WQpuWVn+eUqOmHjeWRveWQjScsXG5cbiAgQlVJTERJTl9DT01QUkVTUzogJ+WclueJh+iZleeQhuioreWumicsXG4gIEJVSUxESU5fQ09NUFJFU1NfUVVBTElUWTogJ+ioreWumuWclueJh+izqumHjycsXG4gIEJVSUxESU5fQ09NUFJFU1NfTUVTU0FHRV9RVUFMSVRZOiAn6KuL6Ly45YWlMS0xMDDnmoTmlbTmlbgnLFxuICBCVUlMRElOX0NPTVBSRVNTX0lTQ09OVkVSVDogJ+aYr+WQpumAsuihjOagvOW8j+i9ieaPmycsXG4gIEJVSUxESU5fQ09NUFJFU1NfTUVTU0FHRV9JU0NPTlZFUlQ6ICfpnIDopoHovYnmj5vmmYLllZ/nlKgnLFxuICBCVUlMRElOX0NPTVBSRVNTX0NPTlZFUlRGT1JNQVQ6ICfoqK3lrprovYnmj5vmoLzlvI8nLFxuICBCVUlMRElOX0NPTVBSRVNTX01FU1NBR0VfQ09OVkVSVEZPUk1BVDogJ+iri+mBuOaTh+i9ieaPm+agvOW8jycsXG4gIEJVSUxESU5fQ09NUFJFU1NfSVNSRVNJWkU6ICfmmK/lkKbpgLLooYzlnJbniYfnuK7mlL4nLFxuICBCVUlMRElOX0NPTVBSRVNTX01FU1NBR0VfSVNSRVNJWkU6ICfpnIDopoHnuK7mlL7mmYLllZ/nlKgnLFxuICBCVUlMRElOX0NPTVBSRVNTX1JFU0laRVdJRFRIOiAn6Kit5a6a57iu5pS+5a+s5bqmJyxcbiAgQlVJTERJTl9DT01QUkVTU19NRVNTQUdFX1JFU0laRVdJRFRIOiAn6KuL6Ly45YWl5pW45a2XJyxcbiAgQlVJTERJTl9DT01QUkVTU19SRVNJWkVIRUlHSFQ6ICfoqK3lrprnuK7mlL7pq5jluqYnLFxuICBCVUlMRElOX0NPTVBSRVNTX01FU1NBR0VfUkVTSVpFSEVJR0hUOiAn6KuL6Ly45YWl5pW45a2XJyxcbiAgQlVJTERJTl9DT01QUkVTU19JU1JFU0laRUJZUEVSQ0VOVDogJ+aYr+WQpuaMieeZvuWIhuavlOmAsuihjOe4ruaUvicsXG4gIEJVSUxESU5fQ09NUFJFU1NfTUVTU0FHRV9JU1JFU0laRUJZUEVSQ0VOVDogJ+mcgOimgeaMieeZvuWIhuavlOe4ruaUvuaZguWVn+eUqCcsXG4gIEJVSUxESU5fQ09NUFJFU1NfSVNGTElQOiAn5piv5ZCm5Z6C55u057+76L2J5ZyW54mHJyxcbiAgQlVJTERJTl9DT01QUkVTU19JU0ZMT1A6ICfmmK/lkKbmsLTlubPnv7vovYnlnJbniYcnLFxuICBCVUlMRElOX0NPTVBSRVNTX1JFU0laRVBFUkNFTlQ6ICfoqK3lrprnuK7mlL7nmb7liIbmr5QnLFxuICBCVUlMRElOX0NPTVBSRVNTX01FU1NBR0VfUkVTSVpFUEVSQ0VOVDogJ+iri+i8uOWFpeaVsOWtlycsXG4gIEJVSUxESU5fQ09NUFJFU1NfU0tJUFJFU0laRU9GU01BTExJTUc6ICfmmK/lkKbot7PpgY7lsI/lnJbnuK7mlL4nLFxuICBCVUlMRElOX0NPTVBSRVNTX0lTUk9UQVRFOiAn5piv5ZCm6YCy6KGM5ZyW54mH5peL6L2JJyxcbiAgQlVJTERJTl9DT01QUkVTU19NRVNTQUdFX0lTUk9UQVRFOiAn6ZyA6KaB5peL6L2J5pmC5ZWf55SoJyxcbiAgQlVJTERJTl9DT01QUkVTU19ST1RBVEVERUdSRUU6ICfoqK3lrprml4vovYnop5LluqYnLFxuICBCVUlMRElOX0NPTVBSRVNTX01FU1NBR0VfUk9UQVRFREVHUkVFOiAn6KuL6Ly45YWl5pW45a2X77yM5Y+v54K66LKg5pW4JyxcbiAgQlVJTERJTl9DT01QUkVTU19JU1JFTU9WRUVYSUY6ICfmmK/lkKbnp7vpmaRFWElG6LOH6KiKJyxcbiAgQlVJTERJTl9DT01QUkVTU19NRVNTQUdFX0lTUkVNT1ZFRVhJRjogJ+mcgOimgeenu+mZpEVYSUbos4foqIrmmYLllZ/nlKgnLFxuXG4gIC8vIFBsdWdpbiBIYW5kbGVyXG4gIFBMVUdJTl9IQU5ETEVSX1BMVUdJTl9JTlNUQUxMX1NVQ0NFU1M6ICfmj5Lku7blronoo53miJDlip8nLFxuICBQTFVHSU5fSEFORExFUl9QTFVHSU5fSU5TVEFMTF9GQUlMRUQ6ICfmj5Lku7blronoo53lpLHmlZcnLFxuICBQTFVHSU5fSEFORExFUl9QTFVHSU5fSU5TVEFMTF9GQUlMRURfUkVBU09OOiAn5o+S5Lu25a6J6KOd5aSx5pWX77yM5aSx5pWX56K854K6JHtjb2Rlfe+8jOmMr+iqpOe0gOmMhOeCuiBcXG4gJHtkYXRhfScsXG4gIFBMVUdJTl9IQU5ETEVSX1BMVUdJTl9JTlNUQUxMX0ZBSUxFRF9QQVRIOiAn5o+S5Lu25a6J6KOd5aSx5pWX77yM6KuL6Ly45YWl5q2j56K655qE5o+S5Lu25ZCN56ix5oiW5q2j56K655qE5a6J6KOd6Lev5b6RJyxcbiAgUExVR0lOX0hBTkRMRVJfUExVR0lOX1VOSU5TVEFMTF9TVUNDRVNTOiAn5o+S5Lu25Y246LyJ5oiQ5YqfJyxcbiAgUExVR0lOX0hBTkRMRVJfUExVR0lOX1VOSU5TVEFMTF9GQUlMRUQ6ICfmj5Lku7bljbjovInlpLHmlZcnLFxuICBQTFVHSU5fSEFORExFUl9QTFVHSU5fVU5JTlNUQUxMX0ZBSUxFRF9SRUFTT046ICfmj5Lku7bljbjovInlpLHmlZfvvIzlpLHmlZfnorzngroke2NvZGV977yM6Yyv6Kqk57SA6YyE54K6IFxcbiAke2RhdGF9JyxcbiAgUExVR0lOX0hBTkRMRVJfUExVR0lOX1VOSU5TVEFMTF9GQUlMRURfVkFMSUQ6ICfmj5Lku7bljbjovInlpLHmlZfvvIzoq4vovLjlhaXmraPnorrnmoTmj5Lku7blkI3nqLEnLFxuICBQTFVHSU5fSEFORExFUl9QTFVHSU5fVVBEQVRFX1NVQ0NFU1M6ICfmj5Lku7bmm7TmlrDmiJDlip8nLFxuICBQTFVHSU5fSEFORExFUl9QTFVHSU5fVVBEQVRFX0ZBSUxFRDogJ+aPkuS7tuabtOaWsOWkseaVlycsXG4gIFBMVUdJTl9IQU5ETEVSX1BMVUdJTl9VUERBVEVfRkFJTEVEX1JFQVNPTjogJ+aPkuS7tuabtOaWsOWkseaVl++8jOWkseaVl+eivOeCuiR7Y29kZX3vvIzpjK/oqqTntIDpjITngrogXFxuICR7ZGF0YX0nLFxuICBQTFVHSU5fSEFORExFUl9QTFVHSU5fVVBEQVRFX0ZBSUxFRF9WQUxJRDogJ+aPkuS7tuabtOaWsOWkseaVl++8jOiri+i8uOWFpeato+eiuueahOaPkuS7tuWQjeeosSdcbn1cbiIsImltcG9ydCB7IElMb2NhbGVzIH0gZnJvbSAnLi96aC1DTidcblxuLyogZXNsaW50LWRpc2FibGUgbm8tdGVtcGxhdGUtY3VybHktaW4tc3RyaW5nICovXG5leHBvcnQgY29uc3QgRU46IElMb2NhbGVzID0ge1xuICBVUExPQURfRkFJTEVEOiAnVXBsb2FkIGZhaWxlZCcsXG4gIENIRUNLX1NFVFRJTkdTOiAnUGxlYXNlIGNoZWNrIHlvdXIgc2V0dGluZ3MnLFxuICBDSEVDS19TRVRUSU5HU19BTkRfTkVUV09SSzogJ1BsZWFzZSBjaGVjayB5b3VyIHNldHRpbmdzIGFuZCBuZXR3b3JrJyxcbiAgVVBMT0FEX0ZBSUxFRF9SRUFTT046ICdFcnJvciBjb2RlOiAke2NvZGV9LCBwbGVhc2Ugb3BlbiB0aGUgYnJvd3NlciBhbmQgcGFzdGUgdGhlIGFkZHJlc3MgdG8gc2VlIHRoZSByZWFzb24nLFxuICBTRVJWRVJfRVJST1I6ICdTZXJ2ZXIgZXJyb3IsIHBsZWFzZSB0cnkgYWdhaW4gbGF0ZXInLFxuICBBVVRIX0ZBSUxFRDogJ0F1dGhlbnRpY2F0aW9uIGZhaWxlZCcsXG5cbiAgLy8gc21tc1xuICBQSUNCRURfU01NUzogJ1NNLk1TJyxcbiAgUElDQkVEX1NNTVNfVE9LRU46ICdTZXQgVG9rZW4nLFxuICBQSUNCRURfU01NU19NRVNTQUdFX1RPS0VOOiAnUGxlYXNlIGVudGVyIHRoZSB0b2tlbicsXG4gIFBJQ0JFRF9TTU1TX0JBQ0tVUF9ET01BSU46ICdTZXQgQmFja3VwIFVwbG9hZCBEb21haW4nLFxuICBQSUNCRURfU01NU19NRVNTQUdFX0JBQ0tVUF9ET01BSU46ICdFeC4gc21tcy5hcHAnLFxuXG4gIC8vYWR2YW5jZWRwbGlzdFxuICBQSUNCRURfQURWQU5DRURQTElTVDogJ0FkdmFuY2VkJyxcbiAgUElDQkVEX0FEVkFOQ0VEUExJU1RfRU5EUE9JTlQ6ICdTZXQgRW5kcG9pbnQnLFxuICBQSUNCRURfQURWQU5DRURQTElTVF9NRVNTQUdFX0VORFBPSU5UOiAnUGxlYXNlIGVudGVyIHRoZSBlbmRwb2ludCcsXG4gIFBJQ0JFRF9BRFZBTkNFRFBMSVNUX01FVEhPRDogJ1NldCBNZXRob2QnLFxuICBQSUNCRURfQURWQU5DRURQTElTVF9NRVNTQUdFX01FVEhPRDogJ1BsZWFzZSBzZWxlY3QgdGhlIHJlcXVlc3QgbWV0aG9kJyxcbiAgUElDQkVEX0FEVkFOQ0VEUExJU1RfRk9STV9EQVRBX0tFWTogJ1NldCBGb3JtRGF0YSBLZXknLFxuICBQSUNCRURfQURWQU5DRURQTElTVF9NRVNTQUdFX0ZPUk1fREFUQV9LRVk6ICdQbGVhc2UgZW50ZXIgdGhlIEZvcm1EYXRhIGtleScsXG4gIFBJQ0JFRF9BRFZBTkNFRFBMSVNUX0hFQURFUlM6ICdTZXQgSGVhZGVycycsXG4gIFBJQ0JFRF9BRFZBTkNFRFBMSVNUX01FU1NBR0VfSEVBREVSUzogJ3N1Y2ggYXMge1wiQ29udGVudC1UeXBlXCI6IFwibXVsdGlwYXJ0L2Zvcm0tZGF0YVwifScsXG4gIFBJQ0JFRF9BRFZBTkNFRFBMSVNUX0JPRFk6ICdTZXQgQm9keScsXG4gIFBJQ0JFRF9BRFZBTkNFRFBMSVNUX01FU1NBR0VfQk9EWTogJ3N1Y2ggYXMge1wia2V5XCI6IFwidmFsdWVcIn0nLFxuICBQSUNCRURfQURWQU5DRURQTElTVF9DVVNUT01fUFJFRklYOiAnU2V0IEN1c3RvbSBQcmVmaXgnLFxuICBQSUNCRURfQURWQU5DRURQTElTVF9NRVNTQUdFX0NVU1RPTV9QUkVGSVg6ICdzdWNoIGFzIGh0dHBzOi8vZXhhbXBsZS5jb20vJyxcbiAgUElDQkVEX0FEVkFOQ0VEUExJU1RfUkVTX0RBVEFfUEFUSDogJ1NldCBSZXNwb25zZSBEYXRhIFBhdGgnLFxuICBQSUNCRURfQURWQU5DRURQTElTVF9NRVNTQUdFX1JFU19EQVRBX1BBVEg6ICdzdWNoIGFzIGRhdGEudXJsJyxcbiAgLy8gbG9jYWxcbiAgUElDQkVEX0xPQ0FMOiAnTG9jYWwnLFxuICBQSUNCRURfTE9DQUxfUEFUSDogJ1NldCBQYXRoJyxcbiAgUElDQkVEX0xPQ0FMX01FU1NBR0VfUEFUSDogJ0V4LiAvVXNlcnMvbmFtZS9QaWN0dXJlcy8nLFxuICBQSUNCRURfTE9DQUxfQ1VTVE9NVVJMOiAnU2V0IEN1c3RvbSBVUkwnLFxuICBQSUNCRURfTE9DQUxfTUVTU0FHRV9DVVNUT01VUkw6ICdFeC4gaHR0cHM6Ly90ZXN0LmNvbScsXG4gIFBJQ0JFRF9MT0NBTF9XRUJQQVRIOiAnU2V0IFdlYiBQYXRoJyxcbiAgUElDQkVEX0xPQ0FMX01FU1NBR0VfV0VCUEFUSDogJ1VzZWQgdG8gZ2VuZXJhdGUgdXJsIHBhdGgnLFxuXG4gIC8vIGFsaXN0XG4gIFBJQ0JFRF9BTElTVF9QTElTVDogJ0FMaXN0JyxcbiAgUElDQkVEX0FMSVNUX1VSTDogJ1NldCBVUkwnLFxuICBQSUNCRURfQUxJU1RfTUVTU0FHRV9VUkw6ICdFeC4gaHR0cHM6Ly9hbGlzdC5leGFtcGxlLmNvbScsXG4gIFBJQ0JFRF9BTElTVF9UT0tFTjogJ1NldCBUb2tlbicsXG4gIFBJQ0JFRF9BTElTVF9NRVNTQUdFX1RPS0VOOiAnUGxlYXNlIGVudGVyIHRoZSB0b2tlbihjaG9vc2Ugb25lIG9mIGVpdGhlciB1c2VybmFtZS1wYXNzd29yZCBvciB0b2tlbiknLFxuICBQSUNCRURfQUxJU1RfVVNFUk5BTUU6ICdTZXQgVXNlcm5hbWUnLFxuICBQSUNCRURfQUxJU1RfTUVTU0FHRV9VU0VSTkFNRTogJ1BsZWFzZSBlbnRlciB0aGUgdXNlcm5hbWUoY2hvb3NlIG9uZSBvZiBlaXRoZXIgdXNlcm5hbWUtcGFzc3dvcmQgb3IgdG9rZW4pJyxcbiAgUElDQkVEX0FMSVNUX1BBU1NXT1JEOiAnU2V0IFBhc3N3b3JkJyxcbiAgUElDQkVEX0FMSVNUX01FU1NBR0VfUEFTU1dPUkQ6ICdQbGVhc2UgZW50ZXIgdGhlIHBhc3N3b3JkJyxcbiAgUElDQkVEX0FMSVNUX1VQTE9BRF9QQVRIOiAnU2V0IFVwbG9hZCBQYXRoJyxcbiAgUElDQkVEX0FMSVNUX01FU1NBR0VfVVBMT0FEX1BBVEg6ICdFeC4gL3Rlc3QvJyxcbiAgUElDQkVEX0FMSVNUX1dFQl9QQVRIOiAnU2V0IFdlYiBQYXRoJyxcbiAgUElDQkVEX0FMSVNUX01FU1NBR0VfV0VCX1BBVEg6ICdVc2VkIHRvIGdlbmVyYXRlIHVybCBwYXRoJyxcbiAgUElDQkVEX0FMSVNUX0NVU1RPTVVSTDogJ1NldCBDdXN0b20gVVJMJyxcbiAgUElDQkVEX0FMSVNUX01FU1NBR0VfQ1VTVE9NVVJMOiAnRXguIGh0dHBzOi8vdGVzdC5jb20nLFxuXG4gIC8vIEFsaS1jbG91ZFxuICBQSUNCRURfQUxJQ0xPVUQ6ICdBbGkgQ2xvdWQnLFxuICBQSUNCRURfQUxJQ0xPVURfQUNDRVNTS0VZSUQ6ICdTZXQgYWNjZXNzS2V5SWQnLFxuICBQSUNCRURfQUxJQ0xPVURfQUNDRVNTS0VZU0VDUkVUOiAnU2V0IGFjY2Vzc0tleVNlY3JldCcsXG4gIFBJQ0JFRF9BTElDTE9VRF9CVUNLRVQ6ICdTZXQgQnVja2V0JyxcbiAgUElDQkVEX0FMSUNMT1VEX0FSRUE6ICdTZXQgQXJlYScsXG4gIFBJQ0JFRF9BTElDTE9VRF9QQVRIOiAnU2V0IFBhdGgnLFxuICBQSUNCRURfQUxJQ0xPVURfQ1VTVE9NVVJMOiAnU2V0IEN1c3RvbSBVUkwnLFxuICBQSUNCRURfQUxJQ0xPVURfT1BUSU9OUzogJ1NldCBVUkwgU3VmZml4JyxcbiAgUElDQkVEX0FMSUNMT1VEX01FU1NBR0VfQVJFQTogJ0V4LiBvc3MtY24tYmVpamluZycsXG4gIFBJQ0JFRF9BTElDTE9VRF9NRVNTQUdFX1BBVEg6ICdFeC4gdGVzdC8nLFxuICBQSUNCRURfQUxJQ0xPVURfTUVTU0FHRV9PUFRJT05TOiAnRXguID94LW9zcy1wcm9jZXNzPXh4eCcsXG4gIFBJQ0JFRF9BTElDTE9VRF9NRVNTQUdFX0NVU1RPTVVSTDogJ0V4LiBodHRwczovL3Rlc3QuY29tJyxcblxuICAvLyBUZW5jZW50LWNsb3VkXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVUQ6ICdUZW5jZW50IENsb3VkJyxcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9WRVJTSU9OOiAnQ2hvb3NlIENPUyB2ZXJzaW9uJyxcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9TRUNSRVRJRDogJ1NldCBTZWNyZXRJZCcsXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfU0VDUkVUS0VZOiAnU2V0IFNlY3JldEtleScsXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfQVBQSUQ6ICdTZXQgQXBwSWQnLFxuICBQSUNCRURfVEVOQ0VOVENMT1VEX0JVQ0tFVDogJ1NldCBCdWNrZXQnLFxuICBQSUNCRURfVEVOQ0VOVENMT1VEX0FSRUE6ICdTZXQgQXJlYScsXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfRU5EUE9JTlQ6ICdTZXQgRW5kcG9pbnQnLFxuICBQSUNCRURfVEVOQ0VOVENMT1VEX1BBVEg6ICdTZXQgUGF0aCcsXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfT1BUSU9OUzogJ1NldCBVUkwgU3VmZml4JyxcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9DVVNUT01VUkw6ICdTZXQgQ3VzdG9tIFVSTCcsXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfTUVTU0FHRV9BUFBJRDogJ0V4LiAxMjM0NTY3ODkwJyxcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9NRVNTQUdFX0FSRUE6ICdFeC4gYXAtYmVpamluZycsXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfTUVTU0FHRV9QQVRIOiAnRXguIHRlc3QvJyxcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9NRVNTQUdFX0NVU1RPTVVSTDogJ0V4LiBodHRwOi8vdGVzdC5jb20nLFxuICBQSUNCRURfVEVOQ0VOVENMT1VEX01FU1NBR0VfT1BUSU9OUzogJ0V4LiA/aW1hZ2VNb2dyMicsXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfTUVTU0FHRV9FTkRQT0lOVDogJ0V4LiBjb3MtaW50ZXJuYWwuYWNjZWxlcmF0ZS50ZW5jZW50Y29zLmNuJyxcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9TTElNOiAnU2V0IEltYWdlU2xpbScsXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfU0xJTV9USVA6XG4gICAgJ0ltYWdlIGV4dHJlbWVseSBpbnRlbGxpZ2VudCBjb21wcmVzc2lvbiwgcGxlYXNlIHJlZmVyIHRvIHRoZSBbZG9jdW1lbnQgZGVzY3JpcHRpb25dKGh0dHBzOi8vY2xvdWQudGVuY2VudC5jb20vZG9jdW1lbnQvcHJvZHVjdC80MzYvODY0MzgpJyxcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9TTElNX0NPTkZJUk06ICdPUEVOJyxcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9TTElNX0NBTkNFTDogJ0NMT1NFJyxcbiAgLy8gR2l0SHViXG4gIFBJQ0JFRF9HSVRIVUI6ICdHaXRIdWInLFxuICBQSUNCRURfR0lUSFVCX1RPS0VOOiAnU2V0IFRva2VuJyxcbiAgUElDQkVEX0dJVEhVQl9SRVBPOiAnU2V0IFJlcG8gTmFtZScsXG4gIFBJQ0JFRF9HSVRIVUJfUEFUSDogJ1NldCBQYXRoJyxcbiAgUElDQkVEX0dJVEhVQl9CUkFOQ0g6ICdTZXQgQnJhbmNoJyxcbiAgUElDQkVEX0dJVEhVQl9DVVNUT01VUkw6ICdTZXQgQ3VzdG9tIFVSTCcsXG4gIFBJQ0JFRF9HSVRIVUJfTUVTU0FHRV9SRVBPOiAnRXguIHVzZXJuYW1lL3JlcG8nLFxuICBQSUNCRURfR0lUSFVCX01FU1NBR0VfQlJBTkNIOiAnRXguIG1haW4nLFxuICBQSUNCRURfR0lUSFVCX01FU1NBR0VfUEFUSDogJ0V4LiB0ZXN0LycsXG4gIFBJQ0JFRF9HSVRIVUJfTUVTU0FHRV9DVVNUT01VUkw6ICdFeC4gaHR0cHM6Ly90ZXN0LmNvbScsXG5cbiAgLy8gcWluaXVcbiAgUElDQkVEX1FJTklVOiAnUWluaXUnLFxuICBQSUNCRURfUUlOSVVfQUNDRVNTS0VZOiAnU2V0IEFjY2Vzc0tleScsXG4gIFBJQ0JFRF9RSU5JVV9TRUNSRVRLRVk6ICdTZXQgU2VjcmV0S2V5JyxcbiAgUElDQkVEX1FJTklVX0JVQ0tFVDogJ1NldCBCdWNrZXQnLFxuICBQSUNCRURfUUlOSVVfUEFUSDogJ1NldCBQYXRoJyxcbiAgUElDQkVEX1FJTklVX1VSTDogJ1NldCBVUkwnLFxuICBQSUNCRURfUUlOSVVfT1BUSU9OUzogJ1NldCBVUkwgU3VmZml4JyxcbiAgUElDQkVEX1FJTklVX0FSRUE6ICdTZXQgQXJlYScsXG4gIFBJQ0JFRF9RSU5JVV9NRVNTQUdFX1BBVEg6ICdFeC4gdGVzdC8nLFxuICBQSUNCRURfUUlOSVVfTUVTU0FHRV9BUkVBOiAnRXguIHowJyxcbiAgUElDQkVEX1FJTklVX01FU1NBR0VfT1BUSU9OUzogJ0V4LiA/aW1hZ2VzbGltJyxcbiAgUElDQkVEX1FJTklVX01FU1NBR0VfVVJMOiAnRXguIGh0dHBzOi8veHh4Lnl5eS5nbGIuY2xvdWRkbi5jb20nLFxuXG4gIC8vIGltZ3VyXG4gIFBJQ0JFRF9JTUdVUjogJ0ltZ3VyJyxcbiAgUElDQkVEX0lNR1VSX0NMSUVOVElEOiAnU2V0IENsaWVudElkJyxcbiAgUElDQkVEX0lNR1VSX1VTRVJOQU1FOiAnU2V0IFVzZXJuYW1lJyxcbiAgUElDQkVEX0lNR1VSX0FDQ0VTU19UT0tFTjogJ1NldCBBY2Nlc3MgVG9rZW4nLFxuICBQSUNCRURfSU1HVVJfQUxCVU06ICdTZXQgQWxidW0gTmFtZScsXG4gIFBJQ0JFRF9JTUdVUl9QUk9YWTogJ1NldCBQcm94eScsXG4gIFBJQ0JFRF9JTUdVUl9NRVNTQUdFX0NMSUVOVElEOiAnRmlsbCBpbiB3aGVuIHlvdSBuZWVkIHRvIHVwbG9hZCBhcyBhbm9ueW1vdXMnLFxuICBQSUNCRURfSU1HVVJfTUVTU0FHRV9VU0VSTkFNRTogJ0ZpbGwgaW4gd2hlbiB5b3UgbmVlZCB0byB1cGxvYWQgdG8gdGhlIGFjY291bnQnLFxuICBQSUNCRURfSU1HVVJfTUVTU0FHRV9BQ0NFU1NfVE9LRU46ICdGaWxsIGluIHdoZW4geW91IG5lZWQgdG8gdXBsb2FkIHRvIHRoZSBhY2NvdW50JyxcbiAgUElDQkVEX0lNR1VSX01FU1NBR0VfQUxCVU06ICdFeC4gdGVzdCcsXG4gIFBJQ0JFRF9JTUdVUl9NRVNTQUdFX1BST1hZOiAnRXguIGh0dHA6Ly8xMjcuMC4wLjE6MTA4MCcsXG5cbiAgLy8gdXB5dW5cbiAgUElDQkVEX1VQWVVOOiAnVXB5dW4nLFxuICBQSUNCRURfVVBZVU5fQlVDS0VUOiAnU2V0IEJ1Y2tldCcsXG4gIFBJQ0JFRF9VUFlVTl9FTkRQT0lOVDogJ1NldCBFbmRwb2ludCcsXG4gIFBJQ0JFRF9VUFlVTl9PUEVSQVRPUjogJ1NldCBPcGVyYXRvcicsXG4gIFBJQ0JFRF9VUFlVTl9QQVNTV09SRDogJ1NldCBPcGVyYXRvciBQYXNzd29yZCcsXG4gIFBJQ0JFRF9VUFlVTl9QQVRIOiAnU2V0IFBhdGgnLFxuICBQSUNCRURfVVBZVU5fVVJMOiAnU2V0IFVSTCcsXG4gIFBJQ0JFRF9VUFlVTl9PUFRJT05TOiAnU2V0IFVSTCBTdWZmaXgnLFxuICBQSUNCRURfVVBZVU5fQU5USV9MRUVDSF9UT0tFTjogJ1NldCBBbnRpLUxlZWNoIFRva2VuJyxcbiAgUElDQkVEX1VQWVVOX0VYUElSRV9USU1FOiAnU2V0IEV4cGlyZSBUaW1lKHNlY29uZHMpJyxcbiAgUElDQkVEX1VQWVVOX01FU1NBR0VfT1BFUkFUT1I6ICdFeC4gbWUnLFxuICBQSUNCRURfVVBZVU5fTUVTU0FHRV9QQVNTV09SRDogJ1BsZWFzZSB0eXBlIHRoZSBvcGVyYXRvciBwYXNzd29yZCcsXG4gIFBJQ0JFRF9VUFlVTl9NRVNTQUdFX1VSTDogJ0V4LiBodHRwOi8veHh4LnRlc3QudXBjZG4ubmV0JyxcbiAgUElDQkVEX1VQWVVOX01FU1NBR0VfT1BUSU9OUzogJ0V4LiAhaW1nc2xpbScsXG4gIFBJQ0JFRF9VUFlVTl9NRVNTQUdFX1BBVEg6ICdFeC4gdGVzdC8nLFxuICBQSUNCRURfVVBZVU5fTUVTU0FHRV9FTkRQT0lOVDogJ0V4LiBodHRwczovL3YwLmFwaS51cHl1bi5jb20nLFxuXG4gIC8vIHdlYmRhdlxuICBQSUNCRURfV0VCREFWUExJU1Q6ICdXZWJEQVYnLFxuICBQSUNCRURfV0VCREFWUExJU1RfSE9TVDogJ1NldCBIb3N0JyxcbiAgUElDQkVEX1dFQkRBVlBMSVNUX1NTTEVOQUJMRUQ6ICdFbmFibGUgSFRUUFMnLFxuICBQSUNCRURfV0VCREFWUExJU1RfVVNFUk5BTUU6ICdTZXQgVXNlcm5hbWUnLFxuICBQSUNCRURfV0VCREFWUExJU1RfUEFTU1dPUkQ6ICdTZXQgUGFzc3dvcmQnLFxuICBQSUNCRURfV0VCREFWUExJU1RfUEFUSDogJ1NldCBQYXRoJyxcbiAgUElDQkVEX1dFQkRBVlBMSVNUX1dFQlNJVEVfUEFUSDogJ1NldCBXZWJzaXRlIFBhdGgnLFxuICBQSUNCRURfV0VCREFWUExJU1RfQ1VTVE9NVVJMOiAnU2V0IEN1c3RvbSBVUkwnLFxuICBQSUNCRURfV0VCREFWUExJU1RfQVVUSFRZUEU6ICdTZXQgQXV0aCBUeXBlJyxcbiAgUElDQkVEX1dFQkRBVlBMSVNUX09QVElPTlM6ICdTZXQgVVJMIFN1ZmZpeCcsXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9NRVNTQUdFX0hPU1Q6ICdFeC4gaHR0cHM6Ly9leGFtcGxlLmNvbS93ZWJkYXYnLFxuICBQSUNCRURfV0VCREFWUExJU1RfTUVTU0FHRV9TU0xFTkFCTEVEOiAnRW5hYmxlIEhUVFBTJyxcbiAgUElDQkVEX1dFQkRBVlBMSVNUX01FU1NBR0VfVVNFUk5BTUU6ICdFeC4gbWUnLFxuICBQSUNCRURfV0VCREFWUExJU1RfTUVTU0FHRV9QQVNTV09SRDogJ1BsZWFzZSB0eXBlIHRoZSBwYXNzd29yZCcsXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9NRVNTQUdFX1BBVEg6ICdFeC4gdGVzdC8nLFxuICBQSUNCRURfV0VCREFWUExJU1RfTUVTU0FHRV9XRUJTSVRFX1BBVEg6ICdVc2VkIHRvIGdlbmVyYXRlIHRoZSBVUkwgb2YgdGhlIGltYWdlJyxcbiAgUElDQkVEX1dFQkRBVlBMSVNUX01FU1NBR0VfQ1VTVE9NVVJMOiAnRXguIGh0dHBzOi8vdGVzdC5jb20nLFxuICBQSUNCRURfV0VCREFWUExJU1RfTUVTU0FHRV9PUFRJT05TOiAnRXguID9rZXk9dmFsdWUnLFxuXG4gIC8vIHNmdHBwbGlzdFxuICBQSUNCRURfU0ZUUFBMSVNUOiAnU0ZUUCBCdWlsZGluJyxcbiAgUElDQkVEX1NGVFBQTElTVF9IT1NUOiAnU2V0IEhvc3QnLFxuICBQSUNCRURfU0ZUUFBMSVNUX1BPUlQ6ICdTZXQgUG9ydCcsXG4gIFBJQ0JFRF9TRlRQUExJU1RfVVNFUk5BTUU6ICdTZXQgVXNlcm5hbWUnLFxuICBQSUNCRURfU0ZUUFBMSVNUX1BBU1NXT1JEOiAnU2V0IFBhc3N3b3JkJyxcbiAgUElDQkVEX1NGVFBQTElTVF9QUklWQVRFS0VZOiAnU2V0IFByaXZhdGUgS2V5JyxcbiAgUElDQkVEX1NGVFBQTElTVF9QUklWQVRFS0VZX1BBU1NQSFJBU0U6ICdTZXQgUHJpdmF0ZSBLZXkgUGFzc3BocmFzZScsXG4gIFBJQ0JFRF9TRlRQUExJU1RfVVBMT0FEUEFUSDogJ1NldCBVcGxvYWQgUGF0aCcsXG4gIFBJQ0JFRF9TRlRQUExJU1RfQ1VTVE9NVVJMOiAnU2V0IEN1c3RvbSBVUkwnLFxuICBQSUNCRURfU0ZUUFBMSVNUX1dFQlNJVEVfUEFUSDogJ1NldCBXZWJzaXRlIFBhdGgnLFxuICBQSUNCRURfU0ZUUFBMSVNUX0ZJTEVfVVNFUjogJ1NldCBGaWxlIFVzZXI6R3JvdXAnLFxuICBQSUNCRURfU0ZUUFBMSVNUX0ZJTEVfTU9ERTogJ1NldCBGaWxlIE1vZGUnLFxuICBQSUNCRURfU0ZUUFBMSVNUX0RJUl9NT0RFOiAnU2V0IERpcmVjdG9yeSBNb2RlJyxcbiAgUElDQkVEX1NGVFBQTElTVF9NRVNTQUdFX0hPU1Q6ICdFeC4gMS4xLjEuMycsXG4gIFBJQ0JFRF9TRlRQUExJU1RfTUVTU0FHRV9QT1JUOiAnRGVmYXVsdCAyMicsXG4gIFBJQ0JFRF9TRlRQUExJU1RfTUVTU0FHRV9QUklWQVRFS0VZOiAnRXguIC9Vc2Vycy94eHgvLnNzaC9pZF9yc2EnLFxuICBQSUNCRURfU0ZUUFBMSVNUX01FU1NBR0VfUFJJVkFURUtFWV9QQVNTUEhSQVNFOiAnUGxlYXNlIHR5cGUgdGhlIHByaXZhdGUga2V5IHBhc3NwaHJhc2UnLFxuICBQSUNCRURfU0ZUUFBMSVNUX01FU1NBR0VfVVBMT0FEUEFUSDogJ0V4LiB0ZXN0LycsXG4gIFBJQ0JFRF9TRlRQUExJU1RfTUVTU0FHRV9DVVNUT01VUkw6ICdFeC4gaHR0cHM6Ly90ZXN0LmNvbScsXG4gIFBJQ0JFRF9TRlRQUExJU1RfTUVTU0FHRV9XRUJTSVRFX1BBVEg6ICdVc2VkIHRvIGdlbmVyYXRlIHRoZSBVUkwgb2YgdGhlIGltYWdlJyxcbiAgUElDQkVEX1NGVFBQTElTVF9NRVNTQUdFX0ZJTEVfVVNFUjogJ0V4LiB3d3c6ZGF0YScsXG4gIFBJQ0JFRF9TRlRQUExJU1RfTUVTU0FHRV9GSUxFX01PREU6ICdFeC4gMDY2NCcsXG4gIFBJQ0JFRF9TRlRQUExJU1RfTUVTU0FHRV9ESVJfTU9ERTogJ0V4LiAwNzc1JyxcblxuICAvLyBQaWNMaXN0XG4gIFBJQ0JFRF9QSUNMSVNUOiAnUGljTGlzdCcsXG4gIFBJQ0JFRF9QSUNMSVNUX0hPU1Q6ICdTZXQgSG9zdCcsXG4gIFBJQ0JFRF9QSUNMSVNUX1BPUlQ6ICdTZXQgUG9ydCcsXG4gIFBJQ0JFRF9QSUNMSVNUX1BJQ0JFRDogJ1NldCBQaWNCZWQnLFxuICBQSUNCRURfUElDTElTVF9DT05GSUdOQU1FOiAnU2V0IENvbmZpZyBOYW1lJyxcbiAgUElDQkVEX1BJQ0xJU1RfS0VZOiAnU2V0IEtleScsXG5cbiAgLy8gTHNreSBQcm9cbiAgUElDQkVEX0xTS1lfUExJU1Q6ICdMc2t5JyxcbiAgUElDQkVEX0xTS1lfVkVSU0lPTjogJ1NldCBWZXJzaW9uJyxcbiAgUElDQkVEX0xTS1lfTUVTU0FHRV9WRVJTSU9OOiAnRXguIHYxJyxcbiAgUElDQkVEX0xTS1lfSE9TVDogJ1NldCBIb3N0JyxcbiAgUElDQkVEX0xTS1lfTUVTU0FHRV9IT1NUOiAnRXguIGh0dHBzOi8vbHNreS5jbycsXG4gIFBJQ0JFRF9MU0tZX1RPS0VOOiAnU2V0IFRva2VuJyxcbiAgUElDQkVEX0xTS1lfTUVTU0FHRV9UT0tFTjogJ0V4LiB4eHgnLFxuICBQSUNCRURfTFNLWV9TVFJBVEVHWV9JRDogJ1NldCBTdHJhdGVneSBJRCcsXG4gIFBJQ0JFRF9MU0tZX01FU1NBR0VfU1RSQVRFR1lfSUQ6ICdFeC4gMScsXG4gIFBJQ0JFRF9MU0tZX0FMQlVNX0lEOiAnU2V0IEFsYnVtIElEJyxcbiAgUElDQkVEX0xTS1lfTUVTU0FHRV9BTEJVTV9JRDogJ09wdGlvbmFsLCBvbmx5IGZvciBWMicsXG4gIFBJQ0JFRF9MU0tZX1BFUk1JU1NJT046ICdTZXQgUGVybWlzc2lvbicsXG4gIFBJQ0JFRF9MU0tZX01FU1NBR0VfUEVSTUlTU0lPTjogJ0V4LiBwdWJsaWMnLFxuXG4gIC8vIEF3c1MzUGxpc3RcbiAgUElDQkVEX0FXU1MzUExJU1Q6ICdBV1MgUzMnLFxuICBQSUNCRURfQVdTUzNQTElTVF9BQ0NFU1NLRVlJRDogJ1NldCBBY2Nlc3NLZXlJZCcsXG4gIFBJQ0JFRF9BV1NTM1BMSVNUX1NFQ1JFVF9BQ0NFU1NLRVk6ICdTZXQgU2VjcmV0QWNjZXNzS2V5JyxcbiAgUElDQkVEX0FXU1MzUExJU1RfQlVDS0VUOiAnU2V0IEJ1Y2tldCcsXG4gIFBJQ0JFRF9BV1NTM1BMSVNUX1JFR0lPTjogJ1NldCBSZWdpb24nLFxuICBQSUNCRURfQVdTUzNQTElTVF9VUExPQURQQVRIOiAnU2V0IFVwbG9hZCBQYXRoJyxcbiAgUElDQkVEX0FXU1MzUExJU1RfRU5EUE9JTlQ6ICdTZXQgRW5kcG9pbnQnLFxuICBQSUNCRURfQVdTUzNQTElTVF9QUk9YWTogJ1NldCBQcm94eScsXG4gIFBJQ0JFRF9BV1NTM1BMSVNUX1VSTFBSRUZJWDogJ1NldCBDdXN0b20gVVJMJyxcbiAgUElDQkVEX0FXU1MzUExJU1RfUEFUSFNUWUxFQUNDRVNTOiAnU2V0IFBhdGhTdHlsZUFjY2VzcycsXG4gIFBJQ0JFRF9BV1NTM1BMSVNUX1JFSkVDVFVOQVVUSE9SSVpFRDogJ1NldCBSZWplY3RVbmF1dGhvcml6ZWQnLFxuICBQSUNCRURfQVdTUzNQTElTVF9BQ0w6ICdTZXQgQUNMJyxcbiAgUElDQkVEX0FXU1MzUExJU1RfRElTQUJMRUJVQ0tFVFBSRUZJWFRPVVJMOlxuICAgICd3aGVuIGBwYXRoU3R5bGVBY2Nlc3NgIGlzIGVuYWJsZWQsIHdoZXRoZXIgdG8gZGlzYWJsZSBhZGRpbmcgYnVja2V0IHByZWZpeCB0byB1cmwnLFxuICBQSUNCRURfQVdTUzNQTElTVF9NRVNTQUdFX0FDQ0VTU0tFWUlEOiAnRXguIHh4eCcsXG4gIFBJQ0JFRF9BV1NTM1BMSVNUX01FU1NBR0VfU0VDUkVUX0FDQ0VTU0tFWTogJ0V4LiB4eHgnLFxuICBQSUNCRURfQVdTUzNQTElTVF9NRVNTQUdFX0JVQ0tFVDogJ0V4LiB0ZXN0JyxcbiAgUElDQkVEX0FXU1MzUExJU1RfTUVTU0FHRV9SRUdJT046ICdFeC4gdXMtZWFzdC0xJyxcbiAgUElDQkVEX0FXU1MzUExJU1RfTUVTU0FHRV9VUExPQURQQVRIOiAnRXguIHRlc3Qve2Z1bGxOYW1lfScsXG4gIFBJQ0JFRF9BV1NTM1BMSVNUX01FU1NBR0VfRU5EUE9JTlQ6ICdFeC4gaHR0cHM6Ly9zMy51cy1lYXN0LTEuYW1hem9uYXdzLmNvbScsXG4gIFBJQ0JFRF9BV1NTM1BMSVNUX01FU1NBR0VfUFJPWFk6ICdFeC4gaHR0cDovLzEyNy4wLjAuMToxMDgwJyxcbiAgUElDQkVEX0FXU1MzUExJU1RfTUVTU0FHRV9VUkxQUkVGSVg6ICdFeC4gaHR0cHM6Ly90ZXN0LmNvbScsXG4gIFBJQ0JFRF9BV1NTM1BMSVNUX01FU1NBR0VfUEFUSFNUWUxFQUNDRVNTOiAnRW5hYmxlIHdoZW4gYHBhdGhTdHlsZUFjY2Vzc2AgaXMgcmVxdWlyZWQnLFxuICBQSUNCRURfQVdTUzNQTElTVF9NRVNTQUdFX1JFSkVDVFVOQVVUSE9SSVpFRDogJ0VuYWJsZSB3aGVuIHJlamVjdGluZyBpbnZhbGlkIFRMUyBjZXJ0aWZpY2F0ZSBjb25uZWN0aW9uIGlzIHJlcXVpcmVkJyxcbiAgUElDQkVEX0FXU1MzUExJU1RfTUVTU0FHRV9BQ0w6ICdFeC4gcHVibGljLXJlYWQnLFxuICBQSUNCRURfQVdTUzNQTElTVF9NRVNTQUdFX0RJU0FCTEVCVUNLRVRQUkVGSVhUT1VSTDogJ0VuYWJsZSB3aGVuIGBwYXRoU3R5bGVBY2Nlc3NgIGlzIGVuYWJsZWQnLFxuXG4gIEJVSUxESU5fUkVOQU1FOiAnUmVuYW1lIFNldHRpbmdzJyxcbiAgQlVJTERJTl9SRU5BTUVfRk9STUFUOiAnU2V0IHJlbmFtZSBmb3JtYXQnLFxuICBCVUlMRElOX1JFTkFNRV9FTkFCTEU6ICdFbmFibGUgcmVuYW1lJyxcblxuICBCVUlMRElOX1dBVEVSTUFSSzogJ1dhdGVybWFyayBTZXR0aW5ncycsXG4gIEJVSUxESU5fV0FURVJNQVJLX0lTQUREV0FURVJNQVJLOiAnV2hldGhlciB0byBhZGQgd2F0ZXJtYXJrJyxcbiAgQlVJTERJTl9XQVRFUk1BUktfTUVTU0FHRV9JU0FERFdBVEVSTUFSSzogJ0VuYWJsZSB3aGVuIHdhdGVybWFyayBpcyByZXF1aXJlZCcsXG4gIEJVSUxESU5fV0FURVJNQVJLX1dBVEVSTUFSS1RZUEU6ICdTZXQgd2F0ZXJtYXJrIHR5cGUnLFxuICBCVUlMRElOX1dBVEVSTUFSS19NRVNTQUdFX1dBVEVSTUFSS1RZUEU6ICdQbGVhc2Ugc2VsZWN0IHdhdGVybWFyayB0eXBlJyxcbiAgQlVJTERJTl9XQVRFUk1BUktfSVNGVUxMU0NSRUVOV0FURVJNQVJLOiAnV2hldGhlciB0byB1c2UgZnVsbC1zY3JlZW4gd2F0ZXJtYXJrJyxcbiAgQlVJTERJTl9XQVRFUk1BUktfTUVTU0FHRV9JU0ZVTExTQ1JFRU5XQVRFUk1BUks6ICdFbmFibGUgd2hlbiBmdWxsLXNjcmVlbiB3YXRlcm1hcmsgaXMgcmVxdWlyZWQnLFxuICBCVUlMRElOX1dBVEVSTUFSS19XQVRFUk1BUktERUdSRUU6ICdTZXQgd2F0ZXJtYXJrIGFuZ2xlJyxcbiAgQlVJTERJTl9XQVRFUk1BUktfTUVTU0FHRV9XQVRFUk1BUktERUdSRUU6ICdQbGVhc2UgZW50ZXIgYSBudW1iZXInLFxuICBCVUlMRElOX1dBVEVSTUFSS19XQVRFUk1BUktURVhUOiAnU2V0IHdhdGVybWFyayB0ZXh0JyxcbiAgQlVJTERJTl9XQVRFUk1BUktfTUVTU0FHRV9XQVRFUk1BUktURVhUOiAnUGxlYXNlIGVudGVyIHdhdGVybWFyayB0ZXh0JyxcbiAgQlVJTERJTl9XQVRFUk1BUktfV0FURVJNQVJLVEVYVEZPTlRQQVRIOiAnU2V0IHdhdGVybWFyayBmb250JyxcbiAgQlVJTERJTl9XQVRFUk1BUktfTUVTU0FHRV9XQVRFUk1BUktGT05UUEFUSDogJ1BsZWFzZSBlbnRlciB0aGUgd2F0ZXJtYXJrIGZvbnQgZmlsZSBwYXRoJyxcbiAgQlVJTERJTl9XQVRFUk1BUktfV0FURVJNQVJLRk9OVFJBVElPOiAnU2V0IHRoZSByYXRpbyBvZiB0aGUgd2F0ZXJtYXJrIHRvIHRoZSBpbWFnZScsXG4gIEJVSUxESU5fV0FURVJNQVJLX01FU1NBR0VfV0FURVJNQVJLRk9OVFJBVElPOiAnUGxlYXNlIGVudGVyIGEgbnVtYmVyIGJldHdlZW4gMC0xJyxcbiAgQlVJTERJTl9XQVRFUk1BUktfV0FURVJNQVJLRk9OVENPTE9SOiAnU2V0IHdhdGVybWFyayBmb250IGNvbG9yJyxcbiAgQlVJTERJTl9XQVRFUk1BUktfTUVTU0FHRV9XQVRFUk1BUktGT05UQ09MT1I6ICdQbGVhc2UgZW50ZXIgdGhlIFJHQiBjb2xvciB2YWx1ZScsXG4gIEJVSUxESU5fV0FURVJNQVJLX1dBVEVSTUFSS0lNQUdFUEFUSDogJ1NldCB3YXRlcm1hcmsgaW1hZ2UgcGF0aCcsXG4gIEJVSUxESU5fV0FURVJNQVJLX01FU1NBR0VfV0FURVJNQVJLSU1BR0VQQVRIOiAnUGxlYXNlIGVudGVyIHRoZSB3YXRlcm1hcmsgaW1hZ2UgcGF0aCcsXG4gIEJVSUxESU5fV0FURVJNQVJLX1dBVEVSTUFSS1BPU0lUSU9OOiAnU2V0IHdhdGVybWFyayBwb3NpdGlvbicsXG4gIEJVSUxESU5fV0FURVJNQVJLX01FU1NBR0VfV0FURVJNQVJLUE9TSVRJT046ICdQbGVhc2Ugc2VsZWN0IHdhdGVybWFyayBwb3NpdGlvbicsXG5cbiAgQlVJTERJTl9DT01QUkVTUzogJ1Byb2Nlc3NpbmcgU2V0dGluZ3MnLFxuICBCVUlMRElOX0NPTVBSRVNTX1FVQUxJVFk6ICdTZXQgaW1hZ2UgcXVhbGl0eScsXG4gIEJVSUxESU5fQ09NUFJFU1NfTUVTU0FHRV9RVUFMSVRZOiAnUGxlYXNlIGVudGVyIGFuIGludGVnZXIgYmV0d2VlbiAxLTEwMCcsXG4gIEJVSUxESU5fQ09NUFJFU1NfSVNDT05WRVJUOiAnV2hldGhlciB0byBwZXJmb3JtIGZvcm1hdCBjb252ZXJzaW9uJyxcbiAgQlVJTERJTl9DT01QUkVTU19NRVNTQUdFX0lTQ09OVkVSVDogJ0VuYWJsZSB3aGVuIGZvcm1hdCBjb252ZXJzaW9uIGlzIHJlcXVpcmVkJyxcbiAgQlVJTERJTl9DT01QUkVTU19DT05WRVJURk9STUFUOiAnU2V0IGNvbnZlcnNpb24gZm9ybWF0JyxcbiAgQlVJTERJTl9DT01QUkVTU19NRVNTQUdFX0NPTlZFUlRGT1JNQVQ6ICdQbGVhc2Ugc2VsZWN0IGNvbnZlcnNpb24gZm9ybWF0JyxcbiAgQlVJTERJTl9DT01QUkVTU19JU1JFU0laRTogJ1doZXRoZXIgdG8gcmVzaXplIHRoZSBpbWFnZScsXG4gIEJVSUxESU5fQ09NUFJFU1NfTUVTU0FHRV9JU1JFU0laRTogJ0VuYWJsZSB3aGVuIGltYWdlIHJlc2l6aW5nIGlzIHJlcXVpcmVkJyxcbiAgQlVJTERJTl9DT01QUkVTU19SRVNJWkVXSURUSDogJ1NldCByZXNpemluZyB3aWR0aCcsXG4gIEJVSUxESU5fQ09NUFJFU1NfTUVTU0FHRV9SRVNJWkVXSURUSDogJ1BsZWFzZSBlbnRlciBhIG51bWJlcicsXG4gIEJVSUxESU5fQ09NUFJFU1NfUkVTSVpFSEVJR0hUOiAnU2V0IHJlc2l6aW5nIGhlaWdodCcsXG4gIEJVSUxESU5fQ09NUFJFU1NfTUVTU0FHRV9SRVNJWkVIRUlHSFQ6ICdQbGVhc2UgZW50ZXIgYSBudW1iZXInLFxuICBCVUlMRElOX0NPTVBSRVNTX0lTUkVTSVpFQllQRVJDRU5UOiAnV2hldGhlciB0byByZXNpemUgdGhlIGltYWdlIGJ5IHBlcmNlbnRhZ2UnLFxuICBCVUlMRElOX0NPTVBSRVNTX01FU1NBR0VfSVNSRVNJWkVCWVBFUkNFTlQ6ICdFbmFibGUgd2hlbiByZXNpemluZyBieSBwZXJjZW50YWdlIGlzIHJlcXVpcmVkJyxcbiAgQlVJTERJTl9DT01QUkVTU19JU0ZMSVA6ICdXaGV0aGVyIHRvIGZsaXAgdGhlIGltYWdlIHZlcnRpY2FsbHknLFxuICBCVUlMRElOX0NPTVBSRVNTX0lTRkxPUDogJ1doZXRoZXIgdG8gZmxpcCB0aGUgaW1hZ2UgaG9yaXpvbnRhbGx5JyxcbiAgQlVJTERJTl9DT01QUkVTU19SRVNJWkVQRVJDRU5UOiAnU2V0IHJlc2l6aW5nIHBlcmNlbnRhZ2UnLFxuICBCVUlMRElOX0NPTVBSRVNTX01FU1NBR0VfUkVTSVpFUEVSQ0VOVDogJ1BsZWFzZSBlbnRlciBhIG51bWJlcicsXG4gIEJVSUxESU5fQ09NUFJFU1NfU0tJUFJFU0laRU9GU01BTExJTUc6ICdXaGV0aGVyIHRvIHNraXAgcmVzaXppbmcgb2Ygc21hbGwgaW1hZ2VzJyxcbiAgQlVJTERJTl9DT01QUkVTU19JU1JPVEFURTogJ1doZXRoZXIgdG8gcm90YXRlIHRoZSBpbWFnZScsXG4gIEJVSUxESU5fQ09NUFJFU1NfTUVTU0FHRV9JU1JPVEFURTogJ0VuYWJsZSB3aGVuIGltYWdlIHJvdGF0aW9uIGlzIHJlcXVpcmVkJyxcbiAgQlVJTERJTl9DT01QUkVTU19ST1RBVEVERUdSRUU6ICdTZXQgcm90YXRpb24gYW5nbGUnLFxuICBCVUlMRElOX0NPTVBSRVNTX01FU1NBR0VfUk9UQVRFREVHUkVFOiAnUGxlYXNlIGVudGVyIGEgbnVtYmVyLCBjYW4gYmUgbmVnYXRpdmUnLFxuICBCVUlMRElOX0NPTVBSRVNTX0lTUkVNT1ZFRVhJRjogJ1doZXRoZXIgdG8gcmVtb3ZlIEVYSUYgaW5mb3JtYXRpb24nLFxuICBCVUlMRElOX0NPTVBSRVNTX01FU1NBR0VfSVNSRU1PVkVFWElGOiAnRW5hYmxlIHdoZW4gcmVtb3ZpbmcgRVhJRiBpbmZvcm1hdGlvbiBpcyByZXF1aXJlZCcsXG4gIC8vIFBsdWdpbiBIYW5kbGVyXG4gIFBMVUdJTl9IQU5ETEVSX1BMVUdJTl9JTlNUQUxMX1NVQ0NFU1M6ICdQbHVnaW4gaW5zdGFsbGVkIHN1Y2Nlc3NmdWxseScsXG4gIFBMVUdJTl9IQU5ETEVSX1BMVUdJTl9JTlNUQUxMX0ZBSUxFRDogJ1BsdWdpbiBpbnN0YWxsYXRpb24gZmFpbGVkJyxcbiAgUExVR0lOX0hBTkRMRVJfUExVR0lOX0lOU1RBTExfRkFJTEVEX1JFQVNPTjpcbiAgICAnUGx1Z2luIGluc3RhbGxhdGlvbiBmYWlsZWQsIGVycm9yIGNvZGUgaXMgJHtjb2RlfSwgZXJyb3IgbG9nIGlzIFxcbiAke2RhdGF9JyxcbiAgUExVR0lOX0hBTkRMRVJfUExVR0lOX0lOU1RBTExfRkFJTEVEX1BBVEg6XG4gICAgJ1BsdWdpbiBpbnN0YWxsYXRpb24gZmFpbGVkLCBwbGVhc2UgZW50ZXIgYSB2YWxpZCBwbHVnaW4gbmFtZSBvciB2YWxpZCBpbnN0YWxsYXRpb24gcGF0aCcsXG4gIFBMVUdJTl9IQU5ETEVSX1BMVUdJTl9VTklOU1RBTExfU1VDQ0VTUzogJ1BsdWdpbiB1bmluc3RhbGxlZCBzdWNjZXNzZnVsbHknLFxuICBQTFVHSU5fSEFORExFUl9QTFVHSU5fVU5JTlNUQUxMX0ZBSUxFRDogJ1BsdWdpbiB1bmluc3RhbGwgZmFpbGVkJyxcbiAgUExVR0lOX0hBTkRMRVJfUExVR0lOX1VOSU5TVEFMTF9GQUlMRURfUkVBU09OOlxuICAgICdQbHVnaW4gdW5pbnN0YWxsIGZhaWxlZCwgZXJyb3IgY29kZSBpcyAke2NvZGV9LCBlcnJvciBsb2cgaXMgXFxuICR7ZGF0YX0nLFxuICBQTFVHSU5fSEFORExFUl9QTFVHSU5fVU5JTlNUQUxMX0ZBSUxFRF9WQUxJRDogJ1BsdWdpbiB1bmluc3RhbGwgZmFpbGVkLCBwbGVhc2UgZW50ZXIgYSB2YWxpZCBwbHVnaW4gbmFtZScsXG4gIFBMVUdJTl9IQU5ETEVSX1BMVUdJTl9VUERBVEVfU1VDQ0VTUzogJ1BsdWdpbiB1cGRhdGVkIHN1Y2Nlc3NmdWxseScsXG4gIFBMVUdJTl9IQU5ETEVSX1BMVUdJTl9VUERBVEVfRkFJTEVEOiAnUGx1Z2luIHVwZGF0ZSBmYWlsZWQnLFxuICBQTFVHSU5fSEFORExFUl9QTFVHSU5fVVBEQVRFX0ZBSUxFRF9SRUFTT046ICdQbHVnaW4gdXBkYXRlIGZhaWxlZCwgZXJyb3IgY29kZSBpcyAke2NvZGV9LCBlcnJvciBsb2cgaXMgXFxuICR7ZGF0YX0nLFxuICBQTFVHSU5fSEFORExFUl9QTFVHSU5fVVBEQVRFX0ZBSUxFRF9WQUxJRDogJ1BsdWdpbiB1cGRhdGUgZmFpbGVkLCBwbGVhc2UgZW50ZXIgYSB2YWxpZCBwbHVnaW4gbmFtZSdcbn1cbiIsImltcG9ydCB7IEV2ZW50RW1pdHRlciB9IGZyb20gJ2V2ZW50cydcbmltcG9ydCB7IHJlbW92ZSwgZW5zdXJlRmlsZVN5bmMsIHBhdGhFeGlzdHNTeW5jIH0gZnJvbSAnZnMtZXh0cmEnXG5pbXBvcnQgeyBnZXQsIHNldCwgdW5zZXQgfSBmcm9tICdsb2Rhc2gnXG5pbXBvcnQgeyBob21lZGlyIH0gZnJvbSAnb3MnXG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJ1xuXG5pbXBvcnQgeyBDb21tYW5kZXIgfSBmcm9tICcuLi9saWIvQ29tbWFuZGVyJ1xuaW1wb3J0IHsgTGlmZWN5Y2xlUGx1Z2lucywgc2V0Q3VycmVudFBsdWdpbk5hbWUgfSBmcm9tICcuLi9saWIvTGlmZWN5Y2xlUGx1Z2lucydcbmltcG9ydCB7IExvZ2dlciB9IGZyb20gJy4uL2xpYi9Mb2dnZXInXG5pbXBvcnQgeyBQbHVnaW5IYW5kbGVyIH0gZnJvbSAnLi4vbGliL1BsdWdpbkhhbmRsZXInXG5pbXBvcnQgeyBQbHVnaW5Mb2FkZXIgfSBmcm9tICcuLi9saWIvUGx1Z2luTG9hZGVyJ1xuaW1wb3J0IHsgUmVxdWVzdCB9IGZyb20gJy4uL2xpYi9SZXF1ZXN0J1xuXG5pbXBvcnQgeyBMaWZlY3ljbGUgfSBmcm9tICcuL0xpZmVjeWNsZSdcblxuaW1wb3J0IGJ1aWxkSW5VcGxvYWRlcnMgZnJvbSAnLi4vcGx1Z2lucy91cGxvYWRlcidcbmltcG9ydCBidWlsZEluVHJhbnNmb3JtZXJzIGZyb20gJy4uL3BsdWdpbnMvdHJhbnNmb3JtZXInXG5cbmltcG9ydCBnZXRDbGlwYm9hcmRJbWFnZSBmcm9tICcuLi91dGlscy9nZXRDbGlwYm9hcmRJbWFnZSdcblxuaW1wb3J0IHsgaXNDb25maWdLZXlJbkJsYWNrTGlzdCwgaXNJbnB1dENvbmZpZ1ZhbGlkIH0gZnJvbSAnLi4vdXRpbHMvY29tbW9uJ1xuaW1wb3J0IERCIGZyb20gJy4uL3V0aWxzL2RiJ1xuaW1wb3J0IHsgSUJ1aWxkSW5FdmVudCwgSUJ1c0V2ZW50IH0gZnJvbSAnLi4vdXRpbHMvZW51bSdcbmltcG9ydCB7IGV2ZW50QnVzIH0gZnJvbSAnLi4vdXRpbHMvZXZlbnRCdXMnXG5cbmltcG9ydCB7IEkxOG5NYW5hZ2VyIH0gZnJvbSAnLi4vaTE4bidcblxuaW1wb3J0IHtcbiAgSUhlbHBlcixcbiAgSUltZ0luZm8sXG4gIElDb25maWcsXG4gIElQaWNHbyxcbiAgSVN0cmluZ0tleU1hcCxcbiAgSVBsdWdpbkxvYWRlcixcbiAgSUkxOG5NYW5hZ2VyLFxuICBJUGljR29QbHVnaW4sXG4gIElQaWNHb1BsdWdpbkludGVyZmFjZSxcbiAgSVJlcXVlc3Rcbn0gZnJvbSAnLi4vdHlwZXMnXG5cbmV4cG9ydCBjbGFzcyBQaWNHbyBleHRlbmRzIEV2ZW50RW1pdHRlciBpbXBsZW1lbnRzIElQaWNHbyB7XG4gIHByaXZhdGUgX2NvbmZpZyE6IElDb25maWdcbiAgcHJpdmF0ZSBsaWZlY3ljbGUhOiBMaWZlY3ljbGVcbiAgcHJpdmF0ZSBkYiE6IERCXG4gIHByaXZhdGUgX3BsdWdpbkxvYWRlciE6IFBsdWdpbkxvYWRlclxuICBjb25maWdQYXRoOiBzdHJpbmdcbiAgYmFzZURpciE6IHN0cmluZ1xuICBoZWxwZXIhOiBJSGVscGVyXG4gIGxvZzogTG9nZ2VyXG4gIGNtZDogQ29tbWFuZGVyXG4gIG91dHB1dDogSUltZ0luZm9bXVxuICBpbnB1dDogYW55W11cbiAgcmF3SW5wdXQ6IGFueVtdXG4gIHByb2Nlc3NlZElucHV0OiBhbnlbXVxuICBwbHVnaW5IYW5kbGVyOiBQbHVnaW5IYW5kbGVyXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCB3aWxsIGJlIHJlbW92ZWQgaW4gdjEuNS4wK1xuICAgKlxuICAgKiB1c2UgcmVxdWVzdCBpbnN0ZWFkXG4gICAqL1xuICBSZXF1ZXN0ITogUmVxdWVzdFxuICBpMThuITogSUkxOG5NYW5hZ2VyXG4gIFZFUlNJT046IHN0cmluZyA9IHByb2Nlc3MuZW52LlBJQ0dPX1ZFUlNJT05cbiAgR1VJX1ZFUlNJT04/OiBzdHJpbmdcblxuICBnZXQgcGx1Z2luTG9hZGVyKCk6IElQbHVnaW5Mb2FkZXIge1xuICAgIHJldHVybiB0aGlzLl9wbHVnaW5Mb2FkZXJcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKGNvbmZpZ1BhdGg6IHN0cmluZyA9ICcnKSB7XG4gICAgc3VwZXIoKVxuICAgIHRoaXMuY29uZmlnUGF0aCA9IGNvbmZpZ1BhdGhcbiAgICB0aGlzLmlucHV0ID0gW11cbiAgICB0aGlzLnJhd0lucHV0ID0gW11cbiAgICB0aGlzLnByb2Nlc3NlZElucHV0ID0gW11cbiAgICB0aGlzLm91dHB1dCA9IFtdXG4gICAgdGhpcy5oZWxwZXIgPSB7XG4gICAgICB0cmFuc2Zvcm1lcjogbmV3IExpZmVjeWNsZVBsdWdpbnMoJ3RyYW5zZm9ybWVyJyksXG4gICAgICB1cGxvYWRlcjogbmV3IExpZmVjeWNsZVBsdWdpbnMoJ3VwbG9hZGVyJyksXG4gICAgICBiZWZvcmVUcmFuc2Zvcm1QbHVnaW5zOiBuZXcgTGlmZWN5Y2xlUGx1Z2lucygnYmVmb3JlVHJhbnNmb3JtUGx1Z2lucycpLFxuICAgICAgYmVmb3JlVXBsb2FkUGx1Z2luczogbmV3IExpZmVjeWNsZVBsdWdpbnMoJ2JlZm9yZVVwbG9hZFBsdWdpbnMnKSxcbiAgICAgIGFmdGVyVXBsb2FkUGx1Z2luczogbmV3IExpZmVjeWNsZVBsdWdpbnMoJ2FmdGVyVXBsb2FkUGx1Z2lucycpXG4gICAgfVxuICAgIHRoaXMuaW5pdENvbmZpZ1BhdGgoKVxuICAgIHRoaXMubG9nID0gbmV3IExvZ2dlcih0aGlzKVxuICAgIHRoaXMuY21kID0gbmV3IENvbW1hbmRlcih0aGlzKVxuICAgIHRoaXMucGx1Z2luSGFuZGxlciA9IG5ldyBQbHVnaW5IYW5kbGVyKHRoaXMpXG4gICAgdGhpcy5pbml0Q29uZmlnKClcbiAgICB0aGlzLmluaXQoKVxuICB9XG5cbiAgcHJpdmF0ZSBpbml0Q29uZmlnUGF0aCgpOiB2b2lkIHtcbiAgICB0aGlzLmNvbmZpZ1BhdGggPSB0aGlzLmNvbmZpZ1BhdGggfHwgcGF0aC5qb2luKGhvbWVkaXIoKSwgJy5waWNsaXN0L2NvbmZpZy5qc29uJylcbiAgICBpZiAocGF0aC5leHRuYW1lKHRoaXMuY29uZmlnUGF0aCkudG9VcHBlckNhc2UoKSAhPT0gJy5KU09OJykge1xuICAgICAgdGhpcy5jb25maWdQYXRoID0gJydcbiAgICAgIHRocm93IEVycm9yKCdUaGUgY29uZmlndXJhdGlvbiBmaWxlIG9ubHkgc3VwcG9ydHMgSlNPTiBmb3JtYXQuJylcbiAgICB9XG4gICAgdGhpcy5iYXNlRGlyID0gcGF0aC5kaXJuYW1lKHRoaXMuY29uZmlnUGF0aClcbiAgICBpZiAoIXBhdGhFeGlzdHNTeW5jKHRoaXMuY29uZmlnUGF0aCkpIHtcbiAgICAgIGVuc3VyZUZpbGVTeW5jKGAke3RoaXMuY29uZmlnUGF0aH1gKVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgaW5pdENvbmZpZygpOiB2b2lkIHtcbiAgICB0aGlzLmRiID0gbmV3IERCKHRoaXMpXG4gICAgdGhpcy5fY29uZmlnID0gdGhpcy5kYi5yZWFkKHRydWUpIGFzIElDb25maWdcbiAgfVxuXG4gIHByaXZhdGUgaW5pdCgpOiB2b2lkIHtcbiAgICB0cnkge1xuICAgICAgLy8gaW5pdCAxOG4gYXQgZmlyc3RcbiAgICAgIHRoaXMuaTE4biA9IG5ldyBJMThuTWFuYWdlcih0aGlzKVxuICAgICAgdGhpcy5SZXF1ZXN0ID0gbmV3IFJlcXVlc3QodGhpcylcbiAgICAgIHRoaXMuX3BsdWdpbkxvYWRlciA9IG5ldyBQbHVnaW5Mb2FkZXIodGhpcylcbiAgICAgIC8vIGxvYWQgc2VsZiBwbHVnaW5zXG4gICAgICBzZXRDdXJyZW50UGx1Z2luTmFtZSgncGljZ28nKVxuICAgICAgYnVpbGRJblVwbG9hZGVycygpLnJlZ2lzdGVyKHRoaXMpXG4gICAgICBidWlsZEluVHJhbnNmb3JtZXJzKCkucmVnaXN0ZXIodGhpcylcbiAgICAgIHNldEN1cnJlbnRQbHVnaW5OYW1lKCcnKVxuICAgICAgLy8gbG9hZCB0aGlyZC1wYXJ0eSBwbHVnaW5zXG4gICAgICB0aGlzLl9wbHVnaW5Mb2FkZXIubG9hZCgpXG4gICAgICB0aGlzLmxpZmVjeWNsZSA9IG5ldyBMaWZlY3ljbGUodGhpcylcbiAgICB9IGNhdGNoIChlOiBhbnkpIHtcbiAgICAgIHRoaXMuZW1pdChJQnVpbGRJbkV2ZW50LlVQTE9BRF9QUk9HUkVTUywgLTEpXG4gICAgICB0aGlzLmxvZy5lcnJvcihlKVxuICAgICAgdGhyb3cgZVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBlYXNpbHkgbWFubnVhbGx5IGxvYWQgYSBwbHVnaW5cbiAgICogaWYgcHJvdmlkZSBwbHVnaW4gbmFtZSwgd2lsbCByZWdpc3RlciBwbHVnaW4gYnkgbmFtZVxuICAgKiBvciBqdXN0IGluc3RhbnRpYXRlIGEgcGx1Z2luXG4gICAqL1xuICB1c2UocGx1Z2luOiBJUGljR29QbHVnaW4sIG5hbWU/OiBzdHJpbmcpOiBJUGljR29QbHVnaW5JbnRlcmZhY2Uge1xuICAgIGlmIChuYW1lKSB7XG4gICAgICB0aGlzLnBsdWdpbkxvYWRlci5yZWdpc3RlclBsdWdpbihuYW1lLCBwbHVnaW4pXG4gICAgICByZXR1cm4gdGhpcy5wbHVnaW5Mb2FkZXIuZ2V0UGx1Z2luKG5hbWUpIVxuICAgIH1cbiAgICByZXR1cm4gcGx1Z2luKHRoaXMpXG4gIH1cblxuICByZWdpc3RlckNvbW1hbmRzKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmNvbmZpZ1BhdGggIT09ICcnKSB7XG4gICAgICB0aGlzLmNtZC5pbml0KClcbiAgICAgIHRoaXMuY21kLmxvYWRDb21tYW5kcygpXG4gICAgfVxuICB9XG5cbiAgZ2V0Q29uZmlnPFQ+KG5hbWU/OiBzdHJpbmcpOiBUIHtcbiAgICB0aGlzLl9jb25maWcgPSB0aGlzLmRiLnJlYWQodHJ1ZSkgYXMgSUNvbmZpZ1xuICAgIGlmICghbmFtZSkge1xuICAgICAgcmV0dXJuIHRoaXMuX2NvbmZpZyBhcyB1bmtub3duIGFzIFRcbiAgICB9XG4gICAgcmV0dXJuIGdldCh0aGlzLl9jb25maWcsIG5hbWUpXG4gIH1cblxuICBzYXZlQ29uZmlnKGNvbmZpZzogSVN0cmluZ0tleU1hcDxhbnk+KTogdm9pZCB7XG4gICAgaWYgKCFpc0lucHV0Q29uZmlnVmFsaWQoY29uZmlnKSkge1xuICAgICAgdGhpcy5sb2cud2FybigndGhlIGZvcm1hdCBvZiBjb25maWcgaXMgaW52YWxpZCwgcGxlYXNlIHByb3ZpZGUgb2JqZWN0JylcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICB0aGlzLnNldENvbmZpZyhjb25maWcpXG4gICAgdGhpcy5kYi5zYXZlQ29uZmlnKGNvbmZpZylcbiAgfVxuXG4gIHJlbW92ZUNvbmZpZyhrZXk6IHN0cmluZywgcHJvcE5hbWU6IHN0cmluZyk6IHZvaWQge1xuICAgIGlmICgha2V5IHx8ICFwcm9wTmFtZSkgcmV0dXJuXG4gICAgaWYgKGlzQ29uZmlnS2V5SW5CbGFja0xpc3Qoa2V5KSkge1xuICAgICAgdGhpcy5sb2cud2FybihgdGhlIGNvbmZpZy4ke2tleX0gY2FuJ3QgYmUgcmVtb3ZlZGApXG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgdGhpcy51bnNldENvbmZpZyhrZXksIHByb3BOYW1lKVxuICAgIHRoaXMuZGIudW5zZXQoa2V5LCBwcm9wTmFtZSlcbiAgfVxuXG4gIHNldENvbmZpZyhjb25maWc6IElTdHJpbmdLZXlNYXA8YW55Pik6IHZvaWQge1xuICAgIGlmICghaXNJbnB1dENvbmZpZ1ZhbGlkKGNvbmZpZykpIHtcbiAgICAgIHRoaXMubG9nLndhcm4oJ3RoZSBmb3JtYXQgb2YgY29uZmlnIGlzIGludmFsaWQsIHBsZWFzZSBwcm92aWRlIG9iamVjdCcpXG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgT2JqZWN0LmtleXMoY29uZmlnKS5mb3JFYWNoKChuYW1lOiBzdHJpbmcpID0+IHtcbiAgICAgIGlmIChpc0NvbmZpZ0tleUluQmxhY2tMaXN0KG5hbWUpKSB7XG4gICAgICAgIHRoaXMubG9nLndhcm4oYHRoZSBjb25maWcuJHtuYW1lfSBjYW4ndCBiZSBtb2RpZmllZGApXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZHluYW1pYy1kZWxldGVcbiAgICAgICAgZGVsZXRlIGNvbmZpZ1tuYW1lXVxuICAgICAgfVxuICAgICAgc2V0KHRoaXMuX2NvbmZpZywgbmFtZSwgY29uZmlnW25hbWVdKVxuICAgICAgZXZlbnRCdXMuZW1pdChJQnVzRXZlbnQuQ09ORklHX0NIQU5HRSwge1xuICAgICAgICBjb25maWdOYW1lOiBuYW1lLFxuICAgICAgICB2YWx1ZTogY29uZmlnW25hbWVdXG4gICAgICB9KVxuICAgIH0pXG4gIH1cblxuICB1bnNldENvbmZpZyhrZXk6IHN0cmluZywgcHJvcE5hbWU6IHN0cmluZyk6IHZvaWQge1xuICAgIGlmICgha2V5IHx8ICFwcm9wTmFtZSkgcmV0dXJuXG4gICAgaWYgKGlzQ29uZmlnS2V5SW5CbGFja0xpc3Qoa2V5KSkge1xuICAgICAgdGhpcy5sb2cud2FybihgdGhlIGNvbmZpZy4ke2tleX0gY2FuJ3QgYmUgdW5zZXRgKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIHVuc2V0KHRoaXMuZ2V0Q29uZmlnKGtleSksIHByb3BOYW1lKVxuICB9XG5cbiAgZ2V0IHJlcXVlc3QoKTogSVJlcXVlc3RbJ3JlcXVlc3QnXSB7XG4gICAgcmV0dXJuIHRoaXMuUmVxdWVzdC5yZXF1ZXN0LmJpbmQodGhpcy5SZXF1ZXN0KVxuICB9XG5cbiAgYXN5bmMgdXBsb2FkKGlucHV0PzogYW55W10pOiBQcm9taXNlPElJbWdJbmZvW10gfCBFcnJvcj4ge1xuICAgIGlmICh0aGlzLmNvbmZpZ1BhdGggPT09ICcnKSB7XG4gICAgICB0aGlzLmxvZy5lcnJvcignTm8gY29uZmlnIGZpbGUgZm91bmQsIHBsZWFzZSBjaGVjayB5b3VyIGNvbmZpZyBmaWxlIHBhdGgnKVxuICAgICAgcmV0dXJuIFtdXG4gICAgfVxuXG4gICAgaWYgKGlucHV0ID09PSB1bmRlZmluZWQgfHwgaW5wdXQubGVuZ3RoID09PSAwKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCB7IGltZ1BhdGgsIHNob3VsZEtlZXBBZnRlclVwbG9hZGluZyB9ID0gYXdhaXQgZ2V0Q2xpcGJvYXJkSW1hZ2UodGhpcylcbiAgICAgICAgY29uc3QgY2xlYW51cCA9ICgpOiB2b2lkID0+IHtcbiAgICAgICAgICBpZiAoIXNob3VsZEtlZXBBZnRlclVwbG9hZGluZykge1xuICAgICAgICAgICAgcmVtb3ZlKGltZ1BhdGgpLmNhdGNoKGUgPT4ge1xuICAgICAgICAgICAgICB0aGlzLmxvZy5lcnJvcihlKVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGltZ1BhdGggPT09ICdubyBpbWFnZScpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2ltYWdlIG5vdCBmb3VuZCBpbiBjbGlwYm9hcmQnKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMub25jZShJQnVpbGRJbkV2ZW50LkZBSUxFRCwgY2xlYW51cClcbiAgICAgICAgICB0aGlzLm9uY2UoSUJ1aWxkSW5FdmVudC5GSU5JU0hFRCwgY2xlYW51cClcbiAgICAgICAgICBjb25zdCB7IG91dHB1dCB9ID0gYXdhaXQgdGhpcy5saWZlY3ljbGUuc3RhcnQoW2ltZ1BhdGhdKVxuICAgICAgICAgIHJldHVybiBvdXRwdXRcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICB0aGlzLmVtaXQoSUJ1aWxkSW5FdmVudC5GQUlMRUQsIGUpXG4gICAgICAgIHRocm93IGVcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgeyBvdXRwdXQgfSA9IGF3YWl0IHRoaXMubGlmZWN5Y2xlLnN0YXJ0KGlucHV0KVxuICAgICAgcmV0dXJuIG91dHB1dFxuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHVwbG9hZFJldHVybkN0eChpbnB1dD86IGFueVtdLCBza2lwUHJvY2VzcyA9IGZhbHNlKTogUHJvbWlzZTxJUGljR28+IHtcbiAgICBpZiAodGhpcy5jb25maWdQYXRoID09PSAnJykge1xuICAgICAgdGhpcy5sb2cuZXJyb3IoJ05vIGNvbmZpZyBmaWxlIGZvdW5kLCBwbGVhc2UgY2hlY2sgeW91ciBjb25maWcgZmlsZSBwYXRoJylcbiAgICAgIHJldHVybiB0aGlzXG4gICAgfVxuXG4gICAgaWYgKGlucHV0ID09PSB1bmRlZmluZWQgfHwgaW5wdXQubGVuZ3RoID09PSAwKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCB7IGltZ1BhdGgsIHNob3VsZEtlZXBBZnRlclVwbG9hZGluZyB9ID0gYXdhaXQgZ2V0Q2xpcGJvYXJkSW1hZ2UodGhpcylcbiAgICAgICAgY29uc3QgY2xlYW51cCA9ICgpOiB2b2lkID0+IHtcbiAgICAgICAgICBpZiAoIXNob3VsZEtlZXBBZnRlclVwbG9hZGluZykge1xuICAgICAgICAgICAgcmVtb3ZlKGltZ1BhdGgpLmNhdGNoKGUgPT4ge1xuICAgICAgICAgICAgICB0aGlzLmxvZy5lcnJvcihlKVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGltZ1BhdGggPT09ICdubyBpbWFnZScpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2ltYWdlIG5vdCBmb3VuZCBpbiBjbGlwYm9hcmQnKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMub25jZShJQnVpbGRJbkV2ZW50LkZBSUxFRCwgY2xlYW51cClcbiAgICAgICAgICB0aGlzLm9uY2UoSUJ1aWxkSW5FdmVudC5GSU5JU0hFRCwgY2xlYW51cClcbiAgICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5saWZlY3ljbGUuc3RhcnQoW2ltZ1BhdGhdLCBza2lwUHJvY2VzcylcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICB0aGlzLmVtaXQoSUJ1aWxkSW5FdmVudC5GQUlMRUQsIGUpXG4gICAgICAgIHRocm93IGVcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGF3YWl0IHRoaXMubGlmZWN5Y2xlLnN0YXJ0KGlucHV0LCBza2lwUHJvY2VzcylcbiAgICB9XG4gIH1cbn1cbiIsImltcG9ydCB7IElQaWNHbyB9IGZyb20gJy4uLy4uL3R5cGVzJ1xuaW1wb3J0IEltZ0Zyb21QYXRoIGZyb20gJy4vcGF0aCdcbmltcG9ydCBJbWdGcm9tQmFzZTY0IGZyb20gJy4vYmFzZTY0J1xuXG5jb25zdCBidWlsZEluVHJhbnNmb3JtZXJzID0gKCkgPT4ge1xuICByZXR1cm4ge1xuICAgIHJlZ2lzdGVyKGN0eDogSVBpY0dvKSB7XG4gICAgICBjdHguaGVscGVyLnRyYW5zZm9ybWVyLnJlZ2lzdGVyKCdwYXRoJywgSW1nRnJvbVBhdGgpXG4gICAgICBjdHguaGVscGVyLnRyYW5zZm9ybWVyLnJlZ2lzdGVyKCdiYXNlNjQnLCBJbWdGcm9tQmFzZTY0KVxuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBidWlsZEluVHJhbnNmb3JtZXJzXG4iXSwibmFtZXMiOlsiY3JlYXRlQ29tbWFuZCIsImNtZCIsImNvbW1hbmQiLCJkZXNjcmlwdGlvbiIsImFsaWFzIiwiYWN0aW9uIiwib3B0aW9ucyIsInByb2dyYW0iLCJwcm94eSIsIm9wdGlvbiIsInJlZ2lzdHJ5IiwicGx1Z2luSGFuZGxlciIsImhhbmRsZSIsImN0eCIsInBsdWdpbnMiLCJpbnN0YWxsIiwiY2F0Y2giLCJlIiwibG9nIiwiZXJyb3IiLCJ1bmluc3RhbGwiLCJ1cGRhdGUiLCJjb25maWciLCJyYW5kb21TdHJpbmdHZW5lcmF0b3IiLCJsZW5ndGgiLCJjaGFycyIsIkFycmF5IiwiZnJvbSIsIm1hcCIsImNoYXJBdCIsIk1hdGgiLCJmbG9vciIsInJhbmRvbSIsImpvaW4iLCJmb3JtYXRIZWxwZXIiLCJudW0iLCJ0b1N0cmluZyIsImdldE1kNSIsImlucHV0IiwiY3J5cHRvIiwiY3JlYXRlSGFzaCIsImRpZ2VzdCIsInJlbmFtZUZpbGVOYW1lV2l0aEN1c3RvbVN0cmluZyIsIm9sZE5hbWUiLCJjdXN0b21Gb3JtYXQiLCJhZmZpeEZpbGVOYW1lIiwiZmlsZUJ1ZmZlciIsIm5vdyIsIkRhdGUiLCJ5ZWFyIiwiZ2V0RnVsbFllYXIiLCJmaWxlYmFzZW5hbWUiLCJwYXRoIiwiYmFzZW5hbWUiLCJleHRuYW1lIiwiY29udmVyc2lvbk1hcCIsInNsaWNlIiwiZ2V0TW9udGgiLCJnZXREYXRlIiwiZ2V0SG91cnMiLCJnZXRNaW51dGVzIiwiZ2V0U2Vjb25kcyIsImdldE1pbGxpc2Vjb25kcyIsInBhZFN0YXJ0IiwidXVpZHY0IiwicmVwbGFjZSIsImdldFRpbWUiLCJ1bmRlZmluZWQiLCJPYmplY3QiLCJrZXlzIiwic29tZSIsIml0ZW0iLCJpbmNsdWRlcyIsImV4dCIsIm5ld05hbWUiLCJyZWR1Y2UiLCJhY2MiLCJjdXIiLCJSZWdFeHAiLCJfIiwiZ3JvdXAxIiwicGFyc2VJbnQiLCJfcmVzdWx0Iiwia2V5IiwiY291bnQiLCJtYXgiLCJkaXJuYW1lIiwic3BsaXQiLCJzZXAiLCJhIiwiYiIsImlzVXJsIiwidXJsIiwidGVzdCIsImlzVXJsRW5jb2RlIiwiZGVjb2RlVVJJIiwiaGFuZGxlVXJsRW5jb2RlIiwiZW5jb2RlVVJJIiwiZ2V0SW1hZ2VTaXplIiwiZmlsZSIsIndpZHRoIiwiaGVpZ2h0IiwidHlwZSIsImltYWdlU2l6ZSIsInJlYWwiLCJnZXRGU0ZpbGUiLCJhc3luYyIsImZpbGVQYXRoIiwiZmlsZU5hbWUiLCJidWZmZXIiLCJyZWFkRmlsZSIsInN1Y2Nlc3MiLCJfYSIsInJlYXNvbiIsImdldFVSTEZpbGUiLCJ0aW1lb3V0SWQiLCJyZXF1ZXN0Rm4iLCJQcm9taXNlIiwicmVzb2x2ZSIsInJlamVjdCIsInJlcyIsInJlcXVlc3QiLCJtZXRob2QiLCJyZXNvbHZlV2l0aEZ1bGxSZXNwb25zZSIsInJlc3BvbnNlVHlwZSIsInRoZW4iLCJyZXNwIiwiZGF0YSIsImNsZWFyVGltZW91dCIsInVybFBhdGgiLCJVUkwiLCJwYXRobmFtZSIsInNlYXJjaFBhcmFtcyIsImdldCIsInN0YXJ0c1dpdGgiLCJtZXNzYWdlIiwidGltZW91dFByb21pc2UiLCJzZXRUaW1lb3V0IiwicmFjZSIsImdldFBsdWdpbk5hbWVUeXBlIiwibmFtZSIsImlzU2ltcGxlTmFtZSIsIm5hbWVPclBhdGgiLCJpc0Fic29sdXRlIiwicGx1Z2luUGF0aCIsInByb2Nlc3MiLCJjd2QiLCJmcyIsImV4aXN0c1N5bmMiLCJoYW5kbGVDb21wbGV0ZVBsdWdpbk5hbWUiLCJzY29wZSIsImdldFByb2Nlc3NQbHVnaW5OYW1lIiwibG9nZ2VyIiwiY29uc29sZSIsImhhbmRsZVVuaXhTdHlsZVBhdGgiLCJ3YXJuIiwiZ2V0Tm9ybWFsUGx1Z2luTmFtZSIsInJlbW92ZVBsdWdpblZlcnNpb24iLCJwYWNrYWdlSlNPTlBhdGgiLCJwb3NpeCIsInBrZyIsInJlYWRKU09OU3luYyIsInBhdGhTdHIiLCJyZWciLCJtYXRjaEFyciIsIm1hdGNoIiwiY29uZmlnQmxhY2tMaXN0IiwiaXNDb25maWdLZXlJbkJsYWNrTGlzdCIsImJsYWNrSXRlbSIsImlzSW5wdXRDb25maWdWYWxpZCIsImlzQXJyYXkiLCJzYWZlUGFyc2UiLCJzdHIiLCJKU09OIiwicGFyc2UiLCJmb3JjZU51bWJlciIsImlzTmFOIiwiTnVtYmVyIiwiaXNEZXYiLCJlbnYiLCJOT0RFX0VOViIsImRlZmF1bHRXYXRlcm1hcmtJbWFnZVBhdGgiLCJfX2Rpcm5hbWUiLCJBZGRXYXRlcm1hcmsiLCJpbWciLCJ3YXRlcm1hcmtUeXBlIiwiZGVmYXVsdFdhdGVybWFya0ZvbnRQYXRoIiwiaXNGdWxsU2NyZWVuV2F0ZXJtYXJrIiwid2F0ZXJtYXJrRGVncmVlIiwidGV4dCIsIndhdGVybWFya0ZvbnRQYXRoIiwid2F0ZXJtYXJrU2NhbGVSYXRpbyIsIndhdGVybWFya0NvbG9yIiwid2F0ZXJtYXJrSW1hZ2VQYXRoIiwicG9zaXRpb24iLCJpbWFnZSIsInNoYXJwIiwiYW5pbWF0ZWQiLCJpbWdXaWR0aCIsIm1ldGFkYXRhIiwid2F0ZXJtYXJrIiwidG9CdWZmZXIiLCJjb2xvciIsImZvbnRGYW1pbHkiLCJhbmNob3IiLCJhdHRyaWJ1dGVzIiwiZmlsbCIsInRleHRTVkciLCJUZXh0VG9TVkciLCJsb2FkU3luYyIsImdldFNWRyIsIkJ1ZmZlciIsInRleHQyU1ZHIiwid2F0ZXJtYXJrV2lkdGgiLCJ3YXRlcm1hcmtIZWlnaHQiLCJnZXRTaXplIiwid2F0ZXJtYXJrUmVzaXplV2lkdGgiLCJ3YXRlcm1hcmtSZXNpemVIZWlnaHQiLCJyZXNpemUiLCJmaXQiLCJyb3RhdGUiLCJiYWNrZ3JvdW5kIiwiciIsImciLCJhbHBoYSIsImNyZWF0ZVdhdGVybWFyayIsImNvbXBvc2l0ZSIsImdyYXZpdHkiLCJ0aWxlIiwidmFsaWRQYXJhbSIsInBhcmFtcyIsImV2ZXJ5IiwicGFyYW0iLCJhdmFpbGFibGVDb252ZXJ0Rm9ybWF0TGlzdCIsImltYWdlRm9ybWF0TGlzdCIsInZhbGlkT3V0cHV0Rm9ybWF0IiwiZm9ybWF0IiwiaW1hZ2VBZGRXYXRlck1hcmsiLCJ3YXRlcm1hcmtUZXh0Iiwid2F0ZXJtYXJrUG9zaXRpb24iLCJmb3JtYXRPcHRpb25zIiwiZm9ybWF0Q29udmVydE9iaiIsInF1YWxpdHkiLCJpc0NvbnZlcnQiLCJjb252ZXJ0Rm9ybWF0IiwiaXNSZVNpemUiLCJyZVNpemVIZWlnaHQiLCJyZVNpemVXaWR0aCIsInNraXBSZVNpemVPZlNtYWxsSW1nIiwiaXNSZVNpemVCeVBlcmNlbnQiLCJyZVNpemVQZXJjZW50IiwiaXNSb3RhdGUiLCJpc0ZsaXAiLCJpc0Zsb3AiLCJyb3RhdGVEZWdyZWUiLCJwaWNCZWQiLCJpbWFnZUNvbXByZXNzIiwicmF3Rm9ybWF0Iiwibm9ybWFsaXplSW1hZ2VFeHQiLCJtaW4iLCJyb3VuZCIsImltYWdlV2lkdGgiLCJpbWFnZUhlaWdodCIsInNjYWxlUmF0aW8iLCJmbGlwIiwiZmxvcCIsIm5ld0Zvcm1hdCIsImdldENvbnZlcnRlZEZvcm1hdCIsInRvRm9ybWF0IiwibW96anBlZyIsInRvTG93ZXJDYXNlIiwiaXNOZWVkQWRkV2F0ZXJtYXJrIiwid2F0ZXJtYXJrT3B0aW9ucyIsImZpbGVFeHQiLCJpc0FkZFdhdGVybWFyayIsImlzTmVlZENvbXByZXNzIiwiY29tcHJlc3NPcHRpb25zIiwicmVtb3ZlRXhpZiIsInVwbG9hZCIsImFyZ3VtZW50cyIsImlucHV0TGlzdCIsImZpbHRlciIsImV4aXN0IiwiY29tcHJlc3MiLCJ1c2VyQ29uZmlnIiwiZ2V0Q29uZmlnIiwicHJlZml4IiwiaTE4biIsInRyYW5zbGF0ZSIsInJlcXVpcmVkIiwiZGVmYXVsdCIsImNob2ljZXMiLCJpc1JlbW92ZUV4aWYiLCJyZW5hbWUiLCJlbmFibGUiLCJ1cGxvYWRlclRyYW5zbGF0b3JzIiwiYWR2YW5jZWRwbGlzdCIsImFsaXN0cGxpc3QiLCJhbGl5dW4iLCJnaXRodWIiLCJpbWd1ciIsImxvY2FsIiwibHNreXBsaXN0IiwicGljbGlzdCIsInFpbml1Iiwic2Z0cHBsaXN0Iiwic21tcyIsInRjeXVuIiwidXB5dW4iLCJ3ZWJkYXZwbGlzdCIsImhhbmRsZUNvbmZpZyIsInByb21wdHMiLCJtb2R1bGUiLCJhbnN3ZXIiLCJpbnF1aXJlciIsInByb21wdCIsImNvbmZpZ05hbWUiLCJzYXZlQ29uZmlnIiwic2V0dGluZyIsInZhbHVlIiwiYnVpbGRpbiIsImhlbHBlciIsImdldElkTGlzdCIsInBsdWdpbkxvYWRlciIsImdldFBsdWdpbiIsImdldEZ1bGxMaXN0IiwiX2IiLCJwbHVnaW4iLCJpbmZvIiwiYXJndiIsInVzZSIsInVwbG9hZGVyIiwidHJhbnNmb3JtZXIiLCJwdXNoIiwiZm9yRWFjaCIsInBpY2dvUGx1Z2lucyIsInNldENvbmZpZyIsImdlbmVyYXRlIiwib3B0cyIsImdldE9wdGlvbnMiLCJ0bXAiLCJzb3VyY2UiLCJhbnN3ZXJzIiwiX2ZpbGVzIiwiZ2xvYmJ5IiwiZG90IiwiZ2xvYiIsImZpbHRlcnMiLCJmaWxlcyIsInJlbmRlciIsIndyaXRlRmlsZVRyZWUiLCJkZXN0IiwiY29tcGxldGUiLCJjb21wbGV0ZU1lc3NhZ2UiLCJleHAiLCJmbiIsIkZ1bmN0aW9uIiwic3RyaW5naWZ5IiwidGVtcGxhdGVQYXRoIiwib3B0aW9uc1BhdGgiLCJyZXF1aXJlIiwiZmlsZVRyZWUiLCJyZWFkRmlsZVN5bmMiLCJjb250ZW50IiwiZWpzUmVuZGVyIiwiaXNCdWZmZXIiLCJkaXIiLCJlbnN1cmVEaXJTeW5jIiwid3JpdGVGaWxlU3luYyIsInJ1biIsIm9mZmxpbmUiLCJ0ZW1wbGF0ZSIsImhhc1NsYXNoIiwiZG93bmxvYWRBbmRHZW5lcmF0ZSIsInN5bmMiLCJkb3dubG9hZCIsImNsb25lIiwiZXJyIiwiaW5pdCIsInByb2plY3QiLCJpblBsYWNlIiwiaG9tZWRpciIsIm9rIiwib24iLCJjaGFsayIsImdyYXkiLCJsYW5nIiwibGlzdCIsImdldExhbmd1YWdlTGlzdCIsInNldExhbmd1YWdlIiwiTGlmZWN5Y2xlUGx1Z2lucyIsImNvbnN0cnVjdG9yIiwidGhpcyIsIk1hcCIsInBsdWdpbklkTWFwIiwicmVnaXN0ZXIiLCJpZCIsIlR5cGVFcnJvciIsImhhcyIsInNldCIsImN1cnJlbnRQbHVnaW4iLCJ1bnJlZ2lzdGVyIiwicGx1Z2luTmFtZSIsInBsdWdpbkxpc3QiLCJkZWxldGUiLCJnZXROYW1lIiwiZ2V0TGlzdCIsInZhbHVlcyIsInNldEN1cnJlbnRQbHVnaW5OYW1lIiwiQ29tbWFuZGVyIiwiQ29tbWFuZCIsInZlcnNpb24iLCJkZWJ1ZyIsInNpbGVudCIsImFyZ3MiLCJleGl0IiwiY3VycmVudFBsdWdpbk5hbWUiLCJsb2FkQ29tbWFuZHMiLCJJTG9nVHlwZSIsIklCdWlsZEluRXZlbnQiLCJJQnVzRXZlbnQiLCJMb2dnZXIiLCJsZXZlbCIsImhhbmRsZUxvZyIsIm1zZyIsImxvZ0xldmVsIiwiY2hlY2tMb2dMZXZlbCIsImxvZ0hlYWRlciIsInRvVXBwZXJDYXNlIiwibG9nUGF0aCIsImJhc2VEaXIiLCJyZXN1bHQiLCJjaGVja0xvZ0ZpbGVJc0xhcmdlIiwiaXNMYXJnZSIsIndhcm5pbmdNc2ciLCJsb2dGaWxlU2l6ZUxpbWl0IiwieWVsbG93IiwicmVjcmVhdGVMb2dGaWxlIiwidW5zaGlmdCIsImhhbmRsZVdyaXRlTG9nIiwibG9nRmlsZVNpemUiLCJzdGF0U3luYyIsInNpemUiLCJ1bmxpbmtTeW5jIiwiY3JlYXRlRmlsZVN5bmMiLCJkYXlqcyIsIkVycm9yIiwidXRpbCIsInN0YWNrIiwiYXBwZW5kRmlsZVN5bmMiLCJQbHVnaW5IYW5kbGVyIiwiaW5zdGFsbGVkUGx1Z2lucyIsInByb2Nlc3NQbHVnaW5zIiwiaGFuZGxlUGx1Z2luTmFtZVByb2Nlc3MiLCJoYXNQbHVnaW4iLCJwa2dOYW1lIiwiZnVsbE5hbWVMaXN0IiwiZnVsbE5hbWUiLCJwa2dOYW1lTGlzdCIsImV4ZWNDb21tYW5kIiwiY29kZSIsImVtaXQiLCJ0aXRsZSIsImJvZHkiLCJyZWdpc3RlclBsdWdpbiIsInVucmVnaXN0ZXJQbHVnaW4iLCJtb2R1bGVzIiwid2hlcmUiLCJjb25jYXQiLCJucG0iLCJzcGF3biIsImFzc2lnbiIsIm91dHB1dCIsInN0ZG91dCIsInBpcGUiLCJzdGRlcnIiLCJGQUlMRUQiLCJQbHVnaW5Mb2FkZXIiLCJmdWxsTGlzdCIsIlNldCIsInBsdWdpbk1hcCIsInBhY2thZ2VQYXRoIiwicmVwb3NpdG9yeSIsImxpY2Vuc2UiLCJyZXNvbHZlUGx1Z2luIiwiYmFzZWRpciIsImxvYWQiLCJwbHVnaW5EaXIiLCJqc29uIiwiZGVwcyIsImRlcGVuZGVuY2llcyIsImRldkRlcHMiLCJkZXZEZXBlbmRlbmNpZXMiLCJhZGQiLCJwbHVnaW5JbnRlcmZhY2UiLCJOT1RJRklDQVRJT04iLCJiZWZvcmVUcmFuc2Zvcm1QbHVnaW5zIiwiYmVmb3JlVXBsb2FkUGx1Z2lucyIsImFmdGVyVXBsb2FkUGx1Z2lucyIsInJlbW92ZUNvbmZpZyIsImV2ZW50QnVzIiwiRXZlbnRFbWl0dGVyIiwiaHR0cHNBZ2VudCIsImh0dHBzIiwiQWdlbnQiLCJtYXhWZXJzaW9uIiwibWluVmVyc2lvbiIsInJlamVjdFVuYXV0aG9yaXplZCIsImFwcGVuZEZvcm1EYXRhIiwiZm9ybSIsImFwcGVuZCIsInJlc3BvbnNlSW50ZXJjZXB0b3IiLCJyZXNwb25zZSIsInN0YXR1c0NvZGUiLCJzdGF0dXMiLCJyZXNwb25zZUVycm9ySGFuZGxlciIsImVycm9yT2JqIiwiX2MiLCJfZCIsIl9lIiwiX2YiLCJfZyIsIlJlcXVlc3QiLCJDT05GSUdfQ0hBTkdFIiwiaGFuZGxlUHJveHkiLCJwcm94eU9wdGlvbnMiLCJob3N0IiwiaG9zdG5hbWUiLCJwb3J0IiwicHJvdG9jb2wiLCJoZWFkZXJzIiwibWF4Qm9keUxlbmd0aCIsIkluZmluaXR5IiwibWF4Q29udGVudExlbmd0aCIsImh0dHBzT3Zlckh0dHAiLCJpbnN0YW5jZSIsImF4aW9zIiwiY3JlYXRlIiwiaW50ZXJjZXB0b3JzIiwib3B0IiwiX19pc09sZE9wdGlvbnMiLCJGb3JtRGF0YSIsImZvcm1EYXRhIiwiZ2V0SGVhZGVycyIsInFzIiwicmVxdWVzdEludGVyY2VwdG9yIiwib2JqIiwiY29udGVudFR5cGUiLCJDb250ZW50VHlwZSIsIkxpZmVjeWNsZSIsInN1cGVyIiwidHRmUGF0aCIsImVtcHR5RGlyU3luYyIsImhlbHBHZXRPcHRpb24iLCJza2lwUHJvY2VzcyIsImNvbmZpZ1BhdGgiLCJyYXdJbnB1dCIsInByb2Nlc3NlZElucHV0IiwiVkVSU0lPTiIsIkdVSV9WRVJTSU9OIiwiYmluZCIsInVuc2V0Q29uZmlnIiwidXBsb2FkUmV0dXJuQ3R4IiwiYWRkTGlzdGVuZXIiLCJvbmNlIiwicmVtb3ZlTGlzdGVuZXIiLCJvZmYiLCJyZW1vdmVBbGxMaXN0ZW5lcnMiLCJzZXRNYXhMaXN0ZW5lcnMiLCJnZXRNYXhMaXN0ZW5lcnMiLCJsaXN0ZW5lcnMiLCJyYXdMaXN0ZW5lcnMiLCJsaXN0ZW5lckNvdW50IiwicHJlcGVuZExpc3RlbmVyIiwicHJlcGVuZE9uY2VMaXN0ZW5lciIsImV2ZW50TmFtZXMiLCJjcmVhdGVDb250ZXh0IiwicmF3SW5wdXRQYXRoIiwiY2xvbmVEZWVwIiwiZG9VcGxvYWQiLCJhZnRlclVwbG9hZCIsInByZXByb2Nlc3MiLCJiZWZvcmVUcmFuc2Zvcm0iLCJkb1RyYW5zZm9ybSIsImJ1aWxkSW5SZW5hbWUiLCJiZWZvcmVVcGxvYWQiLCJVUExPQURfUFJPR1JFU1MiLCJCRUZPUkVfVFJBTlNGT1JNIiwidGVtcEZpbGVQYXRoIiwiYWxsU2V0dGxlZCIsImluZGV4IiwiaXRlbUlzVXJsIiwidHJhbnNmb3JtZWRCdWZmZXIiLCJpc1NraXAiLCJleHRlbnRpb24iLCJkb3dubG9hZFRURiIsImhlaWNSZXN1bHQiLCJoZWljQ29udmVydCIsInRlbXBIZWljQ29udmVydEZpbGUiLCJuZXdFeHQiLCJ0ZW1wRmlsZSIsInJlbmFtZUNvbmZpZyIsImJhc2U2NEltYWdlIiwiaGFuZGxlUGx1Z2lucyIsImN1cnJlbnRUcmFuc2Zvcm1lciIsIkJFRk9SRV9VUExPQUQiLCJvdXRwdXRJbWciLCJBRlRFUl9VUExPQUQiLCJpc0VuY29kZU91dHB1dFVSTCIsImkiLCJpbWdVcmwiLCJGSU5JU0hFRCIsImxpZmVDeWNsZVBsdWdpbnMiLCJwbHVnaW5OYW1lcyIsImxpZmVDeWNsZU5hbWUiLCJhbGwiLCJmb3JtYXRQYXRoSGVscGVyIiwic3RhcnRTbGFzaCIsImVuZFNsYXNoIiwicm9vdFRvRW1wdHkiLCJjbGVhblBhdGgiLCJlbmNvZGVQYXRoIiwicCIsImVuY29kZVVSSUNvbXBvbmVudCIsImJ1aWxkSW5VcGxvYWRlck5hbWVzIiwicG9zdE9wdGlvbnMiLCJlbmRwb2ludCIsImZvcm1EYXRhS2V5IiwiZmlsZW5hbWUiLCJhZHZhbmNlZHBsaXN0Q29uZmlnIiwiaW1nTGlzdCIsInBvc3RDb25maWciLCJpbWFnZVVybCIsInJlc0RhdGFQYXRoIiwiY3VzdG9tUHJlZml4IiwidG9rZW4iLCJBdXRob3JpemF0aW9uIiwiaGFuZGxlUmVzRXJyb3IiLCJleHRyYWN0Q29uZmlnIiwidXNlcm5hbWUiLCJwYXNzd29yZCIsInVwbG9hZFBhdGgiLCJ3ZWJQYXRoIiwiY3VzdG9tVXJsIiwiYWxpc3RDb25maWciLCJ0b2tlblN0b3JlIiwicmVmcmVzaGVkQXQiLCJwb3N0IiwiZ2V0QWxpc3RUb2tlbiIsImZ1bGxVcGxvYWRQYXRoIiwidXBsb2FkUmVzIiwicmVmcmVzaFVybCIsImdldEluZm9VcmwiLCJyZWZyZXNoUmVzIiwicGFnZSIsInBlcl9wYWdlIiwicmVmcmVzaCIsImdldEluZm9SZXMiLCJzaWduIiwiZW5jb2RlZFBhdGgiLCJnZXRDdXJyZW50VVRDRGF0ZSIsInRvVVRDU3RyaW5nIiwiZ2VuZXJhdGVTaWduYXR1cmUiLCJkYXRlIiwic2lnblN0cmluZyIsImxvb2t1cCIsImJ1Y2tldCIsInNpZ25hdHVyZSIsImNyZWF0ZUhtYWMiLCJhY2Nlc3NLZXlTZWNyZXQiLCJhY2Nlc3NLZXlJZCIsImFyZWEiLCJIb3N0IiwiYWxpWXVuT3B0aW9ucyIsIm9wdGlvblVybCIsIkZpbGVOYW1lR2VuZXJhdG9yIiwibW9udGgiLCJkYXkiLCJleHROYW1lIiwibWQ1IiwiaW1nQnVmZmVyIiwibWQ1QjY0IiwibWQ1QjY0U2hvcnQiLCJzaGExIiwic2hhMjU2IiwidGltZXN0YW1wIiwidGltZXN0YW1wTVMiLCJmb3JtYXRQYXRoIiwiZmlsZU5hbWVHZW5lcmF0b3IiLCJmaWVsZHMiLCJyZSIsImdldFByb3h5QWdlbnQiLCJzc2xFbmFibGVkIiwiZm9ybWF0ZWRQcm94eSIsImZvcm1hdEh0dHBQcm94eVVSTCIsIkh0dHBzUHJveHlBZ2VudCIsIkh0dHBQcm94eUFnZW50Iiwia2VlcEFsaXZlIiwia2VlcEFsaXZlTXNlY3MiLCJzY2hlZHVsaW5nIiwiZ2V0RmlsZVVSTCIsImVUYWciLCJ2ZXJzaW9uSWQiLCJzaWduZWRVcmwiLCJnZXRTaWduZWRVcmwiLCJjbGllbnQiLCJHZXRPYmplY3RDb21tYW5kIiwiQnVja2V0IiwiYnVja2V0TmFtZSIsIktleSIsIklmTWF0Y2giLCJWZXJzaW9uSWQiLCJleHBpcmVzSW4iLCJ1cmxPYmplY3QiLCJzZWFyY2giLCJocmVmIiwiY3JlYXRlUzNDbGllbnQiLCJodHRwSGFuZGxlck9wdHMiLCJodHRwQWdlbnQiLCJjbGllbnRPcHRpb25zIiwicmVnaW9uIiwiY3JlZGVudGlhbHMiLCJhY2Nlc3NLZXlJRCIsInNlY3JldEFjY2Vzc0tleSIsInRscyIsImZvcmNlUGF0aFN0eWxlIiwicGF0aFN0eWxlQWNjZXNzIiwicmVxdWVzdEhhbmRsZXIiLCJOb2RlSHR0cEhhbmRsZXIiLCJTM0NsaWVudCIsImNyZWF0ZVVwbG9hZFRhc2siLCJjb250ZW50RW5jb2RpbmciLCJtaW1lIiwiZ2V0VHlwZSIsImZpbGVUeXBlIiwiRmlsZVR5cGUiLCJmcm9tQnVmZmVyIiwiZXh0cmFjdEluZm8iLCJQdXRPYmplY3RDb21tYW5kIiwiQUNMIiwiYWNsIiwiQm9keSIsIkNvbnRlbnRFbmNvZGluZyIsInNlbmQiLCJ1cmxQcmVmaXgiLCJFVGFnIiwiaW1nVVJMIiwiZm9ybWF0RGlzYWJsZUJ1Y2tldFByZWZpeFRvVVJMIiwiZGlzYWJsZUJ1Y2tldFByZWZpeFRvVVJMIiwiQm9vbGVhbiIsInRhc2siLCJidWlsZEdpdGh1YkFwaVVybCIsInJlcG8iLCJleHRyYSIsImJyYW5jaCIsImdpdGh1Yk9wdGlvbnMiLCJkb3dubG9hZF91cmwiLCJoYXNoIiwic2hhIiwiaW1nQmFzZTY0IiwiY2xpZW50SWQiLCJhY2Nlc3NUb2tlbiIsImZvcm1hdEFjY2Vzc1Rva2VuIiwiYWxidW0iLCJhdXRob3JpemF0aW9uIiwicmVxdWVzdE9wdGlvbnMiLCJpbml0UGFnZXMiLCJhbGJ1bUhhc2giLCJnZXRBbGJ1bUhhc2hPcHRpb25zIiwidGltZW91dCIsImFsYnVtTGlzdCIsImltZ3VyT3B0aW9ucyIsImxpbmsiLCJkZWxldGVoYXNoIiwibG9jYWxDb25maWciLCJpbWdUZW1wUGF0aCIsImZpbGVJbWdUZW1wUGF0aCIsImZpbGVVcGxvYWRQYXRoIiwiY29weUZpbGVTeW5jIiwiZ2FsbGVyeVBhdGgiLCJpc1YyIiwidjFIZWFkZXJzIiwiQ29ubmVjdGlvbiIsInYxRm9ybURhdGEiLCJzc2wiLCJ2MkhlYWRlcnMiLCJBY2NlcHQiLCJzdHJhdGVneUlkIiwiYWxidW1JZCIsInBlcm1pc3Npb24iLCJ2MkZvcm1EYXRhIiwic3RyYXRlZ3lfaWQiLCJhbGJ1bV9pZCIsImFnZW50IiwibHNreU9wdGlvbnMiLCJsaW5rcyIsInBpY2JlZCIsInNlcnZlcktleSIsImlzSXAiLCJmb3JtYXRIb3N0IiwicGljbGlzdE9wdGlvbnMiLCJmdWxsUmVzdWx0Iiwic2VsZWN0QXJlYSIsImdldFRva2VuIiwicWluaXVPcHRpb25zIiwiYWNjZXNzS2V5Iiwic2VjcmV0S2V5IiwibWFjIiwiYXV0aCIsIk1hYyIsInJzIiwiUHV0UG9saWN5IiwidXBsb2FkVG9rZW4iLCJiYXNlVXJsIiwidXJsT3B0aW9ucyIsIlNTSENsaWVudCIsIk5vZGVTU0giLCJpc0Nvbm5lY3RlZCIsInN0YXRpYyIsInByaXZhdGVLZXkiLCJwYXNzcGhyYXNlIiwibG9naW5JbmZvIiwicHJpdmF0ZUtleVBhdGgiLCJjb25uZWN0IiwicmVtb3RlIiwiY2hhbmdlV2luU3R5bGVQYXRoVG9Vbml4IiwibWtkaXIiLCJwdXRGaWxlIiwiZmlsZU1vZGUiLCJleGVjIiwiZGlyUGF0aCIsImRpcmVjdG9yeU1vZGUiLCJkaXJNb2RlIiwiZGlycyIsImN1cnJlbnRQYXRoIiwic2NyaXB0IiwidXNlciIsImdyb3VwIiwiX3VzZXIiLCJfZ3JvdXAiLCJjbG9zZSIsImRpc3Bvc2UiLCJzZnRwcGxpc3RDb25maWciLCJ1cGxvYWRUZW1wUGF0aCIsImdldEluc3RhbmNlIiwicmVtb3RlUGF0aCIsImZpbGVVc2VyIiwiY2hvd24iLCJpbWdUZW1wRmlsZVBhdGgiLCJyZW1vdmVTeW5jIiwibW92ZVN5bmMiLCJhcGlUb2tlbiIsImJhY2t1cERvbWFpbiIsImRvbWFpbiIsInNtZmlsZSIsInNtbXNDb25maWciLCJ0cmltIiwiaW1hZ2VCdWZmZXIiLCJpbWFnZXMiLCJ1cGxvYWRIaXN0b3J5Iiwic2VjcmV0SWQiLCJhcHBJZCIsInNpZ25UaW1lIiwidG9kYXkiLCJzaWduS2V5IiwiaHR0cFN0cmluZyIsInN0cmluZ1RvU2lnbiIsImN1cnJlbnQiLCJtdWx0aVNpZ25hdHVyZSIsInNpZ25IZXhLZXkiLCJ0ZW1wU3RyaW5nIiwib3AiLCJmaWxlY29udGVudCIsInRjWXVuT3B0aW9ucyIsInVzZVY0Iiwic2xpbSIsInNvdXJjZV91cmwiLCJjb25maXJtVGV4dCIsImNhbmNlbFRleHQiLCJ0aXBzIiwib3BlcmF0b3IiLCJtZDVQYXNzd29yZCIsIk1ENSIsImdldEFudGlMZWVjaFBhcmFtIiwiYW50aUxlZWNoVG9rZW4iLCJleHBpcmVUaW1lIiwidXJpIiwiZXhwaXJlIiwic3Vic3RyaW5nIiwidXB5dW5PcHRpb25zIiwic3VmZml4IiwidXB0Iiwid2ViZGF2cGxpc3RPcHRpb25zIiwiYXV0aFR5cGUiLCJ3ZWJwYXRoIiwiQXV0aFR5cGUiLCJEaWdlc3QiLCJjcmVhdGVDbGllbnQiLCJmdWxsVXBsb2FkRGlyUGF0aCIsInBhdGhUb0NyZWF0ZSIsImNyZWF0ZURpcmVjdG9yeSIsInJlY3Vyc2l2ZSIsInB1dEZpbGVDb250ZW50cyIsIm92ZXJ3cml0ZSIsImJ1aWxkSW5VcGxvYWRlcnMiLCJhZHZhbmNlZHBsaXN0VXBsb2FkZXIiLCJhbGlzdFVwbG9hZGVyIiwiYWxpWXVuVXBsb2FkZXIiLCJhd3NzM3BsaXN0VXBsb2FkZXIiLCJnaXRodWJVcGxvYWRlciIsImltZ3VyVXBsb2FkZXIiLCJsb2NhbFVwbG9hZGVyIiwibHNreVVwbG9hZGVyIiwicGljbGlzdFVwbG9hZGVyIiwicWluaXVVcGxvYWRlciIsInNmdHBVcGxvYWRlciIsInNtbXNVcGxvYWRlciIsInRjWXVuVXBsb2FkZXIiLCJ1cFl1blVwbG9hZGVyIiwid2ViZGF2cGxpc3RVcGxvYWRlciIsImdldEltZ1NpemUiLCJJbWdGcm9tUGF0aCIsInJlc3VsdHMiLCJpbWdTaXplIiwiSW1nRnJvbUJhc2U2NCIsInBsYXRmb3JtMlNjcmlwdENvbnRlbnQiLCJkYXJ3aW4iLCJ3aW4zMiIsIndpbjEwIiwibGludXgiLCJ3c2wiLCJwbGF0Zm9ybTJTY3JpcHRGaWxlbmFtZSIsImdldENsaXBib2FyZEltYWdlIiwiaW1hZ2VQYXRoIiwiY3JlYXRlSW1hZ2VGb2xkZXIiLCJwbGF0Zm9ybSIsImlzV3NsIiwib3MiLCJyZWxlYXNlIiwiZ2V0Q3VycmVudFBsYXRmb3JtIiwic2NyaXB0UGF0aCIsImV4ZWN1dGlvbiIsImltZ1BhdGgiLCJzaG91bGRLZWVwQWZ0ZXJVcGxvYWRpbmciLCJEQiIsImRiIiwiSlNPTlN0b3JlIiwicmVhZCIsImZsdXNoIiwidW5zZXQiLCJsYW5ndWFnZUxpc3QiLCJVUExPQURfRkFJTEVEIiwiQ0hFQ0tfU0VUVElOR1MiLCJDSEVDS19TRVRUSU5HU19BTkRfTkVUV09SSyIsIlVQTE9BRF9GQUlMRURfUkVBU09OIiwiU0VSVkVSX0VSUk9SIiwiQVVUSF9GQUlMRUQiLCJQSUNCRURfU01NUyIsIlBJQ0JFRF9TTU1TX1RPS0VOIiwiUElDQkVEX1NNTVNfTUVTU0FHRV9UT0tFTiIsIlBJQ0JFRF9TTU1TX0JBQ0tVUF9ET01BSU4iLCJQSUNCRURfU01NU19NRVNTQUdFX0JBQ0tVUF9ET01BSU4iLCJQSUNCRURfQURWQU5DRURQTElTVCIsIlBJQ0JFRF9BRFZBTkNFRFBMSVNUX0VORFBPSU5UIiwiUElDQkVEX0FEVkFOQ0VEUExJU1RfTUVTU0FHRV9FTkRQT0lOVCIsIlBJQ0JFRF9BRFZBTkNFRFBMSVNUX01FVEhPRCIsIlBJQ0JFRF9BRFZBTkNFRFBMSVNUX01FU1NBR0VfTUVUSE9EIiwiUElDQkVEX0FEVkFOQ0VEUExJU1RfRk9STV9EQVRBX0tFWSIsIlBJQ0JFRF9BRFZBTkNFRFBMSVNUX01FU1NBR0VfRk9STV9EQVRBX0tFWSIsIlBJQ0JFRF9BRFZBTkNFRFBMSVNUX0hFQURFUlMiLCJQSUNCRURfQURWQU5DRURQTElTVF9NRVNTQUdFX0hFQURFUlMiLCJQSUNCRURfQURWQU5DRURQTElTVF9CT0RZIiwiUElDQkVEX0FEVkFOQ0VEUExJU1RfTUVTU0FHRV9CT0RZIiwiUElDQkVEX0FEVkFOQ0VEUExJU1RfQ1VTVE9NX1BSRUZJWCIsIlBJQ0JFRF9BRFZBTkNFRFBMSVNUX01FU1NBR0VfQ1VTVE9NX1BSRUZJWCIsIlBJQ0JFRF9BRFZBTkNFRFBMSVNUX1JFU19EQVRBX1BBVEgiLCJQSUNCRURfQURWQU5DRURQTElTVF9NRVNTQUdFX1JFU19EQVRBX1BBVEgiLCJQSUNCRURfTE9DQUwiLCJQSUNCRURfTE9DQUxfUEFUSCIsIlBJQ0JFRF9MT0NBTF9NRVNTQUdFX1BBVEgiLCJQSUNCRURfTE9DQUxfQ1VTVE9NVVJMIiwiUElDQkVEX0xPQ0FMX01FU1NBR0VfQ1VTVE9NVVJMIiwiUElDQkVEX0xPQ0FMX1dFQlBBVEgiLCJQSUNCRURfTE9DQUxfTUVTU0FHRV9XRUJQQVRIIiwiUElDQkVEX0FMSVNUX1BMSVNUIiwiUElDQkVEX0FMSVNUX1VSTCIsIlBJQ0JFRF9BTElTVF9NRVNTQUdFX1VSTCIsIlBJQ0JFRF9BTElTVF9UT0tFTiIsIlBJQ0JFRF9BTElTVF9NRVNTQUdFX1RPS0VOIiwiUElDQkVEX0FMSVNUX1VTRVJOQU1FIiwiUElDQkVEX0FMSVNUX01FU1NBR0VfVVNFUk5BTUUiLCJQSUNCRURfQUxJU1RfUEFTU1dPUkQiLCJQSUNCRURfQUxJU1RfTUVTU0FHRV9QQVNTV09SRCIsIlBJQ0JFRF9BTElTVF9VUExPQURfUEFUSCIsIlBJQ0JFRF9BTElTVF9NRVNTQUdFX1VQTE9BRF9QQVRIIiwiUElDQkVEX0FMSVNUX1dFQl9QQVRIIiwiUElDQkVEX0FMSVNUX01FU1NBR0VfV0VCX1BBVEgiLCJQSUNCRURfQUxJU1RfQ1VTVE9NVVJMIiwiUElDQkVEX0FMSVNUX01FU1NBR0VfQ1VTVE9NVVJMIiwiUElDQkVEX0FMSUNMT1VEIiwiUElDQkVEX0FMSUNMT1VEX0FDQ0VTU0tFWUlEIiwiUElDQkVEX0FMSUNMT1VEX0FDQ0VTU0tFWVNFQ1JFVCIsIlBJQ0JFRF9BTElDTE9VRF9CVUNLRVQiLCJQSUNCRURfQUxJQ0xPVURfQVJFQSIsIlBJQ0JFRF9BTElDTE9VRF9QQVRIIiwiUElDQkVEX0FMSUNMT1VEX0NVU1RPTVVSTCIsIlBJQ0JFRF9BTElDTE9VRF9PUFRJT05TIiwiUElDQkVEX0FMSUNMT1VEX01FU1NBR0VfQVJFQSIsIlBJQ0JFRF9BTElDTE9VRF9NRVNTQUdFX1BBVEgiLCJQSUNCRURfQUxJQ0xPVURfTUVTU0FHRV9PUFRJT05TIiwiUElDQkVEX0FMSUNMT1VEX01FU1NBR0VfQ1VTVE9NVVJMIiwiUElDQkVEX1RFTkNFTlRDTE9VRCIsIlBJQ0JFRF9URU5DRU5UQ0xPVURfVkVSU0lPTiIsIlBJQ0JFRF9URU5DRU5UQ0xPVURfU0VDUkVUSUQiLCJQSUNCRURfVEVOQ0VOVENMT1VEX1NFQ1JFVEtFWSIsIlBJQ0JFRF9URU5DRU5UQ0xPVURfQVBQSUQiLCJQSUNCRURfVEVOQ0VOVENMT1VEX0JVQ0tFVCIsIlBJQ0JFRF9URU5DRU5UQ0xPVURfQVJFQSIsIlBJQ0JFRF9URU5DRU5UQ0xPVURfRU5EUE9JTlQiLCJQSUNCRURfVEVOQ0VOVENMT1VEX1BBVEgiLCJQSUNCRURfVEVOQ0VOVENMT1VEX09QVElPTlMiLCJQSUNCRURfVEVOQ0VOVENMT1VEX0NVU1RPTVVSTCIsIlBJQ0JFRF9URU5DRU5UQ0xPVURfTUVTU0FHRV9BUFBJRCIsIlBJQ0JFRF9URU5DRU5UQ0xPVURfTUVTU0FHRV9BUkVBIiwiUElDQkVEX1RFTkNFTlRDTE9VRF9NRVNTQUdFX1BBVEgiLCJQSUNCRURfVEVOQ0VOVENMT1VEX01FU1NBR0VfQ1VTVE9NVVJMIiwiUElDQkVEX1RFTkNFTlRDTE9VRF9NRVNTQUdFX09QVElPTlMiLCJQSUNCRURfVEVOQ0VOVENMT1VEX01FU1NBR0VfRU5EUE9JTlQiLCJQSUNCRURfVEVOQ0VOVENMT1VEX1NMSU0iLCJQSUNCRURfVEVOQ0VOVENMT1VEX1NMSU1fVElQIiwiUElDQkVEX1RFTkNFTlRDTE9VRF9TTElNX0NPTkZJUk0iLCJQSUNCRURfVEVOQ0VOVENMT1VEX1NMSU1fQ0FOQ0VMIiwiUElDQkVEX0dJVEhVQiIsIlBJQ0JFRF9HSVRIVUJfVE9LRU4iLCJQSUNCRURfR0lUSFVCX1JFUE8iLCJQSUNCRURfR0lUSFVCX1BBVEgiLCJQSUNCRURfR0lUSFVCX0JSQU5DSCIsIlBJQ0JFRF9HSVRIVUJfQ1VTVE9NVVJMIiwiUElDQkVEX0dJVEhVQl9NRVNTQUdFX1JFUE8iLCJQSUNCRURfR0lUSFVCX01FU1NBR0VfQlJBTkNIIiwiUElDQkVEX0dJVEhVQl9NRVNTQUdFX1BBVEgiLCJQSUNCRURfR0lUSFVCX01FU1NBR0VfQ1VTVE9NVVJMIiwiUElDQkVEX1FJTklVIiwiUElDQkVEX1FJTklVX0FDQ0VTU0tFWSIsIlBJQ0JFRF9RSU5JVV9TRUNSRVRLRVkiLCJQSUNCRURfUUlOSVVfQlVDS0VUIiwiUElDQkVEX1FJTklVX1BBVEgiLCJQSUNCRURfUUlOSVVfVVJMIiwiUElDQkVEX1FJTklVX09QVElPTlMiLCJQSUNCRURfUUlOSVVfQVJFQSIsIlBJQ0JFRF9RSU5JVV9NRVNTQUdFX1BBVEgiLCJQSUNCRURfUUlOSVVfTUVTU0FHRV9BUkVBIiwiUElDQkVEX1FJTklVX01FU1NBR0VfT1BUSU9OUyIsIlBJQ0JFRF9RSU5JVV9NRVNTQUdFX1VSTCIsIlBJQ0JFRF9JTUdVUiIsIlBJQ0JFRF9JTUdVUl9DTElFTlRJRCIsIlBJQ0JFRF9JTUdVUl9VU0VSTkFNRSIsIlBJQ0JFRF9JTUdVUl9BQ0NFU1NfVE9LRU4iLCJQSUNCRURfSU1HVVJfQUxCVU0iLCJQSUNCRURfSU1HVVJfUFJPWFkiLCJQSUNCRURfSU1HVVJfTUVTU0FHRV9DTElFTlRJRCIsIlBJQ0JFRF9JTUdVUl9NRVNTQUdFX1VTRVJOQU1FIiwiUElDQkVEX0lNR1VSX01FU1NBR0VfQUNDRVNTX1RPS0VOIiwiUElDQkVEX0lNR1VSX01FU1NBR0VfQUxCVU0iLCJQSUNCRURfSU1HVVJfTUVTU0FHRV9QUk9YWSIsIlBJQ0JFRF9VUFlVTiIsIlBJQ0JFRF9VUFlVTl9CVUNLRVQiLCJQSUNCRURfVVBZVU5fT1BFUkFUT1IiLCJQSUNCRURfVVBZVU5fUEFTU1dPUkQiLCJQSUNCRURfVVBZVU5fUEFUSCIsIlBJQ0JFRF9VUFlVTl9VUkwiLCJQSUNCRURfVVBZVU5fT1BUSU9OUyIsIlBJQ0JFRF9VUFlVTl9FTkRQT0lOVCIsIlBJQ0JFRF9VUFlVTl9BTlRJX0xFRUNIX1RPS0VOIiwiUElDQkVEX1VQWVVOX0VYUElSRV9USU1FIiwiUElDQkVEX1VQWVVOX01FU1NBR0VfT1BFUkFUT1IiLCJQSUNCRURfVVBZVU5fTUVTU0FHRV9QQVNTV09SRCIsIlBJQ0JFRF9VUFlVTl9NRVNTQUdFX1VSTCIsIlBJQ0JFRF9VUFlVTl9NRVNTQUdFX09QVElPTlMiLCJQSUNCRURfVVBZVU5fTUVTU0FHRV9QQVRIIiwiUElDQkVEX1VQWVVOX01FU1NBR0VfRU5EUE9JTlQiLCJQSUNCRURfV0VCREFWUExJU1QiLCJQSUNCRURfV0VCREFWUExJU1RfSE9TVCIsIlBJQ0JFRF9XRUJEQVZQTElTVF9TU0xFTkFCTEVEIiwiUElDQkVEX1dFQkRBVlBMSVNUX1VTRVJOQU1FIiwiUElDQkVEX1dFQkRBVlBMSVNUX1BBU1NXT1JEIiwiUElDQkVEX1dFQkRBVlBMSVNUX1BBVEgiLCJQSUNCRURfV0VCREFWUExJU1RfV0VCU0lURV9QQVRIIiwiUElDQkVEX1dFQkRBVlBMSVNUX0NVU1RPTVVSTCIsIlBJQ0JFRF9XRUJEQVZQTElTVF9BVVRIVFlQRSIsIlBJQ0JFRF9XRUJEQVZQTElTVF9PUFRJT05TIiwiUElDQkVEX1dFQkRBVlBMSVNUX01FU1NBR0VfSE9TVCIsIlBJQ0JFRF9XRUJEQVZQTElTVF9NRVNTQUdFX1NTTEVOQUJMRUQiLCJQSUNCRURfV0VCREFWUExJU1RfTUVTU0FHRV9VU0VSTkFNRSIsIlBJQ0JFRF9XRUJEQVZQTElTVF9NRVNTQUdFX1BBU1NXT1JEIiwiUElDQkVEX1dFQkRBVlBMSVNUX01FU1NBR0VfUEFUSCIsIlBJQ0JFRF9XRUJEQVZQTElTVF9NRVNTQUdFX1dFQlNJVEVfUEFUSCIsIlBJQ0JFRF9XRUJEQVZQTElTVF9NRVNTQUdFX0NVU1RPTVVSTCIsIlBJQ0JFRF9XRUJEQVZQTElTVF9NRVNTQUdFX09QVElPTlMiLCJQSUNCRURfU0ZUUFBMSVNUIiwiUElDQkVEX1NGVFBQTElTVF9IT1NUIiwiUElDQkVEX1NGVFBQTElTVF9QT1JUIiwiUElDQkVEX1NGVFBQTElTVF9VU0VSTkFNRSIsIlBJQ0JFRF9TRlRQUExJU1RfUEFTU1dPUkQiLCJQSUNCRURfU0ZUUFBMSVNUX1BSSVZBVEVLRVkiLCJQSUNCRURfU0ZUUFBMSVNUX1BSSVZBVEVLRVlfUEFTU1BIUkFTRSIsIlBJQ0JFRF9TRlRQUExJU1RfVVBMT0FEUEFUSCIsIlBJQ0JFRF9TRlRQUExJU1RfQ1VTVE9NVVJMIiwiUElDQkVEX1NGVFBQTElTVF9XRUJTSVRFX1BBVEgiLCJQSUNCRURfU0ZUUFBMSVNUX0ZJTEVfVVNFUiIsIlBJQ0JFRF9TRlRQUExJU1RfRklMRV9NT0RFIiwiUElDQkVEX1NGVFBQTElTVF9ESVJfTU9ERSIsIlBJQ0JFRF9TRlRQUExJU1RfTUVTU0FHRV9IT1NUIiwiUElDQkVEX1NGVFBQTElTVF9NRVNTQUdFX1BPUlQiLCJQSUNCRURfU0ZUUFBMSVNUX01FU1NBR0VfUFJJVkFURUtFWSIsIlBJQ0JFRF9TRlRQUExJU1RfTUVTU0FHRV9QUklWQVRFS0VZX1BBU1NQSFJBU0UiLCJQSUNCRURfU0ZUUFBMSVNUX01FU1NBR0VfVVBMT0FEUEFUSCIsIlBJQ0JFRF9TRlRQUExJU1RfTUVTU0FHRV9DVVNUT01VUkwiLCJQSUNCRURfU0ZUUFBMSVNUX01FU1NBR0VfV0VCU0lURV9QQVRIIiwiUElDQkVEX1NGVFBQTElTVF9NRVNTQUdFX0ZJTEVfVVNFUiIsIlBJQ0JFRF9TRlRQUExJU1RfTUVTU0FHRV9GSUxFX01PREUiLCJQSUNCRURfU0ZUUFBMSVNUX01FU1NBR0VfRElSX01PREUiLCJQSUNCRURfUElDTElTVCIsIlBJQ0JFRF9QSUNMSVNUX0hPU1QiLCJQSUNCRURfUElDTElTVF9QT1JUIiwiUElDQkVEX1BJQ0xJU1RfUElDQkVEIiwiUElDQkVEX1BJQ0xJU1RfQ09ORklHTkFNRSIsIlBJQ0JFRF9QSUNMSVNUX0tFWSIsIlBJQ0JFRF9MU0tZX1BMSVNUIiwiUElDQkVEX0xTS1lfVkVSU0lPTiIsIlBJQ0JFRF9MU0tZX01FU1NBR0VfVkVSU0lPTiIsIlBJQ0JFRF9MU0tZX0hPU1QiLCJQSUNCRURfTFNLWV9NRVNTQUdFX0hPU1QiLCJQSUNCRURfTFNLWV9UT0tFTiIsIlBJQ0JFRF9MU0tZX01FU1NBR0VfVE9LRU4iLCJQSUNCRURfTFNLWV9TVFJBVEVHWV9JRCIsIlBJQ0JFRF9MU0tZX01FU1NBR0VfU1RSQVRFR1lfSUQiLCJQSUNCRURfTFNLWV9BTEJVTV9JRCIsIlBJQ0JFRF9MU0tZX01FU1NBR0VfQUxCVU1fSUQiLCJQSUNCRURfTFNLWV9QRVJNSVNTSU9OIiwiUElDQkVEX0xTS1lfTUVTU0FHRV9QRVJNSVNTSU9OIiwiUElDQkVEX0FXU1MzUExJU1QiLCJQSUNCRURfQVdTUzNQTElTVF9BQ0NFU1NLRVlJRCIsIlBJQ0JFRF9BV1NTM1BMSVNUX1NFQ1JFVF9BQ0NFU1NLRVkiLCJQSUNCRURfQVdTUzNQTElTVF9CVUNLRVQiLCJQSUNCRURfQVdTUzNQTElTVF9SRUdJT04iLCJQSUNCRURfQVdTUzNQTElTVF9VUExPQURQQVRIIiwiUElDQkVEX0FXU1MzUExJU1RfRU5EUE9JTlQiLCJQSUNCRURfQVdTUzNQTElTVF9QUk9YWSIsIlBJQ0JFRF9BV1NTM1BMSVNUX1VSTFBSRUZJWCIsIlBJQ0JFRF9BV1NTM1BMSVNUX1BBVEhTVFlMRUFDQ0VTUyIsIlBJQ0JFRF9BV1NTM1BMSVNUX1JFSkVDVFVOQVVUSE9SSVpFRCIsIlBJQ0JFRF9BV1NTM1BMSVNUX0FDTCIsIlBJQ0JFRF9BV1NTM1BMSVNUX0RJU0FCTEVCVUNLRVRQUkVGSVhUT1VSTCIsIlBJQ0JFRF9BV1NTM1BMSVNUX01FU1NBR0VfQUNDRVNTS0VZSUQiLCJQSUNCRURfQVdTUzNQTElTVF9NRVNTQUdFX1NFQ1JFVF9BQ0NFU1NLRVkiLCJQSUNCRURfQVdTUzNQTElTVF9NRVNTQUdFX0JVQ0tFVCIsIlBJQ0JFRF9BV1NTM1BMSVNUX01FU1NBR0VfUkVHSU9OIiwiUElDQkVEX0FXU1MzUExJU1RfTUVTU0FHRV9VUExPQURQQVRIIiwiUElDQkVEX0FXU1MzUExJU1RfTUVTU0FHRV9FTkRQT0lOVCIsIlBJQ0JFRF9BV1NTM1BMSVNUX01FU1NBR0VfUFJPWFkiLCJQSUNCRURfQVdTUzNQTElTVF9NRVNTQUdFX1VSTFBSRUZJWCIsIlBJQ0JFRF9BV1NTM1BMSVNUX01FU1NBR0VfUEFUSFNUWUxFQUNDRVNTIiwiUElDQkVEX0FXU1MzUExJU1RfTUVTU0FHRV9SRUpFQ1RVTkFVVEhPUklaRUQiLCJQSUNCRURfQVdTUzNQTElTVF9NRVNTQUdFX0FDTCIsIlBJQ0JFRF9BV1NTM1BMSVNUX01FU1NBR0VfRElTQUJMRUJVQ0tFVFBSRUZJWFRPVVJMIiwiQlVJTERJTl9XQVRFUk1BUksiLCJCVUlMRElOX1dBVEVSTUFSS19JU0FERFdBVEVSTUFSSyIsIkJVSUxESU5fV0FURVJNQVJLX01FU1NBR0VfSVNBRERXQVRFUk1BUksiLCJCVUlMRElOX1dBVEVSTUFSS19XQVRFUk1BUktUWVBFIiwiQlVJTERJTl9XQVRFUk1BUktfTUVTU0FHRV9XQVRFUk1BUktUWVBFIiwiQlVJTERJTl9XQVRFUk1BUktfSVNGVUxMU0NSRUVOV0FURVJNQVJLIiwiQlVJTERJTl9XQVRFUk1BUktfTUVTU0FHRV9JU0ZVTExTQ1JFRU5XQVRFUk1BUksiLCJCVUlMRElOX1dBVEVSTUFSS19XQVRFUk1BUktERUdSRUUiLCJCVUlMRElOX1dBVEVSTUFSS19NRVNTQUdFX1dBVEVSTUFSS0RFR1JFRSIsIkJVSUxESU5fV0FURVJNQVJLX1dBVEVSTUFSS1RFWFQiLCJCVUlMRElOX1dBVEVSTUFSS19NRVNTQUdFX1dBVEVSTUFSS1RFWFQiLCJCVUlMRElOX1dBVEVSTUFSS19XQVRFUk1BUktURVhURk9OVFBBVEgiLCJCVUlMRElOX1dBVEVSTUFSS19NRVNTQUdFX1dBVEVSTUFSS0ZPTlRQQVRIIiwiQlVJTERJTl9XQVRFUk1BUktfV0FURVJNQVJLRk9OVFJBVElPIiwiQlVJTERJTl9XQVRFUk1BUktfTUVTU0FHRV9XQVRFUk1BUktGT05UUkFUSU8iLCJCVUlMRElOX1dBVEVSTUFSS19XQVRFUk1BUktGT05UQ09MT1IiLCJCVUlMRElOX1dBVEVSTUFSS19NRVNTQUdFX1dBVEVSTUFSS0ZPTlRDT0xPUiIsIkJVSUxESU5fV0FURVJNQVJLX1dBVEVSTUFSS0lNQUdFUEFUSCIsIkJVSUxESU5fV0FURVJNQVJLX01FU1NBR0VfV0FURVJNQVJLSU1BR0VQQVRIIiwiQlVJTERJTl9XQVRFUk1BUktfV0FURVJNQVJLUE9TSVRJT04iLCJCVUlMRElOX1dBVEVSTUFSS19NRVNTQUdFX1dBVEVSTUFSS1BPU0lUSU9OIiwiQlVJTERJTl9SRU5BTUUiLCJCVUlMRElOX1JFTkFNRV9GT1JNQVQiLCJCVUlMRElOX1JFTkFNRV9FTkFCTEUiLCJCVUlMRElOX0NPTVBSRVNTIiwiQlVJTERJTl9DT01QUkVTU19RVUFMSVRZIiwiQlVJTERJTl9DT01QUkVTU19NRVNTQUdFX1FVQUxJVFkiLCJCVUlMRElOX0NPTVBSRVNTX0lTQ09OVkVSVCIsIkJVSUxESU5fQ09NUFJFU1NfTUVTU0FHRV9JU0NPTlZFUlQiLCJCVUlMRElOX0NPTVBSRVNTX0NPTlZFUlRGT1JNQVQiLCJCVUlMRElOX0NPTVBSRVNTX01FU1NBR0VfQ09OVkVSVEZPUk1BVCIsIkJVSUxESU5fQ09NUFJFU1NfSVNSRVNJWkUiLCJCVUlMRElOX0NPTVBSRVNTX01FU1NBR0VfSVNSRVNJWkUiLCJCVUlMRElOX0NPTVBSRVNTX1JFU0laRVdJRFRIIiwiQlVJTERJTl9DT01QUkVTU19NRVNTQUdFX1JFU0laRVdJRFRIIiwiQlVJTERJTl9DT01QUkVTU19SRVNJWkVIRUlHSFQiLCJCVUlMRElOX0NPTVBSRVNTX01FU1NBR0VfUkVTSVpFSEVJR0hUIiwiQlVJTERJTl9DT01QUkVTU19JU1JFU0laRUJZUEVSQ0VOVCIsIkJVSUxESU5fQ09NUFJFU1NfTUVTU0FHRV9JU1JFU0laRUJZUEVSQ0VOVCIsIkJVSUxESU5fQ09NUFJFU1NfSVNGTElQIiwiQlVJTERJTl9DT01QUkVTU19JU0ZMT1AiLCJCVUlMRElOX0NPTVBSRVNTX1JFU0laRVBFUkNFTlQiLCJCVUlMRElOX0NPTVBSRVNTX01FU1NBR0VfUkVTSVpFUEVSQ0VOVCIsIkJVSUxESU5fQ09NUFJFU1NfU0tJUFJFU0laRU9GU01BTExJTUciLCJCVUlMRElOX0NPTVBSRVNTX0lTUk9UQVRFIiwiQlVJTERJTl9DT01QUkVTU19NRVNTQUdFX0lTUk9UQVRFIiwiQlVJTERJTl9DT01QUkVTU19ST1RBVEVERUdSRUUiLCJCVUlMRElOX0NPTVBSRVNTX01FU1NBR0VfUk9UQVRFREVHUkVFIiwiQlVJTERJTl9DT01QUkVTU19JU1JFTU9WRUVYSUYiLCJCVUlMRElOX0NPTVBSRVNTX01FU1NBR0VfSVNSRU1PVkVFWElGIiwiUExVR0lOX0hBTkRMRVJfUExVR0lOX0lOU1RBTExfU1VDQ0VTUyIsIlBMVUdJTl9IQU5ETEVSX1BMVUdJTl9JTlNUQUxMX0ZBSUxFRCIsIlBMVUdJTl9IQU5ETEVSX1BMVUdJTl9JTlNUQUxMX0ZBSUxFRF9SRUFTT04iLCJQTFVHSU5fSEFORExFUl9QTFVHSU5fSU5TVEFMTF9GQUlMRURfUEFUSCIsIlBMVUdJTl9IQU5ETEVSX1BMVUdJTl9VTklOU1RBTExfU1VDQ0VTUyIsIlBMVUdJTl9IQU5ETEVSX1BMVUdJTl9VTklOU1RBTExfRkFJTEVEIiwiUExVR0lOX0hBTkRMRVJfUExVR0lOX1VOSU5TVEFMTF9GQUlMRURfUkVBU09OIiwiUExVR0lOX0hBTkRMRVJfUExVR0lOX1VOSU5TVEFMTF9GQUlMRURfVkFMSUQiLCJQTFVHSU5fSEFORExFUl9QTFVHSU5fVVBEQVRFX1NVQ0NFU1MiLCJQTFVHSU5fSEFORExFUl9QTFVHSU5fVVBEQVRFX0ZBSUxFRCIsIlBMVUdJTl9IQU5ETEVSX1BMVUdJTl9VUERBVEVfRkFJTEVEX1JFQVNPTiIsIlBMVUdJTl9IQU5ETEVSX1BMVUdJTl9VUERBVEVfRkFJTEVEX1ZBTElEIiwiZW4iLCJJMThuTWFuYWdlciIsIm9iamVjdEFkYXB0ZXIiLCJPYmplY3RBZGFwdGVyIiwibGFuZ3VhZ2UiLCJJMThuIiwiYWRhcHRlciIsImRlZmF1bHRMYW5ndWFnZSIsImxvYWRPdXR0ZXJJMThuIiwiaTE4bkZvbGRlciIsImdldE91dHRlckkxOG5Gb2xkZXIiLCJyZWFkZGlyU3luYyIsIndpdGhGaWxlVHlwZXMiLCJpc0ZpbGUiLCJlbmRzV2l0aCIsImkxOG5GaWxlUGF0aCIsImkxOG5GaWxlIiwiaTE4bkZpbGVPYmoiLCJ5YW1sIiwicGF0aEV4aXN0c1N5bmMiLCJhZGRMb2NhbGUiLCJsb2NhbGVzIiwib3JpZ2luTG9jYWxlcyIsImdldExvY2FsZSIsIm5ld0xvY2FsZXMiLCJtZXJnZSIsInNldExvY2FsZSIsImFkZExhbmd1YWdlIiwiUGljR28iLCJfcGx1Z2luTG9hZGVyIiwiaW5pdENvbmZpZ1BhdGgiLCJpbml0Q29uZmlnIiwiZW5zdXJlRmlsZVN5bmMiLCJfY29uZmlnIiwibGlmZWN5Y2xlIiwicmVnaXN0ZXJDb21tYW5kcyIsInByb3BOYW1lIiwic3RhcnQiLCJjbGVhbnVwIiwicmVtb3ZlIl0sIm1hcHBpbmdzIjoicW5EQUlBLE1BQU1BLEdBQWdCLENBQ3BCQyxFQUNBQyxFQUNBQyxFQUNBQyxFQUNBQyxFQUNBQyxLQUVBLElBQUlDLEVBQVVOLEVBQUlNLFFBQVFMLFFBQVFBLEdBQVNDLFlBQVlBLEdBQWFDLE1BQU1BLElBQ3RFRSxNQUFBQSxTQUFBQSxFQUFTRSxTQUNYRCxFQUFVQSxFQUFRRSxPQUFPLHNCQUF1QixzQ0FFOUNILE1BQUFBLFNBQUFBLEVBQVNJLFlBQ1hILEVBQVVBLEVBQVFFLE9BQU8sNEJBQTZCLDZDQUV4REYsRUFBUUYsT0FBT0EsSUFHWE0sR0FBeUIsQ0FDN0JDLE9BQVNDLElBQ1AsTUFBTVosRUFBTVksRUFBSVosSUFDaEJELEdBQ0VDLEVBQ0EsdUJBQ0EsdUJBQ0EsT0FDQSxDQUFDYSxFQUFtQlAsS0FDbEIsTUFBTUMsTUFBRUEsRUFBS0UsU0FBRUEsR0FBYUgsRUFDdEJELEVBQVUsQ0FBRUUsTUFBQUEsRUFBT0UsU0FBQUEsR0FDekJHLEVBQUlGLGNBQWNJLFFBQVFELEVBQVNSLEdBQVNVLE9BQU1DLElBQ2hESixFQUFJSyxJQUFJQyxNQUFNRixRQUdsQixDQUFFVCxPQUFPLEVBQU1FLFVBQVUsSUFFM0JWLEdBQWNDLEVB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
|
|
1
|
+
import{EventEmitter as e}from"events";import t,{readFile as r,readJSONSync as n,ensureDirSync as i,createFileSync as a,emptyDirSync as s,removeSync as o,moveSync as E,pathExistsSync as S,ensureFileSync as I,remove as _}from"fs-extra";import{cloneDeep as l,merge as P,get as c,set as u,unset as p}from"lodash";import A,{homedir as C}from"os";import D from"path";import{Command as T}from"commander";import d from"inquirer";import{imageSize as g}from"image-size";import m,{URL as L}from"url";import h from"text-to-svg";import f from"sharp";import B from"crypto";import{v4 as N}from"uuid";import U from"chalk";import R from"download-git-repo";import{sync as O}from"rimraf";import M from"minimatch";import y from"globby";import{render as G}from"ejs";import w from"dayjs";import b from"util";import{spawn as x}from"cross-spawn";import{sync as W}from"resolve";import v from"axios";import F from"form-data";import H from"https";import{httpsOverHttp as K}from"tunnel";import $ from"heic-convert";import{lookup as k}from"mime-types";import{S3Client as Y,PutObjectCommand as V,GetObjectCommand as j}from"@aws-sdk/client-s3";import{getSignedUrl as q}from"@aws-sdk/s3-request-presigner";import{NodeHttpHandler as z}from"@smithy/node-http-handler";import X from"file-type";import Q from"mime";import{HttpsProxyAgent as Z,HttpProxyAgent as J}from"hpagent";import ee from"qiniu";import{NodeSSH as te}from"node-ssh-no-cpu-features";import{AuthType as re,createClient as ne}from"webdav";import{spawn as ie}from"child_process";import ae from"is-wsl";import{JSONStore as se}from"@picgo/store";import oe from"js-yaml";import{ObjectAdapter as Ee,I18n as Se}from"@picgo/i18n";const Ie=(e,t,r,n,i,a)=>{let s=e.program.command(t).description(r).alias(n);(null==a?void 0:a.proxy)&&(s=s.option("-p, --proxy <proxy>","Add proxy for installing plugins")),(null==a?void 0:a.registry)&&(s=s.option("-r, --registry <registry>","Choose a registry for installing plugins")),s.action(i)},_e={handle:e=>{const t=e.cmd;Ie(t,"install <plugins...>","install picgo plugin","add",((t,r)=>{const{proxy:n,registry:i}=r,a={proxy:n,registry:i};e.pluginHandler.install(t,a).catch((t=>{e.log.error(t)}))}),{proxy:!0,registry:!0}),Ie(t,"uninstall <plugins...>","uninstall picgo plugin","rm",(t=>{e.pluginHandler.uninstall(t).catch((t=>{e.log.error(t)}))})),Ie(t,"update <plugins...>","update picgo plugin","up",((t,r)=>{const{proxy:n,registry:i}=r,a={proxy:n,registry:i};e.pluginHandler.update(t,a).catch((t=>{e.log.error(t)}))}),{proxy:!0,registry:!0})}},le={handle:e=>{e.cmd.program.option("-c, --config <path>","set config path")}};function Pe(e){const t="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";return Array.from({length:e}).map((()=>t.charAt(Math.floor(Math.random()*t.length)))).join("")}function ce(e){return 1===e.toString().length?`0${e}`:e.toString()}function ue(e){return B.createHash("md5").update(e).digest("hex")}function pe(e,t,r,n){const i=new Date,a=i.getFullYear().toString(),s=D.basename(e,D.extname(e)),o={"{Y}":()=>a,"{y}":()=>a.slice(2),"{m}":()=>ce(i.getMonth()+1),"{d}":()=>ce(i.getDate()),"{h}":()=>ce(i.getHours()),"{i}":()=>ce(i.getMinutes()),"{s}":()=>ce(i.getSeconds()),"{ms}":()=>i.getMilliseconds().toString().padStart(3,"0"),"{md5}":()=>ue(n||s),"{md5-16}":()=>ue(n||s).slice(0,16),"{filename}":()=>r?D.basename(r,D.extname(r)):s,"{uuid}":()=>N().replace(/-/g,""),"{timestamp}":()=>i.getTime().toString()};if(void 0===t||!Object.keys(o).some((e=>t.includes(e)))&&!t.includes("localFolder:")&&!t.includes("str-"))return e;const E=D.extname(e);let S=Object.keys(o).reduce(((e,t)=>e.replace(new RegExp(t,"g"),o[t]())),t)+E;return S=S.replace(/{str-(\d+)}/gi,((e,t)=>Pe(parseInt(t,10)))),S=S.replace(/{(localFolder:?(\d+)?)}/gi,((t,r,n)=>{n=Math.max(1,n||0);return D.dirname(e).split(D.sep).slice(0-n).reduce(((e,t)=>`${e}/${t}`)).replace(/:/g,"")})),S}const Ae=e=>/^https?:\/\//.test(e),Ce=e=>{e=e||"";try{return e!==decodeURI(e)}catch(e){return!1}},De=e=>(Ce(e)||(e=encodeURI(e)),e),Te=e=>{try{const{width:t=0,height:r=0,type:n}=g(e);return{real:!0,width:t,height:r,extname:n?`.${n}`:".png"}}catch(e){return{real:!1,width:200,height:200,extname:".png"}}},de=async e=>{try{return{extname:D.extname(e),fileName:D.basename(e),buffer:await r(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,i)=>{(async()=>{var i;try{const i=await t.request({method:"get",url:e,resolveWithFullResponse:!0,responseType:"arraybuffer"}).then((e=>e.data));clearTimeout(r);const a=new L(e).pathname;let s="";try{s=new L(e).searchParams.get("wx_fmt")||D.extname(a)||""}catch(e){s=D.extname(a)||""}!s.startsWith(".")&&s&&(s=`.${s}`),n({buffer:i,fileName:D.basename(a),extname:s,success:!0})}catch(t){clearTimeout(r),n({success:!1,reason:`request ${e} error, ${null!==(i=null==t?void 0:t.message)&&void 0!==i?i:""}`})}})().catch(i)})),i=new Promise((t=>{r=setTimeout((()=>{t({success:!1,reason:`request ${e} timeout`})}),3e4)}));return Promise.race([n,i])},me=e=>/^@[^/]+\/picgo-plugin-/.test(e)?"scope":e.startsWith("picgo-plugin-")?"normal":Le(e)?"simple":"unknown",Le=e=>{if(D.isAbsolute(e))return!1;const r=D.join(process.cwd(),e);return!t.existsSync(r)&&(!e.includes("/")&&!e.includes("\\"))},he=(e,t="")=>t?`@${t}/picgo-plugin-${e}`:`picgo-plugin-${e}`,fe=(e,r=console)=>{switch(me(e)){case"normal":case"scope":return e;case"simple":return he(e);default:{let n=e;return D.isAbsolute(e)&&t.existsSync(e)?Ne(n):(n=D.join(process.cwd(),e),t.existsSync(n)?Ne(n):(r.warn(`Can't find plugin ${e}`),""))}}},Be=(e,r=console)=>{var i;switch(me(e)){case"normal":return Ue(e);case"scope":return Ue(e,!0);case"simple":return Ue(he(e));default:{if(!t.existsSync(e))return r.warn(`Can't find plugin: ${e}`),"";const a=D.posix.join(e,"package.json");if(t.existsSync(a)){const e=n(a)||{};return(null===(i=e.name)||void 0===i?void 0:i.includes("picgo-plugin-"))?e.name:(r.warn(`The plugin package.json's name filed is ${e.name||"empty"}, need to include the prefix: picgo-plugin-`),"")}return r.warn(`Can't find plugin: ${e}`),""}}},Ne=e=>e.split(D.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},Re=[],Oe=e=>Re.some((t=>e.startsWith(t))),Me=e=>"object"==typeof e&&!Array.isArray(e)&&Object.keys(e).length>0;function ye(e){try{return JSON.parse(e)}catch(t){return e}}const Ge=(e=0)=>isNaN(Number(e))?0:Number(e),we=()=>"development"===process.env.NODE_ENV;const be=D.join(__dirname,"assets","piclist.png");async function xe(e,t,r,n,i,a,s,o,E,S,I){o=!o||o<0||o>1?.15:o;const _=f(e,{animated:!0}),{width:l=200}=await _.metadata(),P=await async function(e,t,r,n,i,a,s,o=200,E=0){let S;"image"===e?(s=s||be,S=await f(s).toBuffer()):S=await async function(e,t,r,n){t=t||"测试",n=n||e;const i={anchor:"top",attributes:{fill:r=r||"rgba(204, 204, 204, 0.45)"}},a=h.loadSync(n).getSVG(t,i);return Buffer.from(a)}(t,r,a,n||t);const{width:I,height:_}=await async function(e){const{width:t,height:r}=await f(e).metadata();return{width:t||200,height:r||200}}(S),l=Math.floor(o*Ge(i)),P=Math.floor(l*_/I);return await f(S).resize(l,P,{fit:"inside"}).rotate(E,{background:{r:255,g:255,b:255,alpha:0}}).toBuffer()}(t,r,a,s,o,E,S,l,i);return await _.composite([{input:P,gravity:I||"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))),ve=["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","gif"],He=e=>ve.includes(e);async function Ke(e,t,r,n){try{let n=f(e,{animated:!0});return n=f(await xe(e,t.watermarkType||"text",r,t.isFullScreenWatermark,Ge(t.watermarkDegree),t.watermarkText,t.watermarkFontPath,Ge(t.watermarkScaleRatio),t.watermarkColor,t.watermarkImagePath,t.watermarkPosition),{animated:!0}),await n.toBuffer()}catch(t){return n.error(`Image add watermark error: ${t}`),e}}function $e(e){const t="string"==typeof e.formatConvertObj?ye(e.formatConvertObj):e.formatConvertObj;return{quality:Ge(e.quality),isConvert:e.isConvert||!1,convertFormat:e.convertFormat||"jpg",isReSize:e.isReSize||!1,reSizeHeight:Ge(e.reSizeHeight),reSizeWidth:Ge(e.reSizeWidth),skipReSizeOfSmallImg:e.skipReSizeOfSmallImg||!1,isReSizeByPercent:e.isReSizeByPercent||!1,reSizePercent:Ge(e.reSizePercent),isRotate:e.isRotate||!1,isFlip:e.isFlip||!1,isFlop:e.isFlop||!1,rotateDegree:Ge(e.rotateDegree),picBed:e.picBed||"smms",formatConvertObj:t||{}}}async function ke(e,t,r,n){t=$e(t);try{if(r=Ye(r),!Fe.includes(r)||"gif"===r)return e;let n=f(e,{animated:!0}),i=100;if(We(t.quality)&&t.quality<100&&(i=Math.min(Math.max(Math.round(t.quality),1),100)),t.isReSizeByPercent){if(We(t.reSizePercent)){const e=await n.metadata().then((e=>e.width)),r=await n.metadata().then((e=>e.height));e&&r&&(n=n.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)n=n.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 n.metadata().then((e=>e.width)),r=await n.metadata().then((e=>e.height));if(e&&r&&(!t.skipReSizeOfSmallImg||t.skipReSizeOfSmallImg&&t.reSizeHeight<r)){const i=t.reSizeHeight/r;n=n.resize(Math.round(e*i),t.reSizeHeight,{fit:"inside"})}}else if("number"==typeof t.reSizeWidth&&t.reSizeWidth>0&&("number"!=typeof t.reSizeHeight||0===t.reSizeHeight)){const e=await n.metadata().then((e=>e.width)),r=await n.metadata().then((e=>e.height));if(e&&r&&(!t.skipReSizeOfSmallImg||t.skipReSizeOfSmallImg&&t.reSizeWidth<e)){const i=t.reSizeWidth/e;n=n.resize(t.reSizeWidth,Math.round(r*i),{fit:"inside"})}}if(t.isRotate&&t.rotateDegree&&(n=n.rotate(t.rotateDegree,{background:{r:255,g:255,b:255,alpha:0}})),t.isFlip&&(n=n.flip()),t.isFlop&&(n=n.flop()),t.isConvert){const e=Ve(t,r);e!==r&&(n=n.toFormat(e,{quality:i,mozjpeg:!0}))}else n=r&&He(r)?n.toFormat(r,{quality:i,mozjpeg:!0}):n.toFormat("jpg",{quality:i,mozjpeg:!0});return await n.toBuffer()}catch(t){return n.error(`Image process error: ${t}`),e}}const Ye=e=>e.toLowerCase().replace(".","");function Ve(e,t){if(e=$e(e||{}),"gif"===(t=Ye(t)))return"gif";let r=(null==e?void 0:e.convertFormat)||"jpg";if((null==e?void 0:e.formatConvertObj)&&Object.keys(e.formatConvertObj).length>0){const n=e.formatConvertObj;Object.keys(n).includes(t)&&(r=n[t],He(r)||(r="jpg"))}return"imgur"===(null==e?void 0:e.picBed)&&"webp"===r&&(r="jpg"),r}const je=(e,t)=>(t=Ye(t),!!e&&!!e.isAddWatermark&&Fe.includes(t)&&"svg"!==t),qe=(e,t)=>{if(!Fe.includes(Ye(t))||!e)return!1;const{quality:r,isReSizeByPercent:n,reSizePercent:i,isReSize:a,reSizeHeight:s,reSizeWidth:o,isRotate:E,rotateDegree:S,isConvert:I,convertFormat:_,isFlip:l,isFlop:P}=$e(e);if(We(r)&&r<100)return!0;if(n&&We(i))return!0;if(a&&("number"==typeof s&&s>0||"number"==typeof o&&o>0))return!0;if(E&&S)return!0;if(l||P)return!0;if(I){return t!==(_||"jpg")}return!1},ze=async(e,t)=>(t=Ye(t),Fe.includes(t)&&"svg"!==t?await f(e,{animated:!0}).toBuffer():e);var Xe=Object.freeze({__proto__:null,randomStringGenerator:Pe,renameFileNameWithTimestamp:function(e){return`${Math.floor(Date.now()/1e3)}${Pe(5)}${D.extname(e)}`},renameFileNameWithRandomString:function(e,t=5){return`${Pe(t)}${D.extname(e)}`},renameFileNameWithCustomString:pe,isUrl:Ae,isUrlEncode:Ce,handleUrlEncode:De,getImageSize:Te,getFSFile:de,getURLFile:ge,getPluginNameType:me,isSimpleName:Le,handleStreamlinePluginName:e=>/^@[^/]+\/picgo-plugin-/.test(e)?e.replace(/^@[^/]+\/picgo-plugin-/,""):e.replace(/picgo-plugin-/,""),handleCompletePluginName:he,getProcessPluginName:fe,getNormalPluginName:Be,handleUnixStylePath:Ne,removePluginVersion:Ue,configBlackList:Re,isConfigKeyInBlackList:Oe,isInputConfigValid:Me,safeParse:ye,forceNumber:Ge,isDev:we,AddWatermark:xe,imageAddWaterMark:Ke,imageCompress:ke,getConvertedFormat:Ve,isNeedAddWatermark:je,isNeedCompress:qe,removeExif:ze});const Qe={handle:e=>{e.cmd.program.command("upload").description("upload, go go go").arguments("[input...]").alias("u").action((r=>{(async()=>{const n=r.map((e=>Ae(e)?e:D.resolve(e))).filter((r=>{const n=t.existsSync(r)||Ae(r);return n||e.log.warn(`${r} does not exist.`),n}));await e.upload(n)})().catch((t=>{e.log.error(t)}))}))}};function Ze({path:e,startSlash:t=!1,endSlash:r=!0,rootToEmpty:n=!0}){const i=null==e?void 0:e.replace(/^\/+|\/+$/g,"").replace(/\/{2,}/g,"/");return i?`${t?"/":""}${i}${r?"/":""}`:n?"":"/"}function Je(e){return e.replace(/\/{2,}/g,"/").split("/").map((e=>encodeURIComponent(e))).join("/")}const et="advancedplist",tt="alistplist",rt="aliyun",nt="aws-s3-plist",it="github",at="imgur",st="local",ot="lskyplist",Et="piclist",St="qiniu",It="sftpplist",_t="smms",lt="tcyun",Pt="upyun",ct="webdavplist",ut=(e,t,r,n,i,a,s="PICBED",o)=>Object.assign({name:r,type:n,get prefix(){return e.i18n.translate(`${s}_${t.toUpperCase()}_${r.toUpperCase()}`)},get alias(){return e.i18n.translate(`${s}_${t.toUpperCase()}_${r.toUpperCase()}`)},default:i,required:a},o);const pt=e=>({advancedplist:e.i18n.translate("PICBED_ADVANCEDPLIST"),alistplist:e.i18n.translate("PICBED_ALIST_PLIST"),aliyun:e.i18n.translate("PICBED_ALICLOUD"),"aws-s3-plist":e.i18n.translate("PICBED_AWSS3PLIST"),github:e.i18n.translate("PICBED_GITHUB"),imgur:e.i18n.translate("PICBED_IMGUR"),local:e.i18n.translate("PICBED_LOCAL"),lskyplist:e.i18n.translate("PICBED_LSKY_PLIST"),piclist:e.i18n.translate("PICBED_PICLIST"),qiniu:e.i18n.translate("PICBED_QINIU"),sftpplist:e.i18n.translate("PICBED_SFTPPLIST"),smms:e.i18n.translate("PICBED_SMMS"),tcyun:e.i18n.translate("PICBED_TENCENTCLOUD"),upyun:e.i18n.translate("PICBED_UPYUN"),webdavplist:e.i18n.translate("PICBED_WEBDAVPLIST")}),At={compress:{config:{config:e=>{const t=e.getConfig("buildIn.compress")||{};return[ut(e,"compress","quality","input",t.quality||100,!1,"BUILDIN"),ut(e,"compress","isConvert","confirm",t.isConvert||!1,!1,"BUILDIN"),ut(e,"compress","convertFormat","list",t.convertFormat||"jpg",!1,"BUILDIN",{choices:["avif","dz","fits","gif","heif","input","jpeg","jpg","jp2","jxl","magick","openslide","pdf","png","ppm","raw","svg","tiff","tif","v","webp"]}),ut(e,"compress","isReSize","confirm",t.isReSize||!1,!1,"BUILDIN"),ut(e,"compress","reSizeWidth","input",t.reSizeWidth||500,!1,"BUILDIN"),ut(e,"compress","reSizeHeight","input",t.reSizeHeight||500,!1,"BUILDIN"),ut(e,"compress","skipReSizeOfSmallImg","confirm",t.skipReSizeOfSmallImg||!1,!1,"BUILDIN"),ut(e,"compress","isReSizeByPercent","confirm",t.isReSizeByPercent||!1,!1,"BUILDIN"),ut(e,"compress","reSizePercent","input",t.reSizePercent||50,!1,"BUILDIN"),ut(e,"compress","isFlip","confirm",t.isFlip||!1,!1,"BUILDIN"),ut(e,"compress","isFlop","confirm",t.isFlop||!1,!1,"BUILDIN"),ut(e,"compress","isRotate","confirm",t.isRotate||!1,!1,"BUILDIN"),ut(e,"compress","rotateDegree","input",t.rotateDegree||90,!1,"BUILDIN"),ut(e,"compress","isRemoveExif","confirm",t.isRemoveExif||!1,!1,"BUILDIN")]}}.config,key:"BUILDIN_COMPRESS"},watermark:{config:{config:e=>{const t=e.getConfig("buildIn.watermark")||{};return[ut(e,"watermark","isAddWatermark","confirm",t.isAddWatermark||!1,!1,"BUILDIN"),ut(e,"watermark","watermarkType","list",t.watermarkType||"text",!1,"BUILDIN",{choices:["text","image"]}),ut(e,"watermark","isFullScreenWatermark","confirm",t.isFullScreenWatermark||!1,!1,"BUILDIN"),ut(e,"watermark","watermarkDegree","input",t.watermarkDegree||0,!1,"BUILDIN"),ut(e,"watermark","watermarkText","input",t.watermarkText||"",!1,"BUILDIN"),ut(e,"watermark","watermarkFontPath","input",t.watermarkFontPath||"",!1,"BUILDIN"),ut(e,"watermark","watermarkScaleRatio","input",t.watermarkScaleRatio||.15,!1,"BUILDIN"),ut(e,"watermark","watermarkColor","input",t.watermarkColor||"rgba(204, 204, 204, 0.45)",!1,"BUILDIN"),ut(e,"watermark","watermarkImagePath","input",t.watermarkImagePath||"",!1,"BUILDIN"),ut(e,"watermark","watermarkPosition","list",t.watermarkPosition||"southeast",!1,"BUILDIN",{choices:["north","northeast","southeast","south","southwest","northwest","west","east","center","centre"]})]}}.config,key:"BUILDIN_WATERMARK"},rename:{config:{config:e=>{const t=e.getConfig("buildIn.rename")||{};return[ut(e,"rename","format","input",t.format||"{filename}",!1,"BUILDIN"),ut(e,"rename","enable","confirm",t.enable||!1,!1,"BUILDIN")]}}.config,key:"BUILDIN_RENAME"},skipProcess:{config:{config:e=>{const t=e.getConfig("buildIn.skipProcess")||{};return[ut(e,"skipProcess","skipProcessExtList","input",t.skipProcessExtList||"zip,rar,7z,tar,gz,tar.gz,tar.bz2,tar.xz",!1,"BUILDIN")]}}.config,key:"BUILDIN_SKIPPROCESS"}},Ct=async(e,t,r,n)=>{const i=await e.cmd.inquirer.prompt(t),a=Dt(r,n);e.saveConfig({[a]:i}),"uploader"===r?e.saveConfig({"picBed.current":n,"picBed.uploader":n}):"transformer"===r&&e.saveConfig({"picBed.transformer":n})},Dt=(e,t)=>({uploader:`picBed.${t}`,transformer:`transformer.${t}`,buildin:`buildIn.${t}`}[e]||t),Tt={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()=>{try{switch(t){case"buildin":await(async(e,t)=>{if(t&&t in At){const r=At[t];return void await Ct(e,r.config(e),"buildin",t)}const r=[{type:"list",name:"buildin",choices:Object.entries(At).map((([t,{key:r}])=>({name:e.i18n.translate(r),value:t}))),message:"Choose a buildin module"}],n=await e.cmd.inquirer.prompt(r),i=At[n.buildin];await Ct(e,i.config(e),"buildin",n.buildin)})(e,r);break;case"uploader":case"transformer":await(async(e,t,r)=>{if(r){const n=e.helper[t].get(r);return n?void(n.config&&await Ct(e,n.config(e),t,r)):void e.log.error(`No ${t} named ${r}`)}const n=e.helper[t].getIdList().map((t=>({name:pt(e)[t]||t,value:t}))),i=[{type:"list",name:t,choices:n,message:`Choose a(n) ${t}`}],a=await e.cmd.inquirer.prompt(i),s=e.helper[t].get(a[t]);(null==s?void 0:s.config)&&await Ct(e,s.config(e),t,a[t])})(e,t,r);break;case"plugin":await(async(e,t)=>{if(t){const r=t.includes("picgo-plugin-")?t:`picgo-plugin-${t}`;if(!Object.keys(e.getConfig("picgoPlugins")).includes(r))return void e.log.error(`No plugin named ${r}`);const n=e.pluginLoader.getPlugin(r);return void((null==n?void 0:n.config)&&await Ct(e,n.config(e),"plugin",r))}const r=[{type:"list",name:"plugin",choices:e.pluginLoader.getFullList(),message:"Choose a plugin"}],n=await e.cmd.inquirer.prompt(r),i=e.pluginLoader.getPlugin(n.plugin);(null==i?void 0:i.config)&&await Ct(e,i.config(e),"plugin",n.plugin)})(e,r);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)}))}))}},dt={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 i={uploader:{type:"list",name:"uploader",message:"Use an uploader",choices:e.helper.uploader.getIdList().map((t=>({name:pt(e)[t]||t,value:t}))),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(!i[r])return e.log.warn(`No module named ${r}`),void e.log.warn("Available modules are uploader|transformer|plugins");n.push(i[r])}else n=Object.keys(i).map((e=>i[e]));const a=await t.inquirer.prompt(n);if(a.plugins){const t=e.getConfig("picgoPlugins");Object.keys(t).forEach((e=>{a.plugins.includes(e)?t[e]=!0:t[e]=!1})),e.saveConfig({picgoPlugins:t})}e.saveConfig({"picBed.current":a.uploader||e.getConfig("picBed.current"),"picBed.uploader":a.uploader||e.getConfig("picBed.current"),"picBed.transformer":a.transformer||"path"}),e.log.success("Configure saved successfully!")}catch(t){if(e.log.error(t),process.argv.includes("--debug"))throw t}})().catch((t=>{e.log.error(t)}))}))}},gt={handle:e=>{e.cmd.program.option("-p, --proxy <url>","set proxy for uploading",(t=>{e.setConfig({"picBed.proxy":t})}))}},mt=async(e,t)=>{try{const r=ht(t.tmp),n=D.join(t.tmp,"template");let i={};r.prompts&&r.prompts.length>0&&(i=await e.cmd.inquirer.prompt(r.prompts));let a=await y(["**/*"],{cwd:n,dot:!0});if(a=a.filter((t=>{let n="";return Object.keys(r.filters).forEach((e=>{M(t,e,{dot:!0})&&(n=t)})),!n||Lt(e,r.filters[n],i)})),0===a.length)return void e.log.warn("Template files not found!");const s=ft(a,n,i);Bt(t.dest,s),"function"==typeof r.complete&&r.complete({answers:i,options:t,files:a,ctx:e}),r.completeMessage&&e.log.success(r.completeMessage),e.log.success("Done!")}catch(t){e.log.error(t)}},Lt=(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}},ht=e=>{const r=D.join(e,"index.js");if(t.existsSync(r)){return require(r)}return{}},ft=(e,r,n)=>{const i={};return e.forEach((e=>{const a=t.readFileSync(D.join(r,e),"utf8"),s=G(a,n);(Buffer.isBuffer(s)||/[^\s]/.test(s))&&(i[e]=s)})),i},Bt=(e,r)=>{Object.keys(r).forEach((n=>{const a=D.join(e,n);i(D.dirname(a)),t.writeFileSync(a,r[n])}))},Nt=(e,r)=>{r.offline?t.existsSync(r.template)?mt(e,r).catch((t=>{e.log.error(t)})):e.log.error(`Local template ${r.template} not found`):(r.template=r.hasSlash?r.template:"PicGo/picgo-template-"+r.template,Ut(e,r))},Ut=(e,r)=>{t.existsSync(r.tmp)&&O(r.tmp),e.log.info("Template files are downloading..."),R(r.template,r.tmp,{clone:r.clone},(t=>{t?e.log.error(t):(e.log.success("Template files are downloaded!"),mt(e,r).catch((t=>{e.log.error(t)})))}))},Rt={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(((r,n,i)=>{(async()=>{try{const a=r.includes("/"),s=!n||"."===n,o=D.resolve(n||"."),E=i.clone||!1,S=i.offline||!1,I=D.join(C(),".piclist/templates",r.replace(/[/:]/g,"-"));i.offline&&(r=I);const _={template:r,project:n,hasSlash:a,inPlace:s,dest:o,clone:E,tmp:I,offline:S};s||t.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&&Nt(e,_)})):Nt(e,_)}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(U.gray(" # create a new project with an official template")),console.log(" $ picgo init plugin my-project"),console.log(),console.log(U.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 language, zh-CN, zh-TW, en").action((async(t="")=>{const r=e.i18n.getLanguageList();if(!t){const n=[{type:"list",name:"i18n",choices:r,message:"Choose a language",default:e.getConfig("settings.language")||"zh-CN"}];t=(await e.cmd.inquirer.prompt(n)).i18n}r.includes(t)?(e.i18n.setLanguage(t),e.log.success(`Language set to ${t}`)):e.log.warn("No such language")}))}};class Mt{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),Mt.currentPlugin&&(this.pluginIdMap.has(Mt.currentPlugin)?null===(r=this.pluginIdMap.get(Mt.currentPlugin))||void 0===r||r.push(e):this.pluginIdMap.set(Mt.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 yt=(e=null)=>{Mt.currentPlugin=e};class Gt{constructor(e){this.name="commander",this.list=new Map,this.pluginIdMap=new Map,this.program=new T,this.inquirer=d,this.ctx=e}getName(){return this.name}init(){var e;this.program.version("1.9.14","-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",_e),e.cmd.register("config",le),e.cmd.register("setting",Tt),e.cmd.register("upload",Qe),e.cmd.register("use",dt),e.cmd.register("proxy",gt),e.cmd.register("init",Rt),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=Mt.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 wt,bt,xt;!function(e){e.success="success",e.info="info",e.warn="warn",e.error="error"}(wt||(wt={})),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"}(bt||(bt={})),function(e){e.CONFIG_CHANGE="CONFIG_CHANGE"}(xt||(xt={}));class Wt{constructor(e){this.level={[wt.success]:"green",[wt.info]:"blue",[wt.warn]:"yellow",[wt.error]:"red"},this.ctx=e}handleLog(e,...t){if(this.logLevel=this.ctx.getConfig("settings.logLevel"),!this.ctx.getConfig("silent")&&this.checkLogLevel(e,this.logLevel)){const r=U[this.level[e]](`[PicList ${e.toUpperCase()}]:`);console.log(r,...t),this.logPath=this.ctx.getConfig("settings.logPath")||D.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(U.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(t.existsSync(e)){const r=t.statSync(e).size,n=1024*Ge(this.ctx.getConfig("settings.logFileSizeLimit")||10)*1024;return{isLarge:r>n,logFileSize:r,logFileSizeLimit:n}}return{isLarge:!1}}recreateLogFile(e){t.existsSync(e)&&(t.unlinkSync(e),a(e))}handleWriteLog(e,r,...n){try{let i=`${w().format("YYYY-MM-DD HH:mm:ss")} [PicList ${r.toUpperCase()}] `;n.forEach((e=>{e instanceof Error&&"error"===r?i+=`\n------Error Stack Begin------\n${b.format(null==e?void 0:e.stack)}\n-------Error Stack End------- `:("object"==typeof e&&(e=JSON.stringify(e,null,2)),i+=`${e} `)})),i+="\n",t.appendFileSync(e,i)}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(wt.success,...e)}info(...e){this.handleLog(wt.info,...e)}error(...e){this.handleLog(wt.error,...e)}warn(...e){this.handleLog(wt.warn,...e)}debug(...e){we()&&this.handleLog(wt.info,...e)}}class vt{constructor(e){this.ctx=e}async install(e,t={},r){const n=[],i=e.map((e=>Ft(this.ctx,e))).filter((e=>this.ctx.pluginLoader.hasPlugin(e.pkgName)?(n.push(e.pkgName),this.ctx.log.success(`PicList has already installed ${e.pkgName}`),!1):!!e.success)),a=i.map((e=>e.fullName)),s=i.map((e=>e.pkgName));if(a.length>0){const e=await this.execCommand("install",a,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=>Ft(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=>Ft(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={},i={}){const a=n.registry||this.ctx.getConfig("settings.registry"),s=n.proxy||this.ctx.getConfig("settings.proxy");return await new Promise((n=>{var o,E;let S=[e].concat(t).concat("--color=always").concat("--save");a&&(S=S.concat(`--registry=${a}`)),s&&(S=S.concat(`--proxy=${s}`));try{const e=x("npm",S,{cwd:r,env:Object.assign({},process.env,i)});let t="";null===(o=e.stdout)||void 0===o||o.on("data",(e=>{t+=e})).pipe(process.stdout),null===(E=e.stderr)||void 0===E||E.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(bt.FAILED,"NPM is not installed")}))}catch(e){this.ctx.log.error(e),this.ctx.emit(bt.FAILED,e)}}))}}const Ft=(e,t)=>{const r={success:!1,fullName:"",pkgName:""},n=fe(t,e.log);if(!n)return r;const i=Be(n,e.log);return i?{success:!0,fullName:n,pkgName:i}:r};class Ht{constructor(e){this.list=[],this.fullList=new Set,this.pluginMap=new Map,this.ctx=e,this.init()}init(){const e=D.join(this.ctx.baseDir,"package.json");if(!t.existsSync(e)){const r={name:"picgo-plugins",description:"picgo-plugins",repository:"https://github.com/Kuingsmile/PicList-Core",license:"MIT"};t.writeFileSync(e,JSON.stringify(r),"utf8")}}resolvePlugin(e,t){try{return W(t,{basedir:e.baseDir})}catch(r){return D.join(e.baseDir,"node_modules",t)}}load(){const e=D.join(this.ctx.baseDir,"node_modules/");if(!t.existsSync(e))return!1;const r=D.join(this.ctx.baseDir,"package.json"),i=n(r),a=Object.keys(i.dependencies||{}),s=Object.keys(i.devDependencies||{}),o=a.concat(s).filter((e=>{if(!/^picgo-plugin-|^@[^/]+\/picgo-plugin-/.test(e))return!1;const r=this.resolvePlugin(this.ctx,e);return t.existsSync(r)}));for(const e of o)this.registerPlugin(e);return!0}registerPlugin(e,t){if(e&&"string"==typeof e){this.fullList.add(e);try{if(t){this.list.push(e),yt(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),yt(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(bt.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),yt(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=D.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 Kt=new e,$t=new H.Agent({maxVersion:"TLSv1.2",minVersion:"TLSv1.2",rejectUnauthorized:!1});function kt(e,t,r){"object"==typeof r&&"value"in r&&"options"in r?e.append(t,r.value,r.options):e.append(t,r)}function Yt(e){return Object.assign(Object.assign({},e),{statusCode:e.status,body:e.data})}function Vt(e){var t,r,n,i,a,s,o;const E={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===(i=null==e?void 0:e.response)||void 0===i?void 0:i.status)||0,message:(null==e?void 0:e.message)||"",stack:(null==e?void 0:e.stack)||{},response:{status:(null===(a=null==e?void 0:e.response)||void 0===a?void 0:a.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(E)}class jt{constructor(e){this.proxy="",this.options={},this.ctx=e,this.init(),Kt.on(xt.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 L(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=K({proxy:{host:this.options.proxy.host,port:this.options.proxy.port}}),this.options.proxy=!1):this.options.httpsAgent=$t;const r=v.create(this.options);r.interceptors.response.use(Yt,Vt);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 i=e.proxy;if("string"==typeof i){try{i=new L(e.proxy)}catch(e){i=!1,n.proxy=!1,console.error(e)}r=!0}i&&((null===(t=e.url)||void 0===t?void 0:t.startsWith("https://"))?(n.proxy=!1,n.httpsAgent=K({proxy:{host:null==i?void 0:i.hostname,port:parseInt(null==i?void 0:i.port,10)}})):n.proxy={host:i.hostname,port:parseInt(i.port,10),protocol:"http"})}if("formData"in e){const t=new F;for(const r in e.formData)kt(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 i="";return(null===(t=null==e?void 0:e.headers)||void 0===t?void 0:t.contentType)?(i=e.headers.contentType,delete e.headers.contentType):(null===(r=null==e?void 0:e.headers)||void 0===r?void 0:r.ContentType)?(i=e.headers.ContentType,delete e.headers.ContentType):(null===(n=null==e?void 0:e.headers)||void 0===n?void 0:n["content-type"])&&(i=e.headers["content-type"],delete e.headers["content-type"]),""!==i&&e.headers&&(e.headers["Content-Type"]=i),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))}}const qt="Add watermark to image",zt="Compress or convert image",Xt="Remove exif info",Qt="Download ttf file",Zt="Download ttf file successfully",Jt="Download ttf file failed",er="Download ttf file failed, skip add watermark",tr=0,rr=30,nr=60,ir=-1,ar=["zip","rar","7z","tar","gz","tar.gz","tar.bz2","tar.xz"];class sr extends e{constructor(e){super(),this.ctx=e,this.ttfPath=D.join(e.baseDir,"assets","simhei.ttf"),this.initializeDirs()}initializeDirs(){i(D.join(this.ctx.baseDir,"imgTemp"));this.ctx.getConfig("settings.enableSecondUploader")||!1||s(D.join(this.ctx.baseDir,"piclistTemp"))}async downloadTTF(){try{if(i(D.dirname(this.ttfPath)),t.existsSync(this.ttfPath)&&t.statSync(this.ttfPath).size>0)return!0;this.ctx.log.info(Qt);const e=await v.get("https://release.piclist.cn/simhei.ttf",{responseType:"arraybuffer"});return t.writeFileSync(this.ttfPath,e.data),this.ctx.log.info(Zt),!0}catch(e){return this.ctx.log.error(Jt),!1}}getProcessingOptions(e){const t=e.getConfig("buildIn.compress"),r=e.getConfig("buildIn.watermark");if(t){const r=this.getUploaderType(e),n=e.helper.uploader.get(r);t.picBed=n?r:"smms"}return{compressOptions:t,watermarkOptions:r}}getUploaderType(e){return e.getConfig("picBed.uploader")||e.getConfig("picBed.current")||"smms"}getSkipExtensions(e){const t=e.getConfig("buildIn.skipProcess")||{},r=t.skipProcessExtList?t.skipProcessExtList.split(",").map((e=>e.trim())):ar;return new Set(r.map((e=>{const t=e.trim().toLowerCase();return t.startsWith(".")?t:`.${t}`})))}async start(e,t=!1){const r=(e=>({configPath:e.configPath,baseDir:e.baseDir,log:e.log,cmd:e.cmd,output:[],input:[],rawInput:[],processedInput:[],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),uploadReturnCtx:e.uploadReturnCtx.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.");return this.initializeContext(r,e),t?await this.handleSkipProcess(r):await this.executeLifecycle(r)}catch(e){return this.handleError(r,e)}}initializeContext(e,t){e.input=t,e.output=[],e.rawInputPath=[],e.rawInput=l(t)}async handleSkipProcess(e){return e.log.info("Skip process."),e.output=e.input,await this.doUpload(e),e.input=e.rawInput,await this.afterUpload(e),e}async executeLifecycle(e){return await this.preprocess(e),await this.beforeTransform(e),await this.doTransform(e),await this.buildInRename(e),await this.beforeUpload(e),e.processedInput=l(e.output),await this.doUpload(e),e.input=e.rawInput,await this.afterUpload(e),e}handleError(e,t){if(e.log.warn(bt.FAILED),e.emit(bt.UPLOAD_PROGRESS,ir),e.emit(bt.FAILED,t),e.log.error(t),e.getConfig("debug"))throw t;return e}async preprocess(e){const{compressOptions:t,watermarkOptions:r}=this.getProcessingOptions(e),n=this.getSkipExtensions(e);if(e.emit(bt.UPLOAD_PROGRESS,tr),e.emit(bt.BEFORE_TRANSFORM,e),e.log.info("Before transform"),t||r){const i=D.join(e.baseDir,"piclistTemp");await this.processImages(e,i,t,r,n)}else this.initializeRawInputPaths(e);return e}initializeRawInputPaths(e){for(const t of e.input)e.rawInputPath.push(t)}async processImages(e,t,r,n,i){await Promise.allSettled(e.input.map((async(a,s)=>{await this.processImage(a,s,e,t,r,n,i)})))}async processImage(e,r,n,i,a,s,o){const E=Ae(e),S=E?await ge(e,n):{success:!1};if(E&&(!S.success||!S.buffer))return;n.rawInputPath[r]=e;const I=E?S.extname||"":D.extname(e),_=o.has(I.toLowerCase()),l=E?S.buffer:t.readFileSync(e),P=await this.applyProcessing(l,I,a,s,_,e,i,n);P&&await this.saveProcessedImage(e,r,n,i,P,I,a,E,S)}async applyProcessing(e,t,r,n,i,a,s,o){let E;return je(n,t)&&!i&&(E=await this.addWatermark(e,n,o)),qe(r,t)&&!i&&(E=await this.compressImage(e,E,t,r,a,s,o)),E||!(null==r?void 0:r.isRemoveExif)||i||(o.log.info(Xt),E=await ze(e,t)),E}async addWatermark(e,t,r){if(!(null==t?void 0:t.watermarkFontPath)&&"image"!==(null==t?void 0:t.watermarkType)){if(!await this.downloadTTF())return void this.ctx.log.warn(er)}return r.log.info(qt),await Ke(e,t,this.ttfPath,r.log)}async compressImage(e,t,r,n,i,a,s){s.log.info(zt);const o=r.toLowerCase();return Ae(i)||".heic"!==o&&".heif"!==o?await ke(null!=t?t:e,n,r,s.log):await this.convertHeicAndCompress(e,i,r,a,n,s)}async convertHeicAndCompress(e,r,n,i,a,s){const o=await $({buffer:e,format:"JPEG",quality:1}),E=D.join(i,`${D.basename(r,n)}.jpg`);return t.writeFileSync(E,Buffer.from(o)),await ke(t.readFileSync(E),a,".jpg",s.log)}async saveProcessedImage(e,r,n,i,a,s,o,E,S){let I=(null==o?void 0:o.isConvert)?Ve(o,s):s;I=I.startsWith(".")?I:`.${I}`;const _=E?D.join(i,`${this.getFileBaseName(S)}${I}`):D.join(i,`${D.basename(e,s)}${I}`);n.rawInputPath[r]=D.join(D.dirname(e),E?D.basename(_):`${D.basename(e,s)}${I}`),t.writeFileSync(_,a),n.input[r]=_}getFileBaseName(e){return e.fileName?D.basename(e.fileName,D.extname(e.fileName)):(new Date).getTime().toString()}async buildInRename(e){const t=e.getConfig("buildIn.rename")||{};if(!t.enable)return e;const r=t.format||"{filename}";return e.output=e.output.map(((t,n)=>{let i=t.fileName;return r&&(i=pe(e.rawInputPath[n],r,void 0,t.base64Image?t.base64Image:t.buffer),i=i.replace(/\/+/g,"/"),"/"===i.slice(-1)&&(i+=n.toString())),t.fileName=i,t})),e}async beforeTransform(e){return await this.handlePlugins(e.helper.beforeTransformPlugins,e),e}async doTransform(e){e.emit(bt.UPLOAD_PROGRESS,rr);const t=e.getConfig("picBed.transformer")||"path";let r=e.helper.transformer.get(t),n=t;return r||(r=e.helper.transformer.get("path"),n="path",e.log.warn(`Can't find transformer - ${t}, switch to default transformer - path`)),e.log.info(`Transforming... Current transformer is [${n}]`),await(null==r?void 0:r.handle(e)),e}async beforeUpload(e){return e.emit(bt.UPLOAD_PROGRESS,nr),e.log.info("Before upload"),e.emit(bt.BEFORE_UPLOAD,e),await this.handlePlugins(e.helper.beforeUploadPlugins,e),e}async doUpload(e){const t=this.getUploaderType(e);let r=e.helper.uploader.get(t),n=t;r||(e.log.warn(`Can't find uploader - ${t}, switch to default uploader - smms`),n="smms",r=e.helper.uploader.get("smms")),e.log.info(`Uploading... Current uploader is [${n}]`),await(null==r?void 0:r.handle(e));for(const t of e.output)t.type=n;return e}async afterUpload(e){e.emit(bt.AFTER_UPLOAD,e),e.emit(bt.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 i=0;i<r;i++)void 0!==e.output[i].imgUrl&&(t+=n?De(e.output[i].imgUrl):e.output[i].imgUrl,i!==r-1&&(t+="\n")),delete e.output[i].base64Image,delete e.output[i].buffer;return e.emit(bt.FINISHED,e),e.log.success(`\n${t}`),e}async handlePlugins(e,t){const r=e.getList(),n=e.getIdList(),i=e.getName();return await Promise.all(r.map((async(e,r)=>{try{t.log.info(`${i}: ${n[r]} running`),await e.handle(t)}catch(e){throw t.log.error(`${i}: ${n[r]} error`),e}}))),t}}const or=(e,t,r,n,i,a,s)=>({method:n.toUpperCase(),url:r,headers:Object.assign({contentType:"multipart/form-data","User-Agent":"PicList"},i),formData:Object.assign({[s]:{value:e,options:{filename:t}}},a),json:!0}),Er=async e=>{const t=e.getConfig("picBed.advancedplist");if(!t)throw new Error("Can not find advancedplist config");const r=e.output;for(const n of r)if(n.fileName&&n.buffer){const r=n.buffer||(n.base64Image?Buffer.from(n.base64Image,"base64"):null);if(!r)continue;const i=or(r,n.fileName,t.endpoint,t.method||"POST",JSON.parse(t.headers||"{}"),JSON.parse(t.body||"{}"),t.formDataKey||"file");let a=await e.request(i);a="string"==typeof a?JSON.parse(a):a;let s=a;const o=t.resDataPath||"data.url";for(const e of o.split(".")){if(!s||"object"!=typeof s||!(e in s)){s=void 0;break}s=s[e]}if(!s||"string"!=typeof s)throw e.emit(bt.NOTIFICATION,{title:e.i18n.translate("UPLOAD_FAILED"),body:a.message}),console.error("AdvancedPlist upload failed:",a),new Error(a.message);if(delete n.base64Image,delete n.buffer,t.webPath){const e=s.split("/").pop()||s;s=(t.webPath.endsWith("/")?t.webPath:t.webPath+"/")+e}n.imgUrl=t.customPrefix?t.customPrefix+s:s}return e},Sr=e=>{const t=e.getConfig("picBed.advancedplist")||{},r=(r,n,i,a=!1,s)=>Object.assign({name:r,type:n,get prefix(){return e.i18n.translate(`PICBED_ADVANCEDPLIST_${r.toUpperCase()}`)},get alias(){return e.i18n.translate(`PICBED_ADVANCEDPLIST_${r.toUpperCase()}`)},get message(){return e.i18n.translate(`PICBED_ADVANCEDPLIST_MESSAGE_${r.toUpperCase()}`)},default:t[r]||i,required:a},s);return[r("endpoint","input","",!0),r("method","list","POST",!1,{choices:["POST","PUT","GET"]}),r("formDataKey","input","file"),r("headers","input","{}"),r("body","input","{}"),r("customPrefix","input",""),r("webPath","input",""),r("resDataPath","input","data.url")]};const Ir=(e,t,r,n,i)=>({method:"PUT",url:`${e}/api/fs/form`,headers:{contentType:"multipart/form-data","User-Agent":"PicList",Authorization:t,"File-Path":encodeURIComponent(n)},formData:{file:{value:i,options:{filename:r}}},resolveWithFullResponse:!0}),_r=(e,t)=>{if(200!==t.statusCode||200!==t.body.code||"success"!==t.body.message)throw e.emit(bt.NOTIFICATION,{title:e.i18n.translate("UPLOAD_FAILED"),body:e.i18n.translate("CHECK_SETTINGS_AND_NETWORK"),text:t.body.message}),new Error(t.body.message)},lr=(e,t,r)=>({method:"POST",url:e,headers:{Authorization:t,"Content-Type":"application/json"},body:r,resolveWithFullResponse:!0}),Pr=e=>{const{url:t,token:r,username:n,password:i,uploadPath:a,webPath:s,customUrl:o}=e;return{url:(t||"").replace(/\/$/,""),token:r||"",username:n||"",password:i||"",uploadPath:Ze({path:a||"",startSlash:!0,endSlash:!0,rootToEmpty:!1}),webPath:s?Ze({path:s||"",startSlash:!0,endSlash:!0,rootToEmpty:!1}):"",customUrl:(o||"").replace(/\/$/,"")}},cr=async e=>{const t=e.getConfig("picBed.alistplist");if(!t)throw new Error("Can not find alist config!");const{url:r,username:n,password:i,uploadPath:a,webPath:s,customUrl:o}=Pr(t);let{token:E}=Pr(t);if(E||(E=await(async(e,t,r,n)=>{const i=e.getConfig("picgo-plugin-buildin-alistplist");if(i&&i.refreshedAt&&Date.now()-i.refreshedAt<36e5&&i.token)return i.token;const a=await v.post(`${t}/api/auth/login`,{username:r,password:n});if(200===a.data.code&&"success"===a.data.message){const t=a.data.data.token;return e.saveConfig({"picgo-plugin-buildin-alistplist":{token:t,refreshedAt:Date.now()}}),t}throw new Error("Get token failed")})(e,r,n,i)),!r||!(E||n&&i))throw new Error("Please check your alist config!");const S=e.output;for(const t of S)if(t.fileName&&t.buffer){let n=t.buffer;!n&&t.base64Image&&(n=Buffer.from(t.base64Image,"base64"));const i=`${a}${t.fileName}`,S=Ir(r,E,t.fileName,i,n),I=await e.request(S);_r(e,I);const _=await e.request(lr(`${r}/api/fs/list`,E,{password:"",page:1,per_page:1,refresh:!0,path:D.dirname(i)}));_r(e,_);const l=await e.request(lr(`${r}/api/fs/get`,E,{password:"",path:i,page:1,per_page:1,refresh:!0}));_r(e,l);const P=l.body.data.sign,c=Je(`${s||a}${t.fileName}`);t.imgUrl=`${o||r}${o&&o!==r?"":"/d"}${c}`,t.imgUrl+=o&&o!==r||!P?"":`?sign=${P}`,delete t.base64Image,delete t.buffer}return e},ur=e=>{const t=e.getConfig("picBed.alistplist")||{};return[ut(e,"alist","url","input",t.url||"",!0,void 0,{get message(){return e.i18n.translate("PICBED_ALIST_MESSAGE_URL")}}),ut(e,"alist","token","input",t.token||"",!1,void 0,{get message(){return e.i18n.translate("PICBED_ALIST_MESSAGE_TOKEN")}}),ut(e,"alist","username","input",t.username||"",!1,void 0,{get message(){return e.i18n.translate("PICBED_ALIST_MESSAGE_USERNAME")}}),ut(e,"alist","password","input",t.password||"",!1,void 0,{get message(){return e.i18n.translate("PICBED_ALIST_MESSAGE_PASSWORD")}}),ut(e,"alist","uploadPath","input",t.uploadPath||"",!1,void 0,{get message(){return e.i18n.translate("PICBED_ALIST_MESSAGE_UPLOAD_PATH")}}),ut(e,"alist","webPath","input",t.webPath||"",!1,void 0,{get message(){return e.i18n.translate("PICBED_ALIST_MESSAGE_WEB_PATH")}}),ut(e,"alist","customUrl","input",t.customUrl||"",!1,void 0,{get message(){return e.i18n.translate("PICBED_ALIST_MESSAGE_CUSTOMURL")}})]};const pr=()=>(new Date).toUTCString(),Ar=(e,t)=>{const r=pr(),n=`PUT\n\n${k(t)||"application/octet-stream"}\n${r}\n/${e.bucket}/${e.path}${t}`,i=B.createHmac("sha1",e.accessKeySecret).update(n).digest("base64");return`OSS ${e.accessKeyId}:${i}`},Cr=(e,t,r,n)=>({method:"PUT",url:`https://${e.bucket}.${e.area}.aliyuncs.com/${Je(`${e.path}${t}`)}`,headers:{Host:`${e.bucket}.${e.area}.aliyuncs.com`,Authorization:r,Date:pr(),"Content-Type":k(t)||"application/octet-stream"},body:n,resolveWithFullResponse:!0}),Dr=async e=>{const t=e.getConfig("picBed.aliyun");if(!t)throw new Error("Can't find aliYun OSS config");t.path=Ze({path:t.path});const r=Ze({path:t.webPath});try{const{output:n}=e,i=(t.customUrl||"").replace(/\/$/,""),{path:a,bucket:s,area:o,options:E=""}=t;for(const S of n)if(S.fileName&&S.buffer){const n=Ar(t,S.fileName),I=S.buffer||Buffer.from(S.base64Image,"base64"),_=Cr(t,S.fileName,n,I);if(200!==(await e.request(_)).statusCode)throw new Error("Upload failed");{delete S.base64Image,delete S.buffer;const e=Je(`${r||a}${S.fileName}`);S.imgUrl=i?`${i}/${e}${E}`:`https://${s}.${o}.aliyuncs.com/${e}${E}`}}return e}catch(t){throw e.emit(bt.NOTIFICATION,{title:e.i18n.translate("UPLOAD_FAILED"),body:e.i18n.translate("CHECK_SETTINGS")}),t}},Tr=e=>{const t=e.getConfig("picBed.aliyun")||{};return[ut(e,"alicloud","accessKeyId","input",t.accessKeyId||"",!0),ut(e,"alicloud","accessKeySecret","input",t.accessKeySecret||"",!0),ut(e,"alicloud","bucket","input",t.bucket||"",!0),ut(e,"alicloud","area","input",t.area||"",!0,void 0,{get message(){return e.i18n.translate("PICBED_ALICLOUD_MESSAGE_AREA")}}),ut(e,"alicloud","path","input",t.path||"",!1,void 0,{get message(){return e.i18n.translate("PICBED_ALICLOUD_MESSAGE_PATH")}}),ut(e,"alicloud","webPath","input",t.webPath||"",!1,void 0,{get message(){return e.i18n.translate("PICBED_ALICLOUD_MESSAGE_WEBPATH")}}),ut(e,"alicloud","customUrl","input",t.customUrl||"",!1,void 0,{get message(){return e.i18n.translate("PICBED_ALICLOUD_MESSAGE_CUSTOMURL")}}),ut(e,"alicloud","options","input",t.options||"",!1,void 0,{get message(){return e.i18n.translate("PICBED_ALICLOUD_MESSAGE_OPTIONS")}})]};class dr{constructor(e){this.date=new Date,this.info=e}year(){return`${this.date.getFullYear()}`}month(){return(this.date.getMonth()+1).toString().padStart(2,"0")}day(){return this.date.getDate().toString().padStart(2,"0")}fullName(){return this.info.fileName}fileName(){var e,t;return(null!==(e=this.info.fileName)&&void 0!==e?e:"").replace(null!==(t=this.info.extname)&&void 0!==t?t:"","")}extName(){var e;return(null!==(e=this.info.extname)&&void 0!==e?e:"").replace(".","")}md5(){return B.createHash("md5").update(this.imgBuffer()).digest("hex")}md5B64(){return B.createHash("md5").update(this.imgBuffer()).digest("base64").replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/,"")}md5B64Short(){return B.createHash("md5").update(this.imgBuffer()).digest("base64").replace(/\+/g,"-").replace(/\//g,"_").slice(0,7)}sha1(){return B.createHash("sha1").update(this.imgBuffer()).digest("hex")}sha256(){return B.createHash("sha256").update(this.imgBuffer()).digest("hex")}timestamp(){return Math.floor(Date.now()/1e3).toString()}timestampMS(){return Date.now().toString()}imgBuffer(){return this.info.base64Image?this.info.base64Image:this.info.buffer}}function gr(e,t){if(!t)return e.fileName;const r=new dr(e);let n=t;for(const e of dr.fields){const t=new RegExp(`{${e}}`,"g");n=n.replace(t,r[e]())}return n}function mr(e,t,r){const n=function(e=""){if(!e)return"";if(!/^https?:\/\//.test(e)){const[t,r]=e.split(":");return`http://${t.replace("127.0.0.1","localhost")}:${r}`}try{const{protocol:t,hostname:r,port:n}=new L(e);return`${t}//${r.replace("127.0.0.1","localhost")}:${n}`}catch(e){return""}}(e);if(!n)return;return new(t?Z:J)({keepAlive:!0,keepAliveMsecs:1e3,scheduling:"lifo",rejectUnauthorized:r,proxy:n})}async function Lr(e,t,r){const n=await q(e.client,new j({Bucket:e.bucketName,Key:e.path,IfMatch:t,VersionId:r}),{expiresIn:3600}),i=new m.URL(n);return i.search="",i.href}dr.fields=["year","month","day","fullName","fileName","extName","md5","md5B64","md5B64Short","sha1","sha256","timestamp","timestampMS"];var hr={createS3Client:function(e){var t,r;let n=!0;try{n="https:"===new m.URL(e.endpoint).protocol}catch(e){}const i={};n?i.httpsAgent=mr(e.proxy,!0,null!==(t=e.rejectUnauthorized)&&void 0!==t&&t):i.httpAgent=mr(e.proxy,!1,null!==(r=e.rejectUnauthorized)&&void 0!==r&&r);const a={region:e.region||"auto",endpoint:e.endpoint||void 0,credentials:{accessKeyId:e.accessKeyID,secretAccessKey:e.secretAccessKey},tls:n,forcePathStyle:e.pathStyleAccess,requestHandler:new z(i)};return new Y(a)},createUploadTask:async function(e){if(!e.item.buffer&&!e.item.base64Image)throw new Error("undefined image");try{const{body:t,contentType:r,contentEncoding:n}=await async function(e){var t;const r={};if(e.base64Image){const n=e.base64Image.replace(/^data:[/\w]+;base64,/,"");r.contentType=null===(t=e.base64Image.match(/[^:]\w+\/[\w-+\d.]+(?=;|,)/))||void 0===t?void 0:t[0],r.body=Buffer.from(n,"base64"),r.contentEncoding="base64"}else e.extname&&(r.contentType=Q.getType(e.extname)),r.body=e.buffer;if(!r.contentType){const e=await X.fromBuffer(r.body);r.contentType=null==e?void 0:e.mime}return r}(e.item),i=new V({Bucket:e.bucketName,Key:e.path,ACL:e.acl,Body:t,ContentType:r,ContentEncoding:n}),a=await e.client.send(i);let s;return s=e.urlPrefix?`${e.urlPrefix}/${e.path}`:await Lr(e,a.ETag,a.VersionId),{key:e.path,url:s,imgURL:s,versionId:a.VersionId,eTag:a.ETag}}catch(e){return Promise.reject(e)}}};function fr(e){return"string"==typeof e?"true"===e.toLowerCase():Boolean(e)}const Br=async e=>{const t=e.getConfig("picBed.aws-s3-plist");if(!t)throw new Error("Can't find aws s3 uploader config");try{const r=fr(t.disableBucketPrefixToURL);let n=t.urlPrefix;n&&(n=n.replace(/\/?$/,""),t.pathStyleAccess&&!r&&(n+="/"+t.bucketName));const i=hr.createS3Client(t),a=e.output;for(const e of a){const r=await hr.createUploadTask({client:i,bucketName:t.bucketName,path:gr(e,t.uploadPath),item:e,acl:t.acl||"public-read",urlPrefix:n});delete e.buffer,delete e.base64Image,e.imgUrl=r.imgURL,e.url=r.url}return e}catch(t){throw e.emit(bt.NOTIFICATION,{title:e.i18n.translate("UPLOAD_FAILED"),body:e.i18n.translate("CHECK_SETTINGS_AND_NETWORK"),text:""}),t}},Nr=e=>{let t=e.getConfig("picBed.aws-s3-plist")||{};t=Object.assign(Object.assign({},{accessKeyID:"",secretAccessKey:"",bucketName:"",uploadPath:"{year}/{month}/{md5}.{extName}",pathStyleAccess:!1,rejectUnauthorized:!1,acl:"public-read"}),t);return[{name:"accessKeyID",type:"input",default:t.accessKeyID,required:!0,get prefix(){return e.i18n.translate("PICBED_AWSS3PLIST_ACCESSKEYID")},get alias(){return e.i18n.translate("PICBED_AWSS3PLIST_ACCESSKEYID")},get message(){return e.i18n.translate("PICBED_AWSS3PLIST_MESSAGE_ACCESSKEYID")}},{name:"secretAccessKey",type:"input",default:t.secretAccessKey,required:!0,get prefix(){return e.i18n.translate("PICBED_AWSS3PLIST_SECRET_ACCESSKEY")},get alias(){return e.i18n.translate("PICBED_AWSS3PLIST_SECRET_ACCESSKEY")},get message(){return e.i18n.translate("PICBED_AWSS3PLIST_MESSAGE_SECRET_ACCESSKEY")}},{name:"bucketName",type:"input",default:t.bucketName,required:!0,get prefix(){return e.i18n.translate("PICBED_AWSS3PLIST_BUCKET")},get alias(){return e.i18n.translate("PICBED_AWSS3PLIST_BUCKET")},get message(){return e.i18n.translate("PICBED_AWSS3PLIST_MESSAGE_BUCKET")}},{name:"uploadPath",type:"input",default:t.uploadPath,required:!0,get prefix(){return e.i18n.translate("PICBED_AWSS3PLIST_UPLOADPATH")},get alias(){return e.i18n.translate("PICBED_AWSS3PLIST_UPLOADPATH")},get message(){return e.i18n.translate("PICBED_AWSS3PLIST_MESSAGE_UPLOADPATH")}},{name:"region",type:"input",default:t.region,required:!1,get prefix(){return e.i18n.translate("PICBED_AWSS3PLIST_REGION")},get alias(){return e.i18n.translate("PICBED_AWSS3PLIST_REGION")},get message(){return e.i18n.translate("PICBED_AWSS3PLIST_MESSAGE_REGION")}},{name:"endpoint",type:"input",default:t.endpoint,required:!1,get prefix(){return e.i18n.translate("PICBED_AWSS3PLIST_ENDPOINT")},get alias(){return e.i18n.translate("PICBED_AWSS3PLIST_ENDPOINT")},get message(){return e.i18n.translate("PICBED_AWSS3PLIST_MESSAGE_ENDPOINT")}},{name:"proxy",type:"input",default:t.proxy,required:!1,get prefix(){return e.i18n.translate("PICBED_AWSS3PLIST_PROXY")},get alias(){return e.i18n.translate("PICBED_AWSS3PLIST_PROXY")},get message(){return e.i18n.translate("PICBED_AWSS3PLIST_MESSAGE_PROXY")}},{name:"urlPrefix",type:"input",default:t.urlPrefix,required:!1,get prefix(){return e.i18n.translate("PICBED_AWSS3PLIST_URLPREFIX")},get alias(){return e.i18n.translate("PICBED_AWSS3PLIST_URLPREFIX")},get message(){return e.i18n.translate("PICBED_AWSS3PLIST_MESSAGE_URLPREFIX")}},{name:"pathStyleAccess",type:"confirm",default:t.pathStyleAccess||!1,required:!1,get prefix(){return e.i18n.translate("PICBED_AWSS3PLIST_PATHSTYLEACCESS")},get alias(){return e.i18n.translate("PICBED_AWSS3PLIST_PATHSTYLEACCESS")},get message(){return e.i18n.translate("PICBED_AWSS3PLIST_MESSAGE_PATHSTYLEACCESS")}},{name:"rejectUnauthorized",type:"confirm",default:t.rejectUnauthorized||!1,required:!1,get prefix(){return e.i18n.translate("PICBED_AWSS3PLIST_REJECTUNAUTHORIZED")},get alias(){return e.i18n.translate("PICBED_AWSS3PLIST_REJECTUNAUTHORIZED")},get message(){return e.i18n.translate("PICBED_AWSS3PLIST_MESSAGE_REJECTUNAUTHORIZED")}},{name:"acl",type:"list",default:t.acl||"public-read",choices:["private","public-read","public-read-write","authenticated-read","aws-exec-read","bucket-owner-read","bucket-owner-full-control"],required:!1,get prefix(){return e.i18n.translate("PICBED_AWSS3PLIST_ACL")},get alias(){return e.i18n.translate("PICBED_AWSS3PLIST_ACL")},get message(){return e.i18n.translate("PICBED_AWSS3PLIST_MESSAGE_ACL")}},{name:"disableBucketPrefixToURL",type:"confirm",default:fr(t.disableBucketPrefixToURL)||!1,required:!1,get prefix(){return e.i18n.translate("PICBED_AWSS3PLIST_DISABLEBUCKETPREFIXTOURL")},get alias(){return e.i18n.translate("PICBED_AWSS3PLIST_DISABLEBUCKETPREFIXTOURL")},get message(){return e.i18n.translate("PICBED_AWSS3PLIST_MESSAGE_DISABLEBUCKETPREFIXTOURL")}}]};function Ur(e,t,r,n=""){return`https://api.github.com/repos/${e}/contents/${Je(`${t}${r}`)}${n}`}const Rr=(e,t,r)=>{const{token:n,repo:i}=t,a=k(e)||"application/octet-stream";return{method:"PUT",url:Ur(i,t.path,e),headers:{Authorization:`token ${n}`,"User-Agent":"PicList","Content-Type":a},body:r,json:!0}},Or=(e,t)=>{const{token:r,repo:n,branch:i}=t;return{method:"GET",url:Ur(n,t.path,e,`?ref=${i}`),headers:{Authorization:`token ${r}`,"User-Agent":"PicList"},json:!0}},Mr=async e=>{const t=e.getConfig("picBed.github");if(!t)throw new Error("Can't find github config");const r=Ze({path:t.path});t.path=r,t.customUrl=(t.customUrl||"").replace(/\/$/,"");try{const n=e.output;for(const i of n)if(i.fileName&&i.buffer){const n=i.base64Image||Buffer.from(i.buffer).toString("base64"),a={message:"Upload by PicList",branch:t.branch,content:n,path:r+encodeURI(i.fileName)},s=Rr(i.fileName,t,a);try{const n=await e.request(s);if(!n)throw new Error("Server error, please try again");delete i.base64Image,delete i.buffer,i.imgUrl=t.customUrl?`${t.customUrl}/${Je(`${r}${i.fileName}`)}`:n.content.download_url,i.hash=n.content.sha}catch(n){if(422!==n.statusCode)throw n;delete i.base64Image,delete i.buffer;const a=await e.request(Or(i.fileName,t));if(!Object.keys(a).length)throw n;i.hash=a.sha,i.imgUrl=t.customUrl?`${t.customUrl}/${Je(`${r}${i.fileName}`)}`:a.download_url}}return e}catch(t){throw e.emit(bt.NOTIFICATION,{title:e.i18n.translate("UPLOAD_FAILED"),body:e.i18n.translate("CHECK_SETTINGS_AND_NETWORK")}),t}},yr=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:"input",get prefix(){return e.i18n.translate("PICBED_GITHUB_TOKEN")},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}]};const Gr=async(e,t,r,n)=>{const i=t.clientId||"",a=t.username||"",s=(e=>e?e.startsWith("Bearer")?e:`Bearer ${e}`:"")(t.accessToken||""),o=t.album||"";let E;if(a&&s)E=s;else{if(!i)throw new Error("clientId or accessToken is required");E=`Client-ID ${i}`}const S={method:"POST",url:"https://api.imgur.com/3/image",headers:{Authorization:E,"content-type":"multipart/form-data",Host:"api.imgur.com","User-Agent":"PicList"},formData:{image:n,type:"base64",name:r,description:"Uploaded with PicList"}};if(a&&s&&o){let r,n=0,i="";do{const s={method:"GET",url:`https://api.imgur.com/3/account/${a}/albums/${n}`,headers:{Authorization:E},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 S=r.body.data;for(const e of S)if(e.title===o){i=e.id;break}n++}while(r.body.data.length>0);i&&S.formData&&(S.formData.album=i)}return t.proxy&&(S.proxy=t.proxy),S},wr=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"),i=await Gr(e,r,n.fileName,t),a=await e.request(i),s="string"==typeof a?JSON.parse(a):a;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(bt.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}},br=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 xr=async e=>{var r;const n=e.getConfig("picBed.local");if(!n)throw new Error("Can not find local config!");const a=n.path||"",s=(n.customUrl||"").replace(/\/$/,""),o=Ze({path:null===(r=n.webPath)||void 0===r?void 0:r.replace(/\\/g,"/")}),E=e.output;for(const r of E)if(r.fileName&&r.buffer){let n=r.buffer;!n&&r.base64Image&&(n=Buffer.from(r.base64Image,"base64"));try{const E=D.join(e.baseDir,"imgTemp","local"),S=D.join(E,r.fileName),I=D.join(a,r.fileName);i(D.dirname(I)),i(D.dirname(S)),t.writeFileSync(I,n),t.copyFileSync(I,S),delete r.base64Image,delete r.buffer,r.imgUrl=s?`${s}/${Je(`${o}${r.fileName}`)}`:D.join(a,r.fileName),r.hash=D.join(a,r.fileName),r.galleryPath=`http://localhost:36699/local/${Je(r.fileName).replace(/^\//,"")}`}catch(t){throw e.emit(bt.NOTIFICATION,{title:e.i18n.translate("UPLOAD_FAILED"),body:"failed to upload image"}),new Error("failed to upload image")}}return e},Wr=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 prefix(){return e.i18n.translate("PICBED_LOCAL_WEBPATH")},get alias(){return e.i18n.translate("PICBED_LOCAL_WEBPATH")},default:t.webPath||"",required:!1,get message(){return e.i18n.translate("PICBED_LOCAL_MESSAGE_WEBPATH")}}]};const vr=(e,t,r)=>{let n=e.host;n=n.replace(/\/$/,"");const i="V2"===e.version,a=e.token,s={"Content-Type":"multipart/form-data","User-Agent":"PicList",Connection:"keep-alive",token:a||void 0},o={image:{value:r,options:{filename:t}},ssl:"true"},E={"Content-Type":"multipart/form-data","User-Agent":"PicList",Connection:"keep-alive",Accept:"application/json",Authorization:a||void 0},S=e.strategyId,I=e.albumId;let _=e.permission.value;void 0===_&&(_=e.permission);const l={file:{value:r,options:{filename:t}},ssl:"true",strategy_id:S,album_id:I,permission:_};S||delete l.strategy_id,I||delete l.album_id,0!==_&&1!==_&&delete l.permission;return{method:"POST",url:i?`${n}/api/v1/upload`:`${n}/api/upload`,agent:new H.Agent({rejectUnauthorized:!1}),headers:i?E:s,formData:i?l:o}},Fr=async e=>{const t=e.getConfig("picBed.lskyplist");if(!t)throw new Error("Can't find lsky uploader config");const r=e.output;for(const n of r){let r=n.buffer;!r&&n.base64Image&&(r=Buffer.from(n.base64Image,"base64"));const i=vr(t,n.fileName,r);let a=await e.request(i);a="string"==typeof a?JSON.parse(a):a;const s="V2"===t.version;if(!(s?!0===a.status:200===a.code))throw e.emit(bt.NOTIFICATION,{title:"upload failed",body:a.message}),new Error(a.message);delete n.base64Image,delete n.buffer,n.imgUrl=s?a.data.links.url:a.data.url,s&&(n.hash=a.data.key)}return e},Hr=e=>{const t=e.getConfig("picBed.lskyplist")||{};return[{name:"version",type:"list",default:t.version||"V1",get prefix(){return e.i18n.translate("PICBED_LSKY_VERSION")},get alias(){return e.i18n.translate("PICBED_LSKY_VERSION")},get message(){return e.i18n.translate("PICBED_LSKY_MESSAGE_VERSION")},choices:["V1","V2"],required:!0},{name:"host",type:"input",get prefix(){return e.i18n.translate("PICBED_LSKY_HOST")},get alias(){return e.i18n.translate("PICBED_LSKY_HOST")},get message(){return e.i18n.translate("PICBED_LSKY_MESSAGE_HOST")},default:t.host||"",required:!0},{name:"token",type:"input",get prefix(){return e.i18n.translate("PICBED_LSKY_TOKEN")},get alias(){return e.i18n.translate("PICBED_LSKY_TOKEN")},get message(){return e.i18n.translate("PICBED_LSKY_MESSAGE_TOKEN")},default:t.token,required:!0},{name:"strategyId",type:"input",default:t.strategyId,required:!1,get prefix(){return e.i18n.translate("PICBED_LSKY_STRATEGY_ID")},get alias(){return e.i18n.translate("PICBED_LSKY_STRATEGY_ID")},get message(){return e.i18n.translate("PICBED_LSKY_MESSAGE_STRATEGY_ID")}},{name:"albumId",type:"input",default:t.albumId,required:!1,get prefix(){return e.i18n.translate("PICBED_LSKY_ALBUM_ID")},get alias(){return e.i18n.translate("PICBED_LSKY_ALBUM_ID")},get message(){return e.i18n.translate("PICBED_LSKY_MESSAGE_ALBUM_ID")}},{name:"permission",type:"list",default:t.permission||"private(default)",choices:[{name:"private(default)",value:0},{name:"public",value:1}],required:!1,get prefix(){return e.i18n.translate("PICBED_LSKY_PERMISSION")},get alias(){return e.i18n.translate("PICBED_LSKY_PERMISSION")},get message(){return e.i18n.translate("PICBED_LSKY_MESSAGE_PERMISSION")}}]};const Kr=(e,t,r)=>{const{host:n="127.0.0.1",port:i="",picbed:a="",configName:s="Default",serverKey:o=""}=e,E=n.match(/(\d+)\.(\d+)\.(\d+)\.(\d+)/),S=n.startsWith("https://")?"https://":"http://",I=n.replace(/(http:\/\/|https:\/\/)/,"");return{method:"POST",url:`${E?`${S}${I}:${i||"36677"}`:`${S}${I}${i?`:${i}`:""}`}/upload?configName=${s}${a?`&picbed=${a}`:""}${o?`&key=${o}`:""}`,headers:{"content-type":"multipart/form-data"},formData:{file:{value:r,options:{filename:t,contentType:k(t)}}},resolveWithFullResponse:!0}},$r=async e=>{var t;const r=e.getConfig("picBed.piclist");if(!r)throw new Error("Can't find PicList config");try{const n=e.output;for(const i of n)if(i.fileName&&i.buffer){let n=i.buffer;!n&&i.base64Image&&(n=Buffer.from(i.base64Image,"base64"));const a=Kr(r,i.fileName,n),s=await e.request(a).then((e=>e)).catch((t=>({statusCode:400,body:{msg:e.i18n.translate("AUTH_FAILED"),err:t}})));if(200!==s.statusCode||!(null===(t=s.body)||void 0===t?void 0:t.success))throw new Error(s.body.message);delete i.base64Image,delete i.buffer,i.imgUrl=s.body.result[0],i.fullResult=s.body.fullResult?s.body.fullResult[0]:""}return e}catch(t){throw e.emit(bt.NOTIFICATION,{title:e.i18n.translate("UPLOAD_FAILED"),body:e.i18n.translate("CHECK_SETTINGS")}),t}},kr=e=>{const t=e.getConfig("picBed.piclist")||{};return[{name:"host",type:"input",get prefix(){return e.i18n.translate("PICBED_PICLIST_HOST")},get alias(){return e.i18n.translate("PICBED_PICLIST_HOST")},default:t.host||"127.0.0.1",required:!0},{name:"port",type:"input",get prefix(){return e.i18n.translate("PICBED_PICLIST_PORT")},get alias(){return e.i18n.translate("PICBED_PICLIST_PORT")},default:t.port||36677,required:!1},{name:"picbed",type:"input",get prefix(){return e.i18n.translate("PICBED_PICLIST_PICBED")},get alias(){return e.i18n.translate("PICBED_PICLIST_PICBED")},default:t.picbed||"",required:!1},{name:"configName",type:"input",get prefix(){return e.i18n.translate("PICBED_PICLIST_CONFIGNAME")},get alias(){return e.i18n.translate("PICBED_PICLIST_CONFIGNAME")},default:t.configName||"",required:!1},{name:"serverKey",type:"input",get prefix(){return e.i18n.translate("PICBED_PICLIST_KEY")},get alias(){return e.i18n.translate("PICBED_PICLIST_KEY")},default:t.serverKey||"",required:!1}]};function Yr(e,t,r,n){const i=function(e){return"z0"===e?"":"-"+e}(e.area||"z0"),a=e.path||"";return{method:"POST",url:`http://upload${i}.qiniup.com/putb64/-1/key/${Buffer.from(a+t,"utf-8").toString("base64").replace(/\+/g,"-").replace(/\//g,"_")}`,headers:{Authorization:`UpToken ${r}`,"Content-Type":k(t)||"application/octet-stream"},body:n}}function Vr(e){const t=e.accessKey,r=e.secretKey,n=new ee.auth.digest.Mac(t,r),i={scope:e.bucket};return new ee.rs.PutPolicy(i).uploadToken(n)}const jr=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"),i=Yr(t,n.fileName,Vr(t),r),a=await e.request(i),s=JSON.parse(a);if(!(null==s?void 0:s.key))throw e.emit(bt.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(bt.NOTIFICATION,{title:e.i18n.translate("UPLOAD_FAILED"),body:r.error})}throw t}},qr=e=>{const t=e.getConfig("picBed.qiniu")||{};return[{name:"accessKey",type:"input",get prefix(){return e.i18n.translate("PICBED_QINIU_ACCESSKEY")},get alias(){return e.i18n.translate("PICBED_QINIU_ACCESSKEY")},default:t.accessKey||"",required:!0},{name:"secretKey",type:"input",get prefix(){return e.i18n.translate("PICBED_QINIU_SECRETKEY")},get alias(){return e.i18n.translate("PICBED_QINIU_SECRETKEY")},default:t.secretKey||"",required:!0},{name:"bucket",type:"input",get prefix(){return e.i18n.translate("PICBED_QINIU_BUCKET")},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}]};class zr{constructor(){this.client=new te,this.isConnected=!1}static getInstance(){return zr.instance||(zr.instance=new zr),zr.instance}static changeWinStylePathToUnix(e){return e.replace(/\\/g,"/")}async connect(e){const{host:t,port:r,username:n,password:i,privateKey:a,passphrase:s}=e,o=a?{username:n,privateKeyPath:a,passphrase:s||void 0}:{username:n,password:i};try{await this.client.connect(Object.assign({host:t,port:Number(r)||22},o)),this.isConnected=!0}catch(e){throw new Error(e)}}async upload(e,t,r){if(!this.isConnected)throw new Error("SSH client is not connected");try{t=zr.changeWinStylePathToUnix(t),await this.mkdir(D.dirname(t).replace(/^\/+|\/+$/g,""),r),await this.client.putFile(e,t);const n=r.fileMode||"0644";"0644"!==n&&await this.exec(`chmod ${n} "${t}"`)}catch(e){throw new Error(e)}}async mkdir(e,t){if(!this.client.isConnected())throw new Error("sftp client is not connected");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=`cd / && mkdir -p "${e}"`;await this.exec(t)}}async chown(e,t,r){e=zr.changeWinStylePathToUnix(e);const[n,i]=r?[t,r]:t.includes(":")?t.split(":"):[t,t];await this.exec(`chown ${n}:${i} "${e}"`)}async exec(e){return 0===(await this.client.execCommand(e)).code}close(){this.client.dispose(),this.isConnected=!1}}const Xr=async e=>{const r=e.getConfig("picBed.sftpplist");if(!r)throw new Error("Can not find sftpplist config!");r.port=Number(r.port)||22,(r.port<0||r.port>65535)&&(r.port=22),r.uploadPath=Ze({path:r.uploadPath,rootToEmpty:!1});const n=Ze({path:r.webPath,rootToEmpty:!1});try{const a=e.output;for(const s of a)if(s.fileName&&s.buffer){let a=s.buffer;!a&&s.base64Image&&(a=Buffer.from(s.base64Image,"base64"));const S=D.join(e.baseDir,"uploadTemp"),I=D.join(e.baseDir,"imgTemp","sftpplist");i(I);const _=D.join(S,s.fileName);i(D.dirname(_)),t.writeFileSync(_,a);const l=zr.getInstance();await l.connect(r);const P=D.join(`/${r.uploadPath}`.replace(/\/\/+/g,"/"),s.fileName);await l.upload(_,P,r),r.fileUser&&await l.chown(P,r.fileUser),delete s.base64Image,delete s.buffer;const c=r.customUrl||r.host;r.webPath?s.imgUrl=`${c}/${Je(`${"/"===n?"":n}${s.fileName}`)}`:s.imgUrl=`${c}/${Je(`${"/"===r.uploadPath?"":r.uploadPath}${s.fileName}`)}`;const u=D.join(I,s.fileName);i(D.dirname(u)),o(u),E(_,D.join(I,s.fileName)),s.galleryPath=`http://localhost:36699/sftpplist/${encodeURIComponent(s.fileName)}`,l.close()}return e}catch(t){throw e.emit(bt.NOTIFICATION,{title:e.i18n.translate("UPLOAD_FAILED"),body:e.i18n.translate("CHECK_SETTINGS")}),t}},Qr=e=>{const t=e.getConfig("picBed.sftpplist")||{};return[{name:"host",type:"input",get prefix(){return e.i18n.translate("PICBED_SFTPPLIST_HOST")},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 prefix(){return e.i18n.translate("PICBED_SFTPPLIST_PORT")},get alias(){return e.i18n.translate("PICBED_SFTPPLIST_PORT")},get message(){return e.i18n.translate("PICBED_SFTPPLIST_MESSAGE_PORT")},default:t.port||22,required:!1},{name:"username",type:"input",get prefix(){return e.i18n.translate("PICBED_SFTPPLIST_USERNAME")},get alias(){return e.i18n.translate("PICBED_SFTPPLIST_USERNAME")},default:t.username||"",required:!0},{name:"password",type:"input",get prefix(){return e.i18n.translate("PICBED_SFTPPLIST_PASSWORD")},get alias(){return e.i18n.translate("PICBED_SFTPPLIST_PASSWORD")},default:t.password||"",required:!1},{name:"privateKey",type:"input",get prefix(){return e.i18n.translate("PICBED_SFTPPLIST_PRIVATEKEY")},get alias(){return e.i18n.translate("PICBED_SFTPPLIST_PRIVATEKEY")},get message(){return e.i18n.translate("PICBED_SFTPPLIST_MESSAGE_PRIVATEKEY")},default:t.privateKey||"",required:!1},{name:"passphrase",type:"input",get prefix(){return e.i18n.translate("PICBED_SFTPPLIST_PRIVATEKEY_PASSPHRASE")},get alias(){return e.i18n.translate("PICBED_SFTPPLIST_PRIVATEKEY_PASSPHRASE")},get message(){return e.i18n.translate("PICBED_SFTPPLIST_MESSAGE_PRIVATEKEY_PASSPHRASE")},default:t.passphrase||"",required:!1},{name:"uploadPath",type:"input",get prefix(){return e.i18n.translate("PICBED_SFTPPLIST_UPLOADPATH")},get alias(){return e.i18n.translate("PICBED_SFTPPLIST_UPLOADPATH")},get message(){return e.i18n.translate("PICBED_SFTPPLIST_MESSAGE_UPLOADPATH")},default:t.uploadPath||"",required:!1},{name:"customUrl",type:"input",get prefix(){return e.i18n.translate("PICBED_SFTPPLIST_CUSTOMURL")},get alias(){return e.i18n.translate("PICBED_SFTPPLIST_CUSTOMURL")},get message(){return e.i18n.translate("PICBED_SFTPPLIST_MESSAGE_CUSTOMURL")},default:t.customUrl||"",required:!1},{name:"webPath",type:"input",get prefix(){return e.i18n.translate("PICBED_SFTPPLIST_WEBSITE_PATH")},get alias(){return e.i18n.translate("PICBED_SFTPPLIST_WEBSITE_PATH")},get message(){return e.i18n.translate("PICBED_SFTPPLIST_MESSAGE_WEBSITE_PATH")},default:t.webPath||"",required:!1},{name:"fileUser",type:"input",get prefix(){return e.i18n.translate("PICBED_SFTPPLIST_FILE_USER")},get alias(){return e.i18n.translate("PICBED_SFTPPLIST_FILE_USER")},get message(){return e.i18n.translate("PICBED_SFTPPLIST_MESSAGE_FILE_USER")},default:t.fileUser||"",required:!1},{name:"fileMode",type:"input",get prefix(){return e.i18n.translate("PICBED_SFTPPLIST_FILE_MODE")},get alias(){return e.i18n.translate("PICBED_SFTPPLIST_FILE_MODE")},get message(){return e.i18n.translate("PICBED_SFTPPLIST_MESSAGE_FILE_MODE")},default:t.fileMode||"",required:!1},{name:"dirMode",type:"input",get prefix(){return e.i18n.translate("PICBED_SFTPPLIST_DIR_MODE")},get alias(){return e.i18n.translate("PICBED_SFTPPLIST_DIR_MODE")},get message(){return e.i18n.translate("PICBED_SFTPPLIST_MESSAGE_DIR_MODE")},default:t.dirMode||"",required:!1}]};const Zr=(e,t,r,n="")=>({method:"POST",url:`https://${n}/api/v2/upload`,headers:{contentType:"multipart/form-data","User-Agent":"PicList",Authorization:r},formData:{smfile:{value:t,options:{filename:e}},ssl:"true"}}),Jr=async e=>{var t,r,n;const i=e.getConfig("picBed.smms");if(!(null===(t=null==i?void 0:i.token)||void 0===t?void 0:t.trim()))throw new Error("SM.MS token is required!");const a=(i.backupDomain||"sm.ms").replace(/^https?:\/\//,"").replace(/\/$/,""),s=e.output;for(const t of s){if(!t.fileName)continue;const s=t.buffer||(t.base64Image?Buffer.from(t.base64Image,"base64"):void 0);if(!s)continue;const o=Zr(t.fileName,s,i.token,a),E=await e.request(o),S=JSON.parse(E);if("success"===S.code)t.imgUrl=S.data.url,t.hash=S.data.hash;else{if("image_repeated"!==S.code||"string"!=typeof S.images){const t=S.message||"Upload failed";throw e.emit(bt.NOTIFICATION,{title:e.i18n.translate("UPLOAD_FAILED"),body:t}),new Error(t)}t.imgUrl=S.images;try{const e=null===(n=null===(r=(await v.get(`https://${a}/api/v2/upload_history`,{headers:{Authorization:i.token}})).data)||void 0===r?void 0:r.data)||void 0===n?void 0:n.find((e=>e.url===S.images));e&&(t.hash=e.hash)}catch(e){}}delete t.base64Image,delete t.buffer}return e},en=e=>{const t=e.getConfig("picBed.smms")||{};return[ut(e,"SMMS","token","input",t.token||"",!0,void 0,{get message(){return e.i18n.translate("PICBED_SMMS_MESSAGE_TOKEN")}}),ut(e,"SMMS","backupDomain","input",t.backupDomain||"",!1,void 0,{get message(){return e.i18n.translate("PICBED_SMMS_MESSAGE_BACKUP_DOMAIN")}})]};const tn=(e,t)=>{const{secretId:r,secretKey:n,appId:i,bucket:a,version:s,area:o,endpoint:E,path:S}=e;let I,_="";if(!s||"v4"===s){const e=Math.floor(1e10*Math.random()),t=Math.floor(Date.now()/1e3)-1,s=`a=${i}&b=${a}&k=${r}&e=${t+3600}&t=${t}&r=${e}&f=`,o=B.createHmac("sha1",n).update(s).digest(),E=Buffer.concat([o,Buffer.from(s)]);I=Buffer.from(E).toString("base64")}else{const e=Math.floor(Date.now()/1e3);_=`${e};${e+86400}`;const r=B.createHmac("sha1",n).update(_).digest("hex"),i=`cos.${o}.myqcloud.com`,s=`put\n/${S}${t}\n\nhost=${a}.${E||i}\n`,l=`sha1\n${_}\n${B.createHash("sha1").update(s).digest("hex")}\n`;I=B.createHmac("sha1",r).update(l).digest("hex")}return{signature:I,appId:i,bucket:a,signTime:_}},rn=(e,t,r,n,i)=>{const{area:a,path:s,bucket:o,endpoint:E,secretId:S}=e,I=`PicGo;${i};null;null`;if(!e.version||"v4"===e.version)return{method:"POST",url:`http://${a}.file.myqcloud.com/files/v2/${r.appId}/${r.bucket}/${encodeURI(s)}${t}`,headers:{Host:`${a}.file.myqcloud.com`,Authorization:r.signature,contentType:"multipart/form-data","User-Agent":I},formData:{op:"upload",filecontent:n},resolveWithFullResponse:!0};const _=`${o}.${E||`cos.${a}.myqcloud.com`}`;return{method:"PUT",url:`http://${_}/${Je(`${s}${t}`)}`,headers:{Host:_,Authorization:`q-sign-algorithm=sha1&q-ak=${S}&q-sign-time=${r.signTime}&q-key-time=${r.signTime}&q-header-list=host&q-url-param-list=&q-signature=${r.signature}`,contentType:k(t)||"application/octet-stream","User-Agent":I},body:n,resolveWithFullResponse:!0}},nn=async e=>{var t,r,n,i;const a=e.getConfig("picBed.tcyun");if(!a)throw new Error("Can't find tencent COS config");try{const s=e.output,o=(a.customUrl||"").replace(/\/$/,""),E=Ze({path:a.path}),S=Ze({path:a.webPath});a.path=E;const I=!a.version||"v4"===a.version;for(const _ of s){if(!_.fileName||!_.buffer)continue;const s=tn(a,_.fileName),l=_.buffer||Buffer.from(_.base64Image,"base64"),P=rn(a,_.fileName,s,l,e.GUI_VERSION||e.VERSION),c=await e.request(P).catch((t=>({statusCode:400,body:{msg:e.i18n.translate("AUTH_FAILED"),err:t}}))),u=I&&"string"==typeof c?JSON.parse(c):c;if(400===u.statusCode)throw(null===(t=null==u?void 0:u.body)||void 0===t?void 0:t.err)||new Error((null===(r=null==u?void 0:u.body)||void 0===r?void 0:r.msg)||(null===(n=null==u?void 0:u.body)||void 0===n?void 0:n.message));const p=a.options||"",A=!!a.slim;if(delete _.base64Image,delete _.buffer,I&&"SUCCESS"===u.message)_.imgUrl=o?`${o}/${Je(`${S||E}${_.fileName}`)}${p}`:`${u.data.source_url}${p}`;else{if(I||200!==(null==u?void 0:u.statusCode))throw new Error((null===(i=c.body)||void 0===i?void 0:i.msg)||"Upload failed");if(o)_.imgUrl=`${o}/${Je(`${S||E}${_.fileName}`)}${p}`;else{const e=a.endpoint||`cos.${a.area}.myqcloud.com`;_.imgUrl=`https://${a.bucket}.${e}/${Je(`${E}${_.fileName}`)}${p}`}}A&&(_.imgUrl+=p?"&imageSlim":"?imageSlim")}return e}catch(t){if((!a.version||"v4"===a.version)&&t.error)try{const r=JSON.parse(t.error);e.emit(bt.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}},an=e=>{var t;const r=e.getConfig("picBed.tcyun")||{};return[ut(e,"TENCENTCLOUD","version","list","v5",!1,void 0,{choices:["v4","v5"]}),ut(e,"TENCENTCLOUD","secretId","input",r.secretId||"",!0),ut(e,"TENCENTCLOUD","secretKey","input",r.secretKey||"",!0),ut(e,"TENCENTCLOUD","bucket","input",r.bucket||"",!0),ut(e,"TENCENTCLOUD","appId","input",r.appId||"",!0,void 0,{get message(){return e.i18n.translate("PICBED_TENCENTCLOUD_MESSAGE_APPID")}}),ut(e,"TENCENTCLOUD","area","input",r.area||"",!0,void 0,{get message(){return e.i18n.translate("PICBED_TENCENTCLOUD_MESSAGE_AREA")}}),ut(e,"TENCENTCLOUD","endpoint","input",r.endpoint||"",!1,void 0,{get message(){return e.i18n.translate("PICBED_TENCENTCLOUD_MESSAGE_ENDPOINT")}}),ut(e,"TENCENTCLOUD","path","input",r.path||"",!1,void 0,{get message(){return e.i18n.translate("PICBED_TENCENTCLOUD_MESSAGE_PATH")}}),ut(e,"TENCENTCLOUD","webPath","input",r.webPath||"",!1,void 0,{get message(){return e.i18n.translate("PICBED_TENCENTCLOUD_MESSAGE_WEBPATH")}}),ut(e,"TENCENTCLOUD","customUrl","input",r.customUrl||"",!1,void 0,{get message(){return e.i18n.translate("PICBED_TENCENTCLOUD_MESSAGE_CUSTOMURL")}}),ut(e,"TENCENTCLOUD","options","input",r.options||"",!1,void 0,{get message(){return e.i18n.translate("PICBED_TENCENTCLOUD_MESSAGE_OPTIONS")}}),ut(e,"TENCENTCLOUD","slim","confirm",null!==(t=r.slim)&&void 0!==t&&t,!1,void 0,{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 sn=e=>B.createHash("md5").update(e).digest("hex"),on=async(e,t,r,n)=>{if(!t.fileName||!t.buffer)return;const i=t.buffer||(t.base64Image?Buffer.from(t.base64Image,"base64"):null);if(!i)return;const a=((e,t)=>{const{path:r="",operator:n,password:i,bucket:a}=e,s=sn(i),o=(new Date).toUTCString(),E=`PUT&/${a}/${Je(`${r}${t}`)}&${o}`;return`UPYUN ${n}:${B.createHmac("sha1",s).update(E).digest("base64")}`})(r,t.fileName),s=((e,t,r,n)=>{const{bucket:i,path:a}=e;let s=(e.endpoint||"https://v0.api.upyun.com").replace(/\/+$/g,"");return s.startsWith("http")||(s=`https://${s}`),{method:"PUT",url:`${s}/${i}/${Je(`${a}${t}`)}`,headers:{Authorization:r,Date:(new Date).toUTCString(),"Content-Type":k(t)||"application/octet-stream"},body:n,resolveWithFullResponse:!0}})(r,t.fileName,a,i);if(200!==(await e.request(s)).statusCode)throw new Error("Upload failed");delete t.base64Image,delete t.buffer;const o=r.options||"",E=`${r.url}/${Je(`${n}${t.fileName}`)}${o}`;t.imgUrl=r.antiLeechToken?En(E,r,t.fileName):E},En=(e,t,r)=>{const n=((e,t,r,n)=>{const i=`/${r.path||""}${n}`.replace(/%2F/g,"/").replace(/^\/+/g,"/"),a=Math.round(Date.now()/1e3),s=t?a+parseInt(t.toString(),10):a+1800;return`_upt=${sn(`${e}&${s}&${i}`).substring(12,20)}${s}`})(t.antiLeechToken,t.expireTime,t,r);return e.includes("?")?`${e}&${n}`:`${e}?${n}`},Sn=async e=>{const t=e.getConfig("picBed.upyun");if(!t)throw new Error("Can't find UpYun config");try{const r=e.output,n=Ze({path:t.path});t.path=n;for(const i of r)await on(e,i,t,n);return e}catch(t){throw In(e,t),t}},In=(e,t)=>{if("Upload failed"===t.message)e.emit(bt.NOTIFICATION,{title:e.i18n.translate("UPLOAD_FAILED"),body:e.i18n.translate("CHECK_SETTINGS")});else{const r=ye(t.error),n="object"==typeof r&&r?r.code:r||"Unknown error";e.emit(bt.NOTIFICATION,{title:e.i18n.translate("UPLOAD_FAILED"),body:e.i18n.translate("UPLOAD_FAILED_REASON",{code:n}),text:"http://docs.upyun.com/api/errno/"})}},_n=e=>{const t=e.getConfig("picBed.upyun")||{};return[ut(e,"upyun","bucket","input",t.bucket||"",!0),ut(e,"upyun","operator","input",t.operator||"",!0,void 0,{get message(){return e.i18n.translate("PICBED_UPYUN_MESSAGE_OPERATOR")}}),ut(e,"upyun","password","input",t.password||"",!0,void 0,{get message(){return e.i18n.translate("PICBED_UPYUN_MESSAGE_PASSWORD")}}),ut(e,"upyun","url","input",t.url||"",!0,void 0,{get message(){return e.i18n.translate("PICBED_UPYUN_MESSAGE_URL")}}),ut(e,"upyun","options","input",t.options||"",!1,void 0,{get message(){return e.i18n.translate("PICBED_UPYUN_MESSAGE_OPTIONS")}}),ut(e,"upyun","path","input",t.path||"",!1,void 0,{get message(){return e.i18n.translate("PICBED_UPYUN_MESSAGE_PATH")}}),ut(e,"upyun","antiLeechToken","input",t.antiLeechToken||"",!1),ut(e,"upyun","expireTime","input",t.expireTime||"",!1),ut(e,"upyun","endpoint","input",t.endpoint||"https://v0.api.upyun.com",!1,void 0,{get message(){return e.i18n.translate("PICBED_UPYUN_MESSAGE_ENDPOINT")}})]};const ln=e=>{if(e.buffer)return e.buffer;if(e.base64Image)return Buffer.from(e.base64Image,"base64");throw new Error("No image data found")},Pn=(e,t,r,n,i,a)=>`${e}/${Je(`${a?r:t}${n}`).replace(/^\/+/g,"")}${i}`,cn=(e,r,n)=>{const a=D.join(e.baseDir,"imgTemp","webdavplist"),s=D.join(a,r);i(D.dirname(s)),t.writeFileSync(s,n)},un=async(e,t,r,n)=>{const i=D.dirname(`${t}${r}`),a="/"===i?"":i;a&&await e.createDirectory(a,{recursive:!0});const s=`${t}${r}`.replace(/^\/+|\/+$/g,"");return await e.putFileContents(s,n,{overwrite:!0})},pn=async e=>{const t=e.getConfig("picBed.webdavplist");if(!t)throw new Error("Can't find webdavplist config");var r;t.host=(r=t.host,`${t.sslEnabled?"https://":"http://"}${r.replace(/^https?:\/\/|\/+$/g,"")}`),t.path=Ze({path:t.path,rootToEmpty:!1});const n=Ze({path:t.webpath,rootToEmpty:!1}),i=t.options||"";try{const r=(e=>{const t={username:e.username,password:e.password,maxBodyLength:4294967296,maxContentLength:4294967296};return"digest"===e.authType&&(t.authType=re.Digest),ne(e.host,t)})(t),a=t.customUrl||t.host;for(const s of e.output){if(!s.fileName)continue;const o=ln(s);if(!await un(r,t.path,s.fileName,o))throw new Error("Upload failed");cn(e,s.fileName,o),delete s.base64Image,delete s.buffer,s.imgUrl=Pn(a,t.path,n,s.fileName,i,!!t.webpath),s.galleryPath=`http://localhost:36699/webdavplist/${encodeURIComponent(s.fileName)}`}return e}catch(t){throw e.emit(bt.NOTIFICATION,{title:e.i18n.translate("UPLOAD_FAILED"),body:e.i18n.translate("CHECK_SETTINGS")}),t}},An=e=>{var t;const r=e.getConfig("picBed.webdavplist")||{};return[ut(e,"webdavplist","host","input",r.host||"",!0),ut(e,"webdavplist","sslEnabled","confirm",null!==(t=r.sslEnabled)&&void 0!==t&&t,!1,void 0,{get message(){return e.i18n.translate("PICBED_WEBDAVPLIST_MESSAGE_SSLENABLED")}}),ut(e,"webdavplist","username","input",r.username||"",!0,void 0,{get message(){return e.i18n.translate("PICBED_WEBDAVPLIST_MESSAGE_USERNAME")}}),ut(e,"webdavplist","password","input",r.password||"",!0,void 0,{get message(){return e.i18n.translate("PICBED_WEBDAVPLIST_MESSAGE_PASSWORD")}}),ut(e,"webdavplist","path","input",r.path||"",!1,void 0,{get message(){return e.i18n.translate("PICBED_WEBDAVPLIST_MESSAGE_PATH")}}),ut(e,"webdavplist","webpath","input",r.webpath||"",!1,void 0,{get message(){return e.i18n.translate("PICBED_WEBDAVPLIST_MESSAGE_WEBSITE_PATH")}}),ut(e,"webdavplist","customUrl","input",r.customUrl||"",!1,void 0,{get message(){return e.i18n.translate("PICBED_WEBDAVPLIST_MESSAGE_CUSTOMURL")}}),ut(e,"webdavplist","authType","list",r.authType||"basic",!1,void 0,{choices:["basic","digest"]}),ut(e,"webdavplist","options","input",r.options||"",!1,void 0,{get message(){return e.i18n.translate("PICBED_WEBDAVPLIST_MESSAGE_OPTIONS")}})]};const Cn=()=>({register(e){!function(e){e.helper.uploader.register(et,{get name(){return e.i18n.translate("PICBED_ADVANCEDPLIST")},handle:Er,config:Sr})}(e),function(e){e.helper.uploader.register(tt,{get name(){return e.i18n.translate("PICBED_ALIST_PLIST")},handle:cr,config:ur})}(e),function(e){e.helper.uploader.register(rt,{get name(){return e.i18n.translate("PICBED_ALICLOUD")},handle:Dr,config:Tr})}(e),function(e){e.helper.uploader.register(nt,{get name(){return e.i18n.translate("PICBED_AWSS3PLIST")},handle:Br,config:Nr})}(e),function(e){e.helper.uploader.register(it,{get name(){return e.i18n.translate("PICBED_GITHUB")},handle:Mr,config:yr})}(e),function(e){e.helper.uploader.register(at,{get name(){return e.i18n.translate("PICBED_IMGUR")},handle:wr,config:br})}(e),function(e){e.helper.uploader.register(st,{get name(){return e.i18n.translate("PICBED_LOCAL")},handle:xr,config:Wr})}(e),function(e){e.helper.uploader.register(ot,{get name(){return e.i18n.translate("PICBED_LSKY_PLIST")},handle:Fr,config:Hr})}(e),function(e){e.helper.uploader.register(Et,{get name(){return e.i18n.translate("PICBED_PICLIST")},handle:$r,config:kr})}(e),function(e){e.helper.uploader.register(St,{get name(){return e.i18n.translate("PICBED_QINIU")},handle:jr,config:qr})}(e),function(e){e.helper.uploader.register(It,{get name(){return e.i18n.translate("PICBED_SFTPPLIST")},handle:Xr,config:Qr})}(e),function(e){e.helper.uploader.register(_t,{get name(){return e.i18n.translate("PICBED_SMMS")},handle:Jr,config:en})}(e),function(e){e.helper.uploader.register(lt,{get name(){return e.i18n.translate("PICBED_TENCENTCLOUD")},handle:nn,config:an})}(e),function(e){e.helper.uploader.register(Pt,{get name(){return e.i18n.translate("PICBED_UPYUN")},handle:Sn,config:_n})}(e),function(e){e.helper.uploader.register(ct,{get name(){return e.i18n.translate("PICBED_WEBDAVPLIST")},handle:pn,config:An})}(e)}}),Dn=(e,t,r)=>{const n=Te(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 Tn={handle:async e=>{const t=e.output;return await Promise.all(e.input.map((async(r,n)=>{let i;if(i=Buffer.isBuffer(r)?{success:!0,buffer:r,fileName:"",extname:""}:Ae(r)?await ge(r,e):await de(r),i.success&&i.buffer){const a=Dn(e,i.buffer,r),s=i.extname||a.extname||".png";t[n]={buffer:i.buffer,fileName:i.fileName||`${w().format("YYYYMMDDHHmmssSSS")}${s}`,width:a.width,height:a.height,extname:i.extname}}else e.log.error(i.reason)}))),e.output=t.filter((e=>e)),e}};var dn={handle:async e=>(e.output.push(...e.input),e)};const gn={darwin:'-- From https://github.com/mushanshitiancai/vscode-paste-image\nproperty fileTypes : {{«class PNGf», ".png"}}\n\non run argv\n\tif argv is {} then\n\t\treturn ""\n\tend if\n\n\tif ((clipboard info) as string) contains "«class furl»" then\n\t\treturn POSIX path of (the clipboard as «class furl»)\n\telse\n\t\tset imagePath to (item 1 of argv)\n\t\tset theType to getType()\n\n\t\tif theType is not missing value then\n\t\t\ttry\n\t\t\t\tset myFile to (open for access imagePath with write permission)\n\t\t\t\tset eof myFile to 0\n\t\t\t\twrite (the clipboard as (first item of theType)) to myFile\n\t\t\t\tclose access myFile\n\t\t\t\treturn (POSIX path of imagePath)\n\t\t\ton error\n\t\t\t\ttry\n\t\t\t\t\tclose access myFile\n\t\t\t\tend try\n\t\t\t\treturn "no image"\n\t\t\tend try\n\t\telse\n\t\t\treturn "no image"\n\t\tend if\n\tend if\nend run\n\non getType()\n\trepeat with aType in fileTypes\n\t\trepeat with theInfo in (clipboard info)\n\t\t\tif (first item of theInfo) is equal to (first item of aType) then return aType\n\t\tend repeat\n\tend repeat\n\treturn missing value\nend getType\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 ($null -eq $img) {\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 ($null -eq $img) {\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 ($null -ne $file) {\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\n\nif [ -z "$DISPLAY" ]; then\n echo "no support" >&2\n exit 1\nfi\n\ncase "$XDG_SESSION_TYPE" in\nwayland)\n command -v wl-copy >/dev/null 2>&1 || {\n echo >&2 "no wl-clipboard"\n exit 1\n }\n filePath=$(wl-copy -o 2>/dev/null | grep ^file:// | cut -c8-)\n if [ -z "$filePath" ]; then\n if\n wl-copy -t image/png image/png -o >"$1" 2>/dev/null\n then\n echo "$1"\n else\n rm -f "$1"\n echo "no image"\n fi\n else\n echo "$filePath"\n fi\n ;;\nx11 | tty)\n # require xclip(see http://stackoverflow.com/questions/592620/check-if-a-program-exists-from-a-bash-script/677212#677212)\n command -v xclip >/dev/null 2>&1 || {\n echo >&2 "no xclip"\n exit 1\n }\n # write image in clipboard to file (see http://unix.stackexchange.com/questions/145131/copy-image-from-clipboard-to-file)\n filePath=$(xclip -selection clipboard -o 2>/dev/null | grep ^file:// | cut -c8-)\n if [ -z "$filePath" ]; then\n if\n xclip -selection clipboard -target image/png -o >"$1" 2>/dev/null\n then\n echo "$1"\n else\n rm -f "$1"\n echo "no image"\n fi\n else\n echo "$filePath"\n fi\n ;;\nesac\n',wsl:'#!/bin/sh\n# grab the paths\nscriptPath=$(echo $0 | awk \'{ print substr( $0, 1, length($0)-6 ) }\')"windows10.ps1"\nimagePath=$(echo $1 | awk \'{ print substr( $0, 1, length($0)-18 ) }\')\nimageName=$(echo $1 | awk \'{ print substr( $0, length($0)-17, length($0) ) }\')\n\n# run the powershell script\nres=$(powershell.exe -noprofile -noninteractive -nologo -sta -executionpolicy unrestricted -file $(wslpath -w $scriptPath) $(wslpath -w $imagePath)"\\\\"$imageName)\n\n# note that there is a return symbol in powershell result\nnoImage=$(echo "no image\\r")\n\n# check whether image exists\nif [ "$res" = "$noImage" ] ;then\n echo "no image"\nelse\n echo $(wslpath -u -a "${res}")\nfi\n'},mn={darwin:"mac.applescript",win32:"windows.ps1",win10:"windows10.ps1",linux:"linux.sh",wsl:"wsl.sh"};const Ln=async e=>{!function(e){const t=D.join(e.baseDir,"piclist-clipboard-images");i(t)}(e);const r=D.join(e.baseDir,"piclist-clipboard-images",`${w().format("YYYYMMDDHHmmssSSS")}.png`);return await new Promise(((n,i)=>{const a=(()=>{const e=process.platform;return ae?"wsl":"win32"===e?"10"===A.release().split(".")[0]?"win10":"win32":"darwin"===e?"darwin":"linux"})(),s=D.join(e.baseDir,mn[a]);let o;t.existsSync(s)||t.writeFileSync(s,gn[a],"utf8"),o="darwin"===a?ie("osascript",[s,r]):"win32"===a||"win10"===a?ie("powershell",["-noprofile","-noninteractive","-nologo","-sta","-executionpolicy","unrestricted","-file",s,r]):ie("sh",[s,r]),o.stdout.on("data",(s=>{if("linux"===a&&"no xclip or wl-clipboard"===s.toString().trim())return e.emit(bt.NOTIFICATION,{title:"xclip or wl-clipboard not found",body:"Please install xclip(for x11) or wl-clipboard(for wayland) before run picgo"}),i(new Error("Please install xclip(for x11) or wl-clipboard(for wayland) before run picgo"));const o=s.toString().trim();let E=!1;if(D.basename(o)!==D.basename(r)&&t.existsSync(o)&&(E=!0),"no image"!==o&&!t.existsSync(o))return i(new Error(`Can't find ${o}`));n({imgPath:o,shouldKeepAfterUploading:E})}))}))};class hn{constructor(e){if(this.ctx=e,this.db=new se(this.ctx.configPath),!this.db.has("picBed"))try{this.db.set("picBed",{uploader:"smms",current:"smms",smms:{token:""}})}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])}))}}const fn={"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_MESSAGE_TOKEN:"请填写Token",PICBED_SMMS_BACKUPDOMAIN:"备用上传域名",PICBED_SMMS_MESSAGE_BACKUP_DOMAIN:"例如 smms.app",PICBED_ADVANCEDPLIST:"高级自定义",PICBED_ADVANCEDPLIST_ENDPOINT:"设定接口网址",PICBED_ADVANCEDPLIST_MESSAGE_ENDPOINT:"例如: https://example.com/upload",PICBED_ADVANCEDPLIST_METHOD:"设定请求方法",PICBED_ADVANCEDPLIST_MESSAGE_METHOD:"请选择请求方法",PICBED_ADVANCEDPLIST_FORMDATAKEY:"设定表单参数名",PICBED_ADVANCEDPLIST_MESSAGE_FORMDATAKEY:"例如: file",PICBED_ADVANCEDPLIST_HEADERS:"设定请求头",PICBED_ADVANCEDPLIST_MESSAGE_HEADERS:'例如: {"Content-Type": "multipart/form-data"}',PICBED_ADVANCEDPLIST_BODY:"设定请求体",PICBED_ADVANCEDPLIST_MESSAGE_BODY:'例如: {"key": "value"}',PICBED_ADVANCEDPLIST_CUSTOMPREFIX:"设定自定义前缀",PICBED_ADVANCEDPLIST_MESSAGE_CUSTOMPREFIX:"例如: https://example.com/",PICBED_ADVANCEDPLIST_WEBPATH:"设定网站路径",PICBED_ADVANCEDPLIST_MESSAGE_WEBPATH:"用于拼接网址路径",PICBED_ADVANCEDPLIST_RESDATAPATH:"设定返回数据URL路径",PICBED_ADVANCEDPLIST_MESSAGE_RESDATAPATH:"例如: data.url",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_ALIST_PLIST:"AList",PICBED_ALIST_URL:"设定URL",PICBED_ALIST_MESSAGE_URL:"例如: https://alist.example.com",PICBED_ALIST_TOKEN:"设定Token",PICBED_ALIST_MESSAGE_TOKEN:"请输入Token(与用户名-密码二选一)",PICBED_ALIST_USERNAME:"设定用户名",PICBED_ALIST_MESSAGE_USERNAME:"请输入用户名(与Token二选一)",PICBED_ALIST_PASSWORD:"设定密码",PICBED_ALIST_MESSAGE_PASSWORD:"请输入密码",PICBED_ALIST_UPLOADPATH:"设定上传路径",PICBED_ALIST_MESSAGE_UPLOAD_PATH:"例如: /test",PICBED_ALIST_WEBPATH:"设定网站路径",PICBED_ALIST_MESSAGE_WEB_PATH:"用于拼接网址路径",PICBED_ALIST_CUSTOMURL:"设定自定义域名",PICBED_ALIST_MESSAGE_CUSTOMURL:"例如: https://test.com",PICBED_ALICLOUD:"阿里云OSS",PICBED_ALICLOUD_ACCESSKEYID:"设定accessKeyId",PICBED_ALICLOUD_ACCESSKEYSECRET:"设定accessKeySecret",PICBED_ALICLOUD_BUCKET:"设定Bucket",PICBED_ALICLOUD_AREA:"设定存储区域",PICBED_ALICLOUD_PATH:"设定存储路径",PICBED_ALICLOUD_WEBPATH:"设定网站路径",PICBED_ALICLOUD_CUSTOMURL:"设定自定义域名",PICBED_ALICLOUD_OPTIONS:"设定网址后缀",PICBED_ALICLOUD_MESSAGE_AREA:"例如: oss-cn-beijing",PICBED_ALICLOUD_MESSAGE_PATH:"例如: test/",PICBED_ALICLOUD_MESSAGE_WEBPATH:"用于拼接网址路径",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_WEBPATH:"设定网站路径",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_WEBPATH:"例如: /usr/local/images/",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/86438)",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_ENDPOINT:"设定自定义API接入点",PICBED_UPYUN_ANTILEECHTOKEN:"设定防盗链Token",PICBED_UPYUN_EXPIRETIME:"设定过期时间(秒)",PICBED_UPYUN_MESSAGE_OPERATOR:"例如: me",PICBED_UPYUN_MESSAGE_PASSWORD:"例如: 123456",PICBED_UPYUN_MESSAGE_URL:"例如: http://xxx.test.upcdn.net",PICBED_UPYUN_MESSAGE_OPTIONS:"例如: !imgslim",PICBED_UPYUN_MESSAGE_PATH:"例如: test/",PICBED_UPYUN_MESSAGE_ENDPOINT:"例如: https://v0.api.upyun.com",PICBED_WEBDAVPLIST:"WebDAV",PICBED_WEBDAVPLIST_HOST:"设定接口网址",PICBED_WEBDAVPLIST_SSLENABLED:"启用SSL",PICBED_WEBDAVPLIST_USERNAME:"设定用户名",PICBED_WEBDAVPLIST_PASSWORD:"设定密码",PICBED_WEBDAVPLIST_PATH:"设定存储路径",PICBED_WEBDAVPLIST_WEBPATH:"设定网址路径",PICBED_WEBDAVPLIST_CUSTOMURL:"设定自定义域名",PICBED_WEBDAVPLIST_AUTHTYPE:"设定认证方式",PICBED_WEBDAVPLIST_OPTIONS:"设定网址后缀",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_WEBDAVPLIST_MESSAGE_OPTIONS:"例如: ?key=123456",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",PICBED_PICLIST:"PicList",PICBED_PICLIST_HOST:"设定主机",PICBED_PICLIST_PORT:"设定端口",PICBED_PICLIST_PICBED:"设定图床",PICBED_PICLIST_CONFIGNAME:"设定配置名",PICBED_PICLIST_KEY:"设定鉴权Key",PICBED_LSKY_PLIST:"兰空图床",PICBED_LSKY_VERSION:"设定版本",PICBED_LSKY_MESSAGE_VERSION:"例如V1",PICBED_LSKY_HOST:"设定主机",PICBED_LSKY_MESSAGE_HOST:"例如: https://example.com",PICBED_LSKY_TOKEN:"设定Token",PICBED_LSKY_MESSAGE_TOKEN:"例如: 1234567890",PICBED_LSKY_STRATEGY_ID:"设定策略ID",PICBED_LSKY_MESSAGE_STRATEGY_ID:"例如: 1",PICBED_LSKY_ALBUM_ID:"设定相册ID",PICBED_LSKY_MESSAGE_ALBUM_ID:"选填,V2版本限定",PICBED_LSKY_PERMISSION:"设定权限",PICBED_LSKY_MESSAGE_PERMISSION:"例如: public",PICBED_AWSS3PLIST:"AWS S3",PICBED_AWSS3PLIST_ACCESSKEYID:"设定AccessKeyId",PICBED_AWSS3PLIST_SECRET_ACCESSKEY:"设定SecretAccessKey",PICBED_AWSS3PLIST_BUCKET:"设定Bucket",PICBED_AWSS3PLIST_REGION:"设定Region",PICBED_AWSS3PLIST_UPLOADPATH:"设定上传路径",PICBED_AWSS3PLIST_ENDPOINT:"设定自定义节点",PICBED_AWSS3PLIST_PROXY:"设定代理",PICBED_AWSS3PLIST_URLPREFIX:"设定自定义域名",PICBED_AWSS3PLIST_PATHSTYLEACCESS:"启用s3ForcePathStyle",PICBED_AWSS3PLIST_REJECTUNAUTHORIZED:"拒绝无效TLS证书连接",PICBED_AWSS3PLIST_ACL:"设定上传资源的访问策略",PICBED_AWSS3PLIST_DISABLEBUCKETPREFIXTOURL:"开启 `pathStyleAccess` 时,是否要禁用最终生成URL中添加 bucket 前缀",PICBED_AWSS3PLIST_MESSAGE_ACCESSKEYID:"例如: AKIAxxxxxxxxxxxxx",PICBED_AWSS3PLIST_MESSAGE_SECRET_ACCESSKEY:"例如: xxxxxxxxxx",PICBED_AWSS3PLIST_MESSAGE_BUCKET:"例如: test",PICBED_AWSS3PLIST_MESSAGE_REGION:"例如: us-east-1",PICBED_AWSS3PLIST_MESSAGE_UPLOADPATH:"例如: test/{fullName}",PICBED_AWSS3PLIST_MESSAGE_ENDPOINT:"例如: https://s3.us-east-1.amazonaws.com",PICBED_AWSS3PLIST_MESSAGE_PROXY:"例如: http://127.0.0.1:1080",PICBED_AWSS3PLIST_MESSAGE_URLPREFIX:"例如: https://test.com",PICBED_AWSS3PLIST_MESSAGE_PATHSTYLEACCESS:"需要时启用",PICBED_AWSS3PLIST_MESSAGE_REJECTUNAUTHORIZED:"需要时启用",PICBED_AWSS3PLIST_MESSAGE_ACL:"例如: public-read",PICBED_AWSS3PLIST_MESSAGE_DISABLEBUCKETPREFIXTOURL:"需要时启用",BUILDIN_WATERMARK:"水印设置",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_WATERMARKFONTPATH:"设定水印字体文件路径",BUILDIN_WATERMARK_MESSAGE_WATERMARKFONTPATH:"请输入水印字体文件路径",BUILDIN_WATERMARK_WATERMARKSCALERATIO:"设定水印相对于图片的比例",BUILDIN_WATERMARK_MESSAGE_WATERMARKFONTRATIO:"请输入0-1的小数",BUILDIN_WATERMARK_WATERMARKCOLOR:"设定水印字体颜色",BUILDIN_WATERMARK_MESSAGE_WATERMARKFONTCOLOR:"请输入rgb颜色值",BUILDIN_WATERMARK_WATERMARKIMAGEPATH:"设定水印图片路径",BUILDIN_WATERMARK_MESSAGE_WATERMARKIMAGEPATH:"请输入水印图片路径",BUILDIN_WATERMARK_WATERMARKPOSITION:"设定水印位置",BUILDIN_WATERMARK_MESSAGE_WATERMARKPOSITION:"请选择水印位置",BUILDIN_SKIPPROCESS:"跳过处理设置",BUILDIN_SKIPPROCESS_SKIPPROCESSEXTLIST:"设定跳过处理的文件后缀列表",BUILDIN_RENAME:"重命名设置",BUILDIN_RENAME_FORMAT:"设定重命名格式",BUILDIN_RENAME_ENABLE:"是否启用重命名",BUILDIN_COMPRESS:"图片处理",BUILDIN_COMPRESS_QUALITY:"设定图片质量",BUILDIN_COMPRESS_MESSAGE_QUALITY:"请输入1-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_ISFLIP:"是否垂直翻转图片",BUILDIN_COMPRESS_ISFLOP:"是否水平翻转图片",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_MESSAGE_TOKEN:"請輸入Token",PICBED_SMMS_BACKUPDOMAIN:"備用上傳網址",PICBED_SMMS_MESSAGE_BACKUP_DOMAIN:"例如 smms.app",PICBED_ADVANCEDPLIST:"高級自定義",PICBED_ADVANCEDPLIST_ENDPOINT:"設定API主機",PICBED_ADVANCEDPLIST_MESSAGE_ENDPOINT:"例如: https://example.com/upload",PICBED_ADVANCEDPLIST_METHOD:"設定請求方法",PICBED_ADVANCEDPLIST_MESSAGE_METHOD:"請選擇請求方法",PICBED_ADVANCEDPLIST_FORMDATAKEY:"設定表單Key",PICBED_ADVANCEDPLIST_MESSAGE_FORMDATAKEY:"例如: file",PICBED_ADVANCEDPLIST_HEADERS:"設定請求頭",PICBED_ADVANCEDPLIST_MESSAGE_HEADERS:'例如: {"Content-Type": "multipart/form-data"}',PICBED_ADVANCEDPLIST_BODY:"設定請求體",PICBED_ADVANCEDPLIST_MESSAGE_BODY:'例如: {"key": "value"}',PICBED_ADVANCEDPLIST_CUSTOMPREFIX:"設定自定義前綴",PICBED_ADVANCEDPLIST_MESSAGE_CUSTOMPREFIX:"例如: https://example.com/",PICBED_ADVANCEDPLIST_WEBPATH:"設定網站路徑",PICBED_ADVANCEDPLIST_MESSAGE_WEBPATH:"用於網頁顯示的路徑",PICBED_ADVANCEDPLIST_RESDATAPATH:"設定返回數據路徑",PICBED_ADVANCEDPLIST_MESSAGE_RESDATAPATH:"例如: data.url",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_ALIST_PLIST:"AList",PICBED_ALIST_URL:"設定URL",PICBED_ALIST_MESSAGE_URL:"例如: https://alist.example.com",PICBED_ALIST_TOKEN:"設定Token",PICBED_ALIST_MESSAGE_TOKEN:"請輸入Token(與用戶名-密碼二選一)",PICBED_ALIST_USERNAME:"設定用戶名",PICBED_ALIST_MESSAGE_USERNAME:"請輸入用戶名(與Token二選一)",PICBED_ALIST_PASSWORD:"設定密碼",PICBED_ALIST_MESSAGE_PASSWORD:"請輸入密碼",PICBED_ALIST_UPLOADPATH:"設定上傳路徑",PICBED_ALIST_MESSAGE_UPLOAD_PATH:"例如: /test",PICBED_ALIST_WEBPATH:"設定網址路徑",PICBED_ALIST_MESSAGE_WEB_PATH:"用於網頁顯示的路徑",PICBED_ALIST_CUSTOMURL:"設定自訂網址",PICBED_ALIST_MESSAGE_CUSTOMURL:"例如: https://test.com",PICBED_ALICLOUD:"阿里雲OSS",PICBED_ALICLOUD_ACCESSKEYID:"設定accessKeyId",PICBED_ALICLOUD_ACCESSKEYSECRET:"設定accessKeySecret",PICBED_ALICLOUD_BUCKET:"設定Bucket",PICBED_ALICLOUD_AREA:"設定儲存區域",PICBED_ALICLOUD_PATH:"設定儲存路徑",PICBED_ALICLOUD_WEBPATH:"設定網址路徑",PICBED_ALICLOUD_CUSTOMURL:"設定自訂網址",PICBED_ALICLOUD_OPTIONS:"設定網址後綴",PICBED_ALICLOUD_MESSAGE_AREA:"例如: oss-cn-beijing",PICBED_ALICLOUD_MESSAGE_PATH:"例如: test/",PICBED_ALICLOUD_MESSAGE_WEBPATH:"用於網頁顯示的路徑",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_WEBPATH:"設定網址路徑",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_WEBPATH:"例如: /usr/local/images/",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_CANCEL:"關閉",PICBED_TENCENTCLOUD_SLIM_CONFIRM:"開啟",PICBED_TENCENTCLOUD_SLIM_TIP:"圖片極智壓縮,詳情請參考[文檔說明](https://cloud.tencent.com/document/product/436/49259)",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_ENDPOINT:"設定接入點",PICBED_UPYUN_OPERATOR:"設定操作員",PICBED_UPYUN_PASSWORD:"設定操作員密碼",PICBED_UPYUN_PATH:"設定儲存路徑",PICBED_UPYUN_URL:"設定加速網址",PICBED_UPYUN_OPTIONS:"設定網址後綴",PICBED_UPYUN_ANTILEECHTOKEN:"設定防盜鏈Token",PICBED_UPYUN_EXPIRETIME:"設定過期時間(秒)",PICBED_UPYUN_MESSAGE_OPERATOR:"例如: me",PICBED_UPYUN_MESSAGE_PASSWORD:"例如: 123456",PICBED_UPYUN_MESSAGE_URL:"例如: http://xxx.test.upcdn.net",PICBED_UPYUN_MESSAGE_OPTIONS:"例如: !imgslim",PICBED_UPYUN_MESSAGE_PATH:"例如: test/",PICBED_UPYUN_MESSAGE_ENDPOINT:"例如: https://v0.api.upyun.com",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_AUTHTYPE:"設定認證方式",PICBED_WEBDAVPLIST_OPTIONS:"設定網址後綴",PICBED_WEBDAVPLIST_WEBPATH:"設定網站路徑",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_WEBDAVPLIST_MESSAGE_OPTIONS:"例如: ?key=value",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",PICBED_PICLIST:"PicList",PICBED_PICLIST_HOST:"設定主機",PICBED_PICLIST_PORT:"設定端口",PICBED_PICLIST_PICBED:"設定圖床",PICBED_PICLIST_CONFIGNAME:"設定配置名",PICBED_PICLIST_KEY:"設定鑒權Key",PICBED_LSKY_PLIST:"蘭空圖床",PICBED_LSKY_VERSION:"設定版本",PICBED_LSKY_MESSAGE_VERSION:"請選擇版本",PICBED_LSKY_HOST:"設定主機",PICBED_LSKY_MESSAGE_HOST:"例如: https://example.com",PICBED_LSKY_TOKEN:"設定Token",PICBED_LSKY_MESSAGE_TOKEN:"請輸入Token",PICBED_LSKY_STRATEGY_ID:"設定策略ID",PICBED_LSKY_MESSAGE_STRATEGY_ID:"例如1",PICBED_LSKY_ALBUM_ID:"設定相冊ID",PICBED_LSKY_MESSAGE_ALBUM_ID:"例如1",PICBED_LSKY_PERMISSION:"設定上傳權限",PICBED_LSKY_MESSAGE_PERMISSION:"請選擇上傳權限",PICBED_AWSS3PLIST:"AWS S3",PICBED_AWSS3PLIST_ACCESSKEYID:"設定AccessKeyId",PICBED_AWSS3PLIST_SECRET_ACCESSKEY:"設定SecretAccessKey",PICBED_AWSS3PLIST_BUCKET:"設定Bucket",PICBED_AWSS3PLIST_REGION:"設定Region",PICBED_AWSS3PLIST_UPLOADPATH:"設定上傳路徑",PICBED_AWSS3PLIST_ENDPOINT:"設定自定義節點",PICBED_AWSS3PLIST_PROXY:"設定代理",PICBED_AWSS3PLIST_URLPREFIX:"設定自定義網址",PICBED_AWSS3PLIST_PATHSTYLEACCESS:"開啟 `pathStyleAccess`",PICBED_AWSS3PLIST_REJECTUNAUTHORIZED:"開啟 `rejectUnauthorized`",PICBED_AWSS3PLIST_ACL:"設定ACL",PICBED_AWSS3PLIST_DISABLEBUCKETPREFIXTOURL:"開啟 `pathStyleAccess` 時,是否要禁用最終生成URL中添加 bucket 前綴",PICBED_AWSS3PLIST_MESSAGE_ACCESSKEYID:"例如: AKIAxxxxxxxxxxxxx",PICBED_AWSS3PLIST_MESSAGE_SECRET_ACCESSKEY:"例如: xxxxxxxxxx",PICBED_AWSS3PLIST_MESSAGE_BUCKET:"例如: test/{fullName}",PICBED_AWSS3PLIST_MESSAGE_REGION:"例如: us-east-1",PICBED_AWSS3PLIST_MESSAGE_UPLOADPATH:"例如: test/",PICBED_AWSS3PLIST_MESSAGE_ENDPOINT:"例如: https://s3.us-east-1.amazonaws.com",PICBED_AWSS3PLIST_MESSAGE_PROXY:"例如: http://127.0.0.1:1080",PICBED_AWSS3PLIST_MESSAGE_URLPREFIX:"例如: https://test.com",PICBED_AWSS3PLIST_MESSAGE_PATHSTYLEACCESS:"需要時啟用",PICBED_AWSS3PLIST_MESSAGE_REJECTUNAUTHORIZED:"需要時啟用",PICBED_AWSS3PLIST_MESSAGE_ACL:"例如: public-read",PICBED_AWSS3PLIST_MESSAGE_DISABLEBUCKETPREFIXTOURL:"需要時啟用",BUILDIN_WATERMARK:"水印設定",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_WATERMARKFONTPATH:"設定水印字體",BUILDIN_WATERMARK_MESSAGE_WATERMARKFONTPATH:"請輸入水印字體文件路徑",BUILDIN_WATERMARK_WATERMARKSCALERATIO:"設定水印圖片比例",BUILDIN_WATERMARK_MESSAGE_WATERMARKFONTRATIO:"請輸入0-1的數字",BUILDIN_WATERMARK_WATERMARKCOLOR:"設定水印字體顏色",BUILDIN_WATERMARK_MESSAGE_WATERMARKFONTCOLOR:"請輸入rgb顏色值",BUILDIN_WATERMARK_WATERMARKIMAGEPATH:"設定水印圖片路徑",BUILDIN_WATERMARK_MESSAGE_WATERMARKIMAGEPATH:"請輸入水印圖片路徑",BUILDIN_WATERMARK_WATERMARKPOSITION:"設定水印位置",BUILDIN_WATERMARK_MESSAGE_WATERMARKPOSITION:"請選擇水印位置",BUILDIN_SKIPPROCESS:"跳過處理設定",BUILDIN_SKIPPROCESS_SKIPPROCESSEXTLIST:"設定跳過處理的擴展名列表",BUILDIN_RENAME:"重命名設定",BUILDIN_RENAME_FORMAT:"設定重命名格式",BUILDIN_RENAME_ENABLE:"是否啟用重命名",BUILDIN_COMPRESS:"圖片處理設定",BUILDIN_COMPRESS_QUALITY:"設定圖片質量",BUILDIN_COMPRESS_MESSAGE_QUALITY:"請輸入1-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_ISFLIP:"是否垂直翻轉圖片",BUILDIN_COMPRESS_ISFLOP:"是否水平翻轉圖片",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_MESSAGE_TOKEN:"Please enter the token",PICBED_SMMS_BACKUPDOMAIN:"Set Backup Upload Domain",PICBED_SMMS_MESSAGE_BACKUP_DOMAIN:"Ex. smms.app",PICBED_ADVANCEDPLIST:"Advanced",PICBED_ADVANCEDPLIST_ENDPOINT:"Set Endpoint",PICBED_ADVANCEDPLIST_MESSAGE_ENDPOINT:"Please enter the endpoint",PICBED_ADVANCEDPLIST_METHOD:"Set Method",PICBED_ADVANCEDPLIST_MESSAGE_METHOD:"Please select the request method",PICBED_ADVANCEDPLIST_FORMDATAKEY:"Set FormData Key",PICBED_ADVANCEDPLIST_MESSAGE_FORMDATAKEY:"Please enter the FormData key",PICBED_ADVANCEDPLIST_HEADERS:"Set Headers",PICBED_ADVANCEDPLIST_MESSAGE_HEADERS:'e.g. {"Content-Type": "multipart/form-data"}',PICBED_ADVANCEDPLIST_BODY:"Set Body",PICBED_ADVANCEDPLIST_MESSAGE_BODY:'e.g. {"key": "value"}',PICBED_ADVANCEDPLIST_CUSTOMPREFIX:"Set Custom Prefix",PICBED_ADVANCEDPLIST_MESSAGE_CUSTOMPREFIX:"e.g. https://example.com/",PICBED_ADVANCEDPLIST_WEBPATH:"Set Web Path",PICBED_ADVANCEDPLIST_MESSAGE_WEBPATH:"Used to generate URL path",PICBED_ADVANCEDPLIST_RESDATAPATH:"Set Response Data Path",PICBED_ADVANCEDPLIST_MESSAGE_RESDATAPATH:"e.g. data.url",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_ALIST_PLIST:"AList",PICBED_ALIST_URL:"Set URL",PICBED_ALIST_MESSAGE_URL:"Ex. https://alist.example.com",PICBED_ALIST_TOKEN:"Set Token",PICBED_ALIST_MESSAGE_TOKEN:"Please enter the token(choose one of either username-password or token)",PICBED_ALIST_USERNAME:"Set Username",PICBED_ALIST_MESSAGE_USERNAME:"Please enter the username(choose one of either username-password or token)",PICBED_ALIST_PASSWORD:"Set Password",PICBED_ALIST_MESSAGE_PASSWORD:"Please enter the password",PICBED_ALIST_UPLOADPATH:"Set Upload Path",PICBED_ALIST_MESSAGE_UPLOAD_PATH:"Ex. /test/",PICBED_ALIST_WEBPATH:"Set Web Path",PICBED_ALIST_MESSAGE_WEB_PATH:"Used to generate URL path",PICBED_ALIST_CUSTOMURL:"Set Custom URL",PICBED_ALIST_MESSAGE_CUSTOMURL:"Ex. https://test.com",PICBED_ALICLOUD:"Ali Cloud",PICBED_ALICLOUD_ACCESSKEYID:"Set accessKeyId",PICBED_ALICLOUD_ACCESSKEYSECRET:"Set accessKeySecret",PICBED_ALICLOUD_BUCKET:"Set Bucket",PICBED_ALICLOUD_AREA:"Set Area",PICBED_ALICLOUD_PATH:"Set Path",PICBED_ALICLOUD_WEBPATH:"Set Web 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_WEBPATH:"Used to generate URL path",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_WEBPATH:"Set Web 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_WEBPATH:"Used to generate URL path",PICBED_TENCENTCLOUD_MESSAGE_CUSTOMURL:"Ex. https://test.com",PICBED_TENCENTCLOUD_MESSAGE_OPTIONS:"Ex. ?imageMogr2",PICBED_TENCENTCLOUD_MESSAGE_ENDPOINT:"Ex. 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/86438)",PICBED_TENCENTCLOUD_SLIM_CONFIRM:"OPEN",PICBED_TENCENTCLOUD_SLIM_CANCEL:"CLOSE",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:"Ex. test",PICBED_IMGUR_MESSAGE_PROXY:"Ex. http://127.0.0.1:1080",PICBED_UPYUN:"Upyun",PICBED_UPYUN_BUCKET:"Set Bucket",PICBED_UPYUN_ENDPOINT:"Set Endpoint",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_ANTILEECHTOKEN:"Set Anti-Leech Token",PICBED_UPYUN_EXPIRETIME:"Set Expire Time(seconds)",PICBED_UPYUN_MESSAGE_OPERATOR:"Ex. me",PICBED_UPYUN_MESSAGE_PASSWORD:"Ex. xxx",PICBED_UPYUN_MESSAGE_URL:"Ex. http://xxx.test.upcdn.net",PICBED_UPYUN_MESSAGE_OPTIONS:"Ex. !imgslim",PICBED_UPYUN_MESSAGE_PATH:"Ex. test/",PICBED_UPYUN_MESSAGE_ENDPOINT:"Ex. https://v0.api.upyun.com",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_WEBPATH:"Set Website Path",PICBED_WEBDAVPLIST_CUSTOMURL:"Set Custom URL",PICBED_WEBDAVPLIST_AUTHTYPE:"Set Auth Type",PICBED_WEBDAVPLIST_OPTIONS:"Set URL Suffix",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_WEBDAVPLIST_MESSAGE_OPTIONS:"Ex. ?key=value",PICBED_SFTPPLIST:"SFTP Built-in",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",PICBED_PICLIST:"PicList",PICBED_PICLIST_HOST:"Set Host",PICBED_PICLIST_PORT:"Set Port",PICBED_PICLIST_PICBED:"Set PicBed",PICBED_PICLIST_CONFIGNAME:"Set Config Name",PICBED_PICLIST_KEY:"Set Key",PICBED_LSKY_PLIST:"Lsky",PICBED_LSKY_VERSION:"Set Version",PICBED_LSKY_MESSAGE_VERSION:"Ex. v1",PICBED_LSKY_HOST:"Set Host",PICBED_LSKY_MESSAGE_HOST:"Ex. https://lsky.co",PICBED_LSKY_TOKEN:"Set Token",PICBED_LSKY_MESSAGE_TOKEN:"Ex. xxx",PICBED_LSKY_STRATEGY_ID:"Set Strategy ID",PICBED_LSKY_MESSAGE_STRATEGY_ID:"Ex. 1",PICBED_LSKY_ALBUM_ID:"Set Album ID",PICBED_LSKY_MESSAGE_ALBUM_ID:"Optional, only for V2",PICBED_LSKY_PERMISSION:"Set Permission",PICBED_LSKY_MESSAGE_PERMISSION:"Ex. public",PICBED_AWSS3PLIST:"AWS S3",PICBED_AWSS3PLIST_ACCESSKEYID:"Set AccessKeyId",PICBED_AWSS3PLIST_SECRET_ACCESSKEY:"Set SecretAccessKey",PICBED_AWSS3PLIST_BUCKET:"Set Bucket",PICBED_AWSS3PLIST_REGION:"Set Region",PICBED_AWSS3PLIST_UPLOADPATH:"Set Upload Path",PICBED_AWSS3PLIST_ENDPOINT:"Set Endpoint",PICBED_AWSS3PLIST_PROXY:"Set Proxy",PICBED_AWSS3PLIST_URLPREFIX:"Set Custom URL",PICBED_AWSS3PLIST_PATHSTYLEACCESS:"Set PathStyleAccess",PICBED_AWSS3PLIST_REJECTUNAUTHORIZED:"Set RejectUnauthorized",PICBED_AWSS3PLIST_ACL:"Set ACL",PICBED_AWSS3PLIST_DISABLEBUCKETPREFIXTOURL:"when `pathStyleAccess` is enabled, whether to disable adding bucket prefix to url",PICBED_AWSS3PLIST_MESSAGE_ACCESSKEYID:"Ex. xxx",PICBED_AWSS3PLIST_MESSAGE_SECRET_ACCESSKEY:"Ex. xxx",PICBED_AWSS3PLIST_MESSAGE_BUCKET:"Ex. test",PICBED_AWSS3PLIST_MESSAGE_REGION:"Ex. us-east-1",PICBED_AWSS3PLIST_MESSAGE_UPLOADPATH:"Ex. test/{fullName}",PICBED_AWSS3PLIST_MESSAGE_ENDPOINT:"Ex. https://s3.us-east-1.amazonaws.com",PICBED_AWSS3PLIST_MESSAGE_PROXY:"Ex. http://127.0.0.1:1080",PICBED_AWSS3PLIST_MESSAGE_URLPREFIX:"Ex. https://test.com",PICBED_AWSS3PLIST_MESSAGE_PATHSTYLEACCESS:"Enable when `pathStyleAccess` is required",PICBED_AWSS3PLIST_MESSAGE_REJECTUNAUTHORIZED:"Enable when rejecting invalid TLS certificate connection is required",PICBED_AWSS3PLIST_MESSAGE_ACL:"Ex. public-read",PICBED_AWSS3PLIST_MESSAGE_DISABLEBUCKETPREFIXTOURL:"Enable when `pathStyleAccess` is enabled",BUILDIN_SKIPPROCESS:"Skip Process Settings",BUILDIN_SKIPPROCESS_SKIPPROCESSEXTLIST:"Set Skip Process Ext List",BUILDIN_RENAME:"Rename Settings",BUILDIN_RENAME_FORMAT:"Set rename format",BUILDIN_RENAME_ENABLE:"Enable rename",BUILDIN_WATERMARK:"Watermark Settings",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_WATERMARKFONTPATH:"Set watermark font",BUILDIN_WATERMARK_MESSAGE_WATERMARKFONTPATH:"Please enter the watermark font file path",BUILDIN_WATERMARK_WATERMARKSCALERATIO:"Set the ratio of the watermark to the image",BUILDIN_WATERMARK_MESSAGE_WATERMARKFONTRATIO:"Please enter a number between 0-1",BUILDIN_WATERMARK_WATERMARKCOLOR:"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:"Processing Settings",BUILDIN_COMPRESS_QUALITY:"Set image quality",BUILDIN_COMPRESS_MESSAGE_QUALITY:"Please enter an integer between 1-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_ISFLIP:"Whether to flip the image vertically",BUILDIN_COMPRESS_ISFLOP:"Whether to flip the image horizontally",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 Bn{constructor(e){this.ctx=e,this.objectAdapter=new Ee(fn);let t=this.ctx.getConfig("settings.language")||"zh-CN";fn[t]||(t="zh-CN"),this.i18n=new Se({adapter:this.objectAdapter,defaultLanguage:t}),this.loadOutterI18n()}loadOutterI18n(){const e=this.getOutterI18nFolder();t.readdirSync(e,{withFileTypes:!0}).forEach((r=>{if(r.isFile()&&r.name.endsWith(".yml")){const n=D.join(e,r.name),i=t.readFileSync(n,"utf8");try{const e=oe.load(i);fn[r.name.replace(/\.yml$/,"")]=e}catch(e){console.error(e)}}}))}getOutterI18nFolder(){const e=D.join(this.ctx.baseDir,"i18n-cli");return S(e)||i(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=P(r,t);return this.objectAdapter.setLocale(e,n),!0}addLanguage(e,t){return!this.objectAdapter.getLocale(e)&&(this.objectAdapter.setLocale(e,t),fn[e]=t,!0)}getLanguageList(){return Object.keys(fn)}}class Nn extends e{get pluginLoader(){return this._pluginLoader}constructor(e=""){super(),this.VERSION="1.9.14",this.configPath=e,this.input=[],this.rawInput=[],this.processedInput=[],this.output=[],this.helper={transformer:new Mt("transformer"),uploader:new Mt("uploader"),beforeTransformPlugins:new Mt("beforeTransformPlugins"),beforeUploadPlugins:new Mt("beforeUploadPlugins"),afterUploadPlugins:new Mt("afterUploadPlugins")},this.initConfigPath(),this.log=new Wt(this),this.cmd=new Gt(this),this.pluginHandler=new vt(this),this.initConfig(),this.init()}initConfigPath(){if(this.configPath=this.configPath||D.join(C(),".piclist/config.json"),".JSON"!==D.extname(this.configPath).toUpperCase())throw this.configPath="",Error("The configuration file only supports JSON format.");this.baseDir=D.dirname(this.configPath),S(this.configPath)||I(`${this.configPath}`)}initConfig(){this.db=new hn(this),this._config=this.db.read(!0)}init(){try{this.i18n=new Bn(this),this.Request=new jt(this),this._pluginLoader=new Ht(this),yt("picgo"),Cn().register(this),{register(e){e.helper.transformer.register("path",Tn),e.helper.transformer.register("base64",dn)}}.register(this),yt(""),this._pluginLoader.load(),this.lifecycle=new sr(this)}catch(e){throw this.emit(bt.UPLOAD_PROGRESS,-1),this.log.error(e),e}}use(e,t){return t?(this.pluginLoader.registerPlugin(t,e),this.pluginLoader.getPlugin(t)):e(this)}registerCommands(){""!==this.configPath&&(this.cmd.init(),this.cmd.loadCommands())}getConfig(e){return this._config=this.db.read(!0),e?c(this._config,e):this._config}saveConfig(e){Me(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&&(Oe(e)?this.log.warn(`the config.${e} can't be removed`):(this.unsetConfig(e,t),this.db.unset(e,t)))}setConfig(e){Me(e)?Object.keys(e).forEach((t=>{Oe(t)&&(this.log.warn(`the config.${t} can't be modified`),delete e[t]),u(this._config,t,e[t]),Kt.emit(xt.CONFIG_CHANGE,{configName:t,value:e[t]})})):this.log.warn("the format of config is invalid, please provide object")}unsetConfig(e,t){e&&t&&(Oe(e)?this.log.warn(`the config.${e} can't be unset`):p(this.getConfig(e),t))}get request(){return this.Request.request.bind(this.Request)}async upload(e){if(""===this.configPath)return this.log.error("No config file found, please check your config file path"),[];if(void 0!==e&&0!==e.length){const{output:t}=await this.lifecycle.start(e);return t}try{const{imgPath:e,shouldKeepAfterUploading:t}=await Ln(this),r=()=>{t||_(e).catch((e=>{this.log.error(e)}))};if("no image"===e)throw new Error("image not found in clipboard");{this.once(bt.FAILED,r),this.once(bt.FINISHED,r);const{output:t}=await this.lifecycle.start([e]);return t}}catch(e){throw this.emit(bt.FAILED,e),e}}async uploadReturnCtx(e,t=!1){if(""===this.configPath)return this.log.error("No config file found, please check your config file path"),this;if(void 0!==e&&0!==e.length)return await this.lifecycle.start(e,t);try{const{imgPath:e,shouldKeepAfterUploading:r}=await Ln(this),n=()=>{r||_(e).catch((e=>{this.log.error(e)}))};if("no image"===e)throw new Error("image not found in clipboard");return this.once(bt.FAILED,n),this.once(bt.FINISHED,n),await this.lifecycle.start([e],t)}catch(e){throw this.emit(bt.FAILED,e),e}}}export{Gt as Commander,sr as Lifecycle,Mt as LifecyclePlugins,Wt as Logger,Nn as PicGo,Xe as PicGoUtils,vt as PluginHandler,Ht as PluginLoader,jt as Request};
|
|
2
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguZXNtLmpzIiwic291cmNlcyI6WyIuLi9zcmMvcGx1Z2lucy9jb21tYW5kZXIvcGx1Z2luSGFuZGxlci50cyIsIi4uL3NyYy9wbHVnaW5zL2NvbW1hbmRlci9jb25maWcudHMiLCIuLi9zcmMvdXRpbHMvY29tbW9uLnRzIiwiLi4vc3JjL3BsdWdpbnMvY29tbWFuZGVyL3VwbG9hZC50cyIsIi4uL3NyYy9wbHVnaW5zL3VwbG9hZGVyL3V0aWxzLnRzIiwiLi4vc3JjL3BsdWdpbnMvY29tbWFuZGVyL3V0aWxzLnRzIiwiLi4vc3JjL3BsdWdpbnMvY29tbWFuZGVyL3NldHRpbmcudHMiLCIuLi9zcmMvcGx1Z2lucy9iZWZvcmV0cmFuc2Zvcm1lci9jb21wcmVzcy50cyIsIi4uL3NyYy9wbHVnaW5zL2JlZm9yZXRyYW5zZm9ybWVyL3dhdGVybWFyay50cyIsIi4uL3NyYy9wbHVnaW5zL2JlZm9yZXVwbG9hZC9idWlsZEluUmVuYW1lLnRzIiwiLi4vc3JjL3BsdWdpbnMvYmVmb3JldHJhbnNmb3JtZXIvc2tpcFByb2Nlc3MudHMiLCIuLi9zcmMvcGx1Z2lucy9jb21tYW5kZXIvdXNlLnRzIiwiLi4vc3JjL3BsdWdpbnMvY29tbWFuZGVyL3Byb3h5LnRzIiwiLi4vc3JjL3V0aWxzL2luaXRVdGlscy50cyIsIi4uL3NyYy9wbHVnaW5zL2NvbW1hbmRlci9pbml0LnRzIiwiLi4vc3JjL3BsdWdpbnMvY29tbWFuZGVyL2kxOG4udHMiLCIuLi9zcmMvbGliL0xpZmVjeWNsZVBsdWdpbnMudHMiLCIuLi9zcmMvbGliL0NvbW1hbmRlci50cyIsIi4uL3NyYy9wbHVnaW5zL2NvbW1hbmRlci9pbmRleC50cyIsIi4uL3NyYy91dGlscy9lbnVtLnRzIiwiLi4vc3JjL2xpYi9Mb2dnZXIudHMiLCIuLi9zcmMvbGliL1BsdWdpbkhhbmRsZXIudHMiLCIuLi9zcmMvbGliL1BsdWdpbkxvYWRlci50cyIsIi4uL3NyYy91dGlscy9ldmVudEJ1cy50cyIsIi4uL3NyYy9saWIvUmVxdWVzdC50cyIsIi4uL3NyYy91dGlscy9jcmVhdGVDb250ZXh0LnRzIiwiLi4vc3JjL2NvcmUvTGlmZWN5Y2xlLnRzIiwiLi4vc3JjL3BsdWdpbnMvdXBsb2FkZXIvYWR2YW5jZWRwbGlzdC50cyIsIi4uL3NyYy9wbHVnaW5zL3VwbG9hZGVyL2FsaXN0LnRzIiwiLi4vc3JjL3BsdWdpbnMvdXBsb2FkZXIvYWxpeXVuLnRzIiwiLi4vc3JjL3BsdWdpbnMvdXBsb2FkZXIvczMvdXRpbHMudHMiLCIuLi9zcmMvcGx1Z2lucy91cGxvYWRlci9zMy91cGxvYWRlci50cyIsIi4uL3NyYy9wbHVnaW5zL3VwbG9hZGVyL2F3c3MzcGxpc3QudHMiLCIuLi9zcmMvcGx1Z2lucy91cGxvYWRlci9naXRodWIudHMiLCIuLi9zcmMvcGx1Z2lucy91cGxvYWRlci9pbWd1ci50cyIsIi4uL3NyYy9wbHVnaW5zL3VwbG9hZGVyL2xvY2FsLnRzIiwiLi4vc3JjL3BsdWdpbnMvdXBsb2FkZXIvbHNreS50cyIsIi4uL3NyYy9wbHVnaW5zL3VwbG9hZGVyL3BpY2xpc3QudHMiLCIuLi9zcmMvcGx1Z2lucy91cGxvYWRlci9xaW5pdS50cyIsIi4uL3NyYy91dGlscy9zc2hDbGllbnQudHMiLCIuLi9zcmMvcGx1Z2lucy91cGxvYWRlci9zZnRwLnRzIiwiLi4vc3JjL3BsdWdpbnMvdXBsb2FkZXIvc21tcy50cyIsIi4uL3NyYy9wbHVnaW5zL3VwbG9hZGVyL3RjeXVuLnRzIiwiLi4vc3JjL3BsdWdpbnMvdXBsb2FkZXIvdXB5dW4udHMiLCIuLi9zcmMvcGx1Z2lucy91cGxvYWRlci93ZWJkYXYudHMiLCIuLi9zcmMvcGx1Z2lucy91cGxvYWRlci9pbmRleC50cyIsIi4uL3NyYy9wbHVnaW5zL3RyYW5zZm9ybWVyL3BhdGgudHMiLCIuLi9zcmMvcGx1Z2lucy90cmFuc2Zvcm1lci9iYXNlNjQudHMiLCIuLi9zcmMvdXRpbHMvc3RhdGljLnRzIiwiLi4vc3JjL3V0aWxzL2dldENsaXBib2FyZEltYWdlLnRzIiwiLi4vc3JjL3V0aWxzL2RiLnRzIiwiLi4vc3JjL2kxOG4vemgtQ04udHMiLCIuLi9zcmMvaTE4bi9pbmRleC50cyIsIi4uL3NyYy9pMThuL3poLVRXLnRzIiwiLi4vc3JjL2kxOG4vZW4udHMiLCIuLi9zcmMvY29yZS9QaWNHby50cyIsIi4uL3NyYy9wbHVnaW5zL3RyYW5zZm9ybWVyL2luZGV4LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IElQaWNHbywgSVBsdWdpbiB9IGZyb20gJy4uLy4uL3R5cGVzJ1xuXG50eXBlIGFjdGlvbkZ1bmMgPSAocGx1Z2luczogc3RyaW5nW10sIHByb2dyYW06IGFueSkgPT4gdm9pZFxuXG5jb25zdCBjcmVhdGVDb21tYW5kID0gKFxuICBjbWQ6IGFueSxcbiAgY29tbWFuZDogc3RyaW5nLFxuICBkZXNjcmlwdGlvbjogc3RyaW5nLFxuICBhbGlhczogc3RyaW5nLFxuICBhY3Rpb246IGFjdGlvbkZ1bmMsXG4gIG9wdGlvbnM/OiB7IHByb3h5OiBib29sZWFuOyByZWdpc3RyeTogYm9vbGVhbiB9XG4pOiB2b2lkID0+IHtcbiAgbGV0IHByb2dyYW0gPSBjbWQucHJvZ3JhbS5jb21tYW5kKGNvbW1hbmQpLmRlc2NyaXB0aW9uKGRlc2NyaXB0aW9uKS5hbGlhcyhhbGlhcylcbiAgaWYgKG9wdGlvbnM/LnByb3h5KSB7XG4gICAgcHJvZ3JhbSA9IHByb2dyYW0ub3B0aW9uKCctcCwgLS1wcm94eSA8cHJveHk+JywgJ0FkZCBwcm94eSBmb3IgaW5zdGFsbGluZyBwbHVnaW5zJylcbiAgfVxuICBpZiAob3B0aW9ucz8ucmVnaXN0cnkpIHtcbiAgICBwcm9ncmFtID0gcHJvZ3JhbS5vcHRpb24oJy1yLCAtLXJlZ2lzdHJ5IDxyZWdpc3RyeT4nLCAnQ2hvb3NlIGEgcmVnaXN0cnkgZm9yIGluc3RhbGxpbmcgcGx1Z2lucycpXG4gIH1cbiAgcHJvZ3JhbS5hY3Rpb24oYWN0aW9uKVxufVxuXG5jb25zdCBwbHVnaW5IYW5kbGVyOiBJUGx1Z2luID0ge1xuICBoYW5kbGU6IChjdHg6IElQaWNHbykgPT4ge1xuICAgIGNvbnN0IGNtZCA9IGN0eC5jbWRcbiAgICBjcmVhdGVDb21tYW5kKFxuICAgICAgY21kLFxuICAgICAgJ2luc3RhbGwgPHBsdWdpbnMuLi4+JyxcbiAgICAgICdpbnN0YWxsIHBpY2dvIHBsdWdpbicsXG4gICAgICAnYWRkJyxcbiAgICAgIChwbHVnaW5zOiBzdHJpbmdbXSwgcHJvZ3JhbTogYW55KSA9PiB7XG4gICAgICAgIGNvbnN0IHsgcHJveHksIHJlZ2lzdHJ5IH0gPSBwcm9ncmFtXG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSB7IHByb3h5LCByZWdpc3RyeSB9XG4gICAgICAgIGN0eC5wbHVnaW5IYW5kbGVyLmluc3RhbGwocGx1Z2lucywgb3B0aW9ucykuY2F0Y2goZSA9PiB7XG4gICAgICAgICAgY3R4LmxvZy5lcnJvcihlKVxuICAgICAgICB9KVxuICAgICAgfSxcbiAgICAgIHsgcHJveHk6IHRydWUsIHJlZ2lzdHJ5OiB0cnVlIH1cbiAgICApXG4gICAgY3JlYXRlQ29tbWFuZChjbWQsICd1bmluc3RhbGwgPHBsdWdpbnMuLi4+JywgJ3VuaW5zdGFsbCBwaWNnbyBwbHVnaW4nLCAncm0nLCAocGx1Z2luczogc3RyaW5nW10pID0+IHtcbiAgICAgIGN0eC5wbHVnaW5IYW5kbGVyLnVuaW5zdGFsbChwbHVnaW5zKS5jYXRjaChlID0+IHtcbiAgICAgICAgY3R4LmxvZy5lcnJvcihlKVxuICAgICAgfSlcbiAgICB9KVxuICAgIGNyZWF0ZUNvbW1hbmQoXG4gICAgICBjbWQsXG4gICAgICAndXBkYXRlIDxwbHVnaW5zLi4uPicsXG4gICAgICAndXBkYXRlIHBpY2dvIHBsdWdpbicsXG4gICAgICAndXAnLFxuICAgICAgKHBsdWdpbnM6IHN0cmluZ1tdLCBwcm9ncmFtOiBhbnkpID0+IHtcbiAgICAgICAgY29uc3QgeyBwcm94eSwgcmVnaXN0cnkgfSA9IHByb2dyYW1cbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHsgcHJveHksIHJlZ2lzdHJ5IH1cbiAgICAgICAgY3R4LnBsdWdpbkhhbmRsZXIudXBkYXRlKHBsdWdpbnMsIG9wdGlvbnMpLmNhdGNoKChlOiBFcnJvcikgPT4ge1xuICAgICAgICAgIGN0eC5sb2cuZXJyb3IoZSlcbiAgICAgICAgfSlcbiAgICAgIH0sXG4gICAgICB7IHByb3h5OiB0cnVlLCByZWdpc3RyeTogdHJ1ZSB9XG4gICAgKVxuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IHBsdWdpbkhhbmRsZXJcbiIsImltcG9ydCB7IElQaWNHbywgSVBsdWdpbiB9IGZyb20gJy4uLy4uL3R5cGVzJ1xuXG5jb25zdCBjb25maWc6IElQbHVnaW4gPSB7XG4gIGhhbmRsZTogKGN0eDogSVBpY0dvKSA9PiB7XG4gICAgY29uc3QgY21kID0gY3R4LmNtZFxuICAgIGNtZC5wcm9ncmFtLm9wdGlvbignLWMsIC0tY29uZmlnIDxwYXRoPicsICdzZXQgY29uZmlnIHBhdGgnKVxuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNvbmZpZ1xuIiwiaW1wb3J0IGZzLCB7IHJlYWRGaWxlLCByZWFkSlNPTlN5bmMgfSBmcm9tICdmcy1leHRyYSdcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnXG5pbXBvcnQgeyBpbWFnZVNpemUgfSBmcm9tICdpbWFnZS1zaXplJ1xuaW1wb3J0IHsgVVJMIH0gZnJvbSAndXJsJ1xuaW1wb3J0IFRleHRUb1NWRyBmcm9tICd0ZXh0LXRvLXN2ZydcbmltcG9ydCBzaGFycCBmcm9tICdzaGFycCdcbmltcG9ydCBjcnlwdG8gZnJvbSAnY3J5cHRvJ1xuaW1wb3J0IHsgdjQgYXMgdXVpZHY0IH0gZnJvbSAndXVpZCdcblxuaW1wb3J0IHtcbiAgSUltZ1NpemUsXG4gIElQYXRoVHJhbnNmb3JtZWRJbWdJbmZvLFxuICBJUGx1Z2luTmFtZVR5cGUsXG4gIElMb2dnZXIsXG4gIElQaWNHbyxcbiAgSUJ1aWxkSW5Db21wcmVzc09wdGlvbnMsXG4gIElCdWlsZEluV2F0ZXJNYXJrT3B0aW9uc1xufSBmcm9tICcuLi90eXBlcydcblxuZXhwb3J0IGZ1bmN0aW9uIHJhbmRvbVN0cmluZ0dlbmVyYXRvcihsZW5ndGg6IG51bWJlcik6IHN0cmluZyB7XG4gIGNvbnN0IGNoYXJzID0gJ0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5J1xuICByZXR1cm4gQXJyYXkuZnJvbSh7IGxlbmd0aCB9KVxuICAgIC5tYXAoKCkgPT4gY2hhcnMuY2hhckF0KE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIGNoYXJzLmxlbmd0aCkpKVxuICAgIC5qb2luKCcnKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVuYW1lRmlsZU5hbWVXaXRoVGltZXN0YW1wKG9sZE5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBgJHtNYXRoLmZsb29yKERhdGUubm93KCkgLyAxMDAwKX0ke3JhbmRvbVN0cmluZ0dlbmVyYXRvcig1KX0ke3BhdGguZXh0bmFtZShvbGROYW1lKX1gXG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZW5hbWVGaWxlTmFtZVdpdGhSYW5kb21TdHJpbmcob2xkTmFtZTogc3RyaW5nLCBsZW5ndGg6IG51bWJlciA9IDUpOiBzdHJpbmcge1xuICByZXR1cm4gYCR7cmFuZG9tU3RyaW5nR2VuZXJhdG9yKGxlbmd0aCl9JHtwYXRoLmV4dG5hbWUob2xkTmFtZSl9YFxufVxuXG5mdW5jdGlvbiBmb3JtYXRIZWxwZXIobnVtOiBudW1iZXIpOiBzdHJpbmcge1xuICByZXR1cm4gbnVtLnRvU3RyaW5nKCkubGVuZ3RoID09PSAxID8gYDAke251bX1gIDogbnVtLnRvU3RyaW5nKClcbn1cblxuZnVuY3Rpb24gZ2V0TWQ1KGlucHV0OiBjcnlwdG8uQmluYXJ5TGlrZSk6IHN0cmluZyB7XG4gIHJldHVybiBjcnlwdG8uY3JlYXRlSGFzaCgnbWQ1JykudXBkYXRlKGlucHV0KS5kaWdlc3QoJ2hleCcpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZW5hbWVGaWxlTmFtZVdpdGhDdXN0b21TdHJpbmcoXG4gIG9sZE5hbWU6IHN0cmluZyxcbiAgY3VzdG9tRm9ybWF0OiBzdHJpbmcsXG4gIGFmZml4RmlsZU5hbWU/OiBzdHJpbmcsXG4gIGZpbGVCdWZmZXI/OiBjcnlwdG8uQmluYXJ5TGlrZVxuKTogc3RyaW5nIHtcbiAgY29uc3Qgbm93ID0gbmV3IERhdGUoKVxuICBjb25zdCB5ZWFyID0gbm93LmdldEZ1bGxZZWFyKCkudG9TdHJpbmcoKVxuICBjb25zdCBmaWxlYmFzZW5hbWUgPSBwYXRoLmJhc2VuYW1lKG9sZE5hbWUsIHBhdGguZXh0bmFtZShvbGROYW1lKSlcbiAgY29uc3QgY29udmVyc2lvbk1hcDogUmVjb3JkPHN0cmluZywgKCkgPT4gc3RyaW5nPiA9IHtcbiAgICAne1l9JzogKCkgPT4geWVhcixcbiAgICAne3l9JzogKCkgPT4geWVhci5zbGljZSgyKSxcbiAgICAne219JzogKCkgPT4gZm9ybWF0SGVscGVyKG5vdy5nZXRNb250aCgpICsgMSksXG4gICAgJ3tkfSc6ICgpID0+IGZvcm1hdEhlbHBlcihub3cuZ2V0RGF0ZSgpKSxcbiAgICAne2h9JzogKCkgPT4gZm9ybWF0SGVscGVyKG5vdy5nZXRIb3VycygpKSxcbiAgICAne2l9JzogKCkgPT4gZm9ybWF0SGVscGVyKG5vdy5nZXRNaW51dGVzKCkpLFxuICAgICd7c30nOiAoKSA9PiBmb3JtYXRIZWxwZXIobm93LmdldFNlY29uZHMoKSksXG4gICAgJ3ttc30nOiAoKSA9PiBub3cuZ2V0TWlsbGlzZWNvbmRzKCkudG9TdHJpbmcoKS5wYWRTdGFydCgzLCAnMCcpLFxuICAgICd7bWQ1fSc6ICgpID0+IGdldE1kNShmaWxlQnVmZmVyIHx8IGZpbGViYXNlbmFtZSksXG4gICAgJ3ttZDUtMTZ9JzogKCkgPT4gZ2V0TWQ1KGZpbGVCdWZmZXIgfHwgZmlsZWJhc2VuYW1lKS5zbGljZSgwLCAxNiksXG4gICAgJ3tmaWxlbmFtZX0nOiAoKSA9PiAoYWZmaXhGaWxlTmFtZSA/IHBhdGguYmFzZW5hbWUoYWZmaXhGaWxlTmFtZSwgcGF0aC5leHRuYW1lKGFmZml4RmlsZU5hbWUpKSA6IGZpbGViYXNlbmFtZSksXG4gICAgJ3t1dWlkfSc6ICgpID0+IHV1aWR2NCgpLnJlcGxhY2UoLy0vZywgJycpLFxuICAgICd7dGltZXN0YW1wfSc6ICgpID0+IG5vdy5nZXRUaW1lKCkudG9TdHJpbmcoKVxuICB9XG4gIGlmIChcbiAgICBjdXN0b21Gb3JtYXQgPT09IHVuZGVmaW5lZCB8fFxuICAgICghT2JqZWN0LmtleXMoY29udmVyc2lvbk1hcCkuc29tZShpdGVtID0+IGN1c3RvbUZvcm1hdC5pbmNsdWRlcyhpdGVtKSkgJiZcbiAgICAgICFjdXN0b21Gb3JtYXQuaW5jbHVkZXMoJ2xvY2FsRm9sZGVyOicpICYmXG4gICAgICAhY3VzdG9tRm9ybWF0LmluY2x1ZGVzKCdzdHItJykpXG4gICkge1xuICAgIHJldHVybiBvbGROYW1lXG4gIH1cbiAgY29uc3QgZXh0ID0gcGF0aC5leHRuYW1lKG9sZE5hbWUpXG4gIGxldCBuZXdOYW1lID1cbiAgICBPYmplY3Qua2V5cyhjb252ZXJzaW9uTWFwKS5yZWR1Y2UoKGFjYywgY3VyKSA9PiB7XG4gICAgICByZXR1cm4gYWNjLnJlcGxhY2UobmV3IFJlZ0V4cChjdXIsICdnJyksIGNvbnZlcnNpb25NYXBbY3VyXSgpKVxuICAgIH0sIGN1c3RvbUZvcm1hdCkgKyBleHRcbiAgY29uc3Qgc3RyUmVnZXggPSAve3N0ci0oXFxkKyl9L2dpXG4gIG5ld05hbWUgPSBuZXdOYW1lLnJlcGxhY2Uoc3RyUmVnZXgsIChfLCBncm91cDEpID0+IHtcbiAgICBjb25zdCBsZW5ndGggPSBwYXJzZUludChncm91cDEsIDEwKVxuICAgIHJldHVybiByYW5kb21TdHJpbmdHZW5lcmF0b3IobGVuZ3RoKVxuICB9KVxuICBuZXdOYW1lID0gbmV3TmFtZS5yZXBsYWNlKC97KGxvY2FsRm9sZGVyOj8oXFxkKyk/KX0vZ2ksIChfcmVzdWx0LCBrZXksIGNvdW50KSA9PiB7XG4gICAgY291bnQgPSBNYXRoLm1heCgxLCBjb3VudCB8fCAwKVxuICAgIGNvbnN0IHBhdGhzID0gcGF0aC5kaXJuYW1lKG9sZE5hbWUpLnNwbGl0KHBhdGguc2VwKVxuICAgIGtleSA9IHBhdGhzLnNsaWNlKDAgLSBjb3VudCkucmVkdWNlKChhLCBiKSA9PiBgJHthfS8ke2J9YClcbiAgICByZXR1cm4ga2V5LnJlcGxhY2UoLzovZywgJycpXG4gIH0pXG4gIHJldHVybiBuZXdOYW1lXG59XG5cbmV4cG9ydCBjb25zdCBpc1VybCA9ICh1cmw6IHN0cmluZyk6IGJvb2xlYW4gPT4gL15odHRwcz86XFwvXFwvLy50ZXN0KHVybClcblxuZXhwb3J0IGNvbnN0IGlzVXJsRW5jb2RlID0gKHVybDogc3RyaW5nKTogYm9vbGVhbiA9PiB7XG4gIHVybCA9IHVybCB8fCAnJ1xuICB0cnkge1xuICAgIC8vIHRoZSB3aG9sZSB1cmwgZW5jb2RlIG9yIGRlY29kZSBzaG9sZCBub3QgdXNlIGVuY29kZVVSSUNvbXBvbmVudCBvciBkZWNvZGVVUklDb21wb25lbnRcbiAgICByZXR1cm4gdXJsICE9PSBkZWNvZGVVUkkodXJsKVxuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cbn1cbmV4cG9ydCBjb25zdCBoYW5kbGVVcmxFbmNvZGUgPSAodXJsOiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xuICBpZiAoIWlzVXJsRW5jb2RlKHVybCkpIHtcbiAgICB1cmwgPSBlbmNvZGVVUkkodXJsKVxuICB9XG4gIHJldHVybiB1cmxcbn1cblxuZXhwb3J0IGNvbnN0IGdldEltYWdlU2l6ZSA9IChmaWxlOiBCdWZmZXIpOiBJSW1nU2l6ZSA9PiB7XG4gIHRyeSB7XG4gICAgY29uc3QgeyB3aWR0aCA9IDAsIGhlaWdodCA9IDAsIHR5cGUgfSA9IGltYWdlU2l6ZShmaWxlKVxuICAgIGNvbnN0IGV4dG5hbWUgPSB0eXBlID8gYC4ke3R5cGV9YCA6ICcucG5nJ1xuICAgIHJldHVybiB7XG4gICAgICByZWFsOiB0cnVlLFxuICAgICAgd2lkdGgsXG4gICAgICBoZWlnaHQsXG4gICAgICBleHRuYW1lXG4gICAgfVxuICB9IGNhdGNoIChlKSB7XG4gICAgLy8gZmFsbGJhY2sgdG8gMjAwICogMjAwXG4gICAgcmV0dXJuIHtcbiAgICAgIHJlYWw6IGZhbHNlLFxuICAgICAgd2lkdGg6IDIwMCxcbiAgICAgIGhlaWdodDogMjAwLFxuICAgICAgZXh0bmFtZTogJy5wbmcnXG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBjb25zdCBnZXRGU0ZpbGUgPSBhc3luYyAoZmlsZVBhdGg6IHN0cmluZyk6IFByb21pc2U8SVBhdGhUcmFuc2Zvcm1lZEltZ0luZm8+ID0+IHtcbiAgdHJ5IHtcbiAgICByZXR1cm4ge1xuICAgICAgZXh0bmFtZTogcGF0aC5leHRuYW1lKGZpbGVQYXRoKSxcbiAgICAgIGZpbGVOYW1lOiBwYXRoLmJhc2VuYW1lKGZpbGVQYXRoKSxcbiAgICAgIGJ1ZmZlcjogYXdhaXQgcmVhZEZpbGUoZmlsZVBhdGgpLFxuICAgICAgc3VjY2VzczogdHJ1ZVxuICAgIH1cbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHJlYXNvbjogYHJlYWQgZmlsZSAke2ZpbGVQYXRofSBlcnJvcmAsXG4gICAgICBzdWNjZXNzOiBmYWxzZVxuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgY29uc3QgZ2V0VVJMRmlsZSA9IGFzeW5jICh1cmw6IHN0cmluZywgY3R4OiBJUGljR28pOiBQcm9taXNlPElQYXRoVHJhbnNmb3JtZWRJbWdJbmZvPiA9PiB7XG4gIHVybCA9IGhhbmRsZVVybEVuY29kZSh1cmwpXG4gIGxldCB0aW1lb3V0SWQ6IE5vZGVKUy5UaW1lb3V0XG4gIGNvbnN0IHJlcXVlc3RGbiA9IG5ldyBQcm9taXNlPElQYXRoVHJhbnNmb3JtZWRJbWdJbmZvPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgOyhhc3luYyAoKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZXMgPSBhd2FpdCBjdHhcbiAgICAgICAgICAucmVxdWVzdCh7XG4gICAgICAgICAgICBtZXRob2Q6ICdnZXQnLFxuICAgICAgICAgICAgdXJsLFxuICAgICAgICAgICAgcmVzb2x2ZVdpdGhGdWxsUmVzcG9uc2U6IHRydWUsXG4gICAgICAgICAgICByZXNwb25zZVR5cGU6ICdhcnJheWJ1ZmZlcidcbiAgICAgICAgICB9KVxuICAgICAgICAgIC50aGVuKHJlc3AgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHJlc3AuZGF0YSBhcyBCdWZmZXJcbiAgICAgICAgICB9KVxuICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dElkKVxuICAgICAgICBjb25zdCB1cmxQYXRoID0gbmV3IFVSTCh1cmwpLnBhdGhuYW1lXG4gICAgICAgIGxldCBleHRuYW1lID0gJydcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCB1cmxQYXJhbXMgPSBuZXcgVVJMKHVybCkuc2VhcmNoUGFyYW1zXG4gICAgICAgICAgZXh0bmFtZSA9IHVybFBhcmFtcy5nZXQoJ3d4X2ZtdCcpIHx8IHBhdGguZXh0bmFtZSh1cmxQYXRoKSB8fCAnJ1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIGV4dG5hbWUgPSBwYXRoLmV4dG5hbWUodXJsUGF0aCkgfHwgJydcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWV4dG5hbWUuc3RhcnRzV2l0aCgnLicpICYmIGV4dG5hbWUpIHtcbiAgICAgICAgICBleHRuYW1lID0gYC4ke2V4dG5hbWV9YFxuICAgICAgICB9XG4gICAgICAgIHJlc29sdmUoe1xuICAgICAgICAgIGJ1ZmZlcjogcmVzLFxuICAgICAgICAgIGZpbGVOYW1lOiBwYXRoLmJhc2VuYW1lKHVybFBhdGgpLFxuICAgICAgICAgIGV4dG5hbWUsXG4gICAgICAgICAgc3VjY2VzczogdHJ1ZVxuICAgICAgICB9KVxuICAgICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dElkKVxuICAgICAgICByZXNvbHZlKHtcbiAgICAgICAgICBzdWNjZXNzOiBmYWxzZSxcbiAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L3Jlc3RyaWN0LXRlbXBsYXRlLWV4cHJlc3Npb25zXG4gICAgICAgICAgcmVhc29uOiBgcmVxdWVzdCAke3VybH0gZXJyb3IsICR7ZXJyb3I/Lm1lc3NhZ2UgPz8gJyd9YFxuICAgICAgICB9KVxuICAgICAgfVxuICAgIH0pKCkuY2F0Y2gocmVqZWN0KVxuICB9KVxuICBjb25zdCB0aW1lb3V0UHJvbWlzZSA9IG5ldyBQcm9taXNlPElQYXRoVHJhbnNmb3JtZWRJbWdJbmZvPigocmVzb2x2ZSk6IHZvaWQgPT4ge1xuICAgIHRpbWVvdXRJZCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgcmVzb2x2ZSh7XG4gICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxuICAgICAgICByZWFzb246IGByZXF1ZXN0ICR7dXJsfSB0aW1lb3V0YFxuICAgICAgfSlcbiAgICB9LCAzMDAwMClcbiAgfSlcbiAgcmV0dXJuIFByb21pc2UucmFjZShbcmVxdWVzdEZuLCB0aW1lb3V0UHJvbWlzZV0pXG59XG5cbi8qKlxuICogZGV0ZWN0IHRoZSBpbnB1dCBzdHJpbmcncyB0eXBlXG4gKiBmb3IgZXhhbXBsZVxuICogMS4gQHh4eC9waWNnby1wbHVnaW4teHh4IC0+IHNjb3BlXG4gKiAyLiBwaWNnby1wbHVnaW4teHh4IC0+IG5vcm1hbFxuICogMy4geHh4IC0+IHNpbXBsZVxuICogNC4gbm90IGV4aXN0cyBvciBpcyBhIHBhdGggLT4gdW5rbm93blxuICogQHBhcmFtIG5hbWVcbiAqL1xuZXhwb3J0IGNvbnN0IGdldFBsdWdpbk5hbWVUeXBlID0gKG5hbWU6IHN0cmluZyk6IElQbHVnaW5OYW1lVHlwZSA9PiB7XG4gIGlmICgvXkBbXi9dK1xcL3BpY2dvLXBsdWdpbi0vLnRlc3QobmFtZSkpIHtcbiAgICByZXR1cm4gJ3Njb3BlJ1xuICB9IGVsc2UgaWYgKG5hbWUuc3RhcnRzV2l0aCgncGljZ28tcGx1Z2luLScpKSB7XG4gICAgcmV0dXJuICdub3JtYWwnXG4gIH0gZWxzZSBpZiAoaXNTaW1wbGVOYW1lKG5hbWUpKSB7XG4gICAgcmV0dXJuICdzaW1wbGUnXG4gIH1cbiAgcmV0dXJuICd1bmtub3duJ1xufVxuXG4vKipcbiAqIGRldGVjdCB0aGUgaW5wdXQgc3RyaW5nIGlzIGEgc2ltcGxlIHBsdWdpbiBuYW1lIG9yIG5vdFxuICogZm9yIGV4YW1wbGVcbiAqIDEuIHh4eCAtPiB0cnVlXG4gKiAyLiAvVXNyL3h4L3h4eHgvcGljZ28tcGx1Z2luLXh4eCAtPiBmYWxzZVxuICogQHBhcmFtIG5hbWUgcGx1Z2luTmFtZU9yUGF0aFxuICovXG5leHBvcnQgY29uc3QgaXNTaW1wbGVOYW1lID0gKG5hbWVPclBhdGg6IHN0cmluZyk6IGJvb2xlYW4gPT4ge1xuICBpZiAocGF0aC5pc0Fic29sdXRlKG5hbWVPclBhdGgpKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cbiAgY29uc3QgcGx1Z2luUGF0aCA9IHBhdGguam9pbihwcm9jZXNzLmN3ZCgpLCBuYW1lT3JQYXRoKVxuICBpZiAoZnMuZXhpc3RzU3luYyhwbHVnaW5QYXRoKSkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG4gIGlmIChuYW1lT3JQYXRoLmluY2x1ZGVzKCcvJykgfHwgbmFtZU9yUGF0aC5pbmNsdWRlcygnXFxcXCcpKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cbiAgcmV0dXJuIHRydWVcbn1cblxuLyoqXG4gKiBzdHJlYW1saW5lIHRoZSBmdWxsIHBsdWdpbiBuYW1lIHRvIGEgc2ltcGxlIG9uZVxuICogZm9yIGV4YW1wbGU6XG4gKiAxLiBwaWNnby1wbHVnaW4teHh4IC0+IHh4eFxuICogMi4gQHh4eC9waWNnby1wbHVnaW4teXl5IC0+IHl5eVxuICogQHBhcmFtIG5hbWUgcGx1Z2luRnVsbE5hbWVcbiAqL1xuZXhwb3J0IGNvbnN0IGhhbmRsZVN0cmVhbWxpbmVQbHVnaW5OYW1lID0gKG5hbWU6IHN0cmluZyk6IHN0cmluZyA9PiB7XG4gIGlmICgvXkBbXi9dK1xcL3BpY2dvLXBsdWdpbi0vLnRlc3QobmFtZSkpIHtcbiAgICByZXR1cm4gbmFtZS5yZXBsYWNlKC9eQFteL10rXFwvcGljZ28tcGx1Z2luLS8sICcnKVxuICB9IGVsc2Uge1xuICAgIHJldHVybiBuYW1lLnJlcGxhY2UoL3BpY2dvLXBsdWdpbi0vLCAnJylcbiAgfVxufVxuXG4vKipcbiAqIGNvbXBsZXRlIHBsdWdpbiBuYW1lIHRvIGZ1bGwgbmFtZVxuICogZm9yIGV4YW1wbGU6XG4gKiAxLiB4eHggLT4gcGljZ28tcGx1Z2luLXh4eFxuICogMi4gcGljZ28tcGx1Z2luLXh4eCAtPiBwaWNnby1wbHVnaW4teHh4XG4gKiBAcGFyYW0gbmFtZSBwbHVnaW5TaW1wbGVOYW1lXG4gKiBAcGFyYW0gc2NvcGUgcGx1Z2luU2NvcGVcbiAqL1xuZXhwb3J0IGNvbnN0IGhhbmRsZUNvbXBsZXRlUGx1Z2luTmFtZSA9IChuYW1lOiBzdHJpbmcsIHNjb3BlID0gJycpOiBzdHJpbmcgPT5cbiAgc2NvcGUgPyBgQCR7c2NvcGV9L3BpY2dvLXBsdWdpbi0ke25hbWV9YCA6IGBwaWNnby1wbHVnaW4tJHtuYW1lfWBcblxuLyoqXG4gKiBoYW5kbGUgaW5zdGFsbC91bmluc3RhbGwvdXBkYXRlIHBsdWdpbiBuYW1lIG9yIHBhdGhcbiAqIGZvciBleGFtcGxlXG4gKiAxLiBwaWNnby1wbHVnaW4teHh4IC0+IHBpY2dvLXBsdWdpbi14eHhcbiAqIDIuIEB4eHgvcGljZ28tcGx1Z2luLXh4eCAtPiBAeHh4L3BpY2dvLXBsdWdpbi14eHhcbiAqIDMuIHh4eCAtPiBwaWNnby1wbHVnaW4teHh4XG4gKiA0LiAuL3h4eHgvcGljZ28tcGx1Z2luLXh4eCAtPiAvYWJzb2x1dGVQYXRoLy4uLi94eHh4L3BpY2dvLXBsdWdpbi14eHhcbiAqIDUuIC9hYnNvbHV0ZVBhdGgvLi4uL3BpY2dvLXBsdWdpbi14eHggLT4gL2Fic29sdXRlUGF0aC8uLi4vcGljZ28tcGx1Z2luLXh4eFxuICogQHBhcmFtIG5hbWVPclBhdGggcGx1Z2luTmFtZSBvciBwbHVnaW5QYXRoXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRQcm9jZXNzUGx1Z2luTmFtZSA9IChuYW1lT3JQYXRoOiBzdHJpbmcsIGxvZ2dlcjogSUxvZ2dlciB8IENvbnNvbGUgPSBjb25zb2xlKTogc3RyaW5nID0+IHtcbiAgY29uc3QgcGx1Z2luTmFtZVR5cGUgPSBnZXRQbHVnaW5OYW1lVHlwZShuYW1lT3JQYXRoKVxuICBzd2l0Y2ggKHBsdWdpbk5hbWVUeXBlKSB7XG4gICAgY2FzZSAnbm9ybWFsJzpcbiAgICBjYXNlICdzY29wZSc6XG4gICAgICByZXR1cm4gbmFtZU9yUGF0aFxuICAgIGNhc2UgJ3NpbXBsZSc6XG4gICAgICByZXR1cm4gaGFuZGxlQ29tcGxldGVQbHVnaW5OYW1lKG5hbWVPclBhdGgpXG4gICAgZGVmYXVsdDoge1xuICAgICAgLy8gbm93LCB0aGUgcGx1Z2luTmFtZVR5cGUgaXMgdW5rbm93IGhlcmVcbiAgICAgIC8vIDEuIGNoZWNrIGlmIGlzIGFuIGFic29sdXRlIHBhdGhcbiAgICAgIGxldCBwbHVnaW5QYXRoID0gbmFtZU9yUGF0aFxuICAgICAgaWYgKHBhdGguaXNBYnNvbHV0ZShuYW1lT3JQYXRoKSAmJiBmcy5leGlzdHNTeW5jKG5hbWVPclBhdGgpKSB7XG4gICAgICAgIHJldHVybiBoYW5kbGVVbml4U3R5bGVQYXRoKHBsdWdpblBhdGgpXG4gICAgICB9XG4gICAgICAvLyAyLiBjaGVjayBpZiBpcyBhIHJlbGF0aXZlIHBhdGhcbiAgICAgIHBsdWdpblBhdGggPSBwYXRoLmpvaW4ocHJvY2Vzcy5jd2QoKSwgbmFtZU9yUGF0aClcbiAgICAgIGlmIChmcy5leGlzdHNTeW5jKHBsdWdpblBhdGgpKSB7XG4gICAgICAgIHJldHVybiBoYW5kbGVVbml4U3R5bGVQYXRoKHBsdWdpblBhdGgpXG4gICAgICB9XG4gICAgICAvLyAzLiBpbnZhbGlkIG5hbWVPclBhdGhcbiAgICAgIGxvZ2dlci53YXJuKGBDYW4ndCBmaW5kIHBsdWdpbiAke25hbWVPclBhdGh9YClcbiAgICAgIHJldHVybiAnJ1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIGdldCB0aGUgbm9ybWFsIHBsdWdpbiBuYW1lXG4gKiBmb3IgZXhhbXBsZTpcbiAqIDEuIHBpY2dvLXBsdWdpbi14eHggLT4gcGljZ28tcGx1Z2luLXh4eFxuICogMi4gQHh4eC9waWNnby1wbHVnaW4teHh4IC0+IEB4eHgvcGljZ28tcGx1Z2luLXh4eFxuICogMy4gLi94eHh4L3BpY2dvLXBsdWdpbi14eHggLT4gcGljZ28tcGx1Z2luLXh4eFxuICogNC4gL2Fic29sdXRlUGF0aC8uLi4vcGljZ28tcGx1Z2luLXh4eCAtPiBwaWNnby1wbHVnaW4teHh4XG4gKiA1LiBhbiBleGNlcHRpb246IFtwYWNrYWdlLmpzb24ncyBuYW1lXSAhPT0gW2ZvbGRlciBuYW1lXVxuICogdGhlbiB1c2UgW3BhY2thZ2UuanNvbidzIG5hbWVdLCB1c3VhbGx5IG1hdGNoIHRoZSBzY29wZSBwYWNrYWdlLlxuICogNi4gaWYgcGx1Z2luIG5hbWUgaGFzIHZlcnNpb246IHBpY2dvLXBsdWdpbi14eHhAeC54LnggdGhlbiByZW1vdmUgdGhlIHZlcnNpb25cbiAqIEBwYXJhbSBuYW1lT3JQYXRoXG4gKi9cbmV4cG9ydCBjb25zdCBnZXROb3JtYWxQbHVnaW5OYW1lID0gKG5hbWVPclBhdGg6IHN0cmluZywgbG9nZ2VyOiBJTG9nZ2VyIHwgQ29uc29sZSA9IGNvbnNvbGUpOiBzdHJpbmcgPT4ge1xuICBjb25zdCBwbHVnaW5OYW1lVHlwZSA9IGdldFBsdWdpbk5hbWVUeXBlKG5hbWVPclBhdGgpXG4gIHN3aXRjaCAocGx1Z2luTmFtZVR5cGUpIHtcbiAgICBjYXNlICdub3JtYWwnOlxuICAgICAgcmV0dXJuIHJlbW92ZVBsdWdpblZlcnNpb24obmFtZU9yUGF0aClcbiAgICBjYXNlICdzY29wZSc6XG4gICAgICByZXR1cm4gcmVtb3ZlUGx1Z2luVmVyc2lvbihuYW1lT3JQYXRoLCB0cnVlKVxuICAgIGNhc2UgJ3NpbXBsZSc6XG4gICAgICByZXR1cm4gcmVtb3ZlUGx1Z2luVmVyc2lvbihoYW5kbGVDb21wbGV0ZVBsdWdpbk5hbWUobmFtZU9yUGF0aCkpXG4gICAgZGVmYXVsdDoge1xuICAgICAgLy8gbm93LCB0aGUgbmFtZU9yUGF0aCBtdXN0IGJlIHBhdGhcbiAgICAgIC8vIHRoZSBuYW1lT3JQYXRoIGhlcmUgd2lsbCBiZSBlbnN1cmVkIHdpdGggdW5peCBzdHlsZVxuICAgICAgLy8gd2UgbmVlZCB0byBmaW5kIHRoZSBwYWNrYWdlLmpzb24ncyBuYW1lIGNhdXNlIG5wbSB1c2luZyB0aGUgbmFtZSBpbiBwYWNrYWdlLmpzb24ncyBuYW1lIGZpbGVkXG4gICAgICBpZiAoIWZzLmV4aXN0c1N5bmMobmFtZU9yUGF0aCkpIHtcbiAgICAgICAgbG9nZ2VyLndhcm4oYENhbid0IGZpbmQgcGx1Z2luOiAke25hbWVPclBhdGh9YClcbiAgICAgICAgcmV0dXJuICcnXG4gICAgICB9XG4gICAgICBjb25zdCBwYWNrYWdlSlNPTlBhdGggPSBwYXRoLnBvc2l4LmpvaW4obmFtZU9yUGF0aCwgJ3BhY2thZ2UuanNvbicpXG4gICAgICBpZiAoIWZzLmV4aXN0c1N5bmMocGFja2FnZUpTT05QYXRoKSkge1xuICAgICAgICBsb2dnZXIud2FybihgQ2FuJ3QgZmluZCBwbHVnaW46ICR7bmFtZU9yUGF0aH1gKVxuICAgICAgICByZXR1cm4gJydcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHBrZyA9IHJlYWRKU09OU3luYyhwYWNrYWdlSlNPTlBhdGgpIHx8IHt9XG4gICAgICAgIGlmICghcGtnLm5hbWU/LmluY2x1ZGVzKCdwaWNnby1wbHVnaW4tJykpIHtcbiAgICAgICAgICBsb2dnZXIud2FybihcbiAgICAgICAgICAgIGBUaGUgcGx1Z2luIHBhY2thZ2UuanNvbidzIG5hbWUgZmlsZWQgaXMgJHsocGtnLm5hbWUgYXMgc3RyaW5nKSB8fCAnZW1wdHknfSwgbmVlZCB0byBpbmNsdWRlIHRoZSBwcmVmaXg6IHBpY2dvLXBsdWdpbi1gXG4gICAgICAgICAgKVxuICAgICAgICAgIHJldHVybiAnJ1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwa2cubmFtZVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIGhhbmRsZSB0cmFuc2Zvcm0gdGhlIHBhdGggdG8gdW5peCBzdHlsZVxuICogZm9yIGV4YW1wbGVcbiAqIDEuIEM6XFxcXHh4eFxcXFx4eHggLT4gQzoveHh4L3h4eFxuICogMi4gL3h4eC94eHggLT4gL3h4eC94eHhcbiAqIEBwYXJhbSBwYXRoXG4gKi9cbmV4cG9ydCBjb25zdCBoYW5kbGVVbml4U3R5bGVQYXRoID0gKHBhdGhTdHI6IHN0cmluZyk6IHN0cmluZyA9PiB7XG4gIGNvbnN0IHBhdGhBcnIgPSBwYXRoU3RyLnNwbGl0KHBhdGguc2VwKVxuICByZXR1cm4gcGF0aEFyci5qb2luKCcvJylcbn1cblxuLyoqXG4gKiByZW1vdmUgcGx1Z2luIHZlcnNpb24gd2hlbiByZWdpc3RlciBwbHVnaW4gbmFtZVxuICogMS4gcGljZ28tcGx1Z2luLXh4eEAxLjAuMCAtPiBwaWNnby1wbHVnaW4teHh4XG4gKiAyLiBAeHh4L3BpY2dvLXBsdWdpbi14eHhAMS4wLjAgLT4gQHh4eC9waWNnby1wbHVnaW4teHh4XG4gKiBAcGFyYW0gbmFtZU9yUGF0aFxuICogQHBhcmFtIHNjb3BlXG4gKi9cbmV4cG9ydCBjb25zdCByZW1vdmVQbHVnaW5WZXJzaW9uID0gKG5hbWVPclBhdGg6IHN0cmluZywgc2NvcGU6IGJvb2xlYW4gPSBmYWxzZSk6IHN0cmluZyA9PiB7XG4gIGlmICghbmFtZU9yUGF0aC5pbmNsdWRlcygnQCcpKSB7XG4gICAgcmV0dXJuIG5hbWVPclBhdGhcbiAgfSBlbHNlIHtcbiAgICBsZXQgcmVnID0gLyguK1xcLyk/KHBpY2dvLXBsdWdpbi1cXHcrKShALispKi9cbiAgICAvLyBpZiBpcyBhIHNjb3BlIHBrZ1xuICAgIGlmIChzY29wZSkge1xuICAgICAgcmVnID0gLyguK1xcLyk/KF5AW14vXStcXC9waWNnby1wbHVnaW4tXFx3KykoQC4rKSovXG4gICAgfVxuICAgIGNvbnN0IG1hdGNoQXJyID0gbmFtZU9yUGF0aC5tYXRjaChyZWcpXG4gICAgaWYgKCFtYXRjaEFycikge1xuICAgICAgY29uc29sZS53YXJuKCdjYW4gbm90IHJlbW92ZSBwbHVnaW4gdmVyc2lvbicpXG4gICAgICByZXR1cm4gbmFtZU9yUGF0aFxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbWF0Y2hBcnJbMl1cbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiB0aGUgY29uZmlnIGJsYWNrIGl0ZW0gbGlzdCB3aGljaCB3b24ndCBiZSBzZXR0ZWRcbiAqIG9ubHkgY2FuIGJlIGdvdFxuICovXG5leHBvcnQgY29uc3QgY29uZmlnQmxhY2tMaXN0ID0gW11cblxuLyoqXG4gKiBjaGVjayBzb21lIGNvbmZpZyBrZXkgaXMgaW4gYmxhY2tMaXN0XG4gKiBAcGFyYW0ga2V5XG4gKi9cbmV4cG9ydCBjb25zdCBpc0NvbmZpZ0tleUluQmxhY2tMaXN0ID0gKGtleTogc3RyaW5nKTogYm9vbGVhbiA9PiB7XG4gIHJldHVybiBjb25maWdCbGFja0xpc3Quc29tZShibGFja0l0ZW0gPT4ga2V5LnN0YXJ0c1dpdGgoYmxhY2tJdGVtKSlcbn1cblxuLyoqXG4gKiBjaGVjayB0aGUgaW5wdXQgY29uZmlnIGlzIHZhbGlkXG4gKiBjb25maWcgbXVzdCBiZSBvYmplY3Qgc3VjaCBhcyB7IHh4eDogJ3h4eCcgfVxuICogJiYgY2FuJ3QgYmUgYXJyYXlcbiAqIEBwYXJhbSBjb25maWdcbiAqIEByZXR1cm5zXG4gKi9cbmV4cG9ydCBjb25zdCBpc0lucHV0Q29uZmlnVmFsaWQgPSAoY29uZmlnOiBhbnkpOiBib29sZWFuID0+IHtcbiAgaWYgKHR5cGVvZiBjb25maWcgPT09ICdvYmplY3QnICYmICFBcnJheS5pc0FycmF5KGNvbmZpZykgJiYgT2JqZWN0LmtleXMoY29uZmlnKS5sZW5ndGggPiAwKSB7XG4gICAgcmV0dXJuIHRydWVcbiAgfVxuICByZXR1cm4gZmFsc2Vcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNhZmVQYXJzZTxUPihzdHI6IHN0cmluZyk6IFQgfCBzdHJpbmcge1xuICB0cnkge1xuICAgIHJldHVybiBKU09OLnBhcnNlKHN0cilcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gc3RyXG4gIH1cbn1cblxuZXhwb3J0IGNvbnN0IGZvcmNlTnVtYmVyID0gKG51bTogc3RyaW5nIHwgbnVtYmVyID0gMCk6IG51bWJlciA9PiB7XG4gIHJldHVybiBpc05hTihOdW1iZXIobnVtKSkgPyAwIDogTnVtYmVyKG51bSlcbn1cblxuZXhwb3J0IGNvbnN0IGlzRGV2ID0gKCk6IGJvb2xlYW4gPT4gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICdkZXZlbG9wbWVudCdcblxuYXN5bmMgZnVuY3Rpb24gdGV4dDJTVkcoXG4gIGRlZmF1bHRXYXRlcm1hcmtGb250UGF0aDogc3RyaW5nLFxuICB0ZXh0Pzogc3RyaW5nLFxuICBjb2xvcj86IHN0cmluZyxcbiAgZm9udEZhbWlseT86IHN0cmluZ1xuKTogUHJvbWlzZTxCdWZmZXI+IHtcbiAgdGV4dCA9ICF0ZXh0ID8gJ+a1i+ivlScgOiB0ZXh0XG4gIGZvbnRGYW1pbHkgPSAhZm9udEZhbWlseSA/IGRlZmF1bHRXYXRlcm1hcmtGb250UGF0aCA6IGZvbnRGYW1pbHlcbiAgY29sb3IgPSAhY29sb3IgPyAncmdiYSgyMDQsIDIwNCwgMjA0LCAwLjQ1KScgOiBjb2xvclxuICBjb25zdCB0ZXh0MlNWRyA9IFRleHRUb1NWRy5sb2FkU3luYyhmb250RmFtaWx5KVxuICBjb25zdCBvcHRpb25zOiBUZXh0VG9TVkcuR2VuZXJhdGlvbk9wdGlvbnMgPSB7XG4gICAgYW5jaG9yOiAndG9wJyxcbiAgICBhdHRyaWJ1dGVzOiB7XG4gICAgICBmaWxsOiBjb2xvclxuICAgIH1cbiAgfVxuICBjb25zdCB0ZXh0U1ZHID0gdGV4dDJTVkcuZ2V0U1ZHKHRleHQsIG9wdGlvbnMpXG4gIHJldHVybiBCdWZmZXIuZnJvbSh0ZXh0U1ZHKVxufVxuXG5jb25zdCBkZWZhdWx0V2F0ZXJtYXJrSW1hZ2VQYXRoID0gcGF0aC5qb2luKF9fZGlybmFtZSwgJ2Fzc2V0cycsICdwaWNsaXN0LnBuZycpXG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBBZGRXYXRlcm1hcmsoXG4gIGltZzogQnVmZmVyLFxuICB3YXRlcm1hcmtUeXBlOiAndGV4dCcgfCAnaW1hZ2UnLFxuICBkZWZhdWx0V2F0ZXJtYXJrRm9udFBhdGg6IHN0cmluZyxcbiAgaXNGdWxsU2NyZWVuV2F0ZXJtYXJrPzogYm9vbGVhbixcbiAgd2F0ZXJtYXJrRGVncmVlPzogbnVtYmVyLFxuICB0ZXh0Pzogc3RyaW5nLFxuICB3YXRlcm1hcmtGb250UGF0aD86IHN0cmluZyxcbiAgd2F0ZXJtYXJrU2NhbGVSYXRpbz86IG51bWJlcixcbiAgd2F0ZXJtYXJrQ29sb3I/OiBzdHJpbmcsXG4gIHdhdGVybWFya0ltYWdlUGF0aD86IHN0cmluZyxcbiAgcG9zaXRpb24/OiBzaGFycC5HcmF2aXR5XG4pOiBQcm9taXNlPEJ1ZmZlcj4ge1xuICB3YXRlcm1hcmtTY2FsZVJhdGlvID1cbiAgICAhd2F0ZXJtYXJrU2NhbGVSYXRpbyB8fCB3YXRlcm1hcmtTY2FsZVJhdGlvIDwgMCB8fCB3YXRlcm1hcmtTY2FsZVJhdGlvID4gMSA/IDAuMTUgOiB3YXRlcm1hcmtTY2FsZVJhdGlvXG4gIGNvbnN0IGltYWdlID0gc2hhcnAoaW1nLCB7IGFuaW1hdGVkOiB0cnVlIH0pXG4gIGNvbnN0IHsgd2lkdGg6IGltZ1dpZHRoID0gMjAwIH0gPSBhd2FpdCBpbWFnZS5tZXRhZGF0YSgpXG4gIGNvbnN0IHdhdGVybWFyayA9IGF3YWl0IGNyZWF0ZVdhdGVybWFyayhcbiAgICB3YXRlcm1hcmtUeXBlLFxuICAgIGRlZmF1bHRXYXRlcm1hcmtGb250UGF0aCxcbiAgICB0ZXh0LFxuICAgIHdhdGVybWFya0ZvbnRQYXRoLFxuICAgIHdhdGVybWFya1NjYWxlUmF0aW8sXG4gICAgd2F0ZXJtYXJrQ29sb3IsXG4gICAgd2F0ZXJtYXJrSW1hZ2VQYXRoLFxuICAgIGltZ1dpZHRoLFxuICAgIHdhdGVybWFya0RlZ3JlZVxuICApXG4gIHJldHVybiBhd2FpdCBpbWFnZVxuICAgIC5jb21wb3NpdGUoW1xuICAgICAge1xuICAgICAgICBpbnB1dDogd2F0ZXJtYXJrLFxuICAgICAgICBncmF2aXR5OiBwb3NpdGlvbiB8fCAnc291dGhlYXN0JyxcbiAgICAgICAgdGlsZTogaXNGdWxsU2NyZWVuV2F0ZXJtYXJrXG4gICAgICB9XG4gICAgXSlcbiAgICAudG9CdWZmZXIoKVxufVxuXG5hc3luYyBmdW5jdGlvbiBjcmVhdGVXYXRlcm1hcmsoXG4gIHdhdGVybWFya1R5cGU6ICd0ZXh0JyB8ICdpbWFnZScsXG4gIGRlZmF1bHRXYXRlcm1hcmtGb250UGF0aDogc3RyaW5nLFxuICB0ZXh0Pzogc3RyaW5nLFxuICB3YXRlcm1hcmtGb250UGF0aD86IHN0cmluZyxcbiAgd2F0ZXJtYXJrU2NhbGVSYXRpbz86IG51bWJlcixcbiAgd2F0ZXJtYXJrQ29sb3I/OiBzdHJpbmcsXG4gIHdhdGVybWFya0ltYWdlUGF0aD86IHN0cmluZyxcbiAgaW1nV2lkdGg6IG51bWJlciA9IDIwMCxcbiAgd2F0ZXJtYXJrRGVncmVlOiBudW1iZXIgPSAwXG4pOiBQcm9taXNlPEJ1ZmZlcj4ge1xuICBsZXQgd2F0ZXJtYXJrOiBhbnlcbiAgaWYgKHdhdGVybWFya1R5cGUgPT09ICdpbWFnZScpIHtcbiAgICB3YXRlcm1hcmtJbWFnZVBhdGggPSB3YXRlcm1hcmtJbWFnZVBhdGggfHwgZGVmYXVsdFdhdGVybWFya0ltYWdlUGF0aFxuICAgIHdhdGVybWFyayA9IGF3YWl0IHNoYXJwKHdhdGVybWFya0ltYWdlUGF0aCkudG9CdWZmZXIoKVxuICB9IGVsc2Uge1xuICAgIHdhdGVybWFyayA9IGF3YWl0IHRleHQyU1ZHKFxuICAgICAgZGVmYXVsdFdhdGVybWFya0ZvbnRQYXRoLFxuICAgICAgdGV4dCxcbiAgICAgIHdhdGVybWFya0NvbG9yLFxuICAgICAgd2F0ZXJtYXJrRm9udFBhdGggfHwgZGVmYXVsdFdhdGVybWFya0ZvbnRQYXRoXG4gICAgKVxuICB9XG4gIGNvbnN0IHsgd2lkdGg6IHdhdGVybWFya1dpZHRoLCBoZWlnaHQ6IHdhdGVybWFya0hlaWdodCB9ID0gYXdhaXQgZ2V0U2l6ZSh3YXRlcm1hcmspXG4gIGNvbnN0IHdhdGVybWFya1Jlc2l6ZVdpZHRoID0gTWF0aC5mbG9vcihpbWdXaWR0aCAqIGZvcmNlTnVtYmVyKHdhdGVybWFya1NjYWxlUmF0aW8pKVxuICBjb25zdCB3YXRlcm1hcmtSZXNpemVIZWlnaHQgPSBNYXRoLmZsb29yKCh3YXRlcm1hcmtSZXNpemVXaWR0aCAqIHdhdGVybWFya0hlaWdodCkgLyB3YXRlcm1hcmtXaWR0aClcbiAgcmV0dXJuIGF3YWl0IHNoYXJwKHdhdGVybWFyaylcbiAgICAucmVzaXplKHdhdGVybWFya1Jlc2l6ZVdpZHRoLCB3YXRlcm1hcmtSZXNpemVIZWlnaHQsIHtcbiAgICAgIGZpdDogJ2luc2lkZSdcbiAgICB9KVxuICAgIC5yb3RhdGUod2F0ZXJtYXJrRGVncmVlLCB7XG4gICAgICBiYWNrZ3JvdW5kOiB7IHI6IDI1NSwgZzogMjU1LCBiOiAyNTUsIGFscGhhOiAwIH1cbiAgICB9KVxuICAgIC50b0J1ZmZlcigpXG59XG5cbmFzeW5jIGZ1bmN0aW9uIGdldFNpemUoaW1hZ2U6IEJ1ZmZlcik6IFByb21pc2U8eyB3aWR0aDogbnVtYmVyOyBoZWlnaHQ6IG51bWJlciB9PiB7XG4gIGNvbnN0IHsgd2lkdGgsIGhlaWdodCB9ID0gYXdhaXQgc2hhcnAoaW1hZ2UpLm1ldGFkYXRhKClcbiAgcmV0dXJuIHsgd2lkdGg6IHdpZHRoIHx8IDIwMCwgaGVpZ2h0OiBoZWlnaHQgfHwgMjAwIH1cbn1cblxuY29uc3QgdmFsaWRQYXJhbSA9ICguLi5wYXJhbXM6IGFueVtdKTogYm9vbGVhbiA9PiB7XG4gIHJldHVybiBwYXJhbXMuZXZlcnkocGFyYW0gPT4ge1xuICAgIGlmIChwYXJhbSA9PT0gdW5kZWZpbmVkIHx8IHBhcmFtID09PSBudWxsKSByZXR1cm4gZmFsc2VcbiAgICBpZiAodHlwZW9mIHBhcmFtID09PSAnc3RyaW5nJykgcmV0dXJuIHBhcmFtICE9PSAnJ1xuICAgIGlmICh0eXBlb2YgcGFyYW0gPT09ICdudW1iZXInKSByZXR1cm4gcGFyYW0gPiAwXG4gICAgaWYgKHR5cGVvZiBwYXJhbSA9PT0gJ29iamVjdCcpIHJldHVybiBPYmplY3Qua2V5cyhwYXJhbSkubGVuZ3RoID4gMFxuICAgIHJldHVybiB0cnVlXG4gIH0pXG59XG5cbi8qKlxuICog6L2s5o2i5ZCO5Y+v5Lul6L6T5Ye655qE5qC85byP5YiX6KGoXG4gKi9cbmNvbnN0IGF2YWlsYWJsZUNvbnZlcnRGb3JtYXRMaXN0ID0gW1xuICAnYXZpZicsXG4gICdkeicsXG4gICdmaXRzJyxcbiAgJ2dpZicsXG4gICdoZWlmJyxcbiAgJ2lucHV0JyxcbiAgJ2pwZWcnLFxuICAnanBnJyxcbiAgJ2pwMicsXG4gICdqeGwnLFxuICAnbWFnaWNrJyxcbiAgJ29wZW5zbGlkZScsXG4gICdwZGYnLFxuICAncG5nJyxcbiAgJ3BwbScsXG4gICdyYXcnLFxuICAnc3ZnJyxcbiAgJ3RpZmYnLFxuICAndGlmJyxcbiAgJ3YnLFxuICAnd2VicCdcbl1cblxuLyoqXG4gKiDlj6/ku6XlpITnkIbnmoTlm77niYfmoLzlvI/liJfooahcbiAqL1xuY29uc3QgaW1hZ2VGb3JtYXRMaXN0ID0gW1xuICAnanBnJyxcbiAgJ2pwZWcnLFxuICAncG5nJyxcbiAgJ3dlYnAnLFxuICAnYm1wJyxcbiAgJ3RpZmYnLFxuICAndGlmJyxcbiAgJ3N2ZycsXG4gICdpY28nLFxuICAnYXZpZicsXG4gICdoZWlmJyxcbiAgJ2hlaWMnLFxuICAnZ2lmJ1xuXVxuXG5jb25zdCB2YWxpZE91dHB1dEZvcm1hdCA9IChmb3JtYXQ6IHN0cmluZyk6IGJvb2xlYW4gPT4gYXZhaWxhYmxlQ29udmVydEZvcm1hdExpc3QuaW5jbHVkZXMoZm9ybWF0KVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gaW1hZ2VBZGRXYXRlck1hcmsoXG4gIGltZzogQnVmZmVyLFxuICBvcHRpb25zOiBJQnVpbGRJbldhdGVyTWFya09wdGlvbnMsXG4gIGRlZmF1bHRXYXRlcm1hcmtGb250UGF0aDogc3RyaW5nLFxuICBsb2dnZXI6IElMb2dnZXJcbik6IFByb21pc2U8QnVmZmVyPiB7XG4gIHRyeSB7XG4gICAgbGV0IGltYWdlOiBzaGFycC5TaGFycCA9IHNoYXJwKGltZywgeyBhbmltYXRlZDogdHJ1ZSB9KVxuICAgIGltYWdlID0gc2hhcnAoXG4gICAgICBhd2FpdCBBZGRXYXRlcm1hcmsoXG4gICAgICAgIGltZyxcbiAgICAgICAgb3B0aW9ucy53YXRlcm1hcmtUeXBlIHx8ICd0ZXh0JyxcbiAgICAgICAgZGVmYXVsdFdhdGVybWFya0ZvbnRQYXRoLFxuICAgICAgICBvcHRpb25zLmlzRnVsbFNjcmVlbldhdGVybWFyayxcbiAgICAgICAgZm9yY2VOdW1iZXIob3B0aW9ucy53YXRlcm1hcmtEZWdyZWUpLFxuICAgICAgICBvcHRpb25zLndhdGVybWFya1RleHQsXG4gICAgICAgIG9wdGlvbnMud2F0ZXJtYXJrRm9udFBhdGgsXG4gICAgICAgIGZvcmNlTnVtYmVyKG9wdGlvbnMud2F0ZXJtYXJrU2NhbGVSYXRpbyksXG4gICAgICAgIG9wdGlvbnMud2F0ZXJtYXJrQ29sb3IsXG4gICAgICAgIG9wdGlvbnMud2F0ZXJtYXJrSW1hZ2VQYXRoLFxuICAgICAgICBvcHRpb25zLndhdGVybWFya1Bvc2l0aW9uXG4gICAgICApLFxuICAgICAgeyBhbmltYXRlZDogdHJ1ZSB9XG4gICAgKVxuICAgIHJldHVybiBhd2FpdCBpbWFnZS50b0J1ZmZlcigpXG4gIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICBsb2dnZXIuZXJyb3IoYEltYWdlIGFkZCB3YXRlcm1hcmsgZXJyb3I6ICR7ZXJyb3J9YClcbiAgICByZXR1cm4gaW1nXG4gIH1cbn1cblxuZnVuY3Rpb24gZm9ybWF0T3B0aW9ucyhvcHRpb25zOiBJQnVpbGRJbkNvbXByZXNzT3B0aW9ucyk6IElCdWlsZEluQ29tcHJlc3NPcHRpb25zIHtcbiAgY29uc3QgZm9ybWF0Q29udmVydE9iaiA9XG4gICAgdHlwZW9mIG9wdGlvbnMuZm9ybWF0Q29udmVydE9iaiA9PT0gJ3N0cmluZycgPyBzYWZlUGFyc2Uob3B0aW9ucy5mb3JtYXRDb252ZXJ0T2JqKSA6IG9wdGlvbnMuZm9ybWF0Q29udmVydE9ialxuICByZXR1cm4ge1xuICAgIHF1YWxpdHk6IGZvcmNlTnVtYmVyKG9wdGlvbnMucXVhbGl0eSksXG4gICAgaXNDb252ZXJ0OiBvcHRpb25zLmlzQ29udmVydCB8fCBmYWxzZSxcbiAgICBjb252ZXJ0Rm9ybWF0OiBvcHRpb25zLmNvbnZlcnRGb3JtYXQgfHwgJ2pwZycsXG4gICAgaXNSZVNpemU6IG9wdGlvbnMuaXNSZVNpemUgfHwgZmFsc2UsXG4gICAgcmVTaXplSGVpZ2h0OiBmb3JjZU51bWJlcihvcHRpb25zLnJlU2l6ZUhlaWdodCksXG4gICAgcmVTaXplV2lkdGg6IGZvcmNlTnVtYmVyKG9wdGlvbnMucmVTaXplV2lkdGgpLFxuICAgIHNraXBSZVNpemVPZlNtYWxsSW1nOiBvcHRpb25zLnNraXBSZVNpemVPZlNtYWxsSW1nIHx8IGZhbHNlLFxuICAgIGlzUmVTaXplQnlQZXJjZW50OiBvcHRpb25zLmlzUmVTaXplQnlQZXJjZW50IHx8IGZhbHNlLFxuICAgIHJlU2l6ZVBlcmNlbnQ6IGZvcmNlTnVtYmVyKG9wdGlvbnMucmVTaXplUGVyY2VudCksXG4gICAgaXNSb3RhdGU6IG9wdGlvbnMuaXNSb3RhdGUgfHwgZmFsc2UsXG4gICAgaXNGbGlwOiBvcHRpb25zLmlzRmxpcCB8fCBmYWxzZSxcbiAgICBpc0Zsb3A6IG9wdGlvbnMuaXNGbG9wIHx8IGZhbHNlLFxuICAgIHJvdGF0ZURlZ3JlZTogZm9yY2VOdW1iZXIob3B0aW9ucy5yb3RhdGVEZWdyZWUpLFxuICAgIHBpY0JlZDogb3B0aW9ucy5waWNCZWQgfHwgJ3NtbXMnLFxuICAgIGZvcm1hdENvbnZlcnRPYmo6IGZvcm1hdENvbnZlcnRPYmogfHwge31cbiAgfVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gaW1hZ2VDb21wcmVzcyhcbiAgaW1nOiBCdWZmZXIsXG4gIG9wdGlvbnM6IElCdWlsZEluQ29tcHJlc3NPcHRpb25zLFxuICByYXdGb3JtYXQ6IHN0cmluZyxcbiAgbG9nZ2VyOiBJTG9nZ2VyXG4pOiBQcm9taXNlPEJ1ZmZlcj4ge1xuICBvcHRpb25zID0gZm9ybWF0T3B0aW9ucyhvcHRpb25zKVxuICB0cnkge1xuICAgIHJhd0Zvcm1hdCA9IG5vcm1hbGl6ZUltYWdlRXh0KHJhd0Zvcm1hdClcbiAgICBpZiAoIWltYWdlRm9ybWF0TGlzdC5pbmNsdWRlcyhyYXdGb3JtYXQpIHx8IHJhd0Zvcm1hdCA9PT0gJ2dpZicpIHJldHVybiBpbWdcbiAgICBsZXQgaW1hZ2U6IHNoYXJwLlNoYXJwID0gc2hhcnAoaW1nLCB7IGFuaW1hdGVkOiB0cnVlIH0pXG4gICAgbGV0IHF1YWxpdHkgPSAxMDBcbiAgICBpZiAodmFsaWRQYXJhbShvcHRpb25zLnF1YWxpdHkpICYmIG9wdGlvbnMucXVhbGl0eSEgPCAxMDApIHtcbiAgICAgIHF1YWxpdHkgPSBNYXRoLm1pbihNYXRoLm1heChNYXRoLnJvdW5kKG9wdGlvbnMucXVhbGl0eSEpLCAxKSwgMTAwKVxuICAgIH1cbiAgICBpZiAob3B0aW9ucy5pc1JlU2l6ZUJ5UGVyY2VudCkge1xuICAgICAgaWYgKHZhbGlkUGFyYW0ob3B0aW9ucy5yZVNpemVQZXJjZW50KSkge1xuICAgICAgICBjb25zdCBpbWFnZVdpZHRoID0gYXdhaXQgaW1hZ2UubWV0YWRhdGEoKS50aGVuKG1ldGFkYXRhID0+IG1ldGFkYXRhLndpZHRoKVxuICAgICAgICBjb25zdCBpbWFnZUhlaWdodCA9IGF3YWl0IGltYWdlLm1ldGFkYXRhKCkudGhlbihtZXRhZGF0YSA9PiBtZXRhZGF0YS5oZWlnaHQpXG4gICAgICAgIGlmIChpbWFnZVdpZHRoICYmIGltYWdlSGVpZ2h0KSB7XG4gICAgICAgICAgaW1hZ2UgPSBpbWFnZS5yZXNpemUoXG4gICAgICAgICAgICBNYXRoLnJvdW5kKChpbWFnZVdpZHRoICogb3B0aW9ucy5yZVNpemVQZXJjZW50ISkgLyAxMDApLFxuICAgICAgICAgICAgTWF0aC5yb3VuZCgoaW1hZ2VIZWlnaHQgKiBvcHRpb25zLnJlU2l6ZVBlcmNlbnQhKSAvIDEwMCksXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGZpdDogJ2luc2lkZSdcbiAgICAgICAgICAgIH1cbiAgICAgICAgICApXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKG9wdGlvbnMuaXNSZVNpemUpIHtcbiAgICAgIGlmIChcbiAgICAgICAgdHlwZW9mIG9wdGlvbnMucmVTaXplSGVpZ2h0ID09PSAnbnVtYmVyJyAmJlxuICAgICAgICBvcHRpb25zLnJlU2l6ZUhlaWdodCA+IDAgJiZcbiAgICAgICAgdHlwZW9mIG9wdGlvbnMucmVTaXplV2lkdGggPT09ICdudW1iZXInICYmXG4gICAgICAgIG9wdGlvbnMucmVTaXplV2lkdGggPiAwXG4gICAgICApIHtcbiAgICAgICAgaW1hZ2UgPSBpbWFnZS5yZXNpemUob3B0aW9ucy5yZVNpemVXaWR0aCwgb3B0aW9ucy5yZVNpemVIZWlnaHQsIHtcbiAgICAgICAgICBmaXQ6ICdmaWxsJ1xuICAgICAgICB9KVxuICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgdHlwZW9mIG9wdGlvbnMucmVTaXplSGVpZ2h0ID09PSAnbnVtYmVyJyAmJlxuICAgICAgICBvcHRpb25zLnJlU2l6ZUhlaWdodCA+IDAgJiZcbiAgICAgICAgKHR5cGVvZiBvcHRpb25zLnJlU2l6ZVdpZHRoICE9PSAnbnVtYmVyJyB8fCBvcHRpb25zLnJlU2l6ZVdpZHRoID09PSAwKVxuICAgICAgKSB7XG4gICAgICAgIGNvbnN0IGltYWdlV2lkdGggPSBhd2FpdCBpbWFnZS5tZXRhZGF0YSgpLnRoZW4obWV0YWRhdGEgPT4gbWV0YWRhdGEud2lkdGgpXG4gICAgICAgIGNvbnN0IGltYWdlSGVpZ2h0ID0gYXdhaXQgaW1hZ2UubWV0YWRhdGEoKS50aGVuKG1ldGFkYXRhID0+IG1ldGFkYXRhLmhlaWdodClcbiAgICAgICAgaWYgKGltYWdlV2lkdGggJiYgaW1hZ2VIZWlnaHQpIHtcbiAgICAgICAgICBpZiAoIW9wdGlvbnMuc2tpcFJlU2l6ZU9mU21hbGxJbWcgfHwgKG9wdGlvbnMuc2tpcFJlU2l6ZU9mU21hbGxJbWcgJiYgb3B0aW9ucy5yZVNpemVIZWlnaHQgPCBpbWFnZUhlaWdodCkpIHtcbiAgICAgICAgICAgIGNvbnN0IHNjYWxlUmF0aW8gPSBvcHRpb25zLnJlU2l6ZUhlaWdodCAvIGltYWdlSGVpZ2h0XG4gICAgICAgICAgICBpbWFnZSA9IGltYWdlLnJlc2l6ZShNYXRoLnJvdW5kKGltYWdlV2lkdGggKiBzY2FsZVJhdGlvKSwgb3B0aW9ucy5yZVNpemVIZWlnaHQsIHtcbiAgICAgICAgICAgICAgZml0OiAnaW5zaWRlJ1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgIHR5cGVvZiBvcHRpb25zLnJlU2l6ZVdpZHRoID09PSAnbnVtYmVyJyAmJlxuICAgICAgICBvcHRpb25zLnJlU2l6ZVdpZHRoID4gMCAmJlxuICAgICAgICAodHlwZW9mIG9wdGlvbnMucmVTaXplSGVpZ2h0ICE9PSAnbnVtYmVyJyB8fCBvcHRpb25zLnJlU2l6ZUhlaWdodCA9PT0gMClcbiAgICAgICkge1xuICAgICAgICBjb25zdCBpbWFnZVdpZHRoID0gYXdhaXQgaW1hZ2UubWV0YWRhdGEoKS50aGVuKG1ldGFkYXRhID0+IG1ldGFkYXRhLndpZHRoKVxuICAgICAgICBjb25zdCBpbWFnZUhlaWdodCA9IGF3YWl0IGltYWdlLm1ldGFkYXRhKCkudGhlbihtZXRhZGF0YSA9PiBtZXRhZGF0YS5oZWlnaHQpXG4gICAgICAgIGlmIChpbWFnZVdpZHRoICYmIGltYWdlSGVpZ2h0KSB7XG4gICAgICAgICAgaWYgKCFvcHRpb25zLnNraXBSZVNpemVPZlNtYWxsSW1nIHx8IChvcHRpb25zLnNraXBSZVNpemVPZlNtYWxsSW1nICYmIG9wdGlvbnMucmVTaXplV2lkdGggPCBpbWFnZVdpZHRoKSkge1xuICAgICAgICAgICAgY29uc3Qgc2NhbGVSYXRpbyA9IG9wdGlvbnMucmVTaXplV2lkdGggLyBpbWFnZVdpZHRoXG4gICAgICAgICAgICBpbWFnZSA9IGltYWdlLnJlc2l6ZShvcHRpb25zLnJlU2l6ZVdpZHRoLCBNYXRoLnJvdW5kKGltYWdlSGVpZ2h0ICogc2NhbGVSYXRpbyksIHtcbiAgICAgICAgICAgICAgZml0OiAnaW5zaWRlJ1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKG9wdGlvbnMuaXNSb3RhdGUgJiYgb3B0aW9ucy5yb3RhdGVEZWdyZWUpIHtcbiAgICAgIGltYWdlID0gaW1hZ2Uucm90YXRlKG9wdGlvbnMucm90YXRlRGVncmVlLCB7XG4gICAgICAgIGJhY2tncm91bmQ6IHsgcjogMjU1LCBnOiAyNTUsIGI6IDI1NSwgYWxwaGE6IDAgfVxuICAgICAgfSlcbiAgICB9XG4gICAgaWYgKG9wdGlvbnMuaXNGbGlwKSB7XG4gICAgICBpbWFnZSA9IGltYWdlLmZsaXAoKVxuICAgIH1cbiAgICBpZiAob3B0aW9ucy5pc0Zsb3ApIHtcbiAgICAgIGltYWdlID0gaW1hZ2UuZmxvcCgpXG4gICAgfVxuICAgIGlmIChvcHRpb25zLmlzQ29udmVydCkge1xuICAgICAgY29uc3QgbmV3Rm9ybWF0ID0gZ2V0Q29udmVydGVkRm9ybWF0KG9wdGlvbnMsIHJhd0Zvcm1hdCkgYXMgYW55XG4gICAgICBpZiAobmV3Rm9ybWF0ICE9PSByYXdGb3JtYXQpIHtcbiAgICAgICAgaW1hZ2UgPSBpbWFnZS50b0Zvcm1hdChuZXdGb3JtYXQsIHtcbiAgICAgICAgICBxdWFsaXR5LFxuICAgICAgICAgIG1vempwZWc6IHRydWVcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHJhd0Zvcm1hdCAmJiB2YWxpZE91dHB1dEZvcm1hdChyYXdGb3JtYXQpKSB7XG4gICAgICAgIGltYWdlID0gaW1hZ2UudG9Gb3JtYXQocmF3Rm9ybWF0IGFzIGFueSwge1xuICAgICAgICAgIHF1YWxpdHksXG4gICAgICAgICAgbW96anBlZzogdHJ1ZVxuICAgICAgICB9KVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaW1hZ2UgPSBpbWFnZS50b0Zvcm1hdCgnanBnJywge1xuICAgICAgICAgIHF1YWxpdHksXG4gICAgICAgICAgbW96anBlZzogdHJ1ZVxuICAgICAgICB9KVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gYXdhaXQgaW1hZ2UudG9CdWZmZXIoKVxuICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgbG9nZ2VyLmVycm9yKGBJbWFnZSBwcm9jZXNzIGVycm9yOiAke2Vycm9yfWApXG4gICAgcmV0dXJuIGltZ1xuICB9XG59XG5cbmNvbnN0IG5vcm1hbGl6ZUltYWdlRXh0ID0gKGV4dDogc3RyaW5nKTogc3RyaW5nID0+IHtcbiAgcmV0dXJuIGV4dC50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoJy4nLCAnJylcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldENvbnZlcnRlZEZvcm1hdChvcHRpb25zOiBJQnVpbGRJbkNvbXByZXNzT3B0aW9ucyB8IHVuZGVmaW5lZCwgcmF3Rm9ybWF0OiBzdHJpbmcpOiBzdHJpbmcge1xuICBvcHRpb25zID0gZm9ybWF0T3B0aW9ucyhvcHRpb25zIHx8IHt9KVxuICByYXdGb3JtYXQgPSBub3JtYWxpemVJbWFnZUV4dChyYXdGb3JtYXQpXG4gIGlmIChyYXdGb3JtYXQgPT09ICdnaWYnKSByZXR1cm4gJ2dpZidcbiAgbGV0IG5ld0Zvcm1hdCA9IG9wdGlvbnM/LmNvbnZlcnRGb3JtYXQgfHwgJ2pwZydcbiAgaWYgKG9wdGlvbnM/LmZvcm1hdENvbnZlcnRPYmogJiYgT2JqZWN0LmtleXMob3B0aW9ucy5mb3JtYXRDb252ZXJ0T2JqKS5sZW5ndGggPiAwKSB7XG4gICAgY29uc3QgZm9ybWF0Q29udmVydE9iaiA9IG9wdGlvbnMuZm9ybWF0Q29udmVydE9ialxuICAgIGNvbnN0IGZvcm1hdENvbnZlcnRPYmpLZXlzID0gT2JqZWN0LmtleXMoZm9ybWF0Q29udmVydE9iailcbiAgICBpZiAoZm9ybWF0Q29udmVydE9iaktleXMuaW5jbHVkZXMocmF3Rm9ybWF0KSkge1xuICAgICAgbmV3Rm9ybWF0ID0gZm9ybWF0Q29udmVydE9ialtyYXdGb3JtYXRdXG4gICAgICBpZiAoIXZhbGlkT3V0cHV0Rm9ybWF0KG5ld0Zvcm1hdCkpIHtcbiAgICAgICAgbmV3Rm9ybWF0ID0gJ2pwZydcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgaWYgKG9wdGlvbnM/LnBpY0JlZCA9PT0gJ2ltZ3VyJyAmJiBuZXdGb3JtYXQgPT09ICd3ZWJwJykge1xuICAgIG5ld0Zvcm1hdCA9ICdqcGcnXG4gIH1cbiAgcmV0dXJuIG5ld0Zvcm1hdFxufVxuXG5leHBvcnQgY29uc3QgaXNOZWVkQWRkV2F0ZXJtYXJrID0gKFxuICB3YXRlcm1hcmtPcHRpb25zOiBJQnVpbGRJbldhdGVyTWFya09wdGlvbnMgfCB1bmRlZmluZWQsXG4gIGZpbGVFeHQ6IHN0cmluZ1xuKTogYm9vbGVhbiA9PiB7XG4gIGZpbGVFeHQgPSBub3JtYWxpemVJbWFnZUV4dChmaWxlRXh0KVxuICByZXR1cm4gKFxuICAgICEhd2F0ZXJtYXJrT3B0aW9ucyAmJiAhIXdhdGVybWFya09wdGlvbnMuaXNBZGRXYXRlcm1hcmsgJiYgaW1hZ2VGb3JtYXRMaXN0LmluY2x1ZGVzKGZpbGVFeHQpICYmIGZpbGVFeHQgIT09ICdzdmcnXG4gIClcbn1cblxuZXhwb3J0IGNvbnN0IGlzTmVlZENvbXByZXNzID0gKGNvbXByZXNzT3B0aW9uczogSUJ1aWxkSW5Db21wcmVzc09wdGlvbnMgfCB1bmRlZmluZWQsIGZpbGVFeHQ6IHN0cmluZyk6IGJvb2xlYW4gPT4ge1xuICBpZiAoIWltYWdlRm9ybWF0TGlzdC5pbmNsdWRlcyhub3JtYWxpemVJbWFnZUV4dChmaWxlRXh0KSkgfHwgIWNvbXByZXNzT3B0aW9ucykgcmV0dXJuIGZhbHNlXG5cbiAgY29uc3Qge1xuICAgIHF1YWxpdHksXG4gICAgaXNSZVNpemVCeVBlcmNlbnQsXG4gICAgcmVTaXplUGVyY2VudCxcbiAgICBpc1JlU2l6ZSxcbiAgICByZVNpemVIZWlnaHQsXG4gICAgcmVTaXplV2lkdGgsXG4gICAgaXNSb3RhdGUsXG4gICAgcm90YXRlRGVncmVlLFxuICAgIGlzQ29udmVydCxcbiAgICBjb252ZXJ0Rm9ybWF0LFxuICAgIGlzRmxpcCxcbiAgICBpc0Zsb3BcbiAgfSA9IGZvcm1hdE9wdGlvbnMoY29tcHJlc3NPcHRpb25zKVxuXG4gIGlmICh2YWxpZFBhcmFtKHF1YWxpdHkpICYmIHF1YWxpdHkhIDwgMTAwKSByZXR1cm4gdHJ1ZVxuICBpZiAoaXNSZVNpemVCeVBlcmNlbnQgJiYgdmFsaWRQYXJhbShyZVNpemVQZXJjZW50KSkgcmV0dXJuIHRydWVcbiAgaWYgKFxuICAgIGlzUmVTaXplICYmXG4gICAgKCh0eXBlb2YgcmVTaXplSGVpZ2h0ID09PSAnbnVtYmVyJyAmJiByZVNpemVIZWlnaHQgPiAwKSB8fCAodHlwZW9mIHJlU2l6ZVdpZHRoID09PSAnbnVtYmVyJyAmJiByZVNpemVXaWR0aCA+IDApKVxuICApIHtcbiAgICByZXR1cm4gdHJ1ZVxuICB9XG4gIGlmIChpc1JvdGF0ZSAmJiByb3RhdGVEZWdyZWUpIHJldHVybiB0cnVlXG4gIGlmIChpc0ZsaXAgfHwgaXNGbG9wKSByZXR1cm4gdHJ1ZVxuICBpZiAoaXNDb252ZXJ0KSB7XG4gICAgY29uc3QgbmV3Rm9ybWF0ID0gY29udmVydEZvcm1hdCB8fCAnanBnJ1xuICAgIHJldHVybiBmaWxlRXh0ICE9PSBuZXdGb3JtYXRcbiAgfVxuICByZXR1cm4gZmFsc2Vcbn1cblxuZXhwb3J0IGNvbnN0IHJlbW92ZUV4aWYgPSBhc3luYyAoaW1nOiBCdWZmZXIsIGZpbGVFeHQ6IHN0cmluZyk6IFByb21pc2U8QnVmZmVyPiA9PiB7XG4gIGZpbGVFeHQgPSBub3JtYWxpemVJbWFnZUV4dChmaWxlRXh0KVxuICBpZiAoIWltYWdlRm9ybWF0TGlzdC5pbmNsdWRlcyhmaWxlRXh0KSB8fCBmaWxlRXh0ID09PSAnc3ZnJykgcmV0dXJuIGltZ1xuICByZXR1cm4gYXdhaXQgc2hhcnAoaW1nLCB7XG4gICAgYW5pbWF0ZWQ6IHRydWVcbiAgfSkudG9CdWZmZXIoKVxufVxuIiwiaW1wb3J0IHBhdGggZnJvbSAncGF0aCdcbmltcG9ydCBmcyBmcm9tICdmcy1leHRyYSdcbmltcG9ydCB7IGlzVXJsIH0gZnJvbSAnLi4vLi4vdXRpbHMvY29tbW9uJ1xuaW1wb3J0IHsgSVBpY0dvLCBJUGx1Z2luIH0gZnJvbSAnLi4vLi4vdHlwZXMnXG5cbmNvbnN0IHVwbG9hZDogSVBsdWdpbiA9IHtcbiAgaGFuZGxlOiAoY3R4OiBJUGljR28pID0+IHtcbiAgICBjdHguY21kLnByb2dyYW1cbiAgICAgIC5jb21tYW5kKCd1cGxvYWQnKVxuICAgICAgLmRlc2NyaXB0aW9uKCd1cGxvYWQsIGdvIGdvIGdvJylcbiAgICAgIC5hcmd1bWVudHMoJ1tpbnB1dC4uLl0nKVxuICAgICAgLmFsaWFzKCd1JylcbiAgICAgIC5hY3Rpb24oKGlucHV0OiBzdHJpbmdbXSkgPT4ge1xuICAgICAgICA7KGFzeW5jICgpID0+IHtcbiAgICAgICAgICBjb25zdCBpbnB1dExpc3QgPSBpbnB1dFxuICAgICAgICAgICAgLm1hcCgoaXRlbTogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgICAgIHJldHVybiBpc1VybChpdGVtKSA/IGl0ZW0gOiBwYXRoLnJlc29sdmUoaXRlbSlcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuZmlsdGVyKChpdGVtOiBzdHJpbmcpID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgZXhpc3QgPSBmcy5leGlzdHNTeW5jKGl0ZW0pIHx8IGlzVXJsKGl0ZW0pXG4gICAgICAgICAgICAgIGlmICghZXhpc3QpIHtcbiAgICAgICAgICAgICAgICBjdHgubG9nLndhcm4oYCR7aXRlbX0gZG9lcyBub3QgZXhpc3QuYClcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICByZXR1cm4gZXhpc3RcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgYXdhaXQgY3R4LnVwbG9hZChpbnB1dExpc3QpXG4gICAgICAgIH0pKCkuY2F0Y2goZSA9PiB7XG4gICAgICAgICAgY3R4LmxvZy5lcnJvcihlKVxuICAgICAgICB9KVxuICAgICAgfSlcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCB1cGxvYWRcbiIsImltcG9ydCB7IElMb2NhbGVzS2V5IH0gZnJvbSAnLi4vLi4vaTE4bi96aC1DTidcbmltcG9ydCB7IElQaWNHbyB9IGZyb20gJy4uLy4uL3R5cGVzJ1xuXG5leHBvcnQgZnVuY3Rpb24gZm9ybWF0UGF0aEhlbHBlcih7XG4gIHBhdGgsXG4gIHN0YXJ0U2xhc2ggPSBmYWxzZSxcbiAgZW5kU2xhc2ggPSB0cnVlLFxuICByb290VG9FbXB0eSA9IHRydWVcbn06IHtcbiAgcGF0aD86IHN0cmluZ1xuICBzdGFydFNsYXNoPzogYm9vbGVhblxuICBlbmRTbGFzaD86IGJvb2xlYW5cbiAgcm9vdFRvRW1wdHk/OiBib29sZWFuXG59KTogc3RyaW5nIHtcbiAgY29uc3QgY2xlYW5QYXRoID0gcGF0aD8ucmVwbGFjZSgvXlxcLyt8XFwvKyQvZywgJycpLnJlcGxhY2UoL1xcL3syLH0vZywgJy8nKVxuICBpZiAoIWNsZWFuUGF0aCkge1xuICAgIHJldHVybiByb290VG9FbXB0eSA/ICcnIDogJy8nXG4gIH1cbiAgcmV0dXJuIGAke3N0YXJ0U2xhc2ggPyAnLycgOiAnJ30ke2NsZWFuUGF0aH0ke2VuZFNsYXNoID8gJy8nIDogJyd9YFxufVxuXG5leHBvcnQgZnVuY3Rpb24gZW5jb2RlUGF0aChwYXRoOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gcGF0aFxuICAgIC5yZXBsYWNlKC9cXC97Mix9L2csICcvJylcbiAgICAuc3BsaXQoJy8nKVxuICAgIC5tYXAocCA9PiBlbmNvZGVVUklDb21wb25lbnQocCkpXG4gICAgLmpvaW4oJy8nKVxufVxuXG5leHBvcnQgY29uc3QgYnVpbGRJblVwbG9hZGVyTmFtZXMgPSB7XG4gIGFkdmFuY2VkcGxpc3Q6ICdhZHZhbmNlZHBsaXN0JyxcbiAgYWxpc3RwbGlzdDogJ2FsaXN0cGxpc3QnLFxuICBhbGl5dW46ICdhbGl5dW4nLFxuICAnYXdzLXMzLXBsaXN0JzogJ2F3cy1zMy1wbGlzdCcsXG4gIGdpdGh1YjogJ2dpdGh1YicsXG4gIGltZ3VyOiAnaW1ndXInLFxuICBsb2NhbDogJ2xvY2FsJyxcbiAgbHNreXBsaXN0OiAnbHNreXBsaXN0JyxcbiAgcGljbGlzdDogJ3BpY2xpc3QnLFxuICBxaW5pdTogJ3Fpbml1JyxcbiAgc2Z0cHBsaXN0OiAnc2Z0cHBsaXN0JyxcbiAgc21tczogJ3NtbXMnLFxuICB0Y3l1bjogJ3RjeXVuJyxcbiAgdXB5dW46ICd1cHl1bicsXG4gIHdlYmRhdnBsaXN0OiAnd2ViZGF2cGxpc3QnXG59XG5cbmV4cG9ydCBjb25zdCBjcmVhdGVGaWVsZCA9IChcbiAgY3R4OiBJUGljR28sXG4gIHBpY0JlZE5hbWU6IHN0cmluZyxcbiAgbmFtZTogc3RyaW5nLFxuICB0eXBlOiBhbnksXG4gIGRlZmF1bHRWYWx1ZTogYW55LFxuICByZXF1aXJlZDogYm9vbGVhbixcbiAgaTE4blByZWZpeDogc3RyaW5nID0gJ1BJQ0JFRCcsXG4gIGV4dHJhcz86IGFueVxuKSA9PiAoe1xuICBuYW1lLFxuICB0eXBlLFxuICBnZXQgcHJlZml4KCkge1xuICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KFxuICAgICAgYCR7aTE4blByZWZpeH1fJHtwaWNCZWROYW1lLnRvVXBwZXJDYXNlKCl9XyR7bmFtZS50b1VwcGVyQ2FzZSgpfWAgYXMgSUxvY2FsZXNLZXlcbiAgICApXG4gIH0sXG4gIGdldCBhbGlhcygpIHtcbiAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PihcbiAgICAgIGAke2kxOG5QcmVmaXh9XyR7cGljQmVkTmFtZS50b1VwcGVyQ2FzZSgpfV8ke25hbWUudG9VcHBlckNhc2UoKX1gIGFzIElMb2NhbGVzS2V5XG4gICAgKVxuICB9LFxuICBkZWZhdWx0OiBkZWZhdWx0VmFsdWUsXG4gIHJlcXVpcmVkLFxuICAuLi5leHRyYXNcbn0pXG4iLCJpbXBvcnQgeyBJTG9jYWxlc0tleSB9IGZyb20gJy4uLy4uL2kxOG4vemgtQ04nXG5pbXBvcnQgeyBJUGljR28sIElTdHJpbmdLZXlNYXAgfSBmcm9tICcuLi8uLi90eXBlcydcblxuZXhwb3J0IGNvbnN0IHVwbG9hZGVyVHJhbnNsYXRvcnMgPSAoY3R4OiBJUGljR28pID0+IHtcbiAgcmV0dXJuIHtcbiAgICBhZHZhbmNlZHBsaXN0OiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQURWQU5DRURQTElTVCcpLFxuICAgIGFsaXN0cGxpc3Q6IGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BTElTVF9QTElTVCcpLFxuICAgIGFsaXl1bjogY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FMSUNMT1VEJyksXG4gICAgJ2F3cy1zMy1wbGlzdCc6IGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BV1NTM1BMSVNUJyksXG4gICAgZ2l0aHViOiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfR0lUSFVCJyksXG4gICAgaW1ndXI6IGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9JTUdVUicpLFxuICAgIGxvY2FsOiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfTE9DQUwnKSxcbiAgICBsc2t5cGxpc3Q6IGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9MU0tZX1BMSVNUJyksXG4gICAgcGljbGlzdDogY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1BJQ0xJU1QnKSxcbiAgICBxaW5pdTogY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1FJTklVJyksXG4gICAgc2Z0cHBsaXN0OiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfU0ZUUFBMSVNUJyksXG4gICAgc21tczogY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1NNTVMnKSxcbiAgICB0Y3l1bjogY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1RFTkNFTlRDTE9VRCcpLFxuICAgIHVweXVuOiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVVBZVU4nKSxcbiAgICB3ZWJkYXZwbGlzdDogY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1dFQkRBVlBMSVNUJylcbiAgfSBhcyBJU3RyaW5nS2V5TWFwPGFueT5cbn1cbiIsImltcG9ydCB7IElMb2NhbGVzS2V5IH0gZnJvbSAnLi4vLi4vaTE4bi96aC1DTidcbmltcG9ydCB7IElQaWNHbywgSVBsdWdpbkNvbmZpZywgSVN0cmluZ0tleU1hcCB9IGZyb20gJy4uLy4uL3R5cGVzJ1xuaW1wb3J0IGNvbXByZXNzIGZyb20gJy4uL2JlZm9yZXRyYW5zZm9ybWVyL2NvbXByZXNzJ1xuaW1wb3J0IHNraXBQcm9jZXNzIGZyb20gJy4uL2JlZm9yZXRyYW5zZm9ybWVyL3NraXBQcm9jZXNzJ1xuaW1wb3J0IHdhdGVybWFyayBmcm9tICcuLi9iZWZvcmV0cmFuc2Zvcm1lci93YXRlcm1hcmsnXG5pbXBvcnQgcmVuYW1lIGZyb20gJy4uL2JlZm9yZXVwbG9hZC9idWlsZEluUmVuYW1lJ1xuaW1wb3J0IHsgdXBsb2FkZXJUcmFuc2xhdG9ycyB9IGZyb20gJy4vdXRpbHMnXG5cbi8vIEJ1aWx0LWluIG1vZHVsZXMgY29uZmlndXJhdGlvbiBtYXBwaW5nXG5jb25zdCBCVUlMRElOX01PRFVMRVMgPSB7XG4gIGNvbXByZXNzOiB7IGNvbmZpZzogY29tcHJlc3MuY29uZmlnLCBrZXk6ICdCVUlMRElOX0NPTVBSRVNTJyBhcyBJTG9jYWxlc0tleSB9LFxuICB3YXRlcm1hcms6IHsgY29uZmlnOiB3YXRlcm1hcmsuY29uZmlnLCBrZXk6ICdCVUlMRElOX1dBVEVSTUFSSycgYXMgSUxvY2FsZXNLZXkgfSxcbiAgcmVuYW1lOiB7IGNvbmZpZzogcmVuYW1lLmNvbmZpZywga2V5OiAnQlVJTERJTl9SRU5BTUUnIGFzIElMb2NhbGVzS2V5IH0sXG4gIHNraXBQcm9jZXNzOiB7IGNvbmZpZzogc2tpcFByb2Nlc3MuY29uZmlnLCBrZXk6ICdCVUlMRElOX1NLSVBQUk9DRVNTJyBhcyBJTG9jYWxlc0tleSB9XG59IGFzIGNvbnN0XG5cbnR5cGUgQnVpbGRpbk1vZHVsZU5hbWUgPSBrZXlvZiB0eXBlb2YgQlVJTERJTl9NT0RVTEVTXG5cbmNvbnN0IGhhbmRsZUNvbmZpZyA9IGFzeW5jIChjdHg6IElQaWNHbywgcHJvbXB0czogSVBsdWdpbkNvbmZpZ1tdLCBtb2R1bGU6IHN0cmluZywgbmFtZTogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gIGNvbnN0IGFuc3dlciA9IGF3YWl0IGN0eC5jbWQuaW5xdWlyZXIucHJvbXB0KHByb21wdHMpXG4gIGNvbnN0IGNvbmZpZ05hbWUgPSBnZXRDb25maWdOYW1lKG1vZHVsZSwgbmFtZSlcblxuICBjdHguc2F2ZUNvbmZpZyh7IFtjb25maWdOYW1lXTogYW5zd2VyIH0pXG5cbiAgLy8gSGFuZGxlIGFkZGl0aW9uYWwgY29uZmlnIGZvciBzcGVjaWZpYyBtb2R1bGVzXG4gIGlmIChtb2R1bGUgPT09ICd1cGxvYWRlcicpIHtcbiAgICBjdHguc2F2ZUNvbmZpZyh7XG4gICAgICAncGljQmVkLmN1cnJlbnQnOiBuYW1lLFxuICAgICAgJ3BpY0JlZC51cGxvYWRlcic6IG5hbWVcbiAgICB9KVxuICB9IGVsc2UgaWYgKG1vZHVsZSA9PT0gJ3RyYW5zZm9ybWVyJykge1xuICAgIGN0eC5zYXZlQ29uZmlnKHtcbiAgICAgICdwaWNCZWQudHJhbnNmb3JtZXInOiBuYW1lXG4gICAgfSlcbiAgfVxufVxuXG5jb25zdCBnZXRDb25maWdOYW1lID0gKG1vZHVsZTogc3RyaW5nLCBuYW1lOiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xuICBjb25zdCBjb25maWdNYXA6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XG4gICAgdXBsb2FkZXI6IGBwaWNCZWQuJHtuYW1lfWAsXG4gICAgdHJhbnNmb3JtZXI6IGB0cmFuc2Zvcm1lci4ke25hbWV9YCxcbiAgICBidWlsZGluOiBgYnVpbGRJbi4ke25hbWV9YFxuICB9XG4gIHJldHVybiBjb25maWdNYXBbbW9kdWxlXSB8fCBuYW1lXG59XG5cbmNvbnN0IGhhbmRsZUJ1aWxkaW5Nb2R1bGUgPSBhc3luYyAoY3R4OiBJUGljR28sIG5hbWU/OiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgaWYgKG5hbWUgJiYgbmFtZSBpbiBCVUlMRElOX01PRFVMRVMpIHtcbiAgICBjb25zdCBtb2R1bGUgPSBCVUlMRElOX01PRFVMRVNbbmFtZSBhcyBCdWlsZGluTW9kdWxlTmFtZV1cbiAgICBhd2FpdCBoYW5kbGVDb25maWcoY3R4LCBtb2R1bGUuY29uZmlnKGN0eCksICdidWlsZGluJywgbmFtZSlcbiAgICByZXR1cm5cbiAgfVxuXG4gIC8vIFNob3cgc2VsZWN0aW9uIHByb21wdFxuICBjb25zdCBjaG9pY2VzID0gT2JqZWN0LmVudHJpZXMoQlVJTERJTl9NT0RVTEVTKS5tYXAoKFt2YWx1ZSwgeyBrZXkgfV0pID0+ICh7XG4gICAgbmFtZTogY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PihrZXkpLFxuICAgIHZhbHVlXG4gIH0pKVxuXG4gIGNvbnN0IHByb21wdHMgPSBbXG4gICAge1xuICAgICAgdHlwZTogJ2xpc3QnLFxuICAgICAgbmFtZTogJ2J1aWxkaW4nLFxuICAgICAgY2hvaWNlcyxcbiAgICAgIG1lc3NhZ2U6ICdDaG9vc2UgYSBidWlsZGluIG1vZHVsZSdcbiAgICB9XG4gIF1cblxuICBjb25zdCBhbnN3ZXIgPSBhd2FpdCBjdHguY21kLmlucXVpcmVyLnByb21wdDxJU3RyaW5nS2V5TWFwPHN0cmluZz4+KHByb21wdHMpXG4gIGNvbnN0IHNlbGVjdGVkTW9kdWxlID0gQlVJTERJTl9NT0RVTEVTW2Fuc3dlci5idWlsZGluIGFzIEJ1aWxkaW5Nb2R1bGVOYW1lXVxuICBhd2FpdCBoYW5kbGVDb25maWcoY3R4LCBzZWxlY3RlZE1vZHVsZS5jb25maWcoY3R4KSwgJ2J1aWxkaW4nLCBhbnN3ZXIuYnVpbGRpbilcbn1cblxuY29uc3QgaGFuZGxlVXBsb2FkZXJPclRyYW5zZm9ybWVyID0gYXN5bmMgKFxuICBjdHg6IElQaWNHbyxcbiAgbW9kdWxlOiAndXBsb2FkZXInIHwgJ3RyYW5zZm9ybWVyJyxcbiAgbmFtZT86IHN0cmluZ1xuKTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gIGlmIChuYW1lKSB7XG4gICAgY29uc3QgaXRlbSA9IGN0eC5oZWxwZXJbbW9kdWxlXS5nZXQobmFtZSlcbiAgICBpZiAoIWl0ZW0pIHtcbiAgICAgIGN0eC5sb2cuZXJyb3IoYE5vICR7bW9kdWxlfSBuYW1lZCAke25hbWV9YClcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBpZiAoaXRlbS5jb25maWcpIHtcbiAgICAgIGF3YWl0IGhhbmRsZUNvbmZpZyhjdHgsIGl0ZW0uY29uZmlnKGN0eCksIG1vZHVsZSwgbmFtZSlcbiAgICB9XG4gICAgcmV0dXJuXG4gIH1cblxuICAvLyBTaG93IHNlbGVjdGlvbiBwcm9tcHRcbiAgY29uc3QgY2hvaWNlcyA9IGN0eC5oZWxwZXJbbW9kdWxlXS5nZXRJZExpc3QoKS5tYXAoKGl0ZW06IHN0cmluZykgPT4gKHtcbiAgICBuYW1lOiB1cGxvYWRlclRyYW5zbGF0b3JzKGN0eClbaXRlbV0gfHwgaXRlbSxcbiAgICB2YWx1ZTogaXRlbVxuICB9KSlcblxuICBjb25zdCBwcm9tcHRzID0gW1xuICAgIHtcbiAgICAgIHR5cGU6ICdsaXN0JyxcbiAgICAgIG5hbWU6IG1vZHVsZSxcbiAgICAgIGNob2ljZXMsXG4gICAgICBtZXNzYWdlOiBgQ2hvb3NlIGEobikgJHttb2R1bGV9YFxuICAgIH1cbiAgXVxuXG4gIGNvbnN0IGFuc3dlciA9IGF3YWl0IGN0eC5jbWQuaW5xdWlyZXIucHJvbXB0PElTdHJpbmdLZXlNYXA8c3RyaW5nPj4ocHJvbXB0cylcbiAgY29uc3QgaXRlbSA9IGN0eC5oZWxwZXJbbW9kdWxlXS5nZXQoYW5zd2VyW21vZHVsZV0pXG4gIGlmIChpdGVtPy5jb25maWcpIHtcbiAgICBhd2FpdCBoYW5kbGVDb25maWcoY3R4LCBpdGVtLmNvbmZpZyhjdHgpLCBtb2R1bGUsIGFuc3dlclttb2R1bGVdKVxuICB9XG59XG5cbmNvbnN0IGhhbmRsZVBsdWdpbiA9IGFzeW5jIChjdHg6IElQaWNHbywgbmFtZT86IHN0cmluZyk6IFByb21pc2U8dm9pZD4gPT4ge1xuICBpZiAobmFtZSkge1xuICAgIGNvbnN0IHBsdWdpbk5hbWUgPSBuYW1lLmluY2x1ZGVzKCdwaWNnby1wbHVnaW4tJykgPyBuYW1lIDogYHBpY2dvLXBsdWdpbi0ke25hbWV9YFxuXG4gICAgaWYgKCFPYmplY3Qua2V5cyhjdHguZ2V0Q29uZmlnKCdwaWNnb1BsdWdpbnMnKSkuaW5jbHVkZXMocGx1Z2luTmFtZSkpIHtcbiAgICAgIGN0eC5sb2cuZXJyb3IoYE5vIHBsdWdpbiBuYW1lZCAke3BsdWdpbk5hbWV9YClcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNvbnN0IHBsdWdpbiA9IGN0eC5wbHVnaW5Mb2FkZXIuZ2V0UGx1Z2luKHBsdWdpbk5hbWUpXG4gICAgaWYgKHBsdWdpbj8uY29uZmlnKSB7XG4gICAgICBhd2FpdCBoYW5kbGVDb25maWcoY3R4LCBwbHVnaW4uY29uZmlnKGN0eCksICdwbHVnaW4nLCBwbHVnaW5OYW1lKVxuICAgIH1cbiAgICByZXR1cm5cbiAgfVxuXG4gIC8vIFNob3cgc2VsZWN0aW9uIHByb21wdFxuICBjb25zdCBwcm9tcHRzID0gW1xuICAgIHtcbiAgICAgIHR5cGU6ICdsaXN0JyxcbiAgICAgIG5hbWU6ICdwbHVnaW4nLFxuICAgICAgY2hvaWNlczogY3R4LnBsdWdpbkxvYWRlci5nZXRGdWxsTGlzdCgpLFxuICAgICAgbWVzc2FnZTogJ0Nob29zZSBhIHBsdWdpbidcbiAgICB9XG4gIF1cblxuICBjb25zdCBhbnN3ZXIgPSBhd2FpdCBjdHguY21kLmlucXVpcmVyLnByb21wdDxJU3RyaW5nS2V5TWFwPHN0cmluZz4+KHByb21wdHMpXG4gIGNvbnN0IHBsdWdpbiA9IGN0eC5wbHVnaW5Mb2FkZXIuZ2V0UGx1Z2luKGFuc3dlci5wbHVnaW4pXG4gIGlmIChwbHVnaW4/LmNvbmZpZykge1xuICAgIGF3YWl0IGhhbmRsZUNvbmZpZyhjdHgsIHBsdWdpbi5jb25maWcoY3R4KSwgJ3BsdWdpbicsIGFuc3dlci5wbHVnaW4pXG4gIH1cbn1cblxuY29uc3Qgc2V0dGluZyA9IHtcbiAgaGFuZGxlOiAoY3R4OiBJUGljR28pID0+IHtcbiAgICBjb25zdCBjbWQgPSBjdHguY21kXG4gICAgY21kLnByb2dyYW1cbiAgICAgIC5jb21tYW5kKCdzZXQnKVxuICAgICAgLmFsaWFzKCdjb25maWcnKVxuICAgICAgLmFyZ3VtZW50cygnPG1vZHVsZT4gW25hbWVdJylcbiAgICAgIC5kZXNjcmlwdGlvbignY29uZmlndXJlIGNvbmZpZyBvZiBwaWNnbyBtb2R1bGVzLCB1cGxvYWRlcnx0cmFuc2Zvcm1lcnxwbHVnaW58YnVpbGRpbicpXG4gICAgICAuYWN0aW9uKChtb2R1bGU6IHN0cmluZywgbmFtZTogc3RyaW5nKSA9PiB7XG4gICAgICAgIDsoYXN5bmMgKCkgPT4ge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAvLyBIYW5kbGUgZGlmZmVyZW50IG1vZHVsZSB0eXBlc1xuICAgICAgICAgICAgc3dpdGNoIChtb2R1bGUpIHtcbiAgICAgICAgICAgICAgY2FzZSAnYnVpbGRpbic6XG4gICAgICAgICAgICAgICAgYXdhaXQgaGFuZGxlQnVpbGRpbk1vZHVsZShjdHgsIG5hbWUpXG4gICAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgICAgY2FzZSAndXBsb2FkZXInOlxuICAgICAgICAgICAgICBjYXNlICd0cmFuc2Zvcm1lcic6XG4gICAgICAgICAgICAgICAgYXdhaXQgaGFuZGxlVXBsb2FkZXJPclRyYW5zZm9ybWVyKGN0eCwgbW9kdWxlLCBuYW1lKVxuICAgICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICAgIGNhc2UgJ3BsdWdpbic6XG4gICAgICAgICAgICAgICAgYXdhaXQgaGFuZGxlUGx1Z2luKGN0eCwgbmFtZSlcbiAgICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIGN0eC5sb2cud2FybihgTm8gbW9kdWxlIG5hbWVkICR7bW9kdWxlfWApXG4gICAgICAgICAgICAgICAgY3R4LmxvZy53YXJuKCdBdmFpbGFibGUgbW9kdWxlcyBhcmUgdXBsb2FkZXJ8dHJhbnNmb3JtZXJ8cGx1Z2lufGJ1aWxkaW4nKVxuICAgICAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjdHgubG9nLnN1Y2Nlc3MoJ0NvbmZpZ3VyZSBjb25maWcgc3VjY2Vzc2Z1bGx5IScpXG4gICAgICAgICAgICBpZiAobW9kdWxlID09PSAncGx1Z2luJykge1xuICAgICAgICAgICAgICBjdHgubG9nLmluZm8oXCJJZiB5b3Ugd2FudCB0byB1c2UgdGhpcyBjb25maWcsIHBsZWFzZSBydW4gJ3BpY2dvIHVzZSBwbHVnaW5zJ1wiKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gY2F0Y2ggKGU6IGFueSkge1xuICAgICAgICAgICAgY3R4LmxvZy5lcnJvcihlKVxuICAgICAgICAgICAgaWYgKHByb2Nlc3MuYXJndi5pbmNsdWRlcygnLS1kZWJ1ZycpKSB7XG4gICAgICAgICAgICAgIHRocm93IGVcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0pKCkuY2F0Y2goZSA9PiB7XG4gICAgICAgICAgY3R4LmxvZy5lcnJvcihlKVxuICAgICAgICB9KVxuICAgICAgfSlcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBzZXR0aW5nXG4iLCJpbXBvcnQgeyBJUGljR28sIElQbHVnaW5Db25maWcsIElCdWlsZEluQ29tcHJlc3NPcHRpb25zIH0gZnJvbSAnLi4vLi4vdHlwZXMnXG5pbXBvcnQgeyBjcmVhdGVGaWVsZCB9IGZyb20gJy4uL3VwbG9hZGVyL3V0aWxzJ1xuXG5jb25zdCBjb25maWcgPSAoY3R4OiBJUGljR28pOiBJUGx1Z2luQ29uZmlnW10gPT4ge1xuICBjb25zdCB1c2VyQ29uZmlnID0gY3R4LmdldENvbmZpZzxJQnVpbGRJbkNvbXByZXNzT3B0aW9ucz4oJ2J1aWxkSW4uY29tcHJlc3MnKSB8fCB7fVxuICBjb25zdCBjb25maWc6IElQbHVnaW5Db25maWdbXSA9IFtcbiAgICBjcmVhdGVGaWVsZChjdHgsICdjb21wcmVzcycsICdxdWFsaXR5JywgJ2lucHV0JywgdXNlckNvbmZpZy5xdWFsaXR5IHx8IDEwMCwgZmFsc2UsICdCVUlMRElOJyksXG4gICAgY3JlYXRlRmllbGQoY3R4LCAnY29tcHJlc3MnLCAnaXNDb252ZXJ0JywgJ2NvbmZpcm0nLCB1c2VyQ29uZmlnLmlzQ29udmVydCB8fCBmYWxzZSwgZmFsc2UsICdCVUlMRElOJyksXG4gICAgY3JlYXRlRmllbGQoY3R4LCAnY29tcHJlc3MnLCAnY29udmVydEZvcm1hdCcsICdsaXN0JywgdXNlckNvbmZpZy5jb252ZXJ0Rm9ybWF0IHx8ICdqcGcnLCBmYWxzZSwgJ0JVSUxESU4nLCB7XG4gICAgICBjaG9pY2VzOiBbXG4gICAgICAgICdhdmlmJyxcbiAgICAgICAgJ2R6JyxcbiAgICAgICAgJ2ZpdHMnLFxuICAgICAgICAnZ2lmJyxcbiAgICAgICAgJ2hlaWYnLFxuICAgICAgICAnaW5wdXQnLFxuICAgICAgICAnanBlZycsXG4gICAgICAgICdqcGcnLFxuICAgICAgICAnanAyJyxcbiAgICAgICAgJ2p4bCcsXG4gICAgICAgICdtYWdpY2snLFxuICAgICAgICAnb3BlbnNsaWRlJyxcbiAgICAgICAgJ3BkZicsXG4gICAgICAgICdwbmcnLFxuICAgICAgICAncHBtJyxcbiAgICAgICAgJ3JhdycsXG4gICAgICAgICdzdmcnLFxuICAgICAgICAndGlmZicsXG4gICAgICAgICd0aWYnLFxuICAgICAgICAndicsXG4gICAgICAgICd3ZWJwJ1xuICAgICAgXVxuICAgIH0pLFxuICAgIGNyZWF0ZUZpZWxkKGN0eCwgJ2NvbXByZXNzJywgJ2lzUmVTaXplJywgJ2NvbmZpcm0nLCB1c2VyQ29uZmlnLmlzUmVTaXplIHx8IGZhbHNlLCBmYWxzZSwgJ0JVSUxESU4nKSxcbiAgICBjcmVhdGVGaWVsZChjdHgsICdjb21wcmVzcycsICdyZVNpemVXaWR0aCcsICdpbnB1dCcsIHVzZXJDb25maWcucmVTaXplV2lkdGggfHwgNTAwLCBmYWxzZSwgJ0JVSUxESU4nKSxcbiAgICBjcmVhdGVGaWVsZChjdHgsICdjb21wcmVzcycsICdyZVNpemVIZWlnaHQnLCAnaW5wdXQnLCB1c2VyQ29uZmlnLnJlU2l6ZUhlaWdodCB8fCA1MDAsIGZhbHNlLCAnQlVJTERJTicpLFxuICAgIGNyZWF0ZUZpZWxkKFxuICAgICAgY3R4LFxuICAgICAgJ2NvbXByZXNzJyxcbiAgICAgICdza2lwUmVTaXplT2ZTbWFsbEltZycsXG4gICAgICAnY29uZmlybScsXG4gICAgICB1c2VyQ29uZmlnLnNraXBSZVNpemVPZlNtYWxsSW1nIHx8IGZhbHNlLFxuICAgICAgZmFsc2UsXG4gICAgICAnQlVJTERJTidcbiAgICApLFxuICAgIGNyZWF0ZUZpZWxkKFxuICAgICAgY3R4LFxuICAgICAgJ2NvbXByZXNzJyxcbiAgICAgICdpc1JlU2l6ZUJ5UGVyY2VudCcsXG4gICAgICAnY29uZmlybScsXG4gICAgICB1c2VyQ29uZmlnLmlzUmVTaXplQnlQZXJjZW50IHx8IGZhbHNlLFxuICAgICAgZmFsc2UsXG4gICAgICAnQlVJTERJTidcbiAgICApLFxuICAgIGNyZWF0ZUZpZWxkKGN0eCwgJ2NvbXByZXNzJywgJ3JlU2l6ZVBlcmNlbnQnLCAnaW5wdXQnLCB1c2VyQ29uZmlnLnJlU2l6ZVBlcmNlbnQgfHwgNTAsIGZhbHNlLCAnQlVJTERJTicpLFxuICAgIGNyZWF0ZUZpZWxkKGN0eCwgJ2NvbXByZXNzJywgJ2lzRmxpcCcsICdjb25maXJtJywgdXNlckNvbmZpZy5pc0ZsaXAgfHwgZmFsc2UsIGZhbHNlLCAnQlVJTERJTicpLFxuICAgIGNyZWF0ZUZpZWxkKGN0eCwgJ2NvbXByZXNzJywgJ2lzRmxvcCcsICdjb25maXJtJywgdXNlckNvbmZpZy5pc0Zsb3AgfHwgZmFsc2UsIGZhbHNlLCAnQlVJTERJTicpLFxuICAgIGNyZWF0ZUZpZWxkKGN0eCwgJ2NvbXByZXNzJywgJ2lzUm90YXRlJywgJ2NvbmZpcm0nLCB1c2VyQ29uZmlnLmlzUm90YXRlIHx8IGZhbHNlLCBmYWxzZSwgJ0JVSUxESU4nKSxcbiAgICBjcmVhdGVGaWVsZChjdHgsICdjb21wcmVzcycsICdyb3RhdGVEZWdyZWUnLCAnaW5wdXQnLCB1c2VyQ29uZmlnLnJvdGF0ZURlZ3JlZSB8fCA5MCwgZmFsc2UsICdCVUlMRElOJyksXG4gICAgY3JlYXRlRmllbGQoY3R4LCAnY29tcHJlc3MnLCAnaXNSZW1vdmVFeGlmJywgJ2NvbmZpcm0nLCB1c2VyQ29uZmlnLmlzUmVtb3ZlRXhpZiB8fCBmYWxzZSwgZmFsc2UsICdCVUlMRElOJylcbiAgXVxuICByZXR1cm4gY29uZmlnXG59XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgY29uZmlnXG59XG4iLCJpbXBvcnQgeyBJUGljR28sIElQbHVnaW5Db25maWcsIElCdWlsZEluV2F0ZXJNYXJrT3B0aW9ucyB9IGZyb20gJy4uLy4uL3R5cGVzJ1xuaW1wb3J0IHsgY3JlYXRlRmllbGQgfSBmcm9tICcuLi91cGxvYWRlci91dGlscydcblxuY29uc3QgY29uZmlnID0gKGN0eDogSVBpY0dvKTogSVBsdWdpbkNvbmZpZ1tdID0+IHtcbiAgY29uc3QgdXNlckNvbmZpZyA9IGN0eC5nZXRDb25maWc8SUJ1aWxkSW5XYXRlck1hcmtPcHRpb25zPignYnVpbGRJbi53YXRlcm1hcmsnKSB8fCB7fVxuICBjb25zdCBjb25maWc6IElQbHVnaW5Db25maWdbXSA9IFtcbiAgICBjcmVhdGVGaWVsZChjdHgsICd3YXRlcm1hcmsnLCAnaXNBZGRXYXRlcm1hcmsnLCAnY29uZmlybScsIHVzZXJDb25maWcuaXNBZGRXYXRlcm1hcmsgfHwgZmFsc2UsIGZhbHNlLCAnQlVJTERJTicpLFxuICAgIGNyZWF0ZUZpZWxkKGN0eCwgJ3dhdGVybWFyaycsICd3YXRlcm1hcmtUeXBlJywgJ2xpc3QnLCB1c2VyQ29uZmlnLndhdGVybWFya1R5cGUgfHwgJ3RleHQnLCBmYWxzZSwgJ0JVSUxESU4nLCB7XG4gICAgICBjaG9pY2VzOiBbJ3RleHQnLCAnaW1hZ2UnXVxuICAgIH0pLFxuICAgIGNyZWF0ZUZpZWxkKFxuICAgICAgY3R4LFxuICAgICAgJ3dhdGVybWFyaycsXG4gICAgICAnaXNGdWxsU2NyZWVuV2F0ZXJtYXJrJyxcbiAgICAgICdjb25maXJtJyxcbiAgICAgIHVzZXJDb25maWcuaXNGdWxsU2NyZWVuV2F0ZXJtYXJrIHx8IGZhbHNlLFxuICAgICAgZmFsc2UsXG4gICAgICAnQlVJTERJTidcbiAgICApLFxuICAgIGNyZWF0ZUZpZWxkKGN0eCwgJ3dhdGVybWFyaycsICd3YXRlcm1hcmtEZWdyZWUnLCAnaW5wdXQnLCB1c2VyQ29uZmlnLndhdGVybWFya0RlZ3JlZSB8fCAwLCBmYWxzZSwgJ0JVSUxESU4nKSxcbiAgICBjcmVhdGVGaWVsZChjdHgsICd3YXRlcm1hcmsnLCAnd2F0ZXJtYXJrVGV4dCcsICdpbnB1dCcsIHVzZXJDb25maWcud2F0ZXJtYXJrVGV4dCB8fCAnJywgZmFsc2UsICdCVUlMRElOJyksXG4gICAgY3JlYXRlRmllbGQoY3R4LCAnd2F0ZXJtYXJrJywgJ3dhdGVybWFya0ZvbnRQYXRoJywgJ2lucHV0JywgdXNlckNvbmZpZy53YXRlcm1hcmtGb250UGF0aCB8fCAnJywgZmFsc2UsICdCVUlMRElOJyksXG4gICAgY3JlYXRlRmllbGQoXG4gICAgICBjdHgsXG4gICAgICAnd2F0ZXJtYXJrJyxcbiAgICAgICd3YXRlcm1hcmtTY2FsZVJhdGlvJyxcbiAgICAgICdpbnB1dCcsXG4gICAgICB1c2VyQ29uZmlnLndhdGVybWFya1NjYWxlUmF0aW8gfHwgMC4xNSxcbiAgICAgIGZhbHNlLFxuICAgICAgJ0JVSUxESU4nXG4gICAgKSxcbiAgICBjcmVhdGVGaWVsZChcbiAgICAgIGN0eCxcbiAgICAgICd3YXRlcm1hcmsnLFxuICAgICAgJ3dhdGVybWFya0NvbG9yJyxcbiAgICAgICdpbnB1dCcsXG4gICAgICB1c2VyQ29uZmlnLndhdGVybWFya0NvbG9yIHx8ICdyZ2JhKDIwNCwgMjA0LCAyMDQsIDAuNDUpJyxcbiAgICAgIGZhbHNlLFxuICAgICAgJ0JVSUxESU4nXG4gICAgKSxcbiAgICBjcmVhdGVGaWVsZChjdHgsICd3YXRlcm1hcmsnLCAnd2F0ZXJtYXJrSW1hZ2VQYXRoJywgJ2lucHV0JywgdXNlckNvbmZpZy53YXRlcm1hcmtJbWFnZVBhdGggfHwgJycsIGZhbHNlLCAnQlVJTERJTicpLFxuICAgIGNyZWF0ZUZpZWxkKFxuICAgICAgY3R4LFxuICAgICAgJ3dhdGVybWFyaycsXG4gICAgICAnd2F0ZXJtYXJrUG9zaXRpb24nLFxuICAgICAgJ2xpc3QnLFxuICAgICAgdXNlckNvbmZpZy53YXRlcm1hcmtQb3NpdGlvbiB8fCAnc291dGhlYXN0JyxcbiAgICAgIGZhbHNlLFxuICAgICAgJ0JVSUxESU4nLFxuICAgICAge1xuICAgICAgICBjaG9pY2VzOiBbXG4gICAgICAgICAgJ25vcnRoJyxcbiAgICAgICAgICAnbm9ydGhlYXN0JyxcbiAgICAgICAgICAnc291dGhlYXN0JyxcbiAgICAgICAgICAnc291dGgnLFxuICAgICAgICAgICdzb3V0aHdlc3QnLFxuICAgICAgICAgICdub3J0aHdlc3QnLFxuICAgICAgICAgICd3ZXN0JyxcbiAgICAgICAgICAnZWFzdCcsXG4gICAgICAgICAgJ2NlbnRlcicsXG4gICAgICAgICAgJ2NlbnRyZSdcbiAgICAgICAgXVxuICAgICAgfVxuICAgIClcbiAgXVxuICByZXR1cm4gY29uZmlnXG59XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgY29uZmlnXG59XG4iLCJpbXBvcnQgeyBJUGljR28sIElQbHVnaW5Db25maWcgfSBmcm9tICcuLi8uLi90eXBlcydcbmltcG9ydCB7IGNyZWF0ZUZpZWxkIH0gZnJvbSAnLi4vdXBsb2FkZXIvdXRpbHMnXG5cbmNvbnN0IGNvbmZpZyA9IChjdHg6IElQaWNHbyk6IElQbHVnaW5Db25maWdbXSA9PiB7XG4gIGNvbnN0IHVzZXJDb25maWcgPSBjdHguZ2V0Q29uZmlnPGFueT4oJ2J1aWxkSW4ucmVuYW1lJykgfHwge31cbiAgY29uc3QgY29uZmlnOiBJUGx1Z2luQ29uZmlnW10gPSBbXG4gICAgY3JlYXRlRmllbGQoY3R4LCAncmVuYW1lJywgJ2Zvcm1hdCcsICdpbnB1dCcsIHVzZXJDb25maWcuZm9ybWF0IHx8ICd7ZmlsZW5hbWV9JywgZmFsc2UsICdCVUlMRElOJyksXG4gICAgY3JlYXRlRmllbGQoY3R4LCAncmVuYW1lJywgJ2VuYWJsZScsICdjb25maXJtJywgdXNlckNvbmZpZy5lbmFibGUgfHwgZmFsc2UsIGZhbHNlLCAnQlVJTERJTicpXG4gIF1cbiAgcmV0dXJuIGNvbmZpZ1xufVxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIGNvbmZpZ1xufVxuIiwiaW1wb3J0IHsgSVBpY0dvLCBJUGx1Z2luQ29uZmlnIH0gZnJvbSAnLi4vLi4vdHlwZXMnXG5pbXBvcnQgeyBjcmVhdGVGaWVsZCB9IGZyb20gJy4uL3VwbG9hZGVyL3V0aWxzJ1xuXG5jb25zdCBjb25maWcgPSAoY3R4OiBJUGljR28pOiBJUGx1Z2luQ29uZmlnW10gPT4ge1xuICBjb25zdCB1c2VyQ29uZmlnID0gY3R4LmdldENvbmZpZzx7IHNraXBQcm9jZXNzRXh0TGlzdD86IHN0cmluZyB9PignYnVpbGRJbi5za2lwUHJvY2VzcycpIHx8IHt9XG4gIGNvbnN0IGNvbmZpZzogSVBsdWdpbkNvbmZpZ1tdID0gW1xuICAgIGNyZWF0ZUZpZWxkKFxuICAgICAgY3R4LFxuICAgICAgJ3NraXBQcm9jZXNzJyxcbiAgICAgICdza2lwUHJvY2Vzc0V4dExpc3QnLFxuICAgICAgJ2lucHV0JyxcbiAgICAgIHVzZXJDb25maWcuc2tpcFByb2Nlc3NFeHRMaXN0IHx8ICd6aXAscmFyLDd6LHRhcixneix0YXIuZ3osdGFyLmJ6Mix0YXIueHonLFxuICAgICAgZmFsc2UsXG4gICAgICAnQlVJTERJTidcbiAgICApXG4gIF1cbiAgcmV0dXJuIGNvbmZpZ1xufVxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIGNvbmZpZ1xufVxuIiwiaW1wb3J0IHsgSVBpY0dvLCBJUGx1Z2luLCBVbmRlZmluYWJsZSwgSUNMSUNvbmZpZ3MsIElTdHJpbmdLZXlNYXAgfSBmcm9tICcuLi8uLi90eXBlcydcbmltcG9ydCB7IHVwbG9hZGVyVHJhbnNsYXRvcnMgfSBmcm9tICcuL3V0aWxzJ1xuXG5jb25zdCB1c2U6IElQbHVnaW4gPSB7XG4gIGhhbmRsZTogYXN5bmMgKGN0eDogSVBpY0dvKSA9PiB7XG4gICAgY29uc3QgY21kID0gY3R4LmNtZFxuICAgIGNtZC5wcm9ncmFtXG4gICAgICAuY29tbWFuZCgndXNlJylcbiAgICAgIC5hcmd1bWVudHMoJ1ttb2R1bGVdJylcbiAgICAgIC5kZXNjcmlwdGlvbigndXNlIG1vZHVsZXMgb2YgcGljZ28nKVxuICAgICAgLmFjdGlvbigobW9kdWxlOiBzdHJpbmcpID0+IHtcbiAgICAgICAgOyhhc3luYyAoKSA9PiB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGxldCBwcm9tcHRzOiBhbnlbXSA9IFtdXG4gICAgICAgICAgICBjb25zdCBjb25maWc6IElDTElDb25maWdzID0ge1xuICAgICAgICAgICAgICB1cGxvYWRlcjoge1xuICAgICAgICAgICAgICAgIHR5cGU6ICdsaXN0JyxcbiAgICAgICAgICAgICAgICBuYW1lOiAndXBsb2FkZXInLFxuICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICdVc2UgYW4gdXBsb2FkZXInLFxuICAgICAgICAgICAgICAgIGNob2ljZXM6IGN0eC5oZWxwZXIudXBsb2FkZXIuZ2V0SWRMaXN0KCkubWFwKChpdGVtOiBzdHJpbmcpID0+IHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IHVwbG9hZGVyVHJhbnNsYXRvcnMoY3R4KVtpdGVtXSB8fCBpdGVtLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogaXRlbVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6IGN0eC5nZXRDb25maWcoJ3BpY0JlZC51cGxvYWRlcicpIHx8IGN0eC5nZXRDb25maWcoJ3BpY0JlZC5jdXJyZW50JykgfHwgJ3NtbXMnXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIHRyYW5zZm9ybWVyOiB7XG4gICAgICAgICAgICAgICAgdHlwZTogJ2xpc3QnLFxuICAgICAgICAgICAgICAgIG5hbWU6ICd0cmFuc2Zvcm1lcicsXG4gICAgICAgICAgICAgICAgbWVzc2FnZTogJ1VzZSBhIHRyYW5zZm9ybWVyJyxcbiAgICAgICAgICAgICAgICBjaG9pY2VzOiBjdHguaGVscGVyLnRyYW5zZm9ybWVyLmdldElkTGlzdCgpLFxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6IGN0eC5nZXRDb25maWc8VW5kZWZpbmFibGU8c3RyaW5nPj4oJ3BpY0JlZC50cmFuc2Zvcm1lcicpIHx8ICdwYXRoJ1xuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBwbHVnaW5zOiB7XG4gICAgICAgICAgICAgICAgdHlwZTogJ2NoZWNrYm94JyxcbiAgICAgICAgICAgICAgICBuYW1lOiAncGx1Z2lucycsXG4gICAgICAgICAgICAgICAgbWVzc2FnZTogJ1VzZSBwbHVnaW5zJyxcbiAgICAgICAgICAgICAgICBjaG9pY2VzOiBjdHgucGx1Z2luTG9hZGVyLmdldEZ1bGxMaXN0KCksXG4gICAgICAgICAgICAgICAgZGVmYXVsdDogT2JqZWN0LmtleXMoY3R4LmdldENvbmZpZygncGljZ29QbHVnaW5zJykpLmZpbHRlcigoaXRlbTogc3RyaW5nKSA9PlxuICAgICAgICAgICAgICAgICAgY3R4LmdldENvbmZpZyhgcGljZ29QbHVnaW5zLiR7aXRlbX1gKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gaWYgYW4gb3B0aW9uIGlzIHNwZWNpZmljLCB0aGVuIGp1c3Qgc2V0IHRoaXMgb3B0aW9uIGluIGNvbmZpZ1xuICAgICAgICAgICAgaWYgKG1vZHVsZSkge1xuICAgICAgICAgICAgICBpZiAoY29uZmlnW21vZHVsZV0pIHtcbiAgICAgICAgICAgICAgICBwcm9tcHRzLnB1c2goY29uZmlnW21vZHVsZV0pXG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY3R4LmxvZy53YXJuKGBObyBtb2R1bGUgbmFtZWQgJHttb2R1bGV9YClcbiAgICAgICAgICAgICAgICBjdHgubG9nLndhcm4oJ0F2YWlsYWJsZSBtb2R1bGVzIGFyZSB1cGxvYWRlcnx0cmFuc2Zvcm1lcnxwbHVnaW5zJylcbiAgICAgICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcHJvbXB0cyA9IE9iamVjdC5rZXlzKGNvbmZpZykubWFwKChpdGVtOiBzdHJpbmcpID0+IGNvbmZpZ1tpdGVtXSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGFuc3dlciA9IGF3YWl0IGNtZC5pbnF1aXJlci5wcm9tcHQ8YW55Pihwcm9tcHRzKVxuXG4gICAgICAgICAgICAvLyBoYW5kbGUgZm9yIHBsdWdpbnMgb3B0aW9uIGZyb20gQXJyYXkgdG8gb2JqZWN0XG4gICAgICAgICAgICBpZiAoYW5zd2VyLnBsdWdpbnMpIHtcbiAgICAgICAgICAgICAgY29uc3QgcGx1Z2lucyA9IGN0eC5nZXRDb25maWc8SVN0cmluZ0tleU1hcDxib29sZWFuPj4oJ3BpY2dvUGx1Z2lucycpXG4gICAgICAgICAgICAgIE9iamVjdC5rZXlzKHBsdWdpbnMpLmZvckVhY2goKGl0ZW06IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChhbnN3ZXIucGx1Z2lucy5pbmNsdWRlcyhpdGVtKSkge1xuICAgICAgICAgICAgICAgICAgcGx1Z2luc1tpdGVtXSA9IHRydWVcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgcGx1Z2luc1tpdGVtXSA9IGZhbHNlXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAvLyBzYXZlIGNvbmZpZyBmb3IgcGx1Z2luc1xuICAgICAgICAgICAgICBjdHguc2F2ZUNvbmZpZyh7XG4gICAgICAgICAgICAgICAgcGljZ29QbHVnaW5zOiBwbHVnaW5zXG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBzYXZlIGNvbmZpZyBmb3IgdXBsb2FkZXIgJiB0cmFuc2Zvcm1lclxuICAgICAgICAgICAgY3R4LnNhdmVDb25maWcoe1xuICAgICAgICAgICAgICAncGljQmVkLmN1cnJlbnQnOiBhbnN3ZXIudXBsb2FkZXIgfHwgY3R4LmdldENvbmZpZzxzdHJpbmc+KCdwaWNCZWQuY3VycmVudCcpLFxuICAgICAgICAgICAgICAncGljQmVkLnVwbG9hZGVyJzogYW5zd2VyLnVwbG9hZGVyIHx8IGN0eC5nZXRDb25maWc8c3RyaW5nPigncGljQmVkLmN1cnJlbnQnKSxcbiAgICAgICAgICAgICAgJ3BpY0JlZC50cmFuc2Zvcm1lcic6IGFuc3dlci50cmFuc2Zvcm1lciB8fCAncGF0aCdcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICBjdHgubG9nLnN1Y2Nlc3MoJ0NvbmZpZ3VyZSBzYXZlZCBzdWNjZXNzZnVsbHkhJylcbiAgICAgICAgICB9IGNhdGNoIChlOiBhbnkpIHtcbiAgICAgICAgICAgIGN0eC5sb2cuZXJyb3IoZSlcbiAgICAgICAgICAgIGlmIChwcm9jZXNzLmFyZ3YuaW5jbHVkZXMoJy0tZGVidWcnKSkge1xuICAgICAgICAgICAgICB0aHJvdyBlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KSgpLmNhdGNoKGUgPT4ge1xuICAgICAgICAgIGN0eC5sb2cuZXJyb3IoZSlcbiAgICAgICAgfSlcbiAgICAgIH0pXG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgdXNlXG4iLCJpbXBvcnQgeyBJUGljR28sIElQbHVnaW4gfSBmcm9tICcuLi8uLi90eXBlcydcblxuY29uc3QgcHJveHk6IElQbHVnaW4gPSB7XG4gIGhhbmRsZTogKGN0eDogSVBpY0dvKSA9PiB7XG4gICAgY29uc3QgY21kID0gY3R4LmNtZFxuICAgIGNtZC5wcm9ncmFtLm9wdGlvbignLXAsIC0tcHJveHkgPHVybD4nLCAnc2V0IHByb3h5IGZvciB1cGxvYWRpbmcnLCAocHJveHk6IHN0cmluZykgPT4ge1xuICAgICAgY3R4LnNldENvbmZpZyh7XG4gICAgICAgICdwaWNCZWQucHJveHknOiBwcm94eVxuICAgICAgfSlcbiAgICB9KVxuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IHByb3h5XG4iLCJpbXBvcnQgbWF0Y2ggZnJvbSAnbWluaW1hdGNoJ1xuXG5pbXBvcnQgZnMsIHsgZW5zdXJlRGlyU3luYyB9IGZyb20gJ2ZzLWV4dHJhJ1xuaW1wb3J0IHBhdGggZnJvbSAncGF0aCdcbmltcG9ydCBnbG9iYnkgZnJvbSAnZ2xvYmJ5J1xuaW1wb3J0IHsgcmVuZGVyIGFzIGVqc1JlbmRlciB9IGZyb20gJ2VqcydcblxuaW1wb3J0IHsgSVBpY0dvLCBJT3B0aW9ucywgSUZpbGVUcmVlIH0gZnJvbSAnLi4vdHlwZXMnXG5cbi8qKlxuICogR2VuZXJhdGUgdGVtcGxhdGUgZmlsZXMgdG8gZGVzdGluYXRpb24gZmlsZXMuXG4gKiBAcGFyYW0ge1BpY0dvfSBjdHhcbiAqIEBwYXJhbSB7SU9wdGlvbnN9IG9wdGlvbnNcbiAqL1xuY29uc3QgZ2VuZXJhdGUgPSBhc3luYyAoY3R4OiBJUGljR28sIG9wdGlvbnM6IElPcHRpb25zKTogUHJvbWlzZTxhbnk+ID0+IHtcbiAgdHJ5IHtcbiAgICBjb25zdCBvcHRzID0gZ2V0T3B0aW9ucyhvcHRpb25zLnRtcClcbiAgICBjb25zdCBzb3VyY2UgPSBwYXRoLmpvaW4ob3B0aW9ucy50bXAsICd0ZW1wbGF0ZScpXG4gICAgbGV0IGFuc3dlcnMgPSB7fVxuICAgIGlmIChvcHRzLnByb21wdHMgJiYgb3B0cy5wcm9tcHRzLmxlbmd0aCA+IDApIHtcbiAgICAgIGFuc3dlcnMgPSBhd2FpdCBjdHguY21kLmlucXVpcmVyLnByb21wdChvcHRzLnByb21wdHMpXG4gICAgfVxuICAgIGxldCBfZmlsZXM6IHN0cmluZ1tdID0gYXdhaXQgZ2xvYmJ5KFsnKiovKiddLCB7IGN3ZDogc291cmNlLCBkb3Q6IHRydWUgfSkgLy8gZ2V0IGZpbGVzJyBuYW1lIGFycmF5XG4gICAgX2ZpbGVzID0gX2ZpbGVzLmZpbHRlcigoaXRlbTogc3RyaW5nKSA9PiB7XG4gICAgICBsZXQgZ2xvYiA9ICcnXG4gICAgICBPYmplY3Qua2V5cyhvcHRzLmZpbHRlcnMpLmZvckVhY2goKGtleTogc3RyaW5nKSA9PiB7XG4gICAgICAgIGlmIChtYXRjaChpdGVtLCBrZXksIHsgZG90OiB0cnVlIH0pKSB7XG4gICAgICAgICAgZ2xvYiA9IGl0ZW1cbiAgICAgICAgfVxuICAgICAgfSlcbiAgICAgIGlmIChnbG9iKSB7XG4gICAgICAgIC8vIGZpbmQgYSBmaWx0ZXIgZXhwcmVzc2lvblxuICAgICAgICByZXR1cm4gZmlsdGVycyhjdHgsIG9wdHMuZmlsdGVyc1tnbG9iXSwgYW5zd2VycylcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB0cnVlXG4gICAgICB9XG4gICAgfSlcbiAgICBpZiAoX2ZpbGVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgY3R4LmxvZy53YXJuKCdUZW1wbGF0ZSBmaWxlcyBub3QgZm91bmQhJylcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBjb25zdCBmaWxlcyA9IHJlbmRlcihfZmlsZXMsIHNvdXJjZSwgYW5zd2VycylcbiAgICB3cml0ZUZpbGVUcmVlKG9wdGlvbnMuZGVzdCwgZmlsZXMpXG4gICAgaWYgKHR5cGVvZiBvcHRzLmNvbXBsZXRlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBvcHRzLmNvbXBsZXRlKHsgYW5zd2Vycywgb3B0aW9ucywgZmlsZXM6IF9maWxlcywgY3R4IH0pXG4gICAgfVxuICAgIGlmIChvcHRzLmNvbXBsZXRlTWVzc2FnZSkge1xuICAgICAgY3R4LmxvZy5zdWNjZXNzKG9wdHMuY29tcGxldGVNZXNzYWdlKVxuICAgIH1cbiAgICBjdHgubG9nLnN1Y2Nlc3MoJ0RvbmUhJylcbiAgfSBjYXRjaCAoZTogYW55KSB7XG4gICAgY3R4LmxvZy5lcnJvcihlKVxuICB9XG59XG5cbi8qKlxuICogUmV0dXJuIHRoZSBmaWx0ZXJzJyByZXN1bHRcbiAqIEBwYXJhbSBjdHggUGljR29cbiAqIEBwYXJhbSBleHAgY29uZGl0aW9uIGV4cHJlc3Npb25cbiAqIEBwYXJhbSBkYXRhIG9wdGlvbnMgZGF0YVxuICovXG5jb25zdCBmaWx0ZXJzID0gKGN0eDogSVBpY0dvLCBleHA6IGFueSwgZGF0YTogYW55KTogYm9vbGVhbiA9PiB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvcmVzdHJpY3QtcGx1cy1vcGVyYW5kcywgbm8tbmV3LWZ1bmMsIEB0eXBlc2NyaXB0LWVzbGludC9uby1pbXBsaWVkLWV2YWxcbiAgY29uc3QgZm4gPSBuZXcgRnVuY3Rpb24oJ2RhdGEnLCAnd2l0aCAoZGF0YSkgeyByZXR1cm4gJyArIGV4cCArICd9JylcbiAgdHJ5IHtcbiAgICByZXR1cm4gZm4oZGF0YSlcbiAgfSBjYXRjaCAoZSkge1xuICAgIGN0eC5sb2cuZXJyb3IoYEVycm9yIHdoZW4gZXZhbHVhdGluZyBmaWx0ZXIgY29uZGl0aW9uOiAke0pTT04uc3RyaW5naWZ5KGV4cCl9YClcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxufVxuXG4vKipcbiAqIEdldCB0ZW1wbGF0ZSBvcHRpb25zXG4gKiBAcGFyYW0ge3N0cmluZ30gdGVtcGxhdGVQYXRoXG4gKi9cbmNvbnN0IGdldE9wdGlvbnMgPSAodGVtcGxhdGVQYXRoOiBzdHJpbmcpOiBhbnkgPT4ge1xuICBjb25zdCBvcHRpb25zUGF0aCA9IHBhdGguam9pbih0ZW1wbGF0ZVBhdGgsICdpbmRleC5qcycpXG4gIGlmIChmcy5leGlzdHNTeW5jKG9wdGlvbnNQYXRoKSkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdmFyLXJlcXVpcmVzXG4gICAgY29uc3Qgb3B0aW9ucyA9IHJlcXVpcmUob3B0aW9uc1BhdGgpXG4gICAgcmV0dXJuIG9wdGlvbnNcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4ge31cbiAgfVxufVxuXG4vKipcbiAqIFJlbmRlciBmaWxlcyB0byBhIHZpcnR1YWwgdHJlZSBvYmplY3RcbiAqIEBwYXJhbSB7YXJyYXl9IGZpbGVzXG4gKi9cbmNvbnN0IHJlbmRlciA9IChmaWxlczogc3RyaW5nW10sIHNvdXJjZTogc3RyaW5nLCBvcHRpb25zOiBhbnkpOiBhbnkgPT4ge1xuICBjb25zdCBmaWxlVHJlZTogSUZpbGVUcmVlID0ge31cbiAgZmlsZXMuZm9yRWFjaCgoZmlsZVBhdGg6IHN0cmluZyk6IHZvaWQgPT4ge1xuICAgIGNvbnN0IGZpbGUgPSBmcy5yZWFkRmlsZVN5bmMocGF0aC5qb2luKHNvdXJjZSwgZmlsZVBhdGgpLCAndXRmOCcpXG4gICAgY29uc3QgY29udGVudCA9IGVqc1JlbmRlcihmaWxlLCBvcHRpb25zKVxuICAgIGlmIChCdWZmZXIuaXNCdWZmZXIoY29udGVudCkgfHwgL1teXFxzXS8udGVzdChjb250ZW50KSkge1xuICAgICAgZmlsZVRyZWVbZmlsZVBhdGhdID0gY29udGVudFxuICAgIH1cbiAgfSlcbiAgcmV0dXJuIGZpbGVUcmVlXG59XG5cbi8qKlxuICogV3JpdGUgcmVuZGVyZWQgZmlsZXMnIGNvbnRlbnQgdG8gcmVhbCBmaWxlXG4gKiBAcGFyYW0ge3N0cmluZ30gZGlyXG4gKiBAcGFyYW0ge29iamVjdH0gZmlsZXNcbiAqL1xuY29uc3Qgd3JpdGVGaWxlVHJlZSA9IChkaXI6IHN0cmluZywgZmlsZXM6IGFueSk6IHZvaWQgPT4ge1xuICBPYmplY3Qua2V5cyhmaWxlcykuZm9yRWFjaCgobmFtZTogc3RyaW5nKSA9PiB7XG4gICAgY29uc3QgZmlsZVBhdGggPSBwYXRoLmpvaW4oZGlyLCBuYW1lKVxuICAgIGVuc3VyZURpclN5bmMocGF0aC5kaXJuYW1lKGZpbGVQYXRoKSlcbiAgICBmcy53cml0ZUZpbGVTeW5jKGZpbGVQYXRoLCBmaWxlc1tuYW1lXSlcbiAgfSlcbn1cblxuZXhwb3J0IHsgZmlsdGVycywgZ2VuZXJhdGUsIHJlbmRlciwgd3JpdGVGaWxlVHJlZSB9XG4iLCJpbXBvcnQgY2hhbGsgZnJvbSAnY2hhbGsnXG5pbXBvcnQgZG93bmxvYWQgZnJvbSAnZG93bmxvYWQtZ2l0LXJlcG8nXG5pbXBvcnQgZnMgZnJvbSAnZnMtZXh0cmEnXG5pbXBvcnQgeyBob21lZGlyIH0gZnJvbSAnb3MnXG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJ1xuaW1wb3J0IHsgc3luYyB9IGZyb20gJ3JpbXJhZidcblxuaW1wb3J0IHsgZ2VuZXJhdGUgfSBmcm9tICcuLi8uLi91dGlscy9pbml0VXRpbHMnXG5pbXBvcnQgeyBJT3B0aW9ucywgSVBsdWdpbiwgSVBpY0dvIH0gZnJvbSAnLi4vLi4vdHlwZXMnXG5cbmNvbnN0IHJ1biA9IChjdHg6IElQaWNHbywgb3B0aW9uczogSU9wdGlvbnMpOiB2b2lkID0+IHtcbiAgaWYgKG9wdGlvbnMub2ZmbGluZSkge1xuICAgIC8vIG9mZmxpbmUgbW9kZVxuICAgIGlmIChmcy5leGlzdHNTeW5jKG9wdGlvbnMudGVtcGxhdGUpKSB7XG4gICAgICBnZW5lcmF0ZShjdHgsIG9wdGlvbnMpLmNhdGNoKGUgPT4ge1xuICAgICAgICBjdHgubG9nLmVycm9yKGUpXG4gICAgICB9KVxuICAgIH0gZWxzZSB7XG4gICAgICBjdHgubG9nLmVycm9yKGBMb2NhbCB0ZW1wbGF0ZSAke29wdGlvbnMudGVtcGxhdGV9IG5vdCBmb3VuZGApXG4gICAgfVxuICB9IGVsc2Uge1xuICAgIC8vIG9ubGluZSBtb2RlXG4gICAgb3B0aW9ucy50ZW1wbGF0ZSA9ICFvcHRpb25zLmhhc1NsYXNoXG4gICAgICA/ICdQaWNHby9waWNnby10ZW1wbGF0ZS0nICsgb3B0aW9ucy50ZW1wbGF0ZSAvLyBvZmZpY2lhbCB0ZW1wbGF0ZVxuICAgICAgOiBvcHRpb25zLnRlbXBsYXRlXG4gICAgZG93bmxvYWRBbmRHZW5lcmF0ZShjdHgsIG9wdGlvbnMpXG4gIH1cbn1cblxuLyoqXG4gKiBkb3dubG9hZCB0ZW1wbGF0ZSAmIGdlbmVyYXRlXG4gKiBAcGFyYW0geyBQaWNHbyB9IGN0eFxuICogQHBhcmFtIHsgSU9wdGlvbnMgfSBvcHRpb25zXG4gKi9cbmNvbnN0IGRvd25sb2FkQW5kR2VuZXJhdGUgPSAoY3R4OiBJUGljR28sIG9wdGlvbnM6IElPcHRpb25zKTogdm9pZCA9PiB7XG4gIGlmIChmcy5leGlzdHNTeW5jKG9wdGlvbnMudG1wKSkge1xuICAgIHN5bmMob3B0aW9ucy50bXApXG4gIH1cbiAgY3R4LmxvZy5pbmZvKCdUZW1wbGF0ZSBmaWxlcyBhcmUgZG93bmxvYWRpbmcuLi4nKVxuICBkb3dubG9hZChvcHRpb25zLnRlbXBsYXRlLCBvcHRpb25zLnRtcCwgeyBjbG9uZTogb3B0aW9ucy5jbG9uZSB9LCAoZXJyOiBFcnJvcikgPT4ge1xuICAgIGlmIChlcnIpIHtcbiAgICAgIGN0eC5sb2cuZXJyb3IoZXJyKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGN0eC5sb2cuc3VjY2VzcygnVGVtcGxhdGUgZmlsZXMgYXJlIGRvd25sb2FkZWQhJylcbiAgICBnZW5lcmF0ZShjdHgsIG9wdGlvbnMpLmNhdGNoKGUgPT4ge1xuICAgICAgY3R4LmxvZy5lcnJvcihlKVxuICAgIH0pXG4gIH0pXG59XG5cbmNvbnN0IGluaXQ6IElQbHVnaW4gPSB7XG4gIGhhbmRsZTogYXN5bmMgKGN0eDogSVBpY0dvKSA9PiB7XG4gICAgY29uc3QgY21kID0gY3R4LmNtZFxuICAgIGNtZC5wcm9ncmFtXG4gICAgICAuY29tbWFuZCgnaW5pdCcpXG4gICAgICAuYXJndW1lbnRzKCc8dGVtcGxhdGU+IFtwcm9qZWN0XScpXG4gICAgICAub3B0aW9uKCctLWNsb25lJywgJ3VzZSBnaXQgY2xvbmUnKVxuICAgICAgLm9wdGlvbignLS1vZmZsaW5lJywgJ3VzZSBjYWNoZWQgdGVtcGxhdGUnKVxuICAgICAgLmRlc2NyaXB0aW9uKFwiY3JlYXRlIHBpY2dvIHBsdWdpbidzIGRldmVsb3BtZW50IHRlbXBsYXRlc1wiKVxuICAgICAgLmFjdGlvbigodGVtcGxhdGU6IHN0cmluZywgcHJvamVjdDogc3RyaW5nLCBwcm9ncmFtOiBhbnkpID0+IHtcbiAgICAgICAgOyhhc3luYyAoKSA9PiB7XG4gICAgICAgICAgLy8gVGhhbmtzIHRvIHZ1ZS1jbGkgaW5pdDogaHR0cHM6Ly9naXRodWIuY29tL3Z1ZWpzL3Z1ZS1jbGkvYmxvYi9tYXN0ZXIvYmluL3Z1ZS1pbml0XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IGhhc1NsYXNoID0gdGVtcGxhdGUuaW5jbHVkZXMoJy8nKVxuICAgICAgICAgICAgY29uc3QgaW5QbGFjZSA9ICFwcm9qZWN0IHx8IHByb2plY3QgPT09ICcuJ1xuICAgICAgICAgICAgY29uc3QgZGVzdCA9IHBhdGgucmVzb2x2ZShwcm9qZWN0IHx8ICcuJylcbiAgICAgICAgICAgIGNvbnN0IGNsb25lID0gcHJvZ3JhbS5jbG9uZSB8fCBmYWxzZVxuICAgICAgICAgICAgY29uc3Qgb2ZmbGluZSA9IHByb2dyYW0ub2ZmbGluZSB8fCBmYWxzZVxuICAgICAgICAgICAgY29uc3QgdG1wID0gcGF0aC5qb2luKGhvbWVkaXIoKSwgJy5waWNsaXN0L3RlbXBsYXRlcycsIHRlbXBsYXRlLnJlcGxhY2UoL1svOl0vZywgJy0nKSkgLy8gZm9yIGNhY2hpbmcgdGVtcGxhdGVcblxuICAgICAgICAgICAgaWYgKHByb2dyYW0ub2ZmbGluZSkge1xuICAgICAgICAgICAgICB0ZW1wbGF0ZSA9IHRtcFxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBvcHRpb25zID0ge1xuICAgICAgICAgICAgICB0ZW1wbGF0ZSxcbiAgICAgICAgICAgICAgcHJvamVjdCxcbiAgICAgICAgICAgICAgaGFzU2xhc2gsXG4gICAgICAgICAgICAgIGluUGxhY2UsXG4gICAgICAgICAgICAgIGRlc3QsXG4gICAgICAgICAgICAgIGNsb25lLFxuICAgICAgICAgICAgICB0bXAsXG4gICAgICAgICAgICAgIG9mZmxpbmVcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gY2hlY2sgaWYgcHJvamVjdCBpcyBlbXB0eSBvciBleGlzdFxuICAgICAgICAgICAgaWYgKGluUGxhY2UgfHwgZnMuZXhpc3RzU3luYyhkZXN0KSkge1xuICAgICAgICAgICAgICBhd2FpdCBjdHguY21kLmlucXVpcmVyXG4gICAgICAgICAgICAgICAgLnByb21wdChbXG4gICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6ICdjb25maXJtJyxcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogaW5QbGFjZSA/ICdHZW5lcmF0ZSBwcm9qZWN0IGluIGN1cnJlbnQgZGlyZWN0b3J5PycgOiAnVGFyZ2V0IGRpcmVjdG9yeSBleGlzdHMuIENvbnRpbnVlPycsXG4gICAgICAgICAgICAgICAgICAgIG5hbWU6ICdvaydcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBdKVxuICAgICAgICAgICAgICAgIC50aGVuKChhbnN3ZXI6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgICAgaWYgKGFuc3dlci5vaykge1xuICAgICAgICAgICAgICAgICAgICBydW4oY3R4LCBvcHRpb25zKVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAvLyBwcm9qZWN0IGlzIGdpdmVuXG4gICAgICAgICAgICAgIHJ1bihjdHgsIG9wdGlvbnMpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBjYXRjaCAoZTogYW55KSB7XG4gICAgICAgICAgICBjdHgubG9nLmVycm9yKGUpXG4gICAgICAgICAgICBpZiAocHJvY2Vzcy5hcmd2LmluY2x1ZGVzKCctLWRlYnVnJykpIHtcbiAgICAgICAgICAgICAgdGhyb3cgZVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSkoKS5jYXRjaChlID0+IHtcbiAgICAgICAgICBjdHgubG9nLmVycm9yKGUpXG4gICAgICAgIH0pXG4gICAgICB9KVxuICAgICAgLm9uKCctLWhlbHAnLCAoKSA9PiB7XG4gICAgICAgIGNvbnNvbGUubG9nKClcbiAgICAgICAgY29uc29sZS5sb2coJ0V4YW1wbGVzOicpXG4gICAgICAgIGNvbnNvbGUubG9nKClcbiAgICAgICAgY29uc29sZS5sb2coY2hhbGsuZ3JheSgnICAjIGNyZWF0ZSBhIG5ldyBwcm9qZWN0IHdpdGggYW4gb2ZmaWNpYWwgdGVtcGxhdGUnKSlcbiAgICAgICAgY29uc29sZS5sb2coJyAgJCBwaWNnbyBpbml0IHBsdWdpbiBteS1wcm9qZWN0JylcbiAgICAgICAgY29uc29sZS5sb2coKVxuICAgICAgICBjb25zb2xlLmxvZyhjaGFsay5ncmF5KCcgICMgY3JlYXRlIGEgbmV3IHByb2plY3Qgc3RyYWlnaHQgZnJvbSBhIGdpdGh1YiB0ZW1wbGF0ZScpKVxuICAgICAgICBjb25zb2xlLmxvZygnICAkIHBpY2dvIGluaXQgdXNlcm5hbWUvcmVwbyBteS1wcm9qZWN0JylcbiAgICAgICAgY29uc29sZS5sb2coKVxuICAgICAgfSlcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBpbml0XG4iLCJpbXBvcnQgeyBJUGx1Z2luLCBJUGljR28sIElTdHJpbmdLZXlNYXAgfSBmcm9tICcuLi8uLi90eXBlcydcblxuY29uc3QgaTE4bjogSVBsdWdpbiA9IHtcbiAgaGFuZGxlOiAoY3R4OiBJUGljR28pID0+IHtcbiAgICBjb25zdCBjbWQgPSBjdHguY21kXG4gICAgY21kLnByb2dyYW1cbiAgICAgIC5jb21tYW5kKCdpMThuJylcbiAgICAgIC5hcmd1bWVudHMoJ1tsYW5nXScpXG4gICAgICAuZGVzY3JpcHRpb24oJ2NoYW5nZSBsYW5ndWFnZSwgemgtQ04sIHpoLVRXLCBlbicpXG4gICAgICAuYWN0aW9uKGFzeW5jIChsYW5nOiBzdHJpbmcgPSAnJykgPT4ge1xuICAgICAgICBjb25zdCBsaXN0ID0gY3R4LmkxOG4uZ2V0TGFuZ3VhZ2VMaXN0KClcbiAgICAgICAgaWYgKCFsYW5nKSB7XG4gICAgICAgICAgY29uc3QgcHJvbXB0cyA9IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgdHlwZTogJ2xpc3QnLFxuICAgICAgICAgICAgICBuYW1lOiAnaTE4bicsXG4gICAgICAgICAgICAgIGNob2ljZXM6IGxpc3QsXG4gICAgICAgICAgICAgIG1lc3NhZ2U6ICdDaG9vc2UgYSBsYW5ndWFnZScsXG4gICAgICAgICAgICAgIGRlZmF1bHQ6IGN0eC5nZXRDb25maWcoJ3NldHRpbmdzLmxhbmd1YWdlJykgfHwgJ3poLUNOJ1xuICAgICAgICAgICAgfVxuICAgICAgICAgIF1cbiAgICAgICAgICBjb25zdCBhbnN3ZXIgPSBhd2FpdCBjdHguY21kLmlucXVpcmVyLnByb21wdDxJU3RyaW5nS2V5TWFwPHN0cmluZz4+KHByb21wdHMpXG4gICAgICAgICAgbGFuZyA9IGFuc3dlci5pMThuXG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFsaXN0LmluY2x1ZGVzKGxhbmcpKSB7XG4gICAgICAgICAgY3R4LmxvZy53YXJuKCdObyBzdWNoIGxhbmd1YWdlJylcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjdHguaTE4bi5zZXRMYW5ndWFnZShsYW5nKVxuICAgICAgICAgIGN0eC5sb2cuc3VjY2VzcyhgTGFuZ3VhZ2Ugc2V0IHRvICR7bGFuZ31gKVxuICAgICAgICB9XG4gICAgICB9KVxuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IGkxOG5cbiIsImltcG9ydCB7IElQbHVnaW4sIElMaWZlY3ljbGVQbHVnaW5zIH0gZnJvbSAnLi4vdHlwZXMnXG5cbmV4cG9ydCBjbGFzcyBMaWZlY3ljbGVQbHVnaW5zIGltcGxlbWVudHMgSUxpZmVjeWNsZVBsdWdpbnMge1xuICBzdGF0aWMgY3VycmVudFBsdWdpbjogc3RyaW5nIHwgbnVsbFxuXG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgcGx1Z2luXG4gICAqL1xuICBwcml2YXRlIHJlYWRvbmx5IG5hbWU6IHN0cmluZ1xuICAvKipcbiAgICogVGhlIGxpc3Qgb2YgcGx1Z2luc1xuICAgKi9cbiAgcHJpdmF0ZSByZWFkb25seSBsaXN0OiBNYXA8c3RyaW5nLCBJUGx1Z2luPlxuICAvKipcbiAgICogVGhlIG1hcCBvZiBwbHVnaW4gaWRcbiAgICovXG4gIHByaXZhdGUgcmVhZG9ubHkgcGx1Z2luSWRNYXA6IE1hcDxzdHJpbmcsIHN0cmluZ1tdPlxuXG4gIGNvbnN0cnVjdG9yKG5hbWU6IHN0cmluZykge1xuICAgIHRoaXMubmFtZSA9IG5hbWVcbiAgICB0aGlzLmxpc3QgPSBuZXcgTWFwKClcbiAgICB0aGlzLnBsdWdpbklkTWFwID0gbmV3IE1hcCgpXG4gIH1cblxuICByZWdpc3RlcihpZDogc3RyaW5nLCBwbHVnaW46IElQbHVnaW4pOiB2b2lkIHtcbiAgICBpZiAoIWlkKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdpZCBpcyByZXF1aXJlZCEnKVxuICAgIGlmICh0eXBlb2YgcGx1Z2luLmhhbmRsZSAhPT0gJ2Z1bmN0aW9uJykgdGhyb3cgbmV3IFR5cGVFcnJvcigncGx1Z2luLmhhbmRsZSBtdXN0IGJlIGEgZnVuY3Rpb24hJylcbiAgICBpZiAodGhpcy5saXN0LmhhcyhpZCkpIHRocm93IG5ldyBUeXBlRXJyb3IoYCR7dGhpcy5uYW1lfSBkdXBsaWNhdGUgaWQ6ICR7aWR9IWApXG5cbiAgICB0aGlzLmxpc3Quc2V0KGlkLCBwbHVnaW4pXG5cbiAgICBpZiAoTGlmZWN5Y2xlUGx1Z2lucy5jdXJyZW50UGx1Z2luKSB7XG4gICAgICBpZiAodGhpcy5wbHVnaW5JZE1hcC5oYXMoTGlmZWN5Y2xlUGx1Z2lucy5jdXJyZW50UGx1Z2luKSkge1xuICAgICAgICB0aGlzLnBsdWdpbklkTWFwLmdldChMaWZlY3ljbGVQbHVnaW5zLmN1cnJlbnRQbHVnaW4pPy5wdXNoKGlkKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5wbHVnaW5JZE1hcC5zZXQoTGlmZWN5Y2xlUGx1Z2lucy5jdXJyZW50UGx1Z2luLCBbaWRdKVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHVucmVnaXN0ZXIocGx1Z2luTmFtZTogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKHRoaXMucGx1Z2luSWRNYXAuaGFzKHBsdWdpbk5hbWUpKSB7XG4gICAgICBjb25zdCBwbHVnaW5MaXN0ID0gdGhpcy5wbHVnaW5JZE1hcC5nZXQocGx1Z2luTmFtZSlcbiAgICAgIHBsdWdpbkxpc3Q/LmZvckVhY2goKHBsdWdpbjogc3RyaW5nKSA9PiB7XG4gICAgICAgIHRoaXMubGlzdC5kZWxldGUocGx1Z2luKVxuICAgICAgfSlcbiAgICB9XG4gIH1cblxuICBnZXROYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMubmFtZVxuICB9XG5cbiAgZ2V0KGlkOiBzdHJpbmcpOiBJUGx1Z2luIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5saXN0LmdldChpZClcbiAgfVxuXG4gIGdldExpc3QoKTogSVBsdWdpbltdIHtcbiAgICByZXR1cm4gWy4uLnRoaXMubGlzdC52YWx1ZXMoKV1cbiAgfVxuXG4gIGdldElkTGlzdCgpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIFsuLi50aGlzLmxpc3Qua2V5cygpXVxuICB9XG59XG5cbmV4cG9ydCBjb25zdCBzZXRDdXJyZW50UGx1Z2luTmFtZSA9IChuYW1lOiBzdHJpbmcgfCBudWxsID0gbnVsbCk6IHZvaWQgPT4ge1xuICBMaWZlY3ljbGVQbHVnaW5zLmN1cnJlbnRQbHVnaW4gPSBuYW1lXG59XG5cbmV4cG9ydCBjb25zdCBnZXRDdXJyZW50UGx1Z2luTmFtZSA9ICgpOiBzdHJpbmcgfCBudWxsID0+IHtcbiAgcmV0dXJuIExpZmVjeWNsZVBsdWdpbnMuY3VycmVudFBsdWdpblxufVxuXG5leHBvcnQgZGVmYXVsdCBMaWZlY3ljbGVQbHVnaW5zXG4iLCIvKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tbWlzdXNlZC1wcm9taXNlcyAqL1xuaW1wb3J0IHsgQ29tbWFuZCB9IGZyb20gJ2NvbW1hbmRlcidcbmltcG9ydCBpbnF1aXJlciwgeyBJbnF1aXJlciB9IGZyb20gJ2lucXVpcmVyJ1xuXG5pbXBvcnQgY29tbWFuZGVycyBmcm9tICcuLi9wbHVnaW5zL2NvbW1hbmRlcidcbmltcG9ydCB7IGdldEN1cnJlbnRQbHVnaW5OYW1lIH0gZnJvbSAnLi9MaWZlY3ljbGVQbHVnaW5zJ1xuXG5pbXBvcnQgeyBJUGx1Z2luLCBJQ29tbWFuZGVyLCBJUGljR28gfSBmcm9tICcuLi90eXBlcydcblxuZXhwb3J0IGNsYXNzIENvbW1hbmRlciBpbXBsZW1lbnRzIElDb21tYW5kZXIge1xuICBwcml2YXRlIHJlYWRvbmx5IG5hbWUgPSAnY29tbWFuZGVyJ1xuICBzdGF0aWMgY3VycmVudFBsdWdpbjogc3RyaW5nIHwgbnVsbFxuICBwcml2YXRlIHJlYWRvbmx5IGxpc3QgPSBuZXcgTWFwPHN0cmluZywgSVBsdWdpbj4oKVxuICBwcml2YXRlIHJlYWRvbmx5IHBsdWdpbklkTWFwID0gbmV3IE1hcDxzdHJpbmcsIHN0cmluZ1tdPigpXG4gIHByaXZhdGUgcmVhZG9ubHkgY3R4OiBJUGljR29cblxuICBwcm9ncmFtOiBDb21tYW5kXG4gIGlucXVpcmVyOiBJbnF1aXJlclxuXG4gIGNvbnN0cnVjdG9yKGN0eDogSVBpY0dvKSB7XG4gICAgdGhpcy5wcm9ncmFtID0gbmV3IENvbW1hbmQoKVxuICAgIHRoaXMuaW5xdWlyZXIgPSBpbnF1aXJlclxuICAgIHRoaXMuY3R4ID0gY3R4XG4gIH1cblxuICBnZXROYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMubmFtZVxuICB9XG5cbiAgaW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLnByb2dyYW1cbiAgICAgIC52ZXJzaW9uKHByb2Nlc3MuZW52LlBJQ0dPX1ZFUlNJT04sICctdiwgLS12ZXJzaW9uJylcbiAgICAgIC5vcHRpb24oJy1kLCAtLWRlYnVnJywgJ2RlYnVnIG1vZGUnLCAoKSA9PiB7XG4gICAgICAgIHRoaXMuY3R4LnNldENvbmZpZyh7XG4gICAgICAgICAgZGVidWc6IHRydWVcbiAgICAgICAgfSlcbiAgICAgIH0pXG4gICAgICAub3B0aW9uKCctcywgLS1zaWxlbnQnLCAnc2lsZW50IG1vZGUnLCAoKSA9PiB7XG4gICAgICAgIHRoaXMuY3R4LnNldENvbmZpZyh7XG4gICAgICAgICAgc2lsZW50OiB0cnVlXG4gICAgICAgIH0pXG4gICAgICB9KVxuICAgICAgLm9uKCdjb21tYW5kOionLCAoKSA9PiB7XG4gICAgICAgIHRoaXMuY3R4LmxvZy5lcnJvcihcbiAgICAgICAgICBgSW52YWxpZCBjb21tYW5kOiAke3RoaXMucHJvZ3JhbS5hcmdzLmpvaW4oJyAnKX1cXG5TZWUgLS1oZWxwIGZvciBhIGxpc3Qgb2YgYXZhaWxhYmxlIGNvbW1hbmRzLmBcbiAgICAgICAgKVxuICAgICAgICBwcm9jZXNzLmV4aXQoMSlcbiAgICAgIH0pXG5cbiAgICAvLyBidWlsdC1pbiBjb21tYW5kc1xuICAgIGNvbW1hbmRlcnModGhpcy5jdHgpXG4gIH1cblxuICByZWdpc3RlcihpZDogc3RyaW5nLCBwbHVnaW46IElQbHVnaW4pOiB2b2lkIHtcbiAgICBpZiAoIWlkKSB0aHJvdyBuZXcgVHlwZUVycm9yKCduYW1lIGlzIHJlcXVpcmVkIScpXG4gICAgaWYgKHR5cGVvZiBwbHVnaW4uaGFuZGxlICE9PSAnZnVuY3Rpb24nKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdwbHVnaW4uaGFuZGxlIG11c3QgYmUgYSBmdW5jdGlvbiEnKVxuICAgIGlmICh0aGlzLmxpc3QuaGFzKGlkKSkgdGhyb3cgbmV3IFR5cGVFcnJvcihgJHt0aGlzLm5hbWV9IHBsdWdpbiBkdXBsaWNhdGUgaWQ6ICR7aWR9IWApXG4gICAgdGhpcy5saXN0LnNldChpZCwgcGx1Z2luKVxuICAgIGNvbnN0IGN1cnJlbnRQbHVnaW5OYW1lID0gZ2V0Q3VycmVudFBsdWdpbk5hbWUoKVxuICAgIGlmIChjdXJyZW50UGx1Z2luTmFtZSAhPT0gbnVsbCkge1xuICAgICAgaWYgKHRoaXMucGx1Z2luSWRNYXAuaGFzKGN1cnJlbnRQbHVnaW5OYW1lKSkge1xuICAgICAgICB0aGlzLnBsdWdpbklkTWFwLmdldChjdXJyZW50UGx1Z2luTmFtZSk/LnB1c2goaWQpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnBsdWdpbklkTWFwLnNldChjdXJyZW50UGx1Z2luTmFtZSwgW2lkXSlcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICB1bnJlZ2lzdGVyKHBsdWdpbk5hbWU6IHN0cmluZyk6IHZvaWQge1xuICAgIGlmICh0aGlzLnBsdWdpbklkTWFwLmhhcyhwbHVnaW5OYW1lKSkge1xuICAgICAgY29uc3QgcGx1Z2luTGlzdCA9IHRoaXMucGx1Z2luSWRNYXAuZ2V0KHBsdWdpbk5hbWUpXG4gICAgICBwbHVnaW5MaXN0Py5mb3JFYWNoKChwbHVnaW46IHN0cmluZykgPT4ge1xuICAgICAgICB0aGlzLmxpc3QuZGVsZXRlKHBsdWdpbilcbiAgICAgIH0pXG4gICAgfVxuICB9XG5cbiAgbG9hZENvbW1hbmRzKCk6IHZvaWQge1xuICAgIHRoaXMuZ2V0TGlzdCgpLmZvckVhY2goKGl0ZW06IElQbHVnaW4pID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGl0ZW0uaGFuZGxlKHRoaXMuY3R4KVxuICAgICAgfSBjYXRjaCAoZTogYW55KSB7XG4gICAgICAgIHRoaXMuY3R4LmxvZy5lcnJvcihlKVxuICAgICAgfVxuICAgIH0pXG4gIH1cblxuICBnZXQoaWQ6IHN0cmluZyk6IElQbHVnaW4gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLmxpc3QuZ2V0KGlkKVxuICB9XG5cbiAgZ2V0TGlzdCgpOiBJUGx1Z2luW10ge1xuICAgIHJldHVybiBbLi4udGhpcy5saXN0LnZhbHVlcygpXVxuICB9XG5cbiAgZ2V0SWRMaXN0KCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gWy4uLnRoaXMubGlzdC5rZXlzKCldXG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgQ29tbWFuZGVyXG4iLCJpbXBvcnQgcGx1Z2luSGFuZGxlciBmcm9tICcuL3BsdWdpbkhhbmRsZXInXG5pbXBvcnQgY29uZmlnIGZyb20gJy4vY29uZmlnJ1xuaW1wb3J0IHVwbG9hZCBmcm9tICcuL3VwbG9hZCdcbmltcG9ydCBzZXR0aW5nIGZyb20gJy4vc2V0dGluZydcbmltcG9ydCB1c2UgZnJvbSAnLi91c2UnXG5pbXBvcnQgcHJveHkgZnJvbSAnLi9wcm94eSdcbmltcG9ydCBpbml0IGZyb20gJy4vaW5pdCdcbmltcG9ydCBpMThuIGZyb20gJy4vaTE4bidcblxuaW1wb3J0IHsgSVBpY0dvIH0gZnJvbSAnLi4vLi4vdHlwZXMnXG5cbmV4cG9ydCBkZWZhdWx0IChjdHg6IElQaWNHbyk6IHZvaWQgPT4ge1xuICBjdHguY21kLnJlZ2lzdGVyKCdwbHVnaW5IYW5kbGVyJywgcGx1Z2luSGFuZGxlcilcbiAgY3R4LmNtZC5yZWdpc3RlcignY29uZmlnJywgY29uZmlnKVxuICBjdHguY21kLnJlZ2lzdGVyKCdzZXR0aW5nJywgc2V0dGluZylcbiAgY3R4LmNtZC5yZWdpc3RlcigndXBsb2FkJywgdXBsb2FkKVxuICBjdHguY21kLnJlZ2lzdGVyKCd1c2UnLCB1c2UpXG4gIGN0eC5jbWQucmVnaXN0ZXIoJ3Byb3h5JywgcHJveHkpXG4gIGN0eC5jbWQucmVnaXN0ZXIoJ2luaXQnLCBpbml0KVxuICBjdHguY21kLnJlZ2lzdGVyKCdpMThuJywgaTE4bilcbn1cbiIsImV4cG9ydCBlbnVtIElMb2dUeXBlIHtcbiAgc3VjY2VzcyA9ICdzdWNjZXNzJyxcbiAgaW5mbyA9ICdpbmZvJyxcbiAgd2FybiA9ICd3YXJuJyxcbiAgZXJyb3IgPSAnZXJyb3InXG59XG5cbi8qKlxuICogdGhlc2UgZXZlbnRzIHdpbGwgYmUgY2F0Y2hlZCBieSB1c2Vyc1xuICovXG5leHBvcnQgZW51bSBJQnVpbGRJbkV2ZW50IHtcbiAgVVBMT0FEX1BST0dSRVNTID0gJ3VwbG9hZFByb2dyZXNzJyxcbiAgRkFJTEVEID0gJ2ZhaWxlZCcsXG4gIEJFRk9SRV9UUkFOU0ZPUk0gPSAnYmVmb3JlVHJhbnNmb3JtJyxcbiAgQkVGT1JFX1VQTE9BRCA9ICdiZWZvcmVVcGxvYWQnLFxuICBBRlRFUl9VUExPQUQgPSAnYWZ0ZXJVcGxvYWQnLFxuICBGSU5JU0hFRCA9ICdmaW5pc2hlZCcsXG4gIElOU1RBTEwgPSAnaW5zdGFsbCcsXG4gIFVOSU5TVEFMTCA9ICd1bmluc3RhbGwnLFxuICBVUERBVEUgPSAndXBkYXRlJyxcbiAgTk9USUZJQ0FUSU9OID0gJ25vdGlmaWNhdGlvbidcbn1cblxuLyoqXG4gKiB0aGVzZSBldmVudHMgd2lsbCBiZSBjYXRjaGVkIG9ubHkgYnkgcGljZ29cbiAqL1xuZXhwb3J0IGVudW0gSUJ1c0V2ZW50IHtcbiAgQ09ORklHX0NIQU5HRSA9ICdDT05GSUdfQ0hBTkdFJ1xufVxuIiwiaW1wb3J0IGNoYWxrIGZyb20gJ2NoYWxrJ1xuaW1wb3J0IGRheWpzIGZyb20gJ2RheWpzJ1xuaW1wb3J0IGZzLCB7IGNyZWF0ZUZpbGVTeW5jIH0gZnJvbSAnZnMtZXh0cmEnXG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJ1xuaW1wb3J0IHV0aWwgZnJvbSAndXRpbCdcblxuaW1wb3J0IHsgSUxvZ1R5cGUgfSBmcm9tICcuLi91dGlscy9lbnVtJ1xuaW1wb3J0IHsgSUxvZ0FyZ3ZUeXBlLCBJTG9nQXJndlR5cGVXaXRoRXJyb3IsIFVuZGVmaW5hYmxlLCBJTG9nQ29sb3IsIElMb2dnZXIsIElQaWNHbyB9IGZyb20gJy4uL3R5cGVzJ1xuaW1wb3J0IHsgZm9yY2VOdW1iZXIsIGlzRGV2IH0gZnJvbSAnLi4vdXRpbHMvY29tbW9uJ1xuXG5leHBvcnQgY2xhc3MgTG9nZ2VyIGltcGxlbWVudHMgSUxvZ2dlciB7XG4gIHByaXZhdGUgcmVhZG9ubHkgbGV2ZWwgPSB7XG4gICAgW0lMb2dUeXBlLnN1Y2Nlc3NdOiAnZ3JlZW4nLFxuICAgIFtJTG9nVHlwZS5pbmZvXTogJ2JsdWUnLFxuICAgIFtJTG9nVHlwZS53YXJuXTogJ3llbGxvdycsXG4gICAgW0lMb2dUeXBlLmVycm9yXTogJ3JlZCdcbiAgfVxuXG4gIHByaXZhdGUgcmVhZG9ubHkgY3R4OiBJUGljR29cbiAgcHJpdmF0ZSBsb2dMZXZlbCE6IHN0cmluZyB8IHN0cmluZ1tdXG4gIHByaXZhdGUgbG9nUGF0aCE6IHN0cmluZ1xuICBjb25zdHJ1Y3RvcihjdHg6IElQaWNHbykge1xuICAgIHRoaXMuY3R4ID0gY3R4XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZUxvZyh0eXBlOiBJTG9nVHlwZSwgLi4ubXNnOiBJTG9nQXJndlR5cGVXaXRoRXJyb3JbXSk6IHZvaWQge1xuICAgIHRoaXMubG9nTGV2ZWwgPSB0aGlzLmN0eC5nZXRDb25maWcoJ3NldHRpbmdzLmxvZ0xldmVsJylcbiAgICBpZiAoIXRoaXMuY3R4LmdldENvbmZpZzxVbmRlZmluYWJsZTxzdHJpbmc+Pignc2lsZW50JykgJiYgdGhpcy5jaGVja0xvZ0xldmVsKHR5cGUsIHRoaXMubG9nTGV2ZWwpKSB7XG4gICAgICBjb25zdCBsb2dIZWFkZXIgPSBjaGFsa1t0aGlzLmxldmVsW3R5cGVdIGFzIElMb2dDb2xvcl0oYFtQaWNMaXN0ICR7dHlwZS50b1VwcGVyQ2FzZSgpfV06YClcbiAgICAgIGNvbnNvbGUubG9nKGxvZ0hlYWRlciwgLi4ubXNnKVxuICAgICAgdGhpcy5sb2dQYXRoID1cbiAgICAgICAgdGhpcy5jdHguZ2V0Q29uZmlnPFVuZGVmaW5hYmxlPHN0cmluZz4+KCdzZXR0aW5ncy5sb2dQYXRoJykgfHwgcGF0aC5qb2luKHRoaXMuY3R4LmJhc2VEaXIsICcuL3BpY2xpc3QubG9nJylcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMuY2hlY2tMb2dGaWxlSXNMYXJnZSh0aGlzLmxvZ1BhdGgpXG4gICAgICAgICAgaWYgKHJlc3VsdC5pc0xhcmdlKSB7XG4gICAgICAgICAgICBjb25zdCB3YXJuaW5nTXNnID0gYExvZyBmaWxlIGlzIHRvbyBsYXJnZSAoPiAke3Jlc3VsdC5sb2dGaWxlU2l6ZUxpbWl0ISAvIDEwMjQgLyAxMDI0IHx8ICcxMCd9IE1CKSwgcmVjcmVhdGUgbG9nIGZpbGVgXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhjaGFsay55ZWxsb3coJ1tQaWNMaXN0IFdBUk5dOicpLCB3YXJuaW5nTXNnKVxuICAgICAgICAgICAgdGhpcy5yZWNyZWF0ZUxvZ0ZpbGUodGhpcy5sb2dQYXRoKVxuICAgICAgICAgICAgbXNnLnVuc2hpZnQod2FybmluZ01zZylcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5oYW5kbGVXcml0ZUxvZyh0aGlzLmxvZ1BhdGgsIHR5cGUsIC4uLm1zZylcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1tQaWNMaXN0IEVycm9yXSBvbiBjaGVja2luZyBsb2cgZmlsZSBzaXplJywgZSlcbiAgICAgICAgfVxuICAgICAgfSwgMClcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGNoZWNrTG9nRmlsZUlzTGFyZ2UobG9nUGF0aDogc3RyaW5nKToge1xuICAgIGlzTGFyZ2U6IGJvb2xlYW5cbiAgICBsb2dGaWxlU2l6ZT86IG51bWJlclxuICAgIGxvZ0ZpbGVTaXplTGltaXQ/OiBudW1iZXJcbiAgfSB7XG4gICAgaWYgKGZzLmV4aXN0c1N5bmMobG9nUGF0aCkpIHtcbiAgICAgIGNvbnN0IGxvZ0ZpbGVTaXplID0gZnMuc3RhdFN5bmMobG9nUGF0aCkuc2l6ZVxuICAgICAgY29uc3QgbG9nRmlsZVNpemVMaW1pdCA9XG4gICAgICAgIGZvcmNlTnVtYmVyKHRoaXMuY3R4LmdldENvbmZpZzxVbmRlZmluYWJsZTxudW1iZXI+Pignc2V0dGluZ3MubG9nRmlsZVNpemVMaW1pdCcpIHx8IDEwKSAqIDEwMjQgKiAxMDI0IC8vIDEwIE1CIGRlZmF1bHRcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGlzTGFyZ2U6IGxvZ0ZpbGVTaXplID4gbG9nRmlsZVNpemVMaW1pdCxcbiAgICAgICAgbG9nRmlsZVNpemUsXG4gICAgICAgIGxvZ0ZpbGVTaXplTGltaXRcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHsgaXNMYXJnZTogZmFsc2UgfVxuICB9XG5cbiAgcHJpdmF0ZSByZWNyZWF0ZUxvZ0ZpbGUobG9nUGF0aDogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKGZzLmV4aXN0c1N5bmMobG9nUGF0aCkpIHtcbiAgICAgIGZzLnVubGlua1N5bmMobG9nUGF0aClcbiAgICAgIGNyZWF0ZUZpbGVTeW5jKGxvZ1BhdGgpXG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVXcml0ZUxvZyhsb2dQYXRoOiBzdHJpbmcsIHR5cGU6IHN0cmluZywgLi4ubXNnOiBJTG9nQXJndlR5cGVXaXRoRXJyb3JbXSk6IHZvaWQge1xuICAgIHRyeSB7XG4gICAgICBsZXQgbG9nID0gYCR7ZGF5anMoKS5mb3JtYXQoJ1lZWVktTU0tREQgSEg6bW06c3MnKX0gW1BpY0xpc3QgJHt0eXBlLnRvVXBwZXJDYXNlKCl9XSBgXG4gICAgICBtc2cuZm9yRWFjaCgoaXRlbTogSUxvZ0FyZ3ZUeXBlV2l0aEVycm9yKSA9PiB7XG4gICAgICAgIGlmIChpdGVtIGluc3RhbmNlb2YgRXJyb3IgJiYgdHlwZSA9PT0gJ2Vycm9yJykge1xuICAgICAgICAgIGxvZyArPSBgXFxuLS0tLS0tRXJyb3IgU3RhY2sgQmVnaW4tLS0tLS1cXG4ke3V0aWwuZm9ybWF0KGl0ZW0/LnN0YWNrKX1cXG4tLS0tLS0tRXJyb3IgU3RhY2sgRW5kLS0tLS0tLSBgXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKHR5cGVvZiBpdGVtID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgaXRlbSA9IEpTT04uc3RyaW5naWZ5KGl0ZW0sIG51bGwsIDIpXG4gICAgICAgICAgfVxuICAgICAgICAgIGxvZyArPSBgJHtpdGVtIGFzIHN0cmluZ30gYFxuICAgICAgICB9XG4gICAgICB9KVxuICAgICAgbG9nICs9ICdcXG4nXG4gICAgICBmcy5hcHBlbmRGaWxlU3luYyhsb2dQYXRoLCBsb2cpXG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgY29uc29sZS5lcnJvcignW1BpY0xpc3QgRXJyb3JdIG9uIHdyaXRpbmcgbG9nIGZpbGUnLCBlKVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgY2hlY2tMb2dMZXZlbCh0eXBlOiBzdHJpbmcsIGxldmVsOiB1bmRlZmluZWQgfCBzdHJpbmcgfCBzdHJpbmdbXSk6IGJvb2xlYW4ge1xuICAgIGlmIChsZXZlbCA9PT0gdW5kZWZpbmVkIHx8IGxldmVsID09PSAnYWxsJykgcmV0dXJuIHRydWVcbiAgICBpZiAoQXJyYXkuaXNBcnJheShsZXZlbCkpIHtcbiAgICAgIHJldHVybiBsZXZlbC5zb21lKChpdGVtOiBzdHJpbmcpID0+IGl0ZW0gPT09IHR5cGUgfHwgaXRlbSA9PT0gJ2FsbCcpXG4gICAgfVxuICAgIHJldHVybiB0eXBlID09PSBsZXZlbFxuICB9XG5cbiAgc3VjY2VzcyguLi5tc2c6IElMb2dBcmd2VHlwZVtdKTogdm9pZCB7XG4gICAgdGhpcy5oYW5kbGVMb2coSUxvZ1R5cGUuc3VjY2VzcywgLi4ubXNnKVxuICB9XG5cbiAgaW5mbyguLi5tc2c6IElMb2dBcmd2VHlwZVtdKTogdm9pZCB7XG4gICAgdGhpcy5oYW5kbGVMb2coSUxvZ1R5cGUuaW5mbywgLi4ubXNnKVxuICB9XG5cbiAgZXJyb3IoLi4ubXNnOiBJTG9nQXJndlR5cGVXaXRoRXJyb3JbXSk6IHZvaWQge1xuICAgIHRoaXMuaGFuZGxlTG9nKElMb2dUeXBlLmVycm9yLCAuLi5tc2cpXG4gIH1cblxuICB3YXJuKC4uLm1zZzogSUxvZ0FyZ3ZUeXBlW10pOiB2b2lkIHtcbiAgICB0aGlzLmhhbmRsZUxvZyhJTG9nVHlwZS53YXJuLCAuLi5tc2cpXG4gIH1cblxuICBkZWJ1ZyguLi5tc2c6IElMb2dBcmd2VHlwZVtdKTogdm9pZCB7XG4gICAgaWYgKGlzRGV2KCkpIHtcbiAgICAgIHRoaXMuaGFuZGxlTG9nKElMb2dUeXBlLmluZm8sIC4uLm1zZylcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgTG9nZ2VyXG4iLCJpbXBvcnQgeyBzcGF3biB9IGZyb20gJ2Nyb3NzLXNwYXduJ1xuaW1wb3J0IHtcbiAgSVJlc3VsdCxcbiAgSVByb2Nlc3NFbnYsXG4gIElQbHVnaW5Qcm9jZXNzUmVzdWx0LFxuICBJUGx1Z2luSGFuZGxlcixcbiAgSVBsdWdpbkhhbmRsZXJPcHRpb25zLFxuICBVbmRlZmluYWJsZSxcbiAgSVBpY0dvLFxuICBJUGx1Z2luSGFuZGxlclJlc3VsdFxufSBmcm9tICcuLi90eXBlcydcbmltcG9ydCB7IElCdWlsZEluRXZlbnQgfSBmcm9tICcuLi91dGlscy9lbnVtJ1xuaW1wb3J0IHsgZ2V0UHJvY2Vzc1BsdWdpbk5hbWUsIGdldE5vcm1hbFBsdWdpbk5hbWUgfSBmcm9tICcuLi91dGlscy9jb21tb24nXG5pbXBvcnQgeyBJTG9jYWxlc0tleSB9IGZyb20gJy4uL2kxOG4vemgtQ04nXG5cbmV4cG9ydCBjbGFzcyBQbHVnaW5IYW5kbGVyIGltcGxlbWVudHMgSVBsdWdpbkhhbmRsZXIge1xuICAvLyBUaGFua3MgdG8gZmVmbG93IC0+IGh0dHBzOi8vZ2l0aHViLmNvbS9mZWZsb3cvZmVmbG93L2Jsb2IvbWFzdGVyL2xpYi9pbnRlcm5hbC9pbnN0YWxsL3BsdWdpbi5qc1xuICBwcml2YXRlIHJlYWRvbmx5IGN0eDogSVBpY0dvXG4gIGNvbnN0cnVjdG9yKGN0eDogSVBpY0dvKSB7XG4gICAgdGhpcy5jdHggPSBjdHhcbiAgfVxuXG4gIGFzeW5jIGluc3RhbGwoXG4gICAgcGx1Z2luczogc3RyaW5nW10sXG4gICAgb3B0aW9uczogSVBsdWdpbkhhbmRsZXJPcHRpb25zID0ge30sXG4gICAgZW52PzogSVByb2Nlc3NFbnZcbiAgKTogUHJvbWlzZTxJUGx1Z2luSGFuZGxlclJlc3VsdDxib29sZWFuPj4ge1xuICAgIGNvbnN0IGluc3RhbGxlZFBsdWdpbnM6IHN0cmluZ1tdID0gW11cbiAgICBjb25zdCBwcm9jZXNzUGx1Z2lucyA9IHBsdWdpbnNcbiAgICAgIC5tYXAoKGl0ZW06IHN0cmluZykgPT4gaGFuZGxlUGx1Z2luTmFtZVByb2Nlc3ModGhpcy5jdHgsIGl0ZW0pKVxuICAgICAgLmZpbHRlcihpdGVtID0+IHtcbiAgICAgICAgLy8gZGV0ZWN0IGlmIGhhcyBhbHJlYWR5IGluc3RhbGxlZFxuICAgICAgICAvLyBvciB3aWxsIGNhdXNlIGVycm9yXG4gICAgICAgIGlmICh0aGlzLmN0eC5wbHVnaW5Mb2FkZXIuaGFzUGx1Z2luKGl0ZW0ucGtnTmFtZSkpIHtcbiAgICAgICAgICBpbnN0YWxsZWRQbHVnaW5zLnB1c2goaXRlbS5wa2dOYW1lKVxuICAgICAgICAgIHRoaXMuY3R4LmxvZy5zdWNjZXNzKGBQaWNMaXN0IGhhcyBhbHJlYWR5IGluc3RhbGxlZCAke2l0ZW0ucGtnTmFtZX1gKVxuICAgICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgICB9XG4gICAgICAgIC8vIGlmIHNvbWV0aGluZyB3cm9uZywgZmlsdGVyIGl0IG91dFxuICAgICAgICBpZiAoIWl0ZW0uc3VjY2Vzcykge1xuICAgICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlXG4gICAgICB9KVxuICAgIGNvbnN0IGZ1bGxOYW1lTGlzdCA9IHByb2Nlc3NQbHVnaW5zLm1hcChpdGVtID0+IGl0ZW0uZnVsbE5hbWUpXG4gICAgY29uc3QgcGtnTmFtZUxpc3QgPSBwcm9jZXNzUGx1Z2lucy5tYXAoaXRlbSA9PiBpdGVtLnBrZ05hbWUpXG4gICAgaWYgKGZ1bGxOYW1lTGlzdC5sZW5ndGggPiAwKSB7XG4gICAgICAvLyBpbnN0YWxsIHBsdWdpbnMgbXVzdCB1c2UgZnVsbE5hbWVMaXN0OlxuICAgICAgLy8gMS4gaW5zdGFsbCByZW1vdGUgcGFjYWdlXG4gICAgICAvLyAyLiBpbnN0YWxsIGxvY2FsIHBhY2FnZVxuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5leGVjQ29tbWFuZCgnaW5zdGFsbCcsIGZ1bGxOYW1lTGlzdCwgdGhpcy5jdHguYmFzZURpciwgb3B0aW9ucywgZW52KVxuICAgICAgaWYgKCFyZXN1bHQuY29kZSkge1xuICAgICAgICBwa2dOYW1lTGlzdC5mb3JFYWNoKChwbHVnaW5OYW1lOiBzdHJpbmcpID0+IHtcbiAgICAgICAgICB0aGlzLmN0eC5wbHVnaW5Mb2FkZXIucmVnaXN0ZXJQbHVnaW4ocGx1Z2luTmFtZSlcbiAgICAgICAgfSlcbiAgICAgICAgdGhpcy5jdHgubG9nLnN1Y2Nlc3ModGhpcy5jdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQTFVHSU5fSEFORExFUl9QTFVHSU5fSU5TVEFMTF9TVUNDRVNTJykpXG4gICAgICAgIHRoaXMuY3R4LmVtaXQoJ2luc3RhbGxTdWNjZXNzJywge1xuICAgICAgICAgIHRpdGxlOiB0aGlzLmN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BMVUdJTl9IQU5ETEVSX1BMVUdJTl9JTlNUQUxMX1NVQ0NFU1MnKSxcbiAgICAgICAgICBib2R5OiBbLi4ucGtnTmFtZUxpc3QsIC4uLmluc3RhbGxlZFBsdWdpbnNdXG4gICAgICAgIH0pXG4gICAgICAgIGNvbnN0IHJlczogSVBsdWdpbkhhbmRsZXJSZXN1bHQ8dHJ1ZT4gPSB7XG4gICAgICAgICAgc3VjY2VzczogdHJ1ZSxcbiAgICAgICAgICBib2R5OiBbLi4ucGtnTmFtZUxpc3QsIC4uLmluc3RhbGxlZFBsdWdpbnNdXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgZXJyID0gdGhpcy5jdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQTFVHSU5fSEFORExFUl9QTFVHSU5fSU5TVEFMTF9GQUlMRURfUkVBU09OJywge1xuICAgICAgICAgIGNvZGU6IGAke3Jlc3VsdC5jb2RlfWAsXG4gICAgICAgICAgZGF0YTogcmVzdWx0LmRhdGFcbiAgICAgICAgfSlcbiAgICAgICAgdGhpcy5jdHgubG9nLmVycm9yKGVycilcbiAgICAgICAgdGhpcy5jdHguZW1pdCgnaW5zdGFsbEZhaWxlZCcsIHtcbiAgICAgICAgICB0aXRsZTogdGhpcy5jdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQTFVHSU5fSEFORExFUl9QTFVHSU5fSU5TVEFMTF9GQUlMRUQnKSxcbiAgICAgICAgICBib2R5OiBlcnJcbiAgICAgICAgfSlcbiAgICAgICAgY29uc3QgcmVzOiBJUGx1Z2luSGFuZGxlclJlc3VsdDxmYWxzZT4gPSB7XG4gICAgICAgICAgc3VjY2VzczogZmFsc2UsXG4gICAgICAgICAgYm9keTogZXJyXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoaW5zdGFsbGVkUGx1Z2lucy5sZW5ndGggPT09IDApIHtcbiAgICAgIGNvbnN0IGVyciA9IHRoaXMuY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUExVR0lOX0hBTkRMRVJfUExVR0lOX1VOSU5TVEFMTF9GQUlMRURfVkFMSUQnKVxuICAgICAgdGhpcy5jdHgubG9nLmVycm9yKGVycilcbiAgICAgIHRoaXMuY3R4LmVtaXQoJ2luc3RhbGxGYWlsZWQnLCB7XG4gICAgICAgIHRpdGxlOiB0aGlzLmN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BMVUdJTl9IQU5ETEVSX1BMVUdJTl9JTlNUQUxMX0ZBSUxFRCcpLFxuICAgICAgICBib2R5OiBlcnJcbiAgICAgIH0pXG4gICAgICBjb25zdCByZXM6IElQbHVnaW5IYW5kbGVyUmVzdWx0PGZhbHNlPiA9IHtcbiAgICAgICAgc3VjY2VzczogZmFsc2UsXG4gICAgICAgIGJvZHk6IGVyclxuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmN0eC5sb2cuc3VjY2Vzcyh0aGlzLmN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BMVUdJTl9IQU5ETEVSX1BMVUdJTl9JTlNUQUxMX1NVQ0NFU1MnKSlcbiAgICAgIHRoaXMuY3R4LmVtaXQoJ2luc3RhbGxTdWNjZXNzJywge1xuICAgICAgICB0aXRsZTogdGhpcy5jdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQTFVHSU5fSEFORExFUl9QTFVHSU5fSU5TVEFMTF9TVUNDRVNTJyksXG4gICAgICAgIGJvZHk6IFsuLi5wa2dOYW1lTGlzdCwgLi4uaW5zdGFsbGVkUGx1Z2luc11cbiAgICAgIH0pXG4gICAgICBjb25zdCByZXM6IElQbHVnaW5IYW5kbGVyUmVzdWx0PHRydWU+ID0ge1xuICAgICAgICBzdWNjZXNzOiB0cnVlLFxuICAgICAgICBib2R5OiBbLi4ucGtnTmFtZUxpc3QsIC4uLmluc3RhbGxlZFBsdWdpbnNdXG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzXG4gICAgfVxuICB9XG5cbiAgYXN5bmMgdW5pbnN0YWxsKHBsdWdpbnM6IHN0cmluZ1tdKTogUHJvbWlzZTxJUGx1Z2luSGFuZGxlclJlc3VsdDxib29sZWFuPj4ge1xuICAgIGNvbnN0IHByb2Nlc3NQbHVnaW5zID0gcGx1Z2luc1xuICAgICAgLm1hcCgoaXRlbTogc3RyaW5nKSA9PiBoYW5kbGVQbHVnaW5OYW1lUHJvY2Vzcyh0aGlzLmN0eCwgaXRlbSkpXG4gICAgICAuZmlsdGVyKGl0ZW0gPT4gaXRlbS5zdWNjZXNzKVxuICAgIGNvbnN0IHBrZ05hbWVMaXN0ID0gcHJvY2Vzc1BsdWdpbnMubWFwKGl0ZW0gPT4gaXRlbS5wa2dOYW1lKVxuICAgIGlmIChwa2dOYW1lTGlzdC5sZW5ndGggPiAwKSB7XG4gICAgICAvLyB1bmluc3RhbGwgcGx1Z2lucyBtdXN0IHVzZSBwa2dOYW1lTGlzdDpcbiAgICAgIC8vIG5wbSB1bmluc3RhbGwgd2lsbCB1c2UgdGhlIHBhY2thZ2UuanNvbidzIG5hbWVcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuZXhlY0NvbW1hbmQoJ3VuaW5zdGFsbCcsIHBrZ05hbWVMaXN0LCB0aGlzLmN0eC5iYXNlRGlyKVxuICAgICAgaWYgKCFyZXN1bHQuY29kZSkge1xuICAgICAgICBwa2dOYW1lTGlzdC5mb3JFYWNoKChwbHVnaW5OYW1lOiBzdHJpbmcpID0+IHtcbiAgICAgICAgICB0aGlzLmN0eC5wbHVnaW5Mb2FkZXIudW5yZWdpc3RlclBsdWdpbihwbHVnaW5OYW1lKVxuICAgICAgICB9KVxuICAgICAgICB0aGlzLmN0eC5sb2cuc3VjY2Vzcyh0aGlzLmN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BMVUdJTl9IQU5ETEVSX1BMVUdJTl9VTklOU1RBTExfU1VDQ0VTUycpKVxuICAgICAgICB0aGlzLmN0eC5lbWl0KCd1bmluc3RhbGxTdWNjZXNzJywge1xuICAgICAgICAgIHRpdGxlOiB0aGlzLmN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BMVUdJTl9IQU5ETEVSX1BMVUdJTl9VTklOU1RBTExfU1VDQ0VTUycpLFxuICAgICAgICAgIGJvZHk6IHBrZ05hbWVMaXN0XG4gICAgICAgIH0pXG4gICAgICAgIGNvbnN0IHJlczogSVBsdWdpbkhhbmRsZXJSZXN1bHQ8dHJ1ZT4gPSB7XG4gICAgICAgICAgc3VjY2VzczogdHJ1ZSxcbiAgICAgICAgICBib2R5OiBwa2dOYW1lTGlzdFxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXNcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGVyciA9IHRoaXMuY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUExVR0lOX0hBTkRMRVJfUExVR0lOX1VOSU5TVEFMTF9GQUlMRURfUkVBU09OJywge1xuICAgICAgICAgIGNvZGU6IGAke3Jlc3VsdC5jb2RlfWAsXG4gICAgICAgICAgZGF0YTogcmVzdWx0LmRhdGFcbiAgICAgICAgfSlcbiAgICAgICAgdGhpcy5jdHgubG9nLmVycm9yKGVycilcbiAgICAgICAgdGhpcy5jdHguZW1pdCgndW5pbnN0YWxsRmFpbGVkJywge1xuICAgICAgICAgIHRpdGxlOiB0aGlzLmN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BMVUdJTl9IQU5ETEVSX1BMVUdJTl9VTklOU1RBTExfRkFJTEVEJyksXG4gICAgICAgICAgYm9keTogZXJyXG4gICAgICAgIH0pXG4gICAgICAgIGNvbnN0IHJlczogSVBsdWdpbkhhbmRsZXJSZXN1bHQ8ZmFsc2U+ID0ge1xuICAgICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxuICAgICAgICAgIGJvZHk6IGVyclxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXNcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgZXJyID0gdGhpcy5jdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQTFVHSU5fSEFORExFUl9QTFVHSU5fVU5JTlNUQUxMX0ZBSUxFRF9WQUxJRCcpXG4gICAgICB0aGlzLmN0eC5sb2cuZXJyb3IoZXJyKVxuICAgICAgdGhpcy5jdHguZW1pdCgndW5pbnN0YWxsRmFpbGVkJywge1xuICAgICAgICB0aXRsZTogdGhpcy5jdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQTFVHSU5fSEFORExFUl9QTFVHSU5fVU5JTlNUQUxMX0ZBSUxFRCcpLFxuICAgICAgICBib2R5OiBlcnJcbiAgICAgIH0pXG4gICAgICBjb25zdCByZXM6IElQbHVnaW5IYW5kbGVyUmVzdWx0PGZhbHNlPiA9IHtcbiAgICAgICAgc3VjY2VzczogZmFsc2UsXG4gICAgICAgIGJvZHk6IGVyclxuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHVwZGF0ZShcbiAgICBwbHVnaW5zOiBzdHJpbmdbXSxcbiAgICBvcHRpb25zOiBJUGx1Z2luSGFuZGxlck9wdGlvbnMgPSB7fSxcbiAgICBlbnY/OiBJUHJvY2Vzc0VudlxuICApOiBQcm9taXNlPElQbHVnaW5IYW5kbGVyUmVzdWx0PGJvb2xlYW4+PiB7XG4gICAgY29uc3QgcHJvY2Vzc1BsdWdpbnMgPSBwbHVnaW5zXG4gICAgICAubWFwKChpdGVtOiBzdHJpbmcpID0+IGhhbmRsZVBsdWdpbk5hbWVQcm9jZXNzKHRoaXMuY3R4LCBpdGVtKSlcbiAgICAgIC5maWx0ZXIoaXRlbSA9PiBpdGVtLnN1Y2Nlc3MpXG4gICAgY29uc3QgcGtnTmFtZUxpc3QgPSBwcm9jZXNzUGx1Z2lucy5tYXAoaXRlbSA9PiBpdGVtLnBrZ05hbWUpXG4gICAgaWYgKHBrZ05hbWVMaXN0Lmxlbmd0aCA+IDApIHtcbiAgICAgIC8vIHVwZGF0ZSBwbHVnaW5zIG11c3QgdXNlIHBrZ05hbWVMaXN0OlxuICAgICAgLy8gbnBtIHVwZGF0ZSB3aWxsIHVzZSB0aGUgcGFja2FnZS5qc29uJ3MgbmFtZVxuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5leGVjQ29tbWFuZCgndXBkYXRlJywgcGtnTmFtZUxpc3QsIHRoaXMuY3R4LmJhc2VEaXIsIG9wdGlvbnMsIGVudilcbiAgICAgIGlmICghcmVzdWx0LmNvZGUpIHtcbiAgICAgICAgdGhpcy5jdHgubG9nLnN1Y2Nlc3ModGhpcy5jdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQTFVHSU5fSEFORExFUl9QTFVHSU5fVVBEQVRFX1NVQ0NFU1MnKSlcbiAgICAgICAgdGhpcy5jdHguZW1pdCgndXBkYXRlU3VjY2VzcycsIHtcbiAgICAgICAgICB0aXRsZTogdGhpcy5jdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQTFVHSU5fSEFORExFUl9QTFVHSU5fVVBEQVRFX1NVQ0NFU1MnKSxcbiAgICAgICAgICBib2R5OiBwa2dOYW1lTGlzdFxuICAgICAgICB9KVxuICAgICAgICBjb25zdCByZXM6IElQbHVnaW5IYW5kbGVyUmVzdWx0PHRydWU+ID0ge1xuICAgICAgICAgIHN1Y2Nlc3M6IHRydWUsXG4gICAgICAgICAgYm9keTogcGtnTmFtZUxpc3RcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBlcnIgPSB0aGlzLmN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BMVUdJTl9IQU5ETEVSX1BMVUdJTl9VUERBVEVfRkFJTEVEX1JFQVNPTicsIHtcbiAgICAgICAgICBjb2RlOiBgJHtyZXN1bHQuY29kZX1gLFxuICAgICAgICAgIGRhdGE6IHJlc3VsdC5kYXRhXG4gICAgICAgIH0pXG4gICAgICAgIHRoaXMuY3R4LmxvZy5lcnJvcihlcnIpXG4gICAgICAgIHRoaXMuY3R4LmVtaXQoJ3VwZGF0ZUZhaWxlZCcsIHtcbiAgICAgICAgICB0aXRsZTogdGhpcy5jdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQTFVHSU5fSEFORExFUl9QTFVHSU5fVVBEQVRFX0ZBSUxFRCcpLFxuICAgICAgICAgIGJvZHk6IGVyclxuICAgICAgICB9KVxuICAgICAgICBjb25zdCByZXM6IElQbHVnaW5IYW5kbGVyUmVzdWx0PGZhbHNlPiA9IHtcbiAgICAgICAgICBzdWNjZXNzOiBmYWxzZSxcbiAgICAgICAgICBib2R5OiBlcnJcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGVyciA9IHRoaXMuY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUExVR0lOX0hBTkRMRVJfUExVR0lOX1VQREFURV9GQUlMRURfVkFMSUQnKVxuICAgICAgdGhpcy5jdHgubG9nLmVycm9yKGVycilcbiAgICAgIHRoaXMuY3R4LmVtaXQoJ3VwZGF0ZUZhaWxlZCcsIHtcbiAgICAgICAgdGl0bGU6IHRoaXMuY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUExVR0lOX0hBTkRMRVJfUExVR0lOX1VQREFURV9GQUlMRUQnKSxcbiAgICAgICAgYm9keTogZXJyXG4gICAgICB9KVxuICAgICAgY29uc3QgcmVzOiBJUGx1Z2luSGFuZGxlclJlc3VsdDxmYWxzZT4gPSB7XG4gICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxuICAgICAgICBib2R5OiBlcnJcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXNcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGV4ZWNDb21tYW5kKFxuICAgIGNtZDogc3RyaW5nLFxuICAgIG1vZHVsZXM6IHN0cmluZ1tdLFxuICAgIHdoZXJlOiBzdHJpbmcsXG4gICAgb3B0aW9uczogSVBsdWdpbkhhbmRsZXJPcHRpb25zID0ge30sXG4gICAgZW52OiBJUHJvY2Vzc0VudiA9IHt9XG4gICk6IFByb21pc2U8SVJlc3VsdD4ge1xuICAgIC8vIG9wdGlvbnMgZmlyc3RcbiAgICBjb25zdCByZWdpc3RyeSA9IG9wdGlvbnMucmVnaXN0cnkgfHwgdGhpcy5jdHguZ2V0Q29uZmlnPFVuZGVmaW5hYmxlPHN0cmluZz4+KCdzZXR0aW5ncy5yZWdpc3RyeScpXG4gICAgY29uc3QgcHJveHkgPSBvcHRpb25zLnByb3h5IHx8IHRoaXMuY3R4LmdldENvbmZpZzxVbmRlZmluYWJsZTxzdHJpbmc+Pignc2V0dGluZ3MucHJveHknKVxuICAgIHJldHVybiBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZTogYW55KTogdm9pZCA9PiB7XG4gICAgICBsZXQgYXJncyA9IFtjbWRdLmNvbmNhdChtb2R1bGVzKS5jb25jYXQoJy0tY29sb3I9YWx3YXlzJykuY29uY2F0KCctLXNhdmUnKVxuICAgICAgaWYgKHJlZ2lzdHJ5KSB7XG4gICAgICAgIGFyZ3MgPSBhcmdzLmNvbmNhdChgLS1yZWdpc3RyeT0ke3JlZ2lzdHJ5fWApXG4gICAgICB9XG4gICAgICBpZiAocHJveHkpIHtcbiAgICAgICAgYXJncyA9IGFyZ3MuY29uY2F0KGAtLXByb3h5PSR7cHJveHl9YClcbiAgICAgIH1cbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IG5wbSA9IHNwYXduKCducG0nLCBhcmdzLCB7XG4gICAgICAgICAgY3dkOiB3aGVyZSxcbiAgICAgICAgICBlbnY6IE9iamVjdC5hc3NpZ24oe30sIHByb2Nlc3MuZW52LCBlbnYpXG4gICAgICAgIH0pXG5cbiAgICAgICAgbGV0IG91dHB1dCA9ICcnXG4gICAgICAgIG5wbS5zdGRvdXRcbiAgICAgICAgICA/Lm9uKCdkYXRhJywgKGRhdGE6IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgb3V0cHV0ICs9IGRhdGFcbiAgICAgICAgICB9KVxuICAgICAgICAgIC5waXBlKHByb2Nlc3Muc3Rkb3V0KVxuXG4gICAgICAgIG5wbS5zdGRlcnJcbiAgICAgICAgICA/Lm9uKCdkYXRhJywgKGRhdGE6IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgb3V0cHV0ICs9IGRhdGFcbiAgICAgICAgICB9KVxuICAgICAgICAgIC5waXBlKHByb2Nlc3Muc3RkZXJyKVxuXG4gICAgICAgIG5wbS5vbignY2xvc2UnLCAoY29kZTogbnVtYmVyKSA9PiB7XG4gICAgICAgICAgaWYgKCFjb2RlKSB7XG4gICAgICAgICAgICByZXNvbHZlKHsgY29kZTogMCwgZGF0YTogb3V0cHV0IH0pXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlc29sdmUoeyBjb2RlLCBkYXRhOiBvdXRwdXQgfSlcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICAgIC8vIGZvciB1c2VycyB3aG8gaGF2ZW4ndCBpbnN0YWxsZWQgbm9kZS5qc1xuICAgICAgICBucG0ub24oJ2Vycm9yJywgKGVycjogRXJyb3IpID0+IHtcbiAgICAgICAgICB0aGlzLmN0eC5sb2cuZXJyb3IoZXJyKVxuICAgICAgICAgIHRoaXMuY3R4LmxvZy5lcnJvcignTlBNIGlzIG5vdCBpbnN0YWxsZWQnKVxuICAgICAgICAgIHRoaXMuY3R4LmVtaXQoSUJ1aWxkSW5FdmVudC5GQUlMRUQsICdOUE0gaXMgbm90IGluc3RhbGxlZCcpXG4gICAgICAgIH0pXG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHRoaXMuY3R4LmxvZy5lcnJvcihlIGFzIEVycm9yKVxuICAgICAgICB0aGlzLmN0eC5lbWl0KElCdWlsZEluRXZlbnQuRkFJTEVELCBlKVxuICAgICAgfVxuICAgIH0pXG4gIH1cbn1cblxuLyoqXG4gKiB0cmFuc2Zvcm0gdGhlIGlucHV0IHBsdWdpbiBuYW1lIG9yIHBhdGggc3RyaW5nIHRvIHZhbGlkIHJlc3VsdFxuICogQHBhcmFtIGN0eFxuICogQHBhcmFtIG5hbWVPclBhdGhcbiAqL1xuY29uc3QgaGFuZGxlUGx1Z2luTmFtZVByb2Nlc3MgPSAoY3R4OiBJUGljR28sIG5hbWVPclBhdGg6IHN0cmluZyk6IElQbHVnaW5Qcm9jZXNzUmVzdWx0ID0+IHtcbiAgY29uc3QgcmVzID0ge1xuICAgIHN1Y2Nlc3M6IGZhbHNlLFxuICAgIGZ1bGxOYW1lOiAnJyxcbiAgICBwa2dOYW1lOiAnJ1xuICB9XG4gIGNvbnN0IHJlc3VsdCA9IGdldFByb2Nlc3NQbHVnaW5OYW1lKG5hbWVPclBhdGgsIGN0eC5sb2cpXG4gIGlmICghcmVzdWx0KSB7XG4gICAgcmV0dXJuIHJlc1xuICB9XG4gIC8vIGZpcnN0IGdldCByZXN1bHQgdGhlbiBkbyB0aGlzIHByb2Nlc3NcbiAgLy8gb3Igc29tZSBlcnJvciB3aWxsIGxvZyB0d2ljZVxuICBjb25zdCBwa2dOYW1lID0gZ2V0Tm9ybWFsUGx1Z2luTmFtZShyZXN1bHQsIGN0eC5sb2cpXG4gIGlmICghcGtnTmFtZSkge1xuICAgIHJldHVybiByZXNcbiAgfVxuICByZXR1cm4ge1xuICAgIHN1Y2Nlc3M6IHRydWUsXG4gICAgZnVsbE5hbWU6IHJlc3VsdCxcbiAgICBwa2dOYW1lXG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgUGx1Z2luSGFuZGxlclxuIiwiaW1wb3J0IGZzLCB7IHJlYWRKU09OU3luYyB9IGZyb20gJ2ZzLWV4dHJhJ1xuaW1wb3J0IHBhdGggZnJvbSAncGF0aCdcbmltcG9ydCB7IHN5bmMgfSBmcm9tICdyZXNvbHZlJ1xuaW1wb3J0IHsgSUJ1aWxkSW5FdmVudCB9IGZyb20gJy4uL3V0aWxzL2VudW0nXG5pbXBvcnQgeyBJUGljR28sIElQaWNHb1BsdWdpbiwgSVBsdWdpbkxvYWRlciwgSVBpY0dvUGx1Z2luSW50ZXJmYWNlIH0gZnJvbSAnLi4vdHlwZXMvaW5kZXgnXG5pbXBvcnQgeyBzZXRDdXJyZW50UGx1Z2luTmFtZSB9IGZyb20gJy4vTGlmZWN5Y2xlUGx1Z2lucydcblxuLyoqXG4gKiBMb2NhbCBwbHVnaW4gbG9hZGVyLCBmaWxlIHN5c3RlbSBpcyByZXF1aXJlZFxuICovXG5leHBvcnQgY2xhc3MgUGx1Z2luTG9hZGVyIGltcGxlbWVudHMgSVBsdWdpbkxvYWRlciB7XG4gIHByaXZhdGUgcmVhZG9ubHkgY3R4OiBJUGljR29cbiAgcHJpdmF0ZSBsaXN0OiBzdHJpbmdbXSA9IFtdXG4gIHByaXZhdGUgcmVhZG9ubHkgZnVsbExpc3QgPSBuZXcgU2V0PHN0cmluZz4oKVxuICBwcml2YXRlIHJlYWRvbmx5IHBsdWdpbk1hcCA9IG5ldyBNYXA8c3RyaW5nLCBJUGljR29QbHVnaW5JbnRlcmZhY2U+KClcbiAgY29uc3RydWN0b3IoY3R4OiBJUGljR28pIHtcbiAgICB0aGlzLmN0eCA9IGN0eFxuICAgIHRoaXMuaW5pdCgpXG4gIH1cblxuICBwcml2YXRlIGluaXQoKTogdm9pZCB7XG4gICAgY29uc3QgcGFja2FnZVBhdGggPSBwYXRoLmpvaW4odGhpcy5jdHguYmFzZURpciwgJ3BhY2thZ2UuanNvbicpXG4gICAgaWYgKCFmcy5leGlzdHNTeW5jKHBhY2thZ2VQYXRoKSkge1xuICAgICAgY29uc3QgcGtnID0ge1xuICAgICAgICBuYW1lOiAncGljZ28tcGx1Z2lucycsXG4gICAgICAgIGRlc2NyaXB0aW9uOiAncGljZ28tcGx1Z2lucycsXG4gICAgICAgIHJlcG9zaXRvcnk6ICdodHRwczovL2dpdGh1Yi5jb20vS3VpbmdzbWlsZS9QaWNMaXN0LUNvcmUnLFxuICAgICAgICBsaWNlbnNlOiAnTUlUJ1xuICAgICAgfVxuICAgICAgZnMud3JpdGVGaWxlU3luYyhwYWNrYWdlUGF0aCwgSlNPTi5zdHJpbmdpZnkocGtnKSwgJ3V0ZjgnKVxuICAgIH1cbiAgfVxuXG4gIC8vIGdldCBwbHVnaW4gZW50cnlcbiAgcHJpdmF0ZSByZXNvbHZlUGx1Z2luKGN0eDogSVBpY0dvLCBuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gc3luYyhuYW1lLCB7IGJhc2VkaXI6IGN0eC5iYXNlRGlyIH0pXG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICByZXR1cm4gcGF0aC5qb2luKGN0eC5iYXNlRGlyLCAnbm9kZV9tb2R1bGVzJywgbmFtZSlcbiAgICB9XG4gIH1cblxuICAvLyBsb2FkIGFsbCB0aGlyZCBwYXJ0eSBwbHVnaW5cbiAgbG9hZCgpOiBib29sZWFuIHtcbiAgICBjb25zdCBwbHVnaW5EaXIgPSBwYXRoLmpvaW4odGhpcy5jdHguYmFzZURpciwgJ25vZGVfbW9kdWxlcy8nKVxuICAgIC8vIFRoYW5rcyB0byBoZXhvIC0+IGh0dHBzOi8vZ2l0aHViLmNvbS9oZXhvanMvaGV4by9ibG9iL21hc3Rlci9saWIvaGV4by9sb2FkX3BsdWdpbnMuanNcbiAgICBpZiAoIWZzLmV4aXN0c1N5bmMocGx1Z2luRGlyKSkge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuICAgIGNvbnN0IHBhY2thZ2VQYXRoID0gcGF0aC5qb2luKHRoaXMuY3R4LmJhc2VEaXIsICdwYWNrYWdlLmpzb24nKVxuICAgIGNvbnN0IGpzb24gPSByZWFkSlNPTlN5bmMocGFja2FnZVBhdGgpXG4gICAgY29uc3QgZGVwcyA9IE9iamVjdC5rZXlzKGpzb24uZGVwZW5kZW5jaWVzIHx8IHt9KVxuICAgIGNvbnN0IGRldkRlcHMgPSBPYmplY3Qua2V5cyhqc29uLmRldkRlcGVuZGVuY2llcyB8fCB7fSlcbiAgICBjb25zdCBtb2R1bGVzID0gZGVwcy5jb25jYXQoZGV2RGVwcykuZmlsdGVyKChuYW1lOiBzdHJpbmcpID0+IHtcbiAgICAgIGlmICghL15waWNnby1wbHVnaW4tfF5AW14vXStcXC9waWNnby1wbHVnaW4tLy50ZXN0KG5hbWUpKSByZXR1cm4gZmFsc2VcbiAgICAgIGNvbnN0IHBhdGggPSB0aGlzLnJlc29sdmVQbHVnaW4odGhpcy5jdHgsIG5hbWUpXG4gICAgICByZXR1cm4gZnMuZXhpc3RzU3luYyhwYXRoKVxuICAgIH0pXG4gICAgZm9yIChjb25zdCBtb2R1bGUgb2YgbW9kdWxlcykge1xuICAgICAgdGhpcy5yZWdpc3RlclBsdWdpbihtb2R1bGUpXG4gICAgfVxuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICByZWdpc3RlclBsdWdpbihuYW1lOiBzdHJpbmcsIHBsdWdpbj86IElQaWNHb1BsdWdpbik6IHZvaWQge1xuICAgIGlmICghbmFtZSB8fCB0eXBlb2YgbmFtZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHRoaXMuY3R4LmxvZy53YXJuKCdQbGVhc2UgcHJvdmlkZSB2YWxpZCBwbHVnaW4nKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIHRoaXMuZnVsbExpc3QuYWRkKG5hbWUpXG4gICAgdHJ5IHtcbiAgICAgIC8vIHJlZ2lzdGVyIGxvY2FsIHBsdWdpblxuICAgICAgaWYgKCFwbHVnaW4pIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIHRoaXMuY3R4LmdldENvbmZpZyhgcGljZ29QbHVnaW5zLiR7bmFtZX1gKSA9PT0gdHJ1ZSB8fFxuICAgICAgICAgIHRoaXMuY3R4LmdldENvbmZpZyhgcGljZ29QbHVnaW5zLiR7bmFtZX1gKSA9PT0gdW5kZWZpbmVkXG4gICAgICAgICkge1xuICAgICAgICAgIHRoaXMubGlzdC5wdXNoKG5hbWUpXG4gICAgICAgICAgc2V0Q3VycmVudFBsdWdpbk5hbWUobmFtZSlcbiAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLW5vbi1udWxsLWFzc2VydGlvblxuICAgICAgICAgIHRoaXMuZ2V0UGx1Z2luKG5hbWUpIS5yZWdpc3Rlcih0aGlzLmN0eClcbiAgICAgICAgICBjb25zdCBwbHVnaW4gPSBgcGljZ29QbHVnaW5zWyR7bmFtZX1dYFxuICAgICAgICAgIHRoaXMuY3R4LnNhdmVDb25maWcoe1xuICAgICAgICAgICAgW3BsdWdpbl06IHRydWVcbiAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyByZWdpc3RlciBwcm92aWRlZCBwbHVnaW5cbiAgICAgICAgLy8gJiYgd29uJ3Qgd3JpdGUgY29uZmlnIHRvIGZpbGVzXG4gICAgICAgIHRoaXMubGlzdC5wdXNoKG5hbWUpXG4gICAgICAgIHNldEN1cnJlbnRQbHVnaW5OYW1lKG5hbWUpXG4gICAgICAgIGNvbnN0IHBsdWdpbkludGVyZmFjZSA9IHBsdWdpbih0aGlzLmN0eClcbiAgICAgICAgdGhpcy5wbHVnaW5NYXAuc2V0KG5hbWUsIHBsdWdpbkludGVyZmFjZSlcbiAgICAgICAgcGx1Z2luSW50ZXJmYWNlLnJlZ2lzdGVyKHRoaXMuY3R4KVxuICAgICAgfVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRoaXMucGx1Z2luTWFwLmRlbGV0ZShuYW1lKVxuICAgICAgdGhpcy5saXN0ID0gdGhpcy5saXN0LmZpbHRlcigoaXRlbTogc3RyaW5nKSA9PiBpdGVtICE9PSBuYW1lKVxuICAgICAgdGhpcy5mdWxsTGlzdC5kZWxldGUobmFtZSlcbiAgICAgIHRoaXMuY3R4LmxvZy5lcnJvcihlIGFzIEVycm9yKVxuICAgICAgdGhpcy5jdHguZW1pdChJQnVpbGRJbkV2ZW50Lk5PVElGSUNBVElPTiwge1xuICAgICAgICB0aXRsZTogYFBsdWdpbiAke25hbWV9IExvYWQgRXJyb3JgLFxuICAgICAgICBib2R5OiBlXG4gICAgICB9KVxuICAgIH1cbiAgfVxuXG4gIHVucmVnaXN0ZXJQbHVnaW4obmFtZTogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5saXN0ID0gdGhpcy5saXN0LmZpbHRlcigoaXRlbTogc3RyaW5nKSA9PiBpdGVtICE9PSBuYW1lKVxuICAgIHRoaXMuZnVsbExpc3QuZGVsZXRlKG5hbWUpXG4gICAgdGhpcy5wbHVnaW5NYXAuZGVsZXRlKG5hbWUpXG4gICAgc2V0Q3VycmVudFBsdWdpbk5hbWUobmFtZSlcbiAgICB0aGlzLmN0eC5oZWxwZXIudXBsb2FkZXIudW5yZWdpc3RlcihuYW1lKVxuICAgIHRoaXMuY3R4LmhlbHBlci50cmFuc2Zvcm1lci51bnJlZ2lzdGVyKG5hbWUpXG4gICAgdGhpcy5jdHguaGVscGVyLmJlZm9yZVRyYW5zZm9ybVBsdWdpbnMudW5yZWdpc3RlcihuYW1lKVxuICAgIHRoaXMuY3R4LmhlbHBlci5iZWZvcmVVcGxvYWRQbHVnaW5zLnVucmVnaXN0ZXIobmFtZSlcbiAgICB0aGlzLmN0eC5oZWxwZXIuYWZ0ZXJVcGxvYWRQbHVnaW5zLnVucmVnaXN0ZXIobmFtZSlcbiAgICB0aGlzLmN0eC5jbWQudW5yZWdpc3RlcihuYW1lKVxuICAgIHRoaXMuY3R4LnJlbW92ZUNvbmZpZygncGljZ29QbHVnaW5zJywgbmFtZSlcbiAgfVxuXG4gIC8vIGdldCBwbHVnaW4gYnkgbmFtZVxuICBnZXRQbHVnaW4obmFtZTogc3RyaW5nKTogSVBpY0dvUGx1Z2luSW50ZXJmYWNlIHwgdW5kZWZpbmVkIHtcbiAgICBpZiAodGhpcy5wbHVnaW5NYXAuaGFzKG5hbWUpKSB7XG4gICAgICByZXR1cm4gdGhpcy5wbHVnaW5NYXAuZ2V0KG5hbWUpXG4gICAgfVxuICAgIGNvbnN0IHBsdWdpbkRpciA9IHBhdGguam9pbih0aGlzLmN0eC5iYXNlRGlyLCAnbm9kZV9tb2R1bGVzLycpXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby12YXItcmVxdWlyZXNcbiAgICBjb25zdCBwbHVnaW4gPSByZXF1aXJlKHBsdWdpbkRpciArIG5hbWUpKHRoaXMuY3R4KVxuICAgIHRoaXMucGx1Z2luTWFwLnNldChuYW1lLCBwbHVnaW4pXG4gICAgcmV0dXJuIHBsdWdpblxuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgbGlzdCBvZiBlbmFibGVkIHBsdWdpbnNcbiAgICovXG4gIGdldExpc3QoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiB0aGlzLmxpc3RcbiAgfVxuXG4gIGhhc1BsdWdpbihuYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5mdWxsTGlzdC5oYXMobmFtZSlcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGZ1bGwgbGlzdCBvZiBwbHVnaW5zLCB3aGV0aGVyIGl0IGlzIGVuYWJsZWQgb3Igbm90XG4gICAqL1xuICBnZXRGdWxsTGlzdCgpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIFsuLi50aGlzLmZ1bGxMaXN0XVxuICB9XG59XG5leHBvcnQgZGVmYXVsdCBQbHVnaW5Mb2FkZXJcbiIsImltcG9ydCB7IEV2ZW50RW1pdHRlciB9IGZyb20gJ2V2ZW50cydcblxuY29uc3QgZXZlbnRCdXMgPSBuZXcgRXZlbnRFbWl0dGVyKClcblxuZXhwb3J0IHsgZXZlbnRCdXMgfVxuIiwiaW1wb3J0IGF4aW9zIGZyb20gJ2F4aW9zJ1xuaW1wb3J0IHR5cGUgeyBBeGlvc1JlcXVlc3RDb25maWcsIEF4aW9zUmVzcG9uc2UgfSBmcm9tICdheGlvcydcbmltcG9ydCBGb3JtRGF0YSBmcm9tICdmb3JtLWRhdGEnXG5pbXBvcnQgaHR0cHMgZnJvbSAnaHR0cHMnXG5pbXBvcnQgeyBodHRwc092ZXJIdHRwIH0gZnJvbSAndHVubmVsJ1xuaW1wb3J0IHsgVVJMIH0gZnJvbSAndXJsJ1xuXG5pbXBvcnQgdHlwZSB7XG4gIElQaWNHbyxcbiAgVW5kZWZpbmFibGUsXG4gIElDb25maWdDaGFuZ2VQYXlsb2FkLFxuICBJQ29uZmlnLFxuICBJUmVxdWVzdENvbmZpZyxcbiAgSU9sZFJlcU9wdGlvbnMsXG4gIElSZXNwb25zZSxcbiAgSUZ1bGxSZXNwb25zZSxcbiAgSVJlcXVlc3Rcbn0gZnJvbSAnLi4vdHlwZXMnXG5pbXBvcnQgeyBJQnVzRXZlbnQgfSBmcm9tICcuLi91dGlscy9lbnVtJ1xuaW1wb3J0IHsgZXZlbnRCdXMgfSBmcm9tICcuLi91dGlscy9ldmVudEJ1cydcblxuY29uc3QgaHR0cHNBZ2VudCA9IG5ldyBodHRwcy5BZ2VudCh7XG4gIG1heFZlcnNpb246ICdUTFN2MS4yJyxcbiAgbWluVmVyc2lvbjogJ1RMU3YxLjInLFxuICByZWplY3RVbmF1dGhvcml6ZWQ6IGZhbHNlXG59KVxuXG4vLyB0aGFua3MgZm9yIGh0dHBzOi8vZ2l0aHViLmRldi9yZXF1ZXN0L3JlcXVlc3QvYmxvYi9tYXN0ZXIvaW5kZXguanNcbmZ1bmN0aW9uIGFwcGVuZEZvcm1EYXRhKGZvcm06IEZvcm1EYXRhLCBrZXk6IHN0cmluZywgZGF0YTogYW55KTogdm9pZCB7XG4gIGlmICh0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgJiYgJ3ZhbHVlJyBpbiBkYXRhICYmICdvcHRpb25zJyBpbiBkYXRhKSB7XG4gICAgZm9ybS5hcHBlbmQoa2V5LCBkYXRhLnZhbHVlLCBkYXRhLm9wdGlvbnMpXG4gIH0gZWxzZSB7XG4gICAgZm9ybS5hcHBlbmQoa2V5LCBkYXRhKVxuICB9XG59XG5cbmZ1bmN0aW9uIHJlcXVlc3RJbnRlcmNlcHRvcihvcHRpb25zOiBJT2xkUmVxT3B0aW9ucyB8IEF4aW9zUmVxdWVzdENvbmZpZyk6IEF4aW9zUmVxdWVzdENvbmZpZyAmIHtcbiAgX19pc09sZE9wdGlvbnM/OiBib29sZWFuXG59IHtcbiAgbGV0IF9faXNPbGRPcHRpb25zID0gZmFsc2VcbiAgY29uc3Qgb3B0OiBBeGlvc1JlcXVlc3RDb25maWc8YW55PiAmIHtcbiAgICBfX2lzT2xkT3B0aW9ucz86IGJvb2xlYW5cbiAgfSA9IHtcbiAgICAuLi5vcHRpb25zLFxuICAgIHVybDogKG9wdGlvbnMudXJsIGFzIHN0cmluZykgfHwgJycsXG4gICAgaGVhZGVyczogb3B0aW9ucy5oZWFkZXJzIHx8IHt9XG4gIH1cbiAgLy8gdXNlciByZXF1ZXN0IGNvbmZpZyBwcm94eVxuICBpZiAob3B0aW9ucy5wcm94eSkge1xuICAgIGxldCBwcm94eU9wdGlvbnMgPSBvcHRpb25zLnByb3h5XG4gICAgaWYgKHR5cGVvZiBwcm94eU9wdGlvbnMgPT09ICdzdHJpbmcnKSB7XG4gICAgICB0cnkge1xuICAgICAgICBwcm94eU9wdGlvbnMgPSBuZXcgVVJMKG9wdGlvbnMucHJveHkpXG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHByb3h5T3B0aW9ucyA9IGZhbHNlXG4gICAgICAgIG9wdC5wcm94eSA9IGZhbHNlXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZSlcbiAgICAgIH1cbiAgICAgIF9faXNPbGRPcHRpb25zID0gdHJ1ZVxuICAgIH1cbiAgICBpZiAocHJveHlPcHRpb25zKSB7XG4gICAgICBpZiAob3B0aW9ucy51cmw/LnN0YXJ0c1dpdGgoJ2h0dHBzOi8vJykpIHtcbiAgICAgICAgb3B0LnByb3h5ID0gZmFsc2VcbiAgICAgICAgb3B0Lmh0dHBzQWdlbnQgPSBodHRwc092ZXJIdHRwKHtcbiAgICAgICAgICBwcm94eToge1xuICAgICAgICAgICAgaG9zdDogcHJveHlPcHRpb25zPy5ob3N0bmFtZSxcbiAgICAgICAgICAgIHBvcnQ6IHBhcnNlSW50KHByb3h5T3B0aW9ucz8ucG9ydCwgMTApXG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb3B0LnByb3h5ID0ge1xuICAgICAgICAgIGhvc3Q6IHByb3h5T3B0aW9ucy5ob3N0bmFtZSxcbiAgICAgICAgICBwb3J0OiBwYXJzZUludChwcm94eU9wdGlvbnMucG9ydCwgMTApLFxuICAgICAgICAgIHByb3RvY29sOiAnaHR0cCdcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuICBpZiAoJ2Zvcm1EYXRhJyBpbiBvcHRpb25zKSB7XG4gICAgY29uc3QgZm9ybSA9IG5ldyBGb3JtRGF0YSgpXG4gICAgZm9yIChjb25zdCBrZXkgaW4gb3B0aW9ucy5mb3JtRGF0YSkge1xuICAgICAgY29uc3QgZGF0YSA9IG9wdGlvbnMuZm9ybURhdGFba2V5XVxuICAgICAgYXBwZW5kRm9ybURhdGEoZm9ybSwga2V5LCBkYXRhKVxuICAgIH1cbiAgICBvcHQuZGF0YSA9IGZvcm1cbiAgICBvcHQuaGVhZGVycyA9IE9iamVjdC5hc3NpZ24ob3B0LmhlYWRlcnMgfHwge30sIGZvcm0uZ2V0SGVhZGVycygpKVxuICAgIF9faXNPbGRPcHRpb25zID0gdHJ1ZVxuICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgdGhpcyBpcyBvbGQgb3B0aW9uXG4gICAgZGVsZXRlIG9wdC5mb3JtRGF0YVxuICB9XG4gIGlmICgnYm9keScgaW4gb3B0aW9ucykge1xuICAgIG9wdC5kYXRhID0gb3B0aW9ucy5ib2R5XG4gICAgX19pc09sZE9wdGlvbnMgPSB0cnVlXG4gICAgLy8gQHRzLWV4cGVjdC1lcnJvciB0aGlzIGlzIG9sZCBvcHRpb25zXG4gICAgZGVsZXRlIG9wdC5ib2R5XG4gIH1cbiAgaWYgKCdxcycgaW4gb3B0aW9ucykge1xuICAgIG9wdC5wYXJhbXMgPSBvcHRpb25zLnFzXG4gICAgX19pc09sZE9wdGlvbnMgPSB0cnVlXG4gIH1cbiAgb3B0Ll9faXNPbGRPcHRpb25zID0gX19pc09sZE9wdGlvbnNcbiAgcmV0dXJuIG9wdFxufVxuXG5mdW5jdGlvbiByZXNwb25zZUludGVyY2VwdG9yKHJlc3BvbnNlOiBBeGlvc1Jlc3BvbnNlKTogSUZ1bGxSZXNwb25zZSB7XG4gIHJldHVybiB7XG4gICAgLi4ucmVzcG9uc2UsXG4gICAgc3RhdHVzQ29kZTogcmVzcG9uc2Uuc3RhdHVzLFxuICAgIGJvZHk6IHJlc3BvbnNlLmRhdGFcbiAgfVxufVxuXG5mdW5jdGlvbiByZXNwb25zZUVycm9ySGFuZGxlcihlcnJvcjogYW55KSB7XG4gIGNvbnN0IGVycm9yT2JqID0ge1xuICAgIG1ldGhvZDogZXJyb3I/LmNvbmZpZz8ubWV0aG9kPy50b1VwcGVyQ2FzZSgpIHx8ICcnLFxuICAgIHVybDogZXJyb3I/LmNvbmZpZz8udXJsIHx8ICcnLFxuICAgIHN0YXR1c0NvZGU6IGVycm9yPy5yZXNwb25zZT8uc3RhdHVzIHx8IDAsXG4gICAgbWVzc2FnZTogZXJyb3I/Lm1lc3NhZ2UgfHwgJycsXG4gICAgc3RhY2s6IGVycm9yPy5zdGFjayB8fCB7fSxcbiAgICByZXNwb25zZToge1xuICAgICAgc3RhdHVzOiBlcnJvcj8ucmVzcG9uc2U/LnN0YXR1cyB8fCAwLFxuICAgICAgc3RhdHVzQ29kZTogZXJyb3I/LnJlc3BvbnNlPy5zdGF0dXMgfHwgMCxcbiAgICAgIGJvZHk6IGVycm9yPy5yZXNwb25zZT8uZGF0YSB8fCAnJ1xuICAgIH1cbiAgfVxuICByZXR1cm4gUHJvbWlzZS5yZWplY3QoZXJyb3JPYmopXG59XG5cbmV4cG9ydCBjbGFzcyBSZXF1ZXN0IGltcGxlbWVudHMgSVJlcXVlc3Qge1xuICBwcml2YXRlIHJlYWRvbmx5IGN0eDogSVBpY0dvXG4gIHByaXZhdGUgcHJveHk6IFVuZGVmaW5hYmxlPHN0cmluZz4gPSAnJ1xuICBvcHRpb25zOiBBeGlvc1JlcXVlc3RDb25maWc8YW55PiA9IHt9XG4gIGNvbnN0cnVjdG9yKGN0eDogSVBpY0dvKSB7XG4gICAgdGhpcy5jdHggPSBjdHhcbiAgICB0aGlzLmluaXQoKVxuICAgIGV2ZW50QnVzLm9uKElCdXNFdmVudC5DT05GSUdfQ0hBTkdFLCAoZGF0YTogSUNvbmZpZ0NoYW5nZVBheWxvYWQ8c3RyaW5nIHwgSUNvbmZpZ1sncGljQmVkJ10+KSA9PiB7XG4gICAgICBzd2l0Y2ggKGRhdGEuY29uZmlnTmFtZSkge1xuICAgICAgICBjYXNlICdwaWNCZWQnOlxuICAgICAgICAgIGlmICgoZGF0YS52YWx1ZSBhcyBJQ29uZmlnWydwaWNCZWQnXSk/LnByb3h5KSB7XG4gICAgICAgICAgICB0aGlzLnByb3h5ID0gKGRhdGEudmFsdWUgYXMgSUNvbmZpZ1sncGljQmVkJ10pLnByb3h5XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgJ3BpY0JlZC5wcm94eSc6XG4gICAgICAgICAgdGhpcy5wcm94eSA9IGRhdGEudmFsdWUgYXMgc3RyaW5nXG4gICAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICB9KVxuICB9XG5cbiAgcHJpdmF0ZSBpbml0KCk6IHZvaWQge1xuICAgIGNvbnN0IHByb3h5ID0gdGhpcy5jdHguZ2V0Q29uZmlnPFVuZGVmaW5hYmxlPHN0cmluZz4+KCdwaWNCZWQucHJveHknKVxuICAgIGlmIChwcm94eSkge1xuICAgICAgdGhpcy5wcm94eSA9IHByb3h5XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVQcm94eSgpOiBBeGlvc1JlcXVlc3RDb25maWdbJ3Byb3h5J10gfCBmYWxzZSB7XG4gICAgaWYgKHRoaXMucHJveHkpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHByb3h5T3B0aW9ucyA9IG5ldyBVUkwodGhpcy5wcm94eSlcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBob3N0OiBwcm94eU9wdGlvbnMuaG9zdG5hbWUsXG4gICAgICAgICAgcG9ydDogcGFyc2VJbnQocHJveHlPcHRpb25zLnBvcnQgfHwgJzAnLCAxMCksXG4gICAgICAgICAgcHJvdG9jb2w6IHByb3h5T3B0aW9ucy5wcm90b2NvbFxuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIC8qIGVtcHR5ICovXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgLy8gIzY0IGR5bmFtaWMgZ2V0IHByb3h5IHZhbHVlXG4gIHJlcXVlc3Q8XG4gICAgVCxcbiAgICBVIGV4dGVuZHMgSVJlcXVlc3RDb25maWc8VT4gZXh0ZW5kcyBJT2xkUmVxT3B0aW9uc1xuICAgICAgPyBJT2xkUmVxT3B0aW9uc1xuICAgICAgOiBJUmVxdWVzdENvbmZpZzxVPiBleHRlbmRzIEF4aW9zUmVxdWVzdENvbmZpZ1xuICAgICAgICA/IEF4aW9zUmVxdWVzdENvbmZpZ1xuICAgICAgICA6IG5ldmVyXG4gID4ob3B0aW9uczogVSk6IFByb21pc2U8SVJlc3BvbnNlPFQsIFU+PiB7XG4gICAgdGhpcy5vcHRpb25zLnByb3h5ID0gdGhpcy5oYW5kbGVQcm94eSgpXG4gICAgdGhpcy5vcHRpb25zLmhlYWRlcnMgPSBvcHRpb25zLmhlYWRlcnMgfHwge31cbiAgICB0aGlzLm9wdGlvbnMubWF4Qm9keUxlbmd0aCA9IEluZmluaXR5XG4gICAgdGhpcy5vcHRpb25zLm1heENvbnRlbnRMZW5ndGggPSBJbmZpbml0eVxuICAgIGlmICh0aGlzLm9wdGlvbnMucHJveHkgJiYgb3B0aW9ucy51cmw/LnN0YXJ0c1dpdGgoJ2h0dHBzOi8vJykpIHtcbiAgICAgIHRoaXMub3B0aW9ucy5odHRwc0FnZW50ID0gaHR0cHNPdmVySHR0cCh7XG4gICAgICAgIHByb3h5OiB7XG4gICAgICAgICAgaG9zdDogdGhpcy5vcHRpb25zLnByb3h5Lmhvc3QsXG4gICAgICAgICAgcG9ydDogdGhpcy5vcHRpb25zLnByb3h5LnBvcnRcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICAgIHRoaXMub3B0aW9ucy5wcm94eSA9IGZhbHNlXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMub3B0aW9ucy5odHRwc0FnZW50ID0gaHR0cHNBZ2VudFxuICAgIH1cbiAgICAvLyAhTk9USUNFIHRoaXMub3B0aW9ucyAhPT0gb3B0aW9uc1xuICAgIC8vIHRoaXMub3B0aW9ucyBpcyB0aGUgZGVmYXVsdCBvcHRpb25zXG4gICAgY29uc3QgaW5zdGFuY2UgPSBheGlvcy5jcmVhdGUodGhpcy5vcHRpb25zKVxuICAgIGluc3RhbmNlLmludGVyY2VwdG9ycy5yZXNwb25zZS51c2UocmVzcG9uc2VJbnRlcmNlcHRvciwgcmVzcG9uc2VFcnJvckhhbmRsZXIpXG5cbiAgICAvLyBjb21wYXRpYmxlIHdpdGggb2xkIHJlcXVlc3Qgb3B0aW9ucyB0byBuZXcgb3B0aW9uc1xuICAgIGNvbnN0IG9wdCA9IHJlcXVlc3RJbnRlcmNlcHRvcihvcHRpb25zKVxuXG4gICAgaW5zdGFuY2UuaW50ZXJjZXB0b3JzLnJlcXVlc3QudXNlKGZ1bmN0aW9uIChvYmopIHtcbiAgICAgIC8vIGhhbmRsZSBDb250ZW50LVR5cGVcbiAgICAgIGxldCBjb250ZW50VHlwZSA9ICcnXG4gICAgICBpZiAob2JqPy5oZWFkZXJzPy5jb250ZW50VHlwZSkge1xuICAgICAgICBjb250ZW50VHlwZSA9IG9iai5oZWFkZXJzLmNvbnRlbnRUeXBlIGFzIHN0cmluZ1xuICAgICAgICBkZWxldGUgb2JqLmhlYWRlcnMuY29udGVudFR5cGVcbiAgICAgIH0gZWxzZSBpZiAob2JqPy5oZWFkZXJzPy5Db250ZW50VHlwZSkge1xuICAgICAgICBjb250ZW50VHlwZSA9IG9iai5oZWFkZXJzLkNvbnRlbnRUeXBlIGFzIHN0cmluZ1xuICAgICAgICBkZWxldGUgb2JqLmhlYWRlcnMuQ29udGVudFR5cGVcbiAgICAgIH0gZWxzZSBpZiAob2JqPy5oZWFkZXJzPy5bJ2NvbnRlbnQtdHlwZSddKSB7XG4gICAgICAgIGNvbnRlbnRUeXBlID0gb2JqLmhlYWRlcnNbJ2NvbnRlbnQtdHlwZSddIGFzIHN0cmluZ1xuICAgICAgICBkZWxldGUgb2JqLmhlYWRlcnNbJ2NvbnRlbnQtdHlwZSddXG4gICAgICB9XG4gICAgICBpZiAoY29udGVudFR5cGUgIT09ICcnICYmIG9iai5oZWFkZXJzKSB7XG4gICAgICAgIG9iai5oZWFkZXJzWydDb250ZW50LVR5cGUnXSA9IGNvbnRlbnRUeXBlXG4gICAgICB9XG4gICAgICByZXR1cm4gb2JqXG4gICAgfSlcbiAgICBpZiAoJ3Jlc29sdmVXaXRoRnVsbFJlc3BvbnNlJyBpbiBvcHRpb25zICYmIG9wdGlvbnMucmVzb2x2ZVdpdGhGdWxsUmVzcG9uc2UpIHtcbiAgICAgIHJldHVybiBpbnN0YW5jZS5yZXF1ZXN0KG9wdClcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGluc3RhbmNlLnJlcXVlc3Qob3B0KS50aGVuKHJlcyA9PiB7XG4gICAgICAgIC8vIHVzZSBvbGQgcmVxdWVzdCBvcHRpb24gZm9ybWF0XG4gICAgICAgIGlmIChvcHQuX19pc09sZE9wdGlvbnMpIHtcbiAgICAgICAgICBpZiAoJ2pzb24nIGluIG9wdGlvbnMpIHtcbiAgICAgICAgICAgIGlmIChvcHRpb25zLmpzb24pIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHJlcy5kYXRhXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeShyZXMuZGF0YSlcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIHJlcy5kYXRhXG4gICAgICAgIH1cbiAgICAgIH0pIGFzIFByb21pc2U8SVJlc3BvbnNlPFQsIFU+PlxuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBSZXF1ZXN0XG4iLCJpbXBvcnQgeyBJUGljR28gfSBmcm9tICcuLi90eXBlcydcblxuLyoqXG4gKiBjcmVhdGUgYW4gdW5pcXVlIGNvbnRleHQgZm9yIGVhY2ggdXBsb2FkIHByb2Nlc3NcbiAqIEBwYXJhbSBjdHhcbiAqL1xuZXhwb3J0IGNvbnN0IGNyZWF0ZUNvbnRleHQgPSAoY3R4OiBJUGljR28pOiBJUGljR28gPT4ge1xuICByZXR1cm4ge1xuICAgIGNvbmZpZ1BhdGg6IGN0eC5jb25maWdQYXRoLFxuICAgIGJhc2VEaXI6IGN0eC5iYXNlRGlyLFxuICAgIGxvZzogY3R4LmxvZyxcbiAgICBjbWQ6IGN0eC5jbWQsXG4gICAgb3V0cHV0OiBbXSxcbiAgICBpbnB1dDogW10sXG4gICAgcmF3SW5wdXQ6IFtdLFxuICAgIHByb2Nlc3NlZElucHV0OiBbXSxcbiAgICBwbHVnaW5Mb2FkZXI6IGN0eC5wbHVnaW5Mb2FkZXIsXG4gICAgcGx1Z2luSGFuZGxlcjogY3R4LnBsdWdpbkhhbmRsZXIsXG4gICAgUmVxdWVzdDogY3R4LlJlcXVlc3QsXG4gICAgaGVscGVyOiBjdHguaGVscGVyLFxuICAgIFZFUlNJT046IGN0eC5WRVJTSU9OLFxuICAgIEdVSV9WRVJTSU9OOiBjdHguR1VJX1ZFUlNJT04sXG4gICAgcmVxdWVzdDogY3R4LnJlcXVlc3QsXG4gICAgaTE4bjogY3R4LmkxOG4sXG4gICAgZ2V0Q29uZmlnOiBjdHguZ2V0Q29uZmlnLmJpbmQoY3R4KSxcbiAgICBzYXZlQ29uZmlnOiBjdHguc2F2ZUNvbmZpZy5iaW5kKGN0eCksXG4gICAgcmVtb3ZlQ29uZmlnOiBjdHgucmVtb3ZlQ29uZmlnLmJpbmQoY3R4KSxcbiAgICBzZXRDb25maWc6IGN0eC5zZXRDb25maWcuYmluZChjdHgpLFxuICAgIHVuc2V0Q29uZmlnOiBjdHgudW5zZXRDb25maWcuYmluZChjdHgpLFxuICAgIHVwbG9hZDogY3R4LnVwbG9hZC5iaW5kKGN0eCksXG4gICAgdXBsb2FkUmV0dXJuQ3R4OiBjdHgudXBsb2FkUmV0dXJuQ3R4LmJpbmQoY3R4KSxcbiAgICBhZGRMaXN0ZW5lcjogY3R4LmFkZExpc3RlbmVyLmJpbmQoY3R4KSxcbiAgICBvbjogY3R4Lm9uLmJpbmQoY3R4KSxcbiAgICBvbmNlOiBjdHgub25jZS5iaW5kKGN0eCksXG4gICAgcmVtb3ZlTGlzdGVuZXI6IGN0eC5yZW1vdmVMaXN0ZW5lci5iaW5kKGN0eCksXG4gICAgb2ZmOiBjdHgub2ZmLmJpbmQoY3R4KSxcbiAgICByZW1vdmVBbGxMaXN0ZW5lcnM6IGN0eC5yZW1vdmVBbGxMaXN0ZW5lcnMuYmluZChjdHgpLFxuICAgIHNldE1heExpc3RlbmVyczogY3R4LnNldE1heExpc3RlbmVycy5iaW5kKGN0eCksXG4gICAgZ2V0TWF4TGlzdGVuZXJzOiBjdHguZ2V0TWF4TGlzdGVuZXJzLmJpbmQoY3R4KSxcbiAgICBsaXN0ZW5lcnM6IGN0eC5saXN0ZW5lcnMuYmluZChjdHgpLFxuICAgIHJhd0xpc3RlbmVyczogY3R4LnJhd0xpc3RlbmVycy5iaW5kKGN0eCksXG4gICAgZW1pdDogY3R4LmVtaXQuYmluZChjdHgpLFxuICAgIGxpc3RlbmVyQ291bnQ6IGN0eC5saXN0ZW5lckNvdW50LmJpbmQoY3R4KSxcbiAgICBwcmVwZW5kTGlzdGVuZXI6IGN0eC5wcmVwZW5kTGlzdGVuZXIuYmluZChjdHgpLFxuICAgIHByZXBlbmRPbmNlTGlzdGVuZXI6IGN0eC5wcmVwZW5kT25jZUxpc3RlbmVyLmJpbmQoY3R4KSxcbiAgICBldmVudE5hbWVzOiBjdHguZXZlbnROYW1lcy5iaW5kKGN0eClcbiAgfVxufVxuIiwiaW1wb3J0IGF4aW9zIGZyb20gJ2F4aW9zJ1xuaW1wb3J0IHsgRXZlbnRFbWl0dGVyIH0gZnJvbSAnZXZlbnRzJ1xuaW1wb3J0IGZzLCB7IGVtcHR5RGlyU3luYywgZW5zdXJlRGlyU3luYyB9IGZyb20gJ2ZzLWV4dHJhJ1xuaW1wb3J0IGhlaWNDb252ZXJ0IGZyb20gJ2hlaWMtY29udmVydCdcbmltcG9ydCB7IGNsb25lRGVlcCB9IGZyb20gJ2xvZGFzaCdcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnXG5cbmltcG9ydCB7XG4gIElCdWlsZEluV2F0ZXJNYXJrT3B0aW9ucyxcbiAgSUJ1aWxkSW5Db21wcmVzc09wdGlvbnMsXG4gIElMaWZlY3ljbGVQbHVnaW5zLFxuICBJUGF0aFRyYW5zZm9ybWVkSW1nSW5mbyxcbiAgSVBpY0dvLFxuICBJUGx1Z2luLFxuICBVbmRlZmluYWJsZSxcbiAgSUltZ0luZm8sXG4gIElCdWlsZEluU2tpcFByb2Nlc3NPcHRpb25zXG59IGZyb20gJy4uL3R5cGVzJ1xuaW1wb3J0IHtcbiAgZ2V0VVJMRmlsZSxcbiAgaGFuZGxlVXJsRW5jb2RlLFxuICBpbWFnZUNvbXByZXNzLFxuICBpc1VybCxcbiAgaXNOZWVkQ29tcHJlc3MsXG4gIGlzTmVlZEFkZFdhdGVybWFyayxcbiAgaW1hZ2VBZGRXYXRlck1hcmssXG4gIHJlbW92ZUV4aWYsXG4gIHJlbmFtZUZpbGVOYW1lV2l0aEN1c3RvbVN0cmluZyxcbiAgZ2V0Q29udmVydGVkRm9ybWF0XG59IGZyb20gJy4uL3V0aWxzL2NvbW1vbidcbmltcG9ydCB7IElCdWlsZEluRXZlbnQgfSBmcm9tICcuLi91dGlscy9lbnVtJ1xuaW1wb3J0IHsgY3JlYXRlQ29udGV4dCB9IGZyb20gJy4uL3V0aWxzL2NyZWF0ZUNvbnRleHQnXG5cbi8vIENvbnN0YW50c1xuY29uc3QgTUVTU0FHRVMgPSB7XG4gIFdBVEVSTUFSSzogJ0FkZCB3YXRlcm1hcmsgdG8gaW1hZ2UnLFxuICBDT01QUkVTUzogJ0NvbXByZXNzIG9yIGNvbnZlcnQgaW1hZ2UnLFxuICBSRU1PVkVfRVhJRjogJ1JlbW92ZSBleGlmIGluZm8nLFxuICBET1dOTE9BRF9UVEY6ICdEb3dubG9hZCB0dGYgZmlsZScsXG4gIERPV05MT0FEX1RURl9TVUNDRVNTOiAnRG93bmxvYWQgdHRmIGZpbGUgc3VjY2Vzc2Z1bGx5JyxcbiAgRE9XTkxPQURfVFRGX0ZBSUxFRDogJ0Rvd25sb2FkIHR0ZiBmaWxlIGZhaWxlZCcsXG4gIERPV05MT0FEX1RURl9TS0lQOiAnRG93bmxvYWQgdHRmIGZpbGUgZmFpbGVkLCBza2lwIGFkZCB3YXRlcm1hcmsnXG59IGFzIGNvbnN0XG5cbmNvbnN0IFBST0dSRVNTID0ge1xuICBTVEFSVDogMCxcbiAgVFJBTlNGT1JNOiAzMCxcbiAgVVBMT0FEOiA2MCxcbiAgQ09NUExFVEU6IDEwMCxcbiAgRkFJTEVEOiAtMVxufSBhcyBjb25zdFxuXG5jb25zdCBERUZBVUxUX1NLSVBfRVhURU5TSU9OUyA9IFsnemlwJywgJ3JhcicsICc3eicsICd0YXInLCAnZ3onLCAndGFyLmd6JywgJ3Rhci5iejInLCAndGFyLnh6J11cbmNvbnN0IFRURl9GSUxFX1VSTCA9ICdodHRwczovL3JlbGVhc2UucGljbGlzdC5jbi9zaW1oZWkudHRmJ1xuY29uc3QgREVGQVVMVF9VUExPQURFUiA9ICdzbW1zJ1xuXG5leHBvcnQgY2xhc3MgTGlmZWN5Y2xlIGV4dGVuZHMgRXZlbnRFbWl0dGVyIHtcbiAgcHJpdmF0ZSByZWFkb25seSBjdHg6IElQaWNHb1xuICB0dGZQYXRoOiBzdHJpbmdcblxuICBjb25zdHJ1Y3RvcihjdHg6IElQaWNHbykge1xuICAgIHN1cGVyKClcbiAgICB0aGlzLmN0eCA9IGN0eFxuICAgIHRoaXMudHRmUGF0aCA9IHBhdGguam9pbihjdHguYmFzZURpciwgJ2Fzc2V0cycsICdzaW1oZWkudHRmJylcbiAgICB0aGlzLmluaXRpYWxpemVEaXJzKClcbiAgfVxuXG4gIHByaXZhdGUgaW5pdGlhbGl6ZURpcnMoKTogdm9pZCB7XG4gICAgZW5zdXJlRGlyU3luYyhwYXRoLmpvaW4odGhpcy5jdHguYmFzZURpciwgJ2ltZ1RlbXAnKSlcbiAgICBjb25zdCBlbmFibGVTZWNvbmRVcGxvYWRlciA9IHRoaXMuY3R4LmdldENvbmZpZzxVbmRlZmluYWJsZTxib29sZWFuPj4oJ3NldHRpbmdzLmVuYWJsZVNlY29uZFVwbG9hZGVyJykgfHwgZmFsc2VcbiAgICBpZiAoIWVuYWJsZVNlY29uZFVwbG9hZGVyKSB7XG4gICAgICBlbXB0eURpclN5bmMocGF0aC5qb2luKHRoaXMuY3R4LmJhc2VEaXIsICdwaWNsaXN0VGVtcCcpKVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZG93bmxvYWRUVEYoKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgdHJ5IHtcbiAgICAgIGVuc3VyZURpclN5bmMocGF0aC5kaXJuYW1lKHRoaXMudHRmUGF0aCkpXG4gICAgICBpZiAoZnMuZXhpc3RzU3luYyh0aGlzLnR0ZlBhdGgpICYmIGZzLnN0YXRTeW5jKHRoaXMudHRmUGF0aCkuc2l6ZSA+IDApIHJldHVybiB0cnVlXG5cbiAgICAgIHRoaXMuY3R4LmxvZy5pbmZvKE1FU1NBR0VTLkRPV05MT0FEX1RURilcbiAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IGF4aW9zLmdldChUVEZfRklMRV9VUkwsIHsgcmVzcG9uc2VUeXBlOiAnYXJyYXlidWZmZXInIH0pXG4gICAgICBmcy53cml0ZUZpbGVTeW5jKHRoaXMudHRmUGF0aCwgcmVzLmRhdGEpXG4gICAgICB0aGlzLmN0eC5sb2cuaW5mbyhNRVNTQUdFUy5ET1dOTE9BRF9UVEZfU1VDQ0VTUylcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfSBjYXRjaCAoZTogYW55KSB7XG4gICAgICB0aGlzLmN0eC5sb2cuZXJyb3IoTUVTU0FHRVMuRE9XTkxPQURfVFRGX0ZBSUxFRClcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZ2V0UHJvY2Vzc2luZ09wdGlvbnMoY3R4OiBJUGljR28pOiB7XG4gICAgY29tcHJlc3NPcHRpb25zOiBVbmRlZmluYWJsZTxJQnVpbGRJbkNvbXByZXNzT3B0aW9ucz5cbiAgICB3YXRlcm1hcmtPcHRpb25zOiBVbmRlZmluYWJsZTxJQnVpbGRJbldhdGVyTWFya09wdGlvbnM+XG4gIH0ge1xuICAgIGNvbnN0IGNvbXByZXNzT3B0aW9ucyA9IGN0eC5nZXRDb25maWc8VW5kZWZpbmFibGU8SUJ1aWxkSW5Db21wcmVzc09wdGlvbnM+PignYnVpbGRJbi5jb21wcmVzcycpXG4gICAgY29uc3Qgd2F0ZXJtYXJrT3B0aW9ucyA9IGN0eC5nZXRDb25maWc8VW5kZWZpbmFibGU8SUJ1aWxkSW5XYXRlck1hcmtPcHRpb25zPj4oJ2J1aWxkSW4ud2F0ZXJtYXJrJylcblxuICAgIGlmIChjb21wcmVzc09wdGlvbnMpIHtcbiAgICAgIGNvbnN0IHR5cGUgPSB0aGlzLmdldFVwbG9hZGVyVHlwZShjdHgpXG4gICAgICBjb25zdCB1cGxvYWRlciA9IGN0eC5oZWxwZXIudXBsb2FkZXIuZ2V0KHR5cGUpXG4gICAgICBjb21wcmVzc09wdGlvbnMucGljQmVkID0gIXVwbG9hZGVyID8gJ3NtbXMnIDogdHlwZVxuICAgIH1cblxuICAgIHJldHVybiB7IGNvbXByZXNzT3B0aW9ucywgd2F0ZXJtYXJrT3B0aW9ucyB9XG4gIH1cblxuICBwcml2YXRlIGdldFVwbG9hZGVyVHlwZShjdHg6IElQaWNHbyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIChcbiAgICAgIGN0eC5nZXRDb25maWc8VW5kZWZpbmFibGU8c3RyaW5nPj4oJ3BpY0JlZC51cGxvYWRlcicpIHx8XG4gICAgICBjdHguZ2V0Q29uZmlnPFVuZGVmaW5hYmxlPHN0cmluZz4+KCdwaWNCZWQuY3VycmVudCcpIHx8XG4gICAgICBERUZBVUxUX1VQTE9BREVSXG4gICAgKVxuICB9XG5cbiAgcHJpdmF0ZSBnZXRTa2lwRXh0ZW5zaW9ucyhjdHg6IElQaWNHbyk6IFNldDxzdHJpbmc+IHtcbiAgICBjb25zdCBza2lwUHJvY2VzcyA9IGN0eC5nZXRDb25maWc8VW5kZWZpbmFibGU8SUJ1aWxkSW5Ta2lwUHJvY2Vzc09wdGlvbnM+PignYnVpbGRJbi5za2lwUHJvY2VzcycpIHx8IHt9XG4gICAgY29uc3Qgc2tpcFByb2Nlc3NFeHRMaXN0ID0gc2tpcFByb2Nlc3Muc2tpcFByb2Nlc3NFeHRMaXN0XG4gICAgICA/IHNraXBQcm9jZXNzLnNraXBQcm9jZXNzRXh0TGlzdC5zcGxpdCgnLCcpLm1hcCgoaXRlbTogc3RyaW5nKSA9PiBpdGVtLnRyaW0oKSlcbiAgICAgIDogREVGQVVMVF9TS0lQX0VYVEVOU0lPTlNcblxuICAgIHJldHVybiBuZXcgU2V0KFxuICAgICAgc2tpcFByb2Nlc3NFeHRMaXN0Lm1hcCgoaXRlbTogc3RyaW5nKSA9PiB7XG4gICAgICAgIGNvbnN0IGZvcm1hdHRlZEl0ZW0gPSBpdGVtLnRyaW0oKS50b0xvd2VyQ2FzZSgpXG4gICAgICAgIHJldHVybiBmb3JtYXR0ZWRJdGVtLnN0YXJ0c1dpdGgoJy4nKSA/IGZvcm1hdHRlZEl0ZW0gOiBgLiR7Zm9ybWF0dGVkSXRlbX1gXG4gICAgICB9KVxuICAgIClcbiAgfVxuXG4gIC8vIE1haW4gbGlmZWN5Y2xlIG1ldGhvZHNcbiAgYXN5bmMgc3RhcnQoaW5wdXQ6IGFueVtdLCBza2lwUHJvY2VzcyA9IGZhbHNlKTogUHJvbWlzZTxJUGljR28+IHtcbiAgICBjb25zdCBjdHggPSBjcmVhdGVDb250ZXh0KHRoaXMuY3R4KVxuICAgIHRyeSB7XG4gICAgICBpZiAoIUFycmF5LmlzQXJyYXkoaW5wdXQpKSB0aHJvdyBuZXcgRXJyb3IoJ0lucHV0IG11c3QgYmUgYW4gYXJyYXkuJylcblxuICAgICAgdGhpcy5pbml0aWFsaXplQ29udGV4dChjdHgsIGlucHV0KVxuXG4gICAgICBpZiAoc2tpcFByb2Nlc3MpIHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuaGFuZGxlU2tpcFByb2Nlc3MoY3R4KVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gYXdhaXQgdGhpcy5leGVjdXRlTGlmZWN5Y2xlKGN0eClcbiAgICB9IGNhdGNoIChlOiBhbnkpIHtcbiAgICAgIHJldHVybiB0aGlzLmhhbmRsZUVycm9yKGN0eCwgZSlcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGluaXRpYWxpemVDb250ZXh0KGN0eDogSVBpY0dvLCBpbnB1dDogYW55W10pOiB2b2lkIHtcbiAgICBjdHguaW5wdXQgPSBpbnB1dFxuICAgIGN0eC5vdXRwdXQgPSBbXSBhcyBJSW1nSW5mb1tdXG4gICAgY3R4LnJhd0lucHV0UGF0aCA9IFtdIGFzIHN0cmluZ1tdXG4gICAgY3R4LnJhd0lucHV0ID0gY2xvbmVEZWVwKGlucHV0KVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBoYW5kbGVTa2lwUHJvY2VzcyhjdHg6IElQaWNHbyk6IFByb21pc2U8SVBpY0dvPiB7XG4gICAgY3R4LmxvZy5pbmZvKCdTa2lwIHByb2Nlc3MuJylcbiAgICBjdHgub3V0cHV0ID0gY3R4LmlucHV0XG4gICAgYXdhaXQgdGhpcy5kb1VwbG9hZChjdHgpXG4gICAgY3R4LmlucHV0ID0gY3R4LnJhd0lucHV0XG4gICAgYXdhaXQgdGhpcy5hZnRlclVwbG9hZChjdHgpXG4gICAgcmV0dXJuIGN0eFxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBleGVjdXRlTGlmZWN5Y2xlKGN0eDogSVBpY0dvKTogUHJvbWlzZTxJUGljR28+IHtcbiAgICBhd2FpdCB0aGlzLnByZXByb2Nlc3MoY3R4KVxuICAgIGF3YWl0IHRoaXMuYmVmb3JlVHJhbnNmb3JtKGN0eClcbiAgICBhd2FpdCB0aGlzLmRvVHJhbnNmb3JtKGN0eClcbiAgICBhd2FpdCB0aGlzLmJ1aWxkSW5SZW5hbWUoY3R4KVxuICAgIGF3YWl0IHRoaXMuYmVmb3JlVXBsb2FkKGN0eClcbiAgICBjdHgucHJvY2Vzc2VkSW5wdXQgPSBjbG9uZURlZXAoY3R4Lm91dHB1dClcbiAgICBhd2FpdCB0aGlzLmRvVXBsb2FkKGN0eClcbiAgICBjdHguaW5wdXQgPSBjdHgucmF3SW5wdXRcbiAgICBhd2FpdCB0aGlzLmFmdGVyVXBsb2FkKGN0eClcbiAgICByZXR1cm4gY3R4XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZUVycm9yKGN0eDogSVBpY0dvLCBlcnJvcjogYW55KTogSVBpY0dvIHtcbiAgICBjdHgubG9nLndhcm4oSUJ1aWxkSW5FdmVudC5GQUlMRUQpXG4gICAgY3R4LmVtaXQoSUJ1aWxkSW5FdmVudC5VUExPQURfUFJPR1JFU1MsIFBST0dSRVNTLkZBSUxFRClcbiAgICBjdHguZW1pdChJQnVpbGRJbkV2ZW50LkZBSUxFRCwgZXJyb3IpXG4gICAgY3R4LmxvZy5lcnJvcihlcnJvcilcblxuICAgIGlmIChjdHguZ2V0Q29uZmlnPFVuZGVmaW5hYmxlPHN0cmluZz4+KCdkZWJ1ZycpKSB7XG4gICAgICB0aHJvdyBlcnJvclxuICAgIH1cbiAgICByZXR1cm4gY3R4XG4gIH1cblxuICAvLyBQcm9jZXNzaW5nIG1ldGhvZHNcbiAgcHJpdmF0ZSBhc3luYyBwcmVwcm9jZXNzKGN0eDogSVBpY0dvKTogUHJvbWlzZTxJUGljR28+IHtcbiAgICBjb25zdCB7IGNvbXByZXNzT3B0aW9ucywgd2F0ZXJtYXJrT3B0aW9ucyB9ID0gdGhpcy5nZXRQcm9jZXNzaW5nT3B0aW9ucyhjdHgpXG4gICAgY29uc3Qgc2tpcEV4dGVuc2lvbnMgPSB0aGlzLmdldFNraXBFeHRlbnNpb25zKGN0eClcblxuICAgIGN0eC5lbWl0KElCdWlsZEluRXZlbnQuVVBMT0FEX1BST0dSRVNTLCBQUk9HUkVTUy5TVEFSVClcbiAgICBjdHguZW1pdChJQnVpbGRJbkV2ZW50LkJFRk9SRV9UUkFOU0ZPUk0sIGN0eClcbiAgICBjdHgubG9nLmluZm8oJ0JlZm9yZSB0cmFuc2Zvcm0nKVxuXG4gICAgaWYgKGNvbXByZXNzT3B0aW9ucyB8fCB3YXRlcm1hcmtPcHRpb25zKSB7XG4gICAgICBjb25zdCB0ZW1wRmlsZVBhdGggPSBwYXRoLmpvaW4oY3R4LmJhc2VEaXIsICdwaWNsaXN0VGVtcCcpXG4gICAgICBhd2FpdCB0aGlzLnByb2Nlc3NJbWFnZXMoY3R4LCB0ZW1wRmlsZVBhdGgsIGNvbXByZXNzT3B0aW9ucywgd2F0ZXJtYXJrT3B0aW9ucywgc2tpcEV4dGVuc2lvbnMpXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaW5pdGlhbGl6ZVJhd0lucHV0UGF0aHMoY3R4KVxuICAgIH1cbiAgICByZXR1cm4gY3R4XG4gIH1cblxuICBwcml2YXRlIGluaXRpYWxpemVSYXdJbnB1dFBhdGhzKGN0eDogSVBpY0dvKTogdm9pZCB7XG4gICAgZm9yIChjb25zdCBpdGVtIG9mIGN0eC5pbnB1dCkge1xuICAgICAgY3R4LnJhd0lucHV0UGF0aCEucHVzaChpdGVtKVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcHJvY2Vzc0ltYWdlcyhcbiAgICBjdHg6IElQaWNHbyxcbiAgICB0ZW1wRmlsZVBhdGg6IHN0cmluZyxcbiAgICBjb21wcmVzc09wdGlvbnM6IFVuZGVmaW5hYmxlPElCdWlsZEluQ29tcHJlc3NPcHRpb25zPixcbiAgICB3YXRlcm1hcmtPcHRpb25zOiBVbmRlZmluYWJsZTxJQnVpbGRJbldhdGVyTWFya09wdGlvbnM+LFxuICAgIHNraXBFeHRlbnNpb25zOiBTZXQ8c3RyaW5nPlxuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCBQcm9taXNlLmFsbFNldHRsZWQoXG4gICAgICBjdHguaW5wdXQubWFwKGFzeW5jIChpdGVtOiBzdHJpbmcsIGluZGV4OiBudW1iZXIpID0+IHtcbiAgICAgICAgYXdhaXQgdGhpcy5wcm9jZXNzSW1hZ2UoaXRlbSwgaW5kZXgsIGN0eCwgdGVtcEZpbGVQYXRoLCBjb21wcmVzc09wdGlvbnMsIHdhdGVybWFya09wdGlvbnMsIHNraXBFeHRlbnNpb25zKVxuICAgICAgfSlcbiAgICApXG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHByb2Nlc3NJbWFnZShcbiAgICBpdGVtOiBzdHJpbmcsXG4gICAgaW5kZXg6IG51bWJlcixcbiAgICBjdHg6IElQaWNHbyxcbiAgICB0ZW1wRmlsZVBhdGg6IHN0cmluZyxcbiAgICBjb21wcmVzc09wdGlvbnM6IFVuZGVmaW5hYmxlPElCdWlsZEluQ29tcHJlc3NPcHRpb25zPixcbiAgICB3YXRlcm1hcmtPcHRpb25zOiBVbmRlZmluYWJsZTxJQnVpbGRJbldhdGVyTWFya09wdGlvbnM+LFxuICAgIHNraXBFeHRlbnNpb25zOiBTZXQ8c3RyaW5nPlxuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBpdGVtSXNVcmwgPSBpc1VybChpdGVtKVxuICAgIGNvbnN0IGluZm86IElQYXRoVHJhbnNmb3JtZWRJbWdJbmZvID0gaXRlbUlzVXJsID8gYXdhaXQgZ2V0VVJMRmlsZShpdGVtLCBjdHgpIDogeyBzdWNjZXNzOiBmYWxzZSB9XG5cbiAgICBpZiAoaXRlbUlzVXJsICYmICghaW5mby5zdWNjZXNzIHx8ICFpbmZvLmJ1ZmZlcikpIHJldHVyblxuXG4gICAgY3R4LnJhd0lucHV0UGF0aCFbaW5kZXhdID0gaXRlbVxuICAgIGNvbnN0IGV4dGVuc2lvbiA9IGl0ZW1Jc1VybCA/IGluZm8uZXh0bmFtZSB8fCAnJyA6IHBhdGguZXh0bmFtZShpdGVtKVxuICAgIGNvbnN0IHNob3VsZFNraXBFeHRlbnNpb24gPSBza2lwRXh0ZW5zaW9ucy5oYXMoZXh0ZW5zaW9uLnRvTG93ZXJDYXNlKCkpXG5cbiAgICBjb25zdCBmaWxlQnVmZmVyOiBCdWZmZXIgPSBpdGVtSXNVcmwgPyBpbmZvLmJ1ZmZlciEgOiBmcy5yZWFkRmlsZVN5bmMoaXRlbSlcbiAgICBjb25zdCB0cmFuc2Zvcm1lZEJ1ZmZlciA9IGF3YWl0IHRoaXMuYXBwbHlQcm9jZXNzaW5nKFxuICAgICAgZmlsZUJ1ZmZlcixcbiAgICAgIGV4dGVuc2lvbixcbiAgICAgIGNvbXByZXNzT3B0aW9ucyxcbiAgICAgIHdhdGVybWFya09wdGlvbnMsXG4gICAgICBzaG91bGRTa2lwRXh0ZW5zaW9uLFxuICAgICAgaXRlbSxcbiAgICAgIHRlbXBGaWxlUGF0aCxcbiAgICAgIGN0eFxuICAgIClcblxuICAgIGlmICh0cmFuc2Zvcm1lZEJ1ZmZlcikge1xuICAgICAgYXdhaXQgdGhpcy5zYXZlUHJvY2Vzc2VkSW1hZ2UoXG4gICAgICAgIGl0ZW0sXG4gICAgICAgIGluZGV4LFxuICAgICAgICBjdHgsXG4gICAgICAgIHRlbXBGaWxlUGF0aCxcbiAgICAgICAgdHJhbnNmb3JtZWRCdWZmZXIsXG4gICAgICAgIGV4dGVuc2lvbixcbiAgICAgICAgY29tcHJlc3NPcHRpb25zLFxuICAgICAgICBpdGVtSXNVcmwsXG4gICAgICAgIGluZm9cbiAgICAgIClcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGFwcGx5UHJvY2Vzc2luZyhcbiAgICBmaWxlQnVmZmVyOiBCdWZmZXIsXG4gICAgZXh0ZW5zaW9uOiBzdHJpbmcsXG4gICAgY29tcHJlc3NPcHRpb25zOiBVbmRlZmluYWJsZTxJQnVpbGRJbkNvbXByZXNzT3B0aW9ucz4sXG4gICAgd2F0ZXJtYXJrT3B0aW9uczogVW5kZWZpbmFibGU8SUJ1aWxkSW5XYXRlck1hcmtPcHRpb25zPixcbiAgICBzaG91bGRTa2lwRXh0ZW5zaW9uOiBib29sZWFuLFxuICAgIGl0ZW06IHN0cmluZyxcbiAgICB0ZW1wRmlsZVBhdGg6IHN0cmluZyxcbiAgICBjdHg6IElQaWNHb1xuICApOiBQcm9taXNlPEJ1ZmZlciB8IHVuZGVmaW5lZD4ge1xuICAgIGxldCB0cmFuc2Zvcm1lZEJ1ZmZlcjogQnVmZmVyIHwgdW5kZWZpbmVkXG5cbiAgICAvLyBBcHBseSB3YXRlcm1hcmtcbiAgICBpZiAoaXNOZWVkQWRkV2F0ZXJtYXJrKHdhdGVybWFya09wdGlvbnMsIGV4dGVuc2lvbikgJiYgIXNob3VsZFNraXBFeHRlbnNpb24pIHtcbiAgICAgIHRyYW5zZm9ybWVkQnVmZmVyID0gYXdhaXQgdGhpcy5hZGRXYXRlcm1hcmsoZmlsZUJ1ZmZlciwgd2F0ZXJtYXJrT3B0aW9ucyEsIGN0eClcbiAgICB9XG5cbiAgICAvLyBBcHBseSBjb21wcmVzc2lvblxuICAgIGlmIChpc05lZWRDb21wcmVzcyhjb21wcmVzc09wdGlvbnMsIGV4dGVuc2lvbikgJiYgIXNob3VsZFNraXBFeHRlbnNpb24pIHtcbiAgICAgIHRyYW5zZm9ybWVkQnVmZmVyID0gYXdhaXQgdGhpcy5jb21wcmVzc0ltYWdlKFxuICAgICAgICBmaWxlQnVmZmVyLFxuICAgICAgICB0cmFuc2Zvcm1lZEJ1ZmZlcixcbiAgICAgICAgZXh0ZW5zaW9uLFxuICAgICAgICBjb21wcmVzc09wdGlvbnMhLFxuICAgICAgICBpdGVtLFxuICAgICAgICB0ZW1wRmlsZVBhdGgsXG4gICAgICAgIGN0eFxuICAgICAgKVxuICAgIH1cblxuICAgIC8vIFJlbW92ZSBFWElGIGlmIG5lZWRlZFxuICAgIGlmICghdHJhbnNmb3JtZWRCdWZmZXIgJiYgY29tcHJlc3NPcHRpb25zPy5pc1JlbW92ZUV4aWYgJiYgIXNob3VsZFNraXBFeHRlbnNpb24pIHtcbiAgICAgIGN0eC5sb2cuaW5mbyhNRVNTQUdFUy5SRU1PVkVfRVhJRilcbiAgICAgIHRyYW5zZm9ybWVkQnVmZmVyID0gYXdhaXQgcmVtb3ZlRXhpZihmaWxlQnVmZmVyLCBleHRlbnNpb24pXG4gICAgfVxuXG4gICAgcmV0dXJuIHRyYW5zZm9ybWVkQnVmZmVyXG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGFkZFdhdGVybWFyayhcbiAgICBmaWxlQnVmZmVyOiBCdWZmZXIsXG4gICAgd2F0ZXJtYXJrT3B0aW9uczogSUJ1aWxkSW5XYXRlck1hcmtPcHRpb25zLFxuICAgIGN0eDogSVBpY0dvXG4gICk6IFByb21pc2U8QnVmZmVyIHwgdW5kZWZpbmVkPiB7XG4gICAgaWYgKCEod2F0ZXJtYXJrT3B0aW9ucz8ud2F0ZXJtYXJrRm9udFBhdGggfHwgd2F0ZXJtYXJrT3B0aW9ucz8ud2F0ZXJtYXJrVHlwZSA9PT0gJ2ltYWdlJykpIHtcbiAgICAgIGNvbnN0IGRvd25sb2FkVFRGUmV0ID0gYXdhaXQgdGhpcy5kb3dubG9hZFRURigpXG4gICAgICBpZiAoIWRvd25sb2FkVFRGUmV0KSB7XG4gICAgICAgIHRoaXMuY3R4LmxvZy53YXJuKE1FU1NBR0VTLkRPV05MT0FEX1RURl9TS0lQKVxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkXG4gICAgICB9XG4gICAgfVxuXG4gICAgY3R4LmxvZy5pbmZvKE1FU1NBR0VTLldBVEVSTUFSSylcbiAgICByZXR1cm4gYXdhaXQgaW1hZ2VBZGRXYXRlck1hcmsoZmlsZUJ1ZmZlciwgd2F0ZXJtYXJrT3B0aW9ucywgdGhpcy50dGZQYXRoLCBjdHgubG9nKVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBjb21wcmVzc0ltYWdlKFxuICAgIGZpbGVCdWZmZXI6IEJ1ZmZlcixcbiAgICB0cmFuc2Zvcm1lZEJ1ZmZlcjogQnVmZmVyIHwgdW5kZWZpbmVkLFxuICAgIGV4dGVuc2lvbjogc3RyaW5nLFxuICAgIGNvbXByZXNzT3B0aW9uczogSUJ1aWxkSW5Db21wcmVzc09wdGlvbnMsXG4gICAgaXRlbTogc3RyaW5nLFxuICAgIHRlbXBGaWxlUGF0aDogc3RyaW5nLFxuICAgIGN0eDogSVBpY0dvXG4gICk6IFByb21pc2U8QnVmZmVyPiB7XG4gICAgY3R4LmxvZy5pbmZvKE1FU1NBR0VTLkNPTVBSRVNTKVxuICAgIGNvbnN0IG5vcm1hbGl6ZWRFeHRlbnNpb24gPSBleHRlbnNpb24udG9Mb3dlckNhc2UoKVxuXG4gICAgaWYgKCFpc1VybChpdGVtKSAmJiAobm9ybWFsaXplZEV4dGVuc2lvbiA9PT0gJy5oZWljJyB8fCBub3JtYWxpemVkRXh0ZW5zaW9uID09PSAnLmhlaWYnKSkge1xuICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuY29udmVydEhlaWNBbmRDb21wcmVzcyhmaWxlQnVmZmVyLCBpdGVtLCBleHRlbnNpb24sIHRlbXBGaWxlUGF0aCwgY29tcHJlc3NPcHRpb25zLCBjdHgpXG4gICAgfVxuXG4gICAgcmV0dXJuIGF3YWl0IGltYWdlQ29tcHJlc3ModHJhbnNmb3JtZWRCdWZmZXIgPz8gZmlsZUJ1ZmZlciwgY29tcHJlc3NPcHRpb25zLCBleHRlbnNpb24sIGN0eC5sb2cpXG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGNvbnZlcnRIZWljQW5kQ29tcHJlc3MoXG4gICAgZmlsZUJ1ZmZlcjogQnVmZmVyLFxuICAgIGl0ZW06IHN0cmluZyxcbiAgICBleHRlbnNpb246IHN0cmluZyxcbiAgICB0ZW1wRmlsZVBhdGg6IHN0cmluZyxcbiAgICBjb21wcmVzc09wdGlvbnM6IElCdWlsZEluQ29tcHJlc3NPcHRpb25zLFxuICAgIGN0eDogSVBpY0dvXG4gICk6IFByb21pc2U8QnVmZmVyPiB7XG4gICAgY29uc3QgaGVpY1Jlc3VsdCA9IGF3YWl0IGhlaWNDb252ZXJ0KHtcbiAgICAgIGJ1ZmZlcjogZmlsZUJ1ZmZlcixcbiAgICAgIGZvcm1hdDogJ0pQRUcnLFxuICAgICAgcXVhbGl0eTogMVxuICAgIH0pXG4gICAgY29uc3QgdGVtcEhlaWNDb252ZXJ0RmlsZSA9IHBhdGguam9pbih0ZW1wRmlsZVBhdGgsIGAke3BhdGguYmFzZW5hbWUoaXRlbSwgZXh0ZW5zaW9uKX0uanBnYClcbiAgICBmcy53cml0ZUZpbGVTeW5jKHRlbXBIZWljQ29udmVydEZpbGUsIEJ1ZmZlci5mcm9tKGhlaWNSZXN1bHQpKVxuICAgIHJldHVybiBhd2FpdCBpbWFnZUNvbXByZXNzKGZzLnJlYWRGaWxlU3luYyh0ZW1wSGVpY0NvbnZlcnRGaWxlKSwgY29tcHJlc3NPcHRpb25zLCAnLmpwZycsIGN0eC5sb2cpXG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHNhdmVQcm9jZXNzZWRJbWFnZShcbiAgICBpdGVtOiBzdHJpbmcsXG4gICAgaW5kZXg6IG51bWJlcixcbiAgICBjdHg6IElQaWNHbyxcbiAgICB0ZW1wRmlsZVBhdGg6IHN0cmluZyxcbiAgICB0cmFuc2Zvcm1lZEJ1ZmZlcjogQnVmZmVyLFxuICAgIGV4dGVuc2lvbjogc3RyaW5nLFxuICAgIGNvbXByZXNzT3B0aW9uczogVW5kZWZpbmFibGU8SUJ1aWxkSW5Db21wcmVzc09wdGlvbnM+LFxuICAgIGl0ZW1Jc1VybDogYm9vbGVhbixcbiAgICBpbmZvOiBJUGF0aFRyYW5zZm9ybWVkSW1nSW5mb1xuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBsZXQgbmV3RXh0ID0gY29tcHJlc3NPcHRpb25zPy5pc0NvbnZlcnQgPyBnZXRDb252ZXJ0ZWRGb3JtYXQoY29tcHJlc3NPcHRpb25zLCBleHRlbnNpb24pIDogZXh0ZW5zaW9uXG4gICAgbmV3RXh0ID0gbmV3RXh0LnN0YXJ0c1dpdGgoJy4nKSA/IG5ld0V4dCA6IGAuJHtuZXdFeHR9YFxuXG4gICAgY29uc3QgdGVtcEZpbGUgPSBpdGVtSXNVcmxcbiAgICAgID8gcGF0aC5qb2luKHRlbXBGaWxlUGF0aCwgYCR7dGhpcy5nZXRGaWxlQmFzZU5hbWUoaW5mbyl9JHtuZXdFeHR9YClcbiAgICAgIDogcGF0aC5qb2luKHRlbXBGaWxlUGF0aCwgYCR7cGF0aC5iYXNlbmFtZShpdGVtLCBleHRlbnNpb24pfSR7bmV3RXh0fWApXG5cbiAgICBjdHgucmF3SW5wdXRQYXRoIVtpbmRleF0gPSBwYXRoLmpvaW4oXG4gICAgICBwYXRoLmRpcm5hbWUoaXRlbSksXG4gICAgICBpdGVtSXNVcmwgPyBwYXRoLmJhc2VuYW1lKHRlbXBGaWxlKSA6IGAke3BhdGguYmFzZW5hbWUoaXRlbSwgZXh0ZW5zaW9uKX0ke25ld0V4dH1gXG4gICAgKVxuXG4gICAgZnMud3JpdGVGaWxlU3luYyh0ZW1wRmlsZSwgdHJhbnNmb3JtZWRCdWZmZXIpXG4gICAgY3R4LmlucHV0W2luZGV4XSA9IHRlbXBGaWxlXG4gIH1cblxuICBwcml2YXRlIGdldEZpbGVCYXNlTmFtZShpbmZvOiBJUGF0aFRyYW5zZm9ybWVkSW1nSW5mbyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGluZm8uZmlsZU5hbWUgPyBwYXRoLmJhc2VuYW1lKGluZm8uZmlsZU5hbWUsIHBhdGguZXh0bmFtZShpbmZvLmZpbGVOYW1lKSkgOiBuZXcgRGF0ZSgpLmdldFRpbWUoKS50b1N0cmluZygpXG4gIH1cblxuICAvLyBSZW5hbWUgZnVuY3Rpb25hbGl0eVxuICBwcml2YXRlIGFzeW5jIGJ1aWxkSW5SZW5hbWUoY3R4OiBJUGljR28pOiBQcm9taXNlPElQaWNHbz4ge1xuICAgIGNvbnN0IHJlbmFtZUNvbmZpZyA9IGN0eC5nZXRDb25maWc8YW55PignYnVpbGRJbi5yZW5hbWUnKSB8fCB7fVxuICAgIGlmICghcmVuYW1lQ29uZmlnLmVuYWJsZSkgcmV0dXJuIGN0eFxuXG4gICAgY29uc3QgZm9ybWF0ID0gcmVuYW1lQ29uZmlnLmZvcm1hdCB8fCAne2ZpbGVuYW1lfSdcbiAgICBjdHgub3V0cHV0ID0gY3R4Lm91dHB1dC5tYXAoKGl0ZW06IElJbWdJbmZvLCBpbmRleDogbnVtYmVyKSA9PiB7XG4gICAgICBsZXQgZmlsZU5hbWUgPSBpdGVtLmZpbGVOYW1lXG4gICAgICBpZiAoZm9ybWF0KSB7XG4gICAgICAgIGZpbGVOYW1lID0gcmVuYW1lRmlsZU5hbWVXaXRoQ3VzdG9tU3RyaW5nKFxuICAgICAgICAgIGN0eC5yYXdJbnB1dFBhdGghW2luZGV4XSxcbiAgICAgICAgICBmb3JtYXQsXG4gICAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICAgIGl0ZW0uYmFzZTY0SW1hZ2UgPyBpdGVtLmJhc2U2NEltYWdlIDogaXRlbS5idWZmZXJcbiAgICAgICAgKVxuICAgICAgICBmaWxlTmFtZSA9IGZpbGVOYW1lLnJlcGxhY2UoL1xcLysvZywgJy8nKVxuICAgICAgICBpZiAoZmlsZU5hbWUuc2xpY2UoLTEpID09PSAnLycpIHtcbiAgICAgICAgICBmaWxlTmFtZSA9IGZpbGVOYW1lICsgaW5kZXgudG9TdHJpbmcoKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpdGVtLmZpbGVOYW1lID0gZmlsZU5hbWVcbiAgICAgIHJldHVybiBpdGVtXG4gICAgfSlcbiAgICByZXR1cm4gY3R4XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGJlZm9yZVRyYW5zZm9ybShjdHg6IElQaWNHbyk6IFByb21pc2U8SVBpY0dvPiB7XG4gICAgYXdhaXQgdGhpcy5oYW5kbGVQbHVnaW5zKGN0eC5oZWxwZXIuYmVmb3JlVHJhbnNmb3JtUGx1Z2lucywgY3R4KVxuICAgIHJldHVybiBjdHhcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZG9UcmFuc2Zvcm0oY3R4OiBJUGljR28pOiBQcm9taXNlPElQaWNHbz4ge1xuICAgIGN0eC5lbWl0KElCdWlsZEluRXZlbnQuVVBMT0FEX1BST0dSRVNTLCBQUk9HUkVTUy5UUkFOU0ZPUk0pXG4gICAgY29uc3QgdHlwZSA9IGN0eC5nZXRDb25maWc8VW5kZWZpbmFibGU8c3RyaW5nPj4oJ3BpY0JlZC50cmFuc2Zvcm1lcicpIHx8ICdwYXRoJ1xuICAgIGxldCB0cmFuc2Zvcm1lciA9IGN0eC5oZWxwZXIudHJhbnNmb3JtZXIuZ2V0KHR5cGUpXG4gICAgbGV0IGN1cnJlbnRUcmFuc2Zvcm1lciA9IHR5cGVcblxuICAgIGlmICghdHJhbnNmb3JtZXIpIHtcbiAgICAgIHRyYW5zZm9ybWVyID0gY3R4LmhlbHBlci50cmFuc2Zvcm1lci5nZXQoJ3BhdGgnKVxuICAgICAgY3VycmVudFRyYW5zZm9ybWVyID0gJ3BhdGgnXG4gICAgICBjdHgubG9nLndhcm4oYENhbid0IGZpbmQgdHJhbnNmb3JtZXIgLSAke3R5cGV9LCBzd2l0Y2ggdG8gZGVmYXVsdCB0cmFuc2Zvcm1lciAtIHBhdGhgKVxuICAgIH1cblxuICAgIGN0eC5sb2cuaW5mbyhgVHJhbnNmb3JtaW5nLi4uIEN1cnJlbnQgdHJhbnNmb3JtZXIgaXMgWyR7Y3VycmVudFRyYW5zZm9ybWVyfV1gKVxuICAgIGF3YWl0IHRyYW5zZm9ybWVyPy5oYW5kbGUoY3R4KVxuICAgIHJldHVybiBjdHhcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgYmVmb3JlVXBsb2FkKGN0eDogSVBpY0dvKTogUHJvbWlzZTxJUGljR28+IHtcbiAgICBjdHguZW1pdChJQnVpbGRJbkV2ZW50LlVQTE9BRF9QUk9HUkVTUywgUFJPR1JFU1MuVVBMT0FEKVxuICAgIGN0eC5sb2cuaW5mbygnQmVmb3JlIHVwbG9hZCcpXG4gICAgY3R4LmVtaXQoSUJ1aWxkSW5FdmVudC5CRUZPUkVfVVBMT0FELCBjdHgpXG4gICAgYXdhaXQgdGhpcy5oYW5kbGVQbHVnaW5zKGN0eC5oZWxwZXIuYmVmb3JlVXBsb2FkUGx1Z2lucywgY3R4KVxuICAgIHJldHVybiBjdHhcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZG9VcGxvYWQoY3R4OiBJUGljR28pOiBQcm9taXNlPElQaWNHbz4ge1xuICAgIGNvbnN0IHR5cGUgPSB0aGlzLmdldFVwbG9hZGVyVHlwZShjdHgpXG4gICAgbGV0IHVwbG9hZGVyID0gY3R4LmhlbHBlci51cGxvYWRlci5nZXQodHlwZSlcbiAgICBsZXQgY3VycmVudFVwbG9hZGVyID0gdHlwZVxuXG4gICAgaWYgKCF1cGxvYWRlcikge1xuICAgICAgY3R4LmxvZy53YXJuKGBDYW4ndCBmaW5kIHVwbG9hZGVyIC0gJHt0eXBlfSwgc3dpdGNoIHRvIGRlZmF1bHQgdXBsb2FkZXIgLSAke0RFRkFVTFRfVVBMT0FERVJ9YClcbiAgICAgIGN1cnJlbnRVcGxvYWRlciA9IERFRkFVTFRfVVBMT0FERVJcbiAgICAgIHVwbG9hZGVyID0gY3R4LmhlbHBlci51cGxvYWRlci5nZXQoREVGQVVMVF9VUExPQURFUilcbiAgICB9XG5cbiAgICBjdHgubG9nLmluZm8oYFVwbG9hZGluZy4uLiBDdXJyZW50IHVwbG9hZGVyIGlzIFske2N1cnJlbnRVcGxvYWRlcn1dYClcbiAgICBhd2FpdCB1cGxvYWRlcj8uaGFuZGxlKGN0eClcblxuICAgIGZvciAoY29uc3Qgb3V0cHV0SW1nIG9mIGN0eC5vdXRwdXQpIHtcbiAgICAgIG91dHB1dEltZy50eXBlID0gY3VycmVudFVwbG9hZGVyXG4gICAgfVxuICAgIHJldHVybiBjdHhcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgYWZ0ZXJVcGxvYWQoY3R4OiBJUGljR28pOiBQcm9taXNlPElQaWNHbz4ge1xuICAgIGN0eC5lbWl0KElCdWlsZEluRXZlbnQuQUZURVJfVVBMT0FELCBjdHgpXG4gICAgY3R4LmVtaXQoSUJ1aWxkSW5FdmVudC5VUExPQURfUFJPR1JFU1MsIDEwMClcbiAgICBhd2FpdCB0aGlzLmhhbmRsZVBsdWdpbnMoY3R4LmhlbHBlci5hZnRlclVwbG9hZFBsdWdpbnMsIGN0eClcbiAgICBsZXQgbXNnID0gJydcbiAgICBjb25zdCBsZW5ndGggPSBjdHgub3V0cHV0Lmxlbmd0aFxuICAgIGNvbnN0IGlzRW5jb2RlT3V0cHV0VVJMID0gY3R4LmdldENvbmZpZzxVbmRlZmluYWJsZTxib29sZWFuPj4oJ3NldHRpbmdzLmVuY29kZU91dHB1dFVSTCcpID09PSB0cnVlXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgaWYgKHR5cGVvZiBjdHgub3V0cHV0W2ldLmltZ1VybCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgbXNnICs9IGlzRW5jb2RlT3V0cHV0VVJMID8gaGFuZGxlVXJsRW5jb2RlKGN0eC5vdXRwdXRbaV0uaW1nVXJsISkgOiBjdHgub3V0cHV0W2ldLmltZ1VybCFcbiAgICAgICAgaWYgKGkgIT09IGxlbmd0aCAtIDEpIHtcbiAgICAgICAgICBtc2cgKz0gJ1xcbidcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZGVsZXRlIGN0eC5vdXRwdXRbaV0uYmFzZTY0SW1hZ2VcbiAgICAgIGRlbGV0ZSBjdHgub3V0cHV0W2ldLmJ1ZmZlclxuICAgIH1cbiAgICBjdHguZW1pdChJQnVpbGRJbkV2ZW50LkZJTklTSEVELCBjdHgpXG4gICAgY3R4LmxvZy5zdWNjZXNzKGBcXG4ke21zZ31gKVxuICAgIHJldHVybiBjdHhcbiAgfVxuXG4gIC8vIFBsdWdpbiBoYW5kbGluZ1xuICBwcml2YXRlIGFzeW5jIGhhbmRsZVBsdWdpbnMobGlmZUN5Y2xlUGx1Z2luczogSUxpZmVjeWNsZVBsdWdpbnMsIGN0eDogSVBpY0dvKTogUHJvbWlzZTxJUGljR28+IHtcbiAgICBjb25zdCBwbHVnaW5zID0gbGlmZUN5Y2xlUGx1Z2lucy5nZXRMaXN0KClcbiAgICBjb25zdCBwbHVnaW5OYW1lcyA9IGxpZmVDeWNsZVBsdWdpbnMuZ2V0SWRMaXN0KClcbiAgICBjb25zdCBsaWZlQ3ljbGVOYW1lID0gbGlmZUN5Y2xlUGx1Z2lucy5nZXROYW1lKClcblxuICAgIGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgcGx1Z2lucy5tYXAoYXN5bmMgKHBsdWdpbjogSVBsdWdpbiwgaW5kZXg6IG51bWJlcikgPT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGN0eC5sb2cuaW5mbyhgJHtsaWZlQ3ljbGVOYW1lfTogJHtwbHVnaW5OYW1lc1tpbmRleF19IHJ1bm5pbmdgKVxuICAgICAgICAgIGF3YWl0IHBsdWdpbi5oYW5kbGUoY3R4KVxuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgY3R4LmxvZy5lcnJvcihgJHtsaWZlQ3ljbGVOYW1lfTogJHtwbHVnaW5OYW1lc1tpbmRleF19IGVycm9yYClcbiAgICAgICAgICB0aHJvdyBlXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgKVxuICAgIHJldHVybiBjdHhcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBMaWZlY3ljbGVcbiIsImltcG9ydCB7IElQaWNHbywgSVBsdWdpbkNvbmZpZywgSU9sZFJlcU9wdGlvbnMsIElBZHZhbmNlZFBsaXN0Q29uZmlnIH0gZnJvbSAnLi4vLi4vdHlwZXMnXG5pbXBvcnQgeyBJQnVpbGRJbkV2ZW50IH0gZnJvbSAnLi4vLi4vdXRpbHMvZW51bSdcbmltcG9ydCB7IElMb2NhbGVzS2V5IH0gZnJvbSAnLi4vLi4vaTE4bi96aC1DTidcbmltcG9ydCB7IGJ1aWxkSW5VcGxvYWRlck5hbWVzIH0gZnJvbSAnLi91dGlscydcblxuY29uc3QgcG9zdE9wdGlvbnMgPSAoXG4gIGltYWdlOiBCdWZmZXIsXG4gIGZpbGVOYW1lOiBzdHJpbmcsXG4gIGVuZHBvaW50OiBzdHJpbmcsXG4gIG1ldGhvZDogc3RyaW5nLFxuICBoZWFkZXJzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+LFxuICBib2R5OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+LFxuICBmb3JtRGF0YUtleTogc3RyaW5nXG4pOiBJT2xkUmVxT3B0aW9ucyA9PiAoe1xuICBtZXRob2Q6IG1ldGhvZC50b1VwcGVyQ2FzZSgpIGFzIGFueSxcbiAgdXJsOiBlbmRwb2ludCxcbiAgaGVhZGVyczoge1xuICAgIGNvbnRlbnRUeXBlOiAnbXVsdGlwYXJ0L2Zvcm0tZGF0YScsXG4gICAgJ1VzZXItQWdlbnQnOiAnUGljTGlzdCcsXG4gICAgLi4uaGVhZGVyc1xuICB9LFxuICBmb3JtRGF0YToge1xuICAgIFtmb3JtRGF0YUtleV06IHtcbiAgICAgIHZhbHVlOiBpbWFnZSxcbiAgICAgIG9wdGlvbnM6IHsgZmlsZW5hbWU6IGZpbGVOYW1lIH1cbiAgICB9LFxuICAgIC4uLmJvZHlcbiAgfSxcbiAganNvbjogdHJ1ZVxufSlcblxuY29uc3QgaGFuZGxlID0gYXN5bmMgKGN0eDogSVBpY0dvKTogUHJvbWlzZTxJUGljR28+ID0+IHtcbiAgY29uc3QgYWR2YW5jZWRwbGlzdENvbmZpZyA9IGN0eC5nZXRDb25maWc8SUFkdmFuY2VkUGxpc3RDb25maWc+KCdwaWNCZWQuYWR2YW5jZWRwbGlzdCcpXG4gIGlmICghYWR2YW5jZWRwbGlzdENvbmZpZykgdGhyb3cgbmV3IEVycm9yKCdDYW4gbm90IGZpbmQgYWR2YW5jZWRwbGlzdCBjb25maWcnKVxuXG4gIGNvbnN0IGltZ0xpc3QgPSBjdHgub3V0cHV0XG4gIGZvciAoY29uc3QgaW1nIG9mIGltZ0xpc3QpIHtcbiAgICBpZiAoaW1nLmZpbGVOYW1lICYmIGltZy5idWZmZXIpIHtcbiAgICAgIGNvbnN0IGltYWdlID0gaW1nLmJ1ZmZlciB8fCAoaW1nLmJhc2U2NEltYWdlID8gQnVmZmVyLmZyb20oaW1nLmJhc2U2NEltYWdlLCAnYmFzZTY0JykgOiBudWxsKVxuICAgICAgaWYgKCFpbWFnZSkgY29udGludWVcblxuICAgICAgY29uc3QgcG9zdENvbmZpZyA9IHBvc3RPcHRpb25zKFxuICAgICAgICBpbWFnZSxcbiAgICAgICAgaW1nLmZpbGVOYW1lLFxuICAgICAgICBhZHZhbmNlZHBsaXN0Q29uZmlnLmVuZHBvaW50LFxuICAgICAgICBhZHZhbmNlZHBsaXN0Q29uZmlnLm1ldGhvZCB8fCAnUE9TVCcsXG4gICAgICAgIEpTT04ucGFyc2UoYWR2YW5jZWRwbGlzdENvbmZpZy5oZWFkZXJzIHx8ICd7fScpLFxuICAgICAgICBKU09OLnBhcnNlKGFkdmFuY2VkcGxpc3RDb25maWcuYm9keSB8fCAne30nKSxcbiAgICAgICAgYWR2YW5jZWRwbGlzdENvbmZpZy5mb3JtRGF0YUtleSB8fCAnZmlsZSdcbiAgICAgIClcblxuICAgICAgbGV0IGJvZHkgPSAoYXdhaXQgY3R4LnJlcXVlc3QocG9zdENvbmZpZykpIGFzIGFueVxuICAgICAgYm9keSA9IHR5cGVvZiBib2R5ID09PSAnc3RyaW5nJyA/IEpTT04ucGFyc2UoYm9keSkgOiBib2R5XG5cbiAgICAgIC8vIEV4dHJhY3QgaW1hZ2UgVVJMIGZyb20gcmVzcG9uc2UgdXNpbmcgcmVzRGF0YVBhdGhcbiAgICAgIGxldCBpbWFnZVVybCA9IGJvZHlcbiAgICAgIGNvbnN0IHJlc0RhdGFQYXRoID0gYWR2YW5jZWRwbGlzdENvbmZpZy5yZXNEYXRhUGF0aCB8fCAnZGF0YS51cmwnXG4gICAgICBmb3IgKGNvbnN0IGtleSBvZiByZXNEYXRhUGF0aC5zcGxpdCgnLicpKSB7XG4gICAgICAgIGlmIChpbWFnZVVybCAmJiB0eXBlb2YgaW1hZ2VVcmwgPT09ICdvYmplY3QnICYmIGtleSBpbiBpbWFnZVVybCkge1xuICAgICAgICAgIGltYWdlVXJsID0gaW1hZ2VVcmxba2V5XVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGltYWdlVXJsID0gdW5kZWZpbmVkXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoaW1hZ2VVcmwgJiYgdHlwZW9mIGltYWdlVXJsID09PSAnc3RyaW5nJykge1xuICAgICAgICBkZWxldGUgaW1nLmJhc2U2NEltYWdlXG4gICAgICAgIGRlbGV0ZSBpbWcuYnVmZmVyXG4gICAgICAgIGlmIChhZHZhbmNlZHBsaXN0Q29uZmlnLndlYlBhdGgpIHtcbiAgICAgICAgICBjb25zdCBmaWxlTmFtZSA9IGltYWdlVXJsLnNwbGl0KCcvJykucG9wKCkgfHwgaW1hZ2VVcmxcbiAgICAgICAgICBjb25zdCB3ZWJQYXRoID0gYWR2YW5jZWRwbGlzdENvbmZpZy53ZWJQYXRoLmVuZHNXaXRoKCcvJylcbiAgICAgICAgICAgID8gYWR2YW5jZWRwbGlzdENvbmZpZy53ZWJQYXRoXG4gICAgICAgICAgICA6IGFkdmFuY2VkcGxpc3RDb25maWcud2ViUGF0aCArICcvJ1xuICAgICAgICAgIGltYWdlVXJsID0gd2ViUGF0aCArIGZpbGVOYW1lXG4gICAgICAgIH1cbiAgICAgICAgaW1nLmltZ1VybCA9IGFkdmFuY2VkcGxpc3RDb25maWcuY3VzdG9tUHJlZml4ID8gYWR2YW5jZWRwbGlzdENvbmZpZy5jdXN0b21QcmVmaXggKyBpbWFnZVVybCA6IGltYWdlVXJsXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjdHguZW1pdChJQnVpbGRJbkV2ZW50Lk5PVElGSUNBVElPTiwge1xuICAgICAgICAgIHRpdGxlOiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdVUExPQURfRkFJTEVEJyksXG4gICAgICAgICAgYm9keTogYm9keS5tZXNzYWdlXG4gICAgICAgIH0pXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0FkdmFuY2VkUGxpc3QgdXBsb2FkIGZhaWxlZDonLCBib2R5KVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYm9keS5tZXNzYWdlKVxuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gY3R4XG59XG5cbmNvbnN0IGNvbmZpZyA9IChjdHg6IElQaWNHbyk6IElQbHVnaW5Db25maWdbXSA9PiB7XG4gIGNvbnN0IHVzZXJDb25maWcgPSBjdHguZ2V0Q29uZmlnPElBZHZhbmNlZFBsaXN0Q29uZmlnPigncGljQmVkLmFkdmFuY2VkcGxpc3QnKSB8fCB7fVxuXG4gIGNvbnN0IGNyZWF0ZUNvbmZpZ0ZpZWxkID0gKFxuICAgIG5hbWU6IHN0cmluZyxcbiAgICB0eXBlOiBzdHJpbmcsXG4gICAgZGVmYXVsdFZhbHVlOiBhbnksXG4gICAgcmVxdWlyZWQ6IGJvb2xlYW4gPSBmYWxzZSxcbiAgICBleHRyYXM/OiBhbnlcbiAgKSA9PiAoe1xuICAgIG5hbWUsXG4gICAgdHlwZSxcbiAgICBnZXQgcHJlZml4KCkge1xuICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oYFBJQ0JFRF9BRFZBTkNFRFBMSVNUXyR7bmFtZS50b1VwcGVyQ2FzZSgpfWAgYXMgSUxvY2FsZXNLZXkpXG4gICAgfSxcbiAgICBnZXQgYWxpYXMoKSB7XG4gICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PihgUElDQkVEX0FEVkFOQ0VEUExJU1RfJHtuYW1lLnRvVXBwZXJDYXNlKCl9YCBhcyBJTG9jYWxlc0tleSlcbiAgICB9LFxuICAgIGdldCBtZXNzYWdlKCkge1xuICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oYFBJQ0JFRF9BRFZBTkNFRFBMSVNUX01FU1NBR0VfJHtuYW1lLnRvVXBwZXJDYXNlKCl9YCBhcyBJTG9jYWxlc0tleSlcbiAgICB9LFxuICAgIGRlZmF1bHQ6IHVzZXJDb25maWdbbmFtZSBhcyBrZXlvZiBJQWR2YW5jZWRQbGlzdENvbmZpZ10gfHwgZGVmYXVsdFZhbHVlLFxuICAgIHJlcXVpcmVkLFxuICAgIC4uLmV4dHJhc1xuICB9KVxuXG4gIHJldHVybiBbXG4gICAgY3JlYXRlQ29uZmlnRmllbGQoJ2VuZHBvaW50JywgJ2lucHV0JywgJycsIHRydWUpLFxuICAgIGNyZWF0ZUNvbmZpZ0ZpZWxkKCdtZXRob2QnLCAnbGlzdCcsICdQT1NUJywgZmFsc2UsIHsgY2hvaWNlczogWydQT1NUJywgJ1BVVCcsICdHRVQnXSB9KSxcbiAgICBjcmVhdGVDb25maWdGaWVsZCgnZm9ybURhdGFLZXknLCAnaW5wdXQnLCAnZmlsZScpLFxuICAgIGNyZWF0ZUNvbmZpZ0ZpZWxkKCdoZWFkZXJzJywgJ2lucHV0JywgJ3t9JyksXG4gICAgY3JlYXRlQ29uZmlnRmllbGQoJ2JvZHknLCAnaW5wdXQnLCAne30nKSxcbiAgICBjcmVhdGVDb25maWdGaWVsZCgnY3VzdG9tUHJlZml4JywgJ2lucHV0JywgJycpLFxuICAgIGNyZWF0ZUNvbmZpZ0ZpZWxkKCd3ZWJQYXRoJywgJ2lucHV0JywgJycpLFxuICAgIGNyZWF0ZUNvbmZpZ0ZpZWxkKCdyZXNEYXRhUGF0aCcsICdpbnB1dCcsICdkYXRhLnVybCcpXG4gIF1cbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcmVnaXN0ZXIoY3R4OiBJUGljR28pOiB2b2lkIHtcbiAgY3R4LmhlbHBlci51cGxvYWRlci5yZWdpc3RlcihidWlsZEluVXBsb2FkZXJOYW1lcy5hZHZhbmNlZHBsaXN0LCB7XG4gICAgZ2V0IG5hbWUoKSB7XG4gICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FEVkFOQ0VEUExJU1QnKVxuICAgIH0sXG4gICAgaGFuZGxlLFxuICAgIGNvbmZpZ1xuICB9KVxufVxuIiwiaW1wb3J0IGF4aW9zIGZyb20gJ2F4aW9zJ1xuaW1wb3J0IHsgSVBpY0dvLCBJUGx1Z2luQ29uZmlnLCBJQWxpc3RDb25maWcsIElPbGRSZXFPcHRpb25zLCBJRnVsbFJlc3BvbnNlIH0gZnJvbSAnLi4vLi4vdHlwZXMnXG5pbXBvcnQgeyBJQnVpbGRJbkV2ZW50IH0gZnJvbSAnLi4vLi4vdXRpbHMvZW51bSdcbmltcG9ydCB7IElMb2NhbGVzS2V5IH0gZnJvbSAnLi4vLi4vaTE4bi96aC1DTidcbmltcG9ydCB7IGJ1aWxkSW5VcGxvYWRlck5hbWVzLCBlbmNvZGVQYXRoLCBmb3JtYXRQYXRoSGVscGVyLCBjcmVhdGVGaWVsZCB9IGZyb20gJy4vdXRpbHMnXG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJ1xuXG5pbnRlcmZhY2UgSUFsaXN0VG9rZW5TdG9yZSB7XG4gIHRva2VuOiBzdHJpbmdcbiAgcmVmcmVzaGVkQXQ6IG51bWJlclxufVxuXG5jb25zdCBnZXRBbGlzdFRva2VuID0gYXN5bmMgKGN0eDogSVBpY0dvLCB1cmw6IHN0cmluZywgdXNlcm5hbWU6IHN0cmluZywgcGFzc3dvcmQ6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiA9PiB7XG4gIGNvbnN0IHRva2VuU3RvcmUgPSBjdHguZ2V0Q29uZmlnPElBbGlzdFRva2VuU3RvcmU+KCdwaWNnby1wbHVnaW4tYnVpbGRpbi1hbGlzdHBsaXN0JylcbiAgaWYgKHRva2VuU3RvcmUgJiYgdG9rZW5TdG9yZS5yZWZyZXNoZWRBdCAmJiBEYXRlLm5vdygpIC0gdG9rZW5TdG9yZS5yZWZyZXNoZWRBdCA8IDM2MDAwMDAgJiYgdG9rZW5TdG9yZS50b2tlbikge1xuICAgIHJldHVybiB0b2tlblN0b3JlLnRva2VuXG4gIH1cbiAgY29uc3QgcmVzID0gYXdhaXQgYXhpb3MucG9zdChgJHt1cmx9L2FwaS9hdXRoL2xvZ2luYCwge1xuICAgIHVzZXJuYW1lLFxuICAgIHBhc3N3b3JkXG4gIH0pXG4gIGlmIChyZXMuZGF0YS5jb2RlID09PSAyMDAgJiYgcmVzLmRhdGEubWVzc2FnZSA9PT0gJ3N1Y2Nlc3MnKSB7XG4gICAgY29uc3QgdG9rZW4gPSByZXMuZGF0YS5kYXRhLnRva2VuXG4gICAgY3R4LnNhdmVDb25maWcoe1xuICAgICAgJ3BpY2dvLXBsdWdpbi1idWlsZGluLWFsaXN0cGxpc3QnOiB7XG4gICAgICAgIHRva2VuLFxuICAgICAgICByZWZyZXNoZWRBdDogRGF0ZS5ub3coKVxuICAgICAgfVxuICAgIH0pXG4gICAgcmV0dXJuIHRva2VuXG4gIH1cbiAgdGhyb3cgbmV3IEVycm9yKCdHZXQgdG9rZW4gZmFpbGVkJylcbn1cblxuY29uc3QgcG9zdE9wdGlvbnMgPSAodXJsOiBzdHJpbmcsIHRva2VuOiBzdHJpbmcsIGZpbGVOYW1lOiBzdHJpbmcsIGZpbGVQYXRoOiBzdHJpbmcsIGltYWdlOiBCdWZmZXIpOiBJT2xkUmVxT3B0aW9ucyA9PiB7XG4gIHJldHVybiB7XG4gICAgbWV0aG9kOiAnUFVUJyxcbiAgICB1cmw6IGAke3VybH0vYXBpL2ZzL2Zvcm1gLFxuICAgIGhlYWRlcnM6IHtcbiAgICAgIGNvbnRlbnRUeXBlOiAnbXVsdGlwYXJ0L2Zvcm0tZGF0YScsXG4gICAgICAnVXNlci1BZ2VudCc6ICdQaWNMaXN0JyxcbiAgICAgIEF1dGhvcml6YXRpb246IHRva2VuLFxuICAgICAgJ0ZpbGUtUGF0aCc6IGVuY29kZVVSSUNvbXBvbmVudChmaWxlUGF0aClcbiAgICB9LFxuICAgIGZvcm1EYXRhOiB7XG4gICAgICBmaWxlOiB7XG4gICAgICAgIHZhbHVlOiBpbWFnZSxcbiAgICAgICAgb3B0aW9uczoge1xuICAgICAgICAgIGZpbGVuYW1lOiBmaWxlTmFtZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgICByZXNvbHZlV2l0aEZ1bGxSZXNwb25zZTogdHJ1ZVxuICB9XG59XG5cbmNvbnN0IGhhbmRsZVJlc0Vycm9yID0gKGN0eDogSVBpY0dvLCByZXM6IElGdWxsUmVzcG9uc2UpOiB2b2lkID0+IHtcbiAgaWYgKHJlcy5zdGF0dXNDb2RlICE9PSAyMDAgfHwgcmVzLmJvZHkuY29kZSAhPT0gMjAwIHx8IHJlcy5ib2R5Lm1lc3NhZ2UgIT09ICdzdWNjZXNzJykge1xuICAgIGN0eC5lbWl0KElCdWlsZEluRXZlbnQuTk9USUZJQ0FUSU9OLCB7XG4gICAgICB0aXRsZTogY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignVVBMT0FEX0ZBSUxFRCcpLFxuICAgICAgYm9keTogY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQ0hFQ0tfU0VUVElOR1NfQU5EX05FVFdPUksnKSxcbiAgICAgIHRleHQ6IHJlcy5ib2R5Lm1lc3NhZ2VcbiAgICB9KVxuICAgIHRocm93IG5ldyBFcnJvcihyZXMuYm9keS5tZXNzYWdlKVxuICB9XG59XG5cbmNvbnN0IGNyZWF0ZUFwaVJlcXVlc3QgPSAodXJsOiBzdHJpbmcsIHRva2VuOiBzdHJpbmcsIGJvZHk6IGFueSk6IElPbGRSZXFPcHRpb25zID0+ICh7XG4gIG1ldGhvZDogJ1BPU1QnLFxuICB1cmwsXG4gIGhlYWRlcnM6IHtcbiAgICBBdXRob3JpemF0aW9uOiB0b2tlbixcbiAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nXG4gIH0sXG4gIGJvZHksXG4gIHJlc29sdmVXaXRoRnVsbFJlc3BvbnNlOiB0cnVlXG59KVxuXG5jb25zdCBleHRyYWN0Q29uZmlnID0gKGNvbmZpZzogSUFsaXN0Q29uZmlnKSA9PiB7XG4gIGNvbnN0IHsgdXJsLCB0b2tlbiwgdXNlcm5hbWUsIHBhc3N3b3JkLCB1cGxvYWRQYXRoLCB3ZWJQYXRoLCBjdXN0b21VcmwgfSA9IGNvbmZpZ1xuICByZXR1cm4ge1xuICAgIHVybDogKHVybCB8fCAnJykucmVwbGFjZSgvXFwvJC8sICcnKSxcbiAgICB0b2tlbjogdG9rZW4gfHwgJycsXG4gICAgdXNlcm5hbWU6IHVzZXJuYW1lIHx8ICcnLFxuICAgIHBhc3N3b3JkOiBwYXNzd29yZCB8fCAnJyxcbiAgICB1cGxvYWRQYXRoOiBmb3JtYXRQYXRoSGVscGVyKHtcbiAgICAgIHBhdGg6IHVwbG9hZFBhdGggfHwgJycsXG4gICAgICBzdGFydFNsYXNoOiB0cnVlLFxuICAgICAgZW5kU2xhc2g6IHRydWUsXG4gICAgICByb290VG9FbXB0eTogZmFsc2VcbiAgICB9KSxcbiAgICB3ZWJQYXRoOiB3ZWJQYXRoXG4gICAgICA/IGZvcm1hdFBhdGhIZWxwZXIoe1xuICAgICAgICAgIHBhdGg6IHdlYlBhdGggfHwgJycsXG4gICAgICAgICAgc3RhcnRTbGFzaDogdHJ1ZSxcbiAgICAgICAgICBlbmRTbGFzaDogdHJ1ZSxcbiAgICAgICAgICByb290VG9FbXB0eTogZmFsc2VcbiAgICAgICAgfSlcbiAgICAgIDogJycsXG4gICAgY3VzdG9tVXJsOiAoY3VzdG9tVXJsIHx8ICcnKS5yZXBsYWNlKC9cXC8kLywgJycpXG4gIH1cbn1cblxuY29uc3QgaGFuZGxlID0gYXN5bmMgKGN0eDogSVBpY0dvKTogUHJvbWlzZTxJUGljR28+ID0+IHtcbiAgY29uc3QgYWxpc3RDb25maWcgPSBjdHguZ2V0Q29uZmlnPElBbGlzdENvbmZpZz4oJ3BpY0JlZC5hbGlzdHBsaXN0JylcbiAgaWYgKCFhbGlzdENvbmZpZykgdGhyb3cgbmV3IEVycm9yKCdDYW4gbm90IGZpbmQgYWxpc3QgY29uZmlnIScpXG5cbiAgY29uc3QgeyB1cmwsIHVzZXJuYW1lLCBwYXNzd29yZCwgdXBsb2FkUGF0aCwgd2ViUGF0aCwgY3VzdG9tVXJsIH0gPSBleHRyYWN0Q29uZmlnKGFsaXN0Q29uZmlnKVxuICBsZXQgeyB0b2tlbiB9ID0gZXh0cmFjdENvbmZpZyhhbGlzdENvbmZpZylcbiAgaWYgKCF0b2tlbikge1xuICAgIHRva2VuID0gYXdhaXQgZ2V0QWxpc3RUb2tlbihjdHgsIHVybCwgdXNlcm5hbWUsIHBhc3N3b3JkKVxuICB9XG4gIGlmICghdXJsIHx8ICEodG9rZW4gfHwgKHVzZXJuYW1lICYmIHBhc3N3b3JkKSkpIHRocm93IG5ldyBFcnJvcignUGxlYXNlIGNoZWNrIHlvdXIgYWxpc3QgY29uZmlnIScpXG5cbiAgY29uc3QgaW1nTGlzdCA9IGN0eC5vdXRwdXRcbiAgZm9yIChjb25zdCBpbWcgb2YgaW1nTGlzdCkge1xuICAgIGlmIChpbWcuZmlsZU5hbWUgJiYgaW1nLmJ1ZmZlcikge1xuICAgICAgbGV0IGltYWdlID0gaW1nLmJ1ZmZlclxuICAgICAgaWYgKCFpbWFnZSAmJiBpbWcuYmFzZTY0SW1hZ2UpIHtcbiAgICAgICAgaW1hZ2UgPSBCdWZmZXIuZnJvbShpbWcuYmFzZTY0SW1hZ2UsICdiYXNlNjQnKVxuICAgICAgfVxuICAgICAgY29uc3QgZnVsbFVwbG9hZFBhdGggPSBgJHt1cGxvYWRQYXRofSR7aW1nLmZpbGVOYW1lfWBcbiAgICAgIGNvbnN0IHBvc3RDb25maWcgPSBwb3N0T3B0aW9ucyh1cmwsIHRva2VuLCBpbWcuZmlsZU5hbWUsIGZ1bGxVcGxvYWRQYXRoLCBpbWFnZSlcbiAgICAgIGNvbnN0IHVwbG9hZFJlcyA9IChhd2FpdCBjdHgucmVxdWVzdChwb3N0Q29uZmlnKSkgYXMgdW5rbm93biBhcyBJRnVsbFJlc3BvbnNlXG4gICAgICBoYW5kbGVSZXNFcnJvcihjdHgsIHVwbG9hZFJlcylcblxuICAgICAgY29uc3QgcmVmcmVzaFJlcyA9IChhd2FpdCBjdHgucmVxdWVzdChcbiAgICAgICAgY3JlYXRlQXBpUmVxdWVzdChgJHt1cmx9L2FwaS9mcy9saXN0YCwgdG9rZW4sIHtcbiAgICAgICAgICBwYXNzd29yZDogJycsXG4gICAgICAgICAgcGFnZTogMSxcbiAgICAgICAgICBwZXJfcGFnZTogMSxcbiAgICAgICAgICByZWZyZXNoOiB0cnVlLFxuICAgICAgICAgIHBhdGg6IHBhdGguZGlybmFtZShmdWxsVXBsb2FkUGF0aClcbiAgICAgICAgfSlcbiAgICAgICkpIGFzIHVua25vd24gYXMgSUZ1bGxSZXNwb25zZVxuICAgICAgaGFuZGxlUmVzRXJyb3IoY3R4LCByZWZyZXNoUmVzKVxuXG4gICAgICBjb25zdCBnZXRJbmZvUmVzID0gKGF3YWl0IGN0eC5yZXF1ZXN0KFxuICAgICAgICBjcmVhdGVBcGlSZXF1ZXN0KGAke3VybH0vYXBpL2ZzL2dldGAsIHRva2VuLCB7XG4gICAgICAgICAgcGFzc3dvcmQ6ICcnLFxuICAgICAgICAgIHBhdGg6IGZ1bGxVcGxvYWRQYXRoLFxuICAgICAgICAgIHBhZ2U6IDEsXG4gICAgICAgICAgcGVyX3BhZ2U6IDEsXG4gICAgICAgICAgcmVmcmVzaDogdHJ1ZVxuICAgICAgICB9KVxuICAgICAgKSkgYXMgdW5rbm93biBhcyBJRnVsbFJlc3BvbnNlXG4gICAgICBoYW5kbGVSZXNFcnJvcihjdHgsIGdldEluZm9SZXMpXG5cbiAgICAgIGNvbnN0IHNpZ24gPSBnZXRJbmZvUmVzLmJvZHkuZGF0YS5zaWduXG4gICAgICBjb25zdCBlbmNvZGVkUGF0aCA9IGVuY29kZVBhdGgoYCR7d2ViUGF0aCB8fCB1cGxvYWRQYXRofSR7aW1nLmZpbGVOYW1lfWApXG4gICAgICBpbWcuaW1nVXJsID0gYCR7Y3VzdG9tVXJsIHx8IHVybH0ke2N1c3RvbVVybCAmJiBjdXN0b21VcmwgIT09IHVybCA/ICcnIDogJy9kJ30ke2VuY29kZWRQYXRofWBcbiAgICAgIGltZy5pbWdVcmwgKz0gKCFjdXN0b21VcmwgfHwgY3VzdG9tVXJsID09PSB1cmwpICYmIHNpZ24gPyBgP3NpZ249JHtzaWdufWAgOiAnJ1xuICAgICAgZGVsZXRlIGltZy5iYXNlNjRJbWFnZVxuICAgICAgZGVsZXRlIGltZy5idWZmZXJcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGN0eFxufVxuXG5jb25zdCBjb25maWcgPSAoY3R4OiBJUGljR28pOiBJUGx1Z2luQ29uZmlnW10gPT4ge1xuICBjb25zdCB1c2VyQ29uZmlnID0gY3R4LmdldENvbmZpZzxJQWxpc3RDb25maWc+KCdwaWNCZWQuYWxpc3RwbGlzdCcpIHx8IHt9XG4gIHJldHVybiBbXG4gICAgY3JlYXRlRmllbGQoY3R4LCAnYWxpc3QnLCAndXJsJywgJ2lucHV0JywgdXNlckNvbmZpZy51cmwgfHwgJycsIHRydWUsIHVuZGVmaW5lZCwge1xuICAgICAgZ2V0IG1lc3NhZ2UoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQUxJU1RfTUVTU0FHRV9VUkwnKVxuICAgICAgfVxuICAgIH0pLFxuICAgIGNyZWF0ZUZpZWxkKGN0eCwgJ2FsaXN0JywgJ3Rva2VuJywgJ2lucHV0JywgdXNlckNvbmZpZy50b2tlbiB8fCAnJywgZmFsc2UsIHVuZGVmaW5lZCwge1xuICAgICAgZ2V0IG1lc3NhZ2UoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQUxJU1RfTUVTU0FHRV9UT0tFTicpXG4gICAgICB9XG4gICAgfSksXG4gICAgY3JlYXRlRmllbGQoY3R4LCAnYWxpc3QnLCAndXNlcm5hbWUnLCAnaW5wdXQnLCB1c2VyQ29uZmlnLnVzZXJuYW1lIHx8ICcnLCBmYWxzZSwgdW5kZWZpbmVkLCB7XG4gICAgICBnZXQgbWVzc2FnZSgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BTElTVF9NRVNTQUdFX1VTRVJOQU1FJylcbiAgICAgIH1cbiAgICB9KSxcbiAgICBjcmVhdGVGaWVsZChjdHgsICdhbGlzdCcsICdwYXNzd29yZCcsICdpbnB1dCcsIHVzZXJDb25maWcucGFzc3dvcmQgfHwgJycsIGZhbHNlLCB1bmRlZmluZWQsIHtcbiAgICAgIGdldCBtZXNzYWdlKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FMSVNUX01FU1NBR0VfUEFTU1dPUkQnKVxuICAgICAgfVxuICAgIH0pLFxuICAgIGNyZWF0ZUZpZWxkKGN0eCwgJ2FsaXN0JywgJ3VwbG9hZFBhdGgnLCAnaW5wdXQnLCB1c2VyQ29uZmlnLnVwbG9hZFBhdGggfHwgJycsIGZhbHNlLCB1bmRlZmluZWQsIHtcbiAgICAgIGdldCBtZXNzYWdlKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FMSVNUX01FU1NBR0VfVVBMT0FEX1BBVEgnKVxuICAgICAgfVxuICAgIH0pLFxuICAgIGNyZWF0ZUZpZWxkKGN0eCwgJ2FsaXN0JywgJ3dlYlBhdGgnLCAnaW5wdXQnLCB1c2VyQ29uZmlnLndlYlBhdGggfHwgJycsIGZhbHNlLCB1bmRlZmluZWQsIHtcbiAgICAgIGdldCBtZXNzYWdlKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FMSVNUX01FU1NBR0VfV0VCX1BBVEgnKVxuICAgICAgfVxuICAgIH0pLFxuICAgIGNyZWF0ZUZpZWxkKGN0eCwgJ2FsaXN0JywgJ2N1c3RvbVVybCcsICdpbnB1dCcsIHVzZXJDb25maWcuY3VzdG9tVXJsIHx8ICcnLCBmYWxzZSwgdW5kZWZpbmVkLCB7XG4gICAgICBnZXQgbWVzc2FnZSgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BTElTVF9NRVNTQUdFX0NVU1RPTVVSTCcpXG4gICAgICB9XG4gICAgfSlcbiAgXVxufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiByZWdpc3RlcihjdHg6IElQaWNHbyk6IHZvaWQge1xuICBjdHguaGVscGVyLnVwbG9hZGVyLnJlZ2lzdGVyKGJ1aWxkSW5VcGxvYWRlck5hbWVzLmFsaXN0cGxpc3QsIHtcbiAgICBnZXQgbmFtZSgpIHtcbiAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQUxJU1RfUExJU1QnKVxuICAgIH0sXG4gICAgaGFuZGxlLFxuICAgIGNvbmZpZ1xuICB9KVxufVxuIiwiaW1wb3J0IGNyeXB0byBmcm9tICdjcnlwdG8nXG5pbXBvcnQgeyBsb29rdXAgfSBmcm9tICdtaW1lLXR5cGVzJ1xuaW1wb3J0IHsgSUJ1aWxkSW5FdmVudCB9IGZyb20gJy4uLy4uL3V0aWxzL2VudW0nXG5pbXBvcnQgeyBJTG9jYWxlc0tleSB9IGZyb20gJy4uLy4uL2kxOG4vemgtQ04nXG5pbXBvcnQgeyBidWlsZEluVXBsb2FkZXJOYW1lcywgZW5jb2RlUGF0aCwgZm9ybWF0UGF0aEhlbHBlciwgY3JlYXRlRmllbGQgfSBmcm9tICcuL3V0aWxzJ1xuaW1wb3J0IHsgSVBpY0dvLCBJUGx1Z2luQ29uZmlnLCBJQWxpeXVuQ29uZmlnLCBJT2xkUmVxT3B0aW9uc1dpdGhGdWxsUmVzcG9uc2UgfSBmcm9tICcuLi8uLi90eXBlcydcblxuY29uc3QgZ2V0Q3VycmVudFVUQ0RhdGUgPSAoKTogc3RyaW5nID0+IG5ldyBEYXRlKCkudG9VVENTdHJpbmcoKVxuXG4vLyBnZW5lcmF0ZSBPU1Mgc2lnbmF0dXJlXG5jb25zdCBnZW5lcmF0ZVNpZ25hdHVyZSA9IChvcHRpb25zOiBJQWxpeXVuQ29uZmlnLCBmaWxlTmFtZTogc3RyaW5nKTogc3RyaW5nID0+IHtcbiAgY29uc3QgZGF0ZSA9IGdldEN1cnJlbnRVVENEYXRlKClcbiAgY29uc3QgbWltZVR5cGUgPSBsb29rdXAoZmlsZU5hbWUpIHx8ICdhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0nXG4gIGNvbnN0IHNpZ25TdHJpbmcgPSBgUFVUXFxuXFxuJHttaW1lVHlwZX1cXG4ke2RhdGV9XFxuLyR7b3B0aW9ucy5idWNrZXR9LyR7b3B0aW9ucy5wYXRofSR7ZmlsZU5hbWV9YFxuICBjb25zdCBzaWduYXR1cmUgPSBjcnlwdG8uY3JlYXRlSG1hYygnc2hhMScsIG9wdGlvbnMuYWNjZXNzS2V5U2VjcmV0KS51cGRhdGUoc2lnblN0cmluZykuZGlnZXN0KCdiYXNlNjQnKVxuICByZXR1cm4gYE9TUyAke29wdGlvbnMuYWNjZXNzS2V5SWR9OiR7c2lnbmF0dXJlfWBcbn1cblxuY29uc3QgcG9zdE9wdGlvbnMgPSAoXG4gIG9wdGlvbnM6IElBbGl5dW5Db25maWcsXG4gIGZpbGVOYW1lOiBzdHJpbmcsXG4gIHNpZ25hdHVyZTogc3RyaW5nLFxuICBpbWFnZTogQnVmZmVyXG4pOiBJT2xkUmVxT3B0aW9uc1dpdGhGdWxsUmVzcG9uc2UgPT4gKHtcbiAgbWV0aG9kOiAnUFVUJyxcbiAgdXJsOiBgaHR0cHM6Ly8ke29wdGlvbnMuYnVja2V0fS4ke29wdGlvbnMuYXJlYX0uYWxpeXVuY3MuY29tLyR7ZW5jb2RlUGF0aChgJHtvcHRpb25zLnBhdGh9JHtmaWxlTmFtZX1gKX1gLFxuICBoZWFkZXJzOiB7XG4gICAgSG9zdDogYCR7b3B0aW9ucy5idWNrZXR9LiR7b3B0aW9ucy5hcmVhfS5hbGl5dW5jcy5jb21gLFxuICAgIEF1dGhvcml6YXRpb246IHNpZ25hdHVyZSxcbiAgICBEYXRlOiBnZXRDdXJyZW50VVRDRGF0ZSgpLFxuICAgICdDb250ZW50LVR5cGUnOiBsb29rdXAoZmlsZU5hbWUpIHx8ICdhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0nXG4gIH0sXG4gIGJvZHk6IGltYWdlLFxuICByZXNvbHZlV2l0aEZ1bGxSZXNwb25zZTogdHJ1ZVxufSlcblxuY29uc3QgaGFuZGxlID0gYXN5bmMgKGN0eDogSVBpY0dvKTogUHJvbWlzZTxJUGljR28+ID0+IHtcbiAgY29uc3QgYWxpWXVuT3B0aW9ucyA9IGN0eC5nZXRDb25maWc8SUFsaXl1bkNvbmZpZz4oJ3BpY0JlZC5hbGl5dW4nKVxuICBpZiAoIWFsaVl1bk9wdGlvbnMpIHRocm93IG5ldyBFcnJvcihcIkNhbid0IGZpbmQgYWxpWXVuIE9TUyBjb25maWdcIilcblxuICBhbGlZdW5PcHRpb25zLnBhdGggPSBmb3JtYXRQYXRoSGVscGVyKHsgcGF0aDogYWxpWXVuT3B0aW9ucy5wYXRoIH0pXG4gIGNvbnN0IHdlYlBhdGggPSBmb3JtYXRQYXRoSGVscGVyKHsgcGF0aDogYWxpWXVuT3B0aW9ucy53ZWJQYXRoIH0pXG5cbiAgdHJ5IHtcbiAgICBjb25zdCB7IG91dHB1dDogaW1nTGlzdCB9ID0gY3R4XG4gICAgY29uc3QgY3VzdG9tVXJsID0gKGFsaVl1bk9wdGlvbnMuY3VzdG9tVXJsIHx8ICcnKS5yZXBsYWNlKC9cXC8kLywgJycpXG4gICAgY29uc3QgeyBwYXRoLCBidWNrZXQsIGFyZWEsIG9wdGlvbnM6IHVybE9wdGlvbnMgPSAnJyB9ID0gYWxpWXVuT3B0aW9uc1xuXG4gICAgZm9yIChjb25zdCBpbWcgb2YgaW1nTGlzdCkge1xuICAgICAgaWYgKGltZy5maWxlTmFtZSAmJiBpbWcuYnVmZmVyKSB7XG4gICAgICAgIGNvbnN0IHNpZ25hdHVyZSA9IGdlbmVyYXRlU2lnbmF0dXJlKGFsaVl1bk9wdGlvbnMsIGltZy5maWxlTmFtZSlcbiAgICAgICAgY29uc3QgaW1hZ2UgPSBpbWcuYnVmZmVyIHx8IEJ1ZmZlci5mcm9tKGltZy5iYXNlNjRJbWFnZSEsICdiYXNlNjQnKVxuICAgICAgICBjb25zdCBvcHRpb25zID0gcG9zdE9wdGlvbnMoYWxpWXVuT3B0aW9ucywgaW1nLmZpbGVOYW1lLCBzaWduYXR1cmUsIGltYWdlKVxuICAgICAgICBjb25zdCBib2R5ID0gYXdhaXQgY3R4LnJlcXVlc3Qob3B0aW9ucylcblxuICAgICAgICBpZiAoYm9keS5zdGF0dXNDb2RlID09PSAyMDApIHtcbiAgICAgICAgICBkZWxldGUgaW1nLmJhc2U2NEltYWdlXG4gICAgICAgICAgZGVsZXRlIGltZy5idWZmZXJcbiAgICAgICAgICBjb25zdCBlbmNvZGVkUGF0aCA9IGVuY29kZVBhdGgoYCR7d2ViUGF0aCB8fCBwYXRofSR7aW1nLmZpbGVOYW1lfWApXG4gICAgICAgICAgaW1nLmltZ1VybCA9IGN1c3RvbVVybFxuICAgICAgICAgICAgPyBgJHtjdXN0b21Vcmx9LyR7ZW5jb2RlZFBhdGh9JHt1cmxPcHRpb25zfWBcbiAgICAgICAgICAgIDogYGh0dHBzOi8vJHtidWNrZXR9LiR7YXJlYX0uYWxpeXVuY3MuY29tLyR7ZW5jb2RlZFBhdGh9JHt1cmxPcHRpb25zfWBcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VwbG9hZCBmYWlsZWQnKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBjdHhcbiAgfSBjYXRjaCAoZXJyOiBhbnkpIHtcbiAgICBjdHguZW1pdChJQnVpbGRJbkV2ZW50Lk5PVElGSUNBVElPTiwge1xuICAgICAgdGl0bGU6IGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1VQTE9BRF9GQUlMRUQnKSxcbiAgICAgIGJvZHk6IGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0NIRUNLX1NFVFRJTkdTJylcbiAgICB9KVxuICAgIHRocm93IGVyclxuICB9XG59XG5cbmNvbnN0IGNvbmZpZyA9IChjdHg6IElQaWNHbyk6IElQbHVnaW5Db25maWdbXSA9PiB7XG4gIGNvbnN0IHVzZXJDb25maWcgPSBjdHguZ2V0Q29uZmlnPElBbGl5dW5Db25maWc+KCdwaWNCZWQuYWxpeXVuJykgfHwge31cbiAgcmV0dXJuIFtcbiAgICBjcmVhdGVGaWVsZChjdHgsICdhbGljbG91ZCcsICdhY2Nlc3NLZXlJZCcsICdpbnB1dCcsIHVzZXJDb25maWcuYWNjZXNzS2V5SWQgfHwgJycsIHRydWUpLFxuICAgIGNyZWF0ZUZpZWxkKGN0eCwgJ2FsaWNsb3VkJywgJ2FjY2Vzc0tleVNlY3JldCcsICdpbnB1dCcsIHVzZXJDb25maWcuYWNjZXNzS2V5U2VjcmV0IHx8ICcnLCB0cnVlKSxcbiAgICBjcmVhdGVGaWVsZChjdHgsICdhbGljbG91ZCcsICdidWNrZXQnLCAnaW5wdXQnLCB1c2VyQ29uZmlnLmJ1Y2tldCB8fCAnJywgdHJ1ZSksXG4gICAgY3JlYXRlRmllbGQoY3R4LCAnYWxpY2xvdWQnLCAnYXJlYScsICdpbnB1dCcsIHVzZXJDb25maWcuYXJlYSB8fCAnJywgdHJ1ZSwgdW5kZWZpbmVkLCB7XG4gICAgICBnZXQgbWVzc2FnZSgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BTElDTE9VRF9NRVNTQUdFX0FSRUEnKVxuICAgICAgfVxuICAgIH0pLFxuICAgIGNyZWF0ZUZpZWxkKGN0eCwgJ2FsaWNsb3VkJywgJ3BhdGgnLCAnaW5wdXQnLCB1c2VyQ29uZmlnLnBhdGggfHwgJycsIGZhbHNlLCB1bmRlZmluZWQsIHtcbiAgICAgIGdldCBtZXNzYWdlKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FMSUNMT1VEX01FU1NBR0VfUEFUSCcpXG4gICAgICB9XG4gICAgfSksXG4gICAgY3JlYXRlRmllbGQoY3R4LCAnYWxpY2xvdWQnLCAnd2ViUGF0aCcsICdpbnB1dCcsIHVzZXJDb25maWcud2ViUGF0aCB8fCAnJywgZmFsc2UsIHVuZGVmaW5lZCwge1xuICAgICAgZ2V0IG1lc3NhZ2UoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQUxJQ0xPVURfTUVTU0FHRV9XRUJQQVRIJylcbiAgICAgIH1cbiAgICB9KSxcbiAgICBjcmVhdGVGaWVsZChjdHgsICdhbGljbG91ZCcsICdjdXN0b21VcmwnLCAnaW5wdXQnLCB1c2VyQ29uZmlnLmN1c3RvbVVybCB8fCAnJywgZmFsc2UsIHVuZGVmaW5lZCwge1xuICAgICAgZ2V0IG1lc3NhZ2UoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQUxJQ0xPVURfTUVTU0FHRV9DVVNUT01VUkwnKVxuICAgICAgfVxuICAgIH0pLFxuICAgIGNyZWF0ZUZpZWxkKGN0eCwgJ2FsaWNsb3VkJywgJ29wdGlvbnMnLCAnaW5wdXQnLCB1c2VyQ29uZmlnLm9wdGlvbnMgfHwgJycsIGZhbHNlLCB1bmRlZmluZWQsIHtcbiAgICAgIGdldCBtZXNzYWdlKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FMSUNMT1VEX01FU1NBR0VfT1BUSU9OUycpXG4gICAgICB9XG4gICAgfSlcbiAgXVxufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiByZWdpc3RlcihjdHg6IElQaWNHbyk6IHZvaWQge1xuICBjdHguaGVscGVyLnVwbG9hZGVyLnJlZ2lzdGVyKGJ1aWxkSW5VcGxvYWRlck5hbWVzLmFsaXl1biwge1xuICAgIGdldCBuYW1lKCkge1xuICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BTElDTE9VRCcpXG4gICAgfSxcbiAgICBoYW5kbGUsXG4gICAgY29uZmlnXG4gIH0pXG59XG4iLCJpbXBvcnQgY3J5cHRvIGZyb20gJ2NyeXB0bydcbmltcG9ydCBGaWxlVHlwZSBmcm9tICdmaWxlLXR5cGUnXG5pbXBvcnQgbWltZSBmcm9tICdtaW1lJ1xuaW1wb3J0IHsgSHR0cHNQcm94eUFnZW50LCBIdHRwUHJveHlBZ2VudCB9IGZyb20gJ2hwYWdlbnQnXG5pbXBvcnQgeyBJSW1nSW5mbyB9IGZyb20gJy4uLy4uLy4uL3R5cGVzJ1xuaW1wb3J0IHsgVVJMIH0gZnJvbSAndXJsJ1xuXG5jbGFzcyBGaWxlTmFtZUdlbmVyYXRvciB7XG4gIGRhdGU6IERhdGVcbiAgaW5mbzogSUltZ0luZm9cblxuICBzdGF0aWMgZmllbGRzID0gW1xuICAgICd5ZWFyJywgLy8g5b2T5YmN5pel5pyfIC0g5bm0XG4gICAgJ21vbnRoJywgLy8g5b2T5YmN5pel5pyfIC0g5pyIXG4gICAgJ2RheScsIC8vIOW9k+WJjeaXpeacnyAtIOaXpVxuICAgICdmdWxsTmFtZScsIC8vIOaWh+S7tuWQjSwg5YyF5ZCr5omp5bGV5ZCNXG4gICAgJ2ZpbGVOYW1lJywgLy8g5paH5Lu25ZCNLCDkuI3ljIXlkKvmianlsZXlkI1cbiAgICAnZXh0TmFtZScsIC8vIOaJqeWxleWQjVxuICAgICdtZDUnLCAvLyBtZDVcbiAgICAnbWQ1QjY0JywgLy8gbWQ1IGJhc2U2NFxuICAgICdtZDVCNjRTaG9ydCcsIC8vIG1kNSBiYXNlNjQgc2hvcnRcbiAgICAnc2hhMScsIC8vIHNoYTFcbiAgICAnc2hhMjU2JywgLy8gc2hhMjU2XG4gICAgJ3RpbWVzdGFtcCcsIC8vIOW9k+WJjeaXtumXtOaIsywg56eSXG4gICAgJ3RpbWVzdGFtcE1TJyAvLyDlvZPliY3ml7bpl7TmiLMsIOavq+enklxuICBdXG5cbiAgY29uc3RydWN0b3IoaW5mbzogSUltZ0luZm8pIHtcbiAgICB0aGlzLmRhdGUgPSBuZXcgRGF0ZSgpXG4gICAgdGhpcy5pbmZvID0gaW5mb1xuICB9XG5cbiAgcHVibGljIHllYXIoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYCR7dGhpcy5kYXRlLmdldEZ1bGxZZWFyKCl9YFxuICB9XG5cbiAgcHVibGljIG1vbnRoKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuICh0aGlzLmRhdGUuZ2V0TW9udGgoKSArIDEpLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgJzAnKVxuICB9XG5cbiAgcHVibGljIGRheSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmRhdGUuZ2V0RGF0ZSgpLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgJzAnKVxuICB9XG5cbiAgcHVibGljIGZ1bGxOYW1lKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuaW5mby5maWxlTmFtZVxuICB9XG5cbiAgcHVibGljIGZpbGVOYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuICh0aGlzLmluZm8uZmlsZU5hbWUgPz8gJycpLnJlcGxhY2UodGhpcy5pbmZvLmV4dG5hbWUgPz8gJycsICcnKVxuICB9XG5cbiAgcHVibGljIGV4dE5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gKHRoaXMuaW5mby5leHRuYW1lID8/ICcnKS5yZXBsYWNlKCcuJywgJycpXG4gIH1cblxuICBwdWJsaWMgbWQ1KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGNyeXB0by5jcmVhdGVIYXNoKCdtZDUnKS51cGRhdGUodGhpcy5pbWdCdWZmZXIoKSEpLmRpZ2VzdCgnaGV4JylcbiAgfVxuXG4gIHB1YmxpYyBtZDVCNjQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gY3J5cHRvXG4gICAgICAuY3JlYXRlSGFzaCgnbWQ1JylcbiAgICAgIC51cGRhdGUodGhpcy5pbWdCdWZmZXIoKSEpXG4gICAgICAuZGlnZXN0KCdiYXNlNjQnKVxuICAgICAgLnJlcGxhY2UoL1xcKy9nLCAnLScpXG4gICAgICAucmVwbGFjZSgvXFwvL2csICdfJylcbiAgICAgIC5yZXBsYWNlKC89KyQvLCAnJylcbiAgfVxuXG4gIHB1YmxpYyBtZDVCNjRTaG9ydCgpOiBzdHJpbmcge1xuICAgIHJldHVybiBjcnlwdG9cbiAgICAgIC5jcmVhdGVIYXNoKCdtZDUnKVxuICAgICAgLnVwZGF0ZSh0aGlzLmltZ0J1ZmZlcigpISlcbiAgICAgIC5kaWdlc3QoJ2Jhc2U2NCcpXG4gICAgICAucmVwbGFjZSgvXFwrL2csICctJylcbiAgICAgIC5yZXBsYWNlKC9cXC8vZywgJ18nKVxuICAgICAgLnNsaWNlKDAsIDcpXG4gIH1cblxuICBwdWJsaWMgc2hhMSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBjcnlwdG8uY3JlYXRlSGFzaCgnc2hhMScpLnVwZGF0ZSh0aGlzLmltZ0J1ZmZlcigpISkuZGlnZXN0KCdoZXgnKVxuICB9XG5cbiAgcHVibGljIHNoYTI1NigpOiBzdHJpbmcge1xuICAgIHJldHVybiBjcnlwdG8uY3JlYXRlSGFzaCgnc2hhMjU2JykudXBkYXRlKHRoaXMuaW1nQnVmZmVyKCkhKS5kaWdlc3QoJ2hleCcpXG4gIH1cblxuICBwdWJsaWMgdGltZXN0YW1wKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIE1hdGguZmxvb3IoRGF0ZS5ub3coKSAvIDEwMDApLnRvU3RyaW5nKClcbiAgfVxuXG4gIHB1YmxpYyB0aW1lc3RhbXBNUygpOiBzdHJpbmcge1xuICAgIHJldHVybiBEYXRlLm5vdygpLnRvU3RyaW5nKClcbiAgfVxuXG4gIHByaXZhdGUgaW1nQnVmZmVyKCk6IHN0cmluZyB8IEJ1ZmZlciB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuaW5mby5iYXNlNjRJbWFnZSA/IHRoaXMuaW5mby5iYXNlNjRJbWFnZSA6IHRoaXMuaW5mby5idWZmZXJcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZm9ybWF0UGF0aChpbmZvOiBJSW1nSW5mbywgZm9ybWF0Pzogc3RyaW5nKTogc3RyaW5nIHtcbiAgaWYgKCFmb3JtYXQpIHtcbiAgICByZXR1cm4gaW5mby5maWxlTmFtZSFcbiAgfVxuXG4gIGNvbnN0IGZpbGVOYW1lR2VuZXJhdG9yID0gbmV3IEZpbGVOYW1lR2VuZXJhdG9yKGluZm8pXG5cbiAgbGV0IGZvcm1hdFBhdGg6IHN0cmluZyA9IGZvcm1hdFxuXG4gIGZvciAoY29uc3Qga2V5IG9mIEZpbGVOYW1lR2VuZXJhdG9yLmZpZWxkcykge1xuICAgIGNvbnN0IHJlID0gbmV3IFJlZ0V4cChgeyR7a2V5fX1gLCAnZycpXG4gICAgLy8gQHRzLWV4cGVjdC1lcnJvciB0cy1taWdyYXRlKDI1MzIpIEZJWE1FOiBPYmplY3QgaXMgcG9zc2libHkgJ3VuZGVmaW5lZCcuXG4gICAgZm9ybWF0UGF0aCA9IGZvcm1hdFBhdGgucmVwbGFjZShyZSwgZmlsZU5hbWVHZW5lcmF0b3Jba2V5XSgpKVxuICB9XG5cbiAgcmV0dXJuIGZvcm1hdFBhdGhcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGV4dHJhY3RJbmZvKGluZm86IElJbWdJbmZvKTogUHJvbWlzZTx7XG4gIGJvZHk/OiBCdWZmZXJcbiAgY29udGVudFR5cGU/OiBzdHJpbmdcbiAgY29udGVudEVuY29kaW5nPzogc3RyaW5nXG59PiB7XG4gIGNvbnN0IHJlc3VsdDoge1xuICAgIGJvZHk/OiBCdWZmZXJcbiAgICBjb250ZW50VHlwZT86IHN0cmluZ1xuICAgIGNvbnRlbnRFbmNvZGluZz86IHN0cmluZ1xuICB9ID0ge31cblxuICBpZiAoaW5mby5iYXNlNjRJbWFnZSkge1xuICAgIGNvbnN0IGJvZHkgPSBpbmZvLmJhc2U2NEltYWdlLnJlcGxhY2UoL15kYXRhOlsvXFx3XSs7YmFzZTY0LC8sICcnKVxuICAgIHJlc3VsdC5jb250ZW50VHlwZSA9IGluZm8uYmFzZTY0SW1hZ2UubWF0Y2goL1teOl1cXHcrXFwvW1xcdy0rXFxkLl0rKD89O3wsKS8pPy5bMF1cbiAgICByZXN1bHQuYm9keSA9IEJ1ZmZlci5mcm9tKGJvZHksICdiYXNlNjQnKVxuICAgIHJlc3VsdC5jb250ZW50RW5jb2RpbmcgPSAnYmFzZTY0J1xuICB9IGVsc2Uge1xuICAgIGlmIChpbmZvLmV4dG5hbWUpIHtcbiAgICAgIHJlc3VsdC5jb250ZW50VHlwZSA9IG1pbWUuZ2V0VHlwZShpbmZvLmV4dG5hbWUpIVxuICAgIH1cbiAgICByZXN1bHQuYm9keSA9IGluZm8uYnVmZmVyXG4gIH1cblxuICAvLyBmYWxsYmFjayB0byBkZXRlY3QgZnJvbSBidWZmZXJcbiAgaWYgKCFyZXN1bHQuY29udGVudFR5cGUpIHtcbiAgICBjb25zdCBmaWxlVHlwZSA9IGF3YWl0IEZpbGVUeXBlLmZyb21CdWZmZXIocmVzdWx0LmJvZHkhKVxuICAgIHJlc3VsdC5jb250ZW50VHlwZSA9IGZpbGVUeXBlPy5taW1lXG4gIH1cblxuICByZXR1cm4gcmVzdWx0XG59XG5cbmZ1bmN0aW9uIGZvcm1hdEh0dHBQcm94eVVSTCh1cmwgPSAnJyk6IHN0cmluZyB7XG4gIGlmICghdXJsKSByZXR1cm4gJydcblxuICBpZiAoIS9eaHR0cHM/OlxcL1xcLy8udGVzdCh1cmwpKSB7XG4gICAgY29uc3QgW2hvc3QsIHBvcnRdID0gdXJsLnNwbGl0KCc6JylcbiAgICByZXR1cm4gYGh0dHA6Ly8ke2hvc3QucmVwbGFjZSgnMTI3LjAuMC4xJywgJ2xvY2FsaG9zdCcpfToke3BvcnR9YFxuICB9XG5cbiAgdHJ5IHtcbiAgICBjb25zdCB7IHByb3RvY29sLCBob3N0bmFtZSwgcG9ydCB9ID0gbmV3IFVSTCh1cmwpXG4gICAgcmV0dXJuIGAke3Byb3RvY29sfS8vJHtob3N0bmFtZS5yZXBsYWNlKCcxMjcuMC4wLjEnLCAnbG9jYWxob3N0Jyl9OiR7cG9ydH1gXG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gJydcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0UHJveHlBZ2VudChcbiAgcHJveHk6IHN0cmluZyB8IHVuZGVmaW5lZCxcbiAgc3NsRW5hYmxlZDogYm9vbGVhbixcbiAgcmVqZWN0VW5hdXRob3JpemVkOiBib29sZWFuXG4pOiBIdHRwUHJveHlBZ2VudCB8IEh0dHBzUHJveHlBZ2VudCB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IGZvcm1hdGVkUHJveHkgPSBmb3JtYXRIdHRwUHJveHlVUkwocHJveHkpXG4gIGlmICghZm9ybWF0ZWRQcm94eSkge1xuICAgIHJldHVybiB1bmRlZmluZWRcbiAgfVxuXG4gIGNvbnN0IEFnZW50ID0gc3NsRW5hYmxlZCA/IEh0dHBzUHJveHlBZ2VudCA6IEh0dHBQcm94eUFnZW50XG4gIGNvbnN0IG9wdGlvbnMgPSB7XG4gICAga2VlcEFsaXZlOiB0cnVlLFxuICAgIGtlZXBBbGl2ZU1zZWNzOiAxMDAwLFxuICAgIHNjaGVkdWxpbmc6ICdsaWZvJyBhcyAnbGlmbycgfCAnZmlmbycgfCB1bmRlZmluZWQsXG4gICAgcmVqZWN0VW5hdXRob3JpemVkLFxuICAgIHByb3h5OiBmb3JtYXRlZFByb3h5XG4gIH1cblxuICByZXR1cm4gbmV3IEFnZW50KG9wdGlvbnMpXG59XG4iLCJpbXBvcnQge1xuICBTM0NsaWVudENvbmZpZyxcbiAgUzNDbGllbnQsXG4gIFB1dE9iamVjdENvbW1hbmQsXG4gIEdldE9iamVjdENvbW1hbmQsXG4gIFB1dE9iamVjdENvbW1hbmRPdXRwdXRcbn0gZnJvbSAnQGF3cy1zZGsvY2xpZW50LXMzJ1xuaW1wb3J0IHsgZ2V0U2lnbmVkVXJsIH0gZnJvbSAnQGF3cy1zZGsvczMtcmVxdWVzdC1wcmVzaWduZXInXG5pbXBvcnQgeyBOb2RlSHR0cEhhbmRsZXIsIE5vZGVIdHRwSGFuZGxlck9wdGlvbnMgfSBmcm9tICdAc21pdGh5L25vZGUtaHR0cC1oYW5kbGVyJ1xuXG5pbXBvcnQgdXJsIGZyb20gJ3VybCdcbmltcG9ydCB7IEh0dHBQcm94eUFnZW50LCBIdHRwc1Byb3h5QWdlbnQgfSBmcm9tICdocGFnZW50J1xuaW1wb3J0IHsgSUF3c1MzUExpc3RVc2VyQ29uZmlnLCBJSW1nSW5mbyB9IGZyb20gJy4uLy4uLy4uL3R5cGVzJ1xuaW1wb3J0IHsgZXh0cmFjdEluZm8sIGdldFByb3h5QWdlbnQgfSBmcm9tICcuL3V0aWxzJ1xuXG5leHBvcnQgaW50ZXJmYWNlIElVcGxvYWRSZXN1bHQge1xuICBrZXk6IHN0cmluZ1xuICB1cmw6IHN0cmluZ1xuICBpbWdVUkw6IHN0cmluZ1xuICB2ZXJzaW9uSWQ/OiBzdHJpbmdcbiAgZVRhZz86IHN0cmluZ1xufVxuXG5mdW5jdGlvbiBjcmVhdGVTM0NsaWVudChvcHRzOiBJQXdzUzNQTGlzdFVzZXJDb25maWcpOiBTM0NsaWVudCB7XG4gIGxldCBzc2xFbmFibGVkID0gdHJ1ZVxuICB0cnkge1xuICAgIGNvbnN0IHUgPSBuZXcgdXJsLlVSTChvcHRzLmVuZHBvaW50ISlcbiAgICBzc2xFbmFibGVkID0gdS5wcm90b2NvbCA9PT0gJ2h0dHBzOidcbiAgfSBjYXRjaCB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWVtcHR5XG4gIH1cblxuICBjb25zdCBodHRwSGFuZGxlck9wdHM6IE5vZGVIdHRwSGFuZGxlck9wdGlvbnMgPSB7fVxuICBpZiAoc3NsRW5hYmxlZCkge1xuICAgIGh0dHBIYW5kbGVyT3B0cy5odHRwc0FnZW50ID0gZ2V0UHJveHlBZ2VudChvcHRzLnByb3h5LCB0cnVlLCBvcHRzLnJlamVjdFVuYXV0aG9yaXplZCA/PyBmYWxzZSkgYXMgSHR0cHNQcm94eUFnZW50XG4gIH0gZWxzZSB7XG4gICAgaHR0cEhhbmRsZXJPcHRzLmh0dHBBZ2VudCA9IGdldFByb3h5QWdlbnQob3B0cy5wcm94eSwgZmFsc2UsIG9wdHMucmVqZWN0VW5hdXRob3JpemVkID8/IGZhbHNlKSBhcyBIdHRwUHJveHlBZ2VudFxuICB9XG5cbiAgY29uc3QgY2xpZW50T3B0aW9uczogUzNDbGllbnRDb25maWcgPSB7XG4gICAgcmVnaW9uOiBvcHRzLnJlZ2lvbiB8fCAnYXV0bycsXG4gICAgZW5kcG9pbnQ6IG9wdHMuZW5kcG9pbnQgfHwgdW5kZWZpbmVkLFxuICAgIGNyZWRlbnRpYWxzOiB7XG4gICAgICBhY2Nlc3NLZXlJZDogb3B0cy5hY2Nlc3NLZXlJRCxcbiAgICAgIHNlY3JldEFjY2Vzc0tleTogb3B0cy5zZWNyZXRBY2Nlc3NLZXlcbiAgICB9LFxuICAgIHRsczogc3NsRW5hYmxlZCxcbiAgICBmb3JjZVBhdGhTdHlsZTogb3B0cy5wYXRoU3R5bGVBY2Nlc3MsXG4gICAgcmVxdWVzdEhhbmRsZXI6IG5ldyBOb2RlSHR0cEhhbmRsZXIoaHR0cEhhbmRsZXJPcHRzKVxuICB9XG5cbiAgcmV0dXJuIG5ldyBTM0NsaWVudChjbGllbnRPcHRpb25zKVxufVxuXG5pbnRlcmZhY2UgSUNyZWF0ZVVwbG9hZFRhc2tPcHRzIHtcbiAgY2xpZW50OiBhbnlcbiAgYnVja2V0TmFtZTogc3RyaW5nXG4gIHBhdGg6IHN0cmluZ1xuICBpdGVtOiBJSW1nSW5mb1xuICBhY2w6IHN0cmluZ1xuICB1cmxQcmVmaXg/OiBzdHJpbmdcbn1cblxuYXN5bmMgZnVuY3Rpb24gY3JlYXRlVXBsb2FkVGFzayhvcHRzOiBJQ3JlYXRlVXBsb2FkVGFza09wdHMpOiBQcm9taXNlPElVcGxvYWRSZXN1bHQ+IHtcbiAgaWYgKCFvcHRzLml0ZW0uYnVmZmVyICYmICFvcHRzLml0ZW0uYmFzZTY0SW1hZ2UpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3VuZGVmaW5lZCBpbWFnZScpXG4gIH1cbiAgdHJ5IHtcbiAgICBjb25zdCB7IGJvZHksIGNvbnRlbnRUeXBlLCBjb250ZW50RW5jb2RpbmcgfSA9IGF3YWl0IGV4dHJhY3RJbmZvKG9wdHMuaXRlbSlcblxuICAgIGNvbnN0IGNvbW1hbmQgPSBuZXcgUHV0T2JqZWN0Q29tbWFuZCh7XG4gICAgICBCdWNrZXQ6IG9wdHMuYnVja2V0TmFtZSxcbiAgICAgIEtleTogb3B0cy5wYXRoLFxuICAgICAgQUNMOiBvcHRzLmFjbCxcbiAgICAgIEJvZHk6IGJvZHksXG4gICAgICBDb250ZW50VHlwZTogY29udGVudFR5cGUsXG4gICAgICBDb250ZW50RW5jb2Rpbmc6IGNvbnRlbnRFbmNvZGluZ1xuICAgIH0pXG5cbiAgICBjb25zdCBvdXRwdXQ6IFB1dE9iamVjdENvbW1hbmRPdXRwdXQgPSBhd2FpdCBvcHRzLmNsaWVudC5zZW5kKGNvbW1hbmQpXG5cbiAgICBsZXQgdXJsOiBzdHJpbmdcbiAgICBpZiAoIW9wdHMudXJsUHJlZml4KSB7XG4gICAgICB1cmwgPSBhd2FpdCBnZXRGaWxlVVJMKG9wdHMsIG91dHB1dC5FVGFnISwgb3V0cHV0LlZlcnNpb25JZCEpXG4gICAgfSBlbHNlIHtcbiAgICAgIHVybCA9IGAke29wdHMudXJsUHJlZml4fS8ke29wdHMucGF0aH1gXG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGtleTogb3B0cy5wYXRoLFxuICAgICAgdXJsLFxuICAgICAgaW1nVVJMOiB1cmwsXG4gICAgICB2ZXJzaW9uSWQ6IG91dHB1dC5WZXJzaW9uSWQsXG4gICAgICBlVGFnOiBvdXRwdXQuRVRhZ1xuICAgIH1cbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVqZWN0KGVycilcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiBnZXRGaWxlVVJMKG9wdHM6IElDcmVhdGVVcGxvYWRUYXNrT3B0cywgZVRhZzogc3RyaW5nLCB2ZXJzaW9uSWQ6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IHNpZ25lZFVybCA9IGF3YWl0IGdldFNpZ25lZFVybChcbiAgICBvcHRzLmNsaWVudCxcbiAgICBuZXcgR2V0T2JqZWN0Q29tbWFuZCh7XG4gICAgICBCdWNrZXQ6IG9wdHMuYnVja2V0TmFtZSxcbiAgICAgIEtleTogb3B0cy5wYXRoLFxuICAgICAgSWZNYXRjaDogZVRhZyxcbiAgICAgIFZlcnNpb25JZDogdmVyc2lvbklkXG4gICAgfSksXG4gICAgeyBleHBpcmVzSW46IDM2MDAgfVxuICApXG4gIGNvbnN0IHVybE9iamVjdCA9IG5ldyB1cmwuVVJMKHNpZ25lZFVybClcbiAgdXJsT2JqZWN0LnNlYXJjaCA9ICcnXG4gIHJldHVybiB1cmxPYmplY3QuaHJlZlxufVxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIGNyZWF0ZVMzQ2xpZW50LFxuICBjcmVhdGVVcGxvYWRUYXNrXG59XG4iLCJpbXBvcnQgdXBsb2FkZXIgZnJvbSAnLi9zMy91cGxvYWRlcidcblxuaW1wb3J0IHsgZm9ybWF0UGF0aCB9IGZyb20gJy4vczMvdXRpbHMnXG5pbXBvcnQgeyBJQXdzUzNQTGlzdFVzZXJDb25maWcsIElQaWNHbywgSVBsdWdpbkNvbmZpZyB9IGZyb20gJy4uLy4uL3R5cGVzJ1xuaW1wb3J0IHsgSUxvY2FsZXNLZXkgfSBmcm9tICcuLi8uLi9pMThuL3poLUNOJ1xuaW1wb3J0IHsgSUJ1aWxkSW5FdmVudCB9IGZyb20gJy4uLy4uL3V0aWxzL2VudW0nXG5pbXBvcnQgeyBidWlsZEluVXBsb2FkZXJOYW1lcyB9IGZyb20gJy4vdXRpbHMnXG5cbmZ1bmN0aW9uIGZvcm1hdERpc2FibGVCdWNrZXRQcmVmaXhUb1VSTChkaXNhYmxlQnVja2V0UHJlZml4VG9VUkw6IHN0cmluZyB8IGJvb2xlYW4gfCB1bmRlZmluZWQpOiBib29sZWFuIHtcbiAgaWYgKHR5cGVvZiBkaXNhYmxlQnVja2V0UHJlZml4VG9VUkwgPT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIGRpc2FibGVCdWNrZXRQcmVmaXhUb1VSTC50b0xvd2VyQ2FzZSgpID09PSAndHJ1ZSdcbiAgfVxuICByZXR1cm4gQm9vbGVhbihkaXNhYmxlQnVja2V0UHJlZml4VG9VUkwpXG59XG5cbmNvbnN0IGhhbmRsZSA9IGFzeW5jIChjdHg6IElQaWNHbyk6IFByb21pc2U8SVBpY0dvPiA9PiB7XG4gIGNvbnN0IHVzZXJDb25maWc6IElBd3NTM1BMaXN0VXNlckNvbmZpZyA9IGN0eC5nZXRDb25maWcoJ3BpY0JlZC5hd3MtczMtcGxpc3QnKVxuICBpZiAoIXVzZXJDb25maWcpIHRocm93IG5ldyBFcnJvcihcIkNhbid0IGZpbmQgYXdzIHMzIHVwbG9hZGVyIGNvbmZpZ1wiKVxuICB0cnkge1xuICAgIGNvbnN0IGRpc2FibGVCdWNrZXRQcmVmaXhUb1VSTCA9IGZvcm1hdERpc2FibGVCdWNrZXRQcmVmaXhUb1VSTCh1c2VyQ29uZmlnLmRpc2FibGVCdWNrZXRQcmVmaXhUb1VSTClcbiAgICBsZXQgdXJsUHJlZml4ID0gdXNlckNvbmZpZy51cmxQcmVmaXhcbiAgICBpZiAodXJsUHJlZml4KSB7XG4gICAgICB1cmxQcmVmaXggPSB1cmxQcmVmaXgucmVwbGFjZSgvXFwvPyQvLCAnJylcbiAgICAgIGlmICh1c2VyQ29uZmlnLnBhdGhTdHlsZUFjY2VzcyAmJiAhZGlzYWJsZUJ1Y2tldFByZWZpeFRvVVJMKSB7XG4gICAgICAgIHVybFByZWZpeCArPSAnLycgKyB1c2VyQ29uZmlnLmJ1Y2tldE5hbWVcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgY2xpZW50ID0gdXBsb2FkZXIuY3JlYXRlUzNDbGllbnQodXNlckNvbmZpZylcbiAgICBjb25zdCBpbWdMaXN0ID0gY3R4Lm91dHB1dFxuICAgIGZvciAoY29uc3QgaW1nIG9mIGltZ0xpc3QpIHtcbiAgICAgIGNvbnN0IHRhc2sgPSBhd2FpdCB1cGxvYWRlci5jcmVhdGVVcGxvYWRUYXNrKHtcbiAgICAgICAgY2xpZW50LFxuICAgICAgICBidWNrZXROYW1lOiB1c2VyQ29uZmlnLmJ1Y2tldE5hbWUsXG4gICAgICAgIHBhdGg6IGZvcm1hdFBhdGgoaW1nLCB1c2VyQ29uZmlnLnVwbG9hZFBhdGgpLFxuICAgICAgICBpdGVtOiBpbWcsXG4gICAgICAgIGFjbDogdXNlckNvbmZpZy5hY2wgfHwgJ3B1YmxpYy1yZWFkJyxcbiAgICAgICAgdXJsUHJlZml4XG4gICAgICB9KVxuICAgICAgZGVsZXRlIGltZy5idWZmZXJcbiAgICAgIGRlbGV0ZSBpbWcuYmFzZTY0SW1hZ2VcbiAgICAgIGltZy5pbWdVcmwgPSB0YXNrLmltZ1VSTFxuICAgICAgaW1nLnVybCA9IHRhc2sudXJsXG4gICAgfVxuXG4gICAgcmV0dXJuIGN0eFxuICB9IGNhdGNoIChlcnI6IGFueSkge1xuICAgIGN0eC5lbWl0KElCdWlsZEluRXZlbnQuTk9USUZJQ0FUSU9OLCB7XG4gICAgICB0aXRsZTogY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignVVBMT0FEX0ZBSUxFRCcpLFxuICAgICAgYm9keTogY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQ0hFQ0tfU0VUVElOR1NfQU5EX05FVFdPUksnKSxcbiAgICAgIHRleHQ6ICcnXG4gICAgfSlcbiAgICB0aHJvdyBlcnJcbiAgfVxufVxuXG5jb25zdCBjb25maWcgPSAoY3R4OiBJUGljR28pOiBJUGx1Z2luQ29uZmlnW10gPT4ge1xuICBjb25zdCBkZWZhdWx0Q29uZmlnOiBJQXdzUzNQTGlzdFVzZXJDb25maWcgPSB7XG4gICAgYWNjZXNzS2V5SUQ6ICcnLFxuICAgIHNlY3JldEFjY2Vzc0tleTogJycsXG4gICAgYnVja2V0TmFtZTogJycsXG4gICAgdXBsb2FkUGF0aDogJ3t5ZWFyfS97bW9udGh9L3ttZDV9LntleHROYW1lfScsXG4gICAgcGF0aFN0eWxlQWNjZXNzOiBmYWxzZSxcbiAgICByZWplY3RVbmF1dGhvcml6ZWQ6IGZhbHNlLFxuICAgIGFjbDogJ3B1YmxpYy1yZWFkJ1xuICB9XG4gIGxldCB1c2VyQ29uZmlnID0gY3R4LmdldENvbmZpZzxJQXdzUzNQTGlzdFVzZXJDb25maWc+KCdwaWNCZWQuYXdzLXMzLXBsaXN0JykgfHwge31cbiAgdXNlckNvbmZpZyA9IHsgLi4uZGVmYXVsdENvbmZpZywgLi4udXNlckNvbmZpZyB9XG4gIGNvbnN0IGNvbmZpZzogSVBsdWdpbkNvbmZpZ1tdID0gW1xuICAgIHtcbiAgICAgIG5hbWU6ICdhY2Nlc3NLZXlJRCcsXG4gICAgICB0eXBlOiAnaW5wdXQnLFxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5hY2Nlc3NLZXlJRCxcbiAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgZ2V0IHByZWZpeCgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BV1NTM1BMSVNUX0FDQ0VTU0tFWUlEJylcbiAgICAgIH0sXG4gICAgICBnZXQgYWxpYXMoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQVdTUzNQTElTVF9BQ0NFU1NLRVlJRCcpXG4gICAgICB9LFxuICAgICAgZ2V0IG1lc3NhZ2UoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQVdTUzNQTElTVF9NRVNTQUdFX0FDQ0VTU0tFWUlEJylcbiAgICAgIH1cbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdzZWNyZXRBY2Nlc3NLZXknLFxuICAgICAgdHlwZTogJ2lucHV0JyxcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuc2VjcmV0QWNjZXNzS2V5LFxuICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICBnZXQgcHJlZml4KCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FXU1MzUExJU1RfU0VDUkVUX0FDQ0VTU0tFWScpXG4gICAgICB9LFxuICAgICAgZ2V0IGFsaWFzKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FXU1MzUExJU1RfU0VDUkVUX0FDQ0VTU0tFWScpXG4gICAgICB9LFxuICAgICAgZ2V0IG1lc3NhZ2UoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQVdTUzNQTElTVF9NRVNTQUdFX1NFQ1JFVF9BQ0NFU1NLRVknKVxuICAgICAgfVxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ2J1Y2tldE5hbWUnLFxuICAgICAgdHlwZTogJ2lucHV0JyxcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuYnVja2V0TmFtZSxcbiAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgZ2V0IHByZWZpeCgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BV1NTM1BMSVNUX0JVQ0tFVCcpXG4gICAgICB9LFxuICAgICAgZ2V0IGFsaWFzKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FXU1MzUExJU1RfQlVDS0VUJylcbiAgICAgIH0sXG4gICAgICBnZXQgbWVzc2FnZSgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BV1NTM1BMSVNUX01FU1NBR0VfQlVDS0VUJylcbiAgICAgIH1cbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICd1cGxvYWRQYXRoJyxcbiAgICAgIHR5cGU6ICdpbnB1dCcsXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLnVwbG9hZFBhdGgsXG4gICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgIGdldCBwcmVmaXgoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQVdTUzNQTElTVF9VUExPQURQQVRIJylcbiAgICAgIH0sXG4gICAgICBnZXQgYWxpYXMoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQVdTUzNQTElTVF9VUExPQURQQVRIJylcbiAgICAgIH0sXG4gICAgICBnZXQgbWVzc2FnZSgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BV1NTM1BMSVNUX01FU1NBR0VfVVBMT0FEUEFUSCcpXG4gICAgICB9XG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAncmVnaW9uJyxcbiAgICAgIHR5cGU6ICdpbnB1dCcsXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLnJlZ2lvbixcbiAgICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICAgIGdldCBwcmVmaXgoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQVdTUzNQTElTVF9SRUdJT04nKVxuICAgICAgfSxcbiAgICAgIGdldCBhbGlhcygpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BV1NTM1BMSVNUX1JFR0lPTicpXG4gICAgICB9LFxuICAgICAgZ2V0IG1lc3NhZ2UoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQVdTUzNQTElTVF9NRVNTQUdFX1JFR0lPTicpXG4gICAgICB9XG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAnZW5kcG9pbnQnLFxuICAgICAgdHlwZTogJ2lucHV0JyxcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuZW5kcG9pbnQsXG4gICAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgICBnZXQgcHJlZml4KCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FXU1MzUExJU1RfRU5EUE9JTlQnKVxuICAgICAgfSxcbiAgICAgIGdldCBhbGlhcygpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BV1NTM1BMSVNUX0VORFBPSU5UJylcbiAgICAgIH0sXG4gICAgICBnZXQgbWVzc2FnZSgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BV1NTM1BMSVNUX01FU1NBR0VfRU5EUE9JTlQnKVxuICAgICAgfVxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ3Byb3h5JyxcbiAgICAgIHR5cGU6ICdpbnB1dCcsXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLnByb3h5LFxuICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgICAgZ2V0IHByZWZpeCgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BV1NTM1BMSVNUX1BST1hZJylcbiAgICAgIH0sXG4gICAgICBnZXQgYWxpYXMoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQVdTUzNQTElTVF9QUk9YWScpXG4gICAgICB9LFxuICAgICAgZ2V0IG1lc3NhZ2UoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQVdTUzNQTElTVF9NRVNTQUdFX1BST1hZJylcbiAgICAgIH1cbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICd1cmxQcmVmaXgnLFxuICAgICAgdHlwZTogJ2lucHV0JyxcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcudXJsUHJlZml4LFxuICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgICAgZ2V0IHByZWZpeCgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BV1NTM1BMSVNUX1VSTFBSRUZJWCcpXG4gICAgICB9LFxuICAgICAgZ2V0IGFsaWFzKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FXU1MzUExJU1RfVVJMUFJFRklYJylcbiAgICAgIH0sXG4gICAgICBnZXQgbWVzc2FnZSgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BV1NTM1BMSVNUX01FU1NBR0VfVVJMUFJFRklYJylcbiAgICAgIH1cbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdwYXRoU3R5bGVBY2Nlc3MnLFxuICAgICAgdHlwZTogJ2NvbmZpcm0nLFxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5wYXRoU3R5bGVBY2Nlc3MgfHwgZmFsc2UsXG4gICAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgICBnZXQgcHJlZml4KCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FXU1MzUExJU1RfUEFUSFNUWUxFQUNDRVNTJylcbiAgICAgIH0sXG4gICAgICBnZXQgYWxpYXMoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQVdTUzNQTElTVF9QQVRIU1RZTEVBQ0NFU1MnKVxuICAgICAgfSxcbiAgICAgIGdldCBtZXNzYWdlKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FXU1MzUExJU1RfTUVTU0FHRV9QQVRIU1RZTEVBQ0NFU1MnKVxuICAgICAgfVxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ3JlamVjdFVuYXV0aG9yaXplZCcsXG4gICAgICB0eXBlOiAnY29uZmlybScsXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLnJlamVjdFVuYXV0aG9yaXplZCB8fCBmYWxzZSxcbiAgICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICAgIGdldCBwcmVmaXgoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQVdTUzNQTElTVF9SRUpFQ1RVTkFVVEhPUklaRUQnKVxuICAgICAgfSxcbiAgICAgIGdldCBhbGlhcygpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BV1NTM1BMSVNUX1JFSkVDVFVOQVVUSE9SSVpFRCcpXG4gICAgICB9LFxuICAgICAgZ2V0IG1lc3NhZ2UoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQVdTUzNQTElTVF9NRVNTQUdFX1JFSkVDVFVOQVVUSE9SSVpFRCcpXG4gICAgICB9XG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAnYWNsJyxcbiAgICAgIHR5cGU6ICdsaXN0JyxcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuYWNsIHx8ICdwdWJsaWMtcmVhZCcsXG4gICAgICBjaG9pY2VzOiBbXG4gICAgICAgICdwcml2YXRlJyxcbiAgICAgICAgJ3B1YmxpYy1yZWFkJyxcbiAgICAgICAgJ3B1YmxpYy1yZWFkLXdyaXRlJyxcbiAgICAgICAgJ2F1dGhlbnRpY2F0ZWQtcmVhZCcsXG4gICAgICAgICdhd3MtZXhlYy1yZWFkJyxcbiAgICAgICAgJ2J1Y2tldC1vd25lci1yZWFkJyxcbiAgICAgICAgJ2J1Y2tldC1vd25lci1mdWxsLWNvbnRyb2wnXG4gICAgICBdLFxuICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgICAgZ2V0IHByZWZpeCgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BV1NTM1BMSVNUX0FDTCcpXG4gICAgICB9LFxuICAgICAgZ2V0IGFsaWFzKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FXU1MzUExJU1RfQUNMJylcbiAgICAgIH0sXG4gICAgICBnZXQgbWVzc2FnZSgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BV1NTM1BMSVNUX01FU1NBR0VfQUNMJylcbiAgICAgIH1cbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdkaXNhYmxlQnVja2V0UHJlZml4VG9VUkwnLFxuICAgICAgdHlwZTogJ2NvbmZpcm0nLFxuICAgICAgZGVmYXVsdDogZm9ybWF0RGlzYWJsZUJ1Y2tldFByZWZpeFRvVVJMKHVzZXJDb25maWcuZGlzYWJsZUJ1Y2tldFByZWZpeFRvVVJMKSB8fCBmYWxzZSxcbiAgICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICAgIGdldCBwcmVmaXgoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQVdTUzNQTElTVF9ESVNBQkxFQlVDS0VUUFJFRklYVE9VUkwnKVxuICAgICAgfSxcbiAgICAgIGdldCBhbGlhcygpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BV1NTM1BMSVNUX0RJU0FCTEVCVUNLRVRQUkVGSVhUT1VSTCcpXG4gICAgICB9LFxuICAgICAgZ2V0IG1lc3NhZ2UoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQVdTUzNQTElTVF9NRVNTQUdFX0RJU0FCTEVCVUNLRVRQUkVGSVhUT1VSTCcpXG4gICAgICB9XG4gICAgfVxuICBdXG4gIHJldHVybiBjb25maWdcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcmVnaXN0ZXIoY3R4OiBJUGljR28pOiB2b2lkIHtcbiAgY3R4LmhlbHBlci51cGxvYWRlci5yZWdpc3RlcihidWlsZEluVXBsb2FkZXJOYW1lc1snYXdzLXMzLXBsaXN0J10sIHtcbiAgICBnZXQgbmFtZSgpIHtcbiAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQVdTUzNQTElTVCcpXG4gICAgfSxcbiAgICBoYW5kbGUsXG4gICAgY29uZmlnXG4gIH0pXG59XG4iLCJpbXBvcnQgeyBsb29rdXAgfSBmcm9tICdtaW1lLXR5cGVzJ1xuXG5pbXBvcnQgeyBJUGljR28sIElQbHVnaW5Db25maWcsIElHaXRodWJDb25maWcsIElPbGRSZXFPcHRpb25zV2l0aEpTT04gfSBmcm9tICcuLi8uLi90eXBlcydcbmltcG9ydCB7IElCdWlsZEluRXZlbnQgfSBmcm9tICcuLi8uLi91dGlscy9lbnVtJ1xuaW1wb3J0IHsgSUxvY2FsZXNLZXkgfSBmcm9tICcuLi8uLi9pMThuL3poLUNOJ1xuaW1wb3J0IHsgYnVpbGRJblVwbG9hZGVyTmFtZXMsIGVuY29kZVBhdGgsIGZvcm1hdFBhdGhIZWxwZXIgfSBmcm9tICcuL3V0aWxzJ1xuXG5mdW5jdGlvbiBidWlsZEdpdGh1YkFwaVVybChyZXBvOiBzdHJpbmcsIHBhdGg6IHN0cmluZywgZmlsZU5hbWU6IHN0cmluZywgZXh0cmE6IHN0cmluZyA9ICcnKTogc3RyaW5nIHtcbiAgcmV0dXJuIGBodHRwczovL2FwaS5naXRodWIuY29tL3JlcG9zLyR7cmVwb30vY29udGVudHMvJHtlbmNvZGVQYXRoKGAke3BhdGh9JHtmaWxlTmFtZX1gKX0ke2V4dHJhfWBcbn1cblxuY29uc3QgcG9zdE9wdGlvbnMgPSAoZmlsZU5hbWU6IHN0cmluZywgb3B0aW9uczogSUdpdGh1YkNvbmZpZywgZGF0YTogYW55KTogSU9sZFJlcU9wdGlvbnNXaXRoSlNPTiA9PiB7XG4gIGNvbnN0IHsgdG9rZW4sIHJlcG8gfSA9IG9wdGlvbnNcbiAgY29uc3QgY29udGVudFR5cGUgPSBsb29rdXAoZmlsZU5hbWUpIHx8ICdhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0nXG4gIHJldHVybiB7XG4gICAgbWV0aG9kOiAnUFVUJyxcbiAgICB1cmw6IGJ1aWxkR2l0aHViQXBpVXJsKHJlcG8sIG9wdGlvbnMucGF0aCwgZmlsZU5hbWUpLFxuICAgIGhlYWRlcnM6IHtcbiAgICAgIEF1dGhvcml6YXRpb246IGB0b2tlbiAke3Rva2VufWAsXG4gICAgICAnVXNlci1BZ2VudCc6ICdQaWNMaXN0JyxcbiAgICAgICdDb250ZW50LVR5cGUnOiBjb250ZW50VHlwZVxuICAgIH0sXG4gICAgYm9keTogZGF0YSxcbiAgICBqc29uOiB0cnVlXG4gIH0gYXMgY29uc3Rcbn1cblxuY29uc3QgZ2V0T3B0aW9ucyA9IChmaWxlTmFtZTogc3RyaW5nLCBvcHRpb25zOiBJR2l0aHViQ29uZmlnKTogSU9sZFJlcU9wdGlvbnNXaXRoSlNPTiA9PiB7XG4gIGNvbnN0IHsgdG9rZW4sIHJlcG8sIGJyYW5jaCB9ID0gb3B0aW9uc1xuICByZXR1cm4ge1xuICAgIG1ldGhvZDogJ0dFVCcsXG4gICAgdXJsOiBidWlsZEdpdGh1YkFwaVVybChyZXBvLCBvcHRpb25zLnBhdGgsIGZpbGVOYW1lLCBgP3JlZj0ke2JyYW5jaH1gKSxcbiAgICBoZWFkZXJzOiB7XG4gICAgICBBdXRob3JpemF0aW9uOiBgdG9rZW4gJHt0b2tlbn1gLFxuICAgICAgJ1VzZXItQWdlbnQnOiAnUGljTGlzdCdcbiAgICB9LFxuICAgIGpzb246IHRydWVcbiAgfVxufVxuXG5jb25zdCBoYW5kbGUgPSBhc3luYyAoY3R4OiBJUGljR28pOiBQcm9taXNlPElQaWNHbz4gPT4ge1xuICBjb25zdCBnaXRodWJPcHRpb25zID0gY3R4LmdldENvbmZpZzxJR2l0aHViQ29uZmlnPigncGljQmVkLmdpdGh1YicpXG4gIGlmICghZ2l0aHViT3B0aW9ucykgdGhyb3cgbmV3IEVycm9yKFwiQ2FuJ3QgZmluZCBnaXRodWIgY29uZmlnXCIpXG5cbiAgY29uc3QgdXBsb2FkUGF0aCA9IGZvcm1hdFBhdGhIZWxwZXIoeyBwYXRoOiBnaXRodWJPcHRpb25zLnBhdGggfSlcbiAgZ2l0aHViT3B0aW9ucy5wYXRoID0gdXBsb2FkUGF0aFxuICBnaXRodWJPcHRpb25zLmN1c3RvbVVybCA9IChnaXRodWJPcHRpb25zLmN1c3RvbVVybCB8fCAnJykucmVwbGFjZSgvXFwvJC8sICcnKVxuICB0cnkge1xuICAgIGNvbnN0IGltZ0xpc3QgPSBjdHgub3V0cHV0XG4gICAgZm9yIChjb25zdCBpbWcgb2YgaW1nTGlzdCkge1xuICAgICAgaWYgKGltZy5maWxlTmFtZSAmJiBpbWcuYnVmZmVyKSB7XG4gICAgICAgIGNvbnN0IGJhc2U2NEltYWdlID0gaW1nLmJhc2U2NEltYWdlIHx8IEJ1ZmZlci5mcm9tKGltZy5idWZmZXIpLnRvU3RyaW5nKCdiYXNlNjQnKVxuICAgICAgICBjb25zdCBkYXRhID0ge1xuICAgICAgICAgIG1lc3NhZ2U6ICdVcGxvYWQgYnkgUGljTGlzdCcsXG4gICAgICAgICAgYnJhbmNoOiBnaXRodWJPcHRpb25zLmJyYW5jaCxcbiAgICAgICAgICBjb250ZW50OiBiYXNlNjRJbWFnZSxcbiAgICAgICAgICBwYXRoOiB1cGxvYWRQYXRoICsgZW5jb2RlVVJJKGltZy5maWxlTmFtZSlcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwb3N0Q29uZmlnID0gcG9zdE9wdGlvbnMoaW1nLmZpbGVOYW1lLCBnaXRodWJPcHRpb25zLCBkYXRhKVxuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IGJvZHk6IHtcbiAgICAgICAgICAgIGNvbnRlbnQ6IHtcbiAgICAgICAgICAgICAgZG93bmxvYWRfdXJsOiBzdHJpbmdcbiAgICAgICAgICAgICAgc2hhOiBzdHJpbmdcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9ID0gYXdhaXQgY3R4LnJlcXVlc3QocG9zdENvbmZpZylcbiAgICAgICAgICBpZiAoYm9keSkge1xuICAgICAgICAgICAgZGVsZXRlIGltZy5iYXNlNjRJbWFnZVxuICAgICAgICAgICAgZGVsZXRlIGltZy5idWZmZXJcbiAgICAgICAgICAgIGltZy5pbWdVcmwgPSBnaXRodWJPcHRpb25zLmN1c3RvbVVybFxuICAgICAgICAgICAgICA/IGAke2dpdGh1Yk9wdGlvbnMuY3VzdG9tVXJsfS8ke2VuY29kZVBhdGgoYCR7dXBsb2FkUGF0aH0ke2ltZy5maWxlTmFtZX1gKX1gXG4gICAgICAgICAgICAgIDogYm9keS5jb250ZW50LmRvd25sb2FkX3VybFxuICAgICAgICAgICAgaW1nLmhhc2ggPSBib2R5LmNvbnRlbnQuc2hhXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignU2VydmVyIGVycm9yLCBwbGVhc2UgdHJ5IGFnYWluJylcbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKGVycjogYW55KSB7XG4gICAgICAgICAgaWYgKGVyci5zdGF0dXNDb2RlICE9PSA0MjIpIHRocm93IGVyclxuICAgICAgICAgIGRlbGV0ZSBpbWcuYmFzZTY0SW1hZ2VcbiAgICAgICAgICBkZWxldGUgaW1nLmJ1ZmZlclxuICAgICAgICAgIGNvbnN0IHJlcyA9IChhd2FpdCBjdHgucmVxdWVzdChnZXRPcHRpb25zKGltZy5maWxlTmFtZSwgZ2l0aHViT3B0aW9ucykpKSBhcyBhbnlcbiAgICAgICAgICBpZiAoT2JqZWN0LmtleXMocmVzKS5sZW5ndGgpIHtcbiAgICAgICAgICAgIGltZy5oYXNoID0gcmVzLnNoYVxuICAgICAgICAgICAgaW1nLmltZ1VybCA9IGdpdGh1Yk9wdGlvbnMuY3VzdG9tVXJsXG4gICAgICAgICAgICAgID8gYCR7Z2l0aHViT3B0aW9ucy5jdXN0b21Vcmx9LyR7ZW5jb2RlUGF0aChgJHt1cGxvYWRQYXRofSR7aW1nLmZpbGVOYW1lfWApfWBcbiAgICAgICAgICAgICAgOiByZXMuZG93bmxvYWRfdXJsXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IGVyclxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gY3R4XG4gIH0gY2F0Y2ggKGVycjogYW55KSB7XG4gICAgY3R4LmVtaXQoSUJ1aWxkSW5FdmVudC5OT1RJRklDQVRJT04sIHtcbiAgICAgIHRpdGxlOiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdVUExPQURfRkFJTEVEJyksXG4gICAgICBib2R5OiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdDSEVDS19TRVRUSU5HU19BTkRfTkVUV09SSycpXG4gICAgfSlcbiAgICB0aHJvdyBlcnJcbiAgfVxufVxuXG5jb25zdCBjb25maWcgPSAoY3R4OiBJUGljR28pOiBJUGx1Z2luQ29uZmlnW10gPT4ge1xuICBjb25zdCB1c2VyQ29uZmlnID0gY3R4LmdldENvbmZpZzxJR2l0aHViQ29uZmlnPigncGljQmVkLmdpdGh1YicpIHx8IHt9XG4gIGNvbnN0IGNvbmZpZzogSVBsdWdpbkNvbmZpZ1tdID0gW1xuICAgIHtcbiAgICAgIG5hbWU6ICdyZXBvJyxcbiAgICAgIHR5cGU6ICdpbnB1dCcsXG4gICAgICBnZXQgcHJlZml4KCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0dJVEhVQl9SRVBPJylcbiAgICAgIH0sXG4gICAgICBnZXQgYWxpYXMoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfR0lUSFVCX1JFUE8nKVxuICAgICAgfSxcbiAgICAgIGdldCBtZXNzYWdlKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0dJVEhVQl9NRVNTQUdFX1JFUE8nKVxuICAgICAgfSxcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcucmVwbyB8fCAnJyxcbiAgICAgIHJlcXVpcmVkOiB0cnVlXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAnYnJhbmNoJyxcbiAgICAgIHR5cGU6ICdpbnB1dCcsXG4gICAgICBnZXQgcHJlZml4KCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0dJVEhVQl9CUkFOQ0gnKVxuICAgICAgfSxcbiAgICAgIGdldCBhbGlhcygpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9HSVRIVUJfQlJBTkNIJylcbiAgICAgIH0sXG4gICAgICBnZXQgbWVzc2FnZSgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9HSVRIVUJfTUVTU0FHRV9CUkFOQ0gnKVxuICAgICAgfSxcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuYnJhbmNoIHx8ICdtYXN0ZXInLFxuICAgICAgcmVxdWlyZWQ6IHRydWVcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICd0b2tlbicsXG4gICAgICB0eXBlOiAnaW5wdXQnLFxuICAgICAgZ2V0IHByZWZpeCgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9HSVRIVUJfVE9LRU4nKVxuICAgICAgfSxcbiAgICAgIGdldCBhbGlhcygpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9HSVRIVUJfVE9LRU4nKVxuICAgICAgfSxcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcudG9rZW4gfHwgJycsXG4gICAgICByZXF1aXJlZDogdHJ1ZVxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ3BhdGgnLFxuICAgICAgdHlwZTogJ2lucHV0JyxcbiAgICAgIGdldCBwcmVmaXgoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfR0lUSFVCX1BBVEgnKVxuICAgICAgfSxcbiAgICAgIGdldCBhbGlhcygpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9HSVRIVUJfUEFUSCcpXG4gICAgICB9LFxuICAgICAgZ2V0IG1lc3NhZ2UoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfR0lUSFVCX01FU1NBR0VfUEFUSCcpXG4gICAgICB9LFxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5wYXRoIHx8ICcnLFxuICAgICAgcmVxdWlyZWQ6IGZhbHNlXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAnY3VzdG9tVXJsJyxcbiAgICAgIHR5cGU6ICdpbnB1dCcsXG4gICAgICBnZXQgcHJlZml4KCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0dJVEhVQl9DVVNUT01VUkwnKVxuICAgICAgfSxcbiAgICAgIGdldCBhbGlhcygpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9HSVRIVUJfQ1VTVE9NVVJMJylcbiAgICAgIH0sXG4gICAgICBnZXQgbWVzc2FnZSgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9HSVRIVUJfTUVTU0FHRV9DVVNUT01VUkwnKVxuICAgICAgfSxcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuY3VzdG9tVXJsIHx8ICcnLFxuICAgICAgcmVxdWlyZWQ6IGZhbHNlXG4gICAgfVxuICBdXG4gIHJldHVybiBjb25maWdcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcmVnaXN0ZXIoY3R4OiBJUGljR28pOiB2b2lkIHtcbiAgY3R4LmhlbHBlci51cGxvYWRlci5yZWdpc3RlcihidWlsZEluVXBsb2FkZXJOYW1lcy5naXRodWIsIHtcbiAgICBnZXQgbmFtZSgpIHtcbiAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfR0lUSFVCJylcbiAgICB9LFxuICAgIGhhbmRsZSxcbiAgICBjb25maWdcbiAgfSlcbn1cbiIsImltcG9ydCB7IElQaWNHbywgSVBsdWdpbkNvbmZpZywgSUltZ3VyQ29uZmlnLCBJT2xkUmVxT3B0aW9ucywgSUZ1bGxSZXNwb25zZSB9IGZyb20gJy4uLy4uL3R5cGVzJ1xuaW1wb3J0IHsgSUJ1aWxkSW5FdmVudCB9IGZyb20gJy4uLy4uL3V0aWxzL2VudW0nXG5pbXBvcnQgeyBJTG9jYWxlc0tleSB9IGZyb20gJy4uLy4uL2kxOG4vemgtQ04nXG5pbXBvcnQgeyBidWlsZEluVXBsb2FkZXJOYW1lcyB9IGZyb20gJy4vdXRpbHMnXG5cbmNvbnN0IGZvcm1hdEFjY2Vzc1Rva2VuID0gKGFjY2Vzc1Rva2VuOiBzdHJpbmcpOiBzdHJpbmcgPT5cbiAgYWNjZXNzVG9rZW4gPyAoYWNjZXNzVG9rZW4uc3RhcnRzV2l0aCgnQmVhcmVyJykgPyBhY2Nlc3NUb2tlbiA6IGBCZWFyZXIgJHthY2Nlc3NUb2tlbn1gKSA6ICcnXG5cbmNvbnN0IHBvc3RPcHRpb25zID0gYXN5bmMgKFxuICBjdHg6IElQaWNHbyxcbiAgb3B0aW9uczogSUltZ3VyQ29uZmlnLFxuICBmaWxlTmFtZTogc3RyaW5nLFxuICBpbWdCYXNlNjQ6IHN0cmluZ1xuKTogUHJvbWlzZTxJT2xkUmVxT3B0aW9ucz4gPT4ge1xuICBjb25zdCBjbGllbnRJZCA9IG9wdGlvbnMuY2xpZW50SWQgfHwgJydcbiAgY29uc3QgdXNlcm5hbWUgPSBvcHRpb25zLnVzZXJuYW1lIHx8ICcnXG4gIGNvbnN0IGFjY2Vzc1Rva2VuID0gZm9ybWF0QWNjZXNzVG9rZW4ob3B0aW9ucy5hY2Nlc3NUb2tlbiB8fCAnJylcbiAgY29uc3QgYWxidW0gPSBvcHRpb25zLmFsYnVtIHx8ICcnXG4gIGxldCBhdXRob3JpemF0aW9uXG4gIGlmICh1c2VybmFtZSAmJiBhY2Nlc3NUb2tlbikge1xuICAgIGF1dGhvcml6YXRpb24gPSBhY2Nlc3NUb2tlblxuICB9IGVsc2UgaWYgKGNsaWVudElkKSB7XG4gICAgYXV0aG9yaXphdGlvbiA9IGBDbGllbnQtSUQgJHtjbGllbnRJZH1gXG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdjbGllbnRJZCBvciBhY2Nlc3NUb2tlbiBpcyByZXF1aXJlZCcpXG4gIH1cbiAgY29uc3QgcmVxdWVzdE9wdGlvbnM6IElPbGRSZXFPcHRpb25zID0ge1xuICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgIHVybDogJ2h0dHBzOi8vYXBpLmltZ3VyLmNvbS8zL2ltYWdlJyxcbiAgICBoZWFkZXJzOiB7XG4gICAgICBBdXRob3JpemF0aW9uOiBhdXRob3JpemF0aW9uLFxuICAgICAgJ2NvbnRlbnQtdHlwZSc6ICdtdWx0aXBhcnQvZm9ybS1kYXRhJyxcbiAgICAgIEhvc3Q6ICdhcGkuaW1ndXIuY29tJyxcbiAgICAgICdVc2VyLUFnZW50JzogJ1BpY0xpc3QnXG4gICAgfSxcbiAgICBmb3JtRGF0YToge1xuICAgICAgaW1hZ2U6IGltZ0Jhc2U2NCxcbiAgICAgIHR5cGU6ICdiYXNlNjQnLFxuICAgICAgbmFtZTogZmlsZU5hbWUsXG4gICAgICBkZXNjcmlwdGlvbjogJ1VwbG9hZGVkIHdpdGggUGljTGlzdCdcbiAgICB9XG4gIH1cbiAgaWYgKHVzZXJuYW1lICYmIGFjY2Vzc1Rva2VuICYmIGFsYnVtKSB7XG4gICAgbGV0IGluaXRQYWdlcyA9IDBcbiAgICBsZXQgcmVzXG4gICAgbGV0IGFsYnVtSGFzaCA9ICcnXG4gICAgZG8ge1xuICAgICAgY29uc3QgZ2V0QWxidW1IYXNoT3B0aW9uczogSU9sZFJlcU9wdGlvbnMgPSB7XG4gICAgICAgIG1ldGhvZDogJ0dFVCcsXG4gICAgICAgIHVybDogYGh0dHBzOi8vYXBpLmltZ3VyLmNvbS8zL2FjY291bnQvJHt1c2VybmFtZX0vYWxidW1zLyR7aW5pdFBhZ2VzfWAsXG4gICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICBBdXRob3JpemF0aW9uOiBhdXRob3JpemF0aW9uXG4gICAgICAgIH0sXG4gICAgICAgIGpzb246IHRydWUsXG4gICAgICAgIHJlc29sdmVXaXRoRnVsbFJlc3BvbnNlOiB0cnVlLFxuICAgICAgICB0aW1lb3V0OiAxMDAwMFxuICAgICAgfVxuICAgICAgaWYgKG9wdGlvbnMucHJveHkpIHtcbiAgICAgICAgZ2V0QWxidW1IYXNoT3B0aW9ucy5wcm94eSA9IG9wdGlvbnMucHJveHlcbiAgICAgIH1cbiAgICAgIHJlcyA9IChhd2FpdCBjdHgucmVxdWVzdChnZXRBbGJ1bUhhc2hPcHRpb25zKSkgYXMgdW5rbm93biBhcyBJRnVsbFJlc3BvbnNlXG4gICAgICBpZiAoIShyZXMuc3RhdHVzQ29kZSA9PT0gMjAwICYmIHJlcy5ib2R5LnN1Y2Nlc3MpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignU2VydmVyIGVycm9yLCBwbGVhc2UgdHJ5IGFnYWluJylcbiAgICAgIH1cbiAgICAgIGNvbnN0IGFsYnVtTGlzdCA9IHJlcy5ib2R5LmRhdGFcbiAgICAgIGZvciAoY29uc3QgaXRlbSBvZiBhbGJ1bUxpc3QpIHtcbiAgICAgICAgaWYgKGl0ZW0udGl0bGUgPT09IGFsYnVtKSB7XG4gICAgICAgICAgYWxidW1IYXNoID0gaXRlbS5pZFxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGluaXRQYWdlcysrXG4gICAgfSB3aGlsZSAocmVzLmJvZHkuZGF0YS5sZW5ndGggPiAwKVxuICAgIGlmIChhbGJ1bUhhc2ggJiYgcmVxdWVzdE9wdGlvbnMuZm9ybURhdGEpIHtcbiAgICAgIHJlcXVlc3RPcHRpb25zLmZvcm1EYXRhLmFsYnVtID0gYWxidW1IYXNoXG4gICAgfVxuICB9XG4gIGlmIChvcHRpb25zLnByb3h5KSB7XG4gICAgcmVxdWVzdE9wdGlvbnMucHJveHkgPSBvcHRpb25zLnByb3h5XG4gIH1cbiAgcmV0dXJuIHJlcXVlc3RPcHRpb25zXG59XG5cbmNvbnN0IGhhbmRsZSA9IGFzeW5jIChjdHg6IElQaWNHbyk6IFByb21pc2U8SVBpY0dvPiA9PiB7XG4gIGNvbnN0IGltZ3VyT3B0aW9ucyA9IGN0eC5nZXRDb25maWc8SUltZ3VyQ29uZmlnPigncGljQmVkLmltZ3VyJylcbiAgaWYgKCFpbWd1ck9wdGlvbnMpIHRocm93IG5ldyBFcnJvcihcIkNhbid0IGZpbmQgaW1ndXIgY29uZmlnXCIpXG4gIHRyeSB7XG4gICAgY29uc3QgaW1nTGlzdCA9IGN0eC5vdXRwdXRcbiAgICBmb3IgKGNvbnN0IGltZyBvZiBpbWdMaXN0KSB7XG4gICAgICBpZiAoaW1nLmZpbGVOYW1lICYmIGltZy5idWZmZXIpIHtcbiAgICAgICAgY29uc3QgYmFzZTY0SW1hZ2UgPSBpbWcuYmFzZTY0SW1hZ2UgfHwgQnVmZmVyLmZyb20oaW1nLmJ1ZmZlcikudG9TdHJpbmcoJ2Jhc2U2NCcpXG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSBhd2FpdCBwb3N0T3B0aW9ucyhjdHgsIGltZ3VyT3B0aW9ucywgaW1nLmZpbGVOYW1lLCBiYXNlNjRJbWFnZSlcbiAgICAgICAgY29uc3QgcmVzOiBzdHJpbmcgPSBhd2FpdCBjdHgucmVxdWVzdChvcHRpb25zKVxuICAgICAgICBjb25zdCBib2R5ID0gdHlwZW9mIHJlcyA9PT0gJ3N0cmluZycgPyBKU09OLnBhcnNlKHJlcykgOiByZXNcbiAgICAgICAgaWYgKGJvZHkuc3VjY2Vzcykge1xuICAgICAgICAgIGRlbGV0ZSBpbWcuYmFzZTY0SW1hZ2VcbiAgICAgICAgICBkZWxldGUgaW1nLmJ1ZmZlclxuICAgICAgICAgIGltZy5pbWdVcmwgPSBib2R5LmRhdGEubGlua1xuICAgICAgICAgIGltZy5oYXNoID0gYm9keS5kYXRhLmRlbGV0ZWhhc2hcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1NlcnZlciBlcnJvciwgcGxlYXNlIHRyeSBhZ2FpbicpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGN0eFxuICB9IGNhdGNoIChlcnI6IGFueSkge1xuICAgIGN0eC5lbWl0KElCdWlsZEluRXZlbnQuTk9USUZJQ0FUSU9OLCB7XG4gICAgICB0aXRsZTogY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignVVBMT0FEX0ZBSUxFRCcpLFxuICAgICAgYm9keTogY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQ0hFQ0tfU0VUVElOR1NfQU5EX05FVFdPUksnKSxcbiAgICAgIHRleHQ6ICdodHRwOi8vZG9jcy5pbWd1ci5jb20vYXBpL2Vycm5vLydcbiAgICB9KVxuICAgIHRocm93IGVycj8ucmVzcG9uc2U/LmRhdGEgfHwgZXJyXG4gIH1cbn1cblxuY29uc3QgY29uZmlnID0gKGN0eDogSVBpY0dvKTogSVBsdWdpbkNvbmZpZ1tdID0+IHtcbiAgY29uc3QgdXNlckNvbmZpZyA9IGN0eC5nZXRDb25maWc8SUltZ3VyQ29uZmlnPigncGljQmVkLmltZ3VyJykgfHwge31cbiAgY29uc3QgY29uZmlnOiBJUGx1Z2luQ29uZmlnW10gPSBbXG4gICAge1xuICAgICAgbmFtZTogJ2NsaWVudElkJyxcbiAgICAgIHR5cGU6ICdpbnB1dCcsXG4gICAgICBnZXQgcHJlZml4KCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0lNR1VSX0NMSUVOVElEJylcbiAgICAgIH0sXG4gICAgICBnZXQgYWxpYXMoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfSU1HVVJfQ0xJRU5USUQnKVxuICAgICAgfSxcbiAgICAgIGdldCBtZXNzYWdlKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0lNR1VSX01FU1NBR0VfQ0xJRU5USUQnKVxuICAgICAgfSxcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuY2xpZW50SWQgfHwgJycsXG4gICAgICByZXF1aXJlZDogZmFsc2VcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICd1c2VybmFtZScsXG4gICAgICB0eXBlOiAnaW5wdXQnLFxuICAgICAgZ2V0IHByZWZpeCgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9JTUdVUl9VU0VSTkFNRScpXG4gICAgICB9LFxuICAgICAgZ2V0IGFsaWFzKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0lNR1VSX1VTRVJOQU1FJylcbiAgICAgIH0sXG4gICAgICBnZXQgbWVzc2FnZSgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9JTUdVUl9NRVNTQUdFX1VTRVJOQU1FJylcbiAgICAgIH0sXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLnVzZXJuYW1lIHx8ICcnLFxuICAgICAgcmVxdWlyZWQ6IGZhbHNlXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAnYWNjZXNzVG9rZW4nLFxuICAgICAgdHlwZTogJ2lucHV0JyxcbiAgICAgIGdldCBwcmVmaXgoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfSU1HVVJfQUNDRVNTX1RPS0VOJylcbiAgICAgIH0sXG4gICAgICBnZXQgYWxpYXMoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfSU1HVVJfQUNDRVNTX1RPS0VOJylcbiAgICAgIH0sXG4gICAgICBnZXQgbWVzc2FnZSgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9JTUdVUl9NRVNTQUdFX0FDQ0VTU19UT0tFTicpXG4gICAgICB9LFxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5hY2Nlc3NUb2tlbiB8fCAnJyxcbiAgICAgIHJlcXVpcmVkOiBmYWxzZVxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ2FsYnVtJyxcbiAgICAgIHR5cGU6ICdpbnB1dCcsXG4gICAgICBnZXQgcHJlZml4KCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0lNR1VSX0FMQlVNJylcbiAgICAgIH0sXG4gICAgICBnZXQgYWxpYXMoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfSU1HVVJfQUxCVU0nKVxuICAgICAgfSxcbiAgICAgIGdldCBtZXNzYWdlKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0lNR1VSX01FU1NBR0VfQUxCVU0nKVxuICAgICAgfSxcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuYWxidW0gfHwgJycsXG4gICAgICByZXF1aXJlZDogZmFsc2VcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdwcm94eScsXG4gICAgICB0eXBlOiAnaW5wdXQnLFxuICAgICAgZ2V0IHByZWZpeCgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9JTUdVUl9QUk9YWScpXG4gICAgICB9LFxuICAgICAgZ2V0IGFsaWFzKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0lNR1VSX1BST1hZJylcbiAgICAgIH0sXG4gICAgICBnZXQgbWVzc2FnZSgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9JTUdVUl9NRVNTQUdFX1BST1hZJylcbiAgICAgIH0sXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLnByb3h5IHx8ICcnLFxuICAgICAgcmVxdWlyZWQ6IGZhbHNlXG4gICAgfVxuICBdXG4gIHJldHVybiBjb25maWdcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcmVnaXN0ZXIoY3R4OiBJUGljR28pOiB2b2lkIHtcbiAgY3R4LmhlbHBlci51cGxvYWRlci5yZWdpc3RlcihidWlsZEluVXBsb2FkZXJOYW1lcy5pbWd1ciwge1xuICAgIGdldCBuYW1lKCkge1xuICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9JTUdVUicpXG4gICAgfSxcbiAgICBoYW5kbGUsXG4gICAgY29uZmlnXG4gIH0pXG59XG4iLCJpbXBvcnQgZnMsIHsgZW5zdXJlRGlyU3luYyB9IGZyb20gJ2ZzLWV4dHJhJ1xuaW1wb3J0IHBhdGggZnJvbSAncGF0aCdcblxuaW1wb3J0IHsgSVBpY0dvLCBJUGx1Z2luQ29uZmlnLCBJTG9jYWxDb25maWcgfSBmcm9tICcuLi8uLi90eXBlcydcbmltcG9ydCB7IElCdWlsZEluRXZlbnQgfSBmcm9tICcuLi8uLi91dGlscy9lbnVtJ1xuaW1wb3J0IHsgSUxvY2FsZXNLZXkgfSBmcm9tICcuLi8uLi9pMThuL3poLUNOJ1xuXG5pbXBvcnQgeyBidWlsZEluVXBsb2FkZXJOYW1lcywgZW5jb2RlUGF0aCwgZm9ybWF0UGF0aEhlbHBlciB9IGZyb20gJy4vdXRpbHMnXG5cbmNvbnN0IGhhbmRsZSA9IGFzeW5jIChjdHg6IElQaWNHbyk6IFByb21pc2U8SVBpY0dvPiA9PiB7XG4gIGNvbnN0IGxvY2FsQ29uZmlnID0gY3R4LmdldENvbmZpZzxJTG9jYWxDb25maWc+KCdwaWNCZWQubG9jYWwnKVxuICBpZiAoIWxvY2FsQ29uZmlnKSB0aHJvdyBuZXcgRXJyb3IoJ0NhbiBub3QgZmluZCBsb2NhbCBjb25maWchJylcblxuICBjb25zdCB1cGxvYWRQYXRoID0gbG9jYWxDb25maWcucGF0aCB8fCAnJ1xuICBjb25zdCBjdXN0b21VcmwgPSAobG9jYWxDb25maWcuY3VzdG9tVXJsIHx8ICcnKS5yZXBsYWNlKC9cXC8kLywgJycpXG4gIGNvbnN0IHdlYlBhdGggPSBmb3JtYXRQYXRoSGVscGVyKHtcbiAgICBwYXRoOiBsb2NhbENvbmZpZy53ZWJQYXRoPy5yZXBsYWNlKC9cXFxcL2csICcvJylcbiAgfSlcbiAgY29uc3QgaW1nTGlzdCA9IGN0eC5vdXRwdXRcbiAgZm9yIChjb25zdCBpbWcgb2YgaW1nTGlzdCkge1xuICAgIGlmIChpbWcuZmlsZU5hbWUgJiYgaW1nLmJ1ZmZlcikge1xuICAgICAgbGV0IGltYWdlID0gaW1nLmJ1ZmZlclxuICAgICAgaWYgKCFpbWFnZSAmJiBpbWcuYmFzZTY0SW1hZ2UpIHtcbiAgICAgICAgaW1hZ2UgPSBCdWZmZXIuZnJvbShpbWcuYmFzZTY0SW1hZ2UsICdiYXNlNjQnKVxuICAgICAgfVxuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgaW1nVGVtcFBhdGggPSBwYXRoLmpvaW4oY3R4LmJhc2VEaXIsICdpbWdUZW1wJywgJ2xvY2FsJylcbiAgICAgICAgY29uc3QgZmlsZUltZ1RlbXBQYXRoID0gcGF0aC5qb2luKGltZ1RlbXBQYXRoLCBpbWcuZmlsZU5hbWUpXG4gICAgICAgIGNvbnN0IGZpbGVVcGxvYWRQYXRoID0gcGF0aC5qb2luKHVwbG9hZFBhdGgsIGltZy5maWxlTmFtZSlcbiAgICAgICAgZW5zdXJlRGlyU3luYyhwYXRoLmRpcm5hbWUoZmlsZVVwbG9hZFBhdGgpKVxuICAgICAgICBlbnN1cmVEaXJTeW5jKHBhdGguZGlybmFtZShmaWxlSW1nVGVtcFBhdGgpKVxuICAgICAgICBmcy53cml0ZUZpbGVTeW5jKGZpbGVVcGxvYWRQYXRoLCBpbWFnZSlcbiAgICAgICAgZnMuY29weUZpbGVTeW5jKGZpbGVVcGxvYWRQYXRoLCBmaWxlSW1nVGVtcFBhdGgpXG4gICAgICAgIGRlbGV0ZSBpbWcuYmFzZTY0SW1hZ2VcbiAgICAgICAgZGVsZXRlIGltZy5idWZmZXJcbiAgICAgICAgaWYgKGN1c3RvbVVybCkge1xuICAgICAgICAgIGltZy5pbWdVcmwgPSBgJHtjdXN0b21Vcmx9LyR7ZW5jb2RlUGF0aChgJHt3ZWJQYXRofSR7aW1nLmZpbGVOYW1lfWApfWBcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpbWcuaW1nVXJsID0gcGF0aC5qb2luKHVwbG9hZFBhdGgsIGltZy5maWxlTmFtZSlcbiAgICAgICAgfVxuICAgICAgICBpbWcuaGFzaCA9IHBhdGguam9pbih1cGxvYWRQYXRoLCBpbWcuZmlsZU5hbWUpXG4gICAgICAgIGltZy5nYWxsZXJ5UGF0aCA9IGBodHRwOi8vbG9jYWxob3N0OjM2Njk5L2xvY2FsLyR7ZW5jb2RlUGF0aChpbWcuZmlsZU5hbWUpLnJlcGxhY2UoL15cXC8vLCAnJyl9YFxuICAgICAgfSBjYXRjaCAoZTogYW55KSB7XG4gICAgICAgIGN0eC5lbWl0KElCdWlsZEluRXZlbnQuTk9USUZJQ0FUSU9OLCB7XG4gICAgICAgICAgdGl0bGU6IGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1VQTE9BRF9GQUlMRUQnKSxcbiAgICAgICAgICBib2R5OiAnZmFpbGVkIHRvIHVwbG9hZCBpbWFnZSdcbiAgICAgICAgfSlcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdmYWlsZWQgdG8gdXBsb2FkIGltYWdlJylcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIGN0eFxufVxuXG5jb25zdCBjb25maWcgPSAoY3R4OiBJUGljR28pOiBJUGx1Z2luQ29uZmlnW10gPT4ge1xuICBjb25zdCB1c2VyQ29uZmlnID0gY3R4LmdldENvbmZpZzxJTG9jYWxDb25maWc+KCdwaWNCZWQubG9jYWwnKSB8fCB7fVxuICBjb25zdCBjb25maWc6IElQbHVnaW5Db25maWdbXSA9IFtcbiAgICB7XG4gICAgICBuYW1lOiAncGF0aCcsXG4gICAgICB0eXBlOiAnaW5wdXQnLFxuICAgICAgZ2V0IHByZWZpeCgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9MT0NBTF9QQVRIJylcbiAgICAgIH0sXG4gICAgICBnZXQgYWxpYXMoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfTE9DQUxfUEFUSCcpXG4gICAgICB9LFxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5wYXRoIHx8ICcnLFxuICAgICAgZ2V0IG1lc3NhZ2UoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfTE9DQUxfTUVTU0FHRV9QQVRIJylcbiAgICAgIH0sXG4gICAgICByZXF1aXJlZDogdHJ1ZVxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ2N1c3RvbVVybCcsXG4gICAgICB0eXBlOiAnaW5wdXQnLFxuICAgICAgZ2V0IHByZWZpeCgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9MT0NBTF9DVVNUT01VUkwnKVxuICAgICAgfSxcbiAgICAgIGdldCBhbGlhcygpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9MT0NBTF9DVVNUT01VUkwnKVxuICAgICAgfSxcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuY3VzdG9tVXJsIHx8ICcnLFxuICAgICAgZ2V0IG1lc3NhZ2UoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfTE9DQUxfTUVTU0FHRV9DVVNUT01VUkwnKVxuICAgICAgfSxcbiAgICAgIHJlcXVpcmVkOiBmYWxzZVxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ3dlYlBhdGgnLFxuICAgICAgdHlwZTogJ2lucHV0JyxcbiAgICAgIGdldCBwcmVmaXgoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfTE9DQUxfV0VCUEFUSCcpXG4gICAgICB9LFxuICAgICAgZ2V0IGFsaWFzKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0xPQ0FMX1dFQlBBVEgnKVxuICAgICAgfSxcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcud2ViUGF0aCB8fCAnJyxcbiAgICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICAgIGdldCBtZXNzYWdlKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0xPQ0FMX01FU1NBR0VfV0VCUEFUSCcpXG4gICAgICB9XG4gICAgfVxuICBdXG4gIHJldHVybiBjb25maWdcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcmVnaXN0ZXIoY3R4OiBJUGljR28pOiB2b2lkIHtcbiAgY3R4LmhlbHBlci51cGxvYWRlci5yZWdpc3RlcihidWlsZEluVXBsb2FkZXJOYW1lcy5sb2NhbCwge1xuICAgIGdldCBuYW1lKCkge1xuICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9MT0NBTCcpXG4gICAgfSxcbiAgICBoYW5kbGUsXG4gICAgY29uZmlnXG4gIH0pXG59XG4iLCIvLyBodHRwczovL2dpdGh1Yi5jb20vaGVsbG9kazM0L3BpY2dvLXBsdWdpbi1sYW5rb25nXG4vLyBMSUNFTlNFOiBNSVRcblxuaW1wb3J0IGh0dHBzIGZyb20gJ2h0dHBzJ1xuaW1wb3J0IHsgSUxza3lDb25maWcsIElQaWNHbywgSVBsdWdpbkNvbmZpZyB9IGZyb20gJy4uLy4uL3R5cGVzJ1xuaW1wb3J0IHsgSUxvY2FsZXNLZXkgfSBmcm9tICcuLi8uLi9pMThuL3poLUNOJ1xuaW1wb3J0IHsgSUJ1aWxkSW5FdmVudCB9IGZyb20gJy4uLy4uL3V0aWxzL2VudW0nXG5pbXBvcnQgeyBidWlsZEluVXBsb2FkZXJOYW1lcyB9IGZyb20gJy4vdXRpbHMnXG5cbmV4cG9ydCBpbnRlcmZhY2UgSU1HVFlQRSB7XG4gIGltZ1VybD86IHN0cmluZ1xuICB0eXBlPzogc3RyaW5nXG4gIGtleT86IHN0cmluZ1xuICBpZD86IHN0cmluZ1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElWMkZPUk1EQVRBIHtcbiAgZmlsZToge1xuICAgIHZhbHVlOiBCdWZmZXJcbiAgICBvcHRpb25zOiB7XG4gICAgICBmaWxlbmFtZTogc3RyaW5nXG4gICAgfVxuICB9XG4gIHNzbDogc3RyaW5nXG4gIHN0cmF0ZWd5X2lkPzogc3RyaW5nXG4gIGFsYnVtX2lkPzogc3RyaW5nXG4gIHBlcm1pc3Npb24/OiBudW1iZXJcbn1cblxuY29uc3QgcG9zdE9wdGlvbnMgPSAob3B0aW9uczogSUxza3lDb25maWcsIGZpbGVOYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQsIGltYWdlOiBCdWZmZXIpOiBhbnkgPT4ge1xuICBsZXQgaG9zdCA9IG9wdGlvbnMuaG9zdFxuICBob3N0ID0gaG9zdC5yZXBsYWNlKC9cXC8kLywgJycpXG4gIGNvbnN0IGlzVjIgPSBvcHRpb25zLnZlcnNpb24gPT09ICdWMidcbiAgY29uc3QgdG9rZW4gPSBvcHRpb25zLnRva2VuXG5cbiAgY29uc3QgdjFIZWFkZXJzID0ge1xuICAgICdDb250ZW50LVR5cGUnOiAnbXVsdGlwYXJ0L2Zvcm0tZGF0YScsXG4gICAgJ1VzZXItQWdlbnQnOiAnUGljTGlzdCcsXG4gICAgQ29ubmVjdGlvbjogJ2tlZXAtYWxpdmUnLFxuICAgIHRva2VuOiB0b2tlbiB8fCB1bmRlZmluZWRcbiAgfVxuICBjb25zdCB2MUZvcm1EYXRhID0ge1xuICAgIGltYWdlOiB7XG4gICAgICB2YWx1ZTogaW1hZ2UsXG4gICAgICBvcHRpb25zOiB7XG4gICAgICAgIGZpbGVuYW1lOiBmaWxlTmFtZSFcbiAgICAgIH1cbiAgICB9LFxuICAgIHNzbDogJ3RydWUnXG4gIH1cblxuICBjb25zdCB2MkhlYWRlcnMgPSB7XG4gICAgJ0NvbnRlbnQtVHlwZSc6ICdtdWx0aXBhcnQvZm9ybS1kYXRhJyxcbiAgICAnVXNlci1BZ2VudCc6ICdQaWNMaXN0JyxcbiAgICBDb25uZWN0aW9uOiAna2VlcC1hbGl2ZScsXG4gICAgQWNjZXB0OiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgQXV0aG9yaXphdGlvbjogdG9rZW4gfHwgdW5kZWZpbmVkXG4gIH1cbiAgY29uc3Qgc3RyYXRlZ3lJZCA9IG9wdGlvbnMuc3RyYXRlZ3lJZFxuICBjb25zdCBhbGJ1bUlkID0gb3B0aW9ucy5hbGJ1bUlkXG4gIGxldCBwZXJtaXNzaW9uOiBhbnkgPSBvcHRpb25zLnBlcm1pc3Npb24udmFsdWVcbiAgaWYgKHBlcm1pc3Npb24gPT09IHVuZGVmaW5lZCkge1xuICAgIHBlcm1pc3Npb24gPSBvcHRpb25zLnBlcm1pc3Npb25cbiAgfVxuICBjb25zdCB2MkZvcm1EYXRhOiBJVjJGT1JNREFUQSA9IHtcbiAgICBmaWxlOiB7XG4gICAgICB2YWx1ZTogaW1hZ2UsXG4gICAgICBvcHRpb25zOiB7XG4gICAgICAgIGZpbGVuYW1lOiBmaWxlTmFtZSFcbiAgICAgIH1cbiAgICB9LFxuICAgIHNzbDogJ3RydWUnLFxuICAgIHN0cmF0ZWd5X2lkOiBzdHJhdGVneUlkLFxuICAgIGFsYnVtX2lkOiBhbGJ1bUlkLFxuICAgIHBlcm1pc3Npb25cbiAgfVxuICBpZiAoIXN0cmF0ZWd5SWQpIHtcbiAgICBkZWxldGUgdjJGb3JtRGF0YS5zdHJhdGVneV9pZFxuICB9XG4gIGlmICghYWxidW1JZCkge1xuICAgIGRlbGV0ZSB2MkZvcm1EYXRhLmFsYnVtX2lkXG4gIH1cbiAgaWYgKCEocGVybWlzc2lvbiA9PT0gMCB8fCBwZXJtaXNzaW9uID09PSAxKSkge1xuICAgIGRlbGV0ZSB2MkZvcm1EYXRhLnBlcm1pc3Npb25cbiAgfVxuXG4gIGNvbnN0IHJlcXVlc3RBZ2VudCA9IG5ldyBodHRwcy5BZ2VudCh7XG4gICAgcmVqZWN0VW5hdXRob3JpemVkOiBmYWxzZVxuICB9KVxuICByZXR1cm4ge1xuICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgIHVybDogaXNWMiA/IGAke2hvc3R9L2FwaS92MS91cGxvYWRgIDogYCR7aG9zdH0vYXBpL3VwbG9hZGAsXG4gICAgYWdlbnQ6IHJlcXVlc3RBZ2VudCxcbiAgICBoZWFkZXJzOiBpc1YyID8gdjJIZWFkZXJzIDogdjFIZWFkZXJzLFxuICAgIGZvcm1EYXRhOiBpc1YyID8gdjJGb3JtRGF0YSA6IHYxRm9ybURhdGFcbiAgfVxufVxuXG5jb25zdCBoYW5kbGUgPSBhc3luYyAoY3R4OiBJUGljR28pOiBQcm9taXNlPElQaWNHbz4gPT4ge1xuICBjb25zdCBsc2t5T3B0aW9ucyA9IGN0eC5nZXRDb25maWc8SUxza3lDb25maWc+KCdwaWNCZWQubHNreXBsaXN0JylcbiAgaWYgKCFsc2t5T3B0aW9ucykgdGhyb3cgbmV3IEVycm9yKFwiQ2FuJ3QgZmluZCBsc2t5IHVwbG9hZGVyIGNvbmZpZ1wiKVxuXG4gIGNvbnN0IGltZ0xpc3QgPSBjdHgub3V0cHV0XG4gIGZvciAoY29uc3QgaW1nIG9mIGltZ0xpc3QpIHtcbiAgICBsZXQgaW1hZ2UgPSBpbWcuYnVmZmVyIVxuICAgIGlmICghaW1hZ2UgJiYgaW1nLmJhc2U2NEltYWdlKSB7XG4gICAgICBpbWFnZSA9IEJ1ZmZlci5mcm9tKGltZy5iYXNlNjRJbWFnZSwgJ2Jhc2U2NCcpXG4gICAgfVxuICAgIGNvbnN0IHBvc3RDb25maWcgPSBwb3N0T3B0aW9ucyhsc2t5T3B0aW9ucywgaW1nLmZpbGVOYW1lLCBpbWFnZSlcbiAgICBsZXQgYm9keSA9IChhd2FpdCBjdHgucmVxdWVzdChwb3N0Q29uZmlnKSkgYXMgYW55XG4gICAgYm9keSA9IHR5cGVvZiBib2R5ID09PSAnc3RyaW5nJyA/IEpTT04ucGFyc2UoYm9keSkgOiBib2R5XG4gICAgY29uc3QgaXNWMiA9IGxza3lPcHRpb25zLnZlcnNpb24gPT09ICdWMidcbiAgICBjb25zdCBjb25kaXRpb24gPSBpc1YyID8gYm9keS5zdGF0dXMgPT09IHRydWUgOiBib2R5LmNvZGUgPT09IDIwMFxuICAgIGlmIChjb25kaXRpb24pIHtcbiAgICAgIGRlbGV0ZSBpbWcuYmFzZTY0SW1hZ2VcbiAgICAgIGRlbGV0ZSBpbWcuYnVmZmVyXG4gICAgICBpbWcuaW1nVXJsID0gaXNWMiA/IGJvZHkuZGF0YS5saW5rcy51cmwgOiBib2R5LmRhdGEudXJsXG4gICAgICBpZiAoaXNWMikge1xuICAgICAgICBpbWcuaGFzaCA9IGJvZHkuZGF0YS5rZXlcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY3R4LmVtaXQoSUJ1aWxkSW5FdmVudC5OT1RJRklDQVRJT04sIHtcbiAgICAgICAgdGl0bGU6ICd1cGxvYWQgZmFpbGVkJyxcbiAgICAgICAgYm9keTogYm9keS5tZXNzYWdlXG4gICAgICB9KVxuICAgICAgdGhyb3cgbmV3IEVycm9yKGJvZHkubWVzc2FnZSlcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGN0eFxufVxuXG5jb25zdCBjb25maWcgPSAoY3R4OiBJUGljR28pOiBJUGx1Z2luQ29uZmlnW10gPT4ge1xuICBjb25zdCB1c2VyQ29uZmlnID0gY3R4LmdldENvbmZpZzxJTHNreUNvbmZpZz4oJ3BpY0JlZC5sc2t5cGxpc3QnKSB8fCB7fVxuICBjb25zdCBjb25maWc6IElQbHVnaW5Db25maWdbXSA9IFtcbiAgICB7XG4gICAgICBuYW1lOiAndmVyc2lvbicsXG4gICAgICB0eXBlOiAnbGlzdCcsXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLnZlcnNpb24gfHwgJ1YxJyxcbiAgICAgIGdldCBwcmVmaXgoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfTFNLWV9WRVJTSU9OJylcbiAgICAgIH0sXG4gICAgICBnZXQgYWxpYXMoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfTFNLWV9WRVJTSU9OJylcbiAgICAgIH0sXG4gICAgICBnZXQgbWVzc2FnZSgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9MU0tZX01FU1NBR0VfVkVSU0lPTicpXG4gICAgICB9LFxuICAgICAgY2hvaWNlczogWydWMScsICdWMiddLFxuICAgICAgcmVxdWlyZWQ6IHRydWVcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdob3N0JyxcbiAgICAgIHR5cGU6ICdpbnB1dCcsXG4gICAgICBnZXQgcHJlZml4KCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0xTS1lfSE9TVCcpXG4gICAgICB9LFxuICAgICAgZ2V0IGFsaWFzKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0xTS1lfSE9TVCcpXG4gICAgICB9LFxuICAgICAgZ2V0IG1lc3NhZ2UoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfTFNLWV9NRVNTQUdFX0hPU1QnKVxuICAgICAgfSxcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuaG9zdCB8fCAnJyxcbiAgICAgIHJlcXVpcmVkOiB0cnVlXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAndG9rZW4nLFxuICAgICAgdHlwZTogJ2lucHV0JyxcbiAgICAgIGdldCBwcmVmaXgoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfTFNLWV9UT0tFTicpXG4gICAgICB9LFxuICAgICAgZ2V0IGFsaWFzKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0xTS1lfVE9LRU4nKVxuICAgICAgfSxcbiAgICAgIGdldCBtZXNzYWdlKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0xTS1lfTUVTU0FHRV9UT0tFTicpXG4gICAgICB9LFxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy50b2tlbixcbiAgICAgIHJlcXVpcmVkOiB0cnVlXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAnc3RyYXRlZ3lJZCcsXG4gICAgICB0eXBlOiAnaW5wdXQnLFxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5zdHJhdGVneUlkLFxuICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgICAgZ2V0IHByZWZpeCgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9MU0tZX1NUUkFURUdZX0lEJylcbiAgICAgIH0sXG4gICAgICBnZXQgYWxpYXMoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfTFNLWV9TVFJBVEVHWV9JRCcpXG4gICAgICB9LFxuICAgICAgZ2V0IG1lc3NhZ2UoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfTFNLWV9NRVNTQUdFX1NUUkFURUdZX0lEJylcbiAgICAgIH1cbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdhbGJ1bUlkJyxcbiAgICAgIHR5cGU6ICdpbnB1dCcsXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLmFsYnVtSWQsXG4gICAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgICBnZXQgcHJlZml4KCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0xTS1lfQUxCVU1fSUQnKVxuICAgICAgfSxcbiAgICAgIGdldCBhbGlhcygpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9MU0tZX0FMQlVNX0lEJylcbiAgICAgIH0sXG4gICAgICBnZXQgbWVzc2FnZSgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9MU0tZX01FU1NBR0VfQUxCVU1fSUQnKVxuICAgICAgfVxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ3Blcm1pc3Npb24nLFxuICAgICAgdHlwZTogJ2xpc3QnLFxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5wZXJtaXNzaW9uIHx8ICdwcml2YXRlKGRlZmF1bHQpJyxcbiAgICAgIGNob2ljZXM6IFtcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6ICdwcml2YXRlKGRlZmF1bHQpJyxcbiAgICAgICAgICB2YWx1ZTogMFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogJ3B1YmxpYycsXG4gICAgICAgICAgdmFsdWU6IDFcbiAgICAgICAgfVxuICAgICAgXSxcbiAgICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICAgIGdldCBwcmVmaXgoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfTFNLWV9QRVJNSVNTSU9OJylcbiAgICAgIH0sXG4gICAgICBnZXQgYWxpYXMoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfTFNLWV9QRVJNSVNTSU9OJylcbiAgICAgIH0sXG4gICAgICBnZXQgbWVzc2FnZSgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9MU0tZX01FU1NBR0VfUEVSTUlTU0lPTicpXG4gICAgICB9XG4gICAgfVxuICBdXG4gIHJldHVybiBjb25maWdcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcmVnaXN0ZXIoY3R4OiBJUGljR28pOiB2b2lkIHtcbiAgY3R4LmhlbHBlci51cGxvYWRlci5yZWdpc3RlcihidWlsZEluVXBsb2FkZXJOYW1lcy5sc2t5cGxpc3QsIHtcbiAgICBnZXQgbmFtZSgpIHtcbiAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfTFNLWV9QTElTVCcpXG4gICAgfSxcbiAgICBoYW5kbGUsXG4gICAgY29uZmlnXG4gIH0pXG59XG4iLCJpbXBvcnQgeyBsb29rdXAgfSBmcm9tICdtaW1lLXR5cGVzJ1xuaW1wb3J0IHsgSVBpY0xpc3RDb25maWcsIElQaWNHbywgSVBsdWdpbkNvbmZpZywgSU9sZFJlcU9wdGlvbnNXaXRoRnVsbFJlc3BvbnNlIH0gZnJvbSAnLi4vLi4vdHlwZXMnXG5pbXBvcnQgeyBJQnVpbGRJbkV2ZW50IH0gZnJvbSAnLi4vLi4vdXRpbHMvZW51bSdcbmltcG9ydCB7IElMb2NhbGVzS2V5IH0gZnJvbSAnLi4vLi4vaTE4bi96aC1DTidcbmltcG9ydCB7IGJ1aWxkSW5VcGxvYWRlck5hbWVzIH0gZnJvbSAnLi91dGlscydcblxuY29uc3QgcG9zdE9wdGlvbnMgPSAob3B0aW9uczogSVBpY0xpc3RDb25maWcsIGZpbGVOYW1lOiBzdHJpbmcsIGltYWdlOiBCdWZmZXIpOiBJT2xkUmVxT3B0aW9uc1dpdGhGdWxsUmVzcG9uc2UgPT4ge1xuICBjb25zdCB7IGhvc3QgPSAnMTI3LjAuMC4xJywgcG9ydCA9ICcnLCBwaWNiZWQgPSAnJywgY29uZmlnTmFtZSA9ICdEZWZhdWx0Jywgc2VydmVyS2V5ID0gJycgfSA9IG9wdGlvbnNcbiAgY29uc3QgaXNJcCA9IGhvc3QubWF0Y2goLyhcXGQrKVxcLihcXGQrKVxcLihcXGQrKVxcLihcXGQrKS8pXG4gIGNvbnN0IHByb3RvY29sID0gaG9zdC5zdGFydHNXaXRoKCdodHRwczovLycpID8gJ2h0dHBzOi8vJyA6ICdodHRwOi8vJ1xuICBjb25zdCBmb3JtYXRIb3N0ID0gaG9zdC5yZXBsYWNlKC8oaHR0cDpcXC9cXC98aHR0cHM6XFwvXFwvKS8sICcnKVxuICBjb25zdCBkZWZhdWx0UG9ydCA9IHBvcnQgfHwgJzM2Njc3J1xuICBjb25zdCBlbmRwb2ludCA9IGlzSXBcbiAgICA/IGAke3Byb3RvY29sfSR7Zm9ybWF0SG9zdH06JHtkZWZhdWx0UG9ydH1gXG4gICAgOiBgJHtwcm90b2NvbH0ke2Zvcm1hdEhvc3R9JHtwb3J0ID8gYDoke3BvcnR9YCA6ICcnfWBcbiAgY29uc3QgdXJsID0gYCR7ZW5kcG9pbnR9L3VwbG9hZD9jb25maWdOYW1lPSR7Y29uZmlnTmFtZX0ke3BpY2JlZCA/IGAmcGljYmVkPSR7cGljYmVkfWAgOiAnJ30ke3NlcnZlcktleSA/IGAma2V5PSR7c2VydmVyS2V5fWAgOiAnJ31gXG4gIHJldHVybiB7XG4gICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgdXJsLFxuICAgIGhlYWRlcnM6IHtcbiAgICAgICdjb250ZW50LXR5cGUnOiAnbXVsdGlwYXJ0L2Zvcm0tZGF0YSdcbiAgICB9LFxuICAgIGZvcm1EYXRhOiB7XG4gICAgICBmaWxlOiB7XG4gICAgICAgIHZhbHVlOiBpbWFnZSxcbiAgICAgICAgb3B0aW9uczoge1xuICAgICAgICAgIGZpbGVuYW1lOiBmaWxlTmFtZSxcbiAgICAgICAgICBjb250ZW50VHlwZTogbG9va3VwKGZpbGVOYW1lKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgICByZXNvbHZlV2l0aEZ1bGxSZXNwb25zZTogdHJ1ZVxuICB9XG59XG5cbmNvbnN0IGhhbmRsZSA9IGFzeW5jIChjdHg6IElQaWNHbyk6IFByb21pc2U8SVBpY0dvIHwgYm9vbGVhbj4gPT4ge1xuICBjb25zdCBwaWNsaXN0T3B0aW9ucyA9IGN0eC5nZXRDb25maWc8SVBpY0xpc3RDb25maWc+KCdwaWNCZWQucGljbGlzdCcpXG4gIGlmICghcGljbGlzdE9wdGlvbnMpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJDYW4ndCBmaW5kIFBpY0xpc3QgY29uZmlnXCIpXG4gIH1cbiAgdHJ5IHtcbiAgICBjb25zdCBpbWdMaXN0ID0gY3R4Lm91dHB1dFxuICAgIGZvciAoY29uc3QgaW1nIG9mIGltZ0xpc3QpIHtcbiAgICAgIGlmIChpbWcuZmlsZU5hbWUgJiYgaW1nLmJ1ZmZlcikge1xuICAgICAgICBsZXQgaW1hZ2UgPSBpbWcuYnVmZmVyXG4gICAgICAgIGlmICghaW1hZ2UgJiYgaW1nLmJhc2U2NEltYWdlKSB7XG4gICAgICAgICAgaW1hZ2UgPSBCdWZmZXIuZnJvbShpbWcuYmFzZTY0SW1hZ2UsICdiYXNlNjQnKVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSBwb3N0T3B0aW9ucyhwaWNsaXN0T3B0aW9ucywgaW1nLmZpbGVOYW1lLCBpbWFnZSlcblxuICAgICAgICBjb25zdCByZXMgPSBhd2FpdCBjdHhcbiAgICAgICAgICAucmVxdWVzdChvcHRpb25zKVxuICAgICAgICAgIC50aGVuKChyZXM6IGFueSkgPT4gcmVzKVxuICAgICAgICAgIC5jYXRjaCgoZXJyOiBFcnJvcikgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgc3RhdHVzQ29kZTogNDAwLFxuICAgICAgICAgICAgICBib2R5OiB7XG4gICAgICAgICAgICAgICAgbXNnOiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdBVVRIX0ZBSUxFRCcpLFxuICAgICAgICAgICAgICAgIGVyclxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSlcbiAgICAgICAgaWYgKHJlcy5zdGF0dXNDb2RlID09PSAyMDAgJiYgcmVzLmJvZHk/LnN1Y2Nlc3MpIHtcbiAgICAgICAgICBkZWxldGUgaW1nLmJhc2U2NEltYWdlXG4gICAgICAgICAgZGVsZXRlIGltZy5idWZmZXJcbiAgICAgICAgICBpbWcuaW1nVXJsID0gcmVzLmJvZHkucmVzdWx0WzBdXG4gICAgICAgICAgaW1nLmZ1bGxSZXN1bHQgPSByZXMuYm9keS5mdWxsUmVzdWx0ID8gcmVzLmJvZHkuZnVsbFJlc3VsdFswXSA6ICcnXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKHJlcy5ib2R5Lm1lc3NhZ2UpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGN0eFxuICB9IGNhdGNoIChlcnI6IGFueSkge1xuICAgIGN0eC5lbWl0KElCdWlsZEluRXZlbnQuTk9USUZJQ0FUSU9OLCB7XG4gICAgICB0aXRsZTogY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignVVBMT0FEX0ZBSUxFRCcpLFxuICAgICAgYm9keTogY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQ0hFQ0tfU0VUVElOR1MnKVxuICAgIH0pXG4gICAgdGhyb3cgZXJyXG4gIH1cbn1cblxuY29uc3QgY29uZmlnID0gKGN0eDogSVBpY0dvKTogSVBsdWdpbkNvbmZpZ1tdID0+IHtcbiAgY29uc3QgdXNlckNvbmZpZyA9IGN0eC5nZXRDb25maWc8SVBpY0xpc3RDb25maWc+KCdwaWNCZWQucGljbGlzdCcpIHx8IHt9XG4gIGNvbnN0IGNvbmZpZzogSVBsdWdpbkNvbmZpZ1tdID0gW1xuICAgIHtcbiAgICAgIG5hbWU6ICdob3N0JyxcbiAgICAgIHR5cGU6ICdpbnB1dCcsXG4gICAgICBnZXQgcHJlZml4KCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1BJQ0xJU1RfSE9TVCcpXG4gICAgICB9LFxuICAgICAgZ2V0IGFsaWFzKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1BJQ0xJU1RfSE9TVCcpXG4gICAgICB9LFxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5ob3N0IHx8ICcxMjcuMC4wLjEnLFxuICAgICAgcmVxdWlyZWQ6IHRydWVcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdwb3J0JyxcbiAgICAgIHR5cGU6ICdpbnB1dCcsXG4gICAgICBnZXQgcHJlZml4KCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1BJQ0xJU1RfUE9SVCcpXG4gICAgICB9LFxuICAgICAgZ2V0IGFsaWFzKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1BJQ0xJU1RfUE9SVCcpXG4gICAgICB9LFxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5wb3J0IHx8IDM2Njc3LFxuICAgICAgcmVxdWlyZWQ6IGZhbHNlXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAncGljYmVkJyxcbiAgICAgIHR5cGU6ICdpbnB1dCcsXG4gICAgICBnZXQgcHJlZml4KCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1BJQ0xJU1RfUElDQkVEJylcbiAgICAgIH0sXG4gICAgICBnZXQgYWxpYXMoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfUElDTElTVF9QSUNCRUQnKVxuICAgICAgfSxcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcucGljYmVkIHx8ICcnLFxuICAgICAgcmVxdWlyZWQ6IGZhbHNlXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAnY29uZmlnTmFtZScsXG4gICAgICB0eXBlOiAnaW5wdXQnLFxuICAgICAgZ2V0IHByZWZpeCgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9QSUNMSVNUX0NPTkZJR05BTUUnKVxuICAgICAgfSxcbiAgICAgIGdldCBhbGlhcygpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9QSUNMSVNUX0NPTkZJR05BTUUnKVxuICAgICAgfSxcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuY29uZmlnTmFtZSB8fCAnJyxcbiAgICAgIHJlcXVpcmVkOiBmYWxzZVxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ3NlcnZlcktleScsXG4gICAgICB0eXBlOiAnaW5wdXQnLFxuICAgICAgZ2V0IHByZWZpeCgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9QSUNMSVNUX0tFWScpXG4gICAgICB9LFxuICAgICAgZ2V0IGFsaWFzKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1BJQ0xJU1RfS0VZJylcbiAgICAgIH0sXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLnNlcnZlcktleSB8fCAnJyxcbiAgICAgIHJlcXVpcmVkOiBmYWxzZVxuICAgIH1cbiAgXVxuICByZXR1cm4gY29uZmlnXG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHJlZ2lzdGVyKGN0eDogSVBpY0dvKTogdm9pZCB7XG4gIGN0eC5oZWxwZXIudXBsb2FkZXIucmVnaXN0ZXIoYnVpbGRJblVwbG9hZGVyTmFtZXMucGljbGlzdCwge1xuICAgIGdldCBuYW1lKCkge1xuICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9QSUNMSVNUJylcbiAgICB9LFxuICAgIGhhbmRsZSxcbiAgICBjb25maWdcbiAgfSlcbn1cbiIsImltcG9ydCB7IGxvb2t1cCB9IGZyb20gJ21pbWUtdHlwZXMnXG5pbXBvcnQgcWluaXUgZnJvbSAncWluaXUnXG5pbXBvcnQgeyBJUGx1Z2luQ29uZmlnLCBJUWluaXVDb25maWcsIElQaWNHbywgSU9sZFJlcU9wdGlvbnMgfSBmcm9tICcuLi8uLi90eXBlcydcbmltcG9ydCB7IElCdWlsZEluRXZlbnQgfSBmcm9tICcuLi8uLi91dGlscy9lbnVtJ1xuaW1wb3J0IHsgSUxvY2FsZXNLZXkgfSBmcm9tICcuLi8uLi9pMThuL3poLUNOJ1xuaW1wb3J0IHsgYnVpbGRJblVwbG9hZGVyTmFtZXMgfSBmcm9tICcuL3V0aWxzJ1xuXG5mdW5jdGlvbiBwb3N0T3B0aW9ucyhvcHRpb25zOiBJUWluaXVDb25maWcsIGZpbGVOYW1lOiBzdHJpbmcsIHRva2VuOiBzdHJpbmcsIGltZ0Jhc2U2NDogc3RyaW5nKTogSU9sZFJlcU9wdGlvbnMge1xuICBjb25zdCBhcmVhID0gc2VsZWN0QXJlYShvcHRpb25zLmFyZWEgfHwgJ3owJylcbiAgY29uc3QgcGF0aCA9IG9wdGlvbnMucGF0aCB8fCAnJ1xuICBjb25zdCBiYXNlNjRGaWxlTmFtZSA9IEJ1ZmZlci5mcm9tKHBhdGggKyBmaWxlTmFtZSwgJ3V0Zi04JylcbiAgICAudG9TdHJpbmcoJ2Jhc2U2NCcpXG4gICAgLnJlcGxhY2UoL1xcKy9nLCAnLScpXG4gICAgLnJlcGxhY2UoL1xcLy9nLCAnXycpXG4gIHJldHVybiB7XG4gICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgdXJsOiBgaHR0cDovL3VwbG9hZCR7YXJlYX0ucWluaXVwLmNvbS9wdXRiNjQvLTEva2V5LyR7YmFzZTY0RmlsZU5hbWV9YCxcbiAgICBoZWFkZXJzOiB7XG4gICAgICBBdXRob3JpemF0aW9uOiBgVXBUb2tlbiAke3Rva2VufWAsXG4gICAgICAnQ29udGVudC1UeXBlJzogbG9va3VwKGZpbGVOYW1lKSB8fCAnYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtJ1xuICAgIH0sXG4gICAgYm9keTogaW1nQmFzZTY0XG4gIH1cbn1cblxuZnVuY3Rpb24gc2VsZWN0QXJlYShhcmVhOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gYXJlYSA9PT0gJ3owJyA/ICcnIDogJy0nICsgYXJlYVxufVxuXG5mdW5jdGlvbiBnZXRUb2tlbihxaW5pdU9wdGlvbnM6IGFueSk6IHN0cmluZyB7XG4gIGNvbnN0IGFjY2Vzc0tleSA9IHFpbml1T3B0aW9ucy5hY2Nlc3NLZXlcbiAgY29uc3Qgc2VjcmV0S2V5ID0gcWluaXVPcHRpb25zLnNlY3JldEtleVxuICBjb25zdCBtYWMgPSBuZXcgcWluaXUuYXV0aC5kaWdlc3QuTWFjKGFjY2Vzc0tleSwgc2VjcmV0S2V5KVxuICBjb25zdCBvcHRpb25zID0ge1xuICAgIHNjb3BlOiBxaW5pdU9wdGlvbnMuYnVja2V0XG4gIH1cbiAgY29uc3QgcHV0UG9saWN5ID0gbmV3IHFpbml1LnJzLlB1dFBvbGljeShvcHRpb25zKVxuICByZXR1cm4gcHV0UG9saWN5LnVwbG9hZFRva2VuKG1hYylcbn1cblxuY29uc3QgaGFuZGxlID0gYXN5bmMgKGN0eDogSVBpY0dvKTogUHJvbWlzZTxJUGljR28+ID0+IHtcbiAgY29uc3QgcWluaXVPcHRpb25zID0gY3R4LmdldENvbmZpZzxJUWluaXVDb25maWc+KCdwaWNCZWQucWluaXUnKVxuICBpZiAoIXFpbml1T3B0aW9ucykge1xuICAgIHRocm93IG5ldyBFcnJvcihcIkNhbid0IGZpbmQgcWluaXUgY29uZmlnXCIpXG4gIH1cbiAgdHJ5IHtcbiAgICBjb25zdCBpbWdMaXN0ID0gY3R4Lm91dHB1dFxuICAgIGZvciAoY29uc3QgaW1nIG9mIGltZ0xpc3QpIHtcbiAgICAgIGlmIChpbWcuZmlsZU5hbWUgJiYgaW1nLmJ1ZmZlcikge1xuICAgICAgICBjb25zdCBiYXNlNjRJbWFnZSA9IGltZy5iYXNlNjRJbWFnZSB8fCBCdWZmZXIuZnJvbShpbWcuYnVmZmVyKS50b1N0cmluZygnYmFzZTY0JylcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHBvc3RPcHRpb25zKHFpbml1T3B0aW9ucywgaW1nLmZpbGVOYW1lLCBnZXRUb2tlbihxaW5pdU9wdGlvbnMpLCBiYXNlNjRJbWFnZSlcbiAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgY3R4LnJlcXVlc3Qob3B0aW9ucylcbiAgICAgICAgY29uc3QgYm9keSA9IEpTT04ucGFyc2UocmVzKVxuICAgICAgICBpZiAoYm9keT8ua2V5KSB7XG4gICAgICAgICAgZGVsZXRlIGltZy5iYXNlNjRJbWFnZVxuICAgICAgICAgIGRlbGV0ZSBpbWcuYnVmZmVyXG4gICAgICAgICAgY29uc3QgYmFzZVVybCA9IHFpbml1T3B0aW9ucy51cmxcbiAgICAgICAgICBjb25zdCB1cmxPcHRpb25zID0gcWluaXVPcHRpb25zLm9wdGlvbnMgfHwgJydcbiAgICAgICAgICBpbWcuaW1nVXJsID0gYCR7YmFzZVVybH0vJHtib2R5LmtleSBhcyBzdHJpbmd9JHt1cmxPcHRpb25zfWBcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjdHguZW1pdChJQnVpbGRJbkV2ZW50Lk5PVElGSUNBVElPTiwge1xuICAgICAgICAgICAgdGl0bGU6IGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1VQTE9BRF9GQUlMRUQnKSxcbiAgICAgICAgICAgIGJvZHk6IGJvZHkubXNnXG4gICAgICAgICAgfSlcbiAgICAgICAgICBjdHgubG9nLmVycm9yKCdxaW5pdSBlcnJvcicsIGJvZHkpXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVcGxvYWQgZmFpbGVkJylcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gY3R4XG4gIH0gY2F0Y2ggKGVycjogYW55KSB7XG4gICAgaWYgKGVyci5tZXNzYWdlICE9PSAnVXBsb2FkIGZhaWxlZCcpIHtcbiAgICAgIC8vIGVyci5yZXNwb25zZSBtYXliZSB1bmRlZmluZWRcbiAgICAgIGlmIChlcnIucmVzcG9uc2UpIHtcbiAgICAgICAgY29uc3QgZXJyb3IgPSBlcnIucmVzcG9uc2UuYm9keVxuICAgICAgICBjdHguZW1pdChJQnVpbGRJbkV2ZW50Lk5PVElGSUNBVElPTiwge1xuICAgICAgICAgIHRpdGxlOiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdVUExPQURfRkFJTEVEJyksXG4gICAgICAgICAgYm9keTogZXJyb3IuZXJyb3JcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9XG4gICAgdGhyb3cgZXJyXG4gIH1cbn1cblxuY29uc3QgY29uZmlnID0gKGN0eDogSVBpY0dvKTogSVBsdWdpbkNvbmZpZ1tdID0+IHtcbiAgY29uc3QgdXNlckNvbmZpZyA9IGN0eC5nZXRDb25maWc8SVFpbml1Q29uZmlnPigncGljQmVkLnFpbml1JykgfHwge31cbiAgY29uc3QgY29uZmlnOiBJUGx1Z2luQ29uZmlnW10gPSBbXG4gICAge1xuICAgICAgbmFtZTogJ2FjY2Vzc0tleScsXG4gICAgICB0eXBlOiAnaW5wdXQnLFxuICAgICAgZ2V0IHByZWZpeCgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9RSU5JVV9BQ0NFU1NLRVknKVxuICAgICAgfSxcbiAgICAgIGdldCBhbGlhcygpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9RSU5JVV9BQ0NFU1NLRVknKVxuICAgICAgfSxcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuYWNjZXNzS2V5IHx8ICcnLFxuICAgICAgcmVxdWlyZWQ6IHRydWVcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdzZWNyZXRLZXknLFxuICAgICAgdHlwZTogJ2lucHV0JyxcbiAgICAgIGdldCBwcmVmaXgoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfUUlOSVVfU0VDUkVUS0VZJylcbiAgICAgIH0sXG4gICAgICBnZXQgYWxpYXMoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfUUlOSVVfU0VDUkVUS0VZJylcbiAgICAgIH0sXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLnNlY3JldEtleSB8fCAnJyxcbiAgICAgIHJlcXVpcmVkOiB0cnVlXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAnYnVja2V0JyxcbiAgICAgIHR5cGU6ICdpbnB1dCcsXG4gICAgICBnZXQgcHJlZml4KCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1FJTklVX0JVQ0tFVCcpXG4gICAgICB9LFxuICAgICAgZ2V0IGFsaWFzKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1FJTklVX0JVQ0tFVCcpXG4gICAgICB9LFxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5idWNrZXQgfHwgJycsXG4gICAgICByZXF1aXJlZDogdHJ1ZVxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ3VybCcsXG4gICAgICB0eXBlOiAnaW5wdXQnLFxuICAgICAgZ2V0IHByZWZpeCgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9RSU5JVV9VUkwnKVxuICAgICAgfSxcbiAgICAgIGdldCBhbGlhcygpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9RSU5JVV9VUkwnKVxuICAgICAgfSxcbiAgICAgIGdldCBtZXNzYWdlKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1FJTklVX01FU1NBR0VfVVJMJylcbiAgICAgIH0sXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLnVybCB8fCAnJyxcbiAgICAgIHJlcXVpcmVkOiB0cnVlXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAnYXJlYScsXG4gICAgICB0eXBlOiAnaW5wdXQnLFxuICAgICAgZ2V0IHByZWZpeCgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9RSU5JVV9BUkVBJylcbiAgICAgIH0sXG4gICAgICBnZXQgYWxpYXMoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfUUlOSVVfQVJFQScpXG4gICAgICB9LFxuICAgICAgZ2V0IG1lc3NhZ2UoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfUUlOSVVfTUVTU0FHRV9BUkVBJylcbiAgICAgIH0sXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLmFyZWEgfHwgJycsXG4gICAgICByZXF1aXJlZDogdHJ1ZVxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ29wdGlvbnMnLFxuICAgICAgdHlwZTogJ2lucHV0JyxcbiAgICAgIGdldCBwcmVmaXgoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfUUlOSVVfT1BUSU9OUycpXG4gICAgICB9LFxuICAgICAgZ2V0IGFsaWFzKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1FJTklVX09QVElPTlMnKVxuICAgICAgfSxcbiAgICAgIGdldCBtZXNzYWdlKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1FJTklVX01FU1NBR0VfT1BUSU9OUycpXG4gICAgICB9LFxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5vcHRpb25zIHx8ICcnLFxuICAgICAgcmVxdWlyZWQ6IGZhbHNlXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAncGF0aCcsXG4gICAgICB0eXBlOiAnaW5wdXQnLFxuICAgICAgZ2V0IHByZWZpeCgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9RSU5JVV9QQVRIJylcbiAgICAgIH0sXG4gICAgICBnZXQgYWxpYXMoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfUUlOSVVfUEFUSCcpXG4gICAgICB9LFxuICAgICAgZ2V0IG1lc3NhZ2UoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfUUlOSVVfTUVTU0FHRV9QQVRIJylcbiAgICAgIH0sXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLnBhdGggfHwgJycsXG4gICAgICByZXF1aXJlZDogZmFsc2VcbiAgICB9XG4gIF1cbiAgcmV0dXJuIGNvbmZpZ1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiByZWdpc3RlcihjdHg6IElQaWNHbyk6IHZvaWQge1xuICBjdHguaGVscGVyLnVwbG9hZGVyLnJlZ2lzdGVyKGJ1aWxkSW5VcGxvYWRlck5hbWVzLnFpbml1LCB7XG4gICAgZ2V0IG5hbWUoKSB7XG4gICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1FJTklVJylcbiAgICB9LFxuICAgIGhhbmRsZSxcbiAgICBjb25maWdcbiAgfSlcbn1cbiIsImltcG9ydCB7IE5vZGVTU0gsIENvbmZpZyB9IGZyb20gJ25vZGUtc3NoLW5vLWNwdS1mZWF0dXJlcydcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnXG5cbmltcG9ydCB7IElTZnRwUGxpc3RDb25maWcgfSBmcm9tICcuLi90eXBlcydcblxuY2xhc3MgU1NIQ2xpZW50IHtcbiAgcHJpdmF0ZSBzdGF0aWMgaW5zdGFuY2U6IFNTSENsaWVudFxuICBwcml2YXRlIGNsaWVudCA9IG5ldyBOb2RlU1NIKClcbiAgaXNDb25uZWN0ZWQgPSBmYWxzZVxuXG4gIHByaXZhdGUgY29uc3RydWN0b3IoKSB7fVxuXG4gIHB1YmxpYyBzdGF0aWMgZ2V0SW5zdGFuY2UoKTogU1NIQ2xpZW50IHtcbiAgICBpZiAoIVNTSENsaWVudC5pbnN0YW5jZSkge1xuICAgICAgU1NIQ2xpZW50Lmluc3RhbmNlID0gbmV3IFNTSENsaWVudCgpXG4gICAgfVxuICAgIHJldHVybiBTU0hDbGllbnQuaW5zdGFuY2VcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGNoYW5nZVdpblN0eWxlUGF0aFRvVW5peChwYXRoOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiBwYXRoLnJlcGxhY2UoL1xcXFwvZywgJy8nKVxuICB9XG5cbiAgcHVibGljIGFzeW5jIGNvbm5lY3QoY29uZmlnOiBJU2Z0cFBsaXN0Q29uZmlnKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgeyBob3N0LCBwb3J0LCB1c2VybmFtZSwgcGFzc3dvcmQsIHByaXZhdGVLZXksIHBhc3NwaHJhc2UgfSA9IGNvbmZpZ1xuICAgIGNvbnN0IGxvZ2luSW5mbzogQ29uZmlnID0gcHJpdmF0ZUtleVxuICAgICAgPyB7XG4gICAgICAgICAgdXNlcm5hbWUsXG4gICAgICAgICAgcHJpdmF0ZUtleVBhdGg6IHByaXZhdGVLZXksXG4gICAgICAgICAgcGFzc3BocmFzZTogcGFzc3BocmFzZSB8fCB1bmRlZmluZWRcbiAgICAgICAgfVxuICAgICAgOiB7IHVzZXJuYW1lLCBwYXNzd29yZCB9XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMuY2xpZW50LmNvbm5lY3Qoe1xuICAgICAgICBob3N0OiBob3N0LFxuICAgICAgICBwb3J0OiBOdW1iZXIocG9ydCkgfHwgMjIsXG4gICAgICAgIC4uLmxvZ2luSW5mb1xuICAgICAgfSlcbiAgICAgIHRoaXMuaXNDb25uZWN0ZWQgPSB0cnVlXG4gICAgfSBjYXRjaCAoZXJyOiBhbnkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihlcnIpXG4gICAgfVxuICB9XG5cbiAgcHVibGljIGFzeW5jIHVwbG9hZChsb2NhbDogc3RyaW5nLCByZW1vdGU6IHN0cmluZywgY29uZmlnOiBJU2Z0cFBsaXN0Q29uZmlnKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKCF0aGlzLmlzQ29ubmVjdGVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1NTSCBjbGllbnQgaXMgbm90IGNvbm5lY3RlZCcpXG4gICAgfVxuICAgIHRyeSB7XG4gICAgICByZW1vdGUgPSBTU0hDbGllbnQuY2hhbmdlV2luU3R5bGVQYXRoVG9Vbml4KHJlbW90ZSlcbiAgICAgIGF3YWl0IHRoaXMubWtkaXIocGF0aC5kaXJuYW1lKHJlbW90ZSkucmVwbGFjZSgvXlxcLyt8XFwvKyQvZywgJycpLCBjb25maWcpXG4gICAgICBhd2FpdCB0aGlzLmNsaWVudC5wdXRGaWxlKGxvY2FsLCByZW1vdGUpXG4gICAgICBjb25zdCBmaWxlTW9kZSA9IGNvbmZpZy5maWxlTW9kZSB8fCAnMDY0NCdcbiAgICAgIGlmIChmaWxlTW9kZSAhPT0gJzA2NDQnKSB7XG4gICAgICAgIGF3YWl0IHRoaXMuZXhlYyhgY2htb2QgJHtmaWxlTW9kZX0gXCIke3JlbW90ZX1cImApXG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyOiBhbnkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihlcnIpXG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBta2RpcihkaXJQYXRoOiBzdHJpbmcsIGNvbmZpZzogSVNmdHBQbGlzdENvbmZpZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICghdGhpcy5jbGllbnQuaXNDb25uZWN0ZWQoKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdzZnRwIGNsaWVudCBpcyBub3QgY29ubmVjdGVkJylcbiAgICB9XG4gICAgY29uc3QgZGlyZWN0b3J5TW9kZSA9IGNvbmZpZy5kaXJNb2RlIHx8ICcwNzU1J1xuICAgIGlmIChkaXJlY3RvcnlNb2RlICE9PSAnMDc1NScpIHtcbiAgICAgIGNvbnN0IGRpcnMgPSBkaXJQYXRoLnNwbGl0KCcvJylcbiAgICAgIGxldCBjdXJyZW50UGF0aCA9ICcnXG4gICAgICBmb3IgKGNvbnN0IGRpciBvZiBkaXJzKSB7XG4gICAgICAgIGlmIChkaXIpIHtcbiAgICAgICAgICBjdXJyZW50UGF0aCArPSBgLyR7ZGlyfWBcbiAgICAgICAgICBjb25zdCBzY3JpcHQgPSBgbWtkaXIgXCIke2N1cnJlbnRQYXRofVwiICYmIGNobW9kICR7ZGlyZWN0b3J5TW9kZX0gXCIke2N1cnJlbnRQYXRofVwiYFxuICAgICAgICAgIGF3YWl0IHRoaXMuZXhlYyhzY3JpcHQpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3Qgc2NyaXB0ID0gYGNkIC8gJiYgbWtkaXIgLXAgXCIke2RpclBhdGh9XCJgXG4gICAgICBhd2FpdCB0aGlzLmV4ZWMoc2NyaXB0KVxuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBjaG93bihyZW1vdGU6IHN0cmluZywgdXNlcjogc3RyaW5nLCBncm91cD86IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJlbW90ZSA9IFNTSENsaWVudC5jaGFuZ2VXaW5TdHlsZVBhdGhUb1VuaXgocmVtb3RlKVxuICAgIGNvbnN0IFtfdXNlciwgX2dyb3VwXSA9IGdyb3VwID8gW3VzZXIsIGdyb3VwXSA6IHVzZXIuaW5jbHVkZXMoJzonKSA/IHVzZXIuc3BsaXQoJzonKSA6IFt1c2VyLCB1c2VyXVxuXG4gICAgYXdhaXQgdGhpcy5leGVjKGBjaG93biAke191c2VyfToke19ncm91cH0gXCIke3JlbW90ZX1cImApXG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGV4ZWMoc2NyaXB0OiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCBleGVjUmVzdWx0ID0gYXdhaXQgdGhpcy5jbGllbnQuZXhlY0NvbW1hbmQoc2NyaXB0KVxuICAgIHJldHVybiBleGVjUmVzdWx0LmNvZGUgPT09IDBcbiAgfVxuXG4gIHB1YmxpYyBjbG9zZSgpOiB2b2lkIHtcbiAgICB0aGlzLmNsaWVudC5kaXNwb3NlKClcbiAgICB0aGlzLmlzQ29ubmVjdGVkID0gZmFsc2VcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBTU0hDbGllbnRcbiIsImltcG9ydCBmcywgeyBlbnN1cmVEaXJTeW5jLCBtb3ZlU3luYywgcmVtb3ZlU3luYyB9IGZyb20gJ2ZzLWV4dHJhJ1xuaW1wb3J0IHBhdGggZnJvbSAncGF0aCdcblxuaW1wb3J0IHsgSVBpY0dvLCBJUGx1Z2luQ29uZmlnLCBJU2Z0cFBsaXN0Q29uZmlnIH0gZnJvbSAnLi4vLi4vdHlwZXMnXG5pbXBvcnQgeyBJQnVpbGRJbkV2ZW50IH0gZnJvbSAnLi4vLi4vdXRpbHMvZW51bSdcbmltcG9ydCB7IElMb2NhbGVzS2V5IH0gZnJvbSAnLi4vLi4vaTE4bi96aC1DTidcbmltcG9ydCBTU0hDbGllbnQgZnJvbSAnLi4vLi4vdXRpbHMvc3NoQ2xpZW50J1xuaW1wb3J0IHsgYnVpbGRJblVwbG9hZGVyTmFtZXMsIGVuY29kZVBhdGgsIGZvcm1hdFBhdGhIZWxwZXIgfSBmcm9tICcuL3V0aWxzJ1xuXG5jb25zdCBoYW5kbGUgPSBhc3luYyAoY3R4OiBJUGljR28pOiBQcm9taXNlPElQaWNHbz4gPT4ge1xuICBjb25zdCBzZnRwcGxpc3RDb25maWcgPSBjdHguZ2V0Q29uZmlnPElTZnRwUGxpc3RDb25maWc+KCdwaWNCZWQuc2Z0cHBsaXN0JylcbiAgaWYgKCFzZnRwcGxpc3RDb25maWcpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0NhbiBub3QgZmluZCBzZnRwcGxpc3QgY29uZmlnIScpXG4gIH1cbiAgc2Z0cHBsaXN0Q29uZmlnLnBvcnQgPSBOdW1iZXIoc2Z0cHBsaXN0Q29uZmlnLnBvcnQpIHx8IDIyXG4gIGlmIChzZnRwcGxpc3RDb25maWcucG9ydCA8IDAgfHwgc2Z0cHBsaXN0Q29uZmlnLnBvcnQgPiA2NTUzNSkge1xuICAgIHNmdHBwbGlzdENvbmZpZy5wb3J0ID0gMjJcbiAgfVxuICBzZnRwcGxpc3RDb25maWcudXBsb2FkUGF0aCA9IGZvcm1hdFBhdGhIZWxwZXIoe1xuICAgIHBhdGg6IHNmdHBwbGlzdENvbmZpZy51cGxvYWRQYXRoLFxuICAgIHJvb3RUb0VtcHR5OiBmYWxzZVxuICB9KVxuICBjb25zdCB3ZWJQYXRoID0gZm9ybWF0UGF0aEhlbHBlcih7XG4gICAgcGF0aDogc2Z0cHBsaXN0Q29uZmlnLndlYlBhdGgsXG4gICAgcm9vdFRvRW1wdHk6IGZhbHNlXG4gIH0pXG4gIHRyeSB7XG4gICAgY29uc3QgaW1nTGlzdCA9IGN0eC5vdXRwdXRcbiAgICBmb3IgKGNvbnN0IGltZyBvZiBpbWdMaXN0KSB7XG4gICAgICBpZiAoaW1nLmZpbGVOYW1lICYmIGltZy5idWZmZXIpIHtcbiAgICAgICAgbGV0IGltYWdlID0gaW1nLmJ1ZmZlclxuICAgICAgICBpZiAoIWltYWdlICYmIGltZy5iYXNlNjRJbWFnZSkge1xuICAgICAgICAgIGltYWdlID0gQnVmZmVyLmZyb20oaW1nLmJhc2U2NEltYWdlLCAnYmFzZTY0JylcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB1cGxvYWRUZW1wUGF0aCA9IHBhdGguam9pbihjdHguYmFzZURpciwgJ3VwbG9hZFRlbXAnKVxuICAgICAgICBjb25zdCBpbWdUZW1wUGF0aCA9IHBhdGguam9pbihjdHguYmFzZURpciwgJ2ltZ1RlbXAnLCAnc2Z0cHBsaXN0JylcbiAgICAgICAgZW5zdXJlRGlyU3luYyhpbWdUZW1wUGF0aClcbiAgICAgICAgY29uc3QgdGVtcEZpbGVQYXRoID0gcGF0aC5qb2luKHVwbG9hZFRlbXBQYXRoLCBpbWcuZmlsZU5hbWUpXG4gICAgICAgIGVuc3VyZURpclN5bmMocGF0aC5kaXJuYW1lKHRlbXBGaWxlUGF0aCkpXG4gICAgICAgIGZzLndyaXRlRmlsZVN5bmModGVtcEZpbGVQYXRoLCBpbWFnZSlcbiAgICAgICAgY29uc3QgY2xpZW50ID0gU1NIQ2xpZW50LmdldEluc3RhbmNlKClcbiAgICAgICAgYXdhaXQgY2xpZW50LmNvbm5lY3Qoc2Z0cHBsaXN0Q29uZmlnKVxuICAgICAgICBjb25zdCByZW1vdGVQYXRoID0gcGF0aC5qb2luKGAvJHtzZnRwcGxpc3RDb25maWcudXBsb2FkUGF0aH1gLnJlcGxhY2UoL1xcL1xcLysvZywgJy8nKSwgaW1nLmZpbGVOYW1lKVxuICAgICAgICBhd2FpdCBjbGllbnQudXBsb2FkKHRlbXBGaWxlUGF0aCwgcmVtb3RlUGF0aCwgc2Z0cHBsaXN0Q29uZmlnKVxuICAgICAgICBzZnRwcGxpc3RDb25maWcuZmlsZVVzZXIgJiYgKGF3YWl0IGNsaWVudC5jaG93bihyZW1vdGVQYXRoLCBzZnRwcGxpc3RDb25maWcuZmlsZVVzZXIpKVxuICAgICAgICBkZWxldGUgaW1nLmJhc2U2NEltYWdlXG4gICAgICAgIGRlbGV0ZSBpbWcuYnVmZmVyXG4gICAgICAgIGNvbnN0IGJhc2VVcmwgPSBzZnRwcGxpc3RDb25maWcuY3VzdG9tVXJsIHx8IHNmdHBwbGlzdENvbmZpZy5ob3N0XG4gICAgICAgIGlmIChzZnRwcGxpc3RDb25maWcud2ViUGF0aCkge1xuICAgICAgICAgIGltZy5pbWdVcmwgPSBgJHtiYXNlVXJsfS8ke2VuY29kZVBhdGgoYCR7d2ViUGF0aCA9PT0gJy8nID8gJycgOiB3ZWJQYXRofSR7aW1nLmZpbGVOYW1lfWApfWBcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpbWcuaW1nVXJsID0gYCR7YmFzZVVybH0vJHtlbmNvZGVQYXRoKGAke3NmdHBwbGlzdENvbmZpZy51cGxvYWRQYXRoID09PSAnLycgPyAnJyA6IHNmdHBwbGlzdENvbmZpZy51cGxvYWRQYXRofSR7aW1nLmZpbGVOYW1lfWApfWBcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBpbWdUZW1wRmlsZVBhdGggPSBwYXRoLmpvaW4oaW1nVGVtcFBhdGgsIGltZy5maWxlTmFtZSlcbiAgICAgICAgZW5zdXJlRGlyU3luYyhwYXRoLmRpcm5hbWUoaW1nVGVtcEZpbGVQYXRoKSlcbiAgICAgICAgcmVtb3ZlU3luYyhpbWdUZW1wRmlsZVBhdGgpXG4gICAgICAgIG1vdmVTeW5jKHRlbXBGaWxlUGF0aCwgcGF0aC5qb2luKGltZ1RlbXBQYXRoLCBpbWcuZmlsZU5hbWUpKVxuICAgICAgICBpbWcuZ2FsbGVyeVBhdGggPSBgaHR0cDovL2xvY2FsaG9zdDozNjY5OS9zZnRwcGxpc3QvJHtlbmNvZGVVUklDb21wb25lbnQoaW1nLmZpbGVOYW1lKX1gXG4gICAgICAgIGNsaWVudC5jbG9zZSgpXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBjdHhcbiAgfSBjYXRjaCAoZXJyOiBhbnkpIHtcbiAgICBjdHguZW1pdChJQnVpbGRJbkV2ZW50Lk5PVElGSUNBVElPTiwge1xuICAgICAgdGl0bGU6IGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1VQTE9BRF9GQUlMRUQnKSxcbiAgICAgIGJvZHk6IGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0NIRUNLX1NFVFRJTkdTJylcbiAgICB9KVxuICAgIHRocm93IGVyclxuICB9XG59XG5cbmNvbnN0IGNvbmZpZyA9IChjdHg6IElQaWNHbyk6IElQbHVnaW5Db25maWdbXSA9PiB7XG4gIGNvbnN0IHVzZXJDb25maWcgPSBjdHguZ2V0Q29uZmlnPElTZnRwUGxpc3RDb25maWc+KCdwaWNCZWQuc2Z0cHBsaXN0JykgfHwge31cbiAgY29uc3QgY29uZmlnOiBJUGx1Z2luQ29uZmlnW10gPSBbXG4gICAge1xuICAgICAgbmFtZTogJ2hvc3QnLFxuICAgICAgdHlwZTogJ2lucHV0JyxcbiAgICAgIGdldCBwcmVmaXgoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfU0ZUUFBMSVNUX0hPU1QnKVxuICAgICAgfSxcbiAgICAgIGdldCBhbGlhcygpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9TRlRQUExJU1RfSE9TVCcpXG4gICAgICB9LFxuICAgICAgZ2V0IG1lc3NhZ2UoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfU0ZUUFBMSVNUX01FU1NBR0VfSE9TVCcpXG4gICAgICB9LFxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5ob3N0IHx8ICcnLFxuICAgICAgcmVxdWlyZWQ6IHRydWVcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdwb3J0JyxcbiAgICAgIHR5cGU6ICdpbnB1dCcsXG4gICAgICBnZXQgcHJlZml4KCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1NGVFBQTElTVF9QT1JUJylcbiAgICAgIH0sXG4gICAgICBnZXQgYWxpYXMoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfU0ZUUFBMSVNUX1BPUlQnKVxuICAgICAgfSxcbiAgICAgIGdldCBtZXNzYWdlKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1NGVFBQTElTVF9NRVNTQUdFX1BPUlQnKVxuICAgICAgfSxcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcucG9ydCB8fCAyMixcbiAgICAgIHJlcXVpcmVkOiBmYWxzZVxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ3VzZXJuYW1lJyxcbiAgICAgIHR5cGU6ICdpbnB1dCcsXG4gICAgICBnZXQgcHJlZml4KCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1NGVFBQTElTVF9VU0VSTkFNRScpXG4gICAgICB9LFxuICAgICAgZ2V0IGFsaWFzKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1NGVFBQTElTVF9VU0VSTkFNRScpXG4gICAgICB9LFxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy51c2VybmFtZSB8fCAnJyxcbiAgICAgIHJlcXVpcmVkOiB0cnVlXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAncGFzc3dvcmQnLFxuICAgICAgdHlwZTogJ2lucHV0JyxcbiAgICAgIGdldCBwcmVmaXgoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfU0ZUUFBMSVNUX1BBU1NXT1JEJylcbiAgICAgIH0sXG4gICAgICBnZXQgYWxpYXMoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfU0ZUUFBMSVNUX1BBU1NXT1JEJylcbiAgICAgIH0sXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLnBhc3N3b3JkIHx8ICcnLFxuICAgICAgcmVxdWlyZWQ6IGZhbHNlXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAncHJpdmF0ZUtleScsXG4gICAgICB0eXBlOiAnaW5wdXQnLFxuICAgICAgZ2V0IHByZWZpeCgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9TRlRQUExJU1RfUFJJVkFURUtFWScpXG4gICAgICB9LFxuICAgICAgZ2V0IGFsaWFzKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1NGVFBQTElTVF9QUklWQVRFS0VZJylcbiAgICAgIH0sXG4gICAgICBnZXQgbWVzc2FnZSgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9TRlRQUExJU1RfTUVTU0FHRV9QUklWQVRFS0VZJylcbiAgICAgIH0sXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLnByaXZhdGVLZXkgfHwgJycsXG4gICAgICByZXF1aXJlZDogZmFsc2VcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdwYXNzcGhyYXNlJyxcbiAgICAgIHR5cGU6ICdpbnB1dCcsXG4gICAgICBnZXQgcHJlZml4KCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1NGVFBQTElTVF9QUklWQVRFS0VZX1BBU1NQSFJBU0UnKVxuICAgICAgfSxcbiAgICAgIGdldCBhbGlhcygpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9TRlRQUExJU1RfUFJJVkFURUtFWV9QQVNTUEhSQVNFJylcbiAgICAgIH0sXG4gICAgICBnZXQgbWVzc2FnZSgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9TRlRQUExJU1RfTUVTU0FHRV9QUklWQVRFS0VZX1BBU1NQSFJBU0UnKVxuICAgICAgfSxcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcucGFzc3BocmFzZSB8fCAnJyxcbiAgICAgIHJlcXVpcmVkOiBmYWxzZVxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ3VwbG9hZFBhdGgnLFxuICAgICAgdHlwZTogJ2lucHV0JyxcbiAgICAgIGdldCBwcmVmaXgoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfU0ZUUFBMSVNUX1VQTE9BRFBBVEgnKVxuICAgICAgfSxcbiAgICAgIGdldCBhbGlhcygpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9TRlRQUExJU1RfVVBMT0FEUEFUSCcpXG4gICAgICB9LFxuICAgICAgZ2V0IG1lc3NhZ2UoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfU0ZUUFBMSVNUX01FU1NBR0VfVVBMT0FEUEFUSCcpXG4gICAgICB9LFxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy51cGxvYWRQYXRoIHx8ICcnLFxuICAgICAgcmVxdWlyZWQ6IGZhbHNlXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAnY3VzdG9tVXJsJyxcbiAgICAgIHR5cGU6ICdpbnB1dCcsXG4gICAgICBnZXQgcHJlZml4KCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1NGVFBQTElTVF9DVVNUT01VUkwnKVxuICAgICAgfSxcbiAgICAgIGdldCBhbGlhcygpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9TRlRQUExJU1RfQ1VTVE9NVVJMJylcbiAgICAgIH0sXG4gICAgICBnZXQgbWVzc2FnZSgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9TRlRQUExJU1RfTUVTU0FHRV9DVVNUT01VUkwnKVxuICAgICAgfSxcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuY3VzdG9tVXJsIHx8ICcnLFxuICAgICAgcmVxdWlyZWQ6IGZhbHNlXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAnd2ViUGF0aCcsXG4gICAgICB0eXBlOiAnaW5wdXQnLFxuICAgICAgZ2V0IHByZWZpeCgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9TRlRQUExJU1RfV0VCU0lURV9QQVRIJylcbiAgICAgIH0sXG4gICAgICBnZXQgYWxpYXMoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfU0ZUUFBMSVNUX1dFQlNJVEVfUEFUSCcpXG4gICAgICB9LFxuICAgICAgZ2V0IG1lc3NhZ2UoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfU0ZUUFBMSVNUX01FU1NBR0VfV0VCU0lURV9QQVRIJylcbiAgICAgIH0sXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLndlYlBhdGggfHwgJycsXG4gICAgICByZXF1aXJlZDogZmFsc2VcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdmaWxlVXNlcicsXG4gICAgICB0eXBlOiAnaW5wdXQnLFxuICAgICAgZ2V0IHByZWZpeCgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9TRlRQUExJU1RfRklMRV9VU0VSJylcbiAgICAgIH0sXG4gICAgICBnZXQgYWxpYXMoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfU0ZUUFBMSVNUX0ZJTEVfVVNFUicpXG4gICAgICB9LFxuICAgICAgZ2V0IG1lc3NhZ2UoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfU0ZUUFBMSVNUX01FU1NBR0VfRklMRV9VU0VSJylcbiAgICAgIH0sXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLmZpbGVVc2VyIHx8ICcnLFxuICAgICAgcmVxdWlyZWQ6IGZhbHNlXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAnZmlsZU1vZGUnLFxuICAgICAgdHlwZTogJ2lucHV0JyxcbiAgICAgIGdldCBwcmVmaXgoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfU0ZUUFBMSVNUX0ZJTEVfTU9ERScpXG4gICAgICB9LFxuICAgICAgZ2V0IGFsaWFzKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1NGVFBQTElTVF9GSUxFX01PREUnKVxuICAgICAgfSxcbiAgICAgIGdldCBtZXNzYWdlKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1NGVFBQTElTVF9NRVNTQUdFX0ZJTEVfTU9ERScpXG4gICAgICB9LFxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5maWxlTW9kZSB8fCAnJyxcbiAgICAgIHJlcXVpcmVkOiBmYWxzZVxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ2Rpck1vZGUnLFxuICAgICAgdHlwZTogJ2lucHV0JyxcbiAgICAgIGdldCBwcmVmaXgoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfU0ZUUFBMSVNUX0RJUl9NT0RFJylcbiAgICAgIH0sXG4gICAgICBnZXQgYWxpYXMoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfU0ZUUFBMSVNUX0RJUl9NT0RFJylcbiAgICAgIH0sXG4gICAgICBnZXQgbWVzc2FnZSgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9TRlRQUExJU1RfTUVTU0FHRV9ESVJfTU9ERScpXG4gICAgICB9LFxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5kaXJNb2RlIHx8ICcnLFxuICAgICAgcmVxdWlyZWQ6IGZhbHNlXG4gICAgfVxuICBdXG4gIHJldHVybiBjb25maWdcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcmVnaXN0ZXIoY3R4OiBJUGljR28pOiB2b2lkIHtcbiAgY3R4LmhlbHBlci51cGxvYWRlci5yZWdpc3RlcihidWlsZEluVXBsb2FkZXJOYW1lcy5zZnRwcGxpc3QsIHtcbiAgICBnZXQgbmFtZSgpIHtcbiAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfU0ZUUFBMSVNUJylcbiAgICB9LFxuICAgIGhhbmRsZSxcbiAgICBjb25maWdcbiAgfSlcbn1cbiIsImltcG9ydCBheGlvcyBmcm9tICdheGlvcydcbmltcG9ydCB7IElQaWNHbywgSVBsdWdpbkNvbmZpZywgSVNtbXNDb25maWcsIElPbGRSZXFPcHRpb25zIH0gZnJvbSAnLi4vLi4vdHlwZXMnXG5pbXBvcnQgeyBJQnVpbGRJbkV2ZW50IH0gZnJvbSAnLi4vLi4vdXRpbHMvZW51bSdcbmltcG9ydCB7IElMb2NhbGVzS2V5IH0gZnJvbSAnLi4vLi4vaTE4bi96aC1DTidcbmltcG9ydCB7IGJ1aWxkSW5VcGxvYWRlck5hbWVzLCBjcmVhdGVGaWVsZCB9IGZyb20gJy4vdXRpbHMnXG5cbmNvbnN0IHBvc3RPcHRpb25zID0gKGZpbGVOYW1lOiBzdHJpbmcsIGltYWdlOiBCdWZmZXIsIGFwaVRva2VuOiBzdHJpbmcsIGRvbWFpbiA9ICcnKTogSU9sZFJlcU9wdGlvbnMgPT4ge1xuICByZXR1cm4ge1xuICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgIHVybDogYGh0dHBzOi8vJHtkb21haW59L2FwaS92Mi91cGxvYWRgLFxuICAgIGhlYWRlcnM6IHtcbiAgICAgIGNvbnRlbnRUeXBlOiAnbXVsdGlwYXJ0L2Zvcm0tZGF0YScsXG4gICAgICAnVXNlci1BZ2VudCc6ICdQaWNMaXN0JyxcbiAgICAgIEF1dGhvcml6YXRpb246IGFwaVRva2VuXG4gICAgfSxcbiAgICBmb3JtRGF0YToge1xuICAgICAgc21maWxlOiB7XG4gICAgICAgIHZhbHVlOiBpbWFnZSxcbiAgICAgICAgb3B0aW9uczogeyBmaWxlbmFtZTogZmlsZU5hbWUgfVxuICAgICAgfSxcbiAgICAgIHNzbDogJ3RydWUnXG4gICAgfVxuICB9XG59XG5cbmNvbnN0IGhhbmRsZSA9IGFzeW5jIChjdHg6IElQaWNHbyk6IFByb21pc2U8SVBpY0dvPiA9PiB7XG4gIGNvbnN0IHNtbXNDb25maWcgPSBjdHguZ2V0Q29uZmlnPElTbW1zQ29uZmlnPigncGljQmVkLnNtbXMnKVxuICBpZiAoIXNtbXNDb25maWc/LnRva2VuPy50cmltKCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1NNLk1TIHRva2VuIGlzIHJlcXVpcmVkIScpXG4gIH1cbiAgY29uc3QgZG9tYWluID0gKHNtbXNDb25maWcuYmFja3VwRG9tYWluIHx8ICdzbS5tcycpLnJlcGxhY2UoL15odHRwcz86XFwvXFwvLywgJycpLnJlcGxhY2UoL1xcLyQvLCAnJylcblxuICBjb25zdCBpbWdMaXN0ID0gY3R4Lm91dHB1dFxuICBmb3IgKGNvbnN0IGltZyBvZiBpbWdMaXN0KSB7XG4gICAgaWYgKCFpbWcuZmlsZU5hbWUpIGNvbnRpbnVlXG5cbiAgICBjb25zdCBpbWFnZUJ1ZmZlciA9IGltZy5idWZmZXIgfHwgKGltZy5iYXNlNjRJbWFnZSA/IEJ1ZmZlci5mcm9tKGltZy5iYXNlNjRJbWFnZSwgJ2Jhc2U2NCcpIDogdW5kZWZpbmVkKVxuICAgIGlmICghaW1hZ2VCdWZmZXIpIGNvbnRpbnVlXG5cbiAgICBjb25zdCBwb3N0Q29uZmlnID0gcG9zdE9wdGlvbnMoaW1nLmZpbGVOYW1lLCBpbWFnZUJ1ZmZlciwgc21tc0NvbmZpZy50b2tlbiwgZG9tYWluKVxuICAgIGNvbnN0IHJlczogc3RyaW5nID0gYXdhaXQgY3R4LnJlcXVlc3QocG9zdENvbmZpZylcbiAgICBjb25zdCBib2R5ID0gSlNPTi5wYXJzZShyZXMpXG5cbiAgICBpZiAoYm9keS5jb2RlID09PSAnc3VjY2VzcycpIHtcbiAgICAgIGltZy5pbWdVcmwgPSBib2R5LmRhdGEudXJsXG4gICAgICBpbWcuaGFzaCA9IGJvZHkuZGF0YS5oYXNoXG4gICAgfSBlbHNlIGlmIChib2R5LmNvZGUgPT09ICdpbWFnZV9yZXBlYXRlZCcgJiYgdHlwZW9mIGJvZHkuaW1hZ2VzID09PSAnc3RyaW5nJykge1xuICAgICAgaW1nLmltZ1VybCA9IGJvZHkuaW1hZ2VzXG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCB1cGxvYWRIaXN0b3J5ID0gYXdhaXQgYXhpb3MuZ2V0KGBodHRwczovLyR7ZG9tYWlufS9hcGkvdjIvdXBsb2FkX2hpc3RvcnlgLCB7XG4gICAgICAgICAgaGVhZGVyczogeyBBdXRob3JpemF0aW9uOiBzbW1zQ29uZmlnLnRva2VuIH1cbiAgICAgICAgfSlcbiAgICAgICAgY29uc3QgbWF0Y2hlZEltYWdlID0gdXBsb2FkSGlzdG9yeS5kYXRhPy5kYXRhPy5maW5kKChpbWFnZTogYW55KSA9PiBpbWFnZS51cmwgPT09IGJvZHkuaW1hZ2VzKVxuICAgICAgICBpZiAobWF0Y2hlZEltYWdlKSBpbWcuaGFzaCA9IG1hdGNoZWRJbWFnZS5oYXNoXG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgLy8gSWdub3JlIGhhc2ggbG9va3VwIGVycm9yc1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBlcnJvck1zZyA9IGJvZHkubWVzc2FnZSB8fCAnVXBsb2FkIGZhaWxlZCdcbiAgICAgIGN0eC5lbWl0KElCdWlsZEluRXZlbnQuTk9USUZJQ0FUSU9OLCB7XG4gICAgICAgIHRpdGxlOiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdVUExPQURfRkFJTEVEJyksXG4gICAgICAgIGJvZHk6IGVycm9yTXNnXG4gICAgICB9KVxuICAgICAgdGhyb3cgbmV3IEVycm9yKGVycm9yTXNnKVxuICAgIH1cblxuICAgIGRlbGV0ZSBpbWcuYmFzZTY0SW1hZ2VcbiAgICBkZWxldGUgaW1nLmJ1ZmZlclxuICB9XG4gIHJldHVybiBjdHhcbn1cblxuY29uc3QgY29uZmlnID0gKGN0eDogSVBpY0dvKTogSVBsdWdpbkNvbmZpZ1tdID0+IHtcbiAgY29uc3QgdXNlckNvbmZpZyA9IGN0eC5nZXRDb25maWc8SVNtbXNDb25maWc+KCdwaWNCZWQuc21tcycpIHx8IHt9XG4gIHJldHVybiBbXG4gICAgY3JlYXRlRmllbGQoY3R4LCAnU01NUycsICd0b2tlbicsICdpbnB1dCcsIHVzZXJDb25maWcudG9rZW4gfHwgJycsIHRydWUsIHVuZGVmaW5lZCwge1xuICAgICAgZ2V0IG1lc3NhZ2UoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfU01NU19NRVNTQUdFX1RPS0VOJylcbiAgICAgIH1cbiAgICB9KSxcbiAgICBjcmVhdGVGaWVsZChjdHgsICdTTU1TJywgJ2JhY2t1cERvbWFpbicsICdpbnB1dCcsIHVzZXJDb25maWcuYmFja3VwRG9tYWluIHx8ICcnLCBmYWxzZSwgdW5kZWZpbmVkLCB7XG4gICAgICBnZXQgbWVzc2FnZSgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9TTU1TX01FU1NBR0VfQkFDS1VQX0RPTUFJTicpXG4gICAgICB9XG4gICAgfSlcbiAgXVxufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiByZWdpc3RlcihjdHg6IElQaWNHbyk6IHZvaWQge1xuICBjdHguaGVscGVyLnVwbG9hZGVyLnJlZ2lzdGVyKGJ1aWxkSW5VcGxvYWRlck5hbWVzLnNtbXMsIHtcbiAgICBnZXQgbmFtZSgpIHtcbiAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfU01NUycpXG4gICAgfSxcbiAgICBoYW5kbGUsXG4gICAgY29uZmlnXG4gIH0pXG59XG4iLCJpbXBvcnQgY3J5cHRvIGZyb20gJ2NyeXB0bydcbmltcG9ydCB7IGxvb2t1cCB9IGZyb20gJ21pbWUtdHlwZXMnXG5pbXBvcnQgeyBJUGljR28sIElQbHVnaW5Db25maWcsIElUY3l1bkNvbmZpZywgSU9sZFJlcU9wdGlvbnNXaXRoRnVsbFJlc3BvbnNlIH0gZnJvbSAnLi4vLi4vdHlwZXMnXG5pbXBvcnQgeyBJQnVpbGRJbkV2ZW50IH0gZnJvbSAnLi4vLi4vdXRpbHMvZW51bSdcbmltcG9ydCB7IElMb2NhbGVzS2V5IH0gZnJvbSAnLi4vLi4vaTE4bi96aC1DTidcbmltcG9ydCB7IGJ1aWxkSW5VcGxvYWRlck5hbWVzLCBjcmVhdGVGaWVsZCwgZW5jb2RlUGF0aCwgZm9ybWF0UGF0aEhlbHBlciB9IGZyb20gJy4vdXRpbHMnXG5cbmV4cG9ydCBpbnRlcmZhY2UgSVNpZ25hdHVyZSB7XG4gIHNpZ25hdHVyZTogc3RyaW5nXG4gIGFwcElkOiBzdHJpbmdcbiAgYnVja2V0OiBzdHJpbmdcbiAgc2lnblRpbWU6IHN0cmluZ1xufVxuXG5jb25zdCBnZW5lcmF0ZVNpZ25hdHVyZSA9IChvcHRpb25zOiBJVGN5dW5Db25maWcsIGZpbGVOYW1lOiBzdHJpbmcpOiBJU2lnbmF0dXJlID0+IHtcbiAgY29uc3QgeyBzZWNyZXRJZCwgc2VjcmV0S2V5LCBhcHBJZCwgYnVja2V0LCB2ZXJzaW9uLCBhcmVhLCBlbmRwb2ludCwgcGF0aCB9ID0gb3B0aW9uc1xuICBjb25zdCBpc1Y0ID0gIXZlcnNpb24gfHwgdmVyc2lvbiA9PT0gJ3Y0J1xuXG4gIGxldCBzaWduYXR1cmU6IHN0cmluZ1xuICBsZXQgc2lnblRpbWUgPSAnJ1xuXG4gIGlmIChpc1Y0KSB7XG4gICAgY29uc3QgcmFuZG9tID0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogMTAwMDAwMDAwMDApXG4gICAgY29uc3QgY3VycmVudCA9IE1hdGguZmxvb3IoRGF0ZS5ub3coKSAvIDEwMDApIC0gMVxuICAgIGNvbnN0IGV4cGlyZWQgPSBjdXJyZW50ICsgMzYwMFxuICAgIGNvbnN0IG11bHRpU2lnbmF0dXJlID0gYGE9JHthcHBJZH0mYj0ke2J1Y2tldH0maz0ke3NlY3JldElkfSZlPSR7ZXhwaXJlZH0mdD0ke2N1cnJlbnR9JnI9JHtyYW5kb219JmY9YFxuXG4gICAgY29uc3Qgc2lnbkhleEtleSA9IGNyeXB0by5jcmVhdGVIbWFjKCdzaGExJywgc2VjcmV0S2V5KS51cGRhdGUobXVsdGlTaWduYXR1cmUpLmRpZ2VzdCgpXG4gICAgY29uc3QgdGVtcFN0cmluZyA9IEJ1ZmZlci5jb25jYXQoW3NpZ25IZXhLZXksIEJ1ZmZlci5mcm9tKG11bHRpU2lnbmF0dXJlKV0pXG4gICAgc2lnbmF0dXJlID0gQnVmZmVyLmZyb20odGVtcFN0cmluZykudG9TdHJpbmcoJ2Jhc2U2NCcpXG4gIH0gZWxzZSB7XG4gICAgY29uc3QgdG9kYXkgPSBNYXRoLmZsb29yKERhdGUubm93KCkgLyAxMDAwKVxuICAgIHNpZ25UaW1lID0gYCR7dG9kYXl9OyR7dG9kYXkgKyA4NjQwMH1gXG4gICAgY29uc3Qgc2lnbktleSA9IGNyeXB0by5jcmVhdGVIbWFjKCdzaGExJywgc2VjcmV0S2V5KS51cGRhdGUoc2lnblRpbWUpLmRpZ2VzdCgnaGV4JylcbiAgICBjb25zdCBkZWZhdWx0RW5kcG9pbnQgPSBgY29zLiR7YXJlYX0ubXlxY2xvdWQuY29tYFxuICAgIGNvbnN0IGh0dHBTdHJpbmcgPSBgcHV0XFxuLyR7cGF0aH0ke2ZpbGVOYW1lfVxcblxcbmhvc3Q9JHtidWNrZXR9LiR7ZW5kcG9pbnQgfHwgZGVmYXVsdEVuZHBvaW50fVxcbmBcbiAgICBjb25zdCBzaGExZWRIdHRwU3RyaW5nID0gY3J5cHRvLmNyZWF0ZUhhc2goJ3NoYTEnKS51cGRhdGUoaHR0cFN0cmluZykuZGlnZXN0KCdoZXgnKVxuICAgIGNvbnN0IHN0cmluZ1RvU2lnbiA9IGBzaGExXFxuJHtzaWduVGltZX1cXG4ke3NoYTFlZEh0dHBTdHJpbmd9XFxuYFxuICAgIHNpZ25hdHVyZSA9IGNyeXB0by5jcmVhdGVIbWFjKCdzaGExJywgc2lnbktleSkudXBkYXRlKHN0cmluZ1RvU2lnbikuZGlnZXN0KCdoZXgnKVxuICB9XG5cbiAgcmV0dXJuIHsgc2lnbmF0dXJlLCBhcHBJZCwgYnVja2V0LCBzaWduVGltZSB9XG59XG5cbmNvbnN0IHBvc3RPcHRpb25zID0gKFxuICBvcHRpb25zOiBJVGN5dW5Db25maWcsXG4gIGZpbGVOYW1lOiBzdHJpbmcsXG4gIHNpZ25hdHVyZTogSVNpZ25hdHVyZSxcbiAgaW1hZ2U6IEJ1ZmZlcixcbiAgdmVyc2lvbjogc3RyaW5nXG4pOiBJT2xkUmVxT3B0aW9uc1dpdGhGdWxsUmVzcG9uc2UgPT4ge1xuICBjb25zdCB7IGFyZWEsIHBhdGgsIGJ1Y2tldCwgZW5kcG9pbnQsIHNlY3JldElkIH0gPSBvcHRpb25zXG4gIGNvbnN0IGlzVjQgPSAhb3B0aW9ucy52ZXJzaW9uIHx8IG9wdGlvbnMudmVyc2lvbiA9PT0gJ3Y0J1xuICBjb25zdCB1c2VyQWdlbnQgPSBgUGljR287JHt2ZXJzaW9ufTtudWxsO251bGxgXG5cbiAgaWYgKGlzVjQpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICB1cmw6IGBodHRwOi8vJHthcmVhfS5maWxlLm15cWNsb3VkLmNvbS9maWxlcy92Mi8ke3NpZ25hdHVyZS5hcHBJZH0vJHtzaWduYXR1cmUuYnVja2V0fS8ke2VuY29kZVVSSShwYXRoKX0ke2ZpbGVOYW1lfWAsXG4gICAgICBoZWFkZXJzOiB7XG4gICAgICAgIEhvc3Q6IGAke2FyZWF9LmZpbGUubXlxY2xvdWQuY29tYCxcbiAgICAgICAgQXV0aG9yaXphdGlvbjogc2lnbmF0dXJlLnNpZ25hdHVyZSxcbiAgICAgICAgY29udGVudFR5cGU6ICdtdWx0aXBhcnQvZm9ybS1kYXRhJyxcbiAgICAgICAgJ1VzZXItQWdlbnQnOiB1c2VyQWdlbnRcbiAgICAgIH0sXG4gICAgICBmb3JtRGF0YTogeyBvcDogJ3VwbG9hZCcsIGZpbGVjb250ZW50OiBpbWFnZSB9LFxuICAgICAgcmVzb2x2ZVdpdGhGdWxsUmVzcG9uc2U6IHRydWVcbiAgICB9XG4gIH1cblxuICBjb25zdCBkZWZhdWx0RW5kcG9pbnQgPSBgY29zLiR7YXJlYX0ubXlxY2xvdWQuY29tYFxuICBjb25zdCBob3N0ID0gYCR7YnVja2V0fS4ke2VuZHBvaW50IHx8IGRlZmF1bHRFbmRwb2ludH1gXG4gIHJldHVybiB7XG4gICAgbWV0aG9kOiAnUFVUJyxcbiAgICB1cmw6IGBodHRwOi8vJHtob3N0fS8ke2VuY29kZVBhdGgoYCR7cGF0aH0ke2ZpbGVOYW1lfWApfWAsXG4gICAgaGVhZGVyczoge1xuICAgICAgSG9zdDogaG9zdCxcbiAgICAgIEF1dGhvcml6YXRpb246IGBxLXNpZ24tYWxnb3JpdGhtPXNoYTEmcS1haz0ke3NlY3JldElkfSZxLXNpZ24tdGltZT0ke3NpZ25hdHVyZS5zaWduVGltZX0mcS1rZXktdGltZT0ke3NpZ25hdHVyZS5zaWduVGltZX0mcS1oZWFkZXItbGlzdD1ob3N0JnEtdXJsLXBhcmFtLWxpc3Q9JnEtc2lnbmF0dXJlPSR7c2lnbmF0dXJlLnNpZ25hdHVyZX1gLFxuICAgICAgY29udGVudFR5cGU6IGxvb2t1cChmaWxlTmFtZSkgfHwgJ2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbScsXG4gICAgICAnVXNlci1BZ2VudCc6IHVzZXJBZ2VudFxuICAgIH0sXG4gICAgYm9keTogaW1hZ2UsXG4gICAgcmVzb2x2ZVdpdGhGdWxsUmVzcG9uc2U6IHRydWVcbiAgfVxufVxuXG5jb25zdCBoYW5kbGUgPSBhc3luYyAoY3R4OiBJUGljR28pOiBQcm9taXNlPElQaWNHbyB8IGJvb2xlYW4+ID0+IHtcbiAgY29uc3QgdGNZdW5PcHRpb25zID0gY3R4LmdldENvbmZpZzxJVGN5dW5Db25maWc+KCdwaWNCZWQudGN5dW4nKVxuICBpZiAoIXRjWXVuT3B0aW9ucykgdGhyb3cgbmV3IEVycm9yKFwiQ2FuJ3QgZmluZCB0ZW5jZW50IENPUyBjb25maWdcIilcblxuICB0cnkge1xuICAgIGNvbnN0IGltZ0xpc3QgPSBjdHgub3V0cHV0XG4gICAgY29uc3QgY3VzdG9tVXJsID0gKHRjWXVuT3B0aW9ucy5jdXN0b21VcmwgfHwgJycpLnJlcGxhY2UoL1xcLyQvLCAnJylcbiAgICBjb25zdCBwYXRoID0gZm9ybWF0UGF0aEhlbHBlcih7IHBhdGg6IHRjWXVuT3B0aW9ucy5wYXRoIH0pXG4gICAgY29uc3Qgd2ViUGF0aCA9IGZvcm1hdFBhdGhIZWxwZXIoeyBwYXRoOiB0Y1l1bk9wdGlvbnMud2ViUGF0aCB9KVxuICAgIHRjWXVuT3B0aW9ucy5wYXRoID0gcGF0aFxuICAgIGNvbnN0IHVzZVY0ID0gIXRjWXVuT3B0aW9ucy52ZXJzaW9uIHx8IHRjWXVuT3B0aW9ucy52ZXJzaW9uID09PSAndjQnXG5cbiAgICBmb3IgKGNvbnN0IGltZyBvZiBpbWdMaXN0KSB7XG4gICAgICBpZiAoIWltZy5maWxlTmFtZSB8fCAhaW1nLmJ1ZmZlcikgY29udGludWVcblxuICAgICAgY29uc3Qgc2lnbmF0dXJlID0gZ2VuZXJhdGVTaWduYXR1cmUodGNZdW5PcHRpb25zLCBpbWcuZmlsZU5hbWUpXG4gICAgICBjb25zdCBpbWFnZSA9IGltZy5idWZmZXIgfHwgQnVmZmVyLmZyb20oaW1nLmJhc2U2NEltYWdlISwgJ2Jhc2U2NCcpXG4gICAgICBjb25zdCBvcHRpb25zID0gcG9zdE9wdGlvbnModGNZdW5PcHRpb25zLCBpbWcuZmlsZU5hbWUsIHNpZ25hdHVyZSwgaW1hZ2UsIGN0eC5HVUlfVkVSU0lPTiB8fCBjdHguVkVSU0lPTilcblxuICAgICAgY29uc3QgcmVzID0gYXdhaXQgY3R4LnJlcXVlc3Qob3B0aW9ucykuY2F0Y2goKGVycjogRXJyb3IpID0+ICh7XG4gICAgICAgIHN0YXR1c0NvZGU6IDQwMCxcbiAgICAgICAgYm9keTogeyBtc2c6IGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0FVVEhfRkFJTEVEJyksIGVyciB9XG4gICAgICB9KSlcblxuICAgICAgY29uc3QgYm9keSA9IHVzZVY0ICYmIHR5cGVvZiByZXMgPT09ICdzdHJpbmcnID8gSlNPTi5wYXJzZShyZXMpIDogcmVzXG5cbiAgICAgIGlmIChib2R5LnN0YXR1c0NvZGUgPT09IDQwMCkge1xuICAgICAgICB0aHJvdyBib2R5Py5ib2R5Py5lcnIgfHwgbmV3IEVycm9yKGJvZHk/LmJvZHk/Lm1zZyB8fCBib2R5Py5ib2R5Py5tZXNzYWdlKVxuICAgICAgfVxuXG4gICAgICBjb25zdCBvcHRpb25VcmwgPSB0Y1l1bk9wdGlvbnMub3B0aW9ucyB8fCAnJ1xuICAgICAgY29uc3Qgc2xpbSA9ICEhdGNZdW5PcHRpb25zLnNsaW1cblxuICAgICAgZGVsZXRlIGltZy5iYXNlNjRJbWFnZVxuICAgICAgZGVsZXRlIGltZy5idWZmZXJcblxuICAgICAgaWYgKHVzZVY0ICYmIGJvZHkubWVzc2FnZSA9PT0gJ1NVQ0NFU1MnKSB7XG4gICAgICAgIGltZy5pbWdVcmwgPSBjdXN0b21VcmxcbiAgICAgICAgICA/IGAke2N1c3RvbVVybH0vJHtlbmNvZGVQYXRoKGAke3dlYlBhdGggfHwgcGF0aH0ke2ltZy5maWxlTmFtZX1gKX0ke29wdGlvblVybH1gXG4gICAgICAgICAgOiBgJHtib2R5LmRhdGEuc291cmNlX3VybH0ke29wdGlvblVybH1gXG4gICAgICB9IGVsc2UgaWYgKCF1c2VWNCAmJiBib2R5Py5zdGF0dXNDb2RlID09PSAyMDApIHtcbiAgICAgICAgaWYgKGN1c3RvbVVybCkge1xuICAgICAgICAgIGltZy5pbWdVcmwgPSBgJHtjdXN0b21Vcmx9LyR7ZW5jb2RlUGF0aChgJHt3ZWJQYXRoIHx8IHBhdGh9JHtpbWcuZmlsZU5hbWV9YCl9JHtvcHRpb25Vcmx9YFxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IGVuZHBvaW50ID0gdGNZdW5PcHRpb25zLmVuZHBvaW50IHx8IGBjb3MuJHt0Y1l1bk9wdGlvbnMuYXJlYX0ubXlxY2xvdWQuY29tYFxuICAgICAgICAgIGltZy5pbWdVcmwgPSBgaHR0cHM6Ly8ke3RjWXVuT3B0aW9ucy5idWNrZXR9LiR7ZW5kcG9pbnR9LyR7ZW5jb2RlUGF0aChgJHtwYXRofSR7aW1nLmZpbGVOYW1lfWApfSR7b3B0aW9uVXJsfWBcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKChyZXMgYXMgYW55KS5ib2R5Py5tc2cgfHwgJ1VwbG9hZCBmYWlsZWQnKVxuICAgICAgfVxuXG4gICAgICBpZiAoc2xpbSkge1xuICAgICAgICBpbWcuaW1nVXJsICs9IG9wdGlvblVybCA/ICcmaW1hZ2VTbGltJyA6ICc/aW1hZ2VTbGltJ1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gY3R4XG4gIH0gY2F0Y2ggKGVycjogYW55KSB7XG4gICAgaWYgKCghdGNZdW5PcHRpb25zLnZlcnNpb24gfHwgdGNZdW5PcHRpb25zLnZlcnNpb24gPT09ICd2NCcpICYmIGVyci5lcnJvcikge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgYm9keSA9IEpTT04ucGFyc2UoZXJyLmVycm9yKVxuICAgICAgICBjdHguZW1pdChJQnVpbGRJbkV2ZW50Lk5PVElGSUNBVElPTiwge1xuICAgICAgICAgIHRpdGxlOiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdVUExPQURfRkFJTEVEJyksXG4gICAgICAgICAgYm9keTogY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignVVBMT0FEX0ZBSUxFRF9SRUFTT04nLCB7IGNvZGU6IGJvZHkuY29kZSB9KSxcbiAgICAgICAgICB0ZXh0OiAnaHR0cHM6Ly9jbG91ZC50ZW5jZW50LmNvbS9kb2N1bWVudC9wcm9kdWN0LzQzNi84NDMyJ1xuICAgICAgICB9KVxuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAvKiBlbXB0eSAqL1xuICAgICAgfVxuICAgIH1cbiAgICB0aHJvdyBlcnJcbiAgfVxufVxuXG5jb25zdCBjb25maWcgPSAoY3R4OiBJUGljR28pOiBJUGx1Z2luQ29uZmlnW10gPT4ge1xuICBjb25zdCB1c2VyQ29uZmlnID0gY3R4LmdldENvbmZpZzxJVGN5dW5Db25maWc+KCdwaWNCZWQudGN5dW4nKSB8fCB7fVxuXG4gIHJldHVybiBbXG4gICAgY3JlYXRlRmllbGQoY3R4LCAnVEVOQ0VOVENMT1VEJywgJ3ZlcnNpb24nLCAnbGlzdCcsICd2NScsIGZhbHNlLCB1bmRlZmluZWQsIHsgY2hvaWNlczogWyd2NCcsICd2NSddIH0pLFxuICAgIGNyZWF0ZUZpZWxkKGN0eCwgJ1RFTkNFTlRDTE9VRCcsICdzZWNyZXRJZCcsICdpbnB1dCcsIHVzZXJDb25maWcuc2VjcmV0SWQgfHwgJycsIHRydWUpLFxuICAgIGNyZWF0ZUZpZWxkKGN0eCwgJ1RFTkNFTlRDTE9VRCcsICdzZWNyZXRLZXknLCAnaW5wdXQnLCB1c2VyQ29uZmlnLnNlY3JldEtleSB8fCAnJywgdHJ1ZSksXG4gICAgY3JlYXRlRmllbGQoY3R4LCAnVEVOQ0VOVENMT1VEJywgJ2J1Y2tldCcsICdpbnB1dCcsIHVzZXJDb25maWcuYnVja2V0IHx8ICcnLCB0cnVlKSxcbiAgICBjcmVhdGVGaWVsZChjdHgsICdURU5DRU5UQ0xPVUQnLCAnYXBwSWQnLCAnaW5wdXQnLCB1c2VyQ29uZmlnLmFwcElkIHx8ICcnLCB0cnVlLCB1bmRlZmluZWQsIHtcbiAgICAgIGdldCBtZXNzYWdlKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1RFTkNFTlRDTE9VRF9NRVNTQUdFX0FQUElEJylcbiAgICAgIH1cbiAgICB9KSxcbiAgICBjcmVhdGVGaWVsZChjdHgsICdURU5DRU5UQ0xPVUQnLCAnYXJlYScsICdpbnB1dCcsIHVzZXJDb25maWcuYXJlYSB8fCAnJywgdHJ1ZSwgdW5kZWZpbmVkLCB7XG4gICAgICBnZXQgbWVzc2FnZSgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9URU5DRU5UQ0xPVURfTUVTU0FHRV9BUkVBJylcbiAgICAgIH1cbiAgICB9KSxcbiAgICBjcmVhdGVGaWVsZChjdHgsICdURU5DRU5UQ0xPVUQnLCAnZW5kcG9pbnQnLCAnaW5wdXQnLCB1c2VyQ29uZmlnLmVuZHBvaW50IHx8ICcnLCBmYWxzZSwgdW5kZWZpbmVkLCB7XG4gICAgICBnZXQgbWVzc2FnZSgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9URU5DRU5UQ0xPVURfTUVTU0FHRV9FTkRQT0lOVCcpXG4gICAgICB9XG4gICAgfSksXG4gICAgY3JlYXRlRmllbGQoY3R4LCAnVEVOQ0VOVENMT1VEJywgJ3BhdGgnLCAnaW5wdXQnLCB1c2VyQ29uZmlnLnBhdGggfHwgJycsIGZhbHNlLCB1bmRlZmluZWQsIHtcbiAgICAgIGdldCBtZXNzYWdlKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1RFTkNFTlRDTE9VRF9NRVNTQUdFX1BBVEgnKVxuICAgICAgfVxuICAgIH0pLFxuICAgIGNyZWF0ZUZpZWxkKGN0eCwgJ1RFTkNFTlRDTE9VRCcsICd3ZWJQYXRoJywgJ2lucHV0JywgdXNlckNvbmZpZy53ZWJQYXRoIHx8ICcnLCBmYWxzZSwgdW5kZWZpbmVkLCB7XG4gICAgICBnZXQgbWVzc2FnZSgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9URU5DRU5UQ0xPVURfTUVTU0FHRV9XRUJQQVRIJylcbiAgICAgIH1cbiAgICB9KSxcbiAgICBjcmVhdGVGaWVsZChjdHgsICdURU5DRU5UQ0xPVUQnLCAnY3VzdG9tVXJsJywgJ2lucHV0JywgdXNlckNvbmZpZy5jdXN0b21VcmwgfHwgJycsIGZhbHNlLCB1bmRlZmluZWQsIHtcbiAgICAgIGdldCBtZXNzYWdlKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1RFTkNFTlRDTE9VRF9NRVNTQUdFX0NVU1RPTVVSTCcpXG4gICAgICB9XG4gICAgfSksXG4gICAgY3JlYXRlRmllbGQoY3R4LCAnVEVOQ0VOVENMT1VEJywgJ29wdGlvbnMnLCAnaW5wdXQnLCB1c2VyQ29uZmlnLm9wdGlvbnMgfHwgJycsIGZhbHNlLCB1bmRlZmluZWQsIHtcbiAgICAgIGdldCBtZXNzYWdlKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1RFTkNFTlRDTE9VRF9NRVNTQUdFX09QVElPTlMnKVxuICAgICAgfVxuICAgIH0pLFxuICAgIGNyZWF0ZUZpZWxkKGN0eCwgJ1RFTkNFTlRDTE9VRCcsICdzbGltJywgJ2NvbmZpcm0nLCB1c2VyQ29uZmlnLnNsaW0gPz8gZmFsc2UsIGZhbHNlLCB1bmRlZmluZWQsIHtcbiAgICAgIGdldCBjb25maXJtVGV4dCgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9URU5DRU5UQ0xPVURfU0xJTV9DT05GSVJNJylcbiAgICAgIH0sXG4gICAgICBnZXQgY2FuY2VsVGV4dCgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9URU5DRU5UQ0xPVURfU0xJTV9DQU5DRUwnKVxuICAgICAgfSxcbiAgICAgIGdldCB0aXBzKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1RFTkNFTlRDTE9VRF9TTElNX1RJUCcpXG4gICAgICB9XG4gICAgfSlcbiAgXVxufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiByZWdpc3RlcihjdHg6IElQaWNHbyk6IHZvaWQge1xuICBjdHguaGVscGVyLnVwbG9hZGVyLnJlZ2lzdGVyKGJ1aWxkSW5VcGxvYWRlck5hbWVzLnRjeXVuLCB7XG4gICAgZ2V0IG5hbWUoKSB7XG4gICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1RFTkNFTlRDTE9VRCcpXG4gICAgfSxcbiAgICBoYW5kbGUsXG4gICAgY29uZmlnXG4gIH0pXG59XG4iLCJpbXBvcnQgY3J5cHRvIGZyb20gJ2NyeXB0bydcbmltcG9ydCB7IGxvb2t1cCB9IGZyb20gJ21pbWUtdHlwZXMnXG5cbmltcG9ydCB7IElCdWlsZEluRXZlbnQgfSBmcm9tICcuLi8uLi91dGlscy9lbnVtJ1xuaW1wb3J0IHsgSUxvY2FsZXNLZXkgfSBmcm9tICcuLi8uLi9pMThuL3poLUNOJ1xuaW1wb3J0IHsgc2FmZVBhcnNlIH0gZnJvbSAnLi4vLi4vdXRpbHMvY29tbW9uJ1xuXG5pbXBvcnQgeyBidWlsZEluVXBsb2FkZXJOYW1lcywgZW5jb2RlUGF0aCwgZm9ybWF0UGF0aEhlbHBlciwgY3JlYXRlRmllbGQgfSBmcm9tICcuL3V0aWxzJ1xuaW1wb3J0IHsgSVBpY0dvLCBJUGx1Z2luQ29uZmlnLCBJVXB5dW5Db25maWcsIElPbGRSZXFPcHRpb25zV2l0aEZ1bGxSZXNwb25zZSB9IGZyb20gJy4uLy4uL3R5cGVzJ1xuXG5jb25zdCBERUZBVUxUX0VORFBPSU5UID0gJ2h0dHBzOi8vdjAuYXBpLnVweXVuLmNvbSdcbmNvbnN0IERFRkFVTFRfRVhQSVJFX1RJTUUgPSAxODAwIC8vIDMwIG1pbnV0ZXNcbmNvbnN0IFNVQ0NFU1NfU1RBVFVTX0NPREUgPSAyMDBcblxuY29uc3QgbWQ1ID0gKGNvbnRlbnQ6IHN0cmluZyk6IHN0cmluZyA9PiBjcnlwdG8uY3JlYXRlSGFzaCgnbWQ1JykudXBkYXRlKGNvbnRlbnQpLmRpZ2VzdCgnaGV4JylcblxuY29uc3QgZ2VuZXJhdGVTaWduYXR1cmUgPSAob3B0aW9uczogSVVweXVuQ29uZmlnLCBmaWxlTmFtZTogc3RyaW5nKTogc3RyaW5nID0+IHtcbiAgY29uc3QgeyBwYXRoID0gJycsIG9wZXJhdG9yLCBwYXNzd29yZCwgYnVja2V0IH0gPSBvcHRpb25zXG4gIGNvbnN0IG1kNVBhc3N3b3JkID0gbWQ1KHBhc3N3b3JkKVxuICBjb25zdCBkYXRlID0gbmV3IERhdGUoKS50b1VUQ1N0cmluZygpXG4gIGNvbnN0IHVyaSA9IGAvJHtidWNrZXR9LyR7ZW5jb2RlUGF0aChgJHtwYXRofSR7ZmlsZU5hbWV9YCl9YFxuICBjb25zdCB2YWx1ZSA9IGBQVVQmJHt1cml9JiR7ZGF0ZX1gXG4gIGNvbnN0IHNpZ24gPSBjcnlwdG8uY3JlYXRlSG1hYygnc2hhMScsIG1kNVBhc3N3b3JkKS51cGRhdGUodmFsdWUpLmRpZ2VzdCgnYmFzZTY0JylcbiAgcmV0dXJuIGBVUFlVTiAke29wZXJhdG9yfToke3NpZ259YFxufVxuXG5jb25zdCBwb3N0T3B0aW9ucyA9IChcbiAgb3B0aW9uczogSVVweXVuQ29uZmlnLFxuICBmaWxlTmFtZTogc3RyaW5nLFxuICBzaWduYXR1cmU6IHN0cmluZyxcbiAgaW1hZ2U6IEJ1ZmZlclxuKTogSU9sZFJlcU9wdGlvbnNXaXRoRnVsbFJlc3BvbnNlID0+IHtcbiAgY29uc3QgeyBidWNrZXQsIHBhdGggfSA9IG9wdGlvbnNcbiAgbGV0IGVuZHBvaW50ID0gKG9wdGlvbnMuZW5kcG9pbnQgfHwgREVGQVVMVF9FTkRQT0lOVCkucmVwbGFjZSgvXFwvKyQvZywgJycpXG4gIGlmICghZW5kcG9pbnQuc3RhcnRzV2l0aCgnaHR0cCcpKSB7XG4gICAgZW5kcG9pbnQgPSBgaHR0cHM6Ly8ke2VuZHBvaW50fWBcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgbWV0aG9kOiAnUFVUJyxcbiAgICB1cmw6IGAke2VuZHBvaW50fS8ke2J1Y2tldH0vJHtlbmNvZGVQYXRoKGAke3BhdGh9JHtmaWxlTmFtZX1gKX1gLFxuICAgIGhlYWRlcnM6IHtcbiAgICAgIEF1dGhvcml6YXRpb246IHNpZ25hdHVyZSxcbiAgICAgIERhdGU6IG5ldyBEYXRlKCkudG9VVENTdHJpbmcoKSxcbiAgICAgICdDb250ZW50LVR5cGUnOiBsb29rdXAoZmlsZU5hbWUpIHx8ICdhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0nXG4gICAgfSxcbiAgICBib2R5OiBpbWFnZSxcbiAgICByZXNvbHZlV2l0aEZ1bGxSZXNwb25zZTogdHJ1ZVxuICB9XG59XG5cbmNvbnN0IGdldEFudGlMZWVjaFBhcmFtID0gKFxuICBhbnRpTGVlY2hUb2tlbjogc3RyaW5nLFxuICBleHBpcmVUaW1lOiBzdHJpbmcgfCBudW1iZXIgfCB1bmRlZmluZWQsXG4gIG9wdGlvbnM6IElVcHl1bkNvbmZpZyxcbiAgZmlsZU5hbWU6IHN0cmluZ1xuKTogc3RyaW5nID0+IHtcbiAgY29uc3QgdXJpID0gYC8ke29wdGlvbnMucGF0aCB8fCAnJ30ke2ZpbGVOYW1lfWAucmVwbGFjZSgvJTJGL2csICcvJykucmVwbGFjZSgvXlxcLysvZywgJy8nKVxuICBjb25zdCBub3cgPSBNYXRoLnJvdW5kKERhdGUubm93KCkgLyAxMDAwKVxuICBjb25zdCBleHBpcmUgPSBleHBpcmVUaW1lID8gbm93ICsgcGFyc2VJbnQoZXhwaXJlVGltZS50b1N0cmluZygpLCAxMCkgOiBub3cgKyBERUZBVUxUX0VYUElSRV9USU1FXG4gIGNvbnN0IHNpZ24gPSBtZDUoYCR7YW50aUxlZWNoVG9rZW59JiR7ZXhwaXJlfSYke3VyaX1gKVxuICBjb25zdCB1cmxQcm90ZWN0aW9uVG9rZW4gPSBgJHtzaWduLnN1YnN0cmluZygxMiwgMjApfSR7ZXhwaXJlfWBcbiAgcmV0dXJuIGBfdXB0PSR7dXJsUHJvdGVjdGlvblRva2VufWBcbn1cblxuLy8gUHJvY2VzcyB1cGxvYWQgZm9yIGEgc2luZ2xlIGltYWdlXG5jb25zdCBwcm9jZXNzSW1hZ2UgPSBhc3luYyAoY3R4OiBJUGljR28sIGltZzogYW55LCB1cHl1bk9wdGlvbnM6IElVcHl1bkNvbmZpZywgcGF0aDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gIGlmICghaW1nLmZpbGVOYW1lIHx8ICFpbWcuYnVmZmVyKSByZXR1cm5cblxuICBjb25zdCBpbWFnZSA9IGltZy5idWZmZXIgfHwgKGltZy5iYXNlNjRJbWFnZSA/IEJ1ZmZlci5mcm9tKGltZy5iYXNlNjRJbWFnZSwgJ2Jhc2U2NCcpIDogbnVsbClcbiAgaWYgKCFpbWFnZSkgcmV0dXJuXG5cbiAgY29uc3Qgc2lnbmF0dXJlID0gZ2VuZXJhdGVTaWduYXR1cmUodXB5dW5PcHRpb25zLCBpbWcuZmlsZU5hbWUpXG4gIGNvbnN0IG9wdGlvbnMgPSBwb3N0T3B0aW9ucyh1cHl1bk9wdGlvbnMsIGltZy5maWxlTmFtZSwgc2lnbmF0dXJlLCBpbWFnZSlcbiAgY29uc3QgYm9keSA9IGF3YWl0IGN0eC5yZXF1ZXN0KG9wdGlvbnMpXG5cbiAgaWYgKGJvZHkuc3RhdHVzQ29kZSAhPT0gU1VDQ0VTU19TVEFUVVNfQ09ERSkge1xuICAgIHRocm93IG5ldyBFcnJvcignVXBsb2FkIGZhaWxlZCcpXG4gIH1cblxuICBkZWxldGUgaW1nLmJhc2U2NEltYWdlXG4gIGRlbGV0ZSBpbWcuYnVmZmVyXG5cbiAgY29uc3Qgc3VmZml4ID0gdXB5dW5PcHRpb25zLm9wdGlvbnMgfHwgJydcbiAgY29uc3QgYmFzZVVybCA9IGAke3VweXVuT3B0aW9ucy51cmx9LyR7ZW5jb2RlUGF0aChgJHtwYXRofSR7aW1nLmZpbGVOYW1lfWApfSR7c3VmZml4fWBcblxuICBpbWcuaW1nVXJsID0gdXB5dW5PcHRpb25zLmFudGlMZWVjaFRva2VuID8gYWRkQW50aUxlZWNoVG9rZW4oYmFzZVVybCwgdXB5dW5PcHRpb25zLCBpbWcuZmlsZU5hbWUpIDogYmFzZVVybFxufVxuXG5jb25zdCBhZGRBbnRpTGVlY2hUb2tlbiA9ICh1cmw6IHN0cmluZywgb3B0aW9uczogSVVweXVuQ29uZmlnLCBmaWxlTmFtZTogc3RyaW5nKTogc3RyaW5nID0+IHtcbiAgY29uc3QgdXB0ID0gZ2V0QW50aUxlZWNoUGFyYW0ob3B0aW9ucy5hbnRpTGVlY2hUb2tlbiwgb3B0aW9ucy5leHBpcmVUaW1lLCBvcHRpb25zLCBmaWxlTmFtZSlcbiAgcmV0dXJuIHVybC5pbmNsdWRlcygnPycpID8gYCR7dXJsfSYke3VwdH1gIDogYCR7dXJsfT8ke3VwdH1gXG59XG5cbmNvbnN0IGhhbmRsZSA9IGFzeW5jIChjdHg6IElQaWNHbyk6IFByb21pc2U8SVBpY0dvPiA9PiB7XG4gIGNvbnN0IHVweXVuT3B0aW9ucyA9IGN0eC5nZXRDb25maWc8SVVweXVuQ29uZmlnPigncGljQmVkLnVweXVuJylcbiAgaWYgKCF1cHl1bk9wdGlvbnMpIHRocm93IG5ldyBFcnJvcihcIkNhbid0IGZpbmQgVXBZdW4gY29uZmlnXCIpXG5cbiAgdHJ5IHtcbiAgICBjb25zdCBpbWdMaXN0ID0gY3R4Lm91dHB1dFxuICAgIGNvbnN0IHBhdGggPSBmb3JtYXRQYXRoSGVscGVyKHsgcGF0aDogdXB5dW5PcHRpb25zLnBhdGggfSlcbiAgICB1cHl1bk9wdGlvbnMucGF0aCA9IHBhdGhcblxuICAgIGZvciAoY29uc3QgaW1nIG9mIGltZ0xpc3QpIHtcbiAgICAgIGF3YWl0IHByb2Nlc3NJbWFnZShjdHgsIGltZywgdXB5dW5PcHRpb25zLCBwYXRoKVxuICAgIH1cblxuICAgIHJldHVybiBjdHhcbiAgfSBjYXRjaCAoZXJyOiBhbnkpIHtcbiAgICBoYW5kbGVVcGxvYWRFcnJvcihjdHgsIGVycilcbiAgICB0aHJvdyBlcnJcbiAgfVxufVxuXG5jb25zdCBoYW5kbGVVcGxvYWRFcnJvciA9IChjdHg6IElQaWNHbywgZXJyOiBhbnkpOiB2b2lkID0+IHtcbiAgY29uc3QgaXNVcGxvYWRGYWlsdXJlID0gZXJyLm1lc3NhZ2UgPT09ICdVcGxvYWQgZmFpbGVkJ1xuXG4gIGlmIChpc1VwbG9hZEZhaWx1cmUpIHtcbiAgICBjdHguZW1pdChJQnVpbGRJbkV2ZW50Lk5PVElGSUNBVElPTiwge1xuICAgICAgdGl0bGU6IGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1VQTE9BRF9GQUlMRUQnKSxcbiAgICAgIGJvZHk6IGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0NIRUNLX1NFVFRJTkdTJylcbiAgICB9KVxuICB9IGVsc2Uge1xuICAgIGNvbnN0IGVycm9yQm9keSA9IHNhZmVQYXJzZTx7IGNvZGU6IHN0cmluZyB9PihlcnIuZXJyb3IpXG4gICAgY29uc3QgZXJyb3JDb2RlID0gdHlwZW9mIGVycm9yQm9keSA9PT0gJ29iamVjdCcgJiYgZXJyb3JCb2R5ID8gZXJyb3JCb2R5LmNvZGUgOiBlcnJvckJvZHkgfHwgJ1Vua25vd24gZXJyb3InXG5cbiAgICBjdHguZW1pdChJQnVpbGRJbkV2ZW50Lk5PVElGSUNBVElPTiwge1xuICAgICAgdGl0bGU6IGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1VQTE9BRF9GQUlMRUQnKSxcbiAgICAgIGJvZHk6IGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1VQTE9BRF9GQUlMRURfUkVBU09OJywgeyBjb2RlOiBlcnJvckNvZGUgfSksXG4gICAgICB0ZXh0OiAnaHR0cDovL2RvY3MudXB5dW4uY29tL2FwaS9lcnJuby8nXG4gICAgfSlcbiAgfVxufVxuXG5jb25zdCBjb25maWcgPSAoY3R4OiBJUGljR28pOiBJUGx1Z2luQ29uZmlnW10gPT4ge1xuICBjb25zdCB1c2VyQ29uZmlnID0gY3R4LmdldENvbmZpZzxJVXB5dW5Db25maWc+KCdwaWNCZWQudXB5dW4nKSB8fCB7fVxuXG4gIHJldHVybiBbXG4gICAgY3JlYXRlRmllbGQoY3R4LCAndXB5dW4nLCAnYnVja2V0JywgJ2lucHV0JywgdXNlckNvbmZpZy5idWNrZXQgfHwgJycsIHRydWUpLFxuXG4gICAgY3JlYXRlRmllbGQoY3R4LCAndXB5dW4nLCAnb3BlcmF0b3InLCAnaW5wdXQnLCB1c2VyQ29uZmlnLm9wZXJhdG9yIHx8ICcnLCB0cnVlLCB1bmRlZmluZWQsIHtcbiAgICAgIGdldCBtZXNzYWdlKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1VQWVVOX01FU1NBR0VfT1BFUkFUT1InKVxuICAgICAgfVxuICAgIH0pLFxuICAgIGNyZWF0ZUZpZWxkKGN0eCwgJ3VweXVuJywgJ3Bhc3N3b3JkJywgJ2lucHV0JywgdXNlckNvbmZpZy5wYXNzd29yZCB8fCAnJywgdHJ1ZSwgdW5kZWZpbmVkLCB7XG4gICAgICBnZXQgbWVzc2FnZSgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9VUFlVTl9NRVNTQUdFX1BBU1NXT1JEJylcbiAgICAgIH1cbiAgICB9KSxcbiAgICBjcmVhdGVGaWVsZChjdHgsICd1cHl1bicsICd1cmwnLCAnaW5wdXQnLCB1c2VyQ29uZmlnLnVybCB8fCAnJywgdHJ1ZSwgdW5kZWZpbmVkLCB7XG4gICAgICBnZXQgbWVzc2FnZSgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9VUFlVTl9NRVNTQUdFX1VSTCcpXG4gICAgICB9XG4gICAgfSksXG4gICAgY3JlYXRlRmllbGQoY3R4LCAndXB5dW4nLCAnb3B0aW9ucycsICdpbnB1dCcsIHVzZXJDb25maWcub3B0aW9ucyB8fCAnJywgZmFsc2UsIHVuZGVmaW5lZCwge1xuICAgICAgZ2V0IG1lc3NhZ2UoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVVBZVU5fTUVTU0FHRV9PUFRJT05TJylcbiAgICAgIH1cbiAgICB9KSxcbiAgICBjcmVhdGVGaWVsZChjdHgsICd1cHl1bicsICdwYXRoJywgJ2lucHV0JywgdXNlckNvbmZpZy5wYXRoIHx8ICcnLCBmYWxzZSwgdW5kZWZpbmVkLCB7XG4gICAgICBnZXQgbWVzc2FnZSgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9VUFlVTl9NRVNTQUdFX1BBVEgnKVxuICAgICAgfVxuICAgIH0pLFxuICAgIGNyZWF0ZUZpZWxkKGN0eCwgJ3VweXVuJywgJ2FudGlMZWVjaFRva2VuJywgJ2lucHV0JywgdXNlckNvbmZpZy5hbnRpTGVlY2hUb2tlbiB8fCAnJywgZmFsc2UpLFxuICAgIGNyZWF0ZUZpZWxkKGN0eCwgJ3VweXVuJywgJ2V4cGlyZVRpbWUnLCAnaW5wdXQnLCB1c2VyQ29uZmlnLmV4cGlyZVRpbWUgfHwgJycsIGZhbHNlKSxcbiAgICBjcmVhdGVGaWVsZChjdHgsICd1cHl1bicsICdlbmRwb2ludCcsICdpbnB1dCcsIHVzZXJDb25maWcuZW5kcG9pbnQgfHwgREVGQVVMVF9FTkRQT0lOVCwgZmFsc2UsIHVuZGVmaW5lZCwge1xuICAgICAgZ2V0IG1lc3NhZ2UoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVVBZVU5fTUVTU0FHRV9FTkRQT0lOVCcpXG4gICAgICB9XG4gICAgfSlcbiAgXVxufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiByZWdpc3RlcihjdHg6IElQaWNHbyk6IHZvaWQge1xuICBjdHguaGVscGVyLnVwbG9hZGVyLnJlZ2lzdGVyKGJ1aWxkSW5VcGxvYWRlck5hbWVzLnVweXVuLCB7XG4gICAgZ2V0IG5hbWUoKSB7XG4gICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1VQWVVOJylcbiAgICB9LFxuICAgIGhhbmRsZSxcbiAgICBjb25maWdcbiAgfSlcbn1cbiIsImltcG9ydCBmcywgeyBlbnN1cmVEaXJTeW5jIH0gZnJvbSAnZnMtZXh0cmEnXG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJ1xuaW1wb3J0IHsgV2ViREFWQ2xpZW50LCBXZWJEQVZDbGllbnRPcHRpb25zLCBBdXRoVHlwZSwgY3JlYXRlQ2xpZW50IH0gZnJvbSAnd2ViZGF2J1xuXG5pbXBvcnQgeyBJUGljR28sIElQbHVnaW5Db25maWcsIElXZWJkYXZQbGlzdENvbmZpZyB9IGZyb20gJy4uLy4uL3R5cGVzJ1xuaW1wb3J0IHsgSUJ1aWxkSW5FdmVudCB9IGZyb20gJy4uLy4uL3V0aWxzL2VudW0nXG5pbXBvcnQgeyBJTG9jYWxlc0tleSB9IGZyb20gJy4uLy4uL2kxOG4vemgtQ04nXG5pbXBvcnQgeyBidWlsZEluVXBsb2FkZXJOYW1lcywgZW5jb2RlUGF0aCwgZm9ybWF0UGF0aEhlbHBlciwgY3JlYXRlRmllbGQgfSBmcm9tICcuL3V0aWxzJ1xuXG5jb25zdCBNQVhfRklMRV9TSVpFID0gNCAqIDEwMjQgKiAxMDI0ICogMTAyNCAvLyA0R0JcbmNvbnN0IEdBTExFUllfUE9SVCA9IDM2Njk5XG5cbmNvbnN0IG5vcm1hbGl6ZUhvc3RVcmwgPSAoaG9zdDogc3RyaW5nLCBzc2xFbmFibGVkOiBib29sZWFuKTogc3RyaW5nID0+IHtcbiAgY29uc3QgY2xlYW5Ib3N0ID0gaG9zdC5yZXBsYWNlKC9eaHR0cHM/OlxcL1xcL3xcXC8rJC9nLCAnJylcbiAgcmV0dXJuIGAke3NzbEVuYWJsZWQgPyAnaHR0cHM6Ly8nIDogJ2h0dHA6Ly8nfSR7Y2xlYW5Ib3N0fWBcbn1cblxuY29uc3QgY3JlYXRlV2ViREFWQ2xpZW50ID0gKGNvbmZpZzogSVdlYmRhdlBsaXN0Q29uZmlnKTogV2ViREFWQ2xpZW50ID0+IHtcbiAgY29uc3QgY2xpZW50T3B0aW9uczogV2ViREFWQ2xpZW50T3B0aW9ucyA9IHtcbiAgICB1c2VybmFtZTogY29uZmlnLnVzZXJuYW1lLFxuICAgIHBhc3N3b3JkOiBjb25maWcucGFzc3dvcmQsXG4gICAgbWF4Qm9keUxlbmd0aDogTUFYX0ZJTEVfU0laRSxcbiAgICBtYXhDb250ZW50TGVuZ3RoOiBNQVhfRklMRV9TSVpFXG4gIH1cblxuICBpZiAoY29uZmlnLmF1dGhUeXBlID09PSAnZGlnZXN0Jykge1xuICAgIGNsaWVudE9wdGlvbnMuYXV0aFR5cGUgPSBBdXRoVHlwZS5EaWdlc3RcbiAgfVxuXG4gIHJldHVybiBjcmVhdGVDbGllbnQoY29uZmlnLmhvc3QsIGNsaWVudE9wdGlvbnMpXG59XG5cbmNvbnN0IGdldEltYWdlQnVmZmVyID0gKGltZzogYW55KTogQnVmZmVyID0+IHtcbiAgaWYgKGltZy5idWZmZXIpIHJldHVybiBpbWcuYnVmZmVyXG4gIGlmIChpbWcuYmFzZTY0SW1hZ2UpIHJldHVybiBCdWZmZXIuZnJvbShpbWcuYmFzZTY0SW1hZ2UsICdiYXNlNjQnKVxuICB0aHJvdyBuZXcgRXJyb3IoJ05vIGltYWdlIGRhdGEgZm91bmQnKVxufVxuXG5jb25zdCBidWlsZEltYWdlVXJsID0gKFxuICBiYXNlVXJsOiBzdHJpbmcsXG4gIHVwbG9hZFBhdGg6IHN0cmluZyxcbiAgd2VicGF0aDogc3RyaW5nLFxuICBmaWxlTmFtZTogc3RyaW5nLFxuICBzdWZmaXg6IHN0cmluZyxcbiAgdXNlV2VicGF0aDogYm9vbGVhblxuKTogc3RyaW5nID0+IHtcbiAgY29uc3QgcGF0aFRvVXNlID0gdXNlV2VicGF0aCA/IHdlYnBhdGggOiB1cGxvYWRQYXRoXG4gIGNvbnN0IGVuY29kZWRQYXRoID0gZW5jb2RlUGF0aChgJHtwYXRoVG9Vc2V9JHtmaWxlTmFtZX1gKS5yZXBsYWNlKC9eXFwvKy9nLCAnJylcbiAgcmV0dXJuIGAke2Jhc2VVcmx9LyR7ZW5jb2RlZFBhdGh9JHtzdWZmaXh9YFxufVxuXG5jb25zdCBzYXZlSW1hZ2VUb1RlbXAgPSAoY3R4OiBJUGljR28sIGZpbGVOYW1lOiBzdHJpbmcsIGltYWdlQnVmZmVyOiBCdWZmZXIpOiB2b2lkID0+IHtcbiAgY29uc3QgaW1nVGVtcFBhdGggPSBwYXRoLmpvaW4oY3R4LmJhc2VEaXIsICdpbWdUZW1wJywgJ3dlYmRhdnBsaXN0JylcbiAgY29uc3QgaW1nVGVtcEZpbGVQYXRoID0gcGF0aC5qb2luKGltZ1RlbXBQYXRoLCBmaWxlTmFtZSlcbiAgZW5zdXJlRGlyU3luYyhwYXRoLmRpcm5hbWUoaW1nVGVtcEZpbGVQYXRoKSlcbiAgZnMud3JpdGVGaWxlU3luYyhpbWdUZW1wRmlsZVBhdGgsIGltYWdlQnVmZmVyKVxufVxuXG5jb25zdCB1cGxvYWRJbWFnZSA9IGFzeW5jIChcbiAgY2xpZW50OiBXZWJEQVZDbGllbnQsXG4gIHVwbG9hZFBhdGg6IHN0cmluZyxcbiAgZmlsZU5hbWU6IHN0cmluZyxcbiAgaW1hZ2VCdWZmZXI6IEJ1ZmZlclxuKTogUHJvbWlzZTxib29sZWFuPiA9PiB7XG4gIGNvbnN0IGZ1bGxVcGxvYWREaXJQYXRoID0gcGF0aC5kaXJuYW1lKGAke3VwbG9hZFBhdGh9JHtmaWxlTmFtZX1gKVxuICBjb25zdCBwYXRoVG9DcmVhdGUgPSBmdWxsVXBsb2FkRGlyUGF0aCA9PT0gJy8nID8gJycgOiBmdWxsVXBsb2FkRGlyUGF0aFxuXG4gIGlmIChwYXRoVG9DcmVhdGUpIHtcbiAgICBhd2FpdCBjbGllbnQuY3JlYXRlRGlyZWN0b3J5KHBhdGhUb0NyZWF0ZSwgeyByZWN1cnNpdmU6IHRydWUgfSlcbiAgfVxuXG4gIGNvbnN0IGZpbGVQYXRoID0gYCR7dXBsb2FkUGF0aH0ke2ZpbGVOYW1lfWAucmVwbGFjZSgvXlxcLyt8XFwvKyQvZywgJycpXG4gIHJldHVybiBhd2FpdCBjbGllbnQucHV0RmlsZUNvbnRlbnRzKGZpbGVQYXRoLCBpbWFnZUJ1ZmZlciwgeyBvdmVyd3JpdGU6IHRydWUgfSlcbn1cblxuY29uc3QgaGFuZGxlID0gYXN5bmMgKGN0eDogSVBpY0dvKTogUHJvbWlzZTxJUGljR28gfCBib29sZWFuPiA9PiB7XG4gIGNvbnN0IGNvbmZpZyA9IGN0eC5nZXRDb25maWc8SVdlYmRhdlBsaXN0Q29uZmlnPigncGljQmVkLndlYmRhdnBsaXN0JylcbiAgaWYgKCFjb25maWcpIHRocm93IG5ldyBFcnJvcihcIkNhbid0IGZpbmQgd2ViZGF2cGxpc3QgY29uZmlnXCIpXG5cbiAgY29uZmlnLmhvc3QgPSBub3JtYWxpemVIb3N0VXJsKGNvbmZpZy5ob3N0LCBjb25maWcuc3NsRW5hYmxlZClcbiAgY29uZmlnLnBhdGggPSBmb3JtYXRQYXRoSGVscGVyKHsgcGF0aDogY29uZmlnLnBhdGgsIHJvb3RUb0VtcHR5OiBmYWxzZSB9KVxuXG4gIGNvbnN0IHdlYnBhdGggPSBmb3JtYXRQYXRoSGVscGVyKHsgcGF0aDogY29uZmlnLndlYnBhdGgsIHJvb3RUb0VtcHR5OiBmYWxzZSB9KVxuICBjb25zdCBzdWZmaXggPSBjb25maWcub3B0aW9ucyB8fCAnJ1xuXG4gIHRyeSB7XG4gICAgY29uc3QgY2xpZW50ID0gY3JlYXRlV2ViREFWQ2xpZW50KGNvbmZpZylcbiAgICBjb25zdCBiYXNlVXJsID0gY29uZmlnLmN1c3RvbVVybCB8fCBjb25maWcuaG9zdFxuXG4gICAgZm9yIChjb25zdCBpbWcgb2YgY3R4Lm91dHB1dCkge1xuICAgICAgaWYgKCFpbWcuZmlsZU5hbWUpIGNvbnRpbnVlXG5cbiAgICAgIGNvbnN0IGltYWdlQnVmZmVyID0gZ2V0SW1hZ2VCdWZmZXIoaW1nKVxuICAgICAgY29uc3QgdXBsb2FkUmVzdWx0ID0gYXdhaXQgdXBsb2FkSW1hZ2UoY2xpZW50LCBjb25maWcucGF0aCwgaW1nLmZpbGVOYW1lLCBpbWFnZUJ1ZmZlcilcblxuICAgICAgaWYgKCF1cGxvYWRSZXN1bHQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVcGxvYWQgZmFpbGVkJylcbiAgICAgIH1cblxuICAgICAgc2F2ZUltYWdlVG9UZW1wKGN0eCwgaW1nLmZpbGVOYW1lLCBpbWFnZUJ1ZmZlcilcblxuICAgICAgZGVsZXRlIGltZy5iYXNlNjRJbWFnZVxuICAgICAgZGVsZXRlIGltZy5idWZmZXJcblxuICAgICAgaW1nLmltZ1VybCA9IGJ1aWxkSW1hZ2VVcmwoYmFzZVVybCwgY29uZmlnLnBhdGgsIHdlYnBhdGgsIGltZy5maWxlTmFtZSwgc3VmZml4LCAhIWNvbmZpZy53ZWJwYXRoKVxuICAgICAgaW1nLmdhbGxlcnlQYXRoID0gYGh0dHA6Ly9sb2NhbGhvc3Q6JHtHQUxMRVJZX1BPUlR9L3dlYmRhdnBsaXN0LyR7ZW5jb2RlVVJJQ29tcG9uZW50KGltZy5maWxlTmFtZSl9YFxuICAgIH1cblxuICAgIHJldHVybiBjdHhcbiAgfSBjYXRjaCAoZXJyOiBhbnkpIHtcbiAgICBjdHguZW1pdChJQnVpbGRJbkV2ZW50Lk5PVElGSUNBVElPTiwge1xuICAgICAgdGl0bGU6IGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1VQTE9BRF9GQUlMRUQnKSxcbiAgICAgIGJvZHk6IGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0NIRUNLX1NFVFRJTkdTJylcbiAgICB9KVxuICAgIHRocm93IGVyclxuICB9XG59XG5cbmNvbnN0IGNvbmZpZyA9IChjdHg6IElQaWNHbyk6IElQbHVnaW5Db25maWdbXSA9PiB7XG4gIGNvbnN0IHVzZXJDb25maWcgPSBjdHguZ2V0Q29uZmlnPElXZWJkYXZQbGlzdENvbmZpZz4oJ3BpY0JlZC53ZWJkYXZwbGlzdCcpIHx8IHt9XG5cbiAgcmV0dXJuIFtcbiAgICBjcmVhdGVGaWVsZChjdHgsICd3ZWJkYXZwbGlzdCcsICdob3N0JywgJ2lucHV0JywgdXNlckNvbmZpZy5ob3N0IHx8ICcnLCB0cnVlKSxcbiAgICBjcmVhdGVGaWVsZChjdHgsICd3ZWJkYXZwbGlzdCcsICdzc2xFbmFibGVkJywgJ2NvbmZpcm0nLCB1c2VyQ29uZmlnLnNzbEVuYWJsZWQgPz8gZmFsc2UsIGZhbHNlLCB1bmRlZmluZWQsIHtcbiAgICAgIGdldCBtZXNzYWdlKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1dFQkRBVlBMSVNUX01FU1NBR0VfU1NMRU5BQkxFRCcpXG4gICAgICB9XG4gICAgfSksXG4gICAgY3JlYXRlRmllbGQoY3R4LCAnd2ViZGF2cGxpc3QnLCAndXNlcm5hbWUnLCAnaW5wdXQnLCB1c2VyQ29uZmlnLnVzZXJuYW1lIHx8ICcnLCB0cnVlLCB1bmRlZmluZWQsIHtcbiAgICAgIGdldCBtZXNzYWdlKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1dFQkRBVlBMSVNUX01FU1NBR0VfVVNFUk5BTUUnKVxuICAgICAgfVxuICAgIH0pLFxuICAgIGNyZWF0ZUZpZWxkKGN0eCwgJ3dlYmRhdnBsaXN0JywgJ3Bhc3N3b3JkJywgJ2lucHV0JywgdXNlckNvbmZpZy5wYXNzd29yZCB8fCAnJywgdHJ1ZSwgdW5kZWZpbmVkLCB7XG4gICAgICBnZXQgbWVzc2FnZSgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9XRUJEQVZQTElTVF9NRVNTQUdFX1BBU1NXT1JEJylcbiAgICAgIH1cbiAgICB9KSxcbiAgICBjcmVhdGVGaWVsZChjdHgsICd3ZWJkYXZwbGlzdCcsICdwYXRoJywgJ2lucHV0JywgdXNlckNvbmZpZy5wYXRoIHx8ICcnLCBmYWxzZSwgdW5kZWZpbmVkLCB7XG4gICAgICBnZXQgbWVzc2FnZSgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9XRUJEQVZQTElTVF9NRVNTQUdFX1BBVEgnKVxuICAgICAgfVxuICAgIH0pLFxuICAgIGNyZWF0ZUZpZWxkKGN0eCwgJ3dlYmRhdnBsaXN0JywgJ3dlYnBhdGgnLCAnaW5wdXQnLCB1c2VyQ29uZmlnLndlYnBhdGggfHwgJycsIGZhbHNlLCB1bmRlZmluZWQsIHtcbiAgICAgIGdldCBtZXNzYWdlKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1dFQkRBVlBMSVNUX01FU1NBR0VfV0VCU0lURV9QQVRIJylcbiAgICAgIH1cbiAgICB9KSxcbiAgICBjcmVhdGVGaWVsZChjdHgsICd3ZWJkYXZwbGlzdCcsICdjdXN0b21VcmwnLCAnaW5wdXQnLCB1c2VyQ29uZmlnLmN1c3RvbVVybCB8fCAnJywgZmFsc2UsIHVuZGVmaW5lZCwge1xuICAgICAgZ2V0IG1lc3NhZ2UoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfV0VCREFWUExJU1RfTUVTU0FHRV9DVVNUT01VUkwnKVxuICAgICAgfVxuICAgIH0pLFxuICAgIGNyZWF0ZUZpZWxkKGN0eCwgJ3dlYmRhdnBsaXN0JywgJ2F1dGhUeXBlJywgJ2xpc3QnLCB1c2VyQ29uZmlnLmF1dGhUeXBlIHx8ICdiYXNpYycsIGZhbHNlLCB1bmRlZmluZWQsIHtcbiAgICAgIGNob2ljZXM6IFsnYmFzaWMnLCAnZGlnZXN0J11cbiAgICB9KSxcbiAgICBjcmVhdGVGaWVsZChjdHgsICd3ZWJkYXZwbGlzdCcsICdvcHRpb25zJywgJ2lucHV0JywgdXNlckNvbmZpZy5vcHRpb25zIHx8ICcnLCBmYWxzZSwgdW5kZWZpbmVkLCB7XG4gICAgICBnZXQgbWVzc2FnZSgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9XRUJEQVZQTElTVF9NRVNTQUdFX09QVElPTlMnKVxuICAgICAgfVxuICAgIH0pXG4gIF1cbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcmVnaXN0ZXIoY3R4OiBJUGljR28pOiB2b2lkIHtcbiAgY3R4LmhlbHBlci51cGxvYWRlci5yZWdpc3RlcihidWlsZEluVXBsb2FkZXJOYW1lcy53ZWJkYXZwbGlzdCwge1xuICAgIGdldCBuYW1lKCkge1xuICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9XRUJEQVZQTElTVCcpXG4gICAgfSxcbiAgICBoYW5kbGUsXG4gICAgY29uZmlnXG4gIH0pXG59XG4iLCJpbXBvcnQgeyBJUGljR28gfSBmcm9tICcuLi8uLi90eXBlcydcbmltcG9ydCBhZHZhbmNlZHBsaXN0VXBsb2FkZXIgZnJvbSAnLi9hZHZhbmNlZHBsaXN0J1xuaW1wb3J0IGFsaXN0VXBsb2FkZXIgZnJvbSAnLi9hbGlzdCdcbmltcG9ydCBhbGlZdW5VcGxvYWRlciBmcm9tICcuL2FsaXl1bidcbmltcG9ydCBhd3NzM3BsaXN0VXBsb2FkZXIgZnJvbSAnLi9hd3NzM3BsaXN0J1xuaW1wb3J0IGdpdGh1YlVwbG9hZGVyIGZyb20gJy4vZ2l0aHViJ1xuaW1wb3J0IGltZ3VyVXBsb2FkZXIgZnJvbSAnLi9pbWd1cidcbmltcG9ydCBsb2NhbFVwbG9hZGVyIGZyb20gJy4vbG9jYWwnXG5pbXBvcnQgbHNreVVwbG9hZGVyIGZyb20gJy4vbHNreSdcbmltcG9ydCBwaWNsaXN0VXBsb2FkZXIgZnJvbSAnLi9waWNsaXN0J1xuaW1wb3J0IHFpbml1VXBsb2FkZXIgZnJvbSAnLi9xaW5pdSdcbmltcG9ydCBzZnRwVXBsb2FkZXIgZnJvbSAnLi9zZnRwJ1xuaW1wb3J0IHNtbXNVcGxvYWRlciBmcm9tICcuL3NtbXMnXG5pbXBvcnQgdGNZdW5VcGxvYWRlciBmcm9tICcuL3RjeXVuJ1xuaW1wb3J0IHVwWXVuVXBsb2FkZXIgZnJvbSAnLi91cHl1bidcbmltcG9ydCB3ZWJkYXZwbGlzdFVwbG9hZGVyIGZyb20gJy4vd2ViZGF2J1xuXG5jb25zdCBidWlsZEluVXBsb2FkZXJzID0gKCkgPT4ge1xuICByZXR1cm4ge1xuICAgIHJlZ2lzdGVyKGN0eDogSVBpY0dvKSB7XG4gICAgICBhZHZhbmNlZHBsaXN0VXBsb2FkZXIoY3R4KVxuICAgICAgYWxpc3RVcGxvYWRlcihjdHgpXG4gICAgICBhbGlZdW5VcGxvYWRlcihjdHgpXG4gICAgICBhd3NzM3BsaXN0VXBsb2FkZXIoY3R4KVxuICAgICAgZ2l0aHViVXBsb2FkZXIoY3R4KVxuICAgICAgaW1ndXJVcGxvYWRlcihjdHgpXG4gICAgICBsb2NhbFVwbG9hZGVyKGN0eClcbiAgICAgIGxza3lVcGxvYWRlcihjdHgpXG4gICAgICBwaWNsaXN0VXBsb2FkZXIoY3R4KVxuICAgICAgcWluaXVVcGxvYWRlcihjdHgpXG4gICAgICBzZnRwVXBsb2FkZXIoY3R4KVxuICAgICAgc21tc1VwbG9hZGVyKGN0eClcbiAgICAgIHRjWXVuVXBsb2FkZXIoY3R4KVxuICAgICAgdXBZdW5VcGxvYWRlcihjdHgpXG4gICAgICB3ZWJkYXZwbGlzdFVwbG9hZGVyKGN0eClcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgYnVpbGRJblVwbG9hZGVyc1xuIiwiaW1wb3J0IGRheWpzIGZyb20gJ2RheWpzJ1xuXG5pbXBvcnQgeyBpc1VybCwgZ2V0SW1hZ2VTaXplLCBnZXRGU0ZpbGUsIGdldFVSTEZpbGUgfSBmcm9tICcuLi8uLi91dGlscy9jb21tb24nXG5pbXBvcnQgeyBJUGljR28sIElQYXRoVHJhbnNmb3JtZWRJbWdJbmZvLCBJSW1nSW5mbywgSUltZ1NpemUgfSBmcm9tICcuLi8uLi90eXBlcydcblxuY29uc3QgaGFuZGxlID0gYXN5bmMgKGN0eDogSVBpY0dvKTogUHJvbWlzZTxJUGljR28+ID0+IHtcbiAgY29uc3QgcmVzdWx0czogSUltZ0luZm9bXSA9IGN0eC5vdXRwdXRcbiAgYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgY3R4LmlucHV0Lm1hcChhc3luYyAoaXRlbTogc3RyaW5nIHwgQnVmZmVyLCBpbmRleDogbnVtYmVyKSA9PiB7XG4gICAgICBsZXQgaW5mbzogSVBhdGhUcmFuc2Zvcm1lZEltZ0luZm9cbiAgICAgIGlmIChCdWZmZXIuaXNCdWZmZXIoaXRlbSkpIHtcbiAgICAgICAgaW5mbyA9IHtcbiAgICAgICAgICBzdWNjZXNzOiB0cnVlLFxuICAgICAgICAgIGJ1ZmZlcjogaXRlbSxcbiAgICAgICAgICBmaWxlTmFtZTogJycsXG4gICAgICAgICAgZXh0bmFtZTogJydcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChpc1VybChpdGVtKSkge1xuICAgICAgICBpbmZvID0gYXdhaXQgZ2V0VVJMRmlsZShpdGVtLCBjdHgpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpbmZvID0gYXdhaXQgZ2V0RlNGaWxlKGl0ZW0pXG4gICAgICB9XG4gICAgICBpZiAoaW5mby5zdWNjZXNzICYmIGluZm8uYnVmZmVyKSB7XG4gICAgICAgIGNvbnN0IGltZ1NpemUgPSBnZXRJbWdTaXplKGN0eCwgaW5mby5idWZmZXIsIGl0ZW0pXG4gICAgICAgIGNvbnN0IGV4dG5hbWUgPSBpbmZvLmV4dG5hbWUgfHwgaW1nU2l6ZS5leHRuYW1lIHx8ICcucG5nJ1xuICAgICAgICByZXN1bHRzW2luZGV4XSA9IHtcbiAgICAgICAgICBidWZmZXI6IGluZm8uYnVmZmVyLFxuICAgICAgICAgIGZpbGVOYW1lOiBpbmZvLmZpbGVOYW1lIHx8IGAke2RheWpzKCkuZm9ybWF0KCdZWVlZTU1EREhIbW1zc1NTUycpfSR7ZXh0bmFtZX1gLFxuICAgICAgICAgIHdpZHRoOiBpbWdTaXplLndpZHRoLFxuICAgICAgICAgIGhlaWdodDogaW1nU2l6ZS5oZWlnaHQsXG4gICAgICAgICAgZXh0bmFtZTogaW5mby5leHRuYW1lXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGN0eC5sb2cuZXJyb3IoaW5mby5yZWFzb24pXG4gICAgICB9XG4gICAgfSlcbiAgKVxuICAvLyByZW1vdmUgZW1wdHkgaXRlbVxuICBjdHgub3V0cHV0ID0gcmVzdWx0cy5maWx0ZXIoaXRlbSA9PiBpdGVtKVxuICByZXR1cm4gY3R4XG59XG5cbmNvbnN0IGdldEltZ1NpemUgPSAoY3R4OiBJUGljR28sIGZpbGU6IEJ1ZmZlciwgcGF0aDogc3RyaW5nIHwgQnVmZmVyKTogSUltZ1NpemUgPT4ge1xuICBjb25zdCBpbWFnZVNpemUgPSBnZXRJbWFnZVNpemUoZmlsZSlcbiAgaWYgKCFpbWFnZVNpemUucmVhbCkge1xuICAgIGlmICh0eXBlb2YgcGF0aCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGN0eC5sb2cud2FybihgY2FuJ3QgZ2V0ICR7cGF0aH0ncyBpbWFnZSBzaXplYClcbiAgICB9IGVsc2Uge1xuICAgICAgY3R4LmxvZy53YXJuKFwiY2FuJ3QgZ2V0IGltYWdlIHNpemVcIilcbiAgICB9XG4gICAgY3R4LmxvZy53YXJuKCdmYWxsYmFjayB0byAyMDAgKiAyMDAnKVxuICB9XG4gIHJldHVybiBpbWFnZVNpemVcbn1cblxuZXhwb3J0IGRlZmF1bHQge1xuICBoYW5kbGVcbn1cbiIsImltcG9ydCB7IElQaWNHbyB9IGZyb20gJy4uLy4uL3R5cGVzJ1xuXG5jb25zdCBoYW5kbGUgPSBhc3luYyAoY3R4OiBJUGljR28pOiBQcm9taXNlPElQaWNHbz4gPT4ge1xuICBjdHgub3V0cHV0LnB1c2goLi4uY3R4LmlucHV0KVxuICByZXR1cm4gY3R4XG59XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgaGFuZGxlXG59XG4iLCJleHBvcnQgY29uc3QgQ0xJUEJPQVJEX0lNQUdFX0ZPTERFUiA9ICdwaWNsaXN0LWNsaXBib2FyZC1pbWFnZXMnXG4iLCJpbXBvcnQgeyBzcGF3biB9IGZyb20gJ2NoaWxkX3Byb2Nlc3MnXG5pbXBvcnQgZGF5anMgZnJvbSAnZGF5anMnXG5pbXBvcnQgZnMsIHsgZW5zdXJlRGlyU3luYyB9IGZyb20gJ2ZzLWV4dHJhJ1xuaW1wb3J0IGlzV3NsIGZyb20gJ2lzLXdzbCdcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnXG5pbXBvcnQgb3MgZnJvbSAnb3MnXG5cbmltcG9ydCBtYWNDbGlwYm9hcmRTY3JpcHQgZnJvbSAnLi9jbGlwYm9hcmQvbWFjLmFwcGxlc2NyaXB0J1xuaW1wb3J0IHdpbmRvd3NDbGlwYm9hcmRTY3JpcHQgZnJvbSAnLi9jbGlwYm9hcmQvd2luZG93cy5wczEnXG5pbXBvcnQgd2luZG93czEwQ2xpcGJvYXJkU2NyaXB0IGZyb20gJy4vY2xpcGJvYXJkL3dpbmRvd3MxMC5wczEnXG5pbXBvcnQgbGludXhDbGlwYm9hcmRTY3JpcHQgZnJvbSAnLi9jbGlwYm9hcmQvbGludXguc2gnXG5pbXBvcnQgd3NsQ2xpcGJvYXJkU2NyaXB0IGZyb20gJy4vY2xpcGJvYXJkL3dzbC5zaCdcbmltcG9ydCB7IElCdWlsZEluRXZlbnQgfSBmcm9tICcuL2VudW0nXG5pbXBvcnQgeyBJUGljR28sIElDbGlwYm9hcmRJbWFnZSB9IGZyb20gJy4uL3R5cGVzJ1xuaW1wb3J0IHsgQ0xJUEJPQVJEX0lNQUdFX0ZPTERFUiB9IGZyb20gJy4vc3RhdGljJ1xuXG5leHBvcnQgdHlwZSBQbGF0Zm9ybSA9ICdkYXJ3aW4nIHwgJ3dpbjMyJyB8ICd3aW4xMCcgfCAnbGludXgnIHwgJ3dzbCdcblxuY29uc3QgZ2V0Q3VycmVudFBsYXRmb3JtID0gKCk6IFBsYXRmb3JtID0+IHtcbiAgY29uc3QgcGxhdGZvcm0gPSBwcm9jZXNzLnBsYXRmb3JtXG4gIGlmIChpc1dzbCkgcmV0dXJuICd3c2wnXG4gIGlmIChwbGF0Zm9ybSA9PT0gJ3dpbjMyJykge1xuICAgIHJldHVybiBvcy5yZWxlYXNlKCkuc3BsaXQoJy4nKVswXSA9PT0gJzEwJyA/ICd3aW4xMCcgOiAnd2luMzInXG4gIH0gZWxzZSBpZiAocGxhdGZvcm0gPT09ICdkYXJ3aW4nKSB7XG4gICAgcmV0dXJuICdkYXJ3aW4nXG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuICdsaW51eCdcbiAgfVxufVxuXG5jb25zdCBwbGF0Zm9ybTJTY3JpcHRDb250ZW50OiB7XG4gIFtrZXkgaW4gUGxhdGZvcm1dOiBzdHJpbmdcbn0gPSB7XG4gIGRhcndpbjogbWFjQ2xpcGJvYXJkU2NyaXB0LFxuICB3aW4zMjogd2luZG93c0NsaXBib2FyZFNjcmlwdCxcbiAgd2luMTA6IHdpbmRvd3MxMENsaXBib2FyZFNjcmlwdCxcbiAgbGludXg6IGxpbnV4Q2xpcGJvYXJkU2NyaXB0LFxuICB3c2w6IHdzbENsaXBib2FyZFNjcmlwdFxufVxuXG4vKipcbiAqIHBvd2Vyc2hlbGwgd2lsbCByZXBvcnQgZXJyb3IgaWYgZmlsZSBkb2VzIG5vdCBoYXZlIGEgJy5wczEnIGV4dGVuc2lvbixcbiAqIHNvIHdlIHNob3VsZCBrZWVwIHRoZSBleHRlbnNpb24gbmFtZSBjb25zaXN0ZW50IHdpdGggY29ycmVzcG9uZGluZyBzaGVsbFxuICovXG5jb25zdCBwbGF0Zm9ybTJTY3JpcHRGaWxlbmFtZToge1xuICBba2V5IGluIFBsYXRmb3JtXTogc3RyaW5nXG59ID0ge1xuICBkYXJ3aW46ICdtYWMuYXBwbGVzY3JpcHQnLFxuICB3aW4zMjogJ3dpbmRvd3MucHMxJyxcbiAgd2luMTA6ICd3aW5kb3dzMTAucHMxJyxcbiAgbGludXg6ICdsaW51eC5zaCcsXG4gIHdzbDogJ3dzbC5zaCdcbn1cblxuZnVuY3Rpb24gY3JlYXRlSW1hZ2VGb2xkZXIoY3R4OiBJUGljR28pOiB2b2lkIHtcbiAgY29uc3QgaW1hZ2VQYXRoID0gcGF0aC5qb2luKGN0eC5iYXNlRGlyLCBDTElQQk9BUkRfSU1BR0VfRk9MREVSKVxuICBlbnN1cmVEaXJTeW5jKGltYWdlUGF0aClcbn1cblxuLy8gVGhhbmtzIHRvIHZzLXBpY2dvOiBodHRwczovL2dpdGh1Yi5jb20vU3BhZGVzLVMvdnMtcGljZ28vYmxvYi9tYXN0ZXIvc3JjL2V4dGVuc2lvbi50c1xuY29uc3QgZ2V0Q2xpcGJvYXJkSW1hZ2UgPSBhc3luYyAoY3R4OiBJUGljR28pOiBQcm9taXNlPElDbGlwYm9hcmRJbWFnZT4gPT4ge1xuICBjcmVhdGVJbWFnZUZvbGRlcihjdHgpXG4gIC8vIGFkZCBhbiBjbGlwYm9hcmQgaW1hZ2UgZm9sZGVyIHRvIGNvbnRyb2wgdGhlIGltYWdlIGNhY2hlIGZpbGVcbiAgY29uc3QgaW1hZ2VQYXRoID0gcGF0aC5qb2luKGN0eC5iYXNlRGlyLCBDTElQQk9BUkRfSU1BR0VfRk9MREVSLCBgJHtkYXlqcygpLmZvcm1hdCgnWVlZWU1NRERISG1tc3NTU1MnKX0ucG5nYClcbiAgcmV0dXJuIGF3YWl0IG5ldyBQcm9taXNlPElDbGlwYm9hcmRJbWFnZT4oKHJlc29sdmU6IGFueSwgcmVqZWN0OiBhbnkpOiB2b2lkID0+IHtcbiAgICBjb25zdCBwbGF0Zm9ybSA9IGdldEN1cnJlbnRQbGF0Zm9ybSgpXG4gICAgY29uc3Qgc2NyaXB0UGF0aCA9IHBhdGguam9pbihjdHguYmFzZURpciwgcGxhdGZvcm0yU2NyaXB0RmlsZW5hbWVbcGxhdGZvcm1dKVxuICAgIC8vIElmIHRoZSBzY3JpcHQgZG9lcyBub3QgZXhpc3QgeWV0LCB3ZSBuZWVkIHRvIHdyaXRlIHRoZSBjb250ZW50IHRvIHRoZSBzY3JpcHQgZmlsZVxuICAgIGlmICghZnMuZXhpc3RzU3luYyhzY3JpcHRQYXRoKSkge1xuICAgICAgZnMud3JpdGVGaWxlU3luYyhzY3JpcHRQYXRoLCBwbGF0Zm9ybTJTY3JpcHRDb250ZW50W3BsYXRmb3JtXSwgJ3V0ZjgnKVxuICAgIH1cbiAgICBsZXQgZXhlY3V0aW9uXG4gICAgaWYgKHBsYXRmb3JtID09PSAnZGFyd2luJykge1xuICAgICAgZXhlY3V0aW9uID0gc3Bhd24oJ29zYXNjcmlwdCcsIFtzY3JpcHRQYXRoLCBpbWFnZVBhdGhdKVxuICAgIH0gZWxzZSBpZiAocGxhdGZvcm0gPT09ICd3aW4zMicgfHwgcGxhdGZvcm0gPT09ICd3aW4xMCcpIHtcbiAgICAgIGV4ZWN1dGlvbiA9IHNwYXduKCdwb3dlcnNoZWxsJywgW1xuICAgICAgICAnLW5vcHJvZmlsZScsXG4gICAgICAgICctbm9uaW50ZXJhY3RpdmUnLFxuICAgICAgICAnLW5vbG9nbycsXG4gICAgICAgICctc3RhJyxcbiAgICAgICAgJy1leGVjdXRpb25wb2xpY3knLFxuICAgICAgICAndW5yZXN0cmljdGVkJyxcbiAgICAgICAgLy8gZml4IHdpbmRvd3MgMTAgbmF0aXZlIGNtZCBjcmFzaCBidWcgd2hlbiBcInBpY2dvIHVwbG9hZFwiXG4gICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9QaWNHby9QaWNHby1Db3JlL2lzc3Vlcy8zMlxuICAgICAgICAvLyAnLXdpbmRvd3N0eWxlJywnaGlkZGVuJyxcbiAgICAgICAgLy8gJy1ub2V4aXQnLFxuICAgICAgICAnLWZpbGUnLFxuICAgICAgICBzY3JpcHRQYXRoLFxuICAgICAgICBpbWFnZVBhdGhcbiAgICAgIF0pXG4gICAgfSBlbHNlIHtcbiAgICAgIGV4ZWN1dGlvbiA9IHNwYXduKCdzaCcsIFtzY3JpcHRQYXRoLCBpbWFnZVBhdGhdKVxuICAgIH1cblxuICAgIGV4ZWN1dGlvbi5zdGRvdXQub24oJ2RhdGEnLCAoZGF0YTogQnVmZmVyKSA9PiB7XG4gICAgICBpZiAocGxhdGZvcm0gPT09ICdsaW51eCcpIHtcbiAgICAgICAgaWYgKGRhdGEudG9TdHJpbmcoKS50cmltKCkgPT09ICdubyB4Y2xpcCBvciB3bC1jbGlwYm9hcmQnKSB7XG4gICAgICAgICAgY3R4LmVtaXQoSUJ1aWxkSW5FdmVudC5OT1RJRklDQVRJT04sIHtcbiAgICAgICAgICAgIHRpdGxlOiAneGNsaXAgb3Igd2wtY2xpcGJvYXJkIG5vdCBmb3VuZCcsXG4gICAgICAgICAgICBib2R5OiAnUGxlYXNlIGluc3RhbGwgeGNsaXAoZm9yIHgxMSkgb3Igd2wtY2xpcGJvYXJkKGZvciB3YXlsYW5kKSBiZWZvcmUgcnVuIHBpY2dvJ1xuICAgICAgICAgIH0pXG4gICAgICAgICAgcmV0dXJuIHJlamVjdChuZXcgRXJyb3IoJ1BsZWFzZSBpbnN0YWxsIHhjbGlwKGZvciB4MTEpIG9yIHdsLWNsaXBib2FyZChmb3Igd2F5bGFuZCkgYmVmb3JlIHJ1biBwaWNnbycpKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBjb25zdCBpbWdQYXRoID0gZGF0YS50b1N0cmluZygpLnRyaW0oKVxuXG4gICAgICAvLyBpZiB0aGUgZmlsZVBhdGggaXMgdGhlIHJlYWwgZmlsZSBpbiBzeXN0ZW1cbiAgICAgIC8vIHdlIHNob3VsZCBrZWVwIGl0IGluc3RlYWQgb2YgcmVtb3ZpbmdcbiAgICAgIGxldCBzaG91bGRLZWVwQWZ0ZXJVcGxvYWRpbmcgPSBmYWxzZVxuXG4gICAgICAvLyBpbiBtYWNPUyBpZiB5b3VyIGNvcHkgdGhlIGZpbGUgaW4gc3lzdGVtLCBpdCdzIGJhc2VuYW1lIHdpbGwgbm90IGVxdWFsIHRvIG91ciBkZWZhdWx0IGJhc2VuYW1lXG4gICAgICBpZiAocGF0aC5iYXNlbmFtZShpbWdQYXRoKSAhPT0gcGF0aC5iYXNlbmFtZShpbWFnZVBhdGgpKSB7XG4gICAgICAgIC8vIGlmIHRoZSBwYXRoIGlzIG5vdCBnZW5lcmF0ZSBieSBwaWNnb1xuICAgICAgICAvLyBidXQgdGhlIHBhdGggZXhpc3RzLCB3ZSBzaG91bGQga2VlcCBpdFxuICAgICAgICBpZiAoZnMuZXhpc3RzU3luYyhpbWdQYXRoKSkge1xuICAgICAgICAgIHNob3VsZEtlZXBBZnRlclVwbG9hZGluZyA9IHRydWVcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgLy8gaWYgdGhlIGltZ1BhdGggaXMgaW52YWxpZFxuICAgICAgaWYgKGltZ1BhdGggIT09ICdubyBpbWFnZScgJiYgIWZzLmV4aXN0c1N5bmMoaW1nUGF0aCkpIHtcbiAgICAgICAgcmV0dXJuIHJlamVjdChuZXcgRXJyb3IoYENhbid0IGZpbmQgJHtpbWdQYXRofWApKVxuICAgICAgfVxuXG4gICAgICByZXNvbHZlKHtcbiAgICAgICAgaW1nUGF0aCxcbiAgICAgICAgc2hvdWxkS2VlcEFmdGVyVXBsb2FkaW5nXG4gICAgICB9KVxuICAgIH0pXG4gIH0pXG59XG5cbmV4cG9ydCBkZWZhdWx0IGdldENsaXBib2FyZEltYWdlXG4iLCJpbXBvcnQgeyBJQ29uZmlnLCBJUGljR28gfSBmcm9tICcuLi90eXBlcydcbmltcG9ydCB7IEpTT05TdG9yZSB9IGZyb20gJ0BwaWNnby9zdG9yZSdcbmltcG9ydCB7IElKU09OIH0gZnJvbSAnQHBpY2dvL3N0b3JlL2Rpc3QvdHlwZXMnXG5cbmNsYXNzIERCIHtcbiAgcHJpdmF0ZSByZWFkb25seSBjdHg6IElQaWNHb1xuICBwcml2YXRlIHJlYWRvbmx5IGRiOiBKU09OU3RvcmVcbiAgY29uc3RydWN0b3IoY3R4OiBJUGljR28pIHtcbiAgICB0aGlzLmN0eCA9IGN0eFxuICAgIHRoaXMuZGIgPSBuZXcgSlNPTlN0b3JlKHRoaXMuY3R4LmNvbmZpZ1BhdGgpXG5cbiAgICBpZiAoIXRoaXMuZGIuaGFzKCdwaWNCZWQnKSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgdGhpcy5kYi5zZXQoJ3BpY0JlZCcsIHtcbiAgICAgICAgICB1cGxvYWRlcjogJ3NtbXMnLFxuICAgICAgICAgIGN1cnJlbnQ6ICdzbW1zJyxcbiAgICAgICAgICBzbW1zOiB7XG4gICAgICAgICAgICB0b2tlbjogJydcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICB9IGNhdGNoIChlOiBhbnkpIHtcbiAgICAgICAgdGhpcy5jdHgubG9nLmVycm9yKGUpXG4gICAgICAgIHRocm93IGVcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKCF0aGlzLmRiLmhhcygncGljZ29QbHVnaW5zJykpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHRoaXMuZGIuc2V0KCdwaWNnb1BsdWdpbnMnLCB7fSlcbiAgICAgIH0gY2F0Y2ggKGU6IGFueSkge1xuICAgICAgICB0aGlzLmN0eC5sb2cuZXJyb3IoZSlcbiAgICAgICAgdGhyb3cgZVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJlYWQoZmx1c2g/OiBib29sZWFuKTogSUpTT04ge1xuICAgIHJldHVybiB0aGlzLmRiLnJlYWQoZmx1c2gpXG4gIH1cblxuICBnZXQoa2V5OiBzdHJpbmcgPSAnJyk6IGFueSB7XG4gICAgdGhpcy5yZWFkKHRydWUpXG4gICAgcmV0dXJuIHRoaXMuZGIuZ2V0KGtleSlcbiAgfVxuXG4gIHNldChrZXk6IHN0cmluZywgdmFsdWU6IGFueSk6IHZvaWQge1xuICAgIHRoaXMucmVhZCh0cnVlKVxuICAgIHRoaXMuZGIuc2V0KGtleSwgdmFsdWUpXG4gIH1cblxuICBoYXMoa2V5OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICB0aGlzLnJlYWQodHJ1ZSlcbiAgICByZXR1cm4gdGhpcy5kYi5oYXMoa2V5KVxuICB9XG5cbiAgdW5zZXQoa2V5OiBzdHJpbmcsIHZhbHVlOiBhbnkpOiBib29sZWFuIHtcbiAgICB0aGlzLnJlYWQodHJ1ZSlcbiAgICByZXR1cm4gdGhpcy5kYi51bnNldChrZXksIHZhbHVlKVxuICB9XG5cbiAgc2F2ZUNvbmZpZyhjb25maWc6IFBhcnRpYWw8SUNvbmZpZz4pOiB2b2lkIHtcbiAgICBPYmplY3Qua2V5cyhjb25maWcpLmZvckVhY2goKG5hbWU6IHN0cmluZykgPT4ge1xuICAgICAgdGhpcy5zZXQobmFtZSwgY29uZmlnW25hbWVdKVxuICAgIH0pXG4gIH1cblxuICByZW1vdmVDb25maWcoY29uZmlnOiBJQ29uZmlnKTogdm9pZCB7XG4gICAgT2JqZWN0LmtleXMoY29uZmlnKS5mb3JFYWNoKChuYW1lOiBzdHJpbmcpID0+IHtcbiAgICAgIHRoaXMudW5zZXQobmFtZSwgY29uZmlnW25hbWVdKVxuICAgIH0pXG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgREJcbiIsIi8qIGVzbGludC1kaXNhYmxlIG5vLXRlbXBsYXRlLWN1cmx5LWluLXN0cmluZyAqL1xuZXhwb3J0IGNvbnN0IFpIX0NOID0ge1xuICBVUExPQURfRkFJTEVEOiAn5LiK5Lyg5aSx6LSlJyxcbiAgQ0hFQ0tfU0VUVElOR1M6ICfor7fmo4Dmn6XkvaDnmoTphY3nva7pobnmmK/lkKbmraPnoa4nLFxuICBDSEVDS19TRVRUSU5HU19BTkRfTkVUV09SSzogJ+ivt+ajgOafpeS9oOeahOmFjee9rumhueS7peWPiue9kee7nCcsXG4gIFVQTE9BRF9GQUlMRURfUkVBU09OOiAn6ZSZ6K+v56CBOiAke2NvZGV977yM6K+35omT5byA5rWP6KeI5Zmo57KY6LS05Zyw5Z2A5p+l55yL55u45YWz5Y6f5ZugJyxcbiAgU0VSVkVSX0VSUk9SOiAn5pyN5Yqh56uv5Ye66ZSZ77yM6K+36YeN6K+VJyxcbiAgQVVUSF9GQUlMRUQ6ICforqTor4HlpLHotKUnLFxuXG4gIC8vIHNtbXNcbiAgUElDQkVEX1NNTVM6ICdTTS5NUycsXG4gIFBJQ0JFRF9TTU1TX1RPS0VOOiAn6K6+5a6aVG9rZW4nLFxuICBQSUNCRURfU01NU19NRVNTQUdFX1RPS0VOOiAn6K+35aGr5YaZVG9rZW4nLFxuICBQSUNCRURfU01NU19CQUNLVVBET01BSU46ICflpIfnlKjkuIrkvKDln5/lkI0nLFxuICBQSUNCRURfU01NU19NRVNTQUdFX0JBQ0tVUF9ET01BSU46ICfkvovlpoIgc21tcy5hcHAnLFxuXG4gIC8vIGFkdmFuY2VkcGxpc3RcbiAgUElDQkVEX0FEVkFOQ0VEUExJU1Q6ICfpq5jnuqfoh6rlrprkuYknLFxuICBQSUNCRURfQURWQU5DRURQTElTVF9FTkRQT0lOVDogJ+iuvuWumuaOpeWPo+e9keWdgCcsXG4gIFBJQ0JFRF9BRFZBTkNFRFBMSVNUX01FU1NBR0VfRU5EUE9JTlQ6ICfkvovlpoI6IGh0dHBzOi8vZXhhbXBsZS5jb20vdXBsb2FkJyxcbiAgUElDQkVEX0FEVkFOQ0VEUExJU1RfTUVUSE9EOiAn6K6+5a6a6K+35rGC5pa55rOVJyxcbiAgUElDQkVEX0FEVkFOQ0VEUExJU1RfTUVTU0FHRV9NRVRIT0Q6ICfor7fpgInmi6nor7fmsYLmlrnms5UnLFxuICBQSUNCRURfQURWQU5DRURQTElTVF9GT1JNREFUQUtFWTogJ+iuvuWumuihqOWNleWPguaVsOWQjScsXG4gIFBJQ0JFRF9BRFZBTkNFRFBMSVNUX01FU1NBR0VfRk9STURBVEFLRVk6ICfkvovlpoI6IGZpbGUnLFxuICBQSUNCRURfQURWQU5DRURQTElTVF9IRUFERVJTOiAn6K6+5a6a6K+35rGC5aS0JyxcbiAgUElDQkVEX0FEVkFOQ0VEUExJU1RfTUVTU0FHRV9IRUFERVJTOiAn5L6L5aaCOiB7XCJDb250ZW50LVR5cGVcIjogXCJtdWx0aXBhcnQvZm9ybS1kYXRhXCJ9JyxcbiAgUElDQkVEX0FEVkFOQ0VEUExJU1RfQk9EWTogJ+iuvuWumuivt+axguS9kycsXG4gIFBJQ0JFRF9BRFZBTkNFRFBMSVNUX01FU1NBR0VfQk9EWTogJ+S+i+Wmgjoge1wia2V5XCI6IFwidmFsdWVcIn0nLFxuICBQSUNCRURfQURWQU5DRURQTElTVF9DVVNUT01QUkVGSVg6ICforr7lrproh6rlrprkuYnliY3nvIAnLFxuICBQSUNCRURfQURWQU5DRURQTElTVF9NRVNTQUdFX0NVU1RPTVBSRUZJWDogJ+S+i+WmgjogaHR0cHM6Ly9leGFtcGxlLmNvbS8nLFxuICBQSUNCRURfQURWQU5DRURQTElTVF9XRUJQQVRIOiAn6K6+5a6a572R56uZ6Lev5b6EJyxcbiAgUElDQkVEX0FEVkFOQ0VEUExJU1RfTUVTU0FHRV9XRUJQQVRIOiAn55So5LqO5ou85o6l572R5Z2A6Lev5b6EJyxcbiAgUElDQkVEX0FEVkFOQ0VEUExJU1RfUkVTREFUQVBBVEg6ICforr7lrprov5Tlm57mlbDmja5VUkzot6/lvoQnLFxuICBQSUNCRURfQURWQU5DRURQTElTVF9NRVNTQUdFX1JFU0RBVEFQQVRIOiAn5L6L5aaCOiBkYXRhLnVybCcsXG5cbiAgLy8gbG9jYWxcbiAgUElDQkVEX0xPQ0FMOiAn5pys5Zyw5LiK5LygJyxcbiAgUElDQkVEX0xPQ0FMX1BBVEg6ICforr7lrprot6/lvoQnLFxuICBQSUNCRURfTE9DQUxfTUVTU0FHRV9QQVRIOiAn5L6L5aaCIC91c3IvbG9jYWwvaW1hZ2VzLycsXG4gIFBJQ0JFRF9MT0NBTF9DVVNUT01VUkw6ICforr7lrproh6rlrprkuYnln5/lkI0nLFxuICBQSUNCRURfTE9DQUxfTUVTU0FHRV9DVVNUT01VUkw6ICfkvovlpoIgaHR0cHM6Ly90ZXN0LmNvbScsXG4gIFBJQ0JFRF9MT0NBTF9XRUJQQVRIOiAn6K6+5a6a572R56uZ6Lev5b6EJyxcbiAgUElDQkVEX0xPQ0FMX01FU1NBR0VfV0VCUEFUSDogJ+eUqOS6juaLvOaOpee9keWdgOi3r+W+hCcsXG5cbiAgLy8gYWxpc3RcbiAgUElDQkVEX0FMSVNUX1BMSVNUOiAnQUxpc3QnLFxuICBQSUNCRURfQUxJU1RfVVJMOiAn6K6+5a6aVVJMJyxcbiAgUElDQkVEX0FMSVNUX01FU1NBR0VfVVJMOiAn5L6L5aaCOiBodHRwczovL2FsaXN0LmV4YW1wbGUuY29tJyxcbiAgUElDQkVEX0FMSVNUX1RPS0VOOiAn6K6+5a6aVG9rZW4nLFxuICBQSUNCRURfQUxJU1RfTUVTU0FHRV9UT0tFTjogJ+ivt+i+k+WFpVRva2VuKOS4jueUqOaIt+WQjS3lr4bnoIHkuozpgInkuIApJyxcbiAgUElDQkVEX0FMSVNUX1VTRVJOQU1FOiAn6K6+5a6a55So5oi35ZCNJyxcbiAgUElDQkVEX0FMSVNUX01FU1NBR0VfVVNFUk5BTUU6ICfor7fovpPlhaXnlKjmiLflkI0o5LiOVG9rZW7kuozpgInkuIApJyxcbiAgUElDQkVEX0FMSVNUX1BBU1NXT1JEOiAn6K6+5a6a5a+G56CBJyxcbiAgUElDQkVEX0FMSVNUX01FU1NBR0VfUEFTU1dPUkQ6ICfor7fovpPlhaXlr4bnoIEnLFxuICBQSUNCRURfQUxJU1RfVVBMT0FEUEFUSDogJ+iuvuWumuS4iuS8oOi3r+W+hCcsXG4gIFBJQ0JFRF9BTElTVF9NRVNTQUdFX1VQTE9BRF9QQVRIOiAn5L6L5aaCOiAvdGVzdCcsXG4gIFBJQ0JFRF9BTElTVF9XRUJQQVRIOiAn6K6+5a6a572R56uZ6Lev5b6EJyxcbiAgUElDQkVEX0FMSVNUX01FU1NBR0VfV0VCX1BBVEg6ICfnlKjkuo7mi7zmjqXnvZHlnYDot6/lvoQnLFxuICBQSUNCRURfQUxJU1RfQ1VTVE9NVVJMOiAn6K6+5a6a6Ieq5a6a5LmJ5Z+f5ZCNJyxcbiAgUElDQkVEX0FMSVNUX01FU1NBR0VfQ1VTVE9NVVJMOiAn5L6L5aaCOiBodHRwczovL3Rlc3QuY29tJyxcblxuICAvLyBBbGktY2xvdWRcbiAgUElDQkVEX0FMSUNMT1VEOiAn6Zi/6YeM5LqRT1NTJyxcbiAgUElDQkVEX0FMSUNMT1VEX0FDQ0VTU0tFWUlEOiAn6K6+5a6aYWNjZXNzS2V5SWQnLFxuICBQSUNCRURfQUxJQ0xPVURfQUNDRVNTS0VZU0VDUkVUOiAn6K6+5a6aYWNjZXNzS2V5U2VjcmV0JyxcbiAgUElDQkVEX0FMSUNMT1VEX0JVQ0tFVDogJ+iuvuWumkJ1Y2tldCcsXG4gIFBJQ0JFRF9BTElDTE9VRF9BUkVBOiAn6K6+5a6a5a2Y5YKo5Yy65Z+fJyxcbiAgUElDQkVEX0FMSUNMT1VEX1BBVEg6ICforr7lrprlrZjlgqjot6/lvoQnLFxuICBQSUNCRURfQUxJQ0xPVURfV0VCUEFUSDogJ+iuvuWumue9keermei3r+W+hCcsXG4gIFBJQ0JFRF9BTElDTE9VRF9DVVNUT01VUkw6ICforr7lrproh6rlrprkuYnln5/lkI0nLFxuICBQSUNCRURfQUxJQ0xPVURfT1BUSU9OUzogJ+iuvuWumue9keWdgOWQjue8gCcsXG4gIFBJQ0JFRF9BTElDTE9VRF9NRVNTQUdFX0FSRUE6ICfkvovlpoI6IG9zcy1jbi1iZWlqaW5nJyxcbiAgUElDQkVEX0FMSUNMT1VEX01FU1NBR0VfUEFUSDogJ+S+i+WmgjogdGVzdC8nLFxuICBQSUNCRURfQUxJQ0xPVURfTUVTU0FHRV9XRUJQQVRIOiAn55So5LqO5ou85o6l572R5Z2A6Lev5b6EJyxcbiAgUElDQkVEX0FMSUNMT1VEX01FU1NBR0VfT1BUSU9OUzogJ+S+i+WmgjogP3gtb3NzLXByb2Nlc3M9eHh4JyxcbiAgUElDQkVEX0FMSUNMT1VEX01FU1NBR0VfQ1VTVE9NVVJMOiAn5L6L5aaCOiBodHRwczovL3Rlc3QuY29tJyxcblxuICAvLyBUZW5jZW50LWNsb3VkXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVUQ6ICfohb7orq/kupFDT1MnLFxuICBQSUNCRURfVEVOQ0VOVENMT1VEX1ZFUlNJT046ICdDT1PniYjmnKwnLFxuICBQSUNCRURfVEVOQ0VOVENMT1VEX1NFQ1JFVElEOiAn6K6+5a6aU2VjcmV0SWQnLFxuICBQSUNCRURfVEVOQ0VOVENMT1VEX1NFQ1JFVEtFWTogJ+iuvuWumlNlY3JldEtleScsXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfQVBQSUQ6ICforr7lrppBcHBJZCcsXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfQlVDS0VUOiAn6K6+5a6aQnVja2V0JyxcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9BUkVBOiAn6K6+5a6a5a2Y5YKo5Yy65Z+fJyxcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9FTkRQT0lOVDogJ+iuvuWumuaOpeWFpeeCuScsXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfUEFUSDogJ+iuvuWumuWtmOWCqOi3r+W+hCcsXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfV0VCUEFUSDogJ+iuvuWumue9keermei3r+W+hCcsXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfT1BUSU9OUzogJ+iuvuWumue9keWdgOWQjue8gCcsXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfQ1VTVE9NVVJMOiAn6K6+5a6a6Ieq5a6a5LmJ5Z+f5ZCNJyxcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9NRVNTQUdFX0FQUElEOiAn5L6L5aaCOiAxMjM0NTY3ODkwJyxcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9NRVNTQUdFX0FSRUE6ICfkvovlpoI6IGFwLWJlaWppbmcnLFxuICBQSUNCRURfVEVOQ0VOVENMT1VEX01FU1NBR0VfUEFUSDogJ+S+i+WmgjogdGVzdC8nLFxuICBQSUNCRURfVEVOQ0VOVENMT1VEX01FU1NBR0VfV0VCUEFUSDogJ+S+i+WmgjogL3Vzci9sb2NhbC9pbWFnZXMvJyxcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9NRVNTQUdFX0NVU1RPTVVSTDogJ+S+i+WmgjogaHR0cHM6Ly90ZXN0LmNvbScsXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfTUVTU0FHRV9PUFRJT05TOiAn5L6L5aaCOiA/aW1hZ2VNb2dyMicsXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfTUVTU0FHRV9FTkRQT0lOVDogJ+S+i+WmgjogY29zLWludGVybmFsLmFjY2VsZXJhdGUudGVuY2VudGNvcy5jbicsXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfU0xJTTogJ+aegeaZuuWOi+e8qScsXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfU0xJTV9USVA6XG4gICAgJ+WbvueJh+aegeaZuuWOi+e8qe+8jOivpuaDheivt+WPguiAg1vmlofmoaPor7TmmI5dKGh0dHBzOi8vY2xvdWQudGVuY2VudC5jb20vZG9jdW1lbnQvcHJvZHVjdC80MzYvODY0MzgpJyxcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9TTElNX0NPTkZJUk06ICflvIDlkK8nLFxuICBQSUNCRURfVEVOQ0VOVENMT1VEX1NMSU1fQ0FOQ0VMOiAn5YWz6ZetJyxcblxuICAvLyBHaXRIdWJcbiAgUElDQkVEX0dJVEhVQjogJ0dpdEh1YicsXG4gIFBJQ0JFRF9HSVRIVUJfVE9LRU46ICforr7lrppUb2tlbicsXG4gIFBJQ0JFRF9HSVRIVUJfUkVQTzogJ+iuvuWumuS7k+W6k+WQjScsXG4gIFBJQ0JFRF9HSVRIVUJfUEFUSDogJ+iuvuWumuWtmOWCqOi3r+W+hCcsXG4gIFBJQ0JFRF9HSVRIVUJfQlJBTkNIOiAn6K6+5a6a5YiG5pSv5ZCNJyxcbiAgUElDQkVEX0dJVEhVQl9DVVNUT01VUkw6ICforr7lrproh6rlrprkuYnln5/lkI0nLFxuICBQSUNCRURfR0lUSFVCX01FU1NBR0VfUkVQTzogJ+agvOW8jzogdXNlcm5hbWUvcmVwbycsXG4gIFBJQ0JFRF9HSVRIVUJfTUVTU0FHRV9CUkFOQ0g6ICfkvovlpoI6IG1haW4nLFxuICBQSUNCRURfR0lUSFVCX01FU1NBR0VfUEFUSDogJ+S+i+WmgjogdGVzdC8nLFxuICBQSUNCRURfR0lUSFVCX01FU1NBR0VfQ1VTVE9NVVJMOiAn5L6L5aaCOiBodHRwczovL3Rlc3QuY29tJyxcblxuICAvLyBxaW5pdVxuICBQSUNCRURfUUlOSVU6ICfkuIPniZvkupEnLFxuICBQSUNCRURfUUlOSVVfQUNDRVNTS0VZOiAn6K6+5a6aQWNjZXNzS2V5JyxcbiAgUElDQkVEX1FJTklVX1NFQ1JFVEtFWTogJ+iuvuWumlNlY3JldEtleScsXG4gIFBJQ0JFRF9RSU5JVV9CVUNLRVQ6ICforr7lrppCdWNrZXQnLFxuICBQSUNCRURfUUlOSVVfUEFUSDogJ+iuvuWumuWtmOWCqOi3r+W+hCcsXG4gIFBJQ0JFRF9RSU5JVV9VUkw6ICforr7lrprorr/pl67nvZHlnYAnLFxuICBQSUNCRURfUUlOSVVfT1BUSU9OUzogJ+iuvuWumue9keWdgOWQjue8gCcsXG4gIFBJQ0JFRF9RSU5JVV9BUkVBOiAn6K6+5a6a5a2Y5YKo5Yy65Z+fJyxcbiAgUElDQkVEX1FJTklVX01FU1NBR0VfUEFUSDogJ+S+i+WmgjogdGVzdC8nLFxuICBQSUNCRURfUUlOSVVfTUVTU0FHRV9BUkVBOiAn5L6L5aaCOiB6MCcsXG4gIFBJQ0JFRF9RSU5JVV9NRVNTQUdFX09QVElPTlM6ICfkvovlpoI6ID9pbWFnZXNsaW0nLFxuICBQSUNCRURfUUlOSVVfTUVTU0FHRV9VUkw6ICfkvovlpoI6IGh0dHBzOi8veHh4Lnl5eS5nbGIuY2xvdWRkbi5jb20nLFxuXG4gIC8vIGltZ3VyXG4gIFBJQ0JFRF9JTUdVUjogJ0ltZ3VyJyxcbiAgUElDQkVEX0lNR1VSX0NMSUVOVElEOiAn6K6+5a6aQ2xpZW50SWQnLFxuICBQSUNCRURfSU1HVVJfVVNFUk5BTUU6ICforr7lrprnlKjmiLflkI0nLFxuICBQSUNCRURfSU1HVVJfQUNDRVNTX1RPS0VOOiAn6K6+5a6aYWNjZXNzVG9rZW4nLFxuICBQSUNCRURfSU1HVVJfQUxCVU06ICforr7lrprnm7jlhozlkI0nLFxuICBQSUNCRURfSU1HVVJfUFJPWFk6ICforr7lrprku6PnkIYnLFxuICBQSUNCRURfSU1HVVJfTUVTU0FHRV9DTElFTlRJRDogJ+WMv+WQjeS4iuS8oOaXtuWhq+WGmScsXG4gIFBJQ0JFRF9JTUdVUl9NRVNTQUdFX1VTRVJOQU1FOiAn6ZyA6KaB5LiK5Lyg5Yiw6LSm5oi35pe25aGr5YaZJyxcbiAgUElDQkVEX0lNR1VSX01FU1NBR0VfQUNDRVNTX1RPS0VOOiAn6ZyA6KaB5LiK5Lyg5Yiw6LSm5oi35pe25aGr5YaZJyxcbiAgUElDQkVEX0lNR1VSX01FU1NBR0VfQUxCVU06ICfkvovlpoI6IHRlc3QnLFxuICBQSUNCRURfSU1HVVJfTUVTU0FHRV9QUk9YWTogJ+S+i+WmgjogaHR0cDovLzEyNy4wLjAuMToxMDgwJyxcblxuICAvLyB1cHl1blxuICBQSUNCRURfVVBZVU46ICflj4jmi43kupEnLFxuICBQSUNCRURfVVBZVU5fQlVDS0VUOiAn6K6+5a6aQnVja2V0JyxcbiAgUElDQkVEX1VQWVVOX09QRVJBVE9SOiAn6K6+5a6a5pON5L2c5ZGYJyxcbiAgUElDQkVEX1VQWVVOX1BBU1NXT1JEOiAn6K6+5a6a5pON5L2c5ZGY5a+G56CBJyxcbiAgUElDQkVEX1VQWVVOX1BBVEg6ICforr7lrprlrZjlgqjot6/lvoQnLFxuICBQSUNCRURfVVBZVU5fVVJMOiAn6K6+5a6a5Yqg6YCf5Z+f5ZCNJyxcbiAgUElDQkVEX1VQWVVOX09QVElPTlM6ICforr7lrprnvZHlnYDlkI7nvIAnLFxuICBQSUNCRURfVVBZVU5fRU5EUE9JTlQ6ICforr7lrproh6rlrprkuYlBUEnmjqXlhaXngrknLFxuICBQSUNCRURfVVBZVU5fQU5USUxFRUNIVE9LRU46ICforr7lrprpmLLnm5fpk75Ub2tlbicsXG4gIFBJQ0JFRF9VUFlVTl9FWFBJUkVUSU1FOiAn6K6+5a6a6L+H5pyf5pe26Ze0KOenkiknLFxuICBQSUNCRURfVVBZVU5fTUVTU0FHRV9PUEVSQVRPUjogJ+S+i+WmgjogbWUnLFxuICBQSUNCRURfVVBZVU5fTUVTU0FHRV9QQVNTV09SRDogJ+S+i+WmgjogMTIzNDU2JyxcbiAgUElDQkVEX1VQWVVOX01FU1NBR0VfVVJMOiAn5L6L5aaCOiBodHRwOi8veHh4LnRlc3QudXBjZG4ubmV0JyxcbiAgUElDQkVEX1VQWVVOX01FU1NBR0VfT1BUSU9OUzogJ+S+i+WmgjogIWltZ3NsaW0nLFxuICBQSUNCRURfVVBZVU5fTUVTU0FHRV9QQVRIOiAn5L6L5aaCOiB0ZXN0LycsXG4gIFBJQ0JFRF9VUFlVTl9NRVNTQUdFX0VORFBPSU5UOiAn5L6L5aaCOiBodHRwczovL3YwLmFwaS51cHl1bi5jb20nLFxuXG4gIC8vIHdlYmRhdnBsaXN0XG4gIFBJQ0JFRF9XRUJEQVZQTElTVDogJ1dlYkRBVicsXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9IT1NUOiAn6K6+5a6a5o6l5Y+j572R5Z2AJyxcbiAgUElDQkVEX1dFQkRBVlBMSVNUX1NTTEVOQUJMRUQ6ICflkK/nlKhTU0wnLFxuICBQSUNCRURfV0VCREFWUExJU1RfVVNFUk5BTUU6ICforr7lrprnlKjmiLflkI0nLFxuICBQSUNCRURfV0VCREFWUExJU1RfUEFTU1dPUkQ6ICforr7lrprlr4bnoIEnLFxuICBQSUNCRURfV0VCREFWUExJU1RfUEFUSDogJ+iuvuWumuWtmOWCqOi3r+W+hCcsXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9XRUJQQVRIOiAn6K6+5a6a572R5Z2A6Lev5b6EJyxcbiAgUElDQkVEX1dFQkRBVlBMSVNUX0NVU1RPTVVSTDogJ+iuvuWumuiHquWumuS5ieWfn+WQjScsXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9BVVRIVFlQRTogJ+iuvuWumuiupOivgeaWueW8jycsXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9PUFRJT05TOiAn6K6+5a6a572R5Z2A5ZCO57yAJyxcbiAgUElDQkVEX1dFQkRBVlBMSVNUX01FU1NBR0VfSE9TVDogJ+S+i+WmgjogaHR0cHM6Ly9leGFtcGxlLmNvbS93ZWJkYXYnLFxuICBQSUNCRURfV0VCREFWUExJU1RfTUVTU0FHRV9TU0xFTkFCTEVEOiAn6ZyA6KaBSFRUUFPml7blkK/nlKgnLFxuICBQSUNCRURfV0VCREFWUExJU1RfTUVTU0FHRV9VU0VSTkFNRTogJ+S+i+WmgjogbWUnLFxuICBQSUNCRURfV0VCREFWUExJU1RfTUVTU0FHRV9QQVNTV09SRDogJ+i+k+WFpeWvhueggScsXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9NRVNTQUdFX1BBVEg6ICfkvovlpoI6IHRlc3QvJyxcbiAgUElDQkVEX1dFQkRBVlBMSVNUX01FU1NBR0VfV0VCU0lURV9QQVRIOiAn5ou85o6l572R5Z2A5pe25L2/55SoJyxcbiAgUElDQkVEX1dFQkRBVlBMSVNUX01FU1NBR0VfQ1VTVE9NVVJMOiAn5L6L5aaCOiBodHRwczovL3Rlc3QuY29tJyxcbiAgUElDQkVEX1dFQkRBVlBMSVNUX01FU1NBR0VfT1BUSU9OUzogJ+S+i+WmgjogP2tleT0xMjM0NTYnLFxuXG4gIC8vIHNmdHBwbGlzdFxuICBQSUNCRURfU0ZUUFBMSVNUOiAn5YaF572uU0ZUUCcsXG4gIFBJQ0JFRF9TRlRQUExJU1RfSE9TVDogJ+iuvuWumuS4u+acuicsXG4gIFBJQ0JFRF9TRlRQUExJU1RfUE9SVDogJ+iuvuWumuerr+WPoycsXG4gIFBJQ0JFRF9TRlRQUExJU1RfVVNFUk5BTUU6ICforr7lrprnlKjmiLflkI0nLFxuICBQSUNCRURfU0ZUUFBMSVNUX1BBU1NXT1JEOiAn6K6+5a6a5a+G56CBJyxcbiAgUElDQkVEX1NGVFBQTElTVF9QUklWQVRFS0VZOiAn6K6+5a6a56eB6ZKlJyxcbiAgUElDQkVEX1NGVFBQTElTVF9QUklWQVRFS0VZX1BBU1NQSFJBU0U6ICforr7lrprnp4HpkqXlr4bnoIEnLFxuICBQSUNCRURfU0ZUUFBMSVNUX1VQTE9BRFBBVEg6ICforr7lrprkuIrkvKDot6/lvoQnLFxuICBQSUNCRURfU0ZUUFBMSVNUX0NVU1RPTVVSTDogJ+iuvuWumuiHquWumuS5ieWfn+WQjScsXG4gIFBJQ0JFRF9TRlRQUExJU1RfV0VCU0lURV9QQVRIOiAn6K6+5a6a572R56uZ6Lev5b6EJyxcbiAgUElDQkVEX1NGVFBQTElTVF9GSUxFX1VTRVI6ICforr7lrprmlofku7bnlKjmiLc657uEJyxcbiAgUElDQkVEX1NGVFBQTElTVF9GSUxFX01PREU6ICforr7lrprmlofku7bmnYPpmZAnLFxuICBQSUNCRURfU0ZUUFBMSVNUX0RJUl9NT0RFOiAn6K6+5a6a5paH5Lu25aS55p2D6ZmQJyxcbiAgUElDQkVEX1NGVFBQTElTVF9NRVNTQUdFX0hPU1Q6ICfkvovlpoI6IDEuMS4xLjMnLFxuICBQSUNCRURfU0ZUUFBMSVNUX01FU1NBR0VfUE9SVDogJ+m7mOiupDIyJyxcbiAgUElDQkVEX1NGVFBQTElTVF9NRVNTQUdFX1BSSVZBVEVLRVk6ICfkvovlpoI6IC9Vc2Vycy94eHgvLnNzaC9pZF9yc2EnLFxuICBQSUNCRURfU0ZUUFBMSVNUX01FU1NBR0VfUFJJVkFURUtFWV9QQVNTUEhSQVNFOiAn6L6T5YWl56eB6ZKl5a+G56CBJyxcbiAgUElDQkVEX1NGVFBQTElTVF9NRVNTQUdFX1VQTE9BRFBBVEg6ICfkvovlpoI6IHRlc3QvJyxcbiAgUElDQkVEX1NGVFBQTElTVF9NRVNTQUdFX0NVU1RPTVVSTDogJ+S+i+WmgjogaHR0cHM6Ly90ZXN0LmNvbScsXG4gIFBJQ0JFRF9TRlRQUExJU1RfTUVTU0FHRV9XRUJTSVRFX1BBVEg6ICfmi7zmjqXnvZHlnYDml7bkvb/nlKgnLFxuICBQSUNCRURfU0ZUUFBMSVNUX01FU1NBR0VfRklMRV9VU0VSOiAn5L6L5aaCOiB3d3c6ZGF0YScsXG4gIFBJQ0JFRF9TRlRQUExJU1RfTUVTU0FHRV9GSUxFX01PREU6ICfkvovlpoI6IDA2NjQnLFxuICBQSUNCRURfU0ZUUFBMSVNUX01FU1NBR0VfRElSX01PREU6ICfkvovlpoI6IDA3NzUnLFxuXG4gIC8vIFBpY0xpc3RcbiAgUElDQkVEX1BJQ0xJU1Q6ICdQaWNMaXN0JyxcbiAgUElDQkVEX1BJQ0xJU1RfSE9TVDogJ+iuvuWumuS4u+acuicsXG4gIFBJQ0JFRF9QSUNMSVNUX1BPUlQ6ICforr7lrprnq6/lj6MnLFxuICBQSUNCRURfUElDTElTVF9QSUNCRUQ6ICforr7lrprlm77luoonLFxuICBQSUNCRURfUElDTElTVF9DT05GSUdOQU1FOiAn6K6+5a6a6YWN572u5ZCNJyxcbiAgUElDQkVEX1BJQ0xJU1RfS0VZOiAn6K6+5a6a6Ym05p2DS2V5JyxcblxuICAvLyBMc2t5IFByb1xuICBQSUNCRURfTFNLWV9QTElTVDogJ+WFsOepuuWbvuW6iicsXG4gIFBJQ0JFRF9MU0tZX1ZFUlNJT046ICforr7lrprniYjmnKwnLFxuICBQSUNCRURfTFNLWV9NRVNTQUdFX1ZFUlNJT046ICfkvovlpoJWMScsXG4gIFBJQ0JFRF9MU0tZX0hPU1Q6ICforr7lrprkuLvmnLonLFxuICBQSUNCRURfTFNLWV9NRVNTQUdFX0hPU1Q6ICfkvovlpoI6IGh0dHBzOi8vZXhhbXBsZS5jb20nLFxuICBQSUNCRURfTFNLWV9UT0tFTjogJ+iuvuWumlRva2VuJyxcbiAgUElDQkVEX0xTS1lfTUVTU0FHRV9UT0tFTjogJ+S+i+WmgjogMTIzNDU2Nzg5MCcsXG4gIFBJQ0JFRF9MU0tZX1NUUkFURUdZX0lEOiAn6K6+5a6a562W55WlSUQnLFxuICBQSUNCRURfTFNLWV9NRVNTQUdFX1NUUkFURUdZX0lEOiAn5L6L5aaCOiAxJyxcbiAgUElDQkVEX0xTS1lfQUxCVU1fSUQ6ICforr7lrprnm7jlhoxJRCcsXG4gIFBJQ0JFRF9MU0tZX01FU1NBR0VfQUxCVU1fSUQ6ICfpgInloavvvIxWMueJiOacrOmZkOWumicsXG4gIFBJQ0JFRF9MU0tZX1BFUk1JU1NJT046ICforr7lrprmnYPpmZAnLFxuICBQSUNCRURfTFNLWV9NRVNTQUdFX1BFUk1JU1NJT046ICfkvovlpoI6IHB1YmxpYycsXG5cbiAgLy8gQXdzUzNQbGlzdFxuICBQSUNCRURfQVdTUzNQTElTVDogJ0FXUyBTMycsXG4gIFBJQ0JFRF9BV1NTM1BMSVNUX0FDQ0VTU0tFWUlEOiAn6K6+5a6aQWNjZXNzS2V5SWQnLFxuICBQSUNCRURfQVdTUzNQTElTVF9TRUNSRVRfQUNDRVNTS0VZOiAn6K6+5a6aU2VjcmV0QWNjZXNzS2V5JyxcbiAgUElDQkVEX0FXU1MzUExJU1RfQlVDS0VUOiAn6K6+5a6aQnVja2V0JyxcbiAgUElDQkVEX0FXU1MzUExJU1RfUkVHSU9OOiAn6K6+5a6aUmVnaW9uJyxcbiAgUElDQkVEX0FXU1MzUExJU1RfVVBMT0FEUEFUSDogJ+iuvuWumuS4iuS8oOi3r+W+hCcsXG4gIFBJQ0JFRF9BV1NTM1BMSVNUX0VORFBPSU5UOiAn6K6+5a6a6Ieq5a6a5LmJ6IqC54K5JyxcbiAgUElDQkVEX0FXU1MzUExJU1RfUFJPWFk6ICforr7lrprku6PnkIYnLFxuICBQSUNCRURfQVdTUzNQTElTVF9VUkxQUkVGSVg6ICforr7lrproh6rlrprkuYnln5/lkI0nLFxuICBQSUNCRURfQVdTUzNQTElTVF9QQVRIU1RZTEVBQ0NFU1M6ICflkK/nlKhzM0ZvcmNlUGF0aFN0eWxlJyxcbiAgUElDQkVEX0FXU1MzUExJU1RfUkVKRUNUVU5BVVRIT1JJWkVEOiAn5ouS57ud5peg5pWIVExT6K+B5Lmm6L+e5o6lJyxcbiAgUElDQkVEX0FXU1MzUExJU1RfQUNMOiAn6K6+5a6a5LiK5Lyg6LWE5rqQ55qE6K6/6Zeu562W55WlJyxcbiAgUElDQkVEX0FXU1MzUExJU1RfRElTQUJMRUJVQ0tFVFBSRUZJWFRPVVJMOiAn5byA5ZCvIGBwYXRoU3R5bGVBY2Nlc3NgIOaXtu+8jOaYr+WQpuimgeemgeeUqOacgOe7iOeUn+aIkFVSTOS4rea3u+WKoCBidWNrZXQg5YmN57yAJyxcbiAgUElDQkVEX0FXU1MzUExJU1RfTUVTU0FHRV9BQ0NFU1NLRVlJRDogJ+S+i+WmgjogQUtJQXh4eHh4eHh4eHh4eHgnLFxuICBQSUNCRURfQVdTUzNQTElTVF9NRVNTQUdFX1NFQ1JFVF9BQ0NFU1NLRVk6ICfkvovlpoI6IHh4eHh4eHh4eHgnLFxuICBQSUNCRURfQVdTUzNQTElTVF9NRVNTQUdFX0JVQ0tFVDogJ+S+i+WmgjogdGVzdCcsXG4gIFBJQ0JFRF9BV1NTM1BMSVNUX01FU1NBR0VfUkVHSU9OOiAn5L6L5aaCOiB1cy1lYXN0LTEnLFxuICBQSUNCRURfQVdTUzNQTElTVF9NRVNTQUdFX1VQTE9BRFBBVEg6ICfkvovlpoI6IHRlc3Qve2Z1bGxOYW1lfScsXG4gIFBJQ0JFRF9BV1NTM1BMSVNUX01FU1NBR0VfRU5EUE9JTlQ6ICfkvovlpoI6IGh0dHBzOi8vczMudXMtZWFzdC0xLmFtYXpvbmF3cy5jb20nLFxuICBQSUNCRURfQVdTUzNQTElTVF9NRVNTQUdFX1BST1hZOiAn5L6L5aaCOiBodHRwOi8vMTI3LjAuMC4xOjEwODAnLFxuICBQSUNCRURfQVdTUzNQTElTVF9NRVNTQUdFX1VSTFBSRUZJWDogJ+S+i+WmgjogaHR0cHM6Ly90ZXN0LmNvbScsXG4gIFBJQ0JFRF9BV1NTM1BMSVNUX01FU1NBR0VfUEFUSFNUWUxFQUNDRVNTOiAn6ZyA6KaB5pe25ZCv55SoJyxcbiAgUElDQkVEX0FXU1MzUExJU1RfTUVTU0FHRV9SRUpFQ1RVTkFVVEhPUklaRUQ6ICfpnIDopoHml7blkK/nlKgnLFxuICBQSUNCRURfQVdTUzNQTElTVF9NRVNTQUdFX0FDTDogJ+S+i+WmgjogcHVibGljLXJlYWQnLFxuICBQSUNCRURfQVdTUzNQTElTVF9NRVNTQUdFX0RJU0FCTEVCVUNLRVRQUkVGSVhUT1VSTDogJ+mcgOimgeaXtuWQr+eUqCcsXG5cbiAgQlVJTERJTl9XQVRFUk1BUks6ICfmsLTljbDorr7nva4nLFxuICBCVUlMRElOX1dBVEVSTUFSS19JU0FERFdBVEVSTUFSSzogJ+aYr+WQpua3u+WKoOawtOWNsCcsXG4gIEJVSUxESU5fV0FURVJNQVJLX01FU1NBR0VfSVNBRERXQVRFUk1BUks6ICfpnIDopoHmt7vliqDmsLTljbDml7blkK/nlKgnLFxuICBCVUlMRElOX1dBVEVSTUFSS19XQVRFUk1BUktUWVBFOiAn6K6+5a6a5rC05Y2w57G75Z6LJyxcbiAgQlVJTERJTl9XQVRFUk1BUktfTUVTU0FHRV9XQVRFUk1BUktUWVBFOiAn6K+36YCJ5oup5rC05Y2w57G75Z6LJyxcbiAgQlVJTERJTl9XQVRFUk1BUktfSVNGVUxMU0NSRUVOV0FURVJNQVJLOiAn5piv5ZCm5YWo5bGP5rC05Y2wJyxcbiAgQlVJTERJTl9XQVRFUk1BUktfTUVTU0FHRV9JU0ZVTExTQ1JFRU5XQVRFUk1BUks6ICfpnIDopoHlhajlsY/msLTljbDml7blkK/nlKgnLFxuICBCVUlMRElOX1dBVEVSTUFSS19XQVRFUk1BUktERUdSRUU6ICforr7lrprmsLTljbDop5LluqYnLFxuICBCVUlMRElOX1dBVEVSTUFSS19NRVNTQUdFX1dBVEVSTUFSS0RFR1JFRTogJ+ivt+i+k+WFpeaVsOWtlycsXG4gIEJVSUxESU5fV0FURVJNQVJLX1dBVEVSTUFSS1RFWFQ6ICforr7lrprmsLTljbDmloflrZcnLFxuICBCVUlMRElOX1dBVEVSTUFSS19NRVNTQUdFX1dBVEVSTUFSS1RFWFQ6ICfor7fovpPlhaXmsLTljbDmloflrZcnLFxuICBCVUlMRElOX1dBVEVSTUFSS19XQVRFUk1BUktGT05UUEFUSDogJ+iuvuWumuawtOWNsOWtl+S9k+aWh+S7tui3r+W+hCcsXG4gIEJVSUxESU5fV0FURVJNQVJLX01FU1NBR0VfV0FURVJNQVJLRk9OVFBBVEg6ICfor7fovpPlhaXmsLTljbDlrZfkvZPmlofku7bot6/lvoQnLFxuICBCVUlMRElOX1dBVEVSTUFSS19XQVRFUk1BUktTQ0FMRVJBVElPOiAn6K6+5a6a5rC05Y2w55u45a+55LqO5Zu+54mH55qE5q+U5L6LJyxcbiAgQlVJTERJTl9XQVRFUk1BUktfTUVTU0FHRV9XQVRFUk1BUktGT05UUkFUSU86ICfor7fovpPlhaUwLTHnmoTlsI/mlbAnLFxuICBCVUlMRElOX1dBVEVSTUFSS19XQVRFUk1BUktDT0xPUjogJ+iuvuWumuawtOWNsOWtl+S9k+minOiJsicsXG4gIEJVSUxESU5fV0FURVJNQVJLX01FU1NBR0VfV0FURVJNQVJLRk9OVENPTE9SOiAn6K+36L6T5YWlcmdi6aKc6Imy5YC8JyxcbiAgQlVJTERJTl9XQVRFUk1BUktfV0FURVJNQVJLSU1BR0VQQVRIOiAn6K6+5a6a5rC05Y2w5Zu+54mH6Lev5b6EJyxcbiAgQlVJTERJTl9XQVRFUk1BUktfTUVTU0FHRV9XQVRFUk1BUktJTUFHRVBBVEg6ICfor7fovpPlhaXmsLTljbDlm77niYfot6/lvoQnLFxuICBCVUlMRElOX1dBVEVSTUFSS19XQVRFUk1BUktQT1NJVElPTjogJ+iuvuWumuawtOWNsOS9jee9ricsXG4gIEJVSUxESU5fV0FURVJNQVJLX01FU1NBR0VfV0FURVJNQVJLUE9TSVRJT046ICfor7fpgInmi6nmsLTljbDkvY3nva4nLFxuXG4gIEJVSUxESU5fU0tJUFBST0NFU1M6ICfot7Pov4flpITnkIborr7nva4nLFxuICBCVUlMRElOX1NLSVBQUk9DRVNTX1NLSVBQUk9DRVNTRVhUTElTVDogJ+iuvuWumui3s+i/h+WkhOeQhueahOaWh+S7tuWQjue8gOWIl+ihqCcsXG5cbiAgQlVJTERJTl9SRU5BTUU6ICfph43lkb3lkI3orr7nva4nLFxuICBCVUlMRElOX1JFTkFNRV9GT1JNQVQ6ICforr7lrprph43lkb3lkI3moLzlvI8nLFxuICBCVUlMRElOX1JFTkFNRV9FTkFCTEU6ICfmmK/lkKblkK/nlKjph43lkb3lkI0nLFxuXG4gIEJVSUxESU5fQ09NUFJFU1M6ICflm77niYflpITnkIYnLFxuICBCVUlMRElOX0NPTVBSRVNTX1FVQUxJVFk6ICforr7lrprlm77niYfotKjph48nLFxuICBCVUlMRElOX0NPTVBSRVNTX01FU1NBR0VfUVVBTElUWTogJ+ivt+i+k+WFpTEtMTAw55qE5pW05pWwJyxcbiAgQlVJTERJTl9DT01QUkVTU19JU0NPTlZFUlQ6ICfmmK/lkKbov5vooYzmoLzlvI/ovazmjaInLFxuICBCVUlMRElOX0NPTVBSRVNTX01FU1NBR0VfSVNDT05WRVJUOiAn6ZyA6KaB6L2s5o2i5pe25ZCv55SoJyxcbiAgQlVJTERJTl9DT01QUkVTU19DT05WRVJURk9STUFUOiAn6K6+5a6a6L2s5o2i5qC85byPJyxcbiAgQlVJTERJTl9DT01QUkVTU19NRVNTQUdFX0NPTlZFUlRGT1JNQVQ6ICfor7fpgInmi6novazmjaLmoLzlvI8nLFxuICBCVUlMRElOX0NPTVBSRVNTX0lTUkVTSVpFOiAn5piv5ZCm6L+b6KGM5Zu+54mH57yp5pS+JyxcbiAgQlVJTERJTl9DT01QUkVTU19NRVNTQUdFX0lTUkVTSVpFOiAn6ZyA6KaB57yp5pS+5pe25ZCv55SoJyxcbiAgQlVJTERJTl9DT01QUkVTU19SRVNJWkVXSURUSDogJ+iuvuWumue8qeaUvuWuveW6picsXG4gIEJVSUxESU5fQ09NUFJFU1NfTUVTU0FHRV9SRVNJWkVXSURUSDogJ+ivt+i+k+WFpeaVsOWtlycsXG4gIEJVSUxESU5fQ09NUFJFU1NfUkVTSVpFSEVJR0hUOiAn6K6+5a6a57yp5pS+6auY5bqmJyxcbiAgQlVJTERJTl9DT01QUkVTU19NRVNTQUdFX1JFU0laRUhFSUdIVDogJ+ivt+i+k+WFpeaVsOWtlycsXG4gIEJVSUxESU5fQ09NUFJFU1NfSVNSRVNJWkVCWVBFUkNFTlQ6ICfmmK/lkKbmjInnmb7liIbmr5Tov5vooYznvKnmlL4nLFxuICBCVUlMRElOX0NPTVBSRVNTX01FU1NBR0VfSVNSRVNJWkVCWVBFUkNFTlQ6ICfpnIDopoHmjInnmb7liIbmr5TnvKnmlL7ml7blkK/nlKgnLFxuICBCVUlMRElOX0NPTVBSRVNTX0lTRkxJUDogJ+aYr+WQpuWeguebtOe/u+i9rOWbvueJhycsXG4gIEJVSUxESU5fQ09NUFJFU1NfSVNGTE9QOiAn5piv5ZCm5rC05bmz57+76L2s5Zu+54mHJyxcbiAgQlVJTERJTl9DT01QUkVTU19SRVNJWkVQRVJDRU5UOiAn6K6+5a6a57yp5pS+55m+5YiG5q+UJyxcbiAgQlVJTERJTl9DT01QUkVTU19NRVNTQUdFX1JFU0laRVBFUkNFTlQ6ICfor7fovpPlhaXmlbDlrZcnLFxuICBCVUlMRElOX0NPTVBSRVNTX1NLSVBSRVNJWkVPRlNNQUxMSU1HOiAn5piv5ZCm6Lez6L+H5bCP5Zu+57yp5pS+JyxcbiAgQlVJTERJTl9DT01QUkVTU19JU1JPVEFURTogJ+aYr+WQpui/m+ihjOWbvueJh+aXi+i9rCcsXG4gIEJVSUxESU5fQ09NUFJFU1NfTUVTU0FHRV9JU1JPVEFURTogJ+mcgOimgeaXi+i9rOaXtuWQr+eUqCcsXG4gIEJVSUxESU5fQ09NUFJFU1NfUk9UQVRFREVHUkVFOiAn6K6+5a6a5peL6L2s6KeS5bqmJyxcbiAgQlVJTERJTl9DT01QUkVTU19NRVNTQUdFX1JPVEFURURFR1JFRTogJ+ivt+i+k+WFpeaVsOWtl++8jOWPr+S4uui0n+aVsCcsXG4gIEJVSUxESU5fQ09NUFJFU1NfSVNSRU1PVkVFWElGOiAn5piv5ZCm56e76ZmkRVhJRuS/oeaBrycsXG4gIEJVSUxESU5fQ09NUFJFU1NfTUVTU0FHRV9JU1JFTU9WRUVYSUY6ICfpnIDopoHnp7vpmaRFWElG5L+h5oGv5pe25ZCv55SoJyxcblxuICAvLyBQbHVnaW4gSGFuZGxlclxuICBQTFVHSU5fSEFORExFUl9QTFVHSU5fSU5TVEFMTF9TVUNDRVNTOiAn5o+S5Lu25a6J6KOF5oiQ5YqfJyxcbiAgUExVR0lOX0hBTkRMRVJfUExVR0lOX0lOU1RBTExfRkFJTEVEOiAn5o+S5Lu25a6J6KOF5aSx6LSlJyxcbiAgUExVR0lOX0hBTkRMRVJfUExVR0lOX0lOU1RBTExfRkFJTEVEX1JFQVNPTjogJ+aPkuS7tuWuieijheWksei0pe+8jOWksei0peeggeS4uiR7Y29kZX3vvIzplJnor6/ml6Xlv5fkuLogXFxuICR7ZGF0YX0nLFxuICBQTFVHSU5fSEFORExFUl9QTFVHSU5fSU5TVEFMTF9GQUlMRURfUEFUSDogJ+aPkuS7tuWuieijheWksei0pe+8jOivt+i+k+WFpeWQiOazleaPkuS7tuWQjeaIluWQiOazleWuieijhei3r+W+hCcsXG4gIFBMVUdJTl9IQU5ETEVSX1BMVUdJTl9VTklOU1RBTExfU1VDQ0VTUzogJ+aPkuS7tuWNuOi9veaIkOWKnycsXG4gIFBMVUdJTl9IQU5ETEVSX1BMVUdJTl9VTklOU1RBTExfRkFJTEVEOiAn5o+S5Lu25Y246L295aSx6LSlJyxcbiAgUExVR0lOX0hBTkRMRVJfUExVR0lOX1VOSU5TVEFMTF9GQUlMRURfUkVBU09OOiAn5o+S5Lu25Y246L295aSx6LSl77yM5aSx6LSl56CB5Li6JHtjb2Rlfe+8jOmUmeivr+aXpeW/l+S4uiBcXG4gJHtkYXRhfScsXG4gIFBMVUdJTl9IQU5ETEVSX1BMVUdJTl9VTklOU1RBTExfRkFJTEVEX1ZBTElEOiAn5o+S5Lu25Y246L295aSx6LSl77yM6K+36L6T5YWl5ZCI5rOV5o+S5Lu25ZCNJyxcbiAgUExVR0lOX0hBTkRMRVJfUExVR0lOX1VQREFURV9TVUNDRVNTOiAn5o+S5Lu25pu05paw5oiQ5YqfJyxcbiAgUExVR0lOX0hBTkRMRVJfUExVR0lOX1VQREFURV9GQUlMRUQ6ICfmj5Lku7bmm7TmlrDlpLHotKUnLFxuICBQTFVHSU5fSEFORExFUl9QTFVHSU5fVVBEQVRFX0ZBSUxFRF9SRUFTT046ICfmj5Lku7bmm7TmlrDlpLHotKXvvIzlpLHotKXnoIHkuLoke2NvZGV977yM6ZSZ6K+v5pel5b+X5Li6IFxcbiAke2RhdGF9JyxcbiAgUExVR0lOX0hBTkRMRVJfUExVR0lOX1VQREFURV9GQUlMRURfVkFMSUQ6ICfmj5Lku7bmm7TmlrDlpLHotKXvvIzor7fovpPlhaXlkIjms5Xmj5Lku7blkI0nXG59XG5cbmV4cG9ydCB0eXBlIElMb2NhbGVzS2V5ID0ga2V5b2YgdHlwZW9mIFpIX0NOXG5leHBvcnQgdHlwZSBJTG9jYWxlcyA9IHR5cGVvZiBaSF9DTlxuIiwiaW1wb3J0IHsgWkhfQ04sIElMb2NhbGVzS2V5LCBJTG9jYWxlcyB9IGZyb20gJy4vemgtQ04nXG5pbXBvcnQgeyBtZXJnZSB9IGZyb20gJ2xvZGFzaCdcbmltcG9ydCB7IElQaWNHbywgSVN0cmluZ0tleU1hcCwgSUkxOG5NYW5hZ2VyIH0gZnJvbSAnLi4vdHlwZXMnXG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJ1xuaW1wb3J0IGZzLCB7IHBhdGhFeGlzdHNTeW5jLCBlbnN1cmVEaXJTeW5jIH0gZnJvbSAnZnMtZXh0cmEnXG5pbXBvcnQgeWFtbCBmcm9tICdqcy15YW1sJ1xuXG5pbXBvcnQgeyBPYmplY3RBZGFwdGVyLCBJMThuIH0gZnJvbSAnQHBpY2dvL2kxOG4nXG5cbmltcG9ydCB7IElMb2NhbGUgfSBmcm9tICdAcGljZ28vaTE4bi9kaXN0L3R5cGVzJ1xuaW1wb3J0IHsgRU4gfSBmcm9tICcuL2VuJ1xuaW1wb3J0IHsgWkhfVFcgfSBmcm9tICcuL3poLVRXJ1xuXG5jb25zdCBsYW5ndWFnZUxpc3Q6IElTdHJpbmdLZXlNYXA8SVN0cmluZ0tleU1hcDxzdHJpbmc+PiA9IHtcbiAgJ3poLUNOJzogWkhfQ04sXG4gICd6aC1UVyc6IFpIX1RXLFxuICBlbjogRU5cbn1cblxuY2xhc3MgSTE4bk1hbmFnZXIgaW1wbGVtZW50cyBJSTE4bk1hbmFnZXIge1xuICBwcml2YXRlIHJlYWRvbmx5IGkxOG46IEkxOG5cbiAgcHJpdmF0ZSByZWFkb25seSBvYmplY3RBZGFwdGVyOiBPYmplY3RBZGFwdGVyXG4gIHByaXZhdGUgcmVhZG9ubHkgY3R4OiBJUGljR29cbiAgY29uc3RydWN0b3IoY3R4OiBJUGljR28pIHtcbiAgICB0aGlzLmN0eCA9IGN0eFxuICAgIHRoaXMub2JqZWN0QWRhcHRlciA9IG5ldyBPYmplY3RBZGFwdGVyKGxhbmd1YWdlTGlzdClcbiAgICBsZXQgbGFuZ3VhZ2UgPSB0aGlzLmN0eC5nZXRDb25maWc8c3RyaW5nPignc2V0dGluZ3MubGFuZ3VhZ2UnKSB8fCAnemgtQ04nXG4gICAgaWYgKCFsYW5ndWFnZUxpc3RbbGFuZ3VhZ2VdKSB7XG4gICAgICBsYW5ndWFnZSA9ICd6aC1DTicgLy8gdXNlIGRlZmF1bHRcbiAgICB9XG4gICAgdGhpcy5pMThuID0gbmV3IEkxOG4oe1xuICAgICAgYWRhcHRlcjogdGhpcy5vYmplY3RBZGFwdGVyLFxuICAgICAgZGVmYXVsdExhbmd1YWdlOiBsYW5ndWFnZVxuICAgIH0pXG4gICAgdGhpcy5sb2FkT3V0dGVySTE4bigpXG4gIH1cblxuICBwcml2YXRlIGxvYWRPdXR0ZXJJMThuKCk6IHZvaWQge1xuICAgIGNvbnN0IGkxOG5Gb2xkZXIgPSB0aGlzLmdldE91dHRlckkxOG5Gb2xkZXIoKVxuICAgIGNvbnN0IGZpbGVzID0gZnMucmVhZGRpclN5bmMoaTE4bkZvbGRlciwge1xuICAgICAgd2l0aEZpbGVUeXBlczogdHJ1ZVxuICAgIH0pXG4gICAgZmlsZXMuZm9yRWFjaChmaWxlID0+IHtcbiAgICAgIGlmIChmaWxlLmlzRmlsZSgpICYmIGZpbGUubmFtZS5lbmRzV2l0aCgnLnltbCcpKSB7XG4gICAgICAgIGNvbnN0IGkxOG5GaWxlUGF0aCA9IHBhdGguam9pbihpMThuRm9sZGVyLCBmaWxlLm5hbWUpXG4gICAgICAgIGNvbnN0IGkxOG5GaWxlID0gZnMucmVhZEZpbGVTeW5jKGkxOG5GaWxlUGF0aCwgJ3V0ZjgnKVxuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IGkxOG5GaWxlT2JqID0geWFtbC5sb2FkKGkxOG5GaWxlKSBhcyBJTG9jYWxlc1xuICAgICAgICAgIGxhbmd1YWdlTGlzdFtmaWxlLm5hbWUucmVwbGFjZSgvXFwueW1sJC8sICcnKV0gPSBpMThuRmlsZU9ialxuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihlKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIHByaXZhdGUgZ2V0T3V0dGVySTE4bkZvbGRlcigpOiBzdHJpbmcge1xuICAgIGNvbnN0IGkxOG5Gb2xkZXIgPSBwYXRoLmpvaW4odGhpcy5jdHguYmFzZURpciwgJ2kxOG4tY2xpJylcbiAgICBpZiAoIXBhdGhFeGlzdHNTeW5jKGkxOG5Gb2xkZXIpKSB7XG4gICAgICBlbnN1cmVEaXJTeW5jKGkxOG5Gb2xkZXIpXG4gICAgfVxuICAgIHJldHVybiBpMThuRm9sZGVyXG4gIH1cblxuICB0cmFuc2xhdGU8VCBleHRlbmRzIHN0cmluZz4oa2V5OiBJTG9jYWxlc0tleSB8IFQsIGFyZ3M/OiBJU3RyaW5nS2V5TWFwPHN0cmluZz4pOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmkxOG4udHJhbnNsYXRlKGtleSwgYXJncykgfHwga2V5XG4gIH1cblxuICBzZXRMYW5ndWFnZShsYW5ndWFnZTogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5pMThuLnNldExhbmd1YWdlKGxhbmd1YWdlKVxuICAgIHRoaXMuY3R4LnNhdmVDb25maWcoe1xuICAgICAgJ3NldHRpbmdzLmxhbmd1YWdlJzogbGFuZ3VhZ2VcbiAgICB9KVxuICB9XG5cbiAgYWRkTG9jYWxlKGxhbmd1YWdlOiBzdHJpbmcsIGxvY2FsZXM6IElMb2NhbGUpOiBib29sZWFuIHtcbiAgICBjb25zdCBvcmlnaW5Mb2NhbGVzID0gdGhpcy5vYmplY3RBZGFwdGVyLmdldExvY2FsZShsYW5ndWFnZSlcbiAgICBpZiAoIW9yaWdpbkxvY2FsZXMpIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cbiAgICBjb25zdCBuZXdMb2NhbGVzID0gbWVyZ2Uob3JpZ2luTG9jYWxlcywgbG9jYWxlcylcbiAgICB0aGlzLm9iamVjdEFkYXB0ZXIuc2V0TG9jYWxlKGxhbmd1YWdlLCBuZXdMb2NhbGVzKVxuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICBhZGRMYW5ndWFnZShsYW5ndWFnZTogc3RyaW5nLCBsb2NhbGVzOiBJTG9jYWxlKTogYm9vbGVhbiB7XG4gICAgY29uc3Qgb3JpZ2luTG9jYWxlcyA9IHRoaXMub2JqZWN0QWRhcHRlci5nZXRMb2NhbGUobGFuZ3VhZ2UpXG4gICAgaWYgKG9yaWdpbkxvY2FsZXMpIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cbiAgICB0aGlzLm9iamVjdEFkYXB0ZXIuc2V0TG9jYWxlKGxhbmd1YWdlLCBsb2NhbGVzKVxuICAgIGxhbmd1YWdlTGlzdFtsYW5ndWFnZV0gPSBsb2NhbGVzXG4gICAgcmV0dXJuIHRydWVcbiAgfVxuXG4gIGdldExhbmd1YWdlTGlzdCgpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKGxhbmd1YWdlTGlzdClcbiAgfVxufVxuXG5leHBvcnQgeyBJMThuTWFuYWdlciB9XG4iLCJpbXBvcnQgeyBJTG9jYWxlcyB9IGZyb20gJy4vemgtQ04nXG5cbi8qIGVzbGludC1kaXNhYmxlIG5vLXRlbXBsYXRlLWN1cmx5LWluLXN0cmluZyAqL1xuZXhwb3J0IGNvbnN0IFpIX1RXOiBJTG9jYWxlcyA9IHtcbiAgVVBMT0FEX0ZBSUxFRDogJ+S4iuWCs+WkseaVlycsXG4gIENIRUNLX1NFVFRJTkdTOiAn6KuL5qqi5p+l5L2g55qE6Kit5a6a5piv5ZCm5q2j56K6JyxcbiAgQ0hFQ0tfU0VUVElOR1NfQU5EX05FVFdPUks6ICfoq4vmqqLmn6XkvaDnmoToqK3lrprlj4rntrLot68nLFxuICBVUExPQURfRkFJTEVEX1JFQVNPTjogJ+mMr+iqpOeivDogJHtjb2Rlfe+8jOiri+aJk+mWi+eAj+imveWZqOiyvOS4iuWcsOWdgOafpeeci+ebuOmXnOWOn+WboCcsXG4gIFNFUlZFUl9FUlJPUjogJ+S8uuacjeWZqOWHuumMr++8jOiri+mHjeippicsXG4gIEFVVEhfRkFJTEVEOiAn6KqN6K2J5aSx5pWXJyxcblxuICAvLyBzbW1zXG4gIFBJQ0JFRF9TTU1TOiAnU00uTVMnLFxuICBQSUNCRURfU01NU19UT0tFTjogJ+ioreWumlRva2VuJyxcbiAgUElDQkVEX1NNTVNfTUVTU0FHRV9UT0tFTjogJ+iri+i8uOWFpVRva2VuJyxcbiAgUElDQkVEX1NNTVNfQkFDS1VQRE9NQUlOOiAn5YKZ55So5LiK5YKz57ay5Z2AJyxcbiAgUElDQkVEX1NNTVNfTUVTU0FHRV9CQUNLVVBfRE9NQUlOOiAn5L6L5aaCIHNtbXMuYXBwJyxcblxuICAvL2FkdmFuY2VkcGxpc3RcbiAgUElDQkVEX0FEVkFOQ0VEUExJU1Q6ICfpq5jntJroh6rlrprnvqknLFxuICBQSUNCRURfQURWQU5DRURQTElTVF9FTkRQT0lOVDogJ+ioreWumkFQSeS4u+apnycsXG4gIFBJQ0JFRF9BRFZBTkNFRFBMSVNUX01FU1NBR0VfRU5EUE9JTlQ6ICfkvovlpoI6IGh0dHBzOi8vZXhhbXBsZS5jb20vdXBsb2FkJyxcbiAgUElDQkVEX0FEVkFOQ0VEUExJU1RfTUVUSE9EOiAn6Kit5a6a6KuL5rGC5pa55rOVJyxcbiAgUElDQkVEX0FEVkFOQ0VEUExJU1RfTUVTU0FHRV9NRVRIT0Q6ICfoq4vpgbjmk4foq4vmsYLmlrnms5UnLFxuICBQSUNCRURfQURWQU5DRURQTElTVF9GT1JNREFUQUtFWTogJ+ioreWumuihqOWWrktleScsXG4gIFBJQ0JFRF9BRFZBTkNFRFBMSVNUX01FU1NBR0VfRk9STURBVEFLRVk6ICfkvovlpoI6IGZpbGUnLFxuICBQSUNCRURfQURWQU5DRURQTElTVF9IRUFERVJTOiAn6Kit5a6a6KuL5rGC6aCtJyxcbiAgUElDQkVEX0FEVkFOQ0VEUExJU1RfTUVTU0FHRV9IRUFERVJTOiAn5L6L5aaCOiB7XCJDb250ZW50LVR5cGVcIjogXCJtdWx0aXBhcnQvZm9ybS1kYXRhXCJ9JyxcbiAgUElDQkVEX0FEVkFOQ0VEUExJU1RfQk9EWTogJ+ioreWumuiri+axgumrlCcsXG4gIFBJQ0JFRF9BRFZBTkNFRFBMSVNUX01FU1NBR0VfQk9EWTogJ+S+i+Wmgjoge1wia2V5XCI6IFwidmFsdWVcIn0nLFxuICBQSUNCRURfQURWQU5DRURQTElTVF9DVVNUT01QUkVGSVg6ICfoqK3lrproh6rlrprnvqnliY3ntrQnLFxuICBQSUNCRURfQURWQU5DRURQTElTVF9NRVNTQUdFX0NVU1RPTVBSRUZJWDogJ+S+i+WmgjogaHR0cHM6Ly9leGFtcGxlLmNvbS8nLFxuICBQSUNCRURfQURWQU5DRURQTElTVF9XRUJQQVRIOiAn6Kit5a6a57ay56uZ6Lev5b6RJyxcbiAgUElDQkVEX0FEVkFOQ0VEUExJU1RfTUVTU0FHRV9XRUJQQVRIOiAn55So5pa857ay6aCB6aGv56S655qE6Lev5b6RJyxcbiAgUElDQkVEX0FEVkFOQ0VEUExJU1RfUkVTREFUQVBBVEg6ICfoqK3lrprov5Tlm57mlbjmk5rot6/lvpEnLFxuICBQSUNCRURfQURWQU5DRURQTElTVF9NRVNTQUdFX1JFU0RBVEFQQVRIOiAn5L6L5aaCOiBkYXRhLnVybCcsXG5cbiAgLy8gbG9jYWxcbiAgUElDQkVEX0xPQ0FMOiAn5pys5ZywJyxcbiAgUElDQkVEX0xPQ0FMX1BBVEg6ICfoqK3lrprlhLLlrZjot6/lvpEnLFxuICBQSUNCRURfTE9DQUxfTUVTU0FHRV9QQVRIOiAn5L6L5aaCIC91c3IvbG9jYWwvaW1hZ2VzLycsXG4gIFBJQ0JFRF9MT0NBTF9DVVNUT01VUkw6ICfoqK3lrproh6roqILntrLlnYAnLFxuICBQSUNCRURfTE9DQUxfTUVTU0FHRV9DVVNUT01VUkw6ICfkvovlpoIgaHR0cHM6Ly90ZXN0LmNvbScsXG4gIFBJQ0JFRF9MT0NBTF9XRUJQQVRIOiAn6Kit5a6a57ay5Z2A6Lev5b6RJyxcbiAgUElDQkVEX0xPQ0FMX01FU1NBR0VfV0VCUEFUSDogJ+eUqOaWvOe2sumggemhr+ekuueahOi3r+W+kScsXG5cbiAgLy8gYWxpc3RcbiAgUElDQkVEX0FMSVNUX1BMSVNUOiAnQUxpc3QnLFxuICBQSUNCRURfQUxJU1RfVVJMOiAn6Kit5a6aVVJMJyxcbiAgUElDQkVEX0FMSVNUX01FU1NBR0VfVVJMOiAn5L6L5aaCOiBodHRwczovL2FsaXN0LmV4YW1wbGUuY29tJyxcbiAgUElDQkVEX0FMSVNUX1RPS0VOOiAn6Kit5a6aVG9rZW4nLFxuICBQSUNCRURfQUxJU1RfTUVTU0FHRV9UT0tFTjogJ+iri+i8uOWFpVRva2VuKOiIh+eUqOaItuWQjS3lr4bnorzkuozpgbjkuIApJyxcbiAgUElDQkVEX0FMSVNUX1VTRVJOQU1FOiAn6Kit5a6a55So5oi25ZCNJyxcbiAgUElDQkVEX0FMSVNUX01FU1NBR0VfVVNFUk5BTUU6ICfoq4vovLjlhaXnlKjmiLblkI0o6IiHVG9rZW7kuozpgbjkuIApJyxcbiAgUElDQkVEX0FMSVNUX1BBU1NXT1JEOiAn6Kit5a6a5a+G56K8JyxcbiAgUElDQkVEX0FMSVNUX01FU1NBR0VfUEFTU1dPUkQ6ICfoq4vovLjlhaXlr4bnorwnLFxuICBQSUNCRURfQUxJU1RfVVBMT0FEUEFUSDogJ+ioreWumuS4iuWCs+i3r+W+kScsXG4gIFBJQ0JFRF9BTElTVF9NRVNTQUdFX1VQTE9BRF9QQVRIOiAn5L6L5aaCOiAvdGVzdCcsXG4gIFBJQ0JFRF9BTElTVF9XRUJQQVRIOiAn6Kit5a6a57ay5Z2A6Lev5b6RJyxcbiAgUElDQkVEX0FMSVNUX01FU1NBR0VfV0VCX1BBVEg6ICfnlKjmlrzntrLpoIHpoa/npLrnmoTot6/lvpEnLFxuICBQSUNCRURfQUxJU1RfQ1VTVE9NVVJMOiAn6Kit5a6a6Ieq6KiC57ay5Z2AJyxcbiAgUElDQkVEX0FMSVNUX01FU1NBR0VfQ1VTVE9NVVJMOiAn5L6L5aaCOiBodHRwczovL3Rlc3QuY29tJyxcblxuICAvLyBBbGktY2xvdWRcbiAgUElDQkVEX0FMSUNMT1VEOiAn6Zi/6YeM6ZuyT1NTJyxcbiAgUElDQkVEX0FMSUNMT1VEX0FDQ0VTU0tFWUlEOiAn6Kit5a6aYWNjZXNzS2V5SWQnLFxuICBQSUNCRURfQUxJQ0xPVURfQUNDRVNTS0VZU0VDUkVUOiAn6Kit5a6aYWNjZXNzS2V5U2VjcmV0JyxcbiAgUElDQkVEX0FMSUNMT1VEX0JVQ0tFVDogJ+ioreWumkJ1Y2tldCcsXG4gIFBJQ0JFRF9BTElDTE9VRF9BUkVBOiAn6Kit5a6a5YSy5a2Y5Y2A5Z+fJyxcbiAgUElDQkVEX0FMSUNMT1VEX1BBVEg6ICfoqK3lrprlhLLlrZjot6/lvpEnLFxuICBQSUNCRURfQUxJQ0xPVURfV0VCUEFUSDogJ+ioreWumue2suWdgOi3r+W+kScsXG4gIFBJQ0JFRF9BTElDTE9VRF9DVVNUT01VUkw6ICfoqK3lrproh6roqILntrLlnYAnLFxuICBQSUNCRURfQUxJQ0xPVURfT1BUSU9OUzogJ+ioreWumue2suWdgOW+jOe2tCcsXG4gIFBJQ0JFRF9BTElDTE9VRF9NRVNTQUdFX0FSRUE6ICfkvovlpoI6IG9zcy1jbi1iZWlqaW5nJyxcbiAgUElDQkVEX0FMSUNMT1VEX01FU1NBR0VfUEFUSDogJ+S+i+WmgjogdGVzdC8nLFxuICBQSUNCRURfQUxJQ0xPVURfTUVTU0FHRV9XRUJQQVRIOiAn55So5pa857ay6aCB6aGv56S655qE6Lev5b6RJyxcbiAgUElDQkVEX0FMSUNMT1VEX01FU1NBR0VfT1BUSU9OUzogJ+S+i+WmgjogP3gtb3NzLXByb2Nlc3M9eHh4JyxcbiAgUElDQkVEX0FMSUNMT1VEX01FU1NBR0VfQ1VTVE9NVVJMOiAn5L6L5aaCOiBodHRwczovL3Rlc3QuY29tJyxcblxuICAvLyBUZW5jZW50LWNsb3VkXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVUQ6ICfpqLDoqIrpm7JDT1MnLFxuICBQSUNCRURfVEVOQ0VOVENMT1VEX1ZFUlNJT046ICdDT1PniYjmnKwnLFxuICBQSUNCRURfVEVOQ0VOVENMT1VEX1NFQ1JFVElEOiAn6Kit5a6aU2VjcmV0SWQnLFxuICBQSUNCRURfVEVOQ0VOVENMT1VEX1NFQ1JFVEtFWTogJ+ioreWumlNlY3JldEtleScsXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfQVBQSUQ6ICfoqK3lrppBcHBJZCcsXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfQlVDS0VUOiAn6Kit5a6aQnVja2V0JyxcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9BUkVBOiAn6Kit5a6a5YSy5a2Y5Y2A5Z+fJyxcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9FTkRQT0lOVDogJ+ioreWumuaOpeWFpem7nicsXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfUEFUSDogJ+ioreWumuWEsuWtmOi3r+W+kScsXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfV0VCUEFUSDogJ+ioreWumue2suWdgOi3r+W+kScsXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfT1BUSU9OUzogJ+ioreWumue2suWdgOW+jOe2tCcsXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfQ1VTVE9NVVJMOiAn6Kit5a6a6Ieq6KiC57ay5Z2AJyxcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9NRVNTQUdFX0FQUElEOiAn5L6L5aaCOiAxMjM0NTY3ODkwJyxcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9NRVNTQUdFX0FSRUE6ICfkvovlpoI6IGFwLWJlaWppbmcnLFxuICBQSUNCRURfVEVOQ0VOVENMT1VEX01FU1NBR0VfUEFUSDogJ+S+i+WmgjogdGVzdC8nLFxuICBQSUNCRURfVEVOQ0VOVENMT1VEX01FU1NBR0VfV0VCUEFUSDogJ+S+i+WmgjogL3Vzci9sb2NhbC9pbWFnZXMvJyxcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9NRVNTQUdFX0NVU1RPTVVSTDogJ+S+i+WmgjogaHR0cHM6Ly90ZXN0LmNvbScsXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfTUVTU0FHRV9PUFRJT05TOiAn5L6L5aaCOiA/aW1hZ2VNb2dyMicsXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfTUVTU0FHRV9FTkRQT0lOVDogJ+S+i+WmgjogY29zLWludGVybmFsLmFjY2VsZXJhdGUudGVuY2VudGNvcy5jbicsXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfU0xJTTogJ+alteaZuuWjk+e4ricsXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfU0xJTV9DQU5DRUw6ICfpl5zploknLFxuICBQSUNCRURfVEVOQ0VOVENMT1VEX1NMSU1fQ09ORklSTTogJ+mWi+WVnycsXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfU0xJTV9USVA6XG4gICAgJ+WclueJh+alteaZuuWjk+e4ru+8jOips+aDheiri+WPg+iAg1vmlofmqpToqqrmmI5dKGh0dHBzOi8vY2xvdWQudGVuY2VudC5jb20vZG9jdW1lbnQvcHJvZHVjdC80MzYvNDkyNTkpJyxcblxuICAvLyBHaXRIdWJcbiAgUElDQkVEX0dJVEhVQjogJ0dpdEh1YicsXG4gIFBJQ0JFRF9HSVRIVUJfVE9LRU46ICfoqK3lrppUb2tlbicsXG4gIFBJQ0JFRF9HSVRIVUJfUkVQTzogJ+ioreWumuWAieW6q+WQjeeosScsXG4gIFBJQ0JFRF9HSVRIVUJfUEFUSDogJ+ioreWumuWEsuWtmOi3r+W+kScsXG4gIFBJQ0JFRF9HSVRIVUJfQlJBTkNIOiAn6Kit5a6a5YiG5pSv5ZCN56ixJyxcbiAgUElDQkVEX0dJVEhVQl9DVVNUT01VUkw6ICfoqK3lrproh6roqILntrLlnYAnLFxuICBQSUNCRURfR0lUSFVCX01FU1NBR0VfUkVQTzogJ+agvOW8jzogdXNlcm5hbWUvcmVwbycsXG4gIFBJQ0JFRF9HSVRIVUJfTUVTU0FHRV9CUkFOQ0g6ICfkvovlpoI6IG1haW4nLFxuICBQSUNCRURfR0lUSFVCX01FU1NBR0VfUEFUSDogJ+S+i+WmgjogdGVzdC8nLFxuICBQSUNCRURfR0lUSFVCX01FU1NBR0VfQ1VTVE9NVVJMOiAn5L6L5aaCOiBodHRwczovL3Rlc3QuY29tJyxcblxuICAvLyBxaW5pdVxuICBQSUNCRURfUUlOSVU6ICfkuIPniZvpm7InLFxuICBQSUNCRURfUUlOSVVfQUNDRVNTS0VZOiAn6Kit5a6aQWNjZXNzS2V5JyxcbiAgUElDQkVEX1FJTklVX1NFQ1JFVEtFWTogJ+ioreWumlNlY3JldEtleScsXG4gIFBJQ0JFRF9RSU5JVV9CVUNLRVQ6ICfoqK3lrppCdWNrZXQnLFxuICBQSUNCRURfUUlOSVVfUEFUSDogJ+ioreWumuWEsuWtmOi3r+W+kScsXG4gIFBJQ0JFRF9RSU5JVV9VUkw6ICfoqK3lrproqKrllY/ntrLlnYAnLFxuICBQSUNCRURfUUlOSVVfT1BUSU9OUzogJ+ioreWumue2suWdgOW+jOe2tCcsXG4gIFBJQ0JFRF9RSU5JVV9BUkVBOiAn6Kit5a6a5YSy5a2Y5Y2A5Z+fJyxcbiAgUElDQkVEX1FJTklVX01FU1NBR0VfUEFUSDogJ+S+i+WmgjogdGVzdC8nLFxuICBQSUNCRURfUUlOSVVfTUVTU0FHRV9BUkVBOiAn5L6L5aaCOiB6MCcsXG4gIFBJQ0JFRF9RSU5JVV9NRVNTQUdFX09QVElPTlM6ICfkvovlpoI6ID9pbWFnZXNsaW0nLFxuICBQSUNCRURfUUlOSVVfTUVTU0FHRV9VUkw6ICfkvovlpoI6IGh0dHBzOi8veHh4Lnl5eS5nbGIuY2xvdWRkbi5jb20nLFxuXG4gIC8vIGltZ3VyXG4gIFBJQ0JFRF9JTUdVUjogJ0ltZ3VyJyxcbiAgUElDQkVEX0lNR1VSX0NMSUVOVElEOiAn6Kit5a6aQ2xpZW50SWQnLFxuICBQSUNCRURfSU1HVVJfVVNFUk5BTUU6ICfoqK3lrprnlKjmiLblkI0nLFxuICBQSUNCRURfSU1HVVJfQUNDRVNTX1RPS0VOOiAn6Kit5a6aYWNjZXNzVG9rZW4nLFxuICBQSUNCRURfSU1HVVJfQUxCVU06ICfoqK3lrprnm7jnsL/lkI0nLFxuICBQSUNCRURfSU1HVVJfUFJPWFk6ICfoqK3lrppQUk9YWScsXG4gIFBJQ0JFRF9JTUdVUl9NRVNTQUdFX0NMSUVOVElEOiAn5Yy/5ZCN5LiK5YKz5pmC5aGr5a+rJyxcbiAgUElDQkVEX0lNR1VSX01FU1NBR0VfVVNFUk5BTUU6ICfpnIDopoHkuIrlgrPliLDos6zmiLbmmYLloavlr6snLFxuICBQSUNCRURfSU1HVVJfTUVTU0FHRV9BQ0NFU1NfVE9LRU46ICfpnIDopoHkuIrlgrPliLDos6zmiLbmmYLloavlr6snLFxuICBQSUNCRURfSU1HVVJfTUVTU0FHRV9BTEJVTTogJ+S+i+WmgjogdGVzdCcsXG4gIFBJQ0JFRF9JTUdVUl9NRVNTQUdFX1BST1hZOiAn5L6L5aaCOiBodHRwOi8vMTI3LjAuMC4xOjEwODAnLFxuXG4gIC8vIHVweXVuXG4gIFBJQ0JFRF9VUFlVTjogJ+WPiOaLjembsicsXG4gIFBJQ0JFRF9VUFlVTl9CVUNLRVQ6ICfoqK3lrppCdWNrZXQnLFxuICBQSUNCRURfVVBZVU5fRU5EUE9JTlQ6ICfoqK3lrprmjqXlhaXpu54nLFxuICBQSUNCRURfVVBZVU5fT1BFUkFUT1I6ICfoqK3lrprmk43kvZzlk6EnLFxuICBQSUNCRURfVVBZVU5fUEFTU1dPUkQ6ICfoqK3lrprmk43kvZzlk6Hlr4bnorwnLFxuICBQSUNCRURfVVBZVU5fUEFUSDogJ+ioreWumuWEsuWtmOi3r+W+kScsXG4gIFBJQ0JFRF9VUFlVTl9VUkw6ICfoqK3lrprliqDpgJ/ntrLlnYAnLFxuICBQSUNCRURfVVBZVU5fT1BUSU9OUzogJ+ioreWumue2suWdgOW+jOe2tCcsXG4gIFBJQ0JFRF9VUFlVTl9BTlRJTEVFQ0hUT0tFTjogJ+ioreWumumYsuebnOmPiFRva2VuJyxcbiAgUElDQkVEX1VQWVVOX0VYUElSRVRJTUU6ICfoqK3lrprpgY7mnJ/mmYLplpMo56eSKScsXG4gIFBJQ0JFRF9VUFlVTl9NRVNTQUdFX09QRVJBVE9SOiAn5L6L5aaCOiBtZScsXG4gIFBJQ0JFRF9VUFlVTl9NRVNTQUdFX1BBU1NXT1JEOiAn5L6L5aaCOiAxMjM0NTYnLFxuICBQSUNCRURfVVBZVU5fTUVTU0FHRV9VUkw6ICfkvovlpoI6IGh0dHA6Ly94eHgudGVzdC51cGNkbi5uZXQnLFxuICBQSUNCRURfVVBZVU5fTUVTU0FHRV9PUFRJT05TOiAn5L6L5aaCOiAhaW1nc2xpbScsXG4gIFBJQ0JFRF9VUFlVTl9NRVNTQUdFX1BBVEg6ICfkvovlpoI6IHRlc3QvJyxcbiAgUElDQkVEX1VQWVVOX01FU1NBR0VfRU5EUE9JTlQ6ICfkvovlpoI6IGh0dHBzOi8vdjAuYXBpLnVweXVuLmNvbScsXG5cbiAgLy8gd2ViZGF2XG4gIFBJQ0JFRF9XRUJEQVZQTElTVDogJ1dlYkRBVicsXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9IT1NUOiAn6Kit5a6aQVBJ5Li75qmfJyxcbiAgUElDQkVEX1dFQkRBVlBMSVNUX1NTTEVOQUJMRUQ6ICfpnIDopoFIVFRQU+aZguWVn+eUqCcsXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9VU0VSTkFNRTogJ+ioreWumueUqOaItuWQjScsXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9QQVNTV09SRDogJ+ioreWumuWvhueivCcsXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9QQVRIOiAn6Kit5a6a5YSy5a2Y6Lev5b6RJyxcbiAgUElDQkVEX1dFQkRBVlBMSVNUX0NVU1RPTVVSTDogJ+ioreWumuiHquiogue2suWdgCcsXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9BVVRIVFlQRTogJ+ioreWumuiqjeitieaWueW8jycsXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9PUFRJT05TOiAn6Kit5a6a57ay5Z2A5b6M57a0JyxcbiAgUElDQkVEX1dFQkRBVlBMSVNUX1dFQlBBVEg6ICfoqK3lrprntrLnq5not6/lvpEnLFxuICBQSUNCRURfV0VCREFWUExJU1RfTUVTU0FHRV9IT1NUOiAn5L6L5aaCOiBodHRwczovL2V4YW1wbGUuY29tL3dlYmRhdicsXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9NRVNTQUdFX1NTTEVOQUJMRUQ6ICfpnIDopoFIVFRQU+aZguWVn+eUqCcsXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9NRVNTQUdFX1VTRVJOQU1FOiAn5L6L5aaCOiBtZScsXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9NRVNTQUdFX1BBU1NXT1JEOiAn6Ly45YWl55So5oi25a+G56K8JyxcbiAgUElDQkVEX1dFQkRBVlBMSVNUX01FU1NBR0VfUEFUSDogJ+S+i+WmgjogdGVzdC8nLFxuICBQSUNCRURfV0VCREFWUExJU1RfTUVTU0FHRV9XRUJTSVRFX1BBVEg6ICfmi7zmjqXntrLlnYDmmYLkvb/nlKgnLFxuICBQSUNCRURfV0VCREFWUExJU1RfTUVTU0FHRV9DVVNUT01VUkw6ICfkvovlpoI6IGh0dHBzOi8vdGVzdC5jb20nLFxuICBQSUNCRURfV0VCREFWUExJU1RfTUVTU0FHRV9PUFRJT05TOiAn5L6L5aaCOiA/a2V5PXZhbHVlJyxcblxuICAvLyBzZnRwcGxpc3RcbiAgUElDQkVEX1NGVFBQTElTVDogJ+WFp+e9rlNGVFAnLFxuICBQSUNCRURfU0ZUUFBMSVNUX0hPU1Q6ICfoqK3lrprkuLvmqZ8nLFxuICBQSUNCRURfU0ZUUFBMSVNUX1BPUlQ6ICfoqK3lrprnq6/lj6MnLFxuICBQSUNCRURfU0ZUUFBMSVNUX1VTRVJOQU1FOiAn6Kit5a6a55So5oi25ZCNJyxcbiAgUElDQkVEX1NGVFBQTElTVF9QQVNTV09SRDogJ+ioreWumuWvhueivCcsXG4gIFBJQ0JFRF9TRlRQUExJU1RfUFJJVkFURUtFWTogJ+ioreWumuengemRsCcsXG4gIFBJQ0JFRF9TRlRQUExJU1RfUFJJVkFURUtFWV9QQVNTUEhSQVNFOiAn6Kit5a6a56eB6ZGw5a+G56K8JyxcbiAgUElDQkVEX1NGVFBQTElTVF9VUExPQURQQVRIOiAn6Kit5a6a5LiK5YKz6Lev5b6RJyxcbiAgUElDQkVEX1NGVFBQTElTVF9DVVNUT01VUkw6ICfoqK3lrproh6roqILntrLlnYAnLFxuICBQSUNCRURfU0ZUUFBMSVNUX1dFQlNJVEVfUEFUSDogJ+ioreWumue2suermei3r+W+kScsXG4gIFBJQ0JFRF9TRlRQUExJU1RfRklMRV9VU0VSOiAn6Kit5a6a5paH5Lu255So5oi2Oue1hCcsXG4gIFBJQ0JFRF9TRlRQUExJU1RfRklMRV9NT0RFOiAn6Kit5a6a5paH5Lu25qyK6ZmQJyxcbiAgUElDQkVEX1NGVFBQTElTVF9ESVJfTU9ERTogJ+ioreWumuaWh+S7tuWkvuasiumZkCcsXG4gIFBJQ0JFRF9TRlRQUExJU1RfTUVTU0FHRV9IT1NUOiAn5L6L5aaCOiAxLjEuMS4zJyxcbiAgUElDQkVEX1NGVFBQTElTVF9NRVNTQUdFX1BPUlQ6ICfpu5joqo0yMicsXG4gIFBJQ0JFRF9TRlRQUExJU1RfTUVTU0FHRV9QUklWQVRFS0VZOiAn5L6L5aaCOiAvVXNlcnMveHh4Ly5zc2gvaWRfcnNhJyxcbiAgUElDQkVEX1NGVFBQTElTVF9NRVNTQUdFX1BSSVZBVEVLRVlfUEFTU1BIUkFTRTogJ+i8uOWFpeengemRsOWvhueivCcsXG4gIFBJQ0JFRF9TRlRQUExJU1RfTUVTU0FHRV9VUExPQURQQVRIOiAn5L6L5aaCOiB0ZXN0LycsXG4gIFBJQ0JFRF9TRlRQUExJU1RfTUVTU0FHRV9DVVNUT01VUkw6ICfkvovlpoI6IGh0dHBzOi8vdGVzdC5jb20nLFxuICBQSUNCRURfU0ZUUFBMSVNUX01FU1NBR0VfV0VCU0lURV9QQVRIOiAn5ou85o6l57ay5Z2A5pmC5L2/55SoJyxcbiAgUElDQkVEX1NGVFBQTElTVF9NRVNTQUdFX0ZJTEVfVVNFUjogJ+S+i+Wmgjogd3d3OmRhdGEnLFxuICBQSUNCRURfU0ZUUFBMSVNUX01FU1NBR0VfRklMRV9NT0RFOiAn5L6L5aaCOiAwNjY0JyxcbiAgUElDQkVEX1NGVFBQTElTVF9NRVNTQUdFX0RJUl9NT0RFOiAn5L6L5aaCOiAwNzc1JyxcblxuICAvLyBQaWNMaXN0XG4gIFBJQ0JFRF9QSUNMSVNUOiAnUGljTGlzdCcsXG4gIFBJQ0JFRF9QSUNMSVNUX0hPU1Q6ICfoqK3lrprkuLvmqZ8nLFxuICBQSUNCRURfUElDTElTVF9QT1JUOiAn6Kit5a6a56uv5Y+jJyxcbiAgUElDQkVEX1BJQ0xJU1RfUElDQkVEOiAn6Kit5a6a5ZyW5bqKJyxcbiAgUElDQkVEX1BJQ0xJU1RfQ09ORklHTkFNRTogJ+ioreWumumFjee9ruWQjScsXG4gIFBJQ0JFRF9QSUNMSVNUX0tFWTogJ+ioreWumumRkuasiktleScsXG5cbiAgLy8gTHNreSBQcm9cbiAgUElDQkVEX0xTS1lfUExJU1Q6ICfomK3nqbrlnJbluoonLFxuICBQSUNCRURfTFNLWV9WRVJTSU9OOiAn6Kit5a6a54mI5pysJyxcbiAgUElDQkVEX0xTS1lfTUVTU0FHRV9WRVJTSU9OOiAn6KuL6YG45pOH54mI5pysJyxcbiAgUElDQkVEX0xTS1lfSE9TVDogJ+ioreWumuS4u+apnycsXG4gIFBJQ0JFRF9MU0tZX01FU1NBR0VfSE9TVDogJ+S+i+WmgjogaHR0cHM6Ly9leGFtcGxlLmNvbScsXG4gIFBJQ0JFRF9MU0tZX1RPS0VOOiAn6Kit5a6aVG9rZW4nLFxuICBQSUNCRURfTFNLWV9NRVNTQUdFX1RPS0VOOiAn6KuL6Ly45YWlVG9rZW4nLFxuICBQSUNCRURfTFNLWV9TVFJBVEVHWV9JRDogJ+ioreWumuetlueVpUlEJyxcbiAgUElDQkVEX0xTS1lfTUVTU0FHRV9TVFJBVEVHWV9JRDogJ+S+i+WmgjEnLFxuICBQSUNCRURfTFNLWV9BTEJVTV9JRDogJ+ioreWumuebuOWGiklEJyxcbiAgUElDQkVEX0xTS1lfTUVTU0FHRV9BTEJVTV9JRDogJ+S+i+WmgjEnLFxuICBQSUNCRURfTFNLWV9QRVJNSVNTSU9OOiAn6Kit5a6a5LiK5YKz5qyK6ZmQJyxcbiAgUElDQkVEX0xTS1lfTUVTU0FHRV9QRVJNSVNTSU9OOiAn6KuL6YG45pOH5LiK5YKz5qyK6ZmQJyxcblxuICAvLyBBd3NTM1BsaXN0XG4gIFBJQ0JFRF9BV1NTM1BMSVNUOiAnQVdTIFMzJyxcbiAgUElDQkVEX0FXU1MzUExJU1RfQUNDRVNTS0VZSUQ6ICfoqK3lrppBY2Nlc3NLZXlJZCcsXG4gIFBJQ0JFRF9BV1NTM1BMSVNUX1NFQ1JFVF9BQ0NFU1NLRVk6ICfoqK3lrppTZWNyZXRBY2Nlc3NLZXknLFxuICBQSUNCRURfQVdTUzNQTElTVF9CVUNLRVQ6ICfoqK3lrppCdWNrZXQnLFxuICBQSUNCRURfQVdTUzNQTElTVF9SRUdJT046ICfoqK3lrppSZWdpb24nLFxuICBQSUNCRURfQVdTUzNQTElTVF9VUExPQURQQVRIOiAn6Kit5a6a5LiK5YKz6Lev5b6RJyxcbiAgUElDQkVEX0FXU1MzUExJU1RfRU5EUE9JTlQ6ICfoqK3lrproh6rlrprnvqnnr4Dpu54nLFxuICBQSUNCRURfQVdTUzNQTElTVF9QUk9YWTogJ+ioreWumuS7o+eQhicsXG4gIFBJQ0JFRF9BV1NTM1BMSVNUX1VSTFBSRUZJWDogJ+ioreWumuiHquWumue+qee2suWdgCcsXG4gIFBJQ0JFRF9BV1NTM1BMSVNUX1BBVEhTVFlMRUFDQ0VTUzogJ+mWi+WVnyBgcGF0aFN0eWxlQWNjZXNzYCcsXG4gIFBJQ0JFRF9BV1NTM1BMSVNUX1JFSkVDVFVOQVVUSE9SSVpFRDogJ+mWi+WVnyBgcmVqZWN0VW5hdXRob3JpemVkYCcsXG4gIFBJQ0JFRF9BV1NTM1BMSVNUX0FDTDogJ+ioreWumkFDTCcsXG4gIFBJQ0JFRF9BV1NTM1BMSVNUX0RJU0FCTEVCVUNLRVRQUkVGSVhUT1VSTDogJ+mWi+WVnyBgcGF0aFN0eWxlQWNjZXNzYCDmmYLvvIzmmK/lkKbopoHnpoHnlKjmnIDntYLnlJ/miJBVUkzkuK3mt7vliqAgYnVja2V0IOWJjee2tCcsXG4gIFBJQ0JFRF9BV1NTM1BMSVNUX01FU1NBR0VfQUNDRVNTS0VZSUQ6ICfkvovlpoI6IEFLSUF4eHh4eHh4eHh4eHh4JyxcbiAgUElDQkVEX0FXU1MzUExJU1RfTUVTU0FHRV9TRUNSRVRfQUNDRVNTS0VZOiAn5L6L5aaCOiB4eHh4eHh4eHh4JyxcbiAgUElDQkVEX0FXU1MzUExJU1RfTUVTU0FHRV9CVUNLRVQ6ICfkvovlpoI6IHRlc3Qve2Z1bGxOYW1lfScsXG4gIFBJQ0JFRF9BV1NTM1BMSVNUX01FU1NBR0VfUkVHSU9OOiAn5L6L5aaCOiB1cy1lYXN0LTEnLFxuICBQSUNCRURfQVdTUzNQTElTVF9NRVNTQUdFX1VQTE9BRFBBVEg6ICfkvovlpoI6IHRlc3QvJyxcbiAgUElDQkVEX0FXU1MzUExJU1RfTUVTU0FHRV9FTkRQT0lOVDogJ+S+i+WmgjogaHR0cHM6Ly9zMy51cy1lYXN0LTEuYW1hem9uYXdzLmNvbScsXG4gIFBJQ0JFRF9BV1NTM1BMSVNUX01FU1NBR0VfUFJPWFk6ICfkvovlpoI6IGh0dHA6Ly8xMjcuMC4wLjE6MTA4MCcsXG4gIFBJQ0JFRF9BV1NTM1BMSVNUX01FU1NBR0VfVVJMUFJFRklYOiAn5L6L5aaCOiBodHRwczovL3Rlc3QuY29tJyxcbiAgUElDQkVEX0FXU1MzUExJU1RfTUVTU0FHRV9QQVRIU1RZTEVBQ0NFU1M6ICfpnIDopoHmmYLllZ/nlKgnLFxuICBQSUNCRURfQVdTUzNQTElTVF9NRVNTQUdFX1JFSkVDVFVOQVVUSE9SSVpFRDogJ+mcgOimgeaZguWVn+eUqCcsXG4gIFBJQ0JFRF9BV1NTM1BMSVNUX01FU1NBR0VfQUNMOiAn5L6L5aaCOiBwdWJsaWMtcmVhZCcsXG4gIFBJQ0JFRF9BV1NTM1BMSVNUX01FU1NBR0VfRElTQUJMRUJVQ0tFVFBSRUZJWFRPVVJMOiAn6ZyA6KaB5pmC5ZWf55SoJyxcblxuICBCVUlMRElOX1dBVEVSTUFSSzogJ+awtOWNsOioreWumicsXG4gIEJVSUxESU5fV0FURVJNQVJLX0lTQUREV0FURVJNQVJLOiAn5piv5ZCm5re75Yqg5rC05Y2wJyxcbiAgQlVJTERJTl9XQVRFUk1BUktfTUVTU0FHRV9JU0FERFdBVEVSTUFSSzogJ+mcgOimgea3u+WKoOawtOWNsOaZguWVn+eUqCcsXG4gIEJVSUxESU5fV0FURVJNQVJLX1dBVEVSTUFSS1RZUEU6ICfoqK3lrprmsLTljbDpoZ7lnosnLFxuICBCVUlMRElOX1dBVEVSTUFSS19NRVNTQUdFX1dBVEVSTUFSS1RZUEU6ICfoq4vpgbjmk4fmsLTljbDpoZ7lnosnLFxuICBCVUlMRElOX1dBVEVSTUFSS19JU0ZVTExTQ1JFRU5XQVRFUk1BUks6ICfmmK/lkKblhajlsY/msLTljbAnLFxuICBCVUlMRElOX1dBVEVSTUFSS19NRVNTQUdFX0lTRlVMTFNDUkVFTldBVEVSTUFSSzogJ+mcgOimgeWFqOWxj+awtOWNsOaZguWVn+eUqCcsXG4gIEJVSUxESU5fV0FURVJNQVJLX1dBVEVSTUFSS0RFR1JFRTogJ+ioreWumuawtOWNsOinkuW6picsXG4gIEJVSUxESU5fV0FURVJNQVJLX01FU1NBR0VfV0FURVJNQVJLREVHUkVFOiAn6KuL6Ly45YWl5pW45a2XJyxcbiAgQlVJTERJTl9XQVRFUk1BUktfV0FURVJNQVJLVEVYVDogJ+ioreWumuawtOWNsOaWh+WtlycsXG4gIEJVSUxESU5fV0FURVJNQVJLX01FU1NBR0VfV0FURVJNQVJLVEVYVDogJ+iri+i8uOWFpeawtOWNsOaWh+WtlycsXG4gIEJVSUxESU5fV0FURVJNQVJLX1dBVEVSTUFSS0ZPTlRQQVRIOiAn6Kit5a6a5rC05Y2w5a2X6auUJyxcbiAgQlVJTERJTl9XQVRFUk1BUktfTUVTU0FHRV9XQVRFUk1BUktGT05UUEFUSDogJ+iri+i8uOWFpeawtOWNsOWtl+mrlOaWh+S7tui3r+W+kScsXG4gIEJVSUxESU5fV0FURVJNQVJLX1dBVEVSTUFSS1NDQUxFUkFUSU86ICfoqK3lrprmsLTljbDlnJbniYfmr5TkvosnLFxuICBCVUlMRElOX1dBVEVSTUFSS19NRVNTQUdFX1dBVEVSTUFSS0ZPTlRSQVRJTzogJ+iri+i8uOWFpTAtMeeahOaVuOWtlycsXG4gIEJVSUxESU5fV0FURVJNQVJLX1dBVEVSTUFSS0NPTE9SOiAn6Kit5a6a5rC05Y2w5a2X6auU6aGP6ImyJyxcbiAgQlVJTERJTl9XQVRFUk1BUktfTUVTU0FHRV9XQVRFUk1BUktGT05UQ09MT1I6ICfoq4vovLjlhaVyZ2LpoY/oibLlgLwnLFxuICBCVUlMRElOX1dBVEVSTUFSS19XQVRFUk1BUktJTUFHRVBBVEg6ICfoqK3lrprmsLTljbDlnJbniYfot6/lvpEnLFxuICBCVUlMRElOX1dBVEVSTUFSS19NRVNTQUdFX1dBVEVSTUFSS0lNQUdFUEFUSDogJ+iri+i8uOWFpeawtOWNsOWclueJh+i3r+W+kScsXG4gIEJVSUxESU5fV0FURVJNQVJLX1dBVEVSTUFSS1BPU0lUSU9OOiAn6Kit5a6a5rC05Y2w5L2N572uJyxcbiAgQlVJTERJTl9XQVRFUk1BUktfTUVTU0FHRV9XQVRFUk1BUktQT1NJVElPTjogJ+iri+mBuOaTh+awtOWNsOS9jee9ricsXG5cbiAgQlVJTERJTl9TS0lQUFJPQ0VTUzogJ+i3s+mBjuiZleeQhuioreWumicsXG4gIEJVSUxESU5fU0tJUFBST0NFU1NfU0tJUFBST0NFU1NFWFRMSVNUOiAn6Kit5a6a6Lez6YGO6JmV55CG55qE5pO05bGV5ZCN5YiX6KGoJyxcblxuICBCVUlMRElOX1JFTkFNRTogJ+mHjeWRveWQjeioreWumicsXG4gIEJVSUxESU5fUkVOQU1FX0ZPUk1BVDogJ+ioreWumumHjeWRveWQjeagvOW8jycsXG4gIEJVSUxESU5fUkVOQU1FX0VOQUJMRTogJ+aYr+WQpuWVn+eUqOmHjeWRveWQjScsXG5cbiAgQlVJTERJTl9DT01QUkVTUzogJ+WclueJh+iZleeQhuioreWumicsXG4gIEJVSUxESU5fQ09NUFJFU1NfUVVBTElUWTogJ+ioreWumuWclueJh+izqumHjycsXG4gIEJVSUxESU5fQ09NUFJFU1NfTUVTU0FHRV9RVUFMSVRZOiAn6KuL6Ly45YWlMS0xMDDnmoTmlbTmlbgnLFxuICBCVUlMRElOX0NPTVBSRVNTX0lTQ09OVkVSVDogJ+aYr+WQpumAsuihjOagvOW8j+i9ieaPmycsXG4gIEJVSUxESU5fQ09NUFJFU1NfTUVTU0FHRV9JU0NPTlZFUlQ6ICfpnIDopoHovYnmj5vmmYLllZ/nlKgnLFxuICBCVUlMRElOX0NPTVBSRVNTX0NPTlZFUlRGT1JNQVQ6ICfoqK3lrprovYnmj5vmoLzlvI8nLFxuICBCVUlMRElOX0NPTVBSRVNTX01FU1NBR0VfQ09OVkVSVEZPUk1BVDogJ+iri+mBuOaTh+i9ieaPm+agvOW8jycsXG4gIEJVSUxESU5fQ09NUFJFU1NfSVNSRVNJWkU6ICfmmK/lkKbpgLLooYzlnJbniYfnuK7mlL4nLFxuICBCVUlMRElOX0NPTVBSRVNTX01FU1NBR0VfSVNSRVNJWkU6ICfpnIDopoHnuK7mlL7mmYLllZ/nlKgnLFxuICBCVUlMRElOX0NPTVBSRVNTX1JFU0laRVdJRFRIOiAn6Kit5a6a57iu5pS+5a+s5bqmJyxcbiAgQlVJTERJTl9DT01QUkVTU19NRVNTQUdFX1JFU0laRVdJRFRIOiAn6KuL6Ly45YWl5pW45a2XJyxcbiAgQlVJTERJTl9DT01QUkVTU19SRVNJWkVIRUlHSFQ6ICfoqK3lrprnuK7mlL7pq5jluqYnLFxuICBCVUlMRElOX0NPTVBSRVNTX01FU1NBR0VfUkVTSVpFSEVJR0hUOiAn6KuL6Ly45YWl5pW45a2XJyxcbiAgQlVJTERJTl9DT01QUkVTU19JU1JFU0laRUJZUEVSQ0VOVDogJ+aYr+WQpuaMieeZvuWIhuavlOmAsuihjOe4ruaUvicsXG4gIEJVSUxESU5fQ09NUFJFU1NfTUVTU0FHRV9JU1JFU0laRUJZUEVSQ0VOVDogJ+mcgOimgeaMieeZvuWIhuavlOe4ruaUvuaZguWVn+eUqCcsXG4gIEJVSUxESU5fQ09NUFJFU1NfSVNGTElQOiAn5piv5ZCm5Z6C55u057+76L2J5ZyW54mHJyxcbiAgQlVJTERJTl9DT01QUkVTU19JU0ZMT1A6ICfmmK/lkKbmsLTlubPnv7vovYnlnJbniYcnLFxuICBCVUlMRElOX0NPTVBSRVNTX1JFU0laRVBFUkNFTlQ6ICfoqK3lrprnuK7mlL7nmb7liIbmr5QnLFxuICBCVUlMRElOX0NPTVBSRVNTX01FU1NBR0VfUkVTSVpFUEVSQ0VOVDogJ+iri+i8uOWFpeaVuOWtlycsXG4gIEJVSUxESU5fQ09NUFJFU1NfU0tJUFJFU0laRU9GU01BTExJTUc6ICfmmK/lkKbot7PpgY7lsI/lnJbnuK7mlL4nLFxuICBCVUlMRElOX0NPTVBSRVNTX0lTUk9UQVRFOiAn5piv5ZCm6YCy6KGM5ZyW54mH5peL6L2JJyxcbiAgQlVJTERJTl9DT01QUkVTU19NRVNTQUdFX0lTUk9UQVRFOiAn6ZyA6KaB5peL6L2J5pmC5ZWf55SoJyxcbiAgQlVJTERJTl9DT01QUkVTU19ST1RBVEVERUdSRUU6ICfoqK3lrprml4vovYnop5LluqYnLFxuICBCVUlMRElOX0NPTVBSRVNTX01FU1NBR0VfUk9UQVRFREVHUkVFOiAn6KuL6Ly45YWl5pW45a2X77yM5Y+v54K66LKg5pW4JyxcbiAgQlVJTERJTl9DT01QUkVTU19JU1JFTU9WRUVYSUY6ICfmmK/lkKbnp7vpmaRFWElG6LOH6KiKJyxcbiAgQlVJTERJTl9DT01QUkVTU19NRVNTQUdFX0lTUkVNT1ZFRVhJRjogJ+mcgOimgeenu+mZpEVYSUbos4foqIrmmYLllZ/nlKgnLFxuXG4gIC8vIFBsdWdpbiBIYW5kbGVyXG4gIFBMVUdJTl9IQU5ETEVSX1BMVUdJTl9JTlNUQUxMX1NVQ0NFU1M6ICfmj5Lku7blronoo53miJDlip8nLFxuICBQTFVHSU5fSEFORExFUl9QTFVHSU5fSU5TVEFMTF9GQUlMRUQ6ICfmj5Lku7blronoo53lpLHmlZcnLFxuICBQTFVHSU5fSEFORExFUl9QTFVHSU5fSU5TVEFMTF9GQUlMRURfUkVBU09OOiAn5o+S5Lu25a6J6KOd5aSx5pWX77yM5aSx5pWX56K854K6JHtjb2Rlfe+8jOmMr+iqpOiomOmMhOeCuiBcXG4gJHtkYXRhfScsXG4gIFBMVUdJTl9IQU5ETEVSX1BMVUdJTl9JTlNUQUxMX0ZBSUxFRF9QQVRIOiAn5o+S5Lu25a6J6KOd5aSx5pWX77yM6KuL6Ly45YWl5q2j56K655qE5o+S5Lu25ZCN56ix5oiW5q2j56K655qE5a6J6KOd6Lev5b6RJyxcbiAgUExVR0lOX0hBTkRMRVJfUExVR0lOX1VOSU5TVEFMTF9TVUNDRVNTOiAn5o+S5Lu25Y246LyJ5oiQ5YqfJyxcbiAgUExVR0lOX0hBTkRMRVJfUExVR0lOX1VOSU5TVEFMTF9GQUlMRUQ6ICfmj5Lku7bljbjovInlpLHmlZcnLFxuICBQTFVHSU5fSEFORExFUl9QTFVHSU5fVU5JTlNUQUxMX0ZBSUxFRF9SRUFTT046ICfmj5Lku7bljbjovInlpLHmlZfvvIzlpLHmlZfnorzngroke2NvZGV977yM6Yyv6Kqk6KiY6YyE54K6IFxcbiAke2RhdGF9JyxcbiAgUExVR0lOX0hBTkRMRVJfUExVR0lOX1VOSU5TVEFMTF9GQUlMRURfVkFMSUQ6ICfmj5Lku7bljbjovInlpLHmlZfvvIzoq4vovLjlhaXmraPnorrnmoTmj5Lku7blkI3nqLEnLFxuICBQTFVHSU5fSEFORExFUl9QTFVHSU5fVVBEQVRFX1NVQ0NFU1M6ICfmj5Lku7bmm7TmlrDmiJDlip8nLFxuICBQTFVHSU5fSEFORExFUl9QTFVHSU5fVVBEQVRFX0ZBSUxFRDogJ+aPkuS7tuabtOaWsOWkseaVlycsXG4gIFBMVUdJTl9IQU5ETEVSX1BMVUdJTl9VUERBVEVfRkFJTEVEX1JFQVNPTjogJ+aPkuS7tuabtOaWsOWkseaVl++8jOWkseaVl+eivOeCuiR7Y29kZX3vvIzpjK/oqqToqJjpjITngrogXFxuICR7ZGF0YX0nLFxuICBQTFVHSU5fSEFORExFUl9QTFVHSU5fVVBEQVRFX0ZBSUxFRF9WQUxJRDogJ+aPkuS7tuabtOaWsOWkseaVl++8jOiri+i8uOWFpeato+eiuueahOaPkuS7tuWQjeeosSdcbn1cbiIsImltcG9ydCB7IElMb2NhbGVzIH0gZnJvbSAnLi96aC1DTidcblxuLyogZXNsaW50LWRpc2FibGUgbm8tdGVtcGxhdGUtY3VybHktaW4tc3RyaW5nICovXG5leHBvcnQgY29uc3QgRU46IElMb2NhbGVzID0ge1xuICBVUExPQURfRkFJTEVEOiAnVXBsb2FkIGZhaWxlZCcsXG4gIENIRUNLX1NFVFRJTkdTOiAnUGxlYXNlIGNoZWNrIHlvdXIgc2V0dGluZ3MnLFxuICBDSEVDS19TRVRUSU5HU19BTkRfTkVUV09SSzogJ1BsZWFzZSBjaGVjayB5b3VyIHNldHRpbmdzIGFuZCBuZXR3b3JrJyxcbiAgVVBMT0FEX0ZBSUxFRF9SRUFTT046ICdFcnJvciBjb2RlOiAke2NvZGV9LCBwbGVhc2Ugb3BlbiB0aGUgYnJvd3NlciBhbmQgcGFzdGUgdGhlIGFkZHJlc3MgdG8gc2VlIHRoZSByZWFzb24nLFxuICBTRVJWRVJfRVJST1I6ICdTZXJ2ZXIgZXJyb3IsIHBsZWFzZSB0cnkgYWdhaW4gbGF0ZXInLFxuICBBVVRIX0ZBSUxFRDogJ0F1dGhlbnRpY2F0aW9uIGZhaWxlZCcsXG5cbiAgLy8gc21tc1xuICBQSUNCRURfU01NUzogJ1NNLk1TJyxcbiAgUElDQkVEX1NNTVNfVE9LRU46ICdTZXQgVG9rZW4nLFxuICBQSUNCRURfU01NU19NRVNTQUdFX1RPS0VOOiAnUGxlYXNlIGVudGVyIHRoZSB0b2tlbicsXG4gIFBJQ0JFRF9TTU1TX0JBQ0tVUERPTUFJTjogJ1NldCBCYWNrdXAgVXBsb2FkIERvbWFpbicsXG4gIFBJQ0JFRF9TTU1TX01FU1NBR0VfQkFDS1VQX0RPTUFJTjogJ0V4LiBzbW1zLmFwcCcsXG5cbiAgLy9hZHZhbmNlZHBsaXN0XG4gIFBJQ0JFRF9BRFZBTkNFRFBMSVNUOiAnQWR2YW5jZWQnLFxuICBQSUNCRURfQURWQU5DRURQTElTVF9FTkRQT0lOVDogJ1NldCBFbmRwb2ludCcsXG4gIFBJQ0JFRF9BRFZBTkNFRFBMSVNUX01FU1NBR0VfRU5EUE9JTlQ6ICdQbGVhc2UgZW50ZXIgdGhlIGVuZHBvaW50JyxcbiAgUElDQkVEX0FEVkFOQ0VEUExJU1RfTUVUSE9EOiAnU2V0IE1ldGhvZCcsXG4gIFBJQ0JFRF9BRFZBTkNFRFBMSVNUX01FU1NBR0VfTUVUSE9EOiAnUGxlYXNlIHNlbGVjdCB0aGUgcmVxdWVzdCBtZXRob2QnLFxuICBQSUNCRURfQURWQU5DRURQTElTVF9GT1JNREFUQUtFWTogJ1NldCBGb3JtRGF0YSBLZXknLFxuICBQSUNCRURfQURWQU5DRURQTElTVF9NRVNTQUdFX0ZPUk1EQVRBS0VZOiAnUGxlYXNlIGVudGVyIHRoZSBGb3JtRGF0YSBrZXknLFxuICBQSUNCRURfQURWQU5DRURQTElTVF9IRUFERVJTOiAnU2V0IEhlYWRlcnMnLFxuICBQSUNCRURfQURWQU5DRURQTElTVF9NRVNTQUdFX0hFQURFUlM6ICdlLmcuIHtcIkNvbnRlbnQtVHlwZVwiOiBcIm11bHRpcGFydC9mb3JtLWRhdGFcIn0nLFxuICBQSUNCRURfQURWQU5DRURQTElTVF9CT0RZOiAnU2V0IEJvZHknLFxuICBQSUNCRURfQURWQU5DRURQTElTVF9NRVNTQUdFX0JPRFk6ICdlLmcuIHtcImtleVwiOiBcInZhbHVlXCJ9JyxcbiAgUElDQkVEX0FEVkFOQ0VEUExJU1RfQ1VTVE9NUFJFRklYOiAnU2V0IEN1c3RvbSBQcmVmaXgnLFxuICBQSUNCRURfQURWQU5DRURQTElTVF9NRVNTQUdFX0NVU1RPTVBSRUZJWDogJ2UuZy4gaHR0cHM6Ly9leGFtcGxlLmNvbS8nLFxuICBQSUNCRURfQURWQU5DRURQTElTVF9XRUJQQVRIOiAnU2V0IFdlYiBQYXRoJyxcbiAgUElDQkVEX0FEVkFOQ0VEUExJU1RfTUVTU0FHRV9XRUJQQVRIOiAnVXNlZCB0byBnZW5lcmF0ZSBVUkwgcGF0aCcsXG4gIFBJQ0JFRF9BRFZBTkNFRFBMSVNUX1JFU0RBVEFQQVRIOiAnU2V0IFJlc3BvbnNlIERhdGEgUGF0aCcsXG4gIFBJQ0JFRF9BRFZBTkNFRFBMSVNUX01FU1NBR0VfUkVTREFUQVBBVEg6ICdlLmcuIGRhdGEudXJsJyxcbiAgLy8gbG9jYWxcbiAgUElDQkVEX0xPQ0FMOiAnTG9jYWwnLFxuICBQSUNCRURfTE9DQUxfUEFUSDogJ1NldCBQYXRoJyxcbiAgUElDQkVEX0xPQ0FMX01FU1NBR0VfUEFUSDogJ0V4LiAvVXNlcnMvbmFtZS9QaWN0dXJlcy8nLFxuICBQSUNCRURfTE9DQUxfQ1VTVE9NVVJMOiAnU2V0IEN1c3RvbSBVUkwnLFxuICBQSUNCRURfTE9DQUxfTUVTU0FHRV9DVVNUT01VUkw6ICdFeC4gaHR0cHM6Ly90ZXN0LmNvbScsXG4gIFBJQ0JFRF9MT0NBTF9XRUJQQVRIOiAnU2V0IFdlYiBQYXRoJyxcbiAgUElDQkVEX0xPQ0FMX01FU1NBR0VfV0VCUEFUSDogJ1VzZWQgdG8gZ2VuZXJhdGUgVVJMIHBhdGgnLFxuXG4gIC8vIGFsaXN0XG4gIFBJQ0JFRF9BTElTVF9QTElTVDogJ0FMaXN0JyxcbiAgUElDQkVEX0FMSVNUX1VSTDogJ1NldCBVUkwnLFxuICBQSUNCRURfQUxJU1RfTUVTU0FHRV9VUkw6ICdFeC4gaHR0cHM6Ly9hbGlzdC5leGFtcGxlLmNvbScsXG4gIFBJQ0JFRF9BTElTVF9UT0tFTjogJ1NldCBUb2tlbicsXG4gIFBJQ0JFRF9BTElTVF9NRVNTQUdFX1RPS0VOOiAnUGxlYXNlIGVudGVyIHRoZSB0b2tlbihjaG9vc2Ugb25lIG9mIGVpdGhlciB1c2VybmFtZS1wYXNzd29yZCBvciB0b2tlbiknLFxuICBQSUNCRURfQUxJU1RfVVNFUk5BTUU6ICdTZXQgVXNlcm5hbWUnLFxuICBQSUNCRURfQUxJU1RfTUVTU0FHRV9VU0VSTkFNRTogJ1BsZWFzZSBlbnRlciB0aGUgdXNlcm5hbWUoY2hvb3NlIG9uZSBvZiBlaXRoZXIgdXNlcm5hbWUtcGFzc3dvcmQgb3IgdG9rZW4pJyxcbiAgUElDQkVEX0FMSVNUX1BBU1NXT1JEOiAnU2V0IFBhc3N3b3JkJyxcbiAgUElDQkVEX0FMSVNUX01FU1NBR0VfUEFTU1dPUkQ6ICdQbGVhc2UgZW50ZXIgdGhlIHBhc3N3b3JkJyxcbiAgUElDQkVEX0FMSVNUX1VQTE9BRFBBVEg6ICdTZXQgVXBsb2FkIFBhdGgnLFxuICBQSUNCRURfQUxJU1RfTUVTU0FHRV9VUExPQURfUEFUSDogJ0V4LiAvdGVzdC8nLFxuICBQSUNCRURfQUxJU1RfV0VCUEFUSDogJ1NldCBXZWIgUGF0aCcsXG4gIFBJQ0JFRF9BTElTVF9NRVNTQUdFX1dFQl9QQVRIOiAnVXNlZCB0byBnZW5lcmF0ZSBVUkwgcGF0aCcsXG4gIFBJQ0JFRF9BTElTVF9DVVNUT01VUkw6ICdTZXQgQ3VzdG9tIFVSTCcsXG4gIFBJQ0JFRF9BTElTVF9NRVNTQUdFX0NVU1RPTVVSTDogJ0V4LiBodHRwczovL3Rlc3QuY29tJyxcblxuICAvLyBBbGktY2xvdWRcbiAgUElDQkVEX0FMSUNMT1VEOiAnQWxpIENsb3VkJyxcbiAgUElDQkVEX0FMSUNMT1VEX0FDQ0VTU0tFWUlEOiAnU2V0IGFjY2Vzc0tleUlkJyxcbiAgUElDQkVEX0FMSUNMT1VEX0FDQ0VTU0tFWVNFQ1JFVDogJ1NldCBhY2Nlc3NLZXlTZWNyZXQnLFxuICBQSUNCRURfQUxJQ0xPVURfQlVDS0VUOiAnU2V0IEJ1Y2tldCcsXG4gIFBJQ0JFRF9BTElDTE9VRF9BUkVBOiAnU2V0IEFyZWEnLFxuICBQSUNCRURfQUxJQ0xPVURfUEFUSDogJ1NldCBQYXRoJyxcbiAgUElDQkVEX0FMSUNMT1VEX1dFQlBBVEg6ICdTZXQgV2ViIFBhdGgnLFxuICBQSUNCRURfQUxJQ0xPVURfQ1VTVE9NVVJMOiAnU2V0IEN1c3RvbSBVUkwnLFxuICBQSUNCRURfQUxJQ0xPVURfT1BUSU9OUzogJ1NldCBVUkwgU3VmZml4JyxcbiAgUElDQkVEX0FMSUNMT1VEX01FU1NBR0VfQVJFQTogJ0V4LiBvc3MtY24tYmVpamluZycsXG4gIFBJQ0JFRF9BTElDTE9VRF9NRVNTQUdFX1BBVEg6ICdFeC4gdGVzdC8nLFxuICBQSUNCRURfQUxJQ0xPVURfTUVTU0FHRV9XRUJQQVRIOiAnVXNlZCB0byBnZW5lcmF0ZSBVUkwgcGF0aCcsXG4gIFBJQ0JFRF9BTElDTE9VRF9NRVNTQUdFX09QVElPTlM6ICdFeC4gP3gtb3NzLXByb2Nlc3M9eHh4JyxcbiAgUElDQkVEX0FMSUNMT1VEX01FU1NBR0VfQ1VTVE9NVVJMOiAnRXguIGh0dHBzOi8vdGVzdC5jb20nLFxuXG4gIC8vIFRlbmNlbnQtY2xvdWRcbiAgUElDQkVEX1RFTkNFTlRDTE9VRDogJ1RlbmNlbnQgQ2xvdWQnLFxuICBQSUNCRURfVEVOQ0VOVENMT1VEX1ZFUlNJT046ICdDaG9vc2UgQ09TIHZlcnNpb24nLFxuICBQSUNCRURfVEVOQ0VOVENMT1VEX1NFQ1JFVElEOiAnU2V0IFNlY3JldElkJyxcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9TRUNSRVRLRVk6ICdTZXQgU2VjcmV0S2V5JyxcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9BUFBJRDogJ1NldCBBcHBJZCcsXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfQlVDS0VUOiAnU2V0IEJ1Y2tldCcsXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfQVJFQTogJ1NldCBBcmVhJyxcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9FTkRQT0lOVDogJ1NldCBFbmRwb2ludCcsXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfUEFUSDogJ1NldCBQYXRoJyxcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9XRUJQQVRIOiAnU2V0IFdlYiBQYXRoJyxcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9PUFRJT05TOiAnU2V0IFVSTCBTdWZmaXgnLFxuICBQSUNCRURfVEVOQ0VOVENMT1VEX0NVU1RPTVVSTDogJ1NldCBDdXN0b20gVVJMJyxcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9NRVNTQUdFX0FQUElEOiAnRXguIDEyMzQ1Njc4OTAnLFxuICBQSUNCRURfVEVOQ0VOVENMT1VEX01FU1NBR0VfQVJFQTogJ0V4LiBhcC1iZWlqaW5nJyxcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9NRVNTQUdFX1BBVEg6ICdFeC4gdGVzdC8nLFxuICBQSUNCRURfVEVOQ0VOVENMT1VEX01FU1NBR0VfV0VCUEFUSDogJ1VzZWQgdG8gZ2VuZXJhdGUgVVJMIHBhdGgnLFxuICBQSUNCRURfVEVOQ0VOVENMT1VEX01FU1NBR0VfQ1VTVE9NVVJMOiAnRXguIGh0dHBzOi8vdGVzdC5jb20nLFxuICBQSUNCRURfVEVOQ0VOVENMT1VEX01FU1NBR0VfT1BUSU9OUzogJ0V4LiA/aW1hZ2VNb2dyMicsXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfTUVTU0FHRV9FTkRQT0lOVDogJ0V4LiBjb3MtaW50ZXJuYWwuYWNjZWxlcmF0ZS50ZW5jZW50Y29zLmNuJyxcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9TTElNOiAnU2V0IEltYWdlU2xpbScsXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfU0xJTV9USVA6XG4gICAgJ0ltYWdlIGV4dHJlbWVseSBpbnRlbGxpZ2VudCBjb21wcmVzc2lvbiwgcGxlYXNlIHJlZmVyIHRvIHRoZSBbZG9jdW1lbnQgZGVzY3JpcHRpb25dKGh0dHBzOi8vY2xvdWQudGVuY2VudC5jb20vZG9jdW1lbnQvcHJvZHVjdC80MzYvODY0MzgpJyxcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9TTElNX0NPTkZJUk06ICdPUEVOJyxcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9TTElNX0NBTkNFTDogJ0NMT1NFJyxcbiAgLy8gR2l0SHViXG4gIFBJQ0JFRF9HSVRIVUI6ICdHaXRIdWInLFxuICBQSUNCRURfR0lUSFVCX1RPS0VOOiAnU2V0IFRva2VuJyxcbiAgUElDQkVEX0dJVEhVQl9SRVBPOiAnU2V0IFJlcG8gTmFtZScsXG4gIFBJQ0JFRF9HSVRIVUJfUEFUSDogJ1NldCBQYXRoJyxcbiAgUElDQkVEX0dJVEhVQl9CUkFOQ0g6ICdTZXQgQnJhbmNoJyxcbiAgUElDQkVEX0dJVEhVQl9DVVNUT01VUkw6ICdTZXQgQ3VzdG9tIFVSTCcsXG4gIFBJQ0JFRF9HSVRIVUJfTUVTU0FHRV9SRVBPOiAnRXguIHVzZXJuYW1lL3JlcG8nLFxuICBQSUNCRURfR0lUSFVCX01FU1NBR0VfQlJBTkNIOiAnRXguIG1haW4nLFxuICBQSUNCRURfR0lUSFVCX01FU1NBR0VfUEFUSDogJ0V4LiB0ZXN0LycsXG4gIFBJQ0JFRF9HSVRIVUJfTUVTU0FHRV9DVVNUT01VUkw6ICdFeC4gaHR0cHM6Ly90ZXN0LmNvbScsXG5cbiAgLy8gcWluaXVcbiAgUElDQkVEX1FJTklVOiAnUWluaXUnLFxuICBQSUNCRURfUUlOSVVfQUNDRVNTS0VZOiAnU2V0IEFjY2Vzc0tleScsXG4gIFBJQ0JFRF9RSU5JVV9TRUNSRVRLRVk6ICdTZXQgU2VjcmV0S2V5JyxcbiAgUElDQkVEX1FJTklVX0JVQ0tFVDogJ1NldCBCdWNrZXQnLFxuICBQSUNCRURfUUlOSVVfUEFUSDogJ1NldCBQYXRoJyxcbiAgUElDQkVEX1FJTklVX1VSTDogJ1NldCBVUkwnLFxuICBQSUNCRURfUUlOSVVfT1BUSU9OUzogJ1NldCBVUkwgU3VmZml4JyxcbiAgUElDQkVEX1FJTklVX0FSRUE6ICdTZXQgQXJlYScsXG4gIFBJQ0JFRF9RSU5JVV9NRVNTQUdFX1BBVEg6ICdFeC4gdGVzdC8nLFxuICBQSUNCRURfUUlOSVVfTUVTU0FHRV9BUkVBOiAnRXguIHowJyxcbiAgUElDQkVEX1FJTklVX01FU1NBR0VfT1BUSU9OUzogJ0V4LiA/aW1hZ2VzbGltJyxcbiAgUElDQkVEX1FJTklVX01FU1NBR0VfVVJMOiAnRXguIGh0dHBzOi8veHh4Lnl5eS5nbGIuY2xvdWRkbi5jb20nLFxuXG4gIC8vIGltZ3VyXG4gIFBJQ0JFRF9JTUdVUjogJ0ltZ3VyJyxcbiAgUElDQkVEX0lNR1VSX0NMSUVOVElEOiAnU2V0IENsaWVudElkJyxcbiAgUElDQkVEX0lNR1VSX1VTRVJOQU1FOiAnU2V0IFVzZXJuYW1lJyxcbiAgUElDQkVEX0lNR1VSX0FDQ0VTU19UT0tFTjogJ1NldCBBY2Nlc3MgVG9rZW4nLFxuICBQSUNCRURfSU1HVVJfQUxCVU06ICdTZXQgQWxidW0gTmFtZScsXG4gIFBJQ0JFRF9JTUdVUl9QUk9YWTogJ1NldCBQcm94eScsXG4gIFBJQ0JFRF9JTUdVUl9NRVNTQUdFX0NMSUVOVElEOiAnRmlsbCBpbiB3aGVuIHlvdSBuZWVkIHRvIHVwbG9hZCBhcyBhbm9ueW1vdXMnLFxuICBQSUNCRURfSU1HVVJfTUVTU0FHRV9VU0VSTkFNRTogJ0ZpbGwgaW4gd2hlbiB5b3UgbmVlZCB0byB1cGxvYWQgdG8gdGhlIGFjY291bnQnLFxuICBQSUNCRURfSU1HVVJfTUVTU0FHRV9BQ0NFU1NfVE9LRU46ICdGaWxsIGluIHdoZW4geW91IG5lZWQgdG8gdXBsb2FkIHRvIHRoZSBhY2NvdW50JyxcbiAgUElDQkVEX0lNR1VSX01FU1NBR0VfQUxCVU06ICdFeC4gdGVzdCcsXG4gIFBJQ0JFRF9JTUdVUl9NRVNTQUdFX1BST1hZOiAnRXguIGh0dHA6Ly8xMjcuMC4wLjE6MTA4MCcsXG5cbiAgLy8gdXB5dW5cbiAgUElDQkVEX1VQWVVOOiAnVXB5dW4nLFxuICBQSUNCRURfVVBZVU5fQlVDS0VUOiAnU2V0IEJ1Y2tldCcsXG4gIFBJQ0JFRF9VUFlVTl9FTkRQT0lOVDogJ1NldCBFbmRwb2ludCcsXG4gIFBJQ0JFRF9VUFlVTl9PUEVSQVRPUjogJ1NldCBPcGVyYXRvcicsXG4gIFBJQ0JFRF9VUFlVTl9QQVNTV09SRDogJ1NldCBPcGVyYXRvciBQYXNzd29yZCcsXG4gIFBJQ0JFRF9VUFlVTl9QQVRIOiAnU2V0IFBhdGgnLFxuICBQSUNCRURfVVBZVU5fVVJMOiAnU2V0IFVSTCcsXG4gIFBJQ0JFRF9VUFlVTl9PUFRJT05TOiAnU2V0IFVSTCBTdWZmaXgnLFxuICBQSUNCRURfVVBZVU5fQU5USUxFRUNIVE9LRU46ICdTZXQgQW50aS1MZWVjaCBUb2tlbicsXG4gIFBJQ0JFRF9VUFlVTl9FWFBJUkVUSU1FOiAnU2V0IEV4cGlyZSBUaW1lKHNlY29uZHMpJyxcbiAgUElDQkVEX1VQWVVOX01FU1NBR0VfT1BFUkFUT1I6ICdFeC4gbWUnLFxuICBQSUNCRURfVVBZVU5fTUVTU0FHRV9QQVNTV09SRDogJ0V4LiB4eHgnLFxuICBQSUNCRURfVVBZVU5fTUVTU0FHRV9VUkw6ICdFeC4gaHR0cDovL3h4eC50ZXN0LnVwY2RuLm5ldCcsXG4gIFBJQ0JFRF9VUFlVTl9NRVNTQUdFX09QVElPTlM6ICdFeC4gIWltZ3NsaW0nLFxuICBQSUNCRURfVVBZVU5fTUVTU0FHRV9QQVRIOiAnRXguIHRlc3QvJyxcbiAgUElDQkVEX1VQWVVOX01FU1NBR0VfRU5EUE9JTlQ6ICdFeC4gaHR0cHM6Ly92MC5hcGkudXB5dW4uY29tJyxcblxuICAvLyB3ZWJkYXZcbiAgUElDQkVEX1dFQkRBVlBMSVNUOiAnV2ViREFWJyxcbiAgUElDQkVEX1dFQkRBVlBMSVNUX0hPU1Q6ICdTZXQgSG9zdCcsXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9TU0xFTkFCTEVEOiAnRW5hYmxlIEhUVFBTJyxcbiAgUElDQkVEX1dFQkRBVlBMSVNUX1VTRVJOQU1FOiAnU2V0IFVzZXJuYW1lJyxcbiAgUElDQkVEX1dFQkRBVlBMSVNUX1BBU1NXT1JEOiAnU2V0IFBhc3N3b3JkJyxcbiAgUElDQkVEX1dFQkRBVlBMSVNUX1BBVEg6ICdTZXQgUGF0aCcsXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9XRUJQQVRIOiAnU2V0IFdlYnNpdGUgUGF0aCcsXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9DVVNUT01VUkw6ICdTZXQgQ3VzdG9tIFVSTCcsXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9BVVRIVFlQRTogJ1NldCBBdXRoIFR5cGUnLFxuICBQSUNCRURfV0VCREFWUExJU1RfT1BUSU9OUzogJ1NldCBVUkwgU3VmZml4JyxcbiAgUElDQkVEX1dFQkRBVlBMSVNUX01FU1NBR0VfSE9TVDogJ0V4LiBodHRwczovL2V4YW1wbGUuY29tL3dlYmRhdicsXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9NRVNTQUdFX1NTTEVOQUJMRUQ6ICdFbmFibGUgSFRUUFMnLFxuICBQSUNCRURfV0VCREFWUExJU1RfTUVTU0FHRV9VU0VSTkFNRTogJ0V4LiBtZScsXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9NRVNTQUdFX1BBU1NXT1JEOiAnUGxlYXNlIHR5cGUgdGhlIHBhc3N3b3JkJyxcbiAgUElDQkVEX1dFQkRBVlBMSVNUX01FU1NBR0VfUEFUSDogJ0V4LiB0ZXN0LycsXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9NRVNTQUdFX1dFQlNJVEVfUEFUSDogJ1VzZWQgdG8gZ2VuZXJhdGUgdGhlIFVSTCBvZiB0aGUgaW1hZ2UnLFxuICBQSUNCRURfV0VCREFWUExJU1RfTUVTU0FHRV9DVVNUT01VUkw6ICdFeC4gaHR0cHM6Ly90ZXN0LmNvbScsXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9NRVNTQUdFX09QVElPTlM6ICdFeC4gP2tleT12YWx1ZScsXG5cbiAgLy8gc2Z0cHBsaXN0XG4gIFBJQ0JFRF9TRlRQUExJU1Q6ICdTRlRQIEJ1aWx0LWluJyxcbiAgUElDQkVEX1NGVFBQTElTVF9IT1NUOiAnU2V0IEhvc3QnLFxuICBQSUNCRURfU0ZUUFBMSVNUX1BPUlQ6ICdTZXQgUG9ydCcsXG4gIFBJQ0JFRF9TRlRQUExJU1RfVVNFUk5BTUU6ICdTZXQgVXNlcm5hbWUnLFxuICBQSUNCRURfU0ZUUFBMSVNUX1BBU1NXT1JEOiAnU2V0IFBhc3N3b3JkJyxcbiAgUElDQkVEX1NGVFBQTElTVF9QUklWQVRFS0VZOiAnU2V0IFByaXZhdGUgS2V5JyxcbiAgUElDQkVEX1NGVFBQTElTVF9QUklWQVRFS0VZX1BBU1NQSFJBU0U6ICdTZXQgUHJpdmF0ZSBLZXkgUGFzc3BocmFzZScsXG4gIFBJQ0JFRF9TRlRQUExJU1RfVVBMT0FEUEFUSDogJ1NldCBVcGxvYWQgUGF0aCcsXG4gIFBJQ0JFRF9TRlRQUExJU1RfQ1VTVE9NVVJMOiAnU2V0IEN1c3RvbSBVUkwnLFxuICBQSUNCRURfU0ZUUFBMSVNUX1dFQlNJVEVfUEFUSDogJ1NldCBXZWJzaXRlIFBhdGgnLFxuICBQSUNCRURfU0ZUUFBMSVNUX0ZJTEVfVVNFUjogJ1NldCBGaWxlIFVzZXI6R3JvdXAnLFxuICBQSUNCRURfU0ZUUFBMSVNUX0ZJTEVfTU9ERTogJ1NldCBGaWxlIE1vZGUnLFxuICBQSUNCRURfU0ZUUFBMSVNUX0RJUl9NT0RFOiAnU2V0IERpcmVjdG9yeSBNb2RlJyxcbiAgUElDQkVEX1NGVFBQTElTVF9NRVNTQUdFX0hPU1Q6ICdFeC4gMS4xLjEuMycsXG4gIFBJQ0JFRF9TRlRQUExJU1RfTUVTU0FHRV9QT1JUOiAnRGVmYXVsdCAyMicsXG4gIFBJQ0JFRF9TRlRQUExJU1RfTUVTU0FHRV9QUklWQVRFS0VZOiAnRXguIC9Vc2Vycy94eHgvLnNzaC9pZF9yc2EnLFxuICBQSUNCRURfU0ZUUFBMSVNUX01FU1NBR0VfUFJJVkFURUtFWV9QQVNTUEhSQVNFOiAnUGxlYXNlIHR5cGUgdGhlIHByaXZhdGUga2V5IHBhc3NwaHJhc2UnLFxuICBQSUNCRURfU0ZUUFBMSVNUX01FU1NBR0VfVVBMT0FEUEFUSDogJ0V4LiB0ZXN0LycsXG4gIFBJQ0JFRF9TRlRQUExJU1RfTUVTU0FHRV9DVVNUT01VUkw6ICdFeC4gaHR0cHM6Ly90ZXN0LmNvbScsXG4gIFBJQ0JFRF9TRlRQUExJU1RfTUVTU0FHRV9XRUJTSVRFX1BBVEg6ICdVc2VkIHRvIGdlbmVyYXRlIHRoZSBVUkwgb2YgdGhlIGltYWdlJyxcbiAgUElDQkVEX1NGVFBQTElTVF9NRVNTQUdFX0ZJTEVfVVNFUjogJ0V4LiB3d3c6ZGF0YScsXG4gIFBJQ0JFRF9TRlRQUExJU1RfTUVTU0FHRV9GSUxFX01PREU6ICdFeC4gMDY2NCcsXG4gIFBJQ0JFRF9TRlRQUExJU1RfTUVTU0FHRV9ESVJfTU9ERTogJ0V4LiAwNzc1JyxcblxuICAvLyBQaWNMaXN0XG4gIFBJQ0JFRF9QSUNMSVNUOiAnUGljTGlzdCcsXG4gIFBJQ0JFRF9QSUNMSVNUX0hPU1Q6ICdTZXQgSG9zdCcsXG4gIFBJQ0JFRF9QSUNMSVNUX1BPUlQ6ICdTZXQgUG9ydCcsXG4gIFBJQ0JFRF9QSUNMSVNUX1BJQ0JFRDogJ1NldCBQaWNCZWQnLFxuICBQSUNCRURfUElDTElTVF9DT05GSUdOQU1FOiAnU2V0IENvbmZpZyBOYW1lJyxcbiAgUElDQkVEX1BJQ0xJU1RfS0VZOiAnU2V0IEtleScsXG5cbiAgLy8gTHNreSBQcm9cbiAgUElDQkVEX0xTS1lfUExJU1Q6ICdMc2t5JyxcbiAgUElDQkVEX0xTS1lfVkVSU0lPTjogJ1NldCBWZXJzaW9uJyxcbiAgUElDQkVEX0xTS1lfTUVTU0FHRV9WRVJTSU9OOiAnRXguIHYxJyxcbiAgUElDQkVEX0xTS1lfSE9TVDogJ1NldCBIb3N0JyxcbiAgUElDQkVEX0xTS1lfTUVTU0FHRV9IT1NUOiAnRXguIGh0dHBzOi8vbHNreS5jbycsXG4gIFBJQ0JFRF9MU0tZX1RPS0VOOiAnU2V0IFRva2VuJyxcbiAgUElDQkVEX0xTS1lfTUVTU0FHRV9UT0tFTjogJ0V4LiB4eHgnLFxuICBQSUNCRURfTFNLWV9TVFJBVEVHWV9JRDogJ1NldCBTdHJhdGVneSBJRCcsXG4gIFBJQ0JFRF9MU0tZX01FU1NBR0VfU1RSQVRFR1lfSUQ6ICdFeC4gMScsXG4gIFBJQ0JFRF9MU0tZX0FMQlVNX0lEOiAnU2V0IEFsYnVtIElEJyxcbiAgUElDQkVEX0xTS1lfTUVTU0FHRV9BTEJVTV9JRDogJ09wdGlvbmFsLCBvbmx5IGZvciBWMicsXG4gIFBJQ0JFRF9MU0tZX1BFUk1JU1NJT046ICdTZXQgUGVybWlzc2lvbicsXG4gIFBJQ0JFRF9MU0tZX01FU1NBR0VfUEVSTUlTU0lPTjogJ0V4LiBwdWJsaWMnLFxuXG4gIC8vIEF3c1MzUGxpc3RcbiAgUElDQkVEX0FXU1MzUExJU1Q6ICdBV1MgUzMnLFxuICBQSUNCRURfQVdTUzNQTElTVF9BQ0NFU1NLRVlJRDogJ1NldCBBY2Nlc3NLZXlJZCcsXG4gIFBJQ0JFRF9BV1NTM1BMSVNUX1NFQ1JFVF9BQ0NFU1NLRVk6ICdTZXQgU2VjcmV0QWNjZXNzS2V5JyxcbiAgUElDQkVEX0FXU1MzUExJU1RfQlVDS0VUOiAnU2V0IEJ1Y2tldCcsXG4gIFBJQ0JFRF9BV1NTM1BMSVNUX1JFR0lPTjogJ1NldCBSZWdpb24nLFxuICBQSUNCRURfQVdTUzNQTElTVF9VUExPQURQQVRIOiAnU2V0IFVwbG9hZCBQYXRoJyxcbiAgUElDQkVEX0FXU1MzUExJU1RfRU5EUE9JTlQ6ICdTZXQgRW5kcG9pbnQnLFxuICBQSUNCRURfQVdTUzNQTElTVF9QUk9YWTogJ1NldCBQcm94eScsXG4gIFBJQ0JFRF9BV1NTM1BMSVNUX1VSTFBSRUZJWDogJ1NldCBDdXN0b20gVVJMJyxcbiAgUElDQkVEX0FXU1MzUExJU1RfUEFUSFNUWUxFQUNDRVNTOiAnU2V0IFBhdGhTdHlsZUFjY2VzcycsXG4gIFBJQ0JFRF9BV1NTM1BMSVNUX1JFSkVDVFVOQVVUSE9SSVpFRDogJ1NldCBSZWplY3RVbmF1dGhvcml6ZWQnLFxuICBQSUNCRURfQVdTUzNQTElTVF9BQ0w6ICdTZXQgQUNMJyxcbiAgUElDQkVEX0FXU1MzUExJU1RfRElTQUJMRUJVQ0tFVFBSRUZJWFRPVVJMOlxuICAgICd3aGVuIGBwYXRoU3R5bGVBY2Nlc3NgIGlzIGVuYWJsZWQsIHdoZXRoZXIgdG8gZGlzYWJsZSBhZGRpbmcgYnVja2V0IHByZWZpeCB0byB1cmwnLFxuICBQSUNCRURfQVdTUzNQTElTVF9NRVNTQUdFX0FDQ0VTU0tFWUlEOiAnRXguIHh4eCcsXG4gIFBJQ0JFRF9BV1NTM1BMSVNUX01FU1NBR0VfU0VDUkVUX0FDQ0VTU0tFWTogJ0V4LiB4eHgnLFxuICBQSUNCRURfQVdTUzNQTElTVF9NRVNTQUdFX0JVQ0tFVDogJ0V4LiB0ZXN0JyxcbiAgUElDQkVEX0FXU1MzUExJU1RfTUVTU0FHRV9SRUdJT046ICdFeC4gdXMtZWFzdC0xJyxcbiAgUElDQkVEX0FXU1MzUExJU1RfTUVTU0FHRV9VUExPQURQQVRIOiAnRXguIHRlc3Qve2Z1bGxOYW1lfScsXG4gIFBJQ0JFRF9BV1NTM1BMSVNUX01FU1NBR0VfRU5EUE9JTlQ6ICdFeC4gaHR0cHM6Ly9zMy51cy1lYXN0LTEuYW1hem9uYXdzLmNvbScsXG4gIFBJQ0JFRF9BV1NTM1BMSVNUX01FU1NBR0VfUFJPWFk6ICdFeC4gaHR0cDovLzEyNy4wLjAuMToxMDgwJyxcbiAgUElDQkVEX0FXU1MzUExJU1RfTUVTU0FHRV9VUkxQUkVGSVg6ICdFeC4gaHR0cHM6Ly90ZXN0LmNvbScsXG4gIFBJQ0JFRF9BV1NTM1BMSVNUX01FU1NBR0VfUEFUSFNUWUxFQUNDRVNTOiAnRW5hYmxlIHdoZW4gYHBhdGhTdHlsZUFjY2Vzc2AgaXMgcmVxdWlyZWQnLFxuICBQSUNCRURfQVdTUzNQTElTVF9NRVNTQUdFX1JFSkVDVFVOQVVUSE9SSVpFRDogJ0VuYWJsZSB3aGVuIHJlamVjdGluZyBpbnZhbGlkIFRMUyBjZXJ0aWZpY2F0ZSBjb25uZWN0aW9uIGlzIHJlcXVpcmVkJyxcbiAgUElDQkVEX0FXU1MzUExJU1RfTUVTU0FHRV9BQ0w6ICdFeC4gcHVibGljLXJlYWQnLFxuICBQSUNCRURfQVdTUzNQTElTVF9NRVNTQUdFX0RJU0FCTEVCVUNLRVRQUkVGSVhUT1VSTDogJ0VuYWJsZSB3aGVuIGBwYXRoU3R5bGVBY2Nlc3NgIGlzIGVuYWJsZWQnLFxuXG4gIEJVSUxESU5fU0tJUFBST0NFU1M6ICdTa2lwIFByb2Nlc3MgU2V0dGluZ3MnLFxuICBCVUlMRElOX1NLSVBQUk9DRVNTX1NLSVBQUk9DRVNTRVhUTElTVDogJ1NldCBTa2lwIFByb2Nlc3MgRXh0IExpc3QnLFxuXG4gIEJVSUxESU5fUkVOQU1FOiAnUmVuYW1lIFNldHRpbmdzJyxcbiAgQlVJTERJTl9SRU5BTUVfRk9STUFUOiAnU2V0IHJlbmFtZSBmb3JtYXQnLFxuICBCVUlMRElOX1JFTkFNRV9FTkFCTEU6ICdFbmFibGUgcmVuYW1lJyxcblxuICBCVUlMRElOX1dBVEVSTUFSSzogJ1dhdGVybWFyayBTZXR0aW5ncycsXG4gIEJVSUxESU5fV0FURVJNQVJLX0lTQUREV0FURVJNQVJLOiAnV2hldGhlciB0byBhZGQgd2F0ZXJtYXJrJyxcbiAgQlVJTERJTl9XQVRFUk1BUktfTUVTU0FHRV9JU0FERFdBVEVSTUFSSzogJ0VuYWJsZSB3aGVuIHdhdGVybWFyayBpcyByZXF1aXJlZCcsXG4gIEJVSUxESU5fV0FURVJNQVJLX1dBVEVSTUFSS1RZUEU6ICdTZXQgd2F0ZXJtYXJrIHR5cGUnLFxuICBCVUlMRElOX1dBVEVSTUFSS19NRVNTQUdFX1dBVEVSTUFSS1RZUEU6ICdQbGVhc2Ugc2VsZWN0IHdhdGVybWFyayB0eXBlJyxcbiAgQlVJTERJTl9XQVRFUk1BUktfSVNGVUxMU0NSRUVOV0FURVJNQVJLOiAnV2hldGhlciB0byB1c2UgZnVsbC1zY3JlZW4gd2F0ZXJtYXJrJyxcbiAgQlVJTERJTl9XQVRFUk1BUktfTUVTU0FHRV9JU0ZVTExTQ1JFRU5XQVRFUk1BUks6ICdFbmFibGUgd2hlbiBmdWxsLXNjcmVlbiB3YXRlcm1hcmsgaXMgcmVxdWlyZWQnLFxuICBCVUlMRElOX1dBVEVSTUFSS19XQVRFUk1BUktERUdSRUU6ICdTZXQgd2F0ZXJtYXJrIGFuZ2xlJyxcbiAgQlVJTERJTl9XQVRFUk1BUktfTUVTU0FHRV9XQVRFUk1BUktERUdSRUU6ICdQbGVhc2UgZW50ZXIgYSBudW1iZXInLFxuICBCVUlMRElOX1dBVEVSTUFSS19XQVRFUk1BUktURVhUOiAnU2V0IHdhdGVybWFyayB0ZXh0JyxcbiAgQlVJTERJTl9XQVRFUk1BUktfTUVTU0FHRV9XQVRFUk1BUktURVhUOiAnUGxlYXNlIGVudGVyIHdhdGVybWFyayB0ZXh0JyxcbiAgQlVJTERJTl9XQVRFUk1BUktfV0FURVJNQVJLRk9OVFBBVEg6ICdTZXQgd2F0ZXJtYXJrIGZvbnQnLFxuICBCVUlMRElOX1dBVEVSTUFSS19NRVNTQUdFX1dBVEVSTUFSS0ZPTlRQQVRIOiAnUGxlYXNlIGVudGVyIHRoZSB3YXRlcm1hcmsgZm9udCBmaWxlIHBhdGgnLFxuICBCVUlMRElOX1dBVEVSTUFSS19XQVRFUk1BUktTQ0FMRVJBVElPOiAnU2V0IHRoZSByYXRpbyBvZiB0aGUgd2F0ZXJtYXJrIHRvIHRoZSBpbWFnZScsXG4gIEJVSUxESU5fV0FURVJNQVJLX01FU1NBR0VfV0FURVJNQVJLRk9OVFJBVElPOiAnUGxlYXNlIGVudGVyIGEgbnVtYmVyIGJldHdlZW4gMC0xJyxcbiAgQlVJTERJTl9XQVRFUk1BUktfV0FURVJNQVJLQ09MT1I6ICdTZXQgd2F0ZXJtYXJrIGZvbnQgY29sb3InLFxuICBCVUlMRElOX1dBVEVSTUFSS19NRVNTQUdFX1dBVEVSTUFSS0ZPTlRDT0xPUjogJ1BsZWFzZSBlbnRlciB0aGUgUkdCIGNvbG9yIHZhbHVlJyxcbiAgQlVJTERJTl9XQVRFUk1BUktfV0FURVJNQVJLSU1BR0VQQVRIOiAnU2V0IHdhdGVybWFyayBpbWFnZSBwYXRoJyxcbiAgQlVJTERJTl9XQVRFUk1BUktfTUVTU0FHRV9XQVRFUk1BUktJTUFHRVBBVEg6ICdQbGVhc2UgZW50ZXIgdGhlIHdhdGVybWFyayBpbWFnZSBwYXRoJyxcbiAgQlVJTERJTl9XQVRFUk1BUktfV0FURVJNQVJLUE9TSVRJT046ICdTZXQgd2F0ZXJtYXJrIHBvc2l0aW9uJyxcbiAgQlVJTERJTl9XQVRFUk1BUktfTUVTU0FHRV9XQVRFUk1BUktQT1NJVElPTjogJ1BsZWFzZSBzZWxlY3Qgd2F0ZXJtYXJrIHBvc2l0aW9uJyxcblxuICBCVUlMRElOX0NPTVBSRVNTOiAnUHJvY2Vzc2luZyBTZXR0aW5ncycsXG4gIEJVSUxESU5fQ09NUFJFU1NfUVVBTElUWTogJ1NldCBpbWFnZSBxdWFsaXR5JyxcbiAgQlVJTERJTl9DT01QUkVTU19NRVNTQUdFX1FVQUxJVFk6ICdQbGVhc2UgZW50ZXIgYW4gaW50ZWdlciBiZXR3ZWVuIDEtMTAwJyxcbiAgQlVJTERJTl9DT01QUkVTU19JU0NPTlZFUlQ6ICdXaGV0aGVyIHRvIHBlcmZvcm0gZm9ybWF0IGNvbnZlcnNpb24nLFxuICBCVUlMRElOX0NPTVBSRVNTX01FU1NBR0VfSVNDT05WRVJUOiAnRW5hYmxlIHdoZW4gZm9ybWF0IGNvbnZlcnNpb24gaXMgcmVxdWlyZWQnLFxuICBCVUlMRElOX0NPTVBSRVNTX0NPTlZFUlRGT1JNQVQ6ICdTZXQgY29udmVyc2lvbiBmb3JtYXQnLFxuICBCVUlMRElOX0NPTVBSRVNTX01FU1NBR0VfQ09OVkVSVEZPUk1BVDogJ1BsZWFzZSBzZWxlY3QgY29udmVyc2lvbiBmb3JtYXQnLFxuICBCVUlMRElOX0NPTVBSRVNTX0lTUkVTSVpFOiAnV2hldGhlciB0byByZXNpemUgdGhlIGltYWdlJyxcbiAgQlVJTERJTl9DT01QUkVTU19NRVNTQUdFX0lTUkVTSVpFOiAnRW5hYmxlIHdoZW4gaW1hZ2UgcmVzaXppbmcgaXMgcmVxdWlyZWQnLFxuICBCVUlMRElOX0NPTVBSRVNTX1JFU0laRVdJRFRIOiAnU2V0IHJlc2l6aW5nIHdpZHRoJyxcbiAgQlVJTERJTl9DT01QUkVTU19NRVNTQUdFX1JFU0laRVdJRFRIOiAnUGxlYXNlIGVudGVyIGEgbnVtYmVyJyxcbiAgQlVJTERJTl9DT01QUkVTU19SRVNJWkVIRUlHSFQ6ICdTZXQgcmVzaXppbmcgaGVpZ2h0JyxcbiAgQlVJTERJTl9DT01QUkVTU19NRVNTQUdFX1JFU0laRUhFSUdIVDogJ1BsZWFzZSBlbnRlciBhIG51bWJlcicsXG4gIEJVSUxESU5fQ09NUFJFU1NfSVNSRVNJWkVCWVBFUkNFTlQ6ICdXaGV0aGVyIHRvIHJlc2l6ZSB0aGUgaW1hZ2UgYnkgcGVyY2VudGFnZScsXG4gIEJVSUxESU5fQ09NUFJFU1NfTUVTU0FHRV9JU1JFU0laRUJZUEVSQ0VOVDogJ0VuYWJsZSB3aGVuIHJlc2l6aW5nIGJ5IHBlcmNlbnRhZ2UgaXMgcmVxdWlyZWQnLFxuICBCVUlMRElOX0NPTVBSRVNTX0lTRkxJUDogJ1doZXRoZXIgdG8gZmxpcCB0aGUgaW1hZ2UgdmVydGljYWxseScsXG4gIEJVSUxESU5fQ09NUFJFU1NfSVNGTE9QOiAnV2hldGhlciB0byBmbGlwIHRoZSBpbWFnZSBob3Jpem9udGFsbHknLFxuICBCVUlMRElOX0NPTVBSRVNTX1JFU0laRVBFUkNFTlQ6ICdTZXQgcmVzaXppbmcgcGVyY2VudGFnZScsXG4gIEJVSUxESU5fQ09NUFJFU1NfTUVTU0FHRV9SRVNJWkVQRVJDRU5UOiAnUGxlYXNlIGVudGVyIGEgbnVtYmVyJyxcbiAgQlVJTERJTl9DT01QUkVTU19TS0lQUkVTSVpFT0ZTTUFMTElNRzogJ1doZXRoZXIgdG8gc2tpcCByZXNpemluZyBvZiBzbWFsbCBpbWFnZXMnLFxuICBCVUlMRElOX0NPTVBSRVNTX0lTUk9UQVRFOiAnV2hldGhlciB0byByb3RhdGUgdGhlIGltYWdlJyxcbiAgQlVJTERJTl9DT01QUkVTU19NRVNTQUdFX0lTUk9UQVRFOiAnRW5hYmxlIHdoZW4gaW1hZ2Ugcm90YXRpb24gaXMgcmVxdWlyZWQnLFxuICBCVUlMRElOX0NPTVBSRVNTX1JPVEFURURFR1JFRTogJ1NldCByb3RhdGlvbiBhbmdsZScsXG4gIEJVSUxESU5fQ09NUFJFU1NfTUVTU0FHRV9ST1RBVEVERUdSRUU6ICdQbGVhc2UgZW50ZXIgYSBudW1iZXIsIGNhbiBiZSBuZWdhdGl2ZScsXG4gIEJVSUxESU5fQ09NUFJFU1NfSVNSRU1PVkVFWElGOiAnV2hldGhlciB0byByZW1vdmUgRVhJRiBpbmZvcm1hdGlvbicsXG4gIEJVSUxESU5fQ09NUFJFU1NfTUVTU0FHRV9JU1JFTU9WRUVYSUY6ICdFbmFibGUgd2hlbiByZW1vdmluZyBFWElGIGluZm9ybWF0aW9uIGlzIHJlcXVpcmVkJyxcbiAgLy8gUGx1Z2luIEhhbmRsZXJcbiAgUExVR0lOX0hBTkRMRVJfUExVR0lOX0lOU1RBTExfU1VDQ0VTUzogJ1BsdWdpbiBpbnN0YWxsZWQgc3VjY2Vzc2Z1bGx5JyxcbiAgUExVR0lOX0hBTkRMRVJfUExVR0lOX0lOU1RBTExfRkFJTEVEOiAnUGx1Z2luIGluc3RhbGxhdGlvbiBmYWlsZWQnLFxuICBQTFVHSU5fSEFORExFUl9QTFVHSU5fSU5TVEFMTF9GQUlMRURfUkVBU09OOlxuICAgICdQbHVnaW4gaW5zdGFsbGF0aW9uIGZhaWxlZCwgZXJyb3IgY29kZSBpcyAke2NvZGV9LCBlcnJvciBsb2cgaXMgXFxuICR7ZGF0YX0nLFxuICBQTFVHSU5fSEFORExFUl9QTFVHSU5fSU5TVEFMTF9GQUlMRURfUEFUSDpcbiAgICAnUGx1Z2luIGluc3RhbGxhdGlvbiBmYWlsZWQsIHBsZWFzZSBlbnRlciBhIHZhbGlkIHBsdWdpbiBuYW1lIG9yIHZhbGlkIGluc3RhbGxhdGlvbiBwYXRoJyxcbiAgUExVR0lOX0hBTkRMRVJfUExVR0lOX1VOSU5TVEFMTF9TVUNDRVNTOiAnUGx1Z2luIHVuaW5zdGFsbGVkIHN1Y2Nlc3NmdWxseScsXG4gIFBMVUdJTl9IQU5ETEVSX1BMVUdJTl9VTklOU1RBTExfRkFJTEVEOiAnUGx1Z2luIHVuaW5zdGFsbCBmYWlsZWQnLFxuICBQTFVHSU5fSEFORExFUl9QTFVHSU5fVU5JTlNUQUxMX0ZBSUxFRF9SRUFTT046XG4gICAgJ1BsdWdpbiB1bmluc3RhbGwgZmFpbGVkLCBlcnJvciBjb2RlIGlzICR7Y29kZX0sIGVycm9yIGxvZyBpcyBcXG4gJHtkYXRhfScsXG4gIFBMVUdJTl9IQU5ETEVSX1BMVUdJTl9VTklOU1RBTExfRkFJTEVEX1ZBTElEOiAnUGx1Z2luIHVuaW5zdGFsbCBmYWlsZWQsIHBsZWFzZSBlbnRlciBhIHZhbGlkIHBsdWdpbiBuYW1lJyxcbiAgUExVR0lOX0hBTkRMRVJfUExVR0lOX1VQREFURV9TVUNDRVNTOiAnUGx1Z2luIHVwZGF0ZWQgc3VjY2Vzc2Z1bGx5JyxcbiAgUExVR0lOX0hBTkRMRVJfUExVR0lOX1VQREFURV9GQUlMRUQ6ICdQbHVnaW4gdXBkYXRlIGZhaWxlZCcsXG4gIFBMVUdJTl9IQU5ETEVSX1BMVUdJTl9VUERBVEVfRkFJTEVEX1JFQVNPTjogJ1BsdWdpbiB1cGRhdGUgZmFpbGVkLCBlcnJvciBjb2RlIGlzICR7Y29kZX0sIGVycm9yIGxvZyBpcyBcXG4gJHtkYXRhfScsXG4gIFBMVUdJTl9IQU5ETEVSX1BMVUdJTl9VUERBVEVfRkFJTEVEX1ZBTElEOiAnUGx1Z2luIHVwZGF0ZSBmYWlsZWQsIHBsZWFzZSBlbnRlciBhIHZhbGlkIHBsdWdpbiBuYW1lJ1xufVxuIiwiaW1wb3J0IHsgRXZlbnRFbWl0dGVyIH0gZnJvbSAnZXZlbnRzJ1xuaW1wb3J0IHsgcmVtb3ZlLCBlbnN1cmVGaWxlU3luYywgcGF0aEV4aXN0c1N5bmMgfSBmcm9tICdmcy1leHRyYSdcbmltcG9ydCB7IGdldCwgc2V0LCB1bnNldCB9IGZyb20gJ2xvZGFzaCdcbmltcG9ydCB7IGhvbWVkaXIgfSBmcm9tICdvcydcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnXG5cbmltcG9ydCB7IENvbW1hbmRlciB9IGZyb20gJy4uL2xpYi9Db21tYW5kZXInXG5pbXBvcnQgeyBMaWZlY3ljbGVQbHVnaW5zLCBzZXRDdXJyZW50UGx1Z2luTmFtZSB9IGZyb20gJy4uL2xpYi9MaWZlY3ljbGVQbHVnaW5zJ1xuaW1wb3J0IHsgTG9nZ2VyIH0gZnJvbSAnLi4vbGliL0xvZ2dlcidcbmltcG9ydCB7IFBsdWdpbkhhbmRsZXIgfSBmcm9tICcuLi9saWIvUGx1Z2luSGFuZGxlcidcbmltcG9ydCB7IFBsdWdpbkxvYWRlciB9IGZyb20gJy4uL2xpYi9QbHVnaW5Mb2FkZXInXG5pbXBvcnQgeyBSZXF1ZXN0IH0gZnJvbSAnLi4vbGliL1JlcXVlc3QnXG5cbmltcG9ydCB7IExpZmVjeWNsZSB9IGZyb20gJy4vTGlmZWN5Y2xlJ1xuXG5pbXBvcnQgYnVpbGRJblVwbG9hZGVycyBmcm9tICcuLi9wbHVnaW5zL3VwbG9hZGVyJ1xuaW1wb3J0IGJ1aWxkSW5UcmFuc2Zvcm1lcnMgZnJvbSAnLi4vcGx1Z2lucy90cmFuc2Zvcm1lcidcblxuaW1wb3J0IGdldENsaXBib2FyZEltYWdlIGZyb20gJy4uL3V0aWxzL2dldENsaXBib2FyZEltYWdlJ1xuXG5pbXBvcnQgeyBpc0NvbmZpZ0tleUluQmxhY2tMaXN0LCBpc0lucHV0Q29uZmlnVmFsaWQgfSBmcm9tICcuLi91dGlscy9jb21tb24nXG5pbXBvcnQgREIgZnJvbSAnLi4vdXRpbHMvZGInXG5pbXBvcnQgeyBJQnVpbGRJbkV2ZW50LCBJQnVzRXZlbnQgfSBmcm9tICcuLi91dGlscy9lbnVtJ1xuaW1wb3J0IHsgZXZlbnRCdXMgfSBmcm9tICcuLi91dGlscy9ldmVudEJ1cydcblxuaW1wb3J0IHsgSTE4bk1hbmFnZXIgfSBmcm9tICcuLi9pMThuJ1xuXG5pbXBvcnQge1xuICBJSGVscGVyLFxuICBJSW1nSW5mbyxcbiAgSUNvbmZpZyxcbiAgSVBpY0dvLFxuICBJU3RyaW5nS2V5TWFwLFxuICBJUGx1Z2luTG9hZGVyLFxuICBJSTE4bk1hbmFnZXIsXG4gIElQaWNHb1BsdWdpbixcbiAgSVBpY0dvUGx1Z2luSW50ZXJmYWNlLFxuICBJUmVxdWVzdFxufSBmcm9tICcuLi90eXBlcydcblxuZXhwb3J0IGNsYXNzIFBpY0dvIGV4dGVuZHMgRXZlbnRFbWl0dGVyIGltcGxlbWVudHMgSVBpY0dvIHtcbiAgcHJpdmF0ZSBfY29uZmlnITogSUNvbmZpZ1xuICBwcml2YXRlIGxpZmVjeWNsZSE6IExpZmVjeWNsZVxuICBwcml2YXRlIGRiITogREJcbiAgcHJpdmF0ZSBfcGx1Z2luTG9hZGVyITogUGx1Z2luTG9hZGVyXG4gIGNvbmZpZ1BhdGg6IHN0cmluZ1xuICBiYXNlRGlyITogc3RyaW5nXG4gIGhlbHBlciE6IElIZWxwZXJcbiAgbG9nOiBMb2dnZXJcbiAgY21kOiBDb21tYW5kZXJcbiAgb3V0cHV0OiBJSW1nSW5mb1tdXG4gIGlucHV0OiBhbnlbXVxuICByYXdJbnB1dDogYW55W11cbiAgcHJvY2Vzc2VkSW5wdXQ6IGFueVtdXG4gIHBsdWdpbkhhbmRsZXI6IFBsdWdpbkhhbmRsZXJcbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkIHdpbGwgYmUgcmVtb3ZlZCBpbiB2MS41LjArXG4gICAqXG4gICAqIHVzZSByZXF1ZXN0IGluc3RlYWRcbiAgICovXG4gIFJlcXVlc3QhOiBSZXF1ZXN0XG4gIGkxOG4hOiBJSTE4bk1hbmFnZXJcbiAgVkVSU0lPTjogc3RyaW5nID0gcHJvY2Vzcy5lbnYuUElDR09fVkVSU0lPTlxuICBHVUlfVkVSU0lPTj86IHN0cmluZ1xuXG4gIGdldCBwbHVnaW5Mb2FkZXIoKTogSVBsdWdpbkxvYWRlciB7XG4gICAgcmV0dXJuIHRoaXMuX3BsdWdpbkxvYWRlclxuICB9XG5cbiAgY29uc3RydWN0b3IoY29uZmlnUGF0aDogc3RyaW5nID0gJycpIHtcbiAgICBzdXBlcigpXG4gICAgdGhpcy5jb25maWdQYXRoID0gY29uZmlnUGF0aFxuICAgIHRoaXMuaW5wdXQgPSBbXVxuICAgIHRoaXMucmF3SW5wdXQgPSBbXVxuICAgIHRoaXMucHJvY2Vzc2VkSW5wdXQgPSBbXVxuICAgIHRoaXMub3V0cHV0ID0gW11cbiAgICB0aGlzLmhlbHBlciA9IHtcbiAgICAgIHRyYW5zZm9ybWVyOiBuZXcgTGlmZWN5Y2xlUGx1Z2lucygndHJhbnNmb3JtZXInKSxcbiAgICAgIHVwbG9hZGVyOiBuZXcgTGlmZWN5Y2xlUGx1Z2lucygndXBsb2FkZXInKSxcbiAgICAgIGJlZm9yZVRyYW5zZm9ybVBsdWdpbnM6IG5ldyBMaWZlY3ljbGVQbHVnaW5zKCdiZWZvcmVUcmFuc2Zvcm1QbHVnaW5zJyksXG4gICAgICBiZWZvcmVVcGxvYWRQbHVnaW5zOiBuZXcgTGlmZWN5Y2xlUGx1Z2lucygnYmVmb3JlVXBsb2FkUGx1Z2lucycpLFxuICAgICAgYWZ0ZXJVcGxvYWRQbHVnaW5zOiBuZXcgTGlmZWN5Y2xlUGx1Z2lucygnYWZ0ZXJVcGxvYWRQbHVnaW5zJylcbiAgICB9XG4gICAgdGhpcy5pbml0Q29uZmlnUGF0aCgpXG4gICAgdGhpcy5sb2cgPSBuZXcgTG9nZ2VyKHRoaXMpXG4gICAgdGhpcy5jbWQgPSBuZXcgQ29tbWFuZGVyKHRoaXMpXG4gICAgdGhpcy5wbHVnaW5IYW5kbGVyID0gbmV3IFBsdWdpbkhhbmRsZXIodGhpcylcbiAgICB0aGlzLmluaXRDb25maWcoKVxuICAgIHRoaXMuaW5pdCgpXG4gIH1cblxuICBwcml2YXRlIGluaXRDb25maWdQYXRoKCk6IHZvaWQge1xuICAgIHRoaXMuY29uZmlnUGF0aCA9IHRoaXMuY29uZmlnUGF0aCB8fCBwYXRoLmpvaW4oaG9tZWRpcigpLCAnLnBpY2xpc3QvY29uZmlnLmpzb24nKVxuICAgIGlmIChwYXRoLmV4dG5hbWUodGhpcy5jb25maWdQYXRoKS50b1VwcGVyQ2FzZSgpICE9PSAnLkpTT04nKSB7XG4gICAgICB0aGlzLmNvbmZpZ1BhdGggPSAnJ1xuICAgICAgdGhyb3cgRXJyb3IoJ1RoZSBjb25maWd1cmF0aW9uIGZpbGUgb25seSBzdXBwb3J0cyBKU09OIGZvcm1hdC4nKVxuICAgIH1cbiAgICB0aGlzLmJhc2VEaXIgPSBwYXRoLmRpcm5hbWUodGhpcy5jb25maWdQYXRoKVxuICAgIGlmICghcGF0aEV4aXN0c1N5bmModGhpcy5jb25maWdQYXRoKSkge1xuICAgICAgZW5zdXJlRmlsZVN5bmMoYCR7dGhpcy5jb25maWdQYXRofWApXG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBpbml0Q29uZmlnKCk6IHZvaWQge1xuICAgIHRoaXMuZGIgPSBuZXcgREIodGhpcylcbiAgICB0aGlzLl9jb25maWcgPSB0aGlzLmRiLnJlYWQodHJ1ZSkgYXMgSUNvbmZpZ1xuICB9XG5cbiAgcHJpdmF0ZSBpbml0KCk6IHZvaWQge1xuICAgIHRyeSB7XG4gICAgICAvLyBpbml0IDE4biBhdCBmaXJzdFxuICAgICAgdGhpcy5pMThuID0gbmV3IEkxOG5NYW5hZ2VyKHRoaXMpXG4gICAgICB0aGlzLlJlcXVlc3QgPSBuZXcgUmVxdWVzdCh0aGlzKVxuICAgICAgdGhpcy5fcGx1Z2luTG9hZGVyID0gbmV3IFBsdWdpbkxvYWRlcih0aGlzKVxuICAgICAgLy8gbG9hZCBzZWxmIHBsdWdpbnNcbiAgICAgIHNldEN1cnJlbnRQbHVnaW5OYW1lKCdwaWNnbycpXG4gICAgICBidWlsZEluVXBsb2FkZXJzKCkucmVnaXN0ZXIodGhpcylcbiAgICAgIGJ1aWxkSW5UcmFuc2Zvcm1lcnMoKS5yZWdpc3Rlcih0aGlzKVxuICAgICAgc2V0Q3VycmVudFBsdWdpbk5hbWUoJycpXG4gICAgICAvLyBsb2FkIHRoaXJkLXBhcnR5IHBsdWdpbnNcbiAgICAgIHRoaXMuX3BsdWdpbkxvYWRlci5sb2FkKClcbiAgICAgIHRoaXMubGlmZWN5Y2xlID0gbmV3IExpZmVjeWNsZSh0aGlzKVxuICAgIH0gY2F0Y2ggKGU6IGFueSkge1xuICAgICAgdGhpcy5lbWl0KElCdWlsZEluRXZlbnQuVVBMT0FEX1BST0dSRVNTLCAtMSlcbiAgICAgIHRoaXMubG9nLmVycm9yKGUpXG4gICAgICB0aHJvdyBlXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIGVhc2lseSBtYW5udWFsbHkgbG9hZCBhIHBsdWdpblxuICAgKiBpZiBwcm92aWRlIHBsdWdpbiBuYW1lLCB3aWxsIHJlZ2lzdGVyIHBsdWdpbiBieSBuYW1lXG4gICAqIG9yIGp1c3QgaW5zdGFudGlhdGUgYSBwbHVnaW5cbiAgICovXG4gIHVzZShwbHVnaW46IElQaWNHb1BsdWdpbiwgbmFtZT86IHN0cmluZyk6IElQaWNHb1BsdWdpbkludGVyZmFjZSB7XG4gICAgaWYgKG5hbWUpIHtcbiAgICAgIHRoaXMucGx1Z2luTG9hZGVyLnJlZ2lzdGVyUGx1Z2luKG5hbWUsIHBsdWdpbilcbiAgICAgIHJldHVybiB0aGlzLnBsdWdpbkxvYWRlci5nZXRQbHVnaW4obmFtZSkhXG4gICAgfVxuICAgIHJldHVybiBwbHVnaW4odGhpcylcbiAgfVxuXG4gIHJlZ2lzdGVyQ29tbWFuZHMoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuY29uZmlnUGF0aCAhPT0gJycpIHtcbiAgICAgIHRoaXMuY21kLmluaXQoKVxuICAgICAgdGhpcy5jbWQubG9hZENvbW1hbmRzKClcbiAgICB9XG4gIH1cblxuICBnZXRDb25maWc8VD4obmFtZT86IHN0cmluZyk6IFQge1xuICAgIHRoaXMuX2NvbmZpZyA9IHRoaXMuZGIucmVhZCh0cnVlKSBhcyBJQ29uZmlnXG4gICAgaWYgKCFuYW1lKSB7XG4gICAgICByZXR1cm4gdGhpcy5fY29uZmlnIGFzIHVua25vd24gYXMgVFxuICAgIH1cbiAgICByZXR1cm4gZ2V0KHRoaXMuX2NvbmZpZywgbmFtZSlcbiAgfVxuXG4gIHNhdmVDb25maWcoY29uZmlnOiBJU3RyaW5nS2V5TWFwPGFueT4pOiB2b2lkIHtcbiAgICBpZiAoIWlzSW5wdXRDb25maWdWYWxpZChjb25maWcpKSB7XG4gICAgICB0aGlzLmxvZy53YXJuKCd0aGUgZm9ybWF0IG9mIGNvbmZpZyBpcyBpbnZhbGlkLCBwbGVhc2UgcHJvdmlkZSBvYmplY3QnKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIHRoaXMuc2V0Q29uZmlnKGNvbmZpZylcbiAgICB0aGlzLmRiLnNhdmVDb25maWcoY29uZmlnKVxuICB9XG5cbiAgcmVtb3ZlQ29uZmlnKGtleTogc3RyaW5nLCBwcm9wTmFtZTogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKCFrZXkgfHwgIXByb3BOYW1lKSByZXR1cm5cbiAgICBpZiAoaXNDb25maWdLZXlJbkJsYWNrTGlzdChrZXkpKSB7XG4gICAgICB0aGlzLmxvZy53YXJuKGB0aGUgY29uZmlnLiR7a2V5fSBjYW4ndCBiZSByZW1vdmVkYClcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICB0aGlzLnVuc2V0Q29uZmlnKGtleSwgcHJvcE5hbWUpXG4gICAgdGhpcy5kYi51bnNldChrZXksIHByb3BOYW1lKVxuICB9XG5cbiAgc2V0Q29uZmlnKGNvbmZpZzogSVN0cmluZ0tleU1hcDxhbnk+KTogdm9pZCB7XG4gICAgaWYgKCFpc0lucHV0Q29uZmlnVmFsaWQoY29uZmlnKSkge1xuICAgICAgdGhpcy5sb2cud2FybigndGhlIGZvcm1hdCBvZiBjb25maWcgaXMgaW52YWxpZCwgcGxlYXNlIHByb3ZpZGUgb2JqZWN0JylcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBPYmplY3Qua2V5cyhjb25maWcpLmZvckVhY2goKG5hbWU6IHN0cmluZykgPT4ge1xuICAgICAgaWYgKGlzQ29uZmlnS2V5SW5CbGFja0xpc3QobmFtZSkpIHtcbiAgICAgICAgdGhpcy5sb2cud2FybihgdGhlIGNvbmZpZy4ke25hbWV9IGNhbid0IGJlIG1vZGlmaWVkYClcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1keW5hbWljLWRlbGV0ZVxuICAgICAgICBkZWxldGUgY29uZmlnW25hbWVdXG4gICAgICB9XG4gICAgICBzZXQodGhpcy5fY29uZmlnLCBuYW1lLCBjb25maWdbbmFtZV0pXG4gICAgICBldmVudEJ1cy5lbWl0KElCdXNFdmVudC5DT05GSUdfQ0hBTkdFLCB7XG4gICAgICAgIGNvbmZpZ05hbWU6IG5hbWUsXG4gICAgICAgIHZhbHVlOiBjb25maWdbbmFtZV1cbiAgICAgIH0pXG4gICAgfSlcbiAgfVxuXG4gIHVuc2V0Q29uZmlnKGtleTogc3RyaW5nLCBwcm9wTmFtZTogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKCFrZXkgfHwgIXByb3BOYW1lKSByZXR1cm5cbiAgICBpZiAoaXNDb25maWdLZXlJbkJsYWNrTGlzdChrZXkpKSB7XG4gICAgICB0aGlzLmxvZy53YXJuKGB0aGUgY29uZmlnLiR7a2V5fSBjYW4ndCBiZSB1bnNldGApXG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgdW5zZXQodGhpcy5nZXRDb25maWcoa2V5KSwgcHJvcE5hbWUpXG4gIH1cblxuICBnZXQgcmVxdWVzdCgpOiBJUmVxdWVzdFsncmVxdWVzdCddIHtcbiAgICByZXR1cm4gdGhpcy5SZXF1ZXN0LnJlcXVlc3QuYmluZCh0aGlzLlJlcXVlc3QpXG4gIH1cblxuICBhc3luYyB1cGxvYWQoaW5wdXQ/OiBhbnlbXSk6IFByb21pc2U8SUltZ0luZm9bXSB8IEVycm9yPiB7XG4gICAgaWYgKHRoaXMuY29uZmlnUGF0aCA9PT0gJycpIHtcbiAgICAgIHRoaXMubG9nLmVycm9yKCdObyBjb25maWcgZmlsZSBmb3VuZCwgcGxlYXNlIGNoZWNrIHlvdXIgY29uZmlnIGZpbGUgcGF0aCcpXG4gICAgICByZXR1cm4gW11cbiAgICB9XG5cbiAgICBpZiAoaW5wdXQgPT09IHVuZGVmaW5lZCB8fCBpbnB1dC5sZW5ndGggPT09IDApIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHsgaW1nUGF0aCwgc2hvdWxkS2VlcEFmdGVyVXBsb2FkaW5nIH0gPSBhd2FpdCBnZXRDbGlwYm9hcmRJbWFnZSh0aGlzKVxuICAgICAgICBjb25zdCBjbGVhbnVwID0gKCk6IHZvaWQgPT4ge1xuICAgICAgICAgIGlmICghc2hvdWxkS2VlcEFmdGVyVXBsb2FkaW5nKSB7XG4gICAgICAgICAgICByZW1vdmUoaW1nUGF0aCkuY2F0Y2goZSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMubG9nLmVycm9yKGUpXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoaW1nUGF0aCA9PT0gJ25vIGltYWdlJykge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignaW1hZ2Ugbm90IGZvdW5kIGluIGNsaXBib2FyZCcpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5vbmNlKElCdWlsZEluRXZlbnQuRkFJTEVELCBjbGVhbnVwKVxuICAgICAgICAgIHRoaXMub25jZShJQnVpbGRJbkV2ZW50LkZJTklTSEVELCBjbGVhbnVwKVxuICAgICAgICAgIGNvbnN0IHsgb3V0cHV0IH0gPSBhd2FpdCB0aGlzLmxpZmVjeWNsZS5zdGFydChbaW1nUGF0aF0pXG4gICAgICAgICAgcmV0dXJuIG91dHB1dFxuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHRoaXMuZW1pdChJQnVpbGRJbkV2ZW50LkZBSUxFRCwgZSlcbiAgICAgICAgdGhyb3cgZVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCB7IG91dHB1dCB9ID0gYXdhaXQgdGhpcy5saWZlY3ljbGUuc3RhcnQoaW5wdXQpXG4gICAgICByZXR1cm4gb3V0cHV0XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgdXBsb2FkUmV0dXJuQ3R4KGlucHV0PzogYW55W10sIHNraXBQcm9jZXNzID0gZmFsc2UpOiBQcm9taXNlPElQaWNHbz4ge1xuICAgIGlmICh0aGlzLmNvbmZpZ1BhdGggPT09ICcnKSB7XG4gICAgICB0aGlzLmxvZy5lcnJvcignTm8gY29uZmlnIGZpbGUgZm91bmQsIHBsZWFzZSBjaGVjayB5b3VyIGNvbmZpZyBmaWxlIHBhdGgnKVxuICAgICAgcmV0dXJuIHRoaXNcbiAgICB9XG5cbiAgICBpZiAoaW5wdXQgPT09IHVuZGVmaW5lZCB8fCBpbnB1dC5sZW5ndGggPT09IDApIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHsgaW1nUGF0aCwgc2hvdWxkS2VlcEFmdGVyVXBsb2FkaW5nIH0gPSBhd2FpdCBnZXRDbGlwYm9hcmRJbWFnZSh0aGlzKVxuICAgICAgICBjb25zdCBjbGVhbnVwID0gKCk6IHZvaWQgPT4ge1xuICAgICAgICAgIGlmICghc2hvdWxkS2VlcEFmdGVyVXBsb2FkaW5nKSB7XG4gICAgICAgICAgICByZW1vdmUoaW1nUGF0aCkuY2F0Y2goZSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMubG9nLmVycm9yKGUpXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoaW1nUGF0aCA9PT0gJ25vIGltYWdlJykge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignaW1hZ2Ugbm90IGZvdW5kIGluIGNsaXBib2FyZCcpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5vbmNlKElCdWlsZEluRXZlbnQuRkFJTEVELCBjbGVhbnVwKVxuICAgICAgICAgIHRoaXMub25jZShJQnVpbGRJbkV2ZW50LkZJTklTSEVELCBjbGVhbnVwKVxuICAgICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmxpZmVjeWNsZS5zdGFydChbaW1nUGF0aF0sIHNraXBQcm9jZXNzKVxuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHRoaXMuZW1pdChJQnVpbGRJbkV2ZW50LkZBSUxFRCwgZSlcbiAgICAgICAgdGhyb3cgZVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gYXdhaXQgdGhpcy5saWZlY3ljbGUuc3RhcnQoaW5wdXQsIHNraXBQcm9jZXNzKVxuICAgIH1cbiAgfVxufVxuIiwiaW1wb3J0IHsgSVBpY0dvIH0gZnJvbSAnLi4vLi4vdHlwZXMnXG5pbXBvcnQgSW1nRnJvbVBhdGggZnJvbSAnLi9wYXRoJ1xuaW1wb3J0IEltZ0Zyb21CYXNlNjQgZnJvbSAnLi9iYXNlNjQnXG5cbmNvbnN0IGJ1aWxkSW5UcmFuc2Zvcm1lcnMgPSAoKSA9PiB7XG4gIHJldHVybiB7XG4gICAgcmVnaXN0ZXIoY3R4OiBJUGljR28pIHtcbiAgICAgIGN0eC5oZWxwZXIudHJhbnNmb3JtZXIucmVnaXN0ZXIoJ3BhdGgnLCBJbWdGcm9tUGF0aClcbiAgICAgIGN0eC5oZWxwZXIudHJhbnNmb3JtZXIucmVnaXN0ZXIoJ2Jhc2U2NCcsIEltZ0Zyb21CYXNlNjQpXG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IGJ1aWxkSW5UcmFuc2Zvcm1lcnNcbiJdLCJuYW1lcyI6WyJjcmVhdGVDb21tYW5kIiwiY21kIiwiY29tbWFuZCIsImRlc2NyaXB0aW9uIiwiYWxpYXMiLCJhY3Rpb24iLCJvcHRpb25zIiwicHJvZ3JhbSIsInByb3h5Iiwib3B0aW9uIiwicmVnaXN0cnkiLCJwbHVnaW5IYW5kbGVyIiwiaGFuZGxlIiwiY3R4IiwicGx1Z2lucyIsImluc3RhbGwiLCJjYXRjaCIsImUiLCJsb2ciLCJlcnJvciIsInVuaW5zdGFsbCIsInVwZGF0ZSIsImNvbmZpZyIsInJhbmRvbVN0cmluZ0dlbmVyYXRvciIsImxlbmd0aCIsImNoYXJzIiwiQXJyYXkiLCJmcm9tIiwibWFwIiwiY2hhckF0IiwiTWF0aCIsImZsb29yIiwicmFuZG9tIiwiam9pbiIsImZvcm1hdEhlbHBlciIsIm51bSIsInRvU3RyaW5nIiwiZ2V0TWQ1IiwiaW5wdXQiLCJjcnlwdG8iLCJjcmVhdGVIYXNoIiwiZGlnZXN0IiwicmVuYW1lRmlsZU5hbWVXaXRoQ3VzdG9tU3RyaW5nIiwib2xkTmFtZSIsImN1c3RvbUZvcm1hdCIsImFmZml4RmlsZU5hbWUiLCJmaWxlQnVmZmVyIiwibm93IiwiRGF0ZSIsInllYXIiLCJnZXRGdWxsWWVhciIsImZpbGViYXNlbmFtZSIsInBhdGgiLCJiYXNlbmFtZSIsImV4dG5hbWUiLCJjb252ZXJzaW9uTWFwIiwic2xpY2UiLCJnZXRNb250aCIsImdldERhdGUiLCJnZXRIb3VycyIsImdldE1pbnV0ZXMiLCJnZXRTZWNvbmRzIiwiZ2V0TWlsbGlzZWNvbmRzIiwicGFkU3RhcnQiLCJ1dWlkdjQiLCJyZXBsYWNlIiwiZ2V0VGltZSIsInVuZGVmaW5lZCIsIk9iamVjdCIsImtleXMiLCJzb21lIiwiaXRlbSIsImluY2x1ZGVzIiwiZXh0IiwibmV3TmFtZSIsInJlZHVjZSIsImFjYyIsImN1ciIsIlJlZ0V4cCIsIl8iLCJncm91cDEiLCJwYXJzZUludCIsIl9yZXN1bHQiLCJrZXkiLCJjb3VudCIsIm1heCIsImRpcm5hbWUiLCJzcGxpdCIsInNlcCIsImEiLCJiIiwiaXNVcmwiLCJ1cmwiLCJ0ZXN0IiwiaXNVcmxFbmNvZGUiLCJkZWNvZGVVUkkiLCJoYW5kbGVVcmxFbmNvZGUiLCJlbmNvZGVVUkkiLCJnZXRJbWFnZVNpemUiLCJmaWxlIiwid2lkdGgiLCJoZWlnaHQiLCJ0eXBlIiwiaW1hZ2VTaXplIiwicmVhbCIsImdldEZTRmlsZSIsImFzeW5jIiwiZmlsZVBhdGgiLCJmaWxlTmFtZSIsImJ1ZmZlciIsInJlYWRGaWxlIiwic3VjY2VzcyIsIl9hIiwicmVhc29uIiwiZ2V0VVJMRmlsZSIsInRpbWVvdXRJZCIsInJlcXVlc3RGbiIsIlByb21pc2UiLCJyZXNvbHZlIiwicmVqZWN0IiwicmVzIiwicmVxdWVzdCIsIm1ldGhvZCIsInJlc29sdmVXaXRoRnVsbFJlc3BvbnNlIiwicmVzcG9uc2VUeXBlIiwidGhlbiIsInJlc3AiLCJkYXRhIiwiY2xlYXJUaW1lb3V0IiwidXJsUGF0aCIsIlVSTCIsInBhdGhuYW1lIiwic2VhcmNoUGFyYW1zIiwiZ2V0Iiwic3RhcnRzV2l0aCIsIm1lc3NhZ2UiLCJ0aW1lb3V0UHJvbWlzZSIsInNldFRpbWVvdXQiLCJyYWNlIiwiZ2V0UGx1Z2luTmFtZVR5cGUiLCJuYW1lIiwiaXNTaW1wbGVOYW1lIiwibmFtZU9yUGF0aCIsImlzQWJzb2x1dGUiLCJwbHVnaW5QYXRoIiwicHJvY2VzcyIsImN3ZCIsImZzIiwiZXhpc3RzU3luYyIsImhhbmRsZUNvbXBsZXRlUGx1Z2luTmFtZSIsInNjb3BlIiwiZ2V0UHJvY2Vzc1BsdWdpbk5hbWUiLCJsb2dnZXIiLCJjb25zb2xlIiwiaGFuZGxlVW5peFN0eWxlUGF0aCIsIndhcm4iLCJnZXROb3JtYWxQbHVnaW5OYW1lIiwicmVtb3ZlUGx1Z2luVmVyc2lvbiIsInBhY2thZ2VKU09OUGF0aCIsInBvc2l4IiwicGtnIiwicmVhZEpTT05TeW5jIiwicGF0aFN0ciIsInJlZyIsIm1hdGNoQXJyIiwibWF0Y2giLCJjb25maWdCbGFja0xpc3QiLCJpc0NvbmZpZ0tleUluQmxhY2tMaXN0IiwiYmxhY2tJdGVtIiwiaXNJbnB1dENvbmZpZ1ZhbGlkIiwiaXNBcnJheSIsInNhZmVQYXJzZSIsInN0ciIsIkpTT04iLCJwYXJzZSIsImZvcmNlTnVtYmVyIiwiaXNOYU4iLCJOdW1iZXIiLCJpc0RldiIsImVudiIsIk5PREVfRU5WIiwiZGVmYXVsdFdhdGVybWFya0ltYWdlUGF0aCIsIl9fZGlybmFtZSIsIkFkZFdhdGVybWFyayIsImltZyIsIndhdGVybWFya1R5cGUiLCJkZWZhdWx0V2F0ZXJtYXJrRm9udFBhdGgiLCJpc0Z1bGxTY3JlZW5XYXRlcm1hcmsiLCJ3YXRlcm1hcmtEZWdyZWUiLCJ0ZXh0Iiwid2F0ZXJtYXJrRm9udFBhdGgiLCJ3YXRlcm1hcmtTY2FsZVJhdGlvIiwid2F0ZXJtYXJrQ29sb3IiLCJ3YXRlcm1hcmtJbWFnZVBhdGgiLCJwb3NpdGlvbiIsImltYWdlIiwic2hhcnAiLCJhbmltYXRlZCIsImltZ1dpZHRoIiwibWV0YWRhdGEiLCJ3YXRlcm1hcmsiLCJ0b0J1ZmZlciIsImNvbG9yIiwiZm9udEZhbWlseSIsImFuY2hvciIsImF0dHJpYnV0ZXMiLCJmaWxsIiwidGV4dFNWRyIsIlRleHRUb1NWRyIsImxvYWRTeW5jIiwiZ2V0U1ZHIiwiQnVmZmVyIiwidGV4dDJTVkciLCJ3YXRlcm1hcmtXaWR0aCIsIndhdGVybWFya0hlaWdodCIsImdldFNpemUiLCJ3YXRlcm1hcmtSZXNpemVXaWR0aCIsIndhdGVybWFya1Jlc2l6ZUhlaWdodCIsInJlc2l6ZSIsImZpdCIsInJvdGF0ZSIsImJhY2tncm91bmQiLCJyIiwiZyIsImFscGhhIiwiY3JlYXRlV2F0ZXJtYXJrIiwiY29tcG9zaXRlIiwiZ3Jhdml0eSIsInRpbGUiLCJ2YWxpZFBhcmFtIiwicGFyYW1zIiwiZXZlcnkiLCJwYXJhbSIsImF2YWlsYWJsZUNvbnZlcnRGb3JtYXRMaXN0IiwiaW1hZ2VGb3JtYXRMaXN0IiwidmFsaWRPdXRwdXRGb3JtYXQiLCJmb3JtYXQiLCJpbWFnZUFkZFdhdGVyTWFyayIsIndhdGVybWFya1RleHQiLCJ3YXRlcm1hcmtQb3NpdGlvbiIsImZvcm1hdE9wdGlvbnMiLCJmb3JtYXRDb252ZXJ0T2JqIiwicXVhbGl0eSIsImlzQ29udmVydCIsImNvbnZlcnRGb3JtYXQiLCJpc1JlU2l6ZSIsInJlU2l6ZUhlaWdodCIsInJlU2l6ZVdpZHRoIiwic2tpcFJlU2l6ZU9mU21hbGxJbWciLCJpc1JlU2l6ZUJ5UGVyY2VudCIsInJlU2l6ZVBlcmNlbnQiLCJpc1JvdGF0ZSIsImlzRmxpcCIsImlzRmxvcCIsInJvdGF0ZURlZ3JlZSIsInBpY0JlZCIsImltYWdlQ29tcHJlc3MiLCJyYXdGb3JtYXQiLCJub3JtYWxpemVJbWFnZUV4dCIsIm1pbiIsInJvdW5kIiwiaW1hZ2VXaWR0aCIsImltYWdlSGVpZ2h0Iiwic2NhbGVSYXRpbyIsImZsaXAiLCJmbG9wIiwibmV3Rm9ybWF0IiwiZ2V0Q29udmVydGVkRm9ybWF0IiwidG9Gb3JtYXQiLCJtb3pqcGVnIiwidG9Mb3dlckNhc2UiLCJpc05lZWRBZGRXYXRlcm1hcmsiLCJ3YXRlcm1hcmtPcHRpb25zIiwiZmlsZUV4dCIsImlzQWRkV2F0ZXJtYXJrIiwiaXNOZWVkQ29tcHJlc3MiLCJjb21wcmVzc09wdGlvbnMiLCJyZW1vdmVFeGlmIiwidXBsb2FkIiwiYXJndW1lbnRzIiwiaW5wdXRMaXN0IiwiZmlsdGVyIiwiZXhpc3QiLCJmb3JtYXRQYXRoSGVscGVyIiwic3RhcnRTbGFzaCIsImVuZFNsYXNoIiwicm9vdFRvRW1wdHkiLCJjbGVhblBhdGgiLCJlbmNvZGVQYXRoIiwicCIsImVuY29kZVVSSUNvbXBvbmVudCIsImJ1aWxkSW5VcGxvYWRlck5hbWVzIiwiY3JlYXRlRmllbGQiLCJwaWNCZWROYW1lIiwiZGVmYXVsdFZhbHVlIiwicmVxdWlyZWQiLCJpMThuUHJlZml4IiwiZXh0cmFzIiwiYXNzaWduIiwicHJlZml4IiwiaTE4biIsInRyYW5zbGF0ZSIsInRvVXBwZXJDYXNlIiwiZGVmYXVsdCIsInVwbG9hZGVyVHJhbnNsYXRvcnMiLCJhZHZhbmNlZHBsaXN0IiwiYWxpc3RwbGlzdCIsImFsaXl1biIsImdpdGh1YiIsImltZ3VyIiwibG9jYWwiLCJsc2t5cGxpc3QiLCJwaWNsaXN0IiwicWluaXUiLCJzZnRwcGxpc3QiLCJzbW1zIiwidGN5dW4iLCJ1cHl1biIsIndlYmRhdnBsaXN0IiwiQlVJTERJTl9NT0RVTEVTIiwiY29tcHJlc3MiLCJ1c2VyQ29uZmlnIiwiZ2V0Q29uZmlnIiwiY2hvaWNlcyIsImlzUmVtb3ZlRXhpZiIsInJlbmFtZSIsImVuYWJsZSIsInNraXBQcm9jZXNzIiwic2tpcFByb2Nlc3NFeHRMaXN0IiwiaGFuZGxlQ29uZmlnIiwicHJvbXB0cyIsIm1vZHVsZSIsImFuc3dlciIsImlucXVpcmVyIiwicHJvbXB0IiwiY29uZmlnTmFtZSIsImdldENvbmZpZ05hbWUiLCJzYXZlQ29uZmlnIiwidXBsb2FkZXIiLCJ0cmFuc2Zvcm1lciIsImJ1aWxkaW4iLCJzZXR0aW5nIiwiZW50cmllcyIsInZhbHVlIiwic2VsZWN0ZWRNb2R1bGUiLCJoYW5kbGVCdWlsZGluTW9kdWxlIiwiaGVscGVyIiwiZ2V0SWRMaXN0IiwiaGFuZGxlVXBsb2FkZXJPclRyYW5zZm9ybWVyIiwicGx1Z2luTmFtZSIsInBsdWdpbiIsInBsdWdpbkxvYWRlciIsImdldFBsdWdpbiIsImdldEZ1bGxMaXN0IiwiaGFuZGxlUGx1Z2luIiwiaW5mbyIsImFyZ3YiLCJ1c2UiLCJwdXNoIiwiZm9yRWFjaCIsInBpY2dvUGx1Z2lucyIsInNldENvbmZpZyIsImdlbmVyYXRlIiwib3B0cyIsImdldE9wdGlvbnMiLCJ0bXAiLCJzb3VyY2UiLCJhbnN3ZXJzIiwiX2ZpbGVzIiwiZ2xvYmJ5IiwiZG90IiwiZ2xvYiIsImZpbHRlcnMiLCJmaWxlcyIsInJlbmRlciIsIndyaXRlRmlsZVRyZWUiLCJkZXN0IiwiY29tcGxldGUiLCJjb21wbGV0ZU1lc3NhZ2UiLCJleHAiLCJmbiIsIkZ1bmN0aW9uIiwic3RyaW5naWZ5IiwidGVtcGxhdGVQYXRoIiwib3B0aW9uc1BhdGgiLCJyZXF1aXJlIiwiZmlsZVRyZWUiLCJyZWFkRmlsZVN5bmMiLCJjb250ZW50IiwiZWpzUmVuZGVyIiwiaXNCdWZmZXIiLCJkaXIiLCJlbnN1cmVEaXJTeW5jIiwid3JpdGVGaWxlU3luYyIsInJ1biIsIm9mZmxpbmUiLCJ0ZW1wbGF0ZSIsImhhc1NsYXNoIiwiZG93bmxvYWRBbmRHZW5lcmF0ZSIsInN5bmMiLCJkb3dubG9hZCIsImNsb25lIiwiZXJyIiwiaW5pdCIsInByb2plY3QiLCJpblBsYWNlIiwiaG9tZWRpciIsIm9rIiwib24iLCJjaGFsayIsImdyYXkiLCJsYW5nIiwibGlzdCIsImdldExhbmd1YWdlTGlzdCIsInNldExhbmd1YWdlIiwiTGlmZWN5Y2xlUGx1Z2lucyIsImNvbnN0cnVjdG9yIiwidGhpcyIsIk1hcCIsInBsdWdpbklkTWFwIiwicmVnaXN0ZXIiLCJpZCIsIlR5cGVFcnJvciIsImhhcyIsInNldCIsImN1cnJlbnRQbHVnaW4iLCJ1bnJlZ2lzdGVyIiwicGx1Z2luTGlzdCIsImRlbGV0ZSIsImdldE5hbWUiLCJnZXRMaXN0IiwidmFsdWVzIiwic2V0Q3VycmVudFBsdWdpbk5hbWUiLCJDb21tYW5kZXIiLCJDb21tYW5kIiwidmVyc2lvbiIsImRlYnVnIiwic2lsZW50IiwiYXJncyIsImV4aXQiLCJjdXJyZW50UGx1Z2luTmFtZSIsImxvYWRDb21tYW5kcyIsIklMb2dUeXBlIiwiSUJ1aWxkSW5FdmVudCIsIklCdXNFdmVudCIsIkxvZ2dlciIsImxldmVsIiwiaGFuZGxlTG9nIiwibXNnIiwibG9nTGV2ZWwiLCJjaGVja0xvZ0xldmVsIiwibG9nSGVhZGVyIiwibG9nUGF0aCIsImJhc2VEaXIiLCJyZXN1bHQiLCJjaGVja0xvZ0ZpbGVJc0xhcmdlIiwiaXNMYXJnZSIsIndhcm5pbmdNc2ciLCJsb2dGaWxlU2l6ZUxpbWl0IiwieWVsbG93IiwicmVjcmVhdGVMb2dGaWxlIiwidW5zaGlmdCIsImhhbmRsZVdyaXRlTG9nIiwibG9nRmlsZVNpemUiLCJzdGF0U3luYyIsInNpemUiLCJ1bmxpbmtTeW5jIiwiY3JlYXRlRmlsZVN5bmMiLCJkYXlqcyIsIkVycm9yIiwidXRpbCIsInN0YWNrIiwiYXBwZW5kRmlsZVN5bmMiLCJQbHVnaW5IYW5kbGVyIiwiaW5zdGFsbGVkUGx1Z2lucyIsInByb2Nlc3NQbHVnaW5zIiwiaGFuZGxlUGx1Z2luTmFtZVByb2Nlc3MiLCJoYXNQbHVnaW4iLCJwa2dOYW1lIiwiZnVsbE5hbWVMaXN0IiwiZnVsbE5hbWUiLCJwa2dOYW1lTGlzdCIsImV4ZWNDb21tYW5kIiwiY29kZSIsImVtaXQiLCJ0aXRsZSIsImJvZHkiLCJyZWdpc3RlclBsdWdpbiIsInVucmVnaXN0ZXJQbHVnaW4iLCJtb2R1bGVzIiwid2hlcmUiLCJjb25jYXQiLCJucG0iLCJzcGF3biIsIm91dHB1dCIsInN0ZG91dCIsInBpcGUiLCJfYiIsInN0ZGVyciIsIkZBSUxFRCIsIlBsdWdpbkxvYWRlciIsImZ1bGxMaXN0IiwiU2V0IiwicGx1Z2luTWFwIiwicGFja2FnZVBhdGgiLCJyZXBvc2l0b3J5IiwibGljZW5zZSIsInJlc29sdmVQbHVnaW4iLCJiYXNlZGlyIiwibG9hZCIsInBsdWdpbkRpciIsImpzb24iLCJkZXBzIiwiZGVwZW5kZW5jaWVzIiwiZGV2RGVwcyIsImRldkRlcGVuZGVuY2llcyIsImFkZCIsInBsdWdpbkludGVyZmFjZSIsIk5PVElGSUNBVElPTiIsImJlZm9yZVRyYW5zZm9ybVBsdWdpbnMiLCJiZWZvcmVVcGxvYWRQbHVnaW5zIiwiYWZ0ZXJVcGxvYWRQbHVnaW5zIiwicmVtb3ZlQ29uZmlnIiwiZXZlbnRCdXMiLCJFdmVudEVtaXR0ZXIiLCJodHRwc0FnZW50IiwiaHR0cHMiLCJBZ2VudCIsIm1heFZlcnNpb24iLCJtaW5WZXJzaW9uIiwicmVqZWN0VW5hdXRob3JpemVkIiwiYXBwZW5kRm9ybURhdGEiLCJmb3JtIiwiYXBwZW5kIiwicmVzcG9uc2VJbnRlcmNlcHRvciIsInJlc3BvbnNlIiwic3RhdHVzQ29kZSIsInN0YXR1cyIsInJlc3BvbnNlRXJyb3JIYW5kbGVyIiwiZXJyb3JPYmoiLCJfYyIsIl9kIiwiX2UiLCJfZiIsIl9nIiwiUmVxdWVzdCIsIkNPTkZJR19DSEFOR0UiLCJoYW5kbGVQcm94eSIsInByb3h5T3B0aW9ucyIsImhvc3QiLCJob3N0bmFtZSIsInBvcnQiLCJwcm90b2NvbCIsImhlYWRlcnMiLCJtYXhCb2R5TGVuZ3RoIiwiSW5maW5pdHkiLCJtYXhDb250ZW50TGVuZ3RoIiwiaHR0cHNPdmVySHR0cCIsImluc3RhbmNlIiwiYXhpb3MiLCJjcmVhdGUiLCJpbnRlcmNlcHRvcnMiLCJvcHQiLCJfX2lzT2xkT3B0aW9ucyIsIkZvcm1EYXRhIiwiZm9ybURhdGEiLCJnZXRIZWFkZXJzIiwicXMiLCJyZXF1ZXN0SW50ZXJjZXB0b3IiLCJvYmoiLCJjb250ZW50VHlwZSIsIkNvbnRlbnRUeXBlIiwiTUVTU0FHRVMiLCJQUk9HUkVTUyIsIkRFRkFVTFRfU0tJUF9FWFRFTlNJT05TIiwiTGlmZWN5Y2xlIiwic3VwZXIiLCJ0dGZQYXRoIiwiaW5pdGlhbGl6ZURpcnMiLCJlbXB0eURpclN5bmMiLCJnZXRQcm9jZXNzaW5nT3B0aW9ucyIsImdldFVwbG9hZGVyVHlwZSIsImdldFNraXBFeHRlbnNpb25zIiwidHJpbSIsImZvcm1hdHRlZEl0ZW0iLCJjb25maWdQYXRoIiwicmF3SW5wdXQiLCJwcm9jZXNzZWRJbnB1dCIsIlZFUlNJT04iLCJHVUlfVkVSU0lPTiIsImJpbmQiLCJ1bnNldENvbmZpZyIsInVwbG9hZFJldHVybkN0eCIsImFkZExpc3RlbmVyIiwib25jZSIsInJlbW92ZUxpc3RlbmVyIiwib2ZmIiwicmVtb3ZlQWxsTGlzdGVuZXJzIiwic2V0TWF4TGlzdGVuZXJzIiwiZ2V0TWF4TGlzdGVuZXJzIiwibGlzdGVuZXJzIiwicmF3TGlzdGVuZXJzIiwibGlzdGVuZXJDb3VudCIsInByZXBlbmRMaXN0ZW5lciIsInByZXBlbmRPbmNlTGlzdGVuZXIiLCJldmVudE5hbWVzIiwiY3JlYXRlQ29udGV4dCIsImluaXRpYWxpemVDb250ZXh0IiwiaGFuZGxlU2tpcFByb2Nlc3MiLCJleGVjdXRlTGlmZWN5Y2xlIiwiaGFuZGxlRXJyb3IiLCJyYXdJbnB1dFBhdGgiLCJjbG9uZURlZXAiLCJkb1VwbG9hZCIsImFmdGVyVXBsb2FkIiwicHJlcHJvY2VzcyIsImJlZm9yZVRyYW5zZm9ybSIsImRvVHJhbnNmb3JtIiwiYnVpbGRJblJlbmFtZSIsImJlZm9yZVVwbG9hZCIsIlVQTE9BRF9QUk9HUkVTUyIsInNraXBFeHRlbnNpb25zIiwiQkVGT1JFX1RSQU5TRk9STSIsInRlbXBGaWxlUGF0aCIsInByb2Nlc3NJbWFnZXMiLCJpbml0aWFsaXplUmF3SW5wdXRQYXRocyIsImFsbFNldHRsZWQiLCJpbmRleCIsInByb2Nlc3NJbWFnZSIsIml0ZW1Jc1VybCIsImV4dGVuc2lvbiIsInNob3VsZFNraXBFeHRlbnNpb24iLCJ0cmFuc2Zvcm1lZEJ1ZmZlciIsImFwcGx5UHJvY2Vzc2luZyIsInNhdmVQcm9jZXNzZWRJbWFnZSIsImFkZFdhdGVybWFyayIsImNvbXByZXNzSW1hZ2UiLCJkb3dubG9hZFRURiIsIm5vcm1hbGl6ZWRFeHRlbnNpb24iLCJjb252ZXJ0SGVpY0FuZENvbXByZXNzIiwiaGVpY1Jlc3VsdCIsImhlaWNDb252ZXJ0IiwidGVtcEhlaWNDb252ZXJ0RmlsZSIsIm5ld0V4dCIsInRlbXBGaWxlIiwiZ2V0RmlsZUJhc2VOYW1lIiwicmVuYW1lQ29uZmlnIiwiYmFzZTY0SW1hZ2UiLCJoYW5kbGVQbHVnaW5zIiwiY3VycmVudFRyYW5zZm9ybWVyIiwiQkVGT1JFX1VQTE9BRCIsImN1cnJlbnRVcGxvYWRlciIsIm91dHB1dEltZyIsIkFGVEVSX1VQTE9BRCIsImlzRW5jb2RlT3V0cHV0VVJMIiwiaSIsImltZ1VybCIsIkZJTklTSEVEIiwibGlmZUN5Y2xlUGx1Z2lucyIsInBsdWdpbk5hbWVzIiwibGlmZUN5Y2xlTmFtZSIsImFsbCIsInBvc3RPcHRpb25zIiwiZW5kcG9pbnQiLCJmb3JtRGF0YUtleSIsImZpbGVuYW1lIiwiYWR2YW5jZWRwbGlzdENvbmZpZyIsImltZ0xpc3QiLCJwb3N0Q29uZmlnIiwiaW1hZ2VVcmwiLCJyZXNEYXRhUGF0aCIsIndlYlBhdGgiLCJwb3AiLCJlbmRzV2l0aCIsImN1c3RvbVByZWZpeCIsImNyZWF0ZUNvbmZpZ0ZpZWxkIiwidG9rZW4iLCJBdXRob3JpemF0aW9uIiwiaGFuZGxlUmVzRXJyb3IiLCJjcmVhdGVBcGlSZXF1ZXN0IiwiZXh0cmFjdENvbmZpZyIsInVzZXJuYW1lIiwicGFzc3dvcmQiLCJ1cGxvYWRQYXRoIiwiY3VzdG9tVXJsIiwiYWxpc3RDb25maWciLCJ0b2tlblN0b3JlIiwicmVmcmVzaGVkQXQiLCJwb3N0IiwiZ2V0QWxpc3RUb2tlbiIsImZ1bGxVcGxvYWRQYXRoIiwidXBsb2FkUmVzIiwicmVmcmVzaFJlcyIsInBhZ2UiLCJwZXJfcGFnZSIsInJlZnJlc2giLCJnZXRJbmZvUmVzIiwic2lnbiIsImVuY29kZWRQYXRoIiwiZ2V0Q3VycmVudFVUQ0RhdGUiLCJ0b1VUQ1N0cmluZyIsImdlbmVyYXRlU2lnbmF0dXJlIiwiZGF0ZSIsInNpZ25TdHJpbmciLCJsb29rdXAiLCJidWNrZXQiLCJzaWduYXR1cmUiLCJjcmVhdGVIbWFjIiwiYWNjZXNzS2V5U2VjcmV0IiwiYWNjZXNzS2V5SWQiLCJhcmVhIiwiSG9zdCIsImFsaVl1bk9wdGlvbnMiLCJ1cmxPcHRpb25zIiwiRmlsZU5hbWVHZW5lcmF0b3IiLCJtb250aCIsImRheSIsImV4dE5hbWUiLCJtZDUiLCJpbWdCdWZmZXIiLCJtZDVCNjQiLCJtZDVCNjRTaG9ydCIsInNoYTEiLCJzaGEyNTYiLCJ0aW1lc3RhbXAiLCJ0aW1lc3RhbXBNUyIsImZvcm1hdFBhdGgiLCJmaWxlTmFtZUdlbmVyYXRvciIsImZpZWxkcyIsInJlIiwiZ2V0UHJveHlBZ2VudCIsInNzbEVuYWJsZWQiLCJmb3JtYXRlZFByb3h5IiwiZm9ybWF0SHR0cFByb3h5VVJMIiwiSHR0cHNQcm94eUFnZW50IiwiSHR0cFByb3h5QWdlbnQiLCJrZWVwQWxpdmUiLCJrZWVwQWxpdmVNc2VjcyIsInNjaGVkdWxpbmciLCJnZXRGaWxlVVJMIiwiZVRhZyIsInZlcnNpb25JZCIsInNpZ25lZFVybCIsImdldFNpZ25lZFVybCIsImNsaWVudCIsIkdldE9iamVjdENvbW1hbmQiLCJCdWNrZXQiLCJidWNrZXROYW1lIiwiS2V5IiwiSWZNYXRjaCIsIlZlcnNpb25JZCIsImV4cGlyZXNJbiIsInVybE9iamVjdCIsInNlYXJjaCIsImhyZWYiLCJjcmVhdGVTM0NsaWVudCIsImh0dHBIYW5kbGVyT3B0cyIsImh0dHBBZ2VudCIsImNsaWVudE9wdGlvbnMiLCJyZWdpb24iLCJjcmVkZW50aWFscyIsImFjY2Vzc0tleUlEIiwic2VjcmV0QWNjZXNzS2V5IiwidGxzIiwiZm9yY2VQYXRoU3R5bGUiLCJwYXRoU3R5bGVBY2Nlc3MiLCJyZXF1ZXN0SGFuZGxlciIsIk5vZGVIdHRwSGFuZGxlciIsIlMzQ2xpZW50IiwiY3JlYXRlVXBsb2FkVGFzayIsImNvbnRlbnRFbmNvZGluZyIsIm1pbWUiLCJnZXRUeXBlIiwiZmlsZVR5cGUiLCJGaWxlVHlwZSIsImZyb21CdWZmZXIiLCJleHRyYWN0SW5mbyIsIlB1dE9iamVjdENvbW1hbmQiLCJBQ0wiLCJhY2wiLCJCb2R5IiwiQ29udGVudEVuY29kaW5nIiwic2VuZCIsInVybFByZWZpeCIsIkVUYWciLCJpbWdVUkwiLCJmb3JtYXREaXNhYmxlQnVja2V0UHJlZml4VG9VUkwiLCJkaXNhYmxlQnVja2V0UHJlZml4VG9VUkwiLCJCb29sZWFuIiwidGFzayIsImJ1aWxkR2l0aHViQXBpVXJsIiwicmVwbyIsImV4dHJhIiwiYnJhbmNoIiwiZ2l0aHViT3B0aW9ucyIsImRvd25sb2FkX3VybCIsImhhc2giLCJzaGEiLCJpbWdCYXNlNjQiLCJjbGllbnRJZCIsImFjY2Vzc1Rva2VuIiwiZm9ybWF0QWNjZXNzVG9rZW4iLCJhbGJ1bSIsImF1dGhvcml6YXRpb24iLCJyZXF1ZXN0T3B0aW9ucyIsImluaXRQYWdlcyIsImFsYnVtSGFzaCIsImdldEFsYnVtSGFzaE9wdGlvbnMiLCJ0aW1lb3V0IiwiYWxidW1MaXN0IiwiaW1ndXJPcHRpb25zIiwibGluayIsImRlbGV0ZWhhc2giLCJsb2NhbENvbmZpZyIsImltZ1RlbXBQYXRoIiwiZmlsZUltZ1RlbXBQYXRoIiwiZmlsZVVwbG9hZFBhdGgiLCJjb3B5RmlsZVN5bmMiLCJnYWxsZXJ5UGF0aCIsImlzVjIiLCJ2MUhlYWRlcnMiLCJDb25uZWN0aW9uIiwidjFGb3JtRGF0YSIsInNzbCIsInYySGVhZGVycyIsIkFjY2VwdCIsInN0cmF0ZWd5SWQiLCJhbGJ1bUlkIiwicGVybWlzc2lvbiIsInYyRm9ybURhdGEiLCJzdHJhdGVneV9pZCIsImFsYnVtX2lkIiwiYWdlbnQiLCJsc2t5T3B0aW9ucyIsImxpbmtzIiwicGljYmVkIiwic2VydmVyS2V5IiwiaXNJcCIsImZvcm1hdEhvc3QiLCJwaWNsaXN0T3B0aW9ucyIsImZ1bGxSZXN1bHQiLCJzZWxlY3RBcmVhIiwiZ2V0VG9rZW4iLCJxaW5pdU9wdGlvbnMiLCJhY2Nlc3NLZXkiLCJzZWNyZXRLZXkiLCJtYWMiLCJhdXRoIiwiTWFjIiwicnMiLCJQdXRQb2xpY3kiLCJ1cGxvYWRUb2tlbiIsImJhc2VVcmwiLCJTU0hDbGllbnQiLCJOb2RlU1NIIiwiaXNDb25uZWN0ZWQiLCJzdGF0aWMiLCJwcml2YXRlS2V5IiwicGFzc3BocmFzZSIsImxvZ2luSW5mbyIsInByaXZhdGVLZXlQYXRoIiwiY29ubmVjdCIsInJlbW90ZSIsImNoYW5nZVdpblN0eWxlUGF0aFRvVW5peCIsIm1rZGlyIiwicHV0RmlsZSIsImZpbGVNb2RlIiwiZXhlYyIsImRpclBhdGgiLCJkaXJlY3RvcnlNb2RlIiwiZGlyTW9kZSIsImRpcnMiLCJjdXJyZW50UGF0aCIsInNjcmlwdCIsInVzZXIiLCJncm91cCIsIl91c2VyIiwiX2dyb3VwIiwiY2xvc2UiLCJkaXNwb3NlIiwic2Z0cHBsaXN0Q29uZmlnIiwidXBsb2FkVGVtcFBhdGgiLCJnZXRJbnN0YW5jZSIsInJlbW90ZVBhdGgiLCJmaWxlVXNlciIsImNob3duIiwiaW1nVGVtcEZpbGVQYXRoIiwicmVtb3ZlU3luYyIsIm1vdmVTeW5jIiwiYXBpVG9rZW4iLCJkb21haW4iLCJzbWZpbGUiLCJzbW1zQ29uZmlnIiwiYmFja3VwRG9tYWluIiwiaW1hZ2VCdWZmZXIiLCJpbWFnZXMiLCJlcnJvck1zZyIsIm1hdGNoZWRJbWFnZSIsImZpbmQiLCJzZWNyZXRJZCIsImFwcElkIiwic2lnblRpbWUiLCJjdXJyZW50IiwibXVsdGlTaWduYXR1cmUiLCJzaWduSGV4S2V5IiwidGVtcFN0cmluZyIsInRvZGF5Iiwic2lnbktleSIsImRlZmF1bHRFbmRwb2ludCIsImh0dHBTdHJpbmciLCJzdHJpbmdUb1NpZ24iLCJ1c2VyQWdlbnQiLCJvcCIsImZpbGVjb250ZW50IiwidGNZdW5PcHRpb25zIiwidXNlVjQiLCJvcHRpb25VcmwiLCJzbGltIiwic291cmNlX3VybCIsImNvbmZpcm1UZXh0IiwiY2FuY2VsVGV4dCIsInRpcHMiLCJ1cHl1bk9wdGlvbnMiLCJvcGVyYXRvciIsIm1kNVBhc3N3b3JkIiwic3VmZml4IiwiYW50aUxlZWNoVG9rZW4iLCJhZGRBbnRpTGVlY2hUb2tlbiIsInVwdCIsImV4cGlyZVRpbWUiLCJ1cmkiLCJleHBpcmUiLCJzdWJzdHJpbmciLCJnZXRBbnRpTGVlY2hQYXJhbSIsImhhbmRsZVVwbG9hZEVycm9yIiwiZXJyb3JCb2R5IiwiZXJyb3JDb2RlIiwiZ2V0SW1hZ2VCdWZmZXIiLCJidWlsZEltYWdlVXJsIiwid2VicGF0aCIsInVzZVdlYnBhdGgiLCJzYXZlSW1hZ2VUb1RlbXAiLCJ1cGxvYWRJbWFnZSIsImZ1bGxVcGxvYWREaXJQYXRoIiwicGF0aFRvQ3JlYXRlIiwiY3JlYXRlRGlyZWN0b3J5IiwicmVjdXJzaXZlIiwicHV0RmlsZUNvbnRlbnRzIiwib3ZlcndyaXRlIiwiYXV0aFR5cGUiLCJBdXRoVHlwZSIsIkRpZ2VzdCIsImNyZWF0ZUNsaWVudCIsImNyZWF0ZVdlYkRBVkNsaWVudCIsImJ1aWxkSW5VcGxvYWRlcnMiLCJhZHZhbmNlZHBsaXN0VXBsb2FkZXIiLCJhbGlzdFVwbG9hZGVyIiwiYWxpWXVuVXBsb2FkZXIiLCJhd3NzM3BsaXN0VXBsb2FkZXIiLCJnaXRodWJVcGxvYWRlciIsImltZ3VyVXBsb2FkZXIiLCJsb2NhbFVwbG9hZGVyIiwibHNreVVwbG9hZGVyIiwicGljbGlzdFVwbG9hZGVyIiwicWluaXVVcGxvYWRlciIsInNmdHBVcGxvYWRlciIsInNtbXNVcGxvYWRlciIsInRjWXVuVXBsb2FkZXIiLCJ1cFl1blVwbG9hZGVyIiwid2ViZGF2cGxpc3RVcGxvYWRlciIsImdldEltZ1NpemUiLCJJbWdGcm9tUGF0aCIsInJlc3VsdHMiLCJpbWdTaXplIiwiSW1nRnJvbUJhc2U2NCIsInBsYXRmb3JtMlNjcmlwdENvbnRlbnQiLCJkYXJ3aW4iLCJ3aW4zMiIsIndpbjEwIiwibGludXgiLCJ3c2wiLCJwbGF0Zm9ybTJTY3JpcHRGaWxlbmFtZSIsImdldENsaXBib2FyZEltYWdlIiwiaW1hZ2VQYXRoIiwiY3JlYXRlSW1hZ2VGb2xkZXIiLCJwbGF0Zm9ybSIsImlzV3NsIiwib3MiLCJyZWxlYXNlIiwiZ2V0Q3VycmVudFBsYXRmb3JtIiwic2NyaXB0UGF0aCIsImV4ZWN1dGlvbiIsImltZ1BhdGgiLCJzaG91bGRLZWVwQWZ0ZXJVcGxvYWRpbmciLCJEQiIsImRiIiwiSlNPTlN0b3JlIiwicmVhZCIsImZsdXNoIiwidW5zZXQiLCJsYW5ndWFnZUxpc3QiLCJVUExPQURfRkFJTEVEIiwiQ0hFQ0tfU0VUVElOR1MiLCJDSEVDS19TRVRUSU5HU19BTkRfTkVUV09SSyIsIlVQTE9BRF9GQUlMRURfUkVBU09OIiwiU0VSVkVSX0VSUk9SIiwiQVVUSF9GQUlMRUQiLCJQSUNCRURfU01NUyIsIlBJQ0JFRF9TTU1TX1RPS0VOIiwiUElDQkVEX1NNTVNfTUVTU0FHRV9UT0tFTiIsIlBJQ0JFRF9TTU1TX0JBQ0tVUERPTUFJTiIsIlBJQ0JFRF9TTU1TX01FU1NBR0VfQkFDS1VQX0RPTUFJTiIsIlBJQ0JFRF9BRFZBTkNFRFBMSVNUIiwiUElDQkVEX0FEVkFOQ0VEUExJU1RfRU5EUE9JTlQiLCJQSUNCRURfQURWQU5DRURQTElTVF9NRVNTQUdFX0VORFBPSU5UIiwiUElDQkVEX0FEVkFOQ0VEUExJU1RfTUVUSE9EIiwiUElDQkVEX0FEVkFOQ0VEUExJU1RfTUVTU0FHRV9NRVRIT0QiLCJQSUNCRURfQURWQU5DRURQTElTVF9GT1JNREFUQUtFWSIsIlBJQ0JFRF9BRFZBTkNFRFBMSVNUX01FU1NBR0VfRk9STURBVEFLRVkiLCJQSUNCRURfQURWQU5DRURQTElTVF9IRUFERVJTIiwiUElDQkVEX0FEVkFOQ0VEUExJU1RfTUVTU0FHRV9IRUFERVJTIiwiUElDQkVEX0FEVkFOQ0VEUExJU1RfQk9EWSIsIlBJQ0JFRF9BRFZBTkNFRFBMSVNUX01FU1NBR0VfQk9EWSIsIlBJQ0JFRF9BRFZBTkNFRFBMSVNUX0NVU1RPTVBSRUZJWCIsIlBJQ0JFRF9BRFZBTkNFRFBMSVNUX01FU1NBR0VfQ1VTVE9NUFJFRklYIiwiUElDQkVEX0FEVkFOQ0VEUExJU1RfV0VCUEFUSCIsIlBJQ0JFRF9BRFZBTkNFRFBMSVNUX01FU1NBR0VfV0VCUEFUSCIsIlBJQ0JFRF9BRFZBTkNFRFBMSVNUX1JFU0RBVEFQQVRIIiwiUElDQkVEX0FEVkFOQ0VEUExJU1RfTUVTU0FHRV9SRVNEQVRBUEFUSCIsIlBJQ0JFRF9MT0NBTCIsIlBJQ0JFRF9MT0NBTF9QQVRIIiwiUElDQkVEX0xPQ0FMX01FU1NBR0VfUEFUSCIsIlBJQ0JFRF9MT0NBTF9DVVNUT01VUkwiLCJQSUNCRURfTE9DQUxfTUVTU0FHRV9DVVNUT01VUkwiLCJQSUNCRURfTE9DQUxfV0VCUEFUSCIsIlBJQ0JFRF9MT0NBTF9NRVNTQUdFX1dFQlBBVEgiLCJQSUNCRURfQUxJU1RfUExJU1QiLCJQSUNCRURfQUxJU1RfVVJMIiwiUElDQkVEX0FMSVNUX01FU1NBR0VfVVJMIiwiUElDQkVEX0FMSVNUX1RPS0VOIiwiUElDQkVEX0FMSVNUX01FU1NBR0VfVE9LRU4iLCJQSUNCRURfQUxJU1RfVVNFUk5BTUUiLCJQSUNCRURfQUxJU1RfTUVTU0FHRV9VU0VSTkFNRSIsIlBJQ0JFRF9BTElTVF9QQVNTV09SRCIsIlBJQ0JFRF9BTElTVF9NRVNTQUdFX1BBU1NXT1JEIiwiUElDQkVEX0FMSVNUX1VQTE9BRFBBVEgiLCJQSUNCRURfQUxJU1RfTUVTU0FHRV9VUExPQURfUEFUSCIsIlBJQ0JFRF9BTElTVF9XRUJQQVRIIiwiUElDQkVEX0FMSVNUX01FU1NBR0VfV0VCX1BBVEgiLCJQSUNCRURfQUxJU1RfQ1VTVE9NVVJMIiwiUElDQkVEX0FMSVNUX01FU1NBR0VfQ1VTVE9NVVJMIiwiUElDQkVEX0FMSUNMT1VEIiwiUElDQkVEX0FMSUNMT1VEX0FDQ0VTU0tFWUlEIiwiUElDQkVEX0FMSUNMT1VEX0FDQ0VTU0tFWVNFQ1JFVCIsIlBJQ0JFRF9BTElDTE9VRF9CVUNLRVQiLCJQSUNCRURfQUxJQ0xPVURfQVJFQSIsIlBJQ0JFRF9BTElDTE9VRF9QQVRIIiwiUElDQkVEX0FMSUNMT1VEX1dFQlBBVEgiLCJQSUNCRURfQUxJQ0xPVURfQ1VTVE9NVVJMIiwiUElDQkVEX0FMSUNMT1VEX09QVElPTlMiLCJQSUNCRURfQUxJQ0xPVURfTUVTU0FHRV9BUkVBIiwiUElDQkVEX0FMSUNMT1VEX01FU1NBR0VfUEFUSCIsIlBJQ0JFRF9BTElDTE9VRF9NRVNTQUdFX1dFQlBBVEgiLCJQSUNCRURfQUxJQ0xPVURfTUVTU0FHRV9PUFRJT05TIiwiUElDQkVEX0FMSUNMT1VEX01FU1NBR0VfQ1VTVE9NVVJMIiwiUElDQkVEX1RFTkNFTlRDTE9VRCIsIlBJQ0JFRF9URU5DRU5UQ0xPVURfVkVSU0lPTiIsIlBJQ0JFRF9URU5DRU5UQ0xPVURfU0VDUkVUSUQiLCJQSUNCRURfVEVOQ0VOVENMT1VEX1NFQ1JFVEtFWSIsIlBJQ0JFRF9URU5DRU5UQ0xPVURfQVBQSUQiLCJQSUNCRURfVEVOQ0VOVENMT1VEX0JVQ0tFVCIsIlBJQ0JFRF9URU5DRU5UQ0xPVURfQVJFQSIsIlBJQ0JFRF9URU5DRU5UQ0xPVURfRU5EUE9JTlQiLCJQSUNCRURfVEVOQ0VOVENMT1VEX1BBVEgiLCJQSUNCRURfVEVOQ0VOVENMT1VEX1dFQlBBVEgiLCJQSUNCRURfVEVOQ0VOVENMT1VEX09QVElPTlMiLCJQSUNCRURfVEVOQ0VOVENMT1VEX0NVU1RPTVVSTCIsIlBJQ0JFRF9URU5DRU5UQ0xPVURfTUVTU0FHRV9BUFBJRCIsIlBJQ0JFRF9URU5DRU5UQ0xPVURfTUVTU0FHRV9BUkVBIiwiUElDQkVEX1RFTkNFTlRDTE9VRF9NRVNTQUdFX1BBVEgiLCJQSUNCRURfVEVOQ0VOVENMT1VEX01FU1NBR0VfV0VCUEFUSCIsIlBJQ0JFRF9URU5DRU5UQ0xPVURfTUVTU0FHRV9DVVNUT01VUkwiLCJQSUNCRURfVEVOQ0VOVENMT1VEX01FU1NBR0VfT1BUSU9OUyIsIlBJQ0JFRF9URU5DRU5UQ0xPVURfTUVTU0FHRV9FTkRQT0lOVCIsIlBJQ0JFRF9URU5DRU5UQ0xPVURfU0xJTSIsIlBJQ0JFRF9URU5DRU5UQ0xPVURfU0xJTV9USVAiLCJQSUNCRURfVEVOQ0VOVENMT1VEX1NMSU1fQ09ORklSTSIsIlBJQ0JFRF9URU5DRU5UQ0xPVURfU0xJTV9DQU5DRUwiLCJQSUNCRURfR0lUSFVCIiwiUElDQkVEX0dJVEhVQl9UT0tFTiIsIlBJQ0JFRF9HSVRIVUJfUkVQTyIsIlBJQ0JFRF9HSVRIVUJfUEFUSCIsIlBJQ0JFRF9HSVRIVUJfQlJBTkNIIiwiUElDQkVEX0dJVEhVQl9DVVNUT01VUkwiLCJQSUNCRURfR0lUSFVCX01FU1NBR0VfUkVQTyIsIlBJQ0JFRF9HSVRIVUJfTUVTU0FHRV9CUkFOQ0giLCJQSUNCRURfR0lUSFVCX01FU1NBR0VfUEFUSCIsIlBJQ0JFRF9HSVRIVUJfTUVTU0FHRV9DVVNUT01VUkwiLCJQSUNCRURfUUlOSVUiLCJQSUNCRURfUUlOSVVfQUNDRVNTS0VZIiwiUElDQkVEX1FJTklVX1NFQ1JFVEtFWSIsIlBJQ0JFRF9RSU5JVV9CVUNLRVQiLCJQSUNCRURfUUlOSVVfUEFUSCIsIlBJQ0JFRF9RSU5JVV9VUkwiLCJQSUNCRURfUUlOSVVfT1BUSU9OUyIsIlBJQ0JFRF9RSU5JVV9BUkVBIiwiUElDQkVEX1FJTklVX01FU1NBR0VfUEFUSCIsIlBJQ0JFRF9RSU5JVV9NRVNTQUdFX0FSRUEiLCJQSUNCRURfUUlOSVVfTUVTU0FHRV9PUFRJT05TIiwiUElDQkVEX1FJTklVX01FU1NBR0VfVVJMIiwiUElDQkVEX0lNR1VSIiwiUElDQkVEX0lNR1VSX0NMSUVOVElEIiwiUElDQkVEX0lNR1VSX1VTRVJOQU1FIiwiUElDQkVEX0lNR1VSX0FDQ0VTU19UT0tFTiIsIlBJQ0JFRF9JTUdVUl9BTEJVTSIsIlBJQ0JFRF9JTUdVUl9QUk9YWSIsIlBJQ0JFRF9JTUdVUl9NRVNTQUdFX0NMSUVOVElEIiwiUElDQkVEX0lNR1VSX01FU1NBR0VfVVNFUk5BTUUiLCJQSUNCRURfSU1HVVJfTUVTU0FHRV9BQ0NFU1NfVE9LRU4iLCJQSUNCRURfSU1HVVJfTUVTU0FHRV9BTEJVTSIsIlBJQ0JFRF9JTUdVUl9NRVNTQUdFX1BST1hZIiwiUElDQkVEX1VQWVVOIiwiUElDQkVEX1VQWVVOX0JVQ0tFVCIsIlBJQ0JFRF9VUFlVTl9PUEVSQVRPUiIsIlBJQ0JFRF9VUFlVTl9QQVNTV09SRCIsIlBJQ0JFRF9VUFlVTl9QQVRIIiwiUElDQkVEX1VQWVVOX1VSTCIsIlBJQ0JFRF9VUFlVTl9PUFRJT05TIiwiUElDQkVEX1VQWVVOX0VORFBPSU5UIiwiUElDQkVEX1VQWVVOX0FOVElMRUVDSFRPS0VOIiwiUElDQkVEX1VQWVVOX0VYUElSRVRJTUUiLCJQSUNCRURfVVBZVU5fTUVTU0FHRV9PUEVSQVRPUiIsIlBJQ0JFRF9VUFlVTl9NRVNTQUdFX1BBU1NXT1JEIiwiUElDQkVEX1VQWVVOX01FU1NBR0VfVVJMIiwiUElDQkVEX1VQWVVOX01FU1NBR0VfT1BUSU9OUyIsIlBJQ0JFRF9VUFlVTl9NRVNTQUdFX1BBVEgiLCJQSUNCRURfVVBZVU5fTUVTU0FHRV9FTkRQT0lOVCIsIlBJQ0JFRF9XRUJEQVZQTElTVCIsIlBJQ0JFRF9XRUJEQVZQTElTVF9IT1NUIiwiUElDQkVEX1dFQkRBVlBMSVNUX1NTTEVOQUJMRUQiLCJQSUNCRURfV0VCREFWUExJU1RfVVNFUk5BTUUiLCJQSUNCRURfV0VCREFWUExJU1RfUEFTU1dPUkQiLCJQSUNCRURfV0VCREFWUExJU1RfUEFUSCIsIlBJQ0JFRF9XRUJEQVZQTElTVF9XRUJQQVRIIiwiUElDQkVEX1dFQkRBVlBMSVNUX0NVU1RPTVVSTCIsIlBJQ0JFRF9XRUJEQVZQTElTVF9BVVRIVFlQRSIsIlBJQ0JFRF9XRUJEQVZQTElTVF9PUFRJT05TIiwiUElDQkVEX1dFQkRBVlBMSVNUX01FU1NBR0VfSE9TVCIsIlBJQ0JFRF9XRUJEQVZQTElTVF9NRVNTQUdFX1NTTEVOQUJMRUQiLCJQSUNCRURfV0VCREFWUExJU1RfTUVTU0FHRV9VU0VSTkFNRSIsIlBJQ0JFRF9XRUJEQVZQTElTVF9NRVNTQUdFX1BBU1NXT1JEIiwiUElDQkVEX1dFQkRBVlBMSVNUX01FU1NBR0VfUEFUSCIsIlBJQ0JFRF9XRUJEQVZQTElTVF9NRVNTQUdFX1dFQlNJVEVfUEFUSCIsIlBJQ0JFRF9XRUJEQVZQTElTVF9NRVNTQUdFX0NVU1RPTVVSTCIsIlBJQ0JFRF9XRUJEQVZQTElTVF9NRVNTQUdFX09QVElPTlMiLCJQSUNCRURfU0ZUUFBMSVNUIiwiUElDQkVEX1NGVFBQTElTVF9IT1NUIiwiUElDQkVEX1NGVFBQTElTVF9QT1JUIiwiUElDQkVEX1NGVFBQTElTVF9VU0VSTkFNRSIsIlBJQ0JFRF9TRlRQUExJU1RfUEFTU1dPUkQiLCJQSUNCRURfU0ZUUFBMSVNUX1BSSVZBVEVLRVkiLCJQSUNCRURfU0ZUUFBMSVNUX1BSSVZBVEVLRVlfUEFTU1BIUkFTRSIsIlBJQ0JFRF9TRlRQUExJU1RfVVBMT0FEUEFUSCIsIlBJQ0JFRF9TRlRQUExJU1RfQ1VTVE9NVVJMIiwiUElDQkVEX1NGVFBQTElTVF9XRUJTSVRFX1BBVEgiLCJQSUNCRURfU0ZUUFBMSVNUX0ZJTEVfVVNFUiIsIlBJQ0JFRF9TRlRQUExJU1RfRklMRV9NT0RFIiwiUElDQkVEX1NGVFBQTElTVF9ESVJfTU9ERSIsIlBJQ0JFRF9TRlRQUExJU1RfTUVTU0FHRV9IT1NUIiwiUElDQkVEX1NGVFBQTElTVF9NRVNTQUdFX1BPUlQiLCJQSUNCRURfU0ZUUFBMSVNUX01FU1NBR0VfUFJJVkFURUtFWSIsIlBJQ0JFRF9TRlRQUExJU1RfTUVTU0FHRV9QUklWQVRFS0VZX1BBU1NQSFJBU0UiLCJQSUNCRURfU0ZUUFBMSVNUX01FU1NBR0VfVVBMT0FEUEFUSCIsIlBJQ0JFRF9TRlRQUExJU1RfTUVTU0FHRV9DVVNUT01VUkwiLCJQSUNCRURfU0ZUUFBMSVNUX01FU1NBR0VfV0VCU0lURV9QQVRIIiwiUElDQkVEX1NGVFBQTElTVF9NRVNTQUdFX0ZJTEVfVVNFUiIsIlBJQ0JFRF9TRlRQUExJU1RfTUVTU0FHRV9GSUxFX01PREUiLCJQSUNCRURfU0ZUUFBMSVNUX01FU1NBR0VfRElSX01PREUiLCJQSUNCRURfUElDTElTVCIsIlBJQ0JFRF9QSUNMSVNUX0hPU1QiLCJQSUNCRURfUElDTElTVF9QT1JUIiwiUElDQkVEX1BJQ0xJU1RfUElDQkVEIiwiUElDQkVEX1BJQ0xJU1RfQ09ORklHTkFNRSIsIlBJQ0JFRF9QSUNMSVNUX0tFWSIsIlBJQ0JFRF9MU0tZX1BMSVNUIiwiUElDQkVEX0xTS1lfVkVSU0lPTiIsIlBJQ0JFRF9MU0tZX01FU1NBR0VfVkVSU0lPTiIsIlBJQ0JFRF9MU0tZX0hPU1QiLCJQSUNCRURfTFNLWV9NRVNTQUdFX0hPU1QiLCJQSUNCRURfTFNLWV9UT0tFTiIsIlBJQ0JFRF9MU0tZX01FU1NBR0VfVE9LRU4iLCJQSUNCRURfTFNLWV9TVFJBVEVHWV9JRCIsIlBJQ0JFRF9MU0tZX01FU1NBR0VfU1RSQVRFR1lfSUQiLCJQSUNCRURfTFNLWV9BTEJVTV9JRCIsIlBJQ0JFRF9MU0tZX01FU1NBR0VfQUxCVU1fSUQiLCJQSUNCRURfTFNLWV9QRVJNSVNTSU9OIiwiUElDQkVEX0xTS1lfTUVTU0FHRV9QRVJNSVNTSU9OIiwiUElDQkVEX0FXU1MzUExJU1QiLCJQSUNCRURfQVdTUzNQTElTVF9BQ0NFU1NLRVlJRCIsIlBJQ0JFRF9BV1NTM1BMSVNUX1NFQ1JFVF9BQ0NFU1NLRVkiLCJQSUNCRURfQVdTUzNQTElTVF9CVUNLRVQiLCJQSUNCRURfQVdTUzNQTElTVF9SRUdJT04iLCJQSUNCRURfQVdTUzNQTElTVF9VUExPQURQQVRIIiwiUElDQkVEX0FXU1MzUExJU1RfRU5EUE9JTlQiLCJQSUNCRURfQVdTUzNQTElTVF9QUk9YWSIsIlBJQ0JFRF9BV1NTM1BMSVNUX1VSTFBSRUZJWCIsIlBJQ0JFRF9BV1NTM1BMSVNUX1BBVEhTVFlMRUFDQ0VTUyIsIlBJQ0JFRF9BV1NTM1BMSVNUX1JFSkVDVFVOQVVUSE9SSVpFRCIsIlBJQ0JFRF9BV1NTM1BMSVNUX0FDTCIsIlBJQ0JFRF9BV1NTM1BMSVNUX0RJU0FCTEVCVUNLRVRQUkVGSVhUT1VSTCIsIlBJQ0JFRF9BV1NTM1BMSVNUX01FU1NBR0VfQUNDRVNTS0VZSUQiLCJQSUNCRURfQVdTUzNQTElTVF9NRVNTQUdFX1NFQ1JFVF9BQ0NFU1NLRVkiLCJQSUNCRURfQVdTUzNQTElTVF9NRVNTQUdFX0JVQ0tFVCIsIlBJQ0JFRF9BV1NTM1BMSVNUX01FU1NBR0VfUkVHSU9OIiwiUElDQkVEX0FXU1MzUExJU1RfTUVTU0FHRV9VUExPQURQQVRIIiwiUElDQkVEX0FXU1MzUExJU1RfTUVTU0FHRV9FTkRQT0lOVCIsIlBJQ0JFRF9BV1NTM1BMSVNUX01FU1NBR0VfUFJPWFkiLCJQSUNCRURfQVdTUzNQTElTVF9NRVNTQUdFX1VSTFBSRUZJWCIsIlBJQ0JFRF9BV1NTM1BMSVNUX01FU1NBR0VfUEFUSFNUWUxFQUNDRVNTIiwiUElDQkVEX0FXU1MzUExJU1RfTUVTU0FHRV9SRUpFQ1RVTkFVVEhPUklaRUQiLCJQSUNCRURfQVdTUzNQTElTVF9NRVNTQUdFX0FDTCIsIlBJQ0JFRF9BV1NTM1BMSVNUX01FU1NBR0VfRElTQUJMRUJVQ0tFVFBSRUZJWFRPVVJMIiwiQlVJTERJTl9XQVRFUk1BUksiLCJCVUlMRElOX1dBVEVSTUFSS19JU0FERFdBVEVSTUFSSyIsIkJVSUxESU5fV0FURVJNQVJLX01FU1NBR0VfSVNBRERXQVRFUk1BUksiLCJCVUlMRElOX1dBVEVSTUFSS19XQVRFUk1BUktUWVBFIiwiQlVJTERJTl9XQVRFUk1BUktfTUVTU0FHRV9XQVRFUk1BUktUWVBFIiwiQlVJTERJTl9XQVRFUk1BUktfSVNGVUxMU0NSRUVOV0FURVJNQVJLIiwiQlVJTERJTl9XQVRFUk1BUktfTUVTU0FHRV9JU0ZVTExTQ1JFRU5XQVRFUk1BUksiLCJCVUlMRElOX1dBVEVSTUFSS19XQVRFUk1BUktERUdSRUUiLCJCVUlMRElOX1dBVEVSTUFSS19NRVNTQUdFX1dBVEVSTUFSS0RFR1JFRSIsIkJVSUxESU5fV0FURVJNQVJLX1dBVEVSTUFSS1RFWFQiLCJCVUlMRElOX1dBVEVSTUFSS19NRVNTQUdFX1dBVEVSTUFSS1RFWFQiLCJCVUlMRElOX1dBVEVSTUFSS19XQVRFUk1BUktGT05UUEFUSCIsIkJVSUxESU5fV0FURVJNQVJLX01FU1NBR0VfV0FURVJNQVJLRk9OVFBBVEgiLCJCVUlMRElOX1dBVEVSTUFSS19XQVRFUk1BUktTQ0FMRVJBVElPIiwiQlVJTERJTl9XQVRFUk1BUktfTUVTU0FHRV9XQVRFUk1BUktGT05UUkFUSU8iLCJCVUlMRElOX1dBVEVSTUFSS19XQVRFUk1BUktDT0xPUiIsIkJVSUxESU5fV0FURVJNQVJLX01FU1NBR0VfV0FURVJNQVJLRk9OVENPTE9SIiwiQlVJTERJTl9XQVRFUk1BUktfV0FURVJNQVJLSU1BR0VQQVRIIiwiQlVJTERJTl9XQVRFUk1BUktfTUVTU0FHRV9XQVRFUk1BUktJTUFHRVBBVEgiLCJCVUlMRElOX1dBVEVSTUFSS19XQVRFUk1BUktQT1NJVElPTiIsIkJVSUxESU5fV0FURVJNQVJLX01FU1NBR0VfV0FURVJNQVJLUE9TSVRJT04iLCJCVUlMRElOX1NLSVBQUk9DRVNTIiwiQlVJTERJTl9TS0lQUFJPQ0VTU19TS0lQUFJPQ0VTU0VYVExJU1QiLCJCVUlMRElOX1JFTkFNRSIsIkJVSUxESU5fUkVOQU1FX0ZPUk1BVCIsIkJVSUxESU5fUkVOQU1FX0VOQUJMRSIsIkJVSUxESU5fQ09NUFJFU1MiLCJCVUlMRElOX0NPTVBSRVNTX1FVQUxJVFkiLCJCVUlMRElOX0NPTVBSRVNTX01FU1NBR0VfUVVBTElUWSIsIkJVSUxESU5fQ09NUFJFU1NfSVNDT05WRVJUIiwiQlVJTERJTl9DT01QUkVTU19NRVNTQUdFX0lTQ09OVkVSVCIsIkJVSUxESU5fQ09NUFJFU1NfQ09OVkVSVEZPUk1BVCIsIkJVSUxESU5fQ09NUFJFU1NfTUVTU0FHRV9DT05WRVJURk9STUFUIiwiQlVJTERJTl9DT01QUkVTU19JU1JFU0laRSIsIkJVSUxESU5fQ09NUFJFU1NfTUVTU0FHRV9JU1JFU0laRSIsIkJVSUxESU5fQ09NUFJFU1NfUkVTSVpFV0lEVEgiLCJCVUlMRElOX0NPTVBSRVNTX01FU1NBR0VfUkVTSVpFV0lEVEgiLCJCVUlMRElOX0NPTVBSRVNTX1JFU0laRUhFSUdIVCIsIkJVSUxESU5fQ09NUFJFU1NfTUVTU0FHRV9SRVNJWkVIRUlHSFQiLCJCVUlMRElOX0NPTVBSRVNTX0lTUkVTSVpFQllQRVJDRU5UIiwiQlVJTERJTl9DT01QUkVTU19NRVNTQUdFX0lTUkVTSVpFQllQRVJDRU5UIiwiQlVJTERJTl9DT01QUkVTU19JU0ZMSVAiLCJCVUlMRElOX0NPTVBSRVNTX0lTRkxPUCIsIkJVSUxESU5fQ09NUFJFU1NfUkVTSVpFUEVSQ0VOVCIsIkJVSUxESU5fQ09NUFJFU1NfTUVTU0FHRV9SRVNJWkVQRVJDRU5UIiwiQlVJTERJTl9DT01QUkVTU19TS0lQUkVTSVpFT0ZTTUFMTElNRyIsIkJVSUxESU5fQ09NUFJFU1NfSVNST1RBVEUiLCJCVUlMRElOX0NPTVBSRVNTX01FU1NBR0VfSVNST1RBVEUiLCJCVUlMRElOX0NPTVBSRVNTX1JPVEFURURFR1JFRSIsIkJVSUxESU5fQ09NUFJFU1NfTUVTU0FHRV9ST1RBVEVERUdSRUUiLCJCVUlMRElOX0NPTVBSRVNTX0lTUkVNT1ZFRVhJRiIsIkJVSUxESU5fQ09NUFJFU1NfTUVTU0FHRV9JU1JFTU9WRUVYSUYiLCJQTFVHSU5fSEFORExFUl9QTFVHSU5fSU5TVEFMTF9TVUNDRVNTIiwiUExVR0lOX0hBTkRMRVJfUExVR0lOX0lOU1RBTExfRkFJTEVEIiwiUExVR0lOX0hBTkRMRVJfUExVR0lOX0lOU1RBTExfRkFJTEVEX1JFQVNPTiIsIlBMVUdJTl9IQU5ETEVSX1BMVUdJTl9JTlNUQUxMX0ZBSUxFRF9QQVRIIiwiUExVR0lOX0hBTkRMRVJfUExVR0lOX1VOSU5TVEFMTF9TVUNDRVNTIiwiUExVR0lOX0hBTkRMRVJfUExVR0lOX1VOSU5TVEFMTF9GQUlMRUQiLCJQTFVHSU5fSEFORExFUl9QTFVHSU5fVU5JTlNUQUxMX0ZBSUxFRF9SRUFTT04iLCJQTFVHSU5fSEFORExFUl9QTFVHSU5fVU5JTlNUQUxMX0ZBSUxFRF9WQUxJRCIsIlBMVUdJTl9IQU5ETEVSX1BMVUdJTl9VUERBVEVfU1VDQ0VTUyIsIlBMVUdJTl9IQU5ETEVSX1BMVUdJTl9VUERBVEVfRkFJTEVEIiwiUExVR0lOX0hBTkRMRVJfUExVR0lOX1VQREFURV9GQUlMRURfUkVBU09OIiwiUExVR0lOX0hBTkRMRVJfUExVR0lOX1VQREFURV9GQUlMRURfVkFMSUQiLCJlbiIsIkkxOG5NYW5hZ2VyIiwib2JqZWN0QWRhcHRlciIsIk9iamVjdEFkYXB0ZXIiLCJsYW5ndWFnZSIsIkkxOG4iLCJhZGFwdGVyIiwiZGVmYXVsdExhbmd1YWdlIiwibG9hZE91dHRlckkxOG4iLCJpMThuRm9sZGVyIiwiZ2V0T3V0dGVySTE4bkZvbGRlciIsInJlYWRkaXJTeW5jIiwid2l0aEZpbGVUeXBlcyIsImlzRmlsZSIsImkxOG5GaWxlUGF0aCIsImkxOG5GaWxlIiwiaTE4bkZpbGVPYmoiLCJ5YW1sIiwicGF0aEV4aXN0c1N5bmMiLCJhZGRMb2NhbGUiLCJsb2NhbGVzIiwib3JpZ2luTG9jYWxlcyIsImdldExvY2FsZSIsIm5ld0xvY2FsZXMiLCJtZXJnZSIsInNldExvY2FsZSIsImFkZExhbmd1YWdlIiwiUGljR28iLCJfcGx1Z2luTG9hZGVyIiwiaW5pdENvbmZpZ1BhdGgiLCJpbml0Q29uZmlnIiwiZW5zdXJlRmlsZVN5bmMiLCJfY29uZmlnIiwibGlmZWN5Y2xlIiwicmVnaXN0ZXJDb21tYW5kcyIsInByb3BOYW1lIiwic3RhcnQiLCJjbGVhbnVwIiwicmVtb3ZlIl0sIm1hcHBpbmdzIjoicW5EQUlBLE1BQU1BLEdBQWdCLENBQ3BCQyxFQUNBQyxFQUNBQyxFQUNBQyxFQUNBQyxFQUNBQyxLQUVBLElBQUlDLEVBQVVOLEVBQUlNLFFBQVFMLFFBQVFBLEdBQVNDLFlBQVlBLEdBQWFDLE1BQU1BLElBQ3RFRSxNQUFBQSxTQUFBQSxFQUFTRSxTQUNYRCxFQUFVQSxFQUFRRSxPQUFPLHNCQUF1QixzQ0FFOUNILE1BQUFBLFNBQUFBLEVBQVNJLFlBQ1hILEVBQVVBLEVBQVFFLE9BQU8sNEJBQTZCLDZD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
|