From c54d119a0e1d6bc24c773059adecb0d34e96598f Mon Sep 17 00:00:00 2001 From: lijiahao Date: Wed, 25 Sep 2024 17:14:21 +0800 Subject: [PATCH] v1.0.1 --- app/background.js | 15982 ++++++++++++++++++++- app/preload.js | 4803 ++++++- main/application.ts | 13 +- main/helpers/create-window.ts | 2 +- main/ipc/app.ts | 24 +- main/ipc/xcloud.ts | 18 +- package.json | 4 +- renderer/common/settings.ts | 10 + renderer/components/ActionBar.tsx | 21 + renderer/components/Nav.tsx | 2 +- renderer/components/SettingItem.tsx | 13 +- renderer/pages/[locale]/home.tsx | 8 +- renderer/pages/_app.tsx | 2 +- renderer/public/locales/en/cloud.json | 1 + renderer/public/locales/en/settings.json | 4 + renderer/public/locales/zh/cloud.json | 1 + renderer/public/locales/zh/settings.json | 4 + renderer/tailwind.config.js | 18 + yarn.lock | 39 +- 19 files changed, 20900 insertions(+), 69 deletions(-) diff --git a/app/background.js b/app/background.js index 3c91abc..db0ee4e 100644 --- a/app/background.js +++ b/app/background.js @@ -1,2 +1,15980 @@ -!function(t,e){if("object"==typeof exports&&"object"==typeof module)module.exports=e(require("electron-serve"),require("electron-store"),require("debug"),require("ip-address"),require("axios"),require("compare-versions"),require("github-url-to-object"),require("jose"),require("uuid-1345"),require("xbox-webapi"));else if("function"==typeof define&&define.amd)define(["electron-serve","electron-store","debug","ip-address","axios","compare-versions","github-url-to-object","jose","uuid-1345","xbox-webapi"],e);else{var r="object"==typeof exports?e(require("electron-serve"),require("electron-store"),require("debug"),require("ip-address"),require("axios"),require("compare-versions"),require("github-url-to-object"),require("jose"),require("uuid-1345"),require("xbox-webapi")):e(t["electron-serve"],t["electron-store"],t.debug,t["ip-address"],t.axios,t["compare-versions"],t["github-url-to-object"],t.jose,t["uuid-1345"],t["xbox-webapi"]);for(var n in r)("object"==typeof exports?exports:t)[n]=r[n]}}(global,((t,e,r,n,s,i,o,a,c,u)=>(()=>{var l={2742:t=>{"use strict";t.exports=s},7831:t=>{"use strict";t.exports=i},6763:t=>{"use strict";t.exports=r},9440:e=>{"use strict";e.exports=t},1662:t=>{"use strict";t.exports=e},2181:t=>{"use strict";t.exports=o},5876:t=>{"use strict";t.exports=n},9603:t=>{"use strict";t.exports=a},8109:t=>{"use strict";t.exports=c},2170:t=>{"use strict";t.exports=u},6615:(t,e,r)=>{t.exports=r(8402)},7169:(t,e,r)=>{t.exports=r(7867)},6319:(t,e,r)=>{t.exports=r(2616)},6226:(t,e,r)=>{t.exports=r(4525)},8628:(t,e,r)=>{t.exports=r(6343)},5413:(t,e,r)=>{t.exports=r(1618)},1721:(t,e,r)=>{t.exports=r(2990)},129:(t,e,r)=>{t.exports=r(1086)},1265:(t,e,r)=>{r(4598)},5569:(t,e,r)=>{t.exports=r(6660)},9544:(t,e,r)=>{t.exports=r(975)},5110:(t,e,r)=>{t.exports=r(9703)},1549:(t,e,r)=>{t.exports=r(8251)},8928:(t,e,r)=>{t.exports=r(6513)},6751:(t,e,r)=>{t.exports=r(3220)},6100:(t,e,r)=>{t.exports=r(9563)},697:(t,e,r)=>{t.exports=r(6490)},1240:(t,e,r)=>{t.exports=r(5204)},7189:(t,e,r)=>{r(9270)},6255:(t,e,r)=>{t.exports=r(568)},9261:(t,e,r)=>{t.exports=r(9157)},6512:(t,e,r)=>{t.exports=r(8348)},6984:(t,e,r)=>{t.exports=r(9792)},533:(t,e,r)=>{var n=r(591),s=r(4704);t.exports=function(t,e,r){return(e=s(e))in t?n(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[e]=r,t},t.exports.__esModule=!0,t.exports.default=t.exports},6973:(t,e,r)=>{var n=r(8130),s=r(1234).default;t.exports=function(t,e){if("object"!=s(t)||!t)return t;var r=t[n];if(void 0!==r){var i=r.call(t,e||"default");if("object"!=s(i))return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(t)},t.exports.__esModule=!0,t.exports.default=t.exports},4704:(t,e,r)=>{var n=r(1234).default,s=r(6973);t.exports=function(t){var e=s(t,"string");return"symbol"==n(e)?e:e+""},t.exports.__esModule=!0,t.exports.default=t.exports},1234:(t,e,r)=>{var n=r(3071),s=r(4473);function i(e){return t.exports=i="function"==typeof n&&"symbol"==typeof s?function(t){return typeof t}:function(t){return t&&"function"==typeof n&&t.constructor===n&&t!==n.prototype?"symbol":typeof t},t.exports.__esModule=!0,t.exports.default=t.exports,i(e)}t.exports=i,t.exports.__esModule=!0,t.exports.default=t.exports},6040:(t,e,r)=>{"use strict";var n=r(8251);t.exports=n},7264:(t,e,r)=>{"use strict";var n=r(4139);r(768),r(8549),r(7152),r(1372),t.exports=n},9692:(t,e,r)=>{"use strict";var n=r(7045);t.exports=n},5663:(t,e,r)=>{"use strict";var n=r(70);t.exports=n},3531:(t,e,r)=>{"use strict";r(2425);var n=r(2046);t.exports=n.Array.isArray},6177:(t,e,r)=>{"use strict";r(9295);var n=r(1747);t.exports=n("Array","filter")},2092:(t,e,r)=>{"use strict";r(5650);var n=r(1747);t.exports=n("Array","forEach")},1362:(t,e,r)=>{"use strict";r(9748);var n=r(1747);t.exports=n("Array","includes")},6535:(t,e,r)=>{"use strict";r(9363),r(3643);var n=r(1747);t.exports=n("Array","keys")},5939:(t,e,r)=>{"use strict";r(521);var n=r(1747);t.exports=n("Array","some")},1263:(t,e,r)=>{"use strict";r(6737);var n=r(1747);t.exports=n("Array","sort")},5354:(t,e,r)=>{"use strict";r(5362);var n=r(2046);t.exports=n.Date.now},3155:(t,e,r)=>{"use strict";var n=r(8280),s=r(6177),i=Array.prototype;t.exports=function(t){var e=t.filter;return t===i||n(i,t)&&e===i.filter?s:e}},6880:(t,e,r)=>{"use strict";var n=r(8280),s=r(1362),i=r(4378),o=Array.prototype,a=String.prototype;t.exports=function(t){var e=t.includes;return t===o||n(o,t)&&e===o.includes?s:"string"==typeof t||t===a||n(a,t)&&e===a.includes?i:e}},9685:(t,e,r)=>{"use strict";var n=r(8280),s=r(5939),i=Array.prototype;t.exports=function(t){var e=t.some;return t===i||n(i,t)&&e===i.some?s:e}},2757:(t,e,r)=>{"use strict";var n=r(8280),s=r(1263),i=Array.prototype;t.exports=function(t){var e=t.sort;return t===i||n(i,t)&&e===i.sort?s:e}},3423:(t,e,r)=>{"use strict";var n=r(8280),s=r(7511),i=String.prototype;t.exports=function(t){var e=t.trim;return"string"==typeof t||t===i||n(i,t)&&e===i.trim?s:e}},317:(t,e,r)=>{"use strict";r(6648),r(9721);var n=r(2046),s=r(6024);n.JSON||(n.JSON={stringify:JSON.stringify}),t.exports=function(t,e,r){return s(n.JSON.stringify,null,arguments)}},7367:(t,e,r)=>{"use strict";r(1340);var n=r(2046);t.exports=n.Object.assign},8970:(t,e,r)=>{"use strict";r(7810);var n=r(2046).Object,s=t.exports=function(t,e){return n.defineProperties(t,e)};n.defineProperties.sham&&(s.sham=!0)},1926:(t,e,r)=>{"use strict";r(6750);var n=r(2046).Object,s=t.exports=function(t,e,r){return n.defineProperty(t,e,r)};n.defineProperty.sham&&(s.sham=!0)},5092:(t,e,r)=>{"use strict";r(7052);var n=r(2046).Object,s=t.exports=function(t,e){return n.getOwnPropertyDescriptor(t,e)};n.getOwnPropertyDescriptor.sham&&(s.sham=!0)},9147:(t,e,r)=>{"use strict";r(179);var n=r(2046);t.exports=n.Object.getOwnPropertyDescriptors},4776:(t,e,r)=>{"use strict";r(4452);var n=r(2046);t.exports=n.Object.getOwnPropertySymbols},9661:(t,e,r)=>{"use strict";r(3589);var n=r(2046);t.exports=n.Object.keys},7027:(t,e,r)=>{"use strict";r(4502),r(9363),r(3643),r(5931),r(7450),r(6415),r(5823),r(7714),r(7057);var n=r(2046);t.exports=n.Promise},9378:(t,e,r)=>{"use strict";r(9363),r(3643),r(1542),r(6951),r(5905),r(1852),r(7809),r(106),r(2657),r(3709),r(7057);var n=r(2046);t.exports=n.Set},4378:(t,e,r)=>{"use strict";r(9770);var n=r(1747);t.exports=n("String","includes")},7511:(t,e,r)=>{"use strict";r(727);var n=r(1747);t.exports=n("String","trim")},3842:(t,e,r)=>{"use strict";r(8545),r(3643),r(4452),r(3997),r(5084),r(2596),r(5721),r(4954),r(4123),r(3377),r(2230),r(5344),r(1660),r(4610),r(3669),r(4810),r(3325),r(7024),r(8172),r(5205);var n=r(2046);t.exports=n.Symbol},1730:(t,e,r)=>{"use strict";r(9363),r(3643),r(7057),r(4954);var n=r(560);t.exports=n.f("iterator")},1661:(t,e,r)=>{"use strict";r(8537),r(3669);var n=r(560);t.exports=n.f("toPrimitive")},591:(t,e,r)=>{"use strict";t.exports=r(4997)},3071:(t,e,r)=>{"use strict";t.exports=r(2321)},4473:(t,e,r)=>{"use strict";t.exports=r(2231)},8130:(t,e,r)=>{"use strict";t.exports=r(9280)},4997:(t,e,r)=>{"use strict";var n=r(6040);t.exports=n},2321:(t,e,r)=>{"use strict";var n=r(7264);r(3939),r(1785),r(1697),r(4664),r(3422),r(36),r(8703),r(6878),r(9671),r(359),t.exports=n},2231:(t,e,r)=>{"use strict";var n=r(9692);t.exports=n},9280:(t,e,r)=>{"use strict";var n=r(5663);t.exports=n},2159:(t,e,r)=>{"use strict";var n=r(2250),s=r(4640),i=TypeError;t.exports=function(t){if(n(t))return t;throw new i(s(t)+" is not a function")}},2235:(t,e,r)=>{"use strict";var n=r(5468),s=r(4640),i=TypeError;t.exports=function(t){if(n(t))return t;throw new i(s(t)+" is not a constructor")}},43:(t,e,r)=>{"use strict";var n=r(4018),s=String,i=TypeError;t.exports=function(t){if(n(t))return t;throw new i("Can't set "+s(t)+" as a prototype")}},2911:(t,e,r)=>{"use strict";var n=r(4640),s=TypeError;t.exports=function(t){if("object"==typeof t&&"size"in t&&"has"in t&&"add"in t&&"delete"in t&&"keys"in t)return t;throw new s(n(t)+" is not a set")}},2156:t=>{"use strict";t.exports=function(){}},9596:(t,e,r)=>{"use strict";var n=r(8280),s=TypeError;t.exports=function(t,e){if(n(e,t))return t;throw new s("Incorrect invocation")}},6624:(t,e,r)=>{"use strict";var n=r(6285),s=String,i=TypeError;t.exports=function(t){if(n(t))return t;throw new i(s(t)+" is not an object")}},6375:(t,e,r)=>{"use strict";var n=r(8828);t.exports=n((function(){if("function"==typeof ArrayBuffer){var t=new ArrayBuffer(8);Object.isExtensible(t)&&Object.defineProperty(t,"a",{value:8})}}))},2914:(t,e,r)=>{"use strict";var n=r(726).forEach,s=r(7623)("forEach");t.exports=s?[].forEach:function(t){return n(this,t,arguments.length>1?arguments[1]:void 0)}},1229:(t,e,r)=>{"use strict";var n=r(8311),s=r(3930),i=r(9298),o=r(6818),a=r(7812),c=r(5468),u=r(575),l=r(5543),h=r(300),p=r(3448),f=Array;t.exports=function(t){var e=i(t),r=c(this),d=arguments.length,g=d>1?arguments[1]:void 0,v=void 0!==g;v&&(g=n(g,d>2?arguments[2]:void 0));var m,y,w,x,_,S,b=p(e),k=0;if(!b||this===f&&a(b))for(m=u(e),y=r?new this(m):f(m);m>k;k++)S=v?g(e[k],k):e[k],l(y,k,S);else for(y=r?new this:[],_=(x=h(e,b)).next;!(w=s(_,x)).done;k++)S=v?o(x,g,[w.value,k],!0):w.value,l(y,k,S);return y.length=k,y}},4436:(t,e,r)=>{"use strict";var n=r(7374),s=r(4849),i=r(575),o=function(t){return function(e,r,o){var a=n(e),c=i(a);if(0===c)return!t&&-1;var u,l=s(o,c);if(t&&r!=r){for(;c>l;)if((u=a[l++])!=u)return!0}else for(;c>l;l++)if((t||l in a)&&a[l]===r)return t||l||0;return!t&&-1}};t.exports={includes:o(!0),indexOf:o(!1)}},726:(t,e,r)=>{"use strict";var n=r(8311),s=r(1907),i=r(6946),o=r(9298),a=r(575),c=r(6968),u=s([].push),l=function(t){var e=1===t,r=2===t,s=3===t,l=4===t,h=6===t,p=7===t,f=5===t||h;return function(d,g,v,m){for(var y,w,x=o(d),_=i(x),S=a(_),b=n(g,v),k=0,T=m||c,P=e?T(d,S):r||p?T(d,0):void 0;S>k;k++)if((f||k in _)&&(w=b(y=_[k],k,x),t))if(e)P[k]=w;else if(w)switch(t){case 3:return!0;case 5:return y;case 6:return k;case 2:u(P,y)}else switch(t){case 4:return!1;case 7:u(P,y)}return h?-1:s||l?l:P}};t.exports={forEach:l(0),map:l(1),filter:l(2),some:l(3),every:l(4),find:l(5),findIndex:l(6),filterReject:l(7)}},7171:(t,e,r)=>{"use strict";var n=r(8828),s=r(6264),i=r(798),o=s("species");t.exports=function(t){return i>=51||!n((function(){var e=[];return(e.constructor={})[o]=function(){return{foo:1}},1!==e[t](Boolean).foo}))}},7623:(t,e,r)=>{"use strict";var n=r(8828);t.exports=function(t,e){var r=[][t];return!!r&&n((function(){r.call(null,e||function(){return 1},1)}))}},3427:(t,e,r)=>{"use strict";var n=r(1907);t.exports=n([].slice)},4321:(t,e,r)=>{"use strict";var n=r(3427),s=Math.floor,i=function(t,e){var r=t.length;if(r<8)for(var o,a,c=1;c0;)t[a]=t[--a];a!==c++&&(t[a]=o)}else for(var u=s(r/2),l=i(n(t,0,u),e),h=i(n(t,u),e),p=l.length,f=h.length,d=0,g=0;d{"use strict";var n=r(1793),s=r(5468),i=r(6285),o=r(6264)("species"),a=Array;t.exports=function(t){var e;return n(t)&&(e=t.constructor,(s(e)&&(e===a||n(e.prototype))||i(e)&&null===(e=e[o]))&&(e=void 0)),void 0===e?a:e}},6968:(t,e,r)=>{"use strict";var n=r(4010);t.exports=function(t,e){return new(n(t))(0===e?0:e)}},6818:(t,e,r)=>{"use strict";var n=r(6624),s=r(154);t.exports=function(t,e,r,i){try{return i?e(n(r)[0],r[1]):e(r)}catch(e){s(t,"throw",e)}}},2222:t=>{"use strict";t.exports=function(t,e){return 1===e?function(e,r){return e[t](r)}:function(e,r,n){return e[t](r,n)}}},473:(t,e,r)=>{"use strict";var n=r(6264)("iterator"),s=!1;try{var i=0,o={next:function(){return{done:!!i++}},return:function(){s=!0}};o[n]=function(){return this},Array.from(o,(function(){throw 2}))}catch(t){}t.exports=function(t,e){try{if(!e&&!s)return!1}catch(t){return!1}var r=!1;try{var i={};i[n]=function(){return{next:function(){return{done:r=!0}}}},t(i)}catch(t){}return r}},5807:(t,e,r)=>{"use strict";var n=r(1907),s=n({}.toString),i=n("".slice);t.exports=function(t){return i(s(t),8,-1)}},3948:(t,e,r)=>{"use strict";var n=r(2623),s=r(2250),i=r(5807),o=r(6264)("toStringTag"),a=Object,c="Arguments"===i(function(){return arguments}());t.exports=n?i:function(t){var e,r,n;return void 0===t?"Undefined":null===t?"Null":"string"==typeof(r=function(t,e){try{return t[e]}catch(t){}}(e=a(t),o))?r:c?i(e):"Object"===(n=i(e))&&s(e.callee)?"Arguments":n}},217:(t,e,r)=>{"use strict";var n=r(8075),s=r(9251),i=r(2802),o=r(8311),a=r(9596),c=r(7136),u=r(4823),l=r(183),h=r(9550),p=r(7118),f=r(9447),d=r(1548).fastKey,g=r(4932),v=g.set,m=g.getterFor;t.exports={getConstructor:function(t,e,r,l){var h=t((function(t,s){a(t,p),v(t,{type:e,index:n(null),first:null,last:null,size:0}),f||(t.size=0),c(s)||u(s,t[l],{that:t,AS_ENTRIES:r})})),p=h.prototype,g=m(e),y=function(t,e,r){var n,s,i=g(t),o=w(t,e);return o?o.value=r:(i.last=o={index:s=d(e,!0),key:e,value:r,previous:n=i.last,next:null,removed:!1},i.first||(i.first=o),n&&(n.next=o),f?i.size++:t.size++,"F"!==s&&(i.index[s]=o)),t},w=function(t,e){var r,n=g(t),s=d(e);if("F"!==s)return n.index[s];for(r=n.first;r;r=r.next)if(r.key===e)return r};return i(p,{clear:function(){for(var t=g(this),e=t.first;e;)e.removed=!0,e.previous&&(e.previous=e.previous.next=null),e=e.next;t.first=t.last=null,t.index=n(null),f?t.size=0:this.size=0},delete:function(t){var e=this,r=g(e),n=w(e,t);if(n){var s=n.next,i=n.previous;delete r.index[n.index],n.removed=!0,i&&(i.next=s),s&&(s.previous=i),r.first===n&&(r.first=s),r.last===n&&(r.last=i),f?r.size--:e.size--}return!!n},forEach:function(t){for(var e,r=g(this),n=o(t,arguments.length>1?arguments[1]:void 0);e=e?e.next:r.first;)for(n(e.value,e.key,this);e&&e.removed;)e=e.previous},has:function(t){return!!w(this,t)}}),i(p,r?{get:function(t){var e=w(this,t);return e&&e.value},set:function(t,e){return y(this,0===t?0:t,e)}}:{add:function(t){return y(this,t=0===t?0:t,t)}}),f&&s(p,"size",{configurable:!0,get:function(){return g(this).size}}),h},setStrong:function(t,e,r){var n=e+" Iterator",s=m(e),i=m(n);l(t,e,(function(t,e){v(this,{type:n,target:t,state:s(t),kind:e,last:null})}),(function(){for(var t=i(this),e=t.kind,r=t.last;r&&r.removed;)r=r.previous;return t.target&&(t.last=r=r?r.next:t.state.first)?h("keys"===e?r.key:"values"===e?r.value:[r.key,r.value],!1):(t.target=null,h(void 0,!0))}),r?"entries":"values",!r,!0),p(e)}}},7081:(t,e,r)=>{"use strict";var n=r(1091),s=r(5951),i=r(1548),o=r(8828),a=r(1626),c=r(4823),u=r(9596),l=r(2250),h=r(6285),p=r(7136),f=r(4840),d=r(4284).f,g=r(726).forEach,v=r(9447),m=r(4932),y=m.set,w=m.getterFor;t.exports=function(t,e,r){var m,x=-1!==t.indexOf("Map"),_=-1!==t.indexOf("Weak"),S=x?"set":"add",b=s[t],k=b&&b.prototype,T={};if(v&&l(b)&&(_||k.forEach&&!o((function(){(new b).entries().next()})))){var P=(m=e((function(e,r){y(u(e,P),{type:t,collection:new b}),p(r)||c(r,e[S],{that:e,AS_ENTRIES:x})}))).prototype,C=w(t);g(["add","clear","delete","forEach","get","has","set","keys","values","entries"],(function(t){var e="add"===t||"set"===t;!(t in k)||_&&"clear"===t||a(P,t,(function(r,n){var s=C(this).collection;if(!e&&_&&!h(r))return"get"===t&&void 0;var i=s[t](0===r?0:r,n);return e?this:i}))})),_||d(P,"size",{configurable:!0,get:function(){return C(this).collection.size}})}else m=r.getConstructor(e,t,x,S),i.enable();return f(m,t,!1,!0),T[t]=m,n({global:!0,forced:!0},T),_||r.setStrong(m,t,x),m}},9595:(t,e,r)=>{"use strict";var n=r(9724),s=r(1042),i=r(3846),o=r(4284);t.exports=function(t,e,r){for(var a=s(e),c=o.f,u=i.f,l=0;l{"use strict";var n=r(6264)("match");t.exports=function(t){var e=/./;try{"/./"[t](e)}catch(r){try{return e[n]=!1,"/./"[t](e)}catch(t){}}return!1}},7382:(t,e,r)=>{"use strict";var n=r(8828);t.exports=!n((function(){function t(){}return t.prototype.constructor=null,Object.getPrototypeOf(new t)!==t.prototype}))},9550:t=>{"use strict";t.exports=function(t,e){return{value:t,done:e}}},1626:(t,e,r)=>{"use strict";var n=r(9447),s=r(4284),i=r(5817);t.exports=n?function(t,e,r){return s.f(t,e,i(1,r))}:function(t,e,r){return t[e]=r,t}},5817:t=>{"use strict";t.exports=function(t,e){return{enumerable:!(1&t),configurable:!(2&t),writable:!(4&t),value:e}}},5543:(t,e,r)=>{"use strict";var n=r(9447),s=r(4284),i=r(5817);t.exports=function(t,e,r){n?s.f(t,e,i(0,r)):t[e]=r}},3701:(t,e,r)=>{"use strict";var n=r(1907),s=r(8828),i=r(1164).start,o=RangeError,a=isFinite,c=Math.abs,u=Date.prototype,l=u.toISOString,h=n(u.getTime),p=n(u.getUTCDate),f=n(u.getUTCFullYear),d=n(u.getUTCHours),g=n(u.getUTCMilliseconds),v=n(u.getUTCMinutes),m=n(u.getUTCMonth),y=n(u.getUTCSeconds);t.exports=s((function(){return"0385-07-25T07:06:39.999Z"!==l.call(new Date(-50000000000001))}))||!s((function(){l.call(new Date(NaN))}))?function(){if(!a(h(this)))throw new o("Invalid time value");var t=this,e=f(t),r=g(t),n=e<0?"-":e>9999?"+":"";return n+i(c(e),n?6:4,0)+"-"+i(m(t)+1,2,0)+"-"+i(p(t),2,0)+"T"+i(d(t),2,0)+":"+i(v(t),2,0)+":"+i(y(t),2,0)+"."+i(r,3,0)+"Z"}:l},9251:(t,e,r)=>{"use strict";var n=r(4284);t.exports=function(t,e,r){return n.f(t,e,r)}},8055:(t,e,r)=>{"use strict";var n=r(1626);t.exports=function(t,e,r,s){return s&&s.enumerable?t[e]=r:n(t,e,r),t}},2802:(t,e,r)=>{"use strict";var n=r(8055);t.exports=function(t,e,r){for(var s in e)r&&r.unsafe&&t[s]?t[s]=e[s]:n(t,s,e[s],r);return t}},2532:(t,e,r)=>{"use strict";var n=r(5951),s=Object.defineProperty;t.exports=function(t,e){try{s(n,t,{value:e,configurable:!0,writable:!0})}catch(r){n[t]=e}return e}},4535:(t,e,r)=>{"use strict";var n=r(4640),s=TypeError;t.exports=function(t,e){if(!delete t[e])throw new s("Cannot delete property "+n(e)+" of "+n(t))}},9447:(t,e,r)=>{"use strict";var n=r(8828);t.exports=!n((function(){return 7!==Object.defineProperty({},1,{get:function(){return 7}})[1]}))},9552:(t,e,r)=>{"use strict";var n=r(5951),s=r(6285),i=n.document,o=s(i)&&s(i.createElement);t.exports=function(t){return o?i.createElement(t):{}}},8024:t=>{"use strict";var e=TypeError;t.exports=function(t){if(t>9007199254740991)throw e("Maximum allowed index exceeded");return t}},9287:t=>{"use strict";t.exports={CSSRuleList:0,CSSStyleDeclaration:0,CSSValueList:0,ClientRectList:0,DOMRectList:0,DOMStringList:0,DOMTokenList:1,DataTransferItemList:0,FileList:0,HTMLAllCollection:0,HTMLCollection:0,HTMLFormElement:0,HTMLSelectElement:0,MediaList:0,MimeTypeArray:0,NamedNodeMap:0,NodeList:1,PaintRequestList:0,Plugin:0,PluginArray:0,SVGLengthList:0,SVGNumberList:0,SVGPathSegList:0,SVGPointList:0,SVGStringList:0,SVGTransformList:0,SourceBufferList:0,StyleSheetList:0,TextTrackCueList:0,TextTrackList:0,TouchList:0}},376:t=>{"use strict";t.exports=["constructor","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","toLocaleString","toString","valueOf"]},3440:(t,e,r)=>{"use strict";var n=r(6794).match(/firefox\/(\d+)/i);t.exports=!!n&&+n[1]},4328:(t,e,r)=>{"use strict";var n=r(6794);t.exports=/MSIE|Trident/.test(n)},8606:(t,e,r)=>{"use strict";var n=r(6794);t.exports=/ipad|iphone|ipod/i.test(n)&&"undefined"!=typeof Pebble},1829:(t,e,r)=>{"use strict";var n=r(6794);t.exports=/(?:ipad|iphone|ipod).*applewebkit/i.test(n)},7586:(t,e,r)=>{"use strict";var n=r(2832);t.exports="NODE"===n},9291:(t,e,r)=>{"use strict";var n=r(6794);t.exports=/web0s(?!.*chrome)/i.test(n)},6794:(t,e,r)=>{"use strict";var n=r(5951).navigator,s=n&&n.userAgent;t.exports=s?String(s):""},798:(t,e,r)=>{"use strict";var n,s,i=r(5951),o=r(6794),a=i.process,c=i.Deno,u=a&&a.versions||c&&c.version,l=u&&u.v8;l&&(s=(n=l.split("."))[0]>0&&n[0]<4?1:+(n[0]+n[1])),!s&&o&&(!(n=o.match(/Edge\/(\d+)/))||n[1]>=74)&&(n=o.match(/Chrome\/(\d+)/))&&(s=+n[1]),t.exports=s},3786:(t,e,r)=>{"use strict";var n=r(6794).match(/AppleWebKit\/(\d+)\./);t.exports=!!n&&+n[1]},2832:(t,e,r)=>{"use strict";var n=r(5951),s=r(6794),i=r(5807),o=function(t){return s.slice(0,t.length)===t};t.exports=o("Bun/")?"BUN":o("Cloudflare-Workers")?"CLOUDFLARE":o("Deno/")?"DENO":o("Node.js/")?"NODE":n.Bun&&"string"==typeof Bun.version?"BUN":n.Deno&&"object"==typeof Deno.version?"DENO":"process"===i(n.process)?"NODE":n.window&&n.document?"BROWSER":"REST"},5762:(t,e,r)=>{"use strict";var n=r(1907),s=Error,i=n("".replace),o=String(new s("zxcasd").stack),a=/\n\s*at [^:]*:[^\n]*/,c=a.test(o);t.exports=function(t,e){if(c&&"string"==typeof t&&!s.prepareStackTrace)for(;e--;)t=i(t,a,"");return t}},5884:(t,e,r)=>{"use strict";var n=r(1626),s=r(5762),i=r(3888),o=Error.captureStackTrace;t.exports=function(t,e,r,a){i&&(o?o(t,e):n(t,"stack",s(r,a)))}},3888:(t,e,r)=>{"use strict";var n=r(8828),s=r(5817);t.exports=!n((function(){var t=new Error("a");return!("stack"in t)||(Object.defineProperty(t,"stack",s(1,7)),7!==t.stack)}))},1091:(t,e,r)=>{"use strict";var n=r(5951),s=r(6024),i=r(2361),o=r(2250),a=r(3846).f,c=r(7463),u=r(2046),l=r(8311),h=r(1626),p=r(9724);r(6128);var f=function(t){var e=function(r,n,i){if(this instanceof e){switch(arguments.length){case 0:return new t;case 1:return new t(r);case 2:return new t(r,n)}return new t(r,n,i)}return s(t,this,arguments)};return e.prototype=t.prototype,e};t.exports=function(t,e){var r,s,d,g,v,m,y,w,x,_=t.target,S=t.global,b=t.stat,k=t.proto,T=S?n:b?n[_]:n[_]&&n[_].prototype,P=S?u:u[_]||h(u,_,{})[_],C=P.prototype;for(g in e)s=!(r=c(S?g:_+(b?".":"#")+g,t.forced))&&T&&p(T,g),m=P[g],s&&(y=t.dontCallGetSet?(x=a(T,g))&&x.value:T[g]),v=s&&y?y:e[g],(r||k||typeof m!=typeof v)&&(w=t.bind&&s?l(v,n):t.wrap&&s?f(v):k&&o(v)?i(v):v,(t.sham||v&&v.sham||m&&m.sham)&&h(w,"sham",!0),h(P,g,w),k&&(p(u,d=_+"Prototype")||h(u,d,{}),h(u[d],g,v),t.real&&C&&(r||!C[g])&&h(C,g,v)))}},8828:t=>{"use strict";t.exports=function(t){try{return!!t()}catch(t){return!0}}},5681:(t,e,r)=>{"use strict";var n=r(8828);t.exports=!n((function(){return Object.isExtensible(Object.preventExtensions({}))}))},6024:(t,e,r)=>{"use strict";var n=r(1505),s=Function.prototype,i=s.apply,o=s.call;t.exports="object"==typeof Reflect&&Reflect.apply||(n?o.bind(i):function(){return o.apply(i,arguments)})},8311:(t,e,r)=>{"use strict";var n=r(2361),s=r(2159),i=r(1505),o=n(n.bind);t.exports=function(t,e){return s(t),void 0===e?t:i?o(t,e):function(){return t.apply(e,arguments)}}},1505:(t,e,r)=>{"use strict";var n=r(8828);t.exports=!n((function(){var t=function(){}.bind();return"function"!=typeof t||t.hasOwnProperty("prototype")}))},3930:(t,e,r)=>{"use strict";var n=r(1505),s=Function.prototype.call;t.exports=n?s.bind(s):function(){return s.apply(s,arguments)}},6833:(t,e,r)=>{"use strict";var n=r(9447),s=r(9724),i=Function.prototype,o=n&&Object.getOwnPropertyDescriptor,a=s(i,"name"),c=a&&"something"===function(){}.name,u=a&&(!n||n&&o(i,"name").configurable);t.exports={EXISTS:a,PROPER:c,CONFIGURABLE:u}},1871:(t,e,r)=>{"use strict";var n=r(1907),s=r(2159);t.exports=function(t,e,r){try{return n(s(Object.getOwnPropertyDescriptor(t,e)[r]))}catch(t){}}},2361:(t,e,r)=>{"use strict";var n=r(5807),s=r(1907);t.exports=function(t){if("Function"===n(t))return s(t)}},1907:(t,e,r)=>{"use strict";var n=r(1505),s=Function.prototype,i=s.call,o=n&&s.bind.bind(i,i);t.exports=n?o:function(t){return function(){return i.apply(t,arguments)}}},1747:(t,e,r)=>{"use strict";var n=r(5951),s=r(2046);t.exports=function(t,e){var r=s[t+"Prototype"],i=r&&r[e];if(i)return i;var o=n[t],a=o&&o.prototype;return a&&a[e]}},5582:(t,e,r)=>{"use strict";var n=r(2046),s=r(5951),i=r(2250),o=function(t){return i(t)?t:void 0};t.exports=function(t,e){return arguments.length<2?o(n[t])||o(s[t]):n[t]&&n[t][e]||s[t]&&s[t][e]}},3316:t=>{"use strict";t.exports=function(t){return{iterator:t,next:t.next,done:!1}}},3448:(t,e,r)=>{"use strict";var n=r(3948),s=r(9367),i=r(7136),o=r(3742),a=r(6264)("iterator");t.exports=function(t){if(!i(t))return s(t,a)||s(t,"@@iterator")||o[n(t)]}},300:(t,e,r)=>{"use strict";var n=r(3930),s=r(2159),i=r(6624),o=r(4640),a=r(3448),c=TypeError;t.exports=function(t,e){var r=arguments.length<2?a(t):e;if(s(r))return i(n(r,t));throw new c(o(t)+" is not iterable")}},6656:(t,e,r)=>{"use strict";var n=r(1907),s=r(1793),i=r(2250),o=r(5807),a=r(160),c=n([].push);t.exports=function(t){if(i(t))return t;if(s(t)){for(var e=t.length,r=[],n=0;n{"use strict";var n=r(2159),s=r(7136);t.exports=function(t,e){var r=t[e];return s(r)?void 0:n(r)}},2332:(t,e,r)=>{"use strict";var n=r(2159),s=r(6624),i=r(3930),o=r(5482),a=r(3316),c="Invalid size",u=RangeError,l=TypeError,h=Math.max,p=function(t,e){this.set=t,this.size=h(e,0),this.has=n(t.has),this.keys=n(t.keys)};p.prototype={getIterator:function(){return a(s(i(this.keys,this.set)))},includes:function(t){return i(this.has,this.set,t)}},t.exports=function(t){s(t);var e=+t.size;if(e!=e)throw new l(c);var r=o(e);if(r<0)throw new u(c);return new p(t,r)}},5951:function(t){"use strict";var e=function(t){return t&&t.Math===Math&&t};t.exports=e("object"==typeof globalThis&&globalThis)||e("object"==typeof window&&window)||e("object"==typeof self&&self)||e("object"==typeof global&&global)||e("object"==typeof this&&this)||function(){return this}()||Function("return this")()},9724:(t,e,r)=>{"use strict";var n=r(1907),s=r(9298),i=n({}.hasOwnProperty);t.exports=Object.hasOwn||function(t,e){return i(s(t),e)}},8530:t=>{"use strict";t.exports={}},3904:t=>{"use strict";t.exports=function(t,e){try{1===arguments.length?console.error(t):console.error(t,e)}catch(t){}}},2416:(t,e,r)=>{"use strict";var n=r(5582);t.exports=n("document","documentElement")},3648:(t,e,r)=>{"use strict";var n=r(9447),s=r(8828),i=r(9552);t.exports=!n&&!s((function(){return 7!==Object.defineProperty(i("div"),"a",{get:function(){return 7}}).a}))},6946:(t,e,r)=>{"use strict";var n=r(1907),s=r(8828),i=r(5807),o=Object,a=n("".split);t.exports=s((function(){return!o("z").propertyIsEnumerable(0)}))?function(t){return"String"===i(t)?a(t,""):o(t)}:o},2647:(t,e,r)=>{"use strict";var n=r(1907),s=r(2250),i=r(6128),o=n(Function.toString);s(i.inspectSource)||(i.inspectSource=function(t){return o(t)}),t.exports=i.inspectSource},9259:(t,e,r)=>{"use strict";var n=r(6285),s=r(1626);t.exports=function(t,e){n(e)&&"cause"in e&&s(t,"cause",e.cause)}},1548:(t,e,r)=>{"use strict";var n=r(1091),s=r(1907),i=r(8530),o=r(6285),a=r(9724),c=r(4284).f,u=r(4443),l=r(5407),h=r(7005),p=r(6499),f=r(5681),d=!1,g=p("meta"),v=0,m=function(t){c(t,g,{value:{objectID:"O"+v++,weakData:{}}})},y=t.exports={enable:function(){y.enable=function(){},d=!0;var t=u.f,e=s([].splice),r={};r[g]=1,t(r).length&&(u.f=function(r){for(var n=t(r),s=0,i=n.length;s{"use strict";var n,s,i,o=r(551),a=r(5951),c=r(6285),u=r(1626),l=r(9724),h=r(6128),p=r(2522),f=r(8530),d="Object already initialized",g=a.TypeError,v=a.WeakMap;if(o||h.state){var m=h.state||(h.state=new v);m.get=m.get,m.has=m.has,m.set=m.set,n=function(t,e){if(m.has(t))throw new g(d);return e.facade=t,m.set(t,e),e},s=function(t){return m.get(t)||{}},i=function(t){return m.has(t)}}else{var y=p("state");f[y]=!0,n=function(t,e){if(l(t,y))throw new g(d);return e.facade=t,u(t,y,e),e},s=function(t){return l(t,y)?t[y]:{}},i=function(t){return l(t,y)}}t.exports={set:n,get:s,has:i,enforce:function(t){return i(t)?s(t):n(t,{})},getterFor:function(t){return function(e){var r;if(!c(e)||(r=s(e)).type!==t)throw new g("Incompatible receiver, "+t+" required");return r}}}},7812:(t,e,r)=>{"use strict";var n=r(6264),s=r(3742),i=n("iterator"),o=Array.prototype;t.exports=function(t){return void 0!==t&&(s.Array===t||o[i]===t)}},1793:(t,e,r)=>{"use strict";var n=r(5807);t.exports=Array.isArray||function(t){return"Array"===n(t)}},2250:t=>{"use strict";var e="object"==typeof document&&document.all;t.exports=void 0===e&&void 0!==e?function(t){return"function"==typeof t||t===e}:function(t){return"function"==typeof t}},5468:(t,e,r)=>{"use strict";var n=r(1907),s=r(8828),i=r(2250),o=r(3948),a=r(5582),c=r(2647),u=function(){},l=a("Reflect","construct"),h=/^\s*(?:class|function)\b/,p=n(h.exec),f=!h.test(u),d=function(t){if(!i(t))return!1;try{return l(u,[],t),!0}catch(t){return!1}},g=function(t){if(!i(t))return!1;switch(o(t)){case"AsyncFunction":case"GeneratorFunction":case"AsyncGeneratorFunction":return!1}try{return f||!!p(h,c(t))}catch(t){return!0}};g.sham=!0,t.exports=!l||s((function(){var t;return d(d.call)||!d(Object)||!d((function(){t=!0}))||t}))?g:d},7463:(t,e,r)=>{"use strict";var n=r(8828),s=r(2250),i=/#|\.prototype\./,o=function(t,e){var r=c[a(t)];return r===l||r!==u&&(s(e)?n(e):!!e)},a=o.normalize=function(t){return String(t).replace(i,".").toLowerCase()},c=o.data={},u=o.NATIVE="N",l=o.POLYFILL="P";t.exports=o},7136:t=>{"use strict";t.exports=function(t){return null==t}},6285:(t,e,r)=>{"use strict";var n=r(2250);t.exports=function(t){return"object"==typeof t?null!==t:n(t)}},4018:(t,e,r)=>{"use strict";var n=r(6285);t.exports=function(t){return n(t)||null===t}},7376:t=>{"use strict";t.exports=!0},2087:(t,e,r)=>{"use strict";var n=r(6285),s=r(5807),i=r(6264)("match");t.exports=function(t){var e;return n(t)&&(void 0!==(e=t[i])?!!e:"RegExp"===s(t))}},5594:(t,e,r)=>{"use strict";var n=r(5582),s=r(2250),i=r(8280),o=r(1175),a=Object;t.exports=o?function(t){return"symbol"==typeof t}:function(t){var e=n("Symbol");return s(e)&&i(e.prototype,a(t))}},2190:(t,e,r)=>{"use strict";var n=r(3930);t.exports=function(t,e,r){for(var s,i,o=r?t:t.iterator,a=t.next;!(s=n(a,o)).done;)if(void 0!==(i=e(s.value)))return i}},4823:(t,e,r)=>{"use strict";var n=r(8311),s=r(3930),i=r(6624),o=r(4640),a=r(7812),c=r(575),u=r(8280),l=r(300),h=r(3448),p=r(154),f=TypeError,d=function(t,e){this.stopped=t,this.result=e},g=d.prototype;t.exports=function(t,e,r){var v,m,y,w,x,_,S,b=r&&r.that,k=!(!r||!r.AS_ENTRIES),T=!(!r||!r.IS_RECORD),P=!(!r||!r.IS_ITERATOR),C=!(!r||!r.INTERRUPTED),A=n(e,b),O=function(t){return v&&p(v,"normal",t),new d(!0,t)},j=function(t){return k?(i(t),C?A(t[0],t[1],O):A(t[0],t[1])):C?A(t,O):A(t)};if(T)v=t.iterator;else if(P)v=t;else{if(!(m=h(t)))throw new f(o(t)+" is not iterable");if(a(m)){for(y=0,w=c(t);w>y;y++)if((x=j(t[y]))&&u(g,x))return x;return new d(!1)}v=l(t,m)}for(_=T?t.next:v.next;!(S=s(_,v)).done;){try{x=j(S.value)}catch(t){p(v,"throw",t)}if("object"==typeof x&&x&&u(g,x))return x}return new d(!1)}},154:(t,e,r)=>{"use strict";var n=r(3930),s=r(6624),i=r(9367);t.exports=function(t,e,r){var o,a;s(t);try{if(!(o=i(t,"return"))){if("throw"===e)throw r;return r}o=n(o,t)}catch(t){a=!0,o=t}if("throw"===e)throw r;if(a)throw o;return s(o),r}},7181:(t,e,r)=>{"use strict";var n=r(5116).IteratorPrototype,s=r(8075),i=r(5817),o=r(4840),a=r(3742),c=function(){return this};t.exports=function(t,e,r,u){var l=e+" Iterator";return t.prototype=s(n,{next:i(+!u,r)}),o(t,l,!1,!0),a[l]=c,t}},183:(t,e,r)=>{"use strict";var n=r(1091),s=r(3930),i=r(7376),o=r(6833),a=r(2250),c=r(7181),u=r(5972),l=r(9192),h=r(4840),p=r(1626),f=r(8055),d=r(6264),g=r(3742),v=r(5116),m=o.PROPER,y=o.CONFIGURABLE,w=v.IteratorPrototype,x=v.BUGGY_SAFARI_ITERATORS,_=d("iterator"),S="keys",b="values",k="entries",T=function(){return this};t.exports=function(t,e,r,o,d,v,P){c(r,e,o);var C,A,O,j=function(t){if(t===d&&L)return L;if(!x&&t&&t in U)return U[t];switch(t){case S:case b:case k:return function(){return new r(this,t)}}return function(){return new r(this)}},E=e+" Iterator",R=!1,U=t.prototype,I=U[_]||U["@@iterator"]||d&&U[d],L=!x&&I||j(d),D="Array"===e&&U.entries||I;if(D&&(C=u(D.call(new t)))!==Object.prototype&&C.next&&(i||u(C)===w||(l?l(C,w):a(C[_])||f(C,_,T)),h(C,E,!0,!0),i&&(g[E]=T)),m&&d===b&&I&&I.name!==b&&(!i&&y?p(U,"name",b):(R=!0,L=function(){return s(I,this)})),d)if(A={values:j(b),keys:v?L:j(S),entries:j(k)},P)for(O in A)(x||R||!(O in U))&&f(U,O,A[O]);else n({target:e,proto:!0,forced:x||R},A);return i&&!P||U[_]===L||f(U,_,L,{name:d}),g[e]=L,A}},5116:(t,e,r)=>{"use strict";var n,s,i,o=r(8828),a=r(2250),c=r(6285),u=r(8075),l=r(5972),h=r(8055),p=r(6264),f=r(7376),d=p("iterator"),g=!1;[].keys&&("next"in(i=[].keys())?(s=l(l(i)))!==Object.prototype&&(n=s):g=!0),!c(n)||o((function(){var t={};return n[d].call(t)!==t}))?n={}:f&&(n=u(n)),a(n[d])||h(n,d,(function(){return this})),t.exports={IteratorPrototype:n,BUGGY_SAFARI_ITERATORS:g}},3742:t=>{"use strict";t.exports={}},575:(t,e,r)=>{"use strict";var n=r(3121);t.exports=function(t){return n(t.length)}},1176:t=>{"use strict";var e=Math.ceil,r=Math.floor;t.exports=Math.trunc||function(t){var n=+t;return(n>0?r:e)(n)}},2292:(t,e,r)=>{"use strict";var n,s,i,o,a,c=r(5951),u=r(2098),l=r(8311),h=r(9472).set,p=r(9245),f=r(1829),d=r(8606),g=r(9291),v=r(7586),m=c.MutationObserver||c.WebKitMutationObserver,y=c.document,w=c.process,x=c.Promise,_=u("queueMicrotask");if(!_){var S=new p,b=function(){var t,e;for(v&&(t=w.domain)&&t.exit();e=S.get();)try{e()}catch(t){throw S.head&&n(),t}t&&t.enter()};f||v||g||!m||!y?!d&&x&&x.resolve?((o=x.resolve(void 0)).constructor=x,a=l(o.then,o),n=function(){a(b)}):v?n=function(){w.nextTick(b)}:(h=l(h,c),n=function(){h(b)}):(s=!0,i=y.createTextNode(""),new m(b).observe(i,{characterData:!0}),n=function(){i.data=s=!s}),_=function(t){S.head||n(),S.add(t)}}t.exports=_},6254:(t,e,r)=>{"use strict";var n=r(2159),s=TypeError,i=function(t){var e,r;this.promise=new t((function(t,n){if(void 0!==e||void 0!==r)throw new s("Bad Promise constructor");e=t,r=n})),this.resolve=n(e),this.reject=n(r)};t.exports.f=function(t){return new i(t)}},2096:(t,e,r)=>{"use strict";var n=r(160);t.exports=function(t,e){return void 0===t?arguments.length<2?"":e:n(t)}},2074:(t,e,r)=>{"use strict";var n=r(2087),s=TypeError;t.exports=function(t){if(n(t))throw new s("The method doesn't accept regular expressions");return t}},9538:(t,e,r)=>{"use strict";var n=r(9447),s=r(1907),i=r(3930),o=r(8828),a=r(2875),c=r(7170),u=r(2574),l=r(9298),h=r(6946),p=Object.assign,f=Object.defineProperty,d=s([].concat);t.exports=!p||o((function(){if(n&&1!==p({b:1},p(f({},"a",{enumerable:!0,get:function(){f(this,"b",{value:3,enumerable:!1})}}),{b:2})).b)return!0;var t={},e={},r=Symbol("assign detection"),s="abcdefghijklmnopqrst";return t[r]=7,s.split("").forEach((function(t){e[t]=t})),7!==p({},t)[r]||a(p({},e)).join("")!==s}))?function(t,e){for(var r=l(t),s=arguments.length,o=1,p=c.f,f=u.f;s>o;)for(var g,v=h(arguments[o++]),m=p?d(a(v),p(v)):a(v),y=m.length,w=0;y>w;)g=m[w++],n&&!i(f,v,g)||(r[g]=v[g]);return r}:p},8075:(t,e,r)=>{"use strict";var n,s=r(6624),i=r(2220),o=r(376),a=r(8530),c=r(2416),u=r(9552),l=r(2522),h="prototype",p="script",f=l("IE_PROTO"),d=function(){},g=function(t){return"<"+p+">"+t+""},v=function(t){t.write(g("")),t.close();var e=t.parentWindow.Object;return t=null,e},m=function(){try{n=new ActiveXObject("htmlfile")}catch(t){}var t,e,r;m="undefined"!=typeof document?document.domain&&n?v(n):(e=u("iframe"),r="java"+p+":",e.style.display="none",c.appendChild(e),e.src=String(r),(t=e.contentWindow.document).open(),t.write(g("document.F=Object")),t.close(),t.F):v(n);for(var s=o.length;s--;)delete m[h][o[s]];return m()};a[f]=!0,t.exports=Object.create||function(t,e){var r;return null!==t?(d[h]=s(t),r=new d,d[h]=null,r[f]=t):r=m(),void 0===e?r:i.f(r,e)}},2220:(t,e,r)=>{"use strict";var n=r(9447),s=r(8661),i=r(4284),o=r(6624),a=r(7374),c=r(2875);e.f=n&&!s?Object.defineProperties:function(t,e){o(t);for(var r,n=a(e),s=c(e),u=s.length,l=0;u>l;)i.f(t,r=s[l++],n[r]);return t}},4284:(t,e,r)=>{"use strict";var n=r(9447),s=r(3648),i=r(8661),o=r(6624),a=r(470),c=TypeError,u=Object.defineProperty,l=Object.getOwnPropertyDescriptor,h="enumerable",p="configurable",f="writable";e.f=n?i?function(t,e,r){if(o(t),e=a(e),o(r),"function"==typeof t&&"prototype"===e&&"value"in r&&f in r&&!r[f]){var n=l(t,e);n&&n[f]&&(t[e]=r.value,r={configurable:p in r?r[p]:n[p],enumerable:h in r?r[h]:n[h],writable:!1})}return u(t,e,r)}:u:function(t,e,r){if(o(t),e=a(e),o(r),s)try{return u(t,e,r)}catch(t){}if("get"in r||"set"in r)throw new c("Accessors not supported");return"value"in r&&(t[e]=r.value),t}},3846:(t,e,r)=>{"use strict";var n=r(9447),s=r(3930),i=r(2574),o=r(5817),a=r(7374),c=r(470),u=r(9724),l=r(3648),h=Object.getOwnPropertyDescriptor;e.f=n?h:function(t,e){if(t=a(t),e=c(e),l)try{return h(t,e)}catch(t){}if(u(t,e))return o(!s(i.f,t,e),t[e])}},5407:(t,e,r)=>{"use strict";var n=r(5807),s=r(7374),i=r(4443).f,o=r(3427),a="object"==typeof window&&window&&Object.getOwnPropertyNames?Object.getOwnPropertyNames(window):[];t.exports.f=function(t){return a&&"Window"===n(t)?function(t){try{return i(t)}catch(t){return o(a)}}(t):i(s(t))}},4443:(t,e,r)=>{"use strict";var n=r(3045),s=r(376).concat("length","prototype");e.f=Object.getOwnPropertyNames||function(t){return n(t,s)}},7170:(t,e)=>{"use strict";e.f=Object.getOwnPropertySymbols},5972:(t,e,r)=>{"use strict";var n=r(9724),s=r(2250),i=r(9298),o=r(2522),a=r(7382),c=o("IE_PROTO"),u=Object,l=u.prototype;t.exports=a?u.getPrototypeOf:function(t){var e=i(t);if(n(e,c))return e[c];var r=e.constructor;return s(r)&&e instanceof r?r.prototype:e instanceof u?l:null}},7005:(t,e,r)=>{"use strict";var n=r(8828),s=r(6285),i=r(5807),o=r(6375),a=Object.isExtensible,c=n((function(){a(1)}));t.exports=c||o?function(t){return!!s(t)&&((!o||"ArrayBuffer"!==i(t))&&(!a||a(t)))}:a},8280:(t,e,r)=>{"use strict";var n=r(1907);t.exports=n({}.isPrototypeOf)},3045:(t,e,r)=>{"use strict";var n=r(1907),s=r(9724),i=r(7374),o=r(4436).indexOf,a=r(8530),c=n([].push);t.exports=function(t,e){var r,n=i(t),u=0,l=[];for(r in n)!s(a,r)&&s(n,r)&&c(l,r);for(;e.length>u;)s(n,r=e[u++])&&(~o(l,r)||c(l,r));return l}},2875:(t,e,r)=>{"use strict";var n=r(3045),s=r(376);t.exports=Object.keys||function(t){return n(t,s)}},2574:(t,e)=>{"use strict";var r={}.propertyIsEnumerable,n=Object.getOwnPropertyDescriptor,s=n&&!r.call({1:2},1);e.f=s?function(t){var e=n(this,t);return!!e&&e.enumerable}:r},9192:(t,e,r)=>{"use strict";var n=r(1871),s=r(6285),i=r(4239),o=r(43);t.exports=Object.setPrototypeOf||("__proto__"in{}?function(){var t,e=!1,r={};try{(t=n(Object.prototype,"__proto__","set"))(r,[]),e=r instanceof Array}catch(t){}return function(r,n){return i(r),o(n),s(r)?(e?t(r,n):r.__proto__=n,r):r}}():void 0)},4878:(t,e,r)=>{"use strict";var n=r(2623),s=r(3948);t.exports=n?{}.toString:function(){return"[object "+s(this)+"]"}},581:(t,e,r)=>{"use strict";var n=r(3930),s=r(2250),i=r(6285),o=TypeError;t.exports=function(t,e){var r,a;if("string"===e&&s(r=t.toString)&&!i(a=n(r,t)))return a;if(s(r=t.valueOf)&&!i(a=n(r,t)))return a;if("string"!==e&&s(r=t.toString)&&!i(a=n(r,t)))return a;throw new o("Can't convert object to primitive value")}},1042:(t,e,r)=>{"use strict";var n=r(5582),s=r(1907),i=r(4443),o=r(7170),a=r(6624),c=s([].concat);t.exports=n("Reflect","ownKeys")||function(t){var e=i.f(a(t)),r=o.f;return r?c(e,r(t)):e}},2046:t=>{"use strict";t.exports={}},4420:t=>{"use strict";t.exports=function(t){try{return{error:!1,value:t()}}catch(t){return{error:!0,value:t}}}},1759:(t,e,r)=>{"use strict";var n=r(5951),s=r(5463),i=r(2250),o=r(7463),a=r(2647),c=r(6264),u=r(2832),l=r(7376),h=r(798),p=s&&s.prototype,f=c("species"),d=!1,g=i(n.PromiseRejectionEvent),v=o("Promise",(function(){var t=a(s),e=t!==String(s);if(!e&&66===h)return!0;if(l&&(!p.catch||!p.finally))return!0;if(!h||h<51||!/native code/.test(t)){var r=new s((function(t){t(1)})),n=function(t){t((function(){}),(function(){}))};if((r.constructor={})[f]=n,!(d=r.then((function(){}))instanceof n))return!0}return!(e||"BROWSER"!==u&&"DENO"!==u||g)}));t.exports={CONSTRUCTOR:v,REJECTION_EVENT:g,SUBCLASSING:d}},5463:(t,e,r)=>{"use strict";var n=r(5951);t.exports=n.Promise},3569:(t,e,r)=>{"use strict";var n=r(6624),s=r(6285),i=r(6254);t.exports=function(t,e){if(n(t),s(e)&&e.constructor===t)return e;var r=i.f(t);return(0,r.resolve)(e),r.promise}},3282:(t,e,r)=>{"use strict";var n=r(5463),s=r(473),i=r(1759).CONSTRUCTOR;t.exports=i||!s((function(t){n.all(t).then(void 0,(function(){}))}))},9245:t=>{"use strict";var e=function(){this.head=null,this.tail=null};e.prototype={add:function(t){var e={item:t,next:null},r=this.tail;r?r.next=e:this.head=e,this.tail=e},get:function(){var t=this.head;if(t)return null===(this.head=t.next)&&(this.tail=null),t.item}},t.exports=e},4239:(t,e,r)=>{"use strict";var n=r(7136),s=TypeError;t.exports=function(t){if(n(t))throw new s("Can't call method on "+t);return t}},2098:(t,e,r)=>{"use strict";var n=r(5951),s=r(9447),i=Object.getOwnPropertyDescriptor;t.exports=function(t){if(!s)return n[t];var e=i(n,t);return e&&e.value}},485:(t,e,r)=>{"use strict";var n,s=r(5951),i=r(6024),o=r(2250),a=r(2832),c=r(6794),u=r(3427),l=r(4787),h=s.Function,p=/MSIE .\./.test(c)||"BUN"===a&&((n=s.Bun.version.split(".")).length<3||"0"===n[0]&&(n[1]<3||"3"===n[1]&&"0"===n[2]));t.exports=function(t,e){var r=e?2:1;return p?function(n,s){var a=l(arguments.length,1)>r,c=o(n)?n:h(n),p=a?u(arguments,r):[],f=a?function(){i(c,this,p)}:c;return e?t(f,s):t(f)}:t}},6913:(t,e,r)=>{"use strict";var n=r(3881),s=r(1330),i=n.Set,o=n.add;t.exports=function(t){var e=new i;return s(t,(function(t){o(e,t)})),e}},5953:(t,e,r)=>{"use strict";var n=r(2911),s=r(3881),i=r(6913),o=r(5743),a=r(2332),c=r(1330),u=r(2190),l=s.has,h=s.remove;t.exports=function(t){var e=n(this),r=a(t),s=i(e);return o(e)<=r.size?c(e,(function(t){r.includes(t)&&h(s,t)})):u(r.getIterator(),(function(t){l(e,t)&&h(s,t)})),s}},3881:(t,e,r)=>{"use strict";var n=r(5582),s=r(2222),i=n("Set"),o=i.prototype;t.exports={Set:i,add:s("add",1),has:s("has",1),remove:s("delete",1),proto:o}},5331:(t,e,r)=>{"use strict";var n=r(2911),s=r(3881),i=r(5743),o=r(2332),a=r(1330),c=r(2190),u=s.Set,l=s.add,h=s.has;t.exports=function(t){var e=n(this),r=o(t),s=new u;return i(e)>r.size?c(r.getIterator(),(function(t){h(e,t)&&l(s,t)})):a(e,(function(t){r.includes(t)&&l(s,t)})),s}},1732:(t,e,r)=>{"use strict";var n=r(2911),s=r(3881).has,i=r(5743),o=r(2332),a=r(1330),c=r(2190),u=r(154);t.exports=function(t){var e=n(this),r=o(t);if(i(e)<=r.size)return!1!==a(e,(function(t){if(r.includes(t))return!1}),!0);var l=r.getIterator();return!1!==c(l,(function(t){if(s(e,t))return u(l,"normal",!1)}))}},7491:(t,e,r)=>{"use strict";var n=r(2911),s=r(5743),i=r(1330),o=r(2332);t.exports=function(t){var e=n(this),r=o(t);return!(s(e)>r.size)&&!1!==i(e,(function(t){if(!r.includes(t))return!1}),!0)}},4002:(t,e,r)=>{"use strict";var n=r(2911),s=r(3881).has,i=r(5743),o=r(2332),a=r(2190),c=r(154);t.exports=function(t){var e=n(this),r=o(t);if(i(e){"use strict";var n=r(2190);t.exports=function(t,e,r){return r?n(t.keys(),e,!0):t.forEach(e)}},3269:t=>{"use strict";t.exports=function(){return!1}},5743:t=>{"use strict";t.exports=function(t){return t.size}},7118:(t,e,r)=>{"use strict";var n=r(5582),s=r(9251),i=r(6264),o=r(9447),a=i("species");t.exports=function(t){var e=n(t);o&&e&&!e[a]&&s(e,a,{configurable:!0,get:function(){return this}})}},3763:(t,e,r)=>{"use strict";var n=r(2911),s=r(3881),i=r(6913),o=r(2332),a=r(2190),c=s.add,u=s.has,l=s.remove;t.exports=function(t){var e=n(this),r=o(t).getIterator(),s=i(e);return a(r,(function(t){u(e,t)?l(s,t):c(s,t)})),s}},4840:(t,e,r)=>{"use strict";var n=r(2623),s=r(4284).f,i=r(1626),o=r(9724),a=r(4878),c=r(6264)("toStringTag");t.exports=function(t,e,r,u){var l=r?t:t&&t.prototype;l&&(o(l,c)||s(l,c,{configurable:!0,value:e}),u&&!n&&i(l,"toString",a))}},1655:(t,e,r)=>{"use strict";var n=r(2911),s=r(3881).add,i=r(6913),o=r(2332),a=r(2190);t.exports=function(t){var e=n(this),r=o(t).getIterator(),c=i(e);return a(r,(function(t){s(c,t)})),c}},2522:(t,e,r)=>{"use strict";var n=r(5816),s=r(6499),i=n("keys");t.exports=function(t){return i[t]||(i[t]=s(t))}},6128:(t,e,r)=>{"use strict";var n=r(7376),s=r(5951),i=r(2532),o="__core-js_shared__",a=t.exports=s[o]||i(o,{});(a.versions||(a.versions=[])).push({version:"3.38.1",mode:n?"pure":"global",copyright:"© 2014-2024 Denis Pushkarev (zloirock.ru)",license:"https://github.com/zloirock/core-js/blob/v3.38.1/LICENSE",source:"https://github.com/zloirock/core-js"})},5816:(t,e,r)=>{"use strict";var n=r(6128);t.exports=function(t,e){return n[t]||(n[t]=e||{})}},8450:(t,e,r)=>{"use strict";var n=r(6624),s=r(2235),i=r(7136),o=r(6264)("species");t.exports=function(t,e){var r,a=n(t).constructor;return void 0===a||i(r=n(a)[o])?e:s(r)}},1470:(t,e,r)=>{"use strict";var n=r(1907),s=r(5482),i=r(160),o=r(4239),a=n("".charAt),c=n("".charCodeAt),u=n("".slice),l=function(t){return function(e,r){var n,l,h=i(o(e)),p=s(r),f=h.length;return p<0||p>=f?t?"":void 0:(n=c(h,p))<55296||n>56319||p+1===f||(l=c(h,p+1))<56320||l>57343?t?a(h,p):n:t?u(h,p,p+2):l-56320+(n-55296<<10)+65536}};t.exports={codeAt:l(!1),charAt:l(!0)}},1164:(t,e,r)=>{"use strict";var n=r(1907),s=r(3121),i=r(160),o=r(9314),a=r(4239),c=n(o),u=n("".slice),l=Math.ceil,h=function(t){return function(e,r,n){var o,h,p=i(a(e)),f=s(r),d=p.length,g=void 0===n?" ":i(n);return f<=d||""===g?p:((h=c(g,l((o=f-d)/g.length))).length>o&&(h=u(h,0,o)),t?p+h:h+p)}};t.exports={start:h(!1),end:h(!0)}},9156:(t,e,r)=>{"use strict";var n=r(1907),s=2147483647,i=/[^\0-\u007E]/,o=/[.\u3002\uFF0E\uFF61]/g,a="Overflow: input needs wider integers to process",c=RangeError,u=n(o.exec),l=Math.floor,h=String.fromCharCode,p=n("".charCodeAt),f=n([].join),d=n([].push),g=n("".replace),v=n("".split),m=n("".toLowerCase),y=function(t){return t+22+75*(t<26)},w=function(t,e,r){var n=0;for(t=r?l(t/700):t>>1,t+=l(t/e);t>455;)t=l(t/35),n+=36;return l(n+36*t/(t+38))},x=function(t){var e=[];t=function(t){for(var e=[],r=0,n=t.length;r=55296&&s<=56319&&r=o&&nl((s-u)/_))throw new c(a);for(u+=(x-o)*_,o=x,r=0;rs)throw new c(a);if(n===o){for(var S=u,b=36;;){var k=b<=g?1:b>=g+26?26:b-g;if(S{"use strict";var n=r(5482),s=r(160),i=r(4239),o=RangeError;t.exports=function(t){var e=s(i(this)),r="",a=n(t);if(a<0||a===1/0)throw new o("Wrong number of repetitions");for(;a>0;(a>>>=1)&&(e+=e))1&a&&(r+=e);return r}},5819:(t,e,r)=>{"use strict";var n=r(6833).PROPER,s=r(8828),i=r(6395);t.exports=function(t){return s((function(){return!!i[t]()||"​…᠎"!=="​…᠎"[t]()||n&&i[t].name!==t}))}},5993:(t,e,r)=>{"use strict";var n=r(1907),s=r(4239),i=r(160),o=r(6395),a=n("".replace),c=RegExp("^["+o+"]+"),u=RegExp("(^|[^"+o+"])["+o+"]+$"),l=function(t){return function(e){var r=i(s(e));return 1&t&&(r=a(r,c,"")),2&t&&(r=a(r,u,"$1")),r}};t.exports={start:l(1),end:l(2),trim:l(3)}},9846:(t,e,r)=>{"use strict";var n=r(798),s=r(8828),i=r(5951).String;t.exports=!!Object.getOwnPropertySymbols&&!s((function(){var t=Symbol("symbol detection");return!i(t)||!(Object(t)instanceof Symbol)||!Symbol.sham&&n&&n<41}))},3467:(t,e,r)=>{"use strict";var n=r(3930),s=r(5582),i=r(6264),o=r(8055);t.exports=function(){var t=s("Symbol"),e=t&&t.prototype,r=e&&e.valueOf,a=i("toPrimitive");e&&!e[a]&&o(e,a,(function(t){return n(r,this)}),{arity:1})}},2595:(t,e,r)=>{"use strict";var n=r(5582),s=r(1907),i=n("Symbol"),o=i.keyFor,a=s(i.prototype.valueOf);t.exports=i.isRegisteredSymbol||function(t){try{return void 0!==o(a(t))}catch(t){return!1}}},9197:(t,e,r)=>{"use strict";for(var n=r(5816),s=r(5582),i=r(1907),o=r(5594),a=r(6264),c=s("Symbol"),u=c.isWellKnownSymbol,l=s("Object","getOwnPropertyNames"),h=i(c.prototype.valueOf),p=n("wks"),f=0,d=l(c),g=d.length;f{"use strict";var n=r(9846);t.exports=n&&!!Symbol.for&&!!Symbol.keyFor},9472:(t,e,r)=>{"use strict";var n,s,i,o,a=r(5951),c=r(6024),u=r(8311),l=r(2250),h=r(9724),p=r(8828),f=r(2416),d=r(3427),g=r(9552),v=r(4787),m=r(1829),y=r(7586),w=a.setImmediate,x=a.clearImmediate,_=a.process,S=a.Dispatch,b=a.Function,k=a.MessageChannel,T=a.String,P=0,C={},A="onreadystatechange";p((function(){n=a.location}));var O=function(t){if(h(C,t)){var e=C[t];delete C[t],e()}},j=function(t){return function(){O(t)}},E=function(t){O(t.data)},R=function(t){a.postMessage(T(t),n.protocol+"//"+n.host)};w&&x||(w=function(t){v(arguments.length,1);var e=l(t)?t:b(t),r=d(arguments,1);return C[++P]=function(){c(e,void 0,r)},s(P),P},x=function(t){delete C[t]},y?s=function(t){_.nextTick(j(t))}:S&&S.now?s=function(t){S.now(j(t))}:k&&!m?(o=(i=new k).port2,i.port1.onmessage=E,s=u(o.postMessage,o)):a.addEventListener&&l(a.postMessage)&&!a.importScripts&&n&&"file:"!==n.protocol&&!p(R)?(s=R,a.addEventListener("message",E,!1)):s=A in g("script")?function(t){f.appendChild(g("script"))[A]=function(){f.removeChild(this),O(t)}}:function(t){setTimeout(j(t),0)}),t.exports={set:w,clear:x}},4849:(t,e,r)=>{"use strict";var n=r(5482),s=Math.max,i=Math.min;t.exports=function(t,e){var r=n(t);return r<0?s(r+e,0):i(r,e)}},7374:(t,e,r)=>{"use strict";var n=r(6946),s=r(4239);t.exports=function(t){return n(s(t))}},5482:(t,e,r)=>{"use strict";var n=r(1176);t.exports=function(t){var e=+t;return e!=e||0===e?0:n(e)}},3121:(t,e,r)=>{"use strict";var n=r(5482),s=Math.min;t.exports=function(t){var e=n(t);return e>0?s(e,9007199254740991):0}},9298:(t,e,r)=>{"use strict";var n=r(4239),s=Object;t.exports=function(t){return s(n(t))}},6028:(t,e,r)=>{"use strict";var n=r(3930),s=r(6285),i=r(5594),o=r(9367),a=r(581),c=r(6264),u=TypeError,l=c("toPrimitive");t.exports=function(t,e){if(!s(t)||i(t))return t;var r,c=o(t,l);if(c){if(void 0===e&&(e="default"),r=n(c,t,e),!s(r)||i(r))return r;throw new u("Can't convert object to primitive value")}return void 0===e&&(e="number"),a(t,e)}},470:(t,e,r)=>{"use strict";var n=r(6028),s=r(5594);t.exports=function(t){var e=n(t,"string");return s(e)?e:e+""}},2623:(t,e,r)=>{"use strict";var n={};n[r(6264)("toStringTag")]="z",t.exports="[object z]"===String(n)},160:(t,e,r)=>{"use strict";var n=r(3948),s=String;t.exports=function(t){if("Symbol"===n(t))throw new TypeError("Cannot convert a Symbol value to a string");return s(t)}},4640:t=>{"use strict";var e=String;t.exports=function(t){try{return e(t)}catch(t){return"Object"}}},6499:(t,e,r)=>{"use strict";var n=r(1907),s=0,i=Math.random(),o=n(1..toString);t.exports=function(t){return"Symbol("+(void 0===t?"":t)+")_"+o(++s+i,36)}},4791:(t,e,r)=>{"use strict";var n=r(8828),s=r(6264),i=r(9447),o=r(7376),a=s("iterator");t.exports=!n((function(){var t=new URL("b?a=1&b=2&c=3","https://a"),e=t.searchParams,r=new URLSearchParams("a=1&a=2&b=3"),n="";return t.pathname="c%20d",e.forEach((function(t,r){e.delete("b"),n+=r+t})),r.delete("a",2),r.delete("b",void 0),o&&(!t.toJSON||!r.has("a",1)||r.has("a",2)||!r.has("a",void 0)||r.has("b"))||!e.size&&(o||!i)||!e.sort||"https://a/c%20d?a=1&c=3"!==t.href||"3"!==e.get("c")||"a=1"!==String(new URLSearchParams("?a=1"))||!e[a]||"a"!==new URL("https://a@b").username||"b"!==new URLSearchParams(new URLSearchParams("a=b")).get("a")||"xn--e1aybc"!==new URL("https://тест").host||"#%D0%B1"!==new URL("https://a#б").hash||"a1c3"!==n||"x"!==new URL("https://x",void 0).host}))},1175:(t,e,r)=>{"use strict";var n=r(9846);t.exports=n&&!Symbol.sham&&"symbol"==typeof Symbol.iterator},8661:(t,e,r)=>{"use strict";var n=r(9447),s=r(8828);t.exports=n&&s((function(){return 42!==Object.defineProperty((function(){}),"prototype",{value:42,writable:!1}).prototype}))},4787:t=>{"use strict";var e=TypeError;t.exports=function(t,r){if(t{"use strict";var n=r(5951),s=r(2250),i=n.WeakMap;t.exports=s(i)&&/native code/.test(String(i))},366:(t,e,r)=>{"use strict";var n=r(2046),s=r(9724),i=r(560),o=r(4284).f;t.exports=function(t){var e=n.Symbol||(n.Symbol={});s(e,t)||o(e,t,{value:i.f(t)})}},560:(t,e,r)=>{"use strict";var n=r(6264);e.f=n},6264:(t,e,r)=>{"use strict";var n=r(5951),s=r(5816),i=r(9724),o=r(6499),a=r(9846),c=r(1175),u=n.Symbol,l=s("wks"),h=c?u.for||u:u&&u.withoutSetter||o;t.exports=function(t){return i(l,t)||(l[t]=a&&i(u,t)?u[t]:h("Symbol."+t)),l[t]}},6395:t=>{"use strict";t.exports="\t\n\v\f\r                 \u2028\u2029\ufeff"},2048:(t,e,r)=>{"use strict";var n=r(1091),s=r(8280),i=r(5972),o=r(9192),a=r(9595),c=r(8075),u=r(1626),l=r(5817),h=r(9259),p=r(5884),f=r(4823),d=r(2096),g=r(6264)("toStringTag"),v=Error,m=[].push,y=function(t,e){var r,n=s(w,this);o?r=o(new v,n?i(this):w):(r=n?this:c(w),u(r,g,"Error")),void 0!==e&&u(r,"message",d(e)),p(r,y,r.stack,1),arguments.length>2&&h(r,arguments[2]);var a=[];return f(t,m,{that:a}),u(r,"errors",a),r};o?o(y,v):a(y,v,{name:!0});var w=y.prototype=c(v.prototype,{constructor:l(1,y),message:l(1,""),name:l(1,"AggregateError")});n({global:!0,constructor:!0,arity:2},{AggregateError:y})},4502:(t,e,r)=>{"use strict";r(2048)},8545:(t,e,r)=>{"use strict";var n=r(1091),s=r(8828),i=r(1793),o=r(6285),a=r(9298),c=r(575),u=r(8024),l=r(5543),h=r(6968),p=r(7171),f=r(6264),d=r(798),g=f("isConcatSpreadable"),v=d>=51||!s((function(){var t=[];return t[g]=!1,t.concat()[0]!==t})),m=function(t){if(!o(t))return!1;var e=t[g];return void 0!==e?!!e:i(t)};n({target:"Array",proto:!0,arity:1,forced:!v||!p("concat")},{concat:function(t){var e,r,n,s,i,o=a(this),p=h(o,0),f=0;for(e=-1,n=arguments.length;e{"use strict";var n=r(1091),s=r(726).filter;n({target:"Array",proto:!0,forced:!r(7171)("filter")},{filter:function(t){return s(this,t,arguments.length>1?arguments[1]:void 0)}})},5650:(t,e,r)=>{"use strict";var n=r(1091),s=r(2914);n({target:"Array",proto:!0,forced:[].forEach!==s},{forEach:s})},9748:(t,e,r)=>{"use strict";var n=r(1091),s=r(4436).includes,i=r(8828),o=r(2156);n({target:"Array",proto:!0,forced:i((function(){return!Array(1).includes()}))},{includes:function(t){return s(this,t,arguments.length>1?arguments[1]:void 0)}}),o("includes")},2425:(t,e,r)=>{"use strict";r(1091)({target:"Array",stat:!0},{isArray:r(1793)})},9363:(t,e,r)=>{"use strict";var n=r(7374),s=r(2156),i=r(3742),o=r(4932),a=r(4284).f,c=r(183),u=r(9550),l=r(7376),h=r(9447),p="Array Iterator",f=o.set,d=o.getterFor(p);t.exports=c(Array,"Array",(function(t,e){f(this,{type:p,target:n(t),index:0,kind:e})}),(function(){var t=d(this),e=t.target,r=t.index++;if(!e||r>=e.length)return t.target=null,u(void 0,!0);switch(t.kind){case"keys":return u(r,!1);case"values":return u(e[r],!1)}return u([r,e[r]],!1)}),"values");var g=i.Arguments=i.Array;if(s("keys"),s("values"),s("entries"),!l&&h&&"values"!==g.name)try{a(g,"name",{value:"values"})}catch(t){}},521:(t,e,r)=>{"use strict";var n=r(1091),s=r(726).some;n({target:"Array",proto:!0,forced:!r(7623)("some")},{some:function(t){return s(this,t,arguments.length>1?arguments[1]:void 0)}})},6737:(t,e,r)=>{"use strict";var n=r(1091),s=r(1907),i=r(2159),o=r(9298),a=r(575),c=r(4535),u=r(160),l=r(8828),h=r(4321),p=r(7623),f=r(3440),d=r(4328),g=r(798),v=r(3786),m=[],y=s(m.sort),w=s(m.push),x=l((function(){m.sort(void 0)})),_=l((function(){m.sort(null)})),S=p("sort"),b=!l((function(){if(g)return g<70;if(!(f&&f>3)){if(d)return!0;if(v)return v<603;var t,e,r,n,s="";for(t=65;t<76;t++){switch(e=String.fromCharCode(t),t){case 66:case 69:case 70:case 72:r=3;break;case 68:case 71:r=4;break;default:r=2}for(n=0;n<47;n++)m.push({k:e+n,v:r})}for(m.sort((function(t,e){return e.v-t.v})),n=0;nu(r)?1:-1}}(t)),r=a(s),n=0;n{"use strict";var n=r(1091),s=r(1907),i=Date,o=s(i.prototype.getTime);n({target:"Date",stat:!0},{now:function(){return o(new i)}})},6648:(t,e,r)=>{"use strict";var n=r(1091),s=r(3930),i=r(9298),o=r(6028),a=r(3701),c=r(5807);n({target:"Date",proto:!0,forced:r(8828)((function(){return null!==new Date(NaN).toJSON()||1!==s(Date.prototype.toJSON,{toISOString:function(){return 1}})}))},{toJSON:function(t){var e=i(this),r=o(e,"number");return"number"!=typeof r||isFinite(r)?"toISOString"in e||"Date"!==c(e)?e.toISOString():s(a,e):null}})},8537:()=>{},9721:(t,e,r)=>{"use strict";var n=r(1091),s=r(5582),i=r(6024),o=r(3930),a=r(1907),c=r(8828),u=r(2250),l=r(5594),h=r(3427),p=r(6656),f=r(9846),d=String,g=s("JSON","stringify"),v=a(/./.exec),m=a("".charAt),y=a("".charCodeAt),w=a("".replace),x=a(1..toString),_=/[\uD800-\uDFFF]/g,S=/^[\uD800-\uDBFF]$/,b=/^[\uDC00-\uDFFF]$/,k=!f||c((function(){var t=s("Symbol")("stringify detection");return"[null]"!==g([t])||"{}"!==g({a:t})||"{}"!==g(Object(t))})),T=c((function(){return'"\\udf06\\ud834"'!==g("\udf06\ud834")||'"\\udead"'!==g("\udead")})),P=function(t,e){var r=h(arguments),n=p(e);if(u(n)||void 0!==t&&!l(t))return r[1]=function(t,e){if(u(n)&&(e=o(n,this,d(t),e)),!l(e))return e},i(g,null,r)},C=function(t,e,r){var n=m(r,e-1),s=m(r,e+1);return v(S,t)&&!v(b,s)||v(b,t)&&!v(S,n)?"\\u"+x(y(t,0),16):t};g&&n({target:"JSON",stat:!0,arity:3,forced:k||T},{stringify:function(t,e,r){var n=h(arguments),s=i(k?P:g,null,n);return T&&"string"==typeof s?w(s,_,C):s}})},7024:(t,e,r)=>{"use strict";var n=r(5951);r(4840)(n.JSON,"JSON",!0)},8172:()=>{},1340:(t,e,r)=>{"use strict";var n=r(1091),s=r(9538);n({target:"Object",stat:!0,arity:2,forced:Object.assign!==s},{assign:s})},7810:(t,e,r)=>{"use strict";var n=r(1091),s=r(9447),i=r(2220).f;n({target:"Object",stat:!0,forced:Object.defineProperties!==i,sham:!s},{defineProperties:i})},6750:(t,e,r)=>{"use strict";var n=r(1091),s=r(9447),i=r(4284).f;n({target:"Object",stat:!0,forced:Object.defineProperty!==i,sham:!s},{defineProperty:i})},7052:(t,e,r)=>{"use strict";var n=r(1091),s=r(8828),i=r(7374),o=r(3846).f,a=r(9447);n({target:"Object",stat:!0,forced:!a||s((function(){o(1)})),sham:!a},{getOwnPropertyDescriptor:function(t,e){return o(i(t),e)}})},179:(t,e,r)=>{"use strict";var n=r(1091),s=r(9447),i=r(1042),o=r(7374),a=r(3846),c=r(5543);n({target:"Object",stat:!0,sham:!s},{getOwnPropertyDescriptors:function(t){for(var e,r,n=o(t),s=a.f,u=i(n),l={},h=0;u.length>h;)void 0!==(r=s(n,e=u[h++]))&&c(l,e,r);return l}})},5264:(t,e,r)=>{"use strict";var n=r(1091),s=r(9846),i=r(8828),o=r(7170),a=r(9298);n({target:"Object",stat:!0,forced:!s||i((function(){o.f(1)}))},{getOwnPropertySymbols:function(t){var e=o.f;return e?e(a(t)):[]}})},3589:(t,e,r)=>{"use strict";var n=r(1091),s=r(9298),i=r(2875);n({target:"Object",stat:!0,forced:r(8828)((function(){i(1)}))},{keys:function(t){return i(s(t))}})},3643:()=>{},7450:(t,e,r)=>{"use strict";var n=r(1091),s=r(3930),i=r(2159),o=r(6254),a=r(4420),c=r(4823);n({target:"Promise",stat:!0,forced:r(3282)},{allSettled:function(t){var e=this,r=o.f(e),n=r.resolve,u=r.reject,l=a((function(){var r=i(e.resolve),o=[],a=0,u=1;c(t,(function(t){var i=a++,c=!1;u++,s(r,e,t).then((function(t){c||(c=!0,o[i]={status:"fulfilled",value:t},--u||n(o))}),(function(t){c||(c=!0,o[i]={status:"rejected",reason:t},--u||n(o))}))})),--u||n(o)}));return l.error&&u(l.value),r.promise}})},6630:(t,e,r)=>{"use strict";var n=r(1091),s=r(3930),i=r(2159),o=r(6254),a=r(4420),c=r(4823);n({target:"Promise",stat:!0,forced:r(3282)},{all:function(t){var e=this,r=o.f(e),n=r.resolve,u=r.reject,l=a((function(){var r=i(e.resolve),o=[],a=0,l=1;c(t,(function(t){var i=a++,c=!1;l++,s(r,e,t).then((function(t){c||(c=!0,o[i]=t,--l||n(o))}),u)})),--l||n(o)}));return l.error&&u(l.value),r.promise}})},6415:(t,e,r)=>{"use strict";var n=r(1091),s=r(3930),i=r(2159),o=r(5582),a=r(6254),c=r(4420),u=r(4823),l=r(3282),h="No one promise resolved";n({target:"Promise",stat:!0,forced:l},{any:function(t){var e=this,r=o("AggregateError"),n=a.f(e),l=n.resolve,p=n.reject,f=c((function(){var n=i(e.resolve),o=[],a=0,c=1,f=!1;u(t,(function(t){var i=a++,u=!1;c++,s(n,e,t).then((function(t){u||f||(f=!0,l(t))}),(function(t){u||f||(u=!0,o[i]=t,--c||p(new r(o,h)))}))})),--c||p(new r(o,h))}));return f.error&&p(f.value),n.promise}})},1866:(t,e,r)=>{"use strict";var n=r(1091),s=r(7376),i=r(1759).CONSTRUCTOR,o=r(5463),a=r(5582),c=r(2250),u=r(8055),l=o&&o.prototype;if(n({target:"Promise",proto:!0,forced:i,real:!0},{catch:function(t){return this.then(void 0,t)}}),!s&&c(o)){var h=a("Promise").prototype.catch;l.catch!==h&&u(l,"catch",h,{unsafe:!0})}},3825:(t,e,r)=>{"use strict";var n,s,i,o=r(1091),a=r(7376),c=r(7586),u=r(5951),l=r(3930),h=r(8055),p=r(9192),f=r(4840),d=r(7118),g=r(2159),v=r(2250),m=r(6285),y=r(9596),w=r(8450),x=r(9472).set,_=r(2292),S=r(3904),b=r(4420),k=r(9245),T=r(4932),P=r(5463),C=r(1759),A=r(6254),O="Promise",j=C.CONSTRUCTOR,E=C.REJECTION_EVENT,R=C.SUBCLASSING,U=T.getterFor(O),I=T.set,L=P&&P.prototype,D=P,M=L,F=u.TypeError,N=u.document,B=u.process,q=A.f,z=q,W=!!(N&&N.createEvent&&u.dispatchEvent),V="unhandledrejection",H=function(t){var e;return!(!m(t)||!v(e=t.then))&&e},K=function(t,e){var r,n,s,i=e.value,o=1===e.state,a=o?t.ok:t.fail,c=t.resolve,u=t.reject,h=t.domain;try{a?(o||(2===e.rejection&&Q(e),e.rejection=1),!0===a?r=i:(h&&h.enter(),r=a(i),h&&(h.exit(),s=!0)),r===t.promise?u(new F("Promise-chain cycle")):(n=H(r))?l(n,r,c,u):c(r)):u(i)}catch(t){h&&!s&&h.exit(),u(t)}},G=function(t,e){t.notified||(t.notified=!0,_((function(){for(var r,n=t.reactions;r=n.get();)K(r,t);t.notified=!1,e&&!t.rejection&&$(t)})))},J=function(t,e,r){var n,s;W?((n=N.createEvent("Event")).promise=e,n.reason=r,n.initEvent(t,!1,!0),u.dispatchEvent(n)):n={promise:e,reason:r},!E&&(s=u["on"+t])?s(n):t===V&&S("Unhandled promise rejection",r)},$=function(t){l(x,u,(function(){var e,r=t.facade,n=t.value;if(X(t)&&(e=b((function(){c?B.emit("unhandledRejection",n,r):J(V,r,n)})),t.rejection=c||X(t)?2:1,e.error))throw e.value}))},X=function(t){return 1!==t.rejection&&!t.parent},Q=function(t){l(x,u,(function(){var e=t.facade;c?B.emit("rejectionHandled",e):J("rejectionhandled",e,t.value)}))},Y=function(t,e,r){return function(n){t(e,n,r)}},Z=function(t,e,r){t.done||(t.done=!0,r&&(t=r),t.value=e,t.state=2,G(t,!0))},tt=function(t,e,r){if(!t.done){t.done=!0,r&&(t=r);try{if(t.facade===e)throw new F("Promise can't be resolved itself");var n=H(e);n?_((function(){var r={done:!1};try{l(n,e,Y(tt,r,t),Y(Z,r,t))}catch(e){Z(r,e,t)}})):(t.value=e,t.state=1,G(t,!1))}catch(e){Z({done:!1},e,t)}}};if(j&&(M=(D=function(t){y(this,M),g(t),l(n,this);var e=U(this);try{t(Y(tt,e),Y(Z,e))}catch(t){Z(e,t)}}).prototype,(n=function(t){I(this,{type:O,done:!1,notified:!1,parent:!1,reactions:new k,rejection:!1,state:0,value:null})}).prototype=h(M,"then",(function(t,e){var r=U(this),n=q(w(this,D));return r.parent=!0,n.ok=!v(t)||t,n.fail=v(e)&&e,n.domain=c?B.domain:void 0,0===r.state?r.reactions.add(n):_((function(){K(n,r)})),n.promise})),s=function(){var t=new n,e=U(t);this.promise=t,this.resolve=Y(tt,e),this.reject=Y(Z,e)},A.f=q=function(t){return t===D||undefined===t?new s(t):z(t)},!a&&v(P)&&L!==Object.prototype)){i=L.then,R||h(L,"then",(function(t,e){var r=this;return new D((function(t,e){l(i,r,t,e)})).then(t,e)}),{unsafe:!0});try{delete L.constructor}catch(t){}p&&p(L,M)}o({global:!0,constructor:!0,wrap:!0,forced:j},{Promise:D}),f(D,O,!1,!0),d(O)},7714:(t,e,r)=>{"use strict";var n=r(1091),s=r(7376),i=r(5463),o=r(8828),a=r(5582),c=r(2250),u=r(8450),l=r(3569),h=r(8055),p=i&&i.prototype;if(n({target:"Promise",proto:!0,real:!0,forced:!!i&&o((function(){p.finally.call({then:function(){}},(function(){}))}))},{finally:function(t){var e=u(this,a("Promise")),r=c(t);return this.then(r?function(r){return l(e,t()).then((function(){return r}))}:t,r?function(r){return l(e,t()).then((function(){throw r}))}:t)}}),!s&&c(i)){var f=a("Promise").prototype.finally;p.finally!==f&&h(p,"finally",f,{unsafe:!0})}},5931:(t,e,r)=>{"use strict";r(3825),r(6630),r(1866),r(2736),r(7286),r(6761)},2736:(t,e,r)=>{"use strict";var n=r(1091),s=r(3930),i=r(2159),o=r(6254),a=r(4420),c=r(4823);n({target:"Promise",stat:!0,forced:r(3282)},{race:function(t){var e=this,r=o.f(e),n=r.reject,u=a((function(){var o=i(e.resolve);c(t,(function(t){s(o,e,t).then(r.resolve,n)}))}));return u.error&&n(u.value),r.promise}})},7286:(t,e,r)=>{"use strict";var n=r(1091),s=r(6254);n({target:"Promise",stat:!0,forced:r(1759).CONSTRUCTOR},{reject:function(t){var e=s.f(this);return(0,e.reject)(t),e.promise}})},6761:(t,e,r)=>{"use strict";var n=r(1091),s=r(5582),i=r(7376),o=r(5463),a=r(1759).CONSTRUCTOR,c=r(3569),u=s("Promise"),l=i&&!a;n({target:"Promise",stat:!0,forced:i||a},{resolve:function(t){return c(l&&this===u?o:this,t)}})},5823:(t,e,r)=>{"use strict";var n=r(1091),s=r(6254);n({target:"Promise",stat:!0},{withResolvers:function(){var t=s.f(this);return{promise:t.promise,resolve:t.resolve,reject:t.reject}}})},5205:()=>{},16:(t,e,r)=>{"use strict";r(7081)("Set",(function(t){return function(){return t(this,arguments.length?arguments[0]:void 0)}}),r(217))},6951:(t,e,r)=>{"use strict";var n=r(1091),s=r(5953);n({target:"Set",proto:!0,real:!0,forced:!r(3269)("difference")},{difference:s})},5905:(t,e,r)=>{"use strict";var n=r(1091),s=r(8828),i=r(5331);n({target:"Set",proto:!0,real:!0,forced:!r(3269)("intersection")||s((function(){return"3,2"!==String(Array.from(new Set([1,2,3]).intersection(new Set([3,2]))))}))},{intersection:i})},1852:(t,e,r)=>{"use strict";var n=r(1091),s=r(1732);n({target:"Set",proto:!0,real:!0,forced:!r(3269)("isDisjointFrom")},{isDisjointFrom:s})},7809:(t,e,r)=>{"use strict";var n=r(1091),s=r(7491);n({target:"Set",proto:!0,real:!0,forced:!r(3269)("isSubsetOf")},{isSubsetOf:s})},106:(t,e,r)=>{"use strict";var n=r(1091),s=r(4002);n({target:"Set",proto:!0,real:!0,forced:!r(3269)("isSupersetOf")},{isSupersetOf:s})},1542:(t,e,r)=>{"use strict";r(16)},2657:(t,e,r)=>{"use strict";var n=r(1091),s=r(3763);n({target:"Set",proto:!0,real:!0,forced:!r(3269)("symmetricDifference")},{symmetricDifference:s})},3709:(t,e,r)=>{"use strict";var n=r(1091),s=r(1655);n({target:"Set",proto:!0,real:!0,forced:!r(3269)("union")},{union:s})},1074:(t,e,r)=>{"use strict";var n=r(1091),s=r(1907),i=r(4849),o=RangeError,a=String.fromCharCode,c=String.fromCodePoint,u=s([].join);n({target:"String",stat:!0,arity:1,forced:!!c&&1!==c.length},{fromCodePoint:function(t){for(var e,r=[],n=arguments.length,s=0;n>s;){if(e=+arguments[s++],i(e,1114111)!==e)throw new o(e+" is not a valid code point");r[s]=e<65536?a(e):a(55296+((e-=65536)>>10),e%1024+56320)}return u(r,"")}})},9770:(t,e,r)=>{"use strict";var n=r(1091),s=r(1907),i=r(2074),o=r(4239),a=r(160),c=r(5735),u=s("".indexOf);n({target:"String",proto:!0,forced:!c("includes")},{includes:function(t){return!!~u(a(o(this)),a(i(t)),arguments.length>1?arguments[1]:void 0)}})},7057:(t,e,r)=>{"use strict";var n=r(1470).charAt,s=r(160),i=r(4932),o=r(183),a=r(9550),c="String Iterator",u=i.set,l=i.getterFor(c);o(String,"String",(function(t){u(this,{type:c,string:s(t),index:0})}),(function(){var t,e=l(this),r=e.string,s=e.index;return s>=r.length?a(void 0,!0):(t=n(r,s),e.index+=t.length,a(t,!1))}))},727:(t,e,r)=>{"use strict";var n=r(1091),s=r(5993);n({target:"String",proto:!0,forced:r(5819)("trim")},{trim:function(){return s(this)}})},3997:(t,e,r)=>{"use strict";r(366)("asyncIterator")},3674:(t,e,r)=>{"use strict";var n=r(1091),s=r(5951),i=r(3930),o=r(1907),a=r(7376),c=r(9447),u=r(9846),l=r(8828),h=r(9724),p=r(8280),f=r(6624),d=r(7374),g=r(470),v=r(160),m=r(5817),y=r(8075),w=r(2875),x=r(4443),_=r(5407),S=r(7170),b=r(3846),k=r(4284),T=r(2220),P=r(2574),C=r(8055),A=r(9251),O=r(5816),j=r(2522),E=r(8530),R=r(6499),U=r(6264),I=r(560),L=r(366),D=r(3467),M=r(4840),F=r(4932),N=r(726).forEach,B=j("hidden"),q="Symbol",z="prototype",W=F.set,V=F.getterFor(q),H=Object[z],K=s.Symbol,G=K&&K[z],J=s.RangeError,$=s.TypeError,X=s.QObject,Q=b.f,Y=k.f,Z=_.f,tt=P.f,et=o([].push),rt=O("symbols"),nt=O("op-symbols"),st=O("wks"),it=!X||!X[z]||!X[z].findChild,ot=function(t,e,r){var n=Q(H,e);n&&delete H[e],Y(t,e,r),n&&t!==H&&Y(H,e,n)},at=c&&l((function(){return 7!==y(Y({},"a",{get:function(){return Y(this,"a",{value:7}).a}})).a}))?ot:Y,ct=function(t,e){var r=rt[t]=y(G);return W(r,{type:q,tag:t,description:e}),c||(r.description=e),r},ut=function(t,e,r){t===H&&ut(nt,e,r),f(t);var n=g(e);return f(r),h(rt,n)?(r.enumerable?(h(t,B)&&t[B][n]&&(t[B][n]=!1),r=y(r,{enumerable:m(0,!1)})):(h(t,B)||Y(t,B,m(1,y(null))),t[B][n]=!0),at(t,n,r)):Y(t,n,r)},lt=function(t,e){f(t);var r=d(e),n=w(r).concat(dt(r));return N(n,(function(e){c&&!i(ht,r,e)||ut(t,e,r[e])})),t},ht=function(t){var e=g(t),r=i(tt,this,e);return!(this===H&&h(rt,e)&&!h(nt,e))&&(!(r||!h(this,e)||!h(rt,e)||h(this,B)&&this[B][e])||r)},pt=function(t,e){var r=d(t),n=g(e);if(r!==H||!h(rt,n)||h(nt,n)){var s=Q(r,n);return!s||!h(rt,n)||h(r,B)&&r[B][n]||(s.enumerable=!0),s}},ft=function(t){var e=Z(d(t)),r=[];return N(e,(function(t){h(rt,t)||h(E,t)||et(r,t)})),r},dt=function(t){var e=t===H,r=Z(e?nt:d(t)),n=[];return N(r,(function(t){!h(rt,t)||e&&!h(H,t)||et(n,rt[t])})),n};u||(C(G=(K=function(){if(p(G,this))throw new $("Symbol is not a constructor");var t=arguments.length&&void 0!==arguments[0]?v(arguments[0]):void 0,e=R(t),r=function(t){var n=void 0===this?s:this;n===H&&i(r,nt,t),h(n,B)&&h(n[B],e)&&(n[B][e]=!1);var o=m(1,t);try{at(n,e,o)}catch(t){if(!(t instanceof J))throw t;ot(n,e,o)}};return c&&it&&at(H,e,{configurable:!0,set:r}),ct(e,t)})[z],"toString",(function(){return V(this).tag})),C(K,"withoutSetter",(function(t){return ct(R(t),t)})),P.f=ht,k.f=ut,T.f=lt,b.f=pt,x.f=_.f=ft,S.f=dt,I.f=function(t){return ct(U(t),t)},c&&(A(G,"description",{configurable:!0,get:function(){return V(this).description}}),a||C(H,"propertyIsEnumerable",ht,{unsafe:!0}))),n({global:!0,constructor:!0,wrap:!0,forced:!u,sham:!u},{Symbol:K}),N(w(st),(function(t){L(t)})),n({target:q,stat:!0,forced:!u},{useSetter:function(){it=!0},useSimple:function(){it=!1}}),n({target:"Object",stat:!0,forced:!u,sham:!c},{create:function(t,e){return void 0===e?y(t):lt(y(t),e)},defineProperty:ut,defineProperties:lt,getOwnPropertyDescriptor:pt}),n({target:"Object",stat:!0,forced:!u},{getOwnPropertyNames:ft}),D(),M(K,q),E[B]=!0},5084:()=>{},3313:(t,e,r)=>{"use strict";var n=r(1091),s=r(5582),i=r(9724),o=r(160),a=r(5816),c=r(4411),u=a("string-to-symbol-registry"),l=a("symbol-to-string-registry");n({target:"Symbol",stat:!0,forced:!c},{for:function(t){var e=o(t);if(i(u,e))return u[e];var r=s("Symbol")(e);return u[e]=r,l[r]=e,r}})},2596:(t,e,r)=>{"use strict";r(366)("hasInstance")},5721:(t,e,r)=>{"use strict";r(366)("isConcatSpreadable")},4954:(t,e,r)=>{"use strict";r(366)("iterator")},4452:(t,e,r)=>{"use strict";r(3674),r(3313),r(751),r(9721),r(5264)},751:(t,e,r)=>{"use strict";var n=r(1091),s=r(9724),i=r(5594),o=r(4640),a=r(5816),c=r(4411),u=a("symbol-to-string-registry");n({target:"Symbol",stat:!0,forced:!c},{keyFor:function(t){if(!i(t))throw new TypeError(o(t)+" is not a symbol");if(s(u,t))return u[t]}})},3377:(t,e,r)=>{"use strict";r(366)("matchAll")},4123:(t,e,r)=>{"use strict";r(366)("match")},2230:(t,e,r)=>{"use strict";r(366)("replace")},5344:(t,e,r)=>{"use strict";r(366)("search")},1660:(t,e,r)=>{"use strict";r(366)("species")},4610:(t,e,r)=>{"use strict";r(366)("split")},3669:(t,e,r)=>{"use strict";var n=r(366),s=r(3467);n("toPrimitive"),s()},4810:(t,e,r)=>{"use strict";var n=r(5582),s=r(366),i=r(4840);s("toStringTag"),i(n("Symbol"),"Symbol")},3325:(t,e,r)=>{"use strict";r(366)("unscopables")},768:(t,e,r)=>{"use strict";var n=r(6264),s=r(4284).f,i=n("metadata"),o=Function.prototype;void 0===o[i]&&s(o,i,{value:null})},8549:(t,e,r)=>{"use strict";r(366)("asyncDispose")},1697:(t,e,r)=>{"use strict";r(366)("customMatcher")},7152:(t,e,r)=>{"use strict";r(366)("dispose")},3939:(t,e,r)=>{"use strict";r(1091)({target:"Symbol",stat:!0},{isRegisteredSymbol:r(2595)})},3422:(t,e,r)=>{"use strict";r(1091)({target:"Symbol",stat:!0,name:"isRegisteredSymbol"},{isRegistered:r(2595)})},1785:(t,e,r)=>{"use strict";r(1091)({target:"Symbol",stat:!0,forced:!0},{isWellKnownSymbol:r(9197)})},36:(t,e,r)=>{"use strict";r(1091)({target:"Symbol",stat:!0,name:"isWellKnownSymbol",forced:!0},{isWellKnown:r(9197)})},8703:(t,e,r)=>{"use strict";r(366)("matcher")},6878:(t,e,r)=>{"use strict";r(366)("metadataKey")},1372:(t,e,r)=>{"use strict";r(366)("metadata")},4664:(t,e,r)=>{"use strict";r(366)("observable")},9671:(t,e,r)=>{"use strict";r(366)("patternMatch")},359:(t,e,r)=>{"use strict";r(366)("replaceAll")},3871:(t,e,r)=>{"use strict";var n=r(1091),s=r(5951),i=r(9472).clear;n({global:!0,bind:!0,enumerable:!0,forced:s.clearImmediate!==i},{clearImmediate:i})},237:()=>{},2560:(t,e,r)=>{"use strict";r(9363);var n=r(9287),s=r(5951),i=r(4840),o=r(3742);for(var a in n)i(s[a],a),o[a]=o.Array},4351:(t,e,r)=>{"use strict";r(3871),r(2910)},2910:(t,e,r)=>{"use strict";var n=r(1091),s=r(5951),i=r(9472).set,o=r(485),a=s.setImmediate?o(i,!1):i;n({global:!0,bind:!0,enumerable:!0,forced:s.setImmediate!==a},{setImmediate:a})},1978:(t,e,r)=>{"use strict";var n=r(1091),s=r(5951),i=r(485)(s.setInterval,!0);n({global:!0,bind:!0,forced:s.setInterval!==i},{setInterval:i})},6496:(t,e,r)=>{"use strict";var n=r(1091),s=r(5951),i=r(485)(s.setTimeout,!0);n({global:!0,bind:!0,forced:s.setTimeout!==i},{setTimeout:i})},3342:(t,e,r)=>{"use strict";r(1978),r(6496)},7105:(t,e,r)=>{"use strict";r(9363),r(1074);var n=r(1091),s=r(5951),i=r(2098),o=r(5582),a=r(3930),c=r(1907),u=r(9447),l=r(4791),h=r(8055),p=r(9251),f=r(2802),d=r(4840),g=r(7181),v=r(4932),m=r(9596),y=r(2250),w=r(9724),x=r(8311),_=r(3948),S=r(6624),b=r(6285),k=r(160),T=r(8075),P=r(5817),C=r(300),A=r(3448),O=r(9550),j=r(4787),E=r(6264),R=r(4321),U=E("iterator"),I="URLSearchParams",L=I+"Iterator",D=v.set,M=v.getterFor(I),F=v.getterFor(L),N=i("fetch"),B=i("Request"),q=i("Headers"),z=B&&B.prototype,W=q&&q.prototype,V=s.TypeError,H=s.encodeURIComponent,K=String.fromCharCode,G=o("String","fromCodePoint"),J=parseInt,$=c("".charAt),X=c([].join),Q=c([].push),Y=c("".replace),Z=c([].shift),tt=c([].splice),et=c("".split),rt=c("".slice),nt=c(/./.exec),st=/\+/g,it=/^[0-9a-f]+$/i,ot=function(t,e){var r=rt(t,e,e+2);return nt(it,r)?J(r,16):NaN},at=function(t){for(var e=0,r=128;r>0&&t&r;r>>=1)e++;return e},ct=function(t){var e=null;switch(t.length){case 1:e=t[0];break;case 2:e=(31&t[0])<<6|63&t[1];break;case 3:e=(15&t[0])<<12|(63&t[1])<<6|63&t[2];break;case 4:e=(7&t[0])<<18|(63&t[1])<<12|(63&t[2])<<6|63&t[3]}return e>1114111?null:e},ut=function(t){for(var e=(t=Y(t,st," ")).length,r="",n=0;ne){r+="%",n++;continue}var i=ot(t,n+1);if(i!=i){r+=s,n++;continue}n+=2;var o=at(i);if(0===o)s=K(i);else{if(1===o||o>4){r+="�",n++;continue}for(var a=[i],c=1;ce||"%"!==$(t,n));){var u=ot(t,n+1);if(u!=u){n+=3;break}if(u>191||u<128)break;Q(a,u),n+=2,c++}if(a.length!==o){r+="�";continue}var l=ct(a);null===l?r+="�":s=G(l)}}r+=s,n++}return r},lt=/[!'()~]|%20/g,ht={"!":"%21","'":"%27","(":"%28",")":"%29","~":"%7E","%20":"+"},pt=function(t){return ht[t]},ft=function(t){return Y(H(t),lt,pt)},dt=g((function(t,e){D(this,{type:L,target:M(t).entries,index:0,kind:e})}),I,(function(){var t=F(this),e=t.target,r=t.index++;if(!e||r>=e.length)return t.target=null,O(void 0,!0);var n=e[r];switch(t.kind){case"keys":return O(n.key,!1);case"values":return O(n.value,!1)}return O([n.key,n.value],!1)}),!0),gt=function(t){this.entries=[],this.url=null,void 0!==t&&(b(t)?this.parseObject(t):this.parseQuery("string"==typeof t?"?"===$(t,0)?rt(t,1):t:k(t)))};gt.prototype={type:I,bindURL:function(t){this.url=t,this.update()},parseObject:function(t){var e,r,n,s,i,o,c,u=this.entries,l=A(t);if(l)for(r=(e=C(t,l)).next;!(n=a(r,e)).done;){if(i=(s=C(S(n.value))).next,(o=a(i,s)).done||(c=a(i,s)).done||!a(i,s).done)throw new V("Expected sequence with length 2");Q(u,{key:k(o.value),value:k(c.value)})}else for(var h in t)w(t,h)&&Q(u,{key:h,value:k(t[h])})},parseQuery:function(t){if(t)for(var e,r,n=this.entries,s=et(t,"&"),i=0;i0?arguments[0]:void 0));u||(this.size=t.entries.length)},mt=vt.prototype;if(f(mt,{append:function(t,e){var r=M(this);j(arguments.length,2),Q(r.entries,{key:k(t),value:k(e)}),u||this.length++,r.updateURL()},delete:function(t){for(var e=M(this),r=j(arguments.length,1),n=e.entries,s=k(t),i=r<2?void 0:arguments[1],o=void 0===i?i:k(i),a=0;ae.key?1:-1})),t.updateURL()},forEach:function(t){for(var e,r=M(this).entries,n=x(t,arguments.length>1?arguments[1]:void 0),s=0;s1?xt(arguments[1]):{})}}),y(B)){var _t=function(t){return m(this,z),new B(t,arguments.length>1?xt(arguments[1]):{})};z.constructor=_t,_t.prototype=z,n({global:!0,constructor:!0,dontCallGetSet:!0,forced:!0},{Request:_t})}}t.exports={URLSearchParams:vt,getState:M}},5042:()=>{},7649:()=>{},6299:(t,e,r)=>{"use strict";r(7105)},3604:()=>{},8669:(t,e,r)=>{"use strict";var n=r(1091),s=r(5582),i=r(8828),o=r(4787),a=r(160),c=r(4791),u=s("URL"),l=c&&i((function(){u.canParse()})),h=i((function(){return 1!==u.canParse.length}));n({target:"URL",stat:!0,forced:!l||h},{canParse:function(t){var e=o(arguments.length,1),r=a(t),n=e<2||void 0===arguments[1]?void 0:a(arguments[1]);try{return!!new u(r,n)}catch(t){return!1}}})},6909:(t,e,r)=>{"use strict";r(7057);var n,s=r(1091),i=r(9447),o=r(4791),a=r(5951),c=r(8311),u=r(1907),l=r(8055),h=r(9251),p=r(9596),f=r(9724),d=r(9538),g=r(1229),v=r(3427),m=r(1470).codeAt,y=r(9156),w=r(160),x=r(4840),_=r(4787),S=r(7105),b=r(4932),k=b.set,T=b.getterFor("URL"),P=S.URLSearchParams,C=S.getState,A=a.URL,O=a.TypeError,j=a.parseInt,E=Math.floor,R=Math.pow,U=u("".charAt),I=u(/./.exec),L=u([].join),D=u(1..toString),M=u([].pop),F=u([].push),N=u("".replace),B=u([].shift),q=u("".split),z=u("".slice),W=u("".toLowerCase),V=u([].unshift),H="Invalid scheme",K="Invalid host",G="Invalid port",J=/[a-z]/i,$=/[\d+-.a-z]/i,X=/\d/,Q=/^0x/i,Y=/^[0-7]+$/,Z=/^\d+$/,tt=/^[\da-f]+$/i,et=/[\0\t\n\r #%/:<>?@[\\\]^|]/,rt=/[\0\t\n\r #/:<>?@[\\\]^|]/,nt=/^[\u0000-\u0020]+/,st=/(^|[^\u0000-\u0020])[\u0000-\u0020]+$/,it=/[\t\n\r]/g,ot=function(t){var e,r,n,s;if("number"==typeof t){for(e=[],r=0;r<4;r++)V(e,t%256),t=E(t/256);return L(e,".")}if("object"==typeof t){for(e="",n=function(t){for(var e=null,r=1,n=null,s=0,i=0;i<8;i++)0!==t[i]?(s>r&&(e=n,r=s),n=null,s=0):(null===n&&(n=i),++s);return s>r?n:e}(t),r=0;r<8;r++)s&&0===t[r]||(s&&(s=!1),n===r?(e+=r?":":"::",s=!0):(e+=D(t[r],16),r<7&&(e+=":")));return"["+e+"]"}return t},at={},ct=d({},at,{" ":1,'"':1,"<":1,">":1,"`":1}),ut=d({},ct,{"#":1,"?":1,"{":1,"}":1}),lt=d({},ut,{"/":1,":":1,";":1,"=":1,"@":1,"[":1,"\\":1,"]":1,"^":1,"|":1}),ht=function(t,e){var r=m(t,0);return r>32&&r<127&&!f(e,t)?t:encodeURIComponent(t)},pt={ftp:21,file:null,http:80,https:443,ws:80,wss:443},ft=function(t,e){var r;return 2===t.length&&I(J,U(t,0))&&(":"===(r=U(t,1))||!e&&"|"===r)},dt=function(t){var e;return t.length>1&&ft(z(t,0,2))&&(2===t.length||"/"===(e=U(t,2))||"\\"===e||"?"===e||"#"===e)},gt=function(t){return"."===t||"%2e"===W(t)},vt={},mt={},yt={},wt={},xt={},_t={},St={},bt={},kt={},Tt={},Pt={},Ct={},At={},Ot={},jt={},Et={},Rt={},Ut={},It={},Lt={},Dt={},Mt=function(t,e,r){var n,s,i,o=w(t);if(e){if(s=this.parse(o))throw new O(s);this.searchParams=null}else{if(void 0!==r&&(n=new Mt(r,!0)),s=this.parse(o,null,n))throw new O(s);(i=C(new P)).bindURL(this),this.searchParams=i}};Mt.prototype={type:"URL",parse:function(t,e,r){var s,i,o,a,c,u=this,l=e||vt,h=0,p="",d=!1,m=!1,y=!1;for(t=w(t),e||(u.scheme="",u.username="",u.password="",u.host=null,u.port=null,u.path=[],u.query=null,u.fragment=null,u.cannotBeABaseURL=!1,t=N(t,nt,""),t=N(t,st,"$1")),t=N(t,it,""),s=g(t);h<=s.length;){switch(i=s[h],l){case vt:if(!i||!I(J,i)){if(e)return H;l=yt;continue}p+=W(i),l=mt;break;case mt:if(i&&(I($,i)||"+"===i||"-"===i||"."===i))p+=W(i);else{if(":"!==i){if(e)return H;p="",l=yt,h=0;continue}if(e&&(u.isSpecial()!==f(pt,p)||"file"===p&&(u.includesCredentials()||null!==u.port)||"file"===u.scheme&&!u.host))return;if(u.scheme=p,e)return void(u.isSpecial()&&pt[u.scheme]===u.port&&(u.port=null));p="","file"===u.scheme?l=Ot:u.isSpecial()&&r&&r.scheme===u.scheme?l=wt:u.isSpecial()?l=bt:"/"===s[h+1]?(l=xt,h++):(u.cannotBeABaseURL=!0,F(u.path,""),l=It)}break;case yt:if(!r||r.cannotBeABaseURL&&"#"!==i)return H;if(r.cannotBeABaseURL&&"#"===i){u.scheme=r.scheme,u.path=v(r.path),u.query=r.query,u.fragment="",u.cannotBeABaseURL=!0,l=Dt;break}l="file"===r.scheme?Ot:_t;continue;case wt:if("/"!==i||"/"!==s[h+1]){l=_t;continue}l=kt,h++;break;case xt:if("/"===i){l=Tt;break}l=Ut;continue;case _t:if(u.scheme=r.scheme,i===n)u.username=r.username,u.password=r.password,u.host=r.host,u.port=r.port,u.path=v(r.path),u.query=r.query;else if("/"===i||"\\"===i&&u.isSpecial())l=St;else if("?"===i)u.username=r.username,u.password=r.password,u.host=r.host,u.port=r.port,u.path=v(r.path),u.query="",l=Lt;else{if("#"!==i){u.username=r.username,u.password=r.password,u.host=r.host,u.port=r.port,u.path=v(r.path),u.path.length--,l=Ut;continue}u.username=r.username,u.password=r.password,u.host=r.host,u.port=r.port,u.path=v(r.path),u.query=r.query,u.fragment="",l=Dt}break;case St:if(!u.isSpecial()||"/"!==i&&"\\"!==i){if("/"!==i){u.username=r.username,u.password=r.password,u.host=r.host,u.port=r.port,l=Ut;continue}l=Tt}else l=kt;break;case bt:if(l=kt,"/"!==i||"/"!==U(p,h+1))continue;h++;break;case kt:if("/"!==i&&"\\"!==i){l=Tt;continue}break;case Tt:if("@"===i){d&&(p="%40"+p),d=!0,o=g(p);for(var x=0;x65535)return G;u.port=u.isSpecial()&&b===pt[u.scheme]?null:b,p=""}if(e)return;l=Rt;continue}return G}p+=i;break;case Ot:if(u.scheme="file","/"===i||"\\"===i)l=jt;else{if(!r||"file"!==r.scheme){l=Ut;continue}switch(i){case n:u.host=r.host,u.path=v(r.path),u.query=r.query;break;case"?":u.host=r.host,u.path=v(r.path),u.query="",l=Lt;break;case"#":u.host=r.host,u.path=v(r.path),u.query=r.query,u.fragment="",l=Dt;break;default:dt(L(v(s,h),""))||(u.host=r.host,u.path=v(r.path),u.shortenPath()),l=Ut;continue}}break;case jt:if("/"===i||"\\"===i){l=Et;break}r&&"file"===r.scheme&&!dt(L(v(s,h),""))&&(ft(r.path[0],!0)?F(u.path,r.path[0]):u.host=r.host),l=Ut;continue;case Et:if(i===n||"/"===i||"\\"===i||"?"===i||"#"===i){if(!e&&ft(p))l=Ut;else if(""===p){if(u.host="",e)return;l=Rt}else{if(a=u.parseHost(p))return a;if("localhost"===u.host&&(u.host=""),e)return;p="",l=Rt}continue}p+=i;break;case Rt:if(u.isSpecial()){if(l=Ut,"/"!==i&&"\\"!==i)continue}else if(e||"?"!==i)if(e||"#"!==i){if(i!==n&&(l=Ut,"/"!==i))continue}else u.fragment="",l=Dt;else u.query="",l=Lt;break;case Ut:if(i===n||"/"===i||"\\"===i&&u.isSpecial()||!e&&("?"===i||"#"===i)){if(".."===(c=W(c=p))||"%2e."===c||".%2e"===c||"%2e%2e"===c?(u.shortenPath(),"/"===i||"\\"===i&&u.isSpecial()||F(u.path,"")):gt(p)?"/"===i||"\\"===i&&u.isSpecial()||F(u.path,""):("file"===u.scheme&&!u.path.length&&ft(p)&&(u.host&&(u.host=""),p=U(p,0)+":"),F(u.path,p)),p="","file"===u.scheme&&(i===n||"?"===i||"#"===i))for(;u.path.length>1&&""===u.path[0];)B(u.path);"?"===i?(u.query="",l=Lt):"#"===i&&(u.fragment="",l=Dt)}else p+=ht(i,ut);break;case It:"?"===i?(u.query="",l=Lt):"#"===i?(u.fragment="",l=Dt):i!==n&&(u.path[0]+=ht(i,at));break;case Lt:e||"#"!==i?i!==n&&("'"===i&&u.isSpecial()?u.query+="%27":u.query+="#"===i?"%23":ht(i,at)):(u.fragment="",l=Dt);break;case Dt:i!==n&&(u.fragment+=ht(i,ct))}h++}},parseHost:function(t){var e,r,n;if("["===U(t,0)){if("]"!==U(t,t.length-1))return K;if(e=function(t){var e,r,n,s,i,o,a,c=[0,0,0,0,0,0,0,0],u=0,l=null,h=0,p=function(){return U(t,h)};if(":"===p()){if(":"!==U(t,1))return;h+=2,l=++u}for(;p();){if(8===u)return;if(":"!==p()){for(e=r=0;r<4&&I(tt,p());)e=16*e+j(p(),16),h++,r++;if("."===p()){if(0===r)return;if(h-=r,u>6)return;for(n=0;p();){if(s=null,n>0){if(!("."===p()&&n<4))return;h++}if(!I(X,p()))return;for(;I(X,p());){if(i=j(p(),10),null===s)s=i;else{if(0===s)return;s=10*s+i}if(s>255)return;h++}c[u]=256*c[u]+s,2!=++n&&4!==n||u++}if(4!==n)return;break}if(":"===p()){if(h++,!p())return}else if(p())return;c[u++]=e}else{if(null!==l)return;h++,l=++u}}if(null!==l)for(o=u-l,u=7;0!==u&&o>0;)a=c[u],c[u--]=c[l+o-1],c[l+--o]=a;else if(8!==u)return;return c}(z(t,1,-1)),!e)return K;this.host=e}else if(this.isSpecial()){if(t=y(t),I(et,t))return K;if(e=function(t){var e,r,n,s,i,o,a,c=q(t,".");if(c.length&&""===c[c.length-1]&&c.length--,(e=c.length)>4)return t;for(r=[],n=0;n1&&"0"===U(s,0)&&(i=I(Q,s)?16:8,s=z(s,8===i?1:2)),""===s)o=0;else{if(!I(10===i?Z:8===i?Y:tt,s))return t;o=j(s,i)}F(r,o)}for(n=0;n=R(256,5-e))return null}else if(o>255)return null;for(a=M(r),n=0;n1?arguments[1]:void 0,n=k(e,new Mt(t,!1,r));i||(e.href=n.serialize(),e.origin=n.getOrigin(),e.protocol=n.getProtocol(),e.username=n.getUsername(),e.password=n.getPassword(),e.host=n.getHost(),e.hostname=n.getHostname(),e.port=n.getPort(),e.pathname=n.getPathname(),e.search=n.getSearch(),e.searchParams=n.getSearchParams(),e.hash=n.getHash())},Nt=Ft.prototype,Bt=function(t,e){return{get:function(){return T(this)[t]()},set:e&&function(t){return T(this)[e](t)},configurable:!0,enumerable:!0}};if(i&&(h(Nt,"href",Bt("serialize","setHref")),h(Nt,"origin",Bt("getOrigin")),h(Nt,"protocol",Bt("getProtocol","setProtocol")),h(Nt,"username",Bt("getUsername","setUsername")),h(Nt,"password",Bt("getPassword","setPassword")),h(Nt,"host",Bt("getHost","setHost")),h(Nt,"hostname",Bt("getHostname","setHostname")),h(Nt,"port",Bt("getPort","setPort")),h(Nt,"pathname",Bt("getPathname","setPathname")),h(Nt,"search",Bt("getSearch","setSearch")),h(Nt,"searchParams",Bt("getSearchParams")),h(Nt,"hash",Bt("getHash","setHash"))),l(Nt,"toJSON",(function(){return T(this).serialize()}),{enumerable:!0}),l(Nt,"toString",(function(){return T(this).serialize()}),{enumerable:!0}),A){var qt=A.createObjectURL,zt=A.revokeObjectURL;qt&&l(Ft,"createObjectURL",c(qt,A)),zt&&l(Ft,"revokeObjectURL",c(zt,A))}x(Ft,"URL"),s({global:!0,constructor:!0,forced:!o,sham:!i},{URL:Ft})},3487:(t,e,r)=>{"use strict";r(6909)},8670:(t,e,r)=>{"use strict";var n=r(1091),s=r(5582),i=r(4787),o=r(160),a=r(4791),c=s("URL");n({target:"URL",stat:!0,forced:!a},{parse:function(t){var e=i(arguments.length,1),r=o(t),n=e<2||void 0===arguments[1]?void 0:o(arguments[1]);try{return new c(r,n)}catch(t){return null}}})},4783:()=>{},8402:(t,e,r)=>{"use strict";var n=r(3531);t.exports=n},1969:(t,e,r)=>{"use strict";var n=r(2092);t.exports=n},1374:(t,e,r)=>{"use strict";var n=r(6535);t.exports=n},7867:(t,e,r)=>{"use strict";var n=r(5354);t.exports=n},2616:(t,e,r)=>{"use strict";var n=r(3155);t.exports=n},4525:(t,e,r)=>{"use strict";var n=r(3948),s=r(9724),i=r(8280),o=r(1969);r(237);var a=Array.prototype,c={DOMTokenList:!0,NodeList:!0};t.exports=function(t){var e=t.forEach;return t===a||i(a,t)&&e===a.forEach||s(c,n(t))?o:e}},6343:(t,e,r)=>{"use strict";var n=r(6880);t.exports=n},1618:(t,e,r)=>{"use strict";r(2560);var n=r(3948),s=r(9724),i=r(8280),o=r(1374),a=Array.prototype,c={DOMTokenList:!0,NodeList:!0};t.exports=function(t){var e=t.keys;return t===a||i(a,t)&&e===a.keys||s(c,n(t))?o:e}},2990:(t,e,r)=>{"use strict";var n=r(9685);t.exports=n},1086:(t,e,r)=>{"use strict";var n=r(2757);t.exports=n},4598:(t,e,r)=>{"use strict";var n=r(3423);t.exports=n},6660:(t,e,r)=>{"use strict";var n=r(317);t.exports=n},975:(t,e,r)=>{"use strict";var n=r(7367);t.exports=n},9703:(t,e,r)=>{"use strict";var n=r(8970);t.exports=n},8251:(t,e,r)=>{"use strict";var n=r(1926);t.exports=n},6513:(t,e,r)=>{"use strict";var n=r(5092);t.exports=n},3220:(t,e,r)=>{"use strict";var n=r(9147);t.exports=n},9563:(t,e,r)=>{"use strict";var n=r(4776);t.exports=n},6490:(t,e,r)=>{"use strict";var n=r(9661);t.exports=n},5204:(t,e,r)=>{"use strict";var n=r(7027);r(2560),t.exports=n},9270:(t,e,r)=>{"use strict";r(4351);var n=r(2046);t.exports=n.setImmediate},568:(t,e,r)=>{"use strict";r(3342);var n=r(2046);t.exports=n.setTimeout},9157:(t,e,r)=>{"use strict";var n=r(9378);r(2560),t.exports=n},4139:(t,e,r)=>{"use strict";var n=r(3842);r(2560),t.exports=n},7045:(t,e,r)=>{"use strict";var n=r(1730);r(2560),t.exports=n},70:(t,e,r)=>{"use strict";var n=r(1661);t.exports=n},8348:(t,e,r)=>{"use strict";var n=r(9076);r(2560),t.exports=n},9792:(t,e,r)=>{"use strict";var n=r(6908);t.exports=n},9076:(t,e,r)=>{"use strict";r(6299),r(5042),r(7649),r(3604);var n=r(2046);t.exports=n.URLSearchParams},6908:(t,e,r)=>{"use strict";r(9076),r(3487),r(8669),r(8670),r(4783);var n=r(2046);t.exports=n.URL}},h={};function p(t){var e=h[t];if(void 0!==e)return e.exports;var r=h[t]={exports:{}};return l[t].call(r.exports,r,r.exports,p),r.exports}p.n=t=>{var e=t&&t.__esModule?()=>t.default:()=>t;return p.d(e,{a:e}),e},p.d=(t,e)=>{for(var r in e)p.o(e,r)&&!p.o(t,r)&&Object.defineProperty(t,r,{enumerable:!0,get:e[r]})},p.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),p.r=t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})};var f={};return(()=>{"use strict";p.r(f),p.d(f,{default:()=>ne});var t=p(533),e=p.n(t),r=p(8628),n=p.n(r),s=p(5569),i=p.n(s),o=p(697),a=p.n(o),c=p(6100),u=p.n(c),l=p(6319),h=p.n(l),d=p(8928),g=p.n(d),v=p(6226),m=p.n(v),y=p(6751),w=p.n(y),x=p(5110),_=p.n(x),S=p(1549),b=p.n(S);const k=require("electron");var T=p(9440),P=p.n(T),C=p(1662),A=p.n(C),O=p(6763),j=p.n(O),E=p(9544),R=p.n(E),U=p(1721),I=p.n(U);const L=require("node:path");var D=p.n(L);function M(t,e){var r=a()(t);if(u()){var n=u()(t);e&&(n=h()(n).call(n,(function(e){return g()(t,e).enumerable}))),r.push.apply(r,n)}return r}function F(t){for(var r=1;r{const r="window-state",n=`window-state-v2-${t}`,s=new(A())({name:n}),i={width:e.width,height:e.height};let o={};o=(t=>{var e;const r=I()(e=k.screen.getAllDisplays()).call(e,(e=>((t,e)=>t.x>=e.x&&t.y>=e.y&&t.x+t.width<=e.x+e.width&&t.y+t.height<=e.y+e.height)(t,e.bounds)));return r?t:(()=>{const t=k.screen.getPrimaryDisplay().bounds;return R()({},i,{x:(t.width-i.width)/2,y:(t.height-i.height)/2})})()})(s.get(r,i));const a=F(F(F({},e),o),{},{webPreferences:F({nodeIntegration:!1,contextIsolation:!0,enableBlinkFeatures:"",sandbox:!1,preload:D().join(__dirname,"preload.js")},e.webPreferences),autoHideMenuBar:!0}),c=new k.BrowserWindow(a);return c.on("close",(()=>{c.isMinimized()||c.isMaximized()||R()(o,(()=>{c.removeMenu();const t=c.getPosition(),e=c.getSize();return{x:t[0],y:t[1],width:e[0],height:e[1]}})()),s.set(r,o)})),c};var B=p(1240),q=p.n(B),z=p(6255),W=p.n(z),V=p(129),H=p.n(V);const K=require("https");var G=p.n(K),J=p(5876);const $={locale:"en",resolution:720,xhome_bitrate_mode:"Auto",xhome_bitrate:20,xcloud_bitrate_mode:"Auto",xcloud_bitrate:20,preferred_game_language:"en-US",force_region_ip:"",codec:"",vibration:!0,vibration_mode:"Native",gamepad_kernal:"Native",dead_zone:.1,video_format:"",virtual_gamepad_opacity:.6,gamepad_maping:null,native_gamepad_maping:null,ipv6:!1,input_mousekeyboard_maping:{ArrowLeft:"DPadLeft",ArrowUp:"DPadUp",ArrowRight:"DPadRight",ArrowDown:"DPadDown",Enter:"A",a:"A",Backspace:"B",b:"B",x:"X",y:"Y","[":"LeftShoulder","]":"RightShoulder","-":"LeftTrigger","=":"RightTrigger",v:"View",m:"Menu",n:"Nexus"},display_options:{sharpness:5,saturation:100,contrast:100,brightness:100},debug:!1};class X{constructor(t,r,n,s="home"){e()(this,"_application",void 0),e()(this,"_host",void 0),e()(this,"_token",void 0),e()(this,"_type",void 0),e()(this,"_sessionPath",void 0),e()(this,"_exchangeCounter",0),e()(this,"_exchangeUrl",""),e()(this,"_currentGame",""),this._application=t,this._host=r,this._token=n,this._type=s}get(t,e="GET"){return new(q())(((r,n)=>{let s="";const i=G().request({host:this._host,path:t,method:e,headers:{"Content-Type":"application/json",Authorization:"Bearer "+this._token}},(i=>{i.on("data",(t=>{s+=t})),i.on("end",(()=>{if(i.statusCode>=200&&i.statusCode<=299){this._application.log("xCloudApi","host:"+this._host+" get("+t+", "+e+") resolve:",i.statusCode);let o=s;try{o=JSON.parse(s)}catch(t){}204===i.statusCode?W()((()=>{this.get(t,e).then((t=>{r(t)})).catch((t=>{n(t)}))}),750):r(o)}else this._application.log("xCloudApi","get("+t+") reject:",i.statusCode),n({url:t,status:i.statusCode,body:s})}))}));i.on("error",(t=>{n(t)})),i.end()}))}post(t,e={},r={}){return new(q())(((n,s)=>{let o="";const a=R()({},{"Content-Type":"application/json",Authorization:"Bearer "+this._token},r),c=G().request({host:this._host,path:t,method:"POST",headers:a},(e=>{e.on("data",(t=>{o+=t})),e.on("end",(()=>{if(e.statusCode>=200&&e.statusCode<=299){this._application.log("xCloudApi","post("+t+") resolve:",e.statusCode,o);let r=o;try{r=JSON.parse(o)}catch(t){}n(r)}else this._application.log("xCloudApi","post("+t+") reject:",e.statusCode),s({url:t,status:e.statusCode,body:o})}))}));c.on("error",(t=>{s(t)})),c.write(i()(e)),c.end()}))}getWaitingTimes(t){return this.get("/v1/waittime/"+t)}getTitles(){return this.get("/v2/titles")}getRecentTitles(){return this.get("/v2/titles/mru?mr=25")}stopStream(t){return this.get("/v5/sessions/"+this._type+"/"+t,"DELETE")}startStream(t){const e=this._application._store.get("settings",$),r=i()({appInfo:{env:{clientAppId:"www.xbox.com",clientAppType:"browser",clientAppVersion:"21.1.98",clientSdkVersion:"8.5.3",httpEnvironment:"prod",sdkInstallId:""}},dev:{hw:{make:"Microsoft",model:"Surface Pro",sdktype:"web"},os:{name:1080==e.resolution?"windows":"android",ver:"22631.2715",platform:"desktop"},displayInfo:{dimensions:{widthInPixels:1920,heightInPixels:1080},pixelDensity:{dpiX:2,dpiY:2}}}}),n={titleId:"cloud"===this._type?t:"",systemUpdateGroup:"",clientSessionId:"",settings:{nanoVersion:"V3;WebrtcTransport.dll",enableTextToSpeech:!1,highContrast:0,locale:e.preferred_game_language?e.preferred_game_language:"en-US",useIceConnection:!1,timezoneOffsetMinutes:120,sdkType:"web",osName:1080==e.resolution?"windows":"android"},serverId:"home"===this._type?t:"",fallbackRegionNames:[]};return this.post("/v5/sessions/"+this._type+"/play",n,{"X-MS-Device-Info":r})}getStreamState(t){return this.get("/v5/sessions/"+this._type+"/"+t+"/state")}sendSdp(t,e){return new(q())(((r,n)=>{const s={messageType:"offer",sdp:e,configuration:{chatConfiguration:{bytesPerSample:2,expectedClipDurationMs:20,format:{codec:"opus",container:"webm"},numChannels:1,sampleFrequencyHz:24e3},chat:{minVersion:1,maxVersion:1},control:{minVersion:1,maxVersion:3},input:{minVersion:1,maxVersion:8},message:{minVersion:1,maxVersion:1}}};this.post("/v5/sessions/"+this._type+"/"+t+"/sdp",s).then((()=>{this.get("/v5/sessions/"+this._type+"/"+t+"/sdp").then((t=>{const e=JSON.parse(t.exchangeResponse);r(e)})).catch((t=>{n(t)}))})).catch((t=>{n(t)}))}))}sendChatSdp(t,e){return new(q())(((r,n)=>{const s={messageType:"offer",sdp:e,configuration:{isMediaStreamsChatRenegotiation:!0}};this.post("/v5/sessions/"+this._type+"/"+t+"/sdp",s).then((()=>{this.get("/v5/sessions/"+this._type+"/"+t+"/sdp").then((t=>{const e=JSON.parse(t.exchangeResponse);r(e)})).catch((t=>{n(t)}))})).catch((t=>{n(t)}))}))}checkIce(t){const e=this._application._store.get("settings",$);return new(q())(((r,s)=>{this.get("/v5/sessions/"+this._type+"/"+t+"/ice").then((i=>{if(""===i)W()((()=>{this.checkIce(t).then((t=>{r(t)})).catch((t=>{s(t)}))}),1e3);else{const t=i,s=JSON.parse(t.exchangeResponse),o=[];for(const t in s){const e=s[t].candidate.split(" ");if(e.length>4&&"2001"===e[4].substr(0,4)){const t=new J.Address6(e[4]).inspectTeredo();o.push({candidate:"a=candidate:10 1 UDP 1 "+t.client4+" 9002 typ host ",messageType:"iceCandidate",sdpMLineIndex:"0",sdpMid:"0"}),o.push({candidate:"a=candidate:11 1 UDP 1 "+t.client4+" "+t.udpPort+" typ host ",messageType:"iceCandidate",sdpMLineIndex:"0",sdpMid:"0"})}o.push(s[t])}const a=new RegExp(/a=candidate:(?\d+) (?\d+) UDP (?\d+) (?[^\s]+) (?\d+) (?.*)/),c=[];for(let t of o){if("a=end-of-candidates"===t.candidate)continue;const e=a.exec(t.candidate).groups;c.push(e)}e.ipv6&&H()(c).call(c,((t,e)=>{const r=t.ip,s=e.ip;return!n()(r).call(r,":")&&n()(s).call(s,":")?1:-1}));const u=[];let l=1;const h=t=>({candidate:t,messageType:"iceCandidate",sdpMLineIndex:"0",sdpMid:"0"});m()(c).call(c,(t=>{t.foundation=l,t.priority=1===l?2130706431:1,u.push(h(`a=candidate:${t.foundation} 1 UDP ${t.priority} ${t.ip} ${t.port} ${t.the_rest}`)),++l})),u.push(h("a=end-of-candidates")),r(u)}}))}))}sendIce(t,e){return new(q())(((r,n)=>{const s={messageType:"iceCandidate",candidate:e};this.post("/v5/sessions/"+this._type+"/"+t+"/ice",s).then((()=>{this.checkIce(t).then((t=>{r(t)})).catch((t=>{n(t)}))})).catch((t=>{n(t)}))}))}sendMSALAuth(t,e){return this.post("/v5/sessions/"+this._type+"/"+t+"/connect",{userToken:e})}sendKeepalive(t){return this.post("/v5/sessions/"+this._type+"/"+t+"/keepalive")}getActiveSessions(){return this.get("/v5/sessions/"+this._type+"/active")}}class Q{constructor(t){e()(this,"_application",void 0),e()(this,"_friends",{}),e()(this,"_onlineFriends",{}),this._application=t}intervalFriends(){this.updateFriends().then((t=>{const e=[];for(const r in t)"Offline"!==t[r].presenceState&&e.push(t[r]);this._onlineFriends=e})).catch((t=>{console.log("xboxWorker - Error updating friends:",t)}))}updateFriends(){return new(q())(((t,e)=>{this._application._webApi.getProvider("people").getFriends().then((e=>{for(const t in e.people)this._friends[e.people[t].xuid]=e.people[t];t(this._friends)})).catch((t=>{e(t)}))}))}}p(1265),p(7189);var Y=p(2742),Z=p.n(Y);p(7831),p(2181);const tt="1.0.0";class et{constructor(t){e()(this,"data",void 0),this.data=t}calculateSecondsLeft(t){const e=t,r=new Date;return Math.floor((e.getTime()-r.getTime())/1e3)}getSecondsValid(){return console.log("Warning: getSecondsValid not implemented"),0}isValid(){return console.log("Warning: isValid not implemented"),!1}getUserHash(){return"UserToken"in this.data&&this.data.UserToken.DisplayClaims.xui[0].uhs}getGamertag(){return"AuthorizationToken"in this.data&&this.data.AuthorizationToken.DisplayClaims.xui[0].gtg}}class rt extends et{constructor(t){super(t),e()(this,"data",void 0),this.data=t}getSecondsValid(){const t=this.calculateSecondsLeft(new Date(this.data.TitleToken.NotAfter)),e=this.calculateSecondsLeft(new Date(this.data.UserToken.NotAfter)),r=this.calculateSecondsLeft(new Date(this.data.AuthorizationToken.NotAfter));return Math.min(t,e,r)}isValid(){if(this.calculateSecondsLeft(new Date(this.data.TitleToken.NotAfter))<=0)return!1;if(this.calculateSecondsLeft(new Date(this.data.UserToken.NotAfter))<=0)return!1;return!(this.calculateSecondsLeft(new Date(this.data.AuthorizationToken.NotAfter))<=0)}getUserHash(){return this.data.UserToken.DisplayClaims.xui[0].uhs}getGamertag(){return this.data.AuthorizationToken.DisplayClaims.xui[0].gtg}}class nt extends et{constructor(t){super(t),e()(this,"data",void 0),this.data=t}calculateSecondsLeft(t){const e=t,r=new Date;return Math.floor((e.getTime()-r.getTime())/1e3)}getSecondsValid(){return this.calculateSecondsLeft(new Date(this.data.expires_on))}isValid(){return this.calculateSecondsLeft(new Date(this.data.expires_on))>0}}const st=require("fs");var it=p.n(st);function ot(t,e){var r=a()(t);if(u()){var n=u()(t);e&&(n=h()(n).call(n,(function(e){return g()(t,e).enumerable}))),r.push.apply(r,n)}return r}function at(t){for(var r=1;r{const i=yt({},r),o={method:"GET",hostname:t,path:e,port:443,headers:i},a=G().request(o,(r=>{let i="";r.on("data",(t=>{i+=t})),r.on("close",(()=>{200==r.statusCode||204==r.statusCode?""===i.toString()?n(new xt({},r.headers)):n(new xt(JSON.parse(i.toString()),r.headers)):s({statuscode:r.statusCode,headers:r.headers,body:i.toString(),message:"Error fetching "+t+e})}))}));a.on("error",(t=>{s(t)})),a.end()}))}postRequest(t,e,r,n){return new(q())(((s,o)=>{const a=yt({},r);"object"==typeof n&&(n=i()(n));const c={method:"POST",hostname:t,path:e,port:443,headers:a},u=G().request(c,(r=>{let n="";r.on("data",(t=>{n+=t})),r.on("close",(()=>{200==r.statusCode||202==r.statusCode?""===n.toString()?s(new xt({},r.headers)):s(new xt(JSON.parse(n.toString()),r.headers)):o({statuscode:r.statusCode,headers:r.headers,body:n.toString(),message:"Error fetching "+t+e})}))}));u.on("error",(t=>{o(t)})),u.write(n),u.end()}))}}class xt{constructor(t,r){e()(this,"data",void 0),e()(this,"headers",void 0),this.data=t,this.headers=r}header(){return this.headers}body(){return this.data}}const _t=require("crypto");var St=p.n(_t),bt=p(9603);class kt extends et{constructor(t){super(t),e()(this,"data",void 0),this.data=t}getSecondsValid(){return this.calculateSecondsLeft(new Date(this.data.NotAfter))}isValid(){return!(this.calculateSecondsLeft(new Date(this.data.NotAfter))<=0)}}class Tt extends et{constructor(t){super(t),e()(this,"data",void 0),e()(this,"_objectCreateTime",lt()()),this.data=t}calculateSecondsLeft(t){const e=t,r=new Date;return Math.floor((e.getTime()-r.getTime())/1e3)}getSecondsValid(){return this._objectCreateTime+1e3*this.data.durationInSeconds?this.calculateSecondsLeft(new Date(this._objectCreateTime+1e3*this.data.durationInSeconds)):0}isValid(){if(this._objectCreateTime+1e3*this.data.durationInSeconds){return this.calculateSecondsLeft(new Date(this._objectCreateTime+1e3*this.data.durationInSeconds))>0}return!1}getMarket(){return this.data.market}getRegions(){return this.data.offeringSettings.regions}getDefaultRegion(){var t;return h()(t=this.data.offeringSettings.regions).call(t,(t=>t.isDefault))[0]}setDefaultRegion(t){var e;m()(e=this.data.offeringSettings.regions).call(e,(e=>{e.name===t?e.isDefault=!0:e.isDefault=!1}))}getEnvironments(){return this.data.offeringSettings.clientCloudSettings.Environments}}class Pt extends et{constructor(t){super(t),e()(this,"data",void 0),this.data=t}getSecondsValid(){return this.calculateSecondsLeft(new Date(this.data.NotAfter))}isValid(){return!(this.calculateSecondsLeft(new Date(this.data.NotAfter))<=0)}}class Ct extends et{constructor(t){super(t),e()(this,"data",void 0),this.data=t}}function At(t,e){var r=a()(t);if(u()){var n=u()(t);e&&(n=h()(n).call(n,(function(e){return g()(t,e).enumerable}))),r.push.apply(r,n)}return r}function Ot(t){for(var r=1;rjt.v3({namespace:"6ba7b811-9dad-11d1-80b4-00c04fd430c8",name:lt()().toString()});class Rt{constructor(t){e()(this,"keys",void 0),e()(this,"jwtKeys",void 0),e()(this,"_app",{AppId:"000000004c20a908",TitleId:"328178078",RedirectUri:"ms-xal-000000004c20a908://auth"}),e()(this,"codeChallange",void 0),e()(this,"_webToken",void 0),e()(this,"_xhomeToken",void 0),e()(this,"_xcloudToken",void 0),t&&t._jwtKeys&&this.setKeys(t._jwtKeys.jwt).then((t=>{})).catch((t=>{console.log("Failed to load keys:",t)}))}setKeys(t){return new(q())(((e,r)=>{_t.subtle.importKey("jwk",t,{name:"ECDSA",namedCurve:"P-256"},!0,["sign"]).then((r=>{const n=_t.KeyObject.from(r);this.jwtKeys={raw:{privateKey:n},jwt:t},e(this.jwtKeys)})).catch((t=>{console.log("key error:",t),r(t)}))}))}getKeys(){return new(q())(((t,e)=>{void 0!==this.jwtKeys?t(this.jwtKeys):void 0===pt()(this)?(this.keys=St().generateKeyPairSync("ec",{namedCurve:"P-256"}),this.jwtKeys={raw:pt()(this)},(0,bt.exportJWK)(pt()(this).publicKey).then((r=>{const n=Ot(Ot({},r),{},{alg:"ES256",use:"sig"});this.jwtKeys={raw:pt()(this),jwt:n};const s=this.jwtKeys.raw.privateKey.export({type:"pkcs8",format:"jwk"});this.setKeys(s).then((e=>{t(e)})).catch((t=>{e(t)}))}))):t(this.jwtKeys)}))}getCodeChallange(){return new(q())(((t,e)=>{if(void 0===this.codeChallange){const t=Buffer.from(St().pseudoRandomBytes(32)).toString("base64url"),e=St().createHash("sha256").update(t).digest();this.codeChallange={value:e.toString("base64url"),method:"S256",verifier:t}}t(this.codeChallange)}))}getRandomState(t=64){return St().randomBytes(t).toString("base64url")}getDeviceToken(){return console.log("getDeviceToken..."),new(q())(((t,e)=>{this.getKeys().then((r=>{const n={Properties:{AuthMethod:"ProofOfPossession",Id:`{${Et()}}`,DeviceType:"Android",SerialNumber:`{${Et()}}`,Version:"15.0",ProofKey:{use:"sig",alg:"ES256",kty:"EC",crv:"P-256",x:r.jwt.x,y:r.jwt.y}},RelyingParty:"http://auth.xboxlive.com",TokenType:"JWT"},s=i()(n),o=this.sign("https://device.auth.xboxlive.com/device/authenticate","",s,r).toString("base64"),a=Ot(Ot({},{"x-xbl-contract-version":"1","Cache-Control":"no-store, must-revalidate, no-cache"}),{},{Signature:o});(new wt).postRequest("device.auth.xboxlive.com","/device/authenticate",a,s).then((e=>{t(new kt(e.body()))})).catch((t=>{e(t)}))}))}))}doSisuAuthentication(t,e,r){return new(q())(((n,s)=>{this.getKeys().then((o=>{const a={AppId:this._app.AppId,TitleId:this._app.TitleId,RedirectUri:this._app.RedirectUri,DeviceToken:t.data.Token,Sandbox:"RETAIL",TokenType:"code",Offers:["service::user.auth.xboxlive.com::MBI_SSL"],Query:{display:"android_phone",code_challenge:e.value,code_challenge_method:e.method,state:r}},c=i()(a),u=this.sign("https://sisu.xboxlive.com/authenticate","",c,o).toString("base64"),l=Ot(Ot({},{"x-xbl-contract-version":"1","Cache-Control":"no-store, must-revalidate, no-cache"}),{},{Signature:u});(new wt).postRequest("sisu.xboxlive.com","/authenticate",l,c).then((t=>{const e=Ot({SessionId:t.headers["x-sessionid"]},t.body());n(e)})).catch((t=>{s(t)}))}))}))}doSisuAuthorization(t,e,r){return console.log("doSisuAuthorization..."),new(q())(((n,s)=>{this.getKeys().then((o=>{const a=Ot({AccessToken:"t="+t.data.access_token,AppId:this._app.AppId,DeviceToken:e.data.Token,Sandbox:"RETAIL",SiteName:"user.auth.xboxlive.com",UseModernGamertag:!0,ProofKey:{use:"sig",alg:"ES256",kty:"EC",crv:"P-256",x:o.jwt.x,y:o.jwt.y}},r?{SessionId:r}:{}),c=i()(a),u={"x-xbl-contract-version":"1","Cache-Control":"no-store, must-revalidate, no-cache",signature:this.sign("https://sisu.xboxlive.com/authorize","",c,o).toString("base64")};(new wt).postRequest("sisu.xboxlive.com","/authorize",u,c).then((t=>{n(new rt(t.body()))})).catch((t=>{s(t)}))}))}))}exchangeCodeForToken(t,e){return new(q())(((r,n)=>{const s={client_id:this._app.AppId,code:t,code_verifier:e,grant_type:"authorization_code",redirect_uri:this._app.RedirectUri,scope:"service::user.auth.xboxlive.com::MBI_SSL"},i=new(dt())(s).toString();(new wt).postRequest("login.live.com","/oauth20_token.srf",{"Content-Type":"application/x-www-form-urlencoded","Cache-Control":"no-store, must-revalidate, no-cache"},i).then((t=>{r(new nt(t.body()))})).catch((t=>{n(t)}))}))}refreshUserToken(t){return console.log("refreshUserToken..."),new(q())(((e,r)=>{const n={client_id:this._app.AppId,grant_type:"refresh_token",refresh_token:t.data.refresh_token,scope:"service::user.auth.xboxlive.com::MBI_SSL"},s=new(dt())(n).toString();(new wt).postRequest("login.live.com","/oauth20_token.srf",{"Content-Type":"application/x-www-form-urlencoded","Cache-Control":"no-store, must-revalidate, no-cache"},s).then((t=>{console.log("refreshUserToken success: ",t.body()),e(new nt(t.body()))})).catch((t=>{console.log("refreshUserToken fail:",t),r(t)}))}))}doXstsAuthorization(t,e){return new(q())(((r,n)=>{this.getKeys().then((s=>{const o={Properties:{SandboxId:"RETAIL",DeviceToken:t.data.DeviceToken,TitleToken:t.data.TitleToken.Token,UserTokens:[t.data.UserToken.Token]},RelyingParty:e,TokenType:"JWT"},a=i()(o),c=this.sign("https://xsts.auth.xboxlive.com/xsts/authorize","",a,s).toString("base64"),u=Ot(Ot({},{"x-xbl-contract-version":"1","Cache-Control":"no-store, must-revalidate, no-cache"}),{},{Signature:c});(new wt).postRequest("xsts.auth.xboxlive.com","/xsts/authorize",u,a).then((t=>{r(new Pt(t.body()))})).catch((t=>{n(t)}))}))}))}exchangeRefreshTokenForXcloudTransferToken(t){return new(q())(((e,r)=>{const n={client_id:this._app.AppId,grant_type:"refresh_token",scope:"service::http://Passport.NET/purpose::PURPOSE_XBOX_CLOUD_CONSOLE_TRANSFER_TOKEN",refresh_token:t.data.refresh_token,code:"",code_verifier:"",redirect_uri:""},s=new(dt())(n).toString();(new wt).postRequest("login.live.com","/oauth20_token.srf",{"Content-Type":"application/x-www-form-urlencoded","Cache-Control":"no-store, must-revalidate, no-cache"},s).then((t=>{e(new Ct(t.body()))})).catch((t=>{r(t)}))}))}getStreamToken(t,e,r=""){return new(q())(((n,s)=>{const o={token:t.data.Token,offeringId:e},a=i()(o),c={"Content-Type":"application/json","Cache-Control":"no-store, must-revalidate, no-cache","x-gssv-client":"XboxComBrowser","Content-Length":a.length};r.length>0&&(c["x-forwarded-for"]=r);(new wt).postRequest(e+".gssv-play-prod.xboxlive.com","/v2/login/user",c,a).then((t=>{n(new Tt(t.body()))})).catch((t=>{s(t)}))}))}sign(t,e,r,n){const s=(BigInt(lt()()/1e3|0)+BigInt(11644473600))*BigInt(1e7),i=new(vt())(t).pathname,o=19+i.length+1+e.length+1+r.length+1,a=Buffer.alloc(o);a.writeInt32BE(1),a.writeUInt8(0,4),a.writeBigUInt64BE(s,5),a.writeUInt8(0,13);let c=14;Buffer.from("POST").copy(a,c),a.writeUInt8(0,c+4),c=c+4+1,Buffer.from(i).copy(a,c),a.writeUInt8(0,c+i.length),c=c+i.length+1,Buffer.from(e).copy(a,c),a.writeUInt8(0,c+e.length),c=c+e.length+1,Buffer.from(r).copy(a,c),a.writeUInt8(0,c+r.length),c=c+r.length+1;const u=St().sign("SHA256",a,{key:n.raw.privateKey,dsaEncoding:"ieee-p1363"}),l=Buffer.alloc(u.length+12);return l.writeInt32BE(1),l.writeBigUInt64BE(s,4),Buffer.from(u).copy(l,12),l}async refreshTokens(t){const e=t.getUserToken();if(void 0===e)throw new Error("User token is missing. Please authenticate first");try{const r=await this.refreshUserToken(e),n=await this.getDeviceToken(),s=await this.doSisuAuthorization(r,n);return t.setUserToken(r),t.setSisuToken(s),t.save(),{userToken:r,deviceToken:n,sisuToken:s}}catch(t){throw new Ut("Failed to refresh tokens: "+i()(t))}}async getMsalToken(t){const e=t.getUserToken();if(void 0===e)throw new Error("User token is missing. Please authenticate first");return await this.exchangeRefreshTokenForXcloudTransferToken(e)}async getWebToken(t){const e=t.getSisuToken();if(void 0===e)throw new Error("Sisu token is missing. Please authenticate first");if(void 0===this._webToken||this._webToken.getSecondsValid()<=60){const t=await this.doXstsAuthorization(e,"http://xboxlive.com");return this._webToken=t,t}return this._webToken}async getStreamingToken(t){const e=t.getSisuToken();if(void 0===e)throw new Error("Sisu token is missing. Please authenticate first");const r=await this.doXstsAuthorization(e,"http://gssv.xboxlive.com/");if((void 0===this._xhomeToken||this._xhomeToken.getSecondsValid()<=60)&&(this._xhomeToken=await this.getStreamToken(r,"xhome")),void 0===this._xcloudToken||this._xcloudToken.getSecondsValid()<=60)try{this._xcloudToken=await this.getStreamToken(r,"xgpuweb")}catch(t){this._xcloudToken=await this.getStreamToken(r,"xgpuwebf2p")}return{xHomeToken:this._xhomeToken,xCloudToken:this._xcloudToken}}async getRedirectUri(){const t=await this.getDeviceToken(),e=await this.getCodeChallange(),r=this.getRandomState();return{sisuAuth:await this.doSisuAuthentication(t,e,r),state:r,codeChallange:e}}async authenticateUser(t,e,r){const n=new(vt())(r);if(n.searchParams.get("error")){n.searchParams.get("error_description");return!1}const s=n.searchParams.get("code");if(s){const r=n.searchParams.get("state");if(r)return this.authenticateUserUsingCode(t,e,s,r)}return!1}async authenticateUserUsingCode(t,e,r,n){if(console.log("authenticateUser:",r,n),n!==e.state)return!1;const s=await this.getCodeChallange(),i=await this.exchangeCodeForToken(r,s.verifier);return t.setUserToken(i),t.setJwtKeys(this.jwtKeys),t.save(),!0}}class Ut extends Error{}class It extends ct{constructor(...t){super(...t),e()(this,"_store",new(A()))}load(){const t=this._store.get("user.tokenstore","{}");return this.loadJson(t),!0}save(){const t=i()({userToken:this._userToken?.data,sisuToken:this._sisuToken?.data,jwtKeys:this._jwtKeys});this._store.set("user.tokenstore",t)}clear(){this._store.delete("user.tokenstore"),this._userToken=void 0,this._sisuToken=void 0,this._jwtKeys=void 0}}class Lt{constructor(t){e()(this,"_application",void 0),e()(this,"_tokenStore",void 0),e()(this,"_xal",void 0),e()(this,"_authWindow",void 0),e()(this,"_authCallback",void 0),e()(this,"_isAuthenticating",!1),e()(this,"_isAuthenticated",!1),e()(this,"_appLevel",0),this._application=t,this._tokenStore=new It,this._tokenStore.load(),this._xal=new Rt(this._tokenStore)}checkAuthentication(){return this._isAuthenticating=!0,this._isAuthenticated=!1,this._application.log("authenticationV2","[checkAuthentication()] Starting token check..."),this._tokenStore.hasValidAuthTokens()?(this._application.log("authenticationV2","[checkAuthentication()] Tokens are valid."),this.startSilentFlow(),!0):void 0!==this._tokenStore.getUserToken()?(this._application.log("authenticationV2","[checkAuthentication()] Tokens are expired but we have a user token. Lets try to refresh the tokens."),this.startSilentFlow(),!0):(this._application.log("authenticationV2","[checkAuthentication()] No tokens are present."),!1)}startSilentFlow(){this._application.log("authenticationV2","[startSilentFlow()] Starting silent flow..."),this._isAuthenticating=!0,this._xal.refreshTokens(this._tokenStore).then((()=>{this._application.log("authenticationV2","[startSilentFlow()] Tokens have been refreshed"),this.getStreamingToken(this._tokenStore).then((t=>{null!==t.xCloudToken?(this._application.log("authenticationV2","[startSilentFlow()] Retrieved both xHome and xCloud tokens"),this._appLevel=2):(this._application.log("authenticationV2","[startSilentFlow()] Retrieved xHome token only"),this._appLevel=1),this._xal.getWebToken(this._tokenStore).then((e=>{this._application.log("authenticationV2",__filename+"[startSilentFlow()] Web token received"),this._application.authenticationCompleted(t,e)})).catch((t=>{this._application.log("authenticationV2",__filename+"[startSilentFlow()] Failed to retrieve web tokens:",t),k.dialog.showMessageBox({message:"Error: Failed to retrieve web tokens:"+i()(t),type:"error"})}))})).catch((t=>{this._application.log("authenticationV2","[startSilentFlow()] Failed to retrieve streaming tokens:",t),k.dialog.showMessageBox({message:"Error: Failed to retrieve streaming tokens:"+i()(t),type:"error"})}))})).catch((t=>{this._application.log("authenticationV2","[startSilentFlow()] Error refreshing tokens:",t),k.dialog.showMessageBox({message:"[startSilentFlow()] Error refreshing tokens:"+i()(t),type:"error"}),this._tokenStore.clear()}))}startAuthflow(){this._application.log("authenticationV2","[startAuthflow()] Starting authentication flow"),this._xal.getRedirectUri().then((t=>{this.openAuthWindow(t.sisuAuth.MsaOauthRedirect),this._authCallback=e=>{this._isAuthenticating=!0,this._application.log("authenticationV2","[startAuthFlow()] Got redirect URI:",e),this._xal.authenticateUser(this._tokenStore,t,e).then((t=>{this._application.log("authenticationV2","[startAuthFlow()] Authenticated user:",t),this.startSilentFlow()})).catch((t=>{this._application.log("authenticationV2","[startAuthFlow()] Error authenticating user:",t),k.dialog.showErrorBox("Error","Error authenticating user. Error details: "+i()(t))}))}})).catch((t=>{this._application.log("authenticationV2","[startAuthFlow()] Error getting redirect URI:",t),k.dialog.showErrorBox("Error","Error getting redirect URI. Error details: "+i()(t))}))}startWebviewHooks(){this._application.log("authenticationV2","[startWebviewHooks()] Starting webview hooks"),k.session.defaultSession.webRequest.onHeadersReceived({urls:["https://login.live.com/oauth20_authorize.srf?*","https://login.live.com/ppsecure/post.srf?*"]},((t,e)=>{var r;void 0!==t.responseHeaders.Location&&n()(r=t.responseHeaders.Location[0]).call(r,this._xal._app.RedirectUri)?(this._application.log("authenticationV2","[startWebviewHooks()] Got redirect URI from OAUTH:",t.responseHeaders.Location[0]),this._authWindow.close(),void 0!==this._authCallback?this._authCallback(t.responseHeaders.Location[0]):(this._application.log("authenticationV2","[startWebviewHooks()] Authentication Callback is not defined:",this._authCallback),k.dialog.showErrorBox("Error","Authentication Callback is not defined. Error details: "+i()(this._authCallback))),e({cancel:!0})):e(t)}))}openAuthWindow(t){const e=N("auth",{width:500,height:600,title:"Authentication"});e.loadURL(t),this._authWindow=e,this._authWindow.on("close",(()=>{this._application.log("authenticationV2","[openAuthWindow()] Closed auth window")}))}async getStreamingToken(t){console.log("getStreamingToken");const e=t.getSisuToken();if(void 0===e)throw new Error("Sisu token is missing. Please authenticate first");const r=await this._xal.doXstsAuthorization(e,"http://gssv.xboxlive.com/");console.log("this._xal._xhomeToken:",this._xal._xhomeToken),(void 0===this._xal._xhomeToken||this._xal._xhomeToken.getSecondsValid()<=60)&&(this._xal._xhomeToken=await this._xal.getStreamToken(r,"xhome")),console.log("this._xal._xcloudToken:",this._xal._xcloudToken);const n=this._application._store.get("settings",$);if(!this._xal._xcloudToken||this._xal._xcloudToken.getSecondsValid()<=60)try{this._xal._xcloudToken=await this._xal.getStreamToken(r,"xgpuweb",n.force_region_ip)}catch(t){try{this._xal._xcloudToken=await this._xal.getStreamToken(r,"xgpuwebf2p",n.force_region_ip)}catch(t){this._xal._xcloudToken=null}}return{xHomeToken:this._xal._xhomeToken,xCloudToken:this._xal._xcloudToken}}}class Dt{constructor(t){e()(this,"_application",void 0),this._application=t}onEvent(t,e,r){if(this._application.log("Ipc:Recv","Received event: ["+t+"]",r),"function"==typeof this[r.action]){(a()(r.data).length>0?this[r.action](r.data):this[r.action]()).then((e=>{this.send(t,{action:r.action,id:r.id,data:e})})).catch((e=>{console.log("ERROR: IPC communication error from backend:",e),this.send(t,{action:r.action,id:r.id,data:{},error:e})}))}else this._application.log("Ipc","ERROR: Action was not found:",r.action,"on channel",t),this.send(t,{action:r.action,id:r.id,data:{},error:"IPC action failure. Action was not found: "+t+":"+r.action})}send(t,e){this._application.log("Ipc:Send","Sending event: ["+t+"]",i()(e)),this._application._mainWindow.webContents.send(t,{action:e.action,id:e.id,data:e.data,error:e.error})}}class Mt extends Dt{constructor(...t){super(...t),e()(this,"_consoles",[]),e()(this,"_consolesLastUpdate",0)}get(){return new(q())(((t,e)=>{this._consolesLastUpdate{this._consoles=e.result,this._consolesLastUpdate=lt()(),t(this._consoles)})).catch((t=>{e(t)})):t(this._consoles)}))}}class Ft{constructor(t){e()(this,"_application",void 0),e()(this,"_sessions",{}),this._application=t}getApi(t){const e=this._application.streamingTokens;return"home"===t?new X(this._application,e.xHomeToken.getDefaultRegion().baseUri.substring(8),e.xHomeToken.data.gsToken,"home"):new X(this._application,e.xCloudToken.getDefaultRegion().baseUri.substring(8),e.xCloudToken.data.gsToken,"cloud")}getSession(t){return this._sessions[t]}startStream(t,e){return new(q())(((r,n)=>{this.getApi(t).startStream(e).then((n=>{console.log("Streammanager - startStream:",n);const s=n.sessionPath.split("/")[3],i={id:s,target:e,path:n.sessionPath,type:t,playerState:"pending"};this._sessions[s]=i,this.monitorSession(s),r(s)})).catch((t=>{n(t)}))}))}stopStream(t){return new(q())(((e,r)=>{const n=this.getSession(t);void 0!==n?this.getApi(n.type).stopStream(t).then((r=>{console.log("Current sessions:",this._sessions),delete this._sessions[t],console.log("new sessions:",this._sessions),e(r)})).catch((t=>{r(t)})):r("Session not found: "+t)}))}sendSdp(t,e){return new(q())(((r,n)=>{const s=this.getSession(t);void 0!==s?this.getApi(s.type).sendSdp(t,e).then((t=>{r(t)})).catch((t=>{n(t)})):n("Session not found: "+t)}))}sendChatSdp(t,e){return new(q())(((r,n)=>{const s=this.getSession(t);void 0!==s?this.getApi(s.type).sendChatSdp(t,e).then((t=>{r(t)})).catch((t=>{n(t)})):n("Session not found: "+t)}))}sendIce(t,e){return new(q())(((r,n)=>{const s=this.getSession(t);void 0!==s?this.getApi(s.type).sendIce(t,e).then((t=>{r(t)})).catch((t=>{n(t)})):n("Session not found: "+t)}))}sendKeepalive(t){return new(q())(((e,r)=>{const n=this.getSession(t);void 0!==n?this.getApi(n.type).sendKeepalive(t).then((t=>{e(t)})).catch((t=>{r(t)})):r("Session not found: "+t)}))}monitorSession(t){W()((()=>{this._application.log("StreamManager","monitorSession("+t+") checking state");void 0!==this.getSession(t)?this.getApi(this.getSession(t).type).getStreamState(t).then((e=>{console.log("Streammanager - state:",e),this.getSession(t).state=e.state,"Provisioned"===e.state?this.getSession(t).playerState="started":"Provisioning"===e.state?this.monitorSession(t):"ReadyToConnect"===e.state?this._application._authentication._xal.getMsalToken(this._application._authentication._tokenStore).then((e=>{this.getApi(this.getSession(t).type).sendMSALAuth(t,e.data.lpt).then((()=>{this.monitorSession(t)})).catch((t=>{console.log("MSAL AUTH Error:",t),alert("MSAL AUTH Error:"+t)}))})).catch((t=>{console.log("MSAL AUTH Error:",t),alert("MSAL AUTH Error:"+t)})):"WaitingForResources"===e.state?(void 0===this.getSession(t).waitingTimes&&this.getApi(this.getSession(t).type).getWaitingTimes(this.getSession(t).target).then((e=>{this.getSession(t).waitingTimes=e,this.getSession(t).playerState="queued"})),this.monitorSession(t)):"Failed"===e.state?(this.getSession(t).errorDetails=e.errorDetails,this.getSession(t).playerState="failed"):console.log("Unknown state:",e)})).catch((e=>{console.log("Streammanager - error checking state:",t,e),404===e.status?(this._application.log("StreamManager","Session not found on server. Removing session..."),delete this._sessions[t]):this.monitorSession(t)})):this._application.log("StreamManager","monitorSession("+t+") session not found")}),1e3)}getActiveSessions(){return new(q())(((t,e)=>{this.getApi("cloud").getActiveSessions().then((e=>{console.log("Active sessions:",e),t(e)})).catch((t=>{e(t)}))}))}}class Nt extends Dt{constructor(t){super(t),e()(this,"_streamManager",void 0),this._streamManager=new Ft(t)}startStream(t){return"home"===t.type?this._application._ipc._channels.consoles._consolesLastUpdate=0:this._application._ipc._channels.xCloud._recentTitlesLastUpdate=0,this._streamManager.startStream(t.type,t.target)}stopStream(t){return this._streamManager.stopStream(t.sessionId)}sendSdp(t){return this._streamManager.sendSdp(t.sessionId,t.sdp)}sendChatSdp(t){return this._streamManager.sendChatSdp(t.sessionId,t.sdp)}sendIce(t){return this._streamManager.sendIce(t.sessionId,t.ice)}sendKeepalive(t){return this._streamManager.sendKeepalive(t.sessionId)}getPlayerState(t){return new(q())((e=>{e(this._streamManager.getSession(t.sessionId))}))}activeSessions(){return this._streamManager.getActiveSessions()}}var Bt=p(6615),qt=p.n(Bt),zt=p(9261),Wt=p.n(zt);class Vt{constructor(t){e()(this,"_application",void 0),this._application=t}get(t,e,r="GET"){return new(q())(((n,s)=>{let i="";const o=G().request({host:t,path:e,method:r,headers:{"Content-Type":"application/json"}},(t=>{t.on("data",(t=>{i+=t})),t.on("end",(()=>{if(t.statusCode>=200&&t.statusCode<=299){this._application.log("HTTP","get("+e+", "+r+") resolve:",t.statusCode);let o=i;try{o=JSON.parse(i)}catch(t){}204===t.statusCode?W()((()=>{this.get(e,r).then((t=>{n(t)})).catch((t=>{s(t)}))}),750):n(o)}else this._application.log("HTTP","get("+e+") reject:",t.statusCode),s({url:e,status:t.statusCode,body:i})}))}));o.on("error",(t=>{s(t)})),o.end()}))}post(t,e,r={},n={}){return new(q())(((s,o)=>{let a="";const c=R()({},{"Content-Type":"application/json"},n),u=G().request({host:t,path:e,method:"POST",headers:c},(t=>{t.on("data",(t=>{a+=t})),t.on("end",(()=>{if(t.statusCode>=200&&t.statusCode<=299){this._application.log("HTTP","post("+e+") resolve:",t.statusCode,a.substring(0,100));let r=a;try{r=JSON.parse(a)}catch(t){}s(r)}else this._application.log("HTTP","post("+e+") reject:",t.statusCode),o({url:e,status:t.statusCode,body:a})}))}));u.on("error",(t=>{o(t)})),u.write(i()(r)),u.end()}))}}function Ht(t,e){var r=a()(t);if(u()){var n=u()(t);e&&(n=h()(n).call(n,(function(e){return g()(t,e).enumerable}))),r.push.apply(r,n)}return r}function Kt(t){for(var r=1;r{let e=[];Z().get("https://cdn.jsdelivr.net/gh/Geocld/XStreaming@main/titles.json",{timeout:30}).then((r=>{200===r.status&&(e=r.data.Products,console.log("officialTitles:",e)),t(e)})).catch((e=>{t([])}))}))}getGamePassProducts(t){return new(q())(((e,r)=>{const n=[];qt()(t)||e([]),m()(t).call(t,(t=>{t.details&&t.details.productId&&n.push(t.details.productId)})),this.getOfficialTitles().then((t=>{const s=[...new(Wt())([...n,...t])];this._http.post("catalog.gamepass.com","/v3/products?market=US&language=en-US&hydration=RemoteHighSapphire0",{Products:s},{"ms-cv":0,"calling-app-name":"Xbox Cloud Gaming Web","calling-app-version":"24.17.63"}).then((t=>{const r=t.Products,n=[];for(const t in r)n.push(Kt({productId:t},r[t]));H()(n).call(n,((t,e)=>t.ProductTitle.localeCompare(e.ProductTitle))),e(n)})).catch((t=>{console.log("getGamePassProducts error:",t),r(t)}))}))}))}getNewTitles(){return this._http.get("catalog.gamepass.com","/sigls/v2?id=f13cf6b4-57e6-4459-89df-6aec18cf0538&market=US&language=en-US")}}class Jt extends Dt{constructor(t){super(t),e()(this,"_titleManager",void 0),e()(this,"_titlesAreLoaded",!1),e()(this,"_titles",[]),e()(this,"_titlesLastUpdate",0),e()(this,"_recentTitles",[]),e()(this,"_recentTitlesLastUpdate",0),e()(this,"_newTitles",[]),e()(this,"_newTitlesLastUpdate",0),this._titleManager=new Gt(t)}startUp(){this._application.log("Ipc:xCloud","Starting xCloud IPC Channel...")}getRecentTitles(){const t=this._application.streamingTokens;return new X(this._application,t.xCloudToken.getDefaultRegion().baseUri.substring(8),t.xCloudToken.data.gsToken,"cloud").getRecentTitles()}getXhomeToken(){return console.log("getXhomeToken"),new(q())((t=>{this._application.streamingTokens&&this._application.streamingTokens.xHomeToken?t(this._application.streamingTokens.xHomeToken.data):t(null)}))}setXhomeTokenDefault(t){this._application.streamingTokens.xHomeToken.setDefaultRegion(t)}getXcloudToken(){return console.log("getXcloudToken"),new(q())((t=>{this._application.streamingTokens&&this._application.streamingTokens.xCloudToken?t(this._application.streamingTokens.xCloudToken.data):t(null)}))}setXcloudTokenDefault(t){this._application.streamingTokens.xCloudToken&&this._application.streamingTokens.xCloudToken.setDefaultRegion(t)}getTitles(){const t=this._application.streamingTokens,e=new X(this._application,t.xCloudToken.getDefaultRegion().baseUri.substring(8),t.xCloudToken.data.gsToken,"cloud");return new(q())(((t,r)=>{e.getTitles().then((e=>{t(e)})).catch((t=>{r(t)}))}))}getGamePassProducts(t){return this._titleManager.getGamePassProducts(t)}getNewTitles(){return this._titleManager.getNewTitles()}}class $t extends Dt{loadCachedUser(){return new(q())((t=>{t(this.getUserState())}))}getUserState(){const t=this._application._store.get("user.gamertag"),e=this._application._store.get("user.gamerpic"),r=this._application._store.get("user.gamerscore");return{signedIn:!!t,type:"user",gamertag:t||"",gamerpic:e||"",gamerscore:r||"",level:this._application._authentication._appLevel}}getAuthState(){return new(q())((t=>{t({isAuthenticating:this._application._authentication._isAuthenticating,isAuthenticated:this._application._authentication._isAuthenticated,user:this.getUserState()})}))}getAppLevel(){return new(q())((t=>{t(this._application._authentication._appLevel)}))}checkAuthentication(){return new(q())((t=>{t(this._application._authentication.checkAuthentication())}))}login(){return new(q())((t=>{this._application._authentication.startAuthflow(),t(!0)}))}quit(){return new(q())((t=>{t(!0),W()((()=>{this._application.quit()}),100)}))}restart(){return new(q())((t=>{t(!0),W()((()=>{this._application.restart()}),100)}))}clearData(){return new(q())(((t,e)=>{k.session.defaultSession.clearStorageData().then((()=>{this._application._authentication._tokenStore.clear(),this._application._store.delete("user"),this._application._store.delete("auth"),this._application.log("authentication",__filename+"[startIpcEvents()] Received restart request. Restarting application..."),this._application.restart(),t(!0)})).catch((t=>{this._application.log("authentication",__filename+"[startIpcEvents()] Error: Failed to clear local storage!"),e(t)}))}))}getOnlineFriends(){return new(q())((t=>{void 0===this._application._xboxWorker?t([]):t(this._application._xboxWorker._onlineFriends)}))}onUiShown(){return new(q())((t=>{t({})}))}}function Xt(t,e){var r=a()(t);if(u()){var n=u()(t);e&&(n=h()(n).call(n,(function(e){return g()(t,e).enumerable}))),r.push.apply(r,n)}return r}function Qt(t){for(var r=1;r{const r=Qt(Qt({},$),t);this._application._store.set("settings",r),e(r)}))}getSettings(){return new(q())((t=>{const e=this._application._store.get("settings",$);t(Qt(Qt({},$),e))}))}resetSettings(){return new(q())((t=>{const e=Qt({},$);this._application._store.delete("settings"),this._application._store.set("settings",e),t(e)}))}}class Zt{constructor(t){e()(this,"_application",void 0),e()(this,"_channels",void 0),this._application=t,this._channels={streaming:new Nt(this._application),consoles:new Mt(this._application),app:new $t(this._application),xCloud:new Jt(this._application),settings:new Yt(this._application)};for(const t in this._channels)k.ipcMain.on(t,((e,r)=>{this._channels[t].onEvent(t,e,r)}))}startUp(){for(const t in this._channels)this._application.log("Ipc","Starting IPC channel: "+t),this._channels[t].startUp&&this._channels[t].startUp()}onUserLoaded(){for(const t in this._channels)this._channels[t].onUserLoaded&&(this._application.log("Ipc","Loading startup data for IPC channel: "+t),this._channels[t].onUserLoaded())}}var te=p(2170),ee=p.n(te);function re(t,e){var r=a()(t);if(u()){var n=u()(t);e&&(n=h()(n).call(n,(function(e){return g()(t,e).enumerable}))),r.push.apply(r,n)}return r}class ne{constructor(){e()(this,"_log",void 0),e()(this,"_store",new(A())),e()(this,"_startupFlags",{fullscreen:!1,autoStream:""}),e()(this,"_isProduction",!0),e()(this,"_isCi",void 0!==process.env.CI),e()(this,"_isMac","darwin"===process.platform),e()(this,"_isWindows","win32"===process.platform),e()(this,"_isQuitting",!1),e()(this,"_mainWindow",void 0),e()(this,"_ipc",void 0),e()(this,"_authentication",void 0),e()(this,"streamingTokens",void 0),e()(this,"_webApi",void 0),e()(this,"_xHomeApi",void 0),e()(this,"_xCloudApi",void 0),e()(this,"_xboxWorker",void 0),e()(this,"_gpuWindow",void 0),console.log(__filename+"[constructor()] Starting XStreaming v"+tt),this._log=j()("xstreaming"),k.app.commandLine.appendSwitch("enable-features","VaapiIgnoreDriverChecks,VaapiVideoDecoder,PlatformHEVCDecoderSupport,CanvasOopRasterization"),k.app.commandLine.appendSwitch("enable-gpu-rasterization"),k.app.commandLine.appendSwitch("enable-oop-rasterization"),k.app.commandLine.appendSwitch("accelerated-video-decode"),k.app.commandLine.appendSwitch("ozone-platform-hint","x11"),k.app.commandLine.appendSwitch("ignore-gpu-blocklist"),this.readStartupFlags(),this.loadApplicationDefaults(),this._ipc=new Zt(this),this._authentication=new Lt(this),this._ipc.startUp()}log(t="application",...e){this._log.extend(t)(...e)}getStartupFlags(){return this._startupFlags}resetAutostream(){this._startupFlags.autoStream=""}readStartupFlags(){this.log("application",__filename+"[readStartupFlags()] Program args detected:",process.argv);for(const r in process.argv){var t,e;if(n()(t=process.argv[r]).call(t,"--fullscreen")&&(this.log("application",__filename+"[readStartupFlags()] --fullscreen switch found. Setting fullscreen to true"),this._startupFlags.fullscreen=!0),n()(e=process.argv[r]).call(e,"--connect=")){const t=process.argv[r].substring(10);this.log("application",__filename+"[readStartupFlags()] --connect switch found. Setting autoStream to",t),this._startupFlags.autoStream=t}}this.log("application",__filename+"[readStartupFlags()] End result of startupFlags:",this._startupFlags)}loadApplicationDefaults(){if(!0===this._isProduction&&!1===this._isCi)P()({directory:"app"});else if(!0===this._isCi){const t=100*Math.random();k.app.setPath("userData",`${k.app.getPath("userData")} (${t})`),k.app.setPath("sessionData",`${k.app.getPath("userData")} (${t})`),this._store.delete("user"),this._store.delete("auth"),P()({directory:"app"})}else k.app.setPath("userData",`${k.app.getPath("userData")} (development)`);k.app.whenReady().then((()=>{this.log("electron",__filename+"[loadApplicationDefaults()] Electron has been fully loaded. Ready to open windows"),this.openMainWindow(),this._authentication.startWebviewHooks()})).catch((t=>{this.log("electron",__filename+"[loadApplicationDefaults()] Electron has failed to load:",t)})),k.app.on("window-all-closed",(()=>{!0===this._isMac?this.log("electron",__filename+"[loadApplicationDefaults()] Electron detected that all windows are closed. Running in background..."):(this.log("electron",__filename+"[loadApplicationDefaults()] Electron detected that all windows are closed. Quitting app..."),k.app.quit())})),k.app.on("activate",(()=>{void 0!==this._mainWindow?this._mainWindow.show():this.openMainWindow()})),k.app.on("before-quit",(()=>this._isQuitting=!0))}authenticationCompleted(t,e){this.log("electron",__filename+"[authenticationCompleted()] authenticationCompleted called"),this.log("electron",__filename+"[authenticationCompleted()] streamingTokens:",t),this.streamingTokens=t,this._webApi=new(ee())({userToken:e.data.Token,uhs:e.data.DisplayClaims.xui[0].uhs}),this._authentication._isAuthenticating=!1,this._authentication._isAuthenticated=!0,this._webApi.getProvider("profile").get("/users/me/profile/settings?settings=GameDisplayName,GameDisplayPicRaw,Gamerscore,Gamertag").then((t=>{if(t.profileUsers.length>0)for(const e in t.profileUsers[0].settings)"Gamertag"===t.profileUsers[0].settings[e].id?this._store.set("user.gamertag",t.profileUsers[0].settings[e].value):"GameDisplayPicRaw"===t.profileUsers[0].settings[e].id?this._store.set("user.gamerpic",t.profileUsers[0].settings[e].value):"Gamerscore"===t.profileUsers[0].settings[e].id&&this._store.set("user.gamerscore",t.profileUsers[0].settings[e].value);this._xboxWorker=new Q(this),this._ipc.onUserLoaded()})).catch((t=>{this.log("electron",__filename+"[authenticationCompleted()] Failed to retrieve user profile:",t),k.dialog.showMessageBox({message:"Error: Failed to retrieve user profile:"+i()(t),type:"error"})}))}openMainWindow(){this.log("electron",__filename+"[openMainWindow()] Creating new main window");this._mainWindow=N("main",function(t){for(var r=1;r{this.log("electron",__filename+"[openMainWindow()] Showing Main window.")})),this._mainWindow.on("close",(t=>{!0===this._isMac&&!1===this._isQuitting?(t.preventDefault(),this.log("electron",__filename+"[openMainWindow()] Main windows has been hidden"),this._mainWindow.hide()):(this.log("electron",__filename+"[openMainWindow()] Main windows has been closed"),this._mainWindow=void 0)}));const t=this._store.get("settings",$);console.log("settings:",t);const r=t.locale||"en";if(!0===this._isProduction&&!1===this._isCi)this._mainWindow.loadURL(`app://./${r}/home`);else{const t=process.argv[2]||3e3;this._mainWindow.loadURL(`http://localhost:${t}/${r}/home`)}}openGPUWindow(){this._gpuWindow=new k.BrowserWindow({width:800,height:600}),this._gpuWindow.loadURL("chrome://gpu"),this._gpuWindow.webContents.openDevTools()}quit(){k.app.quit()}restart(){this.quit(),k.app.relaunch()}}new ne})(),f})())); -//# sourceMappingURL=background.js.map \ No newline at end of file +(function webpackUniversalModuleDefinition(root, factory) { + if(typeof exports === 'object' && typeof module === 'object') + module.exports = factory(require("electron-serve"), require("electron-store"), require("debug"), require("ip-address"), require("axios"), require("compare-versions"), require("github-url-to-object"), require("jose"), require("uuid-1345"), require("xbox-webapi")); + else if(typeof define === 'function' && define.amd) + define(["electron-serve", "electron-store", "debug", "ip-address", "axios", "compare-versions", "github-url-to-object", "jose", "uuid-1345", "xbox-webapi"], factory); + else { + var a = typeof exports === 'object' ? factory(require("electron-serve"), require("electron-store"), require("debug"), require("ip-address"), require("axios"), require("compare-versions"), require("github-url-to-object"), require("jose"), require("uuid-1345"), require("xbox-webapi")) : factory(root["electron-serve"], root["electron-store"], root["debug"], root["ip-address"], root["axios"], root["compare-versions"], root["github-url-to-object"], root["jose"], root["uuid-1345"], root["xbox-webapi"]); + for(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i]; + } +})(global, (__WEBPACK_EXTERNAL_MODULE_electron_serve__, __WEBPACK_EXTERNAL_MODULE_electron_store__, __WEBPACK_EXTERNAL_MODULE_debug__, __WEBPACK_EXTERNAL_MODULE_ip_address__, __WEBPACK_EXTERNAL_MODULE_axios__, __WEBPACK_EXTERNAL_MODULE_compare_versions__, __WEBPACK_EXTERNAL_MODULE_github_url_to_object__, __WEBPACK_EXTERNAL_MODULE_jose__, __WEBPACK_EXTERNAL_MODULE_uuid_1345__, __WEBPACK_EXTERNAL_MODULE_xbox_webapi__) => { +return /******/ (() => { // webpackBootstrap +/******/ var __webpack_modules__ = ({ + +/***/ "./main/authentication.ts": +/*!********************************!*\ + !*** ./main/authentication.ts ***! + \********************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (/* binding */ Authentication) +/* harmony export */ }); +/* harmony import */ var _babel_runtime_corejs3_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime-corejs3/helpers/defineProperty */ "./node_modules/@babel/runtime-corejs3/helpers/defineProperty.js"); +/* harmony import */ var _babel_runtime_corejs3_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_json_stringify__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/json/stringify */ "./node_modules/@babel/runtime-corejs3/core-js-stable/json/stringify.js"); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_json_stringify__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_json_stringify__WEBPACK_IMPORTED_MODULE_1__); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_includes__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/includes */ "./node_modules/@babel/runtime-corejs3/core-js-stable/instance/includes.js"); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_includes__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_includes__WEBPACK_IMPORTED_MODULE_2__); +/* harmony import */ var electron__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! electron */ "electron"); +/* harmony import */ var electron__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(electron__WEBPACK_IMPORTED_MODULE_3__); +/* harmony import */ var _helpers__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./helpers */ "./main/helpers/index.ts"); +/* harmony import */ var _xal__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./xal */ "./main/xal/index.ts"); +/* harmony import */ var _helpers_tokenstore__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./helpers/tokenstore */ "./main/helpers/tokenstore.ts"); +/* harmony import */ var _renderer_context_userContext_defaults__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../renderer/context/userContext.defaults */ "./renderer/context/userContext.defaults.ts"); + + + + + + + + +class Authentication { + constructor(application) { + _babel_runtime_corejs3_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(this, "_application", void 0); + _babel_runtime_corejs3_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(this, "_tokenStore", void 0); + _babel_runtime_corejs3_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(this, "_xal", void 0); + _babel_runtime_corejs3_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(this, "_authWindow", void 0); + _babel_runtime_corejs3_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(this, "_authCallback", void 0); + _babel_runtime_corejs3_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(this, "_isAuthenticating", false); + _babel_runtime_corejs3_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(this, "_isAuthenticated", false); + _babel_runtime_corejs3_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(this, "_appLevel", 0); + this._application = application; + this._tokenStore = new _helpers_tokenstore__WEBPACK_IMPORTED_MODULE_6__["default"](); + this._tokenStore.load(); + this._xal = new _xal__WEBPACK_IMPORTED_MODULE_5__.Xal(this._tokenStore); + } + checkAuthentication() { + this._isAuthenticating = true; + this._isAuthenticated = false; + this._application.log('authenticationV2', '[checkAuthentication()] Starting token check...'); + if (this._tokenStore.hasValidAuthTokens()) { + this._application.log('authenticationV2', '[checkAuthentication()] Tokens are valid.'); + this.startSilentFlow(); + return true; + } else { + if (this._tokenStore.getUserToken() !== undefined) { + // We have a user token, lets try to refresh it. + this._application.log('authenticationV2', '[checkAuthentication()] Tokens are expired but we have a user token. Lets try to refresh the tokens.'); + this.startSilentFlow(); + return true; + } else { + this._application.log('authenticationV2', '[checkAuthentication()] No tokens are present.'); + return false; + } + } + } + startSilentFlow() { + this._application.log('authenticationV2', '[startSilentFlow()] Starting silent flow...'); + this._isAuthenticating = true; + this._xal.refreshTokens(this._tokenStore).then(() => { + this._application.log('authenticationV2', '[startSilentFlow()] Tokens have been refreshed'); + this.getStreamingToken(this._tokenStore).then(streamingTokens => { + if (streamingTokens.xCloudToken !== null) { + this._application.log('authenticationV2', '[startSilentFlow()] Retrieved both xHome and xCloud tokens'); + this._appLevel = 2; + } else { + this._application.log('authenticationV2', '[startSilentFlow()] Retrieved xHome token only'); + this._appLevel = 1; + } + this._xal.getWebToken(this._tokenStore).then(webToken => { + this._application.log('authenticationV2', __filename + '[startSilentFlow()] Web token received'); + this._application.authenticationCompleted(streamingTokens, webToken); + }).catch(error => { + this._application.log('authenticationV2', __filename + '[startSilentFlow()] Failed to retrieve web tokens:', error); + electron__WEBPACK_IMPORTED_MODULE_3__.dialog.showMessageBox({ + message: 'Error: Failed to retrieve web tokens:' + _babel_runtime_corejs3_core_js_stable_json_stringify__WEBPACK_IMPORTED_MODULE_1___default()(error), + type: 'error' + }); + }); + }).catch(err => { + this._application.log('authenticationV2', '[startSilentFlow()] Failed to retrieve streaming tokens:', err); + electron__WEBPACK_IMPORTED_MODULE_3__.dialog.showMessageBox({ + message: 'Error: Failed to retrieve streaming tokens:' + _babel_runtime_corejs3_core_js_stable_json_stringify__WEBPACK_IMPORTED_MODULE_1___default()(err), + type: 'error' + }); + }); + }).catch(err => { + this._application.log('authenticationV2', '[startSilentFlow()] Error refreshing tokens:', err); + electron__WEBPACK_IMPORTED_MODULE_3__.dialog.showMessageBox({ + message: '[startSilentFlow()] Error refreshing tokens:' + _babel_runtime_corejs3_core_js_stable_json_stringify__WEBPACK_IMPORTED_MODULE_1___default()(err), + type: 'error' + }); + this._tokenStore.clear(); + }); + } + startAuthflow() { + this._application.log('authenticationV2', '[startAuthflow()] Starting authentication flow'); + this._xal.getRedirectUri().then(redirect => { + this.openAuthWindow(redirect.sisuAuth.MsaOauthRedirect); + this._authCallback = redirectUri => { + this._isAuthenticating = true; + this._application.log('authenticationV2', '[startAuthFlow()] Got redirect URI:', redirectUri); + this._xal.authenticateUser(this._tokenStore, redirect, redirectUri).then(result => { + this._application.log('authenticationV2', '[startAuthFlow()] Authenticated user:', result); + this.startSilentFlow(); + }).catch(err => { + this._application.log('authenticationV2', '[startAuthFlow()] Error authenticating user:', err); + electron__WEBPACK_IMPORTED_MODULE_3__.dialog.showErrorBox('Error', 'Error authenticating user. Error details: ' + _babel_runtime_corejs3_core_js_stable_json_stringify__WEBPACK_IMPORTED_MODULE_1___default()(err)); + }); + }; + }).catch(err => { + this._application.log('authenticationV2', '[startAuthFlow()] Error getting redirect URI:', err); + electron__WEBPACK_IMPORTED_MODULE_3__.dialog.showErrorBox('Error', 'Error getting redirect URI. Error details: ' + _babel_runtime_corejs3_core_js_stable_json_stringify__WEBPACK_IMPORTED_MODULE_1___default()(err)); + }); + } + startWebviewHooks() { + this._application.log('authenticationV2', '[startWebviewHooks()] Starting webview hooks'); + electron__WEBPACK_IMPORTED_MODULE_3__.session.defaultSession.webRequest.onHeadersReceived({ + urls: ['https://login.live.com/oauth20_authorize.srf?*', 'https://login.live.com/ppsecure/post.srf?*'] + }, (details, callback) => { + var _context; + if (details.responseHeaders.Location !== undefined && _babel_runtime_corejs3_core_js_stable_instance_includes__WEBPACK_IMPORTED_MODULE_2___default()(_context = details.responseHeaders.Location[0]).call(_context, this._xal._app.RedirectUri)) { + this._application.log('authenticationV2', '[startWebviewHooks()] Got redirect URI from OAUTH:', details.responseHeaders.Location[0]); + this._authWindow.close(); + if (this._authCallback !== undefined) { + this._authCallback(details.responseHeaders.Location[0]); + } else { + this._application.log('authenticationV2', '[startWebviewHooks()] Authentication Callback is not defined:', this._authCallback); + electron__WEBPACK_IMPORTED_MODULE_3__.dialog.showErrorBox('Error', 'Authentication Callback is not defined. Error details: ' + _babel_runtime_corejs3_core_js_stable_json_stringify__WEBPACK_IMPORTED_MODULE_1___default()(this._authCallback)); + } + callback({ + cancel: true + }); + } else { + callback(details); + } + }); + } + openAuthWindow(url) { + const authWindow = (0,_helpers__WEBPACK_IMPORTED_MODULE_4__.createWindow)('auth', { + width: 500, + height: 600, + title: 'Authentication' + }); + authWindow.loadURL(url); + this._authWindow = authWindow; + this._authWindow.on('close', () => { + this._application.log('authenticationV2', '[openAuthWindow()] Closed auth window'); + // @TODO: What to do? + }); + } + async getStreamingToken(tokenStore) { + console.log('getStreamingToken'); + const sisuToken = tokenStore.getSisuToken(); + if (sisuToken === undefined) throw new Error('Sisu token is missing. Please authenticate first'); + const xstsToken = await this._xal.doXstsAuthorization(sisuToken, 'http://gssv.xboxlive.com/'); + console.log('this._xal._xhomeToken:', this._xal._xhomeToken); + if (this._xal._xhomeToken === undefined || this._xal._xhomeToken.getSecondsValid() <= 60) { + this._xal._xhomeToken = await this._xal.getStreamToken(xstsToken, 'xhome'); + } + console.log('this._xal._xcloudToken:', this._xal._xcloudToken); + const settings = this._application._store.get('settings', _renderer_context_userContext_defaults__WEBPACK_IMPORTED_MODULE_7__.defaultSettings); + if (!this._xal._xcloudToken || this._xal._xcloudToken.getSecondsValid() <= 60) { + try { + this._xal._xcloudToken = await this._xal.getStreamToken(xstsToken, 'xgpuweb', settings.force_region_ip); + } catch (error) { + try { + this._xal._xcloudToken = await this._xal.getStreamToken(xstsToken, 'xgpuwebf2p', settings.force_region_ip); + } catch (error) { + this._xal._xcloudToken = null; + } + } + } + return { + xHomeToken: this._xal._xhomeToken, + xCloudToken: this._xal._xcloudToken + }; + } +} + +/***/ }), + +/***/ "./main/helpers/create-window.ts": +/*!***************************************!*\ + !*** ./main/helpers/create-window.ts ***! + \***************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _babel_runtime_corejs3_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime-corejs3/helpers/defineProperty */ "./node_modules/@babel/runtime-corejs3/helpers/defineProperty.js"); +/* harmony import */ var _babel_runtime_corejs3_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_object_assign__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/object/assign */ "./node_modules/@babel/runtime-corejs3/core-js-stable/object/assign.js"); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_object_assign__WEBPACK_IMPORTED_MODULE_9___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_object_assign__WEBPACK_IMPORTED_MODULE_9__); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_some__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/some */ "./node_modules/@babel/runtime-corejs3/core-js-stable/instance/some.js"); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_some__WEBPACK_IMPORTED_MODULE_10___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_some__WEBPACK_IMPORTED_MODULE_10__); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_object_keys__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/object/keys */ "./node_modules/@babel/runtime-corejs3/core-js-stable/object/keys.js"); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_object_keys__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_object_keys__WEBPACK_IMPORTED_MODULE_1__); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_object_get_own_property_symbols__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/object/get-own-property-symbols */ "./node_modules/@babel/runtime-corejs3/core-js-stable/object/get-own-property-symbols.js"); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_object_get_own_property_symbols__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_object_get_own_property_symbols__WEBPACK_IMPORTED_MODULE_2__); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_filter__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/filter */ "./node_modules/@babel/runtime-corejs3/core-js-stable/instance/filter.js"); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_filter__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_filter__WEBPACK_IMPORTED_MODULE_3__); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_object_get_own_property_descriptor__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/object/get-own-property-descriptor */ "./node_modules/@babel/runtime-corejs3/core-js-stable/object/get-own-property-descriptor.js"); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_object_get_own_property_descriptor__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_object_get_own_property_descriptor__WEBPACK_IMPORTED_MODULE_4__); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_for_each__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/for-each */ "./node_modules/@babel/runtime-corejs3/core-js-stable/instance/for-each.js"); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_for_each__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_for_each__WEBPACK_IMPORTED_MODULE_5__); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_object_get_own_property_descriptors__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/object/get-own-property-descriptors */ "./node_modules/@babel/runtime-corejs3/core-js-stable/object/get-own-property-descriptors.js"); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_object_get_own_property_descriptors__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_object_get_own_property_descriptors__WEBPACK_IMPORTED_MODULE_6__); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_object_define_properties__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/object/define-properties */ "./node_modules/@babel/runtime-corejs3/core-js-stable/object/define-properties.js"); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_object_define_properties__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_object_define_properties__WEBPACK_IMPORTED_MODULE_7__); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_object_define_property__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/object/define-property */ "./node_modules/@babel/runtime-corejs3/core-js-stable/object/define-property.js"); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_object_define_property__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_object_define_property__WEBPACK_IMPORTED_MODULE_8__); +/* harmony import */ var electron__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! electron */ "electron"); +/* harmony import */ var electron__WEBPACK_IMPORTED_MODULE_11___default = /*#__PURE__*/__webpack_require__.n(electron__WEBPACK_IMPORTED_MODULE_11__); +/* harmony import */ var electron_store__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! electron-store */ "electron-store"); +/* harmony import */ var electron_store__WEBPACK_IMPORTED_MODULE_12___default = /*#__PURE__*/__webpack_require__.n(electron_store__WEBPACK_IMPORTED_MODULE_12__); +/* harmony import */ var node_path__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! node:path */ "node:path"); +/* harmony import */ var node_path__WEBPACK_IMPORTED_MODULE_13___default = /*#__PURE__*/__webpack_require__.n(node_path__WEBPACK_IMPORTED_MODULE_13__); + +function ownKeys(e, r) { var t = _babel_runtime_corejs3_core_js_stable_object_keys__WEBPACK_IMPORTED_MODULE_1___default()(e); if ((_babel_runtime_corejs3_core_js_stable_object_get_own_property_symbols__WEBPACK_IMPORTED_MODULE_2___default())) { var o = _babel_runtime_corejs3_core_js_stable_object_get_own_property_symbols__WEBPACK_IMPORTED_MODULE_2___default()(e); r && (o = _babel_runtime_corejs3_core_js_stable_instance_filter__WEBPACK_IMPORTED_MODULE_3___default()(o).call(o, function (r) { return _babel_runtime_corejs3_core_js_stable_object_get_own_property_descriptor__WEBPACK_IMPORTED_MODULE_4___default()(e, r).enumerable; })), t.push.apply(t, o); } return t; } +function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var _context2, _context3; var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? _babel_runtime_corejs3_core_js_stable_instance_for_each__WEBPACK_IMPORTED_MODULE_5___default()(_context2 = ownKeys(Object(t), !0)).call(_context2, function (r) { _babel_runtime_corejs3_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(e, r, t[r]); }) : (_babel_runtime_corejs3_core_js_stable_object_get_own_property_descriptors__WEBPACK_IMPORTED_MODULE_6___default()) ? _babel_runtime_corejs3_core_js_stable_object_define_properties__WEBPACK_IMPORTED_MODULE_7___default()(e, _babel_runtime_corejs3_core_js_stable_object_get_own_property_descriptors__WEBPACK_IMPORTED_MODULE_6___default()(t)) : _babel_runtime_corejs3_core_js_stable_instance_for_each__WEBPACK_IMPORTED_MODULE_5___default()(_context3 = ownKeys(Object(t))).call(_context3, function (r) { _babel_runtime_corejs3_core_js_stable_object_define_property__WEBPACK_IMPORTED_MODULE_8___default()(e, r, _babel_runtime_corejs3_core_js_stable_object_get_own_property_descriptor__WEBPACK_IMPORTED_MODULE_4___default()(t, r)); }); } return e; } + + + + + + + + + + + + + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ((windowName, options) => { + const key = 'window-state'; + const name = `window-state-v2-${windowName}`; + const store = new (electron_store__WEBPACK_IMPORTED_MODULE_12___default())({ + name + }); + const defaultSize = { + width: options.width, + height: options.height + }; + let state = {}; + const restore = () => store.get(key, defaultSize); + const getCurrentPosition = () => { + win.removeMenu(); + const position = win.getPosition(); + const size = win.getSize(); + return { + x: position[0], + y: position[1], + width: size[0], + height: size[1] + }; + }; + const windowWithinBounds = (windowState, bounds) => { + return windowState.x >= bounds.x && windowState.y >= bounds.y && windowState.x + windowState.width <= bounds.x + bounds.width && windowState.y + windowState.height <= bounds.y + bounds.height; + }; + const resetToDefaults = () => { + const bounds = electron__WEBPACK_IMPORTED_MODULE_11__.screen.getPrimaryDisplay().bounds; + return _babel_runtime_corejs3_core_js_stable_object_assign__WEBPACK_IMPORTED_MODULE_9___default()({}, defaultSize, { + x: (bounds.width - defaultSize.width) / 2, + y: (bounds.height - defaultSize.height) / 2 + }); + }; + const ensureVisibleOnSomeDisplay = windowState => { + var _context; + const visible = _babel_runtime_corejs3_core_js_stable_instance_some__WEBPACK_IMPORTED_MODULE_10___default()(_context = electron__WEBPACK_IMPORTED_MODULE_11__.screen.getAllDisplays()).call(_context, display => { + return windowWithinBounds(windowState, display.bounds); + }); + if (!visible) { + // Window is partially or fully not visible now. + // Reset it to safe defaults. + return resetToDefaults(); + } + return windowState; + }; + const saveState = () => { + if (!win.isMinimized() && !win.isMaximized()) { + _babel_runtime_corejs3_core_js_stable_object_assign__WEBPACK_IMPORTED_MODULE_9___default()(state, getCurrentPosition()); + } + store.set(key, state); + }; + state = ensureVisibleOnSomeDisplay(restore()); + const browserOptions = _objectSpread(_objectSpread({}, options), {}, { + // ...state, + webPreferences: _objectSpread({ + // nodeIntegration: true, + // contextIsolation: false, + nodeIntegration: false, + contextIsolation: true, + enableBlinkFeatures: '', + sandbox: false, + preload: node_path__WEBPACK_IMPORTED_MODULE_13___default().join(__dirname, 'preload.js') + }, options.webPreferences), + autoHideMenuBar: true + }); + const win = new electron__WEBPACK_IMPORTED_MODULE_11__.BrowserWindow(browserOptions); + win.on('close', saveState); + return win; +}); + +/***/ }), + +/***/ "./main/helpers/http.ts": +/*!******************************!*\ + !*** ./main/helpers/http.ts ***! + \******************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (/* binding */ Http) +/* harmony export */ }); +/* harmony import */ var _babel_runtime_corejs3_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime-corejs3/helpers/defineProperty */ "./node_modules/@babel/runtime-corejs3/helpers/defineProperty.js"); +/* harmony import */ var _babel_runtime_corejs3_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_promise__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/promise */ "./node_modules/@babel/runtime-corejs3/core-js-stable/promise.js"); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_promise__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_promise__WEBPACK_IMPORTED_MODULE_1__); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_set_timeout__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/set-timeout */ "./node_modules/@babel/runtime-corejs3/core-js-stable/set-timeout.js"); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_set_timeout__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_set_timeout__WEBPACK_IMPORTED_MODULE_2__); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_object_assign__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/object/assign */ "./node_modules/@babel/runtime-corejs3/core-js-stable/object/assign.js"); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_object_assign__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_object_assign__WEBPACK_IMPORTED_MODULE_3__); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_json_stringify__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/json/stringify */ "./node_modules/@babel/runtime-corejs3/core-js-stable/json/stringify.js"); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_json_stringify__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_json_stringify__WEBPACK_IMPORTED_MODULE_4__); +/* harmony import */ var https__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! https */ "https"); +/* harmony import */ var https__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(https__WEBPACK_IMPORTED_MODULE_5__); + + + + + + +class Http { + constructor(application) { + _babel_runtime_corejs3_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(this, "_application", void 0); + this._application = application; + } + get(host, url, method = 'GET') { + return new (_babel_runtime_corejs3_core_js_stable_promise__WEBPACK_IMPORTED_MODULE_1___default())((resolve, reject) => { + let responseData = ''; + const req = https__WEBPACK_IMPORTED_MODULE_5___default().request({ + host: host, + path: url, + method: method, + headers: { + 'Content-Type': 'application/json' + } + }, response => { + response.on('data', data => { + responseData += data; + }); + response.on('end', () => { + if (response.statusCode >= 200 && response.statusCode <= 299) { + this._application.log('HTTP', 'get(' + url + ', ' + method + ') resolve:', response.statusCode); + let returnData = responseData; + try { + returnData = JSON.parse(responseData); + } catch (error) { + // Data is not JSON.. + } + if (response.statusCode === 204) { + // We have to retry.. + _babel_runtime_corejs3_core_js_stable_set_timeout__WEBPACK_IMPORTED_MODULE_2___default()(() => { + this.get(url, method).then(result => { + resolve(result); + }).catch(error => { + reject(error); + }); + }, 750); + } else { + resolve(returnData); + } + } else { + this._application.log('HTTP', 'get(' + url + ') reject:', response.statusCode); + reject({ + url: url, + status: response.statusCode, + body: responseData + }); + } + }); + }); + req.on('error', error => { + reject(error); + }); + req.end(); + }); + } + post(host, url, postData = {}, headers = {}) { + return new (_babel_runtime_corejs3_core_js_stable_promise__WEBPACK_IMPORTED_MODULE_1___default())((resolve, reject) => { + let responseData = ''; + const mergedHeaders = _babel_runtime_corejs3_core_js_stable_object_assign__WEBPACK_IMPORTED_MODULE_3___default()({}, { + 'Content-Type': 'application/json' + }, headers); + const req = https__WEBPACK_IMPORTED_MODULE_5___default().request({ + host: host, + path: url, + method: 'POST', + headers: mergedHeaders + }, response => { + response.on('data', data => { + responseData += data; + }); + response.on('end', () => { + if (response.statusCode >= 200 && response.statusCode <= 299) { + this._application.log('HTTP', 'post(' + url + ') resolve:', response.statusCode, responseData.substring(0, 100)); + let returnData = responseData; + try { + returnData = JSON.parse(responseData); + } catch (error) { + // Data is not JSON.. + } + resolve(returnData); + } else { + this._application.log('HTTP', 'post(' + url + ') reject:', response.statusCode); + reject({ + url: url, + status: response.statusCode, + body: responseData + }); + } + }); + }); + req.on('error', error => { + reject(error); + }); + req.write(_babel_runtime_corejs3_core_js_stable_json_stringify__WEBPACK_IMPORTED_MODULE_4___default()(postData)); + req.end(); + }); + } +} + +/***/ }), + +/***/ "./main/helpers/index.ts": +/*!*******************************!*\ + !*** ./main/helpers/index.ts ***! + \*******************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ createWindow: () => (/* reexport safe */ _create_window__WEBPACK_IMPORTED_MODULE_0__["default"]), +/* harmony export */ updater: () => (/* reexport safe */ _updater__WEBPACK_IMPORTED_MODULE_3__.setUpdateNotification), +/* harmony export */ xCloudApi: () => (/* reexport safe */ _xcloudapi__WEBPACK_IMPORTED_MODULE_1__["default"]), +/* harmony export */ xboxWorker: () => (/* reexport safe */ _xboxWorker__WEBPACK_IMPORTED_MODULE_2__["default"]) +/* harmony export */ }); +/* harmony import */ var _create_window__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./create-window */ "./main/helpers/create-window.ts"); +/* harmony import */ var _xcloudapi__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./xcloudapi */ "./main/helpers/xcloudapi.ts"); +/* harmony import */ var _xboxWorker__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./xboxWorker */ "./main/helpers/xboxWorker.ts"); +/* harmony import */ var _updater__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./updater */ "./main/helpers/updater.ts"); + + + + + + +/***/ }), + +/***/ "./main/helpers/streammanager.ts": +/*!***************************************!*\ + !*** ./main/helpers/streammanager.ts ***! + \***************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (/* binding */ StreamManager) +/* harmony export */ }); +/* harmony import */ var _babel_runtime_corejs3_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime-corejs3/helpers/defineProperty */ "./node_modules/@babel/runtime-corejs3/helpers/defineProperty.js"); +/* harmony import */ var _babel_runtime_corejs3_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_promise__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/promise */ "./node_modules/@babel/runtime-corejs3/core-js-stable/promise.js"); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_promise__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_promise__WEBPACK_IMPORTED_MODULE_1__); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_set_timeout__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/set-timeout */ "./node_modules/@babel/runtime-corejs3/core-js-stable/set-timeout.js"); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_set_timeout__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_set_timeout__WEBPACK_IMPORTED_MODULE_2__); +/* harmony import */ var _xcloudapi__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./xcloudapi */ "./main/helpers/xcloudapi.ts"); + + + + +class StreamManager { + constructor(application) { + _babel_runtime_corejs3_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(this, "_application", void 0); + _babel_runtime_corejs3_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(this, "_sessions", {}); + this._application = application; + } + getApi(type) { + const streamingTokens = this._application.streamingTokens; + if (type === 'home') { + return new _xcloudapi__WEBPACK_IMPORTED_MODULE_3__["default"](this._application, streamingTokens.xHomeToken.getDefaultRegion().baseUri.substring(8), streamingTokens.xHomeToken.data.gsToken, "home"); + } else { + return new _xcloudapi__WEBPACK_IMPORTED_MODULE_3__["default"](this._application, streamingTokens.xCloudToken.getDefaultRegion().baseUri.substring(8), streamingTokens.xCloudToken.data.gsToken, "cloud"); + } + } + getSession(sessionId) { + return this._sessions[sessionId]; + } + startStream(type, target) { + return new (_babel_runtime_corejs3_core_js_stable_promise__WEBPACK_IMPORTED_MODULE_1___default())((resolve, reject) => { + this.getApi(type).startStream(target).then(playResult => { + // this._application._xCloudApi.startStream(type, target).then((playResult) => { + console.log('Streammanager - startStream:', playResult); + const sessionId = playResult.sessionPath.split('/')[3]; + const streamSession = { + id: sessionId, + target: target, + path: playResult.sessionPath, + type: type, + playerState: 'pending' + }; + this._sessions[sessionId] = streamSession; + this.monitorSession(sessionId); + resolve(sessionId); + }).catch(error => { + reject(error); + }); + }); + } + stopStream(sessionId) { + return new (_babel_runtime_corejs3_core_js_stable_promise__WEBPACK_IMPORTED_MODULE_1___default())((resolve, reject) => { + const session = this.getSession(sessionId); + if (session === undefined) { + reject('Session not found: ' + sessionId); + return; + } + this.getApi(session.type).stopStream(sessionId).then(result => { + console.log('Current sessions:', this._sessions); + delete this._sessions[sessionId]; + console.log('new sessions:', this._sessions); + resolve(result); + }).catch(error => { + reject(error); + }); + }); + } + sendSdp(sessionId, sdp) { + return new (_babel_runtime_corejs3_core_js_stable_promise__WEBPACK_IMPORTED_MODULE_1___default())((resolve, reject) => { + const session = this.getSession(sessionId); + if (session === undefined) { + reject('Session not found: ' + sessionId); + return; + } + this.getApi(session.type).sendSdp(sessionId, sdp).then(result => { + resolve(result); + }).catch(error => { + reject(error); + }); + }); + } + sendChatSdp(sessionId, sdp) { + return new (_babel_runtime_corejs3_core_js_stable_promise__WEBPACK_IMPORTED_MODULE_1___default())((resolve, reject) => { + const session = this.getSession(sessionId); + if (session === undefined) { + reject('Session not found: ' + sessionId); + return; + } + this.getApi(session.type).sendChatSdp(sessionId, sdp).then(result => { + resolve(result); + }).catch(error => { + reject(error); + }); + }); + } + sendIce(sessionId, ice) { + return new (_babel_runtime_corejs3_core_js_stable_promise__WEBPACK_IMPORTED_MODULE_1___default())((resolve, reject) => { + const session = this.getSession(sessionId); + if (session === undefined) { + reject('Session not found: ' + sessionId); + return; + } + this.getApi(session.type).sendIce(sessionId, ice).then(result => { + resolve(result); + }).catch(error => { + reject(error); + }); + }); + } + sendKeepalive(sessionId) { + return new (_babel_runtime_corejs3_core_js_stable_promise__WEBPACK_IMPORTED_MODULE_1___default())((resolve, reject) => { + const session = this.getSession(sessionId); + if (session === undefined) { + reject('Session not found: ' + sessionId); + return; + } + this.getApi(session.type).sendKeepalive(sessionId).then(result => { + resolve(result); + }).catch(error => { + reject(error); + }); + }); + } + monitorSession(sessionId) { + _babel_runtime_corejs3_core_js_stable_set_timeout__WEBPACK_IMPORTED_MODULE_2___default()(() => { + this._application.log('StreamManager', 'monitorSession(' + sessionId + ') checking state'); + const session = this.getSession(sessionId); + if (session === undefined) { + this._application.log('StreamManager', 'monitorSession(' + sessionId + ') session not found'); + return; + } + this.getApi(this.getSession(sessionId).type).getStreamState(sessionId).then(result => { + console.log('Streammanager - state:', result); + this.getSession(sessionId).state = result.state; + if (result.state === 'Provisioned') { + this.getSession(sessionId).playerState = 'started'; + } else if (result.state === 'Provisioning') { + // Lets loop again + this.monitorSession(sessionId); + } else if (result.state === 'ReadyToConnect') { + // Do MSAL Auth + // @TODO: Refresh token if expired? + this._application._authentication._xal.getMsalToken(this._application._authentication._tokenStore).then(msalToken => { + this.getApi(this.getSession(sessionId).type).sendMSALAuth(sessionId, msalToken.data.lpt).then(() => { + this.monitorSession(sessionId); + }).catch(error => { + console.log('MSAL AUTH Error:', error); + alert('MSAL AUTH Error:' + error); + }); + }).catch(error => { + console.log('MSAL AUTH Error:', error); + alert('MSAL AUTH Error:' + error); + }); + } else if (result.state === 'WaitingForResources') { + // Do Queue logic + if (this.getSession(sessionId).waitingTimes === undefined) { + this.getApi(this.getSession(sessionId).type).getWaitingTimes(this.getSession(sessionId).target).then(waitingTimes => { + this.getSession(sessionId).waitingTimes = waitingTimes; + this.getSession(sessionId).playerState = 'queued'; + }); + } + this.monitorSession(sessionId); + } else if (result.state === 'Failed') { + this.getSession(sessionId).errorDetails = result.errorDetails; + this.getSession(sessionId).playerState = 'failed'; + } else { + console.log('Unknown state:', result); + } + }).catch(error => { + console.log('Streammanager - error checking state:', sessionId, error); + if (error.status === 404) { + this._application.log('StreamManager', 'Session not found on server. Removing session...'); + delete this._sessions[sessionId]; + } else { + this.monitorSession(sessionId); + } + }); + }, 1000); + } + getActiveSessions() { + return new (_babel_runtime_corejs3_core_js_stable_promise__WEBPACK_IMPORTED_MODULE_1___default())((resolve, reject) => { + this.getApi('cloud').getActiveSessions().then(result => { + console.log('Active sessions:', result); + resolve(result); + }).catch(error => { + reject(error); + }); + }); + } +} + +/***/ }), + +/***/ "./main/helpers/titlemanager.ts": +/*!**************************************!*\ + !*** ./main/helpers/titlemanager.ts ***! + \**************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Title: () => (/* binding */ Title), +/* harmony export */ "default": () => (/* binding */ TitleManager) +/* harmony export */ }); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_object_keys__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/object/keys */ "./node_modules/@babel/runtime-corejs3/core-js-stable/object/keys.js"); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_object_keys__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_object_keys__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_object_get_own_property_symbols__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/object/get-own-property-symbols */ "./node_modules/@babel/runtime-corejs3/core-js-stable/object/get-own-property-symbols.js"); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_object_get_own_property_symbols__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_object_get_own_property_symbols__WEBPACK_IMPORTED_MODULE_1__); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_filter__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/filter */ "./node_modules/@babel/runtime-corejs3/core-js-stable/instance/filter.js"); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_filter__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_filter__WEBPACK_IMPORTED_MODULE_2__); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_object_get_own_property_descriptor__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/object/get-own-property-descriptor */ "./node_modules/@babel/runtime-corejs3/core-js-stable/object/get-own-property-descriptor.js"); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_object_get_own_property_descriptor__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_object_get_own_property_descriptor__WEBPACK_IMPORTED_MODULE_3__); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_object_get_own_property_descriptors__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/object/get-own-property-descriptors */ "./node_modules/@babel/runtime-corejs3/core-js-stable/object/get-own-property-descriptors.js"); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_object_get_own_property_descriptors__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_object_get_own_property_descriptors__WEBPACK_IMPORTED_MODULE_4__); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_object_define_properties__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/object/define-properties */ "./node_modules/@babel/runtime-corejs3/core-js-stable/object/define-properties.js"); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_object_define_properties__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_object_define_properties__WEBPACK_IMPORTED_MODULE_5__); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_object_define_property__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/object/define-property */ "./node_modules/@babel/runtime-corejs3/core-js-stable/object/define-property.js"); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_object_define_property__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_object_define_property__WEBPACK_IMPORTED_MODULE_6__); +/* harmony import */ var _babel_runtime_corejs3_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @babel/runtime-corejs3/helpers/defineProperty */ "./node_modules/@babel/runtime-corejs3/helpers/defineProperty.js"); +/* harmony import */ var _babel_runtime_corejs3_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_7__); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_promise__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/promise */ "./node_modules/@babel/runtime-corejs3/core-js-stable/promise.js"); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_promise__WEBPACK_IMPORTED_MODULE_9___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_promise__WEBPACK_IMPORTED_MODULE_9__); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_array_is_array__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/array/is-array */ "./node_modules/@babel/runtime-corejs3/core-js-stable/array/is-array.js"); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_array_is_array__WEBPACK_IMPORTED_MODULE_10___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_array_is_array__WEBPACK_IMPORTED_MODULE_10__); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_for_each__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/for-each */ "./node_modules/@babel/runtime-corejs3/core-js-stable/instance/for-each.js"); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_for_each__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_for_each__WEBPACK_IMPORTED_MODULE_8__); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_set__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/set */ "./node_modules/@babel/runtime-corejs3/core-js-stable/set.js"); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_set__WEBPACK_IMPORTED_MODULE_11___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_set__WEBPACK_IMPORTED_MODULE_11__); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_sort__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/sort */ "./node_modules/@babel/runtime-corejs3/core-js-stable/instance/sort.js"); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_sort__WEBPACK_IMPORTED_MODULE_12___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_sort__WEBPACK_IMPORTED_MODULE_12__); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_json_stringify__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/json/stringify */ "./node_modules/@babel/runtime-corejs3/core-js-stable/json/stringify.js"); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_json_stringify__WEBPACK_IMPORTED_MODULE_13___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_json_stringify__WEBPACK_IMPORTED_MODULE_13__); +/* harmony import */ var _http__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./http */ "./main/helpers/http.ts"); +/* harmony import */ var electron_store__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! electron-store */ "electron-store"); +/* harmony import */ var electron_store__WEBPACK_IMPORTED_MODULE_15___default = /*#__PURE__*/__webpack_require__.n(electron_store__WEBPACK_IMPORTED_MODULE_15__); +/* harmony import */ var axios__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! axios */ "axios"); +/* harmony import */ var axios__WEBPACK_IMPORTED_MODULE_16___default = /*#__PURE__*/__webpack_require__.n(axios__WEBPACK_IMPORTED_MODULE_16__); + + + + + + + + +function ownKeys(e, r) { var t = _babel_runtime_corejs3_core_js_stable_object_keys__WEBPACK_IMPORTED_MODULE_0___default()(e); if ((_babel_runtime_corejs3_core_js_stable_object_get_own_property_symbols__WEBPACK_IMPORTED_MODULE_1___default())) { var o = _babel_runtime_corejs3_core_js_stable_object_get_own_property_symbols__WEBPACK_IMPORTED_MODULE_1___default()(e); r && (o = _babel_runtime_corejs3_core_js_stable_instance_filter__WEBPACK_IMPORTED_MODULE_2___default()(o).call(o, function (r) { return _babel_runtime_corejs3_core_js_stable_object_get_own_property_descriptor__WEBPACK_IMPORTED_MODULE_3___default()(e, r).enumerable; })), t.push.apply(t, o); } return t; } +function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var _context, _context2; var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? _babel_runtime_corejs3_core_js_stable_instance_for_each__WEBPACK_IMPORTED_MODULE_8___default()(_context = ownKeys(Object(t), !0)).call(_context, function (r) { _babel_runtime_corejs3_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_7___default()(e, r, t[r]); }) : (_babel_runtime_corejs3_core_js_stable_object_get_own_property_descriptors__WEBPACK_IMPORTED_MODULE_4___default()) ? _babel_runtime_corejs3_core_js_stable_object_define_properties__WEBPACK_IMPORTED_MODULE_5___default()(e, _babel_runtime_corejs3_core_js_stable_object_get_own_property_descriptors__WEBPACK_IMPORTED_MODULE_4___default()(t)) : _babel_runtime_corejs3_core_js_stable_instance_for_each__WEBPACK_IMPORTED_MODULE_8___default()(_context2 = ownKeys(Object(t))).call(_context2, function (r) { _babel_runtime_corejs3_core_js_stable_object_define_property__WEBPACK_IMPORTED_MODULE_6___default()(e, r, _babel_runtime_corejs3_core_js_stable_object_get_own_property_descriptor__WEBPACK_IMPORTED_MODULE_3___default()(t, r)); }); } return e; } + + + + + + + + + +class TitleManager { + constructor(application) { + _babel_runtime_corejs3_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_7___default()(this, "_application", void 0); + _babel_runtime_corejs3_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_7___default()(this, "_store", new (electron_store__WEBPACK_IMPORTED_MODULE_15___default())()); + _babel_runtime_corejs3_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_7___default()(this, "_http", void 0); + _babel_runtime_corejs3_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_7___default()(this, "_xCloudTitles", {}); + _babel_runtime_corejs3_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_7___default()(this, "_productIdQueue", []); + _babel_runtime_corejs3_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_7___default()(this, "_xCloudRecentTitles", {}); + _babel_runtime_corejs3_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_7___default()(this, "_xCloudRecentTitlesLastUpdate", 0); + this._application = application; + this._http = new _http__WEBPACK_IMPORTED_MODULE_14__["default"](this._application); + } + getOfficialTitles() { + return new (_babel_runtime_corejs3_core_js_stable_promise__WEBPACK_IMPORTED_MODULE_9___default())(resolve => { + let officialTitles = []; + axios__WEBPACK_IMPORTED_MODULE_16___default().get('https://cdn.jsdelivr.net/gh/Geocld/XStreaming@main/titles.json', { + timeout: 30 + }).then(res => { + if (res.status === 200) { + officialTitles = res.data.Products; + console.log('officialTitles:', officialTitles); + } + resolve(officialTitles); + }).catch(e => { + resolve([]); + }); + }); + } + getGamePassProducts(titles) { + return new (_babel_runtime_corejs3_core_js_stable_promise__WEBPACK_IMPORTED_MODULE_9___default())((resolve, reject) => { + const productIdQueue = []; + if (!_babel_runtime_corejs3_core_js_stable_array_is_array__WEBPACK_IMPORTED_MODULE_10___default()(titles)) { + resolve([]); + } + _babel_runtime_corejs3_core_js_stable_instance_for_each__WEBPACK_IMPORTED_MODULE_8___default()(titles).call(titles, title => { + if (title.details && title.details.productId) { + productIdQueue.push(title.details.productId); + } + }); + this.getOfficialTitles().then(officialTitles => { + const mergeProductIds = [...new (_babel_runtime_corejs3_core_js_stable_set__WEBPACK_IMPORTED_MODULE_11___default())([...productIdQueue, ...officialTitles])]; + this._http.post('catalog.gamepass.com', '/v3/products?market=US&language=en-US&hydration=RemoteHighSapphire0', { + // RemoteLowJade0 + 'Products': mergeProductIds + }, { + 'ms-cv': 0, + 'calling-app-name': 'Xbox Cloud Gaming Web', + 'calling-app-version': '24.17.63' + }).then(result => { + const products = result.Products; + const mergedTitles = []; + for (const key in products) { + mergedTitles.push(_objectSpread({ + productId: key + }, products[key])); + } + _babel_runtime_corejs3_core_js_stable_instance_sort__WEBPACK_IMPORTED_MODULE_12___default()(mergedTitles).call(mergedTitles, (a, b) => a.ProductTitle.localeCompare(b.ProductTitle)); + resolve(mergedTitles); + }).catch(e => { + console.log('getGamePassProducts error:', e); + reject(e); + }); + }); + }); + } + getNewTitles() { + return this._http.get('catalog.gamepass.com', '/sigls/v2?id=f13cf6b4-57e6-4459-89df-6aec18cf0538&market=US&language=en-US'); + } +} +class Title { + constructor(title) { + _babel_runtime_corejs3_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_7___default()(this, "titleId", void 0); + _babel_runtime_corejs3_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_7___default()(this, "productId", void 0); + _babel_runtime_corejs3_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_7___default()(this, "xboxTitleId", void 0); + _babel_runtime_corejs3_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_7___default()(this, "supportedInputTypes", void 0); + _babel_runtime_corejs3_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_7___default()(this, "catalogDetails", void 0); + this.titleId = title.titleId; + this.productId = title.details.productId; + this.xboxTitleId = title.details.xboxTitleId; + this.supportedInputTypes = title.details.supportedInputTypes; + } + setCatalogDetails(titleInfo) { + this.catalogDetails = titleInfo; + } + toString() { + return _babel_runtime_corejs3_core_js_stable_json_stringify__WEBPACK_IMPORTED_MODULE_13___default()(this); + } + restoreFromCache(cachedObj) { + this.catalogDetails = cachedObj.catalogDetails; + } +} + +/***/ }), + +/***/ "./main/helpers/tokenstore.ts": +/*!************************************!*\ + !*** ./main/helpers/tokenstore.ts ***! + \************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (/* binding */ AuthTokenStore) +/* harmony export */ }); +/* harmony import */ var _babel_runtime_corejs3_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime-corejs3/helpers/defineProperty */ "./node_modules/@babel/runtime-corejs3/helpers/defineProperty.js"); +/* harmony import */ var _babel_runtime_corejs3_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_json_stringify__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/json/stringify */ "./node_modules/@babel/runtime-corejs3/core-js-stable/json/stringify.js"); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_json_stringify__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_json_stringify__WEBPACK_IMPORTED_MODULE_1__); +/* harmony import */ var _xal__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../xal */ "./main/xal/index.ts"); +/* harmony import */ var electron_store__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! electron-store */ "electron-store"); +/* harmony import */ var electron_store__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(electron_store__WEBPACK_IMPORTED_MODULE_3__); + + + + +class AuthTokenStore extends _xal__WEBPACK_IMPORTED_MODULE_2__.TokenStore { + constructor(...args) { + super(...args); + _babel_runtime_corejs3_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(this, "_store", new (electron_store__WEBPACK_IMPORTED_MODULE_3___default())()); + } + load() { + const tokens = this._store.get('user.tokenstore', '{}'); + this.loadJson(tokens); + return true; + } + save() { + const data = _babel_runtime_corejs3_core_js_stable_json_stringify__WEBPACK_IMPORTED_MODULE_1___default()({ + userToken: this._userToken?.data, + sisuToken: this._sisuToken?.data, + jwtKeys: this._jwtKeys + }); + this._store.set('user.tokenstore', data); + } + clear() { + this._store.delete('user.tokenstore'); + this._userToken = undefined; + this._sisuToken = undefined; + this._jwtKeys = undefined; + } +} + +/***/ }), + +/***/ "./main/helpers/updater.ts": +/*!*********************************!*\ + !*** ./main/helpers/updater.ts ***! + \*********************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ checkForUpdates: () => (/* binding */ checkForUpdates), +/* harmony export */ defaultOptions: () => (/* binding */ defaultOptions), +/* harmony export */ setUpdateNotification: () => (/* binding */ setUpdateNotification), +/* harmony export */ showUpdateDialog: () => (/* binding */ showUpdateDialog) +/* harmony export */ }); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_object_assign__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/object/assign */ "./node_modules/@babel/runtime-corejs3/core-js-stable/object/assign.js"); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_object_assign__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_object_assign__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_trim__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/trim */ "./node_modules/@babel/runtime-corejs3/core-js-stable/instance/trim.js"); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_trim__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_trim__WEBPACK_IMPORTED_MODULE_1__); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_set_immediate__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/set-immediate */ "./node_modules/@babel/runtime-corejs3/core-js-stable/set-immediate.js"); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_set_immediate__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_set_immediate__WEBPACK_IMPORTED_MODULE_2__); +/* harmony import */ var axios__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! axios */ "axios"); +/* harmony import */ var axios__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(axios__WEBPACK_IMPORTED_MODULE_3__); +/* harmony import */ var electron__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! electron */ "electron"); +/* harmony import */ var electron__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(electron__WEBPACK_IMPORTED_MODULE_4__); +/* harmony import */ var compare_versions__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! compare-versions */ "compare-versions"); +/* harmony import */ var compare_versions__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(compare_versions__WEBPACK_IMPORTED_MODULE_5__); +/* harmony import */ var github_url_to_object__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! github-url-to-object */ "github-url-to-object"); +/* harmony import */ var github_url_to_object__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(github_url_to_object__WEBPACK_IMPORTED_MODULE_6__); +/* harmony import */ var _package_json__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../../package.json */ "./package.json"); + + + + + + + + + +// Base code below from https://github.com/ankurk91/electron-update-notifier. Credits to @ankurk91. + +const defaultOptions = { + debug: false, + // force run in development + silent: true, + prereleases: false +}; +function setUpdateNotification(options = defaultOptions, logger) { + const withDefaults = _babel_runtime_corejs3_core_js_stable_object_assign__WEBPACK_IMPORTED_MODULE_0___default()(defaultOptions, options); + if (electron__WEBPACK_IMPORTED_MODULE_4___default().app.isReady()) { + checkForUpdates(withDefaults, logger); + } else { + electron__WEBPACK_IMPORTED_MODULE_4___default().app.on('ready', () => { + checkForUpdates(withDefaults, logger); + }); + } +} +async function checkForUpdates({ + repository, + token, + debug, + silent, + prereleases +} = defaultOptions, logger) { + logger.log('updater', __filename + '[checkForUpdates()] Running updater...', (electron__WEBPACK_IMPORTED_MODULE_4___default().app).isPackaged, debug); + if (!(electron__WEBPACK_IMPORTED_MODULE_4___default().app).isPackaged && !debug) { + logger.log('updater', __filename + '[checkForUpdates()] Not checking for updates because app is not packaged.'); + return; + } + if (!repository) { + // const pkg = require(path.join(electron.app.getAppPath(), 'package.json')) + const ghObj = github_url_to_object__WEBPACK_IMPORTED_MODULE_6___default()(_package_json__WEBPACK_IMPORTED_MODULE_7__.repository); + if (!ghObj) { + throw new Error('Repository URL not found in package.json file.'); + } + repository = ghObj.user + '/' + ghObj.repo; + } + let latestRelease = null; + try { + logger.log('updater', __filename + '[checkForUpdates()] Checking for updates on GitHub:', `https://api.github.com/repos/${repository}/releases`); + const { + data: releases + } = await axios__WEBPACK_IMPORTED_MODULE_3___default().get(`https://api.github.com/repos/${repository}/releases`, { + headers: token ? { + authorization: `token ${token}` + } : {} + }); + for (const release in releases) { + if (releases[release].prerelease === prereleases) { + latestRelease = releases[release]; + break; + } + } + } catch (error) { + console.error(error); + logger.log('updater', __filename + '[checkForUpdates()] Error while checking for updates:', error); + if (!silent) { + showDialog('Unable to check for updates at this moment. Try again.', 'error'); + } + } + if (!latestRelease) return; + if ((0,compare_versions__WEBPACK_IMPORTED_MODULE_5__.compare)(latestRelease.tag_name, electron__WEBPACK_IMPORTED_MODULE_4___default().app.getVersion(), '>')) { + logger.log('updater', __filename + '[checkForUpdates()] New version found:', latestRelease.tag_name); + showUpdateDialog(latestRelease); + } else { + logger.log('updater', __filename + '[checkForUpdates()] Application is newest version. Current version:', electron__WEBPACK_IMPORTED_MODULE_4___default().app.getVersion(), 'Newest version:', latestRelease.tag_name); + if (!silent) { + showDialog(`You are already running the latest version. Current version: ${electron__WEBPACK_IMPORTED_MODULE_4___default().app.getVersion()}. Newest version: ${latestRelease.tag_name}`); + } + } +} +function showUpdateDialog(release) { + var _context; + electron__WEBPACK_IMPORTED_MODULE_4___default().dialog.showMessageBox({ + title: electron__WEBPACK_IMPORTED_MODULE_4___default().app.getName(), + type: 'info', + message: 'New release available', + detail: _babel_runtime_corejs3_core_js_stable_instance_trim__WEBPACK_IMPORTED_MODULE_1___default()(_context = `Installed Version: ${electron__WEBPACK_IMPORTED_MODULE_4___default().app.getVersion()}\nLatest Version: ${release.tag_name}\n\n${release.body}`).call(_context), + buttons: ['Download', 'Later'], + defaultId: 0, + cancelId: 1 + }).then(({ + response + }) => { + if (response === 0) { + _babel_runtime_corejs3_core_js_stable_set_immediate__WEBPACK_IMPORTED_MODULE_2___default()(() => { + electron__WEBPACK_IMPORTED_MODULE_4___default().shell.openExternal(release.html_url); + }); + } + }).catch(error => { + throw new Error(error); + }); +} +const showDialog = (detail, type = 'info') => { + electron__WEBPACK_IMPORTED_MODULE_4___default().dialog.showMessageBox({ + title: electron__WEBPACK_IMPORTED_MODULE_4___default().app.getName(), + message: 'Update checker', + buttons: ['Close'], + defaultId: 0, + cancelId: 0, + type, + detail + }); +}; + +/***/ }), + +/***/ "./main/helpers/xboxWorker.ts": +/*!************************************!*\ + !*** ./main/helpers/xboxWorker.ts ***! + \************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (/* binding */ xboxWorker) +/* harmony export */ }); +/* harmony import */ var _babel_runtime_corejs3_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime-corejs3/helpers/defineProperty */ "./node_modules/@babel/runtime-corejs3/helpers/defineProperty.js"); +/* harmony import */ var _babel_runtime_corejs3_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_promise__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/promise */ "./node_modules/@babel/runtime-corejs3/core-js-stable/promise.js"); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_promise__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_promise__WEBPACK_IMPORTED_MODULE_1__); + + +class xboxWorker { + constructor(application) { + _babel_runtime_corejs3_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(this, "_application", void 0); + _babel_runtime_corejs3_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(this, "_friends", {}); + _babel_runtime_corejs3_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(this, "_onlineFriends", {}); + this._application = application; + + // setInterval(() => { + // this.intervalFriends() + // }, 30 * 1000) // Api is limited to 30 requests per 300 seconds. (300/30 = 10 sec) + + // this.intervalFriends() + } + intervalFriends() { + // console.log('xbox worker loop run') + + this.updateFriends().then(friends => { + // Get all friends + // console.log('xboxWorker - Updated friends successfully') + + // Send over online friends + const onlineFriends = []; + for (const friend in friends) { + if (friends[friend].presenceState !== 'Offline') { + onlineFriends.push(friends[friend]); + } + } + this._onlineFriends = onlineFriends; + }).catch(error => { + console.log('xboxWorker - Error updating friends:', error); + }); + } + updateFriends() { + return new (_babel_runtime_corejs3_core_js_stable_promise__WEBPACK_IMPORTED_MODULE_1___default())((resolve, reject) => { + this._application._webApi.getProvider('people').getFriends().then(friends => { + for (const friend in friends.people) { + this._friends[friends.people[friend].xuid] = friends.people[friend]; + } + resolve(this._friends); + }).catch(error => { + reject(error); + }); + }); + } +} + +/***/ }), + +/***/ "./main/helpers/xcloudapi.ts": +/*!***********************************!*\ + !*** ./main/helpers/xcloudapi.ts ***! + \***********************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (/* binding */ xCloudApi) +/* harmony export */ }); +/* harmony import */ var _babel_runtime_corejs3_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime-corejs3/helpers/defineProperty */ "./node_modules/@babel/runtime-corejs3/helpers/defineProperty.js"); +/* harmony import */ var _babel_runtime_corejs3_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_promise__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/promise */ "./node_modules/@babel/runtime-corejs3/core-js-stable/promise.js"); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_promise__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_promise__WEBPACK_IMPORTED_MODULE_1__); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_set_timeout__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/set-timeout */ "./node_modules/@babel/runtime-corejs3/core-js-stable/set-timeout.js"); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_set_timeout__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_set_timeout__WEBPACK_IMPORTED_MODULE_2__); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_object_assign__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/object/assign */ "./node_modules/@babel/runtime-corejs3/core-js-stable/object/assign.js"); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_object_assign__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_object_assign__WEBPACK_IMPORTED_MODULE_3__); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_json_stringify__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/json/stringify */ "./node_modules/@babel/runtime-corejs3/core-js-stable/json/stringify.js"); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_json_stringify__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_json_stringify__WEBPACK_IMPORTED_MODULE_4__); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_sort__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/sort */ "./node_modules/@babel/runtime-corejs3/core-js-stable/instance/sort.js"); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_sort__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_sort__WEBPACK_IMPORTED_MODULE_5__); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_includes__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/includes */ "./node_modules/@babel/runtime-corejs3/core-js-stable/instance/includes.js"); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_includes__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_includes__WEBPACK_IMPORTED_MODULE_6__); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_for_each__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/for-each */ "./node_modules/@babel/runtime-corejs3/core-js-stable/instance/for-each.js"); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_for_each__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_for_each__WEBPACK_IMPORTED_MODULE_7__); +/* harmony import */ var https__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! https */ "https"); +/* harmony import */ var https__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(https__WEBPACK_IMPORTED_MODULE_8__); +/* harmony import */ var ip_address__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ip-address */ "ip-address"); +/* harmony import */ var ip_address__WEBPACK_IMPORTED_MODULE_9___default = /*#__PURE__*/__webpack_require__.n(ip_address__WEBPACK_IMPORTED_MODULE_9__); +/* harmony import */ var _renderer_context_userContext_defaults__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../../renderer/context/userContext.defaults */ "./renderer/context/userContext.defaults.ts"); + + + + + + + + + + + +class xCloudApi { + constructor(application, host, token, type = "home") { + _babel_runtime_corejs3_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(this, "_application", void 0); + _babel_runtime_corejs3_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(this, "_host", void 0); + _babel_runtime_corejs3_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(this, "_token", void 0); + _babel_runtime_corejs3_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(this, "_type", void 0); + _babel_runtime_corejs3_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(this, "_sessionPath", void 0); + _babel_runtime_corejs3_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(this, "_exchangeCounter", 0); + _babel_runtime_corejs3_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(this, "_exchangeUrl", ""); + _babel_runtime_corejs3_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(this, "_currentGame", ""); + this._application = application; + this._host = host; + this._token = token; + this._type = type; + } + get(url, method = "GET") { + return new (_babel_runtime_corejs3_core_js_stable_promise__WEBPACK_IMPORTED_MODULE_1___default())((resolve, reject) => { + let responseData = ""; + const req = https__WEBPACK_IMPORTED_MODULE_8___default().request({ + host: this._host, + path: url, + method: method, + headers: { + "Content-Type": "application/json", + Authorization: "Bearer " + this._token + } + }, response => { + response.on("data", data => { + responseData += data; + }); + response.on("end", () => { + if (response.statusCode >= 200 && response.statusCode <= 299) { + this._application.log("xCloudApi", "host:" + this._host + " get(" + url + ", " + method + ") resolve:", response.statusCode); + let returnData = responseData; + try { + returnData = JSON.parse(responseData); + } catch (error) { + // Data is not JSON.. + } + if (response.statusCode === 204) { + // We have to retry.. + _babel_runtime_corejs3_core_js_stable_set_timeout__WEBPACK_IMPORTED_MODULE_2___default()(() => { + this.get(url, method).then(result => { + resolve(result); + }).catch(error => { + reject(error); + }); + }, 750); + } else { + resolve(returnData); + } + } else { + this._application.log("xCloudApi", "get(" + url + ") reject:", response.statusCode); + reject({ + url: url, + status: response.statusCode, + body: responseData + }); + } + }); + }); + req.on("error", error => { + reject(error); + }); + req.end(); + }); + } + post(url, postData = {}, headers = {}) { + return new (_babel_runtime_corejs3_core_js_stable_promise__WEBPACK_IMPORTED_MODULE_1___default())((resolve, reject) => { + let responseData = ""; + const mergedHeaders = _babel_runtime_corejs3_core_js_stable_object_assign__WEBPACK_IMPORTED_MODULE_3___default()({}, { + "Content-Type": "application/json", + Authorization: "Bearer " + this._token + }, headers); + const req = https__WEBPACK_IMPORTED_MODULE_8___default().request({ + host: this._host, + path: url, + method: "POST", + headers: mergedHeaders + }, response => { + response.on("data", data => { + responseData += data; + }); + response.on("end", () => { + if (response.statusCode >= 200 && response.statusCode <= 299) { + this._application.log("xCloudApi", "post(" + url + ") resolve:", response.statusCode, responseData); + let returnData = responseData; + try { + returnData = JSON.parse(responseData); + } catch (error) { + // Data is not JSON.. + } + resolve(returnData); + } else { + this._application.log("xCloudApi", "post(" + url + ") reject:", response.statusCode); + reject({ + url: url, + status: response.statusCode, + body: responseData + }); + } + }); + }); + req.on("error", error => { + reject(error); + }); + req.write(_babel_runtime_corejs3_core_js_stable_json_stringify__WEBPACK_IMPORTED_MODULE_4___default()(postData)); + req.end(); + }); + } + getWaitingTimes(titleId) { + return this.get("/v1/waittime/" + titleId); + } + getTitles() { + return this.get("/v2/titles"); + } + getRecentTitles() { + return this.get("/v2/titles/mru?mr=25"); + } + stopStream(sessionId) { + return this.get("/v5/sessions/" + this._type + "/" + sessionId, "DELETE"); + } + startStream(target) { + const settings = this._application._store.get("settings", _renderer_context_userContext_defaults__WEBPACK_IMPORTED_MODULE_10__.defaultSettings); + const deviceInfo = _babel_runtime_corejs3_core_js_stable_json_stringify__WEBPACK_IMPORTED_MODULE_4___default()({ + appInfo: { + env: { + clientAppId: "www.xbox.com", + clientAppType: "browser", + clientAppVersion: "21.1.98", + clientSdkVersion: "8.5.3", + httpEnvironment: "prod", + sdkInstallId: "" + } + }, + dev: { + hw: { + make: "Microsoft", + model: "Surface Pro", + sdktype: "web" + }, + os: { + name: settings.resolution == 1080 ? "windows" : "android", + ver: "22631.2715", + platform: "desktop" + }, + displayInfo: { + dimensions: { + widthInPixels: 1920, + heightInPixels: 1080 + }, + pixelDensity: { + dpiX: 2, + dpiY: 2 + } + } + } + }); + const postData = { + titleId: this._type === "cloud" ? target : "", + systemUpdateGroup: "", + clientSessionId: "", + settings: { + nanoVersion: "V3;WebrtcTransport.dll", + enableTextToSpeech: false, + highContrast: 0, + locale: settings.preferred_game_language ? settings.preferred_game_language : 'en-US', + useIceConnection: false, + timezoneOffsetMinutes: 120, + sdkType: "web", + // For xCloud streaming + osName: settings.resolution == 1080 ? "windows" : "android" + }, + serverId: this._type === "home" ? target : "", + fallbackRegionNames: [] + }; + return this.post("/v5/sessions/" + this._type + "/play", postData, { + "X-MS-Device-Info": deviceInfo + }); + } + getStreamState(sessionId) { + return this.get("/v5/sessions/" + this._type + "/" + sessionId + "/state"); + } + sendSdp(sessionId, sdp) { + return new (_babel_runtime_corejs3_core_js_stable_promise__WEBPACK_IMPORTED_MODULE_1___default())((resolve, reject) => { + const postData = { + messageType: "offer", + sdp: sdp, + configuration: { + chatConfiguration: { + bytesPerSample: 2, + expectedClipDurationMs: 20, + format: { + codec: "opus", + container: "webm" + }, + numChannels: 1, + sampleFrequencyHz: 24000 + }, + chat: { + minVersion: 1, + maxVersion: 1 + }, + control: { + minVersion: 1, + maxVersion: 3 + }, + input: { + minVersion: 1, + maxVersion: 8 + }, + message: { + minVersion: 1, + maxVersion: 1 + } + } + }; + this.post("/v5/sessions/" + this._type + "/" + sessionId + "/sdp", postData).then(() => { + this.get("/v5/sessions/" + this._type + "/" + sessionId + "/sdp").then(sdpResult => { + const exchangeSdp = JSON.parse(sdpResult.exchangeResponse); + resolve(exchangeSdp); + }).catch(error => { + reject(error); + }); + }).catch(error => { + reject(error); + }); + }); + } + sendChatSdp(sessionId, sdp) { + return new (_babel_runtime_corejs3_core_js_stable_promise__WEBPACK_IMPORTED_MODULE_1___default())((resolve, reject) => { + const postData = { + messageType: "offer", + sdp: sdp, + configuration: { + isMediaStreamsChatRenegotiation: true + } + }; + this.post("/v5/sessions/" + this._type + "/" + sessionId + "/sdp", postData).then(() => { + this.get("/v5/sessions/" + this._type + "/" + sessionId + "/sdp").then(sdpResult => { + const exchangeSdp = JSON.parse(sdpResult.exchangeResponse); + resolve(exchangeSdp); + }).catch(error => { + reject(error); + }); + }).catch(error => { + reject(error); + }); + }); + } + checkIce(sessionId) { + const settings = this._application._store.get("settings", _renderer_context_userContext_defaults__WEBPACK_IMPORTED_MODULE_10__.defaultSettings); + return new (_babel_runtime_corejs3_core_js_stable_promise__WEBPACK_IMPORTED_MODULE_1___default())((resolve, reject) => { + this.get("/v5/sessions/" + this._type + "/" + sessionId + "/ice").then(iceResult => { + if (iceResult === "") { + _babel_runtime_corejs3_core_js_stable_set_timeout__WEBPACK_IMPORTED_MODULE_2___default()(() => { + this.checkIce(sessionId).then(res => { + resolve(res); + }).catch(error => { + reject(error); + }); + }, 1000); + } else { + const _iceResult = iceResult; + const exchangeIce = JSON.parse(_iceResult.exchangeResponse); + const computedCandidates = []; + + // Find Teredo Address and extract remote ip + for (const candidate in exchangeIce) { + const candidateAddress = exchangeIce[candidate].candidate.split(" "); + if (candidateAddress.length > 4 && candidateAddress[4].substr(0, 4) === "2001") { + const address = new ip_address__WEBPACK_IMPORTED_MODULE_9__.Address6(candidateAddress[4]); + const teredo = address.inspectTeredo(); + computedCandidates.push({ + candidate: "a=candidate:10 1 UDP 1 " + teredo.client4 + " 9002 typ host ", + messageType: "iceCandidate", + sdpMLineIndex: "0", + sdpMid: "0" + }); + computedCandidates.push({ + candidate: "a=candidate:11 1 UDP 1 " + teredo.client4 + " " + teredo.udpPort + " typ host ", + messageType: "iceCandidate", + sdpMLineIndex: "0", + sdpMid: "0" + }); + } + computedCandidates.push(exchangeIce[candidate]); + } + const pattern = new RegExp(/a=candidate:(?\d+) (?\d+) UDP (?\d+) (?[^\s]+) (?\d+) (?.*)/); + const lst = []; + for (let item of computedCandidates) { + if (item.candidate === "a=end-of-candidates") { + continue; + } + const groups = pattern.exec(item.candidate).groups; + lst.push(groups); + } + + // PerferIPV6 + if (settings.ipv6) { + _babel_runtime_corejs3_core_js_stable_instance_sort__WEBPACK_IMPORTED_MODULE_5___default()(lst).call(lst, (a, b) => { + const firstIp = a.ip; + const secondIp = b.ip; + return !_babel_runtime_corejs3_core_js_stable_instance_includes__WEBPACK_IMPORTED_MODULE_6___default()(firstIp).call(firstIp, ":") && _babel_runtime_corejs3_core_js_stable_instance_includes__WEBPACK_IMPORTED_MODULE_6___default()(secondIp).call(secondIp, ":") ? 1 : -1; + }); + } + const newCandidates = []; + let foundation = 1; + const newCandidate = candidate => { + return { + candidate: candidate, + messageType: "iceCandidate", + sdpMLineIndex: "0", + sdpMid: "0" + }; + }; + _babel_runtime_corejs3_core_js_stable_instance_for_each__WEBPACK_IMPORTED_MODULE_7___default()(lst).call(lst, item => { + item.foundation = foundation; + item.priority = foundation === 1 ? 2130706431 : 1; + newCandidates.push(newCandidate(`a=candidate:${item.foundation} 1 UDP ${item.priority} ${item.ip} ${item.port} ${item.the_rest}`)); + ++foundation; + }); + newCandidates.push(newCandidate("a=end-of-candidates")); + resolve(newCandidates); + } + }); + }); + } + sendIce(sessionId, ice) { + return new (_babel_runtime_corejs3_core_js_stable_promise__WEBPACK_IMPORTED_MODULE_1___default())((resolve, reject) => { + const postData = { + messageType: "iceCandidate", + candidate: ice + }; + this.post("/v5/sessions/" + this._type + "/" + sessionId + "/ice", postData).then(() => { + this.checkIce(sessionId).then(candidates => { + resolve(candidates); + }).catch(error => { + reject(error); + }); + }).catch(error => { + reject(error); + }); + }); + } + sendMSALAuth(sessionId, userToken) { + return this.post("/v5/sessions/" + this._type + "/" + sessionId + "/connect", { + userToken: userToken + }); + } + sendKeepalive(sessionId) { + return this.post("/v5/sessions/" + this._type + "/" + sessionId + "/keepalive"); + } + getActiveSessions() { + return this.get("/v5/sessions/" + this._type + "/active"); + } +} + +/***/ }), + +/***/ "./main/ipc.ts": +/*!*********************!*\ + !*** ./main/ipc.ts ***! + \*********************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (/* binding */ Ipc) +/* harmony export */ }); +/* harmony import */ var _babel_runtime_corejs3_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime-corejs3/helpers/defineProperty */ "./node_modules/@babel/runtime-corejs3/helpers/defineProperty.js"); +/* harmony import */ var _babel_runtime_corejs3_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _ipc_consoles__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./ipc/consoles */ "./main/ipc/consoles.ts"); +/* harmony import */ var _ipc_streaming__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./ipc/streaming */ "./main/ipc/streaming.ts"); +/* harmony import */ var _ipc_xcloud__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./ipc/xcloud */ "./main/ipc/xcloud.ts"); +/* harmony import */ var _ipc_app__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./ipc/app */ "./main/ipc/app.ts"); +/* harmony import */ var _ipc_settings__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./ipc/settings */ "./main/ipc/settings.ts"); +/* harmony import */ var electron__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! electron */ "electron"); +/* harmony import */ var electron__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(electron__WEBPACK_IMPORTED_MODULE_6__); + + + + + + + +class Ipc { + constructor(application) { + _babel_runtime_corejs3_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(this, "_application", void 0); + _babel_runtime_corejs3_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(this, "_channels", void 0); + this._application = application; + this._channels = { + streaming: new _ipc_streaming__WEBPACK_IMPORTED_MODULE_2__["default"](this._application), + consoles: new _ipc_consoles__WEBPACK_IMPORTED_MODULE_1__["default"](this._application), + app: new _ipc_app__WEBPACK_IMPORTED_MODULE_4__["default"](this._application), + xCloud: new _ipc_xcloud__WEBPACK_IMPORTED_MODULE_3__["default"](this._application), + settings: new _ipc_settings__WEBPACK_IMPORTED_MODULE_5__["default"](this._application) + }; + for (const channel in this._channels) { + electron__WEBPACK_IMPORTED_MODULE_6__.ipcMain.on(channel, (event, args) => { + this._channels[channel].onEvent(channel, event, args); + }); + } + } + startUp() { + for (const channel in this._channels) { + this._application.log('Ipc', 'Starting IPC channel: ' + channel); + if (this._channels[channel].startUp) this._channels[channel].startUp(); + } + } + onUserLoaded() { + for (const channel in this._channels) { + if (this._channels[channel].onUserLoaded) { + this._application.log('Ipc', 'Loading startup data for IPC channel: ' + channel); + this._channels[channel].onUserLoaded(); + } + } + } +} + +/***/ }), + +/***/ "./main/ipc/app.ts": +/*!*************************!*\ + !*** ./main/ipc/app.ts ***! + \*************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (/* binding */ IpcApp) +/* harmony export */ }); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_promise__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/promise */ "./node_modules/@babel/runtime-corejs3/core-js-stable/promise.js"); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_promise__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_promise__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_set_timeout__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/set-timeout */ "./node_modules/@babel/runtime-corejs3/core-js-stable/set-timeout.js"); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_set_timeout__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_set_timeout__WEBPACK_IMPORTED_MODULE_1__); +/* harmony import */ var _base__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./base */ "./main/ipc/base.ts"); +/* harmony import */ var electron__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! electron */ "electron"); +/* harmony import */ var electron__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(electron__WEBPACK_IMPORTED_MODULE_3__); + + + + +class IpcApp extends _base__WEBPACK_IMPORTED_MODULE_2__["default"] { + // _streamingSessions:any = {} + + loadCachedUser() { + return new (_babel_runtime_corejs3_core_js_stable_promise__WEBPACK_IMPORTED_MODULE_0___default())(resolve => { + const user = this.getUserState(); + resolve(user); + }); + } + getUserState() { + const gamertag = this._application._store.get("user.gamertag"); + const gamerpic = this._application._store.get("user.gamerpic"); + const gamerscore = this._application._store.get("user.gamerscore"); + return { + signedIn: gamertag ? true : false, + type: "user", + gamertag: gamertag ? gamertag : "", + gamerpic: gamerpic ? gamerpic : "", + gamerscore: gamerscore ? gamerscore : "", + level: this._application._authentication._appLevel + }; + } + getAuthState() { + return new (_babel_runtime_corejs3_core_js_stable_promise__WEBPACK_IMPORTED_MODULE_0___default())(resolve => { + resolve({ + isAuthenticating: this._application._authentication._isAuthenticating, + isAuthenticated: this._application._authentication._isAuthenticated, + user: this.getUserState() + }); + }); + } + getAppLevel() { + return new (_babel_runtime_corejs3_core_js_stable_promise__WEBPACK_IMPORTED_MODULE_0___default())(resolve => { + resolve(this._application._authentication._appLevel); + }); + } + checkAuthentication() { + return new (_babel_runtime_corejs3_core_js_stable_promise__WEBPACK_IMPORTED_MODULE_0___default())(resolve => { + resolve(this._application._authentication.checkAuthentication()); + }); + } + login() { + return new (_babel_runtime_corejs3_core_js_stable_promise__WEBPACK_IMPORTED_MODULE_0___default())(resolve => { + this._application._authentication.startAuthflow(); + resolve(true); + }); + } + quit() { + return new (_babel_runtime_corejs3_core_js_stable_promise__WEBPACK_IMPORTED_MODULE_0___default())(resolve => { + resolve(true); + _babel_runtime_corejs3_core_js_stable_set_timeout__WEBPACK_IMPORTED_MODULE_1___default()(() => { + this._application.quit(); + }, 100); + }); + } + restart() { + return new (_babel_runtime_corejs3_core_js_stable_promise__WEBPACK_IMPORTED_MODULE_0___default())(resolve => { + resolve(true); + _babel_runtime_corejs3_core_js_stable_set_timeout__WEBPACK_IMPORTED_MODULE_1___default()(() => { + this._application.restart(); + }, 100); + }); + } + clearData() { + return new (_babel_runtime_corejs3_core_js_stable_promise__WEBPACK_IMPORTED_MODULE_0___default())((resolve, reject) => { + electron__WEBPACK_IMPORTED_MODULE_3__.session.defaultSession.clearStorageData().then(() => { + this._application._authentication._tokenStore.clear(); + this._application._store.delete("user"); + this._application._store.delete("auth"); + this._application.log("authentication", __filename + "[startIpcEvents()] Received restart request. Restarting application..."); + this._application.restart(); + resolve(true); + }).catch(error => { + this._application.log("authentication", __filename + "[startIpcEvents()] Error: Failed to clear local storage!"); + reject(error); + }); + }); + } + getOnlineFriends() { + return new (_babel_runtime_corejs3_core_js_stable_promise__WEBPACK_IMPORTED_MODULE_0___default())(resolve => { + if (this._application._xboxWorker === undefined) { + // Worker is not loaded yet.. + resolve([]); + } else { + resolve(this._application._xboxWorker._onlineFriends); + } + }); + } + onUiShown() { + return new (_babel_runtime_corejs3_core_js_stable_promise__WEBPACK_IMPORTED_MODULE_0___default())(resolve => { + resolve({}); + }); + } + toggleFullscreen() { + return new (_babel_runtime_corejs3_core_js_stable_promise__WEBPACK_IMPORTED_MODULE_0___default())(resolve => { + const isFullScreen = this._application._mainWindow.isFullScreen(); + this._application._mainWindow.setFullScreen(!isFullScreen); + resolve({}); + }); + } + exitFullscreen() { + return new (_babel_runtime_corejs3_core_js_stable_promise__WEBPACK_IMPORTED_MODULE_0___default())(resolve => { + this._application._mainWindow.setFullScreen(false); + resolve({}); + }); + } +} + +/***/ }), + +/***/ "./main/ipc/base.ts": +/*!**************************!*\ + !*** ./main/ipc/base.ts ***! + \**************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (/* binding */ IpcBase) +/* harmony export */ }); +/* harmony import */ var _babel_runtime_corejs3_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime-corejs3/helpers/defineProperty */ "./node_modules/@babel/runtime-corejs3/helpers/defineProperty.js"); +/* harmony import */ var _babel_runtime_corejs3_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_object_keys__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/object/keys */ "./node_modules/@babel/runtime-corejs3/core-js-stable/object/keys.js"); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_object_keys__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_object_keys__WEBPACK_IMPORTED_MODULE_1__); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_json_stringify__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/json/stringify */ "./node_modules/@babel/runtime-corejs3/core-js-stable/json/stringify.js"); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_json_stringify__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_json_stringify__WEBPACK_IMPORTED_MODULE_2__); + + + +class IpcBase { + constructor(application) { + _babel_runtime_corejs3_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(this, "_application", void 0); + this._application = application; + } + onEvent(channel, event, args) { + this._application.log('Ipc:Recv', 'Received event: [' + channel + ']', args); + if (typeof this[args.action] === 'function') { + const response = _babel_runtime_corejs3_core_js_stable_object_keys__WEBPACK_IMPORTED_MODULE_1___default()(args.data).length > 0 ? this[args.action](args.data) : this[args.action](); + response.then(result => { + this.send(channel, { + action: args.action, + id: args.id, + data: result + }); + }).catch(error => { + console.log('ERROR: IPC communication error from backend:', error); + this.send(channel, { + action: args.action, + id: args.id, + data: {}, + error: error + }); + }); + } else { + this._application.log('Ipc', 'ERROR: Action was not found:', args.action, 'on channel', channel); + this.send(channel, { + action: args.action, + id: args.id, + data: {}, + error: 'IPC action failure. Action was not found: ' + channel + ':' + args.action + }); + } + } + send(channel, args) { + this._application.log('Ipc:Send', 'Sending event: [' + channel + ']', _babel_runtime_corejs3_core_js_stable_json_stringify__WEBPACK_IMPORTED_MODULE_2___default()(args)); + this._application._mainWindow.webContents.send(channel, { + action: args.action, + id: args.id, + data: args.data, + error: args.error + }); + } +} + +/***/ }), + +/***/ "./main/ipc/consoles.ts": +/*!******************************!*\ + !*** ./main/ipc/consoles.ts ***! + \******************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (/* binding */ IpcConsoles) +/* harmony export */ }); +/* harmony import */ var _babel_runtime_corejs3_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime-corejs3/helpers/defineProperty */ "./node_modules/@babel/runtime-corejs3/helpers/defineProperty.js"); +/* harmony import */ var _babel_runtime_corejs3_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_promise__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/promise */ "./node_modules/@babel/runtime-corejs3/core-js-stable/promise.js"); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_promise__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_promise__WEBPACK_IMPORTED_MODULE_1__); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_date_now__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/date/now */ "./node_modules/@babel/runtime-corejs3/core-js-stable/date/now.js"); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_date_now__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_date_now__WEBPACK_IMPORTED_MODULE_2__); +/* harmony import */ var _base__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./base */ "./main/ipc/base.ts"); + + + + +class IpcConsoles extends _base__WEBPACK_IMPORTED_MODULE_3__["default"] { + constructor(...args) { + super(...args); + // _streamingSessions:any = {} + _babel_runtime_corejs3_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(this, "_consoles", []); + _babel_runtime_corejs3_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(this, "_consolesLastUpdate", 0); + } + get() { + return new (_babel_runtime_corejs3_core_js_stable_promise__WEBPACK_IMPORTED_MODULE_1___default())((resolve, reject) => { + if (this._consolesLastUpdate < _babel_runtime_corejs3_core_js_stable_date_now__WEBPACK_IMPORTED_MODULE_2___default()() - 60 * 1000) { + // this._application._events._webApi.getProvider('smartglass').getConsolesList().then((consoles) => { + this._application._webApi.getProvider('smartglass').getConsolesList().then(consoles => { + this._consoles = consoles.result; + this._consolesLastUpdate = _babel_runtime_corejs3_core_js_stable_date_now__WEBPACK_IMPORTED_MODULE_2___default()(); + resolve(this._consoles); + }).catch(error => { + reject(error); + }); + } else { + resolve(this._consoles); + } + }); + } +} + +/***/ }), + +/***/ "./main/ipc/settings.ts": +/*!******************************!*\ + !*** ./main/ipc/settings.ts ***! + \******************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (/* binding */ IpcSettings) +/* harmony export */ }); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_object_keys__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/object/keys */ "./node_modules/@babel/runtime-corejs3/core-js-stable/object/keys.js"); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_object_keys__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_object_keys__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_object_get_own_property_symbols__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/object/get-own-property-symbols */ "./node_modules/@babel/runtime-corejs3/core-js-stable/object/get-own-property-symbols.js"); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_object_get_own_property_symbols__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_object_get_own_property_symbols__WEBPACK_IMPORTED_MODULE_1__); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_filter__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/filter */ "./node_modules/@babel/runtime-corejs3/core-js-stable/instance/filter.js"); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_filter__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_filter__WEBPACK_IMPORTED_MODULE_2__); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_object_get_own_property_descriptor__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/object/get-own-property-descriptor */ "./node_modules/@babel/runtime-corejs3/core-js-stable/object/get-own-property-descriptor.js"); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_object_get_own_property_descriptor__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_object_get_own_property_descriptor__WEBPACK_IMPORTED_MODULE_3__); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_for_each__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/for-each */ "./node_modules/@babel/runtime-corejs3/core-js-stable/instance/for-each.js"); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_for_each__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_for_each__WEBPACK_IMPORTED_MODULE_4__); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_object_get_own_property_descriptors__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/object/get-own-property-descriptors */ "./node_modules/@babel/runtime-corejs3/core-js-stable/object/get-own-property-descriptors.js"); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_object_get_own_property_descriptors__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_object_get_own_property_descriptors__WEBPACK_IMPORTED_MODULE_5__); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_object_define_properties__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/object/define-properties */ "./node_modules/@babel/runtime-corejs3/core-js-stable/object/define-properties.js"); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_object_define_properties__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_object_define_properties__WEBPACK_IMPORTED_MODULE_6__); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_object_define_property__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/object/define-property */ "./node_modules/@babel/runtime-corejs3/core-js-stable/object/define-property.js"); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_object_define_property__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_object_define_property__WEBPACK_IMPORTED_MODULE_7__); +/* harmony import */ var _babel_runtime_corejs3_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @babel/runtime-corejs3/helpers/defineProperty */ "./node_modules/@babel/runtime-corejs3/helpers/defineProperty.js"); +/* harmony import */ var _babel_runtime_corejs3_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_8__); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_promise__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/promise */ "./node_modules/@babel/runtime-corejs3/core-js-stable/promise.js"); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_promise__WEBPACK_IMPORTED_MODULE_9___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_promise__WEBPACK_IMPORTED_MODULE_9__); +/* harmony import */ var _base__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./base */ "./main/ipc/base.ts"); +/* harmony import */ var _renderer_context_userContext_defaults__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../../renderer/context/userContext.defaults */ "./renderer/context/userContext.defaults.ts"); + + + + + + + + + +function ownKeys(e, r) { var t = _babel_runtime_corejs3_core_js_stable_object_keys__WEBPACK_IMPORTED_MODULE_0___default()(e); if ((_babel_runtime_corejs3_core_js_stable_object_get_own_property_symbols__WEBPACK_IMPORTED_MODULE_1___default())) { var o = _babel_runtime_corejs3_core_js_stable_object_get_own_property_symbols__WEBPACK_IMPORTED_MODULE_1___default()(e); r && (o = _babel_runtime_corejs3_core_js_stable_instance_filter__WEBPACK_IMPORTED_MODULE_2___default()(o).call(o, function (r) { return _babel_runtime_corejs3_core_js_stable_object_get_own_property_descriptor__WEBPACK_IMPORTED_MODULE_3___default()(e, r).enumerable; })), t.push.apply(t, o); } return t; } +function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var _context, _context2; var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? _babel_runtime_corejs3_core_js_stable_instance_for_each__WEBPACK_IMPORTED_MODULE_4___default()(_context = ownKeys(Object(t), !0)).call(_context, function (r) { _babel_runtime_corejs3_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_8___default()(e, r, t[r]); }) : (_babel_runtime_corejs3_core_js_stable_object_get_own_property_descriptors__WEBPACK_IMPORTED_MODULE_5___default()) ? _babel_runtime_corejs3_core_js_stable_object_define_properties__WEBPACK_IMPORTED_MODULE_6___default()(e, _babel_runtime_corejs3_core_js_stable_object_get_own_property_descriptors__WEBPACK_IMPORTED_MODULE_5___default()(t)) : _babel_runtime_corejs3_core_js_stable_instance_for_each__WEBPACK_IMPORTED_MODULE_4___default()(_context2 = ownKeys(Object(t))).call(_context2, function (r) { _babel_runtime_corejs3_core_js_stable_object_define_property__WEBPACK_IMPORTED_MODULE_7___default()(e, r, _babel_runtime_corejs3_core_js_stable_object_get_own_property_descriptor__WEBPACK_IMPORTED_MODULE_3___default()(t, r)); }); } return e; } + + + +class IpcSettings extends _base__WEBPACK_IMPORTED_MODULE_10__["default"] { + setSettings(args) { + return new (_babel_runtime_corejs3_core_js_stable_promise__WEBPACK_IMPORTED_MODULE_9___default())(resolve => { + const newSettings = _objectSpread(_objectSpread({}, _renderer_context_userContext_defaults__WEBPACK_IMPORTED_MODULE_11__.defaultSettings), args); + this._application._store.set('settings', newSettings); + resolve(newSettings); + }); + } + getSettings() { + return new (_babel_runtime_corejs3_core_js_stable_promise__WEBPACK_IMPORTED_MODULE_9___default())(resolve => { + const settings = this._application._store.get('settings', _renderer_context_userContext_defaults__WEBPACK_IMPORTED_MODULE_11__.defaultSettings); + resolve(_objectSpread(_objectSpread({}, _renderer_context_userContext_defaults__WEBPACK_IMPORTED_MODULE_11__.defaultSettings), settings)); + }); + } + resetSettings() { + return new (_babel_runtime_corejs3_core_js_stable_promise__WEBPACK_IMPORTED_MODULE_9___default())(resolve => { + const settings = _objectSpread({}, _renderer_context_userContext_defaults__WEBPACK_IMPORTED_MODULE_11__.defaultSettings); + this._application._store.delete('settings'); + this._application._store.set('settings', settings); + resolve(settings); + }); + } +} + +/***/ }), + +/***/ "./main/ipc/streaming.ts": +/*!*******************************!*\ + !*** ./main/ipc/streaming.ts ***! + \*******************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (/* binding */ IpcStreaming) +/* harmony export */ }); +/* harmony import */ var _babel_runtime_corejs3_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime-corejs3/helpers/defineProperty */ "./node_modules/@babel/runtime-corejs3/helpers/defineProperty.js"); +/* harmony import */ var _babel_runtime_corejs3_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_promise__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/promise */ "./node_modules/@babel/runtime-corejs3/core-js-stable/promise.js"); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_promise__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_promise__WEBPACK_IMPORTED_MODULE_1__); +/* harmony import */ var _base__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./base */ "./main/ipc/base.ts"); +/* harmony import */ var _helpers_streammanager__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../helpers/streammanager */ "./main/helpers/streammanager.ts"); + + + + +class IpcStreaming extends _base__WEBPACK_IMPORTED_MODULE_2__["default"] { + constructor(application) { + super(application); + _babel_runtime_corejs3_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(this, "_streamManager", void 0); + this._streamManager = new _helpers_streammanager__WEBPACK_IMPORTED_MODULE_3__["default"](application); + } + startStream(args) { + if (args.type === 'home') { + this._application._ipc._channels.consoles._consolesLastUpdate = 0; + } else { + this._application._ipc._channels.xCloud._recentTitlesLastUpdate = 0; + } + return this._streamManager.startStream(args.type, args.target); + } + stopStream(args) { + return this._streamManager.stopStream(args.sessionId); + } + sendSdp(args) { + return this._streamManager.sendSdp(args.sessionId, args.sdp); + } + sendChatSdp(args) { + return this._streamManager.sendChatSdp(args.sessionId, args.sdp); + } + sendIce(args) { + return this._streamManager.sendIce(args.sessionId, args.ice); + } + sendKeepalive(args) { + return this._streamManager.sendKeepalive(args.sessionId); + } + getPlayerState(args) { + return new (_babel_runtime_corejs3_core_js_stable_promise__WEBPACK_IMPORTED_MODULE_1___default())(resolve => { + resolve(this._streamManager.getSession(args.sessionId)); + }); + } + activeSessions() { + return this._streamManager.getActiveSessions(); + } +} + +/***/ }), + +/***/ "./main/ipc/xcloud.ts": +/*!****************************!*\ + !*** ./main/ipc/xcloud.ts ***! + \****************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (/* binding */ IpcxCloud) +/* harmony export */ }); +/* harmony import */ var _babel_runtime_corejs3_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime-corejs3/helpers/defineProperty */ "./node_modules/@babel/runtime-corejs3/helpers/defineProperty.js"); +/* harmony import */ var _babel_runtime_corejs3_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_promise__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/promise */ "./node_modules/@babel/runtime-corejs3/core-js-stable/promise.js"); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_promise__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_promise__WEBPACK_IMPORTED_MODULE_1__); +/* harmony import */ var _base__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./base */ "./main/ipc/base.ts"); +/* harmony import */ var _helpers_titlemanager__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../helpers/titlemanager */ "./main/helpers/titlemanager.ts"); +/* harmony import */ var _helpers_xcloudapi__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../helpers/xcloudapi */ "./main/helpers/xcloudapi.ts"); + + + + + +class IpcxCloud extends _base__WEBPACK_IMPORTED_MODULE_2__["default"] { + constructor(application) { + super(application); + _babel_runtime_corejs3_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(this, "_titleManager", void 0); + _babel_runtime_corejs3_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(this, "_titlesAreLoaded", false); + _babel_runtime_corejs3_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(this, "_titles", []); + _babel_runtime_corejs3_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(this, "_titlesLastUpdate", 0); + _babel_runtime_corejs3_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(this, "_recentTitles", []); + _babel_runtime_corejs3_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(this, "_recentTitlesLastUpdate", 0); + _babel_runtime_corejs3_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(this, "_newTitles", []); + _babel_runtime_corejs3_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(this, "_newTitlesLastUpdate", 0); + this._titleManager = new _helpers_titlemanager__WEBPACK_IMPORTED_MODULE_3__["default"](application); + } + startUp() { + this._application.log('Ipc:xCloud', 'Starting xCloud IPC Channel...'); + } + getRecentTitles() { + const streamingTokens = this._application.streamingTokens; + const _xCloudApi = new _helpers_xcloudapi__WEBPACK_IMPORTED_MODULE_4__["default"](this._application, streamingTokens.xCloudToken.getDefaultRegion().baseUri.substring(8), streamingTokens.xCloudToken.data.gsToken, "cloud"); + return _xCloudApi.getRecentTitles(); + } + getXhomeToken() { + console.log('getXhomeToken'); + return new (_babel_runtime_corejs3_core_js_stable_promise__WEBPACK_IMPORTED_MODULE_1___default())(resolve => { + if (this._application.streamingTokens && this._application.streamingTokens.xHomeToken) { + resolve(this._application.streamingTokens.xHomeToken.data); + } else { + resolve(null); + } + }); + } + setXhomeTokenDefault(name) { + return new (_babel_runtime_corejs3_core_js_stable_promise__WEBPACK_IMPORTED_MODULE_1___default())(resolve => { + this._application.streamingTokens.xHomeToken.setDefaultRegion(name); + resolve(null); + }); + } + getXcloudToken() { + console.log('getXcloudToken'); + return new (_babel_runtime_corejs3_core_js_stable_promise__WEBPACK_IMPORTED_MODULE_1___default())(resolve => { + if (this._application.streamingTokens && this._application.streamingTokens.xCloudToken) { + resolve(this._application.streamingTokens.xCloudToken.data); + } else { + resolve(null); + } + }); + } + setXcloudTokenDefault(name) { + return new (_babel_runtime_corejs3_core_js_stable_promise__WEBPACK_IMPORTED_MODULE_1___default())(resolve => { + if (this._application.streamingTokens.xCloudToken) { + this._application.streamingTokens.xCloudToken.setDefaultRegion(name); + } + resolve({}); + }); + } + getTitles() { + const streamingTokens = this._application.streamingTokens; + const _xCloudApi = new _helpers_xcloudapi__WEBPACK_IMPORTED_MODULE_4__["default"](this._application, streamingTokens.xCloudToken.getDefaultRegion().baseUri.substring(8), streamingTokens.xCloudToken.data.gsToken, "cloud"); + return new (_babel_runtime_corejs3_core_js_stable_promise__WEBPACK_IMPORTED_MODULE_1___default())((resolve, reject) => { + _xCloudApi.getTitles().then(titles => { + resolve(titles); + }).catch(error => { + reject(error); + }); + }); + } + getGamePassProducts(titles) { + return this._titleManager.getGamePassProducts(titles); + } + getNewTitles() { + return this._titleManager.getNewTitles(); + } +} + +/***/ }), + +/***/ "./main/xal/index.ts": +/*!***************************!*\ + !*** ./main/xal/index.ts ***! + \***************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ TokenStore: () => (/* reexport safe */ _tokenstore__WEBPACK_IMPORTED_MODULE_0__["default"]), +/* harmony export */ Xal: () => (/* reexport safe */ _xal__WEBPACK_IMPORTED_MODULE_1__["default"]) +/* harmony export */ }); +/* harmony import */ var _tokenstore__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./tokenstore */ "./main/xal/tokenstore.ts"); +/* harmony import */ var _xal__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./xal */ "./main/xal/xal.ts"); + + + + +/***/ }), + +/***/ "./main/xal/lib/http.ts": +/*!******************************!*\ + !*** ./main/xal/lib/http.ts ***! + \******************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ HttpResponse: () => (/* binding */ HttpResponse), +/* harmony export */ "default": () => (/* binding */ Http) +/* harmony export */ }); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_object_keys__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/object/keys */ "./node_modules/@babel/runtime-corejs3/core-js-stable/object/keys.js"); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_object_keys__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_object_keys__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_object_get_own_property_symbols__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/object/get-own-property-symbols */ "./node_modules/@babel/runtime-corejs3/core-js-stable/object/get-own-property-symbols.js"); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_object_get_own_property_symbols__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_object_get_own_property_symbols__WEBPACK_IMPORTED_MODULE_1__); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_filter__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/filter */ "./node_modules/@babel/runtime-corejs3/core-js-stable/instance/filter.js"); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_filter__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_filter__WEBPACK_IMPORTED_MODULE_2__); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_object_get_own_property_descriptor__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/object/get-own-property-descriptor */ "./node_modules/@babel/runtime-corejs3/core-js-stable/object/get-own-property-descriptor.js"); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_object_get_own_property_descriptor__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_object_get_own_property_descriptor__WEBPACK_IMPORTED_MODULE_3__); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_for_each__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/for-each */ "./node_modules/@babel/runtime-corejs3/core-js-stable/instance/for-each.js"); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_for_each__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_for_each__WEBPACK_IMPORTED_MODULE_4__); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_object_get_own_property_descriptors__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/object/get-own-property-descriptors */ "./node_modules/@babel/runtime-corejs3/core-js-stable/object/get-own-property-descriptors.js"); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_object_get_own_property_descriptors__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_object_get_own_property_descriptors__WEBPACK_IMPORTED_MODULE_5__); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_object_define_properties__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/object/define-properties */ "./node_modules/@babel/runtime-corejs3/core-js-stable/object/define-properties.js"); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_object_define_properties__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_object_define_properties__WEBPACK_IMPORTED_MODULE_6__); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_object_define_property__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/object/define-property */ "./node_modules/@babel/runtime-corejs3/core-js-stable/object/define-property.js"); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_object_define_property__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_object_define_property__WEBPACK_IMPORTED_MODULE_7__); +/* harmony import */ var _babel_runtime_corejs3_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @babel/runtime-corejs3/helpers/defineProperty */ "./node_modules/@babel/runtime-corejs3/helpers/defineProperty.js"); +/* harmony import */ var _babel_runtime_corejs3_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_8__); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_promise__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/promise */ "./node_modules/@babel/runtime-corejs3/core-js-stable/promise.js"); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_promise__WEBPACK_IMPORTED_MODULE_9___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_promise__WEBPACK_IMPORTED_MODULE_9__); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_json_stringify__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/json/stringify */ "./node_modules/@babel/runtime-corejs3/core-js-stable/json/stringify.js"); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_json_stringify__WEBPACK_IMPORTED_MODULE_10___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_json_stringify__WEBPACK_IMPORTED_MODULE_10__); +/* harmony import */ var https__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! https */ "https"); +/* harmony import */ var https__WEBPACK_IMPORTED_MODULE_11___default = /*#__PURE__*/__webpack_require__.n(https__WEBPACK_IMPORTED_MODULE_11__); + + + + + + + + + +function ownKeys(e, r) { var t = _babel_runtime_corejs3_core_js_stable_object_keys__WEBPACK_IMPORTED_MODULE_0___default()(e); if ((_babel_runtime_corejs3_core_js_stable_object_get_own_property_symbols__WEBPACK_IMPORTED_MODULE_1___default())) { var o = _babel_runtime_corejs3_core_js_stable_object_get_own_property_symbols__WEBPACK_IMPORTED_MODULE_1___default()(e); r && (o = _babel_runtime_corejs3_core_js_stable_instance_filter__WEBPACK_IMPORTED_MODULE_2___default()(o).call(o, function (r) { return _babel_runtime_corejs3_core_js_stable_object_get_own_property_descriptor__WEBPACK_IMPORTED_MODULE_3___default()(e, r).enumerable; })), t.push.apply(t, o); } return t; } +function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var _context, _context2; var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? _babel_runtime_corejs3_core_js_stable_instance_for_each__WEBPACK_IMPORTED_MODULE_4___default()(_context = ownKeys(Object(t), !0)).call(_context, function (r) { _babel_runtime_corejs3_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_8___default()(e, r, t[r]); }) : (_babel_runtime_corejs3_core_js_stable_object_get_own_property_descriptors__WEBPACK_IMPORTED_MODULE_5___default()) ? _babel_runtime_corejs3_core_js_stable_object_define_properties__WEBPACK_IMPORTED_MODULE_6___default()(e, _babel_runtime_corejs3_core_js_stable_object_get_own_property_descriptors__WEBPACK_IMPORTED_MODULE_5___default()(t)) : _babel_runtime_corejs3_core_js_stable_instance_for_each__WEBPACK_IMPORTED_MODULE_4___default()(_context2 = ownKeys(Object(t))).call(_context2, function (r) { _babel_runtime_corejs3_core_js_stable_object_define_property__WEBPACK_IMPORTED_MODULE_7___default()(e, r, _babel_runtime_corejs3_core_js_stable_object_get_own_property_descriptor__WEBPACK_IMPORTED_MODULE_3___default()(t, r)); }); } return e; } + + + +class Http { + getRequest(host, path, headers) { + return new (_babel_runtime_corejs3_core_js_stable_promise__WEBPACK_IMPORTED_MODULE_9___default())((resolve, reject) => { + const hostHeaders = _objectSpread({}, headers); + const options = { + method: 'GET', + hostname: host, + path: path, + port: 443, + headers: hostHeaders + }; + const req = https__WEBPACK_IMPORTED_MODULE_11___default().request(options, res => { + let responseData = ''; + res.on('data', data => { + responseData += data; + }); + res.on('close', () => { + if (res.statusCode == 200 || res.statusCode == 204) { + if (responseData.toString() === '') { + resolve(new HttpResponse({}, res.headers)); + } else { + resolve(new HttpResponse(JSON.parse(responseData.toString()), res.headers)); + } + } else { + reject({ + statuscode: res.statusCode, + headers: res.headers, + body: responseData.toString(), + message: 'Error fetching ' + host + path + }); + } + }); + }); + req.on('error', error => { + reject(error); + }); + req.end(); + }); + } + postRequest(host, path, headers, data) { + return new (_babel_runtime_corejs3_core_js_stable_promise__WEBPACK_IMPORTED_MODULE_9___default())((resolve, reject) => { + const hostHeaders = _objectSpread({}, headers); + if (typeof data === 'object') { + data = _babel_runtime_corejs3_core_js_stable_json_stringify__WEBPACK_IMPORTED_MODULE_10___default()(data); + } + const options = { + method: 'POST', + hostname: host, + path: path, + port: 443, + headers: hostHeaders + }; + + // console.log(options, data) + + const req = https__WEBPACK_IMPORTED_MODULE_11___default().request(options, res => { + let responseData = ''; + res.on('data', data => { + responseData += data; + }); + res.on('close', () => { + if (res.statusCode == 200 || res.statusCode == 202) { + if (responseData.toString() === '') { + resolve(new HttpResponse({}, res.headers)); + } else { + resolve(new HttpResponse(JSON.parse(responseData.toString()), res.headers)); + } + } else { + reject({ + statuscode: res.statusCode, + headers: res.headers, + body: responseData.toString(), + message: 'Error fetching ' + host + path + }); + } + }); + }); + req.on('error', error => { + reject(error); + }); + req.write(data); + req.end(); + }); + } +} +class HttpResponse { + constructor(data, headers) { + _babel_runtime_corejs3_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_8___default()(this, "data", void 0); + _babel_runtime_corejs3_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_8___default()(this, "headers", void 0); + this.data = data; + this.headers = headers; + } + header() { + return this.headers; + } + body() { + return this.data; + } +} + +/***/ }), + +/***/ "./main/xal/lib/token.ts": +/*!*******************************!*\ + !*** ./main/xal/lib/token.ts ***! + \*******************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (/* binding */ Token) +/* harmony export */ }); +/* harmony import */ var _babel_runtime_corejs3_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime-corejs3/helpers/defineProperty */ "./node_modules/@babel/runtime-corejs3/helpers/defineProperty.js"); +/* harmony import */ var _babel_runtime_corejs3_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0__); + +class Token { + constructor(data) { + _babel_runtime_corejs3_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(this, "data", void 0); + this.data = data; + } + calculateSecondsLeft(date) { + const expiresOn = date; + const currentDate = new Date(); + return Math.floor((expiresOn.getTime() - currentDate.getTime()) / 1000); + } + getSecondsValid() { + console.log('Warning: getSecondsValid not implemented'); + return 0; + } + isValid() { + console.log('Warning: isValid not implemented'); + return false; + } + getUserHash() { + if ('UserToken' in this.data) { + return this.data.UserToken.DisplayClaims.xui[0].uhs; + } + return false; + } + getGamertag() { + if ('AuthorizationToken' in this.data) { + return this.data.AuthorizationToken.DisplayClaims.xui[0].gtg; + } + return false; + } +} + +/***/ }), + +/***/ "./main/xal/lib/tokens/devicetoken.ts": +/*!********************************************!*\ + !*** ./main/xal/lib/tokens/devicetoken.ts ***! + \********************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (/* binding */ DeviceToken) +/* harmony export */ }); +/* harmony import */ var _babel_runtime_corejs3_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime-corejs3/helpers/defineProperty */ "./node_modules/@babel/runtime-corejs3/helpers/defineProperty.js"); +/* harmony import */ var _babel_runtime_corejs3_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _token__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../token */ "./main/xal/lib/token.ts"); + + +class DeviceToken extends _token__WEBPACK_IMPORTED_MODULE_1__["default"] { + constructor(data) { + super(data); + _babel_runtime_corejs3_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(this, "data", void 0); + this.data = data; + } + getSecondsValid() { + return this.calculateSecondsLeft(new Date(this.data.NotAfter)); + } + isValid() { + if (this.calculateSecondsLeft(new Date(this.data.NotAfter)) <= 0) { + return false; + } + return true; + } +} + +/***/ }), + +/***/ "./main/xal/lib/tokens/msaltoken.ts": +/*!******************************************!*\ + !*** ./main/xal/lib/tokens/msaltoken.ts ***! + \******************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (/* binding */ MsalToken) +/* harmony export */ }); +/* harmony import */ var _babel_runtime_corejs3_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime-corejs3/helpers/defineProperty */ "./node_modules/@babel/runtime-corejs3/helpers/defineProperty.js"); +/* harmony import */ var _babel_runtime_corejs3_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _token__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../token */ "./main/xal/lib/token.ts"); + + +class MsalToken extends _token__WEBPACK_IMPORTED_MODULE_1__["default"] { + constructor(data) { + super(data); + _babel_runtime_corejs3_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(this, "data", void 0); + this.data = data; + } +} + +/***/ }), + +/***/ "./main/xal/lib/tokens/sisutoken.ts": +/*!******************************************!*\ + !*** ./main/xal/lib/tokens/sisutoken.ts ***! + \******************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (/* binding */ SisuToken) +/* harmony export */ }); +/* harmony import */ var _babel_runtime_corejs3_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime-corejs3/helpers/defineProperty */ "./node_modules/@babel/runtime-corejs3/helpers/defineProperty.js"); +/* harmony import */ var _babel_runtime_corejs3_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _token__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../token */ "./main/xal/lib/token.ts"); + + +class SisuToken extends _token__WEBPACK_IMPORTED_MODULE_1__["default"] { + constructor(data) { + super(data); + _babel_runtime_corejs3_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(this, "data", void 0); + this.data = data; + } + getSecondsValid() { + const secondsLeftTitle = this.calculateSecondsLeft(new Date(this.data.TitleToken.NotAfter)); + const secondsLeftUser = this.calculateSecondsLeft(new Date(this.data.UserToken.NotAfter)); + const secondsLeftAuthorization = this.calculateSecondsLeft(new Date(this.data.AuthorizationToken.NotAfter)); + return Math.min(secondsLeftTitle, secondsLeftUser, secondsLeftAuthorization); + } + isValid() { + const secondsLeftTitle = this.calculateSecondsLeft(new Date(this.data.TitleToken.NotAfter)); + if (secondsLeftTitle <= 0) { + return false; + } + const secondsLeftUser = this.calculateSecondsLeft(new Date(this.data.UserToken.NotAfter)); + if (secondsLeftUser <= 0) { + return false; + } + const secondsLeftAuthorization = this.calculateSecondsLeft(new Date(this.data.AuthorizationToken.NotAfter)); + if (secondsLeftAuthorization <= 0) { + return false; + } + return true; + } + getUserHash() { + return this.data.UserToken.DisplayClaims.xui[0].uhs; + } + getGamertag() { + return this.data.AuthorizationToken.DisplayClaims.xui[0].gtg; + } +} + +/***/ }), + +/***/ "./main/xal/lib/tokens/streamingtoken.ts": +/*!***********************************************!*\ + !*** ./main/xal/lib/tokens/streamingtoken.ts ***! + \***********************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (/* binding */ StreamingToken) +/* harmony export */ }); +/* harmony import */ var _babel_runtime_corejs3_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime-corejs3/helpers/defineProperty */ "./node_modules/@babel/runtime-corejs3/helpers/defineProperty.js"); +/* harmony import */ var _babel_runtime_corejs3_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_date_now__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/date/now */ "./node_modules/@babel/runtime-corejs3/core-js-stable/date/now.js"); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_date_now__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_date_now__WEBPACK_IMPORTED_MODULE_1__); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_filter__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/filter */ "./node_modules/@babel/runtime-corejs3/core-js-stable/instance/filter.js"); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_filter__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_filter__WEBPACK_IMPORTED_MODULE_2__); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_for_each__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/for-each */ "./node_modules/@babel/runtime-corejs3/core-js-stable/instance/for-each.js"); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_for_each__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_for_each__WEBPACK_IMPORTED_MODULE_3__); +/* harmony import */ var _token__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../token */ "./main/xal/lib/token.ts"); + + + + + +class StreamingToken extends _token__WEBPACK_IMPORTED_MODULE_4__["default"] { + constructor(tokenData) { + super(tokenData); + _babel_runtime_corejs3_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(this, "data", void 0); + _babel_runtime_corejs3_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(this, "_objectCreateTime", _babel_runtime_corejs3_core_js_stable_date_now__WEBPACK_IMPORTED_MODULE_1___default()()); + this.data = tokenData; + } + calculateSecondsLeft(date) { + const expiresOn = date; + const currentDate = new Date(); + return Math.floor((expiresOn.getTime() - currentDate.getTime()) / 1000); + } + getSecondsValid() { + if (this._objectCreateTime + this.data.durationInSeconds * 1000) { + return this.calculateSecondsLeft(new Date(this._objectCreateTime + this.data.durationInSeconds * 1000)); + } + return 0; + } + isValid() { + if (this._objectCreateTime + this.data.durationInSeconds * 1000) { + const secondsLeft = this.calculateSecondsLeft(new Date(this._objectCreateTime + this.data.durationInSeconds * 1000)); + return secondsLeft > 0; + } + return false; + } + getMarket() { + return this.data.market; + } + getRegions() { + return this.data.offeringSettings.regions; + } + getDefaultRegion() { + var _context; + return _babel_runtime_corejs3_core_js_stable_instance_filter__WEBPACK_IMPORTED_MODULE_2___default()(_context = this.data.offeringSettings.regions).call(_context, region => region.isDefault)[0]; + } + setDefaultRegion(name) { + var _context2; + _babel_runtime_corejs3_core_js_stable_instance_for_each__WEBPACK_IMPORTED_MODULE_3___default()(_context2 = this.data.offeringSettings.regions).call(_context2, region => { + if (region.name === name) { + region.isDefault = true; + } else { + region.isDefault = false; + } + }); + } + getEnvironments() { + return this.data.offeringSettings.clientCloudSettings.Environments; + } +} + +/***/ }), + +/***/ "./main/xal/lib/tokens/usertoken.ts": +/*!******************************************!*\ + !*** ./main/xal/lib/tokens/usertoken.ts ***! + \******************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (/* binding */ UserToken) +/* harmony export */ }); +/* harmony import */ var _babel_runtime_corejs3_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime-corejs3/helpers/defineProperty */ "./node_modules/@babel/runtime-corejs3/helpers/defineProperty.js"); +/* harmony import */ var _babel_runtime_corejs3_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _token__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../token */ "./main/xal/lib/token.ts"); + + +class UserToken extends _token__WEBPACK_IMPORTED_MODULE_1__["default"] { + constructor(data) { + super(data); + _babel_runtime_corejs3_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(this, "data", void 0); + this.data = data; + } + calculateSecondsLeft(date) { + const expiresOn = date; + const currentDate = new Date(); + return Math.floor((expiresOn.getTime() - currentDate.getTime()) / 1000); + } + getSecondsValid() { + return this.calculateSecondsLeft(new Date(this.data.expires_on)); + } + isValid() { + const secondsLeft = this.calculateSecondsLeft(new Date(this.data.expires_on)); + return secondsLeft > 0; + } +} + +/***/ }), + +/***/ "./main/xal/lib/tokens/xststoken.ts": +/*!******************************************!*\ + !*** ./main/xal/lib/tokens/xststoken.ts ***! + \******************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (/* binding */ XstsToken) +/* harmony export */ }); +/* harmony import */ var _babel_runtime_corejs3_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime-corejs3/helpers/defineProperty */ "./node_modules/@babel/runtime-corejs3/helpers/defineProperty.js"); +/* harmony import */ var _babel_runtime_corejs3_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _token__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../token */ "./main/xal/lib/token.ts"); + + +class XstsToken extends _token__WEBPACK_IMPORTED_MODULE_1__["default"] { + constructor(data) { + super(data); + _babel_runtime_corejs3_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(this, "data", void 0); + this.data = data; + } + getSecondsValid() { + return this.calculateSecondsLeft(new Date(this.data.NotAfter)); + } + isValid() { + if (this.calculateSecondsLeft(new Date(this.data.NotAfter)) <= 0) { + return false; + } + return true; + } +} + +/***/ }), + +/***/ "./main/xal/tokenstore.ts": +/*!********************************!*\ + !*** ./main/xal/tokenstore.ts ***! + \********************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (/* binding */ TokenStore) +/* harmony export */ }); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_object_keys__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/object/keys */ "./node_modules/@babel/runtime-corejs3/core-js-stable/object/keys.js"); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_object_keys__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_object_keys__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_object_get_own_property_symbols__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/object/get-own-property-symbols */ "./node_modules/@babel/runtime-corejs3/core-js-stable/object/get-own-property-symbols.js"); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_object_get_own_property_symbols__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_object_get_own_property_symbols__WEBPACK_IMPORTED_MODULE_1__); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_filter__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/filter */ "./node_modules/@babel/runtime-corejs3/core-js-stable/instance/filter.js"); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_filter__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_filter__WEBPACK_IMPORTED_MODULE_2__); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_object_get_own_property_descriptor__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/object/get-own-property-descriptor */ "./node_modules/@babel/runtime-corejs3/core-js-stable/object/get-own-property-descriptor.js"); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_object_get_own_property_descriptor__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_object_get_own_property_descriptor__WEBPACK_IMPORTED_MODULE_3__); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_for_each__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/for-each */ "./node_modules/@babel/runtime-corejs3/core-js-stable/instance/for-each.js"); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_for_each__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_for_each__WEBPACK_IMPORTED_MODULE_4__); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_object_get_own_property_descriptors__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/object/get-own-property-descriptors */ "./node_modules/@babel/runtime-corejs3/core-js-stable/object/get-own-property-descriptors.js"); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_object_get_own_property_descriptors__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_object_get_own_property_descriptors__WEBPACK_IMPORTED_MODULE_5__); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_object_define_properties__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/object/define-properties */ "./node_modules/@babel/runtime-corejs3/core-js-stable/object/define-properties.js"); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_object_define_properties__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_object_define_properties__WEBPACK_IMPORTED_MODULE_6__); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_object_define_property__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/object/define-property */ "./node_modules/@babel/runtime-corejs3/core-js-stable/object/define-property.js"); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_object_define_property__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_object_define_property__WEBPACK_IMPORTED_MODULE_7__); +/* harmony import */ var _babel_runtime_corejs3_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @babel/runtime-corejs3/helpers/defineProperty */ "./node_modules/@babel/runtime-corejs3/helpers/defineProperty.js"); +/* harmony import */ var _babel_runtime_corejs3_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_8__); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_json_stringify__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/json/stringify */ "./node_modules/@babel/runtime-corejs3/core-js-stable/json/stringify.js"); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_json_stringify__WEBPACK_IMPORTED_MODULE_9___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_json_stringify__WEBPACK_IMPORTED_MODULE_9__); +/* harmony import */ var _lib_tokens_sisutoken__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./lib/tokens/sisutoken */ "./main/xal/lib/tokens/sisutoken.ts"); +/* harmony import */ var _lib_tokens_usertoken__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./lib/tokens/usertoken */ "./main/xal/lib/tokens/usertoken.ts"); +/* harmony import */ var fs__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! fs */ "fs"); +/* harmony import */ var fs__WEBPACK_IMPORTED_MODULE_12___default = /*#__PURE__*/__webpack_require__.n(fs__WEBPACK_IMPORTED_MODULE_12__); + + + + + + + + + + +function ownKeys(e, r) { var t = _babel_runtime_corejs3_core_js_stable_object_keys__WEBPACK_IMPORTED_MODULE_0___default()(e); if ((_babel_runtime_corejs3_core_js_stable_object_get_own_property_symbols__WEBPACK_IMPORTED_MODULE_1___default())) { var o = _babel_runtime_corejs3_core_js_stable_object_get_own_property_symbols__WEBPACK_IMPORTED_MODULE_1___default()(e); r && (o = _babel_runtime_corejs3_core_js_stable_instance_filter__WEBPACK_IMPORTED_MODULE_2___default()(o).call(o, function (r) { return _babel_runtime_corejs3_core_js_stable_object_get_own_property_descriptor__WEBPACK_IMPORTED_MODULE_3___default()(e, r).enumerable; })), t.push.apply(t, o); } return t; } +function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var _context, _context2; var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? _babel_runtime_corejs3_core_js_stable_instance_for_each__WEBPACK_IMPORTED_MODULE_4___default()(_context = ownKeys(Object(t), !0)).call(_context, function (r) { _babel_runtime_corejs3_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_8___default()(e, r, t[r]); }) : (_babel_runtime_corejs3_core_js_stable_object_get_own_property_descriptors__WEBPACK_IMPORTED_MODULE_5___default()) ? _babel_runtime_corejs3_core_js_stable_object_define_properties__WEBPACK_IMPORTED_MODULE_6___default()(e, _babel_runtime_corejs3_core_js_stable_object_get_own_property_descriptors__WEBPACK_IMPORTED_MODULE_5___default()(t)) : _babel_runtime_corejs3_core_js_stable_instance_for_each__WEBPACK_IMPORTED_MODULE_4___default()(_context2 = ownKeys(Object(t))).call(_context2, function (r) { _babel_runtime_corejs3_core_js_stable_object_define_property__WEBPACK_IMPORTED_MODULE_7___default()(e, r, _babel_runtime_corejs3_core_js_stable_object_get_own_property_descriptor__WEBPACK_IMPORTED_MODULE_3___default()(t, r)); }); } return e; } + + + +class TokenStore { + constructor() { + _babel_runtime_corejs3_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_8___default()(this, "_filepath", ''); + // Main tokens + _babel_runtime_corejs3_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_8___default()(this, "_userToken", void 0); + _babel_runtime_corejs3_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_8___default()(this, "_sisuToken", void 0); + _babel_runtime_corejs3_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_8___default()(this, "_jwtKeys", void 0); + } + // Sub-Tokens + load(filepath, silent = false) { + this._filepath = filepath; + if (fs__WEBPACK_IMPORTED_MODULE_12___default().existsSync(filepath)) { + const fileContents = fs__WEBPACK_IMPORTED_MODULE_12___default().readFileSync(filepath); + return this.loadJson(fileContents.toString()); + } else { + if (!silent) { + throw new Error('TokenStore: File not found: ' + filepath); + } + } + return false; + } + loadJson(json) { + const jsonData = JSON.parse(json); + if (jsonData.userToken) { + this._userToken = new _lib_tokens_usertoken__WEBPACK_IMPORTED_MODULE_11__["default"](jsonData.userToken); + } + if (jsonData.sisuToken) { + this._sisuToken = new _lib_tokens_sisutoken__WEBPACK_IMPORTED_MODULE_10__["default"](jsonData.sisuToken); + } + if (jsonData.jwtKeys) { + this._jwtKeys = jsonData.jwtKeys; + } + return true; + } + setUserToken(userToken) { + const expireDate = new Date(); + expireDate.setSeconds(expireDate.getSeconds() + userToken.data.expires_in); + this._userToken = new _lib_tokens_usertoken__WEBPACK_IMPORTED_MODULE_11__["default"](_objectSpread(_objectSpread({}, userToken.data), {}, { + expires_on: expireDate.toISOString() + })); + } + getUserToken() { + return this._userToken; + } + setSisuToken(sisuToken) { + this._sisuToken = new _lib_tokens_sisutoken__WEBPACK_IMPORTED_MODULE_10__["default"](sisuToken.data); + } + getSisuToken() { + return this._sisuToken; + } + setJwtKeys(jwtKeys) { + this._jwtKeys = jwtKeys; + } + save() { + const data = { + userToken: this._userToken?.data, + sisuToken: this._sisuToken?.data, + jwtKeys: this._jwtKeys + }; + fs__WEBPACK_IMPORTED_MODULE_12___default().writeFileSync(this._filepath, _babel_runtime_corejs3_core_js_stable_json_stringify__WEBPACK_IMPORTED_MODULE_9___default()(data, null, 2)); + } + removeAll() { + fs__WEBPACK_IMPORTED_MODULE_12___default().writeFileSync(this._filepath, _babel_runtime_corejs3_core_js_stable_json_stringify__WEBPACK_IMPORTED_MODULE_9___default()({})); + } + hasValidAuthTokens() { + if (this._userToken) { + if (!this._userToken.isValid()) { + return false; + } + } else { + return false; + } + if (this._sisuToken) { + if (!this._userToken.isValid()) { + return false; + } + } else { + return false; + } + return true; + } +} + +/***/ }), + +/***/ "./main/xal/xal.ts": +/*!*************************!*\ + !*** ./main/xal/xal.ts ***! + \*************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ TokenRefreshError: () => (/* binding */ TokenRefreshError), +/* harmony export */ "default": () => (/* binding */ Xal) +/* harmony export */ }); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_object_keys__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/object/keys */ "./node_modules/@babel/runtime-corejs3/core-js-stable/object/keys.js"); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_object_keys__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_object_keys__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_object_get_own_property_symbols__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/object/get-own-property-symbols */ "./node_modules/@babel/runtime-corejs3/core-js-stable/object/get-own-property-symbols.js"); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_object_get_own_property_symbols__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_object_get_own_property_symbols__WEBPACK_IMPORTED_MODULE_1__); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_filter__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/filter */ "./node_modules/@babel/runtime-corejs3/core-js-stable/instance/filter.js"); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_filter__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_filter__WEBPACK_IMPORTED_MODULE_2__); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_object_get_own_property_descriptor__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/object/get-own-property-descriptor */ "./node_modules/@babel/runtime-corejs3/core-js-stable/object/get-own-property-descriptor.js"); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_object_get_own_property_descriptor__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_object_get_own_property_descriptor__WEBPACK_IMPORTED_MODULE_3__); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_for_each__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/for-each */ "./node_modules/@babel/runtime-corejs3/core-js-stable/instance/for-each.js"); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_for_each__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_for_each__WEBPACK_IMPORTED_MODULE_4__); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_object_get_own_property_descriptors__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/object/get-own-property-descriptors */ "./node_modules/@babel/runtime-corejs3/core-js-stable/object/get-own-property-descriptors.js"); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_object_get_own_property_descriptors__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_object_get_own_property_descriptors__WEBPACK_IMPORTED_MODULE_5__); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_object_define_properties__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/object/define-properties */ "./node_modules/@babel/runtime-corejs3/core-js-stable/object/define-properties.js"); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_object_define_properties__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_object_define_properties__WEBPACK_IMPORTED_MODULE_6__); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_object_define_property__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/object/define-property */ "./node_modules/@babel/runtime-corejs3/core-js-stable/object/define-property.js"); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_object_define_property__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_object_define_property__WEBPACK_IMPORTED_MODULE_7__); +/* harmony import */ var _babel_runtime_corejs3_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @babel/runtime-corejs3/helpers/defineProperty */ "./node_modules/@babel/runtime-corejs3/helpers/defineProperty.js"); +/* harmony import */ var _babel_runtime_corejs3_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_8__); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_date_now__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/date/now */ "./node_modules/@babel/runtime-corejs3/core-js-stable/date/now.js"); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_date_now__WEBPACK_IMPORTED_MODULE_9___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_date_now__WEBPACK_IMPORTED_MODULE_9__); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_promise__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/promise */ "./node_modules/@babel/runtime-corejs3/core-js-stable/promise.js"); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_promise__WEBPACK_IMPORTED_MODULE_10___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_promise__WEBPACK_IMPORTED_MODULE_10__); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_keys__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/keys */ "./node_modules/@babel/runtime-corejs3/core-js-stable/instance/keys.js"); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_keys__WEBPACK_IMPORTED_MODULE_11___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_keys__WEBPACK_IMPORTED_MODULE_11__); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_json_stringify__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/json/stringify */ "./node_modules/@babel/runtime-corejs3/core-js-stable/json/stringify.js"); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_json_stringify__WEBPACK_IMPORTED_MODULE_12___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_json_stringify__WEBPACK_IMPORTED_MODULE_12__); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_url_search_params__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/url-search-params */ "./node_modules/@babel/runtime-corejs3/core-js-stable/url-search-params.js"); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_url_search_params__WEBPACK_IMPORTED_MODULE_13___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_url_search_params__WEBPACK_IMPORTED_MODULE_13__); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_url__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/url */ "./node_modules/@babel/runtime-corejs3/core-js-stable/url.js"); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_url__WEBPACK_IMPORTED_MODULE_14___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_url__WEBPACK_IMPORTED_MODULE_14__); +/* harmony import */ var _lib_http__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./lib/http */ "./main/xal/lib/http.ts"); +/* harmony import */ var crypto__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! crypto */ "crypto"); +/* harmony import */ var crypto__WEBPACK_IMPORTED_MODULE_16___default = /*#__PURE__*/__webpack_require__.n(crypto__WEBPACK_IMPORTED_MODULE_16__); +/* harmony import */ var jose__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! jose */ "jose"); +/* harmony import */ var jose__WEBPACK_IMPORTED_MODULE_17___default = /*#__PURE__*/__webpack_require__.n(jose__WEBPACK_IMPORTED_MODULE_17__); +/* harmony import */ var _lib_tokens_devicetoken__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ./lib/tokens/devicetoken */ "./main/xal/lib/tokens/devicetoken.ts"); +/* harmony import */ var _lib_tokens_sisutoken__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ./lib/tokens/sisutoken */ "./main/xal/lib/tokens/sisutoken.ts"); +/* harmony import */ var _lib_tokens_usertoken__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ./lib/tokens/usertoken */ "./main/xal/lib/tokens/usertoken.ts"); +/* harmony import */ var _lib_tokens_streamingtoken__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! ./lib/tokens/streamingtoken */ "./main/xal/lib/tokens/streamingtoken.ts"); +/* harmony import */ var _lib_tokens_xststoken__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! ./lib/tokens/xststoken */ "./main/xal/lib/tokens/xststoken.ts"); +/* harmony import */ var _lib_tokens_msaltoken__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! ./lib/tokens/msaltoken */ "./main/xal/lib/tokens/msaltoken.ts"); + + + + + + + + + +function ownKeys(e, r) { var t = _babel_runtime_corejs3_core_js_stable_object_keys__WEBPACK_IMPORTED_MODULE_0___default()(e); if ((_babel_runtime_corejs3_core_js_stable_object_get_own_property_symbols__WEBPACK_IMPORTED_MODULE_1___default())) { var o = _babel_runtime_corejs3_core_js_stable_object_get_own_property_symbols__WEBPACK_IMPORTED_MODULE_1___default()(e); r && (o = _babel_runtime_corejs3_core_js_stable_instance_filter__WEBPACK_IMPORTED_MODULE_2___default()(o).call(o, function (r) { return _babel_runtime_corejs3_core_js_stable_object_get_own_property_descriptor__WEBPACK_IMPORTED_MODULE_3___default()(e, r).enumerable; })), t.push.apply(t, o); } return t; } +function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var _context, _context2; var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? _babel_runtime_corejs3_core_js_stable_instance_for_each__WEBPACK_IMPORTED_MODULE_4___default()(_context = ownKeys(Object(t), !0)).call(_context, function (r) { _babel_runtime_corejs3_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_8___default()(e, r, t[r]); }) : (_babel_runtime_corejs3_core_js_stable_object_get_own_property_descriptors__WEBPACK_IMPORTED_MODULE_5___default()) ? _babel_runtime_corejs3_core_js_stable_object_define_properties__WEBPACK_IMPORTED_MODULE_6___default()(e, _babel_runtime_corejs3_core_js_stable_object_get_own_property_descriptors__WEBPACK_IMPORTED_MODULE_5___default()(t)) : _babel_runtime_corejs3_core_js_stable_instance_for_each__WEBPACK_IMPORTED_MODULE_4___default()(_context2 = ownKeys(Object(t))).call(_context2, function (r) { _babel_runtime_corejs3_core_js_stable_object_define_property__WEBPACK_IMPORTED_MODULE_7___default()(e, r, _babel_runtime_corejs3_core_js_stable_object_get_own_property_descriptor__WEBPACK_IMPORTED_MODULE_3___default()(t, r)); }); } return e; } + + + + + + + + + + + + + + + +const UUID = __webpack_require__(/*! uuid-1345 */ "uuid-1345"); +const nextUUID = () => UUID.v3({ + namespace: '6ba7b811-9dad-11d1-80b4-00c04fd430c8', + name: _babel_runtime_corejs3_core_js_stable_date_now__WEBPACK_IMPORTED_MODULE_9___default()().toString() +}); +class Xal { + constructor(tokenStore) { + _babel_runtime_corejs3_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_8___default()(this, "keys", void 0); + _babel_runtime_corejs3_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_8___default()(this, "jwtKeys", void 0); + _babel_runtime_corejs3_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_8___default()(this, "_app", { + AppId: '000000004c20a908', + //'000000004c12ae6f', // 0000000048183522 = working, but minecraft --<<< 000000004c12ae6f works, xbox app + TitleId: '328178078', + //'328178078', // 1016898439 = working + RedirectUri: 'ms-xal-000000004c20a908://auth' + }); + _babel_runtime_corejs3_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_8___default()(this, "codeChallange", void 0); + _babel_runtime_corejs3_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_8___default()(this, "_webToken", void 0); + _babel_runtime_corejs3_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_8___default()(this, "_xhomeToken", void 0); + _babel_runtime_corejs3_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_8___default()(this, "_xcloudToken", void 0); + if (tokenStore && tokenStore._jwtKeys) { + this.setKeys(tokenStore._jwtKeys.jwt).then(keys => { + // console.log('Keys loaded:', keys) + }).catch(error => { + console.log('Failed to load keys:', error); + }); + } + } + setKeys(orgJwtKey) { + return new (_babel_runtime_corejs3_core_js_stable_promise__WEBPACK_IMPORTED_MODULE_10___default())((resolve, reject) => { + crypto__WEBPACK_IMPORTED_MODULE_16__.subtle.importKey('jwk', orgJwtKey, { + name: 'ECDSA', + namedCurve: 'P-256' + }, true, ['sign']).then(jwtKey => { + const privateKey = crypto__WEBPACK_IMPORTED_MODULE_16__.KeyObject.from(jwtKey); + this.jwtKeys = { + raw: { + privateKey: privateKey + }, + jwt: orgJwtKey + }; + resolve(this.jwtKeys); + }).catch(error => { + console.log('key error:', error); + reject(error); + }); + }); + } + getKeys() { + return new (_babel_runtime_corejs3_core_js_stable_promise__WEBPACK_IMPORTED_MODULE_10___default())((resolve, reject) => { + if (this.jwtKeys !== undefined) { + resolve(this.jwtKeys); + } else if (_babel_runtime_corejs3_core_js_stable_instance_keys__WEBPACK_IMPORTED_MODULE_11___default()(this) === undefined) { + this.keys = crypto__WEBPACK_IMPORTED_MODULE_16___default().generateKeyPairSync('ec', { + namedCurve: 'P-256' + }); + this.jwtKeys = { + raw: _babel_runtime_corejs3_core_js_stable_instance_keys__WEBPACK_IMPORTED_MODULE_11___default()(this) + }; + (0,jose__WEBPACK_IMPORTED_MODULE_17__.exportJWK)(_babel_runtime_corejs3_core_js_stable_instance_keys__WEBPACK_IMPORTED_MODULE_11___default()(this).publicKey).then(jwk => { + const jwkKey = _objectSpread(_objectSpread({}, jwk), {}, { + alg: 'ES256', + use: 'sig' + }); + this.jwtKeys = { + raw: _babel_runtime_corejs3_core_js_stable_instance_keys__WEBPACK_IMPORTED_MODULE_11___default()(this), + jwt: jwkKey + }; + const jwkKeys = this.jwtKeys.raw.privateKey.export({ + type: 'pkcs8', + format: 'jwk' + }); + this.setKeys(jwkKeys).then(keys => { + resolve(keys); + }).catch(error => { + reject(error); + }); + }); + } else { + resolve(this.jwtKeys); + } + }); + } + getCodeChallange() { + return new (_babel_runtime_corejs3_core_js_stable_promise__WEBPACK_IMPORTED_MODULE_10___default())((resolve, reject) => { + if (this.codeChallange === undefined) { + const code_verifier = Buffer.from(crypto__WEBPACK_IMPORTED_MODULE_16___default().pseudoRandomBytes(32)).toString('base64url'); + const code_challenge = crypto__WEBPACK_IMPORTED_MODULE_16___default().createHash("sha256").update(code_verifier).digest(); + this.codeChallange = { + value: code_challenge.toString('base64url'), + method: 'S256', + verifier: code_verifier + }; + } + resolve(this.codeChallange); + }); + } + getRandomState(bytes = 64) { + return crypto__WEBPACK_IMPORTED_MODULE_16___default().randomBytes(bytes).toString('base64url'); + } + getDeviceToken() { + console.log('getDeviceToken...'); + return new (_babel_runtime_corejs3_core_js_stable_promise__WEBPACK_IMPORTED_MODULE_10___default())((resolve, reject) => { + this.getKeys().then(jwtKeys => { + const payload = { + Properties: { + AuthMethod: 'ProofOfPossession', + Id: `{${nextUUID()}}`, + DeviceType: 'Android', + SerialNumber: `{${nextUUID()}}`, + Version: '15.0', + ProofKey: { + 'use': 'sig', + 'alg': 'ES256', + 'kty': 'EC', + 'crv': 'P-256', + 'x': jwtKeys.jwt.x, + 'y': jwtKeys.jwt.y + } + }, + RelyingParty: 'http://auth.xboxlive.com', + TokenType: 'JWT' + }; + const body = _babel_runtime_corejs3_core_js_stable_json_stringify__WEBPACK_IMPORTED_MODULE_12___default()(payload); + const signature = this.sign('https://device.auth.xboxlive.com/device/authenticate', '', body, jwtKeys).toString('base64'); + const headers = _objectSpread(_objectSpread({}, { + 'x-xbl-contract-version': '1', + 'Cache-Control': 'no-store, must-revalidate, no-cache' + }), {}, { + Signature: signature + }); + const HttpClient = new _lib_http__WEBPACK_IMPORTED_MODULE_15__["default"](); + HttpClient.postRequest('device.auth.xboxlive.com', '/device/authenticate', headers, body).then(response => { + resolve(new _lib_tokens_devicetoken__WEBPACK_IMPORTED_MODULE_18__["default"](response.body())); + }).catch(error => { + reject(error); + }); + }); + }); + } + doSisuAuthentication(deviceToken, codeChallange, state) { + return new (_babel_runtime_corejs3_core_js_stable_promise__WEBPACK_IMPORTED_MODULE_10___default())((resolve, reject) => { + this.getKeys().then(jwtKeys => { + const payload = { + AppId: this._app.AppId, + TitleId: this._app.TitleId, + RedirectUri: this._app.RedirectUri, + DeviceToken: deviceToken.data.Token, + Sandbox: "RETAIL", + TokenType: "code", + Offers: ["service::user.auth.xboxlive.com::MBI_SSL"], + Query: { + display: 'android_phone', + code_challenge: codeChallange.value, + code_challenge_method: codeChallange.method, + state: state + } + }; + const body = _babel_runtime_corejs3_core_js_stable_json_stringify__WEBPACK_IMPORTED_MODULE_12___default()(payload); + const signature = this.sign('https://sisu.xboxlive.com/authenticate', '', body, jwtKeys).toString('base64'); + const headers = _objectSpread(_objectSpread({}, { + 'x-xbl-contract-version': '1', + 'Cache-Control': 'no-store, must-revalidate, no-cache' + }), {}, { + Signature: signature + }); + const HttpClient = new _lib_http__WEBPACK_IMPORTED_MODULE_15__["default"](); + HttpClient.postRequest('sisu.xboxlive.com', '/authenticate', headers, body).then(response => { + // Add SessionId to response object + const resBody = _objectSpread({ + SessionId: response.headers['x-sessionid'] + }, response.body()); + resolve(resBody); + }).catch(error => { + reject(error); + }); + }); + }); + } + doSisuAuthorization(userToken, deviceToken, SessionId) { + console.log('doSisuAuthorization...'); + return new (_babel_runtime_corejs3_core_js_stable_promise__WEBPACK_IMPORTED_MODULE_10___default())((resolve, reject) => { + this.getKeys().then(jwtKeys => { + const payload = _objectSpread({ + AccessToken: 't=' + userToken.data.access_token, + AppId: this._app.AppId, + DeviceToken: deviceToken.data.Token, + Sandbox: "RETAIL", + SiteName: "user.auth.xboxlive.com", + UseModernGamertag: true, + ProofKey: { + 'use': 'sig', + 'alg': 'ES256', + 'kty': 'EC', + 'crv': 'P-256', + 'x': jwtKeys.jwt.x, + 'y': jwtKeys.jwt.y + } + }, SessionId ? { + SessionId: SessionId + } : {}); + const body = _babel_runtime_corejs3_core_js_stable_json_stringify__WEBPACK_IMPORTED_MODULE_12___default()(payload); + const signature = this.sign('https://sisu.xboxlive.com/authorize', '', body, jwtKeys).toString('base64'); + const headers = { + 'x-xbl-contract-version': '1', + 'Cache-Control': 'no-store, must-revalidate, no-cache', + signature: signature + }; + const HttpClient = new _lib_http__WEBPACK_IMPORTED_MODULE_15__["default"](); + HttpClient.postRequest('sisu.xboxlive.com', '/authorize', headers, body).then(response => { + resolve(new _lib_tokens_sisutoken__WEBPACK_IMPORTED_MODULE_19__["default"](response.body())); + }).catch(error => { + reject(error); + }); + }); + }); + } + exchangeCodeForToken(code, codeVerifier) { + return new (_babel_runtime_corejs3_core_js_stable_promise__WEBPACK_IMPORTED_MODULE_10___default())((resolve, reject) => { + const payload = { + 'client_id': this._app.AppId, + 'code': code, + 'code_verifier': codeVerifier, + 'grant_type': 'authorization_code', + 'redirect_uri': this._app.RedirectUri, + 'scope': 'service::user.auth.xboxlive.com::MBI_SSL' + }; + const body = new (_babel_runtime_corejs3_core_js_stable_url_search_params__WEBPACK_IMPORTED_MODULE_13___default())(payload).toString(); + const headers = { + 'Content-Type': 'application/x-www-form-urlencoded', + 'Cache-Control': 'no-store, must-revalidate, no-cache' + }; + const HttpClient = new _lib_http__WEBPACK_IMPORTED_MODULE_15__["default"](); + HttpClient.postRequest('login.live.com', '/oauth20_token.srf', headers, body).then(response => { + resolve(new _lib_tokens_usertoken__WEBPACK_IMPORTED_MODULE_20__["default"](response.body())); + }).catch(error => { + reject(error); + }); + }); + } + refreshUserToken(userToken) { + console.log('refreshUserToken...'); + return new (_babel_runtime_corejs3_core_js_stable_promise__WEBPACK_IMPORTED_MODULE_10___default())((resolve, reject) => { + const payload = { + 'client_id': this._app.AppId, + 'grant_type': 'refresh_token', + 'refresh_token': userToken.data.refresh_token, + 'scope': 'service::user.auth.xboxlive.com::MBI_SSL' + }; + const body = new (_babel_runtime_corejs3_core_js_stable_url_search_params__WEBPACK_IMPORTED_MODULE_13___default())(payload).toString(); + const headers = { + 'Content-Type': 'application/x-www-form-urlencoded', + 'Cache-Control': 'no-store, must-revalidate, no-cache' + }; + const HttpClient = new _lib_http__WEBPACK_IMPORTED_MODULE_15__["default"](); + HttpClient.postRequest('login.live.com', '/oauth20_token.srf', headers, body).then(response => { + console.log('refreshUserToken success: ', response.body()); + resolve(new _lib_tokens_usertoken__WEBPACK_IMPORTED_MODULE_20__["default"](response.body())); + }).catch(error => { + console.log('refreshUserToken fail:', error); + reject(error); + }); + }); + } + doXstsAuthorization(sisuToken, relyingParty) { + return new (_babel_runtime_corejs3_core_js_stable_promise__WEBPACK_IMPORTED_MODULE_10___default())((resolve, reject) => { + this.getKeys().then(jwtKeys => { + const payload = { + Properties: { + SandboxId: 'RETAIL', + DeviceToken: sisuToken.data.DeviceToken, + TitleToken: sisuToken.data.TitleToken.Token, + UserTokens: [sisuToken.data.UserToken.Token] + }, + RelyingParty: relyingParty, + TokenType: 'JWT' + }; + const body = _babel_runtime_corejs3_core_js_stable_json_stringify__WEBPACK_IMPORTED_MODULE_12___default()(payload); + const signature = this.sign('https://xsts.auth.xboxlive.com/xsts/authorize', '', body, jwtKeys).toString('base64'); + const headers = _objectSpread(_objectSpread({}, { + 'x-xbl-contract-version': '1', + 'Cache-Control': 'no-store, must-revalidate, no-cache' + }), {}, { + Signature: signature + }); + const HttpClient = new _lib_http__WEBPACK_IMPORTED_MODULE_15__["default"](); + HttpClient.postRequest('xsts.auth.xboxlive.com', '/xsts/authorize', headers, body).then(response => { + resolve(new _lib_tokens_xststoken__WEBPACK_IMPORTED_MODULE_22__["default"](response.body())); + }).catch(error => { + reject(error); + }); + }); + }); + } + exchangeRefreshTokenForXcloudTransferToken(userToken) { + return new (_babel_runtime_corejs3_core_js_stable_promise__WEBPACK_IMPORTED_MODULE_10___default())((resolve, reject) => { + const payload = { + client_id: this._app.AppId, + grant_type: 'refresh_token', + scope: 'service::http://Passport.NET/purpose::PURPOSE_XBOX_CLOUD_CONSOLE_TRANSFER_TOKEN', + refresh_token: userToken.data.refresh_token, + code: '', + code_verifier: '', + redirect_uri: '' + }; + const body = new (_babel_runtime_corejs3_core_js_stable_url_search_params__WEBPACK_IMPORTED_MODULE_13___default())(payload).toString(); + const headers = { + 'Content-Type': 'application/x-www-form-urlencoded', + 'Cache-Control': 'no-store, must-revalidate, no-cache' + }; + const HttpClient = new _lib_http__WEBPACK_IMPORTED_MODULE_15__["default"](); + HttpClient.postRequest('login.live.com', '/oauth20_token.srf', headers, body).then(response => { + resolve(new _lib_tokens_msaltoken__WEBPACK_IMPORTED_MODULE_23__["default"](response.body())); + }).catch(error => { + reject(error); + }); + }); + } + getStreamToken(xstsToken, offering, forceRegionIp = '') { + return new (_babel_runtime_corejs3_core_js_stable_promise__WEBPACK_IMPORTED_MODULE_10___default())((resolve, reject) => { + const payload = { + 'token': xstsToken.data.Token, + 'offeringId': offering + }; + const body = _babel_runtime_corejs3_core_js_stable_json_stringify__WEBPACK_IMPORTED_MODULE_12___default()(payload); + const headers = { + 'Content-Type': 'application/json', + 'Cache-Control': 'no-store, must-revalidate, no-cache', + 'x-gssv-client': 'XboxComBrowser', + 'Content-Length': body.length + }; + if (forceRegionIp.length > 0) { + headers['x-forwarded-for'] = forceRegionIp; + } + const HttpClient = new _lib_http__WEBPACK_IMPORTED_MODULE_15__["default"](); + HttpClient.postRequest(offering + '.gssv-play-prod.xboxlive.com', '/v2/login/user', headers, body).then(response => { + resolve(new _lib_tokens_streamingtoken__WEBPACK_IMPORTED_MODULE_21__["default"](response.body())); + }).catch(error => { + reject(error); + }); + }); + } + + // Credits to https://github.com/PrismarineJS/prismarine-auth for the signing part + sign(url, authorizationToken, payload, jwtKeys) { + const windowsTimestamp = (BigInt(_babel_runtime_corejs3_core_js_stable_date_now__WEBPACK_IMPORTED_MODULE_9___default()() / 1000 | 0) + BigInt(11644473600)) * BigInt(10000000); + const pathAndQuery = new (_babel_runtime_corejs3_core_js_stable_url__WEBPACK_IMPORTED_MODULE_14___default())(url).pathname; + const allocSize = 5 + 9 + 5 + pathAndQuery.length + 1 + authorizationToken.length + 1 + payload.length + 1; + const buf = Buffer.alloc(allocSize); + buf.writeInt32BE(1); + buf.writeUInt8(0, 4); + buf.writeBigUInt64BE(windowsTimestamp, 5); + buf.writeUInt8(0, 13); + let offset = 14; + Buffer.from('POST').copy(buf, offset); + buf.writeUInt8(0, offset + 4); + offset = offset + 4 + 1; + Buffer.from(pathAndQuery).copy(buf, offset); + buf.writeUInt8(0, offset + pathAndQuery.length); + offset = offset + pathAndQuery.length + 1; + Buffer.from(authorizationToken).copy(buf, offset); + buf.writeUInt8(0, offset + authorizationToken.length); + offset = offset + authorizationToken.length + 1; + Buffer.from(payload).copy(buf, offset); + buf.writeUInt8(0, offset + payload.length); + offset = offset + payload.length + 1; + const signature = crypto__WEBPACK_IMPORTED_MODULE_16___default().sign('SHA256', buf, { + key: jwtKeys.raw.privateKey, + dsaEncoding: 'ieee-p1363' + }); + const header = Buffer.alloc(signature.length + 12); + header.writeInt32BE(1); + header.writeBigUInt64BE(windowsTimestamp, 4); + Buffer.from(signature).copy(header, 12); + return header; + } + + // Token retrieval helpers + async refreshTokens(tokenStore) { + const curUserToken = tokenStore.getUserToken(); + if (curUserToken === undefined) throw new Error('User token is missing. Please authenticate first'); + try { + const userToken = await this.refreshUserToken(curUserToken); + const deviceToken = await this.getDeviceToken(); + const sisuToken = await this.doSisuAuthorization(userToken, deviceToken); + tokenStore.setUserToken(userToken); + tokenStore.setSisuToken(sisuToken); + tokenStore.save(); + return { + userToken, + deviceToken, + sisuToken + }; + } catch (error) { + throw new TokenRefreshError('Failed to refresh tokens: ' + _babel_runtime_corejs3_core_js_stable_json_stringify__WEBPACK_IMPORTED_MODULE_12___default()(error)); + } + } + async getMsalToken(tokenStore) { + const userToken = tokenStore.getUserToken(); + if (userToken === undefined) throw new Error('User token is missing. Please authenticate first'); + return await this.exchangeRefreshTokenForXcloudTransferToken(userToken); + } + async getWebToken(tokenStore) { + const sisuToken = tokenStore.getSisuToken(); + if (sisuToken === undefined) throw new Error('Sisu token is missing. Please authenticate first'); + if (this._webToken === undefined || this._webToken.getSecondsValid() <= 60) { + const token = await this.doXstsAuthorization(sisuToken, 'http://xboxlive.com'); + this._webToken = token; + return token; + } else { + return this._webToken; + } + } + async getStreamingToken(tokenStore) { + const sisuToken = tokenStore.getSisuToken(); + if (sisuToken === undefined) throw new Error('Sisu token is missing. Please authenticate first'); + const xstsToken = await this.doXstsAuthorization(sisuToken, 'http://gssv.xboxlive.com/'); + if (this._xhomeToken === undefined || this._xhomeToken.getSecondsValid() <= 60) { + this._xhomeToken = await this.getStreamToken(xstsToken, 'xhome'); + } + if (this._xcloudToken === undefined || this._xcloudToken.getSecondsValid() <= 60) { + try { + this._xcloudToken = await this.getStreamToken(xstsToken, 'xgpuweb'); + } catch (error) { + this._xcloudToken = await this.getStreamToken(xstsToken, 'xgpuwebf2p'); + } + } + return { + xHomeToken: this._xhomeToken, + xCloudToken: this._xcloudToken + }; + } + async getRedirectUri() { + const deviceToken = await this.getDeviceToken(); + const codeChallange = await this.getCodeChallange(); + const state = this.getRandomState(); + const sisuAuth = await this.doSisuAuthentication(deviceToken, codeChallange, state); + return { + sisuAuth, + state, + codeChallange + }; + } + async authenticateUser(tokenStore, redirectObject, redirectUri) { + const url = new (_babel_runtime_corejs3_core_js_stable_url__WEBPACK_IMPORTED_MODULE_14___default())(redirectUri); + const error = url.searchParams.get('error'); + if (error) { + const error_description = url.searchParams.get('error_description'); + return false; + } + const code = url.searchParams.get('code'); + if (code) { + const state = url.searchParams.get('state'); + if (state) { + return this.authenticateUserUsingCode(tokenStore, redirectObject, code, state); + } + } + return false; + } + async authenticateUserUsingCode(tokenStore, redirectObject, code, state) { + console.log('authenticateUser:', code, state); + if (state !== redirectObject.state) { + // console.log('Authentication failed: State mismatch') + return false; + } + const codeChallange = await this.getCodeChallange(); + const userToken = await this.exchangeCodeForToken(code, codeChallange.verifier); + tokenStore.setUserToken(userToken); + tokenStore.setJwtKeys(this.jwtKeys); + tokenStore.save(); + return true; + } +} +class TokenRefreshError extends Error {} + +/***/ }), + +/***/ "./renderer/context/userContext.defaults.ts": +/*!**************************************************!*\ + !*** ./renderer/context/userContext.defaults.ts ***! + \**************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ defaultSettings: () => (/* binding */ defaultSettings) +/* harmony export */ }); +const defaultSettings = { + locale: "en", + resolution: 720, + xhome_bitrate_mode: "Auto", + xhome_bitrate: 20, + xcloud_bitrate_mode: "Auto", + xcloud_bitrate: 20, + preferred_game_language: "en-US", + force_region_ip: "", + codec: "", + vibration: true, + vibration_mode: "Native", + gamepad_kernal: "Native", + dead_zone: 0.1, + video_format: "", + virtual_gamepad_opacity: 0.6, + gamepad_maping: null, + native_gamepad_maping: null, + ipv6: false, + input_mousekeyboard_maping: { + ArrowLeft: 'DPadLeft', + ArrowUp: 'DPadUp', + ArrowRight: 'DPadRight', + ArrowDown: 'DPadDown', + + Enter: 'A', + a: 'A', + + Backspace: 'B', + b: 'B', + + x: 'X', + y: 'Y', + + '[': 'LeftShoulder', + ']': 'RightShoulder', + + '-': 'LeftTrigger', + '=': 'RightTrigger', + + v: 'View', + m: 'Menu', + n: 'Nexus', + }, + display_options: { + sharpness: 5, + saturation: 100, + contrast: 100, + brightness: 100, + }, + debug: false, +}; + + +/***/ }), + +/***/ "crypto": +/*!*************************!*\ + !*** external "crypto" ***! + \*************************/ +/***/ ((module) => { + +"use strict"; +module.exports = require("crypto"); + +/***/ }), + +/***/ "electron": +/*!***************************!*\ + !*** external "electron" ***! + \***************************/ +/***/ ((module) => { + +"use strict"; +module.exports = require("electron"); + +/***/ }), + +/***/ "fs": +/*!*********************!*\ + !*** external "fs" ***! + \*********************/ +/***/ ((module) => { + +"use strict"; +module.exports = require("fs"); + +/***/ }), + +/***/ "https": +/*!************************!*\ + !*** external "https" ***! + \************************/ +/***/ ((module) => { + +"use strict"; +module.exports = require("https"); + +/***/ }), + +/***/ "node:path": +/*!****************************!*\ + !*** external "node:path" ***! + \****************************/ +/***/ ((module) => { + +"use strict"; +module.exports = require("node:path"); + +/***/ }), + +/***/ "axios": +/*!************************!*\ + !*** external "axios" ***! + \************************/ +/***/ ((module) => { + +"use strict"; +module.exports = __WEBPACK_EXTERNAL_MODULE_axios__; + +/***/ }), + +/***/ "compare-versions": +/*!***********************************!*\ + !*** external "compare-versions" ***! + \***********************************/ +/***/ ((module) => { + +"use strict"; +module.exports = __WEBPACK_EXTERNAL_MODULE_compare_versions__; + +/***/ }), + +/***/ "debug": +/*!************************!*\ + !*** external "debug" ***! + \************************/ +/***/ ((module) => { + +"use strict"; +module.exports = __WEBPACK_EXTERNAL_MODULE_debug__; + +/***/ }), + +/***/ "electron-serve": +/*!*********************************!*\ + !*** external "electron-serve" ***! + \*********************************/ +/***/ ((module) => { + +"use strict"; +module.exports = __WEBPACK_EXTERNAL_MODULE_electron_serve__; + +/***/ }), + +/***/ "electron-store": +/*!*********************************!*\ + !*** external "electron-store" ***! + \*********************************/ +/***/ ((module) => { + +"use strict"; +module.exports = __WEBPACK_EXTERNAL_MODULE_electron_store__; + +/***/ }), + +/***/ "github-url-to-object": +/*!***************************************!*\ + !*** external "github-url-to-object" ***! + \***************************************/ +/***/ ((module) => { + +"use strict"; +module.exports = __WEBPACK_EXTERNAL_MODULE_github_url_to_object__; + +/***/ }), + +/***/ "ip-address": +/*!*****************************!*\ + !*** external "ip-address" ***! + \*****************************/ +/***/ ((module) => { + +"use strict"; +module.exports = __WEBPACK_EXTERNAL_MODULE_ip_address__; + +/***/ }), + +/***/ "jose": +/*!***********************!*\ + !*** external "jose" ***! + \***********************/ +/***/ ((module) => { + +"use strict"; +module.exports = __WEBPACK_EXTERNAL_MODULE_jose__; + +/***/ }), + +/***/ "uuid-1345": +/*!****************************!*\ + !*** external "uuid-1345" ***! + \****************************/ +/***/ ((module) => { + +"use strict"; +module.exports = __WEBPACK_EXTERNAL_MODULE_uuid_1345__; + +/***/ }), + +/***/ "xbox-webapi": +/*!******************************!*\ + !*** external "xbox-webapi" ***! + \******************************/ +/***/ ((module) => { + +"use strict"; +module.exports = __WEBPACK_EXTERNAL_MODULE_xbox_webapi__; + +/***/ }), + +/***/ "./node_modules/@babel/runtime-corejs3/core-js-stable/array/is-array.js": +/*!******************************************************************************!*\ + !*** ./node_modules/@babel/runtime-corejs3/core-js-stable/array/is-array.js ***! + \******************************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +module.exports = __webpack_require__(/*! core-js-pure/stable/array/is-array */ "./node_modules/core-js-pure/stable/array/is-array.js"); + +/***/ }), + +/***/ "./node_modules/@babel/runtime-corejs3/core-js-stable/date/now.js": +/*!************************************************************************!*\ + !*** ./node_modules/@babel/runtime-corejs3/core-js-stable/date/now.js ***! + \************************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +module.exports = __webpack_require__(/*! core-js-pure/stable/date/now */ "./node_modules/core-js-pure/stable/date/now.js"); + +/***/ }), + +/***/ "./node_modules/@babel/runtime-corejs3/core-js-stable/instance/filter.js": +/*!*******************************************************************************!*\ + !*** ./node_modules/@babel/runtime-corejs3/core-js-stable/instance/filter.js ***! + \*******************************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +module.exports = __webpack_require__(/*! core-js-pure/stable/instance/filter */ "./node_modules/core-js-pure/stable/instance/filter.js"); + +/***/ }), + +/***/ "./node_modules/@babel/runtime-corejs3/core-js-stable/instance/for-each.js": +/*!*********************************************************************************!*\ + !*** ./node_modules/@babel/runtime-corejs3/core-js-stable/instance/for-each.js ***! + \*********************************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +module.exports = __webpack_require__(/*! core-js-pure/stable/instance/for-each */ "./node_modules/core-js-pure/stable/instance/for-each.js"); + +/***/ }), + +/***/ "./node_modules/@babel/runtime-corejs3/core-js-stable/instance/includes.js": +/*!*********************************************************************************!*\ + !*** ./node_modules/@babel/runtime-corejs3/core-js-stable/instance/includes.js ***! + \*********************************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +module.exports = __webpack_require__(/*! core-js-pure/stable/instance/includes */ "./node_modules/core-js-pure/stable/instance/includes.js"); + +/***/ }), + +/***/ "./node_modules/@babel/runtime-corejs3/core-js-stable/instance/keys.js": +/*!*****************************************************************************!*\ + !*** ./node_modules/@babel/runtime-corejs3/core-js-stable/instance/keys.js ***! + \*****************************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +module.exports = __webpack_require__(/*! core-js-pure/stable/instance/keys */ "./node_modules/core-js-pure/stable/instance/keys.js"); + +/***/ }), + +/***/ "./node_modules/@babel/runtime-corejs3/core-js-stable/instance/some.js": +/*!*****************************************************************************!*\ + !*** ./node_modules/@babel/runtime-corejs3/core-js-stable/instance/some.js ***! + \*****************************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +module.exports = __webpack_require__(/*! core-js-pure/stable/instance/some */ "./node_modules/core-js-pure/stable/instance/some.js"); + +/***/ }), + +/***/ "./node_modules/@babel/runtime-corejs3/core-js-stable/instance/sort.js": +/*!*****************************************************************************!*\ + !*** ./node_modules/@babel/runtime-corejs3/core-js-stable/instance/sort.js ***! + \*****************************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +module.exports = __webpack_require__(/*! core-js-pure/stable/instance/sort */ "./node_modules/core-js-pure/stable/instance/sort.js"); + +/***/ }), + +/***/ "./node_modules/@babel/runtime-corejs3/core-js-stable/instance/trim.js": +/*!*****************************************************************************!*\ + !*** ./node_modules/@babel/runtime-corejs3/core-js-stable/instance/trim.js ***! + \*****************************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +module.exports = __webpack_require__(/*! core-js-pure/stable/instance/trim */ "./node_modules/core-js-pure/stable/instance/trim.js"); + +/***/ }), + +/***/ "./node_modules/@babel/runtime-corejs3/core-js-stable/json/stringify.js": +/*!******************************************************************************!*\ + !*** ./node_modules/@babel/runtime-corejs3/core-js-stable/json/stringify.js ***! + \******************************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +module.exports = __webpack_require__(/*! core-js-pure/stable/json/stringify */ "./node_modules/core-js-pure/stable/json/stringify.js"); + +/***/ }), + +/***/ "./node_modules/@babel/runtime-corejs3/core-js-stable/object/assign.js": +/*!*****************************************************************************!*\ + !*** ./node_modules/@babel/runtime-corejs3/core-js-stable/object/assign.js ***! + \*****************************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +module.exports = __webpack_require__(/*! core-js-pure/stable/object/assign */ "./node_modules/core-js-pure/stable/object/assign.js"); + +/***/ }), + +/***/ "./node_modules/@babel/runtime-corejs3/core-js-stable/object/define-properties.js": +/*!****************************************************************************************!*\ + !*** ./node_modules/@babel/runtime-corejs3/core-js-stable/object/define-properties.js ***! + \****************************************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +module.exports = __webpack_require__(/*! core-js-pure/stable/object/define-properties */ "./node_modules/core-js-pure/stable/object/define-properties.js"); + +/***/ }), + +/***/ "./node_modules/@babel/runtime-corejs3/core-js-stable/object/define-property.js": +/*!**************************************************************************************!*\ + !*** ./node_modules/@babel/runtime-corejs3/core-js-stable/object/define-property.js ***! + \**************************************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +module.exports = __webpack_require__(/*! core-js-pure/stable/object/define-property */ "./node_modules/core-js-pure/stable/object/define-property.js"); + +/***/ }), + +/***/ "./node_modules/@babel/runtime-corejs3/core-js-stable/object/get-own-property-descriptor.js": +/*!**************************************************************************************************!*\ + !*** ./node_modules/@babel/runtime-corejs3/core-js-stable/object/get-own-property-descriptor.js ***! + \**************************************************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +module.exports = __webpack_require__(/*! core-js-pure/stable/object/get-own-property-descriptor */ "./node_modules/core-js-pure/stable/object/get-own-property-descriptor.js"); + +/***/ }), + +/***/ "./node_modules/@babel/runtime-corejs3/core-js-stable/object/get-own-property-descriptors.js": +/*!***************************************************************************************************!*\ + !*** ./node_modules/@babel/runtime-corejs3/core-js-stable/object/get-own-property-descriptors.js ***! + \***************************************************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +module.exports = __webpack_require__(/*! core-js-pure/stable/object/get-own-property-descriptors */ "./node_modules/core-js-pure/stable/object/get-own-property-descriptors.js"); + +/***/ }), + +/***/ "./node_modules/@babel/runtime-corejs3/core-js-stable/object/get-own-property-symbols.js": +/*!***********************************************************************************************!*\ + !*** ./node_modules/@babel/runtime-corejs3/core-js-stable/object/get-own-property-symbols.js ***! + \***********************************************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +module.exports = __webpack_require__(/*! core-js-pure/stable/object/get-own-property-symbols */ "./node_modules/core-js-pure/stable/object/get-own-property-symbols.js"); + +/***/ }), + +/***/ "./node_modules/@babel/runtime-corejs3/core-js-stable/object/keys.js": +/*!***************************************************************************!*\ + !*** ./node_modules/@babel/runtime-corejs3/core-js-stable/object/keys.js ***! + \***************************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +module.exports = __webpack_require__(/*! core-js-pure/stable/object/keys */ "./node_modules/core-js-pure/stable/object/keys.js"); + +/***/ }), + +/***/ "./node_modules/@babel/runtime-corejs3/core-js-stable/promise.js": +/*!***********************************************************************!*\ + !*** ./node_modules/@babel/runtime-corejs3/core-js-stable/promise.js ***! + \***********************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +module.exports = __webpack_require__(/*! core-js-pure/stable/promise */ "./node_modules/core-js-pure/stable/promise/index.js"); + +/***/ }), + +/***/ "./node_modules/@babel/runtime-corejs3/core-js-stable/set-immediate.js": +/*!*****************************************************************************!*\ + !*** ./node_modules/@babel/runtime-corejs3/core-js-stable/set-immediate.js ***! + \*****************************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +module.exports = __webpack_require__(/*! core-js-pure/stable/set-immediate */ "./node_modules/core-js-pure/stable/set-immediate.js"); + +/***/ }), + +/***/ "./node_modules/@babel/runtime-corejs3/core-js-stable/set-timeout.js": +/*!***************************************************************************!*\ + !*** ./node_modules/@babel/runtime-corejs3/core-js-stable/set-timeout.js ***! + \***************************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +module.exports = __webpack_require__(/*! core-js-pure/stable/set-timeout */ "./node_modules/core-js-pure/stable/set-timeout.js"); + +/***/ }), + +/***/ "./node_modules/@babel/runtime-corejs3/core-js-stable/set.js": +/*!*******************************************************************!*\ + !*** ./node_modules/@babel/runtime-corejs3/core-js-stable/set.js ***! + \*******************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +module.exports = __webpack_require__(/*! core-js-pure/stable/set */ "./node_modules/core-js-pure/stable/set/index.js"); + +/***/ }), + +/***/ "./node_modules/@babel/runtime-corejs3/core-js-stable/url-search-params.js": +/*!*********************************************************************************!*\ + !*** ./node_modules/@babel/runtime-corejs3/core-js-stable/url-search-params.js ***! + \*********************************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +module.exports = __webpack_require__(/*! core-js-pure/stable/url-search-params */ "./node_modules/core-js-pure/stable/url-search-params/index.js"); + +/***/ }), + +/***/ "./node_modules/@babel/runtime-corejs3/core-js-stable/url.js": +/*!*******************************************************************!*\ + !*** ./node_modules/@babel/runtime-corejs3/core-js-stable/url.js ***! + \*******************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +module.exports = __webpack_require__(/*! core-js-pure/stable/url */ "./node_modules/core-js-pure/stable/url/index.js"); + +/***/ }), + +/***/ "./node_modules/@babel/runtime-corejs3/helpers/defineProperty.js": +/*!***********************************************************************!*\ + !*** ./node_modules/@babel/runtime-corejs3/helpers/defineProperty.js ***! + \***********************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var _Object$defineProperty = __webpack_require__(/*! core-js-pure/features/object/define-property.js */ "./node_modules/core-js-pure/features/object/define-property.js"); +var toPropertyKey = __webpack_require__(/*! ./toPropertyKey.js */ "./node_modules/@babel/runtime-corejs3/helpers/toPropertyKey.js"); +function _defineProperty(obj, key, value) { + key = toPropertyKey(key); + if (key in obj) { + _Object$defineProperty(obj, key, { + value: value, + enumerable: true, + configurable: true, + writable: true + }); + } else { + obj[key] = value; + } + return obj; +} +module.exports = _defineProperty, module.exports.__esModule = true, module.exports["default"] = module.exports; + +/***/ }), + +/***/ "./node_modules/@babel/runtime-corejs3/helpers/toPrimitive.js": +/*!********************************************************************!*\ + !*** ./node_modules/@babel/runtime-corejs3/helpers/toPrimitive.js ***! + \********************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var _Symbol$toPrimitive = __webpack_require__(/*! core-js-pure/features/symbol/to-primitive.js */ "./node_modules/core-js-pure/features/symbol/to-primitive.js"); +var _typeof = (__webpack_require__(/*! ./typeof.js */ "./node_modules/@babel/runtime-corejs3/helpers/typeof.js")["default"]); +function toPrimitive(t, r) { + if ("object" != _typeof(t) || !t) return t; + var e = t[_Symbol$toPrimitive]; + if (void 0 !== e) { + var i = e.call(t, r || "default"); + if ("object" != _typeof(i)) return i; + throw new TypeError("@@toPrimitive must return a primitive value."); + } + return ("string" === r ? String : Number)(t); +} +module.exports = toPrimitive, module.exports.__esModule = true, module.exports["default"] = module.exports; + +/***/ }), + +/***/ "./node_modules/@babel/runtime-corejs3/helpers/toPropertyKey.js": +/*!**********************************************************************!*\ + !*** ./node_modules/@babel/runtime-corejs3/helpers/toPropertyKey.js ***! + \**********************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var _typeof = (__webpack_require__(/*! ./typeof.js */ "./node_modules/@babel/runtime-corejs3/helpers/typeof.js")["default"]); +var toPrimitive = __webpack_require__(/*! ./toPrimitive.js */ "./node_modules/@babel/runtime-corejs3/helpers/toPrimitive.js"); +function toPropertyKey(t) { + var i = toPrimitive(t, "string"); + return "symbol" == _typeof(i) ? i : i + ""; +} +module.exports = toPropertyKey, module.exports.__esModule = true, module.exports["default"] = module.exports; + +/***/ }), + +/***/ "./node_modules/@babel/runtime-corejs3/helpers/typeof.js": +/*!***************************************************************!*\ + !*** ./node_modules/@babel/runtime-corejs3/helpers/typeof.js ***! + \***************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var _Symbol = __webpack_require__(/*! core-js-pure/features/symbol/index.js */ "./node_modules/core-js-pure/features/symbol/index.js"); +var _Symbol$iterator = __webpack_require__(/*! core-js-pure/features/symbol/iterator.js */ "./node_modules/core-js-pure/features/symbol/iterator.js"); +function _typeof(o) { + "@babel/helpers - typeof"; + + return (module.exports = _typeof = "function" == typeof _Symbol && "symbol" == typeof _Symbol$iterator ? function (o) { + return typeof o; + } : function (o) { + return o && "function" == typeof _Symbol && o.constructor === _Symbol && o !== _Symbol.prototype ? "symbol" : typeof o; + }, module.exports.__esModule = true, module.exports["default"] = module.exports), _typeof(o); +} +module.exports = _typeof, module.exports.__esModule = true, module.exports["default"] = module.exports; + +/***/ }), + +/***/ "./node_modules/core-js-pure/actual/object/define-property.js": +/*!********************************************************************!*\ + !*** ./node_modules/core-js-pure/actual/object/define-property.js ***! + \********************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var parent = __webpack_require__(/*! ../../stable/object/define-property */ "./node_modules/core-js-pure/stable/object/define-property.js"); + +module.exports = parent; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/actual/symbol/index.js": +/*!**********************************************************!*\ + !*** ./node_modules/core-js-pure/actual/symbol/index.js ***! + \**********************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var parent = __webpack_require__(/*! ../../stable/symbol */ "./node_modules/core-js-pure/stable/symbol/index.js"); + +__webpack_require__(/*! ../../modules/esnext.function.metadata */ "./node_modules/core-js-pure/modules/esnext.function.metadata.js"); +__webpack_require__(/*! ../../modules/esnext.symbol.async-dispose */ "./node_modules/core-js-pure/modules/esnext.symbol.async-dispose.js"); +__webpack_require__(/*! ../../modules/esnext.symbol.dispose */ "./node_modules/core-js-pure/modules/esnext.symbol.dispose.js"); +__webpack_require__(/*! ../../modules/esnext.symbol.metadata */ "./node_modules/core-js-pure/modules/esnext.symbol.metadata.js"); + +module.exports = parent; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/actual/symbol/iterator.js": +/*!*************************************************************!*\ + !*** ./node_modules/core-js-pure/actual/symbol/iterator.js ***! + \*************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var parent = __webpack_require__(/*! ../../stable/symbol/iterator */ "./node_modules/core-js-pure/stable/symbol/iterator.js"); + +module.exports = parent; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/actual/symbol/to-primitive.js": +/*!*****************************************************************!*\ + !*** ./node_modules/core-js-pure/actual/symbol/to-primitive.js ***! + \*****************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var parent = __webpack_require__(/*! ../../stable/symbol/to-primitive */ "./node_modules/core-js-pure/stable/symbol/to-primitive.js"); + +module.exports = parent; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/es/array/is-array.js": +/*!********************************************************!*\ + !*** ./node_modules/core-js-pure/es/array/is-array.js ***! + \********************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +__webpack_require__(/*! ../../modules/es.array.is-array */ "./node_modules/core-js-pure/modules/es.array.is-array.js"); +var path = __webpack_require__(/*! ../../internals/path */ "./node_modules/core-js-pure/internals/path.js"); + +module.exports = path.Array.isArray; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/es/array/virtual/filter.js": +/*!**************************************************************!*\ + !*** ./node_modules/core-js-pure/es/array/virtual/filter.js ***! + \**************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +__webpack_require__(/*! ../../../modules/es.array.filter */ "./node_modules/core-js-pure/modules/es.array.filter.js"); +var getBuiltInPrototypeMethod = __webpack_require__(/*! ../../../internals/get-built-in-prototype-method */ "./node_modules/core-js-pure/internals/get-built-in-prototype-method.js"); + +module.exports = getBuiltInPrototypeMethod('Array', 'filter'); + + +/***/ }), + +/***/ "./node_modules/core-js-pure/es/array/virtual/for-each.js": +/*!****************************************************************!*\ + !*** ./node_modules/core-js-pure/es/array/virtual/for-each.js ***! + \****************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +__webpack_require__(/*! ../../../modules/es.array.for-each */ "./node_modules/core-js-pure/modules/es.array.for-each.js"); +var getBuiltInPrototypeMethod = __webpack_require__(/*! ../../../internals/get-built-in-prototype-method */ "./node_modules/core-js-pure/internals/get-built-in-prototype-method.js"); + +module.exports = getBuiltInPrototypeMethod('Array', 'forEach'); + + +/***/ }), + +/***/ "./node_modules/core-js-pure/es/array/virtual/includes.js": +/*!****************************************************************!*\ + !*** ./node_modules/core-js-pure/es/array/virtual/includes.js ***! + \****************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +__webpack_require__(/*! ../../../modules/es.array.includes */ "./node_modules/core-js-pure/modules/es.array.includes.js"); +var getBuiltInPrototypeMethod = __webpack_require__(/*! ../../../internals/get-built-in-prototype-method */ "./node_modules/core-js-pure/internals/get-built-in-prototype-method.js"); + +module.exports = getBuiltInPrototypeMethod('Array', 'includes'); + + +/***/ }), + +/***/ "./node_modules/core-js-pure/es/array/virtual/keys.js": +/*!************************************************************!*\ + !*** ./node_modules/core-js-pure/es/array/virtual/keys.js ***! + \************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +__webpack_require__(/*! ../../../modules/es.array.iterator */ "./node_modules/core-js-pure/modules/es.array.iterator.js"); +__webpack_require__(/*! ../../../modules/es.object.to-string */ "./node_modules/core-js-pure/modules/es.object.to-string.js"); +var getBuiltInPrototypeMethod = __webpack_require__(/*! ../../../internals/get-built-in-prototype-method */ "./node_modules/core-js-pure/internals/get-built-in-prototype-method.js"); + +module.exports = getBuiltInPrototypeMethod('Array', 'keys'); + + +/***/ }), + +/***/ "./node_modules/core-js-pure/es/array/virtual/some.js": +/*!************************************************************!*\ + !*** ./node_modules/core-js-pure/es/array/virtual/some.js ***! + \************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +__webpack_require__(/*! ../../../modules/es.array.some */ "./node_modules/core-js-pure/modules/es.array.some.js"); +var getBuiltInPrototypeMethod = __webpack_require__(/*! ../../../internals/get-built-in-prototype-method */ "./node_modules/core-js-pure/internals/get-built-in-prototype-method.js"); + +module.exports = getBuiltInPrototypeMethod('Array', 'some'); + + +/***/ }), + +/***/ "./node_modules/core-js-pure/es/array/virtual/sort.js": +/*!************************************************************!*\ + !*** ./node_modules/core-js-pure/es/array/virtual/sort.js ***! + \************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +__webpack_require__(/*! ../../../modules/es.array.sort */ "./node_modules/core-js-pure/modules/es.array.sort.js"); +var getBuiltInPrototypeMethod = __webpack_require__(/*! ../../../internals/get-built-in-prototype-method */ "./node_modules/core-js-pure/internals/get-built-in-prototype-method.js"); + +module.exports = getBuiltInPrototypeMethod('Array', 'sort'); + + +/***/ }), + +/***/ "./node_modules/core-js-pure/es/date/now.js": +/*!**************************************************!*\ + !*** ./node_modules/core-js-pure/es/date/now.js ***! + \**************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +__webpack_require__(/*! ../../modules/es.date.now */ "./node_modules/core-js-pure/modules/es.date.now.js"); +var path = __webpack_require__(/*! ../../internals/path */ "./node_modules/core-js-pure/internals/path.js"); + +module.exports = path.Date.now; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/es/instance/filter.js": +/*!*********************************************************!*\ + !*** ./node_modules/core-js-pure/es/instance/filter.js ***! + \*********************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var isPrototypeOf = __webpack_require__(/*! ../../internals/object-is-prototype-of */ "./node_modules/core-js-pure/internals/object-is-prototype-of.js"); +var method = __webpack_require__(/*! ../array/virtual/filter */ "./node_modules/core-js-pure/es/array/virtual/filter.js"); + +var ArrayPrototype = Array.prototype; + +module.exports = function (it) { + var own = it.filter; + return it === ArrayPrototype || (isPrototypeOf(ArrayPrototype, it) && own === ArrayPrototype.filter) ? method : own; +}; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/es/instance/includes.js": +/*!***********************************************************!*\ + !*** ./node_modules/core-js-pure/es/instance/includes.js ***! + \***********************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var isPrototypeOf = __webpack_require__(/*! ../../internals/object-is-prototype-of */ "./node_modules/core-js-pure/internals/object-is-prototype-of.js"); +var arrayMethod = __webpack_require__(/*! ../array/virtual/includes */ "./node_modules/core-js-pure/es/array/virtual/includes.js"); +var stringMethod = __webpack_require__(/*! ../string/virtual/includes */ "./node_modules/core-js-pure/es/string/virtual/includes.js"); + +var ArrayPrototype = Array.prototype; +var StringPrototype = String.prototype; + +module.exports = function (it) { + var own = it.includes; + if (it === ArrayPrototype || (isPrototypeOf(ArrayPrototype, it) && own === ArrayPrototype.includes)) return arrayMethod; + if (typeof it == 'string' || it === StringPrototype || (isPrototypeOf(StringPrototype, it) && own === StringPrototype.includes)) { + return stringMethod; + } return own; +}; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/es/instance/some.js": +/*!*******************************************************!*\ + !*** ./node_modules/core-js-pure/es/instance/some.js ***! + \*******************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var isPrototypeOf = __webpack_require__(/*! ../../internals/object-is-prototype-of */ "./node_modules/core-js-pure/internals/object-is-prototype-of.js"); +var method = __webpack_require__(/*! ../array/virtual/some */ "./node_modules/core-js-pure/es/array/virtual/some.js"); + +var ArrayPrototype = Array.prototype; + +module.exports = function (it) { + var own = it.some; + return it === ArrayPrototype || (isPrototypeOf(ArrayPrototype, it) && own === ArrayPrototype.some) ? method : own; +}; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/es/instance/sort.js": +/*!*******************************************************!*\ + !*** ./node_modules/core-js-pure/es/instance/sort.js ***! + \*******************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var isPrototypeOf = __webpack_require__(/*! ../../internals/object-is-prototype-of */ "./node_modules/core-js-pure/internals/object-is-prototype-of.js"); +var method = __webpack_require__(/*! ../array/virtual/sort */ "./node_modules/core-js-pure/es/array/virtual/sort.js"); + +var ArrayPrototype = Array.prototype; + +module.exports = function (it) { + var own = it.sort; + return it === ArrayPrototype || (isPrototypeOf(ArrayPrototype, it) && own === ArrayPrototype.sort) ? method : own; +}; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/es/instance/trim.js": +/*!*******************************************************!*\ + !*** ./node_modules/core-js-pure/es/instance/trim.js ***! + \*******************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var isPrototypeOf = __webpack_require__(/*! ../../internals/object-is-prototype-of */ "./node_modules/core-js-pure/internals/object-is-prototype-of.js"); +var method = __webpack_require__(/*! ../string/virtual/trim */ "./node_modules/core-js-pure/es/string/virtual/trim.js"); + +var StringPrototype = String.prototype; + +module.exports = function (it) { + var own = it.trim; + return typeof it == 'string' || it === StringPrototype + || (isPrototypeOf(StringPrototype, it) && own === StringPrototype.trim) ? method : own; +}; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/es/json/stringify.js": +/*!********************************************************!*\ + !*** ./node_modules/core-js-pure/es/json/stringify.js ***! + \********************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +__webpack_require__(/*! ../../modules/es.date.to-json */ "./node_modules/core-js-pure/modules/es.date.to-json.js"); +__webpack_require__(/*! ../../modules/es.json.stringify */ "./node_modules/core-js-pure/modules/es.json.stringify.js"); +var path = __webpack_require__(/*! ../../internals/path */ "./node_modules/core-js-pure/internals/path.js"); +var apply = __webpack_require__(/*! ../../internals/function-apply */ "./node_modules/core-js-pure/internals/function-apply.js"); + +// eslint-disable-next-line es/no-json -- safe +if (!path.JSON) path.JSON = { stringify: JSON.stringify }; + +// eslint-disable-next-line no-unused-vars -- required for `.length` +module.exports = function stringify(it, replacer, space) { + return apply(path.JSON.stringify, null, arguments); +}; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/es/object/assign.js": +/*!*******************************************************!*\ + !*** ./node_modules/core-js-pure/es/object/assign.js ***! + \*******************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +__webpack_require__(/*! ../../modules/es.object.assign */ "./node_modules/core-js-pure/modules/es.object.assign.js"); +var path = __webpack_require__(/*! ../../internals/path */ "./node_modules/core-js-pure/internals/path.js"); + +module.exports = path.Object.assign; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/es/object/define-properties.js": +/*!******************************************************************!*\ + !*** ./node_modules/core-js-pure/es/object/define-properties.js ***! + \******************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +__webpack_require__(/*! ../../modules/es.object.define-properties */ "./node_modules/core-js-pure/modules/es.object.define-properties.js"); +var path = __webpack_require__(/*! ../../internals/path */ "./node_modules/core-js-pure/internals/path.js"); + +var Object = path.Object; + +var defineProperties = module.exports = function defineProperties(T, D) { + return Object.defineProperties(T, D); +}; + +if (Object.defineProperties.sham) defineProperties.sham = true; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/es/object/define-property.js": +/*!****************************************************************!*\ + !*** ./node_modules/core-js-pure/es/object/define-property.js ***! + \****************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +__webpack_require__(/*! ../../modules/es.object.define-property */ "./node_modules/core-js-pure/modules/es.object.define-property.js"); +var path = __webpack_require__(/*! ../../internals/path */ "./node_modules/core-js-pure/internals/path.js"); + +var Object = path.Object; + +var defineProperty = module.exports = function defineProperty(it, key, desc) { + return Object.defineProperty(it, key, desc); +}; + +if (Object.defineProperty.sham) defineProperty.sham = true; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/es/object/get-own-property-descriptor.js": +/*!****************************************************************************!*\ + !*** ./node_modules/core-js-pure/es/object/get-own-property-descriptor.js ***! + \****************************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +__webpack_require__(/*! ../../modules/es.object.get-own-property-descriptor */ "./node_modules/core-js-pure/modules/es.object.get-own-property-descriptor.js"); +var path = __webpack_require__(/*! ../../internals/path */ "./node_modules/core-js-pure/internals/path.js"); + +var Object = path.Object; + +var getOwnPropertyDescriptor = module.exports = function getOwnPropertyDescriptor(it, key) { + return Object.getOwnPropertyDescriptor(it, key); +}; + +if (Object.getOwnPropertyDescriptor.sham) getOwnPropertyDescriptor.sham = true; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/es/object/get-own-property-descriptors.js": +/*!*****************************************************************************!*\ + !*** ./node_modules/core-js-pure/es/object/get-own-property-descriptors.js ***! + \*****************************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +__webpack_require__(/*! ../../modules/es.object.get-own-property-descriptors */ "./node_modules/core-js-pure/modules/es.object.get-own-property-descriptors.js"); +var path = __webpack_require__(/*! ../../internals/path */ "./node_modules/core-js-pure/internals/path.js"); + +module.exports = path.Object.getOwnPropertyDescriptors; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/es/object/get-own-property-symbols.js": +/*!*************************************************************************!*\ + !*** ./node_modules/core-js-pure/es/object/get-own-property-symbols.js ***! + \*************************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +__webpack_require__(/*! ../../modules/es.symbol */ "./node_modules/core-js-pure/modules/es.symbol.js"); +var path = __webpack_require__(/*! ../../internals/path */ "./node_modules/core-js-pure/internals/path.js"); + +module.exports = path.Object.getOwnPropertySymbols; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/es/object/keys.js": +/*!*****************************************************!*\ + !*** ./node_modules/core-js-pure/es/object/keys.js ***! + \*****************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +__webpack_require__(/*! ../../modules/es.object.keys */ "./node_modules/core-js-pure/modules/es.object.keys.js"); +var path = __webpack_require__(/*! ../../internals/path */ "./node_modules/core-js-pure/internals/path.js"); + +module.exports = path.Object.keys; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/es/promise/index.js": +/*!*******************************************************!*\ + !*** ./node_modules/core-js-pure/es/promise/index.js ***! + \*******************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +__webpack_require__(/*! ../../modules/es.aggregate-error */ "./node_modules/core-js-pure/modules/es.aggregate-error.js"); +__webpack_require__(/*! ../../modules/es.array.iterator */ "./node_modules/core-js-pure/modules/es.array.iterator.js"); +__webpack_require__(/*! ../../modules/es.object.to-string */ "./node_modules/core-js-pure/modules/es.object.to-string.js"); +__webpack_require__(/*! ../../modules/es.promise */ "./node_modules/core-js-pure/modules/es.promise.js"); +__webpack_require__(/*! ../../modules/es.promise.all-settled */ "./node_modules/core-js-pure/modules/es.promise.all-settled.js"); +__webpack_require__(/*! ../../modules/es.promise.any */ "./node_modules/core-js-pure/modules/es.promise.any.js"); +__webpack_require__(/*! ../../modules/es.promise.with-resolvers */ "./node_modules/core-js-pure/modules/es.promise.with-resolvers.js"); +__webpack_require__(/*! ../../modules/es.promise.finally */ "./node_modules/core-js-pure/modules/es.promise.finally.js"); +__webpack_require__(/*! ../../modules/es.string.iterator */ "./node_modules/core-js-pure/modules/es.string.iterator.js"); +var path = __webpack_require__(/*! ../../internals/path */ "./node_modules/core-js-pure/internals/path.js"); + +module.exports = path.Promise; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/es/set/index.js": +/*!***************************************************!*\ + !*** ./node_modules/core-js-pure/es/set/index.js ***! + \***************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +__webpack_require__(/*! ../../modules/es.array.iterator */ "./node_modules/core-js-pure/modules/es.array.iterator.js"); +__webpack_require__(/*! ../../modules/es.object.to-string */ "./node_modules/core-js-pure/modules/es.object.to-string.js"); +__webpack_require__(/*! ../../modules/es.set */ "./node_modules/core-js-pure/modules/es.set.js"); +__webpack_require__(/*! ../../modules/es.set.difference.v2 */ "./node_modules/core-js-pure/modules/es.set.difference.v2.js"); +__webpack_require__(/*! ../../modules/es.set.intersection.v2 */ "./node_modules/core-js-pure/modules/es.set.intersection.v2.js"); +__webpack_require__(/*! ../../modules/es.set.is-disjoint-from.v2 */ "./node_modules/core-js-pure/modules/es.set.is-disjoint-from.v2.js"); +__webpack_require__(/*! ../../modules/es.set.is-subset-of.v2 */ "./node_modules/core-js-pure/modules/es.set.is-subset-of.v2.js"); +__webpack_require__(/*! ../../modules/es.set.is-superset-of.v2 */ "./node_modules/core-js-pure/modules/es.set.is-superset-of.v2.js"); +__webpack_require__(/*! ../../modules/es.set.symmetric-difference.v2 */ "./node_modules/core-js-pure/modules/es.set.symmetric-difference.v2.js"); +__webpack_require__(/*! ../../modules/es.set.union.v2 */ "./node_modules/core-js-pure/modules/es.set.union.v2.js"); +__webpack_require__(/*! ../../modules/es.string.iterator */ "./node_modules/core-js-pure/modules/es.string.iterator.js"); +var path = __webpack_require__(/*! ../../internals/path */ "./node_modules/core-js-pure/internals/path.js"); + +module.exports = path.Set; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/es/string/virtual/includes.js": +/*!*****************************************************************!*\ + !*** ./node_modules/core-js-pure/es/string/virtual/includes.js ***! + \*****************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +__webpack_require__(/*! ../../../modules/es.string.includes */ "./node_modules/core-js-pure/modules/es.string.includes.js"); +var getBuiltInPrototypeMethod = __webpack_require__(/*! ../../../internals/get-built-in-prototype-method */ "./node_modules/core-js-pure/internals/get-built-in-prototype-method.js"); + +module.exports = getBuiltInPrototypeMethod('String', 'includes'); + + +/***/ }), + +/***/ "./node_modules/core-js-pure/es/string/virtual/trim.js": +/*!*************************************************************!*\ + !*** ./node_modules/core-js-pure/es/string/virtual/trim.js ***! + \*************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +__webpack_require__(/*! ../../../modules/es.string.trim */ "./node_modules/core-js-pure/modules/es.string.trim.js"); +var getBuiltInPrototypeMethod = __webpack_require__(/*! ../../../internals/get-built-in-prototype-method */ "./node_modules/core-js-pure/internals/get-built-in-prototype-method.js"); + +module.exports = getBuiltInPrototypeMethod('String', 'trim'); + + +/***/ }), + +/***/ "./node_modules/core-js-pure/es/symbol/index.js": +/*!******************************************************!*\ + !*** ./node_modules/core-js-pure/es/symbol/index.js ***! + \******************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +__webpack_require__(/*! ../../modules/es.array.concat */ "./node_modules/core-js-pure/modules/es.array.concat.js"); +__webpack_require__(/*! ../../modules/es.object.to-string */ "./node_modules/core-js-pure/modules/es.object.to-string.js"); +__webpack_require__(/*! ../../modules/es.symbol */ "./node_modules/core-js-pure/modules/es.symbol.js"); +__webpack_require__(/*! ../../modules/es.symbol.async-iterator */ "./node_modules/core-js-pure/modules/es.symbol.async-iterator.js"); +__webpack_require__(/*! ../../modules/es.symbol.description */ "./node_modules/core-js-pure/modules/es.symbol.description.js"); +__webpack_require__(/*! ../../modules/es.symbol.has-instance */ "./node_modules/core-js-pure/modules/es.symbol.has-instance.js"); +__webpack_require__(/*! ../../modules/es.symbol.is-concat-spreadable */ "./node_modules/core-js-pure/modules/es.symbol.is-concat-spreadable.js"); +__webpack_require__(/*! ../../modules/es.symbol.iterator */ "./node_modules/core-js-pure/modules/es.symbol.iterator.js"); +__webpack_require__(/*! ../../modules/es.symbol.match */ "./node_modules/core-js-pure/modules/es.symbol.match.js"); +__webpack_require__(/*! ../../modules/es.symbol.match-all */ "./node_modules/core-js-pure/modules/es.symbol.match-all.js"); +__webpack_require__(/*! ../../modules/es.symbol.replace */ "./node_modules/core-js-pure/modules/es.symbol.replace.js"); +__webpack_require__(/*! ../../modules/es.symbol.search */ "./node_modules/core-js-pure/modules/es.symbol.search.js"); +__webpack_require__(/*! ../../modules/es.symbol.species */ "./node_modules/core-js-pure/modules/es.symbol.species.js"); +__webpack_require__(/*! ../../modules/es.symbol.split */ "./node_modules/core-js-pure/modules/es.symbol.split.js"); +__webpack_require__(/*! ../../modules/es.symbol.to-primitive */ "./node_modules/core-js-pure/modules/es.symbol.to-primitive.js"); +__webpack_require__(/*! ../../modules/es.symbol.to-string-tag */ "./node_modules/core-js-pure/modules/es.symbol.to-string-tag.js"); +__webpack_require__(/*! ../../modules/es.symbol.unscopables */ "./node_modules/core-js-pure/modules/es.symbol.unscopables.js"); +__webpack_require__(/*! ../../modules/es.json.to-string-tag */ "./node_modules/core-js-pure/modules/es.json.to-string-tag.js"); +__webpack_require__(/*! ../../modules/es.math.to-string-tag */ "./node_modules/core-js-pure/modules/es.math.to-string-tag.js"); +__webpack_require__(/*! ../../modules/es.reflect.to-string-tag */ "./node_modules/core-js-pure/modules/es.reflect.to-string-tag.js"); +var path = __webpack_require__(/*! ../../internals/path */ "./node_modules/core-js-pure/internals/path.js"); + +module.exports = path.Symbol; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/es/symbol/iterator.js": +/*!*********************************************************!*\ + !*** ./node_modules/core-js-pure/es/symbol/iterator.js ***! + \*********************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +__webpack_require__(/*! ../../modules/es.array.iterator */ "./node_modules/core-js-pure/modules/es.array.iterator.js"); +__webpack_require__(/*! ../../modules/es.object.to-string */ "./node_modules/core-js-pure/modules/es.object.to-string.js"); +__webpack_require__(/*! ../../modules/es.string.iterator */ "./node_modules/core-js-pure/modules/es.string.iterator.js"); +__webpack_require__(/*! ../../modules/es.symbol.iterator */ "./node_modules/core-js-pure/modules/es.symbol.iterator.js"); +var WrappedWellKnownSymbolModule = __webpack_require__(/*! ../../internals/well-known-symbol-wrapped */ "./node_modules/core-js-pure/internals/well-known-symbol-wrapped.js"); + +module.exports = WrappedWellKnownSymbolModule.f('iterator'); + + +/***/ }), + +/***/ "./node_modules/core-js-pure/es/symbol/to-primitive.js": +/*!*************************************************************!*\ + !*** ./node_modules/core-js-pure/es/symbol/to-primitive.js ***! + \*************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +__webpack_require__(/*! ../../modules/es.date.to-primitive */ "./node_modules/core-js-pure/modules/es.date.to-primitive.js"); +__webpack_require__(/*! ../../modules/es.symbol.to-primitive */ "./node_modules/core-js-pure/modules/es.symbol.to-primitive.js"); +var WrappedWellKnownSymbolModule = __webpack_require__(/*! ../../internals/well-known-symbol-wrapped */ "./node_modules/core-js-pure/internals/well-known-symbol-wrapped.js"); + +module.exports = WrappedWellKnownSymbolModule.f('toPrimitive'); + + +/***/ }), + +/***/ "./node_modules/core-js-pure/features/object/define-property.js": +/*!**********************************************************************!*\ + !*** ./node_modules/core-js-pure/features/object/define-property.js ***! + \**********************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +module.exports = __webpack_require__(/*! ../../full/object/define-property */ "./node_modules/core-js-pure/full/object/define-property.js"); + + +/***/ }), + +/***/ "./node_modules/core-js-pure/features/symbol/index.js": +/*!************************************************************!*\ + !*** ./node_modules/core-js-pure/features/symbol/index.js ***! + \************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +module.exports = __webpack_require__(/*! ../../full/symbol */ "./node_modules/core-js-pure/full/symbol/index.js"); + + +/***/ }), + +/***/ "./node_modules/core-js-pure/features/symbol/iterator.js": +/*!***************************************************************!*\ + !*** ./node_modules/core-js-pure/features/symbol/iterator.js ***! + \***************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +module.exports = __webpack_require__(/*! ../../full/symbol/iterator */ "./node_modules/core-js-pure/full/symbol/iterator.js"); + + +/***/ }), + +/***/ "./node_modules/core-js-pure/features/symbol/to-primitive.js": +/*!*******************************************************************!*\ + !*** ./node_modules/core-js-pure/features/symbol/to-primitive.js ***! + \*******************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +module.exports = __webpack_require__(/*! ../../full/symbol/to-primitive */ "./node_modules/core-js-pure/full/symbol/to-primitive.js"); + + +/***/ }), + +/***/ "./node_modules/core-js-pure/full/object/define-property.js": +/*!******************************************************************!*\ + !*** ./node_modules/core-js-pure/full/object/define-property.js ***! + \******************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var parent = __webpack_require__(/*! ../../actual/object/define-property */ "./node_modules/core-js-pure/actual/object/define-property.js"); + +module.exports = parent; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/full/symbol/index.js": +/*!********************************************************!*\ + !*** ./node_modules/core-js-pure/full/symbol/index.js ***! + \********************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var parent = __webpack_require__(/*! ../../actual/symbol */ "./node_modules/core-js-pure/actual/symbol/index.js"); +__webpack_require__(/*! ../../modules/esnext.symbol.is-registered-symbol */ "./node_modules/core-js-pure/modules/esnext.symbol.is-registered-symbol.js"); +__webpack_require__(/*! ../../modules/esnext.symbol.is-well-known-symbol */ "./node_modules/core-js-pure/modules/esnext.symbol.is-well-known-symbol.js"); +__webpack_require__(/*! ../../modules/esnext.symbol.custom-matcher */ "./node_modules/core-js-pure/modules/esnext.symbol.custom-matcher.js"); +__webpack_require__(/*! ../../modules/esnext.symbol.observable */ "./node_modules/core-js-pure/modules/esnext.symbol.observable.js"); +// TODO: Remove from `core-js@4` +__webpack_require__(/*! ../../modules/esnext.symbol.is-registered */ "./node_modules/core-js-pure/modules/esnext.symbol.is-registered.js"); +__webpack_require__(/*! ../../modules/esnext.symbol.is-well-known */ "./node_modules/core-js-pure/modules/esnext.symbol.is-well-known.js"); +__webpack_require__(/*! ../../modules/esnext.symbol.matcher */ "./node_modules/core-js-pure/modules/esnext.symbol.matcher.js"); +__webpack_require__(/*! ../../modules/esnext.symbol.metadata-key */ "./node_modules/core-js-pure/modules/esnext.symbol.metadata-key.js"); +__webpack_require__(/*! ../../modules/esnext.symbol.pattern-match */ "./node_modules/core-js-pure/modules/esnext.symbol.pattern-match.js"); +__webpack_require__(/*! ../../modules/esnext.symbol.replace-all */ "./node_modules/core-js-pure/modules/esnext.symbol.replace-all.js"); + +module.exports = parent; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/full/symbol/iterator.js": +/*!***********************************************************!*\ + !*** ./node_modules/core-js-pure/full/symbol/iterator.js ***! + \***********************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var parent = __webpack_require__(/*! ../../actual/symbol/iterator */ "./node_modules/core-js-pure/actual/symbol/iterator.js"); + +module.exports = parent; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/full/symbol/to-primitive.js": +/*!***************************************************************!*\ + !*** ./node_modules/core-js-pure/full/symbol/to-primitive.js ***! + \***************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var parent = __webpack_require__(/*! ../../actual/symbol/to-primitive */ "./node_modules/core-js-pure/actual/symbol/to-primitive.js"); + +module.exports = parent; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/a-callable.js": +/*!***********************************************************!*\ + !*** ./node_modules/core-js-pure/internals/a-callable.js ***! + \***********************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var isCallable = __webpack_require__(/*! ../internals/is-callable */ "./node_modules/core-js-pure/internals/is-callable.js"); +var tryToString = __webpack_require__(/*! ../internals/try-to-string */ "./node_modules/core-js-pure/internals/try-to-string.js"); + +var $TypeError = TypeError; + +// `Assert: IsCallable(argument) is true` +module.exports = function (argument) { + if (isCallable(argument)) return argument; + throw new $TypeError(tryToString(argument) + ' is not a function'); +}; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/a-constructor.js": +/*!**************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/a-constructor.js ***! + \**************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var isConstructor = __webpack_require__(/*! ../internals/is-constructor */ "./node_modules/core-js-pure/internals/is-constructor.js"); +var tryToString = __webpack_require__(/*! ../internals/try-to-string */ "./node_modules/core-js-pure/internals/try-to-string.js"); + +var $TypeError = TypeError; + +// `Assert: IsConstructor(argument) is true` +module.exports = function (argument) { + if (isConstructor(argument)) return argument; + throw new $TypeError(tryToString(argument) + ' is not a constructor'); +}; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/a-possible-prototype.js": +/*!*********************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/a-possible-prototype.js ***! + \*********************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var isPossiblePrototype = __webpack_require__(/*! ../internals/is-possible-prototype */ "./node_modules/core-js-pure/internals/is-possible-prototype.js"); + +var $String = String; +var $TypeError = TypeError; + +module.exports = function (argument) { + if (isPossiblePrototype(argument)) return argument; + throw new $TypeError("Can't set " + $String(argument) + ' as a prototype'); +}; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/a-set.js": +/*!******************************************************!*\ + !*** ./node_modules/core-js-pure/internals/a-set.js ***! + \******************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var tryToString = __webpack_require__(/*! ../internals/try-to-string */ "./node_modules/core-js-pure/internals/try-to-string.js"); + +var $TypeError = TypeError; + +// Perform ? RequireInternalSlot(M, [[SetData]]) +module.exports = function (it) { + if (typeof it == 'object' && 'size' in it && 'has' in it && 'add' in it && 'delete' in it && 'keys' in it) return it; + throw new $TypeError(tryToString(it) + ' is not a set'); +}; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/add-to-unscopables.js": +/*!*******************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/add-to-unscopables.js ***! + \*******************************************************************/ +/***/ ((module) => { + +"use strict"; + +module.exports = function () { /* empty */ }; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/an-instance.js": +/*!************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/an-instance.js ***! + \************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var isPrototypeOf = __webpack_require__(/*! ../internals/object-is-prototype-of */ "./node_modules/core-js-pure/internals/object-is-prototype-of.js"); + +var $TypeError = TypeError; + +module.exports = function (it, Prototype) { + if (isPrototypeOf(Prototype, it)) return it; + throw new $TypeError('Incorrect invocation'); +}; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/an-object.js": +/*!**********************************************************!*\ + !*** ./node_modules/core-js-pure/internals/an-object.js ***! + \**********************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var isObject = __webpack_require__(/*! ../internals/is-object */ "./node_modules/core-js-pure/internals/is-object.js"); + +var $String = String; +var $TypeError = TypeError; + +// `Assert: Type(argument) is Object` +module.exports = function (argument) { + if (isObject(argument)) return argument; + throw new $TypeError($String(argument) + ' is not an object'); +}; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/array-buffer-non-extensible.js": +/*!****************************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/array-buffer-non-extensible.js ***! + \****************************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +// FF26- bug: ArrayBuffers are non-extensible, but Object.isExtensible does not report it +var fails = __webpack_require__(/*! ../internals/fails */ "./node_modules/core-js-pure/internals/fails.js"); + +module.exports = fails(function () { + if (typeof ArrayBuffer == 'function') { + var buffer = new ArrayBuffer(8); + // eslint-disable-next-line es/no-object-isextensible, es/no-object-defineproperty -- safe + if (Object.isExtensible(buffer)) Object.defineProperty(buffer, 'a', { value: 8 }); + } +}); + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/array-for-each.js": +/*!***************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/array-for-each.js ***! + \***************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var $forEach = (__webpack_require__(/*! ../internals/array-iteration */ "./node_modules/core-js-pure/internals/array-iteration.js").forEach); +var arrayMethodIsStrict = __webpack_require__(/*! ../internals/array-method-is-strict */ "./node_modules/core-js-pure/internals/array-method-is-strict.js"); + +var STRICT_METHOD = arrayMethodIsStrict('forEach'); + +// `Array.prototype.forEach` method implementation +// https://tc39.es/ecma262/#sec-array.prototype.foreach +module.exports = !STRICT_METHOD ? function forEach(callbackfn /* , thisArg */) { + return $forEach(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined); +// eslint-disable-next-line es/no-array-prototype-foreach -- safe +} : [].forEach; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/array-from.js": +/*!***********************************************************!*\ + !*** ./node_modules/core-js-pure/internals/array-from.js ***! + \***********************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var bind = __webpack_require__(/*! ../internals/function-bind-context */ "./node_modules/core-js-pure/internals/function-bind-context.js"); +var call = __webpack_require__(/*! ../internals/function-call */ "./node_modules/core-js-pure/internals/function-call.js"); +var toObject = __webpack_require__(/*! ../internals/to-object */ "./node_modules/core-js-pure/internals/to-object.js"); +var callWithSafeIterationClosing = __webpack_require__(/*! ../internals/call-with-safe-iteration-closing */ "./node_modules/core-js-pure/internals/call-with-safe-iteration-closing.js"); +var isArrayIteratorMethod = __webpack_require__(/*! ../internals/is-array-iterator-method */ "./node_modules/core-js-pure/internals/is-array-iterator-method.js"); +var isConstructor = __webpack_require__(/*! ../internals/is-constructor */ "./node_modules/core-js-pure/internals/is-constructor.js"); +var lengthOfArrayLike = __webpack_require__(/*! ../internals/length-of-array-like */ "./node_modules/core-js-pure/internals/length-of-array-like.js"); +var createProperty = __webpack_require__(/*! ../internals/create-property */ "./node_modules/core-js-pure/internals/create-property.js"); +var getIterator = __webpack_require__(/*! ../internals/get-iterator */ "./node_modules/core-js-pure/internals/get-iterator.js"); +var getIteratorMethod = __webpack_require__(/*! ../internals/get-iterator-method */ "./node_modules/core-js-pure/internals/get-iterator-method.js"); + +var $Array = Array; + +// `Array.from` method implementation +// https://tc39.es/ecma262/#sec-array.from +module.exports = function from(arrayLike /* , mapfn = undefined, thisArg = undefined */) { + var O = toObject(arrayLike); + var IS_CONSTRUCTOR = isConstructor(this); + var argumentsLength = arguments.length; + var mapfn = argumentsLength > 1 ? arguments[1] : undefined; + var mapping = mapfn !== undefined; + if (mapping) mapfn = bind(mapfn, argumentsLength > 2 ? arguments[2] : undefined); + var iteratorMethod = getIteratorMethod(O); + var index = 0; + var length, result, step, iterator, next, value; + // if the target is not iterable or it's an array with the default iterator - use a simple case + if (iteratorMethod && !(this === $Array && isArrayIteratorMethod(iteratorMethod))) { + result = IS_CONSTRUCTOR ? new this() : []; + iterator = getIterator(O, iteratorMethod); + next = iterator.next; + for (;!(step = call(next, iterator)).done; index++) { + value = mapping ? callWithSafeIterationClosing(iterator, mapfn, [step.value, index], true) : step.value; + createProperty(result, index, value); + } + } else { + length = lengthOfArrayLike(O); + result = IS_CONSTRUCTOR ? new this(length) : $Array(length); + for (;length > index; index++) { + value = mapping ? mapfn(O[index], index) : O[index]; + createProperty(result, index, value); + } + } + result.length = index; + return result; +}; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/array-includes.js": +/*!***************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/array-includes.js ***! + \***************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var toIndexedObject = __webpack_require__(/*! ../internals/to-indexed-object */ "./node_modules/core-js-pure/internals/to-indexed-object.js"); +var toAbsoluteIndex = __webpack_require__(/*! ../internals/to-absolute-index */ "./node_modules/core-js-pure/internals/to-absolute-index.js"); +var lengthOfArrayLike = __webpack_require__(/*! ../internals/length-of-array-like */ "./node_modules/core-js-pure/internals/length-of-array-like.js"); + +// `Array.prototype.{ indexOf, includes }` methods implementation +var createMethod = function (IS_INCLUDES) { + return function ($this, el, fromIndex) { + var O = toIndexedObject($this); + var length = lengthOfArrayLike(O); + if (length === 0) return !IS_INCLUDES && -1; + var index = toAbsoluteIndex(fromIndex, length); + var value; + // Array#includes uses SameValueZero equality algorithm + // eslint-disable-next-line no-self-compare -- NaN check + if (IS_INCLUDES && el !== el) while (length > index) { + value = O[index++]; + // eslint-disable-next-line no-self-compare -- NaN check + if (value !== value) return true; + // Array#indexOf ignores holes, Array#includes - not + } else for (;length > index; index++) { + if ((IS_INCLUDES || index in O) && O[index] === el) return IS_INCLUDES || index || 0; + } return !IS_INCLUDES && -1; + }; +}; + +module.exports = { + // `Array.prototype.includes` method + // https://tc39.es/ecma262/#sec-array.prototype.includes + includes: createMethod(true), + // `Array.prototype.indexOf` method + // https://tc39.es/ecma262/#sec-array.prototype.indexof + indexOf: createMethod(false) +}; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/array-iteration.js": +/*!****************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/array-iteration.js ***! + \****************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var bind = __webpack_require__(/*! ../internals/function-bind-context */ "./node_modules/core-js-pure/internals/function-bind-context.js"); +var uncurryThis = __webpack_require__(/*! ../internals/function-uncurry-this */ "./node_modules/core-js-pure/internals/function-uncurry-this.js"); +var IndexedObject = __webpack_require__(/*! ../internals/indexed-object */ "./node_modules/core-js-pure/internals/indexed-object.js"); +var toObject = __webpack_require__(/*! ../internals/to-object */ "./node_modules/core-js-pure/internals/to-object.js"); +var lengthOfArrayLike = __webpack_require__(/*! ../internals/length-of-array-like */ "./node_modules/core-js-pure/internals/length-of-array-like.js"); +var arraySpeciesCreate = __webpack_require__(/*! ../internals/array-species-create */ "./node_modules/core-js-pure/internals/array-species-create.js"); + +var push = uncurryThis([].push); + +// `Array.prototype.{ forEach, map, filter, some, every, find, findIndex, filterReject }` methods implementation +var createMethod = function (TYPE) { + var IS_MAP = TYPE === 1; + var IS_FILTER = TYPE === 2; + var IS_SOME = TYPE === 3; + var IS_EVERY = TYPE === 4; + var IS_FIND_INDEX = TYPE === 6; + var IS_FILTER_REJECT = TYPE === 7; + var NO_HOLES = TYPE === 5 || IS_FIND_INDEX; + return function ($this, callbackfn, that, specificCreate) { + var O = toObject($this); + var self = IndexedObject(O); + var length = lengthOfArrayLike(self); + var boundFunction = bind(callbackfn, that); + var index = 0; + var create = specificCreate || arraySpeciesCreate; + var target = IS_MAP ? create($this, length) : IS_FILTER || IS_FILTER_REJECT ? create($this, 0) : undefined; + var value, result; + for (;length > index; index++) if (NO_HOLES || index in self) { + value = self[index]; + result = boundFunction(value, index, O); + if (TYPE) { + if (IS_MAP) target[index] = result; // map + else if (result) switch (TYPE) { + case 3: return true; // some + case 5: return value; // find + case 6: return index; // findIndex + case 2: push(target, value); // filter + } else switch (TYPE) { + case 4: return false; // every + case 7: push(target, value); // filterReject + } + } + } + return IS_FIND_INDEX ? -1 : IS_SOME || IS_EVERY ? IS_EVERY : target; + }; +}; + +module.exports = { + // `Array.prototype.forEach` method + // https://tc39.es/ecma262/#sec-array.prototype.foreach + forEach: createMethod(0), + // `Array.prototype.map` method + // https://tc39.es/ecma262/#sec-array.prototype.map + map: createMethod(1), + // `Array.prototype.filter` method + // https://tc39.es/ecma262/#sec-array.prototype.filter + filter: createMethod(2), + // `Array.prototype.some` method + // https://tc39.es/ecma262/#sec-array.prototype.some + some: createMethod(3), + // `Array.prototype.every` method + // https://tc39.es/ecma262/#sec-array.prototype.every + every: createMethod(4), + // `Array.prototype.find` method + // https://tc39.es/ecma262/#sec-array.prototype.find + find: createMethod(5), + // `Array.prototype.findIndex` method + // https://tc39.es/ecma262/#sec-array.prototype.findIndex + findIndex: createMethod(6), + // `Array.prototype.filterReject` method + // https://github.com/tc39/proposal-array-filtering + filterReject: createMethod(7) +}; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/array-method-has-species-support.js": +/*!*********************************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/array-method-has-species-support.js ***! + \*********************************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var fails = __webpack_require__(/*! ../internals/fails */ "./node_modules/core-js-pure/internals/fails.js"); +var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ "./node_modules/core-js-pure/internals/well-known-symbol.js"); +var V8_VERSION = __webpack_require__(/*! ../internals/environment-v8-version */ "./node_modules/core-js-pure/internals/environment-v8-version.js"); + +var SPECIES = wellKnownSymbol('species'); + +module.exports = function (METHOD_NAME) { + // We can't use this feature detection in V8 since it causes + // deoptimization and serious performance degradation + // https://github.com/zloirock/core-js/issues/677 + return V8_VERSION >= 51 || !fails(function () { + var array = []; + var constructor = array.constructor = {}; + constructor[SPECIES] = function () { + return { foo: 1 }; + }; + return array[METHOD_NAME](Boolean).foo !== 1; + }); +}; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/array-method-is-strict.js": +/*!***********************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/array-method-is-strict.js ***! + \***********************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var fails = __webpack_require__(/*! ../internals/fails */ "./node_modules/core-js-pure/internals/fails.js"); + +module.exports = function (METHOD_NAME, argument) { + var method = [][METHOD_NAME]; + return !!method && fails(function () { + // eslint-disable-next-line no-useless-call -- required for testing + method.call(null, argument || function () { return 1; }, 1); + }); +}; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/array-slice.js": +/*!************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/array-slice.js ***! + \************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var uncurryThis = __webpack_require__(/*! ../internals/function-uncurry-this */ "./node_modules/core-js-pure/internals/function-uncurry-this.js"); + +module.exports = uncurryThis([].slice); + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/array-sort.js": +/*!***********************************************************!*\ + !*** ./node_modules/core-js-pure/internals/array-sort.js ***! + \***********************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var arraySlice = __webpack_require__(/*! ../internals/array-slice */ "./node_modules/core-js-pure/internals/array-slice.js"); + +var floor = Math.floor; + +var sort = function (array, comparefn) { + var length = array.length; + + if (length < 8) { + // insertion sort + var i = 1; + var element, j; + + while (i < length) { + j = i; + element = array[i]; + while (j && comparefn(array[j - 1], element) > 0) { + array[j] = array[--j]; + } + if (j !== i++) array[j] = element; + } + } else { + // merge sort + var middle = floor(length / 2); + var left = sort(arraySlice(array, 0, middle), comparefn); + var right = sort(arraySlice(array, middle), comparefn); + var llength = left.length; + var rlength = right.length; + var lindex = 0; + var rindex = 0; + + while (lindex < llength || rindex < rlength) { + array[lindex + rindex] = (lindex < llength && rindex < rlength) + ? comparefn(left[lindex], right[rindex]) <= 0 ? left[lindex++] : right[rindex++] + : lindex < llength ? left[lindex++] : right[rindex++]; + } + } + + return array; +}; + +module.exports = sort; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/array-species-constructor.js": +/*!**************************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/array-species-constructor.js ***! + \**************************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var isArray = __webpack_require__(/*! ../internals/is-array */ "./node_modules/core-js-pure/internals/is-array.js"); +var isConstructor = __webpack_require__(/*! ../internals/is-constructor */ "./node_modules/core-js-pure/internals/is-constructor.js"); +var isObject = __webpack_require__(/*! ../internals/is-object */ "./node_modules/core-js-pure/internals/is-object.js"); +var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ "./node_modules/core-js-pure/internals/well-known-symbol.js"); + +var SPECIES = wellKnownSymbol('species'); +var $Array = Array; + +// a part of `ArraySpeciesCreate` abstract operation +// https://tc39.es/ecma262/#sec-arrayspeciescreate +module.exports = function (originalArray) { + var C; + if (isArray(originalArray)) { + C = originalArray.constructor; + // cross-realm fallback + if (isConstructor(C) && (C === $Array || isArray(C.prototype))) C = undefined; + else if (isObject(C)) { + C = C[SPECIES]; + if (C === null) C = undefined; + } + } return C === undefined ? $Array : C; +}; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/array-species-create.js": +/*!*********************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/array-species-create.js ***! + \*********************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var arraySpeciesConstructor = __webpack_require__(/*! ../internals/array-species-constructor */ "./node_modules/core-js-pure/internals/array-species-constructor.js"); + +// `ArraySpeciesCreate` abstract operation +// https://tc39.es/ecma262/#sec-arrayspeciescreate +module.exports = function (originalArray, length) { + return new (arraySpeciesConstructor(originalArray))(length === 0 ? 0 : length); +}; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/call-with-safe-iteration-closing.js": +/*!*********************************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/call-with-safe-iteration-closing.js ***! + \*********************************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var anObject = __webpack_require__(/*! ../internals/an-object */ "./node_modules/core-js-pure/internals/an-object.js"); +var iteratorClose = __webpack_require__(/*! ../internals/iterator-close */ "./node_modules/core-js-pure/internals/iterator-close.js"); + +// call something on iterator step with safe closing on error +module.exports = function (iterator, fn, value, ENTRIES) { + try { + return ENTRIES ? fn(anObject(value)[0], value[1]) : fn(value); + } catch (error) { + iteratorClose(iterator, 'throw', error); + } +}; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/caller.js": +/*!*******************************************************!*\ + !*** ./node_modules/core-js-pure/internals/caller.js ***! + \*******************************************************/ +/***/ ((module) => { + +"use strict"; + +module.exports = function (methodName, numArgs) { + return numArgs === 1 ? function (object, arg) { + return object[methodName](arg); + } : function (object, arg1, arg2) { + return object[methodName](arg1, arg2); + }; +}; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/check-correctness-of-iteration.js": +/*!*******************************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/check-correctness-of-iteration.js ***! + \*******************************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ "./node_modules/core-js-pure/internals/well-known-symbol.js"); + +var ITERATOR = wellKnownSymbol('iterator'); +var SAFE_CLOSING = false; + +try { + var called = 0; + var iteratorWithReturn = { + next: function () { + return { done: !!called++ }; + }, + 'return': function () { + SAFE_CLOSING = true; + } + }; + iteratorWithReturn[ITERATOR] = function () { + return this; + }; + // eslint-disable-next-line es/no-array-from, no-throw-literal -- required for testing + Array.from(iteratorWithReturn, function () { throw 2; }); +} catch (error) { /* empty */ } + +module.exports = function (exec, SKIP_CLOSING) { + try { + if (!SKIP_CLOSING && !SAFE_CLOSING) return false; + } catch (error) { return false; } // workaround of old WebKit + `eval` bug + var ITERATION_SUPPORT = false; + try { + var object = {}; + object[ITERATOR] = function () { + return { + next: function () { + return { done: ITERATION_SUPPORT = true }; + } + }; + }; + exec(object); + } catch (error) { /* empty */ } + return ITERATION_SUPPORT; +}; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/classof-raw.js": +/*!************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/classof-raw.js ***! + \************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var uncurryThis = __webpack_require__(/*! ../internals/function-uncurry-this */ "./node_modules/core-js-pure/internals/function-uncurry-this.js"); + +var toString = uncurryThis({}.toString); +var stringSlice = uncurryThis(''.slice); + +module.exports = function (it) { + return stringSlice(toString(it), 8, -1); +}; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/classof.js": +/*!********************************************************!*\ + !*** ./node_modules/core-js-pure/internals/classof.js ***! + \********************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var TO_STRING_TAG_SUPPORT = __webpack_require__(/*! ../internals/to-string-tag-support */ "./node_modules/core-js-pure/internals/to-string-tag-support.js"); +var isCallable = __webpack_require__(/*! ../internals/is-callable */ "./node_modules/core-js-pure/internals/is-callable.js"); +var classofRaw = __webpack_require__(/*! ../internals/classof-raw */ "./node_modules/core-js-pure/internals/classof-raw.js"); +var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ "./node_modules/core-js-pure/internals/well-known-symbol.js"); + +var TO_STRING_TAG = wellKnownSymbol('toStringTag'); +var $Object = Object; + +// ES3 wrong here +var CORRECT_ARGUMENTS = classofRaw(function () { return arguments; }()) === 'Arguments'; + +// fallback for IE11 Script Access Denied error +var tryGet = function (it, key) { + try { + return it[key]; + } catch (error) { /* empty */ } +}; + +// getting tag from ES6+ `Object.prototype.toString` +module.exports = TO_STRING_TAG_SUPPORT ? classofRaw : function (it) { + var O, tag, result; + return it === undefined ? 'Undefined' : it === null ? 'Null' + // @@toStringTag case + : typeof (tag = tryGet(O = $Object(it), TO_STRING_TAG)) == 'string' ? tag + // builtinTag case + : CORRECT_ARGUMENTS ? classofRaw(O) + // ES3 arguments fallback + : (result = classofRaw(O)) === 'Object' && isCallable(O.callee) ? 'Arguments' : result; +}; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/collection-strong.js": +/*!******************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/collection-strong.js ***! + \******************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var create = __webpack_require__(/*! ../internals/object-create */ "./node_modules/core-js-pure/internals/object-create.js"); +var defineBuiltInAccessor = __webpack_require__(/*! ../internals/define-built-in-accessor */ "./node_modules/core-js-pure/internals/define-built-in-accessor.js"); +var defineBuiltIns = __webpack_require__(/*! ../internals/define-built-ins */ "./node_modules/core-js-pure/internals/define-built-ins.js"); +var bind = __webpack_require__(/*! ../internals/function-bind-context */ "./node_modules/core-js-pure/internals/function-bind-context.js"); +var anInstance = __webpack_require__(/*! ../internals/an-instance */ "./node_modules/core-js-pure/internals/an-instance.js"); +var isNullOrUndefined = __webpack_require__(/*! ../internals/is-null-or-undefined */ "./node_modules/core-js-pure/internals/is-null-or-undefined.js"); +var iterate = __webpack_require__(/*! ../internals/iterate */ "./node_modules/core-js-pure/internals/iterate.js"); +var defineIterator = __webpack_require__(/*! ../internals/iterator-define */ "./node_modules/core-js-pure/internals/iterator-define.js"); +var createIterResultObject = __webpack_require__(/*! ../internals/create-iter-result-object */ "./node_modules/core-js-pure/internals/create-iter-result-object.js"); +var setSpecies = __webpack_require__(/*! ../internals/set-species */ "./node_modules/core-js-pure/internals/set-species.js"); +var DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ "./node_modules/core-js-pure/internals/descriptors.js"); +var fastKey = (__webpack_require__(/*! ../internals/internal-metadata */ "./node_modules/core-js-pure/internals/internal-metadata.js").fastKey); +var InternalStateModule = __webpack_require__(/*! ../internals/internal-state */ "./node_modules/core-js-pure/internals/internal-state.js"); + +var setInternalState = InternalStateModule.set; +var internalStateGetterFor = InternalStateModule.getterFor; + +module.exports = { + getConstructor: function (wrapper, CONSTRUCTOR_NAME, IS_MAP, ADDER) { + var Constructor = wrapper(function (that, iterable) { + anInstance(that, Prototype); + setInternalState(that, { + type: CONSTRUCTOR_NAME, + index: create(null), + first: null, + last: null, + size: 0 + }); + if (!DESCRIPTORS) that.size = 0; + if (!isNullOrUndefined(iterable)) iterate(iterable, that[ADDER], { that: that, AS_ENTRIES: IS_MAP }); + }); + + var Prototype = Constructor.prototype; + + var getInternalState = internalStateGetterFor(CONSTRUCTOR_NAME); + + var define = function (that, key, value) { + var state = getInternalState(that); + var entry = getEntry(that, key); + var previous, index; + // change existing entry + if (entry) { + entry.value = value; + // create new entry + } else { + state.last = entry = { + index: index = fastKey(key, true), + key: key, + value: value, + previous: previous = state.last, + next: null, + removed: false + }; + if (!state.first) state.first = entry; + if (previous) previous.next = entry; + if (DESCRIPTORS) state.size++; + else that.size++; + // add to index + if (index !== 'F') state.index[index] = entry; + } return that; + }; + + var getEntry = function (that, key) { + var state = getInternalState(that); + // fast case + var index = fastKey(key); + var entry; + if (index !== 'F') return state.index[index]; + // frozen object case + for (entry = state.first; entry; entry = entry.next) { + if (entry.key === key) return entry; + } + }; + + defineBuiltIns(Prototype, { + // `{ Map, Set }.prototype.clear()` methods + // https://tc39.es/ecma262/#sec-map.prototype.clear + // https://tc39.es/ecma262/#sec-set.prototype.clear + clear: function clear() { + var that = this; + var state = getInternalState(that); + var entry = state.first; + while (entry) { + entry.removed = true; + if (entry.previous) entry.previous = entry.previous.next = null; + entry = entry.next; + } + state.first = state.last = null; + state.index = create(null); + if (DESCRIPTORS) state.size = 0; + else that.size = 0; + }, + // `{ Map, Set }.prototype.delete(key)` methods + // https://tc39.es/ecma262/#sec-map.prototype.delete + // https://tc39.es/ecma262/#sec-set.prototype.delete + 'delete': function (key) { + var that = this; + var state = getInternalState(that); + var entry = getEntry(that, key); + if (entry) { + var next = entry.next; + var prev = entry.previous; + delete state.index[entry.index]; + entry.removed = true; + if (prev) prev.next = next; + if (next) next.previous = prev; + if (state.first === entry) state.first = next; + if (state.last === entry) state.last = prev; + if (DESCRIPTORS) state.size--; + else that.size--; + } return !!entry; + }, + // `{ Map, Set }.prototype.forEach(callbackfn, thisArg = undefined)` methods + // https://tc39.es/ecma262/#sec-map.prototype.foreach + // https://tc39.es/ecma262/#sec-set.prototype.foreach + forEach: function forEach(callbackfn /* , that = undefined */) { + var state = getInternalState(this); + var boundFunction = bind(callbackfn, arguments.length > 1 ? arguments[1] : undefined); + var entry; + while (entry = entry ? entry.next : state.first) { + boundFunction(entry.value, entry.key, this); + // revert to the last existing entry + while (entry && entry.removed) entry = entry.previous; + } + }, + // `{ Map, Set}.prototype.has(key)` methods + // https://tc39.es/ecma262/#sec-map.prototype.has + // https://tc39.es/ecma262/#sec-set.prototype.has + has: function has(key) { + return !!getEntry(this, key); + } + }); + + defineBuiltIns(Prototype, IS_MAP ? { + // `Map.prototype.get(key)` method + // https://tc39.es/ecma262/#sec-map.prototype.get + get: function get(key) { + var entry = getEntry(this, key); + return entry && entry.value; + }, + // `Map.prototype.set(key, value)` method + // https://tc39.es/ecma262/#sec-map.prototype.set + set: function set(key, value) { + return define(this, key === 0 ? 0 : key, value); + } + } : { + // `Set.prototype.add(value)` method + // https://tc39.es/ecma262/#sec-set.prototype.add + add: function add(value) { + return define(this, value = value === 0 ? 0 : value, value); + } + }); + if (DESCRIPTORS) defineBuiltInAccessor(Prototype, 'size', { + configurable: true, + get: function () { + return getInternalState(this).size; + } + }); + return Constructor; + }, + setStrong: function (Constructor, CONSTRUCTOR_NAME, IS_MAP) { + var ITERATOR_NAME = CONSTRUCTOR_NAME + ' Iterator'; + var getInternalCollectionState = internalStateGetterFor(CONSTRUCTOR_NAME); + var getInternalIteratorState = internalStateGetterFor(ITERATOR_NAME); + // `{ Map, Set }.prototype.{ keys, values, entries, @@iterator }()` methods + // https://tc39.es/ecma262/#sec-map.prototype.entries + // https://tc39.es/ecma262/#sec-map.prototype.keys + // https://tc39.es/ecma262/#sec-map.prototype.values + // https://tc39.es/ecma262/#sec-map.prototype-@@iterator + // https://tc39.es/ecma262/#sec-set.prototype.entries + // https://tc39.es/ecma262/#sec-set.prototype.keys + // https://tc39.es/ecma262/#sec-set.prototype.values + // https://tc39.es/ecma262/#sec-set.prototype-@@iterator + defineIterator(Constructor, CONSTRUCTOR_NAME, function (iterated, kind) { + setInternalState(this, { + type: ITERATOR_NAME, + target: iterated, + state: getInternalCollectionState(iterated), + kind: kind, + last: null + }); + }, function () { + var state = getInternalIteratorState(this); + var kind = state.kind; + var entry = state.last; + // revert to the last existing entry + while (entry && entry.removed) entry = entry.previous; + // get next entry + if (!state.target || !(state.last = entry = entry ? entry.next : state.state.first)) { + // or finish the iteration + state.target = null; + return createIterResultObject(undefined, true); + } + // return step by kind + if (kind === 'keys') return createIterResultObject(entry.key, false); + if (kind === 'values') return createIterResultObject(entry.value, false); + return createIterResultObject([entry.key, entry.value], false); + }, IS_MAP ? 'entries' : 'values', !IS_MAP, true); + + // `{ Map, Set }.prototype[@@species]` accessors + // https://tc39.es/ecma262/#sec-get-map-@@species + // https://tc39.es/ecma262/#sec-get-set-@@species + setSpecies(CONSTRUCTOR_NAME); + } +}; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/collection.js": +/*!***********************************************************!*\ + !*** ./node_modules/core-js-pure/internals/collection.js ***! + \***********************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var $ = __webpack_require__(/*! ../internals/export */ "./node_modules/core-js-pure/internals/export.js"); +var globalThis = __webpack_require__(/*! ../internals/global-this */ "./node_modules/core-js-pure/internals/global-this.js"); +var InternalMetadataModule = __webpack_require__(/*! ../internals/internal-metadata */ "./node_modules/core-js-pure/internals/internal-metadata.js"); +var fails = __webpack_require__(/*! ../internals/fails */ "./node_modules/core-js-pure/internals/fails.js"); +var createNonEnumerableProperty = __webpack_require__(/*! ../internals/create-non-enumerable-property */ "./node_modules/core-js-pure/internals/create-non-enumerable-property.js"); +var iterate = __webpack_require__(/*! ../internals/iterate */ "./node_modules/core-js-pure/internals/iterate.js"); +var anInstance = __webpack_require__(/*! ../internals/an-instance */ "./node_modules/core-js-pure/internals/an-instance.js"); +var isCallable = __webpack_require__(/*! ../internals/is-callable */ "./node_modules/core-js-pure/internals/is-callable.js"); +var isObject = __webpack_require__(/*! ../internals/is-object */ "./node_modules/core-js-pure/internals/is-object.js"); +var isNullOrUndefined = __webpack_require__(/*! ../internals/is-null-or-undefined */ "./node_modules/core-js-pure/internals/is-null-or-undefined.js"); +var setToStringTag = __webpack_require__(/*! ../internals/set-to-string-tag */ "./node_modules/core-js-pure/internals/set-to-string-tag.js"); +var defineProperty = (__webpack_require__(/*! ../internals/object-define-property */ "./node_modules/core-js-pure/internals/object-define-property.js").f); +var forEach = (__webpack_require__(/*! ../internals/array-iteration */ "./node_modules/core-js-pure/internals/array-iteration.js").forEach); +var DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ "./node_modules/core-js-pure/internals/descriptors.js"); +var InternalStateModule = __webpack_require__(/*! ../internals/internal-state */ "./node_modules/core-js-pure/internals/internal-state.js"); + +var setInternalState = InternalStateModule.set; +var internalStateGetterFor = InternalStateModule.getterFor; + +module.exports = function (CONSTRUCTOR_NAME, wrapper, common) { + var IS_MAP = CONSTRUCTOR_NAME.indexOf('Map') !== -1; + var IS_WEAK = CONSTRUCTOR_NAME.indexOf('Weak') !== -1; + var ADDER = IS_MAP ? 'set' : 'add'; + var NativeConstructor = globalThis[CONSTRUCTOR_NAME]; + var NativePrototype = NativeConstructor && NativeConstructor.prototype; + var exported = {}; + var Constructor; + + if (!DESCRIPTORS || !isCallable(NativeConstructor) + || !(IS_WEAK || NativePrototype.forEach && !fails(function () { new NativeConstructor().entries().next(); })) + ) { + // create collection constructor + Constructor = common.getConstructor(wrapper, CONSTRUCTOR_NAME, IS_MAP, ADDER); + InternalMetadataModule.enable(); + } else { + Constructor = wrapper(function (target, iterable) { + setInternalState(anInstance(target, Prototype), { + type: CONSTRUCTOR_NAME, + collection: new NativeConstructor() + }); + if (!isNullOrUndefined(iterable)) iterate(iterable, target[ADDER], { that: target, AS_ENTRIES: IS_MAP }); + }); + + var Prototype = Constructor.prototype; + + var getInternalState = internalStateGetterFor(CONSTRUCTOR_NAME); + + forEach(['add', 'clear', 'delete', 'forEach', 'get', 'has', 'set', 'keys', 'values', 'entries'], function (KEY) { + var IS_ADDER = KEY === 'add' || KEY === 'set'; + if (KEY in NativePrototype && !(IS_WEAK && KEY === 'clear')) { + createNonEnumerableProperty(Prototype, KEY, function (a, b) { + var collection = getInternalState(this).collection; + if (!IS_ADDER && IS_WEAK && !isObject(a)) return KEY === 'get' ? undefined : false; + var result = collection[KEY](a === 0 ? 0 : a, b); + return IS_ADDER ? this : result; + }); + } + }); + + IS_WEAK || defineProperty(Prototype, 'size', { + configurable: true, + get: function () { + return getInternalState(this).collection.size; + } + }); + } + + setToStringTag(Constructor, CONSTRUCTOR_NAME, false, true); + + exported[CONSTRUCTOR_NAME] = Constructor; + $({ global: true, forced: true }, exported); + + if (!IS_WEAK) common.setStrong(Constructor, CONSTRUCTOR_NAME, IS_MAP); + + return Constructor; +}; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/copy-constructor-properties.js": +/*!****************************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/copy-constructor-properties.js ***! + \****************************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var hasOwn = __webpack_require__(/*! ../internals/has-own-property */ "./node_modules/core-js-pure/internals/has-own-property.js"); +var ownKeys = __webpack_require__(/*! ../internals/own-keys */ "./node_modules/core-js-pure/internals/own-keys.js"); +var getOwnPropertyDescriptorModule = __webpack_require__(/*! ../internals/object-get-own-property-descriptor */ "./node_modules/core-js-pure/internals/object-get-own-property-descriptor.js"); +var definePropertyModule = __webpack_require__(/*! ../internals/object-define-property */ "./node_modules/core-js-pure/internals/object-define-property.js"); + +module.exports = function (target, source, exceptions) { + var keys = ownKeys(source); + var defineProperty = definePropertyModule.f; + var getOwnPropertyDescriptor = getOwnPropertyDescriptorModule.f; + for (var i = 0; i < keys.length; i++) { + var key = keys[i]; + if (!hasOwn(target, key) && !(exceptions && hasOwn(exceptions, key))) { + defineProperty(target, key, getOwnPropertyDescriptor(source, key)); + } + } +}; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/correct-is-regexp-logic.js": +/*!************************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/correct-is-regexp-logic.js ***! + \************************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ "./node_modules/core-js-pure/internals/well-known-symbol.js"); + +var MATCH = wellKnownSymbol('match'); + +module.exports = function (METHOD_NAME) { + var regexp = /./; + try { + '/./'[METHOD_NAME](regexp); + } catch (error1) { + try { + regexp[MATCH] = false; + return '/./'[METHOD_NAME](regexp); + } catch (error2) { /* empty */ } + } return false; +}; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/correct-prototype-getter.js": +/*!*************************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/correct-prototype-getter.js ***! + \*************************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var fails = __webpack_require__(/*! ../internals/fails */ "./node_modules/core-js-pure/internals/fails.js"); + +module.exports = !fails(function () { + function F() { /* empty */ } + F.prototype.constructor = null; + // eslint-disable-next-line es/no-object-getprototypeof -- required for testing + return Object.getPrototypeOf(new F()) !== F.prototype; +}); + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/create-iter-result-object.js": +/*!**************************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/create-iter-result-object.js ***! + \**************************************************************************/ +/***/ ((module) => { + +"use strict"; + +// `CreateIterResultObject` abstract operation +// https://tc39.es/ecma262/#sec-createiterresultobject +module.exports = function (value, done) { + return { value: value, done: done }; +}; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/create-non-enumerable-property.js": +/*!*******************************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/create-non-enumerable-property.js ***! + \*******************************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ "./node_modules/core-js-pure/internals/descriptors.js"); +var definePropertyModule = __webpack_require__(/*! ../internals/object-define-property */ "./node_modules/core-js-pure/internals/object-define-property.js"); +var createPropertyDescriptor = __webpack_require__(/*! ../internals/create-property-descriptor */ "./node_modules/core-js-pure/internals/create-property-descriptor.js"); + +module.exports = DESCRIPTORS ? function (object, key, value) { + return definePropertyModule.f(object, key, createPropertyDescriptor(1, value)); +} : function (object, key, value) { + object[key] = value; + return object; +}; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/create-property-descriptor.js": +/*!***************************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/create-property-descriptor.js ***! + \***************************************************************************/ +/***/ ((module) => { + +"use strict"; + +module.exports = function (bitmap, value) { + return { + enumerable: !(bitmap & 1), + configurable: !(bitmap & 2), + writable: !(bitmap & 4), + value: value + }; +}; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/create-property.js": +/*!****************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/create-property.js ***! + \****************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ "./node_modules/core-js-pure/internals/descriptors.js"); +var definePropertyModule = __webpack_require__(/*! ../internals/object-define-property */ "./node_modules/core-js-pure/internals/object-define-property.js"); +var createPropertyDescriptor = __webpack_require__(/*! ../internals/create-property-descriptor */ "./node_modules/core-js-pure/internals/create-property-descriptor.js"); + +module.exports = function (object, key, value) { + if (DESCRIPTORS) definePropertyModule.f(object, key, createPropertyDescriptor(0, value)); + else object[key] = value; +}; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/date-to-iso-string.js": +/*!*******************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/date-to-iso-string.js ***! + \*******************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var uncurryThis = __webpack_require__(/*! ../internals/function-uncurry-this */ "./node_modules/core-js-pure/internals/function-uncurry-this.js"); +var fails = __webpack_require__(/*! ../internals/fails */ "./node_modules/core-js-pure/internals/fails.js"); +var padStart = (__webpack_require__(/*! ../internals/string-pad */ "./node_modules/core-js-pure/internals/string-pad.js").start); + +var $RangeError = RangeError; +var $isFinite = isFinite; +var abs = Math.abs; +var DatePrototype = Date.prototype; +var nativeDateToISOString = DatePrototype.toISOString; +var thisTimeValue = uncurryThis(DatePrototype.getTime); +var getUTCDate = uncurryThis(DatePrototype.getUTCDate); +var getUTCFullYear = uncurryThis(DatePrototype.getUTCFullYear); +var getUTCHours = uncurryThis(DatePrototype.getUTCHours); +var getUTCMilliseconds = uncurryThis(DatePrototype.getUTCMilliseconds); +var getUTCMinutes = uncurryThis(DatePrototype.getUTCMinutes); +var getUTCMonth = uncurryThis(DatePrototype.getUTCMonth); +var getUTCSeconds = uncurryThis(DatePrototype.getUTCSeconds); + +// `Date.prototype.toISOString` method implementation +// https://tc39.es/ecma262/#sec-date.prototype.toisostring +// PhantomJS / old WebKit fails here: +module.exports = (fails(function () { + return nativeDateToISOString.call(new Date(-5e13 - 1)) !== '0385-07-25T07:06:39.999Z'; +}) || !fails(function () { + nativeDateToISOString.call(new Date(NaN)); +})) ? function toISOString() { + if (!$isFinite(thisTimeValue(this))) throw new $RangeError('Invalid time value'); + var date = this; + var year = getUTCFullYear(date); + var milliseconds = getUTCMilliseconds(date); + var sign = year < 0 ? '-' : year > 9999 ? '+' : ''; + return sign + padStart(abs(year), sign ? 6 : 4, 0) + + '-' + padStart(getUTCMonth(date) + 1, 2, 0) + + '-' + padStart(getUTCDate(date), 2, 0) + + 'T' + padStart(getUTCHours(date), 2, 0) + + ':' + padStart(getUTCMinutes(date), 2, 0) + + ':' + padStart(getUTCSeconds(date), 2, 0) + + '.' + padStart(milliseconds, 3, 0) + + 'Z'; +} : nativeDateToISOString; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/define-built-in-accessor.js": +/*!*************************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/define-built-in-accessor.js ***! + \*************************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var defineProperty = __webpack_require__(/*! ../internals/object-define-property */ "./node_modules/core-js-pure/internals/object-define-property.js"); + +module.exports = function (target, name, descriptor) { + return defineProperty.f(target, name, descriptor); +}; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/define-built-in.js": +/*!****************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/define-built-in.js ***! + \****************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var createNonEnumerableProperty = __webpack_require__(/*! ../internals/create-non-enumerable-property */ "./node_modules/core-js-pure/internals/create-non-enumerable-property.js"); + +module.exports = function (target, key, value, options) { + if (options && options.enumerable) target[key] = value; + else createNonEnumerableProperty(target, key, value); + return target; +}; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/define-built-ins.js": +/*!*****************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/define-built-ins.js ***! + \*****************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var defineBuiltIn = __webpack_require__(/*! ../internals/define-built-in */ "./node_modules/core-js-pure/internals/define-built-in.js"); + +module.exports = function (target, src, options) { + for (var key in src) { + if (options && options.unsafe && target[key]) target[key] = src[key]; + else defineBuiltIn(target, key, src[key], options); + } return target; +}; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/define-global-property.js": +/*!***********************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/define-global-property.js ***! + \***********************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var globalThis = __webpack_require__(/*! ../internals/global-this */ "./node_modules/core-js-pure/internals/global-this.js"); + +// eslint-disable-next-line es/no-object-defineproperty -- safe +var defineProperty = Object.defineProperty; + +module.exports = function (key, value) { + try { + defineProperty(globalThis, key, { value: value, configurable: true, writable: true }); + } catch (error) { + globalThis[key] = value; + } return value; +}; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/delete-property-or-throw.js": +/*!*************************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/delete-property-or-throw.js ***! + \*************************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var tryToString = __webpack_require__(/*! ../internals/try-to-string */ "./node_modules/core-js-pure/internals/try-to-string.js"); + +var $TypeError = TypeError; + +module.exports = function (O, P) { + if (!delete O[P]) throw new $TypeError('Cannot delete property ' + tryToString(P) + ' of ' + tryToString(O)); +}; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/descriptors.js": +/*!************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/descriptors.js ***! + \************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var fails = __webpack_require__(/*! ../internals/fails */ "./node_modules/core-js-pure/internals/fails.js"); + +// Detect IE8's incomplete defineProperty implementation +module.exports = !fails(function () { + // eslint-disable-next-line es/no-object-defineproperty -- required for testing + return Object.defineProperty({}, 1, { get: function () { return 7; } })[1] !== 7; +}); + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/document-create-element.js": +/*!************************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/document-create-element.js ***! + \************************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var globalThis = __webpack_require__(/*! ../internals/global-this */ "./node_modules/core-js-pure/internals/global-this.js"); +var isObject = __webpack_require__(/*! ../internals/is-object */ "./node_modules/core-js-pure/internals/is-object.js"); + +var document = globalThis.document; +// typeof document.createElement is 'object' in old IE +var EXISTS = isObject(document) && isObject(document.createElement); + +module.exports = function (it) { + return EXISTS ? document.createElement(it) : {}; +}; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/does-not-exceed-safe-integer.js": +/*!*****************************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/does-not-exceed-safe-integer.js ***! + \*****************************************************************************/ +/***/ ((module) => { + +"use strict"; + +var $TypeError = TypeError; +var MAX_SAFE_INTEGER = 0x1FFFFFFFFFFFFF; // 2 ** 53 - 1 == 9007199254740991 + +module.exports = function (it) { + if (it > MAX_SAFE_INTEGER) throw $TypeError('Maximum allowed index exceeded'); + return it; +}; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/dom-iterables.js": +/*!**************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/dom-iterables.js ***! + \**************************************************************/ +/***/ ((module) => { + +"use strict"; + +// iterable DOM collections +// flag - `iterable` interface - 'entries', 'keys', 'values', 'forEach' methods +module.exports = { + CSSRuleList: 0, + CSSStyleDeclaration: 0, + CSSValueList: 0, + ClientRectList: 0, + DOMRectList: 0, + DOMStringList: 0, + DOMTokenList: 1, + DataTransferItemList: 0, + FileList: 0, + HTMLAllCollection: 0, + HTMLCollection: 0, + HTMLFormElement: 0, + HTMLSelectElement: 0, + MediaList: 0, + MimeTypeArray: 0, + NamedNodeMap: 0, + NodeList: 1, + PaintRequestList: 0, + Plugin: 0, + PluginArray: 0, + SVGLengthList: 0, + SVGNumberList: 0, + SVGPathSegList: 0, + SVGPointList: 0, + SVGStringList: 0, + SVGTransformList: 0, + SourceBufferList: 0, + StyleSheetList: 0, + TextTrackCueList: 0, + TextTrackList: 0, + TouchList: 0 +}; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/enum-bug-keys.js": +/*!**************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/enum-bug-keys.js ***! + \**************************************************************/ +/***/ ((module) => { + +"use strict"; + +// IE8- don't enum bug keys +module.exports = [ + 'constructor', + 'hasOwnProperty', + 'isPrototypeOf', + 'propertyIsEnumerable', + 'toLocaleString', + 'toString', + 'valueOf' +]; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/environment-ff-version.js": +/*!***********************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/environment-ff-version.js ***! + \***********************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var userAgent = __webpack_require__(/*! ../internals/environment-user-agent */ "./node_modules/core-js-pure/internals/environment-user-agent.js"); + +var firefox = userAgent.match(/firefox\/(\d+)/i); + +module.exports = !!firefox && +firefox[1]; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/environment-is-ie-or-edge.js": +/*!**************************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/environment-is-ie-or-edge.js ***! + \**************************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var UA = __webpack_require__(/*! ../internals/environment-user-agent */ "./node_modules/core-js-pure/internals/environment-user-agent.js"); + +module.exports = /MSIE|Trident/.test(UA); + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/environment-is-ios-pebble.js": +/*!**************************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/environment-is-ios-pebble.js ***! + \**************************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var userAgent = __webpack_require__(/*! ../internals/environment-user-agent */ "./node_modules/core-js-pure/internals/environment-user-agent.js"); + +module.exports = /ipad|iphone|ipod/i.test(userAgent) && typeof Pebble != 'undefined'; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/environment-is-ios.js": +/*!*******************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/environment-is-ios.js ***! + \*******************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var userAgent = __webpack_require__(/*! ../internals/environment-user-agent */ "./node_modules/core-js-pure/internals/environment-user-agent.js"); + +// eslint-disable-next-line redos/no-vulnerable -- safe +module.exports = /(?:ipad|iphone|ipod).*applewebkit/i.test(userAgent); + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/environment-is-node.js": +/*!********************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/environment-is-node.js ***! + \********************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var ENVIRONMENT = __webpack_require__(/*! ../internals/environment */ "./node_modules/core-js-pure/internals/environment.js"); + +module.exports = ENVIRONMENT === 'NODE'; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/environment-is-webos-webkit.js": +/*!****************************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/environment-is-webos-webkit.js ***! + \****************************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var userAgent = __webpack_require__(/*! ../internals/environment-user-agent */ "./node_modules/core-js-pure/internals/environment-user-agent.js"); + +module.exports = /web0s(?!.*chrome)/i.test(userAgent); + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/environment-user-agent.js": +/*!***********************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/environment-user-agent.js ***! + \***********************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var globalThis = __webpack_require__(/*! ../internals/global-this */ "./node_modules/core-js-pure/internals/global-this.js"); + +var navigator = globalThis.navigator; +var userAgent = navigator && navigator.userAgent; + +module.exports = userAgent ? String(userAgent) : ''; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/environment-v8-version.js": +/*!***********************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/environment-v8-version.js ***! + \***********************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var globalThis = __webpack_require__(/*! ../internals/global-this */ "./node_modules/core-js-pure/internals/global-this.js"); +var userAgent = __webpack_require__(/*! ../internals/environment-user-agent */ "./node_modules/core-js-pure/internals/environment-user-agent.js"); + +var process = globalThis.process; +var Deno = globalThis.Deno; +var versions = process && process.versions || Deno && Deno.version; +var v8 = versions && versions.v8; +var match, version; + +if (v8) { + match = v8.split('.'); + // in old Chrome, versions of V8 isn't V8 = Chrome / 10 + // but their correct versions are not interesting for us + version = match[0] > 0 && match[0] < 4 ? 1 : +(match[0] + match[1]); +} + +// BrowserFS NodeJS `process` polyfill incorrectly set `.v8` to `0.0` +// so check `userAgent` even if `.v8` exists, but 0 +if (!version && userAgent) { + match = userAgent.match(/Edge\/(\d+)/); + if (!match || match[1] >= 74) { + match = userAgent.match(/Chrome\/(\d+)/); + if (match) version = +match[1]; + } +} + +module.exports = version; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/environment-webkit-version.js": +/*!***************************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/environment-webkit-version.js ***! + \***************************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var userAgent = __webpack_require__(/*! ../internals/environment-user-agent */ "./node_modules/core-js-pure/internals/environment-user-agent.js"); + +var webkit = userAgent.match(/AppleWebKit\/(\d+)\./); + +module.exports = !!webkit && +webkit[1]; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/environment.js": +/*!************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/environment.js ***! + \************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +/* global Bun, Deno -- detection */ +var globalThis = __webpack_require__(/*! ../internals/global-this */ "./node_modules/core-js-pure/internals/global-this.js"); +var userAgent = __webpack_require__(/*! ../internals/environment-user-agent */ "./node_modules/core-js-pure/internals/environment-user-agent.js"); +var classof = __webpack_require__(/*! ../internals/classof-raw */ "./node_modules/core-js-pure/internals/classof-raw.js"); + +var userAgentStartsWith = function (string) { + return userAgent.slice(0, string.length) === string; +}; + +module.exports = (function () { + if (userAgentStartsWith('Bun/')) return 'BUN'; + if (userAgentStartsWith('Cloudflare-Workers')) return 'CLOUDFLARE'; + if (userAgentStartsWith('Deno/')) return 'DENO'; + if (userAgentStartsWith('Node.js/')) return 'NODE'; + if (globalThis.Bun && typeof Bun.version == 'string') return 'BUN'; + if (globalThis.Deno && typeof Deno.version == 'object') return 'DENO'; + if (classof(globalThis.process) === 'process') return 'NODE'; + if (globalThis.window && globalThis.document) return 'BROWSER'; + return 'REST'; +})(); + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/error-stack-clear.js": +/*!******************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/error-stack-clear.js ***! + \******************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var uncurryThis = __webpack_require__(/*! ../internals/function-uncurry-this */ "./node_modules/core-js-pure/internals/function-uncurry-this.js"); + +var $Error = Error; +var replace = uncurryThis(''.replace); + +var TEST = (function (arg) { return String(new $Error(arg).stack); })('zxcasd'); +// eslint-disable-next-line redos/no-vulnerable -- safe +var V8_OR_CHAKRA_STACK_ENTRY = /\n\s*at [^:]*:[^\n]*/; +var IS_V8_OR_CHAKRA_STACK = V8_OR_CHAKRA_STACK_ENTRY.test(TEST); + +module.exports = function (stack, dropEntries) { + if (IS_V8_OR_CHAKRA_STACK && typeof stack == 'string' && !$Error.prepareStackTrace) { + while (dropEntries--) stack = replace(stack, V8_OR_CHAKRA_STACK_ENTRY, ''); + } return stack; +}; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/error-stack-install.js": +/*!********************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/error-stack-install.js ***! + \********************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var createNonEnumerableProperty = __webpack_require__(/*! ../internals/create-non-enumerable-property */ "./node_modules/core-js-pure/internals/create-non-enumerable-property.js"); +var clearErrorStack = __webpack_require__(/*! ../internals/error-stack-clear */ "./node_modules/core-js-pure/internals/error-stack-clear.js"); +var ERROR_STACK_INSTALLABLE = __webpack_require__(/*! ../internals/error-stack-installable */ "./node_modules/core-js-pure/internals/error-stack-installable.js"); + +// non-standard V8 +var captureStackTrace = Error.captureStackTrace; + +module.exports = function (error, C, stack, dropEntries) { + if (ERROR_STACK_INSTALLABLE) { + if (captureStackTrace) captureStackTrace(error, C); + else createNonEnumerableProperty(error, 'stack', clearErrorStack(stack, dropEntries)); + } +}; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/error-stack-installable.js": +/*!************************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/error-stack-installable.js ***! + \************************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var fails = __webpack_require__(/*! ../internals/fails */ "./node_modules/core-js-pure/internals/fails.js"); +var createPropertyDescriptor = __webpack_require__(/*! ../internals/create-property-descriptor */ "./node_modules/core-js-pure/internals/create-property-descriptor.js"); + +module.exports = !fails(function () { + var error = new Error('a'); + if (!('stack' in error)) return true; + // eslint-disable-next-line es/no-object-defineproperty -- safe + Object.defineProperty(error, 'stack', createPropertyDescriptor(1, 7)); + return error.stack !== 7; +}); + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/export.js": +/*!*******************************************************!*\ + !*** ./node_modules/core-js-pure/internals/export.js ***! + \*******************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var globalThis = __webpack_require__(/*! ../internals/global-this */ "./node_modules/core-js-pure/internals/global-this.js"); +var apply = __webpack_require__(/*! ../internals/function-apply */ "./node_modules/core-js-pure/internals/function-apply.js"); +var uncurryThis = __webpack_require__(/*! ../internals/function-uncurry-this-clause */ "./node_modules/core-js-pure/internals/function-uncurry-this-clause.js"); +var isCallable = __webpack_require__(/*! ../internals/is-callable */ "./node_modules/core-js-pure/internals/is-callable.js"); +var getOwnPropertyDescriptor = (__webpack_require__(/*! ../internals/object-get-own-property-descriptor */ "./node_modules/core-js-pure/internals/object-get-own-property-descriptor.js").f); +var isForced = __webpack_require__(/*! ../internals/is-forced */ "./node_modules/core-js-pure/internals/is-forced.js"); +var path = __webpack_require__(/*! ../internals/path */ "./node_modules/core-js-pure/internals/path.js"); +var bind = __webpack_require__(/*! ../internals/function-bind-context */ "./node_modules/core-js-pure/internals/function-bind-context.js"); +var createNonEnumerableProperty = __webpack_require__(/*! ../internals/create-non-enumerable-property */ "./node_modules/core-js-pure/internals/create-non-enumerable-property.js"); +var hasOwn = __webpack_require__(/*! ../internals/has-own-property */ "./node_modules/core-js-pure/internals/has-own-property.js"); +// add debugging info +__webpack_require__(/*! ../internals/shared-store */ "./node_modules/core-js-pure/internals/shared-store.js"); + +var wrapConstructor = function (NativeConstructor) { + var Wrapper = function (a, b, c) { + if (this instanceof Wrapper) { + switch (arguments.length) { + case 0: return new NativeConstructor(); + case 1: return new NativeConstructor(a); + case 2: return new NativeConstructor(a, b); + } return new NativeConstructor(a, b, c); + } return apply(NativeConstructor, this, arguments); + }; + Wrapper.prototype = NativeConstructor.prototype; + return Wrapper; +}; + +/* + options.target - name of the target object + options.global - target is the global object + options.stat - export as static methods of target + options.proto - export as prototype methods of target + options.real - real prototype method for the `pure` version + options.forced - export even if the native feature is available + options.bind - bind methods to the target, required for the `pure` version + options.wrap - wrap constructors to preventing global pollution, required for the `pure` version + options.unsafe - use the simple assignment of property instead of delete + defineProperty + options.sham - add a flag to not completely full polyfills + options.enumerable - export as enumerable property + options.dontCallGetSet - prevent calling a getter on target + options.name - the .name of the function if it does not match the key +*/ +module.exports = function (options, source) { + var TARGET = options.target; + var GLOBAL = options.global; + var STATIC = options.stat; + var PROTO = options.proto; + + var nativeSource = GLOBAL ? globalThis : STATIC ? globalThis[TARGET] : globalThis[TARGET] && globalThis[TARGET].prototype; + + var target = GLOBAL ? path : path[TARGET] || createNonEnumerableProperty(path, TARGET, {})[TARGET]; + var targetPrototype = target.prototype; + + var FORCED, USE_NATIVE, VIRTUAL_PROTOTYPE; + var key, sourceProperty, targetProperty, nativeProperty, resultProperty, descriptor; + + for (key in source) { + FORCED = isForced(GLOBAL ? key : TARGET + (STATIC ? '.' : '#') + key, options.forced); + // contains in native + USE_NATIVE = !FORCED && nativeSource && hasOwn(nativeSource, key); + + targetProperty = target[key]; + + if (USE_NATIVE) if (options.dontCallGetSet) { + descriptor = getOwnPropertyDescriptor(nativeSource, key); + nativeProperty = descriptor && descriptor.value; + } else nativeProperty = nativeSource[key]; + + // export native or implementation + sourceProperty = (USE_NATIVE && nativeProperty) ? nativeProperty : source[key]; + + if (!FORCED && !PROTO && typeof targetProperty == typeof sourceProperty) continue; + + // bind methods to global for calling from export context + if (options.bind && USE_NATIVE) resultProperty = bind(sourceProperty, globalThis); + // wrap global constructors for prevent changes in this version + else if (options.wrap && USE_NATIVE) resultProperty = wrapConstructor(sourceProperty); + // make static versions for prototype methods + else if (PROTO && isCallable(sourceProperty)) resultProperty = uncurryThis(sourceProperty); + // default case + else resultProperty = sourceProperty; + + // add a flag to not completely full polyfills + if (options.sham || (sourceProperty && sourceProperty.sham) || (targetProperty && targetProperty.sham)) { + createNonEnumerableProperty(resultProperty, 'sham', true); + } + + createNonEnumerableProperty(target, key, resultProperty); + + if (PROTO) { + VIRTUAL_PROTOTYPE = TARGET + 'Prototype'; + if (!hasOwn(path, VIRTUAL_PROTOTYPE)) { + createNonEnumerableProperty(path, VIRTUAL_PROTOTYPE, {}); + } + // export virtual prototype methods + createNonEnumerableProperty(path[VIRTUAL_PROTOTYPE], key, sourceProperty); + // export real prototype methods + if (options.real && targetPrototype && (FORCED || !targetPrototype[key])) { + createNonEnumerableProperty(targetPrototype, key, sourceProperty); + } + } + } +}; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/fails.js": +/*!******************************************************!*\ + !*** ./node_modules/core-js-pure/internals/fails.js ***! + \******************************************************/ +/***/ ((module) => { + +"use strict"; + +module.exports = function (exec) { + try { + return !!exec(); + } catch (error) { + return true; + } +}; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/freezing.js": +/*!*********************************************************!*\ + !*** ./node_modules/core-js-pure/internals/freezing.js ***! + \*********************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var fails = __webpack_require__(/*! ../internals/fails */ "./node_modules/core-js-pure/internals/fails.js"); + +module.exports = !fails(function () { + // eslint-disable-next-line es/no-object-isextensible, es/no-object-preventextensions -- required for testing + return Object.isExtensible(Object.preventExtensions({})); +}); + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/function-apply.js": +/*!***************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/function-apply.js ***! + \***************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var NATIVE_BIND = __webpack_require__(/*! ../internals/function-bind-native */ "./node_modules/core-js-pure/internals/function-bind-native.js"); + +var FunctionPrototype = Function.prototype; +var apply = FunctionPrototype.apply; +var call = FunctionPrototype.call; + +// eslint-disable-next-line es/no-reflect -- safe +module.exports = typeof Reflect == 'object' && Reflect.apply || (NATIVE_BIND ? call.bind(apply) : function () { + return call.apply(apply, arguments); +}); + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/function-bind-context.js": +/*!**********************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/function-bind-context.js ***! + \**********************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var uncurryThis = __webpack_require__(/*! ../internals/function-uncurry-this-clause */ "./node_modules/core-js-pure/internals/function-uncurry-this-clause.js"); +var aCallable = __webpack_require__(/*! ../internals/a-callable */ "./node_modules/core-js-pure/internals/a-callable.js"); +var NATIVE_BIND = __webpack_require__(/*! ../internals/function-bind-native */ "./node_modules/core-js-pure/internals/function-bind-native.js"); + +var bind = uncurryThis(uncurryThis.bind); + +// optional / simple context binding +module.exports = function (fn, that) { + aCallable(fn); + return that === undefined ? fn : NATIVE_BIND ? bind(fn, that) : function (/* ...args */) { + return fn.apply(that, arguments); + }; +}; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/function-bind-native.js": +/*!*********************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/function-bind-native.js ***! + \*********************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var fails = __webpack_require__(/*! ../internals/fails */ "./node_modules/core-js-pure/internals/fails.js"); + +module.exports = !fails(function () { + // eslint-disable-next-line es/no-function-prototype-bind -- safe + var test = (function () { /* empty */ }).bind(); + // eslint-disable-next-line no-prototype-builtins -- safe + return typeof test != 'function' || test.hasOwnProperty('prototype'); +}); + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/function-call.js": +/*!**************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/function-call.js ***! + \**************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var NATIVE_BIND = __webpack_require__(/*! ../internals/function-bind-native */ "./node_modules/core-js-pure/internals/function-bind-native.js"); + +var call = Function.prototype.call; + +module.exports = NATIVE_BIND ? call.bind(call) : function () { + return call.apply(call, arguments); +}; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/function-name.js": +/*!**************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/function-name.js ***! + \**************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ "./node_modules/core-js-pure/internals/descriptors.js"); +var hasOwn = __webpack_require__(/*! ../internals/has-own-property */ "./node_modules/core-js-pure/internals/has-own-property.js"); + +var FunctionPrototype = Function.prototype; +// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe +var getDescriptor = DESCRIPTORS && Object.getOwnPropertyDescriptor; + +var EXISTS = hasOwn(FunctionPrototype, 'name'); +// additional protection from minified / mangled / dropped function names +var PROPER = EXISTS && (function something() { /* empty */ }).name === 'something'; +var CONFIGURABLE = EXISTS && (!DESCRIPTORS || (DESCRIPTORS && getDescriptor(FunctionPrototype, 'name').configurable)); + +module.exports = { + EXISTS: EXISTS, + PROPER: PROPER, + CONFIGURABLE: CONFIGURABLE +}; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/function-uncurry-this-accessor.js": +/*!*******************************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/function-uncurry-this-accessor.js ***! + \*******************************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var uncurryThis = __webpack_require__(/*! ../internals/function-uncurry-this */ "./node_modules/core-js-pure/internals/function-uncurry-this.js"); +var aCallable = __webpack_require__(/*! ../internals/a-callable */ "./node_modules/core-js-pure/internals/a-callable.js"); + +module.exports = function (object, key, method) { + try { + // eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe + return uncurryThis(aCallable(Object.getOwnPropertyDescriptor(object, key)[method])); + } catch (error) { /* empty */ } +}; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/function-uncurry-this-clause.js": +/*!*****************************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/function-uncurry-this-clause.js ***! + \*****************************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var classofRaw = __webpack_require__(/*! ../internals/classof-raw */ "./node_modules/core-js-pure/internals/classof-raw.js"); +var uncurryThis = __webpack_require__(/*! ../internals/function-uncurry-this */ "./node_modules/core-js-pure/internals/function-uncurry-this.js"); + +module.exports = function (fn) { + // Nashorn bug: + // https://github.com/zloirock/core-js/issues/1128 + // https://github.com/zloirock/core-js/issues/1130 + if (classofRaw(fn) === 'Function') return uncurryThis(fn); +}; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/function-uncurry-this.js": +/*!**********************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/function-uncurry-this.js ***! + \**********************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var NATIVE_BIND = __webpack_require__(/*! ../internals/function-bind-native */ "./node_modules/core-js-pure/internals/function-bind-native.js"); + +var FunctionPrototype = Function.prototype; +var call = FunctionPrototype.call; +var uncurryThisWithBind = NATIVE_BIND && FunctionPrototype.bind.bind(call, call); + +module.exports = NATIVE_BIND ? uncurryThisWithBind : function (fn) { + return function () { + return call.apply(fn, arguments); + }; +}; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/get-built-in-prototype-method.js": +/*!******************************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/get-built-in-prototype-method.js ***! + \******************************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var globalThis = __webpack_require__(/*! ../internals/global-this */ "./node_modules/core-js-pure/internals/global-this.js"); +var path = __webpack_require__(/*! ../internals/path */ "./node_modules/core-js-pure/internals/path.js"); + +module.exports = function (CONSTRUCTOR, METHOD) { + var Namespace = path[CONSTRUCTOR + 'Prototype']; + var pureMethod = Namespace && Namespace[METHOD]; + if (pureMethod) return pureMethod; + var NativeConstructor = globalThis[CONSTRUCTOR]; + var NativePrototype = NativeConstructor && NativeConstructor.prototype; + return NativePrototype && NativePrototype[METHOD]; +}; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/get-built-in.js": +/*!*************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/get-built-in.js ***! + \*************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var path = __webpack_require__(/*! ../internals/path */ "./node_modules/core-js-pure/internals/path.js"); +var globalThis = __webpack_require__(/*! ../internals/global-this */ "./node_modules/core-js-pure/internals/global-this.js"); +var isCallable = __webpack_require__(/*! ../internals/is-callable */ "./node_modules/core-js-pure/internals/is-callable.js"); + +var aFunction = function (variable) { + return isCallable(variable) ? variable : undefined; +}; + +module.exports = function (namespace, method) { + return arguments.length < 2 ? aFunction(path[namespace]) || aFunction(globalThis[namespace]) + : path[namespace] && path[namespace][method] || globalThis[namespace] && globalThis[namespace][method]; +}; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/get-iterator-direct.js": +/*!********************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/get-iterator-direct.js ***! + \********************************************************************/ +/***/ ((module) => { + +"use strict"; + +// `GetIteratorDirect(obj)` abstract operation +// https://tc39.es/proposal-iterator-helpers/#sec-getiteratordirect +module.exports = function (obj) { + return { + iterator: obj, + next: obj.next, + done: false + }; +}; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/get-iterator-method.js": +/*!********************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/get-iterator-method.js ***! + \********************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var classof = __webpack_require__(/*! ../internals/classof */ "./node_modules/core-js-pure/internals/classof.js"); +var getMethod = __webpack_require__(/*! ../internals/get-method */ "./node_modules/core-js-pure/internals/get-method.js"); +var isNullOrUndefined = __webpack_require__(/*! ../internals/is-null-or-undefined */ "./node_modules/core-js-pure/internals/is-null-or-undefined.js"); +var Iterators = __webpack_require__(/*! ../internals/iterators */ "./node_modules/core-js-pure/internals/iterators.js"); +var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ "./node_modules/core-js-pure/internals/well-known-symbol.js"); + +var ITERATOR = wellKnownSymbol('iterator'); + +module.exports = function (it) { + if (!isNullOrUndefined(it)) return getMethod(it, ITERATOR) + || getMethod(it, '@@iterator') + || Iterators[classof(it)]; +}; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/get-iterator.js": +/*!*************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/get-iterator.js ***! + \*************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var call = __webpack_require__(/*! ../internals/function-call */ "./node_modules/core-js-pure/internals/function-call.js"); +var aCallable = __webpack_require__(/*! ../internals/a-callable */ "./node_modules/core-js-pure/internals/a-callable.js"); +var anObject = __webpack_require__(/*! ../internals/an-object */ "./node_modules/core-js-pure/internals/an-object.js"); +var tryToString = __webpack_require__(/*! ../internals/try-to-string */ "./node_modules/core-js-pure/internals/try-to-string.js"); +var getIteratorMethod = __webpack_require__(/*! ../internals/get-iterator-method */ "./node_modules/core-js-pure/internals/get-iterator-method.js"); + +var $TypeError = TypeError; + +module.exports = function (argument, usingIterator) { + var iteratorMethod = arguments.length < 2 ? getIteratorMethod(argument) : usingIterator; + if (aCallable(iteratorMethod)) return anObject(call(iteratorMethod, argument)); + throw new $TypeError(tryToString(argument) + ' is not iterable'); +}; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/get-json-replacer-function.js": +/*!***************************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/get-json-replacer-function.js ***! + \***************************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var uncurryThis = __webpack_require__(/*! ../internals/function-uncurry-this */ "./node_modules/core-js-pure/internals/function-uncurry-this.js"); +var isArray = __webpack_require__(/*! ../internals/is-array */ "./node_modules/core-js-pure/internals/is-array.js"); +var isCallable = __webpack_require__(/*! ../internals/is-callable */ "./node_modules/core-js-pure/internals/is-callable.js"); +var classof = __webpack_require__(/*! ../internals/classof-raw */ "./node_modules/core-js-pure/internals/classof-raw.js"); +var toString = __webpack_require__(/*! ../internals/to-string */ "./node_modules/core-js-pure/internals/to-string.js"); + +var push = uncurryThis([].push); + +module.exports = function (replacer) { + if (isCallable(replacer)) return replacer; + if (!isArray(replacer)) return; + var rawLength = replacer.length; + var keys = []; + for (var i = 0; i < rawLength; i++) { + var element = replacer[i]; + if (typeof element == 'string') push(keys, element); + else if (typeof element == 'number' || classof(element) === 'Number' || classof(element) === 'String') push(keys, toString(element)); + } + var keysLength = keys.length; + var root = true; + return function (key, value) { + if (root) { + root = false; + return value; + } + if (isArray(this)) return value; + for (var j = 0; j < keysLength; j++) if (keys[j] === key) return value; + }; +}; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/get-method.js": +/*!***********************************************************!*\ + !*** ./node_modules/core-js-pure/internals/get-method.js ***! + \***********************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var aCallable = __webpack_require__(/*! ../internals/a-callable */ "./node_modules/core-js-pure/internals/a-callable.js"); +var isNullOrUndefined = __webpack_require__(/*! ../internals/is-null-or-undefined */ "./node_modules/core-js-pure/internals/is-null-or-undefined.js"); + +// `GetMethod` abstract operation +// https://tc39.es/ecma262/#sec-getmethod +module.exports = function (V, P) { + var func = V[P]; + return isNullOrUndefined(func) ? undefined : aCallable(func); +}; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/get-set-record.js": +/*!***************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/get-set-record.js ***! + \***************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var aCallable = __webpack_require__(/*! ../internals/a-callable */ "./node_modules/core-js-pure/internals/a-callable.js"); +var anObject = __webpack_require__(/*! ../internals/an-object */ "./node_modules/core-js-pure/internals/an-object.js"); +var call = __webpack_require__(/*! ../internals/function-call */ "./node_modules/core-js-pure/internals/function-call.js"); +var toIntegerOrInfinity = __webpack_require__(/*! ../internals/to-integer-or-infinity */ "./node_modules/core-js-pure/internals/to-integer-or-infinity.js"); +var getIteratorDirect = __webpack_require__(/*! ../internals/get-iterator-direct */ "./node_modules/core-js-pure/internals/get-iterator-direct.js"); + +var INVALID_SIZE = 'Invalid size'; +var $RangeError = RangeError; +var $TypeError = TypeError; +var max = Math.max; + +var SetRecord = function (set, intSize) { + this.set = set; + this.size = max(intSize, 0); + this.has = aCallable(set.has); + this.keys = aCallable(set.keys); +}; + +SetRecord.prototype = { + getIterator: function () { + return getIteratorDirect(anObject(call(this.keys, this.set))); + }, + includes: function (it) { + return call(this.has, this.set, it); + } +}; + +// `GetSetRecord` abstract operation +// https://tc39.es/proposal-set-methods/#sec-getsetrecord +module.exports = function (obj) { + anObject(obj); + var numSize = +obj.size; + // NOTE: If size is undefined, then numSize will be NaN + // eslint-disable-next-line no-self-compare -- NaN check + if (numSize !== numSize) throw new $TypeError(INVALID_SIZE); + var intSize = toIntegerOrInfinity(numSize); + if (intSize < 0) throw new $RangeError(INVALID_SIZE); + return new SetRecord(obj, intSize); +}; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/global-this.js": +/*!************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/global-this.js ***! + \************************************************************/ +/***/ (function(module) { + +"use strict"; + +var check = function (it) { + return it && it.Math === Math && it; +}; + +// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028 +module.exports = + // eslint-disable-next-line es/no-global-this -- safe + check(typeof globalThis == 'object' && globalThis) || + check(typeof window == 'object' && window) || + // eslint-disable-next-line no-restricted-globals -- safe + check(typeof self == 'object' && self) || + check(typeof global == 'object' && global) || + check(typeof this == 'object' && this) || + // eslint-disable-next-line no-new-func -- fallback + (function () { return this; })() || Function('return this')(); + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/has-own-property.js": +/*!*****************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/has-own-property.js ***! + \*****************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var uncurryThis = __webpack_require__(/*! ../internals/function-uncurry-this */ "./node_modules/core-js-pure/internals/function-uncurry-this.js"); +var toObject = __webpack_require__(/*! ../internals/to-object */ "./node_modules/core-js-pure/internals/to-object.js"); + +var hasOwnProperty = uncurryThis({}.hasOwnProperty); + +// `HasOwnProperty` abstract operation +// https://tc39.es/ecma262/#sec-hasownproperty +// eslint-disable-next-line es/no-object-hasown -- safe +module.exports = Object.hasOwn || function hasOwn(it, key) { + return hasOwnProperty(toObject(it), key); +}; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/hidden-keys.js": +/*!************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/hidden-keys.js ***! + \************************************************************/ +/***/ ((module) => { + +"use strict"; + +module.exports = {}; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/host-report-errors.js": +/*!*******************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/host-report-errors.js ***! + \*******************************************************************/ +/***/ ((module) => { + +"use strict"; + +module.exports = function (a, b) { + try { + // eslint-disable-next-line no-console -- safe + arguments.length === 1 ? console.error(a) : console.error(a, b); + } catch (error) { /* empty */ } +}; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/html.js": +/*!*****************************************************!*\ + !*** ./node_modules/core-js-pure/internals/html.js ***! + \*****************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var getBuiltIn = __webpack_require__(/*! ../internals/get-built-in */ "./node_modules/core-js-pure/internals/get-built-in.js"); + +module.exports = getBuiltIn('document', 'documentElement'); + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/ie8-dom-define.js": +/*!***************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/ie8-dom-define.js ***! + \***************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ "./node_modules/core-js-pure/internals/descriptors.js"); +var fails = __webpack_require__(/*! ../internals/fails */ "./node_modules/core-js-pure/internals/fails.js"); +var createElement = __webpack_require__(/*! ../internals/document-create-element */ "./node_modules/core-js-pure/internals/document-create-element.js"); + +// Thanks to IE8 for its funny defineProperty +module.exports = !DESCRIPTORS && !fails(function () { + // eslint-disable-next-line es/no-object-defineproperty -- required for testing + return Object.defineProperty(createElement('div'), 'a', { + get: function () { return 7; } + }).a !== 7; +}); + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/indexed-object.js": +/*!***************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/indexed-object.js ***! + \***************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var uncurryThis = __webpack_require__(/*! ../internals/function-uncurry-this */ "./node_modules/core-js-pure/internals/function-uncurry-this.js"); +var fails = __webpack_require__(/*! ../internals/fails */ "./node_modules/core-js-pure/internals/fails.js"); +var classof = __webpack_require__(/*! ../internals/classof-raw */ "./node_modules/core-js-pure/internals/classof-raw.js"); + +var $Object = Object; +var split = uncurryThis(''.split); + +// fallback for non-array-like ES3 and non-enumerable old V8 strings +module.exports = fails(function () { + // throws an error in rhino, see https://github.com/mozilla/rhino/issues/346 + // eslint-disable-next-line no-prototype-builtins -- safe + return !$Object('z').propertyIsEnumerable(0); +}) ? function (it) { + return classof(it) === 'String' ? split(it, '') : $Object(it); +} : $Object; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/inspect-source.js": +/*!***************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/inspect-source.js ***! + \***************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var uncurryThis = __webpack_require__(/*! ../internals/function-uncurry-this */ "./node_modules/core-js-pure/internals/function-uncurry-this.js"); +var isCallable = __webpack_require__(/*! ../internals/is-callable */ "./node_modules/core-js-pure/internals/is-callable.js"); +var store = __webpack_require__(/*! ../internals/shared-store */ "./node_modules/core-js-pure/internals/shared-store.js"); + +var functionToString = uncurryThis(Function.toString); + +// this helper broken in `core-js@3.4.1-3.4.4`, so we can't use `shared` helper +if (!isCallable(store.inspectSource)) { + store.inspectSource = function (it) { + return functionToString(it); + }; +} + +module.exports = store.inspectSource; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/install-error-cause.js": +/*!********************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/install-error-cause.js ***! + \********************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var isObject = __webpack_require__(/*! ../internals/is-object */ "./node_modules/core-js-pure/internals/is-object.js"); +var createNonEnumerableProperty = __webpack_require__(/*! ../internals/create-non-enumerable-property */ "./node_modules/core-js-pure/internals/create-non-enumerable-property.js"); + +// `InstallErrorCause` abstract operation +// https://tc39.es/proposal-error-cause/#sec-errorobjects-install-error-cause +module.exports = function (O, options) { + if (isObject(options) && 'cause' in options) { + createNonEnumerableProperty(O, 'cause', options.cause); + } +}; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/internal-metadata.js": +/*!******************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/internal-metadata.js ***! + \******************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var $ = __webpack_require__(/*! ../internals/export */ "./node_modules/core-js-pure/internals/export.js"); +var uncurryThis = __webpack_require__(/*! ../internals/function-uncurry-this */ "./node_modules/core-js-pure/internals/function-uncurry-this.js"); +var hiddenKeys = __webpack_require__(/*! ../internals/hidden-keys */ "./node_modules/core-js-pure/internals/hidden-keys.js"); +var isObject = __webpack_require__(/*! ../internals/is-object */ "./node_modules/core-js-pure/internals/is-object.js"); +var hasOwn = __webpack_require__(/*! ../internals/has-own-property */ "./node_modules/core-js-pure/internals/has-own-property.js"); +var defineProperty = (__webpack_require__(/*! ../internals/object-define-property */ "./node_modules/core-js-pure/internals/object-define-property.js").f); +var getOwnPropertyNamesModule = __webpack_require__(/*! ../internals/object-get-own-property-names */ "./node_modules/core-js-pure/internals/object-get-own-property-names.js"); +var getOwnPropertyNamesExternalModule = __webpack_require__(/*! ../internals/object-get-own-property-names-external */ "./node_modules/core-js-pure/internals/object-get-own-property-names-external.js"); +var isExtensible = __webpack_require__(/*! ../internals/object-is-extensible */ "./node_modules/core-js-pure/internals/object-is-extensible.js"); +var uid = __webpack_require__(/*! ../internals/uid */ "./node_modules/core-js-pure/internals/uid.js"); +var FREEZING = __webpack_require__(/*! ../internals/freezing */ "./node_modules/core-js-pure/internals/freezing.js"); + +var REQUIRED = false; +var METADATA = uid('meta'); +var id = 0; + +var setMetadata = function (it) { + defineProperty(it, METADATA, { value: { + objectID: 'O' + id++, // object ID + weakData: {} // weak collections IDs + } }); +}; + +var fastKey = function (it, create) { + // return a primitive with prefix + if (!isObject(it)) return typeof it == 'symbol' ? it : (typeof it == 'string' ? 'S' : 'P') + it; + if (!hasOwn(it, METADATA)) { + // can't set metadata to uncaught frozen object + if (!isExtensible(it)) return 'F'; + // not necessary to add metadata + if (!create) return 'E'; + // add missing metadata + setMetadata(it); + // return object ID + } return it[METADATA].objectID; +}; + +var getWeakData = function (it, create) { + if (!hasOwn(it, METADATA)) { + // can't set metadata to uncaught frozen object + if (!isExtensible(it)) return true; + // not necessary to add metadata + if (!create) return false; + // add missing metadata + setMetadata(it); + // return the store of weak collections IDs + } return it[METADATA].weakData; +}; + +// add metadata on freeze-family methods calling +var onFreeze = function (it) { + if (FREEZING && REQUIRED && isExtensible(it) && !hasOwn(it, METADATA)) setMetadata(it); + return it; +}; + +var enable = function () { + meta.enable = function () { /* empty */ }; + REQUIRED = true; + var getOwnPropertyNames = getOwnPropertyNamesModule.f; + var splice = uncurryThis([].splice); + var test = {}; + test[METADATA] = 1; + + // prevent exposing of metadata key + if (getOwnPropertyNames(test).length) { + getOwnPropertyNamesModule.f = function (it) { + var result = getOwnPropertyNames(it); + for (var i = 0, length = result.length; i < length; i++) { + if (result[i] === METADATA) { + splice(result, i, 1); + break; + } + } return result; + }; + + $({ target: 'Object', stat: true, forced: true }, { + getOwnPropertyNames: getOwnPropertyNamesExternalModule.f + }); + } +}; + +var meta = module.exports = { + enable: enable, + fastKey: fastKey, + getWeakData: getWeakData, + onFreeze: onFreeze +}; + +hiddenKeys[METADATA] = true; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/internal-state.js": +/*!***************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/internal-state.js ***! + \***************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var NATIVE_WEAK_MAP = __webpack_require__(/*! ../internals/weak-map-basic-detection */ "./node_modules/core-js-pure/internals/weak-map-basic-detection.js"); +var globalThis = __webpack_require__(/*! ../internals/global-this */ "./node_modules/core-js-pure/internals/global-this.js"); +var isObject = __webpack_require__(/*! ../internals/is-object */ "./node_modules/core-js-pure/internals/is-object.js"); +var createNonEnumerableProperty = __webpack_require__(/*! ../internals/create-non-enumerable-property */ "./node_modules/core-js-pure/internals/create-non-enumerable-property.js"); +var hasOwn = __webpack_require__(/*! ../internals/has-own-property */ "./node_modules/core-js-pure/internals/has-own-property.js"); +var shared = __webpack_require__(/*! ../internals/shared-store */ "./node_modules/core-js-pure/internals/shared-store.js"); +var sharedKey = __webpack_require__(/*! ../internals/shared-key */ "./node_modules/core-js-pure/internals/shared-key.js"); +var hiddenKeys = __webpack_require__(/*! ../internals/hidden-keys */ "./node_modules/core-js-pure/internals/hidden-keys.js"); + +var OBJECT_ALREADY_INITIALIZED = 'Object already initialized'; +var TypeError = globalThis.TypeError; +var WeakMap = globalThis.WeakMap; +var set, get, has; + +var enforce = function (it) { + return has(it) ? get(it) : set(it, {}); +}; + +var getterFor = function (TYPE) { + return function (it) { + var state; + if (!isObject(it) || (state = get(it)).type !== TYPE) { + throw new TypeError('Incompatible receiver, ' + TYPE + ' required'); + } return state; + }; +}; + +if (NATIVE_WEAK_MAP || shared.state) { + var store = shared.state || (shared.state = new WeakMap()); + /* eslint-disable no-self-assign -- prototype methods protection */ + store.get = store.get; + store.has = store.has; + store.set = store.set; + /* eslint-enable no-self-assign -- prototype methods protection */ + set = function (it, metadata) { + if (store.has(it)) throw new TypeError(OBJECT_ALREADY_INITIALIZED); + metadata.facade = it; + store.set(it, metadata); + return metadata; + }; + get = function (it) { + return store.get(it) || {}; + }; + has = function (it) { + return store.has(it); + }; +} else { + var STATE = sharedKey('state'); + hiddenKeys[STATE] = true; + set = function (it, metadata) { + if (hasOwn(it, STATE)) throw new TypeError(OBJECT_ALREADY_INITIALIZED); + metadata.facade = it; + createNonEnumerableProperty(it, STATE, metadata); + return metadata; + }; + get = function (it) { + return hasOwn(it, STATE) ? it[STATE] : {}; + }; + has = function (it) { + return hasOwn(it, STATE); + }; +} + +module.exports = { + set: set, + get: get, + has: has, + enforce: enforce, + getterFor: getterFor +}; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/is-array-iterator-method.js": +/*!*************************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/is-array-iterator-method.js ***! + \*************************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ "./node_modules/core-js-pure/internals/well-known-symbol.js"); +var Iterators = __webpack_require__(/*! ../internals/iterators */ "./node_modules/core-js-pure/internals/iterators.js"); + +var ITERATOR = wellKnownSymbol('iterator'); +var ArrayPrototype = Array.prototype; + +// check on default Array iterator +module.exports = function (it) { + return it !== undefined && (Iterators.Array === it || ArrayPrototype[ITERATOR] === it); +}; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/is-array.js": +/*!*********************************************************!*\ + !*** ./node_modules/core-js-pure/internals/is-array.js ***! + \*********************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var classof = __webpack_require__(/*! ../internals/classof-raw */ "./node_modules/core-js-pure/internals/classof-raw.js"); + +// `IsArray` abstract operation +// https://tc39.es/ecma262/#sec-isarray +// eslint-disable-next-line es/no-array-isarray -- safe +module.exports = Array.isArray || function isArray(argument) { + return classof(argument) === 'Array'; +}; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/is-callable.js": +/*!************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/is-callable.js ***! + \************************************************************/ +/***/ ((module) => { + +"use strict"; + +// https://tc39.es/ecma262/#sec-IsHTMLDDA-internal-slot +var documentAll = typeof document == 'object' && document.all; + +// `IsCallable` abstract operation +// https://tc39.es/ecma262/#sec-iscallable +// eslint-disable-next-line unicorn/no-typeof-undefined -- required for testing +module.exports = typeof documentAll == 'undefined' && documentAll !== undefined ? function (argument) { + return typeof argument == 'function' || argument === documentAll; +} : function (argument) { + return typeof argument == 'function'; +}; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/is-constructor.js": +/*!***************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/is-constructor.js ***! + \***************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var uncurryThis = __webpack_require__(/*! ../internals/function-uncurry-this */ "./node_modules/core-js-pure/internals/function-uncurry-this.js"); +var fails = __webpack_require__(/*! ../internals/fails */ "./node_modules/core-js-pure/internals/fails.js"); +var isCallable = __webpack_require__(/*! ../internals/is-callable */ "./node_modules/core-js-pure/internals/is-callable.js"); +var classof = __webpack_require__(/*! ../internals/classof */ "./node_modules/core-js-pure/internals/classof.js"); +var getBuiltIn = __webpack_require__(/*! ../internals/get-built-in */ "./node_modules/core-js-pure/internals/get-built-in.js"); +var inspectSource = __webpack_require__(/*! ../internals/inspect-source */ "./node_modules/core-js-pure/internals/inspect-source.js"); + +var noop = function () { /* empty */ }; +var construct = getBuiltIn('Reflect', 'construct'); +var constructorRegExp = /^\s*(?:class|function)\b/; +var exec = uncurryThis(constructorRegExp.exec); +var INCORRECT_TO_STRING = !constructorRegExp.test(noop); + +var isConstructorModern = function isConstructor(argument) { + if (!isCallable(argument)) return false; + try { + construct(noop, [], argument); + return true; + } catch (error) { + return false; + } +}; + +var isConstructorLegacy = function isConstructor(argument) { + if (!isCallable(argument)) return false; + switch (classof(argument)) { + case 'AsyncFunction': + case 'GeneratorFunction': + case 'AsyncGeneratorFunction': return false; + } + try { + // we can't check .prototype since constructors produced by .bind haven't it + // `Function#toString` throws on some built-it function in some legacy engines + // (for example, `DOMQuad` and similar in FF41-) + return INCORRECT_TO_STRING || !!exec(constructorRegExp, inspectSource(argument)); + } catch (error) { + return true; + } +}; + +isConstructorLegacy.sham = true; + +// `IsConstructor` abstract operation +// https://tc39.es/ecma262/#sec-isconstructor +module.exports = !construct || fails(function () { + var called; + return isConstructorModern(isConstructorModern.call) + || !isConstructorModern(Object) + || !isConstructorModern(function () { called = true; }) + || called; +}) ? isConstructorLegacy : isConstructorModern; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/is-forced.js": +/*!**********************************************************!*\ + !*** ./node_modules/core-js-pure/internals/is-forced.js ***! + \**********************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var fails = __webpack_require__(/*! ../internals/fails */ "./node_modules/core-js-pure/internals/fails.js"); +var isCallable = __webpack_require__(/*! ../internals/is-callable */ "./node_modules/core-js-pure/internals/is-callable.js"); + +var replacement = /#|\.prototype\./; + +var isForced = function (feature, detection) { + var value = data[normalize(feature)]; + return value === POLYFILL ? true + : value === NATIVE ? false + : isCallable(detection) ? fails(detection) + : !!detection; +}; + +var normalize = isForced.normalize = function (string) { + return String(string).replace(replacement, '.').toLowerCase(); +}; + +var data = isForced.data = {}; +var NATIVE = isForced.NATIVE = 'N'; +var POLYFILL = isForced.POLYFILL = 'P'; + +module.exports = isForced; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/is-null-or-undefined.js": +/*!*********************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/is-null-or-undefined.js ***! + \*********************************************************************/ +/***/ ((module) => { + +"use strict"; + +// we can't use just `it == null` since of `document.all` special case +// https://tc39.es/ecma262/#sec-IsHTMLDDA-internal-slot-aec +module.exports = function (it) { + return it === null || it === undefined; +}; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/is-object.js": +/*!**********************************************************!*\ + !*** ./node_modules/core-js-pure/internals/is-object.js ***! + \**********************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var isCallable = __webpack_require__(/*! ../internals/is-callable */ "./node_modules/core-js-pure/internals/is-callable.js"); + +module.exports = function (it) { + return typeof it == 'object' ? it !== null : isCallable(it); +}; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/is-possible-prototype.js": +/*!**********************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/is-possible-prototype.js ***! + \**********************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var isObject = __webpack_require__(/*! ../internals/is-object */ "./node_modules/core-js-pure/internals/is-object.js"); + +module.exports = function (argument) { + return isObject(argument) || argument === null; +}; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/is-pure.js": +/*!********************************************************!*\ + !*** ./node_modules/core-js-pure/internals/is-pure.js ***! + \********************************************************/ +/***/ ((module) => { + +"use strict"; + +module.exports = true; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/is-regexp.js": +/*!**********************************************************!*\ + !*** ./node_modules/core-js-pure/internals/is-regexp.js ***! + \**********************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var isObject = __webpack_require__(/*! ../internals/is-object */ "./node_modules/core-js-pure/internals/is-object.js"); +var classof = __webpack_require__(/*! ../internals/classof-raw */ "./node_modules/core-js-pure/internals/classof-raw.js"); +var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ "./node_modules/core-js-pure/internals/well-known-symbol.js"); + +var MATCH = wellKnownSymbol('match'); + +// `IsRegExp` abstract operation +// https://tc39.es/ecma262/#sec-isregexp +module.exports = function (it) { + var isRegExp; + return isObject(it) && ((isRegExp = it[MATCH]) !== undefined ? !!isRegExp : classof(it) === 'RegExp'); +}; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/is-symbol.js": +/*!**********************************************************!*\ + !*** ./node_modules/core-js-pure/internals/is-symbol.js ***! + \**********************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var getBuiltIn = __webpack_require__(/*! ../internals/get-built-in */ "./node_modules/core-js-pure/internals/get-built-in.js"); +var isCallable = __webpack_require__(/*! ../internals/is-callable */ "./node_modules/core-js-pure/internals/is-callable.js"); +var isPrototypeOf = __webpack_require__(/*! ../internals/object-is-prototype-of */ "./node_modules/core-js-pure/internals/object-is-prototype-of.js"); +var USE_SYMBOL_AS_UID = __webpack_require__(/*! ../internals/use-symbol-as-uid */ "./node_modules/core-js-pure/internals/use-symbol-as-uid.js"); + +var $Object = Object; + +module.exports = USE_SYMBOL_AS_UID ? function (it) { + return typeof it == 'symbol'; +} : function (it) { + var $Symbol = getBuiltIn('Symbol'); + return isCallable($Symbol) && isPrototypeOf($Symbol.prototype, $Object(it)); +}; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/iterate-simple.js": +/*!***************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/iterate-simple.js ***! + \***************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var call = __webpack_require__(/*! ../internals/function-call */ "./node_modules/core-js-pure/internals/function-call.js"); + +module.exports = function (record, fn, ITERATOR_INSTEAD_OF_RECORD) { + var iterator = ITERATOR_INSTEAD_OF_RECORD ? record : record.iterator; + var next = record.next; + var step, result; + while (!(step = call(next, iterator)).done) { + result = fn(step.value); + if (result !== undefined) return result; + } +}; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/iterate.js": +/*!********************************************************!*\ + !*** ./node_modules/core-js-pure/internals/iterate.js ***! + \********************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var bind = __webpack_require__(/*! ../internals/function-bind-context */ "./node_modules/core-js-pure/internals/function-bind-context.js"); +var call = __webpack_require__(/*! ../internals/function-call */ "./node_modules/core-js-pure/internals/function-call.js"); +var anObject = __webpack_require__(/*! ../internals/an-object */ "./node_modules/core-js-pure/internals/an-object.js"); +var tryToString = __webpack_require__(/*! ../internals/try-to-string */ "./node_modules/core-js-pure/internals/try-to-string.js"); +var isArrayIteratorMethod = __webpack_require__(/*! ../internals/is-array-iterator-method */ "./node_modules/core-js-pure/internals/is-array-iterator-method.js"); +var lengthOfArrayLike = __webpack_require__(/*! ../internals/length-of-array-like */ "./node_modules/core-js-pure/internals/length-of-array-like.js"); +var isPrototypeOf = __webpack_require__(/*! ../internals/object-is-prototype-of */ "./node_modules/core-js-pure/internals/object-is-prototype-of.js"); +var getIterator = __webpack_require__(/*! ../internals/get-iterator */ "./node_modules/core-js-pure/internals/get-iterator.js"); +var getIteratorMethod = __webpack_require__(/*! ../internals/get-iterator-method */ "./node_modules/core-js-pure/internals/get-iterator-method.js"); +var iteratorClose = __webpack_require__(/*! ../internals/iterator-close */ "./node_modules/core-js-pure/internals/iterator-close.js"); + +var $TypeError = TypeError; + +var Result = function (stopped, result) { + this.stopped = stopped; + this.result = result; +}; + +var ResultPrototype = Result.prototype; + +module.exports = function (iterable, unboundFunction, options) { + var that = options && options.that; + var AS_ENTRIES = !!(options && options.AS_ENTRIES); + var IS_RECORD = !!(options && options.IS_RECORD); + var IS_ITERATOR = !!(options && options.IS_ITERATOR); + var INTERRUPTED = !!(options && options.INTERRUPTED); + var fn = bind(unboundFunction, that); + var iterator, iterFn, index, length, result, next, step; + + var stop = function (condition) { + if (iterator) iteratorClose(iterator, 'normal', condition); + return new Result(true, condition); + }; + + var callFn = function (value) { + if (AS_ENTRIES) { + anObject(value); + return INTERRUPTED ? fn(value[0], value[1], stop) : fn(value[0], value[1]); + } return INTERRUPTED ? fn(value, stop) : fn(value); + }; + + if (IS_RECORD) { + iterator = iterable.iterator; + } else if (IS_ITERATOR) { + iterator = iterable; + } else { + iterFn = getIteratorMethod(iterable); + if (!iterFn) throw new $TypeError(tryToString(iterable) + ' is not iterable'); + // optimisation for array iterators + if (isArrayIteratorMethod(iterFn)) { + for (index = 0, length = lengthOfArrayLike(iterable); length > index; index++) { + result = callFn(iterable[index]); + if (result && isPrototypeOf(ResultPrototype, result)) return result; + } return new Result(false); + } + iterator = getIterator(iterable, iterFn); + } + + next = IS_RECORD ? iterable.next : iterator.next; + while (!(step = call(next, iterator)).done) { + try { + result = callFn(step.value); + } catch (error) { + iteratorClose(iterator, 'throw', error); + } + if (typeof result == 'object' && result && isPrototypeOf(ResultPrototype, result)) return result; + } return new Result(false); +}; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/iterator-close.js": +/*!***************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/iterator-close.js ***! + \***************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var call = __webpack_require__(/*! ../internals/function-call */ "./node_modules/core-js-pure/internals/function-call.js"); +var anObject = __webpack_require__(/*! ../internals/an-object */ "./node_modules/core-js-pure/internals/an-object.js"); +var getMethod = __webpack_require__(/*! ../internals/get-method */ "./node_modules/core-js-pure/internals/get-method.js"); + +module.exports = function (iterator, kind, value) { + var innerResult, innerError; + anObject(iterator); + try { + innerResult = getMethod(iterator, 'return'); + if (!innerResult) { + if (kind === 'throw') throw value; + return value; + } + innerResult = call(innerResult, iterator); + } catch (error) { + innerError = true; + innerResult = error; + } + if (kind === 'throw') throw value; + if (innerError) throw innerResult; + anObject(innerResult); + return value; +}; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/iterator-create-constructor.js": +/*!****************************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/iterator-create-constructor.js ***! + \****************************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var IteratorPrototype = (__webpack_require__(/*! ../internals/iterators-core */ "./node_modules/core-js-pure/internals/iterators-core.js").IteratorPrototype); +var create = __webpack_require__(/*! ../internals/object-create */ "./node_modules/core-js-pure/internals/object-create.js"); +var createPropertyDescriptor = __webpack_require__(/*! ../internals/create-property-descriptor */ "./node_modules/core-js-pure/internals/create-property-descriptor.js"); +var setToStringTag = __webpack_require__(/*! ../internals/set-to-string-tag */ "./node_modules/core-js-pure/internals/set-to-string-tag.js"); +var Iterators = __webpack_require__(/*! ../internals/iterators */ "./node_modules/core-js-pure/internals/iterators.js"); + +var returnThis = function () { return this; }; + +module.exports = function (IteratorConstructor, NAME, next, ENUMERABLE_NEXT) { + var TO_STRING_TAG = NAME + ' Iterator'; + IteratorConstructor.prototype = create(IteratorPrototype, { next: createPropertyDescriptor(+!ENUMERABLE_NEXT, next) }); + setToStringTag(IteratorConstructor, TO_STRING_TAG, false, true); + Iterators[TO_STRING_TAG] = returnThis; + return IteratorConstructor; +}; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/iterator-define.js": +/*!****************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/iterator-define.js ***! + \****************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var $ = __webpack_require__(/*! ../internals/export */ "./node_modules/core-js-pure/internals/export.js"); +var call = __webpack_require__(/*! ../internals/function-call */ "./node_modules/core-js-pure/internals/function-call.js"); +var IS_PURE = __webpack_require__(/*! ../internals/is-pure */ "./node_modules/core-js-pure/internals/is-pure.js"); +var FunctionName = __webpack_require__(/*! ../internals/function-name */ "./node_modules/core-js-pure/internals/function-name.js"); +var isCallable = __webpack_require__(/*! ../internals/is-callable */ "./node_modules/core-js-pure/internals/is-callable.js"); +var createIteratorConstructor = __webpack_require__(/*! ../internals/iterator-create-constructor */ "./node_modules/core-js-pure/internals/iterator-create-constructor.js"); +var getPrototypeOf = __webpack_require__(/*! ../internals/object-get-prototype-of */ "./node_modules/core-js-pure/internals/object-get-prototype-of.js"); +var setPrototypeOf = __webpack_require__(/*! ../internals/object-set-prototype-of */ "./node_modules/core-js-pure/internals/object-set-prototype-of.js"); +var setToStringTag = __webpack_require__(/*! ../internals/set-to-string-tag */ "./node_modules/core-js-pure/internals/set-to-string-tag.js"); +var createNonEnumerableProperty = __webpack_require__(/*! ../internals/create-non-enumerable-property */ "./node_modules/core-js-pure/internals/create-non-enumerable-property.js"); +var defineBuiltIn = __webpack_require__(/*! ../internals/define-built-in */ "./node_modules/core-js-pure/internals/define-built-in.js"); +var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ "./node_modules/core-js-pure/internals/well-known-symbol.js"); +var Iterators = __webpack_require__(/*! ../internals/iterators */ "./node_modules/core-js-pure/internals/iterators.js"); +var IteratorsCore = __webpack_require__(/*! ../internals/iterators-core */ "./node_modules/core-js-pure/internals/iterators-core.js"); + +var PROPER_FUNCTION_NAME = FunctionName.PROPER; +var CONFIGURABLE_FUNCTION_NAME = FunctionName.CONFIGURABLE; +var IteratorPrototype = IteratorsCore.IteratorPrototype; +var BUGGY_SAFARI_ITERATORS = IteratorsCore.BUGGY_SAFARI_ITERATORS; +var ITERATOR = wellKnownSymbol('iterator'); +var KEYS = 'keys'; +var VALUES = 'values'; +var ENTRIES = 'entries'; + +var returnThis = function () { return this; }; + +module.exports = function (Iterable, NAME, IteratorConstructor, next, DEFAULT, IS_SET, FORCED) { + createIteratorConstructor(IteratorConstructor, NAME, next); + + var getIterationMethod = function (KIND) { + if (KIND === DEFAULT && defaultIterator) return defaultIterator; + if (!BUGGY_SAFARI_ITERATORS && KIND && KIND in IterablePrototype) return IterablePrototype[KIND]; + + switch (KIND) { + case KEYS: return function keys() { return new IteratorConstructor(this, KIND); }; + case VALUES: return function values() { return new IteratorConstructor(this, KIND); }; + case ENTRIES: return function entries() { return new IteratorConstructor(this, KIND); }; + } + + return function () { return new IteratorConstructor(this); }; + }; + + var TO_STRING_TAG = NAME + ' Iterator'; + var INCORRECT_VALUES_NAME = false; + var IterablePrototype = Iterable.prototype; + var nativeIterator = IterablePrototype[ITERATOR] + || IterablePrototype['@@iterator'] + || DEFAULT && IterablePrototype[DEFAULT]; + var defaultIterator = !BUGGY_SAFARI_ITERATORS && nativeIterator || getIterationMethod(DEFAULT); + var anyNativeIterator = NAME === 'Array' ? IterablePrototype.entries || nativeIterator : nativeIterator; + var CurrentIteratorPrototype, methods, KEY; + + // fix native + if (anyNativeIterator) { + CurrentIteratorPrototype = getPrototypeOf(anyNativeIterator.call(new Iterable())); + if (CurrentIteratorPrototype !== Object.prototype && CurrentIteratorPrototype.next) { + if (!IS_PURE && getPrototypeOf(CurrentIteratorPrototype) !== IteratorPrototype) { + if (setPrototypeOf) { + setPrototypeOf(CurrentIteratorPrototype, IteratorPrototype); + } else if (!isCallable(CurrentIteratorPrototype[ITERATOR])) { + defineBuiltIn(CurrentIteratorPrototype, ITERATOR, returnThis); + } + } + // Set @@toStringTag to native iterators + setToStringTag(CurrentIteratorPrototype, TO_STRING_TAG, true, true); + if (IS_PURE) Iterators[TO_STRING_TAG] = returnThis; + } + } + + // fix Array.prototype.{ values, @@iterator }.name in V8 / FF + if (PROPER_FUNCTION_NAME && DEFAULT === VALUES && nativeIterator && nativeIterator.name !== VALUES) { + if (!IS_PURE && CONFIGURABLE_FUNCTION_NAME) { + createNonEnumerableProperty(IterablePrototype, 'name', VALUES); + } else { + INCORRECT_VALUES_NAME = true; + defaultIterator = function values() { return call(nativeIterator, this); }; + } + } + + // export additional methods + if (DEFAULT) { + methods = { + values: getIterationMethod(VALUES), + keys: IS_SET ? defaultIterator : getIterationMethod(KEYS), + entries: getIterationMethod(ENTRIES) + }; + if (FORCED) for (KEY in methods) { + if (BUGGY_SAFARI_ITERATORS || INCORRECT_VALUES_NAME || !(KEY in IterablePrototype)) { + defineBuiltIn(IterablePrototype, KEY, methods[KEY]); + } + } else $({ target: NAME, proto: true, forced: BUGGY_SAFARI_ITERATORS || INCORRECT_VALUES_NAME }, methods); + } + + // define iterator + if ((!IS_PURE || FORCED) && IterablePrototype[ITERATOR] !== defaultIterator) { + defineBuiltIn(IterablePrototype, ITERATOR, defaultIterator, { name: DEFAULT }); + } + Iterators[NAME] = defaultIterator; + + return methods; +}; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/iterators-core.js": +/*!***************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/iterators-core.js ***! + \***************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var fails = __webpack_require__(/*! ../internals/fails */ "./node_modules/core-js-pure/internals/fails.js"); +var isCallable = __webpack_require__(/*! ../internals/is-callable */ "./node_modules/core-js-pure/internals/is-callable.js"); +var isObject = __webpack_require__(/*! ../internals/is-object */ "./node_modules/core-js-pure/internals/is-object.js"); +var create = __webpack_require__(/*! ../internals/object-create */ "./node_modules/core-js-pure/internals/object-create.js"); +var getPrototypeOf = __webpack_require__(/*! ../internals/object-get-prototype-of */ "./node_modules/core-js-pure/internals/object-get-prototype-of.js"); +var defineBuiltIn = __webpack_require__(/*! ../internals/define-built-in */ "./node_modules/core-js-pure/internals/define-built-in.js"); +var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ "./node_modules/core-js-pure/internals/well-known-symbol.js"); +var IS_PURE = __webpack_require__(/*! ../internals/is-pure */ "./node_modules/core-js-pure/internals/is-pure.js"); + +var ITERATOR = wellKnownSymbol('iterator'); +var BUGGY_SAFARI_ITERATORS = false; + +// `%IteratorPrototype%` object +// https://tc39.es/ecma262/#sec-%iteratorprototype%-object +var IteratorPrototype, PrototypeOfArrayIteratorPrototype, arrayIterator; + +/* eslint-disable es/no-array-prototype-keys -- safe */ +if ([].keys) { + arrayIterator = [].keys(); + // Safari 8 has buggy iterators w/o `next` + if (!('next' in arrayIterator)) BUGGY_SAFARI_ITERATORS = true; + else { + PrototypeOfArrayIteratorPrototype = getPrototypeOf(getPrototypeOf(arrayIterator)); + if (PrototypeOfArrayIteratorPrototype !== Object.prototype) IteratorPrototype = PrototypeOfArrayIteratorPrototype; + } +} + +var NEW_ITERATOR_PROTOTYPE = !isObject(IteratorPrototype) || fails(function () { + var test = {}; + // FF44- legacy iterators case + return IteratorPrototype[ITERATOR].call(test) !== test; +}); + +if (NEW_ITERATOR_PROTOTYPE) IteratorPrototype = {}; +else if (IS_PURE) IteratorPrototype = create(IteratorPrototype); + +// `%IteratorPrototype%[@@iterator]()` method +// https://tc39.es/ecma262/#sec-%iteratorprototype%-@@iterator +if (!isCallable(IteratorPrototype[ITERATOR])) { + defineBuiltIn(IteratorPrototype, ITERATOR, function () { + return this; + }); +} + +module.exports = { + IteratorPrototype: IteratorPrototype, + BUGGY_SAFARI_ITERATORS: BUGGY_SAFARI_ITERATORS +}; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/iterators.js": +/*!**********************************************************!*\ + !*** ./node_modules/core-js-pure/internals/iterators.js ***! + \**********************************************************/ +/***/ ((module) => { + +"use strict"; + +module.exports = {}; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/length-of-array-like.js": +/*!*********************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/length-of-array-like.js ***! + \*********************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var toLength = __webpack_require__(/*! ../internals/to-length */ "./node_modules/core-js-pure/internals/to-length.js"); + +// `LengthOfArrayLike` abstract operation +// https://tc39.es/ecma262/#sec-lengthofarraylike +module.exports = function (obj) { + return toLength(obj.length); +}; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/math-trunc.js": +/*!***********************************************************!*\ + !*** ./node_modules/core-js-pure/internals/math-trunc.js ***! + \***********************************************************/ +/***/ ((module) => { + +"use strict"; + +var ceil = Math.ceil; +var floor = Math.floor; + +// `Math.trunc` method +// https://tc39.es/ecma262/#sec-math.trunc +// eslint-disable-next-line es/no-math-trunc -- safe +module.exports = Math.trunc || function trunc(x) { + var n = +x; + return (n > 0 ? floor : ceil)(n); +}; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/microtask.js": +/*!**********************************************************!*\ + !*** ./node_modules/core-js-pure/internals/microtask.js ***! + \**********************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var globalThis = __webpack_require__(/*! ../internals/global-this */ "./node_modules/core-js-pure/internals/global-this.js"); +var safeGetBuiltIn = __webpack_require__(/*! ../internals/safe-get-built-in */ "./node_modules/core-js-pure/internals/safe-get-built-in.js"); +var bind = __webpack_require__(/*! ../internals/function-bind-context */ "./node_modules/core-js-pure/internals/function-bind-context.js"); +var macrotask = (__webpack_require__(/*! ../internals/task */ "./node_modules/core-js-pure/internals/task.js").set); +var Queue = __webpack_require__(/*! ../internals/queue */ "./node_modules/core-js-pure/internals/queue.js"); +var IS_IOS = __webpack_require__(/*! ../internals/environment-is-ios */ "./node_modules/core-js-pure/internals/environment-is-ios.js"); +var IS_IOS_PEBBLE = __webpack_require__(/*! ../internals/environment-is-ios-pebble */ "./node_modules/core-js-pure/internals/environment-is-ios-pebble.js"); +var IS_WEBOS_WEBKIT = __webpack_require__(/*! ../internals/environment-is-webos-webkit */ "./node_modules/core-js-pure/internals/environment-is-webos-webkit.js"); +var IS_NODE = __webpack_require__(/*! ../internals/environment-is-node */ "./node_modules/core-js-pure/internals/environment-is-node.js"); + +var MutationObserver = globalThis.MutationObserver || globalThis.WebKitMutationObserver; +var document = globalThis.document; +var process = globalThis.process; +var Promise = globalThis.Promise; +var microtask = safeGetBuiltIn('queueMicrotask'); +var notify, toggle, node, promise, then; + +// modern engines have queueMicrotask method +if (!microtask) { + var queue = new Queue(); + + var flush = function () { + var parent, fn; + if (IS_NODE && (parent = process.domain)) parent.exit(); + while (fn = queue.get()) try { + fn(); + } catch (error) { + if (queue.head) notify(); + throw error; + } + if (parent) parent.enter(); + }; + + // browsers with MutationObserver, except iOS - https://github.com/zloirock/core-js/issues/339 + // also except WebOS Webkit https://github.com/zloirock/core-js/issues/898 + if (!IS_IOS && !IS_NODE && !IS_WEBOS_WEBKIT && MutationObserver && document) { + toggle = true; + node = document.createTextNode(''); + new MutationObserver(flush).observe(node, { characterData: true }); + notify = function () { + node.data = toggle = !toggle; + }; + // environments with maybe non-completely correct, but existent Promise + } else if (!IS_IOS_PEBBLE && Promise && Promise.resolve) { + // Promise.resolve without an argument throws an error in LG WebOS 2 + promise = Promise.resolve(undefined); + // workaround of WebKit ~ iOS Safari 10.1 bug + promise.constructor = Promise; + then = bind(promise.then, promise); + notify = function () { + then(flush); + }; + // Node.js without promises + } else if (IS_NODE) { + notify = function () { + process.nextTick(flush); + }; + // for other environments - macrotask based on: + // - setImmediate + // - MessageChannel + // - window.postMessage + // - onreadystatechange + // - setTimeout + } else { + // `webpack` dev server bug on IE global methods - use bind(fn, global) + macrotask = bind(macrotask, globalThis); + notify = function () { + macrotask(flush); + }; + } + + microtask = function (fn) { + if (!queue.head) notify(); + queue.add(fn); + }; +} + +module.exports = microtask; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/new-promise-capability.js": +/*!***********************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/new-promise-capability.js ***! + \***********************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var aCallable = __webpack_require__(/*! ../internals/a-callable */ "./node_modules/core-js-pure/internals/a-callable.js"); + +var $TypeError = TypeError; + +var PromiseCapability = function (C) { + var resolve, reject; + this.promise = new C(function ($$resolve, $$reject) { + if (resolve !== undefined || reject !== undefined) throw new $TypeError('Bad Promise constructor'); + resolve = $$resolve; + reject = $$reject; + }); + this.resolve = aCallable(resolve); + this.reject = aCallable(reject); +}; + +// `NewPromiseCapability` abstract operation +// https://tc39.es/ecma262/#sec-newpromisecapability +module.exports.f = function (C) { + return new PromiseCapability(C); +}; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/normalize-string-argument.js": +/*!**************************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/normalize-string-argument.js ***! + \**************************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var toString = __webpack_require__(/*! ../internals/to-string */ "./node_modules/core-js-pure/internals/to-string.js"); + +module.exports = function (argument, $default) { + return argument === undefined ? arguments.length < 2 ? '' : $default : toString(argument); +}; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/not-a-regexp.js": +/*!*************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/not-a-regexp.js ***! + \*************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var isRegExp = __webpack_require__(/*! ../internals/is-regexp */ "./node_modules/core-js-pure/internals/is-regexp.js"); + +var $TypeError = TypeError; + +module.exports = function (it) { + if (isRegExp(it)) { + throw new $TypeError("The method doesn't accept regular expressions"); + } return it; +}; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/object-assign.js": +/*!**************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/object-assign.js ***! + \**************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ "./node_modules/core-js-pure/internals/descriptors.js"); +var uncurryThis = __webpack_require__(/*! ../internals/function-uncurry-this */ "./node_modules/core-js-pure/internals/function-uncurry-this.js"); +var call = __webpack_require__(/*! ../internals/function-call */ "./node_modules/core-js-pure/internals/function-call.js"); +var fails = __webpack_require__(/*! ../internals/fails */ "./node_modules/core-js-pure/internals/fails.js"); +var objectKeys = __webpack_require__(/*! ../internals/object-keys */ "./node_modules/core-js-pure/internals/object-keys.js"); +var getOwnPropertySymbolsModule = __webpack_require__(/*! ../internals/object-get-own-property-symbols */ "./node_modules/core-js-pure/internals/object-get-own-property-symbols.js"); +var propertyIsEnumerableModule = __webpack_require__(/*! ../internals/object-property-is-enumerable */ "./node_modules/core-js-pure/internals/object-property-is-enumerable.js"); +var toObject = __webpack_require__(/*! ../internals/to-object */ "./node_modules/core-js-pure/internals/to-object.js"); +var IndexedObject = __webpack_require__(/*! ../internals/indexed-object */ "./node_modules/core-js-pure/internals/indexed-object.js"); + +// eslint-disable-next-line es/no-object-assign -- safe +var $assign = Object.assign; +// eslint-disable-next-line es/no-object-defineproperty -- required for testing +var defineProperty = Object.defineProperty; +var concat = uncurryThis([].concat); + +// `Object.assign` method +// https://tc39.es/ecma262/#sec-object.assign +module.exports = !$assign || fails(function () { + // should have correct order of operations (Edge bug) + if (DESCRIPTORS && $assign({ b: 1 }, $assign(defineProperty({}, 'a', { + enumerable: true, + get: function () { + defineProperty(this, 'b', { + value: 3, + enumerable: false + }); + } + }), { b: 2 })).b !== 1) return true; + // should work with symbols and should have deterministic property order (V8 bug) + var A = {}; + var B = {}; + // eslint-disable-next-line es/no-symbol -- safe + var symbol = Symbol('assign detection'); + var alphabet = 'abcdefghijklmnopqrst'; + A[symbol] = 7; + alphabet.split('').forEach(function (chr) { B[chr] = chr; }); + return $assign({}, A)[symbol] !== 7 || objectKeys($assign({}, B)).join('') !== alphabet; +}) ? function assign(target, source) { // eslint-disable-line no-unused-vars -- required for `.length` + var T = toObject(target); + var argumentsLength = arguments.length; + var index = 1; + var getOwnPropertySymbols = getOwnPropertySymbolsModule.f; + var propertyIsEnumerable = propertyIsEnumerableModule.f; + while (argumentsLength > index) { + var S = IndexedObject(arguments[index++]); + var keys = getOwnPropertySymbols ? concat(objectKeys(S), getOwnPropertySymbols(S)) : objectKeys(S); + var length = keys.length; + var j = 0; + var key; + while (length > j) { + key = keys[j++]; + if (!DESCRIPTORS || call(propertyIsEnumerable, S, key)) T[key] = S[key]; + } + } return T; +} : $assign; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/object-create.js": +/*!**************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/object-create.js ***! + \**************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +/* global ActiveXObject -- old IE, WSH */ +var anObject = __webpack_require__(/*! ../internals/an-object */ "./node_modules/core-js-pure/internals/an-object.js"); +var definePropertiesModule = __webpack_require__(/*! ../internals/object-define-properties */ "./node_modules/core-js-pure/internals/object-define-properties.js"); +var enumBugKeys = __webpack_require__(/*! ../internals/enum-bug-keys */ "./node_modules/core-js-pure/internals/enum-bug-keys.js"); +var hiddenKeys = __webpack_require__(/*! ../internals/hidden-keys */ "./node_modules/core-js-pure/internals/hidden-keys.js"); +var html = __webpack_require__(/*! ../internals/html */ "./node_modules/core-js-pure/internals/html.js"); +var documentCreateElement = __webpack_require__(/*! ../internals/document-create-element */ "./node_modules/core-js-pure/internals/document-create-element.js"); +var sharedKey = __webpack_require__(/*! ../internals/shared-key */ "./node_modules/core-js-pure/internals/shared-key.js"); + +var GT = '>'; +var LT = '<'; +var PROTOTYPE = 'prototype'; +var SCRIPT = 'script'; +var IE_PROTO = sharedKey('IE_PROTO'); + +var EmptyConstructor = function () { /* empty */ }; + +var scriptTag = function (content) { + return LT + SCRIPT + GT + content + LT + '/' + SCRIPT + GT; +}; + +// Create object with fake `null` prototype: use ActiveX Object with cleared prototype +var NullProtoObjectViaActiveX = function (activeXDocument) { + activeXDocument.write(scriptTag('')); + activeXDocument.close(); + var temp = activeXDocument.parentWindow.Object; + // eslint-disable-next-line no-useless-assignment -- avoid memory leak + activeXDocument = null; + return temp; +}; + +// Create object with fake `null` prototype: use iframe Object with cleared prototype +var NullProtoObjectViaIFrame = function () { + // Thrash, waste and sodomy: IE GC bug + var iframe = documentCreateElement('iframe'); + var JS = 'java' + SCRIPT + ':'; + var iframeDocument; + iframe.style.display = 'none'; + html.appendChild(iframe); + // https://github.com/zloirock/core-js/issues/475 + iframe.src = String(JS); + iframeDocument = iframe.contentWindow.document; + iframeDocument.open(); + iframeDocument.write(scriptTag('document.F=Object')); + iframeDocument.close(); + return iframeDocument.F; +}; + +// Check for document.domain and active x support +// No need to use active x approach when document.domain is not set +// see https://github.com/es-shims/es5-shim/issues/150 +// variation of https://github.com/kitcambridge/es5-shim/commit/4f738ac066346 +// avoid IE GC bug +var activeXDocument; +var NullProtoObject = function () { + try { + activeXDocument = new ActiveXObject('htmlfile'); + } catch (error) { /* ignore */ } + NullProtoObject = typeof document != 'undefined' + ? document.domain && activeXDocument + ? NullProtoObjectViaActiveX(activeXDocument) // old IE + : NullProtoObjectViaIFrame() + : NullProtoObjectViaActiveX(activeXDocument); // WSH + var length = enumBugKeys.length; + while (length--) delete NullProtoObject[PROTOTYPE][enumBugKeys[length]]; + return NullProtoObject(); +}; + +hiddenKeys[IE_PROTO] = true; + +// `Object.create` method +// https://tc39.es/ecma262/#sec-object.create +// eslint-disable-next-line es/no-object-create -- safe +module.exports = Object.create || function create(O, Properties) { + var result; + if (O !== null) { + EmptyConstructor[PROTOTYPE] = anObject(O); + result = new EmptyConstructor(); + EmptyConstructor[PROTOTYPE] = null; + // add "__proto__" for Object.getPrototypeOf polyfill + result[IE_PROTO] = O; + } else result = NullProtoObject(); + return Properties === undefined ? result : definePropertiesModule.f(result, Properties); +}; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/object-define-properties.js": +/*!*************************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/object-define-properties.js ***! + \*************************************************************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + +"use strict"; + +var DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ "./node_modules/core-js-pure/internals/descriptors.js"); +var V8_PROTOTYPE_DEFINE_BUG = __webpack_require__(/*! ../internals/v8-prototype-define-bug */ "./node_modules/core-js-pure/internals/v8-prototype-define-bug.js"); +var definePropertyModule = __webpack_require__(/*! ../internals/object-define-property */ "./node_modules/core-js-pure/internals/object-define-property.js"); +var anObject = __webpack_require__(/*! ../internals/an-object */ "./node_modules/core-js-pure/internals/an-object.js"); +var toIndexedObject = __webpack_require__(/*! ../internals/to-indexed-object */ "./node_modules/core-js-pure/internals/to-indexed-object.js"); +var objectKeys = __webpack_require__(/*! ../internals/object-keys */ "./node_modules/core-js-pure/internals/object-keys.js"); + +// `Object.defineProperties` method +// https://tc39.es/ecma262/#sec-object.defineproperties +// eslint-disable-next-line es/no-object-defineproperties -- safe +exports.f = DESCRIPTORS && !V8_PROTOTYPE_DEFINE_BUG ? Object.defineProperties : function defineProperties(O, Properties) { + anObject(O); + var props = toIndexedObject(Properties); + var keys = objectKeys(Properties); + var length = keys.length; + var index = 0; + var key; + while (length > index) definePropertyModule.f(O, key = keys[index++], props[key]); + return O; +}; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/object-define-property.js": +/*!***********************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/object-define-property.js ***! + \***********************************************************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + +"use strict"; + +var DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ "./node_modules/core-js-pure/internals/descriptors.js"); +var IE8_DOM_DEFINE = __webpack_require__(/*! ../internals/ie8-dom-define */ "./node_modules/core-js-pure/internals/ie8-dom-define.js"); +var V8_PROTOTYPE_DEFINE_BUG = __webpack_require__(/*! ../internals/v8-prototype-define-bug */ "./node_modules/core-js-pure/internals/v8-prototype-define-bug.js"); +var anObject = __webpack_require__(/*! ../internals/an-object */ "./node_modules/core-js-pure/internals/an-object.js"); +var toPropertyKey = __webpack_require__(/*! ../internals/to-property-key */ "./node_modules/core-js-pure/internals/to-property-key.js"); + +var $TypeError = TypeError; +// eslint-disable-next-line es/no-object-defineproperty -- safe +var $defineProperty = Object.defineProperty; +// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe +var $getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor; +var ENUMERABLE = 'enumerable'; +var CONFIGURABLE = 'configurable'; +var WRITABLE = 'writable'; + +// `Object.defineProperty` method +// https://tc39.es/ecma262/#sec-object.defineproperty +exports.f = DESCRIPTORS ? V8_PROTOTYPE_DEFINE_BUG ? function defineProperty(O, P, Attributes) { + anObject(O); + P = toPropertyKey(P); + anObject(Attributes); + if (typeof O === 'function' && P === 'prototype' && 'value' in Attributes && WRITABLE in Attributes && !Attributes[WRITABLE]) { + var current = $getOwnPropertyDescriptor(O, P); + if (current && current[WRITABLE]) { + O[P] = Attributes.value; + Attributes = { + configurable: CONFIGURABLE in Attributes ? Attributes[CONFIGURABLE] : current[CONFIGURABLE], + enumerable: ENUMERABLE in Attributes ? Attributes[ENUMERABLE] : current[ENUMERABLE], + writable: false + }; + } + } return $defineProperty(O, P, Attributes); +} : $defineProperty : function defineProperty(O, P, Attributes) { + anObject(O); + P = toPropertyKey(P); + anObject(Attributes); + if (IE8_DOM_DEFINE) try { + return $defineProperty(O, P, Attributes); + } catch (error) { /* empty */ } + if ('get' in Attributes || 'set' in Attributes) throw new $TypeError('Accessors not supported'); + if ('value' in Attributes) O[P] = Attributes.value; + return O; +}; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/object-get-own-property-descriptor.js": +/*!***********************************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/object-get-own-property-descriptor.js ***! + \***********************************************************************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + +"use strict"; + +var DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ "./node_modules/core-js-pure/internals/descriptors.js"); +var call = __webpack_require__(/*! ../internals/function-call */ "./node_modules/core-js-pure/internals/function-call.js"); +var propertyIsEnumerableModule = __webpack_require__(/*! ../internals/object-property-is-enumerable */ "./node_modules/core-js-pure/internals/object-property-is-enumerable.js"); +var createPropertyDescriptor = __webpack_require__(/*! ../internals/create-property-descriptor */ "./node_modules/core-js-pure/internals/create-property-descriptor.js"); +var toIndexedObject = __webpack_require__(/*! ../internals/to-indexed-object */ "./node_modules/core-js-pure/internals/to-indexed-object.js"); +var toPropertyKey = __webpack_require__(/*! ../internals/to-property-key */ "./node_modules/core-js-pure/internals/to-property-key.js"); +var hasOwn = __webpack_require__(/*! ../internals/has-own-property */ "./node_modules/core-js-pure/internals/has-own-property.js"); +var IE8_DOM_DEFINE = __webpack_require__(/*! ../internals/ie8-dom-define */ "./node_modules/core-js-pure/internals/ie8-dom-define.js"); + +// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe +var $getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor; + +// `Object.getOwnPropertyDescriptor` method +// https://tc39.es/ecma262/#sec-object.getownpropertydescriptor +exports.f = DESCRIPTORS ? $getOwnPropertyDescriptor : function getOwnPropertyDescriptor(O, P) { + O = toIndexedObject(O); + P = toPropertyKey(P); + if (IE8_DOM_DEFINE) try { + return $getOwnPropertyDescriptor(O, P); + } catch (error) { /* empty */ } + if (hasOwn(O, P)) return createPropertyDescriptor(!call(propertyIsEnumerableModule.f, O, P), O[P]); +}; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/object-get-own-property-names-external.js": +/*!***************************************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/object-get-own-property-names-external.js ***! + \***************************************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +/* eslint-disable es/no-object-getownpropertynames -- safe */ +var classof = __webpack_require__(/*! ../internals/classof-raw */ "./node_modules/core-js-pure/internals/classof-raw.js"); +var toIndexedObject = __webpack_require__(/*! ../internals/to-indexed-object */ "./node_modules/core-js-pure/internals/to-indexed-object.js"); +var $getOwnPropertyNames = (__webpack_require__(/*! ../internals/object-get-own-property-names */ "./node_modules/core-js-pure/internals/object-get-own-property-names.js").f); +var arraySlice = __webpack_require__(/*! ../internals/array-slice */ "./node_modules/core-js-pure/internals/array-slice.js"); + +var windowNames = typeof window == 'object' && window && Object.getOwnPropertyNames + ? Object.getOwnPropertyNames(window) : []; + +var getWindowNames = function (it) { + try { + return $getOwnPropertyNames(it); + } catch (error) { + return arraySlice(windowNames); + } +}; + +// fallback for IE11 buggy Object.getOwnPropertyNames with iframe and window +module.exports.f = function getOwnPropertyNames(it) { + return windowNames && classof(it) === 'Window' + ? getWindowNames(it) + : $getOwnPropertyNames(toIndexedObject(it)); +}; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/object-get-own-property-names.js": +/*!******************************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/object-get-own-property-names.js ***! + \******************************************************************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + +"use strict"; + +var internalObjectKeys = __webpack_require__(/*! ../internals/object-keys-internal */ "./node_modules/core-js-pure/internals/object-keys-internal.js"); +var enumBugKeys = __webpack_require__(/*! ../internals/enum-bug-keys */ "./node_modules/core-js-pure/internals/enum-bug-keys.js"); + +var hiddenKeys = enumBugKeys.concat('length', 'prototype'); + +// `Object.getOwnPropertyNames` method +// https://tc39.es/ecma262/#sec-object.getownpropertynames +// eslint-disable-next-line es/no-object-getownpropertynames -- safe +exports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) { + return internalObjectKeys(O, hiddenKeys); +}; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/object-get-own-property-symbols.js": +/*!********************************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/object-get-own-property-symbols.js ***! + \********************************************************************************/ +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; + +// eslint-disable-next-line es/no-object-getownpropertysymbols -- safe +exports.f = Object.getOwnPropertySymbols; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/object-get-prototype-of.js": +/*!************************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/object-get-prototype-of.js ***! + \************************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var hasOwn = __webpack_require__(/*! ../internals/has-own-property */ "./node_modules/core-js-pure/internals/has-own-property.js"); +var isCallable = __webpack_require__(/*! ../internals/is-callable */ "./node_modules/core-js-pure/internals/is-callable.js"); +var toObject = __webpack_require__(/*! ../internals/to-object */ "./node_modules/core-js-pure/internals/to-object.js"); +var sharedKey = __webpack_require__(/*! ../internals/shared-key */ "./node_modules/core-js-pure/internals/shared-key.js"); +var CORRECT_PROTOTYPE_GETTER = __webpack_require__(/*! ../internals/correct-prototype-getter */ "./node_modules/core-js-pure/internals/correct-prototype-getter.js"); + +var IE_PROTO = sharedKey('IE_PROTO'); +var $Object = Object; +var ObjectPrototype = $Object.prototype; + +// `Object.getPrototypeOf` method +// https://tc39.es/ecma262/#sec-object.getprototypeof +// eslint-disable-next-line es/no-object-getprototypeof -- safe +module.exports = CORRECT_PROTOTYPE_GETTER ? $Object.getPrototypeOf : function (O) { + var object = toObject(O); + if (hasOwn(object, IE_PROTO)) return object[IE_PROTO]; + var constructor = object.constructor; + if (isCallable(constructor) && object instanceof constructor) { + return constructor.prototype; + } return object instanceof $Object ? ObjectPrototype : null; +}; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/object-is-extensible.js": +/*!*********************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/object-is-extensible.js ***! + \*********************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var fails = __webpack_require__(/*! ../internals/fails */ "./node_modules/core-js-pure/internals/fails.js"); +var isObject = __webpack_require__(/*! ../internals/is-object */ "./node_modules/core-js-pure/internals/is-object.js"); +var classof = __webpack_require__(/*! ../internals/classof-raw */ "./node_modules/core-js-pure/internals/classof-raw.js"); +var ARRAY_BUFFER_NON_EXTENSIBLE = __webpack_require__(/*! ../internals/array-buffer-non-extensible */ "./node_modules/core-js-pure/internals/array-buffer-non-extensible.js"); + +// eslint-disable-next-line es/no-object-isextensible -- safe +var $isExtensible = Object.isExtensible; +var FAILS_ON_PRIMITIVES = fails(function () { $isExtensible(1); }); + +// `Object.isExtensible` method +// https://tc39.es/ecma262/#sec-object.isextensible +module.exports = (FAILS_ON_PRIMITIVES || ARRAY_BUFFER_NON_EXTENSIBLE) ? function isExtensible(it) { + if (!isObject(it)) return false; + if (ARRAY_BUFFER_NON_EXTENSIBLE && classof(it) === 'ArrayBuffer') return false; + return $isExtensible ? $isExtensible(it) : true; +} : $isExtensible; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/object-is-prototype-of.js": +/*!***********************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/object-is-prototype-of.js ***! + \***********************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var uncurryThis = __webpack_require__(/*! ../internals/function-uncurry-this */ "./node_modules/core-js-pure/internals/function-uncurry-this.js"); + +module.exports = uncurryThis({}.isPrototypeOf); + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/object-keys-internal.js": +/*!*********************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/object-keys-internal.js ***! + \*********************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var uncurryThis = __webpack_require__(/*! ../internals/function-uncurry-this */ "./node_modules/core-js-pure/internals/function-uncurry-this.js"); +var hasOwn = __webpack_require__(/*! ../internals/has-own-property */ "./node_modules/core-js-pure/internals/has-own-property.js"); +var toIndexedObject = __webpack_require__(/*! ../internals/to-indexed-object */ "./node_modules/core-js-pure/internals/to-indexed-object.js"); +var indexOf = (__webpack_require__(/*! ../internals/array-includes */ "./node_modules/core-js-pure/internals/array-includes.js").indexOf); +var hiddenKeys = __webpack_require__(/*! ../internals/hidden-keys */ "./node_modules/core-js-pure/internals/hidden-keys.js"); + +var push = uncurryThis([].push); + +module.exports = function (object, names) { + var O = toIndexedObject(object); + var i = 0; + var result = []; + var key; + for (key in O) !hasOwn(hiddenKeys, key) && hasOwn(O, key) && push(result, key); + // Don't enum bug & hidden keys + while (names.length > i) if (hasOwn(O, key = names[i++])) { + ~indexOf(result, key) || push(result, key); + } + return result; +}; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/object-keys.js": +/*!************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/object-keys.js ***! + \************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var internalObjectKeys = __webpack_require__(/*! ../internals/object-keys-internal */ "./node_modules/core-js-pure/internals/object-keys-internal.js"); +var enumBugKeys = __webpack_require__(/*! ../internals/enum-bug-keys */ "./node_modules/core-js-pure/internals/enum-bug-keys.js"); + +// `Object.keys` method +// https://tc39.es/ecma262/#sec-object.keys +// eslint-disable-next-line es/no-object-keys -- safe +module.exports = Object.keys || function keys(O) { + return internalObjectKeys(O, enumBugKeys); +}; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/object-property-is-enumerable.js": +/*!******************************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/object-property-is-enumerable.js ***! + \******************************************************************************/ +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; + +var $propertyIsEnumerable = {}.propertyIsEnumerable; +// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe +var getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor; + +// Nashorn ~ JDK8 bug +var NASHORN_BUG = getOwnPropertyDescriptor && !$propertyIsEnumerable.call({ 1: 2 }, 1); + +// `Object.prototype.propertyIsEnumerable` method implementation +// https://tc39.es/ecma262/#sec-object.prototype.propertyisenumerable +exports.f = NASHORN_BUG ? function propertyIsEnumerable(V) { + var descriptor = getOwnPropertyDescriptor(this, V); + return !!descriptor && descriptor.enumerable; +} : $propertyIsEnumerable; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/object-set-prototype-of.js": +/*!************************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/object-set-prototype-of.js ***! + \************************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +/* eslint-disable no-proto -- safe */ +var uncurryThisAccessor = __webpack_require__(/*! ../internals/function-uncurry-this-accessor */ "./node_modules/core-js-pure/internals/function-uncurry-this-accessor.js"); +var isObject = __webpack_require__(/*! ../internals/is-object */ "./node_modules/core-js-pure/internals/is-object.js"); +var requireObjectCoercible = __webpack_require__(/*! ../internals/require-object-coercible */ "./node_modules/core-js-pure/internals/require-object-coercible.js"); +var aPossiblePrototype = __webpack_require__(/*! ../internals/a-possible-prototype */ "./node_modules/core-js-pure/internals/a-possible-prototype.js"); + +// `Object.setPrototypeOf` method +// https://tc39.es/ecma262/#sec-object.setprototypeof +// Works with __proto__ only. Old v8 can't work with null proto objects. +// eslint-disable-next-line es/no-object-setprototypeof -- safe +module.exports = Object.setPrototypeOf || ('__proto__' in {} ? function () { + var CORRECT_SETTER = false; + var test = {}; + var setter; + try { + setter = uncurryThisAccessor(Object.prototype, '__proto__', 'set'); + setter(test, []); + CORRECT_SETTER = test instanceof Array; + } catch (error) { /* empty */ } + return function setPrototypeOf(O, proto) { + requireObjectCoercible(O); + aPossiblePrototype(proto); + if (!isObject(O)) return O; + if (CORRECT_SETTER) setter(O, proto); + else O.__proto__ = proto; + return O; + }; +}() : undefined); + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/object-to-string.js": +/*!*****************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/object-to-string.js ***! + \*****************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var TO_STRING_TAG_SUPPORT = __webpack_require__(/*! ../internals/to-string-tag-support */ "./node_modules/core-js-pure/internals/to-string-tag-support.js"); +var classof = __webpack_require__(/*! ../internals/classof */ "./node_modules/core-js-pure/internals/classof.js"); + +// `Object.prototype.toString` method implementation +// https://tc39.es/ecma262/#sec-object.prototype.tostring +module.exports = TO_STRING_TAG_SUPPORT ? {}.toString : function toString() { + return '[object ' + classof(this) + ']'; +}; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/ordinary-to-primitive.js": +/*!**********************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/ordinary-to-primitive.js ***! + \**********************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var call = __webpack_require__(/*! ../internals/function-call */ "./node_modules/core-js-pure/internals/function-call.js"); +var isCallable = __webpack_require__(/*! ../internals/is-callable */ "./node_modules/core-js-pure/internals/is-callable.js"); +var isObject = __webpack_require__(/*! ../internals/is-object */ "./node_modules/core-js-pure/internals/is-object.js"); + +var $TypeError = TypeError; + +// `OrdinaryToPrimitive` abstract operation +// https://tc39.es/ecma262/#sec-ordinarytoprimitive +module.exports = function (input, pref) { + var fn, val; + if (pref === 'string' && isCallable(fn = input.toString) && !isObject(val = call(fn, input))) return val; + if (isCallable(fn = input.valueOf) && !isObject(val = call(fn, input))) return val; + if (pref !== 'string' && isCallable(fn = input.toString) && !isObject(val = call(fn, input))) return val; + throw new $TypeError("Can't convert object to primitive value"); +}; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/own-keys.js": +/*!*********************************************************!*\ + !*** ./node_modules/core-js-pure/internals/own-keys.js ***! + \*********************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var getBuiltIn = __webpack_require__(/*! ../internals/get-built-in */ "./node_modules/core-js-pure/internals/get-built-in.js"); +var uncurryThis = __webpack_require__(/*! ../internals/function-uncurry-this */ "./node_modules/core-js-pure/internals/function-uncurry-this.js"); +var getOwnPropertyNamesModule = __webpack_require__(/*! ../internals/object-get-own-property-names */ "./node_modules/core-js-pure/internals/object-get-own-property-names.js"); +var getOwnPropertySymbolsModule = __webpack_require__(/*! ../internals/object-get-own-property-symbols */ "./node_modules/core-js-pure/internals/object-get-own-property-symbols.js"); +var anObject = __webpack_require__(/*! ../internals/an-object */ "./node_modules/core-js-pure/internals/an-object.js"); + +var concat = uncurryThis([].concat); + +// all object keys, includes non-enumerable and symbols +module.exports = getBuiltIn('Reflect', 'ownKeys') || function ownKeys(it) { + var keys = getOwnPropertyNamesModule.f(anObject(it)); + var getOwnPropertySymbols = getOwnPropertySymbolsModule.f; + return getOwnPropertySymbols ? concat(keys, getOwnPropertySymbols(it)) : keys; +}; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/path.js": +/*!*****************************************************!*\ + !*** ./node_modules/core-js-pure/internals/path.js ***! + \*****************************************************/ +/***/ ((module) => { + +"use strict"; + +module.exports = {}; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/perform.js": +/*!********************************************************!*\ + !*** ./node_modules/core-js-pure/internals/perform.js ***! + \********************************************************/ +/***/ ((module) => { + +"use strict"; + +module.exports = function (exec) { + try { + return { error: false, value: exec() }; + } catch (error) { + return { error: true, value: error }; + } +}; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/promise-constructor-detection.js": +/*!******************************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/promise-constructor-detection.js ***! + \******************************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var globalThis = __webpack_require__(/*! ../internals/global-this */ "./node_modules/core-js-pure/internals/global-this.js"); +var NativePromiseConstructor = __webpack_require__(/*! ../internals/promise-native-constructor */ "./node_modules/core-js-pure/internals/promise-native-constructor.js"); +var isCallable = __webpack_require__(/*! ../internals/is-callable */ "./node_modules/core-js-pure/internals/is-callable.js"); +var isForced = __webpack_require__(/*! ../internals/is-forced */ "./node_modules/core-js-pure/internals/is-forced.js"); +var inspectSource = __webpack_require__(/*! ../internals/inspect-source */ "./node_modules/core-js-pure/internals/inspect-source.js"); +var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ "./node_modules/core-js-pure/internals/well-known-symbol.js"); +var ENVIRONMENT = __webpack_require__(/*! ../internals/environment */ "./node_modules/core-js-pure/internals/environment.js"); +var IS_PURE = __webpack_require__(/*! ../internals/is-pure */ "./node_modules/core-js-pure/internals/is-pure.js"); +var V8_VERSION = __webpack_require__(/*! ../internals/environment-v8-version */ "./node_modules/core-js-pure/internals/environment-v8-version.js"); + +var NativePromisePrototype = NativePromiseConstructor && NativePromiseConstructor.prototype; +var SPECIES = wellKnownSymbol('species'); +var SUBCLASSING = false; +var NATIVE_PROMISE_REJECTION_EVENT = isCallable(globalThis.PromiseRejectionEvent); + +var FORCED_PROMISE_CONSTRUCTOR = isForced('Promise', function () { + var PROMISE_CONSTRUCTOR_SOURCE = inspectSource(NativePromiseConstructor); + var GLOBAL_CORE_JS_PROMISE = PROMISE_CONSTRUCTOR_SOURCE !== String(NativePromiseConstructor); + // V8 6.6 (Node 10 and Chrome 66) have a bug with resolving custom thenables + // https://bugs.chromium.org/p/chromium/issues/detail?id=830565 + // We can't detect it synchronously, so just check versions + if (!GLOBAL_CORE_JS_PROMISE && V8_VERSION === 66) return true; + // We need Promise#{ catch, finally } in the pure version for preventing prototype pollution + if (IS_PURE && !(NativePromisePrototype['catch'] && NativePromisePrototype['finally'])) return true; + // We can't use @@species feature detection in V8 since it causes + // deoptimization and performance degradation + // https://github.com/zloirock/core-js/issues/679 + if (!V8_VERSION || V8_VERSION < 51 || !/native code/.test(PROMISE_CONSTRUCTOR_SOURCE)) { + // Detect correctness of subclassing with @@species support + var promise = new NativePromiseConstructor(function (resolve) { resolve(1); }); + var FakePromise = function (exec) { + exec(function () { /* empty */ }, function () { /* empty */ }); + }; + var constructor = promise.constructor = {}; + constructor[SPECIES] = FakePromise; + SUBCLASSING = promise.then(function () { /* empty */ }) instanceof FakePromise; + if (!SUBCLASSING) return true; + // Unhandled rejections tracking support, NodeJS Promise without it fails @@species test + } return !GLOBAL_CORE_JS_PROMISE && (ENVIRONMENT === 'BROWSER' || ENVIRONMENT === 'DENO') && !NATIVE_PROMISE_REJECTION_EVENT; +}); + +module.exports = { + CONSTRUCTOR: FORCED_PROMISE_CONSTRUCTOR, + REJECTION_EVENT: NATIVE_PROMISE_REJECTION_EVENT, + SUBCLASSING: SUBCLASSING +}; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/promise-native-constructor.js": +/*!***************************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/promise-native-constructor.js ***! + \***************************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var globalThis = __webpack_require__(/*! ../internals/global-this */ "./node_modules/core-js-pure/internals/global-this.js"); + +module.exports = globalThis.Promise; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/promise-resolve.js": +/*!****************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/promise-resolve.js ***! + \****************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var anObject = __webpack_require__(/*! ../internals/an-object */ "./node_modules/core-js-pure/internals/an-object.js"); +var isObject = __webpack_require__(/*! ../internals/is-object */ "./node_modules/core-js-pure/internals/is-object.js"); +var newPromiseCapability = __webpack_require__(/*! ../internals/new-promise-capability */ "./node_modules/core-js-pure/internals/new-promise-capability.js"); + +module.exports = function (C, x) { + anObject(C); + if (isObject(x) && x.constructor === C) return x; + var promiseCapability = newPromiseCapability.f(C); + var resolve = promiseCapability.resolve; + resolve(x); + return promiseCapability.promise; +}; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/promise-statics-incorrect-iteration.js": +/*!************************************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/promise-statics-incorrect-iteration.js ***! + \************************************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var NativePromiseConstructor = __webpack_require__(/*! ../internals/promise-native-constructor */ "./node_modules/core-js-pure/internals/promise-native-constructor.js"); +var checkCorrectnessOfIteration = __webpack_require__(/*! ../internals/check-correctness-of-iteration */ "./node_modules/core-js-pure/internals/check-correctness-of-iteration.js"); +var FORCED_PROMISE_CONSTRUCTOR = (__webpack_require__(/*! ../internals/promise-constructor-detection */ "./node_modules/core-js-pure/internals/promise-constructor-detection.js").CONSTRUCTOR); + +module.exports = FORCED_PROMISE_CONSTRUCTOR || !checkCorrectnessOfIteration(function (iterable) { + NativePromiseConstructor.all(iterable).then(undefined, function () { /* empty */ }); +}); + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/queue.js": +/*!******************************************************!*\ + !*** ./node_modules/core-js-pure/internals/queue.js ***! + \******************************************************/ +/***/ ((module) => { + +"use strict"; + +var Queue = function () { + this.head = null; + this.tail = null; +}; + +Queue.prototype = { + add: function (item) { + var entry = { item: item, next: null }; + var tail = this.tail; + if (tail) tail.next = entry; + else this.head = entry; + this.tail = entry; + }, + get: function () { + var entry = this.head; + if (entry) { + var next = this.head = entry.next; + if (next === null) this.tail = null; + return entry.item; + } + } +}; + +module.exports = Queue; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/require-object-coercible.js": +/*!*************************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/require-object-coercible.js ***! + \*************************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var isNullOrUndefined = __webpack_require__(/*! ../internals/is-null-or-undefined */ "./node_modules/core-js-pure/internals/is-null-or-undefined.js"); + +var $TypeError = TypeError; + +// `RequireObjectCoercible` abstract operation +// https://tc39.es/ecma262/#sec-requireobjectcoercible +module.exports = function (it) { + if (isNullOrUndefined(it)) throw new $TypeError("Can't call method on " + it); + return it; +}; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/safe-get-built-in.js": +/*!******************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/safe-get-built-in.js ***! + \******************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var globalThis = __webpack_require__(/*! ../internals/global-this */ "./node_modules/core-js-pure/internals/global-this.js"); +var DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ "./node_modules/core-js-pure/internals/descriptors.js"); + +// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe +var getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor; + +// Avoid NodeJS experimental warning +module.exports = function (name) { + if (!DESCRIPTORS) return globalThis[name]; + var descriptor = getOwnPropertyDescriptor(globalThis, name); + return descriptor && descriptor.value; +}; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/schedulers-fix.js": +/*!***************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/schedulers-fix.js ***! + \***************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var globalThis = __webpack_require__(/*! ../internals/global-this */ "./node_modules/core-js-pure/internals/global-this.js"); +var apply = __webpack_require__(/*! ../internals/function-apply */ "./node_modules/core-js-pure/internals/function-apply.js"); +var isCallable = __webpack_require__(/*! ../internals/is-callable */ "./node_modules/core-js-pure/internals/is-callable.js"); +var ENVIRONMENT = __webpack_require__(/*! ../internals/environment */ "./node_modules/core-js-pure/internals/environment.js"); +var USER_AGENT = __webpack_require__(/*! ../internals/environment-user-agent */ "./node_modules/core-js-pure/internals/environment-user-agent.js"); +var arraySlice = __webpack_require__(/*! ../internals/array-slice */ "./node_modules/core-js-pure/internals/array-slice.js"); +var validateArgumentsLength = __webpack_require__(/*! ../internals/validate-arguments-length */ "./node_modules/core-js-pure/internals/validate-arguments-length.js"); + +var Function = globalThis.Function; +// dirty IE9- and Bun 0.3.0- checks +var WRAP = /MSIE .\./.test(USER_AGENT) || ENVIRONMENT === 'BUN' && (function () { + var version = globalThis.Bun.version.split('.'); + return version.length < 3 || version[0] === '0' && (version[1] < 3 || version[1] === '3' && version[2] === '0'); +})(); + +// IE9- / Bun 0.3.0- setTimeout / setInterval / setImmediate additional parameters fix +// https://html.spec.whatwg.org/multipage/timers-and-user-prompts.html#timers +// https://github.com/oven-sh/bun/issues/1633 +module.exports = function (scheduler, hasTimeArg) { + var firstParamIndex = hasTimeArg ? 2 : 1; + return WRAP ? function (handler, timeout /* , ...arguments */) { + var boundArgs = validateArgumentsLength(arguments.length, 1) > firstParamIndex; + var fn = isCallable(handler) ? handler : Function(handler); + var params = boundArgs ? arraySlice(arguments, firstParamIndex) : []; + var callback = boundArgs ? function () { + apply(fn, this, params); + } : fn; + return hasTimeArg ? scheduler(callback, timeout) : scheduler(callback); + } : scheduler; +}; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/set-clone.js": +/*!**********************************************************!*\ + !*** ./node_modules/core-js-pure/internals/set-clone.js ***! + \**********************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var SetHelpers = __webpack_require__(/*! ../internals/set-helpers */ "./node_modules/core-js-pure/internals/set-helpers.js"); +var iterate = __webpack_require__(/*! ../internals/set-iterate */ "./node_modules/core-js-pure/internals/set-iterate.js"); + +var Set = SetHelpers.Set; +var add = SetHelpers.add; + +module.exports = function (set) { + var result = new Set(); + iterate(set, function (it) { + add(result, it); + }); + return result; +}; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/set-difference.js": +/*!***************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/set-difference.js ***! + \***************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var aSet = __webpack_require__(/*! ../internals/a-set */ "./node_modules/core-js-pure/internals/a-set.js"); +var SetHelpers = __webpack_require__(/*! ../internals/set-helpers */ "./node_modules/core-js-pure/internals/set-helpers.js"); +var clone = __webpack_require__(/*! ../internals/set-clone */ "./node_modules/core-js-pure/internals/set-clone.js"); +var size = __webpack_require__(/*! ../internals/set-size */ "./node_modules/core-js-pure/internals/set-size.js"); +var getSetRecord = __webpack_require__(/*! ../internals/get-set-record */ "./node_modules/core-js-pure/internals/get-set-record.js"); +var iterateSet = __webpack_require__(/*! ../internals/set-iterate */ "./node_modules/core-js-pure/internals/set-iterate.js"); +var iterateSimple = __webpack_require__(/*! ../internals/iterate-simple */ "./node_modules/core-js-pure/internals/iterate-simple.js"); + +var has = SetHelpers.has; +var remove = SetHelpers.remove; + +// `Set.prototype.difference` method +// https://github.com/tc39/proposal-set-methods +module.exports = function difference(other) { + var O = aSet(this); + var otherRec = getSetRecord(other); + var result = clone(O); + if (size(O) <= otherRec.size) iterateSet(O, function (e) { + if (otherRec.includes(e)) remove(result, e); + }); + else iterateSimple(otherRec.getIterator(), function (e) { + if (has(O, e)) remove(result, e); + }); + return result; +}; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/set-helpers.js": +/*!************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/set-helpers.js ***! + \************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var getBuiltIn = __webpack_require__(/*! ../internals/get-built-in */ "./node_modules/core-js-pure/internals/get-built-in.js"); +var caller = __webpack_require__(/*! ../internals/caller */ "./node_modules/core-js-pure/internals/caller.js"); + +var Set = getBuiltIn('Set'); +var SetPrototype = Set.prototype; + +module.exports = { + Set: Set, + add: caller('add', 1), + has: caller('has', 1), + remove: caller('delete', 1), + proto: SetPrototype +}; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/set-intersection.js": +/*!*****************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/set-intersection.js ***! + \*****************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var aSet = __webpack_require__(/*! ../internals/a-set */ "./node_modules/core-js-pure/internals/a-set.js"); +var SetHelpers = __webpack_require__(/*! ../internals/set-helpers */ "./node_modules/core-js-pure/internals/set-helpers.js"); +var size = __webpack_require__(/*! ../internals/set-size */ "./node_modules/core-js-pure/internals/set-size.js"); +var getSetRecord = __webpack_require__(/*! ../internals/get-set-record */ "./node_modules/core-js-pure/internals/get-set-record.js"); +var iterateSet = __webpack_require__(/*! ../internals/set-iterate */ "./node_modules/core-js-pure/internals/set-iterate.js"); +var iterateSimple = __webpack_require__(/*! ../internals/iterate-simple */ "./node_modules/core-js-pure/internals/iterate-simple.js"); + +var Set = SetHelpers.Set; +var add = SetHelpers.add; +var has = SetHelpers.has; + +// `Set.prototype.intersection` method +// https://github.com/tc39/proposal-set-methods +module.exports = function intersection(other) { + var O = aSet(this); + var otherRec = getSetRecord(other); + var result = new Set(); + + if (size(O) > otherRec.size) { + iterateSimple(otherRec.getIterator(), function (e) { + if (has(O, e)) add(result, e); + }); + } else { + iterateSet(O, function (e) { + if (otherRec.includes(e)) add(result, e); + }); + } + + return result; +}; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/set-is-disjoint-from.js": +/*!*********************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/set-is-disjoint-from.js ***! + \*********************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var aSet = __webpack_require__(/*! ../internals/a-set */ "./node_modules/core-js-pure/internals/a-set.js"); +var has = (__webpack_require__(/*! ../internals/set-helpers */ "./node_modules/core-js-pure/internals/set-helpers.js").has); +var size = __webpack_require__(/*! ../internals/set-size */ "./node_modules/core-js-pure/internals/set-size.js"); +var getSetRecord = __webpack_require__(/*! ../internals/get-set-record */ "./node_modules/core-js-pure/internals/get-set-record.js"); +var iterateSet = __webpack_require__(/*! ../internals/set-iterate */ "./node_modules/core-js-pure/internals/set-iterate.js"); +var iterateSimple = __webpack_require__(/*! ../internals/iterate-simple */ "./node_modules/core-js-pure/internals/iterate-simple.js"); +var iteratorClose = __webpack_require__(/*! ../internals/iterator-close */ "./node_modules/core-js-pure/internals/iterator-close.js"); + +// `Set.prototype.isDisjointFrom` method +// https://tc39.github.io/proposal-set-methods/#Set.prototype.isDisjointFrom +module.exports = function isDisjointFrom(other) { + var O = aSet(this); + var otherRec = getSetRecord(other); + if (size(O) <= otherRec.size) return iterateSet(O, function (e) { + if (otherRec.includes(e)) return false; + }, true) !== false; + var iterator = otherRec.getIterator(); + return iterateSimple(iterator, function (e) { + if (has(O, e)) return iteratorClose(iterator, 'normal', false); + }) !== false; +}; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/set-is-subset-of.js": +/*!*****************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/set-is-subset-of.js ***! + \*****************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var aSet = __webpack_require__(/*! ../internals/a-set */ "./node_modules/core-js-pure/internals/a-set.js"); +var size = __webpack_require__(/*! ../internals/set-size */ "./node_modules/core-js-pure/internals/set-size.js"); +var iterate = __webpack_require__(/*! ../internals/set-iterate */ "./node_modules/core-js-pure/internals/set-iterate.js"); +var getSetRecord = __webpack_require__(/*! ../internals/get-set-record */ "./node_modules/core-js-pure/internals/get-set-record.js"); + +// `Set.prototype.isSubsetOf` method +// https://tc39.github.io/proposal-set-methods/#Set.prototype.isSubsetOf +module.exports = function isSubsetOf(other) { + var O = aSet(this); + var otherRec = getSetRecord(other); + if (size(O) > otherRec.size) return false; + return iterate(O, function (e) { + if (!otherRec.includes(e)) return false; + }, true) !== false; +}; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/set-is-superset-of.js": +/*!*******************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/set-is-superset-of.js ***! + \*******************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var aSet = __webpack_require__(/*! ../internals/a-set */ "./node_modules/core-js-pure/internals/a-set.js"); +var has = (__webpack_require__(/*! ../internals/set-helpers */ "./node_modules/core-js-pure/internals/set-helpers.js").has); +var size = __webpack_require__(/*! ../internals/set-size */ "./node_modules/core-js-pure/internals/set-size.js"); +var getSetRecord = __webpack_require__(/*! ../internals/get-set-record */ "./node_modules/core-js-pure/internals/get-set-record.js"); +var iterateSimple = __webpack_require__(/*! ../internals/iterate-simple */ "./node_modules/core-js-pure/internals/iterate-simple.js"); +var iteratorClose = __webpack_require__(/*! ../internals/iterator-close */ "./node_modules/core-js-pure/internals/iterator-close.js"); + +// `Set.prototype.isSupersetOf` method +// https://tc39.github.io/proposal-set-methods/#Set.prototype.isSupersetOf +module.exports = function isSupersetOf(other) { + var O = aSet(this); + var otherRec = getSetRecord(other); + if (size(O) < otherRec.size) return false; + var iterator = otherRec.getIterator(); + return iterateSimple(iterator, function (e) { + if (!has(O, e)) return iteratorClose(iterator, 'normal', false); + }) !== false; +}; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/set-iterate.js": +/*!************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/set-iterate.js ***! + \************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var iterateSimple = __webpack_require__(/*! ../internals/iterate-simple */ "./node_modules/core-js-pure/internals/iterate-simple.js"); + +module.exports = function (set, fn, interruptible) { + return interruptible ? iterateSimple(set.keys(), fn, true) : set.forEach(fn); +}; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/set-method-accept-set-like.js": +/*!***************************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/set-method-accept-set-like.js ***! + \***************************************************************************/ +/***/ ((module) => { + +"use strict"; + +module.exports = function () { + return false; +}; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/set-size.js": +/*!*********************************************************!*\ + !*** ./node_modules/core-js-pure/internals/set-size.js ***! + \*********************************************************/ +/***/ ((module) => { + +"use strict"; + +module.exports = function (set) { + return set.size; +}; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/set-species.js": +/*!************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/set-species.js ***! + \************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var getBuiltIn = __webpack_require__(/*! ../internals/get-built-in */ "./node_modules/core-js-pure/internals/get-built-in.js"); +var defineBuiltInAccessor = __webpack_require__(/*! ../internals/define-built-in-accessor */ "./node_modules/core-js-pure/internals/define-built-in-accessor.js"); +var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ "./node_modules/core-js-pure/internals/well-known-symbol.js"); +var DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ "./node_modules/core-js-pure/internals/descriptors.js"); + +var SPECIES = wellKnownSymbol('species'); + +module.exports = function (CONSTRUCTOR_NAME) { + var Constructor = getBuiltIn(CONSTRUCTOR_NAME); + + if (DESCRIPTORS && Constructor && !Constructor[SPECIES]) { + defineBuiltInAccessor(Constructor, SPECIES, { + configurable: true, + get: function () { return this; } + }); + } +}; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/set-symmetric-difference.js": +/*!*************************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/set-symmetric-difference.js ***! + \*************************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var aSet = __webpack_require__(/*! ../internals/a-set */ "./node_modules/core-js-pure/internals/a-set.js"); +var SetHelpers = __webpack_require__(/*! ../internals/set-helpers */ "./node_modules/core-js-pure/internals/set-helpers.js"); +var clone = __webpack_require__(/*! ../internals/set-clone */ "./node_modules/core-js-pure/internals/set-clone.js"); +var getSetRecord = __webpack_require__(/*! ../internals/get-set-record */ "./node_modules/core-js-pure/internals/get-set-record.js"); +var iterateSimple = __webpack_require__(/*! ../internals/iterate-simple */ "./node_modules/core-js-pure/internals/iterate-simple.js"); + +var add = SetHelpers.add; +var has = SetHelpers.has; +var remove = SetHelpers.remove; + +// `Set.prototype.symmetricDifference` method +// https://github.com/tc39/proposal-set-methods +module.exports = function symmetricDifference(other) { + var O = aSet(this); + var keysIter = getSetRecord(other).getIterator(); + var result = clone(O); + iterateSimple(keysIter, function (e) { + if (has(O, e)) remove(result, e); + else add(result, e); + }); + return result; +}; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/set-to-string-tag.js": +/*!******************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/set-to-string-tag.js ***! + \******************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var TO_STRING_TAG_SUPPORT = __webpack_require__(/*! ../internals/to-string-tag-support */ "./node_modules/core-js-pure/internals/to-string-tag-support.js"); +var defineProperty = (__webpack_require__(/*! ../internals/object-define-property */ "./node_modules/core-js-pure/internals/object-define-property.js").f); +var createNonEnumerableProperty = __webpack_require__(/*! ../internals/create-non-enumerable-property */ "./node_modules/core-js-pure/internals/create-non-enumerable-property.js"); +var hasOwn = __webpack_require__(/*! ../internals/has-own-property */ "./node_modules/core-js-pure/internals/has-own-property.js"); +var toString = __webpack_require__(/*! ../internals/object-to-string */ "./node_modules/core-js-pure/internals/object-to-string.js"); +var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ "./node_modules/core-js-pure/internals/well-known-symbol.js"); + +var TO_STRING_TAG = wellKnownSymbol('toStringTag'); + +module.exports = function (it, TAG, STATIC, SET_METHOD) { + var target = STATIC ? it : it && it.prototype; + if (target) { + if (!hasOwn(target, TO_STRING_TAG)) { + defineProperty(target, TO_STRING_TAG, { configurable: true, value: TAG }); + } + if (SET_METHOD && !TO_STRING_TAG_SUPPORT) { + createNonEnumerableProperty(target, 'toString', toString); + } + } +}; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/set-union.js": +/*!**********************************************************!*\ + !*** ./node_modules/core-js-pure/internals/set-union.js ***! + \**********************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var aSet = __webpack_require__(/*! ../internals/a-set */ "./node_modules/core-js-pure/internals/a-set.js"); +var add = (__webpack_require__(/*! ../internals/set-helpers */ "./node_modules/core-js-pure/internals/set-helpers.js").add); +var clone = __webpack_require__(/*! ../internals/set-clone */ "./node_modules/core-js-pure/internals/set-clone.js"); +var getSetRecord = __webpack_require__(/*! ../internals/get-set-record */ "./node_modules/core-js-pure/internals/get-set-record.js"); +var iterateSimple = __webpack_require__(/*! ../internals/iterate-simple */ "./node_modules/core-js-pure/internals/iterate-simple.js"); + +// `Set.prototype.union` method +// https://github.com/tc39/proposal-set-methods +module.exports = function union(other) { + var O = aSet(this); + var keysIter = getSetRecord(other).getIterator(); + var result = clone(O); + iterateSimple(keysIter, function (it) { + add(result, it); + }); + return result; +}; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/shared-key.js": +/*!***********************************************************!*\ + !*** ./node_modules/core-js-pure/internals/shared-key.js ***! + \***********************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var shared = __webpack_require__(/*! ../internals/shared */ "./node_modules/core-js-pure/internals/shared.js"); +var uid = __webpack_require__(/*! ../internals/uid */ "./node_modules/core-js-pure/internals/uid.js"); + +var keys = shared('keys'); + +module.exports = function (key) { + return keys[key] || (keys[key] = uid(key)); +}; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/shared-store.js": +/*!*************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/shared-store.js ***! + \*************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var IS_PURE = __webpack_require__(/*! ../internals/is-pure */ "./node_modules/core-js-pure/internals/is-pure.js"); +var globalThis = __webpack_require__(/*! ../internals/global-this */ "./node_modules/core-js-pure/internals/global-this.js"); +var defineGlobalProperty = __webpack_require__(/*! ../internals/define-global-property */ "./node_modules/core-js-pure/internals/define-global-property.js"); + +var SHARED = '__core-js_shared__'; +var store = module.exports = globalThis[SHARED] || defineGlobalProperty(SHARED, {}); + +(store.versions || (store.versions = [])).push({ + version: '3.38.1', + mode: IS_PURE ? 'pure' : 'global', + copyright: '© 2014-2024 Denis Pushkarev (zloirock.ru)', + license: 'https://github.com/zloirock/core-js/blob/v3.38.1/LICENSE', + source: 'https://github.com/zloirock/core-js' +}); + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/shared.js": +/*!*******************************************************!*\ + !*** ./node_modules/core-js-pure/internals/shared.js ***! + \*******************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var store = __webpack_require__(/*! ../internals/shared-store */ "./node_modules/core-js-pure/internals/shared-store.js"); + +module.exports = function (key, value) { + return store[key] || (store[key] = value || {}); +}; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/species-constructor.js": +/*!********************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/species-constructor.js ***! + \********************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var anObject = __webpack_require__(/*! ../internals/an-object */ "./node_modules/core-js-pure/internals/an-object.js"); +var aConstructor = __webpack_require__(/*! ../internals/a-constructor */ "./node_modules/core-js-pure/internals/a-constructor.js"); +var isNullOrUndefined = __webpack_require__(/*! ../internals/is-null-or-undefined */ "./node_modules/core-js-pure/internals/is-null-or-undefined.js"); +var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ "./node_modules/core-js-pure/internals/well-known-symbol.js"); + +var SPECIES = wellKnownSymbol('species'); + +// `SpeciesConstructor` abstract operation +// https://tc39.es/ecma262/#sec-speciesconstructor +module.exports = function (O, defaultConstructor) { + var C = anObject(O).constructor; + var S; + return C === undefined || isNullOrUndefined(S = anObject(C)[SPECIES]) ? defaultConstructor : aConstructor(S); +}; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/string-multibyte.js": +/*!*****************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/string-multibyte.js ***! + \*****************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var uncurryThis = __webpack_require__(/*! ../internals/function-uncurry-this */ "./node_modules/core-js-pure/internals/function-uncurry-this.js"); +var toIntegerOrInfinity = __webpack_require__(/*! ../internals/to-integer-or-infinity */ "./node_modules/core-js-pure/internals/to-integer-or-infinity.js"); +var toString = __webpack_require__(/*! ../internals/to-string */ "./node_modules/core-js-pure/internals/to-string.js"); +var requireObjectCoercible = __webpack_require__(/*! ../internals/require-object-coercible */ "./node_modules/core-js-pure/internals/require-object-coercible.js"); + +var charAt = uncurryThis(''.charAt); +var charCodeAt = uncurryThis(''.charCodeAt); +var stringSlice = uncurryThis(''.slice); + +var createMethod = function (CONVERT_TO_STRING) { + return function ($this, pos) { + var S = toString(requireObjectCoercible($this)); + var position = toIntegerOrInfinity(pos); + var size = S.length; + var first, second; + if (position < 0 || position >= size) return CONVERT_TO_STRING ? '' : undefined; + first = charCodeAt(S, position); + return first < 0xD800 || first > 0xDBFF || position + 1 === size + || (second = charCodeAt(S, position + 1)) < 0xDC00 || second > 0xDFFF + ? CONVERT_TO_STRING + ? charAt(S, position) + : first + : CONVERT_TO_STRING + ? stringSlice(S, position, position + 2) + : (first - 0xD800 << 10) + (second - 0xDC00) + 0x10000; + }; +}; + +module.exports = { + // `String.prototype.codePointAt` method + // https://tc39.es/ecma262/#sec-string.prototype.codepointat + codeAt: createMethod(false), + // `String.prototype.at` method + // https://github.com/mathiasbynens/String.prototype.at + charAt: createMethod(true) +}; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/string-pad.js": +/*!***********************************************************!*\ + !*** ./node_modules/core-js-pure/internals/string-pad.js ***! + \***********************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +// https://github.com/tc39/proposal-string-pad-start-end +var uncurryThis = __webpack_require__(/*! ../internals/function-uncurry-this */ "./node_modules/core-js-pure/internals/function-uncurry-this.js"); +var toLength = __webpack_require__(/*! ../internals/to-length */ "./node_modules/core-js-pure/internals/to-length.js"); +var toString = __webpack_require__(/*! ../internals/to-string */ "./node_modules/core-js-pure/internals/to-string.js"); +var $repeat = __webpack_require__(/*! ../internals/string-repeat */ "./node_modules/core-js-pure/internals/string-repeat.js"); +var requireObjectCoercible = __webpack_require__(/*! ../internals/require-object-coercible */ "./node_modules/core-js-pure/internals/require-object-coercible.js"); + +var repeat = uncurryThis($repeat); +var stringSlice = uncurryThis(''.slice); +var ceil = Math.ceil; + +// `String.prototype.{ padStart, padEnd }` methods implementation +var createMethod = function (IS_END) { + return function ($this, maxLength, fillString) { + var S = toString(requireObjectCoercible($this)); + var intMaxLength = toLength(maxLength); + var stringLength = S.length; + var fillStr = fillString === undefined ? ' ' : toString(fillString); + var fillLen, stringFiller; + if (intMaxLength <= stringLength || fillStr === '') return S; + fillLen = intMaxLength - stringLength; + stringFiller = repeat(fillStr, ceil(fillLen / fillStr.length)); + if (stringFiller.length > fillLen) stringFiller = stringSlice(stringFiller, 0, fillLen); + return IS_END ? S + stringFiller : stringFiller + S; + }; +}; + +module.exports = { + // `String.prototype.padStart` method + // https://tc39.es/ecma262/#sec-string.prototype.padstart + start: createMethod(false), + // `String.prototype.padEnd` method + // https://tc39.es/ecma262/#sec-string.prototype.padend + end: createMethod(true) +}; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/string-punycode-to-ascii.js": +/*!*************************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/string-punycode-to-ascii.js ***! + \*************************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +// based on https://github.com/bestiejs/punycode.js/blob/master/punycode.js +var uncurryThis = __webpack_require__(/*! ../internals/function-uncurry-this */ "./node_modules/core-js-pure/internals/function-uncurry-this.js"); + +var maxInt = 2147483647; // aka. 0x7FFFFFFF or 2^31-1 +var base = 36; +var tMin = 1; +var tMax = 26; +var skew = 38; +var damp = 700; +var initialBias = 72; +var initialN = 128; // 0x80 +var delimiter = '-'; // '\x2D' +var regexNonASCII = /[^\0-\u007E]/; // non-ASCII chars +var regexSeparators = /[.\u3002\uFF0E\uFF61]/g; // RFC 3490 separators +var OVERFLOW_ERROR = 'Overflow: input needs wider integers to process'; +var baseMinusTMin = base - tMin; + +var $RangeError = RangeError; +var exec = uncurryThis(regexSeparators.exec); +var floor = Math.floor; +var fromCharCode = String.fromCharCode; +var charCodeAt = uncurryThis(''.charCodeAt); +var join = uncurryThis([].join); +var push = uncurryThis([].push); +var replace = uncurryThis(''.replace); +var split = uncurryThis(''.split); +var toLowerCase = uncurryThis(''.toLowerCase); + +/** + * Creates an array containing the numeric code points of each Unicode + * character in the string. While JavaScript uses UCS-2 internally, + * this function will convert a pair of surrogate halves (each of which + * UCS-2 exposes as separate characters) into a single code point, + * matching UTF-16. + */ +var ucs2decode = function (string) { + var output = []; + var counter = 0; + var length = string.length; + while (counter < length) { + var value = charCodeAt(string, counter++); + if (value >= 0xD800 && value <= 0xDBFF && counter < length) { + // It's a high surrogate, and there is a next character. + var extra = charCodeAt(string, counter++); + if ((extra & 0xFC00) === 0xDC00) { // Low surrogate. + push(output, ((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000); + } else { + // It's an unmatched surrogate; only append this code unit, in case the + // next code unit is the high surrogate of a surrogate pair. + push(output, value); + counter--; + } + } else { + push(output, value); + } + } + return output; +}; + +/** + * Converts a digit/integer into a basic code point. + */ +var digitToBasic = function (digit) { + // 0..25 map to ASCII a..z or A..Z + // 26..35 map to ASCII 0..9 + return digit + 22 + 75 * (digit < 26); +}; + +/** + * Bias adaptation function as per section 3.4 of RFC 3492. + * https://tools.ietf.org/html/rfc3492#section-3.4 + */ +var adapt = function (delta, numPoints, firstTime) { + var k = 0; + delta = firstTime ? floor(delta / damp) : delta >> 1; + delta += floor(delta / numPoints); + while (delta > baseMinusTMin * tMax >> 1) { + delta = floor(delta / baseMinusTMin); + k += base; + } + return floor(k + (baseMinusTMin + 1) * delta / (delta + skew)); +}; + +/** + * Converts a string of Unicode symbols (e.g. a domain name label) to a + * Punycode string of ASCII-only symbols. + */ +var encode = function (input) { + var output = []; + + // Convert the input in UCS-2 to an array of Unicode code points. + input = ucs2decode(input); + + // Cache the length. + var inputLength = input.length; + + // Initialize the state. + var n = initialN; + var delta = 0; + var bias = initialBias; + var i, currentValue; + + // Handle the basic code points. + for (i = 0; i < input.length; i++) { + currentValue = input[i]; + if (currentValue < 0x80) { + push(output, fromCharCode(currentValue)); + } + } + + var basicLength = output.length; // number of basic code points. + var handledCPCount = basicLength; // number of code points that have been handled; + + // Finish the basic string with a delimiter unless it's empty. + if (basicLength) { + push(output, delimiter); + } + + // Main encoding loop: + while (handledCPCount < inputLength) { + // All non-basic code points < n have been handled already. Find the next larger one: + var m = maxInt; + for (i = 0; i < input.length; i++) { + currentValue = input[i]; + if (currentValue >= n && currentValue < m) { + m = currentValue; + } + } + + // Increase `delta` enough to advance the decoder's state to , but guard against overflow. + var handledCPCountPlusOne = handledCPCount + 1; + if (m - n > floor((maxInt - delta) / handledCPCountPlusOne)) { + throw new $RangeError(OVERFLOW_ERROR); + } + + delta += (m - n) * handledCPCountPlusOne; + n = m; + + for (i = 0; i < input.length; i++) { + currentValue = input[i]; + if (currentValue < n && ++delta > maxInt) { + throw new $RangeError(OVERFLOW_ERROR); + } + if (currentValue === n) { + // Represent delta as a generalized variable-length integer. + var q = delta; + var k = base; + while (true) { + var t = k <= bias ? tMin : k >= bias + tMax ? tMax : k - bias; + if (q < t) break; + var qMinusT = q - t; + var baseMinusT = base - t; + push(output, fromCharCode(digitToBasic(t + qMinusT % baseMinusT))); + q = floor(qMinusT / baseMinusT); + k += base; + } + + push(output, fromCharCode(digitToBasic(q))); + bias = adapt(delta, handledCPCountPlusOne, handledCPCount === basicLength); + delta = 0; + handledCPCount++; + } + } + + delta++; + n++; + } + return join(output, ''); +}; + +module.exports = function (input) { + var encoded = []; + var labels = split(replace(toLowerCase(input), regexSeparators, '\u002E'), '.'); + var i, label; + for (i = 0; i < labels.length; i++) { + label = labels[i]; + push(encoded, exec(regexNonASCII, label) ? 'xn--' + encode(label) : label); + } + return join(encoded, '.'); +}; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/string-repeat.js": +/*!**************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/string-repeat.js ***! + \**************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var toIntegerOrInfinity = __webpack_require__(/*! ../internals/to-integer-or-infinity */ "./node_modules/core-js-pure/internals/to-integer-or-infinity.js"); +var toString = __webpack_require__(/*! ../internals/to-string */ "./node_modules/core-js-pure/internals/to-string.js"); +var requireObjectCoercible = __webpack_require__(/*! ../internals/require-object-coercible */ "./node_modules/core-js-pure/internals/require-object-coercible.js"); + +var $RangeError = RangeError; + +// `String.prototype.repeat` method implementation +// https://tc39.es/ecma262/#sec-string.prototype.repeat +module.exports = function repeat(count) { + var str = toString(requireObjectCoercible(this)); + var result = ''; + var n = toIntegerOrInfinity(count); + if (n < 0 || n === Infinity) throw new $RangeError('Wrong number of repetitions'); + for (;n > 0; (n >>>= 1) && (str += str)) if (n & 1) result += str; + return result; +}; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/string-trim-forced.js": +/*!*******************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/string-trim-forced.js ***! + \*******************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var PROPER_FUNCTION_NAME = (__webpack_require__(/*! ../internals/function-name */ "./node_modules/core-js-pure/internals/function-name.js").PROPER); +var fails = __webpack_require__(/*! ../internals/fails */ "./node_modules/core-js-pure/internals/fails.js"); +var whitespaces = __webpack_require__(/*! ../internals/whitespaces */ "./node_modules/core-js-pure/internals/whitespaces.js"); + +var non = '\u200B\u0085\u180E'; + +// check that a method works with the correct list +// of whitespaces and has a correct name +module.exports = function (METHOD_NAME) { + return fails(function () { + return !!whitespaces[METHOD_NAME]() + || non[METHOD_NAME]() !== non + || (PROPER_FUNCTION_NAME && whitespaces[METHOD_NAME].name !== METHOD_NAME); + }); +}; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/string-trim.js": +/*!************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/string-trim.js ***! + \************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var uncurryThis = __webpack_require__(/*! ../internals/function-uncurry-this */ "./node_modules/core-js-pure/internals/function-uncurry-this.js"); +var requireObjectCoercible = __webpack_require__(/*! ../internals/require-object-coercible */ "./node_modules/core-js-pure/internals/require-object-coercible.js"); +var toString = __webpack_require__(/*! ../internals/to-string */ "./node_modules/core-js-pure/internals/to-string.js"); +var whitespaces = __webpack_require__(/*! ../internals/whitespaces */ "./node_modules/core-js-pure/internals/whitespaces.js"); + +var replace = uncurryThis(''.replace); +var ltrim = RegExp('^[' + whitespaces + ']+'); +var rtrim = RegExp('(^|[^' + whitespaces + '])[' + whitespaces + ']+$'); + +// `String.prototype.{ trim, trimStart, trimEnd, trimLeft, trimRight }` methods implementation +var createMethod = function (TYPE) { + return function ($this) { + var string = toString(requireObjectCoercible($this)); + if (TYPE & 1) string = replace(string, ltrim, ''); + if (TYPE & 2) string = replace(string, rtrim, '$1'); + return string; + }; +}; + +module.exports = { + // `String.prototype.{ trimLeft, trimStart }` methods + // https://tc39.es/ecma262/#sec-string.prototype.trimstart + start: createMethod(1), + // `String.prototype.{ trimRight, trimEnd }` methods + // https://tc39.es/ecma262/#sec-string.prototype.trimend + end: createMethod(2), + // `String.prototype.trim` method + // https://tc39.es/ecma262/#sec-string.prototype.trim + trim: createMethod(3) +}; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/symbol-constructor-detection.js": +/*!*****************************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/symbol-constructor-detection.js ***! + \*****************************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +/* eslint-disable es/no-symbol -- required for testing */ +var V8_VERSION = __webpack_require__(/*! ../internals/environment-v8-version */ "./node_modules/core-js-pure/internals/environment-v8-version.js"); +var fails = __webpack_require__(/*! ../internals/fails */ "./node_modules/core-js-pure/internals/fails.js"); +var globalThis = __webpack_require__(/*! ../internals/global-this */ "./node_modules/core-js-pure/internals/global-this.js"); + +var $String = globalThis.String; + +// eslint-disable-next-line es/no-object-getownpropertysymbols -- required for testing +module.exports = !!Object.getOwnPropertySymbols && !fails(function () { + var symbol = Symbol('symbol detection'); + // Chrome 38 Symbol has incorrect toString conversion + // `get-own-property-symbols` polyfill symbols converted to object are not Symbol instances + // nb: Do not call `String` directly to avoid this being optimized out to `symbol+''` which will, + // of course, fail. + return !$String(symbol) || !(Object(symbol) instanceof Symbol) || + // Chrome 38-40 symbols are not inherited from DOM collections prototypes to instances + !Symbol.sham && V8_VERSION && V8_VERSION < 41; +}); + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/symbol-define-to-primitive.js": +/*!***************************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/symbol-define-to-primitive.js ***! + \***************************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var call = __webpack_require__(/*! ../internals/function-call */ "./node_modules/core-js-pure/internals/function-call.js"); +var getBuiltIn = __webpack_require__(/*! ../internals/get-built-in */ "./node_modules/core-js-pure/internals/get-built-in.js"); +var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ "./node_modules/core-js-pure/internals/well-known-symbol.js"); +var defineBuiltIn = __webpack_require__(/*! ../internals/define-built-in */ "./node_modules/core-js-pure/internals/define-built-in.js"); + +module.exports = function () { + var Symbol = getBuiltIn('Symbol'); + var SymbolPrototype = Symbol && Symbol.prototype; + var valueOf = SymbolPrototype && SymbolPrototype.valueOf; + var TO_PRIMITIVE = wellKnownSymbol('toPrimitive'); + + if (SymbolPrototype && !SymbolPrototype[TO_PRIMITIVE]) { + // `Symbol.prototype[@@toPrimitive]` method + // https://tc39.es/ecma262/#sec-symbol.prototype-@@toprimitive + // eslint-disable-next-line no-unused-vars -- required for .length + defineBuiltIn(SymbolPrototype, TO_PRIMITIVE, function (hint) { + return call(valueOf, this); + }, { arity: 1 }); + } +}; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/symbol-is-registered.js": +/*!*********************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/symbol-is-registered.js ***! + \*********************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var getBuiltIn = __webpack_require__(/*! ../internals/get-built-in */ "./node_modules/core-js-pure/internals/get-built-in.js"); +var uncurryThis = __webpack_require__(/*! ../internals/function-uncurry-this */ "./node_modules/core-js-pure/internals/function-uncurry-this.js"); + +var Symbol = getBuiltIn('Symbol'); +var keyFor = Symbol.keyFor; +var thisSymbolValue = uncurryThis(Symbol.prototype.valueOf); + +// `Symbol.isRegisteredSymbol` method +// https://tc39.es/proposal-symbol-predicates/#sec-symbol-isregisteredsymbol +module.exports = Symbol.isRegisteredSymbol || function isRegisteredSymbol(value) { + try { + return keyFor(thisSymbolValue(value)) !== undefined; + } catch (error) { + return false; + } +}; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/symbol-is-well-known.js": +/*!*********************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/symbol-is-well-known.js ***! + \*********************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var shared = __webpack_require__(/*! ../internals/shared */ "./node_modules/core-js-pure/internals/shared.js"); +var getBuiltIn = __webpack_require__(/*! ../internals/get-built-in */ "./node_modules/core-js-pure/internals/get-built-in.js"); +var uncurryThis = __webpack_require__(/*! ../internals/function-uncurry-this */ "./node_modules/core-js-pure/internals/function-uncurry-this.js"); +var isSymbol = __webpack_require__(/*! ../internals/is-symbol */ "./node_modules/core-js-pure/internals/is-symbol.js"); +var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ "./node_modules/core-js-pure/internals/well-known-symbol.js"); + +var Symbol = getBuiltIn('Symbol'); +var $isWellKnownSymbol = Symbol.isWellKnownSymbol; +var getOwnPropertyNames = getBuiltIn('Object', 'getOwnPropertyNames'); +var thisSymbolValue = uncurryThis(Symbol.prototype.valueOf); +var WellKnownSymbolsStore = shared('wks'); + +for (var i = 0, symbolKeys = getOwnPropertyNames(Symbol), symbolKeysLength = symbolKeys.length; i < symbolKeysLength; i++) { + // some old engines throws on access to some keys like `arguments` or `caller` + try { + var symbolKey = symbolKeys[i]; + if (isSymbol(Symbol[symbolKey])) wellKnownSymbol(symbolKey); + } catch (error) { /* empty */ } +} + +// `Symbol.isWellKnownSymbol` method +// https://tc39.es/proposal-symbol-predicates/#sec-symbol-iswellknownsymbol +// We should patch it for newly added well-known symbols. If it's not required, this module just will not be injected +module.exports = function isWellKnownSymbol(value) { + if ($isWellKnownSymbol && $isWellKnownSymbol(value)) return true; + try { + var symbol = thisSymbolValue(value); + for (var j = 0, keys = getOwnPropertyNames(WellKnownSymbolsStore), keysLength = keys.length; j < keysLength; j++) { + // eslint-disable-next-line eqeqeq -- polyfilled symbols case + if (WellKnownSymbolsStore[keys[j]] == symbol) return true; + } + } catch (error) { /* empty */ } + return false; +}; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/symbol-registry-detection.js": +/*!**************************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/symbol-registry-detection.js ***! + \**************************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var NATIVE_SYMBOL = __webpack_require__(/*! ../internals/symbol-constructor-detection */ "./node_modules/core-js-pure/internals/symbol-constructor-detection.js"); + +/* eslint-disable es/no-symbol -- safe */ +module.exports = NATIVE_SYMBOL && !!Symbol['for'] && !!Symbol.keyFor; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/task.js": +/*!*****************************************************!*\ + !*** ./node_modules/core-js-pure/internals/task.js ***! + \*****************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var globalThis = __webpack_require__(/*! ../internals/global-this */ "./node_modules/core-js-pure/internals/global-this.js"); +var apply = __webpack_require__(/*! ../internals/function-apply */ "./node_modules/core-js-pure/internals/function-apply.js"); +var bind = __webpack_require__(/*! ../internals/function-bind-context */ "./node_modules/core-js-pure/internals/function-bind-context.js"); +var isCallable = __webpack_require__(/*! ../internals/is-callable */ "./node_modules/core-js-pure/internals/is-callable.js"); +var hasOwn = __webpack_require__(/*! ../internals/has-own-property */ "./node_modules/core-js-pure/internals/has-own-property.js"); +var fails = __webpack_require__(/*! ../internals/fails */ "./node_modules/core-js-pure/internals/fails.js"); +var html = __webpack_require__(/*! ../internals/html */ "./node_modules/core-js-pure/internals/html.js"); +var arraySlice = __webpack_require__(/*! ../internals/array-slice */ "./node_modules/core-js-pure/internals/array-slice.js"); +var createElement = __webpack_require__(/*! ../internals/document-create-element */ "./node_modules/core-js-pure/internals/document-create-element.js"); +var validateArgumentsLength = __webpack_require__(/*! ../internals/validate-arguments-length */ "./node_modules/core-js-pure/internals/validate-arguments-length.js"); +var IS_IOS = __webpack_require__(/*! ../internals/environment-is-ios */ "./node_modules/core-js-pure/internals/environment-is-ios.js"); +var IS_NODE = __webpack_require__(/*! ../internals/environment-is-node */ "./node_modules/core-js-pure/internals/environment-is-node.js"); + +var set = globalThis.setImmediate; +var clear = globalThis.clearImmediate; +var process = globalThis.process; +var Dispatch = globalThis.Dispatch; +var Function = globalThis.Function; +var MessageChannel = globalThis.MessageChannel; +var String = globalThis.String; +var counter = 0; +var queue = {}; +var ONREADYSTATECHANGE = 'onreadystatechange'; +var $location, defer, channel, port; + +fails(function () { + // Deno throws a ReferenceError on `location` access without `--location` flag + $location = globalThis.location; +}); + +var run = function (id) { + if (hasOwn(queue, id)) { + var fn = queue[id]; + delete queue[id]; + fn(); + } +}; + +var runner = function (id) { + return function () { + run(id); + }; +}; + +var eventListener = function (event) { + run(event.data); +}; + +var globalPostMessageDefer = function (id) { + // old engines have not location.origin + globalThis.postMessage(String(id), $location.protocol + '//' + $location.host); +}; + +// Node.js 0.9+ & IE10+ has setImmediate, otherwise: +if (!set || !clear) { + set = function setImmediate(handler) { + validateArgumentsLength(arguments.length, 1); + var fn = isCallable(handler) ? handler : Function(handler); + var args = arraySlice(arguments, 1); + queue[++counter] = function () { + apply(fn, undefined, args); + }; + defer(counter); + return counter; + }; + clear = function clearImmediate(id) { + delete queue[id]; + }; + // Node.js 0.8- + if (IS_NODE) { + defer = function (id) { + process.nextTick(runner(id)); + }; + // Sphere (JS game engine) Dispatch API + } else if (Dispatch && Dispatch.now) { + defer = function (id) { + Dispatch.now(runner(id)); + }; + // Browsers with MessageChannel, includes WebWorkers + // except iOS - https://github.com/zloirock/core-js/issues/624 + } else if (MessageChannel && !IS_IOS) { + channel = new MessageChannel(); + port = channel.port2; + channel.port1.onmessage = eventListener; + defer = bind(port.postMessage, port); + // Browsers with postMessage, skip WebWorkers + // IE8 has postMessage, but it's sync & typeof its postMessage is 'object' + } else if ( + globalThis.addEventListener && + isCallable(globalThis.postMessage) && + !globalThis.importScripts && + $location && $location.protocol !== 'file:' && + !fails(globalPostMessageDefer) + ) { + defer = globalPostMessageDefer; + globalThis.addEventListener('message', eventListener, false); + // IE8- + } else if (ONREADYSTATECHANGE in createElement('script')) { + defer = function (id) { + html.appendChild(createElement('script'))[ONREADYSTATECHANGE] = function () { + html.removeChild(this); + run(id); + }; + }; + // Rest old browsers + } else { + defer = function (id) { + setTimeout(runner(id), 0); + }; + } +} + +module.exports = { + set: set, + clear: clear +}; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/to-absolute-index.js": +/*!******************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/to-absolute-index.js ***! + \******************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var toIntegerOrInfinity = __webpack_require__(/*! ../internals/to-integer-or-infinity */ "./node_modules/core-js-pure/internals/to-integer-or-infinity.js"); + +var max = Math.max; +var min = Math.min; + +// Helper for a popular repeating case of the spec: +// Let integer be ? ToInteger(index). +// If integer < 0, let result be max((length + integer), 0); else let result be min(integer, length). +module.exports = function (index, length) { + var integer = toIntegerOrInfinity(index); + return integer < 0 ? max(integer + length, 0) : min(integer, length); +}; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/to-indexed-object.js": +/*!******************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/to-indexed-object.js ***! + \******************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +// toObject with fallback for non-array-like ES3 strings +var IndexedObject = __webpack_require__(/*! ../internals/indexed-object */ "./node_modules/core-js-pure/internals/indexed-object.js"); +var requireObjectCoercible = __webpack_require__(/*! ../internals/require-object-coercible */ "./node_modules/core-js-pure/internals/require-object-coercible.js"); + +module.exports = function (it) { + return IndexedObject(requireObjectCoercible(it)); +}; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/to-integer-or-infinity.js": +/*!***********************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/to-integer-or-infinity.js ***! + \***********************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var trunc = __webpack_require__(/*! ../internals/math-trunc */ "./node_modules/core-js-pure/internals/math-trunc.js"); + +// `ToIntegerOrInfinity` abstract operation +// https://tc39.es/ecma262/#sec-tointegerorinfinity +module.exports = function (argument) { + var number = +argument; + // eslint-disable-next-line no-self-compare -- NaN check + return number !== number || number === 0 ? 0 : trunc(number); +}; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/to-length.js": +/*!**********************************************************!*\ + !*** ./node_modules/core-js-pure/internals/to-length.js ***! + \**********************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var toIntegerOrInfinity = __webpack_require__(/*! ../internals/to-integer-or-infinity */ "./node_modules/core-js-pure/internals/to-integer-or-infinity.js"); + +var min = Math.min; + +// `ToLength` abstract operation +// https://tc39.es/ecma262/#sec-tolength +module.exports = function (argument) { + var len = toIntegerOrInfinity(argument); + return len > 0 ? min(len, 0x1FFFFFFFFFFFFF) : 0; // 2 ** 53 - 1 == 9007199254740991 +}; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/to-object.js": +/*!**********************************************************!*\ + !*** ./node_modules/core-js-pure/internals/to-object.js ***! + \**********************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var requireObjectCoercible = __webpack_require__(/*! ../internals/require-object-coercible */ "./node_modules/core-js-pure/internals/require-object-coercible.js"); + +var $Object = Object; + +// `ToObject` abstract operation +// https://tc39.es/ecma262/#sec-toobject +module.exports = function (argument) { + return $Object(requireObjectCoercible(argument)); +}; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/to-primitive.js": +/*!*************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/to-primitive.js ***! + \*************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var call = __webpack_require__(/*! ../internals/function-call */ "./node_modules/core-js-pure/internals/function-call.js"); +var isObject = __webpack_require__(/*! ../internals/is-object */ "./node_modules/core-js-pure/internals/is-object.js"); +var isSymbol = __webpack_require__(/*! ../internals/is-symbol */ "./node_modules/core-js-pure/internals/is-symbol.js"); +var getMethod = __webpack_require__(/*! ../internals/get-method */ "./node_modules/core-js-pure/internals/get-method.js"); +var ordinaryToPrimitive = __webpack_require__(/*! ../internals/ordinary-to-primitive */ "./node_modules/core-js-pure/internals/ordinary-to-primitive.js"); +var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ "./node_modules/core-js-pure/internals/well-known-symbol.js"); + +var $TypeError = TypeError; +var TO_PRIMITIVE = wellKnownSymbol('toPrimitive'); + +// `ToPrimitive` abstract operation +// https://tc39.es/ecma262/#sec-toprimitive +module.exports = function (input, pref) { + if (!isObject(input) || isSymbol(input)) return input; + var exoticToPrim = getMethod(input, TO_PRIMITIVE); + var result; + if (exoticToPrim) { + if (pref === undefined) pref = 'default'; + result = call(exoticToPrim, input, pref); + if (!isObject(result) || isSymbol(result)) return result; + throw new $TypeError("Can't convert object to primitive value"); + } + if (pref === undefined) pref = 'number'; + return ordinaryToPrimitive(input, pref); +}; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/to-property-key.js": +/*!****************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/to-property-key.js ***! + \****************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var toPrimitive = __webpack_require__(/*! ../internals/to-primitive */ "./node_modules/core-js-pure/internals/to-primitive.js"); +var isSymbol = __webpack_require__(/*! ../internals/is-symbol */ "./node_modules/core-js-pure/internals/is-symbol.js"); + +// `ToPropertyKey` abstract operation +// https://tc39.es/ecma262/#sec-topropertykey +module.exports = function (argument) { + var key = toPrimitive(argument, 'string'); + return isSymbol(key) ? key : key + ''; +}; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/to-string-tag-support.js": +/*!**********************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/to-string-tag-support.js ***! + \**********************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ "./node_modules/core-js-pure/internals/well-known-symbol.js"); + +var TO_STRING_TAG = wellKnownSymbol('toStringTag'); +var test = {}; + +test[TO_STRING_TAG] = 'z'; + +module.exports = String(test) === '[object z]'; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/to-string.js": +/*!**********************************************************!*\ + !*** ./node_modules/core-js-pure/internals/to-string.js ***! + \**********************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var classof = __webpack_require__(/*! ../internals/classof */ "./node_modules/core-js-pure/internals/classof.js"); + +var $String = String; + +module.exports = function (argument) { + if (classof(argument) === 'Symbol') throw new TypeError('Cannot convert a Symbol value to a string'); + return $String(argument); +}; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/try-to-string.js": +/*!**************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/try-to-string.js ***! + \**************************************************************/ +/***/ ((module) => { + +"use strict"; + +var $String = String; + +module.exports = function (argument) { + try { + return $String(argument); + } catch (error) { + return 'Object'; + } +}; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/uid.js": +/*!****************************************************!*\ + !*** ./node_modules/core-js-pure/internals/uid.js ***! + \****************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var uncurryThis = __webpack_require__(/*! ../internals/function-uncurry-this */ "./node_modules/core-js-pure/internals/function-uncurry-this.js"); + +var id = 0; +var postfix = Math.random(); +var toString = uncurryThis(1.0.toString); + +module.exports = function (key) { + return 'Symbol(' + (key === undefined ? '' : key) + ')_' + toString(++id + postfix, 36); +}; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/url-constructor-detection.js": +/*!**************************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/url-constructor-detection.js ***! + \**************************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var fails = __webpack_require__(/*! ../internals/fails */ "./node_modules/core-js-pure/internals/fails.js"); +var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ "./node_modules/core-js-pure/internals/well-known-symbol.js"); +var DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ "./node_modules/core-js-pure/internals/descriptors.js"); +var IS_PURE = __webpack_require__(/*! ../internals/is-pure */ "./node_modules/core-js-pure/internals/is-pure.js"); + +var ITERATOR = wellKnownSymbol('iterator'); + +module.exports = !fails(function () { + // eslint-disable-next-line unicorn/relative-url-style -- required for testing + var url = new URL('b?a=1&b=2&c=3', 'https://a'); + var params = url.searchParams; + var params2 = new URLSearchParams('a=1&a=2&b=3'); + var result = ''; + url.pathname = 'c%20d'; + params.forEach(function (value, key) { + params['delete']('b'); + result += key + value; + }); + params2['delete']('a', 2); + // `undefined` case is a Chromium 117 bug + // https://bugs.chromium.org/p/v8/issues/detail?id=14222 + params2['delete']('b', undefined); + return (IS_PURE && (!url.toJSON || !params2.has('a', 1) || params2.has('a', 2) || !params2.has('a', undefined) || params2.has('b'))) + || (!params.size && (IS_PURE || !DESCRIPTORS)) + || !params.sort + || url.href !== 'https://a/c%20d?a=1&c=3' + || params.get('c') !== '3' + || String(new URLSearchParams('?a=1')) !== 'a=1' + || !params[ITERATOR] + // throws in Edge + || new URL('https://a@b').username !== 'a' + || new URLSearchParams(new URLSearchParams('a=b')).get('a') !== 'b' + // not punycoded in Edge + || new URL('https://тест').host !== 'xn--e1aybc' + // not escaped in Chrome 62- + || new URL('https://a#б').hash !== '#%D0%B1' + // fails in Chrome 66- + || result !== 'a1c3' + // throws in Safari + || new URL('https://x', undefined).host !== 'x'; +}); + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/use-symbol-as-uid.js": +/*!******************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/use-symbol-as-uid.js ***! + \******************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +/* eslint-disable es/no-symbol -- required for testing */ +var NATIVE_SYMBOL = __webpack_require__(/*! ../internals/symbol-constructor-detection */ "./node_modules/core-js-pure/internals/symbol-constructor-detection.js"); + +module.exports = NATIVE_SYMBOL + && !Symbol.sham + && typeof Symbol.iterator == 'symbol'; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/v8-prototype-define-bug.js": +/*!************************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/v8-prototype-define-bug.js ***! + \************************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ "./node_modules/core-js-pure/internals/descriptors.js"); +var fails = __webpack_require__(/*! ../internals/fails */ "./node_modules/core-js-pure/internals/fails.js"); + +// V8 ~ Chrome 36- +// https://bugs.chromium.org/p/v8/issues/detail?id=3334 +module.exports = DESCRIPTORS && fails(function () { + // eslint-disable-next-line es/no-object-defineproperty -- required for testing + return Object.defineProperty(function () { /* empty */ }, 'prototype', { + value: 42, + writable: false + }).prototype !== 42; +}); + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/validate-arguments-length.js": +/*!**************************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/validate-arguments-length.js ***! + \**************************************************************************/ +/***/ ((module) => { + +"use strict"; + +var $TypeError = TypeError; + +module.exports = function (passed, required) { + if (passed < required) throw new $TypeError('Not enough arguments'); + return passed; +}; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/weak-map-basic-detection.js": +/*!*************************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/weak-map-basic-detection.js ***! + \*************************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var globalThis = __webpack_require__(/*! ../internals/global-this */ "./node_modules/core-js-pure/internals/global-this.js"); +var isCallable = __webpack_require__(/*! ../internals/is-callable */ "./node_modules/core-js-pure/internals/is-callable.js"); + +var WeakMap = globalThis.WeakMap; + +module.exports = isCallable(WeakMap) && /native code/.test(String(WeakMap)); + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/well-known-symbol-define.js": +/*!*************************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/well-known-symbol-define.js ***! + \*************************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var path = __webpack_require__(/*! ../internals/path */ "./node_modules/core-js-pure/internals/path.js"); +var hasOwn = __webpack_require__(/*! ../internals/has-own-property */ "./node_modules/core-js-pure/internals/has-own-property.js"); +var wrappedWellKnownSymbolModule = __webpack_require__(/*! ../internals/well-known-symbol-wrapped */ "./node_modules/core-js-pure/internals/well-known-symbol-wrapped.js"); +var defineProperty = (__webpack_require__(/*! ../internals/object-define-property */ "./node_modules/core-js-pure/internals/object-define-property.js").f); + +module.exports = function (NAME) { + var Symbol = path.Symbol || (path.Symbol = {}); + if (!hasOwn(Symbol, NAME)) defineProperty(Symbol, NAME, { + value: wrappedWellKnownSymbolModule.f(NAME) + }); +}; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/well-known-symbol-wrapped.js": +/*!**************************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/well-known-symbol-wrapped.js ***! + \**************************************************************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + +"use strict"; + +var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ "./node_modules/core-js-pure/internals/well-known-symbol.js"); + +exports.f = wellKnownSymbol; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/well-known-symbol.js": +/*!******************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/well-known-symbol.js ***! + \******************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var globalThis = __webpack_require__(/*! ../internals/global-this */ "./node_modules/core-js-pure/internals/global-this.js"); +var shared = __webpack_require__(/*! ../internals/shared */ "./node_modules/core-js-pure/internals/shared.js"); +var hasOwn = __webpack_require__(/*! ../internals/has-own-property */ "./node_modules/core-js-pure/internals/has-own-property.js"); +var uid = __webpack_require__(/*! ../internals/uid */ "./node_modules/core-js-pure/internals/uid.js"); +var NATIVE_SYMBOL = __webpack_require__(/*! ../internals/symbol-constructor-detection */ "./node_modules/core-js-pure/internals/symbol-constructor-detection.js"); +var USE_SYMBOL_AS_UID = __webpack_require__(/*! ../internals/use-symbol-as-uid */ "./node_modules/core-js-pure/internals/use-symbol-as-uid.js"); + +var Symbol = globalThis.Symbol; +var WellKnownSymbolsStore = shared('wks'); +var createWellKnownSymbol = USE_SYMBOL_AS_UID ? Symbol['for'] || Symbol : Symbol && Symbol.withoutSetter || uid; + +module.exports = function (name) { + if (!hasOwn(WellKnownSymbolsStore, name)) { + WellKnownSymbolsStore[name] = NATIVE_SYMBOL && hasOwn(Symbol, name) + ? Symbol[name] + : createWellKnownSymbol('Symbol.' + name); + } return WellKnownSymbolsStore[name]; +}; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/whitespaces.js": +/*!************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/whitespaces.js ***! + \************************************************************/ +/***/ ((module) => { + +"use strict"; + +// a string of all valid unicode whitespaces +module.exports = '\u0009\u000A\u000B\u000C\u000D\u0020\u00A0\u1680\u2000\u2001\u2002' + + '\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u202F\u205F\u3000\u2028\u2029\uFEFF'; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/modules/es.aggregate-error.constructor.js": +/*!*****************************************************************************!*\ + !*** ./node_modules/core-js-pure/modules/es.aggregate-error.constructor.js ***! + \*****************************************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var $ = __webpack_require__(/*! ../internals/export */ "./node_modules/core-js-pure/internals/export.js"); +var isPrototypeOf = __webpack_require__(/*! ../internals/object-is-prototype-of */ "./node_modules/core-js-pure/internals/object-is-prototype-of.js"); +var getPrototypeOf = __webpack_require__(/*! ../internals/object-get-prototype-of */ "./node_modules/core-js-pure/internals/object-get-prototype-of.js"); +var setPrototypeOf = __webpack_require__(/*! ../internals/object-set-prototype-of */ "./node_modules/core-js-pure/internals/object-set-prototype-of.js"); +var copyConstructorProperties = __webpack_require__(/*! ../internals/copy-constructor-properties */ "./node_modules/core-js-pure/internals/copy-constructor-properties.js"); +var create = __webpack_require__(/*! ../internals/object-create */ "./node_modules/core-js-pure/internals/object-create.js"); +var createNonEnumerableProperty = __webpack_require__(/*! ../internals/create-non-enumerable-property */ "./node_modules/core-js-pure/internals/create-non-enumerable-property.js"); +var createPropertyDescriptor = __webpack_require__(/*! ../internals/create-property-descriptor */ "./node_modules/core-js-pure/internals/create-property-descriptor.js"); +var installErrorCause = __webpack_require__(/*! ../internals/install-error-cause */ "./node_modules/core-js-pure/internals/install-error-cause.js"); +var installErrorStack = __webpack_require__(/*! ../internals/error-stack-install */ "./node_modules/core-js-pure/internals/error-stack-install.js"); +var iterate = __webpack_require__(/*! ../internals/iterate */ "./node_modules/core-js-pure/internals/iterate.js"); +var normalizeStringArgument = __webpack_require__(/*! ../internals/normalize-string-argument */ "./node_modules/core-js-pure/internals/normalize-string-argument.js"); +var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ "./node_modules/core-js-pure/internals/well-known-symbol.js"); + +var TO_STRING_TAG = wellKnownSymbol('toStringTag'); +var $Error = Error; +var push = [].push; + +var $AggregateError = function AggregateError(errors, message /* , options */) { + var isInstance = isPrototypeOf(AggregateErrorPrototype, this); + var that; + if (setPrototypeOf) { + that = setPrototypeOf(new $Error(), isInstance ? getPrototypeOf(this) : AggregateErrorPrototype); + } else { + that = isInstance ? this : create(AggregateErrorPrototype); + createNonEnumerableProperty(that, TO_STRING_TAG, 'Error'); + } + if (message !== undefined) createNonEnumerableProperty(that, 'message', normalizeStringArgument(message)); + installErrorStack(that, $AggregateError, that.stack, 1); + if (arguments.length > 2) installErrorCause(that, arguments[2]); + var errorsArray = []; + iterate(errors, push, { that: errorsArray }); + createNonEnumerableProperty(that, 'errors', errorsArray); + return that; +}; + +if (setPrototypeOf) setPrototypeOf($AggregateError, $Error); +else copyConstructorProperties($AggregateError, $Error, { name: true }); + +var AggregateErrorPrototype = $AggregateError.prototype = create($Error.prototype, { + constructor: createPropertyDescriptor(1, $AggregateError), + message: createPropertyDescriptor(1, ''), + name: createPropertyDescriptor(1, 'AggregateError') +}); + +// `AggregateError` constructor +// https://tc39.es/ecma262/#sec-aggregate-error-constructor +$({ global: true, constructor: true, arity: 2 }, { + AggregateError: $AggregateError +}); + + +/***/ }), + +/***/ "./node_modules/core-js-pure/modules/es.aggregate-error.js": +/*!*****************************************************************!*\ + !*** ./node_modules/core-js-pure/modules/es.aggregate-error.js ***! + \*****************************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +// TODO: Remove this module from `core-js@4` since it's replaced to module below +__webpack_require__(/*! ../modules/es.aggregate-error.constructor */ "./node_modules/core-js-pure/modules/es.aggregate-error.constructor.js"); + + +/***/ }), + +/***/ "./node_modules/core-js-pure/modules/es.array.concat.js": +/*!**************************************************************!*\ + !*** ./node_modules/core-js-pure/modules/es.array.concat.js ***! + \**************************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var $ = __webpack_require__(/*! ../internals/export */ "./node_modules/core-js-pure/internals/export.js"); +var fails = __webpack_require__(/*! ../internals/fails */ "./node_modules/core-js-pure/internals/fails.js"); +var isArray = __webpack_require__(/*! ../internals/is-array */ "./node_modules/core-js-pure/internals/is-array.js"); +var isObject = __webpack_require__(/*! ../internals/is-object */ "./node_modules/core-js-pure/internals/is-object.js"); +var toObject = __webpack_require__(/*! ../internals/to-object */ "./node_modules/core-js-pure/internals/to-object.js"); +var lengthOfArrayLike = __webpack_require__(/*! ../internals/length-of-array-like */ "./node_modules/core-js-pure/internals/length-of-array-like.js"); +var doesNotExceedSafeInteger = __webpack_require__(/*! ../internals/does-not-exceed-safe-integer */ "./node_modules/core-js-pure/internals/does-not-exceed-safe-integer.js"); +var createProperty = __webpack_require__(/*! ../internals/create-property */ "./node_modules/core-js-pure/internals/create-property.js"); +var arraySpeciesCreate = __webpack_require__(/*! ../internals/array-species-create */ "./node_modules/core-js-pure/internals/array-species-create.js"); +var arrayMethodHasSpeciesSupport = __webpack_require__(/*! ../internals/array-method-has-species-support */ "./node_modules/core-js-pure/internals/array-method-has-species-support.js"); +var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ "./node_modules/core-js-pure/internals/well-known-symbol.js"); +var V8_VERSION = __webpack_require__(/*! ../internals/environment-v8-version */ "./node_modules/core-js-pure/internals/environment-v8-version.js"); + +var IS_CONCAT_SPREADABLE = wellKnownSymbol('isConcatSpreadable'); + +// We can't use this feature detection in V8 since it causes +// deoptimization and serious performance degradation +// https://github.com/zloirock/core-js/issues/679 +var IS_CONCAT_SPREADABLE_SUPPORT = V8_VERSION >= 51 || !fails(function () { + var array = []; + array[IS_CONCAT_SPREADABLE] = false; + return array.concat()[0] !== array; +}); + +var isConcatSpreadable = function (O) { + if (!isObject(O)) return false; + var spreadable = O[IS_CONCAT_SPREADABLE]; + return spreadable !== undefined ? !!spreadable : isArray(O); +}; + +var FORCED = !IS_CONCAT_SPREADABLE_SUPPORT || !arrayMethodHasSpeciesSupport('concat'); + +// `Array.prototype.concat` method +// https://tc39.es/ecma262/#sec-array.prototype.concat +// with adding support of @@isConcatSpreadable and @@species +$({ target: 'Array', proto: true, arity: 1, forced: FORCED }, { + // eslint-disable-next-line no-unused-vars -- required for `.length` + concat: function concat(arg) { + var O = toObject(this); + var A = arraySpeciesCreate(O, 0); + var n = 0; + var i, k, length, len, E; + for (i = -1, length = arguments.length; i < length; i++) { + E = i === -1 ? O : arguments[i]; + if (isConcatSpreadable(E)) { + len = lengthOfArrayLike(E); + doesNotExceedSafeInteger(n + len); + for (k = 0; k < len; k++, n++) if (k in E) createProperty(A, n, E[k]); + } else { + doesNotExceedSafeInteger(n + 1); + createProperty(A, n++, E); + } + } + A.length = n; + return A; + } +}); + + +/***/ }), + +/***/ "./node_modules/core-js-pure/modules/es.array.filter.js": +/*!**************************************************************!*\ + !*** ./node_modules/core-js-pure/modules/es.array.filter.js ***! + \**************************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var $ = __webpack_require__(/*! ../internals/export */ "./node_modules/core-js-pure/internals/export.js"); +var $filter = (__webpack_require__(/*! ../internals/array-iteration */ "./node_modules/core-js-pure/internals/array-iteration.js").filter); +var arrayMethodHasSpeciesSupport = __webpack_require__(/*! ../internals/array-method-has-species-support */ "./node_modules/core-js-pure/internals/array-method-has-species-support.js"); + +var HAS_SPECIES_SUPPORT = arrayMethodHasSpeciesSupport('filter'); + +// `Array.prototype.filter` method +// https://tc39.es/ecma262/#sec-array.prototype.filter +// with adding support of @@species +$({ target: 'Array', proto: true, forced: !HAS_SPECIES_SUPPORT }, { + filter: function filter(callbackfn /* , thisArg */) { + return $filter(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined); + } +}); + + +/***/ }), + +/***/ "./node_modules/core-js-pure/modules/es.array.for-each.js": +/*!****************************************************************!*\ + !*** ./node_modules/core-js-pure/modules/es.array.for-each.js ***! + \****************************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var $ = __webpack_require__(/*! ../internals/export */ "./node_modules/core-js-pure/internals/export.js"); +var forEach = __webpack_require__(/*! ../internals/array-for-each */ "./node_modules/core-js-pure/internals/array-for-each.js"); + +// `Array.prototype.forEach` method +// https://tc39.es/ecma262/#sec-array.prototype.foreach +// eslint-disable-next-line es/no-array-prototype-foreach -- safe +$({ target: 'Array', proto: true, forced: [].forEach !== forEach }, { + forEach: forEach +}); + + +/***/ }), + +/***/ "./node_modules/core-js-pure/modules/es.array.includes.js": +/*!****************************************************************!*\ + !*** ./node_modules/core-js-pure/modules/es.array.includes.js ***! + \****************************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var $ = __webpack_require__(/*! ../internals/export */ "./node_modules/core-js-pure/internals/export.js"); +var $includes = (__webpack_require__(/*! ../internals/array-includes */ "./node_modules/core-js-pure/internals/array-includes.js").includes); +var fails = __webpack_require__(/*! ../internals/fails */ "./node_modules/core-js-pure/internals/fails.js"); +var addToUnscopables = __webpack_require__(/*! ../internals/add-to-unscopables */ "./node_modules/core-js-pure/internals/add-to-unscopables.js"); + +// FF99+ bug +var BROKEN_ON_SPARSE = fails(function () { + // eslint-disable-next-line es/no-array-prototype-includes -- detection + return !Array(1).includes(); +}); + +// `Array.prototype.includes` method +// https://tc39.es/ecma262/#sec-array.prototype.includes +$({ target: 'Array', proto: true, forced: BROKEN_ON_SPARSE }, { + includes: function includes(el /* , fromIndex = 0 */) { + return $includes(this, el, arguments.length > 1 ? arguments[1] : undefined); + } +}); + +// https://tc39.es/ecma262/#sec-array.prototype-@@unscopables +addToUnscopables('includes'); + + +/***/ }), + +/***/ "./node_modules/core-js-pure/modules/es.array.is-array.js": +/*!****************************************************************!*\ + !*** ./node_modules/core-js-pure/modules/es.array.is-array.js ***! + \****************************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var $ = __webpack_require__(/*! ../internals/export */ "./node_modules/core-js-pure/internals/export.js"); +var isArray = __webpack_require__(/*! ../internals/is-array */ "./node_modules/core-js-pure/internals/is-array.js"); + +// `Array.isArray` method +// https://tc39.es/ecma262/#sec-array.isarray +$({ target: 'Array', stat: true }, { + isArray: isArray +}); + + +/***/ }), + +/***/ "./node_modules/core-js-pure/modules/es.array.iterator.js": +/*!****************************************************************!*\ + !*** ./node_modules/core-js-pure/modules/es.array.iterator.js ***! + \****************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var toIndexedObject = __webpack_require__(/*! ../internals/to-indexed-object */ "./node_modules/core-js-pure/internals/to-indexed-object.js"); +var addToUnscopables = __webpack_require__(/*! ../internals/add-to-unscopables */ "./node_modules/core-js-pure/internals/add-to-unscopables.js"); +var Iterators = __webpack_require__(/*! ../internals/iterators */ "./node_modules/core-js-pure/internals/iterators.js"); +var InternalStateModule = __webpack_require__(/*! ../internals/internal-state */ "./node_modules/core-js-pure/internals/internal-state.js"); +var defineProperty = (__webpack_require__(/*! ../internals/object-define-property */ "./node_modules/core-js-pure/internals/object-define-property.js").f); +var defineIterator = __webpack_require__(/*! ../internals/iterator-define */ "./node_modules/core-js-pure/internals/iterator-define.js"); +var createIterResultObject = __webpack_require__(/*! ../internals/create-iter-result-object */ "./node_modules/core-js-pure/internals/create-iter-result-object.js"); +var IS_PURE = __webpack_require__(/*! ../internals/is-pure */ "./node_modules/core-js-pure/internals/is-pure.js"); +var DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ "./node_modules/core-js-pure/internals/descriptors.js"); + +var ARRAY_ITERATOR = 'Array Iterator'; +var setInternalState = InternalStateModule.set; +var getInternalState = InternalStateModule.getterFor(ARRAY_ITERATOR); + +// `Array.prototype.entries` method +// https://tc39.es/ecma262/#sec-array.prototype.entries +// `Array.prototype.keys` method +// https://tc39.es/ecma262/#sec-array.prototype.keys +// `Array.prototype.values` method +// https://tc39.es/ecma262/#sec-array.prototype.values +// `Array.prototype[@@iterator]` method +// https://tc39.es/ecma262/#sec-array.prototype-@@iterator +// `CreateArrayIterator` internal method +// https://tc39.es/ecma262/#sec-createarrayiterator +module.exports = defineIterator(Array, 'Array', function (iterated, kind) { + setInternalState(this, { + type: ARRAY_ITERATOR, + target: toIndexedObject(iterated), // target + index: 0, // next index + kind: kind // kind + }); +// `%ArrayIteratorPrototype%.next` method +// https://tc39.es/ecma262/#sec-%arrayiteratorprototype%.next +}, function () { + var state = getInternalState(this); + var target = state.target; + var index = state.index++; + if (!target || index >= target.length) { + state.target = null; + return createIterResultObject(undefined, true); + } + switch (state.kind) { + case 'keys': return createIterResultObject(index, false); + case 'values': return createIterResultObject(target[index], false); + } return createIterResultObject([index, target[index]], false); +}, 'values'); + +// argumentsList[@@iterator] is %ArrayProto_values% +// https://tc39.es/ecma262/#sec-createunmappedargumentsobject +// https://tc39.es/ecma262/#sec-createmappedargumentsobject +var values = Iterators.Arguments = Iterators.Array; + +// https://tc39.es/ecma262/#sec-array.prototype-@@unscopables +addToUnscopables('keys'); +addToUnscopables('values'); +addToUnscopables('entries'); + +// V8 ~ Chrome 45- bug +if (!IS_PURE && DESCRIPTORS && values.name !== 'values') try { + defineProperty(values, 'name', { value: 'values' }); +} catch (error) { /* empty */ } + + +/***/ }), + +/***/ "./node_modules/core-js-pure/modules/es.array.some.js": +/*!************************************************************!*\ + !*** ./node_modules/core-js-pure/modules/es.array.some.js ***! + \************************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var $ = __webpack_require__(/*! ../internals/export */ "./node_modules/core-js-pure/internals/export.js"); +var $some = (__webpack_require__(/*! ../internals/array-iteration */ "./node_modules/core-js-pure/internals/array-iteration.js").some); +var arrayMethodIsStrict = __webpack_require__(/*! ../internals/array-method-is-strict */ "./node_modules/core-js-pure/internals/array-method-is-strict.js"); + +var STRICT_METHOD = arrayMethodIsStrict('some'); + +// `Array.prototype.some` method +// https://tc39.es/ecma262/#sec-array.prototype.some +$({ target: 'Array', proto: true, forced: !STRICT_METHOD }, { + some: function some(callbackfn /* , thisArg */) { + return $some(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined); + } +}); + + +/***/ }), + +/***/ "./node_modules/core-js-pure/modules/es.array.sort.js": +/*!************************************************************!*\ + !*** ./node_modules/core-js-pure/modules/es.array.sort.js ***! + \************************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var $ = __webpack_require__(/*! ../internals/export */ "./node_modules/core-js-pure/internals/export.js"); +var uncurryThis = __webpack_require__(/*! ../internals/function-uncurry-this */ "./node_modules/core-js-pure/internals/function-uncurry-this.js"); +var aCallable = __webpack_require__(/*! ../internals/a-callable */ "./node_modules/core-js-pure/internals/a-callable.js"); +var toObject = __webpack_require__(/*! ../internals/to-object */ "./node_modules/core-js-pure/internals/to-object.js"); +var lengthOfArrayLike = __webpack_require__(/*! ../internals/length-of-array-like */ "./node_modules/core-js-pure/internals/length-of-array-like.js"); +var deletePropertyOrThrow = __webpack_require__(/*! ../internals/delete-property-or-throw */ "./node_modules/core-js-pure/internals/delete-property-or-throw.js"); +var toString = __webpack_require__(/*! ../internals/to-string */ "./node_modules/core-js-pure/internals/to-string.js"); +var fails = __webpack_require__(/*! ../internals/fails */ "./node_modules/core-js-pure/internals/fails.js"); +var internalSort = __webpack_require__(/*! ../internals/array-sort */ "./node_modules/core-js-pure/internals/array-sort.js"); +var arrayMethodIsStrict = __webpack_require__(/*! ../internals/array-method-is-strict */ "./node_modules/core-js-pure/internals/array-method-is-strict.js"); +var FF = __webpack_require__(/*! ../internals/environment-ff-version */ "./node_modules/core-js-pure/internals/environment-ff-version.js"); +var IE_OR_EDGE = __webpack_require__(/*! ../internals/environment-is-ie-or-edge */ "./node_modules/core-js-pure/internals/environment-is-ie-or-edge.js"); +var V8 = __webpack_require__(/*! ../internals/environment-v8-version */ "./node_modules/core-js-pure/internals/environment-v8-version.js"); +var WEBKIT = __webpack_require__(/*! ../internals/environment-webkit-version */ "./node_modules/core-js-pure/internals/environment-webkit-version.js"); + +var test = []; +var nativeSort = uncurryThis(test.sort); +var push = uncurryThis(test.push); + +// IE8- +var FAILS_ON_UNDEFINED = fails(function () { + test.sort(undefined); +}); +// V8 bug +var FAILS_ON_NULL = fails(function () { + test.sort(null); +}); +// Old WebKit +var STRICT_METHOD = arrayMethodIsStrict('sort'); + +var STABLE_SORT = !fails(function () { + // feature detection can be too slow, so check engines versions + if (V8) return V8 < 70; + if (FF && FF > 3) return; + if (IE_OR_EDGE) return true; + if (WEBKIT) return WEBKIT < 603; + + var result = ''; + var code, chr, value, index; + + // generate an array with more 512 elements (Chakra and old V8 fails only in this case) + for (code = 65; code < 76; code++) { + chr = String.fromCharCode(code); + + switch (code) { + case 66: case 69: case 70: case 72: value = 3; break; + case 68: case 71: value = 4; break; + default: value = 2; + } + + for (index = 0; index < 47; index++) { + test.push({ k: chr + index, v: value }); + } + } + + test.sort(function (a, b) { return b.v - a.v; }); + + for (index = 0; index < test.length; index++) { + chr = test[index].k.charAt(0); + if (result.charAt(result.length - 1) !== chr) result += chr; + } + + return result !== 'DGBEFHACIJK'; +}); + +var FORCED = FAILS_ON_UNDEFINED || !FAILS_ON_NULL || !STRICT_METHOD || !STABLE_SORT; + +var getSortCompare = function (comparefn) { + return function (x, y) { + if (y === undefined) return -1; + if (x === undefined) return 1; + if (comparefn !== undefined) return +comparefn(x, y) || 0; + return toString(x) > toString(y) ? 1 : -1; + }; +}; + +// `Array.prototype.sort` method +// https://tc39.es/ecma262/#sec-array.prototype.sort +$({ target: 'Array', proto: true, forced: FORCED }, { + sort: function sort(comparefn) { + if (comparefn !== undefined) aCallable(comparefn); + + var array = toObject(this); + + if (STABLE_SORT) return comparefn === undefined ? nativeSort(array) : nativeSort(array, comparefn); + + var items = []; + var arrayLength = lengthOfArrayLike(array); + var itemsLength, index; + + for (index = 0; index < arrayLength; index++) { + if (index in array) push(items, array[index]); + } + + internalSort(items, getSortCompare(comparefn)); + + itemsLength = lengthOfArrayLike(items); + index = 0; + + while (index < itemsLength) array[index] = items[index++]; + while (index < arrayLength) deletePropertyOrThrow(array, index++); + + return array; + } +}); + + +/***/ }), + +/***/ "./node_modules/core-js-pure/modules/es.date.now.js": +/*!**********************************************************!*\ + !*** ./node_modules/core-js-pure/modules/es.date.now.js ***! + \**********************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +// TODO: Remove from `core-js@4` +var $ = __webpack_require__(/*! ../internals/export */ "./node_modules/core-js-pure/internals/export.js"); +var uncurryThis = __webpack_require__(/*! ../internals/function-uncurry-this */ "./node_modules/core-js-pure/internals/function-uncurry-this.js"); + +var $Date = Date; +var thisTimeValue = uncurryThis($Date.prototype.getTime); + +// `Date.now` method +// https://tc39.es/ecma262/#sec-date.now +$({ target: 'Date', stat: true }, { + now: function now() { + return thisTimeValue(new $Date()); + } +}); + + +/***/ }), + +/***/ "./node_modules/core-js-pure/modules/es.date.to-json.js": +/*!**************************************************************!*\ + !*** ./node_modules/core-js-pure/modules/es.date.to-json.js ***! + \**************************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var $ = __webpack_require__(/*! ../internals/export */ "./node_modules/core-js-pure/internals/export.js"); +var call = __webpack_require__(/*! ../internals/function-call */ "./node_modules/core-js-pure/internals/function-call.js"); +var toObject = __webpack_require__(/*! ../internals/to-object */ "./node_modules/core-js-pure/internals/to-object.js"); +var toPrimitive = __webpack_require__(/*! ../internals/to-primitive */ "./node_modules/core-js-pure/internals/to-primitive.js"); +var toISOString = __webpack_require__(/*! ../internals/date-to-iso-string */ "./node_modules/core-js-pure/internals/date-to-iso-string.js"); +var classof = __webpack_require__(/*! ../internals/classof-raw */ "./node_modules/core-js-pure/internals/classof-raw.js"); +var fails = __webpack_require__(/*! ../internals/fails */ "./node_modules/core-js-pure/internals/fails.js"); + +var FORCED = fails(function () { + return new Date(NaN).toJSON() !== null + || call(Date.prototype.toJSON, { toISOString: function () { return 1; } }) !== 1; +}); + +// `Date.prototype.toJSON` method +// https://tc39.es/ecma262/#sec-date.prototype.tojson +$({ target: 'Date', proto: true, forced: FORCED }, { + // eslint-disable-next-line no-unused-vars -- required for `.length` + toJSON: function toJSON(key) { + var O = toObject(this); + var pv = toPrimitive(O, 'number'); + return typeof pv == 'number' && !isFinite(pv) ? null : + (!('toISOString' in O) && classof(O) === 'Date') ? call(toISOString, O) : O.toISOString(); + } +}); + + +/***/ }), + +/***/ "./node_modules/core-js-pure/modules/es.date.to-primitive.js": +/*!*******************************************************************!*\ + !*** ./node_modules/core-js-pure/modules/es.date.to-primitive.js ***! + \*******************************************************************/ +/***/ (() => { + +// empty + + +/***/ }), + +/***/ "./node_modules/core-js-pure/modules/es.json.stringify.js": +/*!****************************************************************!*\ + !*** ./node_modules/core-js-pure/modules/es.json.stringify.js ***! + \****************************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var $ = __webpack_require__(/*! ../internals/export */ "./node_modules/core-js-pure/internals/export.js"); +var getBuiltIn = __webpack_require__(/*! ../internals/get-built-in */ "./node_modules/core-js-pure/internals/get-built-in.js"); +var apply = __webpack_require__(/*! ../internals/function-apply */ "./node_modules/core-js-pure/internals/function-apply.js"); +var call = __webpack_require__(/*! ../internals/function-call */ "./node_modules/core-js-pure/internals/function-call.js"); +var uncurryThis = __webpack_require__(/*! ../internals/function-uncurry-this */ "./node_modules/core-js-pure/internals/function-uncurry-this.js"); +var fails = __webpack_require__(/*! ../internals/fails */ "./node_modules/core-js-pure/internals/fails.js"); +var isCallable = __webpack_require__(/*! ../internals/is-callable */ "./node_modules/core-js-pure/internals/is-callable.js"); +var isSymbol = __webpack_require__(/*! ../internals/is-symbol */ "./node_modules/core-js-pure/internals/is-symbol.js"); +var arraySlice = __webpack_require__(/*! ../internals/array-slice */ "./node_modules/core-js-pure/internals/array-slice.js"); +var getReplacerFunction = __webpack_require__(/*! ../internals/get-json-replacer-function */ "./node_modules/core-js-pure/internals/get-json-replacer-function.js"); +var NATIVE_SYMBOL = __webpack_require__(/*! ../internals/symbol-constructor-detection */ "./node_modules/core-js-pure/internals/symbol-constructor-detection.js"); + +var $String = String; +var $stringify = getBuiltIn('JSON', 'stringify'); +var exec = uncurryThis(/./.exec); +var charAt = uncurryThis(''.charAt); +var charCodeAt = uncurryThis(''.charCodeAt); +var replace = uncurryThis(''.replace); +var numberToString = uncurryThis(1.0.toString); + +var tester = /[\uD800-\uDFFF]/g; +var low = /^[\uD800-\uDBFF]$/; +var hi = /^[\uDC00-\uDFFF]$/; + +var WRONG_SYMBOLS_CONVERSION = !NATIVE_SYMBOL || fails(function () { + var symbol = getBuiltIn('Symbol')('stringify detection'); + // MS Edge converts symbol values to JSON as {} + return $stringify([symbol]) !== '[null]' + // WebKit converts symbol values to JSON as null + || $stringify({ a: symbol }) !== '{}' + // V8 throws on boxed symbols + || $stringify(Object(symbol)) !== '{}'; +}); + +// https://github.com/tc39/proposal-well-formed-stringify +var ILL_FORMED_UNICODE = fails(function () { + return $stringify('\uDF06\uD834') !== '"\\udf06\\ud834"' + || $stringify('\uDEAD') !== '"\\udead"'; +}); + +var stringifyWithSymbolsFix = function (it, replacer) { + var args = arraySlice(arguments); + var $replacer = getReplacerFunction(replacer); + if (!isCallable($replacer) && (it === undefined || isSymbol(it))) return; // IE8 returns string on undefined + args[1] = function (key, value) { + // some old implementations (like WebKit) could pass numbers as keys + if (isCallable($replacer)) value = call($replacer, this, $String(key), value); + if (!isSymbol(value)) return value; + }; + return apply($stringify, null, args); +}; + +var fixIllFormed = function (match, offset, string) { + var prev = charAt(string, offset - 1); + var next = charAt(string, offset + 1); + if ((exec(low, match) && !exec(hi, next)) || (exec(hi, match) && !exec(low, prev))) { + return '\\u' + numberToString(charCodeAt(match, 0), 16); + } return match; +}; + +if ($stringify) { + // `JSON.stringify` method + // https://tc39.es/ecma262/#sec-json.stringify + $({ target: 'JSON', stat: true, arity: 3, forced: WRONG_SYMBOLS_CONVERSION || ILL_FORMED_UNICODE }, { + // eslint-disable-next-line no-unused-vars -- required for `.length` + stringify: function stringify(it, replacer, space) { + var args = arraySlice(arguments); + var result = apply(WRONG_SYMBOLS_CONVERSION ? stringifyWithSymbolsFix : $stringify, null, args); + return ILL_FORMED_UNICODE && typeof result == 'string' ? replace(result, tester, fixIllFormed) : result; + } + }); +} + + +/***/ }), + +/***/ "./node_modules/core-js-pure/modules/es.json.to-string-tag.js": +/*!********************************************************************!*\ + !*** ./node_modules/core-js-pure/modules/es.json.to-string-tag.js ***! + \********************************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var globalThis = __webpack_require__(/*! ../internals/global-this */ "./node_modules/core-js-pure/internals/global-this.js"); +var setToStringTag = __webpack_require__(/*! ../internals/set-to-string-tag */ "./node_modules/core-js-pure/internals/set-to-string-tag.js"); + +// JSON[@@toStringTag] property +// https://tc39.es/ecma262/#sec-json-@@tostringtag +setToStringTag(globalThis.JSON, 'JSON', true); + + +/***/ }), + +/***/ "./node_modules/core-js-pure/modules/es.math.to-string-tag.js": +/*!********************************************************************!*\ + !*** ./node_modules/core-js-pure/modules/es.math.to-string-tag.js ***! + \********************************************************************/ +/***/ (() => { + +// empty + + +/***/ }), + +/***/ "./node_modules/core-js-pure/modules/es.object.assign.js": +/*!***************************************************************!*\ + !*** ./node_modules/core-js-pure/modules/es.object.assign.js ***! + \***************************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var $ = __webpack_require__(/*! ../internals/export */ "./node_modules/core-js-pure/internals/export.js"); +var assign = __webpack_require__(/*! ../internals/object-assign */ "./node_modules/core-js-pure/internals/object-assign.js"); + +// `Object.assign` method +// https://tc39.es/ecma262/#sec-object.assign +// eslint-disable-next-line es/no-object-assign -- required for testing +$({ target: 'Object', stat: true, arity: 2, forced: Object.assign !== assign }, { + assign: assign +}); + + +/***/ }), + +/***/ "./node_modules/core-js-pure/modules/es.object.define-properties.js": +/*!**************************************************************************!*\ + !*** ./node_modules/core-js-pure/modules/es.object.define-properties.js ***! + \**************************************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var $ = __webpack_require__(/*! ../internals/export */ "./node_modules/core-js-pure/internals/export.js"); +var DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ "./node_modules/core-js-pure/internals/descriptors.js"); +var defineProperties = (__webpack_require__(/*! ../internals/object-define-properties */ "./node_modules/core-js-pure/internals/object-define-properties.js").f); + +// `Object.defineProperties` method +// https://tc39.es/ecma262/#sec-object.defineproperties +// eslint-disable-next-line es/no-object-defineproperties -- safe +$({ target: 'Object', stat: true, forced: Object.defineProperties !== defineProperties, sham: !DESCRIPTORS }, { + defineProperties: defineProperties +}); + + +/***/ }), + +/***/ "./node_modules/core-js-pure/modules/es.object.define-property.js": +/*!************************************************************************!*\ + !*** ./node_modules/core-js-pure/modules/es.object.define-property.js ***! + \************************************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var $ = __webpack_require__(/*! ../internals/export */ "./node_modules/core-js-pure/internals/export.js"); +var DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ "./node_modules/core-js-pure/internals/descriptors.js"); +var defineProperty = (__webpack_require__(/*! ../internals/object-define-property */ "./node_modules/core-js-pure/internals/object-define-property.js").f); + +// `Object.defineProperty` method +// https://tc39.es/ecma262/#sec-object.defineproperty +// eslint-disable-next-line es/no-object-defineproperty -- safe +$({ target: 'Object', stat: true, forced: Object.defineProperty !== defineProperty, sham: !DESCRIPTORS }, { + defineProperty: defineProperty +}); + + +/***/ }), + +/***/ "./node_modules/core-js-pure/modules/es.object.get-own-property-descriptor.js": +/*!************************************************************************************!*\ + !*** ./node_modules/core-js-pure/modules/es.object.get-own-property-descriptor.js ***! + \************************************************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var $ = __webpack_require__(/*! ../internals/export */ "./node_modules/core-js-pure/internals/export.js"); +var fails = __webpack_require__(/*! ../internals/fails */ "./node_modules/core-js-pure/internals/fails.js"); +var toIndexedObject = __webpack_require__(/*! ../internals/to-indexed-object */ "./node_modules/core-js-pure/internals/to-indexed-object.js"); +var nativeGetOwnPropertyDescriptor = (__webpack_require__(/*! ../internals/object-get-own-property-descriptor */ "./node_modules/core-js-pure/internals/object-get-own-property-descriptor.js").f); +var DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ "./node_modules/core-js-pure/internals/descriptors.js"); + +var FORCED = !DESCRIPTORS || fails(function () { nativeGetOwnPropertyDescriptor(1); }); + +// `Object.getOwnPropertyDescriptor` method +// https://tc39.es/ecma262/#sec-object.getownpropertydescriptor +$({ target: 'Object', stat: true, forced: FORCED, sham: !DESCRIPTORS }, { + getOwnPropertyDescriptor: function getOwnPropertyDescriptor(it, key) { + return nativeGetOwnPropertyDescriptor(toIndexedObject(it), key); + } +}); + + +/***/ }), + +/***/ "./node_modules/core-js-pure/modules/es.object.get-own-property-descriptors.js": +/*!*************************************************************************************!*\ + !*** ./node_modules/core-js-pure/modules/es.object.get-own-property-descriptors.js ***! + \*************************************************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var $ = __webpack_require__(/*! ../internals/export */ "./node_modules/core-js-pure/internals/export.js"); +var DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ "./node_modules/core-js-pure/internals/descriptors.js"); +var ownKeys = __webpack_require__(/*! ../internals/own-keys */ "./node_modules/core-js-pure/internals/own-keys.js"); +var toIndexedObject = __webpack_require__(/*! ../internals/to-indexed-object */ "./node_modules/core-js-pure/internals/to-indexed-object.js"); +var getOwnPropertyDescriptorModule = __webpack_require__(/*! ../internals/object-get-own-property-descriptor */ "./node_modules/core-js-pure/internals/object-get-own-property-descriptor.js"); +var createProperty = __webpack_require__(/*! ../internals/create-property */ "./node_modules/core-js-pure/internals/create-property.js"); + +// `Object.getOwnPropertyDescriptors` method +// https://tc39.es/ecma262/#sec-object.getownpropertydescriptors +$({ target: 'Object', stat: true, sham: !DESCRIPTORS }, { + getOwnPropertyDescriptors: function getOwnPropertyDescriptors(object) { + var O = toIndexedObject(object); + var getOwnPropertyDescriptor = getOwnPropertyDescriptorModule.f; + var keys = ownKeys(O); + var result = {}; + var index = 0; + var key, descriptor; + while (keys.length > index) { + descriptor = getOwnPropertyDescriptor(O, key = keys[index++]); + if (descriptor !== undefined) createProperty(result, key, descriptor); + } + return result; + } +}); + + +/***/ }), + +/***/ "./node_modules/core-js-pure/modules/es.object.get-own-property-symbols.js": +/*!*********************************************************************************!*\ + !*** ./node_modules/core-js-pure/modules/es.object.get-own-property-symbols.js ***! + \*********************************************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var $ = __webpack_require__(/*! ../internals/export */ "./node_modules/core-js-pure/internals/export.js"); +var NATIVE_SYMBOL = __webpack_require__(/*! ../internals/symbol-constructor-detection */ "./node_modules/core-js-pure/internals/symbol-constructor-detection.js"); +var fails = __webpack_require__(/*! ../internals/fails */ "./node_modules/core-js-pure/internals/fails.js"); +var getOwnPropertySymbolsModule = __webpack_require__(/*! ../internals/object-get-own-property-symbols */ "./node_modules/core-js-pure/internals/object-get-own-property-symbols.js"); +var toObject = __webpack_require__(/*! ../internals/to-object */ "./node_modules/core-js-pure/internals/to-object.js"); + +// V8 ~ Chrome 38 and 39 `Object.getOwnPropertySymbols` fails on primitives +// https://bugs.chromium.org/p/v8/issues/detail?id=3443 +var FORCED = !NATIVE_SYMBOL || fails(function () { getOwnPropertySymbolsModule.f(1); }); + +// `Object.getOwnPropertySymbols` method +// https://tc39.es/ecma262/#sec-object.getownpropertysymbols +$({ target: 'Object', stat: true, forced: FORCED }, { + getOwnPropertySymbols: function getOwnPropertySymbols(it) { + var $getOwnPropertySymbols = getOwnPropertySymbolsModule.f; + return $getOwnPropertySymbols ? $getOwnPropertySymbols(toObject(it)) : []; + } +}); + + +/***/ }), + +/***/ "./node_modules/core-js-pure/modules/es.object.keys.js": +/*!*************************************************************!*\ + !*** ./node_modules/core-js-pure/modules/es.object.keys.js ***! + \*************************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var $ = __webpack_require__(/*! ../internals/export */ "./node_modules/core-js-pure/internals/export.js"); +var toObject = __webpack_require__(/*! ../internals/to-object */ "./node_modules/core-js-pure/internals/to-object.js"); +var nativeKeys = __webpack_require__(/*! ../internals/object-keys */ "./node_modules/core-js-pure/internals/object-keys.js"); +var fails = __webpack_require__(/*! ../internals/fails */ "./node_modules/core-js-pure/internals/fails.js"); + +var FAILS_ON_PRIMITIVES = fails(function () { nativeKeys(1); }); + +// `Object.keys` method +// https://tc39.es/ecma262/#sec-object.keys +$({ target: 'Object', stat: true, forced: FAILS_ON_PRIMITIVES }, { + keys: function keys(it) { + return nativeKeys(toObject(it)); + } +}); + + +/***/ }), + +/***/ "./node_modules/core-js-pure/modules/es.object.to-string.js": +/*!******************************************************************!*\ + !*** ./node_modules/core-js-pure/modules/es.object.to-string.js ***! + \******************************************************************/ +/***/ (() => { + +// empty + + +/***/ }), + +/***/ "./node_modules/core-js-pure/modules/es.promise.all-settled.js": +/*!*********************************************************************!*\ + !*** ./node_modules/core-js-pure/modules/es.promise.all-settled.js ***! + \*********************************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var $ = __webpack_require__(/*! ../internals/export */ "./node_modules/core-js-pure/internals/export.js"); +var call = __webpack_require__(/*! ../internals/function-call */ "./node_modules/core-js-pure/internals/function-call.js"); +var aCallable = __webpack_require__(/*! ../internals/a-callable */ "./node_modules/core-js-pure/internals/a-callable.js"); +var newPromiseCapabilityModule = __webpack_require__(/*! ../internals/new-promise-capability */ "./node_modules/core-js-pure/internals/new-promise-capability.js"); +var perform = __webpack_require__(/*! ../internals/perform */ "./node_modules/core-js-pure/internals/perform.js"); +var iterate = __webpack_require__(/*! ../internals/iterate */ "./node_modules/core-js-pure/internals/iterate.js"); +var PROMISE_STATICS_INCORRECT_ITERATION = __webpack_require__(/*! ../internals/promise-statics-incorrect-iteration */ "./node_modules/core-js-pure/internals/promise-statics-incorrect-iteration.js"); + +// `Promise.allSettled` method +// https://tc39.es/ecma262/#sec-promise.allsettled +$({ target: 'Promise', stat: true, forced: PROMISE_STATICS_INCORRECT_ITERATION }, { + allSettled: function allSettled(iterable) { + var C = this; + var capability = newPromiseCapabilityModule.f(C); + var resolve = capability.resolve; + var reject = capability.reject; + var result = perform(function () { + var promiseResolve = aCallable(C.resolve); + var values = []; + var counter = 0; + var remaining = 1; + iterate(iterable, function (promise) { + var index = counter++; + var alreadyCalled = false; + remaining++; + call(promiseResolve, C, promise).then(function (value) { + if (alreadyCalled) return; + alreadyCalled = true; + values[index] = { status: 'fulfilled', value: value }; + --remaining || resolve(values); + }, function (error) { + if (alreadyCalled) return; + alreadyCalled = true; + values[index] = { status: 'rejected', reason: error }; + --remaining || resolve(values); + }); + }); + --remaining || resolve(values); + }); + if (result.error) reject(result.value); + return capability.promise; + } +}); + + +/***/ }), + +/***/ "./node_modules/core-js-pure/modules/es.promise.all.js": +/*!*************************************************************!*\ + !*** ./node_modules/core-js-pure/modules/es.promise.all.js ***! + \*************************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var $ = __webpack_require__(/*! ../internals/export */ "./node_modules/core-js-pure/internals/export.js"); +var call = __webpack_require__(/*! ../internals/function-call */ "./node_modules/core-js-pure/internals/function-call.js"); +var aCallable = __webpack_require__(/*! ../internals/a-callable */ "./node_modules/core-js-pure/internals/a-callable.js"); +var newPromiseCapabilityModule = __webpack_require__(/*! ../internals/new-promise-capability */ "./node_modules/core-js-pure/internals/new-promise-capability.js"); +var perform = __webpack_require__(/*! ../internals/perform */ "./node_modules/core-js-pure/internals/perform.js"); +var iterate = __webpack_require__(/*! ../internals/iterate */ "./node_modules/core-js-pure/internals/iterate.js"); +var PROMISE_STATICS_INCORRECT_ITERATION = __webpack_require__(/*! ../internals/promise-statics-incorrect-iteration */ "./node_modules/core-js-pure/internals/promise-statics-incorrect-iteration.js"); + +// `Promise.all` method +// https://tc39.es/ecma262/#sec-promise.all +$({ target: 'Promise', stat: true, forced: PROMISE_STATICS_INCORRECT_ITERATION }, { + all: function all(iterable) { + var C = this; + var capability = newPromiseCapabilityModule.f(C); + var resolve = capability.resolve; + var reject = capability.reject; + var result = perform(function () { + var $promiseResolve = aCallable(C.resolve); + var values = []; + var counter = 0; + var remaining = 1; + iterate(iterable, function (promise) { + var index = counter++; + var alreadyCalled = false; + remaining++; + call($promiseResolve, C, promise).then(function (value) { + if (alreadyCalled) return; + alreadyCalled = true; + values[index] = value; + --remaining || resolve(values); + }, reject); + }); + --remaining || resolve(values); + }); + if (result.error) reject(result.value); + return capability.promise; + } +}); + + +/***/ }), + +/***/ "./node_modules/core-js-pure/modules/es.promise.any.js": +/*!*************************************************************!*\ + !*** ./node_modules/core-js-pure/modules/es.promise.any.js ***! + \*************************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var $ = __webpack_require__(/*! ../internals/export */ "./node_modules/core-js-pure/internals/export.js"); +var call = __webpack_require__(/*! ../internals/function-call */ "./node_modules/core-js-pure/internals/function-call.js"); +var aCallable = __webpack_require__(/*! ../internals/a-callable */ "./node_modules/core-js-pure/internals/a-callable.js"); +var getBuiltIn = __webpack_require__(/*! ../internals/get-built-in */ "./node_modules/core-js-pure/internals/get-built-in.js"); +var newPromiseCapabilityModule = __webpack_require__(/*! ../internals/new-promise-capability */ "./node_modules/core-js-pure/internals/new-promise-capability.js"); +var perform = __webpack_require__(/*! ../internals/perform */ "./node_modules/core-js-pure/internals/perform.js"); +var iterate = __webpack_require__(/*! ../internals/iterate */ "./node_modules/core-js-pure/internals/iterate.js"); +var PROMISE_STATICS_INCORRECT_ITERATION = __webpack_require__(/*! ../internals/promise-statics-incorrect-iteration */ "./node_modules/core-js-pure/internals/promise-statics-incorrect-iteration.js"); + +var PROMISE_ANY_ERROR = 'No one promise resolved'; + +// `Promise.any` method +// https://tc39.es/ecma262/#sec-promise.any +$({ target: 'Promise', stat: true, forced: PROMISE_STATICS_INCORRECT_ITERATION }, { + any: function any(iterable) { + var C = this; + var AggregateError = getBuiltIn('AggregateError'); + var capability = newPromiseCapabilityModule.f(C); + var resolve = capability.resolve; + var reject = capability.reject; + var result = perform(function () { + var promiseResolve = aCallable(C.resolve); + var errors = []; + var counter = 0; + var remaining = 1; + var alreadyResolved = false; + iterate(iterable, function (promise) { + var index = counter++; + var alreadyRejected = false; + remaining++; + call(promiseResolve, C, promise).then(function (value) { + if (alreadyRejected || alreadyResolved) return; + alreadyResolved = true; + resolve(value); + }, function (error) { + if (alreadyRejected || alreadyResolved) return; + alreadyRejected = true; + errors[index] = error; + --remaining || reject(new AggregateError(errors, PROMISE_ANY_ERROR)); + }); + }); + --remaining || reject(new AggregateError(errors, PROMISE_ANY_ERROR)); + }); + if (result.error) reject(result.value); + return capability.promise; + } +}); + + +/***/ }), + +/***/ "./node_modules/core-js-pure/modules/es.promise.catch.js": +/*!***************************************************************!*\ + !*** ./node_modules/core-js-pure/modules/es.promise.catch.js ***! + \***************************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var $ = __webpack_require__(/*! ../internals/export */ "./node_modules/core-js-pure/internals/export.js"); +var IS_PURE = __webpack_require__(/*! ../internals/is-pure */ "./node_modules/core-js-pure/internals/is-pure.js"); +var FORCED_PROMISE_CONSTRUCTOR = (__webpack_require__(/*! ../internals/promise-constructor-detection */ "./node_modules/core-js-pure/internals/promise-constructor-detection.js").CONSTRUCTOR); +var NativePromiseConstructor = __webpack_require__(/*! ../internals/promise-native-constructor */ "./node_modules/core-js-pure/internals/promise-native-constructor.js"); +var getBuiltIn = __webpack_require__(/*! ../internals/get-built-in */ "./node_modules/core-js-pure/internals/get-built-in.js"); +var isCallable = __webpack_require__(/*! ../internals/is-callable */ "./node_modules/core-js-pure/internals/is-callable.js"); +var defineBuiltIn = __webpack_require__(/*! ../internals/define-built-in */ "./node_modules/core-js-pure/internals/define-built-in.js"); + +var NativePromisePrototype = NativePromiseConstructor && NativePromiseConstructor.prototype; + +// `Promise.prototype.catch` method +// https://tc39.es/ecma262/#sec-promise.prototype.catch +$({ target: 'Promise', proto: true, forced: FORCED_PROMISE_CONSTRUCTOR, real: true }, { + 'catch': function (onRejected) { + return this.then(undefined, onRejected); + } +}); + +// makes sure that native promise-based APIs `Promise#catch` properly works with patched `Promise#then` +if (!IS_PURE && isCallable(NativePromiseConstructor)) { + var method = getBuiltIn('Promise').prototype['catch']; + if (NativePromisePrototype['catch'] !== method) { + defineBuiltIn(NativePromisePrototype, 'catch', method, { unsafe: true }); + } +} + + +/***/ }), + +/***/ "./node_modules/core-js-pure/modules/es.promise.constructor.js": +/*!*********************************************************************!*\ + !*** ./node_modules/core-js-pure/modules/es.promise.constructor.js ***! + \*********************************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var $ = __webpack_require__(/*! ../internals/export */ "./node_modules/core-js-pure/internals/export.js"); +var IS_PURE = __webpack_require__(/*! ../internals/is-pure */ "./node_modules/core-js-pure/internals/is-pure.js"); +var IS_NODE = __webpack_require__(/*! ../internals/environment-is-node */ "./node_modules/core-js-pure/internals/environment-is-node.js"); +var globalThis = __webpack_require__(/*! ../internals/global-this */ "./node_modules/core-js-pure/internals/global-this.js"); +var call = __webpack_require__(/*! ../internals/function-call */ "./node_modules/core-js-pure/internals/function-call.js"); +var defineBuiltIn = __webpack_require__(/*! ../internals/define-built-in */ "./node_modules/core-js-pure/internals/define-built-in.js"); +var setPrototypeOf = __webpack_require__(/*! ../internals/object-set-prototype-of */ "./node_modules/core-js-pure/internals/object-set-prototype-of.js"); +var setToStringTag = __webpack_require__(/*! ../internals/set-to-string-tag */ "./node_modules/core-js-pure/internals/set-to-string-tag.js"); +var setSpecies = __webpack_require__(/*! ../internals/set-species */ "./node_modules/core-js-pure/internals/set-species.js"); +var aCallable = __webpack_require__(/*! ../internals/a-callable */ "./node_modules/core-js-pure/internals/a-callable.js"); +var isCallable = __webpack_require__(/*! ../internals/is-callable */ "./node_modules/core-js-pure/internals/is-callable.js"); +var isObject = __webpack_require__(/*! ../internals/is-object */ "./node_modules/core-js-pure/internals/is-object.js"); +var anInstance = __webpack_require__(/*! ../internals/an-instance */ "./node_modules/core-js-pure/internals/an-instance.js"); +var speciesConstructor = __webpack_require__(/*! ../internals/species-constructor */ "./node_modules/core-js-pure/internals/species-constructor.js"); +var task = (__webpack_require__(/*! ../internals/task */ "./node_modules/core-js-pure/internals/task.js").set); +var microtask = __webpack_require__(/*! ../internals/microtask */ "./node_modules/core-js-pure/internals/microtask.js"); +var hostReportErrors = __webpack_require__(/*! ../internals/host-report-errors */ "./node_modules/core-js-pure/internals/host-report-errors.js"); +var perform = __webpack_require__(/*! ../internals/perform */ "./node_modules/core-js-pure/internals/perform.js"); +var Queue = __webpack_require__(/*! ../internals/queue */ "./node_modules/core-js-pure/internals/queue.js"); +var InternalStateModule = __webpack_require__(/*! ../internals/internal-state */ "./node_modules/core-js-pure/internals/internal-state.js"); +var NativePromiseConstructor = __webpack_require__(/*! ../internals/promise-native-constructor */ "./node_modules/core-js-pure/internals/promise-native-constructor.js"); +var PromiseConstructorDetection = __webpack_require__(/*! ../internals/promise-constructor-detection */ "./node_modules/core-js-pure/internals/promise-constructor-detection.js"); +var newPromiseCapabilityModule = __webpack_require__(/*! ../internals/new-promise-capability */ "./node_modules/core-js-pure/internals/new-promise-capability.js"); + +var PROMISE = 'Promise'; +var FORCED_PROMISE_CONSTRUCTOR = PromiseConstructorDetection.CONSTRUCTOR; +var NATIVE_PROMISE_REJECTION_EVENT = PromiseConstructorDetection.REJECTION_EVENT; +var NATIVE_PROMISE_SUBCLASSING = PromiseConstructorDetection.SUBCLASSING; +var getInternalPromiseState = InternalStateModule.getterFor(PROMISE); +var setInternalState = InternalStateModule.set; +var NativePromisePrototype = NativePromiseConstructor && NativePromiseConstructor.prototype; +var PromiseConstructor = NativePromiseConstructor; +var PromisePrototype = NativePromisePrototype; +var TypeError = globalThis.TypeError; +var document = globalThis.document; +var process = globalThis.process; +var newPromiseCapability = newPromiseCapabilityModule.f; +var newGenericPromiseCapability = newPromiseCapability; + +var DISPATCH_EVENT = !!(document && document.createEvent && globalThis.dispatchEvent); +var UNHANDLED_REJECTION = 'unhandledrejection'; +var REJECTION_HANDLED = 'rejectionhandled'; +var PENDING = 0; +var FULFILLED = 1; +var REJECTED = 2; +var HANDLED = 1; +var UNHANDLED = 2; + +var Internal, OwnPromiseCapability, PromiseWrapper, nativeThen; + +// helpers +var isThenable = function (it) { + var then; + return isObject(it) && isCallable(then = it.then) ? then : false; +}; + +var callReaction = function (reaction, state) { + var value = state.value; + var ok = state.state === FULFILLED; + var handler = ok ? reaction.ok : reaction.fail; + var resolve = reaction.resolve; + var reject = reaction.reject; + var domain = reaction.domain; + var result, then, exited; + try { + if (handler) { + if (!ok) { + if (state.rejection === UNHANDLED) onHandleUnhandled(state); + state.rejection = HANDLED; + } + if (handler === true) result = value; + else { + if (domain) domain.enter(); + result = handler(value); // can throw + if (domain) { + domain.exit(); + exited = true; + } + } + if (result === reaction.promise) { + reject(new TypeError('Promise-chain cycle')); + } else if (then = isThenable(result)) { + call(then, result, resolve, reject); + } else resolve(result); + } else reject(value); + } catch (error) { + if (domain && !exited) domain.exit(); + reject(error); + } +}; + +var notify = function (state, isReject) { + if (state.notified) return; + state.notified = true; + microtask(function () { + var reactions = state.reactions; + var reaction; + while (reaction = reactions.get()) { + callReaction(reaction, state); + } + state.notified = false; + if (isReject && !state.rejection) onUnhandled(state); + }); +}; + +var dispatchEvent = function (name, promise, reason) { + var event, handler; + if (DISPATCH_EVENT) { + event = document.createEvent('Event'); + event.promise = promise; + event.reason = reason; + event.initEvent(name, false, true); + globalThis.dispatchEvent(event); + } else event = { promise: promise, reason: reason }; + if (!NATIVE_PROMISE_REJECTION_EVENT && (handler = globalThis['on' + name])) handler(event); + else if (name === UNHANDLED_REJECTION) hostReportErrors('Unhandled promise rejection', reason); +}; + +var onUnhandled = function (state) { + call(task, globalThis, function () { + var promise = state.facade; + var value = state.value; + var IS_UNHANDLED = isUnhandled(state); + var result; + if (IS_UNHANDLED) { + result = perform(function () { + if (IS_NODE) { + process.emit('unhandledRejection', value, promise); + } else dispatchEvent(UNHANDLED_REJECTION, promise, value); + }); + // Browsers should not trigger `rejectionHandled` event if it was handled here, NodeJS - should + state.rejection = IS_NODE || isUnhandled(state) ? UNHANDLED : HANDLED; + if (result.error) throw result.value; + } + }); +}; + +var isUnhandled = function (state) { + return state.rejection !== HANDLED && !state.parent; +}; + +var onHandleUnhandled = function (state) { + call(task, globalThis, function () { + var promise = state.facade; + if (IS_NODE) { + process.emit('rejectionHandled', promise); + } else dispatchEvent(REJECTION_HANDLED, promise, state.value); + }); +}; + +var bind = function (fn, state, unwrap) { + return function (value) { + fn(state, value, unwrap); + }; +}; + +var internalReject = function (state, value, unwrap) { + if (state.done) return; + state.done = true; + if (unwrap) state = unwrap; + state.value = value; + state.state = REJECTED; + notify(state, true); +}; + +var internalResolve = function (state, value, unwrap) { + if (state.done) return; + state.done = true; + if (unwrap) state = unwrap; + try { + if (state.facade === value) throw new TypeError("Promise can't be resolved itself"); + var then = isThenable(value); + if (then) { + microtask(function () { + var wrapper = { done: false }; + try { + call(then, value, + bind(internalResolve, wrapper, state), + bind(internalReject, wrapper, state) + ); + } catch (error) { + internalReject(wrapper, error, state); + } + }); + } else { + state.value = value; + state.state = FULFILLED; + notify(state, false); + } + } catch (error) { + internalReject({ done: false }, error, state); + } +}; + +// constructor polyfill +if (FORCED_PROMISE_CONSTRUCTOR) { + // 25.4.3.1 Promise(executor) + PromiseConstructor = function Promise(executor) { + anInstance(this, PromisePrototype); + aCallable(executor); + call(Internal, this); + var state = getInternalPromiseState(this); + try { + executor(bind(internalResolve, state), bind(internalReject, state)); + } catch (error) { + internalReject(state, error); + } + }; + + PromisePrototype = PromiseConstructor.prototype; + + // eslint-disable-next-line no-unused-vars -- required for `.length` + Internal = function Promise(executor) { + setInternalState(this, { + type: PROMISE, + done: false, + notified: false, + parent: false, + reactions: new Queue(), + rejection: false, + state: PENDING, + value: null + }); + }; + + // `Promise.prototype.then` method + // https://tc39.es/ecma262/#sec-promise.prototype.then + Internal.prototype = defineBuiltIn(PromisePrototype, 'then', function then(onFulfilled, onRejected) { + var state = getInternalPromiseState(this); + var reaction = newPromiseCapability(speciesConstructor(this, PromiseConstructor)); + state.parent = true; + reaction.ok = isCallable(onFulfilled) ? onFulfilled : true; + reaction.fail = isCallable(onRejected) && onRejected; + reaction.domain = IS_NODE ? process.domain : undefined; + if (state.state === PENDING) state.reactions.add(reaction); + else microtask(function () { + callReaction(reaction, state); + }); + return reaction.promise; + }); + + OwnPromiseCapability = function () { + var promise = new Internal(); + var state = getInternalPromiseState(promise); + this.promise = promise; + this.resolve = bind(internalResolve, state); + this.reject = bind(internalReject, state); + }; + + newPromiseCapabilityModule.f = newPromiseCapability = function (C) { + return C === PromiseConstructor || C === PromiseWrapper + ? new OwnPromiseCapability(C) + : newGenericPromiseCapability(C); + }; + + if (!IS_PURE && isCallable(NativePromiseConstructor) && NativePromisePrototype !== Object.prototype) { + nativeThen = NativePromisePrototype.then; + + if (!NATIVE_PROMISE_SUBCLASSING) { + // make `Promise#then` return a polyfilled `Promise` for native promise-based APIs + defineBuiltIn(NativePromisePrototype, 'then', function then(onFulfilled, onRejected) { + var that = this; + return new PromiseConstructor(function (resolve, reject) { + call(nativeThen, that, resolve, reject); + }).then(onFulfilled, onRejected); + // https://github.com/zloirock/core-js/issues/640 + }, { unsafe: true }); + } + + // make `.constructor === Promise` work for native promise-based APIs + try { + delete NativePromisePrototype.constructor; + } catch (error) { /* empty */ } + + // make `instanceof Promise` work for native promise-based APIs + if (setPrototypeOf) { + setPrototypeOf(NativePromisePrototype, PromisePrototype); + } + } +} + +$({ global: true, constructor: true, wrap: true, forced: FORCED_PROMISE_CONSTRUCTOR }, { + Promise: PromiseConstructor +}); + +setToStringTag(PromiseConstructor, PROMISE, false, true); +setSpecies(PROMISE); + + +/***/ }), + +/***/ "./node_modules/core-js-pure/modules/es.promise.finally.js": +/*!*****************************************************************!*\ + !*** ./node_modules/core-js-pure/modules/es.promise.finally.js ***! + \*****************************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var $ = __webpack_require__(/*! ../internals/export */ "./node_modules/core-js-pure/internals/export.js"); +var IS_PURE = __webpack_require__(/*! ../internals/is-pure */ "./node_modules/core-js-pure/internals/is-pure.js"); +var NativePromiseConstructor = __webpack_require__(/*! ../internals/promise-native-constructor */ "./node_modules/core-js-pure/internals/promise-native-constructor.js"); +var fails = __webpack_require__(/*! ../internals/fails */ "./node_modules/core-js-pure/internals/fails.js"); +var getBuiltIn = __webpack_require__(/*! ../internals/get-built-in */ "./node_modules/core-js-pure/internals/get-built-in.js"); +var isCallable = __webpack_require__(/*! ../internals/is-callable */ "./node_modules/core-js-pure/internals/is-callable.js"); +var speciesConstructor = __webpack_require__(/*! ../internals/species-constructor */ "./node_modules/core-js-pure/internals/species-constructor.js"); +var promiseResolve = __webpack_require__(/*! ../internals/promise-resolve */ "./node_modules/core-js-pure/internals/promise-resolve.js"); +var defineBuiltIn = __webpack_require__(/*! ../internals/define-built-in */ "./node_modules/core-js-pure/internals/define-built-in.js"); + +var NativePromisePrototype = NativePromiseConstructor && NativePromiseConstructor.prototype; + +// Safari bug https://bugs.webkit.org/show_bug.cgi?id=200829 +var NON_GENERIC = !!NativePromiseConstructor && fails(function () { + // eslint-disable-next-line unicorn/no-thenable -- required for testing + NativePromisePrototype['finally'].call({ then: function () { /* empty */ } }, function () { /* empty */ }); +}); + +// `Promise.prototype.finally` method +// https://tc39.es/ecma262/#sec-promise.prototype.finally +$({ target: 'Promise', proto: true, real: true, forced: NON_GENERIC }, { + 'finally': function (onFinally) { + var C = speciesConstructor(this, getBuiltIn('Promise')); + var isFunction = isCallable(onFinally); + return this.then( + isFunction ? function (x) { + return promiseResolve(C, onFinally()).then(function () { return x; }); + } : onFinally, + isFunction ? function (e) { + return promiseResolve(C, onFinally()).then(function () { throw e; }); + } : onFinally + ); + } +}); + +// makes sure that native promise-based APIs `Promise#finally` properly works with patched `Promise#then` +if (!IS_PURE && isCallable(NativePromiseConstructor)) { + var method = getBuiltIn('Promise').prototype['finally']; + if (NativePromisePrototype['finally'] !== method) { + defineBuiltIn(NativePromisePrototype, 'finally', method, { unsafe: true }); + } +} + + +/***/ }), + +/***/ "./node_modules/core-js-pure/modules/es.promise.js": +/*!*********************************************************!*\ + !*** ./node_modules/core-js-pure/modules/es.promise.js ***! + \*********************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +// TODO: Remove this module from `core-js@4` since it's split to modules listed below +__webpack_require__(/*! ../modules/es.promise.constructor */ "./node_modules/core-js-pure/modules/es.promise.constructor.js"); +__webpack_require__(/*! ../modules/es.promise.all */ "./node_modules/core-js-pure/modules/es.promise.all.js"); +__webpack_require__(/*! ../modules/es.promise.catch */ "./node_modules/core-js-pure/modules/es.promise.catch.js"); +__webpack_require__(/*! ../modules/es.promise.race */ "./node_modules/core-js-pure/modules/es.promise.race.js"); +__webpack_require__(/*! ../modules/es.promise.reject */ "./node_modules/core-js-pure/modules/es.promise.reject.js"); +__webpack_require__(/*! ../modules/es.promise.resolve */ "./node_modules/core-js-pure/modules/es.promise.resolve.js"); + + +/***/ }), + +/***/ "./node_modules/core-js-pure/modules/es.promise.race.js": +/*!**************************************************************!*\ + !*** ./node_modules/core-js-pure/modules/es.promise.race.js ***! + \**************************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var $ = __webpack_require__(/*! ../internals/export */ "./node_modules/core-js-pure/internals/export.js"); +var call = __webpack_require__(/*! ../internals/function-call */ "./node_modules/core-js-pure/internals/function-call.js"); +var aCallable = __webpack_require__(/*! ../internals/a-callable */ "./node_modules/core-js-pure/internals/a-callable.js"); +var newPromiseCapabilityModule = __webpack_require__(/*! ../internals/new-promise-capability */ "./node_modules/core-js-pure/internals/new-promise-capability.js"); +var perform = __webpack_require__(/*! ../internals/perform */ "./node_modules/core-js-pure/internals/perform.js"); +var iterate = __webpack_require__(/*! ../internals/iterate */ "./node_modules/core-js-pure/internals/iterate.js"); +var PROMISE_STATICS_INCORRECT_ITERATION = __webpack_require__(/*! ../internals/promise-statics-incorrect-iteration */ "./node_modules/core-js-pure/internals/promise-statics-incorrect-iteration.js"); + +// `Promise.race` method +// https://tc39.es/ecma262/#sec-promise.race +$({ target: 'Promise', stat: true, forced: PROMISE_STATICS_INCORRECT_ITERATION }, { + race: function race(iterable) { + var C = this; + var capability = newPromiseCapabilityModule.f(C); + var reject = capability.reject; + var result = perform(function () { + var $promiseResolve = aCallable(C.resolve); + iterate(iterable, function (promise) { + call($promiseResolve, C, promise).then(capability.resolve, reject); + }); + }); + if (result.error) reject(result.value); + return capability.promise; + } +}); + + +/***/ }), + +/***/ "./node_modules/core-js-pure/modules/es.promise.reject.js": +/*!****************************************************************!*\ + !*** ./node_modules/core-js-pure/modules/es.promise.reject.js ***! + \****************************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var $ = __webpack_require__(/*! ../internals/export */ "./node_modules/core-js-pure/internals/export.js"); +var newPromiseCapabilityModule = __webpack_require__(/*! ../internals/new-promise-capability */ "./node_modules/core-js-pure/internals/new-promise-capability.js"); +var FORCED_PROMISE_CONSTRUCTOR = (__webpack_require__(/*! ../internals/promise-constructor-detection */ "./node_modules/core-js-pure/internals/promise-constructor-detection.js").CONSTRUCTOR); + +// `Promise.reject` method +// https://tc39.es/ecma262/#sec-promise.reject +$({ target: 'Promise', stat: true, forced: FORCED_PROMISE_CONSTRUCTOR }, { + reject: function reject(r) { + var capability = newPromiseCapabilityModule.f(this); + var capabilityReject = capability.reject; + capabilityReject(r); + return capability.promise; + } +}); + + +/***/ }), + +/***/ "./node_modules/core-js-pure/modules/es.promise.resolve.js": +/*!*****************************************************************!*\ + !*** ./node_modules/core-js-pure/modules/es.promise.resolve.js ***! + \*****************************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var $ = __webpack_require__(/*! ../internals/export */ "./node_modules/core-js-pure/internals/export.js"); +var getBuiltIn = __webpack_require__(/*! ../internals/get-built-in */ "./node_modules/core-js-pure/internals/get-built-in.js"); +var IS_PURE = __webpack_require__(/*! ../internals/is-pure */ "./node_modules/core-js-pure/internals/is-pure.js"); +var NativePromiseConstructor = __webpack_require__(/*! ../internals/promise-native-constructor */ "./node_modules/core-js-pure/internals/promise-native-constructor.js"); +var FORCED_PROMISE_CONSTRUCTOR = (__webpack_require__(/*! ../internals/promise-constructor-detection */ "./node_modules/core-js-pure/internals/promise-constructor-detection.js").CONSTRUCTOR); +var promiseResolve = __webpack_require__(/*! ../internals/promise-resolve */ "./node_modules/core-js-pure/internals/promise-resolve.js"); + +var PromiseConstructorWrapper = getBuiltIn('Promise'); +var CHECK_WRAPPER = IS_PURE && !FORCED_PROMISE_CONSTRUCTOR; + +// `Promise.resolve` method +// https://tc39.es/ecma262/#sec-promise.resolve +$({ target: 'Promise', stat: true, forced: IS_PURE || FORCED_PROMISE_CONSTRUCTOR }, { + resolve: function resolve(x) { + return promiseResolve(CHECK_WRAPPER && this === PromiseConstructorWrapper ? NativePromiseConstructor : this, x); + } +}); + + +/***/ }), + +/***/ "./node_modules/core-js-pure/modules/es.promise.with-resolvers.js": +/*!************************************************************************!*\ + !*** ./node_modules/core-js-pure/modules/es.promise.with-resolvers.js ***! + \************************************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var $ = __webpack_require__(/*! ../internals/export */ "./node_modules/core-js-pure/internals/export.js"); +var newPromiseCapabilityModule = __webpack_require__(/*! ../internals/new-promise-capability */ "./node_modules/core-js-pure/internals/new-promise-capability.js"); + +// `Promise.withResolvers` method +// https://github.com/tc39/proposal-promise-with-resolvers +$({ target: 'Promise', stat: true }, { + withResolvers: function withResolvers() { + var promiseCapability = newPromiseCapabilityModule.f(this); + return { + promise: promiseCapability.promise, + resolve: promiseCapability.resolve, + reject: promiseCapability.reject + }; + } +}); + + +/***/ }), + +/***/ "./node_modules/core-js-pure/modules/es.reflect.to-string-tag.js": +/*!***********************************************************************!*\ + !*** ./node_modules/core-js-pure/modules/es.reflect.to-string-tag.js ***! + \***********************************************************************/ +/***/ (() => { + +// empty + + +/***/ }), + +/***/ "./node_modules/core-js-pure/modules/es.set.constructor.js": +/*!*****************************************************************!*\ + !*** ./node_modules/core-js-pure/modules/es.set.constructor.js ***! + \*****************************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var collection = __webpack_require__(/*! ../internals/collection */ "./node_modules/core-js-pure/internals/collection.js"); +var collectionStrong = __webpack_require__(/*! ../internals/collection-strong */ "./node_modules/core-js-pure/internals/collection-strong.js"); + +// `Set` constructor +// https://tc39.es/ecma262/#sec-set-objects +collection('Set', function (init) { + return function Set() { return init(this, arguments.length ? arguments[0] : undefined); }; +}, collectionStrong); + + +/***/ }), + +/***/ "./node_modules/core-js-pure/modules/es.set.difference.v2.js": +/*!*******************************************************************!*\ + !*** ./node_modules/core-js-pure/modules/es.set.difference.v2.js ***! + \*******************************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var $ = __webpack_require__(/*! ../internals/export */ "./node_modules/core-js-pure/internals/export.js"); +var difference = __webpack_require__(/*! ../internals/set-difference */ "./node_modules/core-js-pure/internals/set-difference.js"); +var setMethodAcceptSetLike = __webpack_require__(/*! ../internals/set-method-accept-set-like */ "./node_modules/core-js-pure/internals/set-method-accept-set-like.js"); + +// `Set.prototype.difference` method +// https://github.com/tc39/proposal-set-methods +$({ target: 'Set', proto: true, real: true, forced: !setMethodAcceptSetLike('difference') }, { + difference: difference +}); + + +/***/ }), + +/***/ "./node_modules/core-js-pure/modules/es.set.intersection.v2.js": +/*!*********************************************************************!*\ + !*** ./node_modules/core-js-pure/modules/es.set.intersection.v2.js ***! + \*********************************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var $ = __webpack_require__(/*! ../internals/export */ "./node_modules/core-js-pure/internals/export.js"); +var fails = __webpack_require__(/*! ../internals/fails */ "./node_modules/core-js-pure/internals/fails.js"); +var intersection = __webpack_require__(/*! ../internals/set-intersection */ "./node_modules/core-js-pure/internals/set-intersection.js"); +var setMethodAcceptSetLike = __webpack_require__(/*! ../internals/set-method-accept-set-like */ "./node_modules/core-js-pure/internals/set-method-accept-set-like.js"); + +var INCORRECT = !setMethodAcceptSetLike('intersection') || fails(function () { + // eslint-disable-next-line es/no-array-from, es/no-set -- testing + return String(Array.from(new Set([1, 2, 3]).intersection(new Set([3, 2])))) !== '3,2'; +}); + +// `Set.prototype.intersection` method +// https://github.com/tc39/proposal-set-methods +$({ target: 'Set', proto: true, real: true, forced: INCORRECT }, { + intersection: intersection +}); + + +/***/ }), + +/***/ "./node_modules/core-js-pure/modules/es.set.is-disjoint-from.v2.js": +/*!*************************************************************************!*\ + !*** ./node_modules/core-js-pure/modules/es.set.is-disjoint-from.v2.js ***! + \*************************************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var $ = __webpack_require__(/*! ../internals/export */ "./node_modules/core-js-pure/internals/export.js"); +var isDisjointFrom = __webpack_require__(/*! ../internals/set-is-disjoint-from */ "./node_modules/core-js-pure/internals/set-is-disjoint-from.js"); +var setMethodAcceptSetLike = __webpack_require__(/*! ../internals/set-method-accept-set-like */ "./node_modules/core-js-pure/internals/set-method-accept-set-like.js"); + +// `Set.prototype.isDisjointFrom` method +// https://github.com/tc39/proposal-set-methods +$({ target: 'Set', proto: true, real: true, forced: !setMethodAcceptSetLike('isDisjointFrom') }, { + isDisjointFrom: isDisjointFrom +}); + + +/***/ }), + +/***/ "./node_modules/core-js-pure/modules/es.set.is-subset-of.v2.js": +/*!*********************************************************************!*\ + !*** ./node_modules/core-js-pure/modules/es.set.is-subset-of.v2.js ***! + \*********************************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var $ = __webpack_require__(/*! ../internals/export */ "./node_modules/core-js-pure/internals/export.js"); +var isSubsetOf = __webpack_require__(/*! ../internals/set-is-subset-of */ "./node_modules/core-js-pure/internals/set-is-subset-of.js"); +var setMethodAcceptSetLike = __webpack_require__(/*! ../internals/set-method-accept-set-like */ "./node_modules/core-js-pure/internals/set-method-accept-set-like.js"); + +// `Set.prototype.isSubsetOf` method +// https://github.com/tc39/proposal-set-methods +$({ target: 'Set', proto: true, real: true, forced: !setMethodAcceptSetLike('isSubsetOf') }, { + isSubsetOf: isSubsetOf +}); + + +/***/ }), + +/***/ "./node_modules/core-js-pure/modules/es.set.is-superset-of.v2.js": +/*!***********************************************************************!*\ + !*** ./node_modules/core-js-pure/modules/es.set.is-superset-of.v2.js ***! + \***********************************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var $ = __webpack_require__(/*! ../internals/export */ "./node_modules/core-js-pure/internals/export.js"); +var isSupersetOf = __webpack_require__(/*! ../internals/set-is-superset-of */ "./node_modules/core-js-pure/internals/set-is-superset-of.js"); +var setMethodAcceptSetLike = __webpack_require__(/*! ../internals/set-method-accept-set-like */ "./node_modules/core-js-pure/internals/set-method-accept-set-like.js"); + +// `Set.prototype.isSupersetOf` method +// https://github.com/tc39/proposal-set-methods +$({ target: 'Set', proto: true, real: true, forced: !setMethodAcceptSetLike('isSupersetOf') }, { + isSupersetOf: isSupersetOf +}); + + +/***/ }), + +/***/ "./node_modules/core-js-pure/modules/es.set.js": +/*!*****************************************************!*\ + !*** ./node_modules/core-js-pure/modules/es.set.js ***! + \*****************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +// TODO: Remove this module from `core-js@4` since it's replaced to module below +__webpack_require__(/*! ../modules/es.set.constructor */ "./node_modules/core-js-pure/modules/es.set.constructor.js"); + + +/***/ }), + +/***/ "./node_modules/core-js-pure/modules/es.set.symmetric-difference.v2.js": +/*!*****************************************************************************!*\ + !*** ./node_modules/core-js-pure/modules/es.set.symmetric-difference.v2.js ***! + \*****************************************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var $ = __webpack_require__(/*! ../internals/export */ "./node_modules/core-js-pure/internals/export.js"); +var symmetricDifference = __webpack_require__(/*! ../internals/set-symmetric-difference */ "./node_modules/core-js-pure/internals/set-symmetric-difference.js"); +var setMethodAcceptSetLike = __webpack_require__(/*! ../internals/set-method-accept-set-like */ "./node_modules/core-js-pure/internals/set-method-accept-set-like.js"); + +// `Set.prototype.symmetricDifference` method +// https://github.com/tc39/proposal-set-methods +$({ target: 'Set', proto: true, real: true, forced: !setMethodAcceptSetLike('symmetricDifference') }, { + symmetricDifference: symmetricDifference +}); + + +/***/ }), + +/***/ "./node_modules/core-js-pure/modules/es.set.union.v2.js": +/*!**************************************************************!*\ + !*** ./node_modules/core-js-pure/modules/es.set.union.v2.js ***! + \**************************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var $ = __webpack_require__(/*! ../internals/export */ "./node_modules/core-js-pure/internals/export.js"); +var union = __webpack_require__(/*! ../internals/set-union */ "./node_modules/core-js-pure/internals/set-union.js"); +var setMethodAcceptSetLike = __webpack_require__(/*! ../internals/set-method-accept-set-like */ "./node_modules/core-js-pure/internals/set-method-accept-set-like.js"); + +// `Set.prototype.union` method +// https://github.com/tc39/proposal-set-methods +$({ target: 'Set', proto: true, real: true, forced: !setMethodAcceptSetLike('union') }, { + union: union +}); + + +/***/ }), + +/***/ "./node_modules/core-js-pure/modules/es.string.from-code-point.js": +/*!************************************************************************!*\ + !*** ./node_modules/core-js-pure/modules/es.string.from-code-point.js ***! + \************************************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var $ = __webpack_require__(/*! ../internals/export */ "./node_modules/core-js-pure/internals/export.js"); +var uncurryThis = __webpack_require__(/*! ../internals/function-uncurry-this */ "./node_modules/core-js-pure/internals/function-uncurry-this.js"); +var toAbsoluteIndex = __webpack_require__(/*! ../internals/to-absolute-index */ "./node_modules/core-js-pure/internals/to-absolute-index.js"); + +var $RangeError = RangeError; +var fromCharCode = String.fromCharCode; +// eslint-disable-next-line es/no-string-fromcodepoint -- required for testing +var $fromCodePoint = String.fromCodePoint; +var join = uncurryThis([].join); + +// length should be 1, old FF problem +var INCORRECT_LENGTH = !!$fromCodePoint && $fromCodePoint.length !== 1; + +// `String.fromCodePoint` method +// https://tc39.es/ecma262/#sec-string.fromcodepoint +$({ target: 'String', stat: true, arity: 1, forced: INCORRECT_LENGTH }, { + // eslint-disable-next-line no-unused-vars -- required for `.length` + fromCodePoint: function fromCodePoint(x) { + var elements = []; + var length = arguments.length; + var i = 0; + var code; + while (length > i) { + code = +arguments[i++]; + if (toAbsoluteIndex(code, 0x10FFFF) !== code) throw new $RangeError(code + ' is not a valid code point'); + elements[i] = code < 0x10000 + ? fromCharCode(code) + : fromCharCode(((code -= 0x10000) >> 10) + 0xD800, code % 0x400 + 0xDC00); + } return join(elements, ''); + } +}); + + +/***/ }), + +/***/ "./node_modules/core-js-pure/modules/es.string.includes.js": +/*!*****************************************************************!*\ + !*** ./node_modules/core-js-pure/modules/es.string.includes.js ***! + \*****************************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var $ = __webpack_require__(/*! ../internals/export */ "./node_modules/core-js-pure/internals/export.js"); +var uncurryThis = __webpack_require__(/*! ../internals/function-uncurry-this */ "./node_modules/core-js-pure/internals/function-uncurry-this.js"); +var notARegExp = __webpack_require__(/*! ../internals/not-a-regexp */ "./node_modules/core-js-pure/internals/not-a-regexp.js"); +var requireObjectCoercible = __webpack_require__(/*! ../internals/require-object-coercible */ "./node_modules/core-js-pure/internals/require-object-coercible.js"); +var toString = __webpack_require__(/*! ../internals/to-string */ "./node_modules/core-js-pure/internals/to-string.js"); +var correctIsRegExpLogic = __webpack_require__(/*! ../internals/correct-is-regexp-logic */ "./node_modules/core-js-pure/internals/correct-is-regexp-logic.js"); + +var stringIndexOf = uncurryThis(''.indexOf); + +// `String.prototype.includes` method +// https://tc39.es/ecma262/#sec-string.prototype.includes +$({ target: 'String', proto: true, forced: !correctIsRegExpLogic('includes') }, { + includes: function includes(searchString /* , position = 0 */) { + return !!~stringIndexOf( + toString(requireObjectCoercible(this)), + toString(notARegExp(searchString)), + arguments.length > 1 ? arguments[1] : undefined + ); + } +}); + + +/***/ }), + +/***/ "./node_modules/core-js-pure/modules/es.string.iterator.js": +/*!*****************************************************************!*\ + !*** ./node_modules/core-js-pure/modules/es.string.iterator.js ***! + \*****************************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var charAt = (__webpack_require__(/*! ../internals/string-multibyte */ "./node_modules/core-js-pure/internals/string-multibyte.js").charAt); +var toString = __webpack_require__(/*! ../internals/to-string */ "./node_modules/core-js-pure/internals/to-string.js"); +var InternalStateModule = __webpack_require__(/*! ../internals/internal-state */ "./node_modules/core-js-pure/internals/internal-state.js"); +var defineIterator = __webpack_require__(/*! ../internals/iterator-define */ "./node_modules/core-js-pure/internals/iterator-define.js"); +var createIterResultObject = __webpack_require__(/*! ../internals/create-iter-result-object */ "./node_modules/core-js-pure/internals/create-iter-result-object.js"); + +var STRING_ITERATOR = 'String Iterator'; +var setInternalState = InternalStateModule.set; +var getInternalState = InternalStateModule.getterFor(STRING_ITERATOR); + +// `String.prototype[@@iterator]` method +// https://tc39.es/ecma262/#sec-string.prototype-@@iterator +defineIterator(String, 'String', function (iterated) { + setInternalState(this, { + type: STRING_ITERATOR, + string: toString(iterated), + index: 0 + }); +// `%StringIteratorPrototype%.next` method +// https://tc39.es/ecma262/#sec-%stringiteratorprototype%.next +}, function next() { + var state = getInternalState(this); + var string = state.string; + var index = state.index; + var point; + if (index >= string.length) return createIterResultObject(undefined, true); + point = charAt(string, index); + state.index += point.length; + return createIterResultObject(point, false); +}); + + +/***/ }), + +/***/ "./node_modules/core-js-pure/modules/es.string.trim.js": +/*!*************************************************************!*\ + !*** ./node_modules/core-js-pure/modules/es.string.trim.js ***! + \*************************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var $ = __webpack_require__(/*! ../internals/export */ "./node_modules/core-js-pure/internals/export.js"); +var $trim = (__webpack_require__(/*! ../internals/string-trim */ "./node_modules/core-js-pure/internals/string-trim.js").trim); +var forcedStringTrimMethod = __webpack_require__(/*! ../internals/string-trim-forced */ "./node_modules/core-js-pure/internals/string-trim-forced.js"); + +// `String.prototype.trim` method +// https://tc39.es/ecma262/#sec-string.prototype.trim +$({ target: 'String', proto: true, forced: forcedStringTrimMethod('trim') }, { + trim: function trim() { + return $trim(this); + } +}); + + +/***/ }), + +/***/ "./node_modules/core-js-pure/modules/es.symbol.async-iterator.js": +/*!***********************************************************************!*\ + !*** ./node_modules/core-js-pure/modules/es.symbol.async-iterator.js ***! + \***********************************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var defineWellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol-define */ "./node_modules/core-js-pure/internals/well-known-symbol-define.js"); + +// `Symbol.asyncIterator` well-known symbol +// https://tc39.es/ecma262/#sec-symbol.asynciterator +defineWellKnownSymbol('asyncIterator'); + + +/***/ }), + +/***/ "./node_modules/core-js-pure/modules/es.symbol.constructor.js": +/*!********************************************************************!*\ + !*** ./node_modules/core-js-pure/modules/es.symbol.constructor.js ***! + \********************************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var $ = __webpack_require__(/*! ../internals/export */ "./node_modules/core-js-pure/internals/export.js"); +var globalThis = __webpack_require__(/*! ../internals/global-this */ "./node_modules/core-js-pure/internals/global-this.js"); +var call = __webpack_require__(/*! ../internals/function-call */ "./node_modules/core-js-pure/internals/function-call.js"); +var uncurryThis = __webpack_require__(/*! ../internals/function-uncurry-this */ "./node_modules/core-js-pure/internals/function-uncurry-this.js"); +var IS_PURE = __webpack_require__(/*! ../internals/is-pure */ "./node_modules/core-js-pure/internals/is-pure.js"); +var DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ "./node_modules/core-js-pure/internals/descriptors.js"); +var NATIVE_SYMBOL = __webpack_require__(/*! ../internals/symbol-constructor-detection */ "./node_modules/core-js-pure/internals/symbol-constructor-detection.js"); +var fails = __webpack_require__(/*! ../internals/fails */ "./node_modules/core-js-pure/internals/fails.js"); +var hasOwn = __webpack_require__(/*! ../internals/has-own-property */ "./node_modules/core-js-pure/internals/has-own-property.js"); +var isPrototypeOf = __webpack_require__(/*! ../internals/object-is-prototype-of */ "./node_modules/core-js-pure/internals/object-is-prototype-of.js"); +var anObject = __webpack_require__(/*! ../internals/an-object */ "./node_modules/core-js-pure/internals/an-object.js"); +var toIndexedObject = __webpack_require__(/*! ../internals/to-indexed-object */ "./node_modules/core-js-pure/internals/to-indexed-object.js"); +var toPropertyKey = __webpack_require__(/*! ../internals/to-property-key */ "./node_modules/core-js-pure/internals/to-property-key.js"); +var $toString = __webpack_require__(/*! ../internals/to-string */ "./node_modules/core-js-pure/internals/to-string.js"); +var createPropertyDescriptor = __webpack_require__(/*! ../internals/create-property-descriptor */ "./node_modules/core-js-pure/internals/create-property-descriptor.js"); +var nativeObjectCreate = __webpack_require__(/*! ../internals/object-create */ "./node_modules/core-js-pure/internals/object-create.js"); +var objectKeys = __webpack_require__(/*! ../internals/object-keys */ "./node_modules/core-js-pure/internals/object-keys.js"); +var getOwnPropertyNamesModule = __webpack_require__(/*! ../internals/object-get-own-property-names */ "./node_modules/core-js-pure/internals/object-get-own-property-names.js"); +var getOwnPropertyNamesExternal = __webpack_require__(/*! ../internals/object-get-own-property-names-external */ "./node_modules/core-js-pure/internals/object-get-own-property-names-external.js"); +var getOwnPropertySymbolsModule = __webpack_require__(/*! ../internals/object-get-own-property-symbols */ "./node_modules/core-js-pure/internals/object-get-own-property-symbols.js"); +var getOwnPropertyDescriptorModule = __webpack_require__(/*! ../internals/object-get-own-property-descriptor */ "./node_modules/core-js-pure/internals/object-get-own-property-descriptor.js"); +var definePropertyModule = __webpack_require__(/*! ../internals/object-define-property */ "./node_modules/core-js-pure/internals/object-define-property.js"); +var definePropertiesModule = __webpack_require__(/*! ../internals/object-define-properties */ "./node_modules/core-js-pure/internals/object-define-properties.js"); +var propertyIsEnumerableModule = __webpack_require__(/*! ../internals/object-property-is-enumerable */ "./node_modules/core-js-pure/internals/object-property-is-enumerable.js"); +var defineBuiltIn = __webpack_require__(/*! ../internals/define-built-in */ "./node_modules/core-js-pure/internals/define-built-in.js"); +var defineBuiltInAccessor = __webpack_require__(/*! ../internals/define-built-in-accessor */ "./node_modules/core-js-pure/internals/define-built-in-accessor.js"); +var shared = __webpack_require__(/*! ../internals/shared */ "./node_modules/core-js-pure/internals/shared.js"); +var sharedKey = __webpack_require__(/*! ../internals/shared-key */ "./node_modules/core-js-pure/internals/shared-key.js"); +var hiddenKeys = __webpack_require__(/*! ../internals/hidden-keys */ "./node_modules/core-js-pure/internals/hidden-keys.js"); +var uid = __webpack_require__(/*! ../internals/uid */ "./node_modules/core-js-pure/internals/uid.js"); +var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ "./node_modules/core-js-pure/internals/well-known-symbol.js"); +var wrappedWellKnownSymbolModule = __webpack_require__(/*! ../internals/well-known-symbol-wrapped */ "./node_modules/core-js-pure/internals/well-known-symbol-wrapped.js"); +var defineWellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol-define */ "./node_modules/core-js-pure/internals/well-known-symbol-define.js"); +var defineSymbolToPrimitive = __webpack_require__(/*! ../internals/symbol-define-to-primitive */ "./node_modules/core-js-pure/internals/symbol-define-to-primitive.js"); +var setToStringTag = __webpack_require__(/*! ../internals/set-to-string-tag */ "./node_modules/core-js-pure/internals/set-to-string-tag.js"); +var InternalStateModule = __webpack_require__(/*! ../internals/internal-state */ "./node_modules/core-js-pure/internals/internal-state.js"); +var $forEach = (__webpack_require__(/*! ../internals/array-iteration */ "./node_modules/core-js-pure/internals/array-iteration.js").forEach); + +var HIDDEN = sharedKey('hidden'); +var SYMBOL = 'Symbol'; +var PROTOTYPE = 'prototype'; + +var setInternalState = InternalStateModule.set; +var getInternalState = InternalStateModule.getterFor(SYMBOL); + +var ObjectPrototype = Object[PROTOTYPE]; +var $Symbol = globalThis.Symbol; +var SymbolPrototype = $Symbol && $Symbol[PROTOTYPE]; +var RangeError = globalThis.RangeError; +var TypeError = globalThis.TypeError; +var QObject = globalThis.QObject; +var nativeGetOwnPropertyDescriptor = getOwnPropertyDescriptorModule.f; +var nativeDefineProperty = definePropertyModule.f; +var nativeGetOwnPropertyNames = getOwnPropertyNamesExternal.f; +var nativePropertyIsEnumerable = propertyIsEnumerableModule.f; +var push = uncurryThis([].push); + +var AllSymbols = shared('symbols'); +var ObjectPrototypeSymbols = shared('op-symbols'); +var WellKnownSymbolsStore = shared('wks'); + +// Don't use setters in Qt Script, https://github.com/zloirock/core-js/issues/173 +var USE_SETTER = !QObject || !QObject[PROTOTYPE] || !QObject[PROTOTYPE].findChild; + +// fallback for old Android, https://code.google.com/p/v8/issues/detail?id=687 +var fallbackDefineProperty = function (O, P, Attributes) { + var ObjectPrototypeDescriptor = nativeGetOwnPropertyDescriptor(ObjectPrototype, P); + if (ObjectPrototypeDescriptor) delete ObjectPrototype[P]; + nativeDefineProperty(O, P, Attributes); + if (ObjectPrototypeDescriptor && O !== ObjectPrototype) { + nativeDefineProperty(ObjectPrototype, P, ObjectPrototypeDescriptor); + } +}; + +var setSymbolDescriptor = DESCRIPTORS && fails(function () { + return nativeObjectCreate(nativeDefineProperty({}, 'a', { + get: function () { return nativeDefineProperty(this, 'a', { value: 7 }).a; } + })).a !== 7; +}) ? fallbackDefineProperty : nativeDefineProperty; + +var wrap = function (tag, description) { + var symbol = AllSymbols[tag] = nativeObjectCreate(SymbolPrototype); + setInternalState(symbol, { + type: SYMBOL, + tag: tag, + description: description + }); + if (!DESCRIPTORS) symbol.description = description; + return symbol; +}; + +var $defineProperty = function defineProperty(O, P, Attributes) { + if (O === ObjectPrototype) $defineProperty(ObjectPrototypeSymbols, P, Attributes); + anObject(O); + var key = toPropertyKey(P); + anObject(Attributes); + if (hasOwn(AllSymbols, key)) { + if (!Attributes.enumerable) { + if (!hasOwn(O, HIDDEN)) nativeDefineProperty(O, HIDDEN, createPropertyDescriptor(1, nativeObjectCreate(null))); + O[HIDDEN][key] = true; + } else { + if (hasOwn(O, HIDDEN) && O[HIDDEN][key]) O[HIDDEN][key] = false; + Attributes = nativeObjectCreate(Attributes, { enumerable: createPropertyDescriptor(0, false) }); + } return setSymbolDescriptor(O, key, Attributes); + } return nativeDefineProperty(O, key, Attributes); +}; + +var $defineProperties = function defineProperties(O, Properties) { + anObject(O); + var properties = toIndexedObject(Properties); + var keys = objectKeys(properties).concat($getOwnPropertySymbols(properties)); + $forEach(keys, function (key) { + if (!DESCRIPTORS || call($propertyIsEnumerable, properties, key)) $defineProperty(O, key, properties[key]); + }); + return O; +}; + +var $create = function create(O, Properties) { + return Properties === undefined ? nativeObjectCreate(O) : $defineProperties(nativeObjectCreate(O), Properties); +}; + +var $propertyIsEnumerable = function propertyIsEnumerable(V) { + var P = toPropertyKey(V); + var enumerable = call(nativePropertyIsEnumerable, this, P); + if (this === ObjectPrototype && hasOwn(AllSymbols, P) && !hasOwn(ObjectPrototypeSymbols, P)) return false; + return enumerable || !hasOwn(this, P) || !hasOwn(AllSymbols, P) || hasOwn(this, HIDDEN) && this[HIDDEN][P] + ? enumerable : true; +}; + +var $getOwnPropertyDescriptor = function getOwnPropertyDescriptor(O, P) { + var it = toIndexedObject(O); + var key = toPropertyKey(P); + if (it === ObjectPrototype && hasOwn(AllSymbols, key) && !hasOwn(ObjectPrototypeSymbols, key)) return; + var descriptor = nativeGetOwnPropertyDescriptor(it, key); + if (descriptor && hasOwn(AllSymbols, key) && !(hasOwn(it, HIDDEN) && it[HIDDEN][key])) { + descriptor.enumerable = true; + } + return descriptor; +}; + +var $getOwnPropertyNames = function getOwnPropertyNames(O) { + var names = nativeGetOwnPropertyNames(toIndexedObject(O)); + var result = []; + $forEach(names, function (key) { + if (!hasOwn(AllSymbols, key) && !hasOwn(hiddenKeys, key)) push(result, key); + }); + return result; +}; + +var $getOwnPropertySymbols = function (O) { + var IS_OBJECT_PROTOTYPE = O === ObjectPrototype; + var names = nativeGetOwnPropertyNames(IS_OBJECT_PROTOTYPE ? ObjectPrototypeSymbols : toIndexedObject(O)); + var result = []; + $forEach(names, function (key) { + if (hasOwn(AllSymbols, key) && (!IS_OBJECT_PROTOTYPE || hasOwn(ObjectPrototype, key))) { + push(result, AllSymbols[key]); + } + }); + return result; +}; + +// `Symbol` constructor +// https://tc39.es/ecma262/#sec-symbol-constructor +if (!NATIVE_SYMBOL) { + $Symbol = function Symbol() { + if (isPrototypeOf(SymbolPrototype, this)) throw new TypeError('Symbol is not a constructor'); + var description = !arguments.length || arguments[0] === undefined ? undefined : $toString(arguments[0]); + var tag = uid(description); + var setter = function (value) { + var $this = this === undefined ? globalThis : this; + if ($this === ObjectPrototype) call(setter, ObjectPrototypeSymbols, value); + if (hasOwn($this, HIDDEN) && hasOwn($this[HIDDEN], tag)) $this[HIDDEN][tag] = false; + var descriptor = createPropertyDescriptor(1, value); + try { + setSymbolDescriptor($this, tag, descriptor); + } catch (error) { + if (!(error instanceof RangeError)) throw error; + fallbackDefineProperty($this, tag, descriptor); + } + }; + if (DESCRIPTORS && USE_SETTER) setSymbolDescriptor(ObjectPrototype, tag, { configurable: true, set: setter }); + return wrap(tag, description); + }; + + SymbolPrototype = $Symbol[PROTOTYPE]; + + defineBuiltIn(SymbolPrototype, 'toString', function toString() { + return getInternalState(this).tag; + }); + + defineBuiltIn($Symbol, 'withoutSetter', function (description) { + return wrap(uid(description), description); + }); + + propertyIsEnumerableModule.f = $propertyIsEnumerable; + definePropertyModule.f = $defineProperty; + definePropertiesModule.f = $defineProperties; + getOwnPropertyDescriptorModule.f = $getOwnPropertyDescriptor; + getOwnPropertyNamesModule.f = getOwnPropertyNamesExternal.f = $getOwnPropertyNames; + getOwnPropertySymbolsModule.f = $getOwnPropertySymbols; + + wrappedWellKnownSymbolModule.f = function (name) { + return wrap(wellKnownSymbol(name), name); + }; + + if (DESCRIPTORS) { + // https://github.com/tc39/proposal-Symbol-description + defineBuiltInAccessor(SymbolPrototype, 'description', { + configurable: true, + get: function description() { + return getInternalState(this).description; + } + }); + if (!IS_PURE) { + defineBuiltIn(ObjectPrototype, 'propertyIsEnumerable', $propertyIsEnumerable, { unsafe: true }); + } + } +} + +$({ global: true, constructor: true, wrap: true, forced: !NATIVE_SYMBOL, sham: !NATIVE_SYMBOL }, { + Symbol: $Symbol +}); + +$forEach(objectKeys(WellKnownSymbolsStore), function (name) { + defineWellKnownSymbol(name); +}); + +$({ target: SYMBOL, stat: true, forced: !NATIVE_SYMBOL }, { + useSetter: function () { USE_SETTER = true; }, + useSimple: function () { USE_SETTER = false; } +}); + +$({ target: 'Object', stat: true, forced: !NATIVE_SYMBOL, sham: !DESCRIPTORS }, { + // `Object.create` method + // https://tc39.es/ecma262/#sec-object.create + create: $create, + // `Object.defineProperty` method + // https://tc39.es/ecma262/#sec-object.defineproperty + defineProperty: $defineProperty, + // `Object.defineProperties` method + // https://tc39.es/ecma262/#sec-object.defineproperties + defineProperties: $defineProperties, + // `Object.getOwnPropertyDescriptor` method + // https://tc39.es/ecma262/#sec-object.getownpropertydescriptors + getOwnPropertyDescriptor: $getOwnPropertyDescriptor +}); + +$({ target: 'Object', stat: true, forced: !NATIVE_SYMBOL }, { + // `Object.getOwnPropertyNames` method + // https://tc39.es/ecma262/#sec-object.getownpropertynames + getOwnPropertyNames: $getOwnPropertyNames +}); + +// `Symbol.prototype[@@toPrimitive]` method +// https://tc39.es/ecma262/#sec-symbol.prototype-@@toprimitive +defineSymbolToPrimitive(); + +// `Symbol.prototype[@@toStringTag]` property +// https://tc39.es/ecma262/#sec-symbol.prototype-@@tostringtag +setToStringTag($Symbol, SYMBOL); + +hiddenKeys[HIDDEN] = true; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/modules/es.symbol.description.js": +/*!********************************************************************!*\ + !*** ./node_modules/core-js-pure/modules/es.symbol.description.js ***! + \********************************************************************/ +/***/ (() => { + +// empty + + +/***/ }), + +/***/ "./node_modules/core-js-pure/modules/es.symbol.for.js": +/*!************************************************************!*\ + !*** ./node_modules/core-js-pure/modules/es.symbol.for.js ***! + \************************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var $ = __webpack_require__(/*! ../internals/export */ "./node_modules/core-js-pure/internals/export.js"); +var getBuiltIn = __webpack_require__(/*! ../internals/get-built-in */ "./node_modules/core-js-pure/internals/get-built-in.js"); +var hasOwn = __webpack_require__(/*! ../internals/has-own-property */ "./node_modules/core-js-pure/internals/has-own-property.js"); +var toString = __webpack_require__(/*! ../internals/to-string */ "./node_modules/core-js-pure/internals/to-string.js"); +var shared = __webpack_require__(/*! ../internals/shared */ "./node_modules/core-js-pure/internals/shared.js"); +var NATIVE_SYMBOL_REGISTRY = __webpack_require__(/*! ../internals/symbol-registry-detection */ "./node_modules/core-js-pure/internals/symbol-registry-detection.js"); + +var StringToSymbolRegistry = shared('string-to-symbol-registry'); +var SymbolToStringRegistry = shared('symbol-to-string-registry'); + +// `Symbol.for` method +// https://tc39.es/ecma262/#sec-symbol.for +$({ target: 'Symbol', stat: true, forced: !NATIVE_SYMBOL_REGISTRY }, { + 'for': function (key) { + var string = toString(key); + if (hasOwn(StringToSymbolRegistry, string)) return StringToSymbolRegistry[string]; + var symbol = getBuiltIn('Symbol')(string); + StringToSymbolRegistry[string] = symbol; + SymbolToStringRegistry[symbol] = string; + return symbol; + } +}); + + +/***/ }), + +/***/ "./node_modules/core-js-pure/modules/es.symbol.has-instance.js": +/*!*********************************************************************!*\ + !*** ./node_modules/core-js-pure/modules/es.symbol.has-instance.js ***! + \*********************************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var defineWellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol-define */ "./node_modules/core-js-pure/internals/well-known-symbol-define.js"); + +// `Symbol.hasInstance` well-known symbol +// https://tc39.es/ecma262/#sec-symbol.hasinstance +defineWellKnownSymbol('hasInstance'); + + +/***/ }), + +/***/ "./node_modules/core-js-pure/modules/es.symbol.is-concat-spreadable.js": +/*!*****************************************************************************!*\ + !*** ./node_modules/core-js-pure/modules/es.symbol.is-concat-spreadable.js ***! + \*****************************************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var defineWellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol-define */ "./node_modules/core-js-pure/internals/well-known-symbol-define.js"); + +// `Symbol.isConcatSpreadable` well-known symbol +// https://tc39.es/ecma262/#sec-symbol.isconcatspreadable +defineWellKnownSymbol('isConcatSpreadable'); + + +/***/ }), + +/***/ "./node_modules/core-js-pure/modules/es.symbol.iterator.js": +/*!*****************************************************************!*\ + !*** ./node_modules/core-js-pure/modules/es.symbol.iterator.js ***! + \*****************************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var defineWellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol-define */ "./node_modules/core-js-pure/internals/well-known-symbol-define.js"); + +// `Symbol.iterator` well-known symbol +// https://tc39.es/ecma262/#sec-symbol.iterator +defineWellKnownSymbol('iterator'); + + +/***/ }), + +/***/ "./node_modules/core-js-pure/modules/es.symbol.js": +/*!********************************************************!*\ + !*** ./node_modules/core-js-pure/modules/es.symbol.js ***! + \********************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +// TODO: Remove this module from `core-js@4` since it's split to modules listed below +__webpack_require__(/*! ../modules/es.symbol.constructor */ "./node_modules/core-js-pure/modules/es.symbol.constructor.js"); +__webpack_require__(/*! ../modules/es.symbol.for */ "./node_modules/core-js-pure/modules/es.symbol.for.js"); +__webpack_require__(/*! ../modules/es.symbol.key-for */ "./node_modules/core-js-pure/modules/es.symbol.key-for.js"); +__webpack_require__(/*! ../modules/es.json.stringify */ "./node_modules/core-js-pure/modules/es.json.stringify.js"); +__webpack_require__(/*! ../modules/es.object.get-own-property-symbols */ "./node_modules/core-js-pure/modules/es.object.get-own-property-symbols.js"); + + +/***/ }), + +/***/ "./node_modules/core-js-pure/modules/es.symbol.key-for.js": +/*!****************************************************************!*\ + !*** ./node_modules/core-js-pure/modules/es.symbol.key-for.js ***! + \****************************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var $ = __webpack_require__(/*! ../internals/export */ "./node_modules/core-js-pure/internals/export.js"); +var hasOwn = __webpack_require__(/*! ../internals/has-own-property */ "./node_modules/core-js-pure/internals/has-own-property.js"); +var isSymbol = __webpack_require__(/*! ../internals/is-symbol */ "./node_modules/core-js-pure/internals/is-symbol.js"); +var tryToString = __webpack_require__(/*! ../internals/try-to-string */ "./node_modules/core-js-pure/internals/try-to-string.js"); +var shared = __webpack_require__(/*! ../internals/shared */ "./node_modules/core-js-pure/internals/shared.js"); +var NATIVE_SYMBOL_REGISTRY = __webpack_require__(/*! ../internals/symbol-registry-detection */ "./node_modules/core-js-pure/internals/symbol-registry-detection.js"); + +var SymbolToStringRegistry = shared('symbol-to-string-registry'); + +// `Symbol.keyFor` method +// https://tc39.es/ecma262/#sec-symbol.keyfor +$({ target: 'Symbol', stat: true, forced: !NATIVE_SYMBOL_REGISTRY }, { + keyFor: function keyFor(sym) { + if (!isSymbol(sym)) throw new TypeError(tryToString(sym) + ' is not a symbol'); + if (hasOwn(SymbolToStringRegistry, sym)) return SymbolToStringRegistry[sym]; + } +}); + + +/***/ }), + +/***/ "./node_modules/core-js-pure/modules/es.symbol.match-all.js": +/*!******************************************************************!*\ + !*** ./node_modules/core-js-pure/modules/es.symbol.match-all.js ***! + \******************************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var defineWellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol-define */ "./node_modules/core-js-pure/internals/well-known-symbol-define.js"); + +// `Symbol.matchAll` well-known symbol +// https://tc39.es/ecma262/#sec-symbol.matchall +defineWellKnownSymbol('matchAll'); + + +/***/ }), + +/***/ "./node_modules/core-js-pure/modules/es.symbol.match.js": +/*!**************************************************************!*\ + !*** ./node_modules/core-js-pure/modules/es.symbol.match.js ***! + \**************************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var defineWellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol-define */ "./node_modules/core-js-pure/internals/well-known-symbol-define.js"); + +// `Symbol.match` well-known symbol +// https://tc39.es/ecma262/#sec-symbol.match +defineWellKnownSymbol('match'); + + +/***/ }), + +/***/ "./node_modules/core-js-pure/modules/es.symbol.replace.js": +/*!****************************************************************!*\ + !*** ./node_modules/core-js-pure/modules/es.symbol.replace.js ***! + \****************************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var defineWellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol-define */ "./node_modules/core-js-pure/internals/well-known-symbol-define.js"); + +// `Symbol.replace` well-known symbol +// https://tc39.es/ecma262/#sec-symbol.replace +defineWellKnownSymbol('replace'); + + +/***/ }), + +/***/ "./node_modules/core-js-pure/modules/es.symbol.search.js": +/*!***************************************************************!*\ + !*** ./node_modules/core-js-pure/modules/es.symbol.search.js ***! + \***************************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var defineWellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol-define */ "./node_modules/core-js-pure/internals/well-known-symbol-define.js"); + +// `Symbol.search` well-known symbol +// https://tc39.es/ecma262/#sec-symbol.search +defineWellKnownSymbol('search'); + + +/***/ }), + +/***/ "./node_modules/core-js-pure/modules/es.symbol.species.js": +/*!****************************************************************!*\ + !*** ./node_modules/core-js-pure/modules/es.symbol.species.js ***! + \****************************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var defineWellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol-define */ "./node_modules/core-js-pure/internals/well-known-symbol-define.js"); + +// `Symbol.species` well-known symbol +// https://tc39.es/ecma262/#sec-symbol.species +defineWellKnownSymbol('species'); + + +/***/ }), + +/***/ "./node_modules/core-js-pure/modules/es.symbol.split.js": +/*!**************************************************************!*\ + !*** ./node_modules/core-js-pure/modules/es.symbol.split.js ***! + \**************************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var defineWellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol-define */ "./node_modules/core-js-pure/internals/well-known-symbol-define.js"); + +// `Symbol.split` well-known symbol +// https://tc39.es/ecma262/#sec-symbol.split +defineWellKnownSymbol('split'); + + +/***/ }), + +/***/ "./node_modules/core-js-pure/modules/es.symbol.to-primitive.js": +/*!*********************************************************************!*\ + !*** ./node_modules/core-js-pure/modules/es.symbol.to-primitive.js ***! + \*********************************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var defineWellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol-define */ "./node_modules/core-js-pure/internals/well-known-symbol-define.js"); +var defineSymbolToPrimitive = __webpack_require__(/*! ../internals/symbol-define-to-primitive */ "./node_modules/core-js-pure/internals/symbol-define-to-primitive.js"); + +// `Symbol.toPrimitive` well-known symbol +// https://tc39.es/ecma262/#sec-symbol.toprimitive +defineWellKnownSymbol('toPrimitive'); + +// `Symbol.prototype[@@toPrimitive]` method +// https://tc39.es/ecma262/#sec-symbol.prototype-@@toprimitive +defineSymbolToPrimitive(); + + +/***/ }), + +/***/ "./node_modules/core-js-pure/modules/es.symbol.to-string-tag.js": +/*!**********************************************************************!*\ + !*** ./node_modules/core-js-pure/modules/es.symbol.to-string-tag.js ***! + \**********************************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var getBuiltIn = __webpack_require__(/*! ../internals/get-built-in */ "./node_modules/core-js-pure/internals/get-built-in.js"); +var defineWellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol-define */ "./node_modules/core-js-pure/internals/well-known-symbol-define.js"); +var setToStringTag = __webpack_require__(/*! ../internals/set-to-string-tag */ "./node_modules/core-js-pure/internals/set-to-string-tag.js"); + +// `Symbol.toStringTag` well-known symbol +// https://tc39.es/ecma262/#sec-symbol.tostringtag +defineWellKnownSymbol('toStringTag'); + +// `Symbol.prototype[@@toStringTag]` property +// https://tc39.es/ecma262/#sec-symbol.prototype-@@tostringtag +setToStringTag(getBuiltIn('Symbol'), 'Symbol'); + + +/***/ }), + +/***/ "./node_modules/core-js-pure/modules/es.symbol.unscopables.js": +/*!********************************************************************!*\ + !*** ./node_modules/core-js-pure/modules/es.symbol.unscopables.js ***! + \********************************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var defineWellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol-define */ "./node_modules/core-js-pure/internals/well-known-symbol-define.js"); + +// `Symbol.unscopables` well-known symbol +// https://tc39.es/ecma262/#sec-symbol.unscopables +defineWellKnownSymbol('unscopables'); + + +/***/ }), + +/***/ "./node_modules/core-js-pure/modules/esnext.function.metadata.js": +/*!***********************************************************************!*\ + !*** ./node_modules/core-js-pure/modules/esnext.function.metadata.js ***! + \***********************************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ "./node_modules/core-js-pure/internals/well-known-symbol.js"); +var defineProperty = (__webpack_require__(/*! ../internals/object-define-property */ "./node_modules/core-js-pure/internals/object-define-property.js").f); + +var METADATA = wellKnownSymbol('metadata'); +var FunctionPrototype = Function.prototype; + +// Function.prototype[@@metadata] +// https://github.com/tc39/proposal-decorator-metadata +if (FunctionPrototype[METADATA] === undefined) { + defineProperty(FunctionPrototype, METADATA, { + value: null + }); +} + + +/***/ }), + +/***/ "./node_modules/core-js-pure/modules/esnext.symbol.async-dispose.js": +/*!**************************************************************************!*\ + !*** ./node_modules/core-js-pure/modules/esnext.symbol.async-dispose.js ***! + \**************************************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var defineWellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol-define */ "./node_modules/core-js-pure/internals/well-known-symbol-define.js"); + +// `Symbol.asyncDispose` well-known symbol +// https://github.com/tc39/proposal-async-explicit-resource-management +defineWellKnownSymbol('asyncDispose'); + + +/***/ }), + +/***/ "./node_modules/core-js-pure/modules/esnext.symbol.custom-matcher.js": +/*!***************************************************************************!*\ + !*** ./node_modules/core-js-pure/modules/esnext.symbol.custom-matcher.js ***! + \***************************************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var defineWellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol-define */ "./node_modules/core-js-pure/internals/well-known-symbol-define.js"); + +// `Symbol.customMatcher` well-known symbol +// https://github.com/tc39/proposal-pattern-matching +defineWellKnownSymbol('customMatcher'); + + +/***/ }), + +/***/ "./node_modules/core-js-pure/modules/esnext.symbol.dispose.js": +/*!********************************************************************!*\ + !*** ./node_modules/core-js-pure/modules/esnext.symbol.dispose.js ***! + \********************************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var defineWellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol-define */ "./node_modules/core-js-pure/internals/well-known-symbol-define.js"); + +// `Symbol.dispose` well-known symbol +// https://github.com/tc39/proposal-explicit-resource-management +defineWellKnownSymbol('dispose'); + + +/***/ }), + +/***/ "./node_modules/core-js-pure/modules/esnext.symbol.is-registered-symbol.js": +/*!*********************************************************************************!*\ + !*** ./node_modules/core-js-pure/modules/esnext.symbol.is-registered-symbol.js ***! + \*********************************************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var $ = __webpack_require__(/*! ../internals/export */ "./node_modules/core-js-pure/internals/export.js"); +var isRegisteredSymbol = __webpack_require__(/*! ../internals/symbol-is-registered */ "./node_modules/core-js-pure/internals/symbol-is-registered.js"); + +// `Symbol.isRegisteredSymbol` method +// https://tc39.es/proposal-symbol-predicates/#sec-symbol-isregisteredsymbol +$({ target: 'Symbol', stat: true }, { + isRegisteredSymbol: isRegisteredSymbol +}); + + +/***/ }), + +/***/ "./node_modules/core-js-pure/modules/esnext.symbol.is-registered.js": +/*!**************************************************************************!*\ + !*** ./node_modules/core-js-pure/modules/esnext.symbol.is-registered.js ***! + \**************************************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var $ = __webpack_require__(/*! ../internals/export */ "./node_modules/core-js-pure/internals/export.js"); +var isRegisteredSymbol = __webpack_require__(/*! ../internals/symbol-is-registered */ "./node_modules/core-js-pure/internals/symbol-is-registered.js"); + +// `Symbol.isRegistered` method +// obsolete version of https://tc39.es/proposal-symbol-predicates/#sec-symbol-isregisteredsymbol +$({ target: 'Symbol', stat: true, name: 'isRegisteredSymbol' }, { + isRegistered: isRegisteredSymbol +}); + + +/***/ }), + +/***/ "./node_modules/core-js-pure/modules/esnext.symbol.is-well-known-symbol.js": +/*!*********************************************************************************!*\ + !*** ./node_modules/core-js-pure/modules/esnext.symbol.is-well-known-symbol.js ***! + \*********************************************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var $ = __webpack_require__(/*! ../internals/export */ "./node_modules/core-js-pure/internals/export.js"); +var isWellKnownSymbol = __webpack_require__(/*! ../internals/symbol-is-well-known */ "./node_modules/core-js-pure/internals/symbol-is-well-known.js"); + +// `Symbol.isWellKnownSymbol` method +// https://tc39.es/proposal-symbol-predicates/#sec-symbol-iswellknownsymbol +// We should patch it for newly added well-known symbols. If it's not required, this module just will not be injected +$({ target: 'Symbol', stat: true, forced: true }, { + isWellKnownSymbol: isWellKnownSymbol +}); + + +/***/ }), + +/***/ "./node_modules/core-js-pure/modules/esnext.symbol.is-well-known.js": +/*!**************************************************************************!*\ + !*** ./node_modules/core-js-pure/modules/esnext.symbol.is-well-known.js ***! + \**************************************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var $ = __webpack_require__(/*! ../internals/export */ "./node_modules/core-js-pure/internals/export.js"); +var isWellKnownSymbol = __webpack_require__(/*! ../internals/symbol-is-well-known */ "./node_modules/core-js-pure/internals/symbol-is-well-known.js"); + +// `Symbol.isWellKnown` method +// obsolete version of https://tc39.es/proposal-symbol-predicates/#sec-symbol-iswellknownsymbol +// We should patch it for newly added well-known symbols. If it's not required, this module just will not be injected +$({ target: 'Symbol', stat: true, name: 'isWellKnownSymbol', forced: true }, { + isWellKnown: isWellKnownSymbol +}); + + +/***/ }), + +/***/ "./node_modules/core-js-pure/modules/esnext.symbol.matcher.js": +/*!********************************************************************!*\ + !*** ./node_modules/core-js-pure/modules/esnext.symbol.matcher.js ***! + \********************************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var defineWellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol-define */ "./node_modules/core-js-pure/internals/well-known-symbol-define.js"); + +// `Symbol.matcher` well-known symbol +// https://github.com/tc39/proposal-pattern-matching +defineWellKnownSymbol('matcher'); + + +/***/ }), + +/***/ "./node_modules/core-js-pure/modules/esnext.symbol.metadata-key.js": +/*!*************************************************************************!*\ + !*** ./node_modules/core-js-pure/modules/esnext.symbol.metadata-key.js ***! + \*************************************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +// TODO: Remove from `core-js@4` +var defineWellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol-define */ "./node_modules/core-js-pure/internals/well-known-symbol-define.js"); + +// `Symbol.metadataKey` well-known symbol +// https://github.com/tc39/proposal-decorator-metadata +defineWellKnownSymbol('metadataKey'); + + +/***/ }), + +/***/ "./node_modules/core-js-pure/modules/esnext.symbol.metadata.js": +/*!*********************************************************************!*\ + !*** ./node_modules/core-js-pure/modules/esnext.symbol.metadata.js ***! + \*********************************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var defineWellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol-define */ "./node_modules/core-js-pure/internals/well-known-symbol-define.js"); + +// `Symbol.metadata` well-known symbol +// https://github.com/tc39/proposal-decorators +defineWellKnownSymbol('metadata'); + + +/***/ }), + +/***/ "./node_modules/core-js-pure/modules/esnext.symbol.observable.js": +/*!***********************************************************************!*\ + !*** ./node_modules/core-js-pure/modules/esnext.symbol.observable.js ***! + \***********************************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var defineWellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol-define */ "./node_modules/core-js-pure/internals/well-known-symbol-define.js"); + +// `Symbol.observable` well-known symbol +// https://github.com/tc39/proposal-observable +defineWellKnownSymbol('observable'); + + +/***/ }), + +/***/ "./node_modules/core-js-pure/modules/esnext.symbol.pattern-match.js": +/*!**************************************************************************!*\ + !*** ./node_modules/core-js-pure/modules/esnext.symbol.pattern-match.js ***! + \**************************************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +// TODO: remove from `core-js@4` +var defineWellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol-define */ "./node_modules/core-js-pure/internals/well-known-symbol-define.js"); + +// `Symbol.patternMatch` well-known symbol +// https://github.com/tc39/proposal-pattern-matching +defineWellKnownSymbol('patternMatch'); + + +/***/ }), + +/***/ "./node_modules/core-js-pure/modules/esnext.symbol.replace-all.js": +/*!************************************************************************!*\ + !*** ./node_modules/core-js-pure/modules/esnext.symbol.replace-all.js ***! + \************************************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +// TODO: remove from `core-js@4` +var defineWellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol-define */ "./node_modules/core-js-pure/internals/well-known-symbol-define.js"); + +defineWellKnownSymbol('replaceAll'); + + +/***/ }), + +/***/ "./node_modules/core-js-pure/modules/web.clear-immediate.js": +/*!******************************************************************!*\ + !*** ./node_modules/core-js-pure/modules/web.clear-immediate.js ***! + \******************************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var $ = __webpack_require__(/*! ../internals/export */ "./node_modules/core-js-pure/internals/export.js"); +var globalThis = __webpack_require__(/*! ../internals/global-this */ "./node_modules/core-js-pure/internals/global-this.js"); +var clearImmediate = (__webpack_require__(/*! ../internals/task */ "./node_modules/core-js-pure/internals/task.js").clear); + +// `clearImmediate` method +// http://w3c.github.io/setImmediate/#si-clearImmediate +$({ global: true, bind: true, enumerable: true, forced: globalThis.clearImmediate !== clearImmediate }, { + clearImmediate: clearImmediate +}); + + +/***/ }), + +/***/ "./node_modules/core-js-pure/modules/web.dom-collections.for-each.js": +/*!***************************************************************************!*\ + !*** ./node_modules/core-js-pure/modules/web.dom-collections.for-each.js ***! + \***************************************************************************/ +/***/ (() => { + +// empty + + +/***/ }), + +/***/ "./node_modules/core-js-pure/modules/web.dom-collections.iterator.js": +/*!***************************************************************************!*\ + !*** ./node_modules/core-js-pure/modules/web.dom-collections.iterator.js ***! + \***************************************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +__webpack_require__(/*! ../modules/es.array.iterator */ "./node_modules/core-js-pure/modules/es.array.iterator.js"); +var DOMIterables = __webpack_require__(/*! ../internals/dom-iterables */ "./node_modules/core-js-pure/internals/dom-iterables.js"); +var globalThis = __webpack_require__(/*! ../internals/global-this */ "./node_modules/core-js-pure/internals/global-this.js"); +var setToStringTag = __webpack_require__(/*! ../internals/set-to-string-tag */ "./node_modules/core-js-pure/internals/set-to-string-tag.js"); +var Iterators = __webpack_require__(/*! ../internals/iterators */ "./node_modules/core-js-pure/internals/iterators.js"); + +for (var COLLECTION_NAME in DOMIterables) { + setToStringTag(globalThis[COLLECTION_NAME], COLLECTION_NAME); + Iterators[COLLECTION_NAME] = Iterators.Array; +} + + +/***/ }), + +/***/ "./node_modules/core-js-pure/modules/web.immediate.js": +/*!************************************************************!*\ + !*** ./node_modules/core-js-pure/modules/web.immediate.js ***! + \************************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +// TODO: Remove this module from `core-js@4` since it's split to modules listed below +__webpack_require__(/*! ../modules/web.clear-immediate */ "./node_modules/core-js-pure/modules/web.clear-immediate.js"); +__webpack_require__(/*! ../modules/web.set-immediate */ "./node_modules/core-js-pure/modules/web.set-immediate.js"); + + +/***/ }), + +/***/ "./node_modules/core-js-pure/modules/web.set-immediate.js": +/*!****************************************************************!*\ + !*** ./node_modules/core-js-pure/modules/web.set-immediate.js ***! + \****************************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var $ = __webpack_require__(/*! ../internals/export */ "./node_modules/core-js-pure/internals/export.js"); +var globalThis = __webpack_require__(/*! ../internals/global-this */ "./node_modules/core-js-pure/internals/global-this.js"); +var setTask = (__webpack_require__(/*! ../internals/task */ "./node_modules/core-js-pure/internals/task.js").set); +var schedulersFix = __webpack_require__(/*! ../internals/schedulers-fix */ "./node_modules/core-js-pure/internals/schedulers-fix.js"); + +// https://github.com/oven-sh/bun/issues/1633 +var setImmediate = globalThis.setImmediate ? schedulersFix(setTask, false) : setTask; + +// `setImmediate` method +// http://w3c.github.io/setImmediate/#si-setImmediate +$({ global: true, bind: true, enumerable: true, forced: globalThis.setImmediate !== setImmediate }, { + setImmediate: setImmediate +}); + + +/***/ }), + +/***/ "./node_modules/core-js-pure/modules/web.set-interval.js": +/*!***************************************************************!*\ + !*** ./node_modules/core-js-pure/modules/web.set-interval.js ***! + \***************************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var $ = __webpack_require__(/*! ../internals/export */ "./node_modules/core-js-pure/internals/export.js"); +var globalThis = __webpack_require__(/*! ../internals/global-this */ "./node_modules/core-js-pure/internals/global-this.js"); +var schedulersFix = __webpack_require__(/*! ../internals/schedulers-fix */ "./node_modules/core-js-pure/internals/schedulers-fix.js"); + +var setInterval = schedulersFix(globalThis.setInterval, true); + +// Bun / IE9- setInterval additional parameters fix +// https://html.spec.whatwg.org/multipage/timers-and-user-prompts.html#dom-setinterval +$({ global: true, bind: true, forced: globalThis.setInterval !== setInterval }, { + setInterval: setInterval +}); + + +/***/ }), + +/***/ "./node_modules/core-js-pure/modules/web.set-timeout.js": +/*!**************************************************************!*\ + !*** ./node_modules/core-js-pure/modules/web.set-timeout.js ***! + \**************************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var $ = __webpack_require__(/*! ../internals/export */ "./node_modules/core-js-pure/internals/export.js"); +var globalThis = __webpack_require__(/*! ../internals/global-this */ "./node_modules/core-js-pure/internals/global-this.js"); +var schedulersFix = __webpack_require__(/*! ../internals/schedulers-fix */ "./node_modules/core-js-pure/internals/schedulers-fix.js"); + +var setTimeout = schedulersFix(globalThis.setTimeout, true); + +// Bun / IE9- setTimeout additional parameters fix +// https://html.spec.whatwg.org/multipage/timers-and-user-prompts.html#dom-settimeout +$({ global: true, bind: true, forced: globalThis.setTimeout !== setTimeout }, { + setTimeout: setTimeout +}); + + +/***/ }), + +/***/ "./node_modules/core-js-pure/modules/web.timers.js": +/*!*********************************************************!*\ + !*** ./node_modules/core-js-pure/modules/web.timers.js ***! + \*********************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +// TODO: Remove this module from `core-js@4` since it's split to modules listed below +__webpack_require__(/*! ../modules/web.set-interval */ "./node_modules/core-js-pure/modules/web.set-interval.js"); +__webpack_require__(/*! ../modules/web.set-timeout */ "./node_modules/core-js-pure/modules/web.set-timeout.js"); + + +/***/ }), + +/***/ "./node_modules/core-js-pure/modules/web.url-search-params.constructor.js": +/*!********************************************************************************!*\ + !*** ./node_modules/core-js-pure/modules/web.url-search-params.constructor.js ***! + \********************************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +// TODO: in core-js@4, move /modules/ dependencies to public entries for better optimization by tools like `preset-env` +__webpack_require__(/*! ../modules/es.array.iterator */ "./node_modules/core-js-pure/modules/es.array.iterator.js"); +__webpack_require__(/*! ../modules/es.string.from-code-point */ "./node_modules/core-js-pure/modules/es.string.from-code-point.js"); +var $ = __webpack_require__(/*! ../internals/export */ "./node_modules/core-js-pure/internals/export.js"); +var globalThis = __webpack_require__(/*! ../internals/global-this */ "./node_modules/core-js-pure/internals/global-this.js"); +var safeGetBuiltIn = __webpack_require__(/*! ../internals/safe-get-built-in */ "./node_modules/core-js-pure/internals/safe-get-built-in.js"); +var getBuiltIn = __webpack_require__(/*! ../internals/get-built-in */ "./node_modules/core-js-pure/internals/get-built-in.js"); +var call = __webpack_require__(/*! ../internals/function-call */ "./node_modules/core-js-pure/internals/function-call.js"); +var uncurryThis = __webpack_require__(/*! ../internals/function-uncurry-this */ "./node_modules/core-js-pure/internals/function-uncurry-this.js"); +var DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ "./node_modules/core-js-pure/internals/descriptors.js"); +var USE_NATIVE_URL = __webpack_require__(/*! ../internals/url-constructor-detection */ "./node_modules/core-js-pure/internals/url-constructor-detection.js"); +var defineBuiltIn = __webpack_require__(/*! ../internals/define-built-in */ "./node_modules/core-js-pure/internals/define-built-in.js"); +var defineBuiltInAccessor = __webpack_require__(/*! ../internals/define-built-in-accessor */ "./node_modules/core-js-pure/internals/define-built-in-accessor.js"); +var defineBuiltIns = __webpack_require__(/*! ../internals/define-built-ins */ "./node_modules/core-js-pure/internals/define-built-ins.js"); +var setToStringTag = __webpack_require__(/*! ../internals/set-to-string-tag */ "./node_modules/core-js-pure/internals/set-to-string-tag.js"); +var createIteratorConstructor = __webpack_require__(/*! ../internals/iterator-create-constructor */ "./node_modules/core-js-pure/internals/iterator-create-constructor.js"); +var InternalStateModule = __webpack_require__(/*! ../internals/internal-state */ "./node_modules/core-js-pure/internals/internal-state.js"); +var anInstance = __webpack_require__(/*! ../internals/an-instance */ "./node_modules/core-js-pure/internals/an-instance.js"); +var isCallable = __webpack_require__(/*! ../internals/is-callable */ "./node_modules/core-js-pure/internals/is-callable.js"); +var hasOwn = __webpack_require__(/*! ../internals/has-own-property */ "./node_modules/core-js-pure/internals/has-own-property.js"); +var bind = __webpack_require__(/*! ../internals/function-bind-context */ "./node_modules/core-js-pure/internals/function-bind-context.js"); +var classof = __webpack_require__(/*! ../internals/classof */ "./node_modules/core-js-pure/internals/classof.js"); +var anObject = __webpack_require__(/*! ../internals/an-object */ "./node_modules/core-js-pure/internals/an-object.js"); +var isObject = __webpack_require__(/*! ../internals/is-object */ "./node_modules/core-js-pure/internals/is-object.js"); +var $toString = __webpack_require__(/*! ../internals/to-string */ "./node_modules/core-js-pure/internals/to-string.js"); +var create = __webpack_require__(/*! ../internals/object-create */ "./node_modules/core-js-pure/internals/object-create.js"); +var createPropertyDescriptor = __webpack_require__(/*! ../internals/create-property-descriptor */ "./node_modules/core-js-pure/internals/create-property-descriptor.js"); +var getIterator = __webpack_require__(/*! ../internals/get-iterator */ "./node_modules/core-js-pure/internals/get-iterator.js"); +var getIteratorMethod = __webpack_require__(/*! ../internals/get-iterator-method */ "./node_modules/core-js-pure/internals/get-iterator-method.js"); +var createIterResultObject = __webpack_require__(/*! ../internals/create-iter-result-object */ "./node_modules/core-js-pure/internals/create-iter-result-object.js"); +var validateArgumentsLength = __webpack_require__(/*! ../internals/validate-arguments-length */ "./node_modules/core-js-pure/internals/validate-arguments-length.js"); +var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ "./node_modules/core-js-pure/internals/well-known-symbol.js"); +var arraySort = __webpack_require__(/*! ../internals/array-sort */ "./node_modules/core-js-pure/internals/array-sort.js"); + +var ITERATOR = wellKnownSymbol('iterator'); +var URL_SEARCH_PARAMS = 'URLSearchParams'; +var URL_SEARCH_PARAMS_ITERATOR = URL_SEARCH_PARAMS + 'Iterator'; +var setInternalState = InternalStateModule.set; +var getInternalParamsState = InternalStateModule.getterFor(URL_SEARCH_PARAMS); +var getInternalIteratorState = InternalStateModule.getterFor(URL_SEARCH_PARAMS_ITERATOR); + +var nativeFetch = safeGetBuiltIn('fetch'); +var NativeRequest = safeGetBuiltIn('Request'); +var Headers = safeGetBuiltIn('Headers'); +var RequestPrototype = NativeRequest && NativeRequest.prototype; +var HeadersPrototype = Headers && Headers.prototype; +var TypeError = globalThis.TypeError; +var encodeURIComponent = globalThis.encodeURIComponent; +var fromCharCode = String.fromCharCode; +var fromCodePoint = getBuiltIn('String', 'fromCodePoint'); +var $parseInt = parseInt; +var charAt = uncurryThis(''.charAt); +var join = uncurryThis([].join); +var push = uncurryThis([].push); +var replace = uncurryThis(''.replace); +var shift = uncurryThis([].shift); +var splice = uncurryThis([].splice); +var split = uncurryThis(''.split); +var stringSlice = uncurryThis(''.slice); +var exec = uncurryThis(/./.exec); + +var plus = /\+/g; +var FALLBACK_REPLACER = '\uFFFD'; +var VALID_HEX = /^[0-9a-f]+$/i; + +var parseHexOctet = function (string, start) { + var substr = stringSlice(string, start, start + 2); + if (!exec(VALID_HEX, substr)) return NaN; + + return $parseInt(substr, 16); +}; + +var getLeadingOnes = function (octet) { + var count = 0; + for (var mask = 0x80; mask > 0 && (octet & mask) !== 0; mask >>= 1) { + count++; + } + return count; +}; + +var utf8Decode = function (octets) { + var codePoint = null; + + switch (octets.length) { + case 1: + codePoint = octets[0]; + break; + case 2: + codePoint = (octets[0] & 0x1F) << 6 | (octets[1] & 0x3F); + break; + case 3: + codePoint = (octets[0] & 0x0F) << 12 | (octets[1] & 0x3F) << 6 | (octets[2] & 0x3F); + break; + case 4: + codePoint = (octets[0] & 0x07) << 18 | (octets[1] & 0x3F) << 12 | (octets[2] & 0x3F) << 6 | (octets[3] & 0x3F); + break; + } + + return codePoint > 0x10FFFF ? null : codePoint; +}; + +var decode = function (input) { + input = replace(input, plus, ' '); + var length = input.length; + var result = ''; + var i = 0; + + while (i < length) { + var decodedChar = charAt(input, i); + + if (decodedChar === '%') { + if (charAt(input, i + 1) === '%' || i + 3 > length) { + result += '%'; + i++; + continue; + } + + var octet = parseHexOctet(input, i + 1); + + // eslint-disable-next-line no-self-compare -- NaN check + if (octet !== octet) { + result += decodedChar; + i++; + continue; + } + + i += 2; + var byteSequenceLength = getLeadingOnes(octet); + + if (byteSequenceLength === 0) { + decodedChar = fromCharCode(octet); + } else { + if (byteSequenceLength === 1 || byteSequenceLength > 4) { + result += FALLBACK_REPLACER; + i++; + continue; + } + + var octets = [octet]; + var sequenceIndex = 1; + + while (sequenceIndex < byteSequenceLength) { + i++; + if (i + 3 > length || charAt(input, i) !== '%') break; + + var nextByte = parseHexOctet(input, i + 1); + + // eslint-disable-next-line no-self-compare -- NaN check + if (nextByte !== nextByte) { + i += 3; + break; + } + if (nextByte > 191 || nextByte < 128) break; + + push(octets, nextByte); + i += 2; + sequenceIndex++; + } + + if (octets.length !== byteSequenceLength) { + result += FALLBACK_REPLACER; + continue; + } + + var codePoint = utf8Decode(octets); + if (codePoint === null) { + result += FALLBACK_REPLACER; + } else { + decodedChar = fromCodePoint(codePoint); + } + } + } + + result += decodedChar; + i++; + } + + return result; +}; + +var find = /[!'()~]|%20/g; + +var replacements = { + '!': '%21', + "'": '%27', + '(': '%28', + ')': '%29', + '~': '%7E', + '%20': '+' +}; + +var replacer = function (match) { + return replacements[match]; +}; + +var serialize = function (it) { + return replace(encodeURIComponent(it), find, replacer); +}; + +var URLSearchParamsIterator = createIteratorConstructor(function Iterator(params, kind) { + setInternalState(this, { + type: URL_SEARCH_PARAMS_ITERATOR, + target: getInternalParamsState(params).entries, + index: 0, + kind: kind + }); +}, URL_SEARCH_PARAMS, function next() { + var state = getInternalIteratorState(this); + var target = state.target; + var index = state.index++; + if (!target || index >= target.length) { + state.target = null; + return createIterResultObject(undefined, true); + } + var entry = target[index]; + switch (state.kind) { + case 'keys': return createIterResultObject(entry.key, false); + case 'values': return createIterResultObject(entry.value, false); + } return createIterResultObject([entry.key, entry.value], false); +}, true); + +var URLSearchParamsState = function (init) { + this.entries = []; + this.url = null; + + if (init !== undefined) { + if (isObject(init)) this.parseObject(init); + else this.parseQuery(typeof init == 'string' ? charAt(init, 0) === '?' ? stringSlice(init, 1) : init : $toString(init)); + } +}; + +URLSearchParamsState.prototype = { + type: URL_SEARCH_PARAMS, + bindURL: function (url) { + this.url = url; + this.update(); + }, + parseObject: function (object) { + var entries = this.entries; + var iteratorMethod = getIteratorMethod(object); + var iterator, next, step, entryIterator, entryNext, first, second; + + if (iteratorMethod) { + iterator = getIterator(object, iteratorMethod); + next = iterator.next; + while (!(step = call(next, iterator)).done) { + entryIterator = getIterator(anObject(step.value)); + entryNext = entryIterator.next; + if ( + (first = call(entryNext, entryIterator)).done || + (second = call(entryNext, entryIterator)).done || + !call(entryNext, entryIterator).done + ) throw new TypeError('Expected sequence with length 2'); + push(entries, { key: $toString(first.value), value: $toString(second.value) }); + } + } else for (var key in object) if (hasOwn(object, key)) { + push(entries, { key: key, value: $toString(object[key]) }); + } + }, + parseQuery: function (query) { + if (query) { + var entries = this.entries; + var attributes = split(query, '&'); + var index = 0; + var attribute, entry; + while (index < attributes.length) { + attribute = attributes[index++]; + if (attribute.length) { + entry = split(attribute, '='); + push(entries, { + key: decode(shift(entry)), + value: decode(join(entry, '=')) + }); + } + } + } + }, + serialize: function () { + var entries = this.entries; + var result = []; + var index = 0; + var entry; + while (index < entries.length) { + entry = entries[index++]; + push(result, serialize(entry.key) + '=' + serialize(entry.value)); + } return join(result, '&'); + }, + update: function () { + this.entries.length = 0; + this.parseQuery(this.url.query); + }, + updateURL: function () { + if (this.url) this.url.update(); + } +}; + +// `URLSearchParams` constructor +// https://url.spec.whatwg.org/#interface-urlsearchparams +var URLSearchParamsConstructor = function URLSearchParams(/* init */) { + anInstance(this, URLSearchParamsPrototype); + var init = arguments.length > 0 ? arguments[0] : undefined; + var state = setInternalState(this, new URLSearchParamsState(init)); + if (!DESCRIPTORS) this.size = state.entries.length; +}; + +var URLSearchParamsPrototype = URLSearchParamsConstructor.prototype; + +defineBuiltIns(URLSearchParamsPrototype, { + // `URLSearchParams.prototype.append` method + // https://url.spec.whatwg.org/#dom-urlsearchparams-append + append: function append(name, value) { + var state = getInternalParamsState(this); + validateArgumentsLength(arguments.length, 2); + push(state.entries, { key: $toString(name), value: $toString(value) }); + if (!DESCRIPTORS) this.length++; + state.updateURL(); + }, + // `URLSearchParams.prototype.delete` method + // https://url.spec.whatwg.org/#dom-urlsearchparams-delete + 'delete': function (name /* , value */) { + var state = getInternalParamsState(this); + var length = validateArgumentsLength(arguments.length, 1); + var entries = state.entries; + var key = $toString(name); + var $value = length < 2 ? undefined : arguments[1]; + var value = $value === undefined ? $value : $toString($value); + var index = 0; + while (index < entries.length) { + var entry = entries[index]; + if (entry.key === key && (value === undefined || entry.value === value)) { + splice(entries, index, 1); + if (value !== undefined) break; + } else index++; + } + if (!DESCRIPTORS) this.size = entries.length; + state.updateURL(); + }, + // `URLSearchParams.prototype.get` method + // https://url.spec.whatwg.org/#dom-urlsearchparams-get + get: function get(name) { + var entries = getInternalParamsState(this).entries; + validateArgumentsLength(arguments.length, 1); + var key = $toString(name); + var index = 0; + for (; index < entries.length; index++) { + if (entries[index].key === key) return entries[index].value; + } + return null; + }, + // `URLSearchParams.prototype.getAll` method + // https://url.spec.whatwg.org/#dom-urlsearchparams-getall + getAll: function getAll(name) { + var entries = getInternalParamsState(this).entries; + validateArgumentsLength(arguments.length, 1); + var key = $toString(name); + var result = []; + var index = 0; + for (; index < entries.length; index++) { + if (entries[index].key === key) push(result, entries[index].value); + } + return result; + }, + // `URLSearchParams.prototype.has` method + // https://url.spec.whatwg.org/#dom-urlsearchparams-has + has: function has(name /* , value */) { + var entries = getInternalParamsState(this).entries; + var length = validateArgumentsLength(arguments.length, 1); + var key = $toString(name); + var $value = length < 2 ? undefined : arguments[1]; + var value = $value === undefined ? $value : $toString($value); + var index = 0; + while (index < entries.length) { + var entry = entries[index++]; + if (entry.key === key && (value === undefined || entry.value === value)) return true; + } + return false; + }, + // `URLSearchParams.prototype.set` method + // https://url.spec.whatwg.org/#dom-urlsearchparams-set + set: function set(name, value) { + var state = getInternalParamsState(this); + validateArgumentsLength(arguments.length, 1); + var entries = state.entries; + var found = false; + var key = $toString(name); + var val = $toString(value); + var index = 0; + var entry; + for (; index < entries.length; index++) { + entry = entries[index]; + if (entry.key === key) { + if (found) splice(entries, index--, 1); + else { + found = true; + entry.value = val; + } + } + } + if (!found) push(entries, { key: key, value: val }); + if (!DESCRIPTORS) this.size = entries.length; + state.updateURL(); + }, + // `URLSearchParams.prototype.sort` method + // https://url.spec.whatwg.org/#dom-urlsearchparams-sort + sort: function sort() { + var state = getInternalParamsState(this); + arraySort(state.entries, function (a, b) { + return a.key > b.key ? 1 : -1; + }); + state.updateURL(); + }, + // `URLSearchParams.prototype.forEach` method + forEach: function forEach(callback /* , thisArg */) { + var entries = getInternalParamsState(this).entries; + var boundFunction = bind(callback, arguments.length > 1 ? arguments[1] : undefined); + var index = 0; + var entry; + while (index < entries.length) { + entry = entries[index++]; + boundFunction(entry.value, entry.key, this); + } + }, + // `URLSearchParams.prototype.keys` method + keys: function keys() { + return new URLSearchParamsIterator(this, 'keys'); + }, + // `URLSearchParams.prototype.values` method + values: function values() { + return new URLSearchParamsIterator(this, 'values'); + }, + // `URLSearchParams.prototype.entries` method + entries: function entries() { + return new URLSearchParamsIterator(this, 'entries'); + } +}, { enumerable: true }); + +// `URLSearchParams.prototype[@@iterator]` method +defineBuiltIn(URLSearchParamsPrototype, ITERATOR, URLSearchParamsPrototype.entries, { name: 'entries' }); + +// `URLSearchParams.prototype.toString` method +// https://url.spec.whatwg.org/#urlsearchparams-stringification-behavior +defineBuiltIn(URLSearchParamsPrototype, 'toString', function toString() { + return getInternalParamsState(this).serialize(); +}, { enumerable: true }); + +// `URLSearchParams.prototype.size` getter +// https://github.com/whatwg/url/pull/734 +if (DESCRIPTORS) defineBuiltInAccessor(URLSearchParamsPrototype, 'size', { + get: function size() { + return getInternalParamsState(this).entries.length; + }, + configurable: true, + enumerable: true +}); + +setToStringTag(URLSearchParamsConstructor, URL_SEARCH_PARAMS); + +$({ global: true, constructor: true, forced: !USE_NATIVE_URL }, { + URLSearchParams: URLSearchParamsConstructor +}); + +// Wrap `fetch` and `Request` for correct work with polyfilled `URLSearchParams` +if (!USE_NATIVE_URL && isCallable(Headers)) { + var headersHas = uncurryThis(HeadersPrototype.has); + var headersSet = uncurryThis(HeadersPrototype.set); + + var wrapRequestOptions = function (init) { + if (isObject(init)) { + var body = init.body; + var headers; + if (classof(body) === URL_SEARCH_PARAMS) { + headers = init.headers ? new Headers(init.headers) : new Headers(); + if (!headersHas(headers, 'content-type')) { + headersSet(headers, 'content-type', 'application/x-www-form-urlencoded;charset=UTF-8'); + } + return create(init, { + body: createPropertyDescriptor(0, $toString(body)), + headers: createPropertyDescriptor(0, headers) + }); + } + } return init; + }; + + if (isCallable(nativeFetch)) { + $({ global: true, enumerable: true, dontCallGetSet: true, forced: true }, { + fetch: function fetch(input /* , init */) { + return nativeFetch(input, arguments.length > 1 ? wrapRequestOptions(arguments[1]) : {}); + } + }); + } + + if (isCallable(NativeRequest)) { + var RequestConstructor = function Request(input /* , init */) { + anInstance(this, RequestPrototype); + return new NativeRequest(input, arguments.length > 1 ? wrapRequestOptions(arguments[1]) : {}); + }; + + RequestPrototype.constructor = RequestConstructor; + RequestConstructor.prototype = RequestPrototype; + + $({ global: true, constructor: true, dontCallGetSet: true, forced: true }, { + Request: RequestConstructor + }); + } +} + +module.exports = { + URLSearchParams: URLSearchParamsConstructor, + getState: getInternalParamsState +}; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/modules/web.url-search-params.delete.js": +/*!***************************************************************************!*\ + !*** ./node_modules/core-js-pure/modules/web.url-search-params.delete.js ***! + \***************************************************************************/ +/***/ (() => { + +// empty + + +/***/ }), + +/***/ "./node_modules/core-js-pure/modules/web.url-search-params.has.js": +/*!************************************************************************!*\ + !*** ./node_modules/core-js-pure/modules/web.url-search-params.has.js ***! + \************************************************************************/ +/***/ (() => { + +// empty + + +/***/ }), + +/***/ "./node_modules/core-js-pure/modules/web.url-search-params.js": +/*!********************************************************************!*\ + !*** ./node_modules/core-js-pure/modules/web.url-search-params.js ***! + \********************************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +// TODO: Remove this module from `core-js@4` since it's replaced to module below +__webpack_require__(/*! ../modules/web.url-search-params.constructor */ "./node_modules/core-js-pure/modules/web.url-search-params.constructor.js"); + + +/***/ }), + +/***/ "./node_modules/core-js-pure/modules/web.url-search-params.size.js": +/*!*************************************************************************!*\ + !*** ./node_modules/core-js-pure/modules/web.url-search-params.size.js ***! + \*************************************************************************/ +/***/ (() => { + +// empty + + +/***/ }), + +/***/ "./node_modules/core-js-pure/modules/web.url.can-parse.js": +/*!****************************************************************!*\ + !*** ./node_modules/core-js-pure/modules/web.url.can-parse.js ***! + \****************************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var $ = __webpack_require__(/*! ../internals/export */ "./node_modules/core-js-pure/internals/export.js"); +var getBuiltIn = __webpack_require__(/*! ../internals/get-built-in */ "./node_modules/core-js-pure/internals/get-built-in.js"); +var fails = __webpack_require__(/*! ../internals/fails */ "./node_modules/core-js-pure/internals/fails.js"); +var validateArgumentsLength = __webpack_require__(/*! ../internals/validate-arguments-length */ "./node_modules/core-js-pure/internals/validate-arguments-length.js"); +var toString = __webpack_require__(/*! ../internals/to-string */ "./node_modules/core-js-pure/internals/to-string.js"); +var USE_NATIVE_URL = __webpack_require__(/*! ../internals/url-constructor-detection */ "./node_modules/core-js-pure/internals/url-constructor-detection.js"); + +var URL = getBuiltIn('URL'); + +// https://github.com/nodejs/node/issues/47505 +// https://github.com/denoland/deno/issues/18893 +var THROWS_WITHOUT_ARGUMENTS = USE_NATIVE_URL && fails(function () { + URL.canParse(); +}); + +// Bun ~ 1.0.30 bug +// https://github.com/oven-sh/bun/issues/9250 +var WRONG_ARITY = fails(function () { + return URL.canParse.length !== 1; +}); + +// `URL.canParse` method +// https://url.spec.whatwg.org/#dom-url-canparse +$({ target: 'URL', stat: true, forced: !THROWS_WITHOUT_ARGUMENTS || WRONG_ARITY }, { + canParse: function canParse(url) { + var length = validateArgumentsLength(arguments.length, 1); + var urlString = toString(url); + var base = length < 2 || arguments[1] === undefined ? undefined : toString(arguments[1]); + try { + return !!new URL(urlString, base); + } catch (error) { + return false; + } + } +}); + + +/***/ }), + +/***/ "./node_modules/core-js-pure/modules/web.url.constructor.js": +/*!******************************************************************!*\ + !*** ./node_modules/core-js-pure/modules/web.url.constructor.js ***! + \******************************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +// TODO: in core-js@4, move /modules/ dependencies to public entries for better optimization by tools like `preset-env` +__webpack_require__(/*! ../modules/es.string.iterator */ "./node_modules/core-js-pure/modules/es.string.iterator.js"); +var $ = __webpack_require__(/*! ../internals/export */ "./node_modules/core-js-pure/internals/export.js"); +var DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ "./node_modules/core-js-pure/internals/descriptors.js"); +var USE_NATIVE_URL = __webpack_require__(/*! ../internals/url-constructor-detection */ "./node_modules/core-js-pure/internals/url-constructor-detection.js"); +var globalThis = __webpack_require__(/*! ../internals/global-this */ "./node_modules/core-js-pure/internals/global-this.js"); +var bind = __webpack_require__(/*! ../internals/function-bind-context */ "./node_modules/core-js-pure/internals/function-bind-context.js"); +var uncurryThis = __webpack_require__(/*! ../internals/function-uncurry-this */ "./node_modules/core-js-pure/internals/function-uncurry-this.js"); +var defineBuiltIn = __webpack_require__(/*! ../internals/define-built-in */ "./node_modules/core-js-pure/internals/define-built-in.js"); +var defineBuiltInAccessor = __webpack_require__(/*! ../internals/define-built-in-accessor */ "./node_modules/core-js-pure/internals/define-built-in-accessor.js"); +var anInstance = __webpack_require__(/*! ../internals/an-instance */ "./node_modules/core-js-pure/internals/an-instance.js"); +var hasOwn = __webpack_require__(/*! ../internals/has-own-property */ "./node_modules/core-js-pure/internals/has-own-property.js"); +var assign = __webpack_require__(/*! ../internals/object-assign */ "./node_modules/core-js-pure/internals/object-assign.js"); +var arrayFrom = __webpack_require__(/*! ../internals/array-from */ "./node_modules/core-js-pure/internals/array-from.js"); +var arraySlice = __webpack_require__(/*! ../internals/array-slice */ "./node_modules/core-js-pure/internals/array-slice.js"); +var codeAt = (__webpack_require__(/*! ../internals/string-multibyte */ "./node_modules/core-js-pure/internals/string-multibyte.js").codeAt); +var toASCII = __webpack_require__(/*! ../internals/string-punycode-to-ascii */ "./node_modules/core-js-pure/internals/string-punycode-to-ascii.js"); +var $toString = __webpack_require__(/*! ../internals/to-string */ "./node_modules/core-js-pure/internals/to-string.js"); +var setToStringTag = __webpack_require__(/*! ../internals/set-to-string-tag */ "./node_modules/core-js-pure/internals/set-to-string-tag.js"); +var validateArgumentsLength = __webpack_require__(/*! ../internals/validate-arguments-length */ "./node_modules/core-js-pure/internals/validate-arguments-length.js"); +var URLSearchParamsModule = __webpack_require__(/*! ../modules/web.url-search-params.constructor */ "./node_modules/core-js-pure/modules/web.url-search-params.constructor.js"); +var InternalStateModule = __webpack_require__(/*! ../internals/internal-state */ "./node_modules/core-js-pure/internals/internal-state.js"); + +var setInternalState = InternalStateModule.set; +var getInternalURLState = InternalStateModule.getterFor('URL'); +var URLSearchParams = URLSearchParamsModule.URLSearchParams; +var getInternalSearchParamsState = URLSearchParamsModule.getState; + +var NativeURL = globalThis.URL; +var TypeError = globalThis.TypeError; +var parseInt = globalThis.parseInt; +var floor = Math.floor; +var pow = Math.pow; +var charAt = uncurryThis(''.charAt); +var exec = uncurryThis(/./.exec); +var join = uncurryThis([].join); +var numberToString = uncurryThis(1.0.toString); +var pop = uncurryThis([].pop); +var push = uncurryThis([].push); +var replace = uncurryThis(''.replace); +var shift = uncurryThis([].shift); +var split = uncurryThis(''.split); +var stringSlice = uncurryThis(''.slice); +var toLowerCase = uncurryThis(''.toLowerCase); +var unshift = uncurryThis([].unshift); + +var INVALID_AUTHORITY = 'Invalid authority'; +var INVALID_SCHEME = 'Invalid scheme'; +var INVALID_HOST = 'Invalid host'; +var INVALID_PORT = 'Invalid port'; + +var ALPHA = /[a-z]/i; +// eslint-disable-next-line regexp/no-obscure-range -- safe +var ALPHANUMERIC = /[\d+-.a-z]/i; +var DIGIT = /\d/; +var HEX_START = /^0x/i; +var OCT = /^[0-7]+$/; +var DEC = /^\d+$/; +var HEX = /^[\da-f]+$/i; +/* eslint-disable regexp/no-control-character -- safe */ +var FORBIDDEN_HOST_CODE_POINT = /[\0\t\n\r #%/:<>?@[\\\]^|]/; +var FORBIDDEN_HOST_CODE_POINT_EXCLUDING_PERCENT = /[\0\t\n\r #/:<>?@[\\\]^|]/; +var LEADING_C0_CONTROL_OR_SPACE = /^[\u0000-\u0020]+/; +var TRAILING_C0_CONTROL_OR_SPACE = /(^|[^\u0000-\u0020])[\u0000-\u0020]+$/; +var TAB_AND_NEW_LINE = /[\t\n\r]/g; +/* eslint-enable regexp/no-control-character -- safe */ +var EOF; + +// https://url.spec.whatwg.org/#ipv4-number-parser +var parseIPv4 = function (input) { + var parts = split(input, '.'); + var partsLength, numbers, index, part, radix, number, ipv4; + if (parts.length && parts[parts.length - 1] === '') { + parts.length--; + } + partsLength = parts.length; + if (partsLength > 4) return input; + numbers = []; + for (index = 0; index < partsLength; index++) { + part = parts[index]; + if (part === '') return input; + radix = 10; + if (part.length > 1 && charAt(part, 0) === '0') { + radix = exec(HEX_START, part) ? 16 : 8; + part = stringSlice(part, radix === 8 ? 1 : 2); + } + if (part === '') { + number = 0; + } else { + if (!exec(radix === 10 ? DEC : radix === 8 ? OCT : HEX, part)) return input; + number = parseInt(part, radix); + } + push(numbers, number); + } + for (index = 0; index < partsLength; index++) { + number = numbers[index]; + if (index === partsLength - 1) { + if (number >= pow(256, 5 - partsLength)) return null; + } else if (number > 255) return null; + } + ipv4 = pop(numbers); + for (index = 0; index < numbers.length; index++) { + ipv4 += numbers[index] * pow(256, 3 - index); + } + return ipv4; +}; + +// https://url.spec.whatwg.org/#concept-ipv6-parser +// eslint-disable-next-line max-statements -- TODO +var parseIPv6 = function (input) { + var address = [0, 0, 0, 0, 0, 0, 0, 0]; + var pieceIndex = 0; + var compress = null; + var pointer = 0; + var value, length, numbersSeen, ipv4Piece, number, swaps, swap; + + var chr = function () { + return charAt(input, pointer); + }; + + if (chr() === ':') { + if (charAt(input, 1) !== ':') return; + pointer += 2; + pieceIndex++; + compress = pieceIndex; + } + while (chr()) { + if (pieceIndex === 8) return; + if (chr() === ':') { + if (compress !== null) return; + pointer++; + pieceIndex++; + compress = pieceIndex; + continue; + } + value = length = 0; + while (length < 4 && exec(HEX, chr())) { + value = value * 16 + parseInt(chr(), 16); + pointer++; + length++; + } + if (chr() === '.') { + if (length === 0) return; + pointer -= length; + if (pieceIndex > 6) return; + numbersSeen = 0; + while (chr()) { + ipv4Piece = null; + if (numbersSeen > 0) { + if (chr() === '.' && numbersSeen < 4) pointer++; + else return; + } + if (!exec(DIGIT, chr())) return; + while (exec(DIGIT, chr())) { + number = parseInt(chr(), 10); + if (ipv4Piece === null) ipv4Piece = number; + else if (ipv4Piece === 0) return; + else ipv4Piece = ipv4Piece * 10 + number; + if (ipv4Piece > 255) return; + pointer++; + } + address[pieceIndex] = address[pieceIndex] * 256 + ipv4Piece; + numbersSeen++; + if (numbersSeen === 2 || numbersSeen === 4) pieceIndex++; + } + if (numbersSeen !== 4) return; + break; + } else if (chr() === ':') { + pointer++; + if (!chr()) return; + } else if (chr()) return; + address[pieceIndex++] = value; + } + if (compress !== null) { + swaps = pieceIndex - compress; + pieceIndex = 7; + while (pieceIndex !== 0 && swaps > 0) { + swap = address[pieceIndex]; + address[pieceIndex--] = address[compress + swaps - 1]; + address[compress + --swaps] = swap; + } + } else if (pieceIndex !== 8) return; + return address; +}; + +var findLongestZeroSequence = function (ipv6) { + var maxIndex = null; + var maxLength = 1; + var currStart = null; + var currLength = 0; + var index = 0; + for (; index < 8; index++) { + if (ipv6[index] !== 0) { + if (currLength > maxLength) { + maxIndex = currStart; + maxLength = currLength; + } + currStart = null; + currLength = 0; + } else { + if (currStart === null) currStart = index; + ++currLength; + } + } + return currLength > maxLength ? currStart : maxIndex; +}; + +// https://url.spec.whatwg.org/#host-serializing +var serializeHost = function (host) { + var result, index, compress, ignore0; + + // ipv4 + if (typeof host == 'number') { + result = []; + for (index = 0; index < 4; index++) { + unshift(result, host % 256); + host = floor(host / 256); + } + return join(result, '.'); + } + + // ipv6 + if (typeof host == 'object') { + result = ''; + compress = findLongestZeroSequence(host); + for (index = 0; index < 8; index++) { + if (ignore0 && host[index] === 0) continue; + if (ignore0) ignore0 = false; + if (compress === index) { + result += index ? ':' : '::'; + ignore0 = true; + } else { + result += numberToString(host[index], 16); + if (index < 7) result += ':'; + } + } + return '[' + result + ']'; + } + + return host; +}; + +var C0ControlPercentEncodeSet = {}; +var fragmentPercentEncodeSet = assign({}, C0ControlPercentEncodeSet, { + ' ': 1, '"': 1, '<': 1, '>': 1, '`': 1 +}); +var pathPercentEncodeSet = assign({}, fragmentPercentEncodeSet, { + '#': 1, '?': 1, '{': 1, '}': 1 +}); +var userinfoPercentEncodeSet = assign({}, pathPercentEncodeSet, { + '/': 1, ':': 1, ';': 1, '=': 1, '@': 1, '[': 1, '\\': 1, ']': 1, '^': 1, '|': 1 +}); + +var percentEncode = function (chr, set) { + var code = codeAt(chr, 0); + return code > 0x20 && code < 0x7F && !hasOwn(set, chr) ? chr : encodeURIComponent(chr); +}; + +// https://url.spec.whatwg.org/#special-scheme +var specialSchemes = { + ftp: 21, + file: null, + http: 80, + https: 443, + ws: 80, + wss: 443 +}; + +// https://url.spec.whatwg.org/#windows-drive-letter +var isWindowsDriveLetter = function (string, normalized) { + var second; + return string.length === 2 && exec(ALPHA, charAt(string, 0)) + && ((second = charAt(string, 1)) === ':' || (!normalized && second === '|')); +}; + +// https://url.spec.whatwg.org/#start-with-a-windows-drive-letter +var startsWithWindowsDriveLetter = function (string) { + var third; + return string.length > 1 && isWindowsDriveLetter(stringSlice(string, 0, 2)) && ( + string.length === 2 || + ((third = charAt(string, 2)) === '/' || third === '\\' || third === '?' || third === '#') + ); +}; + +// https://url.spec.whatwg.org/#single-dot-path-segment +var isSingleDot = function (segment) { + return segment === '.' || toLowerCase(segment) === '%2e'; +}; + +// https://url.spec.whatwg.org/#double-dot-path-segment +var isDoubleDot = function (segment) { + segment = toLowerCase(segment); + return segment === '..' || segment === '%2e.' || segment === '.%2e' || segment === '%2e%2e'; +}; + +// States: +var SCHEME_START = {}; +var SCHEME = {}; +var NO_SCHEME = {}; +var SPECIAL_RELATIVE_OR_AUTHORITY = {}; +var PATH_OR_AUTHORITY = {}; +var RELATIVE = {}; +var RELATIVE_SLASH = {}; +var SPECIAL_AUTHORITY_SLASHES = {}; +var SPECIAL_AUTHORITY_IGNORE_SLASHES = {}; +var AUTHORITY = {}; +var HOST = {}; +var HOSTNAME = {}; +var PORT = {}; +var FILE = {}; +var FILE_SLASH = {}; +var FILE_HOST = {}; +var PATH_START = {}; +var PATH = {}; +var CANNOT_BE_A_BASE_URL_PATH = {}; +var QUERY = {}; +var FRAGMENT = {}; + +var URLState = function (url, isBase, base) { + var urlString = $toString(url); + var baseState, failure, searchParams; + if (isBase) { + failure = this.parse(urlString); + if (failure) throw new TypeError(failure); + this.searchParams = null; + } else { + if (base !== undefined) baseState = new URLState(base, true); + failure = this.parse(urlString, null, baseState); + if (failure) throw new TypeError(failure); + searchParams = getInternalSearchParamsState(new URLSearchParams()); + searchParams.bindURL(this); + this.searchParams = searchParams; + } +}; + +URLState.prototype = { + type: 'URL', + // https://url.spec.whatwg.org/#url-parsing + // eslint-disable-next-line max-statements -- TODO + parse: function (input, stateOverride, base) { + var url = this; + var state = stateOverride || SCHEME_START; + var pointer = 0; + var buffer = ''; + var seenAt = false; + var seenBracket = false; + var seenPasswordToken = false; + var codePoints, chr, bufferCodePoints, failure; + + input = $toString(input); + + if (!stateOverride) { + url.scheme = ''; + url.username = ''; + url.password = ''; + url.host = null; + url.port = null; + url.path = []; + url.query = null; + url.fragment = null; + url.cannotBeABaseURL = false; + input = replace(input, LEADING_C0_CONTROL_OR_SPACE, ''); + input = replace(input, TRAILING_C0_CONTROL_OR_SPACE, '$1'); + } + + input = replace(input, TAB_AND_NEW_LINE, ''); + + codePoints = arrayFrom(input); + + while (pointer <= codePoints.length) { + chr = codePoints[pointer]; + switch (state) { + case SCHEME_START: + if (chr && exec(ALPHA, chr)) { + buffer += toLowerCase(chr); + state = SCHEME; + } else if (!stateOverride) { + state = NO_SCHEME; + continue; + } else return INVALID_SCHEME; + break; + + case SCHEME: + if (chr && (exec(ALPHANUMERIC, chr) || chr === '+' || chr === '-' || chr === '.')) { + buffer += toLowerCase(chr); + } else if (chr === ':') { + if (stateOverride && ( + (url.isSpecial() !== hasOwn(specialSchemes, buffer)) || + (buffer === 'file' && (url.includesCredentials() || url.port !== null)) || + (url.scheme === 'file' && !url.host) + )) return; + url.scheme = buffer; + if (stateOverride) { + if (url.isSpecial() && specialSchemes[url.scheme] === url.port) url.port = null; + return; + } + buffer = ''; + if (url.scheme === 'file') { + state = FILE; + } else if (url.isSpecial() && base && base.scheme === url.scheme) { + state = SPECIAL_RELATIVE_OR_AUTHORITY; + } else if (url.isSpecial()) { + state = SPECIAL_AUTHORITY_SLASHES; + } else if (codePoints[pointer + 1] === '/') { + state = PATH_OR_AUTHORITY; + pointer++; + } else { + url.cannotBeABaseURL = true; + push(url.path, ''); + state = CANNOT_BE_A_BASE_URL_PATH; + } + } else if (!stateOverride) { + buffer = ''; + state = NO_SCHEME; + pointer = 0; + continue; + } else return INVALID_SCHEME; + break; + + case NO_SCHEME: + if (!base || (base.cannotBeABaseURL && chr !== '#')) return INVALID_SCHEME; + if (base.cannotBeABaseURL && chr === '#') { + url.scheme = base.scheme; + url.path = arraySlice(base.path); + url.query = base.query; + url.fragment = ''; + url.cannotBeABaseURL = true; + state = FRAGMENT; + break; + } + state = base.scheme === 'file' ? FILE : RELATIVE; + continue; + + case SPECIAL_RELATIVE_OR_AUTHORITY: + if (chr === '/' && codePoints[pointer + 1] === '/') { + state = SPECIAL_AUTHORITY_IGNORE_SLASHES; + pointer++; + } else { + state = RELATIVE; + continue; + } break; + + case PATH_OR_AUTHORITY: + if (chr === '/') { + state = AUTHORITY; + break; + } else { + state = PATH; + continue; + } + + case RELATIVE: + url.scheme = base.scheme; + if (chr === EOF) { + url.username = base.username; + url.password = base.password; + url.host = base.host; + url.port = base.port; + url.path = arraySlice(base.path); + url.query = base.query; + } else if (chr === '/' || (chr === '\\' && url.isSpecial())) { + state = RELATIVE_SLASH; + } else if (chr === '?') { + url.username = base.username; + url.password = base.password; + url.host = base.host; + url.port = base.port; + url.path = arraySlice(base.path); + url.query = ''; + state = QUERY; + } else if (chr === '#') { + url.username = base.username; + url.password = base.password; + url.host = base.host; + url.port = base.port; + url.path = arraySlice(base.path); + url.query = base.query; + url.fragment = ''; + state = FRAGMENT; + } else { + url.username = base.username; + url.password = base.password; + url.host = base.host; + url.port = base.port; + url.path = arraySlice(base.path); + url.path.length--; + state = PATH; + continue; + } break; + + case RELATIVE_SLASH: + if (url.isSpecial() && (chr === '/' || chr === '\\')) { + state = SPECIAL_AUTHORITY_IGNORE_SLASHES; + } else if (chr === '/') { + state = AUTHORITY; + } else { + url.username = base.username; + url.password = base.password; + url.host = base.host; + url.port = base.port; + state = PATH; + continue; + } break; + + case SPECIAL_AUTHORITY_SLASHES: + state = SPECIAL_AUTHORITY_IGNORE_SLASHES; + if (chr !== '/' || charAt(buffer, pointer + 1) !== '/') continue; + pointer++; + break; + + case SPECIAL_AUTHORITY_IGNORE_SLASHES: + if (chr !== '/' && chr !== '\\') { + state = AUTHORITY; + continue; + } break; + + case AUTHORITY: + if (chr === '@') { + if (seenAt) buffer = '%40' + buffer; + seenAt = true; + bufferCodePoints = arrayFrom(buffer); + for (var i = 0; i < bufferCodePoints.length; i++) { + var codePoint = bufferCodePoints[i]; + if (codePoint === ':' && !seenPasswordToken) { + seenPasswordToken = true; + continue; + } + var encodedCodePoints = percentEncode(codePoint, userinfoPercentEncodeSet); + if (seenPasswordToken) url.password += encodedCodePoints; + else url.username += encodedCodePoints; + } + buffer = ''; + } else if ( + chr === EOF || chr === '/' || chr === '?' || chr === '#' || + (chr === '\\' && url.isSpecial()) + ) { + if (seenAt && buffer === '') return INVALID_AUTHORITY; + pointer -= arrayFrom(buffer).length + 1; + buffer = ''; + state = HOST; + } else buffer += chr; + break; + + case HOST: + case HOSTNAME: + if (stateOverride && url.scheme === 'file') { + state = FILE_HOST; + continue; + } else if (chr === ':' && !seenBracket) { + if (buffer === '') return INVALID_HOST; + failure = url.parseHost(buffer); + if (failure) return failure; + buffer = ''; + state = PORT; + if (stateOverride === HOSTNAME) return; + } else if ( + chr === EOF || chr === '/' || chr === '?' || chr === '#' || + (chr === '\\' && url.isSpecial()) + ) { + if (url.isSpecial() && buffer === '') return INVALID_HOST; + if (stateOverride && buffer === '' && (url.includesCredentials() || url.port !== null)) return; + failure = url.parseHost(buffer); + if (failure) return failure; + buffer = ''; + state = PATH_START; + if (stateOverride) return; + continue; + } else { + if (chr === '[') seenBracket = true; + else if (chr === ']') seenBracket = false; + buffer += chr; + } break; + + case PORT: + if (exec(DIGIT, chr)) { + buffer += chr; + } else if ( + chr === EOF || chr === '/' || chr === '?' || chr === '#' || + (chr === '\\' && url.isSpecial()) || + stateOverride + ) { + if (buffer !== '') { + var port = parseInt(buffer, 10); + if (port > 0xFFFF) return INVALID_PORT; + url.port = (url.isSpecial() && port === specialSchemes[url.scheme]) ? null : port; + buffer = ''; + } + if (stateOverride) return; + state = PATH_START; + continue; + } else return INVALID_PORT; + break; + + case FILE: + url.scheme = 'file'; + if (chr === '/' || chr === '\\') state = FILE_SLASH; + else if (base && base.scheme === 'file') { + switch (chr) { + case EOF: + url.host = base.host; + url.path = arraySlice(base.path); + url.query = base.query; + break; + case '?': + url.host = base.host; + url.path = arraySlice(base.path); + url.query = ''; + state = QUERY; + break; + case '#': + url.host = base.host; + url.path = arraySlice(base.path); + url.query = base.query; + url.fragment = ''; + state = FRAGMENT; + break; + default: + if (!startsWithWindowsDriveLetter(join(arraySlice(codePoints, pointer), ''))) { + url.host = base.host; + url.path = arraySlice(base.path); + url.shortenPath(); + } + state = PATH; + continue; + } + } else { + state = PATH; + continue; + } break; + + case FILE_SLASH: + if (chr === '/' || chr === '\\') { + state = FILE_HOST; + break; + } + if (base && base.scheme === 'file' && !startsWithWindowsDriveLetter(join(arraySlice(codePoints, pointer), ''))) { + if (isWindowsDriveLetter(base.path[0], true)) push(url.path, base.path[0]); + else url.host = base.host; + } + state = PATH; + continue; + + case FILE_HOST: + if (chr === EOF || chr === '/' || chr === '\\' || chr === '?' || chr === '#') { + if (!stateOverride && isWindowsDriveLetter(buffer)) { + state = PATH; + } else if (buffer === '') { + url.host = ''; + if (stateOverride) return; + state = PATH_START; + } else { + failure = url.parseHost(buffer); + if (failure) return failure; + if (url.host === 'localhost') url.host = ''; + if (stateOverride) return; + buffer = ''; + state = PATH_START; + } continue; + } else buffer += chr; + break; + + case PATH_START: + if (url.isSpecial()) { + state = PATH; + if (chr !== '/' && chr !== '\\') continue; + } else if (!stateOverride && chr === '?') { + url.query = ''; + state = QUERY; + } else if (!stateOverride && chr === '#') { + url.fragment = ''; + state = FRAGMENT; + } else if (chr !== EOF) { + state = PATH; + if (chr !== '/') continue; + } break; + + case PATH: + if ( + chr === EOF || chr === '/' || + (chr === '\\' && url.isSpecial()) || + (!stateOverride && (chr === '?' || chr === '#')) + ) { + if (isDoubleDot(buffer)) { + url.shortenPath(); + if (chr !== '/' && !(chr === '\\' && url.isSpecial())) { + push(url.path, ''); + } + } else if (isSingleDot(buffer)) { + if (chr !== '/' && !(chr === '\\' && url.isSpecial())) { + push(url.path, ''); + } + } else { + if (url.scheme === 'file' && !url.path.length && isWindowsDriveLetter(buffer)) { + if (url.host) url.host = ''; + buffer = charAt(buffer, 0) + ':'; // normalize windows drive letter + } + push(url.path, buffer); + } + buffer = ''; + if (url.scheme === 'file' && (chr === EOF || chr === '?' || chr === '#')) { + while (url.path.length > 1 && url.path[0] === '') { + shift(url.path); + } + } + if (chr === '?') { + url.query = ''; + state = QUERY; + } else if (chr === '#') { + url.fragment = ''; + state = FRAGMENT; + } + } else { + buffer += percentEncode(chr, pathPercentEncodeSet); + } break; + + case CANNOT_BE_A_BASE_URL_PATH: + if (chr === '?') { + url.query = ''; + state = QUERY; + } else if (chr === '#') { + url.fragment = ''; + state = FRAGMENT; + } else if (chr !== EOF) { + url.path[0] += percentEncode(chr, C0ControlPercentEncodeSet); + } break; + + case QUERY: + if (!stateOverride && chr === '#') { + url.fragment = ''; + state = FRAGMENT; + } else if (chr !== EOF) { + if (chr === "'" && url.isSpecial()) url.query += '%27'; + else if (chr === '#') url.query += '%23'; + else url.query += percentEncode(chr, C0ControlPercentEncodeSet); + } break; + + case FRAGMENT: + if (chr !== EOF) url.fragment += percentEncode(chr, fragmentPercentEncodeSet); + break; + } + + pointer++; + } + }, + // https://url.spec.whatwg.org/#host-parsing + parseHost: function (input) { + var result, codePoints, index; + if (charAt(input, 0) === '[') { + if (charAt(input, input.length - 1) !== ']') return INVALID_HOST; + result = parseIPv6(stringSlice(input, 1, -1)); + if (!result) return INVALID_HOST; + this.host = result; + // opaque host + } else if (!this.isSpecial()) { + if (exec(FORBIDDEN_HOST_CODE_POINT_EXCLUDING_PERCENT, input)) return INVALID_HOST; + result = ''; + codePoints = arrayFrom(input); + for (index = 0; index < codePoints.length; index++) { + result += percentEncode(codePoints[index], C0ControlPercentEncodeSet); + } + this.host = result; + } else { + input = toASCII(input); + if (exec(FORBIDDEN_HOST_CODE_POINT, input)) return INVALID_HOST; + result = parseIPv4(input); + if (result === null) return INVALID_HOST; + this.host = result; + } + }, + // https://url.spec.whatwg.org/#cannot-have-a-username-password-port + cannotHaveUsernamePasswordPort: function () { + return !this.host || this.cannotBeABaseURL || this.scheme === 'file'; + }, + // https://url.spec.whatwg.org/#include-credentials + includesCredentials: function () { + return this.username !== '' || this.password !== ''; + }, + // https://url.spec.whatwg.org/#is-special + isSpecial: function () { + return hasOwn(specialSchemes, this.scheme); + }, + // https://url.spec.whatwg.org/#shorten-a-urls-path + shortenPath: function () { + var path = this.path; + var pathSize = path.length; + if (pathSize && (this.scheme !== 'file' || pathSize !== 1 || !isWindowsDriveLetter(path[0], true))) { + path.length--; + } + }, + // https://url.spec.whatwg.org/#concept-url-serializer + serialize: function () { + var url = this; + var scheme = url.scheme; + var username = url.username; + var password = url.password; + var host = url.host; + var port = url.port; + var path = url.path; + var query = url.query; + var fragment = url.fragment; + var output = scheme + ':'; + if (host !== null) { + output += '//'; + if (url.includesCredentials()) { + output += username + (password ? ':' + password : '') + '@'; + } + output += serializeHost(host); + if (port !== null) output += ':' + port; + } else if (scheme === 'file') output += '//'; + output += url.cannotBeABaseURL ? path[0] : path.length ? '/' + join(path, '/') : ''; + if (query !== null) output += '?' + query; + if (fragment !== null) output += '#' + fragment; + return output; + }, + // https://url.spec.whatwg.org/#dom-url-href + setHref: function (href) { + var failure = this.parse(href); + if (failure) throw new TypeError(failure); + this.searchParams.update(); + }, + // https://url.spec.whatwg.org/#dom-url-origin + getOrigin: function () { + var scheme = this.scheme; + var port = this.port; + if (scheme === 'blob') try { + return new URLConstructor(scheme.path[0]).origin; + } catch (error) { + return 'null'; + } + if (scheme === 'file' || !this.isSpecial()) return 'null'; + return scheme + '://' + serializeHost(this.host) + (port !== null ? ':' + port : ''); + }, + // https://url.spec.whatwg.org/#dom-url-protocol + getProtocol: function () { + return this.scheme + ':'; + }, + setProtocol: function (protocol) { + this.parse($toString(protocol) + ':', SCHEME_START); + }, + // https://url.spec.whatwg.org/#dom-url-username + getUsername: function () { + return this.username; + }, + setUsername: function (username) { + var codePoints = arrayFrom($toString(username)); + if (this.cannotHaveUsernamePasswordPort()) return; + this.username = ''; + for (var i = 0; i < codePoints.length; i++) { + this.username += percentEncode(codePoints[i], userinfoPercentEncodeSet); + } + }, + // https://url.spec.whatwg.org/#dom-url-password + getPassword: function () { + return this.password; + }, + setPassword: function (password) { + var codePoints = arrayFrom($toString(password)); + if (this.cannotHaveUsernamePasswordPort()) return; + this.password = ''; + for (var i = 0; i < codePoints.length; i++) { + this.password += percentEncode(codePoints[i], userinfoPercentEncodeSet); + } + }, + // https://url.spec.whatwg.org/#dom-url-host + getHost: function () { + var host = this.host; + var port = this.port; + return host === null ? '' + : port === null ? serializeHost(host) + : serializeHost(host) + ':' + port; + }, + setHost: function (host) { + if (this.cannotBeABaseURL) return; + this.parse(host, HOST); + }, + // https://url.spec.whatwg.org/#dom-url-hostname + getHostname: function () { + var host = this.host; + return host === null ? '' : serializeHost(host); + }, + setHostname: function (hostname) { + if (this.cannotBeABaseURL) return; + this.parse(hostname, HOSTNAME); + }, + // https://url.spec.whatwg.org/#dom-url-port + getPort: function () { + var port = this.port; + return port === null ? '' : $toString(port); + }, + setPort: function (port) { + if (this.cannotHaveUsernamePasswordPort()) return; + port = $toString(port); + if (port === '') this.port = null; + else this.parse(port, PORT); + }, + // https://url.spec.whatwg.org/#dom-url-pathname + getPathname: function () { + var path = this.path; + return this.cannotBeABaseURL ? path[0] : path.length ? '/' + join(path, '/') : ''; + }, + setPathname: function (pathname) { + if (this.cannotBeABaseURL) return; + this.path = []; + this.parse(pathname, PATH_START); + }, + // https://url.spec.whatwg.org/#dom-url-search + getSearch: function () { + var query = this.query; + return query ? '?' + query : ''; + }, + setSearch: function (search) { + search = $toString(search); + if (search === '') { + this.query = null; + } else { + if (charAt(search, 0) === '?') search = stringSlice(search, 1); + this.query = ''; + this.parse(search, QUERY); + } + this.searchParams.update(); + }, + // https://url.spec.whatwg.org/#dom-url-searchparams + getSearchParams: function () { + return this.searchParams.facade; + }, + // https://url.spec.whatwg.org/#dom-url-hash + getHash: function () { + var fragment = this.fragment; + return fragment ? '#' + fragment : ''; + }, + setHash: function (hash) { + hash = $toString(hash); + if (hash === '') { + this.fragment = null; + return; + } + if (charAt(hash, 0) === '#') hash = stringSlice(hash, 1); + this.fragment = ''; + this.parse(hash, FRAGMENT); + }, + update: function () { + this.query = this.searchParams.serialize() || null; + } +}; + +// `URL` constructor +// https://url.spec.whatwg.org/#url-class +var URLConstructor = function URL(url /* , base */) { + var that = anInstance(this, URLPrototype); + var base = validateArgumentsLength(arguments.length, 1) > 1 ? arguments[1] : undefined; + var state = setInternalState(that, new URLState(url, false, base)); + if (!DESCRIPTORS) { + that.href = state.serialize(); + that.origin = state.getOrigin(); + that.protocol = state.getProtocol(); + that.username = state.getUsername(); + that.password = state.getPassword(); + that.host = state.getHost(); + that.hostname = state.getHostname(); + that.port = state.getPort(); + that.pathname = state.getPathname(); + that.search = state.getSearch(); + that.searchParams = state.getSearchParams(); + that.hash = state.getHash(); + } +}; + +var URLPrototype = URLConstructor.prototype; + +var accessorDescriptor = function (getter, setter) { + return { + get: function () { + return getInternalURLState(this)[getter](); + }, + set: setter && function (value) { + return getInternalURLState(this)[setter](value); + }, + configurable: true, + enumerable: true + }; +}; + +if (DESCRIPTORS) { + // `URL.prototype.href` accessors pair + // https://url.spec.whatwg.org/#dom-url-href + defineBuiltInAccessor(URLPrototype, 'href', accessorDescriptor('serialize', 'setHref')); + // `URL.prototype.origin` getter + // https://url.spec.whatwg.org/#dom-url-origin + defineBuiltInAccessor(URLPrototype, 'origin', accessorDescriptor('getOrigin')); + // `URL.prototype.protocol` accessors pair + // https://url.spec.whatwg.org/#dom-url-protocol + defineBuiltInAccessor(URLPrototype, 'protocol', accessorDescriptor('getProtocol', 'setProtocol')); + // `URL.prototype.username` accessors pair + // https://url.spec.whatwg.org/#dom-url-username + defineBuiltInAccessor(URLPrototype, 'username', accessorDescriptor('getUsername', 'setUsername')); + // `URL.prototype.password` accessors pair + // https://url.spec.whatwg.org/#dom-url-password + defineBuiltInAccessor(URLPrototype, 'password', accessorDescriptor('getPassword', 'setPassword')); + // `URL.prototype.host` accessors pair + // https://url.spec.whatwg.org/#dom-url-host + defineBuiltInAccessor(URLPrototype, 'host', accessorDescriptor('getHost', 'setHost')); + // `URL.prototype.hostname` accessors pair + // https://url.spec.whatwg.org/#dom-url-hostname + defineBuiltInAccessor(URLPrototype, 'hostname', accessorDescriptor('getHostname', 'setHostname')); + // `URL.prototype.port` accessors pair + // https://url.spec.whatwg.org/#dom-url-port + defineBuiltInAccessor(URLPrototype, 'port', accessorDescriptor('getPort', 'setPort')); + // `URL.prototype.pathname` accessors pair + // https://url.spec.whatwg.org/#dom-url-pathname + defineBuiltInAccessor(URLPrototype, 'pathname', accessorDescriptor('getPathname', 'setPathname')); + // `URL.prototype.search` accessors pair + // https://url.spec.whatwg.org/#dom-url-search + defineBuiltInAccessor(URLPrototype, 'search', accessorDescriptor('getSearch', 'setSearch')); + // `URL.prototype.searchParams` getter + // https://url.spec.whatwg.org/#dom-url-searchparams + defineBuiltInAccessor(URLPrototype, 'searchParams', accessorDescriptor('getSearchParams')); + // `URL.prototype.hash` accessors pair + // https://url.spec.whatwg.org/#dom-url-hash + defineBuiltInAccessor(URLPrototype, 'hash', accessorDescriptor('getHash', 'setHash')); +} + +// `URL.prototype.toJSON` method +// https://url.spec.whatwg.org/#dom-url-tojson +defineBuiltIn(URLPrototype, 'toJSON', function toJSON() { + return getInternalURLState(this).serialize(); +}, { enumerable: true }); + +// `URL.prototype.toString` method +// https://url.spec.whatwg.org/#URL-stringification-behavior +defineBuiltIn(URLPrototype, 'toString', function toString() { + return getInternalURLState(this).serialize(); +}, { enumerable: true }); + +if (NativeURL) { + var nativeCreateObjectURL = NativeURL.createObjectURL; + var nativeRevokeObjectURL = NativeURL.revokeObjectURL; + // `URL.createObjectURL` method + // https://developer.mozilla.org/en-US/docs/Web/API/URL/createObjectURL + if (nativeCreateObjectURL) defineBuiltIn(URLConstructor, 'createObjectURL', bind(nativeCreateObjectURL, NativeURL)); + // `URL.revokeObjectURL` method + // https://developer.mozilla.org/en-US/docs/Web/API/URL/revokeObjectURL + if (nativeRevokeObjectURL) defineBuiltIn(URLConstructor, 'revokeObjectURL', bind(nativeRevokeObjectURL, NativeURL)); +} + +setToStringTag(URLConstructor, 'URL'); + +$({ global: true, constructor: true, forced: !USE_NATIVE_URL, sham: !DESCRIPTORS }, { + URL: URLConstructor +}); + + +/***/ }), + +/***/ "./node_modules/core-js-pure/modules/web.url.js": +/*!******************************************************!*\ + !*** ./node_modules/core-js-pure/modules/web.url.js ***! + \******************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +// TODO: Remove this module from `core-js@4` since it's replaced to module below +__webpack_require__(/*! ../modules/web.url.constructor */ "./node_modules/core-js-pure/modules/web.url.constructor.js"); + + +/***/ }), + +/***/ "./node_modules/core-js-pure/modules/web.url.parse.js": +/*!************************************************************!*\ + !*** ./node_modules/core-js-pure/modules/web.url.parse.js ***! + \************************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var $ = __webpack_require__(/*! ../internals/export */ "./node_modules/core-js-pure/internals/export.js"); +var getBuiltIn = __webpack_require__(/*! ../internals/get-built-in */ "./node_modules/core-js-pure/internals/get-built-in.js"); +var validateArgumentsLength = __webpack_require__(/*! ../internals/validate-arguments-length */ "./node_modules/core-js-pure/internals/validate-arguments-length.js"); +var toString = __webpack_require__(/*! ../internals/to-string */ "./node_modules/core-js-pure/internals/to-string.js"); +var USE_NATIVE_URL = __webpack_require__(/*! ../internals/url-constructor-detection */ "./node_modules/core-js-pure/internals/url-constructor-detection.js"); + +var URL = getBuiltIn('URL'); + +// `URL.parse` method +// https://url.spec.whatwg.org/#dom-url-canparse +$({ target: 'URL', stat: true, forced: !USE_NATIVE_URL }, { + parse: function parse(url) { + var length = validateArgumentsLength(arguments.length, 1); + var urlString = toString(url); + var base = length < 2 || arguments[1] === undefined ? undefined : toString(arguments[1]); + try { + return new URL(urlString, base); + } catch (error) { + return null; + } + } +}); + + +/***/ }), + +/***/ "./node_modules/core-js-pure/modules/web.url.to-json.js": +/*!**************************************************************!*\ + !*** ./node_modules/core-js-pure/modules/web.url.to-json.js ***! + \**************************************************************/ +/***/ (() => { + +// empty + + +/***/ }), + +/***/ "./node_modules/core-js-pure/stable/array/is-array.js": +/*!************************************************************!*\ + !*** ./node_modules/core-js-pure/stable/array/is-array.js ***! + \************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var parent = __webpack_require__(/*! ../../es/array/is-array */ "./node_modules/core-js-pure/es/array/is-array.js"); + +module.exports = parent; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/stable/array/virtual/for-each.js": +/*!********************************************************************!*\ + !*** ./node_modules/core-js-pure/stable/array/virtual/for-each.js ***! + \********************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var parent = __webpack_require__(/*! ../../../es/array/virtual/for-each */ "./node_modules/core-js-pure/es/array/virtual/for-each.js"); + +module.exports = parent; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/stable/array/virtual/keys.js": +/*!****************************************************************!*\ + !*** ./node_modules/core-js-pure/stable/array/virtual/keys.js ***! + \****************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var parent = __webpack_require__(/*! ../../../es/array/virtual/keys */ "./node_modules/core-js-pure/es/array/virtual/keys.js"); + +module.exports = parent; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/stable/date/now.js": +/*!******************************************************!*\ + !*** ./node_modules/core-js-pure/stable/date/now.js ***! + \******************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var parent = __webpack_require__(/*! ../../es/date/now */ "./node_modules/core-js-pure/es/date/now.js"); + +module.exports = parent; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/stable/instance/filter.js": +/*!*************************************************************!*\ + !*** ./node_modules/core-js-pure/stable/instance/filter.js ***! + \*************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var parent = __webpack_require__(/*! ../../es/instance/filter */ "./node_modules/core-js-pure/es/instance/filter.js"); + +module.exports = parent; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/stable/instance/for-each.js": +/*!***************************************************************!*\ + !*** ./node_modules/core-js-pure/stable/instance/for-each.js ***! + \***************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var classof = __webpack_require__(/*! ../../internals/classof */ "./node_modules/core-js-pure/internals/classof.js"); +var hasOwn = __webpack_require__(/*! ../../internals/has-own-property */ "./node_modules/core-js-pure/internals/has-own-property.js"); +var isPrototypeOf = __webpack_require__(/*! ../../internals/object-is-prototype-of */ "./node_modules/core-js-pure/internals/object-is-prototype-of.js"); +var method = __webpack_require__(/*! ../array/virtual/for-each */ "./node_modules/core-js-pure/stable/array/virtual/for-each.js"); +__webpack_require__(/*! ../../modules/web.dom-collections.for-each */ "./node_modules/core-js-pure/modules/web.dom-collections.for-each.js"); + +var ArrayPrototype = Array.prototype; + +var DOMIterables = { + DOMTokenList: true, + NodeList: true +}; + +module.exports = function (it) { + var own = it.forEach; + return it === ArrayPrototype || (isPrototypeOf(ArrayPrototype, it) && own === ArrayPrototype.forEach) + || hasOwn(DOMIterables, classof(it)) ? method : own; +}; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/stable/instance/includes.js": +/*!***************************************************************!*\ + !*** ./node_modules/core-js-pure/stable/instance/includes.js ***! + \***************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var parent = __webpack_require__(/*! ../../es/instance/includes */ "./node_modules/core-js-pure/es/instance/includes.js"); + +module.exports = parent; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/stable/instance/keys.js": +/*!***********************************************************!*\ + !*** ./node_modules/core-js-pure/stable/instance/keys.js ***! + \***********************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +__webpack_require__(/*! ../../modules/web.dom-collections.iterator */ "./node_modules/core-js-pure/modules/web.dom-collections.iterator.js"); +var classof = __webpack_require__(/*! ../../internals/classof */ "./node_modules/core-js-pure/internals/classof.js"); +var hasOwn = __webpack_require__(/*! ../../internals/has-own-property */ "./node_modules/core-js-pure/internals/has-own-property.js"); +var isPrototypeOf = __webpack_require__(/*! ../../internals/object-is-prototype-of */ "./node_modules/core-js-pure/internals/object-is-prototype-of.js"); +var method = __webpack_require__(/*! ../array/virtual/keys */ "./node_modules/core-js-pure/stable/array/virtual/keys.js"); + +var ArrayPrototype = Array.prototype; + +var DOMIterables = { + DOMTokenList: true, + NodeList: true +}; + +module.exports = function (it) { + var own = it.keys; + return it === ArrayPrototype || (isPrototypeOf(ArrayPrototype, it) && own === ArrayPrototype.keys) + || hasOwn(DOMIterables, classof(it)) ? method : own; +}; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/stable/instance/some.js": +/*!***********************************************************!*\ + !*** ./node_modules/core-js-pure/stable/instance/some.js ***! + \***********************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var parent = __webpack_require__(/*! ../../es/instance/some */ "./node_modules/core-js-pure/es/instance/some.js"); + +module.exports = parent; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/stable/instance/sort.js": +/*!***********************************************************!*\ + !*** ./node_modules/core-js-pure/stable/instance/sort.js ***! + \***********************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var parent = __webpack_require__(/*! ../../es/instance/sort */ "./node_modules/core-js-pure/es/instance/sort.js"); + +module.exports = parent; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/stable/instance/trim.js": +/*!***********************************************************!*\ + !*** ./node_modules/core-js-pure/stable/instance/trim.js ***! + \***********************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var parent = __webpack_require__(/*! ../../es/instance/trim */ "./node_modules/core-js-pure/es/instance/trim.js"); + +module.exports = parent; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/stable/json/stringify.js": +/*!************************************************************!*\ + !*** ./node_modules/core-js-pure/stable/json/stringify.js ***! + \************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var parent = __webpack_require__(/*! ../../es/json/stringify */ "./node_modules/core-js-pure/es/json/stringify.js"); + +module.exports = parent; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/stable/object/assign.js": +/*!***********************************************************!*\ + !*** ./node_modules/core-js-pure/stable/object/assign.js ***! + \***********************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var parent = __webpack_require__(/*! ../../es/object/assign */ "./node_modules/core-js-pure/es/object/assign.js"); + +module.exports = parent; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/stable/object/define-properties.js": +/*!**********************************************************************!*\ + !*** ./node_modules/core-js-pure/stable/object/define-properties.js ***! + \**********************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var parent = __webpack_require__(/*! ../../es/object/define-properties */ "./node_modules/core-js-pure/es/object/define-properties.js"); + +module.exports = parent; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/stable/object/define-property.js": +/*!********************************************************************!*\ + !*** ./node_modules/core-js-pure/stable/object/define-property.js ***! + \********************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var parent = __webpack_require__(/*! ../../es/object/define-property */ "./node_modules/core-js-pure/es/object/define-property.js"); + +module.exports = parent; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/stable/object/get-own-property-descriptor.js": +/*!********************************************************************************!*\ + !*** ./node_modules/core-js-pure/stable/object/get-own-property-descriptor.js ***! + \********************************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var parent = __webpack_require__(/*! ../../es/object/get-own-property-descriptor */ "./node_modules/core-js-pure/es/object/get-own-property-descriptor.js"); + +module.exports = parent; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/stable/object/get-own-property-descriptors.js": +/*!*********************************************************************************!*\ + !*** ./node_modules/core-js-pure/stable/object/get-own-property-descriptors.js ***! + \*********************************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var parent = __webpack_require__(/*! ../../es/object/get-own-property-descriptors */ "./node_modules/core-js-pure/es/object/get-own-property-descriptors.js"); + +module.exports = parent; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/stable/object/get-own-property-symbols.js": +/*!*****************************************************************************!*\ + !*** ./node_modules/core-js-pure/stable/object/get-own-property-symbols.js ***! + \*****************************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var parent = __webpack_require__(/*! ../../es/object/get-own-property-symbols */ "./node_modules/core-js-pure/es/object/get-own-property-symbols.js"); + +module.exports = parent; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/stable/object/keys.js": +/*!*********************************************************!*\ + !*** ./node_modules/core-js-pure/stable/object/keys.js ***! + \*********************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var parent = __webpack_require__(/*! ../../es/object/keys */ "./node_modules/core-js-pure/es/object/keys.js"); + +module.exports = parent; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/stable/promise/index.js": +/*!***********************************************************!*\ + !*** ./node_modules/core-js-pure/stable/promise/index.js ***! + \***********************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var parent = __webpack_require__(/*! ../../es/promise */ "./node_modules/core-js-pure/es/promise/index.js"); +__webpack_require__(/*! ../../modules/web.dom-collections.iterator */ "./node_modules/core-js-pure/modules/web.dom-collections.iterator.js"); + +module.exports = parent; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/stable/set-immediate.js": +/*!***********************************************************!*\ + !*** ./node_modules/core-js-pure/stable/set-immediate.js ***! + \***********************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +__webpack_require__(/*! ../modules/web.immediate */ "./node_modules/core-js-pure/modules/web.immediate.js"); +var path = __webpack_require__(/*! ../internals/path */ "./node_modules/core-js-pure/internals/path.js"); + +module.exports = path.setImmediate; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/stable/set-timeout.js": +/*!*********************************************************!*\ + !*** ./node_modules/core-js-pure/stable/set-timeout.js ***! + \*********************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +__webpack_require__(/*! ../modules/web.timers */ "./node_modules/core-js-pure/modules/web.timers.js"); +var path = __webpack_require__(/*! ../internals/path */ "./node_modules/core-js-pure/internals/path.js"); + +module.exports = path.setTimeout; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/stable/set/index.js": +/*!*******************************************************!*\ + !*** ./node_modules/core-js-pure/stable/set/index.js ***! + \*******************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var parent = __webpack_require__(/*! ../../es/set */ "./node_modules/core-js-pure/es/set/index.js"); +__webpack_require__(/*! ../../modules/web.dom-collections.iterator */ "./node_modules/core-js-pure/modules/web.dom-collections.iterator.js"); + +module.exports = parent; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/stable/symbol/index.js": +/*!**********************************************************!*\ + !*** ./node_modules/core-js-pure/stable/symbol/index.js ***! + \**********************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var parent = __webpack_require__(/*! ../../es/symbol */ "./node_modules/core-js-pure/es/symbol/index.js"); +__webpack_require__(/*! ../../modules/web.dom-collections.iterator */ "./node_modules/core-js-pure/modules/web.dom-collections.iterator.js"); + +module.exports = parent; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/stable/symbol/iterator.js": +/*!*************************************************************!*\ + !*** ./node_modules/core-js-pure/stable/symbol/iterator.js ***! + \*************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var parent = __webpack_require__(/*! ../../es/symbol/iterator */ "./node_modules/core-js-pure/es/symbol/iterator.js"); +__webpack_require__(/*! ../../modules/web.dom-collections.iterator */ "./node_modules/core-js-pure/modules/web.dom-collections.iterator.js"); + +module.exports = parent; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/stable/symbol/to-primitive.js": +/*!*****************************************************************!*\ + !*** ./node_modules/core-js-pure/stable/symbol/to-primitive.js ***! + \*****************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var parent = __webpack_require__(/*! ../../es/symbol/to-primitive */ "./node_modules/core-js-pure/es/symbol/to-primitive.js"); + +module.exports = parent; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/stable/url-search-params/index.js": +/*!*********************************************************************!*\ + !*** ./node_modules/core-js-pure/stable/url-search-params/index.js ***! + \*********************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var parent = __webpack_require__(/*! ../../web/url-search-params */ "./node_modules/core-js-pure/web/url-search-params.js"); +__webpack_require__(/*! ../../modules/web.dom-collections.iterator */ "./node_modules/core-js-pure/modules/web.dom-collections.iterator.js"); + +module.exports = parent; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/stable/url/index.js": +/*!*******************************************************!*\ + !*** ./node_modules/core-js-pure/stable/url/index.js ***! + \*******************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var parent = __webpack_require__(/*! ../../web/url */ "./node_modules/core-js-pure/web/url.js"); + +module.exports = parent; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/web/url-search-params.js": +/*!************************************************************!*\ + !*** ./node_modules/core-js-pure/web/url-search-params.js ***! + \************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +__webpack_require__(/*! ../modules/web.url-search-params */ "./node_modules/core-js-pure/modules/web.url-search-params.js"); +__webpack_require__(/*! ../modules/web.url-search-params.delete */ "./node_modules/core-js-pure/modules/web.url-search-params.delete.js"); +__webpack_require__(/*! ../modules/web.url-search-params.has */ "./node_modules/core-js-pure/modules/web.url-search-params.has.js"); +__webpack_require__(/*! ../modules/web.url-search-params.size */ "./node_modules/core-js-pure/modules/web.url-search-params.size.js"); +var path = __webpack_require__(/*! ../internals/path */ "./node_modules/core-js-pure/internals/path.js"); + +module.exports = path.URLSearchParams; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/web/url.js": +/*!**********************************************!*\ + !*** ./node_modules/core-js-pure/web/url.js ***! + \**********************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +__webpack_require__(/*! ./url-search-params */ "./node_modules/core-js-pure/web/url-search-params.js"); +__webpack_require__(/*! ../modules/web.url */ "./node_modules/core-js-pure/modules/web.url.js"); +__webpack_require__(/*! ../modules/web.url.can-parse */ "./node_modules/core-js-pure/modules/web.url.can-parse.js"); +__webpack_require__(/*! ../modules/web.url.parse */ "./node_modules/core-js-pure/modules/web.url.parse.js"); +__webpack_require__(/*! ../modules/web.url.to-json */ "./node_modules/core-js-pure/modules/web.url.to-json.js"); +var path = __webpack_require__(/*! ../internals/path */ "./node_modules/core-js-pure/internals/path.js"); + +module.exports = path.URL; + + +/***/ }), + +/***/ "./package.json": +/*!**********************!*\ + !*** ./package.json ***! + \**********************/ +/***/ ((module) => { + +"use strict"; +module.exports = /*#__PURE__*/JSON.parse('{"private":true,"name":"xstreaming","description":"xstreaming","version":"1.0.1","author":"Geocld ","main":"app/background.js","scripts":{"dev":"DEBUG=xstreaming:authenticationV2 nextron","build":"nextron build","lint":"eslint . --ext .ts && eslint renderer/ --ext .tsx","lint:fix":"eslint . --ext .ts --fix && eslint renderer/ --ext .tsx --fix","postinstall":"electron-builder install-app-deps","publish":"electron-builder -p onTag","flatpak-build":"nextron build --no-pack && electron-builder --dir"},"dependencies":{"@nextui-org/react":"^2.4.6","axios":"^1.7.7","compare-versions":"^6.1.0","debug":"^4.3.4","electron-serve":"^1.3.0","electron-store":"^8.0.1","express":"^4.18.3","express-http-proxy":"^2.0.0","express-ws":"^5.0.2","framer-motion":"^11.5.4","github-url-to-object":"^4.0.6","i18next":"23.14.0","ip-address":"^9.0.5","jose":"^5.1.0","next-i18next":"^15.3.1","next-themes":"^0.3.0","react-i18next":"^15.0.1","react-query":"^3.39.3","semver":"^7.6.3","uplot":"^1.6.30","uuid-1345":"^1.0.2","xbox-webapi":"^1.4.1","xstreaming-player":"^0.2.1","xvfb-maybe":"^0.2.1"},"devDependencies":{"@babel/core":"^7.24.4","@fortawesome/fontawesome-free":"^6.5.1","@next/eslint-plugin-next":"^14.2.2","@types/node":"^20.12.7","@types/react":"^18.2.47","@typescript-eslint/eslint-plugin":"^8.6.0","@typescript-eslint/parser":"^8.6.0","autoprefixer":"^10.4.20","babel-loader":"^9.1.3","electron":"28","electron-builder":"^24.13.3","eslint":"^8.57.0","eslint-plugin-react-hooks":"^4.6.2","eslint-plugin-react-refresh":"^0.4.12","next":"^13.5.6","nextron":"^8.13.0","node-loader":"^2.0.0","postcss":"^8.4.45","react":"^18.1.0","react-dom":"^18.1.0","sass":"^1.78.0","tailwindcss":"^3.4.10","typescript":"^5.3.3"},"packageManager":"yarn@1.22.19+sha1.4ba7fc5c6e704fce2066ecbfb0b0d8976fe62447"}'); + +/***/ }) + +/******/ }); +/************************************************************************/ +/******/ // The module cache +/******/ var __webpack_module_cache__ = {}; +/******/ +/******/ // The require function +/******/ function __webpack_require__(moduleId) { +/******/ // Check if module is in cache +/******/ var cachedModule = __webpack_module_cache__[moduleId]; +/******/ if (cachedModule !== undefined) { +/******/ return cachedModule.exports; +/******/ } +/******/ // Create a new module (and put it into the cache) +/******/ var module = __webpack_module_cache__[moduleId] = { +/******/ // no module.id needed +/******/ // no module.loaded needed +/******/ exports: {} +/******/ }; +/******/ +/******/ // Execute the module function +/******/ __webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__); +/******/ +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } +/******/ +/************************************************************************/ +/******/ /* webpack/runtime/compat get default export */ +/******/ (() => { +/******/ // getDefaultExport function for compatibility with non-harmony modules +/******/ __webpack_require__.n = (module) => { +/******/ var getter = module && module.__esModule ? +/******/ () => (module['default']) : +/******/ () => (module); +/******/ __webpack_require__.d(getter, { a: getter }); +/******/ return getter; +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/define property getters */ +/******/ (() => { +/******/ // define getter functions for harmony exports +/******/ __webpack_require__.d = (exports, definition) => { +/******/ for(var key in definition) { +/******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) { +/******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] }); +/******/ } +/******/ } +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/hasOwnProperty shorthand */ +/******/ (() => { +/******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop)) +/******/ })(); +/******/ +/******/ /* webpack/runtime/make namespace object */ +/******/ (() => { +/******/ // define __esModule on exports +/******/ __webpack_require__.r = (exports) => { +/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { +/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); +/******/ } +/******/ Object.defineProperty(exports, '__esModule', { value: true }); +/******/ }; +/******/ })(); +/******/ +/************************************************************************/ +var __webpack_exports__ = {}; +// This entry need to be wrapped in an IIFE because it need to be in strict mode. +(() => { +"use strict"; +/*!*****************************!*\ + !*** ./main/application.ts ***! + \*****************************/ +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (/* binding */ Application) +/* harmony export */ }); +/* harmony import */ var _babel_runtime_corejs3_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime-corejs3/helpers/defineProperty */ "./node_modules/@babel/runtime-corejs3/helpers/defineProperty.js"); +/* harmony import */ var _babel_runtime_corejs3_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_includes__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/includes */ "./node_modules/@babel/runtime-corejs3/core-js-stable/instance/includes.js"); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_includes__WEBPACK_IMPORTED_MODULE_9___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_includes__WEBPACK_IMPORTED_MODULE_9__); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_json_stringify__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/json/stringify */ "./node_modules/@babel/runtime-corejs3/core-js-stable/json/stringify.js"); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_json_stringify__WEBPACK_IMPORTED_MODULE_10___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_json_stringify__WEBPACK_IMPORTED_MODULE_10__); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_object_keys__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/object/keys */ "./node_modules/@babel/runtime-corejs3/core-js-stable/object/keys.js"); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_object_keys__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_object_keys__WEBPACK_IMPORTED_MODULE_1__); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_object_get_own_property_symbols__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/object/get-own-property-symbols */ "./node_modules/@babel/runtime-corejs3/core-js-stable/object/get-own-property-symbols.js"); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_object_get_own_property_symbols__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_object_get_own_property_symbols__WEBPACK_IMPORTED_MODULE_2__); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_filter__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/filter */ "./node_modules/@babel/runtime-corejs3/core-js-stable/instance/filter.js"); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_filter__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_filter__WEBPACK_IMPORTED_MODULE_3__); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_object_get_own_property_descriptor__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/object/get-own-property-descriptor */ "./node_modules/@babel/runtime-corejs3/core-js-stable/object/get-own-property-descriptor.js"); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_object_get_own_property_descriptor__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_object_get_own_property_descriptor__WEBPACK_IMPORTED_MODULE_4__); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_for_each__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/for-each */ "./node_modules/@babel/runtime-corejs3/core-js-stable/instance/for-each.js"); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_for_each__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_for_each__WEBPACK_IMPORTED_MODULE_5__); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_object_get_own_property_descriptors__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/object/get-own-property-descriptors */ "./node_modules/@babel/runtime-corejs3/core-js-stable/object/get-own-property-descriptors.js"); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_object_get_own_property_descriptors__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_object_get_own_property_descriptors__WEBPACK_IMPORTED_MODULE_6__); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_object_define_properties__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/object/define-properties */ "./node_modules/@babel/runtime-corejs3/core-js-stable/object/define-properties.js"); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_object_define_properties__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_object_define_properties__WEBPACK_IMPORTED_MODULE_7__); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_object_define_property__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/object/define-property */ "./node_modules/@babel/runtime-corejs3/core-js-stable/object/define-property.js"); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_object_define_property__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_object_define_property__WEBPACK_IMPORTED_MODULE_8__); +/* harmony import */ var electron__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! electron */ "electron"); +/* harmony import */ var electron__WEBPACK_IMPORTED_MODULE_11___default = /*#__PURE__*/__webpack_require__.n(electron__WEBPACK_IMPORTED_MODULE_11__); +/* harmony import */ var electron_serve__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! electron-serve */ "electron-serve"); +/* harmony import */ var electron_serve__WEBPACK_IMPORTED_MODULE_12___default = /*#__PURE__*/__webpack_require__.n(electron_serve__WEBPACK_IMPORTED_MODULE_12__); +/* harmony import */ var electron_store__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! electron-store */ "electron-store"); +/* harmony import */ var electron_store__WEBPACK_IMPORTED_MODULE_13___default = /*#__PURE__*/__webpack_require__.n(electron_store__WEBPACK_IMPORTED_MODULE_13__); +/* harmony import */ var debug__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! debug */ "debug"); +/* harmony import */ var debug__WEBPACK_IMPORTED_MODULE_14___default = /*#__PURE__*/__webpack_require__.n(debug__WEBPACK_IMPORTED_MODULE_14__); +/* harmony import */ var _helpers__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./helpers */ "./main/helpers/index.ts"); +/* harmony import */ var _authentication__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ./authentication */ "./main/authentication.ts"); +/* harmony import */ var _ipc__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ./ipc */ "./main/ipc.ts"); +/* harmony import */ var _renderer_context_userContext_defaults__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ../renderer/context/userContext.defaults */ "./renderer/context/userContext.defaults.ts"); +/* harmony import */ var xbox_webapi__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! xbox-webapi */ "xbox-webapi"); +/* harmony import */ var xbox_webapi__WEBPACK_IMPORTED_MODULE_19___default = /*#__PURE__*/__webpack_require__.n(xbox_webapi__WEBPACK_IMPORTED_MODULE_19__); +/* harmony import */ var _package_json__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ../package.json */ "./package.json"); + +function ownKeys(e, r) { var t = _babel_runtime_corejs3_core_js_stable_object_keys__WEBPACK_IMPORTED_MODULE_1___default()(e); if ((_babel_runtime_corejs3_core_js_stable_object_get_own_property_symbols__WEBPACK_IMPORTED_MODULE_2___default())) { var o = _babel_runtime_corejs3_core_js_stable_object_get_own_property_symbols__WEBPACK_IMPORTED_MODULE_2___default()(e); r && (o = _babel_runtime_corejs3_core_js_stable_instance_filter__WEBPACK_IMPORTED_MODULE_3___default()(o).call(o, function (r) { return _babel_runtime_corejs3_core_js_stable_object_get_own_property_descriptor__WEBPACK_IMPORTED_MODULE_4___default()(e, r).enumerable; })), t.push.apply(t, o); } return t; } +function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var _context3, _context4; var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? _babel_runtime_corejs3_core_js_stable_instance_for_each__WEBPACK_IMPORTED_MODULE_5___default()(_context3 = ownKeys(Object(t), !0)).call(_context3, function (r) { _babel_runtime_corejs3_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(e, r, t[r]); }) : (_babel_runtime_corejs3_core_js_stable_object_get_own_property_descriptors__WEBPACK_IMPORTED_MODULE_6___default()) ? _babel_runtime_corejs3_core_js_stable_object_define_properties__WEBPACK_IMPORTED_MODULE_7___default()(e, _babel_runtime_corejs3_core_js_stable_object_get_own_property_descriptors__WEBPACK_IMPORTED_MODULE_6___default()(t)) : _babel_runtime_corejs3_core_js_stable_instance_for_each__WEBPACK_IMPORTED_MODULE_5___default()(_context4 = ownKeys(Object(t))).call(_context4, function (r) { _babel_runtime_corejs3_core_js_stable_object_define_property__WEBPACK_IMPORTED_MODULE_8___default()(e, r, _babel_runtime_corejs3_core_js_stable_object_get_own_property_descriptor__WEBPACK_IMPORTED_MODULE_4___default()(t, r)); }); } return e; } + + + + + + + + + + + + + + + + + + + + +class Application { + constructor() { + _babel_runtime_corejs3_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(this, "_log", void 0); + _babel_runtime_corejs3_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(this, "_store", new (electron_store__WEBPACK_IMPORTED_MODULE_13___default())()); + _babel_runtime_corejs3_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(this, "_startupFlags", { + fullscreen: false, + autoStream: "" + }); + _babel_runtime_corejs3_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(this, "_isProduction", "development" === "production"); + _babel_runtime_corejs3_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(this, "_isCi", process.env.CI !== undefined); + _babel_runtime_corejs3_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(this, "_isMac", process.platform === "darwin"); + _babel_runtime_corejs3_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(this, "_isWindows", process.platform === "win32"); + _babel_runtime_corejs3_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(this, "_isQuitting", false); + _babel_runtime_corejs3_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(this, "_mainWindow", void 0); + _babel_runtime_corejs3_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(this, "_ipc", void 0); + _babel_runtime_corejs3_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(this, "_authentication", void 0); + _babel_runtime_corejs3_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(this, "streamingTokens", void 0); + _babel_runtime_corejs3_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(this, "_webApi", void 0); + _babel_runtime_corejs3_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(this, "_xHomeApi", void 0); + _babel_runtime_corejs3_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(this, "_xCloudApi", void 0); + _babel_runtime_corejs3_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(this, "_xboxWorker", void 0); + _babel_runtime_corejs3_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(this, "_gpuWindow", void 0); + console.log(__filename + "[constructor()] Starting XStreaming v" + _package_json__WEBPACK_IMPORTED_MODULE_20__.version); + this._log = debug__WEBPACK_IMPORTED_MODULE_14___default()("xstreaming"); + electron__WEBPACK_IMPORTED_MODULE_11__.app.commandLine.appendSwitch("enable-features", "VaapiIgnoreDriverChecks,VaapiVideoDecoder,PlatformHEVCDecoderSupport,CanvasOopRasterization"); + // ElectronApp.commandLine.appendSwitch('disable-features', 'UseChromeOSDirectVideoDecoder'); + electron__WEBPACK_IMPORTED_MODULE_11__.app.commandLine.appendSwitch("enable-gpu-rasterization"); + electron__WEBPACK_IMPORTED_MODULE_11__.app.commandLine.appendSwitch("enable-oop-rasterization"); + electron__WEBPACK_IMPORTED_MODULE_11__.app.commandLine.appendSwitch("accelerated-video-decode"); + electron__WEBPACK_IMPORTED_MODULE_11__.app.commandLine.appendSwitch("ozone-platform-hint", "x11"); + electron__WEBPACK_IMPORTED_MODULE_11__.app.commandLine.appendSwitch("ignore-gpu-blocklist"); + // ElectronApp.commandLine.appendSwitch('enable-zero-copy'); + + this.readStartupFlags(); + this.loadApplicationDefaults(); + + // ElectronApp.removeAsDefaultProtocolClient('ms-xal-public-beta-000000004c20a908') + + this._ipc = new _ipc__WEBPACK_IMPORTED_MODULE_17__["default"](this); + this._authentication = new _authentication__WEBPACK_IMPORTED_MODULE_16__["default"](this); + this._ipc.startUp(); + } + log(namespace = "application", ...args) { + this._log.extend(namespace)(...args); + } + getStartupFlags() { + return this._startupFlags; + } + resetAutostream() { + this._startupFlags.autoStream = ""; + } + readStartupFlags() { + this.log("application", __filename + "[readStartupFlags()] Program args detected:", process.argv); + for (const arg in process.argv) { + var _context, _context2; + if (_babel_runtime_corejs3_core_js_stable_instance_includes__WEBPACK_IMPORTED_MODULE_9___default()(_context = process.argv[arg]).call(_context, "--fullscreen")) { + this.log("application", __filename + "[readStartupFlags()] --fullscreen switch found. Setting fullscreen to true"); + this._startupFlags.fullscreen = true; + } + if (_babel_runtime_corejs3_core_js_stable_instance_includes__WEBPACK_IMPORTED_MODULE_9___default()(_context2 = process.argv[arg]).call(_context2, "--connect=")) { + const key = process.argv[arg].substring(10); + this.log("application", __filename + "[readStartupFlags()] --connect switch found. Setting autoStream to", key); + this._startupFlags.autoStream = key; + } + } + this.log("application", __filename + "[readStartupFlags()] End result of startupFlags:", this._startupFlags); + } + loadApplicationDefaults() { + if (this._isProduction === true && this._isCi === false) { + electron_serve__WEBPACK_IMPORTED_MODULE_12___default()({ + directory: "app" + }); + } else if (this._isCi === true) { + const random = Math.random() * 100; + electron__WEBPACK_IMPORTED_MODULE_11__.app.setPath("userData", `${electron__WEBPACK_IMPORTED_MODULE_11__.app.getPath("userData")} (${random})`); + electron__WEBPACK_IMPORTED_MODULE_11__.app.setPath("sessionData", `${electron__WEBPACK_IMPORTED_MODULE_11__.app.getPath("userData")} (${random})`); + this._store.delete("user"); + this._store.delete("auth"); + electron_serve__WEBPACK_IMPORTED_MODULE_12___default()({ + directory: "app" + }); + } else { + electron__WEBPACK_IMPORTED_MODULE_11__.app.setPath("userData", `${electron__WEBPACK_IMPORTED_MODULE_11__.app.getPath("userData")} (development)`); + } + electron__WEBPACK_IMPORTED_MODULE_11__.app.whenReady().then(() => { + // updater({ + // // debug: true, + // silent: true, + // prereleases: (ElectronApp.getVersion().includes('beta')) ? true : false, + // }, this) + + this.log("electron", __filename + "[loadApplicationDefaults()] Electron has been fully loaded. Ready to open windows"); + this.openMainWindow(); + this._authentication.startWebviewHooks(); + + // Check authentication + // if (!this._authentication.checkAuthentication()) { + // this._authentication.startAuthflow(); + // } + }).catch(error => { + this.log("electron", __filename + "[loadApplicationDefaults()] Electron has failed to load:", error); + }); + electron__WEBPACK_IMPORTED_MODULE_11__.app.on("window-all-closed", () => { + if (this._isMac === true) { + this.log("electron", __filename + "[loadApplicationDefaults()] Electron detected that all windows are closed. Running in background..."); + } else { + this.log("electron", __filename + "[loadApplicationDefaults()] Electron detected that all windows are closed. Quitting app..."); + electron__WEBPACK_IMPORTED_MODULE_11__.app.quit(); + } + }); + electron__WEBPACK_IMPORTED_MODULE_11__.app.on("activate", () => { + this._mainWindow !== undefined ? this._mainWindow.show() : this.openMainWindow(); + }); + electron__WEBPACK_IMPORTED_MODULE_11__.app.on("before-quit", () => this._isQuitting = true); + } + authenticationCompleted(streamingTokens, webToken) { + this.log("electron", __filename + "[authenticationCompleted()] authenticationCompleted called"); + this.log("electron", __filename + "[authenticationCompleted()] streamingTokens:", streamingTokens); + this.streamingTokens = streamingTokens; + this._webApi = new (xbox_webapi__WEBPACK_IMPORTED_MODULE_19___default())({ + userToken: webToken.data.Token, + uhs: webToken.data.DisplayClaims.xui[0].uhs + }); + this._authentication._isAuthenticating = false; + this._authentication._isAuthenticated = true; + this._webApi.getProvider("profile").get("/users/me/profile/settings?settings=GameDisplayName,GameDisplayPicRaw,Gamerscore,Gamertag").then(result => { + if (result.profileUsers.length > 0) { + for (const setting in result.profileUsers[0].settings) { + if (result.profileUsers[0].settings[setting].id === "Gamertag") { + this._store.set("user.gamertag", result.profileUsers[0].settings[setting].value); + } else if (result.profileUsers[0].settings[setting].id === "GameDisplayPicRaw") { + this._store.set("user.gamerpic", result.profileUsers[0].settings[setting].value); + } else if (result.profileUsers[0].settings[setting].id === "Gamerscore") { + this._store.set("user.gamerscore", result.profileUsers[0].settings[setting].value); + } + } + } + + // Run workers + this._xboxWorker = new _helpers__WEBPACK_IMPORTED_MODULE_15__.xboxWorker(this); + this._ipc.onUserLoaded(); + }).catch(error => { + this.log("electron", __filename + "[authenticationCompleted()] Failed to retrieve user profile:", error); + electron__WEBPACK_IMPORTED_MODULE_11__.dialog.showMessageBox({ + message: "Error: Failed to retrieve user profile:" + _babel_runtime_corejs3_core_js_stable_json_stringify__WEBPACK_IMPORTED_MODULE_10___default()(error), + type: "error" + }); + }); + } + openMainWindow() { + this.log("electron", __filename + "[openMainWindow()] Creating new main window"); + const windowOptions = { + title: "XStreaming", + backgroundColor: "rgb(26, 27, 30)" + }; + const screenWidth = electron__WEBPACK_IMPORTED_MODULE_11__.screen.getPrimaryDisplay().workAreaSize.width; + const screenHight = electron__WEBPACK_IMPORTED_MODULE_11__.screen.getPrimaryDisplay().workAreaSize.height; + this._mainWindow = (0,_helpers__WEBPACK_IMPORTED_MODULE_15__.createWindow)("main", _objectSpread({ + width: screenWidth, + height: screenHight + }, windowOptions)); + this._mainWindow.on("show", () => { + this.log("electron", __filename + "[openMainWindow()] Showing Main window."); + }); + this._mainWindow.on("close", event => { + if (this._isMac === true && this._isQuitting === false) { + event.preventDefault(); + this.log("electron", __filename + "[openMainWindow()] Main windows has been hidden"); + this._mainWindow.hide(); + } else { + this.log("electron", __filename + "[openMainWindow()] Main windows has been closed"); + this._mainWindow = undefined; + } + }); + const settings = this._store.get('settings', _renderer_context_userContext_defaults__WEBPACK_IMPORTED_MODULE_18__.defaultSettings); + console.log('settings:', settings); + const locale = settings.locale || 'en'; + if (this._isProduction === true && this._isCi === false) { + this._mainWindow.loadURL(`app://./${locale}/home`); + } else { + const port = process.argv[2] || 3000; + this._mainWindow.loadURL(`http://localhost:${port}/${locale}/home`); + + // if(this._isCi !== true){ + // this._mainWindow.webContents.openDevTools() + // this.openGPUWindow() + // } + } + } + openGPUWindow() { + this._gpuWindow = new electron__WEBPACK_IMPORTED_MODULE_11__.BrowserWindow({ + width: 800, + height: 600 + }); + + // Load chrome://gpu + this._gpuWindow.loadURL("chrome://gpu"); + + // Open DevTools + this._gpuWindow.webContents.openDevTools(); + } + quit() { + electron__WEBPACK_IMPORTED_MODULE_11__.app.quit(); + } + restart() { + this.quit(); + electron__WEBPACK_IMPORTED_MODULE_11__.app.relaunch(); + } +} +new Application(); +})(); + +/******/ return __webpack_exports__; +/******/ })() +; +}); +//# sourceMappingURL=data:application/json;charset=utf-8;base64,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Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTLFdBQVc7QUFDcEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0IsV0FBVztBQUMvQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLFdBQVc7QUFDL0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLHdDQUF3QztBQUN4QztBQUNBLENBQUM7QUFDRCxvQ0FBb0M7QUFDcEMsb0JBQW9CLFFBQVE7QUFDNUIsQ0FBQztBQUNELHdDQUF3QztBQUN4QyxvQkFBb0I7QUFDcEIsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0EsY0FBYztBQUNkO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBLFlBQVk7O0FBRVo7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZOztBQUVaO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZOztBQUVaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZOztBQUVaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw0QkFBNEIsNkJBQTZCO0FBQ3pEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0EsWUFBWTs7QUFFWjtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0EsWUFBWTs7QUFFWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2QsWUFBWTtBQUNaOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0EsWUFBWTs7QUFFWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0Esa0RBQWtEO0FBQ2xEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQSxZQUFZOztBQUVaO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQSxZQUFZOztBQUVaO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBLFlBQVk7O0FBRVo7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0Esc0JBQXNCLDJCQUEyQjtBQUNqRDtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQix1QkFBdUI7QUFDM0M7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0IsdUJBQXVCO0FBQzNDO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtB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O0VBQ0Y7RUFJQTZWLGFBQWFBLENBQUEsRUFBRztJQUNkLElBQUksQ0FBQ0MsVUFBVSxHQUFHLElBQUlybEIsb0RBQWEsQ0FBQztNQUNsQ3RCLEtBQUssRUFBRSxHQUFHO01BQ1ZDLE1BQU0sRUFBRTtJQUNWLENBQUMsQ0FBQzs7SUFFRjtJQUNBLElBQUksQ0FBQzBtQixVQUFVLENBQUN4bUIsT0FBTyxDQUFDLGNBQWMsQ0FBQzs7SUFFdkM7SUFDQSxJQUFJLENBQUN3bUIsVUFBVSxDQUFDdFAsV0FBVyxDQUFDdVAsWUFBWSxDQUFDLENBQUM7RUFDNUM7RUFFQXRRLElBQUlBLENBQUEsRUFBRztJQUNMME4sMENBQVcsQ0FBQzFOLElBQUksQ0FBQyxDQUFDO0VBQ3BCO0VBRUFDLE9BQU9BLENBQUEsRUFBRztJQUNSLElBQUksQ0FBQ0QsSUFBSSxDQUFDLENBQUM7SUFDWDBOLDBDQUFXLENBQUM2QyxRQUFRLENBQUMsQ0FBQztFQUN4QjtBQUNGO0FBRUEsSUFBSXpDLFdBQVcsQ0FBQyxDQUFDLEMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly94c3RyZWFtaW5nL3dlYnBhY2svdW5pdmVyc2FsTW9kdWxlRGVmaW5pdGlvbiIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbWFpbi9hdXRoZW50aWNhdGlvbi50cyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbWFpbi9oZWxwZXJzL2NyZWF0ZS13aW5kb3cudHMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL21haW4vaGVscGVycy9odHRwLnRzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9tYWluL2hlbHBlcnMvaW5kZXgudHMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL21haW4vaGVscGVycy9zdHJlYW1tYW5hZ2VyLnRzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9tYWluL2hlbHBlcnMvdGl0bGVtYW5hZ2VyLnRzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9tYWluL2hlbHBlcnMvdG9rZW5zdG9yZS50cyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbWFpbi9oZWxwZXJzL3VwZGF0ZXIudHMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL21haW4vaGVscGVycy94Ym94V29ya2VyLnRzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9tYWluL2hlbHBlcnMveGNsb3VkYXBpLnRzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9tYWluL2lwYy50cyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbWFpbi9pcGMvYXBwLnRzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9tYWluL2lwYy9iYXNlLnRzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9tYWluL2lwYy9jb25zb2xlcy50cyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbWFpbi9pcGMvc2V0dGluZ3MudHMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL21haW4vaXBjL3N0cmVhbWluZy50cyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbWFpbi9pcGMveGNsb3VkLnRzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9tYWluL3hhbC9pbmRleC50cyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbWFpbi94YWwvbGliL2h0dHAudHMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL21haW4veGFsL2xpYi90b2tlbi50cyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbWFpbi94YWwvbGliL3Rva2Vucy9kZXZpY2V0b2tlbi50cyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbWFpbi94YWwvbGliL3Rva2Vucy9tc2FsdG9rZW4udHMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL21haW4veGFsL2xpYi90b2tlbnMvc2lzdXRva2VuLnRzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9tYWluL3hhbC9saWIvdG9rZW5zL3N0cmVhbWluZ3Rva2VuLnRzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9tYWluL3hhbC9saWIvdG9rZW5zL3VzZXJ0b2tlbi50cyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbWFpbi94YWwvbGliL3Rva2Vucy94c3RzdG9rZW4udHMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL21haW4veGFsL3Rva2Vuc3RvcmUudHMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL21haW4veGFsL3hhbC50cyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vcmVuZGVyZXIvY29udGV4dC91c2VyQ29udGV4dC5kZWZhdWx0cy50cyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nL2V4dGVybmFsIG5vZGUtY29tbW9uanMgXCJjcnlwdG9cIiIsIndlYnBhY2s6Ly94c3RyZWFtaW5nL2V4dGVybmFsIG5vZGUtY29tbW9uanMgXCJlbGVjdHJvblwiIiwid2VicGFjazovL3hzdHJlYW1pbmcvZXh0ZXJuYWwgbm9kZS1jb21tb25qcyBcImZzXCIiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy9leHRlcm5hbCBub2RlLWNvbW1vbmpzIFwiaHR0cHNcIiIsIndlYnBhY2s6Ly94c3RyZWFtaW5nL2V4dGVybmFsIG5vZGUtY29tbW9uanMgXCJub2RlOnBhdGhcIiIsIndlYnBhY2s6Ly94c3RyZWFtaW5nL2V4dGVybmFsIHVtZCBcImF4aW9zXCIiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy9leHRlcm5hbCB1bWQgXCJjb21wYXJlLXZlcnNpb25zXCIiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy9leHRlcm5hbCB1bWQgXCJkZWJ1Z1wiIiwid2VicGFjazovL3hzdHJlYW1pbmcvZXh0ZXJuYWwgdW1kIFwiZWxlY3Ryb24tc2VydmVcIiIsIndlYnBhY2s6Ly94c3RyZWFtaW5nL2V4dGVybmFsIHVtZCBcImVsZWN0cm9uLXN0b3JlXCIiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy9leHRlcm5hbCB1bWQgXCJnaXRodWItdXJsLXRvLW9iamVjdFwiIiwid2VicGFjazovL3hzdHJlYW1pbmcvZXh0ZXJuYWwgdW1kIFwiaXAtYWRkcmVzc1wiIiwid2VicGFjazovL3hzdHJlYW1pbmcvZXh0ZXJuYWwgdW1kIFwiam9zZVwiIiwid2VicGFjazovL3hzdHJlYW1pbmcvZXh0ZXJuYWwgdW1kIFwidXVpZC0xMzQ1XCIiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy9leHRlcm5hbCB1bWQgXCJ4Ym94LXdlYmFwaVwiIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9jb3JlLWpzLXN0YWJsZS9hcnJheS9pcy1hcnJheS5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvY29yZS1qcy1zdGFibGUvZGF0ZS9ub3cuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2NvcmUtanMtc3RhYmxlL2luc3RhbmNlL2ZpbHRlci5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvY29yZS1qcy1zdGFibGUvaW5zdGFuY2UvZm9yLWVhY2guanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2NvcmUtanMtc3RhYmxlL2luc3RhbmNlL2luY2x1ZGVzLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9jb3JlLWpzLXN0YWJsZS9pbnN0YW5jZS9rZXlzLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9jb3JlLWpzLXN0YWJsZS9pbnN0YW5jZS9zb21lLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9jb3JlLWpzLXN0YWJsZS9pbnN0YW5jZS9zb3J0LmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9jb3JlLWpzLXN0YWJsZS9pbnN0YW5jZS90cmltLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9jb3JlLWpzLXN0YWJsZS9qc29uL3N0cmluZ2lmeS5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvY29yZS1qcy1zdGFibGUvb2JqZWN0L2Fzc2lnbi5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvY29yZS1qcy1zdGFibGUvb2JqZWN0L2RlZmluZS1wcm9wZXJ0aWVzLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9jb3JlLWpzLXN0YWJsZS9vYmplY3QvZGVmaW5lLXByb3BlcnR5LmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9jb3JlLWpzLXN0YWJsZS9vYmplY3QvZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9jb3JlLWpzLXN0YWJsZS9vYmplY3QvZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9ycy5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvY29yZS1qcy1zdGFibGUvb2JqZWN0L2dldC1vd24tcHJvcGVydHktc3ltYm9scy5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvY29yZS1qcy1zdGFibGUvb2JqZWN0L2tleXMuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2NvcmUtanMtc3RhYmxlL3Byb21pc2UuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2NvcmUtanMtc3RhYmxlL3NldC1pbW1lZGlhdGUuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2NvcmUtanMtc3RhYmxlL3NldC10aW1lb3V0LmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9jb3JlLWpzLXN0YWJsZS9zZXQuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2NvcmUtanMtc3RhYmxlL3VybC1zZWFyY2gtcGFyYW1zLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9jb3JlLWpzLXN0YWJsZS91cmwuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2hlbHBlcnMvZGVmaW5lUHJvcGVydHkuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2hlbHBlcnMvdG9QcmltaXRpdmUuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2hlbHBlcnMvdG9Qcm9wZXJ0eUtleS5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvaGVscGVycy90eXBlb2YuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvYWN0dWFsL29iamVjdC9kZWZpbmUtcHJvcGVydHkuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvYWN0dWFsL3N5bWJvbC9pbmRleC5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9hY3R1YWwvc3ltYm9sL2l0ZXJhdG9yLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2FjdHVhbC9zeW1ib2wvdG8tcHJpbWl0aXZlLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2FycmF5L2lzLWFycmF5LmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2FycmF5L3ZpcnR1YWwvZmlsdGVyLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2FycmF5L3ZpcnR1YWwvZm9yLWVhY2guanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvYXJyYXkvdmlydHVhbC9pbmNsdWRlcy5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9hcnJheS92aXJ0dWFsL2tleXMuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvYXJyYXkvdmlydHVhbC9zb21lLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2FycmF5L3ZpcnR1YWwvc29ydC5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9kYXRlL25vdy5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9pbnN0YW5jZS9maWx0ZXIuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvaW5zdGFuY2UvaW5jbHVkZXMuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvaW5zdGFuY2Uvc29tZS5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9pbnN0YW5jZS9zb3J0LmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2luc3RhbmNlL3RyaW0uanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvanNvbi9zdHJpbmdpZnkuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvb2JqZWN0L2Fzc2lnbi5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9vYmplY3QvZGVmaW5lLXByb3BlcnRpZXMuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvb2JqZWN0L2RlZmluZS1wcm9wZXJ0eS5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9vYmplY3QvZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL29iamVjdC9nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3JzLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL29iamVjdC9nZXQtb3duLXByb3BlcnR5LXN5bWJvbHMuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvb2JqZWN0L2tleXMuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvcHJvbWlzZS9pbmRleC5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9zZXQvaW5kZXguanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvc3RyaW5nL3ZpcnR1YWwvaW5jbHVkZXMuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvc3RyaW5nL3ZpcnR1YWwvdHJpbS5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9zeW1ib2wvaW5kZXguanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvc3ltYm9sL2l0ZXJhdG9yLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL3N5bWJvbC90by1wcmltaXRpdmUuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZmVhdHVyZXMvb2JqZWN0L2RlZmluZS1wcm9wZXJ0eS5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9mZWF0dXJlcy9zeW1ib2wvaW5kZXguanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZmVhdHVyZXMvc3ltYm9sL2l0ZXJhdG9yLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ZlYXR1cmVzL3N5bWJvbC90by1wcmltaXRpdmUuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZnVsbC9vYmplY3QvZGVmaW5lLXByb3BlcnR5LmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2Z1bGwvc3ltYm9sL2luZGV4LmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2Z1bGwvc3ltYm9sL2l0ZXJhdG9yLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2Z1bGwvc3ltYm9sL3RvLXByaW1pdGl2ZS5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvYS1jYWxsYWJsZS5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvYS1jb25zdHJ1Y3Rvci5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvYS1wb3NzaWJsZS1wcm90b3R5cGUuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2Etc2V0LmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9hZGQtdG8tdW5zY29wYWJsZXMuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2FuLWluc3RhbmNlLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9hbi1vYmplY3QuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2FycmF5LWJ1ZmZlci1ub24tZXh0ZW5zaWJsZS5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvYXJyYXktZm9yLWVhY2guanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2FycmF5LWZyb20uanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2FycmF5LWluY2x1ZGVzLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9hcnJheS1pdGVyYXRpb24uanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2FycmF5LW1ldGhvZC1oYXMtc3BlY2llcy1zdXBwb3J0LmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9hcnJheS1tZXRob2QtaXMtc3RyaWN0LmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9hcnJheS1zbGljZS5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvYXJyYXktc29ydC5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvYXJyYXktc3BlY2llcy1jb25zdHJ1Y3Rvci5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvYXJyYXktc3BlY2llcy1jcmVhdGUuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2NhbGwtd2l0aC1zYWZlLWl0ZXJhdGlvbi1jbG9zaW5nLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9jYWxsZXIuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2NoZWNrLWNvcnJlY3RuZXNzLW9mLWl0ZXJhdGlvbi5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvY2xhc3NvZi1yYXcuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2NsYXNzb2YuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2NvbGxlY3Rpb24tc3Ryb25nLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9jb2xsZWN0aW9uLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9jb3B5LWNvbnN0cnVjdG9yLXByb3BlcnRpZXMuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2NvcnJlY3QtaXMtcmVnZXhwLWxvZ2ljLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9jb3JyZWN0LXByb3RvdHlwZS1nZXR0ZXIuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2NyZWF0ZS1pdGVyLXJlc3VsdC1vYmplY3QuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2NyZWF0ZS1ub24tZW51bWVyYWJsZS1wcm9wZXJ0eS5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5LWRlc2NyaXB0b3IuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eS5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZGF0ZS10by1pc28tc3RyaW5nLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4tYWNjZXNzb3IuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbi5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWlucy5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZGVmaW5lLWdsb2JhbC1wcm9wZXJ0eS5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZGVsZXRlLXByb3BlcnR5LW9yLXRocm93LmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9kZXNjcmlwdG9ycy5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZG9jdW1lbnQtY3JlYXRlLWVsZW1lbnQuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2RvZXMtbm90LWV4Y2VlZC1zYWZlLWludGVnZXIuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2RvbS1pdGVyYWJsZXMuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2VudW0tYnVnLWtleXMuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2Vudmlyb25tZW50LWZmLXZlcnNpb24uanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2Vudmlyb25tZW50LWlzLWllLW9yLWVkZ2UuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2Vudmlyb25tZW50LWlzLWlvcy1wZWJibGUuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2Vudmlyb25tZW50LWlzLWlvcy5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZW52aXJvbm1lbnQtaXMtbm9kZS5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZW52aXJvbm1lbnQtaXMtd2Vib3Mtd2Via2l0LmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9lbnZpcm9ubWVudC11c2VyLWFnZW50LmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9lbnZpcm9ubWVudC12OC12ZXJzaW9uLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9lbnZpcm9ubWVudC13ZWJraXQtdmVyc2lvbi5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZW52aXJvbm1lbnQuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2Vycm9yLXN0YWNrLWNsZWFyLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9lcnJvci1zdGFjay1pbnN0YWxsLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9lcnJvci1zdGFjay1pbnN0YWxsYWJsZS5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZXhwb3J0LmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9mYWlscy5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZnJlZXppbmcuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2Z1bmN0aW9uLWFwcGx5LmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLWNvbnRleHQuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtbmF0aXZlLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9mdW5jdGlvbi1jYWxsLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9mdW5jdGlvbi1uYW1lLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMtYWNjZXNzb3IuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcy1jbGF1c2UuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcy5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluLXByb3RvdHlwZS1tZXRob2QuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2dldC1idWlsdC1pbi5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZ2V0LWl0ZXJhdG9yLWRpcmVjdC5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZ2V0LWl0ZXJhdG9yLW1ldGhvZC5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZ2V0LWl0ZXJhdG9yLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9nZXQtanNvbi1yZXBsYWNlci1mdW5jdGlvbi5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZ2V0LW1ldGhvZC5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZ2V0LXNldC1yZWNvcmQuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2dsb2JhbC10aGlzLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5LmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9oaWRkZW4ta2V5cy5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvaG9zdC1yZXBvcnQtZXJyb3JzLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9odG1sLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9pZTgtZG9tLWRlZmluZS5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvaW5kZXhlZC1vYmplY3QuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2luc3BlY3Qtc291cmNlLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9pbnN0YWxsLWVycm9yLWNhdXNlLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9pbnRlcm5hbC1tZXRhZGF0YS5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvaW50ZXJuYWwtc3RhdGUuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2lzLWFycmF5LWl0ZXJhdG9yLW1ldGhvZC5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvaXMtYXJyYXkuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2lzLWNhbGxhYmxlLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9pcy1jb25zdHJ1Y3Rvci5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvaXMtZm9yY2VkLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9pcy1udWxsLW9yLXVuZGVmaW5lZC5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvaXMtb2JqZWN0LmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9pcy1wb3NzaWJsZS1wcm90b3R5cGUuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2lzLXB1cmUuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2lzLXJlZ2V4cC5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvaXMtc3ltYm9sLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9pdGVyYXRlLXNpbXBsZS5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvaXRlcmF0ZS5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvaXRlcmF0b3ItY2xvc2UuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2l0ZXJhdG9yLWNyZWF0ZS1jb25zdHJ1Y3Rvci5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvaXRlcmF0b3ItZGVmaW5lLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9pdGVyYXRvcnMtY29yZS5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvaXRlcmF0b3JzLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9sZW5ndGgtb2YtYXJyYXktbGlrZS5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvbWF0aC10cnVuYy5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvbWljcm90YXNrLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9uZXctcHJvbWlzZS1jYXBhYmlsaXR5LmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9ub3JtYWxpemUtc3RyaW5nLWFyZ3VtZW50LmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9ub3QtYS1yZWdleHAuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL29iamVjdC1hc3NpZ24uanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL29iamVjdC1jcmVhdGUuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydGllcy5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eS5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvci5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktbmFtZXMtZXh0ZXJuYWwuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LW5hbWVzLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1zeW1ib2xzLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9vYmplY3QtZ2V0LXByb3RvdHlwZS1vZi5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvb2JqZWN0LWlzLWV4dGVuc2libGUuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL29iamVjdC1rZXlzLWludGVybmFsLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9vYmplY3Qta2V5cy5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvb2JqZWN0LXByb3BlcnR5LWlzLWVudW1lcmFibGUuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL29iamVjdC1zZXQtcHJvdG90eXBlLW9mLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9vYmplY3QtdG8tc3RyaW5nLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9vcmRpbmFyeS10by1wcmltaXRpdmUuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL293bi1rZXlzLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9wYXRoLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9wZXJmb3JtLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9wcm9taXNlLWNvbnN0cnVjdG9yLWRldGVjdGlvbi5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvcHJvbWlzZS1uYXRpdmUtY29uc3RydWN0b3IuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3Byb21pc2UtcmVzb2x2ZS5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvcHJvbWlzZS1zdGF0aWNzLWluY29ycmVjdC1pdGVyYXRpb24uanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3F1ZXVlLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9yZXF1aXJlLW9iamVjdC1jb2VyY2libGUuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3NhZmUtZ2V0LWJ1aWx0LWluLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9zY2hlZHVsZXJzLWZpeC5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvc2V0LWNsb25lLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9zZXQtZGlmZmVyZW5jZS5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvc2V0LWhlbHBlcnMuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3NldC1pbnRlcnNlY3Rpb24uanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3NldC1pcy1kaXNqb2ludC1mcm9tLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9zZXQtaXMtc3Vic2V0LW9mLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9zZXQtaXMtc3VwZXJzZXQtb2YuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3NldC1pdGVyYXRlLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9zZXQtbWV0aG9kLWFjY2VwdC1zZXQtbGlrZS5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvc2V0LXNpemUuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3NldC1zcGVjaWVzLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9zZXQtc3ltbWV0cmljLWRpZmZlcmVuY2UuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3NldC10by1zdHJpbmctdGFnLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9zZXQtdW5pb24uanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3NoYXJlZC1rZXkuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3NoYXJlZC1zdG9yZS5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvc2hhcmVkLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9zcGVjaWVzLWNvbnN0cnVjdG9yLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9zdHJpbmctbXVsdGlieXRlLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9zdHJpbmctcGFkLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9zdHJpbmctcHVueWNvZGUtdG8tYXNjaWkuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3N0cmluZy1yZXBlYXQuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3N0cmluZy10cmltLWZvcmNlZC5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvc3RyaW5nLXRyaW0uanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3N5bWJvbC1jb25zdHJ1Y3Rvci1kZXRlY3Rpb24uanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3N5bWJvbC1kZWZpbmUtdG8tcHJpbWl0aXZlLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9zeW1ib2wtaXMtcmVnaXN0ZXJlZC5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvc3ltYm9sLWlzLXdlbGwta25vd24uanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3N5bWJvbC1yZWdpc3RyeS1kZXRlY3Rpb24uanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3Rhc2suanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3RvLWFic29sdXRlLWluZGV4LmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdC5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvdG8taW50ZWdlci1vci1pbmZpbml0eS5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvdG8tbGVuZ3RoLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy90by1vYmplY3QuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3RvLXByaW1pdGl2ZS5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvdG8tcHJvcGVydHkta2V5LmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy90by1zdHJpbmctdGFnLXN1cHBvcnQuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3RvLXN0cmluZy5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvdHJ5LXRvLXN0cmluZy5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvdWlkLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy91cmwtY29uc3RydWN0b3ItZGV0ZWN0aW9uLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy91c2Utc3ltYm9sLWFzLXVpZC5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvdjgtcHJvdG90eXBlLWRlZmluZS1idWcuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3ZhbGlkYXRlLWFyZ3VtZW50cy1sZW5ndGguanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3dlYWstbWFwLWJhc2ljLWRldGVjdGlvbi5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wtZGVmaW5lLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC13cmFwcGVkLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvd2hpdGVzcGFjZXMuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5hZ2dyZWdhdGUtZXJyb3IuY29uc3RydWN0b3IuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5hZ2dyZWdhdGUtZXJyb3IuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5hcnJheS5jb25jYXQuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5hcnJheS5maWx0ZXIuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5hcnJheS5mb3ItZWFjaC5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLmFycmF5LmluY2x1ZGVzLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuYXJyYXkuaXMtYXJyYXkuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5hcnJheS5pdGVyYXRvci5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLmFycmF5LnNvbWUuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5hcnJheS5zb3J0LmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuZGF0ZS5ub3cuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5kYXRlLnRvLWpzb24uanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5kYXRlLnRvLXByaW1pdGl2ZS5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLmpzb24uc3RyaW5naWZ5LmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuanNvbi50by1zdHJpbmctdGFnLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMubWF0aC50by1zdHJpbmctdGFnLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMub2JqZWN0LmFzc2lnbi5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLm9iamVjdC5kZWZpbmUtcHJvcGVydGllcy5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLm9iamVjdC5kZWZpbmUtcHJvcGVydHkuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5vYmplY3QuZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMub2JqZWN0LmdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvcnMuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5vYmplY3QuZ2V0LW93bi1wcm9wZXJ0eS1zeW1ib2xzLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMub2JqZWN0LmtleXMuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5vYmplY3QudG8tc3RyaW5nLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMucHJvbWlzZS5hbGwtc2V0dGxlZC5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLnByb21pc2UuYWxsLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMucHJvbWlzZS5hbnkuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5wcm9taXNlLmNhdGNoLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMucHJvbWlzZS5jb25zdHJ1Y3Rvci5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLnByb21pc2UuZmluYWxseS5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLnByb21pc2UuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5wcm9taXNlLnJhY2UuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5wcm9taXNlLnJlamVjdC5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLnByb21pc2UucmVzb2x2ZS5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLnByb21pc2Uud2l0aC1yZXNvbHZlcnMuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5yZWZsZWN0LnRvLXN0cmluZy10YWcuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5zZXQuY29uc3RydWN0b3IuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5zZXQuZGlmZmVyZW5jZS52Mi5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLnNldC5pbnRlcnNlY3Rpb24udjIuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5zZXQuaXMtZGlzam9pbnQtZnJvbS52Mi5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLnNldC5pcy1zdWJzZXQtb2YudjIuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5zZXQuaXMtc3VwZXJzZXQtb2YudjIuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5zZXQuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5zZXQuc3ltbWV0cmljLWRpZmZlcmVuY2UudjIuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5zZXQudW5pb24udjIuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5zdHJpbmcuZnJvbS1jb2RlLXBvaW50LmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuc3RyaW5nLmluY2x1ZGVzLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuc3RyaW5nLml0ZXJhdG9yLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuc3RyaW5nLnRyaW0uanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5zeW1ib2wuYXN5bmMtaXRlcmF0b3IuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5zeW1ib2wuY29uc3RydWN0b3IuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5zeW1ib2wuZGVzY3JpcHRpb24uanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5zeW1ib2wuZm9yLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuc3ltYm9sLmhhcy1pbnN0YW5jZS5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLnN5bWJvbC5pcy1jb25jYXQtc3ByZWFkYWJsZS5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLnN5bWJvbC5pdGVyYXRvci5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLnN5bWJvbC5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLnN5bWJvbC5rZXktZm9yLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuc3ltYm9sLm1hdGNoLWFsbC5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLnN5bWJvbC5tYXRjaC5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLnN5bWJvbC5yZXBsYWNlLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuc3ltYm9sLnNlYXJjaC5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLnN5bWJvbC5zcGVjaWVzLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuc3ltYm9sLnNwbGl0LmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuc3ltYm9sLnRvLXByaW1pdGl2ZS5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLnN5bWJvbC50by1zdHJpbmctdGFnLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuc3ltYm9sLnVuc2NvcGFibGVzLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXNuZXh0LmZ1bmN0aW9uLm1ldGFkYXRhLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXNuZXh0LnN5bWJvbC5hc3luYy1kaXNwb3NlLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXNuZXh0LnN5bWJvbC5jdXN0b20tbWF0Y2hlci5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzbmV4dC5zeW1ib2wuZGlzcG9zZS5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzbmV4dC5zeW1ib2wuaXMtcmVnaXN0ZXJlZC1zeW1ib2wuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lc25leHQuc3ltYm9sLmlzLXJlZ2lzdGVyZWQuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lc25leHQuc3ltYm9sLmlzLXdlbGwta25vd24tc3ltYm9sLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXNuZXh0LnN5bWJvbC5pcy13ZWxsLWtub3duLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXNuZXh0LnN5bWJvbC5tYXRjaGVyLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXNuZXh0LnN5bWJvbC5tZXRhZGF0YS1rZXkuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lc25leHQuc3ltYm9sLm1ldGFkYXRhLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXNuZXh0LnN5bWJvbC5vYnNlcnZhYmxlLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXNuZXh0LnN5bWJvbC5wYXR0ZXJuLW1hdGNoLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXNuZXh0LnN5bWJvbC5yZXBsYWNlLWFsbC5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL3dlYi5jbGVhci1pbW1lZGlhdGUuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy93ZWIuZG9tLWNvbGxlY3Rpb25zLmZvci1lYWNoLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvd2ViLmRvbS1jb2xsZWN0aW9ucy5pdGVyYXRvci5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL3dlYi5pbW1lZGlhdGUuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy93ZWIuc2V0LWltbWVkaWF0ZS5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL3dlYi5zZXQtaW50ZXJ2YWwuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy93ZWIuc2V0LXRpbWVvdXQuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy93ZWIudGltZXJzLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvd2ViLnVybC1zZWFyY2gtcGFyYW1zLmNvbnN0cnVjdG9yLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvd2ViLnVybC1zZWFyY2gtcGFyYW1zLmRlbGV0ZS5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL3dlYi51cmwtc2VhcmNoLXBhcmFtcy5oYXMuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy93ZWIudXJsLXNlYXJjaC1wYXJhbXMuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy93ZWIudXJsLXNlYXJjaC1wYXJhbXMuc2l6ZS5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL3dlYi51cmwuY2FuLXBhcnNlLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvd2ViLnVybC5jb25zdHJ1Y3Rvci5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL3dlYi51cmwuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy93ZWIudXJsLnBhcnNlLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvd2ViLnVybC50by1qc29uLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9hcnJheS9pcy1hcnJheS5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvYXJyYXkvdmlydHVhbC9mb3ItZWFjaC5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvYXJyYXkvdmlydHVhbC9rZXlzLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9kYXRlL25vdy5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvaW5zdGFuY2UvZmlsdGVyLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9pbnN0YW5jZS9mb3ItZWFjaC5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvaW5zdGFuY2UvaW5jbHVkZXMuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL2luc3RhbmNlL2tleXMuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL2luc3RhbmNlL3NvbWUuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL2luc3RhbmNlL3NvcnQuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL2luc3RhbmNlL3RyaW0uanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL2pzb24vc3RyaW5naWZ5LmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9vYmplY3QvYXNzaWduLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9vYmplY3QvZGVmaW5lLXByb3BlcnRpZXMuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL29iamVjdC9kZWZpbmUtcHJvcGVydHkuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL29iamVjdC9nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3IuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL29iamVjdC9nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3JzLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9vYmplY3QvZ2V0LW93bi1wcm9wZXJ0eS1zeW1ib2xzLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9vYmplY3Qva2V5cy5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvcHJvbWlzZS9pbmRleC5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvc2V0LWltbWVkaWF0ZS5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvc2V0LXRpbWVvdXQuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL3NldC9pbmRleC5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvc3ltYm9sL2luZGV4LmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9zeW1ib2wvaXRlcmF0b3IuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL3N5bWJvbC90by1wcmltaXRpdmUuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL3VybC1zZWFyY2gtcGFyYW1zL2luZGV4LmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS91cmwvaW5kZXguanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvd2ViL3VybC1zZWFyY2gtcGFyYW1zLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3dlYi91cmwuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy93ZWJwYWNrL2Jvb3RzdHJhcCIsIndlYnBhY2s6Ly94c3RyZWFtaW5nL3dlYnBhY2svcnVudGltZS9jb21wYXQgZ2V0IGRlZmF1bHQgZXhwb3J0Iiwid2VicGFjazovL3hzdHJlYW1pbmcvd2VicGFjay9ydW50aW1lL2RlZmluZSBwcm9wZXJ0eSBnZXR0ZXJzIiwid2VicGFjazovL3hzdHJlYW1pbmcvd2VicGFjay9ydW50aW1lL2hhc093blByb3BlcnR5IHNob3J0aGFuZCIsIndlYnBhY2s6Ly94c3RyZWFtaW5nL3dlYnBhY2svcnVudGltZS9tYWtlIG5hbWVzcGFjZSBvYmplY3QiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL21haW4vYXBwbGljYXRpb24udHMiXSwic291cmNlc0NvbnRlbnQiOlsiKGZ1bmN0aW9uIHdlYnBhY2tVbml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uKHJvb3QsIGZhY3RvcnkpIHtcblx0aWYodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgPT09ICdvYmplY3QnKVxuXHRcdG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeShyZXF1aXJlKFwiZWxlY3Ryb24tc2VydmVcIiksIHJlcXVpcmUoXCJlbGVjdHJvbi1zdG9yZVwiKSwgcmVxdWlyZShcImRlYnVnXCIpLCByZXF1aXJlKFwiaXAtYWRkcmVzc1wiKSwgcmVxdWlyZShcImF4aW9zXCIpLCByZXF1aXJlKFwiY29tcGFyZS12ZXJzaW9uc1wiKSwgcmVxdWlyZShcImdpdGh1Yi11cmwtdG8tb2JqZWN0XCIpLCByZXF1aXJlKFwiam9zZVwiKSwgcmVxdWlyZShcInV1aWQtMTM0NVwiKSwgcmVxdWlyZShcInhib3gtd2ViYXBpXCIpKTtcblx0ZWxzZSBpZih0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpXG5cdFx0ZGVmaW5lKFtcImVsZWN0cm9uLXNlcnZlXCIsIFwiZWxlY3Ryb24tc3RvcmVcIiwgXCJkZWJ1Z1wiLCBcImlwLWFkZHJlc3NcIiwgXCJheGlvc1wiLCBcImNvbXBhcmUtdmVyc2lvbnNcIiwgXCJnaXRodWItdXJsLXRvLW9iamVjdFwiLCBcImpvc2VcIiwgXCJ1dWlkLTEzNDVcIiwgXCJ4Ym94LXdlYmFwaVwiXSwgZmFjdG9yeSk7XG5cdGVsc2Uge1xuXHRcdHZhciBhID0gdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnID8gZmFjdG9yeShyZXF1aXJlKFwiZWxlY3Ryb24tc2VydmVcIiksIHJlcXVpcmUoXCJlbGVjdHJvbi1zdG9yZVwiKSwgcmVxdWlyZShcImRlYnVnXCIpLCByZXF1aXJlKFwiaXAtYWRkcmVzc1wiKSwgcmVxdWlyZShcImF4aW9zXCIpLCByZXF1aXJlKFwiY29tcGFyZS12ZXJzaW9uc1wiKSwgcmVxdWlyZShcImdpdGh1Yi11cmwtdG8tb2JqZWN0XCIpLCByZXF1aXJlKFwiam9zZVwiKSwgcmVxdWlyZShcInV1aWQtMTM0NVwiKSwgcmVxdWlyZShcInhib3gtd2ViYXBpXCIpKSA6IGZhY3Rvcnkocm9vdFtcImVsZWN0cm9uLXNlcnZlXCJdLCByb290W1wiZWxlY3Ryb24tc3RvcmVcIl0sIHJvb3RbXCJkZWJ1Z1wiXSwgcm9vdFtcImlwLWFkZHJlc3NcIl0sIHJvb3RbXCJheGlvc1wiXSwgcm9vdFtcImNvbXBhcmUtdmVyc2lvbnNcIl0sIHJvb3RbXCJnaXRodWItdXJsLXRvLW9iamVjdFwiXSwgcm9vdFtcImpvc2VcIl0sIHJvb3RbXCJ1dWlkLTEzNDVcIl0sIHJvb3RbXCJ4Ym94LXdlYmFwaVwiXSk7XG5cdFx0Zm9yKHZhciBpIGluIGEpICh0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgPyBleHBvcnRzIDogcm9vdClbaV0gPSBhW2ldO1xuXHR9XG59KShnbG9iYWwsIChfX1dFQlBBQ0tfRVhURVJOQUxfTU9EVUxFX2VsZWN0cm9uX3NlcnZlX18sIF9fV0VCUEFDS19FWFRFUk5BTF9NT0RVTEVfZWxlY3Ryb25fc3RvcmVfXywgX19XRUJQQUNLX0VYVEVSTkFMX01PRFVMRV9kZWJ1Z19fLCBfX1dFQlBBQ0tfRVhURVJOQUxfTU9EVUxFX2lwX2FkZHJlc3NfXywgX19XRUJQQUNLX0VYVEVSTkFMX01PRFVMRV9heGlvc19fLCBfX1dFQlBBQ0tfRVhURVJOQUxfTU9EVUxFX2NvbXBhcmVfdmVyc2lvbnNfXywgX19XRUJQQUNLX0VYVEVSTkFMX01PRFVMRV9naXRodWJfdXJsX3RvX29iamVjdF9fLCBfX1dFQlBBQ0tfRVhURVJOQUxfTU9EVUxFX2pvc2VfXywgX19XRUJQQUNLX0VYVEVSTkFMX01PRFVMRV91dWlkXzEzNDVfXywgX19XRUJQQUNLX0VYVEVSTkFMX01PRFVMRV94Ym94X3dlYmFwaV9fKSA9PiB7XG5yZXR1cm4gIiwiaW1wb3J0IHsgc2Vzc2lvbiwgZGlhbG9nIH0gZnJvbSAnZWxlY3Ryb24nXG5pbXBvcnQgeyBjcmVhdGVXaW5kb3cgfSBmcm9tICcuL2hlbHBlcnMnXG5pbXBvcnQgQXBwbGljYXRpb24gZnJvbSAnLi9hcHBsaWNhdGlvbidcbmltcG9ydCB7IFhhbCwgVG9rZW5TdG9yZSB9IGZyb20gJy4veGFsJ1xuaW1wb3J0IEF1dGhUb2tlblN0b3JlIGZyb20gJy4vaGVscGVycy90b2tlbnN0b3JlJ1xuaW1wb3J0IHsgZGVmYXVsdFNldHRpbmdzIH0gZnJvbSAnLi4vcmVuZGVyZXIvY29udGV4dC91c2VyQ29udGV4dC5kZWZhdWx0cydcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQXV0aGVudGljYXRpb24ge1xuICAgIF9hcHBsaWNhdGlvbjpBcHBsaWNhdGlvblxuXG4gICAgX3Rva2VuU3RvcmU6QXV0aFRva2VuU3RvcmVcbiAgICBfeGFsOlhhbFxuICAgIFxuICAgIF9hdXRoV2luZG93XG4gICAgX2F1dGhDYWxsYmFja1xuXG4gICAgX2lzQXV0aGVudGljYXRpbmc6Ym9vbGVhbiA9IGZhbHNlXG4gICAgX2lzQXV0aGVudGljYXRlZDpib29sZWFuID0gZmFsc2VcbiAgICBfYXBwTGV2ZWw6bnVtYmVyID0gMFxuXG4gICAgY29uc3RydWN0b3IoYXBwbGljYXRpb246QXBwbGljYXRpb24pe1xuICAgICAgICB0aGlzLl9hcHBsaWNhdGlvbiA9IGFwcGxpY2F0aW9uXG4gICAgICAgIHRoaXMuX3Rva2VuU3RvcmUgPSBuZXcgQXV0aFRva2VuU3RvcmUoKVxuICAgICAgICB0aGlzLl90b2tlblN0b3JlLmxvYWQoKVxuICAgICAgICB0aGlzLl94YWwgPSBuZXcgWGFsKHRoaXMuX3Rva2VuU3RvcmUpXG4gICAgfVxuXG4gICAgY2hlY2tBdXRoZW50aWNhdGlvbigpe1xuICAgICAgICB0aGlzLl9pc0F1dGhlbnRpY2F0aW5nID0gdHJ1ZVxuICAgICAgICB0aGlzLl9pc0F1dGhlbnRpY2F0ZWQgPSBmYWxzZVxuXG4gICAgICAgIHRoaXMuX2FwcGxpY2F0aW9uLmxvZygnYXV0aGVudGljYXRpb25WMicsICdbY2hlY2tBdXRoZW50aWNhdGlvbigpXSBTdGFydGluZyB0b2tlbiBjaGVjay4uLicpXG4gICAgICAgIGlmKHRoaXMuX3Rva2VuU3RvcmUuaGFzVmFsaWRBdXRoVG9rZW5zKCkpe1xuICAgICAgICAgICAgdGhpcy5fYXBwbGljYXRpb24ubG9nKCdhdXRoZW50aWNhdGlvblYyJywgJ1tjaGVja0F1dGhlbnRpY2F0aW9uKCldIFRva2VucyBhcmUgdmFsaWQuJylcbiAgICAgICAgICAgIHRoaXMuc3RhcnRTaWxlbnRGbG93KClcblxuICAgICAgICAgICAgcmV0dXJuIHRydWVcblxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYodGhpcy5fdG9rZW5TdG9yZS5nZXRVc2VyVG9rZW4oKSAhPT0gdW5kZWZpbmVkKXtcbiAgICAgICAgICAgICAgICAvLyBXZSBoYXZlIGEgdXNlciB0b2tlbiwgbGV0cyB0cnkgdG8gcmVmcmVzaCBpdC5cbiAgICAgICAgICAgICAgICB0aGlzLl9hcHBsaWNhdGlvbi5sb2coJ2F1dGhlbnRpY2F0aW9uVjInLCAnW2NoZWNrQXV0aGVudGljYXRpb24oKV0gVG9rZW5zIGFyZSBleHBpcmVkIGJ1dCB3ZSBoYXZlIGEgdXNlciB0b2tlbi4gTGV0cyB0cnkgdG8gcmVmcmVzaCB0aGUgdG9rZW5zLicpXG4gICAgICAgICAgICAgICAgdGhpcy5zdGFydFNpbGVudEZsb3coKVxuXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWVcbiAgICBcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fYXBwbGljYXRpb24ubG9nKCdhdXRoZW50aWNhdGlvblYyJywgJ1tjaGVja0F1dGhlbnRpY2F0aW9uKCldIE5vIHRva2VucyBhcmUgcHJlc2VudC4nKVxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgc3RhcnRTaWxlbnRGbG93KCl7XG4gICAgICAgIHRoaXMuX2FwcGxpY2F0aW9uLmxvZygnYXV0aGVudGljYXRpb25WMicsICdbc3RhcnRTaWxlbnRGbG93KCldIFN0YXJ0aW5nIHNpbGVudCBmbG93Li4uJylcbiAgICAgICAgdGhpcy5faXNBdXRoZW50aWNhdGluZyA9IHRydWVcbiAgICAgICAgdGhpcy5feGFsLnJlZnJlc2hUb2tlbnModGhpcy5fdG9rZW5TdG9yZSkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9hcHBsaWNhdGlvbi5sb2coJ2F1dGhlbnRpY2F0aW9uVjInLCAnW3N0YXJ0U2lsZW50RmxvdygpXSBUb2tlbnMgaGF2ZSBiZWVuIHJlZnJlc2hlZCcpXG5cbiAgICAgICAgICAgIHRoaXMuZ2V0U3RyZWFtaW5nVG9rZW4odGhpcy5fdG9rZW5TdG9yZSkudGhlbigoc3RyZWFtaW5nVG9rZW5zKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYoc3RyZWFtaW5nVG9rZW5zLnhDbG91ZFRva2VuICE9PSBudWxsKXtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fYXBwbGljYXRpb24ubG9nKCdhdXRoZW50aWNhdGlvblYyJywgJ1tzdGFydFNpbGVudEZsb3coKV0gUmV0cmlldmVkIGJvdGggeEhvbWUgYW5kIHhDbG91ZCB0b2tlbnMnKVxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9hcHBMZXZlbCA9IDJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9hcHBsaWNhdGlvbi5sb2coJ2F1dGhlbnRpY2F0aW9uVjInLCAnW3N0YXJ0U2lsZW50RmxvdygpXSBSZXRyaWV2ZWQgeEhvbWUgdG9rZW4gb25seScpXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2FwcExldmVsID0gMVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHRoaXMuX3hhbC5nZXRXZWJUb2tlbih0aGlzLl90b2tlblN0b3JlKS50aGVuKCh3ZWJUb2tlbikgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9hcHBsaWNhdGlvbi5sb2coJ2F1dGhlbnRpY2F0aW9uVjInLCBfX2ZpbGVuYW1lKydbc3RhcnRTaWxlbnRGbG93KCldIFdlYiB0b2tlbiByZWNlaXZlZCcpXG4gICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9hcHBsaWNhdGlvbi5hdXRoZW50aWNhdGlvbkNvbXBsZXRlZChzdHJlYW1pbmdUb2tlbnMsIHdlYlRva2VuKVxuXG4gICAgICAgICAgICAgICAgfSkuY2F0Y2goKGVycm9yKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2FwcGxpY2F0aW9uLmxvZygnYXV0aGVudGljYXRpb25WMicsIF9fZmlsZW5hbWUrJ1tzdGFydFNpbGVudEZsb3coKV0gRmFpbGVkIHRvIHJldHJpZXZlIHdlYiB0b2tlbnM6JywgZXJyb3IpXG4gICAgICAgICAgICAgICAgICAgIGRpYWxvZy5zaG93TWVzc2FnZUJveCh7XG4gICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiAnRXJyb3I6IEZhaWxlZCB0byByZXRyaWV2ZSB3ZWIgdG9rZW5zOicrIEpTT04uc3RyaW5naWZ5KGVycm9yKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICdlcnJvcicsXG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgfSkuY2F0Y2goKGVycikgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuX2FwcGxpY2F0aW9uLmxvZygnYXV0aGVudGljYXRpb25WMicsICdbc3RhcnRTaWxlbnRGbG93KCldIEZhaWxlZCB0byByZXRyaWV2ZSBzdHJlYW1pbmcgdG9rZW5zOicsIGVycilcbiAgICAgICAgICAgICAgICBkaWFsb2cuc2hvd01lc3NhZ2VCb3goe1xuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiAnRXJyb3I6IEZhaWxlZCB0byByZXRyaWV2ZSBzdHJlYW1pbmcgdG9rZW5zOicrIEpTT04uc3RyaW5naWZ5KGVyciksXG4gICAgICAgICAgICAgICAgICAgIHR5cGU6ICdlcnJvcicsXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIH0pXG5cbiAgICAgICAgfSkuY2F0Y2goKGVycikgPT4ge1xuICAgICAgICAgICAgdGhpcy5fYXBwbGljYXRpb24ubG9nKCdhdXRoZW50aWNhdGlvblYyJywgJ1tzdGFydFNpbGVudEZsb3coKV0gRXJyb3IgcmVmcmVzaGluZyB0b2tlbnM6JywgZXJyKVxuICAgICAgICAgICAgZGlhbG9nLnNob3dNZXNzYWdlQm94KHtcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiAnW3N0YXJ0U2lsZW50RmxvdygpXSBFcnJvciByZWZyZXNoaW5nIHRva2VuczonICsgSlNPTi5zdHJpbmdpZnkoZXJyKSxcbiAgICAgICAgICAgICAgICB0eXBlOiAnZXJyb3InLFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIHRoaXMuX3Rva2VuU3RvcmUuY2xlYXIoKVxuICAgICAgICB9KVxuICAgIH1cblxuICAgIHN0YXJ0QXV0aGZsb3coKXtcbiAgICAgICAgdGhpcy5fYXBwbGljYXRpb24ubG9nKCdhdXRoZW50aWNhdGlvblYyJywgJ1tzdGFydEF1dGhmbG93KCldIFN0YXJ0aW5nIGF1dGhlbnRpY2F0aW9uIGZsb3cnKVxuICAgICAgICBcbiAgICAgICAgdGhpcy5feGFsLmdldFJlZGlyZWN0VXJpKCkudGhlbigocmVkaXJlY3QpID0+IHtcbiAgICAgICAgICAgIHRoaXMub3BlbkF1dGhXaW5kb3cocmVkaXJlY3Quc2lzdUF1dGguTXNhT2F1dGhSZWRpcmVjdClcblxuICAgICAgICAgICAgdGhpcy5fYXV0aENhbGxiYWNrID0gKHJlZGlyZWN0VXJpKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5faXNBdXRoZW50aWNhdGluZyA9IHRydWVcbiAgICAgICAgICAgICAgICB0aGlzLl9hcHBsaWNhdGlvbi5sb2coJ2F1dGhlbnRpY2F0aW9uVjInLCAnW3N0YXJ0QXV0aEZsb3coKV0gR290IHJlZGlyZWN0IFVSSTonLCByZWRpcmVjdFVyaSlcbiAgICAgICAgICAgICAgICB0aGlzLl94YWwuYXV0aGVudGljYXRlVXNlcih0aGlzLl90b2tlblN0b3JlLCByZWRpcmVjdCwgcmVkaXJlY3RVcmkpLnRoZW4oKHJlc3VsdCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9hcHBsaWNhdGlvbi5sb2coJ2F1dGhlbnRpY2F0aW9uVjInLCAnW3N0YXJ0QXV0aEZsb3coKV0gQXV0aGVudGljYXRlZCB1c2VyOicsIHJlc3VsdClcblxuICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YXJ0U2lsZW50RmxvdygpXG5cbiAgICAgICAgICAgICAgICB9KS5jYXRjaCgoZXJyKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2FwcGxpY2F0aW9uLmxvZygnYXV0aGVudGljYXRpb25WMicsICdbc3RhcnRBdXRoRmxvdygpXSBFcnJvciBhdXRoZW50aWNhdGluZyB1c2VyOicsIGVycilcbiAgICAgICAgICAgICAgICAgICAgZGlhbG9nLnNob3dFcnJvckJveCgnRXJyb3InLCAnRXJyb3IgYXV0aGVudGljYXRpbmcgdXNlci4gRXJyb3IgZGV0YWlsczogJytKU09OLnN0cmluZ2lmeShlcnIpKVxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICB9XG4gICAgICAgIH0pLmNhdGNoKChlcnIpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX2FwcGxpY2F0aW9uLmxvZygnYXV0aGVudGljYXRpb25WMicsICdbc3RhcnRBdXRoRmxvdygpXSBFcnJvciBnZXR0aW5nIHJlZGlyZWN0IFVSSTonLCBlcnIpXG4gICAgICAgICAgICBkaWFsb2cuc2hvd0Vycm9yQm94KCdFcnJvcicsICdFcnJvciBnZXR0aW5nIHJlZGlyZWN0IFVSSS4gRXJyb3IgZGV0YWlsczogJytKU09OLnN0cmluZ2lmeShlcnIpKVxuICAgICAgICB9KVxuICAgIH1cblxuICAgIHN0YXJ0V2Vidmlld0hvb2tzKCl7XG4gICAgICAgIHRoaXMuX2FwcGxpY2F0aW9uLmxvZygnYXV0aGVudGljYXRpb25WMicsICdbc3RhcnRXZWJ2aWV3SG9va3MoKV0gU3RhcnRpbmcgd2VidmlldyBob29rcycpXG5cbiAgICAgICAgc2Vzc2lvbi5kZWZhdWx0U2Vzc2lvbi53ZWJSZXF1ZXN0Lm9uSGVhZGVyc1JlY2VpdmVkKHtcbiAgICAgICAgICAgIHVybHM6IFtcbiAgICAgICAgICAgICAgICAnaHR0cHM6Ly9sb2dpbi5saXZlLmNvbS9vYXV0aDIwX2F1dGhvcml6ZS5zcmY/KicsXG4gICAgICAgICAgICAgICAgJ2h0dHBzOi8vbG9naW4ubGl2ZS5jb20vcHBzZWN1cmUvcG9zdC5zcmY/KicsXG4gICAgICAgICAgICBdLFxuICAgICAgICB9LCAoZGV0YWlscywgY2FsbGJhY2spID0+IHtcblxuICAgICAgICAgICAgaWYoZGV0YWlscy5yZXNwb25zZUhlYWRlcnMuTG9jYXRpb24gIT09IHVuZGVmaW5lZCAmJiBkZXRhaWxzLnJlc3BvbnNlSGVhZGVycy5Mb2NhdGlvblswXS5pbmNsdWRlcyh0aGlzLl94YWwuX2FwcC5SZWRpcmVjdFVyaSkpe1xuICAgICAgICAgICAgICAgIHRoaXMuX2FwcGxpY2F0aW9uLmxvZygnYXV0aGVudGljYXRpb25WMicsICdbc3RhcnRXZWJ2aWV3SG9va3MoKV0gR290IHJlZGlyZWN0IFVSSSBmcm9tIE9BVVRIOicsIGRldGFpbHMucmVzcG9uc2VIZWFkZXJzLkxvY2F0aW9uWzBdKVxuICAgICAgICAgICAgICAgIHRoaXMuX2F1dGhXaW5kb3cuY2xvc2UoKVxuXG4gICAgICAgICAgICAgICAgaWYodGhpcy5fYXV0aENhbGxiYWNrICE9PSB1bmRlZmluZWQpe1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9hdXRoQ2FsbGJhY2soZGV0YWlscy5yZXNwb25zZUhlYWRlcnMuTG9jYXRpb25bMF0pXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fYXBwbGljYXRpb24ubG9nKCdhdXRoZW50aWNhdGlvblYyJywgJ1tzdGFydFdlYnZpZXdIb29rcygpXSBBdXRoZW50aWNhdGlvbiBDYWxsYmFjayBpcyBub3QgZGVmaW5lZDonLCB0aGlzLl9hdXRoQ2FsbGJhY2spXG4gICAgICAgICAgICAgICAgICAgIGRpYWxvZy5zaG93RXJyb3JCb3goJ0Vycm9yJywgJ0F1dGhlbnRpY2F0aW9uIENhbGxiYWNrIGlzIG5vdCBkZWZpbmVkLiBFcnJvciBkZXRhaWxzOiAnK0pTT04uc3RyaW5naWZ5KHRoaXMuX2F1dGhDYWxsYmFjaykpXG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgY2FsbGJhY2soeyBjYW5jZWw6IHRydWUgfSlcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soZGV0YWlscylcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICB9XG5cbiAgICBvcGVuQXV0aFdpbmRvdyh1cmwpe1xuICAgICAgICBjb25zdCBhdXRoV2luZG93ID0gY3JlYXRlV2luZG93KCdhdXRoJywge1xuICAgICAgICAgICAgd2lkdGg6IDUwMCxcbiAgICAgICAgICAgIGhlaWdodDogNjAwLFxuICAgICAgICAgICAgdGl0bGU6ICdBdXRoZW50aWNhdGlvbicsXG4gICAgICAgIH0pXG4gICAgICAgIFxuICAgICAgICBhdXRoV2luZG93LmxvYWRVUkwodXJsKVxuICAgICAgICB0aGlzLl9hdXRoV2luZG93ID0gYXV0aFdpbmRvd1xuXG4gICAgICAgIHRoaXMuX2F1dGhXaW5kb3cub24oJ2Nsb3NlJywgKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fYXBwbGljYXRpb24ubG9nKCdhdXRoZW50aWNhdGlvblYyJywgJ1tvcGVuQXV0aFdpbmRvdygpXSBDbG9zZWQgYXV0aCB3aW5kb3cnKVxuICAgICAgICAgICAgLy8gQFRPRE86IFdoYXQgdG8gZG8/XG4gICAgICAgIH0pXG4gICAgfVxuXG4gICAgYXN5bmMgZ2V0U3RyZWFtaW5nVG9rZW4odG9rZW5TdG9yZTpUb2tlblN0b3JlKXtcbiAgICAgICAgY29uc29sZS5sb2coJ2dldFN0cmVhbWluZ1Rva2VuJylcbiAgICAgICAgY29uc3Qgc2lzdVRva2VuID0gdG9rZW5TdG9yZS5nZXRTaXN1VG9rZW4oKVxuICAgICAgICBpZihzaXN1VG9rZW4gPT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignU2lzdSB0b2tlbiBpcyBtaXNzaW5nLiBQbGVhc2UgYXV0aGVudGljYXRlIGZpcnN0JylcblxuICAgICAgICBjb25zdCB4c3RzVG9rZW4gPSBhd2FpdCB0aGlzLl94YWwuZG9Yc3RzQXV0aG9yaXphdGlvbihzaXN1VG9rZW4sICdodHRwOi8vZ3Nzdi54Ym94bGl2ZS5jb20vJylcblxuICAgICAgICBjb25zb2xlLmxvZygndGhpcy5feGFsLl94aG9tZVRva2VuOicsIHRoaXMuX3hhbC5feGhvbWVUb2tlbilcbiAgICAgICAgaWYodGhpcy5feGFsLl94aG9tZVRva2VuID09PSB1bmRlZmluZWQgfHwgdGhpcy5feGFsLl94aG9tZVRva2VuLmdldFNlY29uZHNWYWxpZCgpIDw9IDYwKXtcbiAgICAgICAgICAgIHRoaXMuX3hhbC5feGhvbWVUb2tlbiA9IGF3YWl0IHRoaXMuX3hhbC5nZXRTdHJlYW1Ub2tlbih4c3RzVG9rZW4sICd4aG9tZScpXG4gICAgICAgIH1cblxuICAgICAgICBjb25zb2xlLmxvZygndGhpcy5feGFsLl94Y2xvdWRUb2tlbjonLCB0aGlzLl94YWwuX3hjbG91ZFRva2VuKVxuICAgICAgICBjb25zdCBzZXR0aW5nczogYW55ID0gdGhpcy5fYXBwbGljYXRpb24uX3N0b3JlLmdldCgnc2V0dGluZ3MnLCBkZWZhdWx0U2V0dGluZ3MpXG4gICAgICAgIGlmKCF0aGlzLl94YWwuX3hjbG91ZFRva2VuIHx8IHRoaXMuX3hhbC5feGNsb3VkVG9rZW4uZ2V0U2Vjb25kc1ZhbGlkKCkgPD0gNjApe1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICB0aGlzLl94YWwuX3hjbG91ZFRva2VuID0gYXdhaXQgdGhpcy5feGFsLmdldFN0cmVhbVRva2VuKHhzdHNUb2tlbiwgJ3hncHV3ZWInLCBzZXR0aW5ncy5mb3JjZV9yZWdpb25faXApXG4gICAgICAgICAgICB9IGNhdGNoKGVycm9yKXtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl94YWwuX3hjbG91ZFRva2VuID0gYXdhaXQgdGhpcy5feGFsLmdldFN0cmVhbVRva2VuKHhzdHNUb2tlbiwgJ3hncHV3ZWJmMnAnLCBzZXR0aW5ncy5mb3JjZV9yZWdpb25faXApXG4gICAgICAgICAgICAgICAgfSBjYXRjaChlcnJvcil7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3hhbC5feGNsb3VkVG9rZW4gPSBudWxsXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHsgeEhvbWVUb2tlbjogdGhpcy5feGFsLl94aG9tZVRva2VuLCB4Q2xvdWRUb2tlbjogdGhpcy5feGFsLl94Y2xvdWRUb2tlbiB9XG4gICAgfVxuXG4gICAgXG59XG4iLCJpbXBvcnQge1xuICAgIHNjcmVlbixcbiAgICBCcm93c2VyV2luZG93LFxuICAgIEJyb3dzZXJXaW5kb3dDb25zdHJ1Y3Rvck9wdGlvbnMsXG59IGZyb20gJ2VsZWN0cm9uJ1xuaW1wb3J0IFN0b3JlIGZyb20gJ2VsZWN0cm9uLXN0b3JlJ1xuaW1wb3J0IHBhdGggZnJvbSAnbm9kZTpwYXRoJ1xuXG5leHBvcnQgZGVmYXVsdCAod2luZG93TmFtZTogc3RyaW5nLCBvcHRpb25zOiBCcm93c2VyV2luZG93Q29uc3RydWN0b3JPcHRpb25zKTogQnJvd3NlcldpbmRvdyA9PiB7XG4gICAgY29uc3Qga2V5ID0gJ3dpbmRvdy1zdGF0ZSdcbiAgICBjb25zdCBuYW1lID0gYHdpbmRvdy1zdGF0ZS12Mi0ke3dpbmRvd05hbWV9YFxuICAgIGNvbnN0IHN0b3JlID0gbmV3IFN0b3JlKHsgbmFtZSB9KVxuICAgIGNvbnN0IGRlZmF1bHRTaXplID0ge1xuICAgICAgICB3aWR0aDogb3B0aW9ucy53aWR0aCxcbiAgICAgICAgaGVpZ2h0OiBvcHRpb25zLmhlaWdodCxcbiAgICB9XG4gICAgbGV0IHN0YXRlID0ge31cblxuICAgIGNvbnN0IHJlc3RvcmUgPSAoKSA9PiBzdG9yZS5nZXQoa2V5LCBkZWZhdWx0U2l6ZSlcblxuICAgIGNvbnN0IGdldEN1cnJlbnRQb3NpdGlvbiA9ICgpID0+IHtcbiAgICAgICAgd2luLnJlbW92ZU1lbnUoKVxuICAgICAgICBjb25zdCBwb3NpdGlvbiA9IHdpbi5nZXRQb3NpdGlvbigpXG4gICAgICAgIGNvbnN0IHNpemUgPSB3aW4uZ2V0U2l6ZSgpXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB4OiBwb3NpdGlvblswXSxcbiAgICAgICAgICAgIHk6IHBvc2l0aW9uWzFdLFxuICAgICAgICAgICAgd2lkdGg6IHNpemVbMF0sXG4gICAgICAgICAgICBoZWlnaHQ6IHNpemVbMV0sXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCB3aW5kb3dXaXRoaW5Cb3VuZHMgPSAod2luZG93U3RhdGUsIGJvdW5kcykgPT4ge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgd2luZG93U3RhdGUueCA+PSBib3VuZHMueCAmJlxuICAgICAgd2luZG93U3RhdGUueSA+PSBib3VuZHMueSAmJlxuICAgICAgd2luZG93U3RhdGUueCArIHdpbmRvd1N0YXRlLndpZHRoIDw9IGJvdW5kcy54ICsgYm91bmRzLndpZHRoICYmXG4gICAgICB3aW5kb3dTdGF0ZS55ICsgd2luZG93U3RhdGUuaGVpZ2h0IDw9IGJvdW5kcy55ICsgYm91bmRzLmhlaWdodFxuICAgICAgICApXG4gICAgfVxuXG4gICAgY29uc3QgcmVzZXRUb0RlZmF1bHRzID0gKCkgPT4ge1xuICAgICAgICBjb25zdCBib3VuZHMgPSBzY3JlZW4uZ2V0UHJpbWFyeURpc3BsYXkoKS5ib3VuZHNcbiAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIGRlZmF1bHRTaXplLCB7XG4gICAgICAgICAgICB4OiAoYm91bmRzLndpZHRoIC0gZGVmYXVsdFNpemUud2lkdGgpIC8gMixcbiAgICAgICAgICAgIHk6IChib3VuZHMuaGVpZ2h0IC0gZGVmYXVsdFNpemUuaGVpZ2h0KSAvIDIsXG4gICAgICAgIH0pXG4gICAgfVxuXG4gICAgY29uc3QgZW5zdXJlVmlzaWJsZU9uU29tZURpc3BsYXkgPSB3aW5kb3dTdGF0ZSA9PiB7XG4gICAgICAgIGNvbnN0IHZpc2libGUgPSBzY3JlZW4uZ2V0QWxsRGlzcGxheXMoKS5zb21lKGRpc3BsYXkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHdpbmRvd1dpdGhpbkJvdW5kcyh3aW5kb3dTdGF0ZSwgZGlzcGxheS5ib3VuZHMpXG4gICAgICAgIH0pXG4gICAgICAgIGlmICghdmlzaWJsZSkge1xuICAgICAgICAgICAgLy8gV2luZG93IGlzIHBhcnRpYWxseSBvciBmdWxseSBub3QgdmlzaWJsZSBub3cuXG4gICAgICAgICAgICAvLyBSZXNldCBpdCB0byBzYWZlIGRlZmF1bHRzLlxuICAgICAgICAgICAgcmV0dXJuIHJlc2V0VG9EZWZhdWx0cygpXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHdpbmRvd1N0YXRlXG4gICAgfVxuXG4gICAgY29uc3Qgc2F2ZVN0YXRlID0gKCkgPT4ge1xuICAgICAgICBpZiAoIXdpbi5pc01pbmltaXplZCgpICYmICF3aW4uaXNNYXhpbWl6ZWQoKSkge1xuICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihzdGF0ZSwgZ2V0Q3VycmVudFBvc2l0aW9uKCkpXG4gICAgICAgIH1cbiAgICAgICAgc3RvcmUuc2V0KGtleSwgc3RhdGUpXG4gICAgfVxuXG4gICAgc3RhdGUgPSBlbnN1cmVWaXNpYmxlT25Tb21lRGlzcGxheShyZXN0b3JlKCkpXG5cbiAgICBjb25zdCBicm93c2VyT3B0aW9uczogQnJvd3NlcldpbmRvd0NvbnN0cnVjdG9yT3B0aW9ucyA9IHtcbiAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgLy8gLi4uc3RhdGUsXG4gICAgICAgIHdlYlByZWZlcmVuY2VzOiB7XG4gICAgICAgICAgICAvLyBub2RlSW50ZWdyYXRpb246IHRydWUsXG4gICAgICAgICAgICAvLyBjb250ZXh0SXNvbGF0aW9uOiBmYWxzZSxcbiAgICAgICAgICAgIG5vZGVJbnRlZ3JhdGlvbjogZmFsc2UsXG4gICAgICAgICAgICBjb250ZXh0SXNvbGF0aW9uOiB0cnVlLFxuICAgICAgICAgICAgZW5hYmxlQmxpbmtGZWF0dXJlczogJycsXG4gICAgICAgICAgICBzYW5kYm94OiBmYWxzZSxcbiAgICAgICAgICAgIHByZWxvYWQ6IHBhdGguam9pbihfX2Rpcm5hbWUsICdwcmVsb2FkLmpzJyksXG4gICAgICAgICAgICAuLi5vcHRpb25zLndlYlByZWZlcmVuY2VzLFxuICAgICAgICB9LFxuICAgICAgICBhdXRvSGlkZU1lbnVCYXI6IHRydWUsXG4gICAgfVxuICAgIGNvbnN0IHdpbiA9IG5ldyBCcm93c2VyV2luZG93KGJyb3dzZXJPcHRpb25zKVxuXG4gICAgd2luLm9uKCdjbG9zZScsIHNhdmVTdGF0ZSlcblxuICAgIHJldHVybiB3aW5cbn0iLCJpbXBvcnQgaHR0cHMgZnJvbSAnaHR0cHMnXG5pbXBvcnQgQXBwbGljYXRpb24gZnJvbSAnLi4vYXBwbGljYXRpb24nXG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEh0dHAge1xuXG4gICAgX2FwcGxpY2F0aW9uOkFwcGxpY2F0aW9uXG5cbiAgICBjb25zdHJ1Y3RvcihhcHBsaWNhdGlvbjpBcHBsaWNhdGlvbikge1xuICAgICAgICB0aGlzLl9hcHBsaWNhdGlvbiA9IGFwcGxpY2F0aW9uXG4gICAgfVxuXG4gICAgZ2V0KGhvc3Q6c3RyaW5nLCB1cmw6IHN0cmluZywgbWV0aG9kID0gJ0dFVCcpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgIGxldCByZXNwb25zZURhdGEgPSAnJ1xuXG4gICAgICAgICAgICBjb25zdCByZXEgPSBodHRwcy5yZXF1ZXN0KHtcbiAgICAgICAgICAgICAgICBob3N0OiBob3N0LFxuICAgICAgICAgICAgICAgIHBhdGg6IHVybCxcbiAgICAgICAgICAgICAgICBtZXRob2Q6IG1ldGhvZCxcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sIChyZXNwb25zZTphbnkpID0+IHtcbiAgICAgICAgICAgICAgICByZXNwb25zZS5vbignZGF0YScsIChkYXRhOmFueSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXNwb25zZURhdGEgKz0gZGF0YVxuICAgICAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgICAgICByZXNwb25zZS5vbignZW5kJywgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZihyZXNwb25zZS5zdGF0dXNDb2RlID49IDIwMCAmJiByZXNwb25zZS5zdGF0dXNDb2RlIDw9IDI5OSl7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9hcHBsaWNhdGlvbi5sb2coJ0hUVFAnLCAnZ2V0KCcrdXJsKycsICcrbWV0aG9kKycpIHJlc29sdmU6JywgcmVzcG9uc2Uuc3RhdHVzQ29kZSlcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCByZXR1cm5EYXRhID0gcmVzcG9uc2VEYXRhXG4gICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybkRhdGEgPSBKU09OLnBhcnNlKHJlc3BvbnNlRGF0YSlcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2goZXJyb3Ipe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIERhdGEgaXMgbm90IEpTT04uLlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZihyZXNwb25zZS5zdGF0dXNDb2RlID09PSAyMDQpe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFdlIGhhdmUgdG8gcmV0cnkuLlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmdldCh1cmwsIG1ldGhvZCkudGhlbigocmVzdWx0KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHJlc3VsdClcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KS5jYXRjaCgoZXJyb3IpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChlcnJvcilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCA3NTApXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUocmV0dXJuRGF0YSlcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2FwcGxpY2F0aW9uLmxvZygnSFRUUCcsICdnZXQoJyt1cmwrJykgcmVqZWN0OicsIHJlc3BvbnNlLnN0YXR1c0NvZGUpXG4gICAgICAgICAgICAgICAgICAgICAgICByZWplY3Qoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybDogdXJsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1czogcmVzcG9uc2Uuc3RhdHVzQ29kZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBib2R5OiByZXNwb25zZURhdGEsXG4gICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgIHJlcS5vbignZXJyb3InLCAoZXJyb3IpID0+IHtcbiAgICAgICAgICAgICAgICByZWplY3QoZXJyb3IpXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgcmVxLmVuZCgpXG4gICAgICAgIH0pXG4gICAgfVxuXG4gICAgcG9zdChob3N0OiBzdHJpbmcsIHVybDogc3RyaW5nLCBwb3N0RGF0YSA9IHt9LCBoZWFkZXJzID0ge30pIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgIGxldCByZXNwb25zZURhdGEgPSAnJ1xuICAgICAgICAgICAgY29uc3QgbWVyZ2VkSGVhZGVycyA9IE9iamVjdC5hc3NpZ24oe30sIHtcbiAgICAgICAgICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgICAgICAgfSwgaGVhZGVycylcblxuICAgICAgICAgICAgY29uc3QgcmVxID0gaHR0cHMucmVxdWVzdCh7XG4gICAgICAgICAgICAgICAgaG9zdDogaG9zdCxcbiAgICAgICAgICAgICAgICBwYXRoOiB1cmwsXG4gICAgICAgICAgICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICAgICAgICAgICAgaGVhZGVyczogbWVyZ2VkSGVhZGVycyxcbiAgICAgICAgICAgIH0sIChyZXNwb25zZTphbnkpID0+IHtcblxuICAgICAgICAgICAgICAgIHJlc3BvbnNlLm9uKCdkYXRhJywgKGRhdGE6YW55KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlRGF0YSArPSBkYXRhXG4gICAgICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgICAgIHJlc3BvbnNlLm9uKCdlbmQnLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmKHJlc3BvbnNlLnN0YXR1c0NvZGUgPj0gMjAwICYmIHJlc3BvbnNlLnN0YXR1c0NvZGUgPD0gMjk5KXtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2FwcGxpY2F0aW9uLmxvZygnSFRUUCcsICdwb3N0KCcrdXJsKycpIHJlc29sdmU6JywgcmVzcG9uc2Uuc3RhdHVzQ29kZSwgcmVzcG9uc2VEYXRhLnN1YnN0cmluZygwLCAxMDApKVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgcmV0dXJuRGF0YSA9IHJlc3BvbnNlRGF0YVxuICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5EYXRhID0gSlNPTi5wYXJzZShyZXNwb25zZURhdGEpXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoKGVycm9yKXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBEYXRhIGlzIG5vdCBKU09OLi5cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShyZXR1cm5EYXRhKVxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fYXBwbGljYXRpb24ubG9nKCdIVFRQJywgJ3Bvc3QoJyt1cmwrJykgcmVqZWN0OicsIHJlc3BvbnNlLnN0YXR1c0NvZGUpXG4gICAgICAgICAgICAgICAgICAgICAgICByZWplY3Qoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybDogdXJsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1czogcmVzcG9uc2Uuc3RhdHVzQ29kZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBib2R5OiByZXNwb25zZURhdGEsXG4gICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgIHJlcS5vbignZXJyb3InLCAoZXJyb3IpID0+IHtcbiAgICAgICAgICAgICAgICByZWplY3QoZXJyb3IpXG4gICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICByZXEud3JpdGUoSlNPTi5zdHJpbmdpZnkocG9zdERhdGEpKVxuXG4gICAgICAgICAgICByZXEuZW5kKClcbiAgICAgICAgfSlcbiAgICB9XG5cbn0iLCJpbXBvcnQgY3JlYXRlV2luZG93IGZyb20gJy4vY3JlYXRlLXdpbmRvdydcbmltcG9ydCB4Q2xvdWRBcGkgZnJvbSAnLi94Y2xvdWRhcGknXG5pbXBvcnQgeGJveFdvcmtlciBmcm9tICcuL3hib3hXb3JrZXInXG5pbXBvcnQgeyBzZXRVcGRhdGVOb3RpZmljYXRpb24gYXMgdXBkYXRlciB9IGZyb20gJy4vdXBkYXRlcidcblxuZXhwb3J0IHtcbiAgICBjcmVhdGVXaW5kb3csXG4gICAgeENsb3VkQXBpLFxuICAgIHhib3hXb3JrZXIsXG4gICAgdXBkYXRlcixcbn1cbiIsImltcG9ydCBBcHBsaWNhdGlvbiBmcm9tICcuLi9hcHBsaWNhdGlvbidcbmltcG9ydCB4Q2xvdWRBcGksIHsgcGxheVJlc3VsdCB9IGZyb20gJy4veGNsb3VkYXBpJ1xuaW1wb3J0IFN0b3JlIGZyb20gJ2VsZWN0cm9uLXN0b3JlJ1xuXG5pbnRlcmZhY2Ugc3RyZWFtU2Vzc2lvbiB7XG4gICAgaWQ6IHN0cmluZztcbiAgICB0YXJnZXQ6IHN0cmluZztcbiAgICBwYXRoOiBzdHJpbmc7XG4gICAgdHlwZTogc3RyaW5nfCdob21lJ3wnY2xvdWQnO1xuICAgIHN0YXRlPzogc3RyaW5nO1xuICAgIHdhaXRpbmdUaW1lcz86IGFueTtcbiAgICBwbGF5ZXJTdGF0ZTogc3RyaW5nfCdwZW5kaW5nJ3wnc3RhcnRlZCd8J3F1ZXVlZCd8J2ZhaWxlZCc7XG4gICAgZXJyb3JEZXRhaWxzPzoge1xuICAgICAgICBjb2RlO1xuICAgICAgICBtZXNzYWdlO1xuICAgIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFN0cmVhbU1hbmFnZXIge1xuXG4gICAgX2FwcGxpY2F0aW9uOkFwcGxpY2F0aW9uXG5cbiAgICBfc2Vzc2lvbnMgPSB7fVxuICAgIFxuICAgIGNvbnN0cnVjdG9yKGFwcGxpY2F0aW9uKXtcbiAgICAgICAgdGhpcy5fYXBwbGljYXRpb24gPSBhcHBsaWNhdGlvblxuICAgIH1cblxuICAgIGdldEFwaSh0eXBlKTogeENsb3VkQXBpe1xuICAgICAgICBjb25zdCBzdHJlYW1pbmdUb2tlbnMgPSB0aGlzLl9hcHBsaWNhdGlvbi5zdHJlYW1pbmdUb2tlbnM7XG5cbiAgICAgICAgaWYodHlwZSA9PT0gJ2hvbWUnKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IHhDbG91ZEFwaShcbiAgICAgICAgICAgICAgICB0aGlzLl9hcHBsaWNhdGlvbixcbiAgICAgICAgICAgICAgICBzdHJlYW1pbmdUb2tlbnMueEhvbWVUb2tlbi5nZXREZWZhdWx0UmVnaW9uKCkuYmFzZVVyaS5zdWJzdHJpbmcoOCksXG4gICAgICAgICAgICAgICAgc3RyZWFtaW5nVG9rZW5zLnhIb21lVG9rZW4uZGF0YS5nc1Rva2VuLFxuICAgICAgICAgICAgICAgIFwiaG9tZVwiXG4gICAgICAgICAgICApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyB4Q2xvdWRBcGkoXG4gICAgICAgICAgICAgICAgdGhpcy5fYXBwbGljYXRpb24sXG4gICAgICAgICAgICAgICAgc3RyZWFtaW5nVG9rZW5zLnhDbG91ZFRva2VuLmdldERlZmF1bHRSZWdpb24oKS5iYXNlVXJpLnN1YnN0cmluZyg4KSxcbiAgICAgICAgICAgICAgICBzdHJlYW1pbmdUb2tlbnMueENsb3VkVG9rZW4uZGF0YS5nc1Rva2VuLFxuICAgICAgICAgICAgICAgIFwiY2xvdWRcIlxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldFNlc3Npb24oc2Vzc2lvbklkOnN0cmluZyk6c3RyZWFtU2Vzc2lvbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zZXNzaW9uc1tzZXNzaW9uSWRdXG4gICAgfVxuXG4gICAgc3RhcnRTdHJlYW0odHlwZTpzdHJpbmd8J2hvbWUnfCdjbG91ZCcsIHRhcmdldCl7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICB0aGlzLmdldEFwaSh0eXBlKS5zdGFydFN0cmVhbSh0YXJnZXQpLnRoZW4oKHBsYXlSZXN1bHQ6cGxheVJlc3VsdCkgPT4ge1xuICAgICAgICAgICAgLy8gdGhpcy5fYXBwbGljYXRpb24uX3hDbG91ZEFwaS5zdGFydFN0cmVhbSh0eXBlLCB0YXJnZXQpLnRoZW4oKHBsYXlSZXN1bHQpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnU3RyZWFtbWFuYWdlciAtIHN0YXJ0U3RyZWFtOicsIHBsYXlSZXN1bHQpXG5cbiAgICAgICAgICAgICAgICBjb25zdCBzZXNzaW9uSWQgPSBwbGF5UmVzdWx0LnNlc3Npb25QYXRoLnNwbGl0KCcvJylbM11cblxuICAgICAgICAgICAgICAgIGNvbnN0IHN0cmVhbVNlc3Npb246c3RyZWFtU2Vzc2lvbiA9IHtcbiAgICAgICAgICAgICAgICAgICAgaWQ6IHNlc3Npb25JZCxcbiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0OiB0YXJnZXQsXG4gICAgICAgICAgICAgICAgICAgIHBhdGg6IHBsYXlSZXN1bHQuc2Vzc2lvblBhdGgsXG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IHR5cGUsXG4gICAgICAgICAgICAgICAgICAgIHBsYXllclN0YXRlOiAncGVuZGluZycsXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuX3Nlc3Npb25zW3Nlc3Npb25JZF0gPSBzdHJlYW1TZXNzaW9uXG4gICAgICAgICAgICAgICAgdGhpcy5tb25pdG9yU2Vzc2lvbihzZXNzaW9uSWQpXG5cbiAgICAgICAgICAgICAgICByZXNvbHZlKHNlc3Npb25JZClcbiAgICAgICAgICAgIH0pLmNhdGNoKChlcnJvcikgPT4ge1xuICAgICAgICAgICAgICAgIHJlamVjdChlcnJvcilcbiAgICAgICAgICAgIH0pXG4gICAgICAgIH0pXG4gICAgfVxuXG4gICAgc3RvcFN0cmVhbShzZXNzaW9uSWQpe1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgc2Vzc2lvbiA9IHRoaXMuZ2V0U2Vzc2lvbihzZXNzaW9uSWQpXG4gICAgICAgICAgICBpZihzZXNzaW9uID09PSB1bmRlZmluZWQpe1xuICAgICAgICAgICAgICAgIHJlamVjdCgnU2Vzc2lvbiBub3QgZm91bmQ6ICcrc2Vzc2lvbklkKVxuICAgICAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLmdldEFwaShzZXNzaW9uLnR5cGUpLnN0b3BTdHJlYW0oc2Vzc2lvbklkKS50aGVuKChyZXN1bHQpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnQ3VycmVudCBzZXNzaW9uczonLCB0aGlzLl9zZXNzaW9ucylcbiAgICAgICAgICAgICAgICBkZWxldGUgdGhpcy5fc2Vzc2lvbnNbc2Vzc2lvbklkXVxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCduZXcgc2Vzc2lvbnM6JywgdGhpcy5fc2Vzc2lvbnMpXG5cbiAgICAgICAgICAgICAgICByZXNvbHZlKHJlc3VsdClcbiAgICAgICAgICAgIH0pLmNhdGNoKChlcnJvcikgPT4ge1xuICAgICAgICAgICAgICAgIHJlamVjdChlcnJvcilcbiAgICAgICAgICAgIH0pXG4gICAgICAgIH0pXG4gICAgfVxuXG4gICAgc2VuZFNkcChzZXNzaW9uSWQ6c3RyaW5nLCBzZHA6YW55KXtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHNlc3Npb24gPSB0aGlzLmdldFNlc3Npb24oc2Vzc2lvbklkKVxuICAgICAgICAgICAgaWYoc2Vzc2lvbiA9PT0gdW5kZWZpbmVkKXtcbiAgICAgICAgICAgICAgICByZWplY3QoJ1Nlc3Npb24gbm90IGZvdW5kOiAnK3Nlc3Npb25JZClcbiAgICAgICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5nZXRBcGkoc2Vzc2lvbi50eXBlKS5zZW5kU2RwKHNlc3Npb25JZCwgc2RwKS50aGVuKChyZXN1bHQpID0+IHtcblxuICAgICAgICAgICAgICAgIHJlc29sdmUocmVzdWx0KVxuICAgICAgICAgICAgfSkuY2F0Y2goKGVycm9yKSA9PiB7XG4gICAgICAgICAgICAgICAgcmVqZWN0KGVycm9yKVxuICAgICAgICAgICAgfSlcbiAgICAgICAgfSlcbiAgICB9XG5cbiAgICBzZW5kQ2hhdFNkcChzZXNzaW9uSWQ6c3RyaW5nLCBzZHA6YW55KXtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHNlc3Npb24gPSB0aGlzLmdldFNlc3Npb24oc2Vzc2lvbklkKVxuICAgICAgICAgICAgaWYoc2Vzc2lvbiA9PT0gdW5kZWZpbmVkKXtcbiAgICAgICAgICAgICAgICByZWplY3QoJ1Nlc3Npb24gbm90IGZvdW5kOiAnK3Nlc3Npb25JZClcbiAgICAgICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5nZXRBcGkoc2Vzc2lvbi50eXBlKS5zZW5kQ2hhdFNkcChzZXNzaW9uSWQsIHNkcCkudGhlbigocmVzdWx0KSA9PiB7XG5cbiAgICAgICAgICAgICAgICByZXNvbHZlKHJlc3VsdClcbiAgICAgICAgICAgIH0pLmNhdGNoKChlcnJvcikgPT4ge1xuICAgICAgICAgICAgICAgIHJlamVjdChlcnJvcilcbiAgICAgICAgICAgIH0pXG4gICAgICAgIH0pXG4gICAgfVxuXG4gICAgc2VuZEljZShzZXNzaW9uSWQ6c3RyaW5nLCBpY2U6YW55KXtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHNlc3Npb24gPSB0aGlzLmdldFNlc3Npb24oc2Vzc2lvbklkKVxuICAgICAgICAgICAgaWYoc2Vzc2lvbiA9PT0gdW5kZWZpbmVkKXtcbiAgICAgICAgICAgICAgICByZWplY3QoJ1Nlc3Npb24gbm90IGZvdW5kOiAnK3Nlc3Npb25JZClcbiAgICAgICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5nZXRBcGkoc2Vzc2lvbi50eXBlKS5zZW5kSWNlKHNlc3Npb25JZCwgaWNlKS50aGVuKChyZXN1bHQpID0+IHtcblxuICAgICAgICAgICAgICAgIHJlc29sdmUocmVzdWx0KVxuICAgICAgICAgICAgfSkuY2F0Y2goKGVycm9yKSA9PiB7XG4gICAgICAgICAgICAgICAgcmVqZWN0KGVycm9yKVxuICAgICAgICAgICAgfSlcbiAgICAgICAgfSlcbiAgICB9XG5cbiAgICBzZW5kS2VlcGFsaXZlKHNlc3Npb25JZDpzdHJpbmcpe1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgc2Vzc2lvbiA9IHRoaXMuZ2V0U2Vzc2lvbihzZXNzaW9uSWQpXG4gICAgICAgICAgICBpZihzZXNzaW9uID09PSB1bmRlZmluZWQpe1xuICAgICAgICAgICAgICAgIHJlamVjdCgnU2Vzc2lvbiBub3QgZm91bmQ6ICcrc2Vzc2lvbklkKVxuICAgICAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLmdldEFwaShzZXNzaW9uLnR5cGUpLnNlbmRLZWVwYWxpdmUoc2Vzc2lvbklkKS50aGVuKChyZXN1bHQpID0+IHtcbiAgICAgICAgICAgICAgICByZXNvbHZlKHJlc3VsdClcbiAgICAgICAgICAgIH0pLmNhdGNoKChlcnJvcikgPT4ge1xuICAgICAgICAgICAgICAgIHJlamVjdChlcnJvcilcbiAgICAgICAgICAgIH0pXG4gICAgICAgIH0pXG4gICAgfVxuXG4gICAgbW9uaXRvclNlc3Npb24oc2Vzc2lvbklkKXtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9hcHBsaWNhdGlvbi5sb2coJ1N0cmVhbU1hbmFnZXInLCAnbW9uaXRvclNlc3Npb24oJytzZXNzaW9uSWQrJykgY2hlY2tpbmcgc3RhdGUnKVxuXG4gICAgICAgICAgICBjb25zdCBzZXNzaW9uID0gdGhpcy5nZXRTZXNzaW9uKHNlc3Npb25JZClcbiAgICAgICAgICAgIGlmKHNlc3Npb24gPT09IHVuZGVmaW5lZCl7XG4gICAgICAgICAgICAgICAgdGhpcy5fYXBwbGljYXRpb24ubG9nKCdTdHJlYW1NYW5hZ2VyJywgJ21vbml0b3JTZXNzaW9uKCcrc2Vzc2lvbklkKycpIHNlc3Npb24gbm90IGZvdW5kJylcbiAgICAgICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuZ2V0QXBpKHRoaXMuZ2V0U2Vzc2lvbihzZXNzaW9uSWQpLnR5cGUpLmdldFN0cmVhbVN0YXRlKHNlc3Npb25JZCkudGhlbigocmVzdWx0OmFueSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdTdHJlYW1tYW5hZ2VyIC0gc3RhdGU6JywgcmVzdWx0KVxuXG4gICAgICAgICAgICAgICAgdGhpcy5nZXRTZXNzaW9uKHNlc3Npb25JZCkuc3RhdGUgPSByZXN1bHQuc3RhdGVcblxuICAgICAgICAgICAgICAgIGlmKHJlc3VsdC5zdGF0ZSA9PT0gJ1Byb3Zpc2lvbmVkJyl7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZ2V0U2Vzc2lvbihzZXNzaW9uSWQpLnBsYXllclN0YXRlID0gJ3N0YXJ0ZWQnXG5cbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYocmVzdWx0LnN0YXRlID09PSAnUHJvdmlzaW9uaW5nJyl7XG4gICAgICAgICAgICAgICAgICAgIC8vIExldHMgbG9vcCBhZ2FpblxuICAgICAgICAgICAgICAgICAgICB0aGlzLm1vbml0b3JTZXNzaW9uKHNlc3Npb25JZClcblxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZihyZXN1bHQuc3RhdGUgPT09ICdSZWFkeVRvQ29ubmVjdCcpe1xuICAgICAgICAgICAgICAgICAgICAvLyBEbyBNU0FMIEF1dGhcbiAgICAgICAgICAgICAgICAgICAgLy8gQFRPRE86IFJlZnJlc2ggdG9rZW4gaWYgZXhwaXJlZD9cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fYXBwbGljYXRpb24uX2F1dGhlbnRpY2F0aW9uLl94YWwuZ2V0TXNhbFRva2VuKHRoaXMuX2FwcGxpY2F0aW9uLl9hdXRoZW50aWNhdGlvbi5fdG9rZW5TdG9yZSkudGhlbigobXNhbFRva2VuKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmdldEFwaSh0aGlzLmdldFNlc3Npb24oc2Vzc2lvbklkKS50eXBlKS5zZW5kTVNBTEF1dGgoc2Vzc2lvbklkLCBtc2FsVG9rZW4uZGF0YS5scHQpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubW9uaXRvclNlc3Npb24oc2Vzc2lvbklkKVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB9KS5jYXRjaCgoZXJyb3IpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnTVNBTCBBVVRIIEVycm9yOicsIGVycm9yKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsZXJ0KCdNU0FMIEFVVEggRXJyb3I6JysgZXJyb3IpXG4gICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICB9KS5jYXRjaCgoZXJyb3IpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdNU0FMIEFVVEggRXJyb3I6JywgZXJyb3IpXG4gICAgICAgICAgICAgICAgICAgICAgICBhbGVydCgnTVNBTCBBVVRIIEVycm9yOicrIGVycm9yKVxuICAgICAgICAgICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmKHJlc3VsdC5zdGF0ZSA9PT0gJ1dhaXRpbmdGb3JSZXNvdXJjZXMnKXtcbiAgICAgICAgICAgICAgICAgICAgLy8gRG8gUXVldWUgbG9naWNcbiAgICAgICAgICAgICAgICAgICAgaWYodGhpcy5nZXRTZXNzaW9uKHNlc3Npb25JZCkud2FpdGluZ1RpbWVzID09PSB1bmRlZmluZWQpe1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5nZXRBcGkodGhpcy5nZXRTZXNzaW9uKHNlc3Npb25JZCkudHlwZSkuZ2V0V2FpdGluZ1RpbWVzKHRoaXMuZ2V0U2Vzc2lvbihzZXNzaW9uSWQpLnRhcmdldCkudGhlbigod2FpdGluZ1RpbWVzKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5nZXRTZXNzaW9uKHNlc3Npb25JZCkud2FpdGluZ1RpbWVzID0gd2FpdGluZ1RpbWVzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5nZXRTZXNzaW9uKHNlc3Npb25JZCkucGxheWVyU3RhdGUgPSAncXVldWVkJ1xuXG4gICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICB0aGlzLm1vbml0b3JTZXNzaW9uKHNlc3Npb25JZClcblxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZihyZXN1bHQuc3RhdGUgPT09ICdGYWlsZWQnKXtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5nZXRTZXNzaW9uKHNlc3Npb25JZCkuZXJyb3JEZXRhaWxzID0gcmVzdWx0LmVycm9yRGV0YWlsc1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmdldFNlc3Npb24oc2Vzc2lvbklkKS5wbGF5ZXJTdGF0ZSA9ICdmYWlsZWQnXG5cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ1Vua25vd24gc3RhdGU6JywgcmVzdWx0KVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgfSkuY2F0Y2goKGVycm9yKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ1N0cmVhbW1hbmFnZXIgLSBlcnJvciBjaGVja2luZyBzdGF0ZTonLCBzZXNzaW9uSWQsIGVycm9yKVxuXG4gICAgICAgICAgICAgICAgaWYoZXJyb3Iuc3RhdHVzID09PSA0MDQpe1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9hcHBsaWNhdGlvbi5sb2coJ1N0cmVhbU1hbmFnZXInLCAnU2Vzc2lvbiBub3QgZm91bmQgb24gc2VydmVyLiBSZW1vdmluZyBzZXNzaW9uLi4uJylcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHRoaXMuX3Nlc3Npb25zW3Nlc3Npb25JZF1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm1vbml0b3JTZXNzaW9uKHNlc3Npb25JZClcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KVxuICAgICAgICB9LCAxMDAwKVxuICAgIH1cblxuICAgIGdldEFjdGl2ZVNlc3Npb25zKCl7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICB0aGlzLmdldEFwaSgnY2xvdWQnKS5nZXRBY3RpdmVTZXNzaW9ucygpLnRoZW4oKHJlc3VsdCkgPT4ge1xuXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ0FjdGl2ZSBzZXNzaW9uczonLCByZXN1bHQpXG4gICAgICAgICAgICAgICAgcmVzb2x2ZShyZXN1bHQpXG4gICAgICAgICAgICB9KS5jYXRjaCgoZXJyb3IpID0+IHtcbiAgICAgICAgICAgICAgICByZWplY3QoZXJyb3IpXG4gICAgICAgICAgICB9KVxuICAgICAgICB9KVxuICAgIH1cbn0iLCJpbXBvcnQgQXBwbGljYXRpb24gZnJvbSAnLi4vYXBwbGljYXRpb24nXG5pbXBvcnQgSFRUUCBmcm9tICcuL2h0dHAnXG5pbXBvcnQgU3RvcmUgZnJvbSAnZWxlY3Ryb24tc3RvcmUnXG5pbXBvcnQgYXhpb3MgZnJvbSAnYXhpb3MnXG5pbnRlcmZhY2UgdGl0bGVJbmZvQXJncyB7XG4gICAgUHJvZHVjdFRpdGxlOiBzdHJpbmc7XG4gICAgUHVibGlzaGVyTmFtZTogc3RyaW5nO1xuICAgIFhDbG91ZFRpdGxlSWQ6IHN0cmluZztcbiAgICBJbWFnZV9UaWxlOiBhbnk7XG4gICAgSW1hZ2VfUG9zdGVyOiBhbnk7XG4gICAgU3RyZWFtYWJpbGl0eTogYW55O1xuICAgIENhdGVnb3JpZXM6IGFueTtcbiAgICBMb2NhbGl6ZWRDYXRlZ29yaWVzOiBhbnk7XG4gICAgWENsb3VkT2ZmZXJpbmdzOiBhbnk7XG4gICAgWGJveFRpdGxlSWQ6IHN0cmluZztcbiAgICBDaGlsZFhib3hUaXRsZUlkczogYW55O1xuICAgIFN0b3JlSWQ6IHN0cmluZztcbn1cblxuaW50ZXJmYWNlIEZpbHRlckFyZ3Mge1xuICAgIG5hbWU6IHN0cmluZztcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVGl0bGVNYW5hZ2VyIHtcblxuICAgIF9hcHBsaWNhdGlvbjpBcHBsaWNhdGlvblxuICAgIF9zdG9yZSA9IG5ldyBTdG9yZSgpXG4gICAgX2h0dHA6SFRUUFxuXG4gICAgX3hDbG91ZFRpdGxlcyA9IHt9XG4gICAgX3Byb2R1Y3RJZFF1ZXVlID0gW11cblxuICAgIF94Q2xvdWRSZWNlbnRUaXRsZXMgPSB7fVxuICAgIF94Q2xvdWRSZWNlbnRUaXRsZXNMYXN0VXBkYXRlID0gMFxuXG4gICAgXG4gICAgY29uc3RydWN0b3IoYXBwbGljYXRpb24pe1xuICAgICAgICB0aGlzLl9hcHBsaWNhdGlvbiA9IGFwcGxpY2F0aW9uXG4gICAgICAgIHRoaXMuX2h0dHAgPSBuZXcgSFRUUCh0aGlzLl9hcHBsaWNhdGlvbilcbiAgICB9XG5cbiAgICBnZXRPZmZpY2lhbFRpdGxlcygpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgICAgICAgICAgbGV0IG9mZmljaWFsVGl0bGVzID0gW107XG4gICAgICAgICAgICBheGlvc1xuICAgICAgICAgICAgLmdldCgnaHR0cHM6Ly9jZG4uanNkZWxpdnIubmV0L2doL0dlb2NsZC9YU3RyZWFtaW5nQG1haW4vdGl0bGVzLmpzb24nLCB7XG4gICAgICAgICAgICAgICAgdGltZW91dDogMzAsXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLnRoZW4ocmVzID0+IHtcbiAgICAgICAgICAgICAgICBpZiAocmVzLnN0YXR1cyA9PT0gMjAwKSB7XG4gICAgICAgICAgICAgICAgb2ZmaWNpYWxUaXRsZXMgPSByZXMuZGF0YS5Qcm9kdWN0cztcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnb2ZmaWNpYWxUaXRsZXM6Jywgb2ZmaWNpYWxUaXRsZXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXNvbHZlKG9mZmljaWFsVGl0bGVzKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuY2F0Y2goZSA9PiB7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZShbXSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgZ2V0R2FtZVBhc3NQcm9kdWN0cyh0aXRsZXMpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHByb2R1Y3RJZFF1ZXVlID0gW107XG4gICAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkodGl0bGVzKSkge1xuICAgICAgICAgICAgICAgIHJlc29sdmUoW10pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGl0bGVzLmZvckVhY2godGl0bGUgPT4ge1xuICAgICAgICAgICAgICAgIGlmICh0aXRsZS5kZXRhaWxzICYmIHRpdGxlLmRldGFpbHMucHJvZHVjdElkKSB7XG4gICAgICAgICAgICAgICAgICAgIHByb2R1Y3RJZFF1ZXVlLnB1c2godGl0bGUuZGV0YWlscy5wcm9kdWN0SWQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICB0aGlzLmdldE9mZmljaWFsVGl0bGVzKCkudGhlbigob2ZmaWNpYWxUaXRsZXM6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IG1lcmdlUHJvZHVjdElkcyA9IFtcbiAgICAgICAgICAgICAgICAgICAgLi4ubmV3IFNldChbLi4ucHJvZHVjdElkUXVldWUsIC4uLm9mZmljaWFsVGl0bGVzXSksXG4gICAgICAgICAgICAgICAgXTtcbiAgICBcbiAgICAgICAgICAgICAgICB0aGlzLl9odHRwLnBvc3QoJ2NhdGFsb2cuZ2FtZXBhc3MuY29tJywgJy92My9wcm9kdWN0cz9tYXJrZXQ9VVMmbGFuZ3VhZ2U9ZW4tVVMmaHlkcmF0aW9uPVJlbW90ZUhpZ2hTYXBwaGlyZTAnLCB7IC8vIFJlbW90ZUxvd0phZGUwXG4gICAgICAgICAgICAgICAgICAgICdQcm9kdWN0cyc6IG1lcmdlUHJvZHVjdElkcyxcbiAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICdtcy1jdic6IDAsXG4gICAgICAgICAgICAgICAgICAgICdjYWxsaW5nLWFwcC1uYW1lJzogJ1hib3ggQ2xvdWQgR2FtaW5nIFdlYicsXG4gICAgICAgICAgICAgICAgICAgICdjYWxsaW5nLWFwcC12ZXJzaW9uJzogJzI0LjE3LjYzJyxcbiAgICBcbiAgICAgICAgICAgICAgICB9KS50aGVuKChyZXN1bHQ6YW55KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHByb2R1Y3RzID0gcmVzdWx0LlByb2R1Y3RzO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBtZXJnZWRUaXRsZXMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gcHJvZHVjdHMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1lcmdlZFRpdGxlcy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9kdWN0SWQ6IGtleSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5wcm9kdWN0c1trZXldLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgbWVyZ2VkVGl0bGVzLnNvcnQoKGEsIGIpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICBhLlByb2R1Y3RUaXRsZS5sb2NhbGVDb21wYXJlKGIuUHJvZHVjdFRpdGxlKSxcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShtZXJnZWRUaXRsZXMpO1xuICAgICAgICAgICAgICAgIH0pLmNhdGNoKGUgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnZ2V0R2FtZVBhc3NQcm9kdWN0cyBlcnJvcjonLCBlKTtcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGUpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pXG4gICAgfVxuXG4gICAgZ2V0TmV3VGl0bGVzKCl7XG4gICAgICAgIHJldHVybiB0aGlzLl9odHRwLmdldCgnY2F0YWxvZy5nYW1lcGFzcy5jb20nLCAnL3NpZ2xzL3YyP2lkPWYxM2NmNmI0LTU3ZTYtNDQ1OS04OWRmLTZhZWMxOGNmMDUzOCZtYXJrZXQ9VVMmbGFuZ3VhZ2U9ZW4tVVMnKVxuICAgIH1cbn1cblxuaW50ZXJmYWNlIFRpdGxlRGV0YWlscyB7XG4gICAgdGl0bGVJZDpzdHJpbmc7XG4gICAgZGV0YWlsczoge1xuICAgICAgICBwcm9kdWN0SWQ6c3RyaW5nO1xuICAgICAgICB4Ym94VGl0bGVJZDpudW1iZXI7XG4gICAgICAgIGhhc0VudGl0bGVtZW50OmJvb2xlYW47XG4gICAgICAgIHN1cHBvcnRzSW5BcHBQdXJjaGFzZXM6Ym9vbGVhbjtcbiAgICAgICAgc3VwcG9ydGVkVGFiczogYW55O1xuICAgICAgICBzdXBwb3J0ZWRJbnB1dFR5cGVzOiBhbnk7XG4gICAgICAgIHByb2dyYW1zOiBhbnk7XG4gICAgICAgIHVzZXJQcm9ncmFtczogYW55O1xuICAgICAgICB1c2VyU3Vic2NyaXB0aW9uczogYW55O1xuICAgICAgICBpc0ZyZWVJblN0b3JlOiBib29sZWFuO1xuICAgICAgICBtYXhHYW1lcGxheVRpbWVJblNlY29uZHM6IG51bWJlcjtcbiAgICB9O1xufVxuXG5leHBvcnQgY2xhc3MgVGl0bGUge1xuXG4gICAgdGl0bGVJZFxuICAgIHByb2R1Y3RJZFxuICAgIHhib3hUaXRsZUlkXG4gICAgc3VwcG9ydGVkSW5wdXRUeXBlc1xuICAgIGNhdGFsb2dEZXRhaWxzXG5cbiAgICBjb25zdHJ1Y3Rvcih0aXRsZTpUaXRsZURldGFpbHMpe1xuICAgICAgICB0aGlzLnRpdGxlSWQgPSB0aXRsZS50aXRsZUlkXG4gICAgICAgIHRoaXMucHJvZHVjdElkID0gdGl0bGUuZGV0YWlscy5wcm9kdWN0SWRcbiAgICAgICAgdGhpcy54Ym94VGl0bGVJZCA9IHRpdGxlLmRldGFpbHMueGJveFRpdGxlSWRcbiAgICAgICAgdGhpcy5zdXBwb3J0ZWRJbnB1dFR5cGVzID0gdGl0bGUuZGV0YWlscy5zdXBwb3J0ZWRJbnB1dFR5cGVzXG4gICAgfVxuXG4gICAgc2V0Q2F0YWxvZ0RldGFpbHModGl0bGVJbmZvOnRpdGxlSW5mb0FyZ3Mpe1xuICAgICAgICB0aGlzLmNhdGFsb2dEZXRhaWxzID0gdGl0bGVJbmZvXG4gICAgfVxuXG4gICAgdG9TdHJpbmcoKXtcbiAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHRoaXMpXG4gICAgfVxuXG4gICAgcmVzdG9yZUZyb21DYWNoZShjYWNoZWRPYmope1xuICAgICAgICB0aGlzLmNhdGFsb2dEZXRhaWxzID0gY2FjaGVkT2JqLmNhdGFsb2dEZXRhaWxzXG4gICAgfVxufSIsImltcG9ydCB7IFRva2VuU3RvcmUgfSBmcm9tICcuLi94YWwnXG5pbXBvcnQgU3RvcmUgZnJvbSAnZWxlY3Ryb24tc3RvcmUnXG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEF1dGhUb2tlblN0b3JlIGV4dGVuZHMgVG9rZW5TdG9yZSB7XG5cbiAgICBwcml2YXRlIF9zdG9yZSA9IG5ldyBTdG9yZSgpXG5cbiAgICBsb2FkKCkge1xuICAgICAgICBjb25zdCB0b2tlbnMgPSB0aGlzLl9zdG9yZS5nZXQoJ3VzZXIudG9rZW5zdG9yZScsICd7fScpIGFzIHN0cmluZ1xuICAgICAgICB0aGlzLmxvYWRKc29uKHRva2VucylcblxuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cblxuICAgIHNhdmUoKSB7XG4gICAgICAgIGNvbnN0IGRhdGEgPSBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgICB1c2VyVG9rZW46IHRoaXMuX3VzZXJUb2tlbj8uZGF0YSxcbiAgICAgICAgICAgIHNpc3VUb2tlbjogdGhpcy5fc2lzdVRva2VuPy5kYXRhLFxuICAgICAgICAgICAgand0S2V5czogdGhpcy5fand0S2V5cyxcbiAgICAgICAgfSlcblxuICAgICAgICB0aGlzLl9zdG9yZS5zZXQoJ3VzZXIudG9rZW5zdG9yZScsIGRhdGEpXG4gICAgfVxuXG4gICAgY2xlYXIoKSB7XG4gICAgICAgIHRoaXMuX3N0b3JlLmRlbGV0ZSgndXNlci50b2tlbnN0b3JlJylcbiAgICAgICAgdGhpcy5fdXNlclRva2VuID0gdW5kZWZpbmVkXG4gICAgICAgIHRoaXMuX3Npc3VUb2tlbiA9IHVuZGVmaW5lZFxuICAgICAgICB0aGlzLl9qd3RLZXlzID0gdW5kZWZpbmVkXG4gICAgfVxufSIsImltcG9ydCBheGlvcyBmcm9tICdheGlvcydcbmltcG9ydCBlbGVjdHJvbiBmcm9tICdlbGVjdHJvbidcbmltcG9ydCB7IGNvbXBhcmUgfSBmcm9tICdjb21wYXJlLXZlcnNpb25zJ1xuaW1wb3J0IGdoIGZyb20gJ2dpdGh1Yi11cmwtdG8tb2JqZWN0J1xuaW1wb3J0IHBrZyBmcm9tICcuLi8uLi9wYWNrYWdlLmpzb24nXG5cbi8vIEJhc2UgY29kZSBiZWxvdyBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9hbmt1cms5MS9lbGVjdHJvbi11cGRhdGUtbm90aWZpZXIuIENyZWRpdHMgdG8gQGFua3VyazkxLlxuXG5pbnRlcmZhY2UgT3B0aW9ucyB7XG4gIHJlcG9zaXRvcnk/OiBzdHJpbmc7XG4gIHRva2VuPzogc3RyaW5nO1xuICBkZWJ1Zz86IGJvb2xlYW47XG4gIHNpbGVudD86IGJvb2xlYW47XG4gIHByZXJlbGVhc2VzPzogYm9vbGVhbjtcbn1cblxuaW50ZXJmYWNlIEdpdGh1YlJlbGVhc2VPYmplY3Qge1xuICB0YWdfbmFtZTogc3RyaW5nO1xuICBib2R5OiBzdHJpbmc7XG4gIGh0bWxfdXJsOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBjb25zdCBkZWZhdWx0T3B0aW9uczogT3B0aW9ucyA9IHtcbiAgICBkZWJ1ZzogZmFsc2UsIC8vIGZvcmNlIHJ1biBpbiBkZXZlbG9wbWVudFxuICAgIHNpbGVudDogdHJ1ZSxcbiAgICBwcmVyZWxlYXNlczogZmFsc2UsXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRVcGRhdGVOb3RpZmljYXRpb24ob3B0aW9uczogT3B0aW9ucyA9IGRlZmF1bHRPcHRpb25zLCBsb2dnZXIpIHtcbiAgICBjb25zdCB3aXRoRGVmYXVsdHMgPSBPYmplY3QuYXNzaWduKGRlZmF1bHRPcHRpb25zLCBvcHRpb25zKVxuXG4gICAgaWYgKGVsZWN0cm9uLmFwcC5pc1JlYWR5KCkpIHtcbiAgICAgICAgY2hlY2tGb3JVcGRhdGVzKHdpdGhEZWZhdWx0cywgbG9nZ2VyKVxuICAgIH0gZWxzZSB7XG4gICAgICAgIGVsZWN0cm9uLmFwcC5vbigncmVhZHknLCAoKSA9PiB7XG4gICAgICAgICAgICBjaGVja0ZvclVwZGF0ZXMod2l0aERlZmF1bHRzLCBsb2dnZXIpXG4gICAgICAgIH0pXG4gICAgfVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY2hlY2tGb3JVcGRhdGVzKHtyZXBvc2l0b3J5LCB0b2tlbiwgZGVidWcsIHNpbGVudCwgcHJlcmVsZWFzZXN9OiBPcHRpb25zID0gZGVmYXVsdE9wdGlvbnMsIGxvZ2dlcikge1xuICAgIGxvZ2dlci5sb2coJ3VwZGF0ZXInLCBfX2ZpbGVuYW1lKydbY2hlY2tGb3JVcGRhdGVzKCldIFJ1bm5pbmcgdXBkYXRlci4uLicsIGVsZWN0cm9uLmFwcC5pc1BhY2thZ2VkLCBkZWJ1ZylcbiAgICBpZiAoIWVsZWN0cm9uLmFwcC5pc1BhY2thZ2VkICYmICFkZWJ1Zyl7XG4gICAgICAgIGxvZ2dlci5sb2coJ3VwZGF0ZXInLCBfX2ZpbGVuYW1lKydbY2hlY2tGb3JVcGRhdGVzKCldIE5vdCBjaGVja2luZyBmb3IgdXBkYXRlcyBiZWNhdXNlIGFwcCBpcyBub3QgcGFja2FnZWQuJylcbiAgICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgaWYgKCFyZXBvc2l0b3J5KSB7XG4gICAgLy8gY29uc3QgcGtnID0gcmVxdWlyZShwYXRoLmpvaW4oZWxlY3Ryb24uYXBwLmdldEFwcFBhdGgoKSwgJ3BhY2thZ2UuanNvbicpKVxuICAgICAgICBjb25zdCBnaE9iaiA9IGdoKHBrZy5yZXBvc2l0b3J5KVxuXG4gICAgICAgIGlmICghZ2hPYmopIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignUmVwb3NpdG9yeSBVUkwgbm90IGZvdW5kIGluIHBhY2thZ2UuanNvbiBmaWxlLicpXG4gICAgICAgIH1cblxuICAgICAgICByZXBvc2l0b3J5ID0gZ2hPYmoudXNlciArICcvJyArIGdoT2JqLnJlcG9cbiAgICB9XG5cbiAgICBsZXQgbGF0ZXN0UmVsZWFzZTogbnVsbCB8IEdpdGh1YlJlbGVhc2VPYmplY3QgPSBudWxsXG5cbiAgICB0cnkge1xuICAgICAgICBsb2dnZXIubG9nKCd1cGRhdGVyJywgX19maWxlbmFtZSsnW2NoZWNrRm9yVXBkYXRlcygpXSBDaGVja2luZyBmb3IgdXBkYXRlcyBvbiBHaXRIdWI6JywgYGh0dHBzOi8vYXBpLmdpdGh1Yi5jb20vcmVwb3MvJHtyZXBvc2l0b3J5fS9yZWxlYXNlc2ApXG4gICAgICAgIGNvbnN0IHtkYXRhOiByZWxlYXNlc30gPSBhd2FpdCBheGlvcy5nZXQoYGh0dHBzOi8vYXBpLmdpdGh1Yi5jb20vcmVwb3MvJHtyZXBvc2l0b3J5fS9yZWxlYXNlc2AsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgaGVhZGVyczogdG9rZW4gPyB7YXV0aG9yaXphdGlvbjogYHRva2VuICR7dG9rZW59YH0gOiB7fSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIClcblxuICAgICAgICBmb3IoY29uc3QgcmVsZWFzZSBpbiByZWxlYXNlcyl7XG4gICAgICAgICAgICBpZihyZWxlYXNlc1tyZWxlYXNlXS5wcmVyZWxlYXNlID09PSBwcmVyZWxlYXNlcyl7XG4gICAgICAgICAgICAgICAgbGF0ZXN0UmVsZWFzZSA9IHJlbGVhc2VzW3JlbGVhc2VdIGFzIEdpdGh1YlJlbGVhc2VPYmplY3RcbiAgICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcilcbiAgICAgICAgbG9nZ2VyLmxvZygndXBkYXRlcicsIF9fZmlsZW5hbWUrJ1tjaGVja0ZvclVwZGF0ZXMoKV0gRXJyb3Igd2hpbGUgY2hlY2tpbmcgZm9yIHVwZGF0ZXM6JywgZXJyb3IpXG5cbiAgICAgICAgaWYgKCFzaWxlbnQpIHtcbiAgICAgICAgICAgIHNob3dEaWFsb2coJ1VuYWJsZSB0byBjaGVjayBmb3IgdXBkYXRlcyBhdCB0aGlzIG1vbWVudC4gVHJ5IGFnYWluLicsICdlcnJvcicpXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIWxhdGVzdFJlbGVhc2UpIHJldHVyblxuXG4gICAgaWYgKGNvbXBhcmUobGF0ZXN0UmVsZWFzZS50YWdfbmFtZSwgZWxlY3Ryb24uYXBwLmdldFZlcnNpb24oKSwgJz4nKSkge1xuICAgICAgICBsb2dnZXIubG9nKCd1cGRhdGVyJywgX19maWxlbmFtZSsnW2NoZWNrRm9yVXBkYXRlcygpXSBOZXcgdmVyc2lvbiBmb3VuZDonLCBsYXRlc3RSZWxlYXNlLnRhZ19uYW1lKVxuICAgICAgICBzaG93VXBkYXRlRGlhbG9nKGxhdGVzdFJlbGVhc2UpXG4gICAgfSBlbHNlIHtcbiAgICAgICAgbG9nZ2VyLmxvZygndXBkYXRlcicsIF9fZmlsZW5hbWUrJ1tjaGVja0ZvclVwZGF0ZXMoKV0gQXBwbGljYXRpb24gaXMgbmV3ZXN0IHZlcnNpb24uIEN1cnJlbnQgdmVyc2lvbjonLCBlbGVjdHJvbi5hcHAuZ2V0VmVyc2lvbigpLCAnTmV3ZXN0IHZlcnNpb246JywgbGF0ZXN0UmVsZWFzZS50YWdfbmFtZSApXG4gICAgICAgIGlmICghc2lsZW50KSB7XG4gICAgICAgICAgICBzaG93RGlhbG9nKGBZb3UgYXJlIGFscmVhZHkgcnVubmluZyB0aGUgbGF0ZXN0IHZlcnNpb24uIEN1cnJlbnQgdmVyc2lvbjogJHtlbGVjdHJvbi5hcHAuZ2V0VmVyc2lvbigpfS4gTmV3ZXN0IHZlcnNpb246ICR7bGF0ZXN0UmVsZWFzZS50YWdfbmFtZX1gKVxuICAgICAgICB9XG4gICAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gc2hvd1VwZGF0ZURpYWxvZyhyZWxlYXNlOiBHaXRodWJSZWxlYXNlT2JqZWN0KSB7XG4gICAgZWxlY3Ryb24uZGlhbG9nLnNob3dNZXNzYWdlQm94KFxuICAgICAgICB7XG4gICAgICAgICAgICB0aXRsZTogZWxlY3Ryb24uYXBwLmdldE5hbWUoKSxcbiAgICAgICAgICAgIHR5cGU6ICdpbmZvJyxcbiAgICAgICAgICAgIG1lc3NhZ2U6ICdOZXcgcmVsZWFzZSBhdmFpbGFibGUnLFxuICAgICAgICAgICAgZGV0YWlsOiBgSW5zdGFsbGVkIFZlcnNpb246ICR7ZWxlY3Ryb24uYXBwLmdldFZlcnNpb24oKX1cXG5MYXRlc3QgVmVyc2lvbjogJHtyZWxlYXNlLnRhZ19uYW1lfVxcblxcbiR7cmVsZWFzZS5ib2R5fWAudHJpbSgpLFxuICAgICAgICAgICAgYnV0dG9uczogWydEb3dubG9hZCcsICdMYXRlciddLFxuICAgICAgICAgICAgZGVmYXVsdElkOiAwLFxuICAgICAgICAgICAgY2FuY2VsSWQ6IDEsXG4gICAgICAgIH0sXG4gICAgKVxuICAgICAgICAudGhlbigoe3Jlc3BvbnNlfSkgPT4ge1xuICAgICAgICAgICAgaWYgKHJlc3BvbnNlID09PSAwKSB7XG4gICAgICAgICAgICAgICAgc2V0SW1tZWRpYXRlKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgZWxlY3Ryb24uc2hlbGwub3BlbkV4dGVybmFsKHJlbGVhc2UuaHRtbF91cmwpXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgICAgLmNhdGNoKChlcnJvcikgPT4ge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGVycm9yKVxuICAgICAgICB9KVxufVxuXG5jb25zdCBzaG93RGlhbG9nID0gKGRldGFpbDogc3RyaW5nLCB0eXBlOiBzdHJpbmcgPSAnaW5mbycpID0+IHtcbiAgICBlbGVjdHJvbi5kaWFsb2cuc2hvd01lc3NhZ2VCb3goXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRpdGxlOiBlbGVjdHJvbi5hcHAuZ2V0TmFtZSgpLFxuICAgICAgICAgICAgbWVzc2FnZTogJ1VwZGF0ZSBjaGVja2VyJyxcbiAgICAgICAgICAgIGJ1dHRvbnM6IFsnQ2xvc2UnXSxcbiAgICAgICAgICAgIGRlZmF1bHRJZDogMCxcbiAgICAgICAgICAgIGNhbmNlbElkOiAwLFxuICAgICAgICAgICAgdHlwZSxcbiAgICAgICAgICAgIGRldGFpbCxcbiAgICAgICAgfSxcbiAgICApXG59IiwiaW1wb3J0IEFwcGxpY2F0aW9uIGZyb20gJy4uL2FwcGxpY2F0aW9uJ1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyB4Ym94V29ya2VyIHtcblxuICAgIF9hcHBsaWNhdGlvbjpBcHBsaWNhdGlvblxuICAgIFxuICAgIF9mcmllbmRzID0ge31cbiAgICBfb25saW5lRnJpZW5kcyA9IHt9XG5cbiAgICBjb25zdHJ1Y3RvcihhcHBsaWNhdGlvbil7XG4gICAgICAgIHRoaXMuX2FwcGxpY2F0aW9uID0gYXBwbGljYXRpb25cblxuICAgICAgICAvLyBzZXRJbnRlcnZhbCgoKSA9PiB7XG4gICAgICAgIC8vICAgICB0aGlzLmludGVydmFsRnJpZW5kcygpIFxuICAgICAgICAvLyB9LCAzMCAqIDEwMDApIC8vIEFwaSBpcyBsaW1pdGVkIHRvIDMwIHJlcXVlc3RzIHBlciAzMDAgc2Vjb25kcy4gKDMwMC8zMCA9IDEwIHNlYylcbiAgICAgICAgXG4gICAgICAgIC8vIHRoaXMuaW50ZXJ2YWxGcmllbmRzKClcbiAgICB9XG5cbiAgICBpbnRlcnZhbEZyaWVuZHMoKXtcbiAgICAgICAgLy8gY29uc29sZS5sb2coJ3hib3ggd29ya2VyIGxvb3AgcnVuJylcblxuICAgICAgICB0aGlzLnVwZGF0ZUZyaWVuZHMoKS50aGVuKChmcmllbmRzOmFueSkgPT4ge1xuICAgICAgICAgICAgLy8gR2V0IGFsbCBmcmllbmRzXG4gICAgICAgICAgICAvLyBjb25zb2xlLmxvZygneGJveFdvcmtlciAtIFVwZGF0ZWQgZnJpZW5kcyBzdWNjZXNzZnVsbHknKVxuXG4gICAgICAgICAgICAvLyBTZW5kIG92ZXIgb25saW5lIGZyaWVuZHNcbiAgICAgICAgICAgIGNvbnN0IG9ubGluZUZyaWVuZHMgPSBbXVxuICAgICAgICAgICAgZm9yKGNvbnN0IGZyaWVuZCBpbiBmcmllbmRzKXtcbiAgICAgICAgICAgICAgICBpZihmcmllbmRzW2ZyaWVuZF0ucHJlc2VuY2VTdGF0ZSAhPT0gJ09mZmxpbmUnKXtcbiAgICAgICAgICAgICAgICAgICAgb25saW5lRnJpZW5kcy5wdXNoKGZyaWVuZHNbZnJpZW5kXSlcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuX29ubGluZUZyaWVuZHMgPSBvbmxpbmVGcmllbmRzXG4gICAgICAgIH0pLmNhdGNoKChlcnJvcikgPT4ge1xuICAgICAgICAgICAgY29uc29sZS5sb2coJ3hib3hXb3JrZXIgLSBFcnJvciB1cGRhdGluZyBmcmllbmRzOicsIGVycm9yKVxuICAgICAgICB9KVxuXG4gICAgfVxuXG4gICAgdXBkYXRlRnJpZW5kcygpe1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fYXBwbGljYXRpb24uX3dlYkFwaS5nZXRQcm92aWRlcigncGVvcGxlJykuZ2V0RnJpZW5kcygpLnRoZW4oKGZyaWVuZHMpID0+IHtcbiAgICAgICAgICAgICAgICBmb3IoY29uc3QgZnJpZW5kIGluIGZyaWVuZHMucGVvcGxlKXtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZnJpZW5kc1tmcmllbmRzLnBlb3BsZVtmcmllbmRdLnh1aWRdID0gZnJpZW5kcy5wZW9wbGVbZnJpZW5kXVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJlc29sdmUodGhpcy5fZnJpZW5kcylcbiAgICAgICAgICAgIH0pLmNhdGNoKChlcnJvcikgPT4ge1xuICAgICAgICAgICAgICAgIHJlamVjdChlcnJvcilcbiAgICAgICAgICAgIH0pXG4gICAgICAgIH0pXG4gICAgfVxuXG59IiwiaW1wb3J0IGh0dHBzIGZyb20gXCJodHRwc1wiO1xuaW1wb3J0IEFwcGxpY2F0aW9uIGZyb20gXCIuLi9hcHBsaWNhdGlvblwiO1xuaW1wb3J0IHsgQWRkcmVzczYgfSBmcm9tIFwiaXAtYWRkcmVzc1wiO1xuaW1wb3J0IHsgZGVmYXVsdFNldHRpbmdzIH0gZnJvbSBcIi4uLy4uL3JlbmRlcmVyL2NvbnRleHQvdXNlckNvbnRleHQuZGVmYXVsdHNcIjtcblxuZXhwb3J0IGludGVyZmFjZSBwbGF5UmVzdWx0IHtcbiAgc2Vzc2lvblBhdGg6IHN0cmluZztcbiAgc2Vzc2lvbklkPzogc3RyaW5nO1xuICBzdGF0ZT86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBleGNoYW5nZVJlc3VsdCB7XG4gIGV4Y2hhbmdlUmVzcG9uc2U6IHN0cmluZztcbiAgZXJyb3JEZXRhaWxzOiB7XG4gICAgY29kZTogYW55O1xuICAgIG1lc3NhZ2U6IGFueTtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgeENsb3VkQXBpIHtcbiAgX2FwcGxpY2F0aW9uO1xuXG4gIF9ob3N0OiBzdHJpbmc7XG4gIF90b2tlbjogc3RyaW5nO1xuICBfdHlwZTogXCJob21lXCIgfCBcImNsb3VkXCI7XG5cbiAgX3Nlc3Npb25QYXRoOiBzdHJpbmc7XG5cbiAgX2V4Y2hhbmdlQ291bnRlciA9IDA7XG4gIF9leGNoYW5nZVVybCA9IFwiXCI7XG4gIF9jdXJyZW50R2FtZSA9IFwiXCI7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgYXBwbGljYXRpb246IEFwcGxpY2F0aW9uLFxuICAgIGhvc3Q6IHN0cmluZyxcbiAgICB0b2tlbjogc3RyaW5nLFxuICAgIHR5cGU6IFwiaG9tZVwiIHwgXCJjbG91ZFwiID0gXCJob21lXCJcbiAgKSB7XG4gICAgdGhpcy5fYXBwbGljYXRpb24gPSBhcHBsaWNhdGlvbjtcbiAgICB0aGlzLl9ob3N0ID0gaG9zdDtcbiAgICB0aGlzLl90b2tlbiA9IHRva2VuO1xuICAgIHRoaXMuX3R5cGUgPSB0eXBlO1xuICB9XG5cbiAgZ2V0KHVybDogc3RyaW5nLCBtZXRob2QgPSBcIkdFVFwiKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGxldCByZXNwb25zZURhdGEgPSBcIlwiO1xuXG4gICAgICBjb25zdCByZXEgPSBodHRwcy5yZXF1ZXN0KFxuICAgICAgICB7XG4gICAgICAgICAgaG9zdDogdGhpcy5faG9zdCxcbiAgICAgICAgICBwYXRoOiB1cmwsXG4gICAgICAgICAgbWV0aG9kOiBtZXRob2QsXG4gICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgXCJDb250ZW50LVR5cGVcIjogXCJhcHBsaWNhdGlvbi9qc29uXCIsXG4gICAgICAgICAgICBBdXRob3JpemF0aW9uOiBcIkJlYXJlciBcIiArIHRoaXMuX3Rva2VuLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgICAgcmVzcG9uc2Uub24oXCJkYXRhXCIsIChkYXRhOiBhbnkpID0+IHtcbiAgICAgICAgICAgIHJlc3BvbnNlRGF0YSArPSBkYXRhO1xuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgcmVzcG9uc2Uub24oXCJlbmRcIiwgKCkgPT4ge1xuICAgICAgICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1c0NvZGUgPj0gMjAwICYmIHJlc3BvbnNlLnN0YXR1c0NvZGUgPD0gMjk5KSB7XG4gICAgICAgICAgICAgIHRoaXMuX2FwcGxpY2F0aW9uLmxvZyhcbiAgICAgICAgICAgICAgICBcInhDbG91ZEFwaVwiLFxuICAgICAgICAgICAgICAgIFwiaG9zdDpcIiArXG4gICAgICAgICAgICAgICAgICB0aGlzLl9ob3N0ICtcbiAgICAgICAgICAgICAgICAgIFwiIGdldChcIiArXG4gICAgICAgICAgICAgICAgICB1cmwgK1xuICAgICAgICAgICAgICAgICAgXCIsIFwiICtcbiAgICAgICAgICAgICAgICAgIG1ldGhvZCArXG4gICAgICAgICAgICAgICAgICBcIikgcmVzb2x2ZTpcIixcbiAgICAgICAgICAgICAgICByZXNwb25zZS5zdGF0dXNDb2RlXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIGxldCByZXR1cm5EYXRhID0gcmVzcG9uc2VEYXRhO1xuICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHJldHVybkRhdGEgPSBKU09OLnBhcnNlKHJlc3BvbnNlRGF0YSk7XG4gICAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgLy8gRGF0YSBpcyBub3QgSlNPTi4uXG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzQ29kZSA9PT0gMjA0KSB7XG4gICAgICAgICAgICAgICAgLy8gV2UgaGF2ZSB0byByZXRyeS4uXG4gICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICB0aGlzLmdldCh1cmwsIG1ldGhvZClcbiAgICAgICAgICAgICAgICAgICAgLnRoZW4oKHJlc3VsdCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUocmVzdWx0KTtcbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgLmNhdGNoKChlcnJvcikgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0sIDc1MCk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZShyZXR1cm5EYXRhKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdGhpcy5fYXBwbGljYXRpb24ubG9nKFxuICAgICAgICAgICAgICAgIFwieENsb3VkQXBpXCIsXG4gICAgICAgICAgICAgICAgXCJnZXQoXCIgKyB1cmwgKyBcIikgcmVqZWN0OlwiLFxuICAgICAgICAgICAgICAgIHJlc3BvbnNlLnN0YXR1c0NvZGVcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgcmVqZWN0KHtcbiAgICAgICAgICAgICAgICB1cmw6IHVybCxcbiAgICAgICAgICAgICAgICBzdGF0dXM6IHJlc3BvbnNlLnN0YXR1c0NvZGUsXG4gICAgICAgICAgICAgICAgYm9keTogcmVzcG9uc2VEYXRhLFxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgKTtcblxuICAgICAgcmVxLm9uKFwiZXJyb3JcIiwgKGVycm9yKSA9PiB7XG4gICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICB9KTtcbiAgICAgIHJlcS5lbmQoKTtcbiAgICB9KTtcbiAgfVxuXG4gIHBvc3QodXJsOiBzdHJpbmcsIHBvc3REYXRhID0ge30sIGhlYWRlcnMgPSB7fSkge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBsZXQgcmVzcG9uc2VEYXRhID0gXCJcIjtcbiAgICAgIGNvbnN0IG1lcmdlZEhlYWRlcnMgPSBPYmplY3QuYXNzaWduKFxuICAgICAgICB7fSxcbiAgICAgICAge1xuICAgICAgICAgIFwiQ29udGVudC1UeXBlXCI6IFwiYXBwbGljYXRpb24vanNvblwiLFxuICAgICAgICAgIEF1dGhvcml6YXRpb246IFwiQmVhcmVyIFwiICsgdGhpcy5fdG9rZW4sXG4gICAgICAgIH0sXG4gICAgICAgIGhlYWRlcnNcbiAgICAgICk7XG5cbiAgICAgIGNvbnN0IHJlcSA9IGh0dHBzLnJlcXVlc3QoXG4gICAgICAgIHtcbiAgICAgICAgICBob3N0OiB0aGlzLl9ob3N0LFxuICAgICAgICAgIHBhdGg6IHVybCxcbiAgICAgICAgICBtZXRob2Q6IFwiUE9TVFwiLFxuICAgICAgICAgIGhlYWRlcnM6IG1lcmdlZEhlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgICAgIChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgICAgcmVzcG9uc2Uub24oXCJkYXRhXCIsIChkYXRhOiBhbnkpID0+IHtcbiAgICAgICAgICAgIHJlc3BvbnNlRGF0YSArPSBkYXRhO1xuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgcmVzcG9uc2Uub24oXCJlbmRcIiwgKCkgPT4ge1xuICAgICAgICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1c0NvZGUgPj0gMjAwICYmIHJlc3BvbnNlLnN0YXR1c0NvZGUgPD0gMjk5KSB7XG4gICAgICAgICAgICAgIHRoaXMuX2FwcGxpY2F0aW9uLmxvZyhcbiAgICAgICAgICAgICAgICBcInhDbG91ZEFwaVwiLFxuICAgICAgICAgICAgICAgIFwicG9zdChcIiArIHVybCArIFwiKSByZXNvbHZlOlwiLFxuICAgICAgICAgICAgICAgIHJlc3BvbnNlLnN0YXR1c0NvZGUsXG4gICAgICAgICAgICAgICAgcmVzcG9uc2VEYXRhXG4gICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgbGV0IHJldHVybkRhdGEgPSByZXNwb25zZURhdGE7XG4gICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuRGF0YSA9IEpTT04ucGFyc2UocmVzcG9uc2VEYXRhKTtcbiAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAvLyBEYXRhIGlzIG5vdCBKU09OLi5cbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIHJlc29sdmUocmV0dXJuRGF0YSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB0aGlzLl9hcHBsaWNhdGlvbi5sb2coXG4gICAgICAgICAgICAgICAgXCJ4Q2xvdWRBcGlcIixcbiAgICAgICAgICAgICAgICBcInBvc3QoXCIgKyB1cmwgKyBcIikgcmVqZWN0OlwiLFxuICAgICAgICAgICAgICAgIHJlc3BvbnNlLnN0YXR1c0NvZGVcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgcmVqZWN0KHtcbiAgICAgICAgICAgICAgICB1cmw6IHVybCxcbiAgICAgICAgICAgICAgICBzdGF0dXM6IHJlc3BvbnNlLnN0YXR1c0NvZGUsXG4gICAgICAgICAgICAgICAgYm9keTogcmVzcG9uc2VEYXRhLFxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgKTtcblxuICAgICAgcmVxLm9uKFwiZXJyb3JcIiwgKGVycm9yKSA9PiB7XG4gICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICB9KTtcblxuICAgICAgcmVxLndyaXRlKEpTT04uc3RyaW5naWZ5KHBvc3REYXRhKSk7XG5cbiAgICAgIHJlcS5lbmQoKTtcbiAgICB9KTtcbiAgfVxuXG4gIGdldFdhaXRpbmdUaW1lcyh0aXRsZUlkKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0KFwiL3YxL3dhaXR0aW1lL1wiICsgdGl0bGVJZCk7XG4gIH1cblxuICBnZXRUaXRsZXMoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0KFwiL3YyL3RpdGxlc1wiKTtcbiAgfVxuXG4gIGdldFJlY2VudFRpdGxlcygpIHtcbiAgICByZXR1cm4gdGhpcy5nZXQoXCIvdjIvdGl0bGVzL21ydT9tcj0yNVwiKTtcbiAgfVxuXG4gIHN0b3BTdHJlYW0oc2Vzc2lvbklkKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0KFwiL3Y1L3Nlc3Npb25zL1wiICsgdGhpcy5fdHlwZSArIFwiL1wiICsgc2Vzc2lvbklkLCBcIkRFTEVURVwiKTtcbiAgfVxuXG4gIHN0YXJ0U3RyZWFtKHRhcmdldDogc3RyaW5nKSB7XG4gICAgY29uc3Qgc2V0dGluZ3M6IGFueSA9IHRoaXMuX2FwcGxpY2F0aW9uLl9zdG9yZS5nZXQoXG4gICAgICBcInNldHRpbmdzXCIsXG4gICAgICBkZWZhdWx0U2V0dGluZ3NcbiAgICApO1xuICAgIGNvbnN0IGRldmljZUluZm8gPSBKU09OLnN0cmluZ2lmeSh7XG4gICAgICBhcHBJbmZvOiB7XG4gICAgICAgIGVudjoge1xuICAgICAgICAgIGNsaWVudEFwcElkOiBcInd3dy54Ym94LmNvbVwiLFxuICAgICAgICAgIGNsaWVudEFwcFR5cGU6IFwiYnJvd3NlclwiLFxuICAgICAgICAgIGNsaWVudEFwcFZlcnNpb246IFwiMjEuMS45OFwiLFxuICAgICAgICAgIGNsaWVudFNka1ZlcnNpb246IFwiOC41LjNcIixcbiAgICAgICAgICBodHRwRW52aXJvbm1lbnQ6IFwicHJvZFwiLFxuICAgICAgICAgIHNka0luc3RhbGxJZDogXCJcIixcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICBkZXY6IHtcbiAgICAgICAgaHc6IHtcbiAgICAgICAgICBtYWtlOiBcIk1pY3Jvc29mdFwiLFxuICAgICAgICAgIG1vZGVsOiBcIlN1cmZhY2UgUHJvXCIsXG4gICAgICAgICAgc2RrdHlwZTogXCJ3ZWJcIixcbiAgICAgICAgfSxcbiAgICAgICAgb3M6IHtcbiAgICAgICAgICBuYW1lOiBzZXR0aW5ncy5yZXNvbHV0aW9uID09IDEwODAgPyBcIndpbmRvd3NcIiA6IFwiYW5kcm9pZFwiLFxuICAgICAgICAgIHZlcjogXCIyMjYzMS4yNzE1XCIsXG4gICAgICAgICAgcGxhdGZvcm06IFwiZGVza3RvcFwiLFxuICAgICAgICB9LFxuICAgICAgICBkaXNwbGF5SW5mbzoge1xuICAgICAgICAgIGRpbWVuc2lvbnM6IHtcbiAgICAgICAgICAgIHdpZHRoSW5QaXhlbHM6IDE5MjAsXG4gICAgICAgICAgICBoZWlnaHRJblBpeGVsczogMTA4MCxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHBpeGVsRGVuc2l0eToge1xuICAgICAgICAgICAgZHBpWDogMixcbiAgICAgICAgICAgIGRwaVk6IDIsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICBjb25zdCBwb3N0RGF0YSA9IHtcbiAgICAgIHRpdGxlSWQ6IHRoaXMuX3R5cGUgPT09IFwiY2xvdWRcIiA/IHRhcmdldCA6IFwiXCIsXG4gICAgICBzeXN0ZW1VcGRhdGVHcm91cDogXCJcIixcbiAgICAgIGNsaWVudFNlc3Npb25JZDogXCJcIixcbiAgICAgIHNldHRpbmdzOiB7XG4gICAgICAgIG5hbm9WZXJzaW9uOiBcIlYzO1dlYnJ0Y1RyYW5zcG9ydC5kbGxcIixcbiAgICAgICAgZW5hYmxlVGV4dFRvU3BlZWNoOiBmYWxzZSxcbiAgICAgICAgaGlnaENvbnRyYXN0OiAwLFxuICAgICAgICBsb2NhbGU6IHNldHRpbmdzLnByZWZlcnJlZF9nYW1lX2xhbmd1YWdlID8gc2V0dGluZ3MucHJlZmVycmVkX2dhbWVfbGFuZ3VhZ2UgOiAnZW4tVVMnLFxuICAgICAgICB1c2VJY2VDb25uZWN0aW9uOiBmYWxzZSxcbiAgICAgICAgdGltZXpvbmVPZmZzZXRNaW51dGVzOiAxMjAsXG4gICAgICAgIHNka1R5cGU6IFwid2ViXCIsXG4gICAgICAgIC8vIEZvciB4Q2xvdWQgc3RyZWFtaW5nXG4gICAgICAgIG9zTmFtZTogc2V0dGluZ3MucmVzb2x1dGlvbiA9PSAxMDgwID8gXCJ3aW5kb3dzXCIgOiBcImFuZHJvaWRcIixcbiAgICAgIH0sXG4gICAgICBzZXJ2ZXJJZDogdGhpcy5fdHlwZSA9PT0gXCJob21lXCIgPyB0YXJnZXQgOiBcIlwiLFxuICAgICAgZmFsbGJhY2tSZWdpb25OYW1lczogW10sXG4gICAgfTtcblxuICAgIHJldHVybiB0aGlzLnBvc3QoXCIvdjUvc2Vzc2lvbnMvXCIgKyB0aGlzLl90eXBlICsgXCIvcGxheVwiLCBwb3N0RGF0YSwge1xuICAgICAgXCJYLU1TLURldmljZS1JbmZvXCI6IGRldmljZUluZm8sXG4gICAgfSk7XG4gIH1cblxuICBnZXRTdHJlYW1TdGF0ZShzZXNzaW9uSWQ6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmdldChcIi92NS9zZXNzaW9ucy9cIiArIHRoaXMuX3R5cGUgKyBcIi9cIiArIHNlc3Npb25JZCArIFwiL3N0YXRlXCIpO1xuICB9XG5cbiAgc2VuZFNkcChzZXNzaW9uSWQ6IHN0cmluZywgc2RwOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgY29uc3QgcG9zdERhdGEgPSB7XG4gICAgICAgIG1lc3NhZ2VUeXBlOiBcIm9mZmVyXCIsXG4gICAgICAgIHNkcDogc2RwLFxuICAgICAgICBjb25maWd1cmF0aW9uOiB7XG4gICAgICAgICAgY2hhdENvbmZpZ3VyYXRpb246IHtcbiAgICAgICAgICAgIGJ5dGVzUGVyU2FtcGxlOiAyLFxuICAgICAgICAgICAgZXhwZWN0ZWRDbGlwRHVyYXRpb25NczogMjAsXG4gICAgICAgICAgICBmb3JtYXQ6IHtcbiAgICAgICAgICAgICAgY29kZWM6IFwib3B1c1wiLFxuICAgICAgICAgICAgICBjb250YWluZXI6IFwid2VibVwiLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG51bUNoYW5uZWxzOiAxLFxuICAgICAgICAgICAgc2FtcGxlRnJlcXVlbmN5SHo6IDI0MDAwLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgY2hhdDoge1xuICAgICAgICAgICAgbWluVmVyc2lvbjogMSxcbiAgICAgICAgICAgIG1heFZlcnNpb246IDEsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBjb250cm9sOiB7XG4gICAgICAgICAgICBtaW5WZXJzaW9uOiAxLFxuICAgICAgICAgICAgbWF4VmVyc2lvbjogMyxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGlucHV0OiB7XG4gICAgICAgICAgICBtaW5WZXJzaW9uOiAxLFxuICAgICAgICAgICAgbWF4VmVyc2lvbjogOCxcbiAgICAgICAgICB9LFxuICAgICAgICAgIG1lc3NhZ2U6IHtcbiAgICAgICAgICAgIG1pblZlcnNpb246IDEsXG4gICAgICAgICAgICBtYXhWZXJzaW9uOiAxLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9O1xuXG4gICAgICB0aGlzLnBvc3QoXG4gICAgICAgIFwiL3Y1L3Nlc3Npb25zL1wiICsgdGhpcy5fdHlwZSArIFwiL1wiICsgc2Vzc2lvbklkICsgXCIvc2RwXCIsXG4gICAgICAgIHBvc3REYXRhXG4gICAgICApXG4gICAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgICB0aGlzLmdldChcIi92NS9zZXNzaW9ucy9cIiArIHRoaXMuX3R5cGUgKyBcIi9cIiArIHNlc3Npb25JZCArIFwiL3NkcFwiKVxuICAgICAgICAgICAgLnRoZW4oKHNkcFJlc3VsdDogZXhjaGFuZ2VSZXN1bHQpID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgZXhjaGFuZ2VTZHAgPSBKU09OLnBhcnNlKHNkcFJlc3VsdC5leGNoYW5nZVJlc3BvbnNlKTtcblxuICAgICAgICAgICAgICByZXNvbHZlKGV4Y2hhbmdlU2RwKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuY2F0Y2goKGVycm9yKSA9PiB7XG4gICAgICAgICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSlcbiAgICAgICAgLmNhdGNoKChlcnJvcikgPT4ge1xuICAgICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgc2VuZENoYXRTZHAoc2Vzc2lvbklkOiBzdHJpbmcsIHNkcDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGNvbnN0IHBvc3REYXRhID0ge1xuICAgICAgICBtZXNzYWdlVHlwZTogXCJvZmZlclwiLFxuICAgICAgICBzZHA6IHNkcCxcbiAgICAgICAgY29uZmlndXJhdGlvbjoge1xuICAgICAgICAgIGlzTWVkaWFTdHJlYW1zQ2hhdFJlbmVnb3RpYXRpb246IHRydWUsXG4gICAgICAgIH0sXG4gICAgICB9O1xuXG4gICAgICB0aGlzLnBvc3QoXG4gICAgICAgIFwiL3Y1L3Nlc3Npb25zL1wiICsgdGhpcy5fdHlwZSArIFwiL1wiICsgc2Vzc2lvbklkICsgXCIvc2RwXCIsXG4gICAgICAgIHBvc3REYXRhXG4gICAgICApXG4gICAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgICB0aGlzLmdldChcIi92NS9zZXNzaW9ucy9cIiArIHRoaXMuX3R5cGUgKyBcIi9cIiArIHNlc3Npb25JZCArIFwiL3NkcFwiKVxuICAgICAgICAgICAgLnRoZW4oKHNkcFJlc3VsdDogZXhjaGFuZ2VSZXN1bHQpID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgZXhjaGFuZ2VTZHAgPSBKU09OLnBhcnNlKHNkcFJlc3VsdC5leGNoYW5nZVJlc3BvbnNlKTtcblxuICAgICAgICAgICAgICByZXNvbHZlKGV4Y2hhbmdlU2RwKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuY2F0Y2goKGVycm9yKSA9PiB7XG4gICAgICAgICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSlcbiAgICAgICAgLmNhdGNoKChlcnJvcikgPT4ge1xuICAgICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgY2hlY2tJY2Uoc2Vzc2lvbklkOiBzdHJpbmcpIHtcbiAgICBjb25zdCBzZXR0aW5nczogYW55ID0gdGhpcy5fYXBwbGljYXRpb24uX3N0b3JlLmdldChcbiAgICAgIFwic2V0dGluZ3NcIixcbiAgICAgIGRlZmF1bHRTZXR0aW5nc1xuICAgICk7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHRoaXMuZ2V0KFwiL3Y1L3Nlc3Npb25zL1wiICsgdGhpcy5fdHlwZSArIFwiL1wiICsgc2Vzc2lvbklkICsgXCIvaWNlXCIpLnRoZW4oXG4gICAgICAgIChpY2VSZXN1bHQ6IGV4Y2hhbmdlUmVzdWx0IHwgc3RyaW5nKSA9PiB7XG4gICAgICAgICAgaWYgKGljZVJlc3VsdCA9PT0gXCJcIikge1xuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMuY2hlY2tJY2Uoc2Vzc2lvbklkKVxuICAgICAgICAgICAgICAgIC50aGVuKChyZXMpID0+IHtcbiAgICAgICAgICAgICAgICAgIHJlc29sdmUocmVzKTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIC5jYXRjaCgoZXJyb3IpID0+IHtcbiAgICAgICAgICAgICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9LCAxMDAwKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgX2ljZVJlc3VsdCA9IGljZVJlc3VsdCBhcyBleGNoYW5nZVJlc3VsdDtcbiAgICAgICAgICAgIGNvbnN0IGV4Y2hhbmdlSWNlID0gSlNPTi5wYXJzZShfaWNlUmVzdWx0LmV4Y2hhbmdlUmVzcG9uc2UpO1xuICAgICAgICAgICAgY29uc3QgY29tcHV0ZWRDYW5kaWRhdGVzID0gW107XG5cbiAgICAgICAgICAgIC8vIEZpbmQgVGVyZWRvIEFkZHJlc3MgYW5kIGV4dHJhY3QgcmVtb3RlIGlwXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGNhbmRpZGF0ZSBpbiBleGNoYW5nZUljZSkge1xuICAgICAgICAgICAgICBjb25zdCBjYW5kaWRhdGVBZGRyZXNzID1cbiAgICAgICAgICAgICAgICBleGNoYW5nZUljZVtjYW5kaWRhdGVdLmNhbmRpZGF0ZS5zcGxpdChcIiBcIik7XG4gICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICBjYW5kaWRhdGVBZGRyZXNzLmxlbmd0aCA+IDQgJiZcbiAgICAgICAgICAgICAgICBjYW5kaWRhdGVBZGRyZXNzWzRdLnN1YnN0cigwLCA0KSA9PT0gXCIyMDAxXCJcbiAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgYWRkcmVzcyA9IG5ldyBBZGRyZXNzNihjYW5kaWRhdGVBZGRyZXNzWzRdKTtcbiAgICAgICAgICAgICAgICBjb25zdCB0ZXJlZG8gPSBhZGRyZXNzLmluc3BlY3RUZXJlZG8oKTtcblxuICAgICAgICAgICAgICAgIGNvbXB1dGVkQ2FuZGlkYXRlcy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgIGNhbmRpZGF0ZTpcbiAgICAgICAgICAgICAgICAgICAgXCJhPWNhbmRpZGF0ZToxMCAxIFVEUCAxIFwiICtcbiAgICAgICAgICAgICAgICAgICAgdGVyZWRvLmNsaWVudDQgK1xuICAgICAgICAgICAgICAgICAgICBcIiA5MDAyIHR5cCBob3N0IFwiLFxuICAgICAgICAgICAgICAgICAgbWVzc2FnZVR5cGU6IFwiaWNlQ2FuZGlkYXRlXCIsXG4gICAgICAgICAgICAgICAgICBzZHBNTGluZUluZGV4OiBcIjBcIixcbiAgICAgICAgICAgICAgICAgIHNkcE1pZDogXCIwXCIsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgY29tcHV0ZWRDYW5kaWRhdGVzLnB1c2goe1xuICAgICAgICAgICAgICAgICAgY2FuZGlkYXRlOlxuICAgICAgICAgICAgICAgICAgICBcImE9Y2FuZGlkYXRlOjExIDEgVURQIDEgXCIgK1xuICAgICAgICAgICAgICAgICAgICB0ZXJlZG8uY2xpZW50NCArXG4gICAgICAgICAgICAgICAgICAgIFwiIFwiICtcbiAgICAgICAgICAgICAgICAgICAgdGVyZWRvLnVkcFBvcnQgK1xuICAgICAgICAgICAgICAgICAgICBcIiB0eXAgaG9zdCBcIixcbiAgICAgICAgICAgICAgICAgIG1lc3NhZ2VUeXBlOiBcImljZUNhbmRpZGF0ZVwiLFxuICAgICAgICAgICAgICAgICAgc2RwTUxpbmVJbmRleDogXCIwXCIsXG4gICAgICAgICAgICAgICAgICBzZHBNaWQ6IFwiMFwiLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgY29tcHV0ZWRDYW5kaWRhdGVzLnB1c2goZXhjaGFuZ2VJY2VbY2FuZGlkYXRlXSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IHBhdHRlcm4gPSBuZXcgUmVnRXhwKFxuICAgICAgICAgICAgICAvYT1jYW5kaWRhdGU6KD88Zm91bmRhdGlvbj5cXGQrKSAoPzxjb21wb25lbnQ+XFxkKykgVURQICg/PHByaW9yaXR5PlxcZCspICg/PGlwPlteXFxzXSspICg/PHBvcnQ+XFxkKykgKD88dGhlX3Jlc3Q+LiopL1xuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgY29uc3QgbHN0ID0gW107XG4gICAgICAgICAgICBmb3IgKGxldCBpdGVtIG9mIGNvbXB1dGVkQ2FuZGlkYXRlcykge1xuICAgICAgICAgICAgICBpZiAoaXRlbS5jYW5kaWRhdGUgPT09IFwiYT1lbmQtb2YtY2FuZGlkYXRlc1wiKSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBjb25zdCBncm91cHMgPSBwYXR0ZXJuLmV4ZWMoaXRlbS5jYW5kaWRhdGUpLmdyb3VwcztcbiAgICAgICAgICAgICAgbHN0LnB1c2goZ3JvdXBzKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gUGVyZmVySVBWNlxuICAgICAgICAgICAgaWYgKHNldHRpbmdzLmlwdjYpIHtcbiAgICAgICAgICAgICAgbHN0LnNvcnQoKGEsIGIpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBmaXJzdElwID0gYS5pcDtcbiAgICAgICAgICAgICAgICBjb25zdCBzZWNvbmRJcCA9IGIuaXA7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gIWZpcnN0SXAuaW5jbHVkZXMoXCI6XCIpICYmIHNlY29uZElwLmluY2x1ZGVzKFwiOlwiKVxuICAgICAgICAgICAgICAgICAgPyAxXG4gICAgICAgICAgICAgICAgICA6IC0xO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgbmV3Q2FuZGlkYXRlcyA9IFtdO1xuICAgICAgICAgICAgbGV0IGZvdW5kYXRpb24gPSAxO1xuXG4gICAgICAgICAgICBjb25zdCBuZXdDYW5kaWRhdGUgPSAoY2FuZGlkYXRlKSA9PiB7XG4gICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgY2FuZGlkYXRlOiBjYW5kaWRhdGUsXG4gICAgICAgICAgICAgICAgbWVzc2FnZVR5cGU6IFwiaWNlQ2FuZGlkYXRlXCIsXG4gICAgICAgICAgICAgICAgc2RwTUxpbmVJbmRleDogXCIwXCIsXG4gICAgICAgICAgICAgICAgc2RwTWlkOiBcIjBcIixcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGxzdC5mb3JFYWNoKChpdGVtKSA9PiB7XG4gICAgICAgICAgICAgIGl0ZW0uZm91bmRhdGlvbiA9IGZvdW5kYXRpb247XG4gICAgICAgICAgICAgIGl0ZW0ucHJpb3JpdHkgPSBmb3VuZGF0aW9uID09PSAxID8gMjEzMDcwNjQzMSA6IDE7XG5cbiAgICAgICAgICAgICAgbmV3Q2FuZGlkYXRlcy5wdXNoKFxuICAgICAgICAgICAgICAgIG5ld0NhbmRpZGF0ZShcbiAgICAgICAgICAgICAgICAgIGBhPWNhbmRpZGF0ZToke2l0ZW0uZm91bmRhdGlvbn0gMSBVRFAgJHtpdGVtLnByaW9yaXR5fSAke2l0ZW0uaXB9ICR7aXRlbS5wb3J0fSAke2l0ZW0udGhlX3Jlc3R9YFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgKytmb3VuZGF0aW9uO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIG5ld0NhbmRpZGF0ZXMucHVzaChuZXdDYW5kaWRhdGUoXCJhPWVuZC1vZi1jYW5kaWRhdGVzXCIpKTtcblxuICAgICAgICAgICAgcmVzb2x2ZShuZXdDYW5kaWRhdGVzKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICk7XG4gICAgfSk7XG4gIH1cblxuICBzZW5kSWNlKHNlc3Npb25JZDogc3RyaW5nLCBpY2U6IGFueSkge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBjb25zdCBwb3N0RGF0YSA9IHtcbiAgICAgICAgbWVzc2FnZVR5cGU6IFwiaWNlQ2FuZGlkYXRlXCIsXG4gICAgICAgIGNhbmRpZGF0ZTogaWNlLFxuICAgICAgfTtcblxuICAgICAgdGhpcy5wb3N0KFxuICAgICAgICBcIi92NS9zZXNzaW9ucy9cIiArIHRoaXMuX3R5cGUgKyBcIi9cIiArIHNlc3Npb25JZCArIFwiL2ljZVwiLFxuICAgICAgICBwb3N0RGF0YVxuICAgICAgKVxuICAgICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmNoZWNrSWNlKHNlc3Npb25JZClcbiAgICAgICAgICAgICAgICAudGhlbihjYW5kaWRhdGVzID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShjYW5kaWRhdGVzKTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIC5jYXRjaCgoZXJyb3IpID0+IHtcbiAgICAgICAgICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2goKGVycm9yKSA9PiB7XG4gICAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBzZW5kTVNBTEF1dGgoc2Vzc2lvbklkOiBzdHJpbmcsIHVzZXJUb2tlbjogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMucG9zdChcbiAgICAgIFwiL3Y1L3Nlc3Npb25zL1wiICsgdGhpcy5fdHlwZSArIFwiL1wiICsgc2Vzc2lvbklkICsgXCIvY29ubmVjdFwiLFxuICAgICAge1xuICAgICAgICB1c2VyVG9rZW46IHVzZXJUb2tlbixcbiAgICAgIH1cbiAgICApO1xuICB9XG5cbiAgc2VuZEtlZXBhbGl2ZShzZXNzaW9uSWQ6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLnBvc3QoXG4gICAgICBcIi92NS9zZXNzaW9ucy9cIiArIHRoaXMuX3R5cGUgKyBcIi9cIiArIHNlc3Npb25JZCArIFwiL2tlZXBhbGl2ZVwiXG4gICAgKTtcbiAgfVxuXG4gIGdldEFjdGl2ZVNlc3Npb25zKCkge1xuICAgIHJldHVybiB0aGlzLmdldChcIi92NS9zZXNzaW9ucy9cIiArIHRoaXMuX3R5cGUgKyBcIi9hY3RpdmVcIik7XG4gIH1cbn1cbiIsImltcG9ydCBBcHBsaWNhdGlvbiBmcm9tICcuL2FwcGxpY2F0aW9uJ1xuaW1wb3J0IElwY0NvbnNvbGVzIGZyb20gJy4vaXBjL2NvbnNvbGVzJ1xuaW1wb3J0IElwY1N0cmVhbWluZyBmcm9tICcuL2lwYy9zdHJlYW1pbmcnXG5pbXBvcnQgSXBjeENsb3VkIGZyb20gJy4vaXBjL3hjbG91ZCdcbmltcG9ydCBJcGNBcHAgZnJvbSAnLi9pcGMvYXBwJ1xuaW1wb3J0IElwY1NldHRpbmdzIGZyb20gJy4vaXBjL3NldHRpbmdzJ1xuXG5pbXBvcnQgeyBpcGNNYWluIH0gZnJvbSAnZWxlY3Ryb24nXG5cbmludGVyZmFjZSBJcGNDaGFubmVscyB7XG4gICAgc3RyZWFtaW5nOiBJcGNTdHJlYW1pbmc7XG4gICAgY29uc29sZXM6IElwY0NvbnNvbGVzO1xuICAgIGFwcDogSXBjQXBwO1xuICAgIHhDbG91ZDogSXBjeENsb3VkO1xuICAgIHNldHRpbmdzOiBJcGNTZXR0aW5ncztcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgSXBjIHtcblxuICAgIF9hcHBsaWNhdGlvbjpBcHBsaWNhdGlvblxuXG4gICAgX2NoYW5uZWxzOklwY0NoYW5uZWxzXG5cbiAgICBjb25zdHJ1Y3RvcihhcHBsaWNhdGlvbjpBcHBsaWNhdGlvbil7XG4gICAgICAgIHRoaXMuX2FwcGxpY2F0aW9uID0gYXBwbGljYXRpb25cblxuICAgICAgICB0aGlzLl9jaGFubmVscyA9IHtcbiAgICAgICAgICAgIHN0cmVhbWluZzogbmV3IElwY1N0cmVhbWluZyh0aGlzLl9hcHBsaWNhdGlvbiksXG4gICAgICAgICAgICBjb25zb2xlczogbmV3IElwY0NvbnNvbGVzKHRoaXMuX2FwcGxpY2F0aW9uKSxcbiAgICAgICAgICAgIGFwcDogbmV3IElwY0FwcCh0aGlzLl9hcHBsaWNhdGlvbiksXG4gICAgICAgICAgICB4Q2xvdWQ6IG5ldyBJcGN4Q2xvdWQodGhpcy5fYXBwbGljYXRpb24pLFxuICAgICAgICAgICAgc2V0dGluZ3M6IG5ldyBJcGNTZXR0aW5ncyh0aGlzLl9hcHBsaWNhdGlvbiksXG4gICAgICAgIH1cblxuICAgICAgICBmb3IoY29uc3QgY2hhbm5lbCBpbiB0aGlzLl9jaGFubmVscyl7XG4gICAgICAgICAgICBpcGNNYWluLm9uKGNoYW5uZWwsIChldmVudCwgYXJncykgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxzW2NoYW5uZWxdLm9uRXZlbnQoY2hhbm5lbCwgZXZlbnQsIGFyZ3MpIFxuICAgICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgICBcbiAgICB9XG5cbiAgICBzdGFydFVwKCl7XG4gICAgICAgIGZvcihjb25zdCBjaGFubmVsIGluIHRoaXMuX2NoYW5uZWxzKXtcbiAgICAgICAgICAgIHRoaXMuX2FwcGxpY2F0aW9uLmxvZygnSXBjJywgJ1N0YXJ0aW5nIElQQyBjaGFubmVsOiAnICsgY2hhbm5lbClcblxuICAgICAgICAgICAgaWYodGhpcy5fY2hhbm5lbHNbY2hhbm5lbF0uc3RhcnRVcClcbiAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsc1tjaGFubmVsXS5zdGFydFVwKClcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uVXNlckxvYWRlZCgpe1xuICAgICAgICBmb3IoY29uc3QgY2hhbm5lbCBpbiB0aGlzLl9jaGFubmVscyl7XG4gICAgICAgICAgICBpZih0aGlzLl9jaGFubmVsc1tjaGFubmVsXS5vblVzZXJMb2FkZWQpe1xuICAgICAgICAgICAgICAgIHRoaXMuX2FwcGxpY2F0aW9uLmxvZygnSXBjJywgJ0xvYWRpbmcgc3RhcnR1cCBkYXRhIGZvciBJUEMgY2hhbm5lbDogJyArIGNoYW5uZWwpXG4gICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbHNbY2hhbm5lbF0ub25Vc2VyTG9hZGVkKClcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn0iLCJpbXBvcnQgSXBjQmFzZSBmcm9tIFwiLi9iYXNlXCI7XG5pbXBvcnQgeyBzZXNzaW9uIH0gZnJvbSBcImVsZWN0cm9uXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIElwY0FwcCBleHRlbmRzIElwY0Jhc2Uge1xuICAvLyBfc3RyZWFtaW5nU2Vzc2lvbnM6YW55ID0ge31cblxuICBsb2FkQ2FjaGVkVXNlcigpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgIGNvbnN0IHVzZXIgPSB0aGlzLmdldFVzZXJTdGF0ZSgpO1xuXG4gICAgICByZXNvbHZlKHVzZXIpO1xuICAgIH0pO1xuICB9XG5cbiAgZ2V0VXNlclN0YXRlKCkge1xuICAgIGNvbnN0IGdhbWVydGFnID0gdGhpcy5fYXBwbGljYXRpb24uX3N0b3JlLmdldChcInVzZXIuZ2FtZXJ0YWdcIik7XG4gICAgY29uc3QgZ2FtZXJwaWMgPSB0aGlzLl9hcHBsaWNhdGlvbi5fc3RvcmUuZ2V0KFwidXNlci5nYW1lcnBpY1wiKTtcbiAgICBjb25zdCBnYW1lcnNjb3JlID0gdGhpcy5fYXBwbGljYXRpb24uX3N0b3JlLmdldChcInVzZXIuZ2FtZXJzY29yZVwiKTtcblxuICAgIHJldHVybiB7XG4gICAgICBzaWduZWRJbjogZ2FtZXJ0YWcgPyB0cnVlIDogZmFsc2UsXG4gICAgICB0eXBlOiBcInVzZXJcIixcbiAgICAgIGdhbWVydGFnOiBnYW1lcnRhZyA/IGdhbWVydGFnIDogXCJcIixcbiAgICAgIGdhbWVycGljOiBnYW1lcnBpYyA/IGdhbWVycGljIDogXCJcIixcbiAgICAgIGdhbWVyc2NvcmU6IGdhbWVyc2NvcmUgPyBnYW1lcnNjb3JlIDogXCJcIixcbiAgICAgIGxldmVsOiB0aGlzLl9hcHBsaWNhdGlvbi5fYXV0aGVudGljYXRpb24uX2FwcExldmVsLFxuICAgIH07XG4gIH1cblxuICBnZXRBdXRoU3RhdGUoKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICByZXNvbHZlKHtcbiAgICAgICAgaXNBdXRoZW50aWNhdGluZzogdGhpcy5fYXBwbGljYXRpb24uX2F1dGhlbnRpY2F0aW9uLl9pc0F1dGhlbnRpY2F0aW5nLFxuICAgICAgICBpc0F1dGhlbnRpY2F0ZWQ6IHRoaXMuX2FwcGxpY2F0aW9uLl9hdXRoZW50aWNhdGlvbi5faXNBdXRoZW50aWNhdGVkLFxuICAgICAgICB1c2VyOiB0aGlzLmdldFVzZXJTdGF0ZSgpLFxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBnZXRBcHBMZXZlbCgpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgICAgcmVzb2x2ZSh0aGlzLl9hcHBsaWNhdGlvbi5fYXV0aGVudGljYXRpb24uX2FwcExldmVsKTtcbiAgICB9KTtcbiAgfVxuXG4gIGNoZWNrQXV0aGVudGljYXRpb24oKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICByZXNvbHZlKHRoaXMuX2FwcGxpY2F0aW9uLl9hdXRoZW50aWNhdGlvbi5jaGVja0F1dGhlbnRpY2F0aW9uKCkpO1xuICAgIH0pO1xuICB9XG5cbiAgbG9naW4oKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPGJvb2xlYW4+KChyZXNvbHZlKSA9PiB7XG4gICAgICB0aGlzLl9hcHBsaWNhdGlvbi5fYXV0aGVudGljYXRpb24uc3RhcnRBdXRoZmxvdygpO1xuICAgICAgcmVzb2x2ZSh0cnVlKTtcbiAgICB9KTtcbiAgfVxuXG4gIHF1aXQoKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPGJvb2xlYW4+KChyZXNvbHZlKSA9PiB7XG4gICAgICByZXNvbHZlKHRydWUpO1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMuX2FwcGxpY2F0aW9uLnF1aXQoKTtcbiAgICAgIH0sIDEwMCk7XG4gICAgfSk7XG4gIH1cblxuICByZXN0YXJ0KCkge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZTxib29sZWFuPigocmVzb2x2ZSkgPT4ge1xuICAgICAgcmVzb2x2ZSh0cnVlKTtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLl9hcHBsaWNhdGlvbi5yZXN0YXJ0KCk7XG4gICAgICB9LCAxMDApO1xuICAgIH0pO1xuICB9XG5cbiAgY2xlYXJEYXRhKCkge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZTxib29sZWFuPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBzZXNzaW9uLmRlZmF1bHRTZXNzaW9uXG4gICAgICAgIC5jbGVhclN0b3JhZ2VEYXRhKClcbiAgICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICAgIHRoaXMuX2FwcGxpY2F0aW9uLl9hdXRoZW50aWNhdGlvbi5fdG9rZW5TdG9yZS5jbGVhcigpO1xuICAgICAgICAgIHRoaXMuX2FwcGxpY2F0aW9uLl9zdG9yZS5kZWxldGUoXCJ1c2VyXCIpO1xuICAgICAgICAgIHRoaXMuX2FwcGxpY2F0aW9uLl9zdG9yZS5kZWxldGUoXCJhdXRoXCIpO1xuXG4gICAgICAgICAgdGhpcy5fYXBwbGljYXRpb24ubG9nKFxuICAgICAgICAgICAgXCJhdXRoZW50aWNhdGlvblwiLFxuICAgICAgICAgICAgX19maWxlbmFtZSArXG4gICAgICAgICAgICAgIFwiW3N0YXJ0SXBjRXZlbnRzKCldIFJlY2VpdmVkIHJlc3RhcnQgcmVxdWVzdC4gUmVzdGFydGluZyBhcHBsaWNhdGlvbi4uLlwiXG4gICAgICAgICAgKTtcbiAgICAgICAgICB0aGlzLl9hcHBsaWNhdGlvbi5yZXN0YXJ0KCk7XG4gICAgICAgICAgcmVzb2x2ZSh0cnVlKTtcbiAgICAgICAgfSlcbiAgICAgICAgLmNhdGNoKChlcnJvcikgPT4ge1xuICAgICAgICAgIHRoaXMuX2FwcGxpY2F0aW9uLmxvZyhcbiAgICAgICAgICAgIFwiYXV0aGVudGljYXRpb25cIixcbiAgICAgICAgICAgIF9fZmlsZW5hbWUgK1xuICAgICAgICAgICAgICBcIltzdGFydElwY0V2ZW50cygpXSBFcnJvcjogRmFpbGVkIHRvIGNsZWFyIGxvY2FsIHN0b3JhZ2UhXCJcbiAgICAgICAgICApO1xuICAgICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgZ2V0T25saW5lRnJpZW5kcygpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgIGlmICh0aGlzLl9hcHBsaWNhdGlvbi5feGJveFdvcmtlciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIC8vIFdvcmtlciBpcyBub3QgbG9hZGVkIHlldC4uXG4gICAgICAgIHJlc29sdmUoW10pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzb2x2ZSh0aGlzLl9hcHBsaWNhdGlvbi5feGJveFdvcmtlci5fb25saW5lRnJpZW5kcyk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBvblVpU2hvd24oKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICByZXNvbHZlKHt9KTtcbiAgICB9KTtcbiAgfVxuXG4gIHRvZ2dsZUZ1bGxzY3JlZW4oKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICBjb25zdCBpc0Z1bGxTY3JlZW4gPSB0aGlzLl9hcHBsaWNhdGlvbi5fbWFpbldpbmRvdy5pc0Z1bGxTY3JlZW4oKTtcbiAgICAgIHRoaXMuX2FwcGxpY2F0aW9uLl9tYWluV2luZG93LnNldEZ1bGxTY3JlZW4oIWlzRnVsbFNjcmVlbik7XG4gICAgICByZXNvbHZlKHt9KVxuICAgIH0pO1xuICB9XG5cbiAgZXhpdEZ1bGxzY3JlZW4oKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICB0aGlzLl9hcHBsaWNhdGlvbi5fbWFpbldpbmRvdy5zZXRGdWxsU2NyZWVuKGZhbHNlKTtcbiAgICAgIHJlc29sdmUoe30pXG4gICAgfSk7XG4gIH1cbn1cbiIsImltcG9ydCBBcHBsaWNhdGlvbiBmcm9tICcuLi9hcHBsaWNhdGlvbidcblxuaW50ZXJmYWNlIEV2ZW50QXJncyB7XG4gICAgYWN0aW9uOiBzdHJpbmc7XG4gICAgaWQ6IG51bWJlcjtcbiAgICBkYXRhOiBhbnk7XG4gICAgZXJyb3I/OiBhbnk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIElwY0Jhc2Uge1xuICAgIF9hcHBsaWNhdGlvbjpBcHBsaWNhdGlvblxuXG4gICAgY29uc3RydWN0b3IoYXBwbGljYXRpb246QXBwbGljYXRpb24pe1xuICAgICAgICB0aGlzLl9hcHBsaWNhdGlvbiA9IGFwcGxpY2F0aW9uXG4gICAgfVxuXG4gICAgb25FdmVudChjaGFubmVsLCBldmVudCwgYXJnczpFdmVudEFyZ3Mpe1xuICAgICAgICB0aGlzLl9hcHBsaWNhdGlvbi5sb2coJ0lwYzpSZWN2JywgJ1JlY2VpdmVkIGV2ZW50OiBbJytjaGFubmVsKyddJywgYXJncylcbiAgICAgICAgaWYodHlwZW9mIHRoaXNbYXJncy5hY3Rpb25dID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBjb25zdCByZXNwb25zZSA9IChPYmplY3Qua2V5cyhhcmdzLmRhdGEpLmxlbmd0aCA+IDApID8gdGhpc1thcmdzLmFjdGlvbl0oYXJncy5kYXRhKSA6IHRoaXNbYXJncy5hY3Rpb25dKClcbiAgICAgICAgICAgIHJlc3BvbnNlLnRoZW4oKHJlc3VsdCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuc2VuZChjaGFubmVsLCB7XG4gICAgICAgICAgICAgICAgICAgIGFjdGlvbjogYXJncy5hY3Rpb24sXG4gICAgICAgICAgICAgICAgICAgIGlkOiBhcmdzLmlkLFxuICAgICAgICAgICAgICAgICAgICBkYXRhOiByZXN1bHQsXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIH0pLmNhdGNoKChlcnJvcikgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdFUlJPUjogSVBDIGNvbW11bmljYXRpb24gZXJyb3IgZnJvbSBiYWNrZW5kOicsIGVycm9yKVxuICAgICAgICAgICAgICAgIHRoaXMuc2VuZChjaGFubmVsLCB7XG4gICAgICAgICAgICAgICAgICAgIGFjdGlvbjogYXJncy5hY3Rpb24sXG4gICAgICAgICAgICAgICAgICAgIGlkOiBhcmdzLmlkLFxuICAgICAgICAgICAgICAgICAgICBkYXRhOiB7fSxcbiAgICAgICAgICAgICAgICAgICAgZXJyb3I6IGVycm9yLFxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICB9KVxuXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9hcHBsaWNhdGlvbi5sb2coJ0lwYycsICdFUlJPUjogQWN0aW9uIHdhcyBub3QgZm91bmQ6JywgYXJncy5hY3Rpb24sICdvbiBjaGFubmVsJywgY2hhbm5lbClcbiAgICAgICAgICAgIHRoaXMuc2VuZChjaGFubmVsLCB7XG4gICAgICAgICAgICAgICAgYWN0aW9uOiBhcmdzLmFjdGlvbixcbiAgICAgICAgICAgICAgICBpZDogYXJncy5pZCxcbiAgICAgICAgICAgICAgICBkYXRhOiB7fSxcbiAgICAgICAgICAgICAgICBlcnJvcjogJ0lQQyBhY3Rpb24gZmFpbHVyZS4gQWN0aW9uIHdhcyBub3QgZm91bmQ6ICcrY2hhbm5lbCsnOicrYXJncy5hY3Rpb24sXG4gICAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgc2VuZChjaGFubmVsLCBhcmdzOkV2ZW50QXJncyl7XG4gICAgICAgIHRoaXMuX2FwcGxpY2F0aW9uLmxvZygnSXBjOlNlbmQnLCAnU2VuZGluZyBldmVudDogWycrY2hhbm5lbCsnXScsIEpTT04uc3RyaW5naWZ5KGFyZ3MpKVxuICAgICAgICB0aGlzLl9hcHBsaWNhdGlvbi5fbWFpbldpbmRvdy53ZWJDb250ZW50cy5zZW5kKGNoYW5uZWwsIHtcbiAgICAgICAgICAgIGFjdGlvbjogYXJncy5hY3Rpb24sXG4gICAgICAgICAgICBpZDogYXJncy5pZCxcbiAgICAgICAgICAgIGRhdGE6IGFyZ3MuZGF0YSxcbiAgICAgICAgICAgIGVycm9yOiBhcmdzLmVycm9yLFxuICAgICAgICB9KVxuICAgIH1cbn0iLCJpbXBvcnQgSXBjQmFzZSBmcm9tICcuL2Jhc2UnXG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIElwY0NvbnNvbGVzIGV4dGVuZHMgSXBjQmFzZSB7XG4gICAgLy8gX3N0cmVhbWluZ1Nlc3Npb25zOmFueSA9IHt9XG5cbiAgICBfY29uc29sZXMgPSBbXVxuICAgIF9jb25zb2xlc0xhc3RVcGRhdGUgPSAwXG5cbiAgICBnZXQoKXtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgIGlmKHRoaXMuX2NvbnNvbGVzTGFzdFVwZGF0ZSA8IERhdGUubm93KCkgLSA2MCoxMDAwKXtcbiAgICAgICAgICAgICAgICAvLyB0aGlzLl9hcHBsaWNhdGlvbi5fZXZlbnRzLl93ZWJBcGkuZ2V0UHJvdmlkZXIoJ3NtYXJ0Z2xhc3MnKS5nZXRDb25zb2xlc0xpc3QoKS50aGVuKChjb25zb2xlcykgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuX2FwcGxpY2F0aW9uLl93ZWJBcGkuZ2V0UHJvdmlkZXIoJ3NtYXJ0Z2xhc3MnKS5nZXRDb25zb2xlc0xpc3QoKS50aGVuKChjb25zb2xlcykgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jb25zb2xlcyA9IGNvbnNvbGVzLnJlc3VsdFxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jb25zb2xlc0xhc3RVcGRhdGUgPSBEYXRlLm5vdygpXG5cbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSh0aGlzLl9jb25zb2xlcylcbiAgICAgICAgICAgICAgICB9KS5jYXRjaCgoZXJyb3IpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGVycm9yKVxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJlc29sdmUodGhpcy5fY29uc29sZXMpXG4gICAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgfVxufSIsImltcG9ydCBJcGNCYXNlIGZyb20gJy4vYmFzZSdcbmltcG9ydCB7IGRlZmF1bHRTZXR0aW5ncyB9IGZyb20gJy4uLy4uL3JlbmRlcmVyL2NvbnRleHQvdXNlckNvbnRleHQuZGVmYXVsdHMnXG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIElwY1NldHRpbmdzIGV4dGVuZHMgSXBjQmFzZSB7XG5cbiAgICBzZXRTZXR0aW5ncyhhcmdzOih0eXBlb2YgZGVmYXVsdFNldHRpbmdzKSl7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgbmV3U2V0dGluZ3MgPSB7Li4uZGVmYXVsdFNldHRpbmdzLCAuLi5hcmdzfVxuICAgICAgICAgICAgdGhpcy5fYXBwbGljYXRpb24uX3N0b3JlLnNldCgnc2V0dGluZ3MnLCBuZXdTZXR0aW5ncylcbiAgICAgICAgICAgIHJlc29sdmUobmV3U2V0dGluZ3MpXG4gICAgICAgIH0pXG4gICAgfVxuXG4gICAgZ2V0U2V0dGluZ3MoKXtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlPHR5cGVvZiBkZWZhdWx0U2V0dGluZ3M+KChyZXNvbHZlKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBzZXR0aW5ncyA9IHRoaXMuX2FwcGxpY2F0aW9uLl9zdG9yZS5nZXQoJ3NldHRpbmdzJywgZGVmYXVsdFNldHRpbmdzKSBhcyBvYmplY3RcbiAgICAgICAgICAgIHJlc29sdmUoey4uLmRlZmF1bHRTZXR0aW5ncywgLi4uc2V0dGluZ3N9KVxuICAgICAgICB9KVxuICAgIH1cblxuICAgIHJlc2V0U2V0dGluZ3MoKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgc2V0dGluZ3MgPSB7Li4uZGVmYXVsdFNldHRpbmdzfVxuICAgICAgICAgICAgdGhpcy5fYXBwbGljYXRpb24uX3N0b3JlLmRlbGV0ZSgnc2V0dGluZ3MnKVxuXG4gICAgICAgICAgICB0aGlzLl9hcHBsaWNhdGlvbi5fc3RvcmUuc2V0KCdzZXR0aW5ncycsIHNldHRpbmdzKVxuICAgICAgICAgICAgcmVzb2x2ZShzZXR0aW5ncylcbiAgICAgICAgfSlcbiAgICB9XG59IiwiaW1wb3J0IElwY0Jhc2UgZnJvbSAnLi9iYXNlJ1xuaW1wb3J0IEFwcGxpY2F0aW9uIGZyb20gJy4uL2FwcGxpY2F0aW9uJ1xuaW1wb3J0IFN0cmVhbU1hbmFnZXIgZnJvbSAnLi4vaGVscGVycy9zdHJlYW1tYW5hZ2VyJ1xuXG5pbnRlcmZhY2Ugc3RhcnRTdHJlYW1BcmdzIHtcbiAgICB0eXBlOiBzdHJpbmc7XG4gICAgdGFyZ2V0OiBzdHJpbmc7XG59XG5cbmludGVyZmFjZSBzZW5kU2RwQXJncyB7XG4gICAgc2Vzc2lvbklkOiBzdHJpbmc7XG4gICAgc2RwOiBhbnk7XG59XG5cbmludGVyZmFjZSBzZW5kSWNlQXJncyB7XG4gICAgc2Vzc2lvbklkOiBzdHJpbmc7XG4gICAgaWNlOiBhbnk7XG59XG5pbnRlcmZhY2Ugc2VuZEtlZXBhbGl2ZUFyZ3Mge1xuICAgIHNlc3Npb25JZDogc3RyaW5nO1xufVxuaW50ZXJmYWNlIHN0b3BTdHJlYW1BcmdzIHtcbiAgICBzZXNzaW9uSWQ6IHN0cmluZztcbn1cbmludGVyZmFjZSBnZXRQbGF5ZXJTdGF0ZUFyZ3Mge1xuICAgIHNlc3Npb25JZDogc3RyaW5nO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBJcGNTdHJlYW1pbmcgZXh0ZW5kcyBJcGNCYXNlIHtcblxuICAgIF9zdHJlYW1NYW5hZ2VyOlN0cmVhbU1hbmFnZXJcblxuICAgIGNvbnN0cnVjdG9yKGFwcGxpY2F0aW9uOkFwcGxpY2F0aW9uKXtcbiAgICAgICAgc3VwZXIoYXBwbGljYXRpb24pXG5cbiAgICAgICAgdGhpcy5fc3RyZWFtTWFuYWdlciA9IG5ldyBTdHJlYW1NYW5hZ2VyKGFwcGxpY2F0aW9uKVxuICAgIH1cblxuICAgIHN0YXJ0U3RyZWFtKGFyZ3M6c3RhcnRTdHJlYW1BcmdzKXtcblxuICAgICAgICBpZihhcmdzLnR5cGUgPT09ICdob21lJyl7XG4gICAgICAgICAgICB0aGlzLl9hcHBsaWNhdGlvbi5faXBjLl9jaGFubmVscy5jb25zb2xlcy5fY29uc29sZXNMYXN0VXBkYXRlID0gMFxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fYXBwbGljYXRpb24uX2lwYy5fY2hhbm5lbHMueENsb3VkLl9yZWNlbnRUaXRsZXNMYXN0VXBkYXRlID0gMFxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuX3N0cmVhbU1hbmFnZXIuc3RhcnRTdHJlYW0oYXJncy50eXBlLCBhcmdzLnRhcmdldClcbiAgICB9XG5cbiAgICBzdG9wU3RyZWFtKGFyZ3M6c3RvcFN0cmVhbUFyZ3Mpe1xuICAgICAgICByZXR1cm4gdGhpcy5fc3RyZWFtTWFuYWdlci5zdG9wU3RyZWFtKGFyZ3Muc2Vzc2lvbklkKVxuICAgIH1cblxuICAgIHNlbmRTZHAoYXJnczpzZW5kU2RwQXJncyl7XG4gICAgICAgIHJldHVybiB0aGlzLl9zdHJlYW1NYW5hZ2VyLnNlbmRTZHAoYXJncy5zZXNzaW9uSWQsIGFyZ3Muc2RwKVxuICAgIH1cblxuICAgIHNlbmRDaGF0U2RwKGFyZ3M6c2VuZFNkcEFyZ3Mpe1xuICAgICAgICByZXR1cm4gdGhpcy5fc3RyZWFtTWFuYWdlci5zZW5kQ2hhdFNkcChhcmdzLnNlc3Npb25JZCwgYXJncy5zZHApXG4gICAgfVxuXG4gICAgc2VuZEljZShhcmdzOnNlbmRJY2VBcmdzKXtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3N0cmVhbU1hbmFnZXIuc2VuZEljZShhcmdzLnNlc3Npb25JZCwgYXJncy5pY2UpXG4gICAgfVxuXG4gICAgc2VuZEtlZXBhbGl2ZShhcmdzOnNlbmRLZWVwYWxpdmVBcmdzKXtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3N0cmVhbU1hbmFnZXIuc2VuZEtlZXBhbGl2ZShhcmdzLnNlc3Npb25JZClcbiAgICB9XG5cbiAgICBnZXRQbGF5ZXJTdGF0ZShhcmdzOmdldFBsYXllclN0YXRlQXJncyl7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgICAgICAgICAgcmVzb2x2ZSh0aGlzLl9zdHJlYW1NYW5hZ2VyLmdldFNlc3Npb24oYXJncy5zZXNzaW9uSWQpKVxuICAgICAgICB9KVxuICAgIH1cblxuICAgIGFjdGl2ZVNlc3Npb25zKCl7XG4gICAgICAgIHJldHVybiB0aGlzLl9zdHJlYW1NYW5hZ2VyLmdldEFjdGl2ZVNlc3Npb25zKClcbiAgICB9XG5cbn0iLCJpbXBvcnQgSXBjQmFzZSBmcm9tICcuL2Jhc2UnXG5pbXBvcnQgQXBwbGljYXRpb24gZnJvbSAnLi4vYXBwbGljYXRpb24nXG5pbXBvcnQgVGl0bGVNYW5hZ2VyIGZyb20gJy4uL2hlbHBlcnMvdGl0bGVtYW5hZ2VyJ1xuaW1wb3J0IHhDbG91ZEFwaSBmcm9tICcuLi9oZWxwZXJzL3hjbG91ZGFwaSdcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgSXBjeENsb3VkIGV4dGVuZHMgSXBjQmFzZSB7XG5cbiAgICBfdGl0bGVNYW5hZ2VyOlRpdGxlTWFuYWdlclxuXG4gICAgX3RpdGxlc0FyZUxvYWRlZCA9IGZhbHNlXG5cbiAgICBfdGl0bGVzID0gW11cbiAgICBfdGl0bGVzTGFzdFVwZGF0ZSA9IDBcblxuICAgIF9yZWNlbnRUaXRsZXMgPSBbXVxuICAgIF9yZWNlbnRUaXRsZXNMYXN0VXBkYXRlID0gMFxuXG4gICAgX25ld1RpdGxlcyA9IFtdXG4gICAgX25ld1RpdGxlc0xhc3RVcGRhdGUgPSAwXG5cbiAgICBjb25zdHJ1Y3RvcihhcHBsaWNhdGlvbjpBcHBsaWNhdGlvbil7XG4gICAgICAgIHN1cGVyKGFwcGxpY2F0aW9uKVxuXG4gICAgICAgIHRoaXMuX3RpdGxlTWFuYWdlciA9IG5ldyBUaXRsZU1hbmFnZXIoYXBwbGljYXRpb24pXG4gICAgfVxuXG4gICAgc3RhcnRVcCgpe1xuICAgICAgICB0aGlzLl9hcHBsaWNhdGlvbi5sb2coJ0lwYzp4Q2xvdWQnLCAnU3RhcnRpbmcgeENsb3VkIElQQyBDaGFubmVsLi4uJylcbiAgICB9XG5cbiAgICBnZXRSZWNlbnRUaXRsZXMoKXtcbiAgICAgICAgY29uc3Qgc3RyZWFtaW5nVG9rZW5zID0gdGhpcy5fYXBwbGljYXRpb24uc3RyZWFtaW5nVG9rZW5zO1xuICAgICAgICBjb25zdCBfeENsb3VkQXBpID0gbmV3IHhDbG91ZEFwaShcbiAgICAgICAgICAgIHRoaXMuX2FwcGxpY2F0aW9uLFxuICAgICAgICAgICAgc3RyZWFtaW5nVG9rZW5zLnhDbG91ZFRva2VuLmdldERlZmF1bHRSZWdpb24oKS5iYXNlVXJpLnN1YnN0cmluZyg4KSxcbiAgICAgICAgICAgIHN0cmVhbWluZ1Rva2Vucy54Q2xvdWRUb2tlbi5kYXRhLmdzVG9rZW4sXG4gICAgICAgICAgICBcImNsb3VkXCJcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIF94Q2xvdWRBcGkuZ2V0UmVjZW50VGl0bGVzKClcbiAgICB9XG5cbiAgICBnZXRYaG9tZVRva2VuKCkge1xuICAgICAgICBjb25zb2xlLmxvZygnZ2V0WGhvbWVUb2tlbicpXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLl9hcHBsaWNhdGlvbi5zdHJlYW1pbmdUb2tlbnMgJiYgdGhpcy5fYXBwbGljYXRpb24uc3RyZWFtaW5nVG9rZW5zLnhIb21lVG9rZW4pIHtcbiAgICAgICAgICAgICAgICByZXNvbHZlKHRoaXMuX2FwcGxpY2F0aW9uLnN0cmVhbWluZ1Rva2Vucy54SG9tZVRva2VuLmRhdGEpXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJlc29sdmUobnVsbClcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICB9XG5cbiAgICBzZXRYaG9tZVRva2VuRGVmYXVsdChuYW1lOiBzdHJpbmcpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgICAgICAgICAgdGhpcy5fYXBwbGljYXRpb24uc3RyZWFtaW5nVG9rZW5zLnhIb21lVG9rZW4uc2V0RGVmYXVsdFJlZ2lvbihuYW1lKVxuICAgICAgICAgICAgcmVzb2x2ZShudWxsKVxuICAgICAgICB9KVxuICAgIH1cblxuICAgIGdldFhjbG91ZFRva2VuKCkge1xuICAgICAgICBjb25zb2xlLmxvZygnZ2V0WGNsb3VkVG9rZW4nKVxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy5fYXBwbGljYXRpb24uc3RyZWFtaW5nVG9rZW5zICYmIHRoaXMuX2FwcGxpY2F0aW9uLnN0cmVhbWluZ1Rva2Vucy54Q2xvdWRUb2tlbikge1xuICAgICAgICAgICAgICAgIHJlc29sdmUodGhpcy5fYXBwbGljYXRpb24uc3RyZWFtaW5nVG9rZW5zLnhDbG91ZFRva2VuLmRhdGEpXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJlc29sdmUobnVsbClcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICB9XG5cbiAgICBzZXRYY2xvdWRUb2tlbkRlZmF1bHQobmFtZTogc3RyaW5nKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLl9hcHBsaWNhdGlvbi5zdHJlYW1pbmdUb2tlbnMueENsb3VkVG9rZW4pIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9hcHBsaWNhdGlvbi5zdHJlYW1pbmdUb2tlbnMueENsb3VkVG9rZW4uc2V0RGVmYXVsdFJlZ2lvbihuYW1lKVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVzb2x2ZSh7fSlcbiAgICAgICAgfSlcbiAgICB9XG5cbiAgICBnZXRUaXRsZXMoKSB7XG4gICAgICAgIGNvbnN0IHN0cmVhbWluZ1Rva2VucyA9IHRoaXMuX2FwcGxpY2F0aW9uLnN0cmVhbWluZ1Rva2VucztcbiAgICAgICAgY29uc3QgX3hDbG91ZEFwaSA9IG5ldyB4Q2xvdWRBcGkoXG4gICAgICAgICAgICB0aGlzLl9hcHBsaWNhdGlvbixcbiAgICAgICAgICAgIHN0cmVhbWluZ1Rva2Vucy54Q2xvdWRUb2tlbi5nZXREZWZhdWx0UmVnaW9uKCkuYmFzZVVyaS5zdWJzdHJpbmcoOCksXG4gICAgICAgICAgICBzdHJlYW1pbmdUb2tlbnMueENsb3VkVG9rZW4uZGF0YS5nc1Rva2VuLFxuICAgICAgICAgICAgXCJjbG91ZFwiXG4gICAgICAgICk7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICBfeENsb3VkQXBpLmdldFRpdGxlcygpLnRoZW4oKHRpdGxlczogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZSh0aXRsZXMpXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLmNhdGNoKChlcnJvcikgPT4ge1xuICAgICAgICAgICAgICAgIHJlamVjdChlcnJvcilcbiAgICAgICAgICAgIH0pXG4gICAgICAgIH0pXG4gICAgfVxuXG4gICAgZ2V0R2FtZVBhc3NQcm9kdWN0cyh0aXRsZXM6IGFueSkge1xuICAgICAgICByZXR1cm4gdGhpcy5fdGl0bGVNYW5hZ2VyLmdldEdhbWVQYXNzUHJvZHVjdHModGl0bGVzKVxuICAgIH1cblxuICAgIGdldE5ld1RpdGxlcygpe1xuICAgICAgICByZXR1cm4gdGhpcy5fdGl0bGVNYW5hZ2VyLmdldE5ld1RpdGxlcygpXG4gICAgfVxufSIsImltcG9ydCBUb2tlblN0b3JlIGZyb20gJy4vdG9rZW5zdG9yZSdcbmltcG9ydCBYYWwgZnJvbSAnLi94YWwnXG5cbmV4cG9ydCB7XG4gICAgVG9rZW5TdG9yZSxcbiAgICBYYWwsXG59IiwiaW1wb3J0IHsgSW5jb21pbmdIdHRwSGVhZGVycyB9IGZyb20gJ2h0dHAnXG5pbXBvcnQgaHR0cHMgZnJvbSAnaHR0cHMnXG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEh0dHAge1xuXG4gICAgZ2V0UmVxdWVzdChob3N0LCBwYXRoLCBoZWFkZXJzKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZTxIdHRwUmVzcG9uc2U+KChyZXNvbHZlLCByZWplY3QpID0+IHtcblxuICAgICAgICAgICAgY29uc3QgaG9zdEhlYWRlcnMgPSB7XG4gICAgICAgICAgICAgICAgLy8gJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgICAgICAgICAgICAuLi5oZWFkZXJzLFxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBvcHRpb25zID0ge1xuICAgICAgICAgICAgICAgIG1ldGhvZDogJ0dFVCcsXG4gICAgICAgICAgICAgICAgaG9zdG5hbWU6IGhvc3QsXG4gICAgICAgICAgICAgICAgcGF0aDogcGF0aCxcbiAgICAgICAgICAgICAgICBwb3J0OiA0NDMsXG4gICAgICAgICAgICAgICAgaGVhZGVyczogaG9zdEhlYWRlcnNcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgcmVxID0gaHR0cHMucmVxdWVzdChvcHRpb25zLCAocmVzKSA9PiB7XG4gICAgICAgICAgICAgICAgbGV0IHJlc3BvbnNlRGF0YSA9ICcnXG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgcmVzLm9uKCdkYXRhJywgKGRhdGEpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2VEYXRhICs9IGRhdGFcbiAgICAgICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICAgICAgcmVzLm9uKCdjbG9zZScsICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYocmVzLnN0YXR1c0NvZGUgPT0gMjAwIHx8IHJlcy5zdGF0dXNDb2RlID09IDIwNCl7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZihyZXNwb25zZURhdGEudG9TdHJpbmcoKSA9PT0gJycpe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUobmV3IEh0dHBSZXNwb25zZSh7fSwgcmVzLmhlYWRlcnMpKVxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKG5ldyBIdHRwUmVzcG9uc2UoSlNPTi5wYXJzZShyZXNwb25zZURhdGEudG9TdHJpbmcoKSksIHJlcy5oZWFkZXJzKSlcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzY29kZTogcmVzLnN0YXR1c0NvZGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyczogcmVzLmhlYWRlcnMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9keTogcmVzcG9uc2VEYXRhLnRvU3RyaW5nKCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogJ0Vycm9yIGZldGNoaW5nICcraG9zdCtwYXRoXG4gICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICBcbiAgICAgICAgICAgIHJlcS5vbignZXJyb3InLCAoZXJyb3IpID0+IHtcbiAgICAgICAgICAgICAgICByZWplY3QoZXJyb3IpXG4gICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICByZXEuZW5kKClcblxuICAgICAgICB9KVxuICAgIH1cblxuICAgIHBvc3RSZXF1ZXN0KGhvc3QsIHBhdGgsIGhlYWRlcnMsIGRhdGEpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlPEh0dHBSZXNwb25zZT4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuXG4gICAgICAgICAgICBjb25zdCBob3N0SGVhZGVycyA9IHtcbiAgICAgICAgICAgICAgICAvLyAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgICAgICAgICAgIC4uLmhlYWRlcnMsXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmKHR5cGVvZiBkYXRhID09PSAnb2JqZWN0Jyl7XG4gICAgICAgICAgICAgICAgZGF0YSA9IEpTT04uc3RyaW5naWZ5KGRhdGEpXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IG9wdGlvbnMgPSB7XG4gICAgICAgICAgICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICAgICAgICAgICAgaG9zdG5hbWU6IGhvc3QsXG4gICAgICAgICAgICAgICAgcGF0aDogcGF0aCxcbiAgICAgICAgICAgICAgICBwb3J0OiA0NDMsXG4gICAgICAgICAgICAgICAgaGVhZGVyczogaG9zdEhlYWRlcnNcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gY29uc29sZS5sb2cob3B0aW9ucywgZGF0YSlcblxuICAgICAgICAgICAgY29uc3QgcmVxID0gaHR0cHMucmVxdWVzdChvcHRpb25zLCAocmVzKSA9PiB7XG4gICAgICAgICAgICAgICAgbGV0IHJlc3BvbnNlRGF0YSA9ICcnXG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgcmVzLm9uKCdkYXRhJywgKGRhdGEpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2VEYXRhICs9IGRhdGFcbiAgICAgICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICAgICAgcmVzLm9uKCdjbG9zZScsICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYocmVzLnN0YXR1c0NvZGUgPT0gMjAwIHx8IHJlcy5zdGF0dXNDb2RlID09IDIwMil7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZihyZXNwb25zZURhdGEudG9TdHJpbmcoKSA9PT0gJycpe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUobmV3IEh0dHBSZXNwb25zZSh7fSwgcmVzLmhlYWRlcnMpKVxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKG5ldyBIdHRwUmVzcG9uc2UoSlNPTi5wYXJzZShyZXNwb25zZURhdGEudG9TdHJpbmcoKSksIHJlcy5oZWFkZXJzKSlcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzY29kZTogcmVzLnN0YXR1c0NvZGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyczogcmVzLmhlYWRlcnMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9keTogcmVzcG9uc2VEYXRhLnRvU3RyaW5nKCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogJ0Vycm9yIGZldGNoaW5nICcraG9zdCtwYXRoXG4gICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICBcbiAgICAgICAgICAgIHJlcS5vbignZXJyb3InLCAoZXJyb3IpID0+IHtcbiAgICAgICAgICAgICAgICByZWplY3QoZXJyb3IpXG4gICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICByZXEud3JpdGUoZGF0YSlcbiAgICAgICAgICAgIHJlcS5lbmQoKVxuXG4gICAgICAgIH0pXG4gICAgfVxufVxuXG5cbmV4cG9ydCBjbGFzcyBIdHRwUmVzcG9uc2Uge1xuXG4gICAgZGF0YTphbnlcbiAgICBoZWFkZXJzOkluY29taW5nSHR0cEhlYWRlcnNcblxuICAgIGNvbnN0cnVjdG9yKGRhdGE6YW55LCBoZWFkZXJzOkluY29taW5nSHR0cEhlYWRlcnMpe1xuICAgICAgICB0aGlzLmRhdGEgPSBkYXRhXG4gICAgICAgIHRoaXMuaGVhZGVycyA9IGhlYWRlcnNcbiAgICB9XG5cbiAgICBoZWFkZXIoKXtcbiAgICAgICAgcmV0dXJuIHRoaXMuaGVhZGVyc1xuICAgIH1cblxuICAgIGJvZHkoKXtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGF0YVxuICAgIH1cbn0iLCJleHBvcnQgZGVmYXVsdCBjbGFzcyBUb2tlbiB7XG4gICAgZGF0YTphbnlcblxuICAgIGNvbnN0cnVjdG9yKGRhdGEpIHtcbiAgICAgICAgdGhpcy5kYXRhID0gZGF0YVxuICAgIH1cblxuICAgIGNhbGN1bGF0ZVNlY29uZHNMZWZ0KGRhdGU6RGF0ZSl7XG4gICAgICAgIGNvbnN0IGV4cGlyZXNPbiA9IGRhdGVcbiAgICAgICAgY29uc3QgY3VycmVudERhdGUgPSBuZXcgRGF0ZSgpXG4gICAgICAgIHJldHVybiBNYXRoLmZsb29yKChleHBpcmVzT24uZ2V0VGltZSgpIC0gY3VycmVudERhdGUuZ2V0VGltZSgpKSAvIDEwMDApXG4gICAgfVxuXG4gICAgZ2V0U2Vjb25kc1ZhbGlkKCl7XG4gICAgICAgIGNvbnNvbGUubG9nKCdXYXJuaW5nOiBnZXRTZWNvbmRzVmFsaWQgbm90IGltcGxlbWVudGVkJylcblxuICAgICAgICByZXR1cm4gMFxuICAgIH1cblxuICAgIGlzVmFsaWQoKXsgXG4gICAgICAgIGNvbnNvbGUubG9nKCdXYXJuaW5nOiBpc1ZhbGlkIG5vdCBpbXBsZW1lbnRlZCcpXG5cbiAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuXG4gICAgZ2V0VXNlckhhc2goKXtcbiAgICAgICAgaWYoJ1VzZXJUb2tlbicgaW4gdGhpcy5kYXRhKXtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmRhdGEuVXNlclRva2VuLkRpc3BsYXlDbGFpbXMueHVpWzBdLnVoc1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuXG4gICAgZ2V0R2FtZXJ0YWcoKXtcbiAgICAgICAgaWYoJ0F1dGhvcml6YXRpb25Ub2tlbicgaW4gdGhpcy5kYXRhKXtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmRhdGEuQXV0aG9yaXphdGlvblRva2VuLkRpc3BsYXlDbGFpbXMueHVpWzBdLmd0Z1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxufSIsImltcG9ydCBUb2tlbiBmcm9tICcuLi90b2tlbidcblxuZXhwb3J0IGludGVyZmFjZSBJRGV2aWNlQ29kZSB7XG4gICAgSXNzdWVJbnN0YW50OiBzdHJpbmdcbiAgICBOb3RBZnRlcjogc3RyaW5nXG4gICAgVG9rZW46IHN0cmluZ1xuICAgIERpc3BsYXlDbGFpbXM6IHtcbiAgICAgICAgeHVpOiB7XG4gICAgICAgICAgICB1aHM6IHN0cmluZ1xuICAgICAgICB9XG4gICAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEZXZpY2VUb2tlbiBleHRlbmRzIFRva2VuIHtcbiAgICBkYXRhOklEZXZpY2VDb2RlXG5cbiAgICBjb25zdHJ1Y3RvcihkYXRhOklEZXZpY2VDb2RlKSB7XG4gICAgICAgIHN1cGVyKGRhdGEpXG4gICAgICAgIHRoaXMuZGF0YSA9IGRhdGFcbiAgICB9XG5cbiAgICBnZXRTZWNvbmRzVmFsaWQoKXtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2FsY3VsYXRlU2Vjb25kc0xlZnQobmV3IERhdGUodGhpcy5kYXRhLk5vdEFmdGVyKSlcbiAgICB9XG5cbiAgICBpc1ZhbGlkKCl7XG5cbiAgICAgICAgaWYodGhpcy5jYWxjdWxhdGVTZWNvbmRzTGVmdChuZXcgRGF0ZSh0aGlzLmRhdGEuTm90QWZ0ZXIpKSA8PSAwKXtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRydWVcbiAgICB9XG59IiwiaW1wb3J0IFRva2VuIGZyb20gJy4uL3Rva2VuJ1xuaW1wb3J0IFVzZXJUb2tlbiBmcm9tICcuL3VzZXJ0b2tlbidcblxuZXhwb3J0IGludGVyZmFjZSBJTXNhbFRva2VuIHtcbiAgICBscHQ6IHN0cmluZ1xuICAgIHJlZnJlc2hfdG9rZW46IHN0cmluZ1xuICAgIHVzZXJfaWQ6IHN0cmluZ1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBNc2FsVG9rZW4gZXh0ZW5kcyBUb2tlbiB7XG4gICAgZGF0YTpJTXNhbFRva2VuXG5cbiAgICBjb25zdHJ1Y3RvcihkYXRhOklNc2FsVG9rZW4pIHtcbiAgICAgICAgc3VwZXIoZGF0YSlcbiAgICAgICAgdGhpcy5kYXRhID0gZGF0YVxuICAgIH1cbn0iLCJpbXBvcnQgVG9rZW4gZnJvbSAnLi4vdG9rZW4nXG5cbmV4cG9ydCBpbnRlcmZhY2UgSVNpc3VUb2tlbiB7XG4gICAgRGV2aWNlVG9rZW46IHN0cmluZ1xuICAgIFRpdGxlVG9rZW46IElTaXN1VGl0bGVUb2tlblxuICAgIFVzZXJUb2tlbjogSVNpc3VVc2VyVG9rZW5cbiAgICBBdXRob3JpemF0aW9uVG9rZW5cbiAgICBXZWJQYWdlOiBzdHJpbmdcbiAgICBTYW5kYm94OiBzdHJpbmdcbiAgICBVc2VNb2Rlcm5HYW1lcnRhZzogYm9vbGVhblxuICAgIEZsb3c6IHN0cmluZ1xufVxuXG5pbnRlcmZhY2UgSVNpc3VVc2VyVG9rZW4ge1xuICAgIElzc3VlSW5zdGFudDogc3RyaW5nXG4gICAgTm90QWZ0ZXI6IHN0cmluZ1xuICAgIFRva2VuOiBzdHJpbmdcbiAgICBEaXNwbGF5Q2xhaW1zOiB7XG4gICAgICAgIHh1aToge1xuICAgICAgICAgICAgdWhzOiBzdHJpbmdcbiAgICAgICAgfVxuICAgIH1cbn1cblxuaW50ZXJmYWNlIElTaXN1VGl0bGVUb2tlbiB7XG4gICAgSXNzdWVJbnN0YW50OiBzdHJpbmdcbiAgICBOb3RBZnRlcjogc3RyaW5nXG4gICAgVG9rZW46IHN0cmluZ1xuICAgIERpc3BsYXlDbGFpbXM6IHtcbiAgICAgICAgeHRpOiB7XG4gICAgICAgICAgICB0aWQ6IHN0cmluZ1xuICAgICAgICB9XG4gICAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTaXN1VG9rZW4gZXh0ZW5kcyBUb2tlbiB7XG4gICAgZGF0YTpJU2lzdVRva2VuXG5cbiAgICBjb25zdHJ1Y3RvcihkYXRhOklTaXN1VG9rZW4pIHtcbiAgICAgICAgc3VwZXIoZGF0YSlcbiAgICAgICAgdGhpcy5kYXRhID0gZGF0YVxuICAgIH1cblxuICAgIGdldFNlY29uZHNWYWxpZCgpe1xuICAgICAgICBjb25zdCBzZWNvbmRzTGVmdFRpdGxlID0gdGhpcy5jYWxjdWxhdGVTZWNvbmRzTGVmdChuZXcgRGF0ZSh0aGlzLmRhdGEuVGl0bGVUb2tlbi5Ob3RBZnRlcikpXG4gICAgICAgIGNvbnN0IHNlY29uZHNMZWZ0VXNlciA9IHRoaXMuY2FsY3VsYXRlU2Vjb25kc0xlZnQobmV3IERhdGUodGhpcy5kYXRhLlVzZXJUb2tlbi5Ob3RBZnRlcikpXG4gICAgICAgIGNvbnN0IHNlY29uZHNMZWZ0QXV0aG9yaXphdGlvbiA9IHRoaXMuY2FsY3VsYXRlU2Vjb25kc0xlZnQobmV3IERhdGUodGhpcy5kYXRhLkF1dGhvcml6YXRpb25Ub2tlbi5Ob3RBZnRlcikpXG4gICAgICAgIHJldHVybiBNYXRoLm1pbihzZWNvbmRzTGVmdFRpdGxlLCBzZWNvbmRzTGVmdFVzZXIsIHNlY29uZHNMZWZ0QXV0aG9yaXphdGlvbilcbiAgICB9XG5cbiAgICBpc1ZhbGlkKCl7XG4gICAgICAgIGNvbnN0IHNlY29uZHNMZWZ0VGl0bGUgPSB0aGlzLmNhbGN1bGF0ZVNlY29uZHNMZWZ0KG5ldyBEYXRlKHRoaXMuZGF0YS5UaXRsZVRva2VuLk5vdEFmdGVyKSlcbiAgICAgICAgaWYoc2Vjb25kc0xlZnRUaXRsZSA8PSAwKXtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgc2Vjb25kc0xlZnRVc2VyID0gdGhpcy5jYWxjdWxhdGVTZWNvbmRzTGVmdChuZXcgRGF0ZSh0aGlzLmRhdGEuVXNlclRva2VuLk5vdEFmdGVyKSlcbiAgICAgICAgaWYoc2Vjb25kc0xlZnRVc2VyIDw9IDApe1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBzZWNvbmRzTGVmdEF1dGhvcml6YXRpb24gPSB0aGlzLmNhbGN1bGF0ZVNlY29uZHNMZWZ0KG5ldyBEYXRlKHRoaXMuZGF0YS5BdXRob3JpemF0aW9uVG9rZW4uTm90QWZ0ZXIpKVxuICAgICAgICBpZihzZWNvbmRzTGVmdEF1dGhvcml6YXRpb24gPD0gMCl7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuXG4gICAgZ2V0VXNlckhhc2goKXtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGF0YS5Vc2VyVG9rZW4uRGlzcGxheUNsYWltcy54dWlbMF0udWhzXG4gICAgfVxuXG4gICAgZ2V0R2FtZXJ0YWcoKXtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGF0YS5BdXRob3JpemF0aW9uVG9rZW4uRGlzcGxheUNsYWltcy54dWlbMF0uZ3RnXG4gICAgfVxufSIsImltcG9ydCBUb2tlbiBmcm9tICcuLi90b2tlbidcblxuZXhwb3J0IGludGVyZmFjZSBJU3RyZWFtVG9rZW4ge1xuICAgIG9mZmVyaW5nU2V0dGluZ3M6IElPZmZlcmluZ1NldHRpbmdzXG4gICAgbWFya2V0OiBzdHJpbmdcbiAgICBnc1Rva2VuOiBzdHJpbmdcbiAgICB0b2tlblR5cGU6IHN0cmluZ1xuICAgIGR1cmF0aW9uSW5TZWNvbmRzOiBudW1iZXJcbn1cbiAgXG5leHBvcnQgaW50ZXJmYWNlIElPZmZlcmluZ1NldHRpbmdzIHtcbiAgICBhbGxvd1JlZ2lvblNlbGVjdGlvbjogYm9vbGVhblxuICAgIHJlZ2lvbnM6IElSZWdpb25bXVxuICAgIHNlbGVjdGFibGVTZXJ2ZXJUeXBlczogYW55XG4gICAgY2xpZW50Q2xvdWRTZXR0aW5nczogSUNsaWVudENsb3VkU2V0dGluZ3Ncbn1cblxuZXhwb3J0IGludGVyZmFjZSBJUmVnaW9uIHtcbiAgICBuYW1lOiBzdHJpbmdcbiAgICBiYXNlVXJpOiBzdHJpbmdcbiAgICBuZXR3b3JrVGVzdEhvc3RuYW1lOiBzdHJpbmdcbiAgICBpc0RlZmF1bHQ6IGJvb2xlYW5cbiAgICBzeXN0ZW1VcGRhdGVHcm91cHM6IGFueVxuICAgIGZhbGxiYWNrUHJpb3JpdHk6IG51bWJlclxufVxuXG5leHBvcnQgaW50ZXJmYWNlIElDbGllbnRDbG91ZFNldHRpbmdzIHtcbiAgICBFbnZpcm9ubWVudHM6IElFbnZpcm9ubWVudFtdXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUVudmlyb25tZW50IHtcbiAgICBOYW1lOiBzdHJpbmdcbiAgICBBdXRoQmFzZVVyaT86IHN0cmluZ1xufSAgXG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFN0cmVhbWluZ1Rva2VuIGV4dGVuZHMgVG9rZW4ge1xuXG4gICAgcHVibGljIGRhdGE6SVN0cmVhbVRva2VuXG4gICAgcHJpdmF0ZSBfb2JqZWN0Q3JlYXRlVGltZSA9IERhdGUubm93KClcblxuICAgIGNvbnN0cnVjdG9yKHRva2VuRGF0YTpJU3RyZWFtVG9rZW4pe1xuICAgICAgICBzdXBlcih0b2tlbkRhdGEpXG4gICAgICAgIHRoaXMuZGF0YSA9IHRva2VuRGF0YVxuICAgIH1cblxuICAgIGNhbGN1bGF0ZVNlY29uZHNMZWZ0KGRhdGU6RGF0ZSl7XG4gICAgICAgIGNvbnN0IGV4cGlyZXNPbiA9IGRhdGVcbiAgICAgICAgY29uc3QgY3VycmVudERhdGUgPSBuZXcgRGF0ZSgpXG4gICAgICAgIHJldHVybiBNYXRoLmZsb29yKChleHBpcmVzT24uZ2V0VGltZSgpIC0gY3VycmVudERhdGUuZ2V0VGltZSgpKSAvIDEwMDApXG4gICAgfVxuXG4gICAgZ2V0U2Vjb25kc1ZhbGlkKCl7XG4gICAgICAgIGlmKHRoaXMuX29iamVjdENyZWF0ZVRpbWUgKyAodGhpcy5kYXRhLmR1cmF0aW9uSW5TZWNvbmRzKjEwMDApKXtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNhbGN1bGF0ZVNlY29uZHNMZWZ0KG5ldyBEYXRlKHRoaXMuX29iamVjdENyZWF0ZVRpbWUgKyAodGhpcy5kYXRhLmR1cmF0aW9uSW5TZWNvbmRzKjEwMDApKSlcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiAwXG4gICAgfVxuXG4gICAgaXNWYWxpZCgpe1xuICAgICAgICBpZih0aGlzLl9vYmplY3RDcmVhdGVUaW1lICsgKHRoaXMuZGF0YS5kdXJhdGlvbkluU2Vjb25kcyoxMDAwKSl7XG4gICAgICAgICAgICBjb25zdCBzZWNvbmRzTGVmdCA9IHRoaXMuY2FsY3VsYXRlU2Vjb25kc0xlZnQobmV3IERhdGUodGhpcy5fb2JqZWN0Q3JlYXRlVGltZSArICh0aGlzLmRhdGEuZHVyYXRpb25JblNlY29uZHMqMTAwMCkpKVxuICAgICAgICAgICAgcmV0dXJuIHNlY29uZHNMZWZ0ID4gMFxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuXG4gICAgZ2V0TWFya2V0KCl7XG4gICAgICAgIHJldHVybiB0aGlzLmRhdGEubWFya2V0XG4gICAgfVxuXG4gICAgZ2V0UmVnaW9ucygpe1xuICAgICAgICByZXR1cm4gdGhpcy5kYXRhLm9mZmVyaW5nU2V0dGluZ3MucmVnaW9uc1xuICAgIH1cblxuICAgIGdldERlZmF1bHRSZWdpb24oKXtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGF0YS5vZmZlcmluZ1NldHRpbmdzLnJlZ2lvbnMuZmlsdGVyKHJlZ2lvbiA9PiByZWdpb24uaXNEZWZhdWx0KVswXVxuICAgIH1cblxuICAgIHNldERlZmF1bHRSZWdpb24obmFtZTogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuZGF0YS5vZmZlcmluZ1NldHRpbmdzLnJlZ2lvbnMuZm9yRWFjaChyZWdpb24gPT4ge1xuICAgICAgICAgICAgaWYgKHJlZ2lvbi5uYW1lID09PSBuYW1lKSB7XG4gICAgICAgICAgICAgICAgcmVnaW9uLmlzRGVmYXVsdCA9IHRydWVcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmVnaW9uLmlzRGVmYXVsdCA9IGZhbHNlXG4gICAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgfVxuXG4gICAgZ2V0RW52aXJvbm1lbnRzKCl7XG4gICAgICAgIHJldHVybiB0aGlzLmRhdGEub2ZmZXJpbmdTZXR0aW5ncy5jbGllbnRDbG91ZFNldHRpbmdzLkVudmlyb25tZW50c1xuICAgIH1cbn0iLCJpbXBvcnQgVG9rZW4gZnJvbSAnLi4vdG9rZW4nXG5cbmV4cG9ydCBpbnRlcmZhY2UgSVVzZXJUb2tlbiB7XG4gICAgdG9rZW5fdHlwZTogc3RyaW5nXG4gICAgZXhwaXJlc19pbjogbnVtYmVyXG4gICAgc2NvcGU6IHN0cmluZ1xuICAgIGFjY2Vzc190b2tlbjogc3RyaW5nXG4gICAgcmVmcmVzaF90b2tlbjogc3RyaW5nXG4gICAgdXNlcl9pZDogc3RyaW5nXG4gICAgZXhwaXJlc19vbjogc3RyaW5nXG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFVzZXJUb2tlbiBleHRlbmRzIFRva2VuIHtcbiAgICBkYXRhOklVc2VyVG9rZW5cblxuICAgIGNvbnN0cnVjdG9yKGRhdGE6SVVzZXJUb2tlbikge1xuICAgICAgICBzdXBlcihkYXRhKVxuICAgICAgICB0aGlzLmRhdGEgPSBkYXRhXG4gICAgfVxuXG4gICAgY2FsY3VsYXRlU2Vjb25kc0xlZnQoZGF0ZTpEYXRlKXtcbiAgICAgICAgY29uc3QgZXhwaXJlc09uID0gZGF0ZVxuICAgICAgICBjb25zdCBjdXJyZW50RGF0ZSA9IG5ldyBEYXRlKClcbiAgICAgICAgcmV0dXJuIE1hdGguZmxvb3IoKGV4cGlyZXNPbi5nZXRUaW1lKCkgLSBjdXJyZW50RGF0ZS5nZXRUaW1lKCkpIC8gMTAwMClcbiAgICB9XG5cbiAgICBnZXRTZWNvbmRzVmFsaWQoKXtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2FsY3VsYXRlU2Vjb25kc0xlZnQobmV3IERhdGUodGhpcy5kYXRhLmV4cGlyZXNfb24pKVxuICAgIH1cblxuICAgIGlzVmFsaWQoKXtcbiAgICAgICAgY29uc3Qgc2Vjb25kc0xlZnQgPSB0aGlzLmNhbGN1bGF0ZVNlY29uZHNMZWZ0KG5ldyBEYXRlKHRoaXMuZGF0YS5leHBpcmVzX29uKSlcbiAgICAgICAgcmV0dXJuIHNlY29uZHNMZWZ0ID4gMFxuICAgIH1cbn0iLCJpbXBvcnQgVG9rZW4gZnJvbSAnLi4vdG9rZW4nXG5cbmV4cG9ydCBpbnRlcmZhY2UgSVhzdHNUb2tlbiB7XG4gICAgSXNzdWVJbnN0YW50OiBzdHJpbmdcbiAgICBOb3RBZnRlcjogc3RyaW5nXG4gICAgVG9rZW46IHN0cmluZ1xuICAgIERpc3BsYXlDbGFpbXM6IHtcbiAgICAgICAgeHVpOiB7XG4gICAgICAgICAgICB1aHM6IHN0cmluZ1xuICAgICAgICB9XG4gICAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBYc3RzVG9rZW4gZXh0ZW5kcyBUb2tlbiB7XG4gICAgZGF0YTpJWHN0c1Rva2VuXG5cbiAgICBjb25zdHJ1Y3RvcihkYXRhOklYc3RzVG9rZW4pIHtcbiAgICAgICAgc3VwZXIoZGF0YSlcbiAgICAgICAgdGhpcy5kYXRhID0gZGF0YVxuICAgIH1cblxuICAgIGdldFNlY29uZHNWYWxpZCgpe1xuICAgICAgICByZXR1cm4gdGhpcy5jYWxjdWxhdGVTZWNvbmRzTGVmdChuZXcgRGF0ZSh0aGlzLmRhdGEuTm90QWZ0ZXIpKVxuICAgIH1cblxuICAgIGlzVmFsaWQoKXtcblxuICAgICAgICBpZih0aGlzLmNhbGN1bGF0ZVNlY29uZHNMZWZ0KG5ldyBEYXRlKHRoaXMuZGF0YS5Ob3RBZnRlcikpIDw9IDApe1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cbn0iLCJpbXBvcnQgU2lzdVRva2VuIGZyb20gJy4vbGliL3Rva2Vucy9zaXN1dG9rZW4nXG5pbXBvcnQgVXNlclRva2VuIGZyb20gJy4vbGliL3Rva2Vucy91c2VydG9rZW4nXG5pbXBvcnQgZnMgZnJvbSAnZnMnXG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRva2VuU3RvcmUge1xuXG4gICAgX2ZpbGVwYXRoOnN0cmluZyA9ICcnXG5cbiAgICAvLyBNYWluIHRva2Vuc1xuICAgIF91c2VyVG9rZW46VXNlclRva2VuIHwgdW5kZWZpbmVkXG4gICAgX3Npc3VUb2tlbjpTaXN1VG9rZW4gfCB1bmRlZmluZWRcbiAgICBfand0S2V5czphbnlcblxuICAgIC8vIFN1Yi1Ub2tlbnNcbiAgICBsb2FkKGZpbGVwYXRoOnN0cmluZywgc2lsZW50ID0gZmFsc2UpIHtcbiAgICAgICAgdGhpcy5fZmlsZXBhdGggPSBmaWxlcGF0aFxuXG4gICAgICAgIGlmKGZzLmV4aXN0c1N5bmMoZmlsZXBhdGgpKXtcbiAgICAgICAgICAgIGNvbnN0IGZpbGVDb250ZW50cyA9IGZzLnJlYWRGaWxlU3luYyhmaWxlcGF0aClcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmxvYWRKc29uKGZpbGVDb250ZW50cy50b1N0cmluZygpKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYoISBzaWxlbnQpe1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVG9rZW5TdG9yZTogRmlsZSBub3QgZm91bmQ6ICcgKyBmaWxlcGF0aClcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cblxuICAgIGxvYWRKc29uKGpzb246c3RyaW5nKSB7XG4gICAgICAgIGNvbnN0IGpzb25EYXRhOnsgdXNlclRva2VuOmFueSwgc2lzdVRva2VuOmFueSwgand0S2V5czphbnkgfSA9IEpTT04ucGFyc2UoanNvbilcblxuICAgICAgICBpZihqc29uRGF0YS51c2VyVG9rZW4pe1xuICAgICAgICAgICAgdGhpcy5fdXNlclRva2VuID0gbmV3IFVzZXJUb2tlbihqc29uRGF0YS51c2VyVG9rZW4pXG4gICAgICAgIH1cblxuICAgICAgICBpZihqc29uRGF0YS5zaXN1VG9rZW4pe1xuICAgICAgICAgICAgdGhpcy5fc2lzdVRva2VuID0gbmV3IFNpc3VUb2tlbihqc29uRGF0YS5zaXN1VG9rZW4pXG4gICAgICAgIH1cblxuICAgICAgICBpZihqc29uRGF0YS5qd3RLZXlzKXtcbiAgICAgICAgICAgIHRoaXMuX2p3dEtleXMgPSBqc29uRGF0YS5qd3RLZXlzXG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cblxuICAgIHNldFVzZXJUb2tlbih1c2VyVG9rZW46VXNlclRva2VuKSB7XG4gICAgICAgIGNvbnN0IGV4cGlyZURhdGUgPSBuZXcgRGF0ZSgpXG4gICAgICAgIGV4cGlyZURhdGUuc2V0U2Vjb25kcyhleHBpcmVEYXRlLmdldFNlY29uZHMoKSArIHVzZXJUb2tlbi5kYXRhLmV4cGlyZXNfaW4pXG5cbiAgICAgICAgdGhpcy5fdXNlclRva2VuID0gbmV3IFVzZXJUb2tlbih7IC4uLnVzZXJUb2tlbi5kYXRhLCBleHBpcmVzX29uOiBleHBpcmVEYXRlLnRvSVNPU3RyaW5nKCkgfSlcbiAgICB9XG5cbiAgICBnZXRVc2VyVG9rZW4oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl91c2VyVG9rZW5cbiAgICB9XG5cbiAgICBzZXRTaXN1VG9rZW4oc2lzdVRva2VuOlNpc3VUb2tlbikge1xuICAgICAgICB0aGlzLl9zaXN1VG9rZW4gPSBuZXcgU2lzdVRva2VuKHNpc3VUb2tlbi5kYXRhKVxuICAgIH1cblxuICAgIGdldFNpc3VUb2tlbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Npc3VUb2tlblxuICAgIH1cblxuICAgIHNldEp3dEtleXMoand0S2V5czphbnkpIHtcbiAgICAgICAgdGhpcy5fand0S2V5cyA9IGp3dEtleXNcbiAgICB9XG5cbiAgICBzYXZlKCkge1xuICAgICAgICBjb25zdCBkYXRhID0ge1xuICAgICAgICAgICAgdXNlclRva2VuOiB0aGlzLl91c2VyVG9rZW4/LmRhdGEsXG4gICAgICAgICAgICBzaXN1VG9rZW46IHRoaXMuX3Npc3VUb2tlbj8uZGF0YSxcbiAgICAgICAgICAgIGp3dEtleXM6IHRoaXMuX2p3dEtleXNcbiAgICAgICAgfVxuXG4gICAgICAgIGZzLndyaXRlRmlsZVN5bmModGhpcy5fZmlsZXBhdGgsIEpTT04uc3RyaW5naWZ5KGRhdGEsIG51bGwsIDIpKVxuICAgIH1cblxuICAgIHJlbW92ZUFsbCgpIHtcbiAgICAgICAgZnMud3JpdGVGaWxlU3luYyh0aGlzLl9maWxlcGF0aCwgSlNPTi5zdHJpbmdpZnkoe30pKVxuICAgIH1cblxuICAgIGhhc1ZhbGlkQXV0aFRva2VucygpIHtcbiAgICAgICAgaWYodGhpcy5fdXNlclRva2VuKXtcbiAgICAgICAgICAgIGlmKCEgdGhpcy5fdXNlclRva2VuLmlzVmFsaWQoKSl7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgICAgfVxuXG4gICAgICAgIGlmKHRoaXMuX3Npc3VUb2tlbil7XG4gICAgICAgICAgICBpZighIHRoaXMuX3VzZXJUb2tlbi5pc1ZhbGlkKCkpe1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cbn0iLCJpbXBvcnQgSHR0cCBmcm9tICcuL2xpYi9odHRwJ1xuaW1wb3J0IGNyeXB0bywgeyBzdWJ0bGUsIEtleU9iamVjdCB9IGZyb20gJ2NyeXB0bydcbmltcG9ydCB7IGV4cG9ydEpXSyB9IGZyb20gJ2pvc2UnXG5cbmltcG9ydCBEZXZpY2VUb2tlbiBmcm9tICcuL2xpYi90b2tlbnMvZGV2aWNldG9rZW4nXG5pbXBvcnQgU2lzdVRva2VuLCB7IElTaXN1VG9rZW4gfSBmcm9tICcuL2xpYi90b2tlbnMvc2lzdXRva2VuJ1xuaW1wb3J0IFVzZXJUb2tlbiwgeyBJVXNlclRva2VuIH0gZnJvbSAnLi9saWIvdG9rZW5zL3VzZXJ0b2tlbidcbmltcG9ydCBTdHJlYW1pbmdUb2tlbiBmcm9tICcuL2xpYi90b2tlbnMvc3RyZWFtaW5ndG9rZW4nXG5pbXBvcnQgWHN0c1Rva2VuIGZyb20gJy4vbGliL3Rva2Vucy94c3RzdG9rZW4nXG5pbXBvcnQgTXNhbFRva2VuIGZyb20gJy4vbGliL3Rva2Vucy9tc2FsdG9rZW4nXG5cbmltcG9ydCBUb2tlblN0b3JlIGZyb20gJy4vdG9rZW5zdG9yZSdcblxuY29uc3QgVVVJRCA9IHJlcXVpcmUoJ3V1aWQtMTM0NScpXG5jb25zdCBuZXh0VVVJRCA9ICgpID0+IFVVSUQudjMoeyBuYW1lc3BhY2U6ICc2YmE3YjgxMS05ZGFkLTExZDEtODBiNC0wMGMwNGZkNDMwYzgnLCBuYW1lOiBEYXRlLm5vdygpLnRvU3RyaW5nKCkgfSlcblxuaW50ZXJmYWNlIElDb2RlQ2hhbGxhbmdlIHtcbiAgICB2YWx1ZTogc3RyaW5nXG4gICAgbWV0aG9kOiBzdHJpbmdcbiAgICB2ZXJpZmllcjogc3RyaW5nXG59XG5cbmludGVyZmFjZSBJU2lzdUF1dGhlbnRpY2F0aW9uUmVzcG9uc2Uge1xuICAgIE1zYU9hdXRoUmVkaXJlY3Q6IHN0cmluZ1xuICAgIE1zYVJlcXVlc3RQYXJhbWV0ZXJzOiB7fVxuICAgIFNlc3Npb25JZDogc3RyaW5nXG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFhhbCB7XG5cbiAgICBrZXlzXG4gICAgand0S2V5c1xuXG4gICAgX2FwcCA9IHtcbiAgICAgICAgQXBwSWQ6ICcwMDAwMDAwMDRjMjBhOTA4JywgLy8nMDAwMDAwMDA0YzEyYWU2ZicsIC8vIDAwMDAwMDAwNDgxODM1MjIgPSB3b3JraW5nLCBidXQgbWluZWNyYWZ0IC0tPDw8IDAwMDAwMDAwNGMxMmFlNmYgd29ya3MsIHhib3ggYXBwXG4gICAgICAgIFRpdGxlSWQ6ICczMjgxNzgwNzgnLCAvLyczMjgxNzgwNzgnLCAvLyAxMDE2ODk4NDM5ID0gd29ya2luZ1xuICAgICAgICBSZWRpcmVjdFVyaTogJ21zLXhhbC0wMDAwMDAwMDRjMjBhOTA4Oi8vYXV0aCdcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcih0b2tlblN0b3JlPzpUb2tlblN0b3JlKXtcbiAgICAgICAgaWYodG9rZW5TdG9yZSAmJiB0b2tlblN0b3JlLl9qd3RLZXlzKXtcbiAgICAgICAgICAgIHRoaXMuc2V0S2V5cyh0b2tlblN0b3JlLl9qd3RLZXlzLmp3dCkudGhlbigoa2V5cykgPT4ge1xuICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKCdLZXlzIGxvYWRlZDonLCBrZXlzKVxuICAgICAgICAgICAgfSkuY2F0Y2goKGVycm9yKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ0ZhaWxlZCB0byBsb2FkIGtleXM6JywgZXJyb3IpXG4gICAgICAgICAgICB9KVxuICAgICAgICB9XG5cbiAgICB9XG5cbiAgICBzZXRLZXlzKG9yZ0p3dEtleSl7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICBzdWJ0bGUuaW1wb3J0S2V5KCdqd2snLCBvcmdKd3RLZXksIHsgbmFtZTogJ0VDRFNBJywgbmFtZWRDdXJ2ZTogJ1AtMjU2JyB9LCB0cnVlLCBbJ3NpZ24nXSkudGhlbihqd3RLZXkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHByaXZhdGVLZXkgPSBLZXlPYmplY3QuZnJvbShqd3RLZXkpO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5qd3RLZXlzID0ge1xuICAgICAgICAgICAgICAgICAgICByYXc6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHByaXZhdGVLZXk6IHByaXZhdGVLZXlcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgand0OiBvcmdKd3RLZXlcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByZXNvbHZlKHRoaXMuand0S2V5cylcblxuICAgICAgICAgICAgfSkuY2F0Y2goKGVycm9yKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ2tleSBlcnJvcjonLCBlcnJvcilcbiAgICAgICAgICAgICAgICByZWplY3QoZXJyb3IpXG4gICAgICAgICAgICB9KVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBnZXRLZXlzKCl7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICBpZih0aGlzLmp3dEtleXMgIT09IHVuZGVmaW5lZCl7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZSh0aGlzLmp3dEtleXMpXG5cbiAgICAgICAgICAgIH0gZWxzZSBpZih0aGlzLmtleXMgPT09IHVuZGVmaW5lZCl7XG4gICAgICAgICAgICAgICAgdGhpcy5rZXlzID0gY3J5cHRvLmdlbmVyYXRlS2V5UGFpclN5bmMoJ2VjJywgeyBuYW1lZEN1cnZlOiAnUC0yNTYnIH0pXG5cbiAgICAgICAgICAgICAgICB0aGlzLmp3dEtleXMgPSB7XG4gICAgICAgICAgICAgICAgICAgIHJhdzogdGhpcy5rZXlzXG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgZXhwb3J0SldLKHRoaXMua2V5cy5wdWJsaWNLZXkpLnRoZW4oandrID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgandrS2V5ID0geyAuLi5qd2ssIGFsZzogJ0VTMjU2JywgdXNlOiAnc2lnJyB9XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuand0S2V5cyA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJhdzogdGhpcy5rZXlzLFxuICAgICAgICAgICAgICAgICAgICAgICAgand0OiBqd2tLZXlcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGp3a0tleXMgPSB0aGlzLmp3dEtleXMucmF3LnByaXZhdGVLZXkuZXhwb3J0KHsgdHlwZTogJ3BrY3M4JywgZm9ybWF0OiAnandrJyB9KVxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldEtleXMoandrS2V5cykudGhlbihrZXlzID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoa2V5cylcbiAgICAgICAgICAgICAgICAgICAgfSkuY2F0Y2goKGVycm9yKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZWplY3QoZXJyb3IpXG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXNvbHZlKHRoaXMuand0S2V5cylcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICB9XG5cbiAgICBjb2RlQ2hhbGxhbmdlXG5cbiAgICBnZXRDb2RlQ2hhbGxhbmdlKCkge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2U8SUNvZGVDaGFsbGFuZ2U+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgIGlmKHRoaXMuY29kZUNoYWxsYW5nZSA9PT0gdW5kZWZpbmVkKXtcbiAgICAgICAgICAgICAgICBjb25zdCBjb2RlX3ZlcmlmaWVyID0gQnVmZmVyLmZyb20oY3J5cHRvLnBzZXVkb1JhbmRvbUJ5dGVzKDMyKSkudG9TdHJpbmcoJ2Jhc2U2NHVybCcpXG5cbiAgICAgICAgICAgICAgICBjb25zdCBjb2RlX2NoYWxsZW5nZSA9IGNyeXB0b1xuICAgICAgICAgICAgICAgICAgICAuY3JlYXRlSGFzaChcInNoYTI1NlwiKVxuICAgICAgICAgICAgICAgICAgICAudXBkYXRlKGNvZGVfdmVyaWZpZXIpXG4gICAgICAgICAgICAgICAgICAgIC5kaWdlc3QoKTtcblxuICAgICAgICAgICAgICAgIHRoaXMuY29kZUNoYWxsYW5nZSA9IHtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGNvZGVfY2hhbGxlbmdlLnRvU3RyaW5nKCdiYXNlNjR1cmwnKSxcbiAgICAgICAgICAgICAgICAgICAgbWV0aG9kOiAnUzI1NicsXG4gICAgICAgICAgICAgICAgICAgIHZlcmlmaWVyOiBjb2RlX3ZlcmlmaWVyLFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmVzb2x2ZSh0aGlzLmNvZGVDaGFsbGFuZ2UpXG4gICAgICAgIH0pXG4gICAgfVxuXG4gICAgZ2V0UmFuZG9tU3RhdGUoYnl0ZXMgPSA2NCkge1xuICAgICAgICByZXR1cm4gY3J5cHRvLnJhbmRvbUJ5dGVzKGJ5dGVzKS50b1N0cmluZygnYmFzZTY0dXJsJylcbiAgICB9XG5cbiAgICBnZXREZXZpY2VUb2tlbigpIHtcbiAgICAgICAgY29uc29sZS5sb2coJ2dldERldmljZVRva2VuLi4uJylcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlPERldmljZVRva2VuPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICB0aGlzLmdldEtleXMoKS50aGVuKChqd3RLZXlzOmFueSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHBheWxvYWQgPSB7XG4gICAgICAgICAgICAgICAgICAgIFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIEF1dGhNZXRob2Q6ICdQcm9vZk9mUG9zc2Vzc2lvbicsXG4gICAgICAgICAgICAgICAgICAgICAgICBJZDogYHske25leHRVVUlEKCl9fWAsXG4gICAgICAgICAgICAgICAgICAgICAgICBEZXZpY2VUeXBlOiAnQW5kcm9pZCcsXG4gICAgICAgICAgICAgICAgICAgICAgICBTZXJpYWxOdW1iZXI6IGB7JHtuZXh0VVVJRCgpfX1gLFxuICAgICAgICAgICAgICAgICAgICAgICAgVmVyc2lvbjogJzE1LjAnLFxuICAgICAgICAgICAgICAgICAgICAgICAgUHJvb2ZLZXk6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAndXNlJzogJ3NpZycsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2FsZyc6ICdFUzI1NicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2t0eSc6ICdFQycsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2Nydic6ICdQLTI1NicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3gnOiBqd3RLZXlzLmp3dC54LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICd5Jzogand0S2V5cy5qd3QueVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBSZWx5aW5nUGFydHk6ICdodHRwOi8vYXV0aC54Ym94bGl2ZS5jb20nLFxuICAgICAgICAgICAgICAgICAgICBUb2tlblR5cGU6ICdKV1QnXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgY29uc3QgYm9keSA9IEpTT04uc3RyaW5naWZ5KHBheWxvYWQpXG4gICAgICAgICAgICAgICAgY29uc3Qgc2lnbmF0dXJlID0gdGhpcy5zaWduKCdodHRwczovL2RldmljZS5hdXRoLnhib3hsaXZlLmNvbS9kZXZpY2UvYXV0aGVudGljYXRlJywgJycsIGJvZHksIGp3dEtleXMpLnRvU3RyaW5nKCdiYXNlNjQnKVxuICAgICAgICAgICAgICAgIGNvbnN0IGhlYWRlcnMgPSB7IC4uLntcbiAgICAgICAgICAgICAgICAgICAgJ3gteGJsLWNvbnRyYWN0LXZlcnNpb24nOiAnMScsXG4gICAgICAgICAgICAgICAgICAgICdDYWNoZS1Db250cm9sJzogJ25vLXN0b3JlLCBtdXN0LXJldmFsaWRhdGUsIG5vLWNhY2hlJ1xuICAgICAgICAgICAgICAgIH0sIFNpZ25hdHVyZTogc2lnbmF0dXJlIH1cbiAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIGNvbnN0IEh0dHBDbGllbnQgPSBuZXcgSHR0cCgpXG4gICAgICAgICAgICAgICAgSHR0cENsaWVudC5wb3N0UmVxdWVzdCgnZGV2aWNlLmF1dGgueGJveGxpdmUuY29tJywgJy9kZXZpY2UvYXV0aGVudGljYXRlJywgaGVhZGVycywgYm9keSkudGhlbigocmVzcG9uc2UpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShuZXcgRGV2aWNlVG9rZW4ocmVzcG9uc2UuYm9keSgpKSlcblxuICAgICAgICAgICAgICAgIH0pLmNhdGNoKChlcnJvcikgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZWplY3QoZXJyb3IpXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIH0pXG4gICAgICAgIH0pXG4gICAgfVxuXG4gICAgZG9TaXN1QXV0aGVudGljYXRpb24oZGV2aWNlVG9rZW46RGV2aWNlVG9rZW4sIGNvZGVDaGFsbGFuZ2U6SUNvZGVDaGFsbGFuZ2UsIHN0YXRlKXtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlPElTaXN1QXV0aGVudGljYXRpb25SZXNwb25zZT4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5nZXRLZXlzKCkudGhlbigoand0S2V5czphbnkpID0+IHtcblxuICAgICAgICAgICAgICAgIGNvbnN0IHBheWxvYWQgPSB7XG4gICAgICAgICAgICAgICAgICAgIEFwcElkOiB0aGlzLl9hcHAuQXBwSWQsXG4gICAgICAgICAgICAgICAgICAgIFRpdGxlSWQ6IHRoaXMuX2FwcC5UaXRsZUlkLFxuICAgICAgICAgICAgICAgICAgICBSZWRpcmVjdFVyaTogdGhpcy5fYXBwLlJlZGlyZWN0VXJpLFxuICAgICAgICAgICAgICAgICAgICBEZXZpY2VUb2tlbjogZGV2aWNlVG9rZW4uZGF0YS5Ub2tlbixcbiAgICAgICAgICAgICAgICAgICAgU2FuZGJveDogXCJSRVRBSUxcIixcbiAgICAgICAgICAgICAgICAgICAgVG9rZW5UeXBlOiBcImNvZGVcIixcbiAgICAgICAgICAgICAgICAgICAgT2ZmZXJzOiBbXCJzZXJ2aWNlOjp1c2VyLmF1dGgueGJveGxpdmUuY29tOjpNQklfU1NMXCJdLFxuICAgICAgICAgICAgICAgICAgICBRdWVyeToge1xuICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogJ2FuZHJvaWRfcGhvbmUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgY29kZV9jaGFsbGVuZ2U6IGNvZGVDaGFsbGFuZ2UudmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2RlX2NoYWxsZW5nZV9tZXRob2Q6IGNvZGVDaGFsbGFuZ2UubWV0aG9kLFxuICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGU6IHN0YXRlLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIGNvbnN0IGJvZHkgPSBKU09OLnN0cmluZ2lmeShwYXlsb2FkKVxuICAgICAgICAgICAgICAgIGNvbnN0IHNpZ25hdHVyZSA9IHRoaXMuc2lnbignaHR0cHM6Ly9zaXN1Lnhib3hsaXZlLmNvbS9hdXRoZW50aWNhdGUnLCAnJywgYm9keSwgand0S2V5cykudG9TdHJpbmcoJ2Jhc2U2NCcpXG4gICAgICAgICAgICAgICAgY29uc3QgaGVhZGVycyA9IHsgLi4ue1xuICAgICAgICAgICAgICAgICAgICAneC14YmwtY29udHJhY3QtdmVyc2lvbic6ICcxJyxcbiAgICAgICAgICAgICAgICAgICAgJ0NhY2hlLUNvbnRyb2wnOiAnbm8tc3RvcmUsIG11c3QtcmV2YWxpZGF0ZSwgbm8tY2FjaGUnLFxuICAgICAgICAgICAgICAgIH0sIFNpZ25hdHVyZTogc2lnbmF0dXJlIH1cbiAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIGNvbnN0IEh0dHBDbGllbnQgPSBuZXcgSHR0cCgpXG4gICAgICAgICAgICAgICAgSHR0cENsaWVudC5wb3N0UmVxdWVzdCgnc2lzdS54Ym94bGl2ZS5jb20nLCAnL2F1dGhlbnRpY2F0ZScsIGhlYWRlcnMsIGJvZHkpLnRoZW4oKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIC8vIEFkZCBTZXNzaW9uSWQgdG8gcmVzcG9uc2Ugb2JqZWN0XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlc0JvZHkgPSB7IFNlc3Npb25JZDogcmVzcG9uc2UuaGVhZGVyc1sneC1zZXNzaW9uaWQnXSwgLi4ucmVzcG9uc2UuYm9keSgpIH1cbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSgoIHJlc0JvZHkgYXMgSVNpc3VBdXRoZW50aWNhdGlvblJlc3BvbnNlKSlcblxuICAgICAgICAgICAgICAgIH0pLmNhdGNoKChlcnJvcikgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZWplY3QoZXJyb3IpXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIH0pXG4gICAgICAgIH0pXG4gICAgfVxuXG4gICAgZG9TaXN1QXV0aG9yaXphdGlvbih1c2VyVG9rZW46VXNlclRva2VuLCBkZXZpY2VUb2tlbjpEZXZpY2VUb2tlbiwgU2Vzc2lvbklkPzpzdHJpbmcpe1xuICAgICAgICBjb25zb2xlLmxvZygnZG9TaXN1QXV0aG9yaXphdGlvbi4uLicpXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZTxTaXN1VG9rZW4+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgIHRoaXMuZ2V0S2V5cygpLnRoZW4oKGp3dEtleXM6YW55KSA9PiB7XG5cbiAgICAgICAgICAgICAgICBjb25zdCBwYXlsb2FkID0ge1xuICAgICAgICAgICAgICAgICAgICBBY2Nlc3NUb2tlbjogJ3Q9Jyt1c2VyVG9rZW4uZGF0YS5hY2Nlc3NfdG9rZW4sXG4gICAgICAgICAgICAgICAgICAgIEFwcElkOiB0aGlzLl9hcHAuQXBwSWQsXG4gICAgICAgICAgICAgICAgICAgIERldmljZVRva2VuOiBkZXZpY2VUb2tlbi5kYXRhLlRva2VuLFxuICAgICAgICAgICAgICAgICAgICBTYW5kYm94OiBcIlJFVEFJTFwiLFxuICAgICAgICAgICAgICAgICAgICBTaXRlTmFtZTogXCJ1c2VyLmF1dGgueGJveGxpdmUuY29tXCIsXG4gICAgICAgICAgICAgICAgICAgIFVzZU1vZGVybkdhbWVydGFnOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICBQcm9vZktleToge1xuICAgICAgICAgICAgICAgICAgICAgICAgJ3VzZSc6ICdzaWcnLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ2FsZyc6ICdFUzI1NicsXG4gICAgICAgICAgICAgICAgICAgICAgICAna3R5JzogJ0VDJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICdjcnYnOiAnUC0yNTYnLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ3gnOiBqd3RLZXlzLmp3dC54LFxuICAgICAgICAgICAgICAgICAgICAgICAgJ3knOiBqd3RLZXlzLmp3dC55XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIC4uLlNlc3Npb25JZCA/IHsgU2Vzc2lvbklkOiBTZXNzaW9uSWQgfSA6IHt9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIGNvbnN0IGJvZHkgPSBKU09OLnN0cmluZ2lmeShwYXlsb2FkKVxuICAgICAgICAgICAgICAgIGNvbnN0IHNpZ25hdHVyZSA9IHRoaXMuc2lnbignaHR0cHM6Ly9zaXN1Lnhib3hsaXZlLmNvbS9hdXRob3JpemUnLCAnJywgYm9keSwgand0S2V5cykudG9TdHJpbmcoJ2Jhc2U2NCcpXG4gICAgICAgICAgICAgICAgY29uc3QgaGVhZGVycyA9IHtcbiAgICAgICAgICAgICAgICAgICAgJ3gteGJsLWNvbnRyYWN0LXZlcnNpb24nOiAnMScsXG4gICAgICAgICAgICAgICAgICAgICdDYWNoZS1Db250cm9sJzogJ25vLXN0b3JlLCBtdXN0LXJldmFsaWRhdGUsIG5vLWNhY2hlJyxcbiAgICAgICAgICAgICAgICAgICAgc2lnbmF0dXJlOiBzaWduYXR1cmVcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBcbiAgICAgICAgICAgICAgICBjb25zdCBIdHRwQ2xpZW50ID0gbmV3IEh0dHAoKVxuICAgICAgICAgICAgICAgIEh0dHBDbGllbnQucG9zdFJlcXVlc3QoJ3Npc3UueGJveGxpdmUuY29tJywgJy9hdXRob3JpemUnLCBoZWFkZXJzLCBib2R5KS50aGVuKChyZXNwb25zZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKG5ldyBTaXN1VG9rZW4ocmVzcG9uc2UuYm9keSgpKSlcblxuICAgICAgICAgICAgICAgIH0pLmNhdGNoKChlcnJvcikgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZWplY3QoZXJyb3IpXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIH0pXG4gICAgICAgIH0pXG4gICAgfVxuXG4gICAgZXhjaGFuZ2VDb2RlRm9yVG9rZW4oY29kZTpzdHJpbmcsIGNvZGVWZXJpZmllcjpzdHJpbmcpe1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2U8VXNlclRva2VuPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBwYXlsb2FkID0ge1xuICAgICAgICAgICAgICAgICdjbGllbnRfaWQnOiB0aGlzLl9hcHAuQXBwSWQsXG4gICAgICAgICAgICAgICAgJ2NvZGUnOiBjb2RlLFxuICAgICAgICAgICAgICAgICdjb2RlX3ZlcmlmaWVyJzogY29kZVZlcmlmaWVyLFxuICAgICAgICAgICAgICAgICdncmFudF90eXBlJzogJ2F1dGhvcml6YXRpb25fY29kZScsXG4gICAgICAgICAgICAgICAgJ3JlZGlyZWN0X3VyaSc6IHRoaXMuX2FwcC5SZWRpcmVjdFVyaSxcbiAgICAgICAgICAgICAgICAnc2NvcGUnOiAnc2VydmljZTo6dXNlci5hdXRoLnhib3hsaXZlLmNvbTo6TUJJX1NTTCdcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIFxuICAgICAgICAgICAgY29uc3QgYm9keSA9IG5ldyBVUkxTZWFyY2hQYXJhbXMocGF5bG9hZCkudG9TdHJpbmcoKVxuICAgICAgICAgICAgY29uc3QgaGVhZGVycyA9IHtcbiAgICAgICAgICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcsXG4gICAgICAgICAgICAgICAgJ0NhY2hlLUNvbnRyb2wnOiAnbm8tc3RvcmUsIG11c3QtcmV2YWxpZGF0ZSwgbm8tY2FjaGUnLFxuICAgICAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgICAgIGNvbnN0IEh0dHBDbGllbnQgPSBuZXcgSHR0cCgpXG4gICAgICAgICAgICBIdHRwQ2xpZW50LnBvc3RSZXF1ZXN0KCdsb2dpbi5saXZlLmNvbScsICcvb2F1dGgyMF90b2tlbi5zcmYnLCBoZWFkZXJzLCBib2R5KS50aGVuKChyZXNwb25zZSkgPT4ge1xuICAgICAgICAgICAgICAgIHJlc29sdmUobmV3IFVzZXJUb2tlbihyZXNwb25zZS5ib2R5KCkpKVxuXG4gICAgICAgICAgICB9KS5jYXRjaCgoZXJyb3IpID0+IHtcbiAgICAgICAgICAgICAgICByZWplY3QoZXJyb3IpXG4gICAgICAgICAgICB9KVxuICAgICAgICB9KVxuICAgIH1cblxuICAgIHJlZnJlc2hVc2VyVG9rZW4odXNlclRva2VuOlVzZXJUb2tlbil7XG4gICAgICAgIGNvbnNvbGUubG9nKCdyZWZyZXNoVXNlclRva2VuLi4uJylcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlPFVzZXJUb2tlbj4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgcGF5bG9hZCA9IHtcbiAgICAgICAgICAgICAgICAnY2xpZW50X2lkJzogdGhpcy5fYXBwLkFwcElkLFxuICAgICAgICAgICAgICAgICdncmFudF90eXBlJzogJ3JlZnJlc2hfdG9rZW4nLFxuICAgICAgICAgICAgICAgICdyZWZyZXNoX3Rva2VuJzogdXNlclRva2VuLmRhdGEucmVmcmVzaF90b2tlbixcbiAgICAgICAgICAgICAgICAnc2NvcGUnOiAnc2VydmljZTo6dXNlci5hdXRoLnhib3hsaXZlLmNvbTo6TUJJX1NTTCdcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIFxuICAgICAgICAgICAgY29uc3QgYm9keSA9IG5ldyBVUkxTZWFyY2hQYXJhbXMocGF5bG9hZCkudG9TdHJpbmcoKVxuICAgICAgICAgICAgY29uc3QgaGVhZGVycyA9IHtcbiAgICAgICAgICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcsXG4gICAgICAgICAgICAgICAgJ0NhY2hlLUNvbnRyb2wnOiAnbm8tc3RvcmUsIG11c3QtcmV2YWxpZGF0ZSwgbm8tY2FjaGUnLFxuICAgICAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgICAgIGNvbnN0IEh0dHBDbGllbnQgPSBuZXcgSHR0cCgpXG4gICAgICAgICAgICBIdHRwQ2xpZW50LnBvc3RSZXF1ZXN0KCdsb2dpbi5saXZlLmNvbScsICcvb2F1dGgyMF90b2tlbi5zcmYnLCBoZWFkZXJzLCBib2R5KS50aGVuKChyZXNwb25zZSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdyZWZyZXNoVXNlclRva2VuIHN1Y2Nlc3M6ICcsIHJlc3BvbnNlLmJvZHkoKSlcbiAgICAgICAgICAgICAgICByZXNvbHZlKG5ldyBVc2VyVG9rZW4ocmVzcG9uc2UuYm9keSgpKSlcbiAgICAgICAgICAgIH0pLmNhdGNoKChlcnJvcikgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdyZWZyZXNoVXNlclRva2VuIGZhaWw6JywgZXJyb3IpXG4gICAgICAgICAgICAgICAgcmVqZWN0KGVycm9yKVxuICAgICAgICAgICAgfSlcbiAgICAgICAgfSlcbiAgICB9XG5cbiAgICBkb1hzdHNBdXRob3JpemF0aW9uKHNpc3VUb2tlbjpTaXN1VG9rZW4sIHJlbHlpbmdQYXJ0eTpzdHJpbmcpe1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2U8WHN0c1Rva2VuPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICB0aGlzLmdldEtleXMoKS50aGVuKChqd3RLZXlzOmFueSkgPT4ge1xuXG4gICAgICAgICAgICAgICAgY29uc3QgcGF5bG9hZCA9IHtcbiAgICAgICAgICAgICAgICAgICAgUHJvcGVydGllczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgU2FuZGJveElkOiAnUkVUQUlMJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIERldmljZVRva2VuOiBzaXN1VG9rZW4uZGF0YS5EZXZpY2VUb2tlbixcbiAgICAgICAgICAgICAgICAgICAgICAgIFRpdGxlVG9rZW46IHNpc3VUb2tlbi5kYXRhLlRpdGxlVG9rZW4uVG9rZW4sXG4gICAgICAgICAgICAgICAgICAgICAgICBVc2VyVG9rZW5zOiBbc2lzdVRva2VuLmRhdGEuVXNlclRva2VuLlRva2VuXVxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBSZWx5aW5nUGFydHk6IHJlbHlpbmdQYXJ0eSxcbiAgICAgICAgICAgICAgICAgICAgVG9rZW5UeXBlOiAnSldUJ1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIGNvbnN0IGJvZHkgPSBKU09OLnN0cmluZ2lmeShwYXlsb2FkKVxuICAgICAgICAgICAgICAgIGNvbnN0IHNpZ25hdHVyZSA9IHRoaXMuc2lnbignaHR0cHM6Ly94c3RzLmF1dGgueGJveGxpdmUuY29tL3hzdHMvYXV0aG9yaXplJywgJycsIGJvZHksIGp3dEtleXMpLnRvU3RyaW5nKCdiYXNlNjQnKVxuICAgICAgICAgICAgICAgIGNvbnN0IGhlYWRlcnMgPSB7IC4uLntcbiAgICAgICAgICAgICAgICAgICAgJ3gteGJsLWNvbnRyYWN0LXZlcnNpb24nOiAnMScsXG4gICAgICAgICAgICAgICAgICAgICdDYWNoZS1Db250cm9sJzogJ25vLXN0b3JlLCBtdXN0LXJldmFsaWRhdGUsIG5vLWNhY2hlJyxcbiAgICAgICAgICAgICAgICB9LCBTaWduYXR1cmU6IHNpZ25hdHVyZSB9XG4gICAgICAgICAgICBcbiAgICAgICAgICAgICAgICBjb25zdCBIdHRwQ2xpZW50ID0gbmV3IEh0dHAoKVxuICAgICAgICAgICAgICAgIEh0dHBDbGllbnQucG9zdFJlcXVlc3QoJ3hzdHMuYXV0aC54Ym94bGl2ZS5jb20nLCAnL3hzdHMvYXV0aG9yaXplJywgaGVhZGVycywgYm9keSkudGhlbigocmVzcG9uc2UpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShuZXcgWHN0c1Rva2VuKHJlc3BvbnNlLmJvZHkoKSkpXG5cbiAgICAgICAgICAgICAgICB9KS5jYXRjaCgoZXJyb3IpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGVycm9yKVxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICB9KVxuICAgICAgICB9KVxuICAgIH1cblxuICAgIGV4Y2hhbmdlUmVmcmVzaFRva2VuRm9yWGNsb3VkVHJhbnNmZXJUb2tlbih1c2VyVG9rZW46VXNlclRva2VuKXtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlPE1zYWxUb2tlbj4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgcGF5bG9hZCA9IHtcbiAgICAgICAgICAgICAgICBjbGllbnRfaWQ6IHRoaXMuX2FwcC5BcHBJZCxcbiAgICAgICAgICAgICAgICBncmFudF90eXBlOiAncmVmcmVzaF90b2tlbicsXG4gICAgICAgICAgICAgICAgc2NvcGU6ICdzZXJ2aWNlOjpodHRwOi8vUGFzc3BvcnQuTkVUL3B1cnBvc2U6OlBVUlBPU0VfWEJPWF9DTE9VRF9DT05TT0xFX1RSQU5TRkVSX1RPS0VOJyxcbiAgICAgICAgICAgICAgICByZWZyZXNoX3Rva2VuOiB1c2VyVG9rZW4uZGF0YS5yZWZyZXNoX3Rva2VuLFxuICAgICAgICAgICAgICAgIGNvZGU6ICcnLFxuICAgICAgICAgICAgICAgIGNvZGVfdmVyaWZpZXI6ICcnLFxuICAgICAgICAgICAgICAgIHJlZGlyZWN0X3VyaTogJycsXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGNvbnN0IGJvZHkgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKHBheWxvYWQpLnRvU3RyaW5nKClcbiAgICAgICAgICAgIGNvbnN0IGhlYWRlcnMgPSB7XG4gICAgICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnLFxuICAgICAgICAgICAgICAgICdDYWNoZS1Db250cm9sJzogJ25vLXN0b3JlLCBtdXN0LXJldmFsaWRhdGUsIG5vLWNhY2hlJyxcbiAgICAgICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgICAgICBjb25zdCBIdHRwQ2xpZW50ID0gbmV3IEh0dHAoKVxuICAgICAgICAgICAgSHR0cENsaWVudC5wb3N0UmVxdWVzdCgnbG9naW4ubGl2ZS5jb20nLCAnL29hdXRoMjBfdG9rZW4uc3JmJywgaGVhZGVycywgYm9keSkudGhlbigocmVzcG9uc2UpID0+IHtcbiAgICAgICAgICAgICAgICByZXNvbHZlKG5ldyBNc2FsVG9rZW4ocmVzcG9uc2UuYm9keSgpKSlcblxuICAgICAgICAgICAgfSkuY2F0Y2goKGVycm9yKSA9PiB7XG4gICAgICAgICAgICAgICAgcmVqZWN0KGVycm9yKVxuICAgICAgICAgICAgfSlcbiAgICAgICAgfSlcbiAgICB9XG5cbiAgICBnZXRTdHJlYW1Ub2tlbih4c3RzVG9rZW46WHN0c1Rva2VuLCBvZmZlcmluZzpzdHJpbmcsIGZvcmNlUmVnaW9uSXA6IHN0cmluZyA9ICcnKXtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlPFN0cmVhbWluZ1Rva2VuPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBwYXlsb2FkID0ge1xuICAgICAgICAgICAgICAgICd0b2tlbic6IHhzdHNUb2tlbi5kYXRhLlRva2VuLFxuICAgICAgICAgICAgICAgICdvZmZlcmluZ0lkJzogb2ZmZXJpbmcsXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGNvbnN0IGJvZHkgPSBKU09OLnN0cmluZ2lmeShwYXlsb2FkKVxuICAgICAgICAgICAgY29uc3QgaGVhZGVycyA9IHtcbiAgICAgICAgICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgICAgICAgICAgICdDYWNoZS1Db250cm9sJzogJ25vLXN0b3JlLCBtdXN0LXJldmFsaWRhdGUsIG5vLWNhY2hlJyxcbiAgICAgICAgICAgICAgICAneC1nc3N2LWNsaWVudCc6ICdYYm94Q29tQnJvd3NlcicsXG4gICAgICAgICAgICAgICAgJ0NvbnRlbnQtTGVuZ3RoJzogYm9keS5sZW5ndGgsXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChmb3JjZVJlZ2lvbklwLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICBoZWFkZXJzWyd4LWZvcndhcmRlZC1mb3InXSA9IGZvcmNlUmVnaW9uSXBcbiAgICAgICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgICAgICBjb25zdCBIdHRwQ2xpZW50ID0gbmV3IEh0dHAoKVxuICAgICAgICAgICAgSHR0cENsaWVudC5wb3N0UmVxdWVzdChvZmZlcmluZysnLmdzc3YtcGxheS1wcm9kLnhib3hsaXZlLmNvbScsICcvdjIvbG9naW4vdXNlcicsIGhlYWRlcnMsIGJvZHkpLnRoZW4oKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZShuZXcgU3RyZWFtaW5nVG9rZW4ocmVzcG9uc2UuYm9keSgpKSlcblxuICAgICAgICAgICAgfSkuY2F0Y2goKGVycm9yKSA9PiB7XG4gICAgICAgICAgICAgICAgcmVqZWN0KGVycm9yKVxuICAgICAgICAgICAgfSlcbiAgICAgICAgfSlcbiAgICB9XG5cbiAgICAvLyBDcmVkaXRzIHRvIGh0dHBzOi8vZ2l0aHViLmNvbS9QcmlzbWFyaW5lSlMvcHJpc21hcmluZS1hdXRoIGZvciB0aGUgc2lnbmluZyBwYXJ0XG4gICAgc2lnbih1cmwsIGF1dGhvcml6YXRpb25Ub2tlbiwgcGF5bG9hZCwgand0S2V5cykge1xuICAgICAgICBjb25zdCB3aW5kb3dzVGltZXN0YW1wID0gKEJpZ0ludCgoRGF0ZS5ub3coKSAvIDEwMDApIHwgMCkgKyBCaWdJbnQoMTE2NDQ0NzM2MDApKSAqIEJpZ0ludCgxMDAwMDAwMClcbiAgICAgICAgY29uc3QgcGF0aEFuZFF1ZXJ5ID0gbmV3IFVSTCh1cmwpLnBhdGhuYW1lXG4gICAgXG4gICAgICAgIGNvbnN0IGFsbG9jU2l6ZSA9IDUgKyA5ICsgNSArIHBhdGhBbmRRdWVyeS5sZW5ndGggKyAxICsgYXV0aG9yaXphdGlvblRva2VuLmxlbmd0aCArIDEgKyBwYXlsb2FkLmxlbmd0aCArIDFcbiAgICAgICAgY29uc3QgYnVmID0gQnVmZmVyLmFsbG9jKGFsbG9jU2l6ZSlcbiAgICAgICAgYnVmLndyaXRlSW50MzJCRSgxKVxuICAgICAgICBidWYud3JpdGVVSW50OCgwLCA0KVxuICAgICAgICBidWYud3JpdGVCaWdVSW50NjRCRSh3aW5kb3dzVGltZXN0YW1wLCA1KVxuICAgICAgICBidWYud3JpdGVVSW50OCgwLCAxMylcbiAgICAgICAgbGV0IG9mZnNldCA9IDE0XG5cbiAgICAgICAgQnVmZmVyLmZyb20oJ1BPU1QnKS5jb3B5KGJ1Ziwgb2Zmc2V0KVxuICAgICAgICBidWYud3JpdGVVSW50OCgwLCBvZmZzZXQrNClcbiAgICAgICAgb2Zmc2V0ID0gb2Zmc2V0KzQrMVxuXG4gICAgICAgIEJ1ZmZlci5mcm9tKHBhdGhBbmRRdWVyeSkuY29weShidWYsIG9mZnNldClcbiAgICAgICAgYnVmLndyaXRlVUludDgoMCwgb2Zmc2V0K3BhdGhBbmRRdWVyeS5sZW5ndGgpXG4gICAgICAgIG9mZnNldCA9IG9mZnNldCtwYXRoQW5kUXVlcnkubGVuZ3RoKzFcblxuICAgICAgICBCdWZmZXIuZnJvbShhdXRob3JpemF0aW9uVG9rZW4pLmNvcHkoYnVmLCBvZmZzZXQpXG4gICAgICAgIGJ1Zi53cml0ZVVJbnQ4KDAsIG9mZnNldCthdXRob3JpemF0aW9uVG9rZW4ubGVuZ3RoKVxuICAgICAgICBvZmZzZXQgPSBvZmZzZXQrYXV0aG9yaXphdGlvblRva2VuLmxlbmd0aCsxXG5cbiAgICAgICAgQnVmZmVyLmZyb20ocGF5bG9hZCkuY29weShidWYsIG9mZnNldClcbiAgICAgICAgYnVmLndyaXRlVUludDgoMCwgb2Zmc2V0K3BheWxvYWQubGVuZ3RoKVxuICAgICAgICBvZmZzZXQgPSBvZmZzZXQrcGF5bG9hZC5sZW5ndGgrMVxuXG4gICAgICAgIGNvbnN0IHNpZ25hdHVyZSA9IGNyeXB0by5zaWduKCdTSEEyNTYnLCBidWYsIHsga2V5OiBqd3RLZXlzLnJhdy5wcml2YXRlS2V5LCBkc2FFbmNvZGluZzogJ2llZWUtcDEzNjMnIH0pXG4gICAgXG4gICAgICAgIGNvbnN0IGhlYWRlciA9IEJ1ZmZlci5hbGxvYyhzaWduYXR1cmUubGVuZ3RoICsgMTIpXG4gICAgICAgIGhlYWRlci53cml0ZUludDMyQkUoMSlcbiAgICAgICAgaGVhZGVyLndyaXRlQmlnVUludDY0QkUod2luZG93c1RpbWVzdGFtcCwgNClcbiAgICAgICAgQnVmZmVyLmZyb20oc2lnbmF0dXJlKS5jb3B5KGhlYWRlciwgMTIpXG4gICAgXG4gICAgICAgIHJldHVybiBoZWFkZXJcbiAgICB9XG5cbiAgICAvLyBUb2tlbiByZXRyaWV2YWwgaGVscGVyc1xuICAgIGFzeW5jIHJlZnJlc2hUb2tlbnModG9rZW5TdG9yZTpUb2tlblN0b3JlKXtcbiAgICAgICAgY29uc3QgY3VyVXNlclRva2VuID0gdG9rZW5TdG9yZS5nZXRVc2VyVG9rZW4oKVxuICAgICAgICBpZihjdXJVc2VyVG9rZW4gPT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVXNlciB0b2tlbiBpcyBtaXNzaW5nLiBQbGVhc2UgYXV0aGVudGljYXRlIGZpcnN0JylcblxuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgdXNlclRva2VuID0gYXdhaXQgdGhpcy5yZWZyZXNoVXNlclRva2VuKGN1clVzZXJUb2tlbilcbiAgICAgICAgICAgIGNvbnN0IGRldmljZVRva2VuID0gYXdhaXQgdGhpcy5nZXREZXZpY2VUb2tlbigpXG4gICAgICAgICAgICBjb25zdCBzaXN1VG9rZW4gPSBhd2FpdCB0aGlzLmRvU2lzdUF1dGhvcml6YXRpb24odXNlclRva2VuLCBkZXZpY2VUb2tlbilcblxuICAgICAgICAgICAgdG9rZW5TdG9yZS5zZXRVc2VyVG9rZW4odXNlclRva2VuKVxuICAgICAgICAgICAgdG9rZW5TdG9yZS5zZXRTaXN1VG9rZW4oc2lzdVRva2VuKVxuICAgICAgICAgICAgdG9rZW5TdG9yZS5zYXZlKClcblxuICAgICAgICAgICAgcmV0dXJuIHsgdXNlclRva2VuLCBkZXZpY2VUb2tlbiwgc2lzdVRva2VuIH1cbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUb2tlblJlZnJlc2hFcnJvcignRmFpbGVkIHRvIHJlZnJlc2ggdG9rZW5zOiAnICsgSlNPTi5zdHJpbmdpZnkoZXJyb3IpKVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgYXN5bmMgZ2V0TXNhbFRva2VuKHRva2VuU3RvcmU6VG9rZW5TdG9yZSl7XG4gICAgICAgIGNvbnN0IHVzZXJUb2tlbiA9IHRva2VuU3RvcmUuZ2V0VXNlclRva2VuKClcbiAgICAgICAgaWYodXNlclRva2VuID09PSB1bmRlZmluZWQpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VzZXIgdG9rZW4gaXMgbWlzc2luZy4gUGxlYXNlIGF1dGhlbnRpY2F0ZSBmaXJzdCcpXG4gICAgICAgIFxuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5leGNoYW5nZVJlZnJlc2hUb2tlbkZvclhjbG91ZFRyYW5zZmVyVG9rZW4odXNlclRva2VuKSAgICBcbiAgICB9XG5cbiAgICBfd2ViVG9rZW46WHN0c1Rva2VuIHwgdW5kZWZpbmVkXG5cbiAgICBhc3luYyBnZXRXZWJUb2tlbih0b2tlblN0b3JlOlRva2VuU3RvcmUpe1xuICAgICAgICBjb25zdCBzaXN1VG9rZW4gPSB0b2tlblN0b3JlLmdldFNpc3VUb2tlbigpXG4gICAgICAgIGlmKHNpc3VUb2tlbiA9PT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdTaXN1IHRva2VuIGlzIG1pc3NpbmcuIFBsZWFzZSBhdXRoZW50aWNhdGUgZmlyc3QnKVxuXG4gICAgICAgIGlmKHRoaXMuX3dlYlRva2VuID09PSB1bmRlZmluZWQgfHwgdGhpcy5fd2ViVG9rZW4uZ2V0U2Vjb25kc1ZhbGlkKCkgPD0gNjApe1xuICAgICAgICAgICAgY29uc3QgdG9rZW4gPSBhd2FpdCB0aGlzLmRvWHN0c0F1dGhvcml6YXRpb24oc2lzdVRva2VuLCAnaHR0cDovL3hib3hsaXZlLmNvbScpXG4gICAgICAgICAgICB0aGlzLl93ZWJUb2tlbiA9IHRva2VuXG5cbiAgICAgICAgICAgIHJldHVybiB0b2tlblxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3dlYlRva2VuIGFzIFhzdHNUb2tlblxuICAgICAgICB9XG4gICAgfVxuXG4gICAgX3hob21lVG9rZW46U3RyZWFtaW5nVG9rZW4gfCB1bmRlZmluZWRcbiAgICBfeGNsb3VkVG9rZW46U3RyZWFtaW5nVG9rZW4gfCB1bmRlZmluZWRcblxuICAgIGFzeW5jIGdldFN0cmVhbWluZ1Rva2VuKHRva2VuU3RvcmU6VG9rZW5TdG9yZSl7XG4gICAgICAgIGNvbnN0IHNpc3VUb2tlbiA9IHRva2VuU3RvcmUuZ2V0U2lzdVRva2VuKClcbiAgICAgICAgaWYoc2lzdVRva2VuID09PSB1bmRlZmluZWQpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Npc3UgdG9rZW4gaXMgbWlzc2luZy4gUGxlYXNlIGF1dGhlbnRpY2F0ZSBmaXJzdCcpXG5cbiAgICAgICAgY29uc3QgeHN0c1Rva2VuID0gYXdhaXQgdGhpcy5kb1hzdHNBdXRob3JpemF0aW9uKHNpc3VUb2tlbiwgJ2h0dHA6Ly9nc3N2Lnhib3hsaXZlLmNvbS8nKVxuXG4gICAgICAgIGlmKHRoaXMuX3hob21lVG9rZW4gPT09IHVuZGVmaW5lZCB8fCB0aGlzLl94aG9tZVRva2VuLmdldFNlY29uZHNWYWxpZCgpIDw9IDYwKXtcbiAgICAgICAgICAgIHRoaXMuX3hob21lVG9rZW4gPSBhd2FpdCB0aGlzLmdldFN0cmVhbVRva2VuKHhzdHNUb2tlbiwgJ3hob21lJylcbiAgICAgICAgfVxuXG4gICAgICAgIGlmKHRoaXMuX3hjbG91ZFRva2VuID09PSB1bmRlZmluZWQgfHwgdGhpcy5feGNsb3VkVG9rZW4uZ2V0U2Vjb25kc1ZhbGlkKCkgPD0gNjApe1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICB0aGlzLl94Y2xvdWRUb2tlbiA9IGF3YWl0IHRoaXMuZ2V0U3RyZWFtVG9rZW4oeHN0c1Rva2VuLCAneGdwdXdlYicpXG4gICAgICAgICAgICB9IGNhdGNoKGVycm9yKXtcbiAgICAgICAgICAgICAgICB0aGlzLl94Y2xvdWRUb2tlbiA9IGF3YWl0IHRoaXMuZ2V0U3RyZWFtVG9rZW4oeHN0c1Rva2VuLCAneGdwdXdlYmYycCcpXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4geyB4SG9tZVRva2VuOiB0aGlzLl94aG9tZVRva2VuLCB4Q2xvdWRUb2tlbjogdGhpcy5feGNsb3VkVG9rZW4gfVxuICAgIH1cblxuICAgIGFzeW5jIGdldFJlZGlyZWN0VXJpKCl7XG4gICAgICAgIGNvbnN0IGRldmljZVRva2VuID0gYXdhaXQgdGhpcy5nZXREZXZpY2VUb2tlbigpXG4gICAgICAgIGNvbnN0IGNvZGVDaGFsbGFuZ2UgPSBhd2FpdCB0aGlzLmdldENvZGVDaGFsbGFuZ2UoKVxuICAgICAgICBjb25zdCBzdGF0ZSA9IHRoaXMuZ2V0UmFuZG9tU3RhdGUoKVxuICAgICAgICBjb25zdCBzaXN1QXV0aCA9IGF3YWl0IHRoaXMuZG9TaXN1QXV0aGVudGljYXRpb24oZGV2aWNlVG9rZW4sIGNvZGVDaGFsbGFuZ2UsIHN0YXRlKVxuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBzaXN1QXV0aCxcbiAgICAgICAgICAgIHN0YXRlLFxuICAgICAgICAgICAgY29kZUNoYWxsYW5nZVxuICAgICAgICB9XG4gICAgfVxuXG5cblxuICAgIGFzeW5jIGF1dGhlbnRpY2F0ZVVzZXIodG9rZW5TdG9yZTpUb2tlblN0b3JlLCByZWRpcmVjdE9iamVjdDp7XG4gICAgICAgIHNpc3VBdXRoOiBJU2lzdUF1dGhlbnRpY2F0aW9uUmVzcG9uc2U7XG4gICAgICAgIHN0YXRlOiBzdHJpbmc7XG4gICAgICAgIGNvZGVDaGFsbGFuZ2U6IElDb2RlQ2hhbGxhbmdlO1xuICAgIH0sIHJlZGlyZWN0VXJpOnN0cmluZyl7XG4gICAgICAgIGNvbnN0IHVybCA9IG5ldyBVUkwocmVkaXJlY3RVcmkpXG5cbiAgICAgICAgY29uc3QgZXJyb3IgPSB1cmwuc2VhcmNoUGFyYW1zLmdldCgnZXJyb3InKVxuICAgICAgICBpZihlcnJvcil7XG4gICAgICAgICAgICBjb25zdCBlcnJvcl9kZXNjcmlwdGlvbiA9IHVybC5zZWFyY2hQYXJhbXMuZ2V0KCdlcnJvcl9kZXNjcmlwdGlvbicpXG4gICAgICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGNvZGUgPSB1cmwuc2VhcmNoUGFyYW1zLmdldCgnY29kZScpXG4gICAgICAgIGlmKGNvZGUpe1xuICAgICAgICAgICAgY29uc3Qgc3RhdGUgPSB1cmwuc2VhcmNoUGFyYW1zLmdldCgnc3RhdGUnKVxuICAgICAgICAgICAgaWYoc3RhdGUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5hdXRoZW50aWNhdGVVc2VyVXNpbmdDb2RlKHRva2VuU3RvcmUsIHJlZGlyZWN0T2JqZWN0LCBjb2RlLCBzdGF0ZSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cblxuICAgIGFzeW5jIGF1dGhlbnRpY2F0ZVVzZXJVc2luZ0NvZGUodG9rZW5TdG9yZTpUb2tlblN0b3JlLCByZWRpcmVjdE9iamVjdDp7XG4gICAgICAgIHNpc3VBdXRoOiBJU2lzdUF1dGhlbnRpY2F0aW9uUmVzcG9uc2U7XG4gICAgICAgIHN0YXRlOiBzdHJpbmc7XG4gICAgICAgIGNvZGVDaGFsbGFuZ2U6IElDb2RlQ2hhbGxhbmdlO1xuICAgIH0sIGNvZGU6c3RyaW5nLCBzdGF0ZTpzdHJpbmcpe1xuXG4gICAgICAgIGNvbnNvbGUubG9nKCdhdXRoZW50aWNhdGVVc2VyOicsIGNvZGUsIHN0YXRlKVxuXG4gICAgICAgIGlmKHN0YXRlICE9PSByZWRpcmVjdE9iamVjdC5zdGF0ZSl7XG4gICAgICAgICAgICAvLyBjb25zb2xlLmxvZygnQXV0aGVudGljYXRpb24gZmFpbGVkOiBTdGF0ZSBtaXNtYXRjaCcpXG4gICAgICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjb2RlQ2hhbGxhbmdlID0gYXdhaXQgdGhpcy5nZXRDb2RlQ2hhbGxhbmdlKClcbiAgICAgICAgY29uc3QgdXNlclRva2VuID0gYXdhaXQgdGhpcy5leGNoYW5nZUNvZGVGb3JUb2tlbihjb2RlLCBjb2RlQ2hhbGxhbmdlLnZlcmlmaWVyKVxuXG4gICAgICAgIHRva2VuU3RvcmUuc2V0VXNlclRva2VuKHVzZXJUb2tlbilcbiAgICAgICAgdG9rZW5TdG9yZS5zZXRKd3RLZXlzKHRoaXMuand0S2V5cylcbiAgICAgICAgdG9rZW5TdG9yZS5zYXZlKClcblxuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIFRva2VuUmVmcmVzaEVycm9yIGV4dGVuZHMgRXJyb3Ige30iLCJleHBvcnQgY29uc3QgZGVmYXVsdFNldHRpbmdzID0ge1xuICBsb2NhbGU6IFwiZW5cIixcbiAgcmVzb2x1dGlvbjogNzIwLFxuICB4aG9tZV9iaXRyYXRlX21vZGU6IFwiQXV0b1wiLFxuICB4aG9tZV9iaXRyYXRlOiAyMCxcbiAgeGNsb3VkX2JpdHJhdGVfbW9kZTogXCJBdXRvXCIsXG4gIHhjbG91ZF9iaXRyYXRlOiAyMCxcbiAgcHJlZmVycmVkX2dhbWVfbGFuZ3VhZ2U6IFwiZW4tVVNcIixcbiAgZm9yY2VfcmVnaW9uX2lwOiBcIlwiLFxuICBjb2RlYzogXCJcIixcbiAgdmlicmF0aW9uOiB0cnVlLFxuICB2aWJyYXRpb25fbW9kZTogXCJOYXRpdmVcIixcbiAgZ2FtZXBhZF9rZXJuYWw6IFwiTmF0aXZlXCIsXG4gIGRlYWRfem9uZTogMC4xLFxuICB2aWRlb19mb3JtYXQ6IFwiXCIsXG4gIHZpcnR1YWxfZ2FtZXBhZF9vcGFjaXR5OiAwLjYsXG4gIGdhbWVwYWRfbWFwaW5nOiBudWxsLFxuICBuYXRpdmVfZ2FtZXBhZF9tYXBpbmc6IG51bGwsXG4gIGlwdjY6IGZhbHNlLFxuICBpbnB1dF9tb3VzZWtleWJvYXJkX21hcGluZzoge1xuICAgIEFycm93TGVmdDogJ0RQYWRMZWZ0JyxcbiAgICBBcnJvd1VwOiAnRFBhZFVwJyxcbiAgICBBcnJvd1JpZ2h0OiAnRFBhZFJpZ2h0JyxcbiAgICBBcnJvd0Rvd246ICdEUGFkRG93bicsXG5cbiAgICBFbnRlcjogJ0EnLFxuICAgIGE6ICdBJyxcblxuICAgIEJhY2tzcGFjZTogJ0InLFxuICAgIGI6ICdCJyxcblxuICAgIHg6ICdYJyxcbiAgICB5OiAnWScsXG5cbiAgICAnWyc6ICdMZWZ0U2hvdWxkZXInLFxuICAgICddJzogJ1JpZ2h0U2hvdWxkZXInLFxuXG4gICAgJy0nOiAnTGVmdFRyaWdnZXInLFxuICAgICc9JzogJ1JpZ2h0VHJpZ2dlcicsXG5cbiAgICB2OiAnVmlldycsXG4gICAgbTogJ01lbnUnLFxuICAgIG46ICdOZXh1cycsXG4gIH0sXG4gIGRpc3BsYXlfb3B0aW9uczoge1xuICAgIHNoYXJwbmVzczogNSxcbiAgICBzYXR1cmF0aW9uOiAxMDAsXG4gICAgY29udHJhc3Q6IDEwMCxcbiAgICBicmlnaHRuZXNzOiAxMDAsXG4gIH0sXG4gIGRlYnVnOiBmYWxzZSxcbn07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJjcnlwdG9cIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiZWxlY3Ryb25cIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiZnNcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiaHR0cHNcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwibm9kZTpwYXRoXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gX19XRUJQQUNLX0VYVEVSTkFMX01PRFVMRV9heGlvc19fOyIsIm1vZHVsZS5leHBvcnRzID0gX19XRUJQQUNLX0VYVEVSTkFMX01PRFVMRV9jb21wYXJlX3ZlcnNpb25zX187IiwibW9kdWxlLmV4cG9ydHMgPSBfX1dFQlBBQ0tfRVhURVJOQUxfTU9EVUxFX2RlYnVnX187IiwibW9kdWxlLmV4cG9ydHMgPSBfX1dFQlBBQ0tfRVhURVJOQUxfTU9EVUxFX2VsZWN0cm9uX3NlcnZlX187IiwibW9kdWxlLmV4cG9ydHMgPSBfX1dFQlBBQ0tfRVhURVJOQUxfTU9EVUxFX2VsZWN0cm9uX3N0b3JlX187IiwibW9kdWxlLmV4cG9ydHMgPSBfX1dFQlBBQ0tfRVhURVJOQUxfTU9EVUxFX2dpdGh1Yl91cmxfdG9fb2JqZWN0X187IiwibW9kdWxlLmV4cG9ydHMgPSBfX1dFQlBBQ0tfRVhURVJOQUxfTU9EVUxFX2lwX2FkZHJlc3NfXzsiLCJtb2R1bGUuZXhwb3J0cyA9IF9fV0VCUEFDS19FWFRFUk5BTF9NT0RVTEVfam9zZV9fOyIsIm1vZHVsZS5leHBvcnRzID0gX19XRUJQQUNLX0VYVEVSTkFMX01PRFVMRV91dWlkXzEzNDVfXzsiLCJtb2R1bGUuZXhwb3J0cyA9IF9fV0VCUEFDS19FWFRFUk5BTF9NT0RVTEVfeGJveF93ZWJhcGlfXzsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJjb3JlLWpzLXB1cmUvc3RhYmxlL2FycmF5L2lzLWFycmF5XCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9zdGFibGUvZGF0ZS9ub3dcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL3N0YWJsZS9pbnN0YW5jZS9maWx0ZXJcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL3N0YWJsZS9pbnN0YW5jZS9mb3ItZWFjaFwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJjb3JlLWpzLXB1cmUvc3RhYmxlL2luc3RhbmNlL2luY2x1ZGVzXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9zdGFibGUvaW5zdGFuY2Uva2V5c1wiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJjb3JlLWpzLXB1cmUvc3RhYmxlL2luc3RhbmNlL3NvbWVcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL3N0YWJsZS9pbnN0YW5jZS9zb3J0XCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9zdGFibGUvaW5zdGFuY2UvdHJpbVwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJjb3JlLWpzLXB1cmUvc3RhYmxlL2pzb24vc3RyaW5naWZ5XCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9zdGFibGUvb2JqZWN0L2Fzc2lnblwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJjb3JlLWpzLXB1cmUvc3RhYmxlL29iamVjdC9kZWZpbmUtcHJvcGVydGllc1wiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJjb3JlLWpzLXB1cmUvc3RhYmxlL29iamVjdC9kZWZpbmUtcHJvcGVydHlcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL3N0YWJsZS9vYmplY3QvZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9zdGFibGUvb2JqZWN0L2dldC1vd24tcHJvcGVydHktZGVzY3JpcHRvcnNcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL3N0YWJsZS9vYmplY3QvZ2V0LW93bi1wcm9wZXJ0eS1zeW1ib2xzXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9zdGFibGUvb2JqZWN0L2tleXNcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL3N0YWJsZS9wcm9taXNlXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9zdGFibGUvc2V0LWltbWVkaWF0ZVwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJjb3JlLWpzLXB1cmUvc3RhYmxlL3NldC10aW1lb3V0XCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9zdGFibGUvc2V0XCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9zdGFibGUvdXJsLXNlYXJjaC1wYXJhbXNcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL3N0YWJsZS91cmxcIik7IiwidmFyIF9PYmplY3QkZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL2ZlYXR1cmVzL29iamVjdC9kZWZpbmUtcHJvcGVydHkuanNcIik7XG52YXIgdG9Qcm9wZXJ0eUtleSA9IHJlcXVpcmUoXCIuL3RvUHJvcGVydHlLZXkuanNcIik7XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7XG4gIGtleSA9IHRvUHJvcGVydHlLZXkoa2V5KTtcbiAgaWYgKGtleSBpbiBvYmopIHtcbiAgICBfT2JqZWN0JGRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7XG4gICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgd3JpdGFibGU6IHRydWVcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBvYmpba2V5XSA9IHZhbHVlO1xuICB9XG4gIHJldHVybiBvYmo7XG59XG5tb2R1bGUuZXhwb3J0cyA9IF9kZWZpbmVQcm9wZXJ0eSwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzOyIsInZhciBfU3ltYm9sJHRvUHJpbWl0aXZlID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9mZWF0dXJlcy9zeW1ib2wvdG8tcHJpbWl0aXZlLmpzXCIpO1xudmFyIF90eXBlb2YgPSByZXF1aXJlKFwiLi90eXBlb2YuanNcIilbXCJkZWZhdWx0XCJdO1xuZnVuY3Rpb24gdG9QcmltaXRpdmUodCwgcikge1xuICBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKHQpIHx8ICF0KSByZXR1cm4gdDtcbiAgdmFyIGUgPSB0W19TeW1ib2wkdG9QcmltaXRpdmVdO1xuICBpZiAodm9pZCAwICE9PSBlKSB7XG4gICAgdmFyIGkgPSBlLmNhbGwodCwgciB8fCBcImRlZmF1bHRcIik7XG4gICAgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZihpKSkgcmV0dXJuIGk7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuXCIpO1xuICB9XG4gIHJldHVybiAoXCJzdHJpbmdcIiA9PT0gciA/IFN0cmluZyA6IE51bWJlcikodCk7XG59XG5tb2R1bGUuZXhwb3J0cyA9IHRvUHJpbWl0aXZlLCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwidmFyIF90eXBlb2YgPSByZXF1aXJlKFwiLi90eXBlb2YuanNcIilbXCJkZWZhdWx0XCJdO1xudmFyIHRvUHJpbWl0aXZlID0gcmVxdWlyZShcIi4vdG9QcmltaXRpdmUuanNcIik7XG5mdW5jdGlvbiB0b1Byb3BlcnR5S2V5KHQpIHtcbiAgdmFyIGkgPSB0b1ByaW1pdGl2ZSh0LCBcInN0cmluZ1wiKTtcbiAgcmV0dXJuIFwic3ltYm9sXCIgPT0gX3R5cGVvZihpKSA/IGkgOiBpICsgXCJcIjtcbn1cbm1vZHVsZS5leHBvcnRzID0gdG9Qcm9wZXJ0eUtleSwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzOyIsInZhciBfU3ltYm9sID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9mZWF0dXJlcy9zeW1ib2wvaW5kZXguanNcIik7XG52YXIgX1N5bWJvbCRpdGVyYXRvciA9IHJlcXVpcmUoXCJjb3JlLWpzLXB1cmUvZmVhdHVyZXMvc3ltYm9sL2l0ZXJhdG9yLmpzXCIpO1xuZnVuY3Rpb24gX3R5cGVvZihvKSB7XG4gIFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjtcblxuICByZXR1cm4gKG1vZHVsZS5leHBvcnRzID0gX3R5cGVvZiA9IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgX1N5bWJvbCAmJiBcInN5bWJvbFwiID09IHR5cGVvZiBfU3ltYm9sJGl0ZXJhdG9yID8gZnVuY3Rpb24gKG8pIHtcbiAgICByZXR1cm4gdHlwZW9mIG87XG4gIH0gOiBmdW5jdGlvbiAobykge1xuICAgIHJldHVybiBvICYmIFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgX1N5bWJvbCAmJiBvLmNvbnN0cnVjdG9yID09PSBfU3ltYm9sICYmIG8gIT09IF9TeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvO1xuICB9LCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHMpLCBfdHlwZW9mKG8pO1xufVxubW9kdWxlLmV4cG9ydHMgPSBfdHlwZW9mLCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL3N0YWJsZS9vYmplY3QvZGVmaW5lLXByb3BlcnR5Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL3N0YWJsZS9zeW1ib2wnKTtcblxucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lc25leHQuZnVuY3Rpb24ubWV0YWRhdGEnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXNuZXh0LnN5bWJvbC5hc3luYy1kaXNwb3NlJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzbmV4dC5zeW1ib2wuZGlzcG9zZScpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lc25leHQuc3ltYm9sLm1ldGFkYXRhJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL3N0YWJsZS9zeW1ib2wvaXRlcmF0b3InKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vc3RhYmxlL3N5bWJvbC90by1wcmltaXRpdmUnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLmFycmF5LmlzLWFycmF5Jyk7XG52YXIgcGF0aCA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9wYXRoJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGF0aC5BcnJheS5pc0FycmF5O1xuIiwiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vLi4vbW9kdWxlcy9lcy5hcnJheS5maWx0ZXInKTtcbnZhciBnZXRCdWlsdEluUHJvdG90eXBlTWV0aG9kID0gcmVxdWlyZSgnLi4vLi4vLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbi1wcm90b3R5cGUtbWV0aG9kJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0QnVpbHRJblByb3RvdHlwZU1ldGhvZCgnQXJyYXknLCAnZmlsdGVyJyk7XG4iLCIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi8uLi9tb2R1bGVzL2VzLmFycmF5LmZvci1lYWNoJyk7XG52YXIgZ2V0QnVpbHRJblByb3RvdHlwZU1ldGhvZCA9IHJlcXVpcmUoJy4uLy4uLy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4tcHJvdG90eXBlLW1ldGhvZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGdldEJ1aWx0SW5Qcm90b3R5cGVNZXRob2QoJ0FycmF5JywgJ2ZvckVhY2gnKTtcbiIsIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uLy4uL21vZHVsZXMvZXMuYXJyYXkuaW5jbHVkZXMnKTtcbnZhciBnZXRCdWlsdEluUHJvdG90eXBlTWV0aG9kID0gcmVxdWlyZSgnLi4vLi4vLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbi1wcm90b3R5cGUtbWV0aG9kJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0QnVpbHRJblByb3RvdHlwZU1ldGhvZCgnQXJyYXknLCAnaW5jbHVkZXMnKTtcbiIsIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uLy4uL21vZHVsZXMvZXMuYXJyYXkuaXRlcmF0b3InKTtcbnJlcXVpcmUoJy4uLy4uLy4uL21vZHVsZXMvZXMub2JqZWN0LnRvLXN0cmluZycpO1xudmFyIGdldEJ1aWx0SW5Qcm90b3R5cGVNZXRob2QgPSByZXF1aXJlKCcuLi8uLi8uLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluLXByb3RvdHlwZS1tZXRob2QnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBnZXRCdWlsdEluUHJvdG90eXBlTWV0aG9kKCdBcnJheScsICdrZXlzJyk7XG4iLCIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi8uLi9tb2R1bGVzL2VzLmFycmF5LnNvbWUnKTtcbnZhciBnZXRCdWlsdEluUHJvdG90eXBlTWV0aG9kID0gcmVxdWlyZSgnLi4vLi4vLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbi1wcm90b3R5cGUtbWV0aG9kJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0QnVpbHRJblByb3RvdHlwZU1ldGhvZCgnQXJyYXknLCAnc29tZScpO1xuIiwiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vLi4vbW9kdWxlcy9lcy5hcnJheS5zb3J0Jyk7XG52YXIgZ2V0QnVpbHRJblByb3RvdHlwZU1ldGhvZCA9IHJlcXVpcmUoJy4uLy4uLy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4tcHJvdG90eXBlLW1ldGhvZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGdldEJ1aWx0SW5Qcm90b3R5cGVNZXRob2QoJ0FycmF5JywgJ3NvcnQnKTtcbiIsIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuZGF0ZS5ub3cnKTtcbnZhciBwYXRoID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL3BhdGgnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXRoLkRhdGUubm93O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGlzUHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvb2JqZWN0LWlzLXByb3RvdHlwZS1vZicpO1xudmFyIG1ldGhvZCA9IHJlcXVpcmUoJy4uL2FycmF5L3ZpcnR1YWwvZmlsdGVyJyk7XG5cbnZhciBBcnJheVByb3RvdHlwZSA9IEFycmF5LnByb3RvdHlwZTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIG93biA9IGl0LmZpbHRlcjtcbiAgcmV0dXJuIGl0ID09PSBBcnJheVByb3RvdHlwZSB8fCAoaXNQcm90b3R5cGVPZihBcnJheVByb3RvdHlwZSwgaXQpICYmIG93biA9PT0gQXJyYXlQcm90b3R5cGUuZmlsdGVyKSA/IG1ldGhvZCA6IG93bjtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgaXNQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9vYmplY3QtaXMtcHJvdG90eXBlLW9mJyk7XG52YXIgYXJyYXlNZXRob2QgPSByZXF1aXJlKCcuLi9hcnJheS92aXJ0dWFsL2luY2x1ZGVzJyk7XG52YXIgc3RyaW5nTWV0aG9kID0gcmVxdWlyZSgnLi4vc3RyaW5nL3ZpcnR1YWwvaW5jbHVkZXMnKTtcblxudmFyIEFycmF5UHJvdG90eXBlID0gQXJyYXkucHJvdG90eXBlO1xudmFyIFN0cmluZ1Byb3RvdHlwZSA9IFN0cmluZy5wcm90b3R5cGU7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciBvd24gPSBpdC5pbmNsdWRlcztcbiAgaWYgKGl0ID09PSBBcnJheVByb3RvdHlwZSB8fCAoaXNQcm90b3R5cGVPZihBcnJheVByb3RvdHlwZSwgaXQpICYmIG93biA9PT0gQXJyYXlQcm90b3R5cGUuaW5jbHVkZXMpKSByZXR1cm4gYXJyYXlNZXRob2Q7XG4gIGlmICh0eXBlb2YgaXQgPT0gJ3N0cmluZycgfHwgaXQgPT09IFN0cmluZ1Byb3RvdHlwZSB8fCAoaXNQcm90b3R5cGVPZihTdHJpbmdQcm90b3R5cGUsIGl0KSAmJiBvd24gPT09IFN0cmluZ1Byb3RvdHlwZS5pbmNsdWRlcykpIHtcbiAgICByZXR1cm4gc3RyaW5nTWV0aG9kO1xuICB9IHJldHVybiBvd247XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGlzUHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvb2JqZWN0LWlzLXByb3RvdHlwZS1vZicpO1xudmFyIG1ldGhvZCA9IHJlcXVpcmUoJy4uL2FycmF5L3ZpcnR1YWwvc29tZScpO1xuXG52YXIgQXJyYXlQcm90b3R5cGUgPSBBcnJheS5wcm90b3R5cGU7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciBvd24gPSBpdC5zb21lO1xuICByZXR1cm4gaXQgPT09IEFycmF5UHJvdG90eXBlIHx8IChpc1Byb3RvdHlwZU9mKEFycmF5UHJvdG90eXBlLCBpdCkgJiYgb3duID09PSBBcnJheVByb3RvdHlwZS5zb21lKSA/IG1ldGhvZCA6IG93bjtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgaXNQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9vYmplY3QtaXMtcHJvdG90eXBlLW9mJyk7XG52YXIgbWV0aG9kID0gcmVxdWlyZSgnLi4vYXJyYXkvdmlydHVhbC9zb3J0Jyk7XG5cbnZhciBBcnJheVByb3RvdHlwZSA9IEFycmF5LnByb3RvdHlwZTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIG93biA9IGl0LnNvcnQ7XG4gIHJldHVybiBpdCA9PT0gQXJyYXlQcm90b3R5cGUgfHwgKGlzUHJvdG90eXBlT2YoQXJyYXlQcm90b3R5cGUsIGl0KSAmJiBvd24gPT09IEFycmF5UHJvdG90eXBlLnNvcnQpID8gbWV0aG9kIDogb3duO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBpc1Byb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YnKTtcbnZhciBtZXRob2QgPSByZXF1aXJlKCcuLi9zdHJpbmcvdmlydHVhbC90cmltJyk7XG5cbnZhciBTdHJpbmdQcm90b3R5cGUgPSBTdHJpbmcucHJvdG90eXBlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgb3duID0gaXQudHJpbTtcbiAgcmV0dXJuIHR5cGVvZiBpdCA9PSAnc3RyaW5nJyB8fCBpdCA9PT0gU3RyaW5nUHJvdG90eXBlXG4gICAgfHwgKGlzUHJvdG90eXBlT2YoU3RyaW5nUHJvdG90eXBlLCBpdCkgJiYgb3duID09PSBTdHJpbmdQcm90b3R5cGUudHJpbSkgPyBtZXRob2QgOiBvd247XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5kYXRlLnRvLWpzb24nKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuanNvbi5zdHJpbmdpZnknKTtcbnZhciBwYXRoID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL3BhdGgnKTtcbnZhciBhcHBseSA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9mdW5jdGlvbi1hcHBseScpO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tanNvbiAtLSBzYWZlXG5pZiAoIXBhdGguSlNPTikgcGF0aC5KU09OID0geyBzdHJpbmdpZnk6IEpTT04uc3RyaW5naWZ5IH07XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFycyAtLSByZXF1aXJlZCBmb3IgYC5sZW5ndGhgXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHN0cmluZ2lmeShpdCwgcmVwbGFjZXIsIHNwYWNlKSB7XG4gIHJldHVybiBhcHBseShwYXRoLkpTT04uc3RyaW5naWZ5LCBudWxsLCBhcmd1bWVudHMpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMub2JqZWN0LmFzc2lnbicpO1xudmFyIHBhdGggPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvcGF0aCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhdGguT2JqZWN0LmFzc2lnbjtcbiIsIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMub2JqZWN0LmRlZmluZS1wcm9wZXJ0aWVzJyk7XG52YXIgcGF0aCA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9wYXRoJyk7XG5cbnZhciBPYmplY3QgPSBwYXRoLk9iamVjdDtcblxudmFyIGRlZmluZVByb3BlcnRpZXMgPSBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGRlZmluZVByb3BlcnRpZXMoVCwgRCkge1xuICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoVCwgRCk7XG59O1xuXG5pZiAoT2JqZWN0LmRlZmluZVByb3BlcnRpZXMuc2hhbSkgZGVmaW5lUHJvcGVydGllcy5zaGFtID0gdHJ1ZTtcbiIsIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMub2JqZWN0LmRlZmluZS1wcm9wZXJ0eScpO1xudmFyIHBhdGggPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvcGF0aCcpO1xuXG52YXIgT2JqZWN0ID0gcGF0aC5PYmplY3Q7XG5cbnZhciBkZWZpbmVQcm9wZXJ0eSA9IG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZGVmaW5lUHJvcGVydHkoaXQsIGtleSwgZGVzYykge1xuICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGl0LCBrZXksIGRlc2MpO1xufTtcblxuaWYgKE9iamVjdC5kZWZpbmVQcm9wZXJ0eS5zaGFtKSBkZWZpbmVQcm9wZXJ0eS5zaGFtID0gdHJ1ZTtcbiIsIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMub2JqZWN0LmdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvcicpO1xudmFyIHBhdGggPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvcGF0aCcpO1xuXG52YXIgT2JqZWN0ID0gcGF0aC5PYmplY3Q7XG5cbnZhciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihpdCwga2V5KSB7XG4gIHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGl0LCBrZXkpO1xufTtcblxuaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iuc2hhbSkgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yLnNoYW0gPSB0cnVlO1xuIiwiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5vYmplY3QuZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9ycycpO1xudmFyIHBhdGggPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvcGF0aCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhdGguT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnM7XG4iLCIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLnN5bWJvbCcpO1xudmFyIHBhdGggPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvcGF0aCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhdGguT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scztcbiIsIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMub2JqZWN0LmtleXMnKTtcbnZhciBwYXRoID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL3BhdGgnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXRoLk9iamVjdC5rZXlzO1xuIiwiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5hZ2dyZWdhdGUtZXJyb3InKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuYXJyYXkuaXRlcmF0b3InKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMub2JqZWN0LnRvLXN0cmluZycpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5wcm9taXNlJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLnByb21pc2UuYWxsLXNldHRsZWQnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMucHJvbWlzZS5hbnknKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMucHJvbWlzZS53aXRoLXJlc29sdmVycycpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5wcm9taXNlLmZpbmFsbHknKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuc3RyaW5nLml0ZXJhdG9yJyk7XG52YXIgcGF0aCA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9wYXRoJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGF0aC5Qcm9taXNlO1xuIiwiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5hcnJheS5pdGVyYXRvcicpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5vYmplY3QudG8tc3RyaW5nJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLnNldCcpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5zZXQuZGlmZmVyZW5jZS52MicpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5zZXQuaW50ZXJzZWN0aW9uLnYyJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLnNldC5pcy1kaXNqb2ludC1mcm9tLnYyJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLnNldC5pcy1zdWJzZXQtb2YudjInKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuc2V0LmlzLXN1cGVyc2V0LW9mLnYyJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLnNldC5zeW1tZXRyaWMtZGlmZmVyZW5jZS52MicpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5zZXQudW5pb24udjInKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuc3RyaW5nLml0ZXJhdG9yJyk7XG52YXIgcGF0aCA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9wYXRoJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGF0aC5TZXQ7XG4iLCIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi8uLi9tb2R1bGVzL2VzLnN0cmluZy5pbmNsdWRlcycpO1xudmFyIGdldEJ1aWx0SW5Qcm90b3R5cGVNZXRob2QgPSByZXF1aXJlKCcuLi8uLi8uLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluLXByb3RvdHlwZS1tZXRob2QnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBnZXRCdWlsdEluUHJvdG90eXBlTWV0aG9kKCdTdHJpbmcnLCAnaW5jbHVkZXMnKTtcbiIsIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uLy4uL21vZHVsZXMvZXMuc3RyaW5nLnRyaW0nKTtcbnZhciBnZXRCdWlsdEluUHJvdG90eXBlTWV0aG9kID0gcmVxdWlyZSgnLi4vLi4vLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbi1wcm90b3R5cGUtbWV0aG9kJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0QnVpbHRJblByb3RvdHlwZU1ldGhvZCgnU3RyaW5nJywgJ3RyaW0nKTtcbiIsIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuYXJyYXkuY29uY2F0Jyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLm9iamVjdC50by1zdHJpbmcnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuc3ltYm9sJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLnN5bWJvbC5hc3luYy1pdGVyYXRvcicpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5zeW1ib2wuZGVzY3JpcHRpb24nKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuc3ltYm9sLmhhcy1pbnN0YW5jZScpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5zeW1ib2wuaXMtY29uY2F0LXNwcmVhZGFibGUnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuc3ltYm9sLml0ZXJhdG9yJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLnN5bWJvbC5tYXRjaCcpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5zeW1ib2wubWF0Y2gtYWxsJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLnN5bWJvbC5yZXBsYWNlJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLnN5bWJvbC5zZWFyY2gnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuc3ltYm9sLnNwZWNpZXMnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuc3ltYm9sLnNwbGl0Jyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLnN5bWJvbC50by1wcmltaXRpdmUnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuc3ltYm9sLnRvLXN0cmluZy10YWcnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuc3ltYm9sLnVuc2NvcGFibGVzJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLmpzb24udG8tc3RyaW5nLXRhZycpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5tYXRoLnRvLXN0cmluZy10YWcnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMucmVmbGVjdC50by1zdHJpbmctdGFnJyk7XG52YXIgcGF0aCA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9wYXRoJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGF0aC5TeW1ib2w7XG4iLCIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLmFycmF5Lml0ZXJhdG9yJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLm9iamVjdC50by1zdHJpbmcnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuc3RyaW5nLml0ZXJhdG9yJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLnN5bWJvbC5pdGVyYXRvcicpO1xudmFyIFdyYXBwZWRXZWxsS25vd25TeW1ib2xNb2R1bGUgPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wtd3JhcHBlZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFdyYXBwZWRXZWxsS25vd25TeW1ib2xNb2R1bGUuZignaXRlcmF0b3InKTtcbiIsIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuZGF0ZS50by1wcmltaXRpdmUnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuc3ltYm9sLnRvLXByaW1pdGl2ZScpO1xudmFyIFdyYXBwZWRXZWxsS25vd25TeW1ib2xNb2R1bGUgPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wtd3JhcHBlZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFdyYXBwZWRXZWxsS25vd25TeW1ib2xNb2R1bGUuZigndG9QcmltaXRpdmUnKTtcbiIsIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi4vLi4vZnVsbC9vYmplY3QvZGVmaW5lLXByb3BlcnR5Jyk7XG4iLCIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4uLy4uL2Z1bGwvc3ltYm9sJyk7XG4iLCIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4uLy4uL2Z1bGwvc3ltYm9sL2l0ZXJhdG9yJyk7XG4iLCIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4uLy4uL2Z1bGwvc3ltYm9sL3RvLXByaW1pdGl2ZScpO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL2FjdHVhbC9vYmplY3QvZGVmaW5lLXByb3BlcnR5Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL2FjdHVhbC9zeW1ib2wnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXNuZXh0LnN5bWJvbC5pcy1yZWdpc3RlcmVkLXN5bWJvbCcpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lc25leHQuc3ltYm9sLmlzLXdlbGwta25vd24tc3ltYm9sJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzbmV4dC5zeW1ib2wuY3VzdG9tLW1hdGNoZXInKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXNuZXh0LnN5bWJvbC5vYnNlcnZhYmxlJyk7XG4vLyBUT0RPOiBSZW1vdmUgZnJvbSBgY29yZS1qc0A0YFxucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lc25leHQuc3ltYm9sLmlzLXJlZ2lzdGVyZWQnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXNuZXh0LnN5bWJvbC5pcy13ZWxsLWtub3duJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzbmV4dC5zeW1ib2wubWF0Y2hlcicpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lc25leHQuc3ltYm9sLm1ldGFkYXRhLWtleScpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lc25leHQuc3ltYm9sLnBhdHRlcm4tbWF0Y2gnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXNuZXh0LnN5bWJvbC5yZXBsYWNlLWFsbCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9hY3R1YWwvc3ltYm9sL2l0ZXJhdG9yJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL2FjdHVhbC9zeW1ib2wvdG8tcHJpbWl0aXZlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciB0cnlUb1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90cnktdG8tc3RyaW5nJyk7XG5cbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG4vLyBgQXNzZXJ0OiBJc0NhbGxhYmxlKGFyZ3VtZW50KSBpcyB0cnVlYFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgaWYgKGlzQ2FsbGFibGUoYXJndW1lbnQpKSByZXR1cm4gYXJndW1lbnQ7XG4gIHRocm93IG5ldyAkVHlwZUVycm9yKHRyeVRvU3RyaW5nKGFyZ3VtZW50KSArICcgaXMgbm90IGEgZnVuY3Rpb24nKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgaXNDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jb25zdHJ1Y3RvcicpO1xudmFyIHRyeVRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RyeS10by1zdHJpbmcnKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbi8vIGBBc3NlcnQ6IElzQ29uc3RydWN0b3IoYXJndW1lbnQpIGlzIHRydWVgXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICBpZiAoaXNDb25zdHJ1Y3Rvcihhcmd1bWVudCkpIHJldHVybiBhcmd1bWVudDtcbiAgdGhyb3cgbmV3ICRUeXBlRXJyb3IodHJ5VG9TdHJpbmcoYXJndW1lbnQpICsgJyBpcyBub3QgYSBjb25zdHJ1Y3RvcicpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBpc1Bvc3NpYmxlUHJvdG90eXBlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXBvc3NpYmxlLXByb3RvdHlwZScpO1xuXG52YXIgJFN0cmluZyA9IFN0cmluZztcbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICBpZiAoaXNQb3NzaWJsZVByb3RvdHlwZShhcmd1bWVudCkpIHJldHVybiBhcmd1bWVudDtcbiAgdGhyb3cgbmV3ICRUeXBlRXJyb3IoXCJDYW4ndCBzZXQgXCIgKyAkU3RyaW5nKGFyZ3VtZW50KSArICcgYXMgYSBwcm90b3R5cGUnKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgdHJ5VG9TdHJpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdHJ5LXRvLXN0cmluZycpO1xuXG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcblxuLy8gUGVyZm9ybSA/IFJlcXVpcmVJbnRlcm5hbFNsb3QoTSwgW1tTZXREYXRhXV0pXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICBpZiAodHlwZW9mIGl0ID09ICdvYmplY3QnICYmICdzaXplJyBpbiBpdCAmJiAnaGFzJyBpbiBpdCAmJiAnYWRkJyBpbiBpdCAmJiAnZGVsZXRlJyBpbiBpdCAmJiAna2V5cycgaW4gaXQpIHJldHVybiBpdDtcbiAgdGhyb3cgbmV3ICRUeXBlRXJyb3IodHJ5VG9TdHJpbmcoaXQpICsgJyBpcyBub3QgYSBzZXQnKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBpc1Byb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YnKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0LCBQcm90b3R5cGUpIHtcbiAgaWYgKGlzUHJvdG90eXBlT2YoUHJvdG90eXBlLCBpdCkpIHJldHVybiBpdDtcbiAgdGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0luY29ycmVjdCBpbnZvY2F0aW9uJyk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xuXG52YXIgJFN0cmluZyA9IFN0cmluZztcbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG4vLyBgQXNzZXJ0OiBUeXBlKGFyZ3VtZW50KSBpcyBPYmplY3RgXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICBpZiAoaXNPYmplY3QoYXJndW1lbnQpKSByZXR1cm4gYXJndW1lbnQ7XG4gIHRocm93IG5ldyAkVHlwZUVycm9yKCRTdHJpbmcoYXJndW1lbnQpICsgJyBpcyBub3QgYW4gb2JqZWN0Jyk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gRkYyNi0gYnVnOiBBcnJheUJ1ZmZlcnMgYXJlIG5vbi1leHRlbnNpYmxlLCBidXQgT2JqZWN0LmlzRXh0ZW5zaWJsZSBkb2VzIG5vdCByZXBvcnQgaXRcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgaWYgKHR5cGVvZiBBcnJheUJ1ZmZlciA9PSAnZnVuY3Rpb24nKSB7XG4gICAgdmFyIGJ1ZmZlciA9IG5ldyBBcnJheUJ1ZmZlcig4KTtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWlzZXh0ZW5zaWJsZSwgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnR5IC0tIHNhZmVcbiAgICBpZiAoT2JqZWN0LmlzRXh0ZW5zaWJsZShidWZmZXIpKSBPYmplY3QuZGVmaW5lUHJvcGVydHkoYnVmZmVyLCAnYScsIHsgdmFsdWU6IDggfSk7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICRmb3JFYWNoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LWl0ZXJhdGlvbicpLmZvckVhY2g7XG52YXIgYXJyYXlNZXRob2RJc1N0cmljdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1tZXRob2QtaXMtc3RyaWN0Jyk7XG5cbnZhciBTVFJJQ1RfTUVUSE9EID0gYXJyYXlNZXRob2RJc1N0cmljdCgnZm9yRWFjaCcpO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLmZvckVhY2hgIG1ldGhvZCBpbXBsZW1lbnRhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuZm9yZWFjaFxubW9kdWxlLmV4cG9ydHMgPSAhU1RSSUNUX01FVEhPRCA/IGZ1bmN0aW9uIGZvckVhY2goY2FsbGJhY2tmbiAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgcmV0dXJuICRmb3JFYWNoKHRoaXMsIGNhbGxiYWNrZm4sIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1hcnJheS1wcm90b3R5cGUtZm9yZWFjaCAtLSBzYWZlXG59IDogW10uZm9yRWFjaDtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBiaW5kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtY29udGV4dCcpO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLW9iamVjdCcpO1xudmFyIGNhbGxXaXRoU2FmZUl0ZXJhdGlvbkNsb3NpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2FsbC13aXRoLXNhZmUtaXRlcmF0aW9uLWNsb3NpbmcnKTtcbnZhciBpc0FycmF5SXRlcmF0b3JNZXRob2QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtYXJyYXktaXRlcmF0b3ItbWV0aG9kJyk7XG52YXIgaXNDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jb25zdHJ1Y3RvcicpO1xudmFyIGxlbmd0aE9mQXJyYXlMaWtlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2xlbmd0aC1vZi1hcnJheS1saWtlJyk7XG52YXIgY3JlYXRlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5Jyk7XG52YXIgZ2V0SXRlcmF0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWl0ZXJhdG9yJyk7XG52YXIgZ2V0SXRlcmF0b3JNZXRob2QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWl0ZXJhdG9yLW1ldGhvZCcpO1xuXG52YXIgJEFycmF5ID0gQXJyYXk7XG5cbi8vIGBBcnJheS5mcm9tYCBtZXRob2QgaW1wbGVtZW50YXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkuZnJvbVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBmcm9tKGFycmF5TGlrZSAvKiAsIG1hcGZuID0gdW5kZWZpbmVkLCB0aGlzQXJnID0gdW5kZWZpbmVkICovKSB7XG4gIHZhciBPID0gdG9PYmplY3QoYXJyYXlMaWtlKTtcbiAgdmFyIElTX0NPTlNUUlVDVE9SID0gaXNDb25zdHJ1Y3Rvcih0aGlzKTtcbiAgdmFyIGFyZ3VtZW50c0xlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gIHZhciBtYXBmbiA9IGFyZ3VtZW50c0xlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQ7XG4gIHZhciBtYXBwaW5nID0gbWFwZm4gIT09IHVuZGVmaW5lZDtcbiAgaWYgKG1hcHBpbmcpIG1hcGZuID0gYmluZChtYXBmbiwgYXJndW1lbnRzTGVuZ3RoID4gMiA/IGFyZ3VtZW50c1syXSA6IHVuZGVmaW5lZCk7XG4gIHZhciBpdGVyYXRvck1ldGhvZCA9IGdldEl0ZXJhdG9yTWV0aG9kKE8pO1xuICB2YXIgaW5kZXggPSAwO1xuICB2YXIgbGVuZ3RoLCByZXN1bHQsIHN0ZXAsIGl0ZXJhdG9yLCBuZXh0LCB2YWx1ZTtcbiAgLy8gaWYgdGhlIHRhcmdldCBpcyBub3QgaXRlcmFibGUgb3IgaXQncyBhbiBhcnJheSB3aXRoIHRoZSBkZWZhdWx0IGl0ZXJhdG9yIC0gdXNlIGEgc2ltcGxlIGNhc2VcbiAgaWYgKGl0ZXJhdG9yTWV0aG9kICYmICEodGhpcyA9PT0gJEFycmF5ICYmIGlzQXJyYXlJdGVyYXRvck1ldGhvZChpdGVyYXRvck1ldGhvZCkpKSB7XG4gICAgcmVzdWx0ID0gSVNfQ09OU1RSVUNUT1IgPyBuZXcgdGhpcygpIDogW107XG4gICAgaXRlcmF0b3IgPSBnZXRJdGVyYXRvcihPLCBpdGVyYXRvck1ldGhvZCk7XG4gICAgbmV4dCA9IGl0ZXJhdG9yLm5leHQ7XG4gICAgZm9yICg7IShzdGVwID0gY2FsbChuZXh0LCBpdGVyYXRvcikpLmRvbmU7IGluZGV4KyspIHtcbiAgICAgIHZhbHVlID0gbWFwcGluZyA/IGNhbGxXaXRoU2FmZUl0ZXJhdGlvbkNsb3NpbmcoaXRlcmF0b3IsIG1hcGZuLCBbc3RlcC52YWx1ZSwgaW5kZXhdLCB0cnVlKSA6IHN0ZXAudmFsdWU7XG4gICAgICBjcmVhdGVQcm9wZXJ0eShyZXN1bHQsIGluZGV4LCB2YWx1ZSk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGxlbmd0aCA9IGxlbmd0aE9mQXJyYXlMaWtlKE8pO1xuICAgIHJlc3VsdCA9IElTX0NPTlNUUlVDVE9SID8gbmV3IHRoaXMobGVuZ3RoKSA6ICRBcnJheShsZW5ndGgpO1xuICAgIGZvciAoO2xlbmd0aCA+IGluZGV4OyBpbmRleCsrKSB7XG4gICAgICB2YWx1ZSA9IG1hcHBpbmcgPyBtYXBmbihPW2luZGV4XSwgaW5kZXgpIDogT1tpbmRleF07XG4gICAgICBjcmVhdGVQcm9wZXJ0eShyZXN1bHQsIGluZGV4LCB2YWx1ZSk7XG4gICAgfVxuICB9XG4gIHJlc3VsdC5sZW5ndGggPSBpbmRleDtcbiAgcmV0dXJuIHJlc3VsdDtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgdG9JbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0Jyk7XG52YXIgdG9BYnNvbHV0ZUluZGV4ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWFic29sdXRlLWluZGV4Jyk7XG52YXIgbGVuZ3RoT2ZBcnJheUxpa2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbGVuZ3RoLW9mLWFycmF5LWxpa2UnKTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS57IGluZGV4T2YsIGluY2x1ZGVzIH1gIG1ldGhvZHMgaW1wbGVtZW50YXRpb25cbnZhciBjcmVhdGVNZXRob2QgPSBmdW5jdGlvbiAoSVNfSU5DTFVERVMpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgkdGhpcywgZWwsIGZyb21JbmRleCkge1xuICAgIHZhciBPID0gdG9JbmRleGVkT2JqZWN0KCR0aGlzKTtcbiAgICB2YXIgbGVuZ3RoID0gbGVuZ3RoT2ZBcnJheUxpa2UoTyk7XG4gICAgaWYgKGxlbmd0aCA9PT0gMCkgcmV0dXJuICFJU19JTkNMVURFUyAmJiAtMTtcbiAgICB2YXIgaW5kZXggPSB0b0Fic29sdXRlSW5kZXgoZnJvbUluZGV4LCBsZW5ndGgpO1xuICAgIHZhciB2YWx1ZTtcbiAgICAvLyBBcnJheSNpbmNsdWRlcyB1c2VzIFNhbWVWYWx1ZVplcm8gZXF1YWxpdHkgYWxnb3JpdGhtXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZSAtLSBOYU4gY2hlY2tcbiAgICBpZiAoSVNfSU5DTFVERVMgJiYgZWwgIT09IGVsKSB3aGlsZSAobGVuZ3RoID4gaW5kZXgpIHtcbiAgICAgIHZhbHVlID0gT1tpbmRleCsrXTtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmUgLS0gTmFOIGNoZWNrXG4gICAgICBpZiAodmFsdWUgIT09IHZhbHVlKSByZXR1cm4gdHJ1ZTtcbiAgICAvLyBBcnJheSNpbmRleE9mIGlnbm9yZXMgaG9sZXMsIEFycmF5I2luY2x1ZGVzIC0gbm90XG4gICAgfSBlbHNlIGZvciAoO2xlbmd0aCA+IGluZGV4OyBpbmRleCsrKSB7XG4gICAgICBpZiAoKElTX0lOQ0xVREVTIHx8IGluZGV4IGluIE8pICYmIE9baW5kZXhdID09PSBlbCkgcmV0dXJuIElTX0lOQ0xVREVTIHx8IGluZGV4IHx8IDA7XG4gICAgfSByZXR1cm4gIUlTX0lOQ0xVREVTICYmIC0xO1xuICB9O1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIC8vIGBBcnJheS5wcm90b3R5cGUuaW5jbHVkZXNgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5pbmNsdWRlc1xuICBpbmNsdWRlczogY3JlYXRlTWV0aG9kKHRydWUpLFxuICAvLyBgQXJyYXkucHJvdG90eXBlLmluZGV4T2ZgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5pbmRleG9mXG4gIGluZGV4T2Y6IGNyZWF0ZU1ldGhvZChmYWxzZSlcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgYmluZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLWNvbnRleHQnKTtcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBJbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2luZGV4ZWQtb2JqZWN0Jyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tb2JqZWN0Jyk7XG52YXIgbGVuZ3RoT2ZBcnJheUxpa2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbGVuZ3RoLW9mLWFycmF5LWxpa2UnKTtcbnZhciBhcnJheVNwZWNpZXNDcmVhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktc3BlY2llcy1jcmVhdGUnKTtcblxudmFyIHB1c2ggPSB1bmN1cnJ5VGhpcyhbXS5wdXNoKTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS57IGZvckVhY2gsIG1hcCwgZmlsdGVyLCBzb21lLCBldmVyeSwgZmluZCwgZmluZEluZGV4LCBmaWx0ZXJSZWplY3QgfWAgbWV0aG9kcyBpbXBsZW1lbnRhdGlvblxudmFyIGNyZWF0ZU1ldGhvZCA9IGZ1bmN0aW9uIChUWVBFKSB7XG4gIHZhciBJU19NQVAgPSBUWVBFID09PSAxO1xuICB2YXIgSVNfRklMVEVSID0gVFlQRSA9PT0gMjtcbiAgdmFyIElTX1NPTUUgPSBUWVBFID09PSAzO1xuICB2YXIgSVNfRVZFUlkgPSBUWVBFID09PSA0O1xuICB2YXIgSVNfRklORF9JTkRFWCA9IFRZUEUgPT09IDY7XG4gIHZhciBJU19GSUxURVJfUkVKRUNUID0gVFlQRSA9PT0gNztcbiAgdmFyIE5PX0hPTEVTID0gVFlQRSA9PT0gNSB8fCBJU19GSU5EX0lOREVYO1xuICByZXR1cm4gZnVuY3Rpb24gKCR0aGlzLCBjYWxsYmFja2ZuLCB0aGF0LCBzcGVjaWZpY0NyZWF0ZSkge1xuICAgIHZhciBPID0gdG9PYmplY3QoJHRoaXMpO1xuICAgIHZhciBzZWxmID0gSW5kZXhlZE9iamVjdChPKTtcbiAgICB2YXIgbGVuZ3RoID0gbGVuZ3RoT2ZBcnJheUxpa2Uoc2VsZik7XG4gICAgdmFyIGJvdW5kRnVuY3Rpb24gPSBiaW5kKGNhbGxiYWNrZm4sIHRoYXQpO1xuICAgIHZhciBpbmRleCA9IDA7XG4gICAgdmFyIGNyZWF0ZSA9IHNwZWNpZmljQ3JlYXRlIHx8IGFycmF5U3BlY2llc0NyZWF0ZTtcbiAgICB2YXIgdGFyZ2V0ID0gSVNfTUFQID8gY3JlYXRlKCR0aGlzLCBsZW5ndGgpIDogSVNfRklMVEVSIHx8IElTX0ZJTFRFUl9SRUpFQ1QgPyBjcmVhdGUoJHRoaXMsIDApIDogdW5kZWZpbmVkO1xuICAgIHZhciB2YWx1ZSwgcmVzdWx0O1xuICAgIGZvciAoO2xlbmd0aCA+IGluZGV4OyBpbmRleCsrKSBpZiAoTk9fSE9MRVMgfHwgaW5kZXggaW4gc2VsZikge1xuICAgICAgdmFsdWUgPSBzZWxmW2luZGV4XTtcbiAgICAgIHJlc3VsdCA9IGJvdW5kRnVuY3Rpb24odmFsdWUsIGluZGV4LCBPKTtcbiAgICAgIGlmIChUWVBFKSB7XG4gICAgICAgIGlmIChJU19NQVApIHRhcmdldFtpbmRleF0gPSByZXN1bHQ7IC8vIG1hcFxuICAgICAgICBlbHNlIGlmIChyZXN1bHQpIHN3aXRjaCAoVFlQRSkge1xuICAgICAgICAgIGNhc2UgMzogcmV0dXJuIHRydWU7ICAgICAgICAgICAgICAvLyBzb21lXG4gICAgICAgICAgY2FzZSA1OiByZXR1cm4gdmFsdWU7ICAgICAgICAgICAgIC8vIGZpbmRcbiAgICAgICAgICBjYXNlIDY6IHJldHVybiBpbmRleDsgICAgICAgICAgICAgLy8gZmluZEluZGV4XG4gICAgICAgICAgY2FzZSAyOiBwdXNoKHRhcmdldCwgdmFsdWUpOyAgICAgIC8vIGZpbHRlclxuICAgICAgICB9IGVsc2Ugc3dpdGNoIChUWVBFKSB7XG4gICAgICAgICAgY2FzZSA0OiByZXR1cm4gZmFsc2U7ICAgICAgICAgICAgIC8vIGV2ZXJ5XG4gICAgICAgICAgY2FzZSA3OiBwdXNoKHRhcmdldCwgdmFsdWUpOyAgICAgIC8vIGZpbHRlclJlamVjdFxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBJU19GSU5EX0lOREVYID8gLTEgOiBJU19TT01FIHx8IElTX0VWRVJZID8gSVNfRVZFUlkgOiB0YXJnZXQ7XG4gIH07XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgLy8gYEFycmF5LnByb3RvdHlwZS5mb3JFYWNoYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuZm9yZWFjaFxuICBmb3JFYWNoOiBjcmVhdGVNZXRob2QoMCksXG4gIC8vIGBBcnJheS5wcm90b3R5cGUubWFwYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUubWFwXG4gIG1hcDogY3JlYXRlTWV0aG9kKDEpLFxuICAvLyBgQXJyYXkucHJvdG90eXBlLmZpbHRlcmAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmZpbHRlclxuICBmaWx0ZXI6IGNyZWF0ZU1ldGhvZCgyKSxcbiAgLy8gYEFycmF5LnByb3RvdHlwZS5zb21lYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuc29tZVxuICBzb21lOiBjcmVhdGVNZXRob2QoMyksXG4gIC8vIGBBcnJheS5wcm90b3R5cGUuZXZlcnlgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5ldmVyeVxuICBldmVyeTogY3JlYXRlTWV0aG9kKDQpLFxuICAvLyBgQXJyYXkucHJvdG90eXBlLmZpbmRgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5maW5kXG4gIGZpbmQ6IGNyZWF0ZU1ldGhvZCg1KSxcbiAgLy8gYEFycmF5LnByb3RvdHlwZS5maW5kSW5kZXhgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5maW5kSW5kZXhcbiAgZmluZEluZGV4OiBjcmVhdGVNZXRob2QoNiksXG4gIC8vIGBBcnJheS5wcm90b3R5cGUuZmlsdGVyUmVqZWN0YCBtZXRob2RcbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtYXJyYXktZmlsdGVyaW5nXG4gIGZpbHRlclJlamVjdDogY3JlYXRlTWV0aG9kKDcpXG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG52YXIgVjhfVkVSU0lPTiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbnZpcm9ubWVudC12OC12ZXJzaW9uJyk7XG5cbnZhciBTUEVDSUVTID0gd2VsbEtub3duU3ltYm9sKCdzcGVjaWVzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKE1FVEhPRF9OQU1FKSB7XG4gIC8vIFdlIGNhbid0IHVzZSB0aGlzIGZlYXR1cmUgZGV0ZWN0aW9uIGluIFY4IHNpbmNlIGl0IGNhdXNlc1xuICAvLyBkZW9wdGltaXphdGlvbiBhbmQgc2VyaW91cyBwZXJmb3JtYW5jZSBkZWdyYWRhdGlvblxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvNjc3XG4gIHJldHVybiBWOF9WRVJTSU9OID49IDUxIHx8ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGFycmF5ID0gW107XG4gICAgdmFyIGNvbnN0cnVjdG9yID0gYXJyYXkuY29uc3RydWN0b3IgPSB7fTtcbiAgICBjb25zdHJ1Y3RvcltTUEVDSUVTXSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiB7IGZvbzogMSB9O1xuICAgIH07XG4gICAgcmV0dXJuIGFycmF5W01FVEhPRF9OQU1FXShCb29sZWFuKS5mb28gIT09IDE7XG4gIH0pO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChNRVRIT0RfTkFNRSwgYXJndW1lbnQpIHtcbiAgdmFyIG1ldGhvZCA9IFtdW01FVEhPRF9OQU1FXTtcbiAgcmV0dXJuICEhbWV0aG9kICYmIGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdXNlbGVzcy1jYWxsIC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG4gICAgbWV0aG9kLmNhbGwobnVsbCwgYXJndW1lbnQgfHwgZnVuY3Rpb24gKCkgeyByZXR1cm4gMTsgfSwgMSk7XG4gIH0pO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSB1bmN1cnJ5VGhpcyhbXS5zbGljZSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgYXJyYXlTbGljZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1zbGljZScpO1xuXG52YXIgZmxvb3IgPSBNYXRoLmZsb29yO1xuXG52YXIgc29ydCA9IGZ1bmN0aW9uIChhcnJheSwgY29tcGFyZWZuKSB7XG4gIHZhciBsZW5ndGggPSBhcnJheS5sZW5ndGg7XG5cbiAgaWYgKGxlbmd0aCA8IDgpIHtcbiAgICAvLyBpbnNlcnRpb24gc29ydFxuICAgIHZhciBpID0gMTtcbiAgICB2YXIgZWxlbWVudCwgajtcblxuICAgIHdoaWxlIChpIDwgbGVuZ3RoKSB7XG4gICAgICBqID0gaTtcbiAgICAgIGVsZW1lbnQgPSBhcnJheVtpXTtcbiAgICAgIHdoaWxlIChqICYmIGNvbXBhcmVmbihhcnJheVtqIC0gMV0sIGVsZW1lbnQpID4gMCkge1xuICAgICAgICBhcnJheVtqXSA9IGFycmF5Wy0tal07XG4gICAgICB9XG4gICAgICBpZiAoaiAhPT0gaSsrKSBhcnJheVtqXSA9IGVsZW1lbnQ7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIC8vIG1lcmdlIHNvcnRcbiAgICB2YXIgbWlkZGxlID0gZmxvb3IobGVuZ3RoIC8gMik7XG4gICAgdmFyIGxlZnQgPSBzb3J0KGFycmF5U2xpY2UoYXJyYXksIDAsIG1pZGRsZSksIGNvbXBhcmVmbik7XG4gICAgdmFyIHJpZ2h0ID0gc29ydChhcnJheVNsaWNlKGFycmF5LCBtaWRkbGUpLCBjb21wYXJlZm4pO1xuICAgIHZhciBsbGVuZ3RoID0gbGVmdC5sZW5ndGg7XG4gICAgdmFyIHJsZW5ndGggPSByaWdodC5sZW5ndGg7XG4gICAgdmFyIGxpbmRleCA9IDA7XG4gICAgdmFyIHJpbmRleCA9IDA7XG5cbiAgICB3aGlsZSAobGluZGV4IDwgbGxlbmd0aCB8fCByaW5kZXggPCBybGVuZ3RoKSB7XG4gICAgICBhcnJheVtsaW5kZXggKyByaW5kZXhdID0gKGxpbmRleCA8IGxsZW5ndGggJiYgcmluZGV4IDwgcmxlbmd0aClcbiAgICAgICAgPyBjb21wYXJlZm4obGVmdFtsaW5kZXhdLCByaWdodFtyaW5kZXhdKSA8PSAwID8gbGVmdFtsaW5kZXgrK10gOiByaWdodFtyaW5kZXgrK11cbiAgICAgICAgOiBsaW5kZXggPCBsbGVuZ3RoID8gbGVmdFtsaW5kZXgrK10gOiByaWdodFtyaW5kZXgrK107XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGFycmF5O1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBzb3J0O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGlzQXJyYXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtYXJyYXknKTtcbnZhciBpc0NvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNvbnN0cnVjdG9yJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciBTUEVDSUVTID0gd2VsbEtub3duU3ltYm9sKCdzcGVjaWVzJyk7XG52YXIgJEFycmF5ID0gQXJyYXk7XG5cbi8vIGEgcGFydCBvZiBgQXJyYXlTcGVjaWVzQ3JlYXRlYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXlzcGVjaWVzY3JlYXRlXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvcmlnaW5hbEFycmF5KSB7XG4gIHZhciBDO1xuICBpZiAoaXNBcnJheShvcmlnaW5hbEFycmF5KSkge1xuICAgIEMgPSBvcmlnaW5hbEFycmF5LmNvbnN0cnVjdG9yO1xuICAgIC8vIGNyb3NzLXJlYWxtIGZhbGxiYWNrXG4gICAgaWYgKGlzQ29uc3RydWN0b3IoQykgJiYgKEMgPT09ICRBcnJheSB8fCBpc0FycmF5KEMucHJvdG90eXBlKSkpIEMgPSB1bmRlZmluZWQ7XG4gICAgZWxzZSBpZiAoaXNPYmplY3QoQykpIHtcbiAgICAgIEMgPSBDW1NQRUNJRVNdO1xuICAgICAgaWYgKEMgPT09IG51bGwpIEMgPSB1bmRlZmluZWQ7XG4gICAgfVxuICB9IHJldHVybiBDID09PSB1bmRlZmluZWQgPyAkQXJyYXkgOiBDO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBhcnJheVNwZWNpZXNDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1zcGVjaWVzLWNvbnN0cnVjdG9yJyk7XG5cbi8vIGBBcnJheVNwZWNpZXNDcmVhdGVgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheXNwZWNpZXNjcmVhdGVcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9yaWdpbmFsQXJyYXksIGxlbmd0aCkge1xuICByZXR1cm4gbmV3IChhcnJheVNwZWNpZXNDb25zdHJ1Y3RvcihvcmlnaW5hbEFycmF5KSkobGVuZ3RoID09PSAwID8gMCA6IGxlbmd0aCk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIGl0ZXJhdG9yQ2xvc2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0b3ItY2xvc2UnKTtcblxuLy8gY2FsbCBzb21ldGhpbmcgb24gaXRlcmF0b3Igc3RlcCB3aXRoIHNhZmUgY2xvc2luZyBvbiBlcnJvclxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXRlcmF0b3IsIGZuLCB2YWx1ZSwgRU5UUklFUykge1xuICB0cnkge1xuICAgIHJldHVybiBFTlRSSUVTID8gZm4oYW5PYmplY3QodmFsdWUpWzBdLCB2YWx1ZVsxXSkgOiBmbih2YWx1ZSk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgaXRlcmF0b3JDbG9zZShpdGVyYXRvciwgJ3Rocm93JywgZXJyb3IpO1xuICB9XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAobWV0aG9kTmFtZSwgbnVtQXJncykge1xuICByZXR1cm4gbnVtQXJncyA9PT0gMSA/IGZ1bmN0aW9uIChvYmplY3QsIGFyZykge1xuICAgIHJldHVybiBvYmplY3RbbWV0aG9kTmFtZV0oYXJnKTtcbiAgfSA6IGZ1bmN0aW9uIChvYmplY3QsIGFyZzEsIGFyZzIpIHtcbiAgICByZXR1cm4gb2JqZWN0W21ldGhvZE5hbWVdKGFyZzEsIGFyZzIpO1xuICB9O1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcblxudmFyIElURVJBVE9SID0gd2VsbEtub3duU3ltYm9sKCdpdGVyYXRvcicpO1xudmFyIFNBRkVfQ0xPU0lORyA9IGZhbHNlO1xuXG50cnkge1xuICB2YXIgY2FsbGVkID0gMDtcbiAgdmFyIGl0ZXJhdG9yV2l0aFJldHVybiA9IHtcbiAgICBuZXh0OiBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4geyBkb25lOiAhIWNhbGxlZCsrIH07XG4gICAgfSxcbiAgICAncmV0dXJuJzogZnVuY3Rpb24gKCkge1xuICAgICAgU0FGRV9DTE9TSU5HID0gdHJ1ZTtcbiAgICB9XG4gIH07XG4gIGl0ZXJhdG9yV2l0aFJldHVybltJVEVSQVRPUl0gPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1hcnJheS1mcm9tLCBuby10aHJvdy1saXRlcmFsIC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG4gIEFycmF5LmZyb20oaXRlcmF0b3JXaXRoUmV0dXJuLCBmdW5jdGlvbiAoKSB7IHRocm93IDI7IH0pO1xufSBjYXRjaCAoZXJyb3IpIHsgLyogZW1wdHkgKi8gfVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChleGVjLCBTS0lQX0NMT1NJTkcpIHtcbiAgdHJ5IHtcbiAgICBpZiAoIVNLSVBfQ0xPU0lORyAmJiAhU0FGRV9DTE9TSU5HKSByZXR1cm4gZmFsc2U7XG4gIH0gY2F0Y2ggKGVycm9yKSB7IHJldHVybiBmYWxzZTsgfSAvLyB3b3JrYXJvdW5kIG9mIG9sZCBXZWJLaXQgKyBgZXZhbGAgYnVnXG4gIHZhciBJVEVSQVRJT05fU1VQUE9SVCA9IGZhbHNlO1xuICB0cnkge1xuICAgIHZhciBvYmplY3QgPSB7fTtcbiAgICBvYmplY3RbSVRFUkFUT1JdID0gZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbmV4dDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHJldHVybiB7IGRvbmU6IElURVJBVElPTl9TVVBQT1JUID0gdHJ1ZSB9O1xuICAgICAgICB9XG4gICAgICB9O1xuICAgIH07XG4gICAgZXhlYyhvYmplY3QpO1xuICB9IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG4gIHJldHVybiBJVEVSQVRJT05fU1VQUE9SVDtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG5cbnZhciB0b1N0cmluZyA9IHVuY3VycnlUaGlzKHt9LnRvU3RyaW5nKTtcbnZhciBzdHJpbmdTbGljZSA9IHVuY3VycnlUaGlzKCcnLnNsaWNlKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIHN0cmluZ1NsaWNlKHRvU3RyaW5nKGl0KSwgOCwgLTEpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBUT19TVFJJTkdfVEFHX1NVUFBPUlQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tc3RyaW5nLXRhZy1zdXBwb3J0Jyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGNsYXNzb2ZSYXcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZi1yYXcnKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcblxudmFyIFRPX1NUUklOR19UQUcgPSB3ZWxsS25vd25TeW1ib2woJ3RvU3RyaW5nVGFnJyk7XG52YXIgJE9iamVjdCA9IE9iamVjdDtcblxuLy8gRVMzIHdyb25nIGhlcmVcbnZhciBDT1JSRUNUX0FSR1VNRU5UUyA9IGNsYXNzb2ZSYXcoZnVuY3Rpb24gKCkgeyByZXR1cm4gYXJndW1lbnRzOyB9KCkpID09PSAnQXJndW1lbnRzJztcblxuLy8gZmFsbGJhY2sgZm9yIElFMTEgU2NyaXB0IEFjY2VzcyBEZW5pZWQgZXJyb3JcbnZhciB0cnlHZXQgPSBmdW5jdGlvbiAoaXQsIGtleSkge1xuICB0cnkge1xuICAgIHJldHVybiBpdFtrZXldO1xuICB9IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG59O1xuXG4vLyBnZXR0aW5nIHRhZyBmcm9tIEVTNisgYE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmdgXG5tb2R1bGUuZXhwb3J0cyA9IFRPX1NUUklOR19UQUdfU1VQUE9SVCA/IGNsYXNzb2ZSYXcgOiBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIE8sIHRhZywgcmVzdWx0O1xuICByZXR1cm4gaXQgPT09IHVuZGVmaW5lZCA/ICdVbmRlZmluZWQnIDogaXQgPT09IG51bGwgPyAnTnVsbCdcbiAgICAvLyBAQHRvU3RyaW5nVGFnIGNhc2VcbiAgICA6IHR5cGVvZiAodGFnID0gdHJ5R2V0KE8gPSAkT2JqZWN0KGl0KSwgVE9fU1RSSU5HX1RBRykpID09ICdzdHJpbmcnID8gdGFnXG4gICAgLy8gYnVpbHRpblRhZyBjYXNlXG4gICAgOiBDT1JSRUNUX0FSR1VNRU5UUyA/IGNsYXNzb2ZSYXcoTylcbiAgICAvLyBFUzMgYXJndW1lbnRzIGZhbGxiYWNrXG4gICAgOiAocmVzdWx0ID0gY2xhc3NvZlJhdyhPKSkgPT09ICdPYmplY3QnICYmIGlzQ2FsbGFibGUoTy5jYWxsZWUpID8gJ0FyZ3VtZW50cycgOiByZXN1bHQ7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGNyZWF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtY3JlYXRlJyk7XG52YXIgZGVmaW5lQnVpbHRJbkFjY2Vzc29yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbi1hY2Nlc3NvcicpO1xudmFyIGRlZmluZUJ1aWx0SW5zID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbnMnKTtcbnZhciBiaW5kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtY29udGV4dCcpO1xudmFyIGFuSW5zdGFuY2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4taW5zdGFuY2UnKTtcbnZhciBpc051bGxPclVuZGVmaW5lZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1udWxsLW9yLXVuZGVmaW5lZCcpO1xudmFyIGl0ZXJhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0ZScpO1xudmFyIGRlZmluZUl0ZXJhdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdG9yLWRlZmluZScpO1xudmFyIGNyZWF0ZUl0ZXJSZXN1bHRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLWl0ZXItcmVzdWx0LW9iamVjdCcpO1xudmFyIHNldFNwZWNpZXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LXNwZWNpZXMnKTtcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGZhc3RLZXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW50ZXJuYWwtbWV0YWRhdGEnKS5mYXN0S2V5O1xudmFyIEludGVybmFsU3RhdGVNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW50ZXJuYWwtc3RhdGUnKTtcblxudmFyIHNldEludGVybmFsU3RhdGUgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLnNldDtcbnZhciBpbnRlcm5hbFN0YXRlR2V0dGVyRm9yID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5nZXR0ZXJGb3I7XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBnZXRDb25zdHJ1Y3RvcjogZnVuY3Rpb24gKHdyYXBwZXIsIENPTlNUUlVDVE9SX05BTUUsIElTX01BUCwgQURERVIpIHtcbiAgICB2YXIgQ29uc3RydWN0b3IgPSB3cmFwcGVyKGZ1bmN0aW9uICh0aGF0LCBpdGVyYWJsZSkge1xuICAgICAgYW5JbnN0YW5jZSh0aGF0LCBQcm90b3R5cGUpO1xuICAgICAgc2V0SW50ZXJuYWxTdGF0ZSh0aGF0LCB7XG4gICAgICAgIHR5cGU6IENPTlNUUlVDVE9SX05BTUUsXG4gICAgICAgIGluZGV4OiBjcmVhdGUobnVsbCksXG4gICAgICAgIGZpcnN0OiBudWxsLFxuICAgICAgICBsYXN0OiBudWxsLFxuICAgICAgICBzaXplOiAwXG4gICAgICB9KTtcbiAgICAgIGlmICghREVTQ1JJUFRPUlMpIHRoYXQuc2l6ZSA9IDA7XG4gICAgICBpZiAoIWlzTnVsbE9yVW5kZWZpbmVkKGl0ZXJhYmxlKSkgaXRlcmF0ZShpdGVyYWJsZSwgdGhhdFtBRERFUl0sIHsgdGhhdDogdGhhdCwgQVNfRU5UUklFUzogSVNfTUFQIH0pO1xuICAgIH0pO1xuXG4gICAgdmFyIFByb3RvdHlwZSA9IENvbnN0cnVjdG9yLnByb3RvdHlwZTtcblxuICAgIHZhciBnZXRJbnRlcm5hbFN0YXRlID0gaW50ZXJuYWxTdGF0ZUdldHRlckZvcihDT05TVFJVQ1RPUl9OQU1FKTtcblxuICAgIHZhciBkZWZpbmUgPSBmdW5jdGlvbiAodGhhdCwga2V5LCB2YWx1ZSkge1xuICAgICAgdmFyIHN0YXRlID0gZ2V0SW50ZXJuYWxTdGF0ZSh0aGF0KTtcbiAgICAgIHZhciBlbnRyeSA9IGdldEVudHJ5KHRoYXQsIGtleSk7XG4gICAgICB2YXIgcHJldmlvdXMsIGluZGV4O1xuICAgICAgLy8gY2hhbmdlIGV4aXN0aW5nIGVudHJ5XG4gICAgICBpZiAoZW50cnkpIHtcbiAgICAgICAgZW50cnkudmFsdWUgPSB2YWx1ZTtcbiAgICAgIC8vIGNyZWF0ZSBuZXcgZW50cnlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN0YXRlLmxhc3QgPSBlbnRyeSA9IHtcbiAgICAgICAgICBpbmRleDogaW5kZXggPSBmYXN0S2V5KGtleSwgdHJ1ZSksXG4gICAgICAgICAga2V5OiBrZXksXG4gICAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICAgIHByZXZpb3VzOiBwcmV2aW91cyA9IHN0YXRlLmxhc3QsXG4gICAgICAgICAgbmV4dDogbnVsbCxcbiAgICAgICAgICByZW1vdmVkOiBmYWxzZVxuICAgICAgICB9O1xuICAgICAgICBpZiAoIXN0YXRlLmZpcnN0KSBzdGF0ZS5maXJzdCA9IGVudHJ5O1xuICAgICAgICBpZiAocHJldmlvdXMpIHByZXZpb3VzLm5leHQgPSBlbnRyeTtcbiAgICAgICAgaWYgKERFU0NSSVBUT1JTKSBzdGF0ZS5zaXplKys7XG4gICAgICAgIGVsc2UgdGhhdC5zaXplKys7XG4gICAgICAgIC8vIGFkZCB0byBpbmRleFxuICAgICAgICBpZiAoaW5kZXggIT09ICdGJykgc3RhdGUuaW5kZXhbaW5kZXhdID0gZW50cnk7XG4gICAgICB9IHJldHVybiB0aGF0O1xuICAgIH07XG5cbiAgICB2YXIgZ2V0RW50cnkgPSBmdW5jdGlvbiAodGhhdCwga2V5KSB7XG4gICAgICB2YXIgc3RhdGUgPSBnZXRJbnRlcm5hbFN0YXRlKHRoYXQpO1xuICAgICAgLy8gZmFzdCBjYXNlXG4gICAgICB2YXIgaW5kZXggPSBmYXN0S2V5KGtleSk7XG4gICAgICB2YXIgZW50cnk7XG4gICAgICBpZiAoaW5kZXggIT09ICdGJykgcmV0dXJuIHN0YXRlLmluZGV4W2luZGV4XTtcbiAgICAgIC8vIGZyb3plbiBvYmplY3QgY2FzZVxuICAgICAgZm9yIChlbnRyeSA9IHN0YXRlLmZpcnN0OyBlbnRyeTsgZW50cnkgPSBlbnRyeS5uZXh0KSB7XG4gICAgICAgIGlmIChlbnRyeS5rZXkgPT09IGtleSkgcmV0dXJuIGVudHJ5O1xuICAgICAgfVxuICAgIH07XG5cbiAgICBkZWZpbmVCdWlsdElucyhQcm90b3R5cGUsIHtcbiAgICAgIC8vIGB7IE1hcCwgU2V0IH0ucHJvdG90eXBlLmNsZWFyKClgIG1ldGhvZHNcbiAgICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtbWFwLnByb3RvdHlwZS5jbGVhclxuICAgICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zZXQucHJvdG90eXBlLmNsZWFyXG4gICAgICBjbGVhcjogZnVuY3Rpb24gY2xlYXIoKSB7XG4gICAgICAgIHZhciB0aGF0ID0gdGhpcztcbiAgICAgICAgdmFyIHN0YXRlID0gZ2V0SW50ZXJuYWxTdGF0ZSh0aGF0KTtcbiAgICAgICAgdmFyIGVudHJ5ID0gc3RhdGUuZmlyc3Q7XG4gICAgICAgIHdoaWxlIChlbnRyeSkge1xuICAgICAgICAgIGVudHJ5LnJlbW92ZWQgPSB0cnVlO1xuICAgICAgICAgIGlmIChlbnRyeS5wcmV2aW91cykgZW50cnkucHJldmlvdXMgPSBlbnRyeS5wcmV2aW91cy5uZXh0ID0gbnVsbDtcbiAgICAgICAgICBlbnRyeSA9IGVudHJ5Lm5leHQ7XG4gICAgICAgIH1cbiAgICAgICAgc3RhdGUuZmlyc3QgPSBzdGF0ZS5sYXN0ID0gbnVsbDtcbiAgICAgICAgc3RhdGUuaW5kZXggPSBjcmVhdGUobnVsbCk7XG4gICAgICAgIGlmIChERVNDUklQVE9SUykgc3RhdGUuc2l6ZSA9IDA7XG4gICAgICAgIGVsc2UgdGhhdC5zaXplID0gMDtcbiAgICAgIH0sXG4gICAgICAvLyBgeyBNYXAsIFNldCB9LnByb3RvdHlwZS5kZWxldGUoa2V5KWAgbWV0aG9kc1xuICAgICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1tYXAucHJvdG90eXBlLmRlbGV0ZVxuICAgICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zZXQucHJvdG90eXBlLmRlbGV0ZVxuICAgICAgJ2RlbGV0ZSc6IGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgdmFyIHRoYXQgPSB0aGlzO1xuICAgICAgICB2YXIgc3RhdGUgPSBnZXRJbnRlcm5hbFN0YXRlKHRoYXQpO1xuICAgICAgICB2YXIgZW50cnkgPSBnZXRFbnRyeSh0aGF0LCBrZXkpO1xuICAgICAgICBpZiAoZW50cnkpIHtcbiAgICAgICAgICB2YXIgbmV4dCA9IGVudHJ5Lm5leHQ7XG4gICAgICAgICAgdmFyIHByZXYgPSBlbnRyeS5wcmV2aW91cztcbiAgICAgICAgICBkZWxldGUgc3RhdGUuaW5kZXhbZW50cnkuaW5kZXhdO1xuICAgICAgICAgIGVudHJ5LnJlbW92ZWQgPSB0cnVlO1xuICAgICAgICAgIGlmIChwcmV2KSBwcmV2Lm5leHQgPSBuZXh0O1xuICAgICAgICAgIGlmIChuZXh0KSBuZXh0LnByZXZpb3VzID0gcHJldjtcbiAgICAgICAgICBpZiAoc3RhdGUuZmlyc3QgPT09IGVudHJ5KSBzdGF0ZS5maXJzdCA9IG5leHQ7XG4gICAgICAgICAgaWYgKHN0YXRlLmxhc3QgPT09IGVudHJ5KSBzdGF0ZS5sYXN0ID0gcHJldjtcbiAgICAgICAgICBpZiAoREVTQ1JJUFRPUlMpIHN0YXRlLnNpemUtLTtcbiAgICAgICAgICBlbHNlIHRoYXQuc2l6ZS0tO1xuICAgICAgICB9IHJldHVybiAhIWVudHJ5O1xuICAgICAgfSxcbiAgICAgIC8vIGB7IE1hcCwgU2V0IH0ucHJvdG90eXBlLmZvckVhY2goY2FsbGJhY2tmbiwgdGhpc0FyZyA9IHVuZGVmaW5lZClgIG1ldGhvZHNcbiAgICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtbWFwLnByb3RvdHlwZS5mb3JlYWNoXG4gICAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXNldC5wcm90b3R5cGUuZm9yZWFjaFxuICAgICAgZm9yRWFjaDogZnVuY3Rpb24gZm9yRWFjaChjYWxsYmFja2ZuIC8qICwgdGhhdCA9IHVuZGVmaW5lZCAqLykge1xuICAgICAgICB2YXIgc3RhdGUgPSBnZXRJbnRlcm5hbFN0YXRlKHRoaXMpO1xuICAgICAgICB2YXIgYm91bmRGdW5jdGlvbiA9IGJpbmQoY2FsbGJhY2tmbiwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICAgICAgICB2YXIgZW50cnk7XG4gICAgICAgIHdoaWxlIChlbnRyeSA9IGVudHJ5ID8gZW50cnkubmV4dCA6IHN0YXRlLmZpcnN0KSB7XG4gICAgICAgICAgYm91bmRGdW5jdGlvbihlbnRyeS52YWx1ZSwgZW50cnkua2V5LCB0aGlzKTtcbiAgICAgICAgICAvLyByZXZlcnQgdG8gdGhlIGxhc3QgZXhpc3RpbmcgZW50cnlcbiAgICAgICAgICB3aGlsZSAoZW50cnkgJiYgZW50cnkucmVtb3ZlZCkgZW50cnkgPSBlbnRyeS5wcmV2aW91cztcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIC8vIGB7IE1hcCwgU2V0fS5wcm90b3R5cGUuaGFzKGtleSlgIG1ldGhvZHNcbiAgICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtbWFwLnByb3RvdHlwZS5oYXNcbiAgICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc2V0LnByb3RvdHlwZS5oYXNcbiAgICAgIGhhczogZnVuY3Rpb24gaGFzKGtleSkge1xuICAgICAgICByZXR1cm4gISFnZXRFbnRyeSh0aGlzLCBrZXkpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgZGVmaW5lQnVpbHRJbnMoUHJvdG90eXBlLCBJU19NQVAgPyB7XG4gICAgICAvLyBgTWFwLnByb3RvdHlwZS5nZXQoa2V5KWAgbWV0aG9kXG4gICAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW1hcC5wcm90b3R5cGUuZ2V0XG4gICAgICBnZXQ6IGZ1bmN0aW9uIGdldChrZXkpIHtcbiAgICAgICAgdmFyIGVudHJ5ID0gZ2V0RW50cnkodGhpcywga2V5KTtcbiAgICAgICAgcmV0dXJuIGVudHJ5ICYmIGVudHJ5LnZhbHVlO1xuICAgICAgfSxcbiAgICAgIC8vIGBNYXAucHJvdG90eXBlLnNldChrZXksIHZhbHVlKWAgbWV0aG9kXG4gICAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW1hcC5wcm90b3R5cGUuc2V0XG4gICAgICBzZXQ6IGZ1bmN0aW9uIHNldChrZXksIHZhbHVlKSB7XG4gICAgICAgIHJldHVybiBkZWZpbmUodGhpcywga2V5ID09PSAwID8gMCA6IGtleSwgdmFsdWUpO1xuICAgICAgfVxuICAgIH0gOiB7XG4gICAgICAvLyBgU2V0LnByb3RvdHlwZS5hZGQodmFsdWUpYCBtZXRob2RcbiAgICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc2V0LnByb3RvdHlwZS5hZGRcbiAgICAgIGFkZDogZnVuY3Rpb24gYWRkKHZhbHVlKSB7XG4gICAgICAgIHJldHVybiBkZWZpbmUodGhpcywgdmFsdWUgPSB2YWx1ZSA9PT0gMCA/IDAgOiB2YWx1ZSwgdmFsdWUpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGlmIChERVNDUklQVE9SUykgZGVmaW5lQnVpbHRJbkFjY2Vzc29yKFByb3RvdHlwZSwgJ3NpemUnLCB7XG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIGdldEludGVybmFsU3RhdGUodGhpcykuc2l6ZTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gQ29uc3RydWN0b3I7XG4gIH0sXG4gIHNldFN0cm9uZzogZnVuY3Rpb24gKENvbnN0cnVjdG9yLCBDT05TVFJVQ1RPUl9OQU1FLCBJU19NQVApIHtcbiAgICB2YXIgSVRFUkFUT1JfTkFNRSA9IENPTlNUUlVDVE9SX05BTUUgKyAnIEl0ZXJhdG9yJztcbiAgICB2YXIgZ2V0SW50ZXJuYWxDb2xsZWN0aW9uU3RhdGUgPSBpbnRlcm5hbFN0YXRlR2V0dGVyRm9yKENPTlNUUlVDVE9SX05BTUUpO1xuICAgIHZhciBnZXRJbnRlcm5hbEl0ZXJhdG9yU3RhdGUgPSBpbnRlcm5hbFN0YXRlR2V0dGVyRm9yKElURVJBVE9SX05BTUUpO1xuICAgIC8vIGB7IE1hcCwgU2V0IH0ucHJvdG90eXBlLnsga2V5cywgdmFsdWVzLCBlbnRyaWVzLCBAQGl0ZXJhdG9yIH0oKWAgbWV0aG9kc1xuICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtbWFwLnByb3RvdHlwZS5lbnRyaWVzXG4gICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1tYXAucHJvdG90eXBlLmtleXNcbiAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW1hcC5wcm90b3R5cGUudmFsdWVzXG4gICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1tYXAucHJvdG90eXBlLUBAaXRlcmF0b3JcbiAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXNldC5wcm90b3R5cGUuZW50cmllc1xuICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc2V0LnByb3RvdHlwZS5rZXlzXG4gICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zZXQucHJvdG90eXBlLnZhbHVlc1xuICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc2V0LnByb3RvdHlwZS1AQGl0ZXJhdG9yXG4gICAgZGVmaW5lSXRlcmF0b3IoQ29uc3RydWN0b3IsIENPTlNUUlVDVE9SX05BTUUsIGZ1bmN0aW9uIChpdGVyYXRlZCwga2luZCkge1xuICAgICAgc2V0SW50ZXJuYWxTdGF0ZSh0aGlzLCB7XG4gICAgICAgIHR5cGU6IElURVJBVE9SX05BTUUsXG4gICAgICAgIHRhcmdldDogaXRlcmF0ZWQsXG4gICAgICAgIHN0YXRlOiBnZXRJbnRlcm5hbENvbGxlY3Rpb25TdGF0ZShpdGVyYXRlZCksXG4gICAgICAgIGtpbmQ6IGtpbmQsXG4gICAgICAgIGxhc3Q6IG51bGxcbiAgICAgIH0pO1xuICAgIH0sIGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciBzdGF0ZSA9IGdldEludGVybmFsSXRlcmF0b3JTdGF0ZSh0aGlzKTtcbiAgICAgIHZhciBraW5kID0gc3RhdGUua2luZDtcbiAgICAgIHZhciBlbnRyeSA9IHN0YXRlLmxhc3Q7XG4gICAgICAvLyByZXZlcnQgdG8gdGhlIGxhc3QgZXhpc3RpbmcgZW50cnlcbiAgICAgIHdoaWxlIChlbnRyeSAmJiBlbnRyeS5yZW1vdmVkKSBlbnRyeSA9IGVudHJ5LnByZXZpb3VzO1xuICAgICAgLy8gZ2V0IG5leHQgZW50cnlcbiAgICAgIGlmICghc3RhdGUudGFyZ2V0IHx8ICEoc3RhdGUubGFzdCA9IGVudHJ5ID0gZW50cnkgPyBlbnRyeS5uZXh0IDogc3RhdGUuc3RhdGUuZmlyc3QpKSB7XG4gICAgICAgIC8vIG9yIGZpbmlzaCB0aGUgaXRlcmF0aW9uXG4gICAgICAgIHN0YXRlLnRhcmdldCA9IG51bGw7XG4gICAgICAgIHJldHVybiBjcmVhdGVJdGVyUmVzdWx0T2JqZWN0KHVuZGVmaW5lZCwgdHJ1ZSk7XG4gICAgICB9XG4gICAgICAvLyByZXR1cm4gc3RlcCBieSBraW5kXG4gICAgICBpZiAoa2luZCA9PT0gJ2tleXMnKSByZXR1cm4gY3JlYXRlSXRlclJlc3VsdE9iamVjdChlbnRyeS5rZXksIGZhbHNlKTtcbiAgICAgIGlmIChraW5kID09PSAndmFsdWVzJykgcmV0dXJuIGNyZWF0ZUl0ZXJSZXN1bHRPYmplY3QoZW50cnkudmFsdWUsIGZhbHNlKTtcbiAgICAgIHJldHVybiBjcmVhdGVJdGVyUmVzdWx0T2JqZWN0KFtlbnRyeS5rZXksIGVudHJ5LnZhbHVlXSwgZmFsc2UpO1xuICAgIH0sIElTX01BUCA/ICdlbnRyaWVzJyA6ICd2YWx1ZXMnLCAhSVNfTUFQLCB0cnVlKTtcblxuICAgIC8vIGB7IE1hcCwgU2V0IH0ucHJvdG90eXBlW0BAc3BlY2llc11gIGFjY2Vzc29yc1xuICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtZ2V0LW1hcC1AQHNwZWNpZXNcbiAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWdldC1zZXQtQEBzcGVjaWVzXG4gICAgc2V0U3BlY2llcyhDT05TVFJVQ1RPUl9OQU1FKTtcbiAgfVxufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcbnZhciBJbnRlcm5hbE1ldGFkYXRhTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ludGVybmFsLW1ldGFkYXRhJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLW5vbi1lbnVtZXJhYmxlLXByb3BlcnR5Jyk7XG52YXIgaXRlcmF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRlJyk7XG52YXIgYW5JbnN0YW5jZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1pbnN0YW5jZScpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciBpc051bGxPclVuZGVmaW5lZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1udWxsLW9yLXVuZGVmaW5lZCcpO1xudmFyIHNldFRvU3RyaW5nVGFnID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC10by1zdHJpbmctdGFnJyk7XG52YXIgZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpLmY7XG52YXIgZm9yRWFjaCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1pdGVyYXRpb24nKS5mb3JFYWNoO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgSW50ZXJuYWxTdGF0ZU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbnRlcm5hbC1zdGF0ZScpO1xuXG52YXIgc2V0SW50ZXJuYWxTdGF0ZSA9IEludGVybmFsU3RhdGVNb2R1bGUuc2V0O1xudmFyIGludGVybmFsU3RhdGVHZXR0ZXJGb3IgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLmdldHRlckZvcjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoQ09OU1RSVUNUT1JfTkFNRSwgd3JhcHBlciwgY29tbW9uKSB7XG4gIHZhciBJU19NQVAgPSBDT05TVFJVQ1RPUl9OQU1FLmluZGV4T2YoJ01hcCcpICE9PSAtMTtcbiAgdmFyIElTX1dFQUsgPSBDT05TVFJVQ1RPUl9OQU1FLmluZGV4T2YoJ1dlYWsnKSAhPT0gLTE7XG4gIHZhciBBRERFUiA9IElTX01BUCA/ICdzZXQnIDogJ2FkZCc7XG4gIHZhciBOYXRpdmVDb25zdHJ1Y3RvciA9IGdsb2JhbFRoaXNbQ09OU1RSVUNUT1JfTkFNRV07XG4gIHZhciBOYXRpdmVQcm90b3R5cGUgPSBOYXRpdmVDb25zdHJ1Y3RvciAmJiBOYXRpdmVDb25zdHJ1Y3Rvci5wcm90b3R5cGU7XG4gIHZhciBleHBvcnRlZCA9IHt9O1xuICB2YXIgQ29uc3RydWN0b3I7XG5cbiAgaWYgKCFERVNDUklQVE9SUyB8fCAhaXNDYWxsYWJsZShOYXRpdmVDb25zdHJ1Y3RvcilcbiAgICB8fCAhKElTX1dFQUsgfHwgTmF0aXZlUHJvdG90eXBlLmZvckVhY2ggJiYgIWZhaWxzKGZ1bmN0aW9uICgpIHsgbmV3IE5hdGl2ZUNvbnN0cnVjdG9yKCkuZW50cmllcygpLm5leHQoKTsgfSkpXG4gICkge1xuICAgIC8vIGNyZWF0ZSBjb2xsZWN0aW9uIGNvbnN0cnVjdG9yXG4gICAgQ29uc3RydWN0b3IgPSBjb21tb24uZ2V0Q29uc3RydWN0b3Iod3JhcHBlciwgQ09OU1RSVUNUT1JfTkFNRSwgSVNfTUFQLCBBRERFUik7XG4gICAgSW50ZXJuYWxNZXRhZGF0YU1vZHVsZS5lbmFibGUoKTtcbiAgfSBlbHNlIHtcbiAgICBDb25zdHJ1Y3RvciA9IHdyYXBwZXIoZnVuY3Rpb24gKHRhcmdldCwgaXRlcmFibGUpIHtcbiAgICAgIHNldEludGVybmFsU3RhdGUoYW5JbnN0YW5jZSh0YXJnZXQsIFByb3RvdHlwZSksIHtcbiAgICAgICAgdHlwZTogQ09OU1RSVUNUT1JfTkFNRSxcbiAgICAgICAgY29sbGVjdGlvbjogbmV3IE5hdGl2ZUNvbnN0cnVjdG9yKClcbiAgICAgIH0pO1xuICAgICAgaWYgKCFpc051bGxPclVuZGVmaW5lZChpdGVyYWJsZSkpIGl0ZXJhdGUoaXRlcmFibGUsIHRhcmdldFtBRERFUl0sIHsgdGhhdDogdGFyZ2V0LCBBU19FTlRSSUVTOiBJU19NQVAgfSk7XG4gICAgfSk7XG5cbiAgICB2YXIgUHJvdG90eXBlID0gQ29uc3RydWN0b3IucHJvdG90eXBlO1xuXG4gICAgdmFyIGdldEludGVybmFsU3RhdGUgPSBpbnRlcm5hbFN0YXRlR2V0dGVyRm9yKENPTlNUUlVDVE9SX05BTUUpO1xuXG4gICAgZm9yRWFjaChbJ2FkZCcsICdjbGVhcicsICdkZWxldGUnLCAnZm9yRWFjaCcsICdnZXQnLCAnaGFzJywgJ3NldCcsICdrZXlzJywgJ3ZhbHVlcycsICdlbnRyaWVzJ10sIGZ1bmN0aW9uIChLRVkpIHtcbiAgICAgIHZhciBJU19BRERFUiA9IEtFWSA9PT0gJ2FkZCcgfHwgS0VZID09PSAnc2V0JztcbiAgICAgIGlmIChLRVkgaW4gTmF0aXZlUHJvdG90eXBlICYmICEoSVNfV0VBSyAmJiBLRVkgPT09ICdjbGVhcicpKSB7XG4gICAgICAgIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eShQcm90b3R5cGUsIEtFWSwgZnVuY3Rpb24gKGEsIGIpIHtcbiAgICAgICAgICB2YXIgY29sbGVjdGlvbiA9IGdldEludGVybmFsU3RhdGUodGhpcykuY29sbGVjdGlvbjtcbiAgICAgICAgICBpZiAoIUlTX0FEREVSICYmIElTX1dFQUsgJiYgIWlzT2JqZWN0KGEpKSByZXR1cm4gS0VZID09PSAnZ2V0JyA/IHVuZGVmaW5lZCA6IGZhbHNlO1xuICAgICAgICAgIHZhciByZXN1bHQgPSBjb2xsZWN0aW9uW0tFWV0oYSA9PT0gMCA/IDAgOiBhLCBiKTtcbiAgICAgICAgICByZXR1cm4gSVNfQURERVIgPyB0aGlzIDogcmVzdWx0O1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIElTX1dFQUsgfHwgZGVmaW5lUHJvcGVydHkoUHJvdG90eXBlLCAnc2l6ZScsIHtcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gZ2V0SW50ZXJuYWxTdGF0ZSh0aGlzKS5jb2xsZWN0aW9uLnNpemU7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBzZXRUb1N0cmluZ1RhZyhDb25zdHJ1Y3RvciwgQ09OU1RSVUNUT1JfTkFNRSwgZmFsc2UsIHRydWUpO1xuXG4gIGV4cG9ydGVkW0NPTlNUUlVDVE9SX05BTUVdID0gQ29uc3RydWN0b3I7XG4gICQoeyBnbG9iYWw6IHRydWUsIGZvcmNlZDogdHJ1ZSB9LCBleHBvcnRlZCk7XG5cbiAgaWYgKCFJU19XRUFLKSBjb21tb24uc2V0U3Ryb25nKENvbnN0cnVjdG9yLCBDT05TVFJVQ1RPUl9OQU1FLCBJU19NQVApO1xuXG4gIHJldHVybiBDb25zdHJ1Y3Rvcjtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciBvd25LZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL293bi1rZXlzJyk7XG52YXIgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcbnZhciBkZWZpbmVQcm9wZXJ0eU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHRhcmdldCwgc291cmNlLCBleGNlcHRpb25zKSB7XG4gIHZhciBrZXlzID0gb3duS2V5cyhzb3VyY2UpO1xuICB2YXIgZGVmaW5lUHJvcGVydHkgPSBkZWZpbmVQcm9wZXJ0eU1vZHVsZS5mO1xuICB2YXIgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yTW9kdWxlLmY7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBrZXkgPSBrZXlzW2ldO1xuICAgIGlmICghaGFzT3duKHRhcmdldCwga2V5KSAmJiAhKGV4Y2VwdGlvbnMgJiYgaGFzT3duKGV4Y2VwdGlvbnMsIGtleSkpKSB7XG4gICAgICBkZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHNvdXJjZSwga2V5KSk7XG4gICAgfVxuICB9XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xuXG52YXIgTUFUQ0ggPSB3ZWxsS25vd25TeW1ib2woJ21hdGNoJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKE1FVEhPRF9OQU1FKSB7XG4gIHZhciByZWdleHAgPSAvLi87XG4gIHRyeSB7XG4gICAgJy8uLydbTUVUSE9EX05BTUVdKHJlZ2V4cCk7XG4gIH0gY2F0Y2ggKGVycm9yMSkge1xuICAgIHRyeSB7XG4gICAgICByZWdleHBbTUFUQ0hdID0gZmFsc2U7XG4gICAgICByZXR1cm4gJy8uLydbTUVUSE9EX05BTUVdKHJlZ2V4cCk7XG4gICAgfSBjYXRjaCAoZXJyb3IyKSB7IC8qIGVtcHR5ICovIH1cbiAgfSByZXR1cm4gZmFsc2U7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gRigpIHsgLyogZW1wdHkgKi8gfVxuICBGLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IG51bGw7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0cHJvdG90eXBlb2YgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmdcbiAgcmV0dXJuIE9iamVjdC5nZXRQcm90b3R5cGVPZihuZXcgRigpKSAhPT0gRi5wcm90b3R5cGU7XG59KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIGBDcmVhdGVJdGVyUmVzdWx0T2JqZWN0YCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtY3JlYXRlaXRlcnJlc3VsdG9iamVjdFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodmFsdWUsIGRvbmUpIHtcbiAgcmV0dXJuIHsgdmFsdWU6IHZhbHVlLCBkb25lOiBkb25lIH07XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgZGVmaW5lUHJvcGVydHlNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpO1xudmFyIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHktZGVzY3JpcHRvcicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IERFU0NSSVBUT1JTID8gZnVuY3Rpb24gKG9iamVjdCwga2V5LCB2YWx1ZSkge1xuICByZXR1cm4gZGVmaW5lUHJvcGVydHlNb2R1bGUuZihvYmplY3QsIGtleSwgY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yKDEsIHZhbHVlKSk7XG59IDogZnVuY3Rpb24gKG9iamVjdCwga2V5LCB2YWx1ZSkge1xuICBvYmplY3Rba2V5XSA9IHZhbHVlO1xuICByZXR1cm4gb2JqZWN0O1xufTtcbiIsIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGJpdG1hcCwgdmFsdWUpIHtcbiAgcmV0dXJuIHtcbiAgICBlbnVtZXJhYmxlOiAhKGJpdG1hcCAmIDEpLFxuICAgIGNvbmZpZ3VyYWJsZTogIShiaXRtYXAgJiAyKSxcbiAgICB3cml0YWJsZTogIShiaXRtYXAgJiA0KSxcbiAgICB2YWx1ZTogdmFsdWVcbiAgfTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBkZWZpbmVQcm9wZXJ0eU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5Jyk7XG52YXIgY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eS1kZXNjcmlwdG9yJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9iamVjdCwga2V5LCB2YWx1ZSkge1xuICBpZiAoREVTQ1JJUFRPUlMpIGRlZmluZVByb3BlcnR5TW9kdWxlLmYob2JqZWN0LCBrZXksIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvcigwLCB2YWx1ZSkpO1xuICBlbHNlIG9iamVjdFtrZXldID0gdmFsdWU7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgcGFkU3RhcnQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3RyaW5nLXBhZCcpLnN0YXJ0O1xuXG52YXIgJFJhbmdlRXJyb3IgPSBSYW5nZUVycm9yO1xudmFyICRpc0Zpbml0ZSA9IGlzRmluaXRlO1xudmFyIGFicyA9IE1hdGguYWJzO1xudmFyIERhdGVQcm90b3R5cGUgPSBEYXRlLnByb3RvdHlwZTtcbnZhciBuYXRpdmVEYXRlVG9JU09TdHJpbmcgPSBEYXRlUHJvdG90eXBlLnRvSVNPU3RyaW5nO1xudmFyIHRoaXNUaW1lVmFsdWUgPSB1bmN1cnJ5VGhpcyhEYXRlUHJvdG90eXBlLmdldFRpbWUpO1xudmFyIGdldFVUQ0RhdGUgPSB1bmN1cnJ5VGhpcyhEYXRlUHJvdG90eXBlLmdldFVUQ0RhdGUpO1xudmFyIGdldFVUQ0Z1bGxZZWFyID0gdW5jdXJyeVRoaXMoRGF0ZVByb3RvdHlwZS5nZXRVVENGdWxsWWVhcik7XG52YXIgZ2V0VVRDSG91cnMgPSB1bmN1cnJ5VGhpcyhEYXRlUHJvdG90eXBlLmdldFVUQ0hvdXJzKTtcbnZhciBnZXRVVENNaWxsaXNlY29uZHMgPSB1bmN1cnJ5VGhpcyhEYXRlUHJvdG90eXBlLmdldFVUQ01pbGxpc2Vjb25kcyk7XG52YXIgZ2V0VVRDTWludXRlcyA9IHVuY3VycnlUaGlzKERhdGVQcm90b3R5cGUuZ2V0VVRDTWludXRlcyk7XG52YXIgZ2V0VVRDTW9udGggPSB1bmN1cnJ5VGhpcyhEYXRlUHJvdG90eXBlLmdldFVUQ01vbnRoKTtcbnZhciBnZXRVVENTZWNvbmRzID0gdW5jdXJyeVRoaXMoRGF0ZVByb3RvdHlwZS5nZXRVVENTZWNvbmRzKTtcblxuLy8gYERhdGUucHJvdG90eXBlLnRvSVNPU3RyaW5nYCBtZXRob2QgaW1wbGVtZW50YXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtZGF0ZS5wcm90b3R5cGUudG9pc29zdHJpbmdcbi8vIFBoYW50b21KUyAvIG9sZCBXZWJLaXQgZmFpbHMgaGVyZTpcbm1vZHVsZS5leHBvcnRzID0gKGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIG5hdGl2ZURhdGVUb0lTT1N0cmluZy5jYWxsKG5ldyBEYXRlKC01ZTEzIC0gMSkpICE9PSAnMDM4NS0wNy0yNVQwNzowNjozOS45OTlaJztcbn0pIHx8ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIG5hdGl2ZURhdGVUb0lTT1N0cmluZy5jYWxsKG5ldyBEYXRlKE5hTikpO1xufSkpID8gZnVuY3Rpb24gdG9JU09TdHJpbmcoKSB7XG4gIGlmICghJGlzRmluaXRlKHRoaXNUaW1lVmFsdWUodGhpcykpKSB0aHJvdyBuZXcgJFJhbmdlRXJyb3IoJ0ludmFsaWQgdGltZSB2YWx1ZScpO1xuICB2YXIgZGF0ZSA9IHRoaXM7XG4gIHZhciB5ZWFyID0gZ2V0VVRDRnVsbFllYXIoZGF0ZSk7XG4gIHZhciBtaWxsaXNlY29uZHMgPSBnZXRVVENNaWxsaXNlY29uZHMoZGF0ZSk7XG4gIHZhciBzaWduID0geWVhciA8IDAgPyAnLScgOiB5ZWFyID4gOTk5OSA/ICcrJyA6ICcnO1xuICByZXR1cm4gc2lnbiArIHBhZFN0YXJ0KGFicyh5ZWFyKSwgc2lnbiA/IDYgOiA0LCAwKSArXG4gICAgJy0nICsgcGFkU3RhcnQoZ2V0VVRDTW9udGgoZGF0ZSkgKyAxLCAyLCAwKSArXG4gICAgJy0nICsgcGFkU3RhcnQoZ2V0VVRDRGF0ZShkYXRlKSwgMiwgMCkgK1xuICAgICdUJyArIHBhZFN0YXJ0KGdldFVUQ0hvdXJzKGRhdGUpLCAyLCAwKSArXG4gICAgJzonICsgcGFkU3RhcnQoZ2V0VVRDTWludXRlcyhkYXRlKSwgMiwgMCkgK1xuICAgICc6JyArIHBhZFN0YXJ0KGdldFVUQ1NlY29uZHMoZGF0ZSksIDIsIDApICtcbiAgICAnLicgKyBwYWRTdGFydChtaWxsaXNlY29uZHMsIDMsIDApICtcbiAgICAnWic7XG59IDogbmF0aXZlRGF0ZVRvSVNPU3RyaW5nO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGRlZmluZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodGFyZ2V0LCBuYW1lLCBkZXNjcmlwdG9yKSB7XG4gIHJldHVybiBkZWZpbmVQcm9wZXJ0eS5mKHRhcmdldCwgbmFtZSwgZGVzY3JpcHRvcik7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHknKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodGFyZ2V0LCBrZXksIHZhbHVlLCBvcHRpb25zKSB7XG4gIGlmIChvcHRpb25zICYmIG9wdGlvbnMuZW51bWVyYWJsZSkgdGFyZ2V0W2tleV0gPSB2YWx1ZTtcbiAgZWxzZSBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkodGFyZ2V0LCBrZXksIHZhbHVlKTtcbiAgcmV0dXJuIHRhcmdldDtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZGVmaW5lQnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodGFyZ2V0LCBzcmMsIG9wdGlvbnMpIHtcbiAgZm9yICh2YXIga2V5IGluIHNyYykge1xuICAgIGlmIChvcHRpb25zICYmIG9wdGlvbnMudW5zYWZlICYmIHRhcmdldFtrZXldKSB0YXJnZXRba2V5XSA9IHNyY1trZXldO1xuICAgIGVsc2UgZGVmaW5lQnVpbHRJbih0YXJnZXQsIGtleSwgc3JjW2tleV0sIG9wdGlvbnMpO1xuICB9IHJldHVybiB0YXJnZXQ7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSBzYWZlXG52YXIgZGVmaW5lUHJvcGVydHkgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgdHJ5IHtcbiAgICBkZWZpbmVQcm9wZXJ0eShnbG9iYWxUaGlzLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGdsb2JhbFRoaXNba2V5XSA9IHZhbHVlO1xuICB9IHJldHVybiB2YWx1ZTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgdHJ5VG9TdHJpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdHJ5LXRvLXN0cmluZycpO1xuXG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoTywgUCkge1xuICBpZiAoIWRlbGV0ZSBPW1BdKSB0aHJvdyBuZXcgJFR5cGVFcnJvcignQ2Fubm90IGRlbGV0ZSBwcm9wZXJ0eSAnICsgdHJ5VG9TdHJpbmcoUCkgKyAnIG9mICcgKyB0cnlUb1N0cmluZyhPKSk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG5cbi8vIERldGVjdCBJRTgncyBpbmNvbXBsZXRlIGRlZmluZVByb3BlcnR5IGltcGxlbWVudGF0aW9uXG5tb2R1bGUuZXhwb3J0cyA9ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmdcbiAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7fSwgMSwgeyBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIDc7IH0gfSlbMV0gIT09IDc7XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG5cbnZhciBkb2N1bWVudCA9IGdsb2JhbFRoaXMuZG9jdW1lbnQ7XG4vLyB0eXBlb2YgZG9jdW1lbnQuY3JlYXRlRWxlbWVudCBpcyAnb2JqZWN0JyBpbiBvbGQgSUVcbnZhciBFWElTVFMgPSBpc09iamVjdChkb2N1bWVudCkgJiYgaXNPYmplY3QoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBFWElTVFMgPyBkb2N1bWVudC5jcmVhdGVFbGVtZW50KGl0KSA6IHt9O1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xudmFyIE1BWF9TQUZFX0lOVEVHRVIgPSAweDFGRkZGRkZGRkZGRkZGOyAvLyAyICoqIDUzIC0gMSA9PSA5MDA3MTk5MjU0NzQwOTkxXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIGlmIChpdCA+IE1BWF9TQUZFX0lOVEVHRVIpIHRocm93ICRUeXBlRXJyb3IoJ01heGltdW0gYWxsb3dlZCBpbmRleCBleGNlZWRlZCcpO1xuICByZXR1cm4gaXQ7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gaXRlcmFibGUgRE9NIGNvbGxlY3Rpb25zXG4vLyBmbGFnIC0gYGl0ZXJhYmxlYCBpbnRlcmZhY2UgLSAnZW50cmllcycsICdrZXlzJywgJ3ZhbHVlcycsICdmb3JFYWNoJyBtZXRob2RzXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgQ1NTUnVsZUxpc3Q6IDAsXG4gIENTU1N0eWxlRGVjbGFyYXRpb246IDAsXG4gIENTU1ZhbHVlTGlzdDogMCxcbiAgQ2xpZW50UmVjdExpc3Q6IDAsXG4gIERPTVJlY3RMaXN0OiAwLFxuICBET01TdHJpbmdMaXN0OiAwLFxuICBET01Ub2tlbkxpc3Q6IDEsXG4gIERhdGFUcmFuc2Zlckl0ZW1MaXN0OiAwLFxuICBGaWxlTGlzdDogMCxcbiAgSFRNTEFsbENvbGxlY3Rpb246IDAsXG4gIEhUTUxDb2xsZWN0aW9uOiAwLFxuICBIVE1MRm9ybUVsZW1lbnQ6IDAsXG4gIEhUTUxTZWxlY3RFbGVtZW50OiAwLFxuICBNZWRpYUxpc3Q6IDAsXG4gIE1pbWVUeXBlQXJyYXk6IDAsXG4gIE5hbWVkTm9kZU1hcDogMCxcbiAgTm9kZUxpc3Q6IDEsXG4gIFBhaW50UmVxdWVzdExpc3Q6IDAsXG4gIFBsdWdpbjogMCxcbiAgUGx1Z2luQXJyYXk6IDAsXG4gIFNWR0xlbmd0aExpc3Q6IDAsXG4gIFNWR051bWJlckxpc3Q6IDAsXG4gIFNWR1BhdGhTZWdMaXN0OiAwLFxuICBTVkdQb2ludExpc3Q6IDAsXG4gIFNWR1N0cmluZ0xpc3Q6IDAsXG4gIFNWR1RyYW5zZm9ybUxpc3Q6IDAsXG4gIFNvdXJjZUJ1ZmZlckxpc3Q6IDAsXG4gIFN0eWxlU2hlZXRMaXN0OiAwLFxuICBUZXh0VHJhY2tDdWVMaXN0OiAwLFxuICBUZXh0VHJhY2tMaXN0OiAwLFxuICBUb3VjaExpc3Q6IDBcbn07XG4iLCIndXNlIHN0cmljdCc7XG4vLyBJRTgtIGRvbid0IGVudW0gYnVnIGtleXNcbm1vZHVsZS5leHBvcnRzID0gW1xuICAnY29uc3RydWN0b3InLFxuICAnaGFzT3duUHJvcGVydHknLFxuICAnaXNQcm90b3R5cGVPZicsXG4gICdwcm9wZXJ0eUlzRW51bWVyYWJsZScsXG4gICd0b0xvY2FsZVN0cmluZycsXG4gICd0b1N0cmluZycsXG4gICd2YWx1ZU9mJ1xuXTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciB1c2VyQWdlbnQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW52aXJvbm1lbnQtdXNlci1hZ2VudCcpO1xuXG52YXIgZmlyZWZveCA9IHVzZXJBZ2VudC5tYXRjaCgvZmlyZWZveFxcLyhcXGQrKS9pKTtcblxubW9kdWxlLmV4cG9ydHMgPSAhIWZpcmVmb3ggJiYgK2ZpcmVmb3hbMV07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgVUEgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW52aXJvbm1lbnQtdXNlci1hZ2VudCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IC9NU0lFfFRyaWRlbnQvLnRlc3QoVUEpO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHVzZXJBZ2VudCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbnZpcm9ubWVudC11c2VyLWFnZW50Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gL2lwYWR8aXBob25lfGlwb2QvaS50ZXN0KHVzZXJBZ2VudCkgJiYgdHlwZW9mIFBlYmJsZSAhPSAndW5kZWZpbmVkJztcbiIsIid1c2Ugc3RyaWN0JztcbnZhciB1c2VyQWdlbnQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW52aXJvbm1lbnQtdXNlci1hZ2VudCcpO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVkb3Mvbm8tdnVsbmVyYWJsZSAtLSBzYWZlXG5tb2R1bGUuZXhwb3J0cyA9IC8oPzppcGFkfGlwaG9uZXxpcG9kKS4qYXBwbGV3ZWJraXQvaS50ZXN0KHVzZXJBZ2VudCk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgRU5WSVJPTk1FTlQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW52aXJvbm1lbnQnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBFTlZJUk9OTUVOVCA9PT0gJ05PREUnO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHVzZXJBZ2VudCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbnZpcm9ubWVudC11c2VyLWFnZW50Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gL3dlYjBzKD8hLipjaHJvbWUpL2kudGVzdCh1c2VyQWdlbnQpO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcblxudmFyIG5hdmlnYXRvciA9IGdsb2JhbFRoaXMubmF2aWdhdG9yO1xudmFyIHVzZXJBZ2VudCA9IG5hdmlnYXRvciAmJiBuYXZpZ2F0b3IudXNlckFnZW50O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHVzZXJBZ2VudCA/IFN0cmluZyh1c2VyQWdlbnQpIDogJyc7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xudmFyIHVzZXJBZ2VudCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbnZpcm9ubWVudC11c2VyLWFnZW50Jyk7XG5cbnZhciBwcm9jZXNzID0gZ2xvYmFsVGhpcy5wcm9jZXNzO1xudmFyIERlbm8gPSBnbG9iYWxUaGlzLkRlbm87XG52YXIgdmVyc2lvbnMgPSBwcm9jZXNzICYmIHByb2Nlc3MudmVyc2lvbnMgfHwgRGVubyAmJiBEZW5vLnZlcnNpb247XG52YXIgdjggPSB2ZXJzaW9ucyAmJiB2ZXJzaW9ucy52ODtcbnZhciBtYXRjaCwgdmVyc2lvbjtcblxuaWYgKHY4KSB7XG4gIG1hdGNoID0gdjguc3BsaXQoJy4nKTtcbiAgLy8gaW4gb2xkIENocm9tZSwgdmVyc2lvbnMgb2YgVjggaXNuJ3QgVjggPSBDaHJvbWUgLyAxMFxuICAvLyBidXQgdGhlaXIgY29ycmVjdCB2ZXJzaW9ucyBhcmUgbm90IGludGVyZXN0aW5nIGZvciB1c1xuICB2ZXJzaW9uID0gbWF0Y2hbMF0gPiAwICYmIG1hdGNoWzBdIDwgNCA/IDEgOiArKG1hdGNoWzBdICsgbWF0Y2hbMV0pO1xufVxuXG4vLyBCcm93c2VyRlMgTm9kZUpTIGBwcm9jZXNzYCBwb2x5ZmlsbCBpbmNvcnJlY3RseSBzZXQgYC52OGAgdG8gYDAuMGBcbi8vIHNvIGNoZWNrIGB1c2VyQWdlbnRgIGV2ZW4gaWYgYC52OGAgZXhpc3RzLCBidXQgMFxuaWYgKCF2ZXJzaW9uICYmIHVzZXJBZ2VudCkge1xuICBtYXRjaCA9IHVzZXJBZ2VudC5tYXRjaCgvRWRnZVxcLyhcXGQrKS8pO1xuICBpZiAoIW1hdGNoIHx8IG1hdGNoWzFdID49IDc0KSB7XG4gICAgbWF0Y2ggPSB1c2VyQWdlbnQubWF0Y2goL0Nocm9tZVxcLyhcXGQrKS8pO1xuICAgIGlmIChtYXRjaCkgdmVyc2lvbiA9ICttYXRjaFsxXTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHZlcnNpb247XG4iLCIndXNlIHN0cmljdCc7XG52YXIgdXNlckFnZW50ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Vudmlyb25tZW50LXVzZXItYWdlbnQnKTtcblxudmFyIHdlYmtpdCA9IHVzZXJBZ2VudC5tYXRjaCgvQXBwbGVXZWJLaXRcXC8oXFxkKylcXC4vKTtcblxubW9kdWxlLmV4cG9ydHMgPSAhIXdlYmtpdCAmJiArd2Via2l0WzFdO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLyogZ2xvYmFsIEJ1biwgRGVubyAtLSBkZXRlY3Rpb24gKi9cbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG52YXIgdXNlckFnZW50ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Vudmlyb25tZW50LXVzZXItYWdlbnQnKTtcbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YtcmF3Jyk7XG5cbnZhciB1c2VyQWdlbnRTdGFydHNXaXRoID0gZnVuY3Rpb24gKHN0cmluZykge1xuICByZXR1cm4gdXNlckFnZW50LnNsaWNlKDAsIHN0cmluZy5sZW5ndGgpID09PSBzdHJpbmc7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IChmdW5jdGlvbiAoKSB7XG4gIGlmICh1c2VyQWdlbnRTdGFydHNXaXRoKCdCdW4vJykpIHJldHVybiAnQlVOJztcbiAgaWYgKHVzZXJBZ2VudFN0YXJ0c1dpdGgoJ0Nsb3VkZmxhcmUtV29ya2VycycpKSByZXR1cm4gJ0NMT1VERkxBUkUnO1xuICBpZiAodXNlckFnZW50U3RhcnRzV2l0aCgnRGVuby8nKSkgcmV0dXJuICdERU5PJztcbiAgaWYgKHVzZXJBZ2VudFN0YXJ0c1dpdGgoJ05vZGUuanMvJykpIHJldHVybiAnTk9ERSc7XG4gIGlmIChnbG9iYWxUaGlzLkJ1biAmJiB0eXBlb2YgQnVuLnZlcnNpb24gPT0gJ3N0cmluZycpIHJldHVybiAnQlVOJztcbiAgaWYgKGdsb2JhbFRoaXMuRGVubyAmJiB0eXBlb2YgRGVuby52ZXJzaW9uID09ICdvYmplY3QnKSByZXR1cm4gJ0RFTk8nO1xuICBpZiAoY2xhc3NvZihnbG9iYWxUaGlzLnByb2Nlc3MpID09PSAncHJvY2VzcycpIHJldHVybiAnTk9ERSc7XG4gIGlmIChnbG9iYWxUaGlzLndpbmRvdyAmJiBnbG9iYWxUaGlzLmRvY3VtZW50KSByZXR1cm4gJ0JST1dTRVInO1xuICByZXR1cm4gJ1JFU1QnO1xufSkoKTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcblxudmFyICRFcnJvciA9IEVycm9yO1xudmFyIHJlcGxhY2UgPSB1bmN1cnJ5VGhpcygnJy5yZXBsYWNlKTtcblxudmFyIFRFU1QgPSAoZnVuY3Rpb24gKGFyZykgeyByZXR1cm4gU3RyaW5nKG5ldyAkRXJyb3IoYXJnKS5zdGFjayk7IH0pKCd6eGNhc2QnKTtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWRvcy9uby12dWxuZXJhYmxlIC0tIHNhZmVcbnZhciBWOF9PUl9DSEFLUkFfU1RBQ0tfRU5UUlkgPSAvXFxuXFxzKmF0IFteOl0qOlteXFxuXSovO1xudmFyIElTX1Y4X09SX0NIQUtSQV9TVEFDSyA9IFY4X09SX0NIQUtSQV9TVEFDS19FTlRSWS50ZXN0KFRFU1QpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChzdGFjaywgZHJvcEVudHJpZXMpIHtcbiAgaWYgKElTX1Y4X09SX0NIQUtSQV9TVEFDSyAmJiB0eXBlb2Ygc3RhY2sgPT0gJ3N0cmluZycgJiYgISRFcnJvci5wcmVwYXJlU3RhY2tUcmFjZSkge1xuICAgIHdoaWxlIChkcm9wRW50cmllcy0tKSBzdGFjayA9IHJlcGxhY2Uoc3RhY2ssIFY4X09SX0NIQUtSQV9TVEFDS19FTlRSWSwgJycpO1xuICB9IHJldHVybiBzdGFjaztcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1ub24tZW51bWVyYWJsZS1wcm9wZXJ0eScpO1xudmFyIGNsZWFyRXJyb3JTdGFjayA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lcnJvci1zdGFjay1jbGVhcicpO1xudmFyIEVSUk9SX1NUQUNLX0lOU1RBTExBQkxFID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Vycm9yLXN0YWNrLWluc3RhbGxhYmxlJyk7XG5cbi8vIG5vbi1zdGFuZGFyZCBWOFxudmFyIGNhcHR1cmVTdGFja1RyYWNlID0gRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2U7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGVycm9yLCBDLCBzdGFjaywgZHJvcEVudHJpZXMpIHtcbiAgaWYgKEVSUk9SX1NUQUNLX0lOU1RBTExBQkxFKSB7XG4gICAgaWYgKGNhcHR1cmVTdGFja1RyYWNlKSBjYXB0dXJlU3RhY2tUcmFjZShlcnJvciwgQyk7XG4gICAgZWxzZSBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkoZXJyb3IsICdzdGFjaycsIGNsZWFyRXJyb3JTdGFjayhzdGFjaywgZHJvcEVudHJpZXMpKTtcbiAgfVxufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHktZGVzY3JpcHRvcicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHZhciBlcnJvciA9IG5ldyBFcnJvcignYScpO1xuICBpZiAoISgnc3RhY2snIGluIGVycm9yKSkgcmV0dXJuIHRydWU7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gc2FmZVxuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXJyb3IsICdzdGFjaycsIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvcigxLCA3KSk7XG4gIHJldHVybiBlcnJvci5zdGFjayAhPT0gNztcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcbnZhciBhcHBseSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1hcHBseScpO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcy1jbGF1c2UnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3InKS5mO1xudmFyIGlzRm9yY2VkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWZvcmNlZCcpO1xudmFyIHBhdGggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcGF0aCcpO1xudmFyIGJpbmQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZC1jb250ZXh0Jyk7XG52YXIgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1ub24tZW51bWVyYWJsZS1wcm9wZXJ0eScpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG4vLyBhZGQgZGVidWdnaW5nIGluZm9cbnJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQtc3RvcmUnKTtcblxudmFyIHdyYXBDb25zdHJ1Y3RvciA9IGZ1bmN0aW9uIChOYXRpdmVDb25zdHJ1Y3Rvcikge1xuICB2YXIgV3JhcHBlciA9IGZ1bmN0aW9uIChhLCBiLCBjKSB7XG4gICAgaWYgKHRoaXMgaW5zdGFuY2VvZiBXcmFwcGVyKSB7XG4gICAgICBzd2l0Y2ggKGFyZ3VtZW50cy5sZW5ndGgpIHtcbiAgICAgICAgY2FzZSAwOiByZXR1cm4gbmV3IE5hdGl2ZUNvbnN0cnVjdG9yKCk7XG4gICAgICAgIGNhc2UgMTogcmV0dXJuIG5ldyBOYXRpdmVDb25zdHJ1Y3RvcihhKTtcbiAgICAgICAgY2FzZSAyOiByZXR1cm4gbmV3IE5hdGl2ZUNvbnN0cnVjdG9yKGEsIGIpO1xuICAgICAgfSByZXR1cm4gbmV3IE5hdGl2ZUNvbnN0cnVjdG9yKGEsIGIsIGMpO1xuICAgIH0gcmV0dXJuIGFwcGx5KE5hdGl2ZUNvbnN0cnVjdG9yLCB0aGlzLCBhcmd1bWVudHMpO1xuICB9O1xuICBXcmFwcGVyLnByb3RvdHlwZSA9IE5hdGl2ZUNvbnN0cnVjdG9yLnByb3RvdHlwZTtcbiAgcmV0dXJuIFdyYXBwZXI7XG59O1xuXG4vKlxuICBvcHRpb25zLnRhcmdldCAgICAgICAgIC0gbmFtZSBvZiB0aGUgdGFyZ2V0IG9iamVjdFxuICBvcHRpb25zLmdsb2JhbCAgICAgICAgIC0gdGFyZ2V0IGlzIHRoZSBnbG9iYWwgb2JqZWN0XG4gIG9wdGlvbnMuc3RhdCAgICAgICAgICAgLSBleHBvcnQgYXMgc3RhdGljIG1ldGhvZHMgb2YgdGFyZ2V0XG4gIG9wdGlvbnMucHJvdG8gICAgICAgICAgLSBleHBvcnQgYXMgcHJvdG90eXBlIG1ldGhvZHMgb2YgdGFyZ2V0XG4gIG9wdGlvbnMucmVhbCAgICAgICAgICAgLSByZWFsIHByb3RvdHlwZSBtZXRob2QgZm9yIHRoZSBgcHVyZWAgdmVyc2lvblxuICBvcHRpb25zLmZvcmNlZCAgICAgICAgIC0gZXhwb3J0IGV2ZW4gaWYgdGhlIG5hdGl2ZSBmZWF0dXJlIGlzIGF2YWlsYWJsZVxuICBvcHRpb25zLmJpbmQgICAgICAgICAgIC0gYmluZCBtZXRob2RzIHRvIHRoZSB0YXJnZXQsIHJlcXVpcmVkIGZvciB0aGUgYHB1cmVgIHZlcnNpb25cbiAgb3B0aW9ucy53cmFwICAgICAgICAgICAtIHdyYXAgY29uc3RydWN0b3JzIHRvIHByZXZlbnRpbmcgZ2xvYmFsIHBvbGx1dGlvbiwgcmVxdWlyZWQgZm9yIHRoZSBgcHVyZWAgdmVyc2lvblxuICBvcHRpb25zLnVuc2FmZSAgICAgICAgIC0gdXNlIHRoZSBzaW1wbGUgYXNzaWdubWVudCBvZiBwcm9wZXJ0eSBpbnN0ZWFkIG9mIGRlbGV0ZSArIGRlZmluZVByb3BlcnR5XG4gIG9wdGlvbnMuc2hhbSAgICAgICAgICAgLSBhZGQgYSBmbGFnIHRvIG5vdCBjb21wbGV0ZWx5IGZ1bGwgcG9seWZpbGxzXG4gIG9wdGlvbnMuZW51bWVyYWJsZSAgICAgLSBleHBvcnQgYXMgZW51bWVyYWJsZSBwcm9wZXJ0eVxuICBvcHRpb25zLmRvbnRDYWxsR2V0U2V0IC0gcHJldmVudCBjYWxsaW5nIGEgZ2V0dGVyIG9uIHRhcmdldFxuICBvcHRpb25zLm5hbWUgICAgICAgICAgIC0gdGhlIC5uYW1lIG9mIHRoZSBmdW5jdGlvbiBpZiBpdCBkb2VzIG5vdCBtYXRjaCB0aGUga2V5XG4qL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob3B0aW9ucywgc291cmNlKSB7XG4gIHZhciBUQVJHRVQgPSBvcHRpb25zLnRhcmdldDtcbiAgdmFyIEdMT0JBTCA9IG9wdGlvbnMuZ2xvYmFsO1xuICB2YXIgU1RBVElDID0gb3B0aW9ucy5zdGF0O1xuICB2YXIgUFJPVE8gPSBvcHRpb25zLnByb3RvO1xuXG4gIHZhciBuYXRpdmVTb3VyY2UgPSBHTE9CQUwgPyBnbG9iYWxUaGlzIDogU1RBVElDID8gZ2xvYmFsVGhpc1tUQVJHRVRdIDogZ2xvYmFsVGhpc1tUQVJHRVRdICYmIGdsb2JhbFRoaXNbVEFSR0VUXS5wcm90b3R5cGU7XG5cbiAgdmFyIHRhcmdldCA9IEdMT0JBTCA/IHBhdGggOiBwYXRoW1RBUkdFVF0gfHwgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KHBhdGgsIFRBUkdFVCwge30pW1RBUkdFVF07XG4gIHZhciB0YXJnZXRQcm90b3R5cGUgPSB0YXJnZXQucHJvdG90eXBlO1xuXG4gIHZhciBGT1JDRUQsIFVTRV9OQVRJVkUsIFZJUlRVQUxfUFJPVE9UWVBFO1xuICB2YXIga2V5LCBzb3VyY2VQcm9wZXJ0eSwgdGFyZ2V0UHJvcGVydHksIG5hdGl2ZVByb3BlcnR5LCByZXN1bHRQcm9wZXJ0eSwgZGVzY3JpcHRvcjtcblxuICBmb3IgKGtleSBpbiBzb3VyY2UpIHtcbiAgICBGT1JDRUQgPSBpc0ZvcmNlZChHTE9CQUwgPyBrZXkgOiBUQVJHRVQgKyAoU1RBVElDID8gJy4nIDogJyMnKSArIGtleSwgb3B0aW9ucy5mb3JjZWQpO1xuICAgIC8vIGNvbnRhaW5zIGluIG5hdGl2ZVxuICAgIFVTRV9OQVRJVkUgPSAhRk9SQ0VEICYmIG5hdGl2ZVNvdXJjZSAmJiBoYXNPd24obmF0aXZlU291cmNlLCBrZXkpO1xuXG4gICAgdGFyZ2V0UHJvcGVydHkgPSB0YXJnZXRba2V5XTtcblxuICAgIGlmIChVU0VfTkFUSVZFKSBpZiAob3B0aW9ucy5kb250Q2FsbEdldFNldCkge1xuICAgICAgZGVzY3JpcHRvciA9IGdldE93blByb3BlcnR5RGVzY3JpcHRvcihuYXRpdmVTb3VyY2UsIGtleSk7XG4gICAgICBuYXRpdmVQcm9wZXJ0eSA9IGRlc2NyaXB0b3IgJiYgZGVzY3JpcHRvci52YWx1ZTtcbiAgICB9IGVsc2UgbmF0aXZlUHJvcGVydHkgPSBuYXRpdmVTb3VyY2Vba2V5XTtcblxuICAgIC8vIGV4cG9ydCBuYXRpdmUgb3IgaW1wbGVtZW50YXRpb25cbiAgICBzb3VyY2VQcm9wZXJ0eSA9IChVU0VfTkFUSVZFICYmIG5hdGl2ZVByb3BlcnR5KSA/IG5hdGl2ZVByb3BlcnR5IDogc291cmNlW2tleV07XG5cbiAgICBpZiAoIUZPUkNFRCAmJiAhUFJPVE8gJiYgdHlwZW9mIHRhcmdldFByb3BlcnR5ID09IHR5cGVvZiBzb3VyY2VQcm9wZXJ0eSkgY29udGludWU7XG5cbiAgICAvLyBiaW5kIG1ldGhvZHMgdG8gZ2xvYmFsIGZvciBjYWxsaW5nIGZyb20gZXhwb3J0IGNvbnRleHRcbiAgICBpZiAob3B0aW9ucy5iaW5kICYmIFVTRV9OQVRJVkUpIHJlc3VsdFByb3BlcnR5ID0gYmluZChzb3VyY2VQcm9wZXJ0eSwgZ2xvYmFsVGhpcyk7XG4gICAgLy8gd3JhcCBnbG9iYWwgY29uc3RydWN0b3JzIGZvciBwcmV2ZW50IGNoYW5nZXMgaW4gdGhpcyB2ZXJzaW9uXG4gICAgZWxzZSBpZiAob3B0aW9ucy53cmFwICYmIFVTRV9OQVRJVkUpIHJlc3VsdFByb3BlcnR5ID0gd3JhcENvbnN0cnVjdG9yKHNvdXJjZVByb3BlcnR5KTtcbiAgICAvLyBtYWtlIHN0YXRpYyB2ZXJzaW9ucyBmb3IgcHJvdG90eXBlIG1ldGhvZHNcbiAgICBlbHNlIGlmIChQUk9UTyAmJiBpc0NhbGxhYmxlKHNvdXJjZVByb3BlcnR5KSkgcmVzdWx0UHJvcGVydHkgPSB1bmN1cnJ5VGhpcyhzb3VyY2VQcm9wZXJ0eSk7XG4gICAgLy8gZGVmYXVsdCBjYXNlXG4gICAgZWxzZSByZXN1bHRQcm9wZXJ0eSA9IHNvdXJjZVByb3BlcnR5O1xuXG4gICAgLy8gYWRkIGEgZmxhZyB0byBub3QgY29tcGxldGVseSBmdWxsIHBvbHlmaWxsc1xuICAgIGlmIChvcHRpb25zLnNoYW0gfHwgKHNvdXJjZVByb3BlcnR5ICYmIHNvdXJjZVByb3BlcnR5LnNoYW0pIHx8ICh0YXJnZXRQcm9wZXJ0eSAmJiB0YXJnZXRQcm9wZXJ0eS5zaGFtKSkge1xuICAgICAgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KHJlc3VsdFByb3BlcnR5LCAnc2hhbScsIHRydWUpO1xuICAgIH1cblxuICAgIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgcmVzdWx0UHJvcGVydHkpO1xuXG4gICAgaWYgKFBST1RPKSB7XG4gICAgICBWSVJUVUFMX1BST1RPVFlQRSA9IFRBUkdFVCArICdQcm90b3R5cGUnO1xuICAgICAgaWYgKCFoYXNPd24ocGF0aCwgVklSVFVBTF9QUk9UT1RZUEUpKSB7XG4gICAgICAgIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eShwYXRoLCBWSVJUVUFMX1BST1RPVFlQRSwge30pO1xuICAgICAgfVxuICAgICAgLy8gZXhwb3J0IHZpcnR1YWwgcHJvdG90eXBlIG1ldGhvZHNcbiAgICAgIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eShwYXRoW1ZJUlRVQUxfUFJPVE9UWVBFXSwga2V5LCBzb3VyY2VQcm9wZXJ0eSk7XG4gICAgICAvLyBleHBvcnQgcmVhbCBwcm90b3R5cGUgbWV0aG9kc1xuICAgICAgaWYgKG9wdGlvbnMucmVhbCAmJiB0YXJnZXRQcm90b3R5cGUgJiYgKEZPUkNFRCB8fCAhdGFyZ2V0UHJvdG90eXBlW2tleV0pKSB7XG4gICAgICAgIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSh0YXJnZXRQcm90b3R5cGUsIGtleSwgc291cmNlUHJvcGVydHkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufTtcbiIsIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGV4ZWMpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gISFleGVjKCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWlzZXh0ZW5zaWJsZSwgZXMvbm8tb2JqZWN0LXByZXZlbnRleHRlbnNpb25zIC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG4gIHJldHVybiBPYmplY3QuaXNFeHRlbnNpYmxlKE9iamVjdC5wcmV2ZW50RXh0ZW5zaW9ucyh7fSkpO1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgTkFUSVZFX0JJTkQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZC1uYXRpdmUnKTtcblxudmFyIEZ1bmN0aW9uUHJvdG90eXBlID0gRnVuY3Rpb24ucHJvdG90eXBlO1xudmFyIGFwcGx5ID0gRnVuY3Rpb25Qcm90b3R5cGUuYXBwbHk7XG52YXIgY2FsbCA9IEZ1bmN0aW9uUHJvdG90eXBlLmNhbGw7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1yZWZsZWN0IC0tIHNhZmVcbm1vZHVsZS5leHBvcnRzID0gdHlwZW9mIFJlZmxlY3QgPT0gJ29iamVjdCcgJiYgUmVmbGVjdC5hcHBseSB8fCAoTkFUSVZFX0JJTkQgPyBjYWxsLmJpbmQoYXBwbHkpIDogZnVuY3Rpb24gKCkge1xuICByZXR1cm4gY2FsbC5hcHBseShhcHBseSwgYXJndW1lbnRzKTtcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcy1jbGF1c2UnKTtcbnZhciBhQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1jYWxsYWJsZScpO1xudmFyIE5BVElWRV9CSU5EID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtbmF0aXZlJyk7XG5cbnZhciBiaW5kID0gdW5jdXJyeVRoaXModW5jdXJyeVRoaXMuYmluZCk7XG5cbi8vIG9wdGlvbmFsIC8gc2ltcGxlIGNvbnRleHQgYmluZGluZ1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZm4sIHRoYXQpIHtcbiAgYUNhbGxhYmxlKGZuKTtcbiAgcmV0dXJuIHRoYXQgPT09IHVuZGVmaW5lZCA/IGZuIDogTkFUSVZFX0JJTkQgPyBiaW5kKGZuLCB0aGF0KSA6IGZ1bmN0aW9uICgvKiAuLi5hcmdzICovKSB7XG4gICAgcmV0dXJuIGZuLmFwcGx5KHRoYXQsIGFyZ3VtZW50cyk7XG4gIH07XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLWZ1bmN0aW9uLXByb3RvdHlwZS1iaW5kIC0tIHNhZmVcbiAgdmFyIHRlc3QgPSAoZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9KS5iaW5kKCk7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wcm90b3R5cGUtYnVpbHRpbnMgLS0gc2FmZVxuICByZXR1cm4gdHlwZW9mIHRlc3QgIT0gJ2Z1bmN0aW9uJyB8fCB0ZXN0Lmhhc093blByb3BlcnR5KCdwcm90b3R5cGUnKTtcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIE5BVElWRV9CSU5EID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtbmF0aXZlJyk7XG5cbnZhciBjYWxsID0gRnVuY3Rpb24ucHJvdG90eXBlLmNhbGw7XG5cbm1vZHVsZS5leHBvcnRzID0gTkFUSVZFX0JJTkQgPyBjYWxsLmJpbmQoY2FsbCkgOiBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBjYWxsLmFwcGx5KGNhbGwsIGFyZ3VtZW50cyk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcblxudmFyIEZ1bmN0aW9uUHJvdG90eXBlID0gRnVuY3Rpb24ucHJvdG90eXBlO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3IgLS0gc2FmZVxudmFyIGdldERlc2NyaXB0b3IgPSBERVNDUklQVE9SUyAmJiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xuXG52YXIgRVhJU1RTID0gaGFzT3duKEZ1bmN0aW9uUHJvdG90eXBlLCAnbmFtZScpO1xuLy8gYWRkaXRpb25hbCBwcm90ZWN0aW9uIGZyb20gbWluaWZpZWQgLyBtYW5nbGVkIC8gZHJvcHBlZCBmdW5jdGlvbiBuYW1lc1xudmFyIFBST1BFUiA9IEVYSVNUUyAmJiAoZnVuY3Rpb24gc29tZXRoaW5nKCkgeyAvKiBlbXB0eSAqLyB9KS5uYW1lID09PSAnc29tZXRoaW5nJztcbnZhciBDT05GSUdVUkFCTEUgPSBFWElTVFMgJiYgKCFERVNDUklQVE9SUyB8fCAoREVTQ1JJUFRPUlMgJiYgZ2V0RGVzY3JpcHRvcihGdW5jdGlvblByb3RvdHlwZSwgJ25hbWUnKS5jb25maWd1cmFibGUpKTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIEVYSVNUUzogRVhJU1RTLFxuICBQUk9QRVI6IFBST1BFUixcbiAgQ09ORklHVVJBQkxFOiBDT05GSUdVUkFCTEVcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgYUNhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2EtY2FsbGFibGUnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob2JqZWN0LCBrZXksIG1ldGhvZCkge1xuICB0cnkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9yIC0tIHNhZmVcbiAgICByZXR1cm4gdW5jdXJyeVRoaXMoYUNhbGxhYmxlKE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCBrZXkpW21ldGhvZF0pKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHsgLyogZW1wdHkgKi8gfVxufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBjbGFzc29mUmF3ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YtcmF3Jyk7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGZuKSB7XG4gIC8vIE5hc2hvcm4gYnVnOlxuICAvLyAgIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy8xMTI4XG4gIC8vICAgaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzExMzBcbiAgaWYgKGNsYXNzb2ZSYXcoZm4pID09PSAnRnVuY3Rpb24nKSByZXR1cm4gdW5jdXJyeVRoaXMoZm4pO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBOQVRJVkVfQklORCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLW5hdGl2ZScpO1xuXG52YXIgRnVuY3Rpb25Qcm90b3R5cGUgPSBGdW5jdGlvbi5wcm90b3R5cGU7XG52YXIgY2FsbCA9IEZ1bmN0aW9uUHJvdG90eXBlLmNhbGw7XG52YXIgdW5jdXJyeVRoaXNXaXRoQmluZCA9IE5BVElWRV9CSU5EICYmIEZ1bmN0aW9uUHJvdG90eXBlLmJpbmQuYmluZChjYWxsLCBjYWxsKTtcblxubW9kdWxlLmV4cG9ydHMgPSBOQVRJVkVfQklORCA/IHVuY3VycnlUaGlzV2l0aEJpbmQgOiBmdW5jdGlvbiAoZm4pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gY2FsbC5hcHBseShmbiwgYXJndW1lbnRzKTtcbiAgfTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xudmFyIHBhdGggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcGF0aCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChDT05TVFJVQ1RPUiwgTUVUSE9EKSB7XG4gIHZhciBOYW1lc3BhY2UgPSBwYXRoW0NPTlNUUlVDVE9SICsgJ1Byb3RvdHlwZSddO1xuICB2YXIgcHVyZU1ldGhvZCA9IE5hbWVzcGFjZSAmJiBOYW1lc3BhY2VbTUVUSE9EXTtcbiAgaWYgKHB1cmVNZXRob2QpIHJldHVybiBwdXJlTWV0aG9kO1xuICB2YXIgTmF0aXZlQ29uc3RydWN0b3IgPSBnbG9iYWxUaGlzW0NPTlNUUlVDVE9SXTtcbiAgdmFyIE5hdGl2ZVByb3RvdHlwZSA9IE5hdGl2ZUNvbnN0cnVjdG9yICYmIE5hdGl2ZUNvbnN0cnVjdG9yLnByb3RvdHlwZTtcbiAgcmV0dXJuIE5hdGl2ZVByb3RvdHlwZSAmJiBOYXRpdmVQcm90b3R5cGVbTUVUSE9EXTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgcGF0aCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9wYXRoJyk7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcblxudmFyIGFGdW5jdGlvbiA9IGZ1bmN0aW9uICh2YXJpYWJsZSkge1xuICByZXR1cm4gaXNDYWxsYWJsZSh2YXJpYWJsZSkgPyB2YXJpYWJsZSA6IHVuZGVmaW5lZDtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG5hbWVzcGFjZSwgbWV0aG9kKSB7XG4gIHJldHVybiBhcmd1bWVudHMubGVuZ3RoIDwgMiA/IGFGdW5jdGlvbihwYXRoW25hbWVzcGFjZV0pIHx8IGFGdW5jdGlvbihnbG9iYWxUaGlzW25hbWVzcGFjZV0pXG4gICAgOiBwYXRoW25hbWVzcGFjZV0gJiYgcGF0aFtuYW1lc3BhY2VdW21ldGhvZF0gfHwgZ2xvYmFsVGhpc1tuYW1lc3BhY2VdICYmIGdsb2JhbFRoaXNbbmFtZXNwYWNlXVttZXRob2RdO1xufTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIGBHZXRJdGVyYXRvckRpcmVjdChvYmopYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9wcm9wb3NhbC1pdGVyYXRvci1oZWxwZXJzLyNzZWMtZ2V0aXRlcmF0b3JkaXJlY3Rcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9iaikge1xuICByZXR1cm4ge1xuICAgIGl0ZXJhdG9yOiBvYmosXG4gICAgbmV4dDogb2JqLm5leHQsXG4gICAgZG9uZTogZmFsc2VcbiAgfTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jbGFzc29mJyk7XG52YXIgZ2V0TWV0aG9kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1tZXRob2QnKTtcbnZhciBpc051bGxPclVuZGVmaW5lZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1udWxsLW9yLXVuZGVmaW5lZCcpO1xudmFyIEl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvcnMnKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcblxudmFyIElURVJBVE9SID0gd2VsbEtub3duU3ltYm9sKCdpdGVyYXRvcicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICBpZiAoIWlzTnVsbE9yVW5kZWZpbmVkKGl0KSkgcmV0dXJuIGdldE1ldGhvZChpdCwgSVRFUkFUT1IpXG4gICAgfHwgZ2V0TWV0aG9kKGl0LCAnQEBpdGVyYXRvcicpXG4gICAgfHwgSXRlcmF0b3JzW2NsYXNzb2YoaXQpXTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgYUNhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2EtY2FsbGFibGUnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciB0cnlUb1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90cnktdG8tc3RyaW5nJyk7XG52YXIgZ2V0SXRlcmF0b3JNZXRob2QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWl0ZXJhdG9yLW1ldGhvZCcpO1xuXG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQsIHVzaW5nSXRlcmF0b3IpIHtcbiAgdmFyIGl0ZXJhdG9yTWV0aG9kID0gYXJndW1lbnRzLmxlbmd0aCA8IDIgPyBnZXRJdGVyYXRvck1ldGhvZChhcmd1bWVudCkgOiB1c2luZ0l0ZXJhdG9yO1xuICBpZiAoYUNhbGxhYmxlKGl0ZXJhdG9yTWV0aG9kKSkgcmV0dXJuIGFuT2JqZWN0KGNhbGwoaXRlcmF0b3JNZXRob2QsIGFyZ3VtZW50KSk7XG4gIHRocm93IG5ldyAkVHlwZUVycm9yKHRyeVRvU3RyaW5nKGFyZ3VtZW50KSArICcgaXMgbm90IGl0ZXJhYmxlJyk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGlzQXJyYXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtYXJyYXknKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jbGFzc29mLXJhdycpO1xudmFyIHRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXN0cmluZycpO1xuXG52YXIgcHVzaCA9IHVuY3VycnlUaGlzKFtdLnB1c2gpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChyZXBsYWNlcikge1xuICBpZiAoaXNDYWxsYWJsZShyZXBsYWNlcikpIHJldHVybiByZXBsYWNlcjtcbiAgaWYgKCFpc0FycmF5KHJlcGxhY2VyKSkgcmV0dXJuO1xuICB2YXIgcmF3TGVuZ3RoID0gcmVwbGFjZXIubGVuZ3RoO1xuICB2YXIga2V5cyA9IFtdO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHJhd0xlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGVsZW1lbnQgPSByZXBsYWNlcltpXTtcbiAgICBpZiAodHlwZW9mIGVsZW1lbnQgPT0gJ3N0cmluZycpIHB1c2goa2V5cywgZWxlbWVudCk7XG4gICAgZWxzZSBpZiAodHlwZW9mIGVsZW1lbnQgPT0gJ251bWJlcicgfHwgY2xhc3NvZihlbGVtZW50KSA9PT0gJ051bWJlcicgfHwgY2xhc3NvZihlbGVtZW50KSA9PT0gJ1N0cmluZycpIHB1c2goa2V5cywgdG9TdHJpbmcoZWxlbWVudCkpO1xuICB9XG4gIHZhciBrZXlzTGVuZ3RoID0ga2V5cy5sZW5ndGg7XG4gIHZhciByb290ID0gdHJ1ZTtcbiAgcmV0dXJuIGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XG4gICAgaWYgKHJvb3QpIHtcbiAgICAgIHJvb3QgPSBmYWxzZTtcbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG4gICAgaWYgKGlzQXJyYXkodGhpcykpIHJldHVybiB2YWx1ZTtcbiAgICBmb3IgKHZhciBqID0gMDsgaiA8IGtleXNMZW5ndGg7IGorKykgaWYgKGtleXNbal0gPT09IGtleSkgcmV0dXJuIHZhbHVlO1xuICB9O1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBhQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1jYWxsYWJsZScpO1xudmFyIGlzTnVsbE9yVW5kZWZpbmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW51bGwtb3ItdW5kZWZpbmVkJyk7XG5cbi8vIGBHZXRNZXRob2RgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1nZXRtZXRob2Rcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKFYsIFApIHtcbiAgdmFyIGZ1bmMgPSBWW1BdO1xuICByZXR1cm4gaXNOdWxsT3JVbmRlZmluZWQoZnVuYykgPyB1bmRlZmluZWQgOiBhQ2FsbGFibGUoZnVuYyk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGFDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLWNhbGxhYmxlJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgdG9JbnRlZ2VyT3JJbmZpbml0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbnRlZ2VyLW9yLWluZmluaXR5Jyk7XG52YXIgZ2V0SXRlcmF0b3JEaXJlY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWl0ZXJhdG9yLWRpcmVjdCcpO1xuXG52YXIgSU5WQUxJRF9TSVpFID0gJ0ludmFsaWQgc2l6ZSc7XG52YXIgJFJhbmdlRXJyb3IgPSBSYW5nZUVycm9yO1xudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG52YXIgbWF4ID0gTWF0aC5tYXg7XG5cbnZhciBTZXRSZWNvcmQgPSBmdW5jdGlvbiAoc2V0LCBpbnRTaXplKSB7XG4gIHRoaXMuc2V0ID0gc2V0O1xuICB0aGlzLnNpemUgPSBtYXgoaW50U2l6ZSwgMCk7XG4gIHRoaXMuaGFzID0gYUNhbGxhYmxlKHNldC5oYXMpO1xuICB0aGlzLmtleXMgPSBhQ2FsbGFibGUoc2V0LmtleXMpO1xufTtcblxuU2V0UmVjb3JkLnByb3RvdHlwZSA9IHtcbiAgZ2V0SXRlcmF0b3I6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gZ2V0SXRlcmF0b3JEaXJlY3QoYW5PYmplY3QoY2FsbCh0aGlzLmtleXMsIHRoaXMuc2V0KSkpO1xuICB9LFxuICBpbmNsdWRlczogZnVuY3Rpb24gKGl0KSB7XG4gICAgcmV0dXJuIGNhbGwodGhpcy5oYXMsIHRoaXMuc2V0LCBpdCk7XG4gIH1cbn07XG5cbi8vIGBHZXRTZXRSZWNvcmRgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL3Byb3Bvc2FsLXNldC1tZXRob2RzLyNzZWMtZ2V0c2V0cmVjb3JkXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvYmopIHtcbiAgYW5PYmplY3Qob2JqKTtcbiAgdmFyIG51bVNpemUgPSArb2JqLnNpemU7XG4gIC8vIE5PVEU6IElmIHNpemUgaXMgdW5kZWZpbmVkLCB0aGVuIG51bVNpemUgd2lsbCBiZSBOYU5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZSAtLSBOYU4gY2hlY2tcbiAgaWYgKG51bVNpemUgIT09IG51bVNpemUpIHRocm93IG5ldyAkVHlwZUVycm9yKElOVkFMSURfU0laRSk7XG4gIHZhciBpbnRTaXplID0gdG9JbnRlZ2VyT3JJbmZpbml0eShudW1TaXplKTtcbiAgaWYgKGludFNpemUgPCAwKSB0aHJvdyBuZXcgJFJhbmdlRXJyb3IoSU5WQUxJRF9TSVpFKTtcbiAgcmV0dXJuIG5ldyBTZXRSZWNvcmQob2JqLCBpbnRTaXplKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgY2hlY2sgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGl0ICYmIGl0Lk1hdGggPT09IE1hdGggJiYgaXQ7XG59O1xuXG4vLyBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvODYjaXNzdWVjb21tZW50LTExNTc1OTAyOFxubW9kdWxlLmV4cG9ydHMgPVxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tZ2xvYmFsLXRoaXMgLS0gc2FmZVxuICBjaGVjayh0eXBlb2YgZ2xvYmFsVGhpcyA9PSAnb2JqZWN0JyAmJiBnbG9iYWxUaGlzKSB8fFxuICBjaGVjayh0eXBlb2Ygd2luZG93ID09ICdvYmplY3QnICYmIHdpbmRvdykgfHxcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXJlc3RyaWN0ZWQtZ2xvYmFscyAtLSBzYWZlXG4gIGNoZWNrKHR5cGVvZiBzZWxmID09ICdvYmplY3QnICYmIHNlbGYpIHx8XG4gIGNoZWNrKHR5cGVvZiBnbG9iYWwgPT0gJ29iamVjdCcgJiYgZ2xvYmFsKSB8fFxuICBjaGVjayh0eXBlb2YgdGhpcyA9PSAnb2JqZWN0JyAmJiB0aGlzKSB8fFxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbmV3LWZ1bmMgLS0gZmFsbGJhY2tcbiAgKGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0pKCkgfHwgRnVuY3Rpb24oJ3JldHVybiB0aGlzJykoKTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1vYmplY3QnKTtcblxudmFyIGhhc093blByb3BlcnR5ID0gdW5jdXJyeVRoaXMoe30uaGFzT3duUHJvcGVydHkpO1xuXG4vLyBgSGFzT3duUHJvcGVydHlgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1oYXNvd25wcm9wZXJ0eVxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1oYXNvd24gLS0gc2FmZVxubW9kdWxlLmV4cG9ydHMgPSBPYmplY3QuaGFzT3duIHx8IGZ1bmN0aW9uIGhhc093bihpdCwga2V5KSB7XG4gIHJldHVybiBoYXNPd25Qcm9wZXJ0eSh0b09iamVjdChpdCksIGtleSk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSB7fTtcbiIsIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGEsIGIpIHtcbiAgdHJ5IHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZSAtLSBzYWZlXG4gICAgYXJndW1lbnRzLmxlbmd0aCA9PT0gMSA/IGNvbnNvbGUuZXJyb3IoYSkgOiBjb25zb2xlLmVycm9yKGEsIGIpO1xuICB9IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGdldEJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0QnVpbHRJbignZG9jdW1lbnQnLCAnZG9jdW1lbnRFbGVtZW50Jyk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGNyZWF0ZUVsZW1lbnQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZG9jdW1lbnQtY3JlYXRlLWVsZW1lbnQnKTtcblxuLy8gVGhhbmtzIHRvIElFOCBmb3IgaXRzIGZ1bm55IGRlZmluZVByb3BlcnR5XG5tb2R1bGUuZXhwb3J0cyA9ICFERVNDUklQVE9SUyAmJiAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnR5IC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG4gIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoY3JlYXRlRWxlbWVudCgnZGl2JyksICdhJywge1xuICAgIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gNzsgfVxuICB9KS5hICE9PSA3O1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YtcmF3Jyk7XG5cbnZhciAkT2JqZWN0ID0gT2JqZWN0O1xudmFyIHNwbGl0ID0gdW5jdXJyeVRoaXMoJycuc3BsaXQpO1xuXG4vLyBmYWxsYmFjayBmb3Igbm9uLWFycmF5LWxpa2UgRVMzIGFuZCBub24tZW51bWVyYWJsZSBvbGQgVjggc3RyaW5nc1xubW9kdWxlLmV4cG9ydHMgPSBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIHRocm93cyBhbiBlcnJvciBpbiByaGlubywgc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9tb3ppbGxhL3JoaW5vL2lzc3Vlcy8zNDZcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXByb3RvdHlwZS1idWlsdGlucyAtLSBzYWZlXG4gIHJldHVybiAhJE9iamVjdCgneicpLnByb3BlcnR5SXNFbnVtZXJhYmxlKDApO1xufSkgPyBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGNsYXNzb2YoaXQpID09PSAnU3RyaW5nJyA/IHNwbGl0KGl0LCAnJykgOiAkT2JqZWN0KGl0KTtcbn0gOiAkT2JqZWN0O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBzdG9yZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQtc3RvcmUnKTtcblxudmFyIGZ1bmN0aW9uVG9TdHJpbmcgPSB1bmN1cnJ5VGhpcyhGdW5jdGlvbi50b1N0cmluZyk7XG5cbi8vIHRoaXMgaGVscGVyIGJyb2tlbiBpbiBgY29yZS1qc0AzLjQuMS0zLjQuNGAsIHNvIHdlIGNhbid0IHVzZSBgc2hhcmVkYCBoZWxwZXJcbmlmICghaXNDYWxsYWJsZShzdG9yZS5pbnNwZWN0U291cmNlKSkge1xuICBzdG9yZS5pbnNwZWN0U291cmNlID0gZnVuY3Rpb24gKGl0KSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uVG9TdHJpbmcoaXQpO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHN0b3JlLmluc3BlY3RTb3VyY2U7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1ub24tZW51bWVyYWJsZS1wcm9wZXJ0eScpO1xuXG4vLyBgSW5zdGFsbEVycm9yQ2F1c2VgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL3Byb3Bvc2FsLWVycm9yLWNhdXNlLyNzZWMtZXJyb3JvYmplY3RzLWluc3RhbGwtZXJyb3ItY2F1c2Vcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKE8sIG9wdGlvbnMpIHtcbiAgaWYgKGlzT2JqZWN0KG9wdGlvbnMpICYmICdjYXVzZScgaW4gb3B0aW9ucykge1xuICAgIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eShPLCAnY2F1c2UnLCBvcHRpb25zLmNhdXNlKTtcbiAgfVxufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGhpZGRlbktleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGlkZGVuLWtleXMnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIGRlZmluZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKS5mO1xudmFyIGdldE93blByb3BlcnR5TmFtZXNNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktbmFtZXMnKTtcbnZhciBnZXRPd25Qcm9wZXJ0eU5hbWVzRXh0ZXJuYWxNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktbmFtZXMtZXh0ZXJuYWwnKTtcbnZhciBpc0V4dGVuc2libGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWlzLWV4dGVuc2libGUnKTtcbnZhciB1aWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdWlkJyk7XG52YXIgRlJFRVpJTkcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnJlZXppbmcnKTtcblxudmFyIFJFUVVJUkVEID0gZmFsc2U7XG52YXIgTUVUQURBVEEgPSB1aWQoJ21ldGEnKTtcbnZhciBpZCA9IDA7XG5cbnZhciBzZXRNZXRhZGF0YSA9IGZ1bmN0aW9uIChpdCkge1xuICBkZWZpbmVQcm9wZXJ0eShpdCwgTUVUQURBVEEsIHsgdmFsdWU6IHtcbiAgICBvYmplY3RJRDogJ08nICsgaWQrKywgLy8gb2JqZWN0IElEXG4gICAgd2Vha0RhdGE6IHt9ICAgICAgICAgIC8vIHdlYWsgY29sbGVjdGlvbnMgSURzXG4gIH0gfSk7XG59O1xuXG52YXIgZmFzdEtleSA9IGZ1bmN0aW9uIChpdCwgY3JlYXRlKSB7XG4gIC8vIHJldHVybiBhIHByaW1pdGl2ZSB3aXRoIHByZWZpeFxuICBpZiAoIWlzT2JqZWN0KGl0KSkgcmV0dXJuIHR5cGVvZiBpdCA9PSAnc3ltYm9sJyA/IGl0IDogKHR5cGVvZiBpdCA9PSAnc3RyaW5nJyA/ICdTJyA6ICdQJykgKyBpdDtcbiAgaWYgKCFoYXNPd24oaXQsIE1FVEFEQVRBKSkge1xuICAgIC8vIGNhbid0IHNldCBtZXRhZGF0YSB0byB1bmNhdWdodCBmcm96ZW4gb2JqZWN0XG4gICAgaWYgKCFpc0V4dGVuc2libGUoaXQpKSByZXR1cm4gJ0YnO1xuICAgIC8vIG5vdCBuZWNlc3NhcnkgdG8gYWRkIG1ldGFkYXRhXG4gICAgaWYgKCFjcmVhdGUpIHJldHVybiAnRSc7XG4gICAgLy8gYWRkIG1pc3NpbmcgbWV0YWRhdGFcbiAgICBzZXRNZXRhZGF0YShpdCk7XG4gIC8vIHJldHVybiBvYmplY3QgSURcbiAgfSByZXR1cm4gaXRbTUVUQURBVEFdLm9iamVjdElEO1xufTtcblxudmFyIGdldFdlYWtEYXRhID0gZnVuY3Rpb24gKGl0LCBjcmVhdGUpIHtcbiAgaWYgKCFoYXNPd24oaXQsIE1FVEFEQVRBKSkge1xuICAgIC8vIGNhbid0IHNldCBtZXRhZGF0YSB0byB1bmNhdWdodCBmcm96ZW4gb2JqZWN0XG4gICAgaWYgKCFpc0V4dGVuc2libGUoaXQpKSByZXR1cm4gdHJ1ZTtcbiAgICAvLyBub3QgbmVjZXNzYXJ5IHRvIGFkZCBtZXRhZGF0YVxuICAgIGlmICghY3JlYXRlKSByZXR1cm4gZmFsc2U7XG4gICAgLy8gYWRkIG1pc3NpbmcgbWV0YWRhdGFcbiAgICBzZXRNZXRhZGF0YShpdCk7XG4gIC8vIHJldHVybiB0aGUgc3RvcmUgb2Ygd2VhayBjb2xsZWN0aW9ucyBJRHNcbiAgfSByZXR1cm4gaXRbTUVUQURBVEFdLndlYWtEYXRhO1xufTtcblxuLy8gYWRkIG1ldGFkYXRhIG9uIGZyZWV6ZS1mYW1pbHkgbWV0aG9kcyBjYWxsaW5nXG52YXIgb25GcmVlemUgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKEZSRUVaSU5HICYmIFJFUVVJUkVEICYmIGlzRXh0ZW5zaWJsZShpdCkgJiYgIWhhc093bihpdCwgTUVUQURBVEEpKSBzZXRNZXRhZGF0YShpdCk7XG4gIHJldHVybiBpdDtcbn07XG5cbnZhciBlbmFibGUgPSBmdW5jdGlvbiAoKSB7XG4gIG1ldGEuZW5hYmxlID0gZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9O1xuICBSRVFVSVJFRCA9IHRydWU7XG4gIHZhciBnZXRPd25Qcm9wZXJ0eU5hbWVzID0gZ2V0T3duUHJvcGVydHlOYW1lc01vZHVsZS5mO1xuICB2YXIgc3BsaWNlID0gdW5jdXJyeVRoaXMoW10uc3BsaWNlKTtcbiAgdmFyIHRlc3QgPSB7fTtcbiAgdGVzdFtNRVRBREFUQV0gPSAxO1xuXG4gIC8vIHByZXZlbnQgZXhwb3Npbmcgb2YgbWV0YWRhdGEga2V5XG4gIGlmIChnZXRPd25Qcm9wZXJ0eU5hbWVzKHRlc3QpLmxlbmd0aCkge1xuICAgIGdldE93blByb3BlcnR5TmFtZXNNb2R1bGUuZiA9IGZ1bmN0aW9uIChpdCkge1xuICAgICAgdmFyIHJlc3VsdCA9IGdldE93blByb3BlcnR5TmFtZXMoaXQpO1xuICAgICAgZm9yICh2YXIgaSA9IDAsIGxlbmd0aCA9IHJlc3VsdC5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAocmVzdWx0W2ldID09PSBNRVRBREFUQSkge1xuICAgICAgICAgIHNwbGljZShyZXN1bHQsIGksIDEpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9IHJldHVybiByZXN1bHQ7XG4gICAgfTtcblxuICAgICQoeyB0YXJnZXQ6ICdPYmplY3QnLCBzdGF0OiB0cnVlLCBmb3JjZWQ6IHRydWUgfSwge1xuICAgICAgZ2V0T3duUHJvcGVydHlOYW1lczogZ2V0T3duUHJvcGVydHlOYW1lc0V4dGVybmFsTW9kdWxlLmZcbiAgICB9KTtcbiAgfVxufTtcblxudmFyIG1ldGEgPSBtb2R1bGUuZXhwb3J0cyA9IHtcbiAgZW5hYmxlOiBlbmFibGUsXG4gIGZhc3RLZXk6IGZhc3RLZXksXG4gIGdldFdlYWtEYXRhOiBnZXRXZWFrRGF0YSxcbiAgb25GcmVlemU6IG9uRnJlZXplXG59O1xuXG5oaWRkZW5LZXlzW01FVEFEQVRBXSA9IHRydWU7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgTkFUSVZFX1dFQUtfTUFQID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlYWstbWFwLWJhc2ljLWRldGVjdGlvbicpO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLW5vbi1lbnVtZXJhYmxlLXByb3BlcnR5Jyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciBzaGFyZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkLXN0b3JlJyk7XG52YXIgc2hhcmVkS2V5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZC1rZXknKTtcbnZhciBoaWRkZW5LZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hpZGRlbi1rZXlzJyk7XG5cbnZhciBPQkpFQ1RfQUxSRUFEWV9JTklUSUFMSVpFRCA9ICdPYmplY3QgYWxyZWFkeSBpbml0aWFsaXplZCc7XG52YXIgVHlwZUVycm9yID0gZ2xvYmFsVGhpcy5UeXBlRXJyb3I7XG52YXIgV2Vha01hcCA9IGdsb2JhbFRoaXMuV2Vha01hcDtcbnZhciBzZXQsIGdldCwgaGFzO1xuXG52YXIgZW5mb3JjZSA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaGFzKGl0KSA/IGdldChpdCkgOiBzZXQoaXQsIHt9KTtcbn07XG5cbnZhciBnZXR0ZXJGb3IgPSBmdW5jdGlvbiAoVFlQRSkge1xuICByZXR1cm4gZnVuY3Rpb24gKGl0KSB7XG4gICAgdmFyIHN0YXRlO1xuICAgIGlmICghaXNPYmplY3QoaXQpIHx8IChzdGF0ZSA9IGdldChpdCkpLnR5cGUgIT09IFRZUEUpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0luY29tcGF0aWJsZSByZWNlaXZlciwgJyArIFRZUEUgKyAnIHJlcXVpcmVkJyk7XG4gICAgfSByZXR1cm4gc3RhdGU7XG4gIH07XG59O1xuXG5pZiAoTkFUSVZFX1dFQUtfTUFQIHx8IHNoYXJlZC5zdGF0ZSkge1xuICB2YXIgc3RvcmUgPSBzaGFyZWQuc3RhdGUgfHwgKHNoYXJlZC5zdGF0ZSA9IG5ldyBXZWFrTWFwKCkpO1xuICAvKiBlc2xpbnQtZGlzYWJsZSBuby1zZWxmLWFzc2lnbiAtLSBwcm90b3R5cGUgbWV0aG9kcyBwcm90ZWN0aW9uICovXG4gIHN0b3JlLmdldCA9IHN0b3JlLmdldDtcbiAgc3RvcmUuaGFzID0gc3RvcmUuaGFzO1xuICBzdG9yZS5zZXQgPSBzdG9yZS5zZXQ7XG4gIC8qIGVzbGludC1lbmFibGUgbm8tc2VsZi1hc3NpZ24gLS0gcHJvdG90eXBlIG1ldGhvZHMgcHJvdGVjdGlvbiAqL1xuICBzZXQgPSBmdW5jdGlvbiAoaXQsIG1ldGFkYXRhKSB7XG4gICAgaWYgKHN0b3JlLmhhcyhpdCkpIHRocm93IG5ldyBUeXBlRXJyb3IoT0JKRUNUX0FMUkVBRFlfSU5JVElBTElaRUQpO1xuICAgIG1ldGFkYXRhLmZhY2FkZSA9IGl0O1xuICAgIHN0b3JlLnNldChpdCwgbWV0YWRhdGEpO1xuICAgIHJldHVybiBtZXRhZGF0YTtcbiAgfTtcbiAgZ2V0ID0gZnVuY3Rpb24gKGl0KSB7XG4gICAgcmV0dXJuIHN0b3JlLmdldChpdCkgfHwge307XG4gIH07XG4gIGhhcyA9IGZ1bmN0aW9uIChpdCkge1xuICAgIHJldHVybiBzdG9yZS5oYXMoaXQpO1xuICB9O1xufSBlbHNlIHtcbiAgdmFyIFNUQVRFID0gc2hhcmVkS2V5KCdzdGF0ZScpO1xuICBoaWRkZW5LZXlzW1NUQVRFXSA9IHRydWU7XG4gIHNldCA9IGZ1bmN0aW9uIChpdCwgbWV0YWRhdGEpIHtcbiAgICBpZiAoaGFzT3duKGl0LCBTVEFURSkpIHRocm93IG5ldyBUeXBlRXJyb3IoT0JKRUNUX0FMUkVBRFlfSU5JVElBTElaRUQpO1xuICAgIG1ldGFkYXRhLmZhY2FkZSA9IGl0O1xuICAgIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eShpdCwgU1RBVEUsIG1ldGFkYXRhKTtcbiAgICByZXR1cm4gbWV0YWRhdGE7XG4gIH07XG4gIGdldCA9IGZ1bmN0aW9uIChpdCkge1xuICAgIHJldHVybiBoYXNPd24oaXQsIFNUQVRFKSA/IGl0W1NUQVRFXSA6IHt9O1xuICB9O1xuICBoYXMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgICByZXR1cm4gaGFzT3duKGl0LCBTVEFURSk7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBzZXQ6IHNldCxcbiAgZ2V0OiBnZXQsXG4gIGhhczogaGFzLFxuICBlbmZvcmNlOiBlbmZvcmNlLFxuICBnZXR0ZXJGb3I6IGdldHRlckZvclxufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcbnZhciBJdGVyYXRvcnMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0b3JzJyk7XG5cbnZhciBJVEVSQVRPUiA9IHdlbGxLbm93blN5bWJvbCgnaXRlcmF0b3InKTtcbnZhciBBcnJheVByb3RvdHlwZSA9IEFycmF5LnByb3RvdHlwZTtcblxuLy8gY2hlY2sgb24gZGVmYXVsdCBBcnJheSBpdGVyYXRvclxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGl0ICE9PSB1bmRlZmluZWQgJiYgKEl0ZXJhdG9ycy5BcnJheSA9PT0gaXQgfHwgQXJyYXlQcm90b3R5cGVbSVRFUkFUT1JdID09PSBpdCk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZi1yYXcnKTtcblxuLy8gYElzQXJyYXlgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1pc2FycmF5XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tYXJyYXktaXNhcnJheSAtLSBzYWZlXG5tb2R1bGUuZXhwb3J0cyA9IEFycmF5LmlzQXJyYXkgfHwgZnVuY3Rpb24gaXNBcnJheShhcmd1bWVudCkge1xuICByZXR1cm4gY2xhc3NvZihhcmd1bWVudCkgPT09ICdBcnJheSc7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1Jc0hUTUxEREEtaW50ZXJuYWwtc2xvdFxudmFyIGRvY3VtZW50QWxsID0gdHlwZW9mIGRvY3VtZW50ID09ICdvYmplY3QnICYmIGRvY3VtZW50LmFsbDtcblxuLy8gYElzQ2FsbGFibGVgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1pc2NhbGxhYmxlXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgdW5pY29ybi9uby10eXBlb2YtdW5kZWZpbmVkIC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG5tb2R1bGUuZXhwb3J0cyA9IHR5cGVvZiBkb2N1bWVudEFsbCA9PSAndW5kZWZpbmVkJyAmJiBkb2N1bWVudEFsbCAhPT0gdW5kZWZpbmVkID8gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHJldHVybiB0eXBlb2YgYXJndW1lbnQgPT0gJ2Z1bmN0aW9uJyB8fCBhcmd1bWVudCA9PT0gZG9jdW1lbnRBbGw7XG59IDogZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHJldHVybiB0eXBlb2YgYXJndW1lbnQgPT0gJ2Z1bmN0aW9uJztcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jbGFzc29mJyk7XG52YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcbnZhciBpbnNwZWN0U291cmNlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2luc3BlY3Qtc291cmNlJyk7XG5cbnZhciBub29wID0gZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9O1xudmFyIGNvbnN0cnVjdCA9IGdldEJ1aWx0SW4oJ1JlZmxlY3QnLCAnY29uc3RydWN0Jyk7XG52YXIgY29uc3RydWN0b3JSZWdFeHAgPSAvXlxccyooPzpjbGFzc3xmdW5jdGlvbilcXGIvO1xudmFyIGV4ZWMgPSB1bmN1cnJ5VGhpcyhjb25zdHJ1Y3RvclJlZ0V4cC5leGVjKTtcbnZhciBJTkNPUlJFQ1RfVE9fU1RSSU5HID0gIWNvbnN0cnVjdG9yUmVnRXhwLnRlc3Qobm9vcCk7XG5cbnZhciBpc0NvbnN0cnVjdG9yTW9kZXJuID0gZnVuY3Rpb24gaXNDb25zdHJ1Y3Rvcihhcmd1bWVudCkge1xuICBpZiAoIWlzQ2FsbGFibGUoYXJndW1lbnQpKSByZXR1cm4gZmFsc2U7XG4gIHRyeSB7XG4gICAgY29uc3RydWN0KG5vb3AsIFtdLCBhcmd1bWVudCk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59O1xuXG52YXIgaXNDb25zdHJ1Y3RvckxlZ2FjeSA9IGZ1bmN0aW9uIGlzQ29uc3RydWN0b3IoYXJndW1lbnQpIHtcbiAgaWYgKCFpc0NhbGxhYmxlKGFyZ3VtZW50KSkgcmV0dXJuIGZhbHNlO1xuICBzd2l0Y2ggKGNsYXNzb2YoYXJndW1lbnQpKSB7XG4gICAgY2FzZSAnQXN5bmNGdW5jdGlvbic6XG4gICAgY2FzZSAnR2VuZXJhdG9yRnVuY3Rpb24nOlxuICAgIGNhc2UgJ0FzeW5jR2VuZXJhdG9yRnVuY3Rpb24nOiByZXR1cm4gZmFsc2U7XG4gIH1cbiAgdHJ5IHtcbiAgICAvLyB3ZSBjYW4ndCBjaGVjayAucHJvdG90eXBlIHNpbmNlIGNvbnN0cnVjdG9ycyBwcm9kdWNlZCBieSAuYmluZCBoYXZlbid0IGl0XG4gICAgLy8gYEZ1bmN0aW9uI3RvU3RyaW5nYCB0aHJvd3Mgb24gc29tZSBidWlsdC1pdCBmdW5jdGlvbiBpbiBzb21lIGxlZ2FjeSBlbmdpbmVzXG4gICAgLy8gKGZvciBleGFtcGxlLCBgRE9NUXVhZGAgYW5kIHNpbWlsYXIgaW4gRkY0MS0pXG4gICAgcmV0dXJuIElOQ09SUkVDVF9UT19TVFJJTkcgfHwgISFleGVjKGNvbnN0cnVjdG9yUmVnRXhwLCBpbnNwZWN0U291cmNlKGFyZ3VtZW50KSk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbn07XG5cbmlzQ29uc3RydWN0b3JMZWdhY3kuc2hhbSA9IHRydWU7XG5cbi8vIGBJc0NvbnN0cnVjdG9yYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtaXNjb25zdHJ1Y3RvclxubW9kdWxlLmV4cG9ydHMgPSAhY29uc3RydWN0IHx8IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgdmFyIGNhbGxlZDtcbiAgcmV0dXJuIGlzQ29uc3RydWN0b3JNb2Rlcm4oaXNDb25zdHJ1Y3Rvck1vZGVybi5jYWxsKVxuICAgIHx8ICFpc0NvbnN0cnVjdG9yTW9kZXJuKE9iamVjdClcbiAgICB8fCAhaXNDb25zdHJ1Y3Rvck1vZGVybihmdW5jdGlvbiAoKSB7IGNhbGxlZCA9IHRydWU7IH0pXG4gICAgfHwgY2FsbGVkO1xufSkgPyBpc0NvbnN0cnVjdG9yTGVnYWN5IDogaXNDb25zdHJ1Y3Rvck1vZGVybjtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcblxudmFyIHJlcGxhY2VtZW50ID0gLyN8XFwucHJvdG90eXBlXFwuLztcblxudmFyIGlzRm9yY2VkID0gZnVuY3Rpb24gKGZlYXR1cmUsIGRldGVjdGlvbikge1xuICB2YXIgdmFsdWUgPSBkYXRhW25vcm1hbGl6ZShmZWF0dXJlKV07XG4gIHJldHVybiB2YWx1ZSA9PT0gUE9MWUZJTEwgPyB0cnVlXG4gICAgOiB2YWx1ZSA9PT0gTkFUSVZFID8gZmFsc2VcbiAgICA6IGlzQ2FsbGFibGUoZGV0ZWN0aW9uKSA/IGZhaWxzKGRldGVjdGlvbilcbiAgICA6ICEhZGV0ZWN0aW9uO1xufTtcblxudmFyIG5vcm1hbGl6ZSA9IGlzRm9yY2VkLm5vcm1hbGl6ZSA9IGZ1bmN0aW9uIChzdHJpbmcpIHtcbiAgcmV0dXJuIFN0cmluZyhzdHJpbmcpLnJlcGxhY2UocmVwbGFjZW1lbnQsICcuJykudG9Mb3dlckNhc2UoKTtcbn07XG5cbnZhciBkYXRhID0gaXNGb3JjZWQuZGF0YSA9IHt9O1xudmFyIE5BVElWRSA9IGlzRm9yY2VkLk5BVElWRSA9ICdOJztcbnZhciBQT0xZRklMTCA9IGlzRm9yY2VkLlBPTFlGSUxMID0gJ1AnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGlzRm9yY2VkO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gd2UgY2FuJ3QgdXNlIGp1c3QgYGl0ID09IG51bGxgIHNpbmNlIG9mIGBkb2N1bWVudC5hbGxgIHNwZWNpYWwgY2FzZVxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1Jc0hUTUxEREEtaW50ZXJuYWwtc2xvdC1hZWNcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBpdCA9PT0gbnVsbCB8fCBpdCA9PT0gdW5kZWZpbmVkO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiB0eXBlb2YgaXQgPT0gJ29iamVjdCcgPyBpdCAhPT0gbnVsbCA6IGlzQ2FsbGFibGUoaXQpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgcmV0dXJuIGlzT2JqZWN0KGFyZ3VtZW50KSB8fCBhcmd1bWVudCA9PT0gbnVsbDtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IHRydWU7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jbGFzc29mLXJhdycpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xuXG52YXIgTUFUQ0ggPSB3ZWxsS25vd25TeW1ib2woJ21hdGNoJyk7XG5cbi8vIGBJc1JlZ0V4cGAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWlzcmVnZXhwXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgaXNSZWdFeHA7XG4gIHJldHVybiBpc09iamVjdChpdCkgJiYgKChpc1JlZ0V4cCA9IGl0W01BVENIXSkgIT09IHVuZGVmaW5lZCA/ICEhaXNSZWdFeHAgOiBjbGFzc29mKGl0KSA9PT0gJ1JlZ0V4cCcpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBnZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbicpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBpc1Byb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YnKTtcbnZhciBVU0VfU1lNQk9MX0FTX1VJRCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy91c2Utc3ltYm9sLWFzLXVpZCcpO1xuXG52YXIgJE9iamVjdCA9IE9iamVjdDtcblxubW9kdWxlLmV4cG9ydHMgPSBVU0VfU1lNQk9MX0FTX1VJRCA/IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gdHlwZW9mIGl0ID09ICdzeW1ib2wnO1xufSA6IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgJFN5bWJvbCA9IGdldEJ1aWx0SW4oJ1N5bWJvbCcpO1xuICByZXR1cm4gaXNDYWxsYWJsZSgkU3ltYm9sKSAmJiBpc1Byb3RvdHlwZU9mKCRTeW1ib2wucHJvdG90eXBlLCAkT2JqZWN0KGl0KSk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChyZWNvcmQsIGZuLCBJVEVSQVRPUl9JTlNURUFEX09GX1JFQ09SRCkge1xuICB2YXIgaXRlcmF0b3IgPSBJVEVSQVRPUl9JTlNURUFEX09GX1JFQ09SRCA/IHJlY29yZCA6IHJlY29yZC5pdGVyYXRvcjtcbiAgdmFyIG5leHQgPSByZWNvcmQubmV4dDtcbiAgdmFyIHN0ZXAsIHJlc3VsdDtcbiAgd2hpbGUgKCEoc3RlcCA9IGNhbGwobmV4dCwgaXRlcmF0b3IpKS5kb25lKSB7XG4gICAgcmVzdWx0ID0gZm4oc3RlcC52YWx1ZSk7XG4gICAgaWYgKHJlc3VsdCAhPT0gdW5kZWZpbmVkKSByZXR1cm4gcmVzdWx0O1xuICB9XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGJpbmQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZC1jb250ZXh0Jyk7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgdHJ5VG9TdHJpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdHJ5LXRvLXN0cmluZycpO1xudmFyIGlzQXJyYXlJdGVyYXRvck1ldGhvZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1hcnJheS1pdGVyYXRvci1tZXRob2QnKTtcbnZhciBsZW5ndGhPZkFycmF5TGlrZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9sZW5ndGgtb2YtYXJyYXktbGlrZScpO1xudmFyIGlzUHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWlzLXByb3RvdHlwZS1vZicpO1xudmFyIGdldEl0ZXJhdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1pdGVyYXRvcicpO1xudmFyIGdldEl0ZXJhdG9yTWV0aG9kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1pdGVyYXRvci1tZXRob2QnKTtcbnZhciBpdGVyYXRvckNsb3NlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdG9yLWNsb3NlJyk7XG5cbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG52YXIgUmVzdWx0ID0gZnVuY3Rpb24gKHN0b3BwZWQsIHJlc3VsdCkge1xuICB0aGlzLnN0b3BwZWQgPSBzdG9wcGVkO1xuICB0aGlzLnJlc3VsdCA9IHJlc3VsdDtcbn07XG5cbnZhciBSZXN1bHRQcm90b3R5cGUgPSBSZXN1bHQucHJvdG90eXBlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdGVyYWJsZSwgdW5ib3VuZEZ1bmN0aW9uLCBvcHRpb25zKSB7XG4gIHZhciB0aGF0ID0gb3B0aW9ucyAmJiBvcHRpb25zLnRoYXQ7XG4gIHZhciBBU19FTlRSSUVTID0gISEob3B0aW9ucyAmJiBvcHRpb25zLkFTX0VOVFJJRVMpO1xuICB2YXIgSVNfUkVDT1JEID0gISEob3B0aW9ucyAmJiBvcHRpb25zLklTX1JFQ09SRCk7XG4gIHZhciBJU19JVEVSQVRPUiA9ICEhKG9wdGlvbnMgJiYgb3B0aW9ucy5JU19JVEVSQVRPUik7XG4gIHZhciBJTlRFUlJVUFRFRCA9ICEhKG9wdGlvbnMgJiYgb3B0aW9ucy5JTlRFUlJVUFRFRCk7XG4gIHZhciBmbiA9IGJpbmQodW5ib3VuZEZ1bmN0aW9uLCB0aGF0KTtcbiAgdmFyIGl0ZXJhdG9yLCBpdGVyRm4sIGluZGV4LCBsZW5ndGgsIHJlc3VsdCwgbmV4dCwgc3RlcDtcblxuICB2YXIgc3RvcCA9IGZ1bmN0aW9uIChjb25kaXRpb24pIHtcbiAgICBpZiAoaXRlcmF0b3IpIGl0ZXJhdG9yQ2xvc2UoaXRlcmF0b3IsICdub3JtYWwnLCBjb25kaXRpb24pO1xuICAgIHJldHVybiBuZXcgUmVzdWx0KHRydWUsIGNvbmRpdGlvbik7XG4gIH07XG5cbiAgdmFyIGNhbGxGbiA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgIGlmIChBU19FTlRSSUVTKSB7XG4gICAgICBhbk9iamVjdCh2YWx1ZSk7XG4gICAgICByZXR1cm4gSU5URVJSVVBURUQgPyBmbih2YWx1ZVswXSwgdmFsdWVbMV0sIHN0b3ApIDogZm4odmFsdWVbMF0sIHZhbHVlWzFdKTtcbiAgICB9IHJldHVybiBJTlRFUlJVUFRFRCA/IGZuKHZhbHVlLCBzdG9wKSA6IGZuKHZhbHVlKTtcbiAgfTtcblxuICBpZiAoSVNfUkVDT1JEKSB7XG4gICAgaXRlcmF0b3IgPSBpdGVyYWJsZS5pdGVyYXRvcjtcbiAgfSBlbHNlIGlmIChJU19JVEVSQVRPUikge1xuICAgIGl0ZXJhdG9yID0gaXRlcmFibGU7XG4gIH0gZWxzZSB7XG4gICAgaXRlckZuID0gZ2V0SXRlcmF0b3JNZXRob2QoaXRlcmFibGUpO1xuICAgIGlmICghaXRlckZuKSB0aHJvdyBuZXcgJFR5cGVFcnJvcih0cnlUb1N0cmluZyhpdGVyYWJsZSkgKyAnIGlzIG5vdCBpdGVyYWJsZScpO1xuICAgIC8vIG9wdGltaXNhdGlvbiBmb3IgYXJyYXkgaXRlcmF0b3JzXG4gICAgaWYgKGlzQXJyYXlJdGVyYXRvck1ldGhvZChpdGVyRm4pKSB7XG4gICAgICBmb3IgKGluZGV4ID0gMCwgbGVuZ3RoID0gbGVuZ3RoT2ZBcnJheUxpa2UoaXRlcmFibGUpOyBsZW5ndGggPiBpbmRleDsgaW5kZXgrKykge1xuICAgICAgICByZXN1bHQgPSBjYWxsRm4oaXRlcmFibGVbaW5kZXhdKTtcbiAgICAgICAgaWYgKHJlc3VsdCAmJiBpc1Byb3RvdHlwZU9mKFJlc3VsdFByb3RvdHlwZSwgcmVzdWx0KSkgcmV0dXJuIHJlc3VsdDtcbiAgICAgIH0gcmV0dXJuIG5ldyBSZXN1bHQoZmFsc2UpO1xuICAgIH1cbiAgICBpdGVyYXRvciA9IGdldEl0ZXJhdG9yKGl0ZXJhYmxlLCBpdGVyRm4pO1xuICB9XG5cbiAgbmV4dCA9IElTX1JFQ09SRCA/IGl0ZXJhYmxlLm5leHQgOiBpdGVyYXRvci5uZXh0O1xuICB3aGlsZSAoIShzdGVwID0gY2FsbChuZXh0LCBpdGVyYXRvcikpLmRvbmUpIHtcbiAgICB0cnkge1xuICAgICAgcmVzdWx0ID0gY2FsbEZuKHN0ZXAudmFsdWUpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpdGVyYXRvckNsb3NlKGl0ZXJhdG9yLCAndGhyb3cnLCBlcnJvcik7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgcmVzdWx0ID09ICdvYmplY3QnICYmIHJlc3VsdCAmJiBpc1Byb3RvdHlwZU9mKFJlc3VsdFByb3RvdHlwZSwgcmVzdWx0KSkgcmV0dXJuIHJlc3VsdDtcbiAgfSByZXR1cm4gbmV3IFJlc3VsdChmYWxzZSk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIGdldE1ldGhvZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtbWV0aG9kJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0ZXJhdG9yLCBraW5kLCB2YWx1ZSkge1xuICB2YXIgaW5uZXJSZXN1bHQsIGlubmVyRXJyb3I7XG4gIGFuT2JqZWN0KGl0ZXJhdG9yKTtcbiAgdHJ5IHtcbiAgICBpbm5lclJlc3VsdCA9IGdldE1ldGhvZChpdGVyYXRvciwgJ3JldHVybicpO1xuICAgIGlmICghaW5uZXJSZXN1bHQpIHtcbiAgICAgIGlmIChraW5kID09PSAndGhyb3cnKSB0aHJvdyB2YWx1ZTtcbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG4gICAgaW5uZXJSZXN1bHQgPSBjYWxsKGlubmVyUmVzdWx0LCBpdGVyYXRvcik7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgaW5uZXJFcnJvciA9IHRydWU7XG4gICAgaW5uZXJSZXN1bHQgPSBlcnJvcjtcbiAgfVxuICBpZiAoa2luZCA9PT0gJ3Rocm93JykgdGhyb3cgdmFsdWU7XG4gIGlmIChpbm5lckVycm9yKSB0aHJvdyBpbm5lclJlc3VsdDtcbiAgYW5PYmplY3QoaW5uZXJSZXN1bHQpO1xuICByZXR1cm4gdmFsdWU7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIEl0ZXJhdG9yUHJvdG90eXBlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdG9ycy1jb3JlJykuSXRlcmF0b3JQcm90b3R5cGU7XG52YXIgY3JlYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1jcmVhdGUnKTtcbnZhciBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcbnZhciBzZXRUb1N0cmluZ1RhZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtdG8tc3RyaW5nLXRhZycpO1xudmFyIEl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvcnMnKTtcblxudmFyIHJldHVyblRoaXMgPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChJdGVyYXRvckNvbnN0cnVjdG9yLCBOQU1FLCBuZXh0LCBFTlVNRVJBQkxFX05FWFQpIHtcbiAgdmFyIFRPX1NUUklOR19UQUcgPSBOQU1FICsgJyBJdGVyYXRvcic7XG4gIEl0ZXJhdG9yQ29uc3RydWN0b3IucHJvdG90eXBlID0gY3JlYXRlKEl0ZXJhdG9yUHJvdG90eXBlLCB7IG5leHQ6IGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvcigrIUVOVU1FUkFCTEVfTkVYVCwgbmV4dCkgfSk7XG4gIHNldFRvU3RyaW5nVGFnKEl0ZXJhdG9yQ29uc3RydWN0b3IsIFRPX1NUUklOR19UQUcsIGZhbHNlLCB0cnVlKTtcbiAgSXRlcmF0b3JzW1RPX1NUUklOR19UQUddID0gcmV0dXJuVGhpcztcbiAgcmV0dXJuIEl0ZXJhdG9yQ29uc3RydWN0b3I7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgSVNfUFVSRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1wdXJlJyk7XG52YXIgRnVuY3Rpb25OYW1lID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLW5hbWUnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgY3JlYXRlSXRlcmF0b3JDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvci1jcmVhdGUtY29uc3RydWN0b3InKTtcbnZhciBnZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LXByb3RvdHlwZS1vZicpO1xudmFyIHNldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1zZXQtcHJvdG90eXBlLW9mJyk7XG52YXIgc2V0VG9TdHJpbmdUYWcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LXRvLXN0cmluZy10YWcnKTtcbnZhciBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLW5vbi1lbnVtZXJhYmxlLXByb3BlcnR5Jyk7XG52YXIgZGVmaW5lQnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4nKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcbnZhciBJdGVyYXRvcnMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0b3JzJyk7XG52YXIgSXRlcmF0b3JzQ29yZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvcnMtY29yZScpO1xuXG52YXIgUFJPUEVSX0ZVTkNUSU9OX05BTUUgPSBGdW5jdGlvbk5hbWUuUFJPUEVSO1xudmFyIENPTkZJR1VSQUJMRV9GVU5DVElPTl9OQU1FID0gRnVuY3Rpb25OYW1lLkNPTkZJR1VSQUJMRTtcbnZhciBJdGVyYXRvclByb3RvdHlwZSA9IEl0ZXJhdG9yc0NvcmUuSXRlcmF0b3JQcm90b3R5cGU7XG52YXIgQlVHR1lfU0FGQVJJX0lURVJBVE9SUyA9IEl0ZXJhdG9yc0NvcmUuQlVHR1lfU0FGQVJJX0lURVJBVE9SUztcbnZhciBJVEVSQVRPUiA9IHdlbGxLbm93blN5bWJvbCgnaXRlcmF0b3InKTtcbnZhciBLRVlTID0gJ2tleXMnO1xudmFyIFZBTFVFUyA9ICd2YWx1ZXMnO1xudmFyIEVOVFJJRVMgPSAnZW50cmllcyc7XG5cbnZhciByZXR1cm5UaGlzID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoSXRlcmFibGUsIE5BTUUsIEl0ZXJhdG9yQ29uc3RydWN0b3IsIG5leHQsIERFRkFVTFQsIElTX1NFVCwgRk9SQ0VEKSB7XG4gIGNyZWF0ZUl0ZXJhdG9yQ29uc3RydWN0b3IoSXRlcmF0b3JDb25zdHJ1Y3RvciwgTkFNRSwgbmV4dCk7XG5cbiAgdmFyIGdldEl0ZXJhdGlvbk1ldGhvZCA9IGZ1bmN0aW9uIChLSU5EKSB7XG4gICAgaWYgKEtJTkQgPT09IERFRkFVTFQgJiYgZGVmYXVsdEl0ZXJhdG9yKSByZXR1cm4gZGVmYXVsdEl0ZXJhdG9yO1xuICAgIGlmICghQlVHR1lfU0FGQVJJX0lURVJBVE9SUyAmJiBLSU5EICYmIEtJTkQgaW4gSXRlcmFibGVQcm90b3R5cGUpIHJldHVybiBJdGVyYWJsZVByb3RvdHlwZVtLSU5EXTtcblxuICAgIHN3aXRjaCAoS0lORCkge1xuICAgICAgY2FzZSBLRVlTOiByZXR1cm4gZnVuY3Rpb24ga2V5cygpIHsgcmV0dXJuIG5ldyBJdGVyYXRvckNvbnN0cnVjdG9yKHRoaXMsIEtJTkQpOyB9O1xuICAgICAgY2FzZSBWQUxVRVM6IHJldHVybiBmdW5jdGlvbiB2YWx1ZXMoKSB7IHJldHVybiBuZXcgSXRlcmF0b3JDb25zdHJ1Y3Rvcih0aGlzLCBLSU5EKTsgfTtcbiAgICAgIGNhc2UgRU5UUklFUzogcmV0dXJuIGZ1bmN0aW9uIGVudHJpZXMoKSB7IHJldHVybiBuZXcgSXRlcmF0b3JDb25zdHJ1Y3Rvcih0aGlzLCBLSU5EKTsgfTtcbiAgICB9XG5cbiAgICByZXR1cm4gZnVuY3Rpb24gKCkgeyByZXR1cm4gbmV3IEl0ZXJhdG9yQ29uc3RydWN0b3IodGhpcyk7IH07XG4gIH07XG5cbiAgdmFyIFRPX1NUUklOR19UQUcgPSBOQU1FICsgJyBJdGVyYXRvcic7XG4gIHZhciBJTkNPUlJFQ1RfVkFMVUVTX05BTUUgPSBmYWxzZTtcbiAgdmFyIEl0ZXJhYmxlUHJvdG90eXBlID0gSXRlcmFibGUucHJvdG90eXBlO1xuICB2YXIgbmF0aXZlSXRlcmF0b3IgPSBJdGVyYWJsZVByb3RvdHlwZVtJVEVSQVRPUl1cbiAgICB8fCBJdGVyYWJsZVByb3RvdHlwZVsnQEBpdGVyYXRvciddXG4gICAgfHwgREVGQVVMVCAmJiBJdGVyYWJsZVByb3RvdHlwZVtERUZBVUxUXTtcbiAgdmFyIGRlZmF1bHRJdGVyYXRvciA9ICFCVUdHWV9TQUZBUklfSVRFUkFUT1JTICYmIG5hdGl2ZUl0ZXJhdG9yIHx8IGdldEl0ZXJhdGlvbk1ldGhvZChERUZBVUxUKTtcbiAgdmFyIGFueU5hdGl2ZUl0ZXJhdG9yID0gTkFNRSA9PT0gJ0FycmF5JyA/IEl0ZXJhYmxlUHJvdG90eXBlLmVudHJpZXMgfHwgbmF0aXZlSXRlcmF0b3IgOiBuYXRpdmVJdGVyYXRvcjtcbiAgdmFyIEN1cnJlbnRJdGVyYXRvclByb3RvdHlwZSwgbWV0aG9kcywgS0VZO1xuXG4gIC8vIGZpeCBuYXRpdmVcbiAgaWYgKGFueU5hdGl2ZUl0ZXJhdG9yKSB7XG4gICAgQ3VycmVudEl0ZXJhdG9yUHJvdG90eXBlID0gZ2V0UHJvdG90eXBlT2YoYW55TmF0aXZlSXRlcmF0b3IuY2FsbChuZXcgSXRlcmFibGUoKSkpO1xuICAgIGlmIChDdXJyZW50SXRlcmF0b3JQcm90b3R5cGUgIT09IE9iamVjdC5wcm90b3R5cGUgJiYgQ3VycmVudEl0ZXJhdG9yUHJvdG90eXBlLm5leHQpIHtcbiAgICAgIGlmICghSVNfUFVSRSAmJiBnZXRQcm90b3R5cGVPZihDdXJyZW50SXRlcmF0b3JQcm90b3R5cGUpICE9PSBJdGVyYXRvclByb3RvdHlwZSkge1xuICAgICAgICBpZiAoc2V0UHJvdG90eXBlT2YpIHtcbiAgICAgICAgICBzZXRQcm90b3R5cGVPZihDdXJyZW50SXRlcmF0b3JQcm90b3R5cGUsIEl0ZXJhdG9yUHJvdG90eXBlKTtcbiAgICAgICAgfSBlbHNlIGlmICghaXNDYWxsYWJsZShDdXJyZW50SXRlcmF0b3JQcm90b3R5cGVbSVRFUkFUT1JdKSkge1xuICAgICAgICAgIGRlZmluZUJ1aWx0SW4oQ3VycmVudEl0ZXJhdG9yUHJvdG90eXBlLCBJVEVSQVRPUiwgcmV0dXJuVGhpcyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIC8vIFNldCBAQHRvU3RyaW5nVGFnIHRvIG5hdGl2ZSBpdGVyYXRvcnNcbiAgICAgIHNldFRvU3RyaW5nVGFnKEN1cnJlbnRJdGVyYXRvclByb3RvdHlwZSwgVE9fU1RSSU5HX1RBRywgdHJ1ZSwgdHJ1ZSk7XG4gICAgICBpZiAoSVNfUFVSRSkgSXRlcmF0b3JzW1RPX1NUUklOR19UQUddID0gcmV0dXJuVGhpcztcbiAgICB9XG4gIH1cblxuICAvLyBmaXggQXJyYXkucHJvdG90eXBlLnsgdmFsdWVzLCBAQGl0ZXJhdG9yIH0ubmFtZSBpbiBWOCAvIEZGXG4gIGlmIChQUk9QRVJfRlVOQ1RJT05fTkFNRSAmJiBERUZBVUxUID09PSBWQUxVRVMgJiYgbmF0aXZlSXRlcmF0b3IgJiYgbmF0aXZlSXRlcmF0b3IubmFtZSAhPT0gVkFMVUVTKSB7XG4gICAgaWYgKCFJU19QVVJFICYmIENPTkZJR1VSQUJMRV9GVU5DVElPTl9OQU1FKSB7XG4gICAgICBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkoSXRlcmFibGVQcm90b3R5cGUsICduYW1lJywgVkFMVUVTKTtcbiAgICB9IGVsc2Uge1xuICAgICAgSU5DT1JSRUNUX1ZBTFVFU19OQU1FID0gdHJ1ZTtcbiAgICAgIGRlZmF1bHRJdGVyYXRvciA9IGZ1bmN0aW9uIHZhbHVlcygpIHsgcmV0dXJuIGNhbGwobmF0aXZlSXRlcmF0b3IsIHRoaXMpOyB9O1xuICAgIH1cbiAgfVxuXG4gIC8vIGV4cG9ydCBhZGRpdGlvbmFsIG1ldGhvZHNcbiAgaWYgKERFRkFVTFQpIHtcbiAgICBtZXRob2RzID0ge1xuICAgICAgdmFsdWVzOiBnZXRJdGVyYXRpb25NZXRob2QoVkFMVUVTKSxcbiAgICAgIGtleXM6IElTX1NFVCA/IGRlZmF1bHRJdGVyYXRvciA6IGdldEl0ZXJhdGlvbk1ldGhvZChLRVlTKSxcbiAgICAgIGVudHJpZXM6IGdldEl0ZXJhdGlvbk1ldGhvZChFTlRSSUVTKVxuICAgIH07XG4gICAgaWYgKEZPUkNFRCkgZm9yIChLRVkgaW4gbWV0aG9kcykge1xuICAgICAgaWYgKEJVR0dZX1NBRkFSSV9JVEVSQVRPUlMgfHwgSU5DT1JSRUNUX1ZBTFVFU19OQU1FIHx8ICEoS0VZIGluIEl0ZXJhYmxlUHJvdG90eXBlKSkge1xuICAgICAgICBkZWZpbmVCdWlsdEluKEl0ZXJhYmxlUHJvdG90eXBlLCBLRVksIG1ldGhvZHNbS0VZXSk7XG4gICAgICB9XG4gICAgfSBlbHNlICQoeyB0YXJnZXQ6IE5BTUUsIHByb3RvOiB0cnVlLCBmb3JjZWQ6IEJVR0dZX1NBRkFSSV9JVEVSQVRPUlMgfHwgSU5DT1JSRUNUX1ZBTFVFU19OQU1FIH0sIG1ldGhvZHMpO1xuICB9XG5cbiAgLy8gZGVmaW5lIGl0ZXJhdG9yXG4gIGlmICgoIUlTX1BVUkUgfHwgRk9SQ0VEKSAmJiBJdGVyYWJsZVByb3RvdHlwZVtJVEVSQVRPUl0gIT09IGRlZmF1bHRJdGVyYXRvcikge1xuICAgIGRlZmluZUJ1aWx0SW4oSXRlcmFibGVQcm90b3R5cGUsIElURVJBVE9SLCBkZWZhdWx0SXRlcmF0b3IsIHsgbmFtZTogREVGQVVMVCB9KTtcbiAgfVxuICBJdGVyYXRvcnNbTkFNRV0gPSBkZWZhdWx0SXRlcmF0b3I7XG5cbiAgcmV0dXJuIG1ldGhvZHM7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xudmFyIGNyZWF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtY3JlYXRlJyk7XG52YXIgZ2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1wcm90b3R5cGUtb2YnKTtcbnZhciBkZWZpbmVCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbicpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xudmFyIElTX1BVUkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtcHVyZScpO1xuXG52YXIgSVRFUkFUT1IgPSB3ZWxsS25vd25TeW1ib2woJ2l0ZXJhdG9yJyk7XG52YXIgQlVHR1lfU0FGQVJJX0lURVJBVE9SUyA9IGZhbHNlO1xuXG4vLyBgJUl0ZXJhdG9yUHJvdG90eXBlJWAgb2JqZWN0XG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLSVpdGVyYXRvcnByb3RvdHlwZSUtb2JqZWN0XG52YXIgSXRlcmF0b3JQcm90b3R5cGUsIFByb3RvdHlwZU9mQXJyYXlJdGVyYXRvclByb3RvdHlwZSwgYXJyYXlJdGVyYXRvcjtcblxuLyogZXNsaW50LWRpc2FibGUgZXMvbm8tYXJyYXktcHJvdG90eXBlLWtleXMgLS0gc2FmZSAqL1xuaWYgKFtdLmtleXMpIHtcbiAgYXJyYXlJdGVyYXRvciA9IFtdLmtleXMoKTtcbiAgLy8gU2FmYXJpIDggaGFzIGJ1Z2d5IGl0ZXJhdG9ycyB3L28gYG5leHRgXG4gIGlmICghKCduZXh0JyBpbiBhcnJheUl0ZXJhdG9yKSkgQlVHR1lfU0FGQVJJX0lURVJBVE9SUyA9IHRydWU7XG4gIGVsc2Uge1xuICAgIFByb3RvdHlwZU9mQXJyYXlJdGVyYXRvclByb3RvdHlwZSA9IGdldFByb3RvdHlwZU9mKGdldFByb3RvdHlwZU9mKGFycmF5SXRlcmF0b3IpKTtcbiAgICBpZiAoUHJvdG90eXBlT2ZBcnJheUl0ZXJhdG9yUHJvdG90eXBlICE9PSBPYmplY3QucHJvdG90eXBlKSBJdGVyYXRvclByb3RvdHlwZSA9IFByb3RvdHlwZU9mQXJyYXlJdGVyYXRvclByb3RvdHlwZTtcbiAgfVxufVxuXG52YXIgTkVXX0lURVJBVE9SX1BST1RPVFlQRSA9ICFpc09iamVjdChJdGVyYXRvclByb3RvdHlwZSkgfHwgZmFpbHMoZnVuY3Rpb24gKCkge1xuICB2YXIgdGVzdCA9IHt9O1xuICAvLyBGRjQ0LSBsZWdhY3kgaXRlcmF0b3JzIGNhc2VcbiAgcmV0dXJuIEl0ZXJhdG9yUHJvdG90eXBlW0lURVJBVE9SXS5jYWxsKHRlc3QpICE9PSB0ZXN0O1xufSk7XG5cbmlmIChORVdfSVRFUkFUT1JfUFJPVE9UWVBFKSBJdGVyYXRvclByb3RvdHlwZSA9IHt9O1xuZWxzZSBpZiAoSVNfUFVSRSkgSXRlcmF0b3JQcm90b3R5cGUgPSBjcmVhdGUoSXRlcmF0b3JQcm90b3R5cGUpO1xuXG4vLyBgJUl0ZXJhdG9yUHJvdG90eXBlJVtAQGl0ZXJhdG9yXSgpYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtJWl0ZXJhdG9ycHJvdG90eXBlJS1AQGl0ZXJhdG9yXG5pZiAoIWlzQ2FsbGFibGUoSXRlcmF0b3JQcm90b3R5cGVbSVRFUkFUT1JdKSkge1xuICBkZWZpbmVCdWlsdEluKEl0ZXJhdG9yUHJvdG90eXBlLCBJVEVSQVRPUiwgZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIEl0ZXJhdG9yUHJvdG90eXBlOiBJdGVyYXRvclByb3RvdHlwZSxcbiAgQlVHR1lfU0FGQVJJX0lURVJBVE9SUzogQlVHR1lfU0FGQVJJX0lURVJBVE9SU1xufTtcbiIsIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0ge307XG4iLCIndXNlIHN0cmljdCc7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tbGVuZ3RoJyk7XG5cbi8vIGBMZW5ndGhPZkFycmF5TGlrZWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWxlbmd0aG9mYXJyYXlsaWtlXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvYmopIHtcbiAgcmV0dXJuIHRvTGVuZ3RoKG9iai5sZW5ndGgpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBjZWlsID0gTWF0aC5jZWlsO1xudmFyIGZsb29yID0gTWF0aC5mbG9vcjtcblxuLy8gYE1hdGgudHJ1bmNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1tYXRoLnRydW5jXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tbWF0aC10cnVuYyAtLSBzYWZlXG5tb2R1bGUuZXhwb3J0cyA9IE1hdGgudHJ1bmMgfHwgZnVuY3Rpb24gdHJ1bmMoeCkge1xuICB2YXIgbiA9ICt4O1xuICByZXR1cm4gKG4gPiAwID8gZmxvb3IgOiBjZWlsKShuKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xudmFyIHNhZmVHZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NhZmUtZ2V0LWJ1aWx0LWluJyk7XG52YXIgYmluZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLWNvbnRleHQnKTtcbnZhciBtYWNyb3Rhc2sgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdGFzaycpLnNldDtcbnZhciBRdWV1ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9xdWV1ZScpO1xudmFyIElTX0lPUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbnZpcm9ubWVudC1pcy1pb3MnKTtcbnZhciBJU19JT1NfUEVCQkxFID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Vudmlyb25tZW50LWlzLWlvcy1wZWJibGUnKTtcbnZhciBJU19XRUJPU19XRUJLSVQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW52aXJvbm1lbnQtaXMtd2Vib3Mtd2Via2l0Jyk7XG52YXIgSVNfTk9ERSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbnZpcm9ubWVudC1pcy1ub2RlJyk7XG5cbnZhciBNdXRhdGlvbk9ic2VydmVyID0gZ2xvYmFsVGhpcy5NdXRhdGlvbk9ic2VydmVyIHx8IGdsb2JhbFRoaXMuV2ViS2l0TXV0YXRpb25PYnNlcnZlcjtcbnZhciBkb2N1bWVudCA9IGdsb2JhbFRoaXMuZG9jdW1lbnQ7XG52YXIgcHJvY2VzcyA9IGdsb2JhbFRoaXMucHJvY2VzcztcbnZhciBQcm9taXNlID0gZ2xvYmFsVGhpcy5Qcm9taXNlO1xudmFyIG1pY3JvdGFzayA9IHNhZmVHZXRCdWlsdEluKCdxdWV1ZU1pY3JvdGFzaycpO1xudmFyIG5vdGlmeSwgdG9nZ2xlLCBub2RlLCBwcm9taXNlLCB0aGVuO1xuXG4vLyBtb2Rlcm4gZW5naW5lcyBoYXZlIHF1ZXVlTWljcm90YXNrIG1ldGhvZFxuaWYgKCFtaWNyb3Rhc2spIHtcbiAgdmFyIHF1ZXVlID0gbmV3IFF1ZXVlKCk7XG5cbiAgdmFyIGZsdXNoID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBwYXJlbnQsIGZuO1xuICAgIGlmIChJU19OT0RFICYmIChwYXJlbnQgPSBwcm9jZXNzLmRvbWFpbikpIHBhcmVudC5leGl0KCk7XG4gICAgd2hpbGUgKGZuID0gcXVldWUuZ2V0KCkpIHRyeSB7XG4gICAgICBmbigpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpZiAocXVldWUuaGVhZCkgbm90aWZ5KCk7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG4gICAgaWYgKHBhcmVudCkgcGFyZW50LmVudGVyKCk7XG4gIH07XG5cbiAgLy8gYnJvd3NlcnMgd2l0aCBNdXRhdGlvbk9ic2VydmVyLCBleGNlcHQgaU9TIC0gaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzMzOVxuICAvLyBhbHNvIGV4Y2VwdCBXZWJPUyBXZWJraXQgaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzg5OFxuICBpZiAoIUlTX0lPUyAmJiAhSVNfTk9ERSAmJiAhSVNfV0VCT1NfV0VCS0lUICYmIE11dGF0aW9uT2JzZXJ2ZXIgJiYgZG9jdW1lbnQpIHtcbiAgICB0b2dnbGUgPSB0cnVlO1xuICAgIG5vZGUgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgnJyk7XG4gICAgbmV3IE11dGF0aW9uT2JzZXJ2ZXIoZmx1c2gpLm9ic2VydmUobm9kZSwgeyBjaGFyYWN0ZXJEYXRhOiB0cnVlIH0pO1xuICAgIG5vdGlmeSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIG5vZGUuZGF0YSA9IHRvZ2dsZSA9ICF0b2dnbGU7XG4gICAgfTtcbiAgLy8gZW52aXJvbm1lbnRzIHdpdGggbWF5YmUgbm9uLWNvbXBsZXRlbHkgY29ycmVjdCwgYnV0IGV4aXN0ZW50IFByb21pc2VcbiAgfSBlbHNlIGlmICghSVNfSU9TX1BFQkJMRSAmJiBQcm9taXNlICYmIFByb21pc2UucmVzb2x2ZSkge1xuICAgIC8vIFByb21pc2UucmVzb2x2ZSB3aXRob3V0IGFuIGFyZ3VtZW50IHRocm93cyBhbiBlcnJvciBpbiBMRyBXZWJPUyAyXG4gICAgcHJvbWlzZSA9IFByb21pc2UucmVzb2x2ZSh1bmRlZmluZWQpO1xuICAgIC8vIHdvcmthcm91bmQgb2YgV2ViS2l0IH4gaU9TIFNhZmFyaSAxMC4xIGJ1Z1xuICAgIHByb21pc2UuY29uc3RydWN0b3IgPSBQcm9taXNlO1xuICAgIHRoZW4gPSBiaW5kKHByb21pc2UudGhlbiwgcHJvbWlzZSk7XG4gICAgbm90aWZ5ID0gZnVuY3Rpb24gKCkge1xuICAgICAgdGhlbihmbHVzaCk7XG4gICAgfTtcbiAgLy8gTm9kZS5qcyB3aXRob3V0IHByb21pc2VzXG4gIH0gZWxzZSBpZiAoSVNfTk9ERSkge1xuICAgIG5vdGlmeSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHByb2Nlc3MubmV4dFRpY2soZmx1c2gpO1xuICAgIH07XG4gIC8vIGZvciBvdGhlciBlbnZpcm9ubWVudHMgLSBtYWNyb3Rhc2sgYmFzZWQgb246XG4gIC8vIC0gc2V0SW1tZWRpYXRlXG4gIC8vIC0gTWVzc2FnZUNoYW5uZWxcbiAgLy8gLSB3aW5kb3cucG9zdE1lc3NhZ2VcbiAgLy8gLSBvbnJlYWR5c3RhdGVjaGFuZ2VcbiAgLy8gLSBzZXRUaW1lb3V0XG4gIH0gZWxzZSB7XG4gICAgLy8gYHdlYnBhY2tgIGRldiBzZXJ2ZXIgYnVnIG9uIElFIGdsb2JhbCBtZXRob2RzIC0gdXNlIGJpbmQoZm4sIGdsb2JhbClcbiAgICBtYWNyb3Rhc2sgPSBiaW5kKG1hY3JvdGFzaywgZ2xvYmFsVGhpcyk7XG4gICAgbm90aWZ5ID0gZnVuY3Rpb24gKCkge1xuICAgICAgbWFjcm90YXNrKGZsdXNoKTtcbiAgICB9O1xuICB9XG5cbiAgbWljcm90YXNrID0gZnVuY3Rpb24gKGZuKSB7XG4gICAgaWYgKCFxdWV1ZS5oZWFkKSBub3RpZnkoKTtcbiAgICBxdWV1ZS5hZGQoZm4pO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG1pY3JvdGFzaztcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBhQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1jYWxsYWJsZScpO1xuXG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcblxudmFyIFByb21pc2VDYXBhYmlsaXR5ID0gZnVuY3Rpb24gKEMpIHtcbiAgdmFyIHJlc29sdmUsIHJlamVjdDtcbiAgdGhpcy5wcm9taXNlID0gbmV3IEMoZnVuY3Rpb24gKCQkcmVzb2x2ZSwgJCRyZWplY3QpIHtcbiAgICBpZiAocmVzb2x2ZSAhPT0gdW5kZWZpbmVkIHx8IHJlamVjdCAhPT0gdW5kZWZpbmVkKSB0aHJvdyBuZXcgJFR5cGVFcnJvcignQmFkIFByb21pc2UgY29uc3RydWN0b3InKTtcbiAgICByZXNvbHZlID0gJCRyZXNvbHZlO1xuICAgIHJlamVjdCA9ICQkcmVqZWN0O1xuICB9KTtcbiAgdGhpcy5yZXNvbHZlID0gYUNhbGxhYmxlKHJlc29sdmUpO1xuICB0aGlzLnJlamVjdCA9IGFDYWxsYWJsZShyZWplY3QpO1xufTtcblxuLy8gYE5ld1Byb21pc2VDYXBhYmlsaXR5YCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtbmV3cHJvbWlzZWNhcGFiaWxpdHlcbm1vZHVsZS5leHBvcnRzLmYgPSBmdW5jdGlvbiAoQykge1xuICByZXR1cm4gbmV3IFByb21pc2VDYXBhYmlsaXR5KEMpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciB0b1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1zdHJpbmcnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQsICRkZWZhdWx0KSB7XG4gIHJldHVybiBhcmd1bWVudCA9PT0gdW5kZWZpbmVkID8gYXJndW1lbnRzLmxlbmd0aCA8IDIgPyAnJyA6ICRkZWZhdWx0IDogdG9TdHJpbmcoYXJndW1lbnQpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBpc1JlZ0V4cCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1yZWdleHAnKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIGlmIChpc1JlZ0V4cChpdCkpIHtcbiAgICB0aHJvdyBuZXcgJFR5cGVFcnJvcihcIlRoZSBtZXRob2QgZG9lc24ndCBhY2NlcHQgcmVndWxhciBleHByZXNzaW9uc1wiKTtcbiAgfSByZXR1cm4gaXQ7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBvYmplY3RLZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1rZXlzJyk7XG52YXIgZ2V0T3duUHJvcGVydHlTeW1ib2xzTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LXN5bWJvbHMnKTtcbnZhciBwcm9wZXJ0eUlzRW51bWVyYWJsZU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtcHJvcGVydHktaXMtZW51bWVyYWJsZScpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLW9iamVjdCcpO1xudmFyIEluZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW5kZXhlZC1vYmplY3QnKTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1hc3NpZ24gLS0gc2FmZVxudmFyICRhc3NpZ24gPSBPYmplY3QuYXNzaWduO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xudmFyIGRlZmluZVByb3BlcnR5ID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xudmFyIGNvbmNhdCA9IHVuY3VycnlUaGlzKFtdLmNvbmNhdCk7XG5cbi8vIGBPYmplY3QuYXNzaWduYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmFzc2lnblxubW9kdWxlLmV4cG9ydHMgPSAhJGFzc2lnbiB8fCBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIHNob3VsZCBoYXZlIGNvcnJlY3Qgb3JkZXIgb2Ygb3BlcmF0aW9ucyAoRWRnZSBidWcpXG4gIGlmIChERVNDUklQVE9SUyAmJiAkYXNzaWduKHsgYjogMSB9LCAkYXNzaWduKGRlZmluZVByb3BlcnR5KHt9LCAnYScsIHtcbiAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgZGVmaW5lUHJvcGVydHkodGhpcywgJ2InLCB7XG4gICAgICAgIHZhbHVlOiAzLFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZVxuICAgICAgfSk7XG4gICAgfVxuICB9KSwgeyBiOiAyIH0pKS5iICE9PSAxKSByZXR1cm4gdHJ1ZTtcbiAgLy8gc2hvdWxkIHdvcmsgd2l0aCBzeW1ib2xzIGFuZCBzaG91bGQgaGF2ZSBkZXRlcm1pbmlzdGljIHByb3BlcnR5IG9yZGVyIChWOCBidWcpXG4gIHZhciBBID0ge307XG4gIHZhciBCID0ge307XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1zeW1ib2wgLS0gc2FmZVxuICB2YXIgc3ltYm9sID0gU3ltYm9sKCdhc3NpZ24gZGV0ZWN0aW9uJyk7XG4gIHZhciBhbHBoYWJldCA9ICdhYmNkZWZnaGlqa2xtbm9wcXJzdCc7XG4gIEFbc3ltYm9sXSA9IDc7XG4gIGFscGhhYmV0LnNwbGl0KCcnKS5mb3JFYWNoKGZ1bmN0aW9uIChjaHIpIHsgQltjaHJdID0gY2hyOyB9KTtcbiAgcmV0dXJuICRhc3NpZ24oe30sIEEpW3N5bWJvbF0gIT09IDcgfHwgb2JqZWN0S2V5cygkYXNzaWduKHt9LCBCKSkuam9pbignJykgIT09IGFscGhhYmV0O1xufSkgPyBmdW5jdGlvbiBhc3NpZ24odGFyZ2V0LCBzb3VyY2UpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bnVzZWQtdmFycyAtLSByZXF1aXJlZCBmb3IgYC5sZW5ndGhgXG4gIHZhciBUID0gdG9PYmplY3QodGFyZ2V0KTtcbiAgdmFyIGFyZ3VtZW50c0xlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gIHZhciBpbmRleCA9IDE7XG4gIHZhciBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPSBnZXRPd25Qcm9wZXJ0eVN5bWJvbHNNb2R1bGUuZjtcbiAgdmFyIHByb3BlcnR5SXNFbnVtZXJhYmxlID0gcHJvcGVydHlJc0VudW1lcmFibGVNb2R1bGUuZjtcbiAgd2hpbGUgKGFyZ3VtZW50c0xlbmd0aCA+IGluZGV4KSB7XG4gICAgdmFyIFMgPSBJbmRleGVkT2JqZWN0KGFyZ3VtZW50c1tpbmRleCsrXSk7XG4gICAgdmFyIGtleXMgPSBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPyBjb25jYXQob2JqZWN0S2V5cyhTKSwgZ2V0T3duUHJvcGVydHlTeW1ib2xzKFMpKSA6IG9iamVjdEtleXMoUyk7XG4gICAgdmFyIGxlbmd0aCA9IGtleXMubGVuZ3RoO1xuICAgIHZhciBqID0gMDtcbiAgICB2YXIga2V5O1xuICAgIHdoaWxlIChsZW5ndGggPiBqKSB7XG4gICAgICBrZXkgPSBrZXlzW2orK107XG4gICAgICBpZiAoIURFU0NSSVBUT1JTIHx8IGNhbGwocHJvcGVydHlJc0VudW1lcmFibGUsIFMsIGtleSkpIFRba2V5XSA9IFNba2V5XTtcbiAgICB9XG4gIH0gcmV0dXJuIFQ7XG59IDogJGFzc2lnbjtcbiIsIid1c2Ugc3RyaWN0Jztcbi8qIGdsb2JhbCBBY3RpdmVYT2JqZWN0IC0tIG9sZCBJRSwgV1NIICovXG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgZGVmaW5lUHJvcGVydGllc01vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnRpZXMnKTtcbnZhciBlbnVtQnVnS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbnVtLWJ1Zy1rZXlzJyk7XG52YXIgaGlkZGVuS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oaWRkZW4ta2V5cycpO1xudmFyIGh0bWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaHRtbCcpO1xudmFyIGRvY3VtZW50Q3JlYXRlRWxlbWVudCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kb2N1bWVudC1jcmVhdGUtZWxlbWVudCcpO1xudmFyIHNoYXJlZEtleSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQta2V5Jyk7XG5cbnZhciBHVCA9ICc+JztcbnZhciBMVCA9ICc8JztcbnZhciBQUk9UT1RZUEUgPSAncHJvdG90eXBlJztcbnZhciBTQ1JJUFQgPSAnc2NyaXB0JztcbnZhciBJRV9QUk9UTyA9IHNoYXJlZEtleSgnSUVfUFJPVE8nKTtcblxudmFyIEVtcHR5Q29uc3RydWN0b3IgPSBmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH07XG5cbnZhciBzY3JpcHRUYWcgPSBmdW5jdGlvbiAoY29udGVudCkge1xuICByZXR1cm4gTFQgKyBTQ1JJUFQgKyBHVCArIGNvbnRlbnQgKyBMVCArICcvJyArIFNDUklQVCArIEdUO1xufTtcblxuLy8gQ3JlYXRlIG9iamVjdCB3aXRoIGZha2UgYG51bGxgIHByb3RvdHlwZTogdXNlIEFjdGl2ZVggT2JqZWN0IHdpdGggY2xlYXJlZCBwcm90b3R5cGVcbnZhciBOdWxsUHJvdG9PYmplY3RWaWFBY3RpdmVYID0gZnVuY3Rpb24gKGFjdGl2ZVhEb2N1bWVudCkge1xuICBhY3RpdmVYRG9jdW1lbnQud3JpdGUoc2NyaXB0VGFnKCcnKSk7XG4gIGFjdGl2ZVhEb2N1bWVudC5jbG9zZSgpO1xuICB2YXIgdGVtcCA9IGFjdGl2ZVhEb2N1bWVudC5wYXJlbnRXaW5kb3cuT2JqZWN0O1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdXNlbGVzcy1hc3NpZ25tZW50IC0tIGF2b2lkIG1lbW9yeSBsZWFrXG4gIGFjdGl2ZVhEb2N1bWVudCA9IG51bGw7XG4gIHJldHVybiB0ZW1wO1xufTtcblxuLy8gQ3JlYXRlIG9iamVjdCB3aXRoIGZha2UgYG51bGxgIHByb3RvdHlwZTogdXNlIGlmcmFtZSBPYmplY3Qgd2l0aCBjbGVhcmVkIHByb3RvdHlwZVxudmFyIE51bGxQcm90b09iamVjdFZpYUlGcmFtZSA9IGZ1bmN0aW9uICgpIHtcbiAgLy8gVGhyYXNoLCB3YXN0ZSBhbmQgc29kb215OiBJRSBHQyBidWdcbiAgdmFyIGlmcmFtZSA9IGRvY3VtZW50Q3JlYXRlRWxlbWVudCgnaWZyYW1lJyk7XG4gIHZhciBKUyA9ICdqYXZhJyArIFNDUklQVCArICc6JztcbiAgdmFyIGlmcmFtZURvY3VtZW50O1xuICBpZnJhbWUuc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgaHRtbC5hcHBlbmRDaGlsZChpZnJhbWUpO1xuICAvLyBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvNDc1XG4gIGlmcmFtZS5zcmMgPSBTdHJpbmcoSlMpO1xuICBpZnJhbWVEb2N1bWVudCA9IGlmcmFtZS5jb250ZW50V2luZG93LmRvY3VtZW50O1xuICBpZnJhbWVEb2N1bWVudC5vcGVuKCk7XG4gIGlmcmFtZURvY3VtZW50LndyaXRlKHNjcmlwdFRhZygnZG9jdW1lbnQuRj1PYmplY3QnKSk7XG4gIGlmcmFtZURvY3VtZW50LmNsb3NlKCk7XG4gIHJldHVybiBpZnJhbWVEb2N1bWVudC5GO1xufTtcblxuLy8gQ2hlY2sgZm9yIGRvY3VtZW50LmRvbWFpbiBhbmQgYWN0aXZlIHggc3VwcG9ydFxuLy8gTm8gbmVlZCB0byB1c2UgYWN0aXZlIHggYXBwcm9hY2ggd2hlbiBkb2N1bWVudC5kb21haW4gaXMgbm90IHNldFxuLy8gc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9lcy1zaGltcy9lczUtc2hpbS9pc3N1ZXMvMTUwXG4vLyB2YXJpYXRpb24gb2YgaHR0cHM6Ly9naXRodWIuY29tL2tpdGNhbWJyaWRnZS9lczUtc2hpbS9jb21taXQvNGY3MzhhYzA2NjM0NlxuLy8gYXZvaWQgSUUgR0MgYnVnXG52YXIgYWN0aXZlWERvY3VtZW50O1xudmFyIE51bGxQcm90b09iamVjdCA9IGZ1bmN0aW9uICgpIHtcbiAgdHJ5IHtcbiAgICBhY3RpdmVYRG9jdW1lbnQgPSBuZXcgQWN0aXZlWE9iamVjdCgnaHRtbGZpbGUnKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHsgLyogaWdub3JlICovIH1cbiAgTnVsbFByb3RvT2JqZWN0ID0gdHlwZW9mIGRvY3VtZW50ICE9ICd1bmRlZmluZWQnXG4gICAgPyBkb2N1bWVudC5kb21haW4gJiYgYWN0aXZlWERvY3VtZW50XG4gICAgICA/IE51bGxQcm90b09iamVjdFZpYUFjdGl2ZVgoYWN0aXZlWERvY3VtZW50KSAvLyBvbGQgSUVcbiAgICAgIDogTnVsbFByb3RvT2JqZWN0VmlhSUZyYW1lKClcbiAgICA6IE51bGxQcm90b09iamVjdFZpYUFjdGl2ZVgoYWN0aXZlWERvY3VtZW50KTsgLy8gV1NIXG4gIHZhciBsZW5ndGggPSBlbnVtQnVnS2V5cy5sZW5ndGg7XG4gIHdoaWxlIChsZW5ndGgtLSkgZGVsZXRlIE51bGxQcm90b09iamVjdFtQUk9UT1RZUEVdW2VudW1CdWdLZXlzW2xlbmd0aF1dO1xuICByZXR1cm4gTnVsbFByb3RvT2JqZWN0KCk7XG59O1xuXG5oaWRkZW5LZXlzW0lFX1BST1RPXSA9IHRydWU7XG5cbi8vIGBPYmplY3QuY3JlYXRlYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmNyZWF0ZVxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1jcmVhdGUgLS0gc2FmZVxubW9kdWxlLmV4cG9ydHMgPSBPYmplY3QuY3JlYXRlIHx8IGZ1bmN0aW9uIGNyZWF0ZShPLCBQcm9wZXJ0aWVzKSB7XG4gIHZhciByZXN1bHQ7XG4gIGlmIChPICE9PSBudWxsKSB7XG4gICAgRW1wdHlDb25zdHJ1Y3RvcltQUk9UT1RZUEVdID0gYW5PYmplY3QoTyk7XG4gICAgcmVzdWx0ID0gbmV3IEVtcHR5Q29uc3RydWN0b3IoKTtcbiAgICBFbXB0eUNvbnN0cnVjdG9yW1BST1RPVFlQRV0gPSBudWxsO1xuICAgIC8vIGFkZCBcIl9fcHJvdG9fX1wiIGZvciBPYmplY3QuZ2V0UHJvdG90eXBlT2YgcG9seWZpbGxcbiAgICByZXN1bHRbSUVfUFJPVE9dID0gTztcbiAgfSBlbHNlIHJlc3VsdCA9IE51bGxQcm90b09iamVjdCgpO1xuICByZXR1cm4gUHJvcGVydGllcyA9PT0gdW5kZWZpbmVkID8gcmVzdWx0IDogZGVmaW5lUHJvcGVydGllc01vZHVsZS5mKHJlc3VsdCwgUHJvcGVydGllcyk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgVjhfUFJPVE9UWVBFX0RFRklORV9CVUcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdjgtcHJvdG90eXBlLWRlZmluZS1idWcnKTtcbnZhciBkZWZpbmVQcm9wZXJ0eU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5Jyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgdG9JbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0Jyk7XG52YXIgb2JqZWN0S2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3Qta2V5cycpO1xuXG4vLyBgT2JqZWN0LmRlZmluZVByb3BlcnRpZXNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuZGVmaW5lcHJvcGVydGllc1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0aWVzIC0tIHNhZmVcbmV4cG9ydHMuZiA9IERFU0NSSVBUT1JTICYmICFWOF9QUk9UT1RZUEVfREVGSU5FX0JVRyA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzIDogZnVuY3Rpb24gZGVmaW5lUHJvcGVydGllcyhPLCBQcm9wZXJ0aWVzKSB7XG4gIGFuT2JqZWN0KE8pO1xuICB2YXIgcHJvcHMgPSB0b0luZGV4ZWRPYmplY3QoUHJvcGVydGllcyk7XG4gIHZhciBrZXlzID0gb2JqZWN0S2V5cyhQcm9wZXJ0aWVzKTtcbiAgdmFyIGxlbmd0aCA9IGtleXMubGVuZ3RoO1xuICB2YXIgaW5kZXggPSAwO1xuICB2YXIga2V5O1xuICB3aGlsZSAobGVuZ3RoID4gaW5kZXgpIGRlZmluZVByb3BlcnR5TW9kdWxlLmYoTywga2V5ID0ga2V5c1tpbmRleCsrXSwgcHJvcHNba2V5XSk7XG4gIHJldHVybiBPO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIElFOF9ET01fREVGSU5FID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2llOC1kb20tZGVmaW5lJyk7XG52YXIgVjhfUFJPVE9UWVBFX0RFRklORV9CVUcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdjgtcHJvdG90eXBlLWRlZmluZS1idWcnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciB0b1Byb3BlcnR5S2V5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXByb3BlcnR5LWtleScpO1xuXG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gc2FmZVxudmFyICRkZWZpbmVQcm9wZXJ0eSA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9yIC0tIHNhZmVcbnZhciAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcbnZhciBFTlVNRVJBQkxFID0gJ2VudW1lcmFibGUnO1xudmFyIENPTkZJR1VSQUJMRSA9ICdjb25maWd1cmFibGUnO1xudmFyIFdSSVRBQkxFID0gJ3dyaXRhYmxlJztcblxuLy8gYE9iamVjdC5kZWZpbmVQcm9wZXJ0eWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5kZWZpbmVwcm9wZXJ0eVxuZXhwb3J0cy5mID0gREVTQ1JJUFRPUlMgPyBWOF9QUk9UT1RZUEVfREVGSU5FX0JVRyA/IGZ1bmN0aW9uIGRlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpIHtcbiAgYW5PYmplY3QoTyk7XG4gIFAgPSB0b1Byb3BlcnR5S2V5KFApO1xuICBhbk9iamVjdChBdHRyaWJ1dGVzKTtcbiAgaWYgKHR5cGVvZiBPID09PSAnZnVuY3Rpb24nICYmIFAgPT09ICdwcm90b3R5cGUnICYmICd2YWx1ZScgaW4gQXR0cmlidXRlcyAmJiBXUklUQUJMRSBpbiBBdHRyaWJ1dGVzICYmICFBdHRyaWJ1dGVzW1dSSVRBQkxFXSkge1xuICAgIHZhciBjdXJyZW50ID0gJGdldE93blByb3BlcnR5RGVzY3JpcHRvcihPLCBQKTtcbiAgICBpZiAoY3VycmVudCAmJiBjdXJyZW50W1dSSVRBQkxFXSkge1xuICAgICAgT1tQXSA9IEF0dHJpYnV0ZXMudmFsdWU7XG4gICAgICBBdHRyaWJ1dGVzID0ge1xuICAgICAgICBjb25maWd1cmFibGU6IENPTkZJR1VSQUJMRSBpbiBBdHRyaWJ1dGVzID8gQXR0cmlidXRlc1tDT05GSUdVUkFCTEVdIDogY3VycmVudFtDT05GSUdVUkFCTEVdLFxuICAgICAgICBlbnVtZXJhYmxlOiBFTlVNRVJBQkxFIGluIEF0dHJpYnV0ZXMgPyBBdHRyaWJ1dGVzW0VOVU1FUkFCTEVdIDogY3VycmVudFtFTlVNRVJBQkxFXSxcbiAgICAgICAgd3JpdGFibGU6IGZhbHNlXG4gICAgICB9O1xuICAgIH1cbiAgfSByZXR1cm4gJGRlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpO1xufSA6ICRkZWZpbmVQcm9wZXJ0eSA6IGZ1bmN0aW9uIGRlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpIHtcbiAgYW5PYmplY3QoTyk7XG4gIFAgPSB0b1Byb3BlcnR5S2V5KFApO1xuICBhbk9iamVjdChBdHRyaWJ1dGVzKTtcbiAgaWYgKElFOF9ET01fREVGSU5FKSB0cnkge1xuICAgIHJldHVybiAkZGVmaW5lUHJvcGVydHkoTywgUCwgQXR0cmlidXRlcyk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cbiAgaWYgKCdnZXQnIGluIEF0dHJpYnV0ZXMgfHwgJ3NldCcgaW4gQXR0cmlidXRlcykgdGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0FjY2Vzc29ycyBub3Qgc3VwcG9ydGVkJyk7XG4gIGlmICgndmFsdWUnIGluIEF0dHJpYnV0ZXMpIE9bUF0gPSBBdHRyaWJ1dGVzLnZhbHVlO1xuICByZXR1cm4gTztcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciBwcm9wZXJ0eUlzRW51bWVyYWJsZU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtcHJvcGVydHktaXMtZW51bWVyYWJsZScpO1xudmFyIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHktZGVzY3JpcHRvcicpO1xudmFyIHRvSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdCcpO1xudmFyIHRvUHJvcGVydHlLZXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tcHJvcGVydHkta2V5Jyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciBJRThfRE9NX0RFRklORSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pZTgtZG9tLWRlZmluZScpO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5ZGVzY3JpcHRvciAtLSBzYWZlXG52YXIgJGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG5cbi8vIGBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmdldG93bnByb3BlcnR5ZGVzY3JpcHRvclxuZXhwb3J0cy5mID0gREVTQ1JJUFRPUlMgPyAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIDogZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE8sIFApIHtcbiAgTyA9IHRvSW5kZXhlZE9iamVjdChPKTtcbiAgUCA9IHRvUHJvcGVydHlLZXkoUCk7XG4gIGlmIChJRThfRE9NX0RFRklORSkgdHJ5IHtcbiAgICByZXR1cm4gJGdldE93blByb3BlcnR5RGVzY3JpcHRvcihPLCBQKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHsgLyogZW1wdHkgKi8gfVxuICBpZiAoaGFzT3duKE8sIFApKSByZXR1cm4gY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yKCFjYWxsKHByb3BlcnR5SXNFbnVtZXJhYmxlTW9kdWxlLmYsIE8sIFApLCBPW1BdKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG4vKiBlc2xpbnQtZGlzYWJsZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHluYW1lcyAtLSBzYWZlICovXG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jbGFzc29mLXJhdycpO1xudmFyIHRvSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdCcpO1xudmFyICRnZXRPd25Qcm9wZXJ0eU5hbWVzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LW5hbWVzJykuZjtcbnZhciBhcnJheVNsaWNlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LXNsaWNlJyk7XG5cbnZhciB3aW5kb3dOYW1lcyA9IHR5cGVvZiB3aW5kb3cgPT0gJ29iamVjdCcgJiYgd2luZG93ICYmIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzXG4gID8gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMod2luZG93KSA6IFtdO1xuXG52YXIgZ2V0V2luZG93TmFtZXMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gJGdldE93blByb3BlcnR5TmFtZXMoaXQpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiBhcnJheVNsaWNlKHdpbmRvd05hbWVzKTtcbiAgfVxufTtcblxuLy8gZmFsbGJhY2sgZm9yIElFMTEgYnVnZ3kgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMgd2l0aCBpZnJhbWUgYW5kIHdpbmRvd1xubW9kdWxlLmV4cG9ydHMuZiA9IGZ1bmN0aW9uIGdldE93blByb3BlcnR5TmFtZXMoaXQpIHtcbiAgcmV0dXJuIHdpbmRvd05hbWVzICYmIGNsYXNzb2YoaXQpID09PSAnV2luZG93J1xuICAgID8gZ2V0V2luZG93TmFtZXMoaXQpXG4gICAgOiAkZ2V0T3duUHJvcGVydHlOYW1lcyh0b0luZGV4ZWRPYmplY3QoaXQpKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgaW50ZXJuYWxPYmplY3RLZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1rZXlzLWludGVybmFsJyk7XG52YXIgZW51bUJ1Z0tleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW51bS1idWcta2V5cycpO1xuXG52YXIgaGlkZGVuS2V5cyA9IGVudW1CdWdLZXlzLmNvbmNhdCgnbGVuZ3RoJywgJ3Byb3RvdHlwZScpO1xuXG4vLyBgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuZ2V0b3ducHJvcGVydHluYW1lc1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eW5hbWVzIC0tIHNhZmVcbmV4cG9ydHMuZiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzIHx8IGZ1bmN0aW9uIGdldE93blByb3BlcnR5TmFtZXMoTykge1xuICByZXR1cm4gaW50ZXJuYWxPYmplY3RLZXlzKE8sIGhpZGRlbktleXMpO1xufTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHlzeW1ib2xzIC0tIHNhZmVcbmV4cG9ydHMuZiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tb2JqZWN0Jyk7XG52YXIgc2hhcmVkS2V5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZC1rZXknKTtcbnZhciBDT1JSRUNUX1BST1RPVFlQRV9HRVRURVIgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY29ycmVjdC1wcm90b3R5cGUtZ2V0dGVyJyk7XG5cbnZhciBJRV9QUk9UTyA9IHNoYXJlZEtleSgnSUVfUFJPVE8nKTtcbnZhciAkT2JqZWN0ID0gT2JqZWN0O1xudmFyIE9iamVjdFByb3RvdHlwZSA9ICRPYmplY3QucHJvdG90eXBlO1xuXG4vLyBgT2JqZWN0LmdldFByb3RvdHlwZU9mYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmdldHByb3RvdHlwZW9mXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldHByb3RvdHlwZW9mIC0tIHNhZmVcbm1vZHVsZS5leHBvcnRzID0gQ09SUkVDVF9QUk9UT1RZUEVfR0VUVEVSID8gJE9iamVjdC5nZXRQcm90b3R5cGVPZiA6IGZ1bmN0aW9uIChPKSB7XG4gIHZhciBvYmplY3QgPSB0b09iamVjdChPKTtcbiAgaWYgKGhhc093bihvYmplY3QsIElFX1BST1RPKSkgcmV0dXJuIG9iamVjdFtJRV9QUk9UT107XG4gIHZhciBjb25zdHJ1Y3RvciA9IG9iamVjdC5jb25zdHJ1Y3RvcjtcbiAgaWYgKGlzQ2FsbGFibGUoY29uc3RydWN0b3IpICYmIG9iamVjdCBpbnN0YW5jZW9mIGNvbnN0cnVjdG9yKSB7XG4gICAgcmV0dXJuIGNvbnN0cnVjdG9yLnByb3RvdHlwZTtcbiAgfSByZXR1cm4gb2JqZWN0IGluc3RhbmNlb2YgJE9iamVjdCA/IE9iamVjdFByb3RvdHlwZSA6IG51bGw7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jbGFzc29mLXJhdycpO1xudmFyIEFSUkFZX0JVRkZFUl9OT05fRVhURU5TSUJMRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1idWZmZXItbm9uLWV4dGVuc2libGUnKTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1pc2V4dGVuc2libGUgLS0gc2FmZVxudmFyICRpc0V4dGVuc2libGUgPSBPYmplY3QuaXNFeHRlbnNpYmxlO1xudmFyIEZBSUxTX09OX1BSSU1JVElWRVMgPSBmYWlscyhmdW5jdGlvbiAoKSB7ICRpc0V4dGVuc2libGUoMSk7IH0pO1xuXG4vLyBgT2JqZWN0LmlzRXh0ZW5zaWJsZWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5pc2V4dGVuc2libGVcbm1vZHVsZS5leHBvcnRzID0gKEZBSUxTX09OX1BSSU1JVElWRVMgfHwgQVJSQVlfQlVGRkVSX05PTl9FWFRFTlNJQkxFKSA/IGZ1bmN0aW9uIGlzRXh0ZW5zaWJsZShpdCkge1xuICBpZiAoIWlzT2JqZWN0KGl0KSkgcmV0dXJuIGZhbHNlO1xuICBpZiAoQVJSQVlfQlVGRkVSX05PTl9FWFRFTlNJQkxFICYmIGNsYXNzb2YoaXQpID09PSAnQXJyYXlCdWZmZXInKSByZXR1cm4gZmFsc2U7XG4gIHJldHVybiAkaXNFeHRlbnNpYmxlID8gJGlzRXh0ZW5zaWJsZShpdCkgOiB0cnVlO1xufSA6ICRpc0V4dGVuc2libGU7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gdW5jdXJyeVRoaXMoe30uaXNQcm90b3R5cGVPZik7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciB0b0luZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QnKTtcbnZhciBpbmRleE9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LWluY2x1ZGVzJykuaW5kZXhPZjtcbnZhciBoaWRkZW5LZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hpZGRlbi1rZXlzJyk7XG5cbnZhciBwdXNoID0gdW5jdXJyeVRoaXMoW10ucHVzaCk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9iamVjdCwgbmFtZXMpIHtcbiAgdmFyIE8gPSB0b0luZGV4ZWRPYmplY3Qob2JqZWN0KTtcbiAgdmFyIGkgPSAwO1xuICB2YXIgcmVzdWx0ID0gW107XG4gIHZhciBrZXk7XG4gIGZvciAoa2V5IGluIE8pICFoYXNPd24oaGlkZGVuS2V5cywga2V5KSAmJiBoYXNPd24oTywga2V5KSAmJiBwdXNoKHJlc3VsdCwga2V5KTtcbiAgLy8gRG9uJ3QgZW51bSBidWcgJiBoaWRkZW4ga2V5c1xuICB3aGlsZSAobmFtZXMubGVuZ3RoID4gaSkgaWYgKGhhc093bihPLCBrZXkgPSBuYW1lc1tpKytdKSkge1xuICAgIH5pbmRleE9mKHJlc3VsdCwga2V5KSB8fCBwdXNoKHJlc3VsdCwga2V5KTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBpbnRlcm5hbE9iamVjdEtleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWtleXMtaW50ZXJuYWwnKTtcbnZhciBlbnVtQnVnS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbnVtLWJ1Zy1rZXlzJyk7XG5cbi8vIGBPYmplY3Qua2V5c2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5rZXlzXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWtleXMgLS0gc2FmZVxubW9kdWxlLmV4cG9ydHMgPSBPYmplY3Qua2V5cyB8fCBmdW5jdGlvbiBrZXlzKE8pIHtcbiAgcmV0dXJuIGludGVybmFsT2JqZWN0S2V5cyhPLCBlbnVtQnVnS2V5cyk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICRwcm9wZXJ0eUlzRW51bWVyYWJsZSA9IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3IgLS0gc2FmZVxudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG5cbi8vIE5hc2hvcm4gfiBKREs4IGJ1Z1xudmFyIE5BU0hPUk5fQlVHID0gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yICYmICEkcHJvcGVydHlJc0VudW1lcmFibGUuY2FsbCh7IDE6IDIgfSwgMSk7XG5cbi8vIGBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlYCBtZXRob2QgaW1wbGVtZW50YXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eWlzZW51bWVyYWJsZVxuZXhwb3J0cy5mID0gTkFTSE9STl9CVUcgPyBmdW5jdGlvbiBwcm9wZXJ0eUlzRW51bWVyYWJsZShWKSB7XG4gIHZhciBkZXNjcmlwdG9yID0gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRoaXMsIFYpO1xuICByZXR1cm4gISFkZXNjcmlwdG9yICYmIGRlc2NyaXB0b3IuZW51bWVyYWJsZTtcbn0gOiAkcHJvcGVydHlJc0VudW1lcmFibGU7XG4iLCIndXNlIHN0cmljdCc7XG4vKiBlc2xpbnQtZGlzYWJsZSBuby1wcm90byAtLSBzYWZlICovXG52YXIgdW5jdXJyeVRoaXNBY2Nlc3NvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMtYWNjZXNzb3InKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciByZXF1aXJlT2JqZWN0Q29lcmNpYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlcXVpcmUtb2JqZWN0LWNvZXJjaWJsZScpO1xudmFyIGFQb3NzaWJsZVByb3RvdHlwZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLXBvc3NpYmxlLXByb3RvdHlwZScpO1xuXG4vLyBgT2JqZWN0LnNldFByb3RvdHlwZU9mYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LnNldHByb3RvdHlwZW9mXG4vLyBXb3JrcyB3aXRoIF9fcHJvdG9fXyBvbmx5LiBPbGQgdjggY2FuJ3Qgd29yayB3aXRoIG51bGwgcHJvdG8gb2JqZWN0cy5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3Qtc2V0cHJvdG90eXBlb2YgLS0gc2FmZVxubW9kdWxlLmV4cG9ydHMgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwgKCdfX3Byb3RvX18nIGluIHt9ID8gZnVuY3Rpb24gKCkge1xuICB2YXIgQ09SUkVDVF9TRVRURVIgPSBmYWxzZTtcbiAgdmFyIHRlc3QgPSB7fTtcbiAgdmFyIHNldHRlcjtcbiAgdHJ5IHtcbiAgICBzZXR0ZXIgPSB1bmN1cnJ5VGhpc0FjY2Vzc29yKE9iamVjdC5wcm90b3R5cGUsICdfX3Byb3RvX18nLCAnc2V0Jyk7XG4gICAgc2V0dGVyKHRlc3QsIFtdKTtcbiAgICBDT1JSRUNUX1NFVFRFUiA9IHRlc3QgaW5zdGFuY2VvZiBBcnJheTtcbiAgfSBjYXRjaCAoZXJyb3IpIHsgLyogZW1wdHkgKi8gfVxuICByZXR1cm4gZnVuY3Rpb24gc2V0UHJvdG90eXBlT2YoTywgcHJvdG8pIHtcbiAgICByZXF1aXJlT2JqZWN0Q29lcmNpYmxlKE8pO1xuICAgIGFQb3NzaWJsZVByb3RvdHlwZShwcm90byk7XG4gICAgaWYgKCFpc09iamVjdChPKSkgcmV0dXJuIE87XG4gICAgaWYgKENPUlJFQ1RfU0VUVEVSKSBzZXR0ZXIoTywgcHJvdG8pO1xuICAgIGVsc2UgTy5fX3Byb3RvX18gPSBwcm90bztcbiAgICByZXR1cm4gTztcbiAgfTtcbn0oKSA6IHVuZGVmaW5lZCk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgVE9fU1RSSU5HX1RBR19TVVBQT1JUID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXN0cmluZy10YWctc3VwcG9ydCcpO1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZicpO1xuXG4vLyBgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZ2AgbWV0aG9kIGltcGxlbWVudGF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5wcm90b3R5cGUudG9zdHJpbmdcbm1vZHVsZS5leHBvcnRzID0gVE9fU1RSSU5HX1RBR19TVVBQT1JUID8ge30udG9TdHJpbmcgOiBmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgcmV0dXJuICdbb2JqZWN0ICcgKyBjbGFzc29mKHRoaXMpICsgJ10nO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG5cbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG4vLyBgT3JkaW5hcnlUb1ByaW1pdGl2ZWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9yZGluYXJ5dG9wcmltaXRpdmVcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGlucHV0LCBwcmVmKSB7XG4gIHZhciBmbiwgdmFsO1xuICBpZiAocHJlZiA9PT0gJ3N0cmluZycgJiYgaXNDYWxsYWJsZShmbiA9IGlucHV0LnRvU3RyaW5nKSAmJiAhaXNPYmplY3QodmFsID0gY2FsbChmbiwgaW5wdXQpKSkgcmV0dXJuIHZhbDtcbiAgaWYgKGlzQ2FsbGFibGUoZm4gPSBpbnB1dC52YWx1ZU9mKSAmJiAhaXNPYmplY3QodmFsID0gY2FsbChmbiwgaW5wdXQpKSkgcmV0dXJuIHZhbDtcbiAgaWYgKHByZWYgIT09ICdzdHJpbmcnICYmIGlzQ2FsbGFibGUoZm4gPSBpbnB1dC50b1N0cmluZykgJiYgIWlzT2JqZWN0KHZhbCA9IGNhbGwoZm4sIGlucHV0KSkpIHJldHVybiB2YWw7XG4gIHRocm93IG5ldyAkVHlwZUVycm9yKFwiQ2FuJ3QgY29udmVydCBvYmplY3QgdG8gcHJpbWl0aXZlIHZhbHVlXCIpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBnZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbicpO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGdldE93blByb3BlcnR5TmFtZXNNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktbmFtZXMnKTtcbnZhciBnZXRPd25Qcm9wZXJ0eVN5bWJvbHNNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktc3ltYm9scycpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xuXG52YXIgY29uY2F0ID0gdW5jdXJyeVRoaXMoW10uY29uY2F0KTtcblxuLy8gYWxsIG9iamVjdCBrZXlzLCBpbmNsdWRlcyBub24tZW51bWVyYWJsZSBhbmQgc3ltYm9sc1xubW9kdWxlLmV4cG9ydHMgPSBnZXRCdWlsdEluKCdSZWZsZWN0JywgJ293bktleXMnKSB8fCBmdW5jdGlvbiBvd25LZXlzKGl0KSB7XG4gIHZhciBrZXlzID0gZ2V0T3duUHJvcGVydHlOYW1lc01vZHVsZS5mKGFuT2JqZWN0KGl0KSk7XG4gIHZhciBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPSBnZXRPd25Qcm9wZXJ0eVN5bWJvbHNNb2R1bGUuZjtcbiAgcmV0dXJuIGdldE93blByb3BlcnR5U3ltYm9scyA/IGNvbmNhdChrZXlzLCBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMoaXQpKSA6IGtleXM7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSB7fTtcbiIsIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGV4ZWMpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4geyBlcnJvcjogZmFsc2UsIHZhbHVlOiBleGVjKCkgfTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4geyBlcnJvcjogdHJ1ZSwgdmFsdWU6IGVycm9yIH07XG4gIH1cbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xudmFyIE5hdGl2ZVByb21pc2VDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9wcm9taXNlLW5hdGl2ZS1jb25zdHJ1Y3RvcicpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBpc0ZvcmNlZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1mb3JjZWQnKTtcbnZhciBpbnNwZWN0U291cmNlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2luc3BlY3Qtc291cmNlJyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG52YXIgRU5WSVJPTk1FTlQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW52aXJvbm1lbnQnKTtcbnZhciBJU19QVVJFID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXB1cmUnKTtcbnZhciBWOF9WRVJTSU9OID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Vudmlyb25tZW50LXY4LXZlcnNpb24nKTtcblxudmFyIE5hdGl2ZVByb21pc2VQcm90b3R5cGUgPSBOYXRpdmVQcm9taXNlQ29uc3RydWN0b3IgJiYgTmF0aXZlUHJvbWlzZUNvbnN0cnVjdG9yLnByb3RvdHlwZTtcbnZhciBTUEVDSUVTID0gd2VsbEtub3duU3ltYm9sKCdzcGVjaWVzJyk7XG52YXIgU1VCQ0xBU1NJTkcgPSBmYWxzZTtcbnZhciBOQVRJVkVfUFJPTUlTRV9SRUpFQ1RJT05fRVZFTlQgPSBpc0NhbGxhYmxlKGdsb2JhbFRoaXMuUHJvbWlzZVJlamVjdGlvbkV2ZW50KTtcblxudmFyIEZPUkNFRF9QUk9NSVNFX0NPTlNUUlVDVE9SID0gaXNGb3JjZWQoJ1Byb21pc2UnLCBmdW5jdGlvbiAoKSB7XG4gIHZhciBQUk9NSVNFX0NPTlNUUlVDVE9SX1NPVVJDRSA9IGluc3BlY3RTb3VyY2UoTmF0aXZlUHJvbWlzZUNvbnN0cnVjdG9yKTtcbiAgdmFyIEdMT0JBTF9DT1JFX0pTX1BST01JU0UgPSBQUk9NSVNFX0NPTlNUUlVDVE9SX1NPVVJDRSAhPT0gU3RyaW5nKE5hdGl2ZVByb21pc2VDb25zdHJ1Y3Rvcik7XG4gIC8vIFY4IDYuNiAoTm9kZSAxMCBhbmQgQ2hyb21lIDY2KSBoYXZlIGEgYnVnIHdpdGggcmVzb2x2aW5nIGN1c3RvbSB0aGVuYWJsZXNcbiAgLy8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL2Nocm9taXVtL2lzc3Vlcy9kZXRhaWw/aWQ9ODMwNTY1XG4gIC8vIFdlIGNhbid0IGRldGVjdCBpdCBzeW5jaHJvbm91c2x5LCBzbyBqdXN0IGNoZWNrIHZlcnNpb25zXG4gIGlmICghR0xPQkFMX0NPUkVfSlNfUFJPTUlTRSAmJiBWOF9WRVJTSU9OID09PSA2NikgcmV0dXJuIHRydWU7XG4gIC8vIFdlIG5lZWQgUHJvbWlzZSN7IGNhdGNoLCBmaW5hbGx5IH0gaW4gdGhlIHB1cmUgdmVyc2lvbiBmb3IgcHJldmVudGluZyBwcm90b3R5cGUgcG9sbHV0aW9uXG4gIGlmIChJU19QVVJFICYmICEoTmF0aXZlUHJvbWlzZVByb3RvdHlwZVsnY2F0Y2gnXSAmJiBOYXRpdmVQcm9taXNlUHJvdG90eXBlWydmaW5hbGx5J10pKSByZXR1cm4gdHJ1ZTtcbiAgLy8gV2UgY2FuJ3QgdXNlIEBAc3BlY2llcyBmZWF0dXJlIGRldGVjdGlvbiBpbiBWOCBzaW5jZSBpdCBjYXVzZXNcbiAgLy8gZGVvcHRpbWl6YXRpb24gYW5kIHBlcmZvcm1hbmNlIGRlZ3JhZGF0aW9uXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy82NzlcbiAgaWYgKCFWOF9WRVJTSU9OIHx8IFY4X1ZFUlNJT04gPCA1MSB8fCAhL25hdGl2ZSBjb2RlLy50ZXN0KFBST01JU0VfQ09OU1RSVUNUT1JfU09VUkNFKSkge1xuICAgIC8vIERldGVjdCBjb3JyZWN0bmVzcyBvZiBzdWJjbGFzc2luZyB3aXRoIEBAc3BlY2llcyBzdXBwb3J0XG4gICAgdmFyIHByb21pc2UgPSBuZXcgTmF0aXZlUHJvbWlzZUNvbnN0cnVjdG9yKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUoMSk7IH0pO1xuICAgIHZhciBGYWtlUHJvbWlzZSA9IGZ1bmN0aW9uIChleGVjKSB7XG4gICAgICBleGVjKGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfSwgZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9KTtcbiAgICB9O1xuICAgIHZhciBjb25zdHJ1Y3RvciA9IHByb21pc2UuY29uc3RydWN0b3IgPSB7fTtcbiAgICBjb25zdHJ1Y3RvcltTUEVDSUVTXSA9IEZha2VQcm9taXNlO1xuICAgIFNVQkNMQVNTSU5HID0gcHJvbWlzZS50aGVuKGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfSkgaW5zdGFuY2VvZiBGYWtlUHJvbWlzZTtcbiAgICBpZiAoIVNVQkNMQVNTSU5HKSByZXR1cm4gdHJ1ZTtcbiAgLy8gVW5oYW5kbGVkIHJlamVjdGlvbnMgdHJhY2tpbmcgc3VwcG9ydCwgTm9kZUpTIFByb21pc2Ugd2l0aG91dCBpdCBmYWlscyBAQHNwZWNpZXMgdGVzdFxuICB9IHJldHVybiAhR0xPQkFMX0NPUkVfSlNfUFJPTUlTRSAmJiAoRU5WSVJPTk1FTlQgPT09ICdCUk9XU0VSJyB8fCBFTlZJUk9OTUVOVCA9PT0gJ0RFTk8nKSAmJiAhTkFUSVZFX1BST01JU0VfUkVKRUNUSU9OX0VWRU5UO1xufSk7XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBDT05TVFJVQ1RPUjogRk9SQ0VEX1BST01JU0VfQ09OU1RSVUNUT1IsXG4gIFJFSkVDVElPTl9FVkVOVDogTkFUSVZFX1BST01JU0VfUkVKRUNUSU9OX0VWRU5ULFxuICBTVUJDTEFTU0lORzogU1VCQ0xBU1NJTkdcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGdsb2JhbFRoaXMuUHJvbWlzZTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciBuZXdQcm9taXNlQ2FwYWJpbGl0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9uZXctcHJvbWlzZS1jYXBhYmlsaXR5Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKEMsIHgpIHtcbiAgYW5PYmplY3QoQyk7XG4gIGlmIChpc09iamVjdCh4KSAmJiB4LmNvbnN0cnVjdG9yID09PSBDKSByZXR1cm4geDtcbiAgdmFyIHByb21pc2VDYXBhYmlsaXR5ID0gbmV3UHJvbWlzZUNhcGFiaWxpdHkuZihDKTtcbiAgdmFyIHJlc29sdmUgPSBwcm9taXNlQ2FwYWJpbGl0eS5yZXNvbHZlO1xuICByZXNvbHZlKHgpO1xuICByZXR1cm4gcHJvbWlzZUNhcGFiaWxpdHkucHJvbWlzZTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgTmF0aXZlUHJvbWlzZUNvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3Byb21pc2UtbmF0aXZlLWNvbnN0cnVjdG9yJyk7XG52YXIgY2hlY2tDb3JyZWN0bmVzc09mSXRlcmF0aW9uID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NoZWNrLWNvcnJlY3RuZXNzLW9mLWl0ZXJhdGlvbicpO1xudmFyIEZPUkNFRF9QUk9NSVNFX0NPTlNUUlVDVE9SID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3Byb21pc2UtY29uc3RydWN0b3ItZGV0ZWN0aW9uJykuQ09OU1RSVUNUT1I7XG5cbm1vZHVsZS5leHBvcnRzID0gRk9SQ0VEX1BST01JU0VfQ09OU1RSVUNUT1IgfHwgIWNoZWNrQ29ycmVjdG5lc3NPZkl0ZXJhdGlvbihmdW5jdGlvbiAoaXRlcmFibGUpIHtcbiAgTmF0aXZlUHJvbWlzZUNvbnN0cnVjdG9yLmFsbChpdGVyYWJsZSkudGhlbih1bmRlZmluZWQsIGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfSk7XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBRdWV1ZSA9IGZ1bmN0aW9uICgpIHtcbiAgdGhpcy5oZWFkID0gbnVsbDtcbiAgdGhpcy50YWlsID0gbnVsbDtcbn07XG5cblF1ZXVlLnByb3RvdHlwZSA9IHtcbiAgYWRkOiBmdW5jdGlvbiAoaXRlbSkge1xuICAgIHZhciBlbnRyeSA9IHsgaXRlbTogaXRlbSwgbmV4dDogbnVsbCB9O1xuICAgIHZhciB0YWlsID0gdGhpcy50YWlsO1xuICAgIGlmICh0YWlsKSB0YWlsLm5leHQgPSBlbnRyeTtcbiAgICBlbHNlIHRoaXMuaGVhZCA9IGVudHJ5O1xuICAgIHRoaXMudGFpbCA9IGVudHJ5O1xuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgZW50cnkgPSB0aGlzLmhlYWQ7XG4gICAgaWYgKGVudHJ5KSB7XG4gICAgICB2YXIgbmV4dCA9IHRoaXMuaGVhZCA9IGVudHJ5Lm5leHQ7XG4gICAgICBpZiAobmV4dCA9PT0gbnVsbCkgdGhpcy50YWlsID0gbnVsbDtcbiAgICAgIHJldHVybiBlbnRyeS5pdGVtO1xuICAgIH1cbiAgfVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBRdWV1ZTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBpc051bGxPclVuZGVmaW5lZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1udWxsLW9yLXVuZGVmaW5lZCcpO1xuXG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcblxuLy8gYFJlcXVpcmVPYmplY3RDb2VyY2libGVgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1yZXF1aXJlb2JqZWN0Y29lcmNpYmxlXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICBpZiAoaXNOdWxsT3JVbmRlZmluZWQoaXQpKSB0aHJvdyBuZXcgJFR5cGVFcnJvcihcIkNhbid0IGNhbGwgbWV0aG9kIG9uIFwiICsgaXQpO1xuICByZXR1cm4gaXQ7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5ZGVzY3JpcHRvciAtLSBzYWZlXG52YXIgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcblxuLy8gQXZvaWQgTm9kZUpTIGV4cGVyaW1lbnRhbCB3YXJuaW5nXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gIGlmICghREVTQ1JJUFRPUlMpIHJldHVybiBnbG9iYWxUaGlzW25hbWVdO1xuICB2YXIgZGVzY3JpcHRvciA9IGdldE93blByb3BlcnR5RGVzY3JpcHRvcihnbG9iYWxUaGlzLCBuYW1lKTtcbiAgcmV0dXJuIGRlc2NyaXB0b3IgJiYgZGVzY3JpcHRvci52YWx1ZTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xudmFyIGFwcGx5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWFwcGx5Jyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIEVOVklST05NRU5UID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Vudmlyb25tZW50Jyk7XG52YXIgVVNFUl9BR0VOVCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbnZpcm9ubWVudC11c2VyLWFnZW50Jyk7XG52YXIgYXJyYXlTbGljZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1zbGljZScpO1xudmFyIHZhbGlkYXRlQXJndW1lbnRzTGVuZ3RoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3ZhbGlkYXRlLWFyZ3VtZW50cy1sZW5ndGgnKTtcblxudmFyIEZ1bmN0aW9uID0gZ2xvYmFsVGhpcy5GdW5jdGlvbjtcbi8vIGRpcnR5IElFOS0gYW5kIEJ1biAwLjMuMC0gY2hlY2tzXG52YXIgV1JBUCA9IC9NU0lFIC5cXC4vLnRlc3QoVVNFUl9BR0VOVCkgfHwgRU5WSVJPTk1FTlQgPT09ICdCVU4nICYmIChmdW5jdGlvbiAoKSB7XG4gIHZhciB2ZXJzaW9uID0gZ2xvYmFsVGhpcy5CdW4udmVyc2lvbi5zcGxpdCgnLicpO1xuICByZXR1cm4gdmVyc2lvbi5sZW5ndGggPCAzIHx8IHZlcnNpb25bMF0gPT09ICcwJyAmJiAodmVyc2lvblsxXSA8IDMgfHwgdmVyc2lvblsxXSA9PT0gJzMnICYmIHZlcnNpb25bMl0gPT09ICcwJyk7XG59KSgpO1xuXG4vLyBJRTktIC8gQnVuIDAuMy4wLSBzZXRUaW1lb3V0IC8gc2V0SW50ZXJ2YWwgLyBzZXRJbW1lZGlhdGUgYWRkaXRpb25hbCBwYXJhbWV0ZXJzIGZpeFxuLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2UvdGltZXJzLWFuZC11c2VyLXByb21wdHMuaHRtbCN0aW1lcnNcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9vdmVuLXNoL2J1bi9pc3N1ZXMvMTYzM1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoc2NoZWR1bGVyLCBoYXNUaW1lQXJnKSB7XG4gIHZhciBmaXJzdFBhcmFtSW5kZXggPSBoYXNUaW1lQXJnID8gMiA6IDE7XG4gIHJldHVybiBXUkFQID8gZnVuY3Rpb24gKGhhbmRsZXIsIHRpbWVvdXQgLyogLCAuLi5hcmd1bWVudHMgKi8pIHtcbiAgICB2YXIgYm91bmRBcmdzID0gdmFsaWRhdGVBcmd1bWVudHNMZW5ndGgoYXJndW1lbnRzLmxlbmd0aCwgMSkgPiBmaXJzdFBhcmFtSW5kZXg7XG4gICAgdmFyIGZuID0gaXNDYWxsYWJsZShoYW5kbGVyKSA/IGhhbmRsZXIgOiBGdW5jdGlvbihoYW5kbGVyKTtcbiAgICB2YXIgcGFyYW1zID0gYm91bmRBcmdzID8gYXJyYXlTbGljZShhcmd1bWVudHMsIGZpcnN0UGFyYW1JbmRleCkgOiBbXTtcbiAgICB2YXIgY2FsbGJhY2sgPSBib3VuZEFyZ3MgPyBmdW5jdGlvbiAoKSB7XG4gICAgICBhcHBseShmbiwgdGhpcywgcGFyYW1zKTtcbiAgICB9IDogZm47XG4gICAgcmV0dXJuIGhhc1RpbWVBcmcgPyBzY2hlZHVsZXIoY2FsbGJhY2ssIHRpbWVvdXQpIDogc2NoZWR1bGVyKGNhbGxiYWNrKTtcbiAgfSA6IHNjaGVkdWxlcjtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgU2V0SGVscGVycyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtaGVscGVycycpO1xudmFyIGl0ZXJhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LWl0ZXJhdGUnKTtcblxudmFyIFNldCA9IFNldEhlbHBlcnMuU2V0O1xudmFyIGFkZCA9IFNldEhlbHBlcnMuYWRkO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChzZXQpIHtcbiAgdmFyIHJlc3VsdCA9IG5ldyBTZXQoKTtcbiAgaXRlcmF0ZShzZXQsIGZ1bmN0aW9uIChpdCkge1xuICAgIGFkZChyZXN1bHQsIGl0KTtcbiAgfSk7XG4gIHJldHVybiByZXN1bHQ7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGFTZXQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1zZXQnKTtcbnZhciBTZXRIZWxwZXJzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1oZWxwZXJzJyk7XG52YXIgY2xvbmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LWNsb25lJyk7XG52YXIgc2l6ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtc2l6ZScpO1xudmFyIGdldFNldFJlY29yZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtc2V0LXJlY29yZCcpO1xudmFyIGl0ZXJhdGVTZXQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LWl0ZXJhdGUnKTtcbnZhciBpdGVyYXRlU2ltcGxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdGUtc2ltcGxlJyk7XG5cbnZhciBoYXMgPSBTZXRIZWxwZXJzLmhhcztcbnZhciByZW1vdmUgPSBTZXRIZWxwZXJzLnJlbW92ZTtcblxuLy8gYFNldC5wcm90b3R5cGUuZGlmZmVyZW5jZWAgbWV0aG9kXG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1zZXQtbWV0aG9kc1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBkaWZmZXJlbmNlKG90aGVyKSB7XG4gIHZhciBPID0gYVNldCh0aGlzKTtcbiAgdmFyIG90aGVyUmVjID0gZ2V0U2V0UmVjb3JkKG90aGVyKTtcbiAgdmFyIHJlc3VsdCA9IGNsb25lKE8pO1xuICBpZiAoc2l6ZShPKSA8PSBvdGhlclJlYy5zaXplKSBpdGVyYXRlU2V0KE8sIGZ1bmN0aW9uIChlKSB7XG4gICAgaWYgKG90aGVyUmVjLmluY2x1ZGVzKGUpKSByZW1vdmUocmVzdWx0LCBlKTtcbiAgfSk7XG4gIGVsc2UgaXRlcmF0ZVNpbXBsZShvdGhlclJlYy5nZXRJdGVyYXRvcigpLCBmdW5jdGlvbiAoZSkge1xuICAgIGlmIChoYXMoTywgZSkpIHJlbW92ZShyZXN1bHQsIGUpO1xuICB9KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcbnZhciBjYWxsZXIgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2FsbGVyJyk7XG5cbnZhciBTZXQgPSBnZXRCdWlsdEluKCdTZXQnKTtcbnZhciBTZXRQcm90b3R5cGUgPSBTZXQucHJvdG90eXBlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgU2V0OiBTZXQsXG4gIGFkZDogY2FsbGVyKCdhZGQnLCAxKSxcbiAgaGFzOiBjYWxsZXIoJ2hhcycsIDEpLFxuICByZW1vdmU6IGNhbGxlcignZGVsZXRlJywgMSksXG4gIHByb3RvOiBTZXRQcm90b3R5cGVcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgYVNldCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLXNldCcpO1xudmFyIFNldEhlbHBlcnMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LWhlbHBlcnMnKTtcbnZhciBzaXplID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1zaXplJyk7XG52YXIgZ2V0U2V0UmVjb3JkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1zZXQtcmVjb3JkJyk7XG52YXIgaXRlcmF0ZVNldCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtaXRlcmF0ZScpO1xudmFyIGl0ZXJhdGVTaW1wbGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0ZS1zaW1wbGUnKTtcblxudmFyIFNldCA9IFNldEhlbHBlcnMuU2V0O1xudmFyIGFkZCA9IFNldEhlbHBlcnMuYWRkO1xudmFyIGhhcyA9IFNldEhlbHBlcnMuaGFzO1xuXG4vLyBgU2V0LnByb3RvdHlwZS5pbnRlcnNlY3Rpb25gIG1ldGhvZFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtc2V0LW1ldGhvZHNcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaW50ZXJzZWN0aW9uKG90aGVyKSB7XG4gIHZhciBPID0gYVNldCh0aGlzKTtcbiAgdmFyIG90aGVyUmVjID0gZ2V0U2V0UmVjb3JkKG90aGVyKTtcbiAgdmFyIHJlc3VsdCA9IG5ldyBTZXQoKTtcblxuICBpZiAoc2l6ZShPKSA+IG90aGVyUmVjLnNpemUpIHtcbiAgICBpdGVyYXRlU2ltcGxlKG90aGVyUmVjLmdldEl0ZXJhdG9yKCksIGZ1bmN0aW9uIChlKSB7XG4gICAgICBpZiAoaGFzKE8sIGUpKSBhZGQocmVzdWx0LCBlKTtcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBpdGVyYXRlU2V0KE8sIGZ1bmN0aW9uIChlKSB7XG4gICAgICBpZiAob3RoZXJSZWMuaW5jbHVkZXMoZSkpIGFkZChyZXN1bHQsIGUpO1xuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgYVNldCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLXNldCcpO1xudmFyIGhhcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtaGVscGVycycpLmhhcztcbnZhciBzaXplID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1zaXplJyk7XG52YXIgZ2V0U2V0UmVjb3JkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1zZXQtcmVjb3JkJyk7XG52YXIgaXRlcmF0ZVNldCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtaXRlcmF0ZScpO1xudmFyIGl0ZXJhdGVTaW1wbGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0ZS1zaW1wbGUnKTtcbnZhciBpdGVyYXRvckNsb3NlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdG9yLWNsb3NlJyk7XG5cbi8vIGBTZXQucHJvdG90eXBlLmlzRGlzam9pbnRGcm9tYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vcHJvcG9zYWwtc2V0LW1ldGhvZHMvI1NldC5wcm90b3R5cGUuaXNEaXNqb2ludEZyb21cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaXNEaXNqb2ludEZyb20ob3RoZXIpIHtcbiAgdmFyIE8gPSBhU2V0KHRoaXMpO1xuICB2YXIgb3RoZXJSZWMgPSBnZXRTZXRSZWNvcmQob3RoZXIpO1xuICBpZiAoc2l6ZShPKSA8PSBvdGhlclJlYy5zaXplKSByZXR1cm4gaXRlcmF0ZVNldChPLCBmdW5jdGlvbiAoZSkge1xuICAgIGlmIChvdGhlclJlYy5pbmNsdWRlcyhlKSkgcmV0dXJuIGZhbHNlO1xuICB9LCB0cnVlKSAhPT0gZmFsc2U7XG4gIHZhciBpdGVyYXRvciA9IG90aGVyUmVjLmdldEl0ZXJhdG9yKCk7XG4gIHJldHVybiBpdGVyYXRlU2ltcGxlKGl0ZXJhdG9yLCBmdW5jdGlvbiAoZSkge1xuICAgIGlmIChoYXMoTywgZSkpIHJldHVybiBpdGVyYXRvckNsb3NlKGl0ZXJhdG9yLCAnbm9ybWFsJywgZmFsc2UpO1xuICB9KSAhPT0gZmFsc2U7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGFTZXQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1zZXQnKTtcbnZhciBzaXplID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1zaXplJyk7XG52YXIgaXRlcmF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtaXRlcmF0ZScpO1xudmFyIGdldFNldFJlY29yZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtc2V0LXJlY29yZCcpO1xuXG4vLyBgU2V0LnByb3RvdHlwZS5pc1N1YnNldE9mYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vcHJvcG9zYWwtc2V0LW1ldGhvZHMvI1NldC5wcm90b3R5cGUuaXNTdWJzZXRPZlxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpc1N1YnNldE9mKG90aGVyKSB7XG4gIHZhciBPID0gYVNldCh0aGlzKTtcbiAgdmFyIG90aGVyUmVjID0gZ2V0U2V0UmVjb3JkKG90aGVyKTtcbiAgaWYgKHNpemUoTykgPiBvdGhlclJlYy5zaXplKSByZXR1cm4gZmFsc2U7XG4gIHJldHVybiBpdGVyYXRlKE8sIGZ1bmN0aW9uIChlKSB7XG4gICAgaWYgKCFvdGhlclJlYy5pbmNsdWRlcyhlKSkgcmV0dXJuIGZhbHNlO1xuICB9LCB0cnVlKSAhPT0gZmFsc2U7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGFTZXQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1zZXQnKTtcbnZhciBoYXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LWhlbHBlcnMnKS5oYXM7XG52YXIgc2l6ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtc2l6ZScpO1xudmFyIGdldFNldFJlY29yZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtc2V0LXJlY29yZCcpO1xudmFyIGl0ZXJhdGVTaW1wbGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0ZS1zaW1wbGUnKTtcbnZhciBpdGVyYXRvckNsb3NlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdG9yLWNsb3NlJyk7XG5cbi8vIGBTZXQucHJvdG90eXBlLmlzU3VwZXJzZXRPZmAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL3Byb3Bvc2FsLXNldC1tZXRob2RzLyNTZXQucHJvdG90eXBlLmlzU3VwZXJzZXRPZlxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpc1N1cGVyc2V0T2Yob3RoZXIpIHtcbiAgdmFyIE8gPSBhU2V0KHRoaXMpO1xuICB2YXIgb3RoZXJSZWMgPSBnZXRTZXRSZWNvcmQob3RoZXIpO1xuICBpZiAoc2l6ZShPKSA8IG90aGVyUmVjLnNpemUpIHJldHVybiBmYWxzZTtcbiAgdmFyIGl0ZXJhdG9yID0gb3RoZXJSZWMuZ2V0SXRlcmF0b3IoKTtcbiAgcmV0dXJuIGl0ZXJhdGVTaW1wbGUoaXRlcmF0b3IsIGZ1bmN0aW9uIChlKSB7XG4gICAgaWYgKCFoYXMoTywgZSkpIHJldHVybiBpdGVyYXRvckNsb3NlKGl0ZXJhdG9yLCAnbm9ybWFsJywgZmFsc2UpO1xuICB9KSAhPT0gZmFsc2U7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGl0ZXJhdGVTaW1wbGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0ZS1zaW1wbGUnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoc2V0LCBmbiwgaW50ZXJydXB0aWJsZSkge1xuICByZXR1cm4gaW50ZXJydXB0aWJsZSA/IGl0ZXJhdGVTaW1wbGUoc2V0LmtleXMoKSwgZm4sIHRydWUpIDogc2V0LmZvckVhY2goZm4pO1xufTtcbiIsIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gZmFsc2U7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoc2V0KSB7XG4gIHJldHVybiBzZXQuc2l6ZTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcbnZhciBkZWZpbmVCdWlsdEluQWNjZXNzb3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWluLWFjY2Vzc29yJyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcblxudmFyIFNQRUNJRVMgPSB3ZWxsS25vd25TeW1ib2woJ3NwZWNpZXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoQ09OU1RSVUNUT1JfTkFNRSkge1xuICB2YXIgQ29uc3RydWN0b3IgPSBnZXRCdWlsdEluKENPTlNUUlVDVE9SX05BTUUpO1xuXG4gIGlmIChERVNDUklQVE9SUyAmJiBDb25zdHJ1Y3RvciAmJiAhQ29uc3RydWN0b3JbU1BFQ0lFU10pIHtcbiAgICBkZWZpbmVCdWlsdEluQWNjZXNzb3IoQ29uc3RydWN0b3IsIFNQRUNJRVMsIHtcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfVxuICAgIH0pO1xuICB9XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGFTZXQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1zZXQnKTtcbnZhciBTZXRIZWxwZXJzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1oZWxwZXJzJyk7XG52YXIgY2xvbmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LWNsb25lJyk7XG52YXIgZ2V0U2V0UmVjb3JkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1zZXQtcmVjb3JkJyk7XG52YXIgaXRlcmF0ZVNpbXBsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRlLXNpbXBsZScpO1xuXG52YXIgYWRkID0gU2V0SGVscGVycy5hZGQ7XG52YXIgaGFzID0gU2V0SGVscGVycy5oYXM7XG52YXIgcmVtb3ZlID0gU2V0SGVscGVycy5yZW1vdmU7XG5cbi8vIGBTZXQucHJvdG90eXBlLnN5bW1ldHJpY0RpZmZlcmVuY2VgIG1ldGhvZFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtc2V0LW1ldGhvZHNcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gc3ltbWV0cmljRGlmZmVyZW5jZShvdGhlcikge1xuICB2YXIgTyA9IGFTZXQodGhpcyk7XG4gIHZhciBrZXlzSXRlciA9IGdldFNldFJlY29yZChvdGhlcikuZ2V0SXRlcmF0b3IoKTtcbiAgdmFyIHJlc3VsdCA9IGNsb25lKE8pO1xuICBpdGVyYXRlU2ltcGxlKGtleXNJdGVyLCBmdW5jdGlvbiAoZSkge1xuICAgIGlmIChoYXMoTywgZSkpIHJlbW92ZShyZXN1bHQsIGUpO1xuICAgIGVsc2UgYWRkKHJlc3VsdCwgZSk7XG4gIH0pO1xuICByZXR1cm4gcmVzdWx0O1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBUT19TVFJJTkdfVEFHX1NVUFBPUlQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tc3RyaW5nLXRhZy1zdXBwb3J0Jyk7XG52YXIgZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpLmY7XG52YXIgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1ub24tZW51bWVyYWJsZS1wcm9wZXJ0eScpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgdG9TdHJpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LXRvLXN0cmluZycpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xuXG52YXIgVE9fU1RSSU5HX1RBRyA9IHdlbGxLbm93blN5bWJvbCgndG9TdHJpbmdUYWcnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQsIFRBRywgU1RBVElDLCBTRVRfTUVUSE9EKSB7XG4gIHZhciB0YXJnZXQgPSBTVEFUSUMgPyBpdCA6IGl0ICYmIGl0LnByb3RvdHlwZTtcbiAgaWYgKHRhcmdldCkge1xuICAgIGlmICghaGFzT3duKHRhcmdldCwgVE9fU1RSSU5HX1RBRykpIHtcbiAgICAgIGRlZmluZVByb3BlcnR5KHRhcmdldCwgVE9fU1RSSU5HX1RBRywgeyBjb25maWd1cmFibGU6IHRydWUsIHZhbHVlOiBUQUcgfSk7XG4gICAgfVxuICAgIGlmIChTRVRfTUVUSE9EICYmICFUT19TVFJJTkdfVEFHX1NVUFBPUlQpIHtcbiAgICAgIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSh0YXJnZXQsICd0b1N0cmluZycsIHRvU3RyaW5nKTtcbiAgICB9XG4gIH1cbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgYVNldCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLXNldCcpO1xudmFyIGFkZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtaGVscGVycycpLmFkZDtcbnZhciBjbG9uZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtY2xvbmUnKTtcbnZhciBnZXRTZXRSZWNvcmQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LXNldC1yZWNvcmQnKTtcbnZhciBpdGVyYXRlU2ltcGxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdGUtc2ltcGxlJyk7XG5cbi8vIGBTZXQucHJvdG90eXBlLnVuaW9uYCBtZXRob2Rcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLXNldC1tZXRob2RzXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHVuaW9uKG90aGVyKSB7XG4gIHZhciBPID0gYVNldCh0aGlzKTtcbiAgdmFyIGtleXNJdGVyID0gZ2V0U2V0UmVjb3JkKG90aGVyKS5nZXRJdGVyYXRvcigpO1xuICB2YXIgcmVzdWx0ID0gY2xvbmUoTyk7XG4gIGl0ZXJhdGVTaW1wbGUoa2V5c0l0ZXIsIGZ1bmN0aW9uIChpdCkge1xuICAgIGFkZChyZXN1bHQsIGl0KTtcbiAgfSk7XG4gIHJldHVybiByZXN1bHQ7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHNoYXJlZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQnKTtcbnZhciB1aWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdWlkJyk7XG5cbnZhciBrZXlzID0gc2hhcmVkKCdrZXlzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGtleSkge1xuICByZXR1cm4ga2V5c1trZXldIHx8IChrZXlzW2tleV0gPSB1aWQoa2V5KSk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIElTX1BVUkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtcHVyZScpO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcbnZhciBkZWZpbmVHbG9iYWxQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtZ2xvYmFsLXByb3BlcnR5Jyk7XG5cbnZhciBTSEFSRUQgPSAnX19jb3JlLWpzX3NoYXJlZF9fJztcbnZhciBzdG9yZSA9IG1vZHVsZS5leHBvcnRzID0gZ2xvYmFsVGhpc1tTSEFSRURdIHx8IGRlZmluZUdsb2JhbFByb3BlcnR5KFNIQVJFRCwge30pO1xuXG4oc3RvcmUudmVyc2lvbnMgfHwgKHN0b3JlLnZlcnNpb25zID0gW10pKS5wdXNoKHtcbiAgdmVyc2lvbjogJzMuMzguMScsXG4gIG1vZGU6IElTX1BVUkUgPyAncHVyZScgOiAnZ2xvYmFsJyxcbiAgY29weXJpZ2h0OiAnwqkgMjAxNC0yMDI0IERlbmlzIFB1c2hrYXJldiAoemxvaXJvY2sucnUpJyxcbiAgbGljZW5zZTogJ2h0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2Jsb2IvdjMuMzguMS9MSUNFTlNFJyxcbiAgc291cmNlOiAnaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMnXG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBzdG9yZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQtc3RvcmUnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICByZXR1cm4gc3RvcmVba2V5XSB8fCAoc3RvcmVba2V5XSA9IHZhbHVlIHx8IHt9KTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgYUNvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2EtY29uc3RydWN0b3InKTtcbnZhciBpc051bGxPclVuZGVmaW5lZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1udWxsLW9yLXVuZGVmaW5lZCcpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xuXG52YXIgU1BFQ0lFUyA9IHdlbGxLbm93blN5bWJvbCgnc3BlY2llcycpO1xuXG4vLyBgU3BlY2llc0NvbnN0cnVjdG9yYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3BlY2llc2NvbnN0cnVjdG9yXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChPLCBkZWZhdWx0Q29uc3RydWN0b3IpIHtcbiAgdmFyIEMgPSBhbk9iamVjdChPKS5jb25zdHJ1Y3RvcjtcbiAgdmFyIFM7XG4gIHJldHVybiBDID09PSB1bmRlZmluZWQgfHwgaXNOdWxsT3JVbmRlZmluZWQoUyA9IGFuT2JqZWN0KEMpW1NQRUNJRVNdKSA/IGRlZmF1bHRDb25zdHJ1Y3RvciA6IGFDb25zdHJ1Y3RvcihTKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgdG9JbnRlZ2VyT3JJbmZpbml0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbnRlZ2VyLW9yLWluZmluaXR5Jyk7XG52YXIgdG9TdHJpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tc3RyaW5nJyk7XG52YXIgcmVxdWlyZU9iamVjdENvZXJjaWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZXF1aXJlLW9iamVjdC1jb2VyY2libGUnKTtcblxudmFyIGNoYXJBdCA9IHVuY3VycnlUaGlzKCcnLmNoYXJBdCk7XG52YXIgY2hhckNvZGVBdCA9IHVuY3VycnlUaGlzKCcnLmNoYXJDb2RlQXQpO1xudmFyIHN0cmluZ1NsaWNlID0gdW5jdXJyeVRoaXMoJycuc2xpY2UpO1xuXG52YXIgY3JlYXRlTWV0aG9kID0gZnVuY3Rpb24gKENPTlZFUlRfVE9fU1RSSU5HKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoJHRoaXMsIHBvcykge1xuICAgIHZhciBTID0gdG9TdHJpbmcocmVxdWlyZU9iamVjdENvZXJjaWJsZSgkdGhpcykpO1xuICAgIHZhciBwb3NpdGlvbiA9IHRvSW50ZWdlck9ySW5maW5pdHkocG9zKTtcbiAgICB2YXIgc2l6ZSA9IFMubGVuZ3RoO1xuICAgIHZhciBmaXJzdCwgc2Vjb25kO1xuICAgIGlmIChwb3NpdGlvbiA8IDAgfHwgcG9zaXRpb24gPj0gc2l6ZSkgcmV0dXJuIENPTlZFUlRfVE9fU1RSSU5HID8gJycgOiB1bmRlZmluZWQ7XG4gICAgZmlyc3QgPSBjaGFyQ29kZUF0KFMsIHBvc2l0aW9uKTtcbiAgICByZXR1cm4gZmlyc3QgPCAweEQ4MDAgfHwgZmlyc3QgPiAweERCRkYgfHwgcG9zaXRpb24gKyAxID09PSBzaXplXG4gICAgICB8fCAoc2Vjb25kID0gY2hhckNvZGVBdChTLCBwb3NpdGlvbiArIDEpKSA8IDB4REMwMCB8fCBzZWNvbmQgPiAweERGRkZcbiAgICAgICAgPyBDT05WRVJUX1RPX1NUUklOR1xuICAgICAgICAgID8gY2hhckF0KFMsIHBvc2l0aW9uKVxuICAgICAgICAgIDogZmlyc3RcbiAgICAgICAgOiBDT05WRVJUX1RPX1NUUklOR1xuICAgICAgICAgID8gc3RyaW5nU2xpY2UoUywgcG9zaXRpb24sIHBvc2l0aW9uICsgMilcbiAgICAgICAgICA6IChmaXJzdCAtIDB4RDgwMCA8PCAxMCkgKyAoc2Vjb25kIC0gMHhEQzAwKSArIDB4MTAwMDA7XG4gIH07XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgLy8gYFN0cmluZy5wcm90b3R5cGUuY29kZVBvaW50QXRgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN0cmluZy5wcm90b3R5cGUuY29kZXBvaW50YXRcbiAgY29kZUF0OiBjcmVhdGVNZXRob2QoZmFsc2UpLFxuICAvLyBgU3RyaW5nLnByb3RvdHlwZS5hdGAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9tYXRoaWFzYnluZW5zL1N0cmluZy5wcm90b3R5cGUuYXRcbiAgY2hhckF0OiBjcmVhdGVNZXRob2QodHJ1ZSlcbn07XG4iLCIndXNlIHN0cmljdCc7XG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1zdHJpbmctcGFkLXN0YXJ0LWVuZFxudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWxlbmd0aCcpO1xudmFyIHRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXN0cmluZycpO1xudmFyICRyZXBlYXQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3RyaW5nLXJlcGVhdCcpO1xudmFyIHJlcXVpcmVPYmplY3RDb2VyY2libGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVxdWlyZS1vYmplY3QtY29lcmNpYmxlJyk7XG5cbnZhciByZXBlYXQgPSB1bmN1cnJ5VGhpcygkcmVwZWF0KTtcbnZhciBzdHJpbmdTbGljZSA9IHVuY3VycnlUaGlzKCcnLnNsaWNlKTtcbnZhciBjZWlsID0gTWF0aC5jZWlsO1xuXG4vLyBgU3RyaW5nLnByb3RvdHlwZS57IHBhZFN0YXJ0LCBwYWRFbmQgfWAgbWV0aG9kcyBpbXBsZW1lbnRhdGlvblxudmFyIGNyZWF0ZU1ldGhvZCA9IGZ1bmN0aW9uIChJU19FTkQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgkdGhpcywgbWF4TGVuZ3RoLCBmaWxsU3RyaW5nKSB7XG4gICAgdmFyIFMgPSB0b1N0cmluZyhyZXF1aXJlT2JqZWN0Q29lcmNpYmxlKCR0aGlzKSk7XG4gICAgdmFyIGludE1heExlbmd0aCA9IHRvTGVuZ3RoKG1heExlbmd0aCk7XG4gICAgdmFyIHN0cmluZ0xlbmd0aCA9IFMubGVuZ3RoO1xuICAgIHZhciBmaWxsU3RyID0gZmlsbFN0cmluZyA9PT0gdW5kZWZpbmVkID8gJyAnIDogdG9TdHJpbmcoZmlsbFN0cmluZyk7XG4gICAgdmFyIGZpbGxMZW4sIHN0cmluZ0ZpbGxlcjtcbiAgICBpZiAoaW50TWF4TGVuZ3RoIDw9IHN0cmluZ0xlbmd0aCB8fCBmaWxsU3RyID09PSAnJykgcmV0dXJuIFM7XG4gICAgZmlsbExlbiA9IGludE1heExlbmd0aCAtIHN0cmluZ0xlbmd0aDtcbiAgICBzdHJpbmdGaWxsZXIgPSByZXBlYXQoZmlsbFN0ciwgY2VpbChmaWxsTGVuIC8gZmlsbFN0ci5sZW5ndGgpKTtcbiAgICBpZiAoc3RyaW5nRmlsbGVyLmxlbmd0aCA+IGZpbGxMZW4pIHN0cmluZ0ZpbGxlciA9IHN0cmluZ1NsaWNlKHN0cmluZ0ZpbGxlciwgMCwgZmlsbExlbik7XG4gICAgcmV0dXJuIElTX0VORCA/IFMgKyBzdHJpbmdGaWxsZXIgOiBzdHJpbmdGaWxsZXIgKyBTO1xuICB9O1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIC8vIGBTdHJpbmcucHJvdG90eXBlLnBhZFN0YXJ0YCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zdHJpbmcucHJvdG90eXBlLnBhZHN0YXJ0XG4gIHN0YXJ0OiBjcmVhdGVNZXRob2QoZmFsc2UpLFxuICAvLyBgU3RyaW5nLnByb3RvdHlwZS5wYWRFbmRgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN0cmluZy5wcm90b3R5cGUucGFkZW5kXG4gIGVuZDogY3JlYXRlTWV0aG9kKHRydWUpXG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gYmFzZWQgb24gaHR0cHM6Ly9naXRodWIuY29tL2Jlc3RpZWpzL3B1bnljb2RlLmpzL2Jsb2IvbWFzdGVyL3B1bnljb2RlLmpzXG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG5cbnZhciBtYXhJbnQgPSAyMTQ3NDgzNjQ3OyAvLyBha2EuIDB4N0ZGRkZGRkYgb3IgMl4zMS0xXG52YXIgYmFzZSA9IDM2O1xudmFyIHRNaW4gPSAxO1xudmFyIHRNYXggPSAyNjtcbnZhciBza2V3ID0gMzg7XG52YXIgZGFtcCA9IDcwMDtcbnZhciBpbml0aWFsQmlhcyA9IDcyO1xudmFyIGluaXRpYWxOID0gMTI4OyAvLyAweDgwXG52YXIgZGVsaW1pdGVyID0gJy0nOyAvLyAnXFx4MkQnXG52YXIgcmVnZXhOb25BU0NJSSA9IC9bXlxcMC1cXHUwMDdFXS87IC8vIG5vbi1BU0NJSSBjaGFyc1xudmFyIHJlZ2V4U2VwYXJhdG9ycyA9IC9bLlxcdTMwMDJcXHVGRjBFXFx1RkY2MV0vZzsgLy8gUkZDIDM0OTAgc2VwYXJhdG9yc1xudmFyIE9WRVJGTE9XX0VSUk9SID0gJ092ZXJmbG93OiBpbnB1dCBuZWVkcyB3aWRlciBpbnRlZ2VycyB0byBwcm9jZXNzJztcbnZhciBiYXNlTWludXNUTWluID0gYmFzZSAtIHRNaW47XG5cbnZhciAkUmFuZ2VFcnJvciA9IFJhbmdlRXJyb3I7XG52YXIgZXhlYyA9IHVuY3VycnlUaGlzKHJlZ2V4U2VwYXJhdG9ycy5leGVjKTtcbnZhciBmbG9vciA9IE1hdGguZmxvb3I7XG52YXIgZnJvbUNoYXJDb2RlID0gU3RyaW5nLmZyb21DaGFyQ29kZTtcbnZhciBjaGFyQ29kZUF0ID0gdW5jdXJyeVRoaXMoJycuY2hhckNvZGVBdCk7XG52YXIgam9pbiA9IHVuY3VycnlUaGlzKFtdLmpvaW4pO1xudmFyIHB1c2ggPSB1bmN1cnJ5VGhpcyhbXS5wdXNoKTtcbnZhciByZXBsYWNlID0gdW5jdXJyeVRoaXMoJycucmVwbGFjZSk7XG52YXIgc3BsaXQgPSB1bmN1cnJ5VGhpcygnJy5zcGxpdCk7XG52YXIgdG9Mb3dlckNhc2UgPSB1bmN1cnJ5VGhpcygnJy50b0xvd2VyQ2FzZSk7XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBhcnJheSBjb250YWluaW5nIHRoZSBudW1lcmljIGNvZGUgcG9pbnRzIG9mIGVhY2ggVW5pY29kZVxuICogY2hhcmFjdGVyIGluIHRoZSBzdHJpbmcuIFdoaWxlIEphdmFTY3JpcHQgdXNlcyBVQ1MtMiBpbnRlcm5hbGx5LFxuICogdGhpcyBmdW5jdGlvbiB3aWxsIGNvbnZlcnQgYSBwYWlyIG9mIHN1cnJvZ2F0ZSBoYWx2ZXMgKGVhY2ggb2Ygd2hpY2hcbiAqIFVDUy0yIGV4cG9zZXMgYXMgc2VwYXJhdGUgY2hhcmFjdGVycykgaW50byBhIHNpbmdsZSBjb2RlIHBvaW50LFxuICogbWF0Y2hpbmcgVVRGLTE2LlxuICovXG52YXIgdWNzMmRlY29kZSA9IGZ1bmN0aW9uIChzdHJpbmcpIHtcbiAgdmFyIG91dHB1dCA9IFtdO1xuICB2YXIgY291bnRlciA9IDA7XG4gIHZhciBsZW5ndGggPSBzdHJpbmcubGVuZ3RoO1xuICB3aGlsZSAoY291bnRlciA8IGxlbmd0aCkge1xuICAgIHZhciB2YWx1ZSA9IGNoYXJDb2RlQXQoc3RyaW5nLCBjb3VudGVyKyspO1xuICAgIGlmICh2YWx1ZSA+PSAweEQ4MDAgJiYgdmFsdWUgPD0gMHhEQkZGICYmIGNvdW50ZXIgPCBsZW5ndGgpIHtcbiAgICAgIC8vIEl0J3MgYSBoaWdoIHN1cnJvZ2F0ZSwgYW5kIHRoZXJlIGlzIGEgbmV4dCBjaGFyYWN0ZXIuXG4gICAgICB2YXIgZXh0cmEgPSBjaGFyQ29kZUF0KHN0cmluZywgY291bnRlcisrKTtcbiAgICAgIGlmICgoZXh0cmEgJiAweEZDMDApID09PSAweERDMDApIHsgLy8gTG93IHN1cnJvZ2F0ZS5cbiAgICAgICAgcHVzaChvdXRwdXQsICgodmFsdWUgJiAweDNGRikgPDwgMTApICsgKGV4dHJhICYgMHgzRkYpICsgMHgxMDAwMCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBJdCdzIGFuIHVubWF0Y2hlZCBzdXJyb2dhdGU7IG9ubHkgYXBwZW5kIHRoaXMgY29kZSB1bml0LCBpbiBjYXNlIHRoZVxuICAgICAgICAvLyBuZXh0IGNvZGUgdW5pdCBpcyB0aGUgaGlnaCBzdXJyb2dhdGUgb2YgYSBzdXJyb2dhdGUgcGFpci5cbiAgICAgICAgcHVzaChvdXRwdXQsIHZhbHVlKTtcbiAgICAgICAgY291bnRlci0tO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBwdXNoKG91dHB1dCwgdmFsdWUpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gb3V0cHV0O1xufTtcblxuLyoqXG4gKiBDb252ZXJ0cyBhIGRpZ2l0L2ludGVnZXIgaW50byBhIGJhc2ljIGNvZGUgcG9pbnQuXG4gKi9cbnZhciBkaWdpdFRvQmFzaWMgPSBmdW5jdGlvbiAoZGlnaXQpIHtcbiAgLy8gIDAuLjI1IG1hcCB0byBBU0NJSSBhLi56IG9yIEEuLlpcbiAgLy8gMjYuLjM1IG1hcCB0byBBU0NJSSAwLi45XG4gIHJldHVybiBkaWdpdCArIDIyICsgNzUgKiAoZGlnaXQgPCAyNik7XG59O1xuXG4vKipcbiAqIEJpYXMgYWRhcHRhdGlvbiBmdW5jdGlvbiBhcyBwZXIgc2VjdGlvbiAzLjQgb2YgUkZDIDM0OTIuXG4gKiBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMzQ5MiNzZWN0aW9uLTMuNFxuICovXG52YXIgYWRhcHQgPSBmdW5jdGlvbiAoZGVsdGEsIG51bVBvaW50cywgZmlyc3RUaW1lKSB7XG4gIHZhciBrID0gMDtcbiAgZGVsdGEgPSBmaXJzdFRpbWUgPyBmbG9vcihkZWx0YSAvIGRhbXApIDogZGVsdGEgPj4gMTtcbiAgZGVsdGEgKz0gZmxvb3IoZGVsdGEgLyBudW1Qb2ludHMpO1xuICB3aGlsZSAoZGVsdGEgPiBiYXNlTWludXNUTWluICogdE1heCA+PiAxKSB7XG4gICAgZGVsdGEgPSBmbG9vcihkZWx0YSAvIGJhc2VNaW51c1RNaW4pO1xuICAgIGsgKz0gYmFzZTtcbiAgfVxuICByZXR1cm4gZmxvb3IoayArIChiYXNlTWludXNUTWluICsgMSkgKiBkZWx0YSAvIChkZWx0YSArIHNrZXcpKTtcbn07XG5cbi8qKlxuICogQ29udmVydHMgYSBzdHJpbmcgb2YgVW5pY29kZSBzeW1ib2xzIChlLmcuIGEgZG9tYWluIG5hbWUgbGFiZWwpIHRvIGFcbiAqIFB1bnljb2RlIHN0cmluZyBvZiBBU0NJSS1vbmx5IHN5bWJvbHMuXG4gKi9cbnZhciBlbmNvZGUgPSBmdW5jdGlvbiAoaW5wdXQpIHtcbiAgdmFyIG91dHB1dCA9IFtdO1xuXG4gIC8vIENvbnZlcnQgdGhlIGlucHV0IGluIFVDUy0yIHRvIGFuIGFycmF5IG9mIFVuaWNvZGUgY29kZSBwb2ludHMuXG4gIGlucHV0ID0gdWNzMmRlY29kZShpbnB1dCk7XG5cbiAgLy8gQ2FjaGUgdGhlIGxlbmd0aC5cbiAgdmFyIGlucHV0TGVuZ3RoID0gaW5wdXQubGVuZ3RoO1xuXG4gIC8vIEluaXRpYWxpemUgdGhlIHN0YXRlLlxuICB2YXIgbiA9IGluaXRpYWxOO1xuICB2YXIgZGVsdGEgPSAwO1xuICB2YXIgYmlhcyA9IGluaXRpYWxCaWFzO1xuICB2YXIgaSwgY3VycmVudFZhbHVlO1xuXG4gIC8vIEhhbmRsZSB0aGUgYmFzaWMgY29kZSBwb2ludHMuXG4gIGZvciAoaSA9IDA7IGkgPCBpbnB1dC5sZW5ndGg7IGkrKykge1xuICAgIGN1cnJlbnRWYWx1ZSA9IGlucHV0W2ldO1xuICAgIGlmIChjdXJyZW50VmFsdWUgPCAweDgwKSB7XG4gICAgICBwdXNoKG91dHB1dCwgZnJvbUNoYXJDb2RlKGN1cnJlbnRWYWx1ZSkpO1xuICAgIH1cbiAgfVxuXG4gIHZhciBiYXNpY0xlbmd0aCA9IG91dHB1dC5sZW5ndGg7IC8vIG51bWJlciBvZiBiYXNpYyBjb2RlIHBvaW50cy5cbiAgdmFyIGhhbmRsZWRDUENvdW50ID0gYmFzaWNMZW5ndGg7IC8vIG51bWJlciBvZiBjb2RlIHBvaW50cyB0aGF0IGhhdmUgYmVlbiBoYW5kbGVkO1xuXG4gIC8vIEZpbmlzaCB0aGUgYmFzaWMgc3RyaW5nIHdpdGggYSBkZWxpbWl0ZXIgdW5sZXNzIGl0J3MgZW1wdHkuXG4gIGlmIChiYXNpY0xlbmd0aCkge1xuICAgIHB1c2gob3V0cHV0LCBkZWxpbWl0ZXIpO1xuICB9XG5cbiAgLy8gTWFpbiBlbmNvZGluZyBsb29wOlxuICB3aGlsZSAoaGFuZGxlZENQQ291bnQgPCBpbnB1dExlbmd0aCkge1xuICAgIC8vIEFsbCBub24tYmFzaWMgY29kZSBwb2ludHMgPCBuIGhhdmUgYmVlbiBoYW5kbGVkIGFscmVhZHkuIEZpbmQgdGhlIG5leHQgbGFyZ2VyIG9uZTpcbiAgICB2YXIgbSA9IG1heEludDtcbiAgICBmb3IgKGkgPSAwOyBpIDwgaW5wdXQubGVuZ3RoOyBpKyspIHtcbiAgICAgIGN1cnJlbnRWYWx1ZSA9IGlucHV0W2ldO1xuICAgICAgaWYgKGN1cnJlbnRWYWx1ZSA+PSBuICYmIGN1cnJlbnRWYWx1ZSA8IG0pIHtcbiAgICAgICAgbSA9IGN1cnJlbnRWYWx1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBJbmNyZWFzZSBgZGVsdGFgIGVub3VnaCB0byBhZHZhbmNlIHRoZSBkZWNvZGVyJ3MgPG4saT4gc3RhdGUgdG8gPG0sMD4sIGJ1dCBndWFyZCBhZ2FpbnN0IG92ZXJmbG93LlxuICAgIHZhciBoYW5kbGVkQ1BDb3VudFBsdXNPbmUgPSBoYW5kbGVkQ1BDb3VudCArIDE7XG4gICAgaWYgKG0gLSBuID4gZmxvb3IoKG1heEludCAtIGRlbHRhKSAvIGhhbmRsZWRDUENvdW50UGx1c09uZSkpIHtcbiAgICAgIHRocm93IG5ldyAkUmFuZ2VFcnJvcihPVkVSRkxPV19FUlJPUik7XG4gICAgfVxuXG4gICAgZGVsdGEgKz0gKG0gLSBuKSAqIGhhbmRsZWRDUENvdW50UGx1c09uZTtcbiAgICBuID0gbTtcblxuICAgIGZvciAoaSA9IDA7IGkgPCBpbnB1dC5sZW5ndGg7IGkrKykge1xuICAgICAgY3VycmVudFZhbHVlID0gaW5wdXRbaV07XG4gICAgICBpZiAoY3VycmVudFZhbHVlIDwgbiAmJiArK2RlbHRhID4gbWF4SW50KSB7XG4gICAgICAgIHRocm93IG5ldyAkUmFuZ2VFcnJvcihPVkVSRkxPV19FUlJPUik7XG4gICAgICB9XG4gICAgICBpZiAoY3VycmVudFZhbHVlID09PSBuKSB7XG4gICAgICAgIC8vIFJlcHJlc2VudCBkZWx0YSBhcyBhIGdlbmVyYWxpemVkIHZhcmlhYmxlLWxlbmd0aCBpbnRlZ2VyLlxuICAgICAgICB2YXIgcSA9IGRlbHRhO1xuICAgICAgICB2YXIgayA9IGJhc2U7XG4gICAgICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgICAgdmFyIHQgPSBrIDw9IGJpYXMgPyB0TWluIDogayA+PSBiaWFzICsgdE1heCA/IHRNYXggOiBrIC0gYmlhcztcbiAgICAgICAgICBpZiAocSA8IHQpIGJyZWFrO1xuICAgICAgICAgIHZhciBxTWludXNUID0gcSAtIHQ7XG4gICAgICAgICAgdmFyIGJhc2VNaW51c1QgPSBiYXNlIC0gdDtcbiAgICAgICAgICBwdXNoKG91dHB1dCwgZnJvbUNoYXJDb2RlKGRpZ2l0VG9CYXNpYyh0ICsgcU1pbnVzVCAlIGJhc2VNaW51c1QpKSk7XG4gICAgICAgICAgcSA9IGZsb29yKHFNaW51c1QgLyBiYXNlTWludXNUKTtcbiAgICAgICAgICBrICs9IGJhc2U7XG4gICAgICAgIH1cblxuICAgICAgICBwdXNoKG91dHB1dCwgZnJvbUNoYXJDb2RlKGRpZ2l0VG9CYXNpYyhxKSkpO1xuICAgICAgICBiaWFzID0gYWRhcHQoZGVsdGEsIGhhbmRsZWRDUENvdW50UGx1c09uZSwgaGFuZGxlZENQQ291bnQgPT09IGJhc2ljTGVuZ3RoKTtcbiAgICAgICAgZGVsdGEgPSAwO1xuICAgICAgICBoYW5kbGVkQ1BDb3VudCsrO1xuICAgICAgfVxuICAgIH1cblxuICAgIGRlbHRhKys7XG4gICAgbisrO1xuICB9XG4gIHJldHVybiBqb2luKG91dHB1dCwgJycpO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaW5wdXQpIHtcbiAgdmFyIGVuY29kZWQgPSBbXTtcbiAgdmFyIGxhYmVscyA9IHNwbGl0KHJlcGxhY2UodG9Mb3dlckNhc2UoaW5wdXQpLCByZWdleFNlcGFyYXRvcnMsICdcXHUwMDJFJyksICcuJyk7XG4gIHZhciBpLCBsYWJlbDtcbiAgZm9yIChpID0gMDsgaSA8IGxhYmVscy5sZW5ndGg7IGkrKykge1xuICAgIGxhYmVsID0gbGFiZWxzW2ldO1xuICAgIHB1c2goZW5jb2RlZCwgZXhlYyhyZWdleE5vbkFTQ0lJLCBsYWJlbCkgPyAneG4tLScgKyBlbmNvZGUobGFiZWwpIDogbGFiZWwpO1xuICB9XG4gIHJldHVybiBqb2luKGVuY29kZWQsICcuJyk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHRvSW50ZWdlck9ySW5maW5pdHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW50ZWdlci1vci1pbmZpbml0eScpO1xudmFyIHRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXN0cmluZycpO1xudmFyIHJlcXVpcmVPYmplY3RDb2VyY2libGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVxdWlyZS1vYmplY3QtY29lcmNpYmxlJyk7XG5cbnZhciAkUmFuZ2VFcnJvciA9IFJhbmdlRXJyb3I7XG5cbi8vIGBTdHJpbmcucHJvdG90eXBlLnJlcGVhdGAgbWV0aG9kIGltcGxlbWVudGF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN0cmluZy5wcm90b3R5cGUucmVwZWF0XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHJlcGVhdChjb3VudCkge1xuICB2YXIgc3RyID0gdG9TdHJpbmcocmVxdWlyZU9iamVjdENvZXJjaWJsZSh0aGlzKSk7XG4gIHZhciByZXN1bHQgPSAnJztcbiAgdmFyIG4gPSB0b0ludGVnZXJPckluZmluaXR5KGNvdW50KTtcbiAgaWYgKG4gPCAwIHx8IG4gPT09IEluZmluaXR5KSB0aHJvdyBuZXcgJFJhbmdlRXJyb3IoJ1dyb25nIG51bWJlciBvZiByZXBldGl0aW9ucycpO1xuICBmb3IgKDtuID4gMDsgKG4gPj4+PSAxKSAmJiAoc3RyICs9IHN0cikpIGlmIChuICYgMSkgcmVzdWx0ICs9IHN0cjtcbiAgcmV0dXJuIHJlc3VsdDtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgUFJPUEVSX0ZVTkNUSU9OX05BTUUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tbmFtZScpLlBST1BFUjtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIHdoaXRlc3BhY2VzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3doaXRlc3BhY2VzJyk7XG5cbnZhciBub24gPSAnXFx1MjAwQlxcdTAwODVcXHUxODBFJztcblxuLy8gY2hlY2sgdGhhdCBhIG1ldGhvZCB3b3JrcyB3aXRoIHRoZSBjb3JyZWN0IGxpc3Rcbi8vIG9mIHdoaXRlc3BhY2VzIGFuZCBoYXMgYSBjb3JyZWN0IG5hbWVcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKE1FVEhPRF9OQU1FKSB7XG4gIHJldHVybiBmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuICEhd2hpdGVzcGFjZXNbTUVUSE9EX05BTUVdKClcbiAgICAgIHx8IG5vbltNRVRIT0RfTkFNRV0oKSAhPT0gbm9uXG4gICAgICB8fCAoUFJPUEVSX0ZVTkNUSU9OX05BTUUgJiYgd2hpdGVzcGFjZXNbTUVUSE9EX05BTUVdLm5hbWUgIT09IE1FVEhPRF9OQU1FKTtcbiAgfSk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIHJlcXVpcmVPYmplY3RDb2VyY2libGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVxdWlyZS1vYmplY3QtY29lcmNpYmxlJyk7XG52YXIgdG9TdHJpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tc3RyaW5nJyk7XG52YXIgd2hpdGVzcGFjZXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2hpdGVzcGFjZXMnKTtcblxudmFyIHJlcGxhY2UgPSB1bmN1cnJ5VGhpcygnJy5yZXBsYWNlKTtcbnZhciBsdHJpbSA9IFJlZ0V4cCgnXlsnICsgd2hpdGVzcGFjZXMgKyAnXSsnKTtcbnZhciBydHJpbSA9IFJlZ0V4cCgnKF58W14nICsgd2hpdGVzcGFjZXMgKyAnXSlbJyArIHdoaXRlc3BhY2VzICsgJ10rJCcpO1xuXG4vLyBgU3RyaW5nLnByb3RvdHlwZS57IHRyaW0sIHRyaW1TdGFydCwgdHJpbUVuZCwgdHJpbUxlZnQsIHRyaW1SaWdodCB9YCBtZXRob2RzIGltcGxlbWVudGF0aW9uXG52YXIgY3JlYXRlTWV0aG9kID0gZnVuY3Rpb24gKFRZUEUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgkdGhpcykge1xuICAgIHZhciBzdHJpbmcgPSB0b1N0cmluZyhyZXF1aXJlT2JqZWN0Q29lcmNpYmxlKCR0aGlzKSk7XG4gICAgaWYgKFRZUEUgJiAxKSBzdHJpbmcgPSByZXBsYWNlKHN0cmluZywgbHRyaW0sICcnKTtcbiAgICBpZiAoVFlQRSAmIDIpIHN0cmluZyA9IHJlcGxhY2Uoc3RyaW5nLCBydHJpbSwgJyQxJyk7XG4gICAgcmV0dXJuIHN0cmluZztcbiAgfTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICAvLyBgU3RyaW5nLnByb3RvdHlwZS57IHRyaW1MZWZ0LCB0cmltU3RhcnQgfWAgbWV0aG9kc1xuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN0cmluZy5wcm90b3R5cGUudHJpbXN0YXJ0XG4gIHN0YXJ0OiBjcmVhdGVNZXRob2QoMSksXG4gIC8vIGBTdHJpbmcucHJvdG90eXBlLnsgdHJpbVJpZ2h0LCB0cmltRW5kIH1gIG1ldGhvZHNcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zdHJpbmcucHJvdG90eXBlLnRyaW1lbmRcbiAgZW5kOiBjcmVhdGVNZXRob2QoMiksXG4gIC8vIGBTdHJpbmcucHJvdG90eXBlLnRyaW1gIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN0cmluZy5wcm90b3R5cGUudHJpbVxuICB0cmltOiBjcmVhdGVNZXRob2QoMylcbn07XG4iLCIndXNlIHN0cmljdCc7XG4vKiBlc2xpbnQtZGlzYWJsZSBlcy9uby1zeW1ib2wgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmcgKi9cbnZhciBWOF9WRVJTSU9OID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Vudmlyb25tZW50LXY4LXZlcnNpb24nKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcblxudmFyICRTdHJpbmcgPSBnbG9iYWxUaGlzLlN0cmluZztcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eXN5bWJvbHMgLS0gcmVxdWlyZWQgZm9yIHRlc3Rpbmdcbm1vZHVsZS5leHBvcnRzID0gISFPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzICYmICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHZhciBzeW1ib2wgPSBTeW1ib2woJ3N5bWJvbCBkZXRlY3Rpb24nKTtcbiAgLy8gQ2hyb21lIDM4IFN5bWJvbCBoYXMgaW5jb3JyZWN0IHRvU3RyaW5nIGNvbnZlcnNpb25cbiAgLy8gYGdldC1vd24tcHJvcGVydHktc3ltYm9sc2AgcG9seWZpbGwgc3ltYm9scyBjb252ZXJ0ZWQgdG8gb2JqZWN0IGFyZSBub3QgU3ltYm9sIGluc3RhbmNlc1xuICAvLyBuYjogRG8gbm90IGNhbGwgYFN0cmluZ2AgZGlyZWN0bHkgdG8gYXZvaWQgdGhpcyBiZWluZyBvcHRpbWl6ZWQgb3V0IHRvIGBzeW1ib2wrJydgIHdoaWNoIHdpbGwsXG4gIC8vIG9mIGNvdXJzZSwgZmFpbC5cbiAgcmV0dXJuICEkU3RyaW5nKHN5bWJvbCkgfHwgIShPYmplY3Qoc3ltYm9sKSBpbnN0YW5jZW9mIFN5bWJvbCkgfHxcbiAgICAvLyBDaHJvbWUgMzgtNDAgc3ltYm9scyBhcmUgbm90IGluaGVyaXRlZCBmcm9tIERPTSBjb2xsZWN0aW9ucyBwcm90b3R5cGVzIHRvIGluc3RhbmNlc1xuICAgICFTeW1ib2wuc2hhbSAmJiBWOF9WRVJTSU9OICYmIFY4X1ZFUlNJT04gPCA0MTtcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIGdldEJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluJyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG52YXIgZGVmaW5lQnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBTeW1ib2wgPSBnZXRCdWlsdEluKCdTeW1ib2wnKTtcbiAgdmFyIFN5bWJvbFByb3RvdHlwZSA9IFN5bWJvbCAmJiBTeW1ib2wucHJvdG90eXBlO1xuICB2YXIgdmFsdWVPZiA9IFN5bWJvbFByb3RvdHlwZSAmJiBTeW1ib2xQcm90b3R5cGUudmFsdWVPZjtcbiAgdmFyIFRPX1BSSU1JVElWRSA9IHdlbGxLbm93blN5bWJvbCgndG9QcmltaXRpdmUnKTtcblxuICBpZiAoU3ltYm9sUHJvdG90eXBlICYmICFTeW1ib2xQcm90b3R5cGVbVE9fUFJJTUlUSVZFXSkge1xuICAgIC8vIGBTeW1ib2wucHJvdG90eXBlW0BAdG9QcmltaXRpdmVdYCBtZXRob2RcbiAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN5bWJvbC5wcm90b3R5cGUtQEB0b3ByaW1pdGl2ZVxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFycyAtLSByZXF1aXJlZCBmb3IgLmxlbmd0aFxuICAgIGRlZmluZUJ1aWx0SW4oU3ltYm9sUHJvdG90eXBlLCBUT19QUklNSVRJVkUsIGZ1bmN0aW9uIChoaW50KSB7XG4gICAgICByZXR1cm4gY2FsbCh2YWx1ZU9mLCB0aGlzKTtcbiAgICB9LCB7IGFyaXR5OiAxIH0pO1xuICB9XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGdldEJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluJyk7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG5cbnZhciBTeW1ib2wgPSBnZXRCdWlsdEluKCdTeW1ib2wnKTtcbnZhciBrZXlGb3IgPSBTeW1ib2wua2V5Rm9yO1xudmFyIHRoaXNTeW1ib2xWYWx1ZSA9IHVuY3VycnlUaGlzKFN5bWJvbC5wcm90b3R5cGUudmFsdWVPZik7XG5cbi8vIGBTeW1ib2wuaXNSZWdpc3RlcmVkU3ltYm9sYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9wcm9wb3NhbC1zeW1ib2wtcHJlZGljYXRlcy8jc2VjLXN5bWJvbC1pc3JlZ2lzdGVyZWRzeW1ib2xcbm1vZHVsZS5leHBvcnRzID0gU3ltYm9sLmlzUmVnaXN0ZXJlZFN5bWJvbCB8fCBmdW5jdGlvbiBpc1JlZ2lzdGVyZWRTeW1ib2wodmFsdWUpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4ga2V5Rm9yKHRoaXNTeW1ib2xWYWx1ZSh2YWx1ZSkpICE9PSB1bmRlZmluZWQ7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHNoYXJlZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQnKTtcbnZhciBnZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbicpO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGlzU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXN5bWJvbCcpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xuXG52YXIgU3ltYm9sID0gZ2V0QnVpbHRJbignU3ltYm9sJyk7XG52YXIgJGlzV2VsbEtub3duU3ltYm9sID0gU3ltYm9sLmlzV2VsbEtub3duU3ltYm9sO1xudmFyIGdldE93blByb3BlcnR5TmFtZXMgPSBnZXRCdWlsdEluKCdPYmplY3QnLCAnZ2V0T3duUHJvcGVydHlOYW1lcycpO1xudmFyIHRoaXNTeW1ib2xWYWx1ZSA9IHVuY3VycnlUaGlzKFN5bWJvbC5wcm90b3R5cGUudmFsdWVPZik7XG52YXIgV2VsbEtub3duU3ltYm9sc1N0b3JlID0gc2hhcmVkKCd3a3MnKTtcblxuZm9yICh2YXIgaSA9IDAsIHN5bWJvbEtleXMgPSBnZXRPd25Qcm9wZXJ0eU5hbWVzKFN5bWJvbCksIHN5bWJvbEtleXNMZW5ndGggPSBzeW1ib2xLZXlzLmxlbmd0aDsgaSA8IHN5bWJvbEtleXNMZW5ndGg7IGkrKykge1xuICAvLyBzb21lIG9sZCBlbmdpbmVzIHRocm93cyBvbiBhY2Nlc3MgdG8gc29tZSBrZXlzIGxpa2UgYGFyZ3VtZW50c2Agb3IgYGNhbGxlcmBcbiAgdHJ5IHtcbiAgICB2YXIgc3ltYm9sS2V5ID0gc3ltYm9sS2V5c1tpXTtcbiAgICBpZiAoaXNTeW1ib2woU3ltYm9sW3N5bWJvbEtleV0pKSB3ZWxsS25vd25TeW1ib2woc3ltYm9sS2V5KTtcbiAgfSBjYXRjaCAoZXJyb3IpIHsgLyogZW1wdHkgKi8gfVxufVxuXG4vLyBgU3ltYm9sLmlzV2VsbEtub3duU3ltYm9sYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9wcm9wb3NhbC1zeW1ib2wtcHJlZGljYXRlcy8jc2VjLXN5bWJvbC1pc3dlbGxrbm93bnN5bWJvbFxuLy8gV2Ugc2hvdWxkIHBhdGNoIGl0IGZvciBuZXdseSBhZGRlZCB3ZWxsLWtub3duIHN5bWJvbHMuIElmIGl0J3Mgbm90IHJlcXVpcmVkLCB0aGlzIG1vZHVsZSBqdXN0IHdpbGwgbm90IGJlIGluamVjdGVkXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGlzV2VsbEtub3duU3ltYm9sKHZhbHVlKSB7XG4gIGlmICgkaXNXZWxsS25vd25TeW1ib2wgJiYgJGlzV2VsbEtub3duU3ltYm9sKHZhbHVlKSkgcmV0dXJuIHRydWU7XG4gIHRyeSB7XG4gICAgdmFyIHN5bWJvbCA9IHRoaXNTeW1ib2xWYWx1ZSh2YWx1ZSk7XG4gICAgZm9yICh2YXIgaiA9IDAsIGtleXMgPSBnZXRPd25Qcm9wZXJ0eU5hbWVzKFdlbGxLbm93blN5bWJvbHNTdG9yZSksIGtleXNMZW5ndGggPSBrZXlzLmxlbmd0aDsgaiA8IGtleXNMZW5ndGg7IGorKykge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVxZXFlcSAtLSBwb2x5ZmlsbGVkIHN5bWJvbHMgY2FzZVxuICAgICAgaWYgKFdlbGxLbm93blN5bWJvbHNTdG9yZVtrZXlzW2pdXSA9PSBzeW1ib2wpIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfSBjYXRjaCAoZXJyb3IpIHsgLyogZW1wdHkgKi8gfVxuICByZXR1cm4gZmFsc2U7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIE5BVElWRV9TWU1CT0wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3ltYm9sLWNvbnN0cnVjdG9yLWRldGVjdGlvbicpO1xuXG4vKiBlc2xpbnQtZGlzYWJsZSBlcy9uby1zeW1ib2wgLS0gc2FmZSAqL1xubW9kdWxlLmV4cG9ydHMgPSBOQVRJVkVfU1lNQk9MICYmICEhU3ltYm9sWydmb3InXSAmJiAhIVN5bWJvbC5rZXlGb3I7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xudmFyIGFwcGx5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWFwcGx5Jyk7XG52YXIgYmluZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLWNvbnRleHQnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGh0bWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaHRtbCcpO1xudmFyIGFycmF5U2xpY2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktc2xpY2UnKTtcbnZhciBjcmVhdGVFbGVtZW50ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RvY3VtZW50LWNyZWF0ZS1lbGVtZW50Jyk7XG52YXIgdmFsaWRhdGVBcmd1bWVudHNMZW5ndGggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdmFsaWRhdGUtYXJndW1lbnRzLWxlbmd0aCcpO1xudmFyIElTX0lPUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbnZpcm9ubWVudC1pcy1pb3MnKTtcbnZhciBJU19OT0RFID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Vudmlyb25tZW50LWlzLW5vZGUnKTtcblxudmFyIHNldCA9IGdsb2JhbFRoaXMuc2V0SW1tZWRpYXRlO1xudmFyIGNsZWFyID0gZ2xvYmFsVGhpcy5jbGVhckltbWVkaWF0ZTtcbnZhciBwcm9jZXNzID0gZ2xvYmFsVGhpcy5wcm9jZXNzO1xudmFyIERpc3BhdGNoID0gZ2xvYmFsVGhpcy5EaXNwYXRjaDtcbnZhciBGdW5jdGlvbiA9IGdsb2JhbFRoaXMuRnVuY3Rpb247XG52YXIgTWVzc2FnZUNoYW5uZWwgPSBnbG9iYWxUaGlzLk1lc3NhZ2VDaGFubmVsO1xudmFyIFN0cmluZyA9IGdsb2JhbFRoaXMuU3RyaW5nO1xudmFyIGNvdW50ZXIgPSAwO1xudmFyIHF1ZXVlID0ge307XG52YXIgT05SRUFEWVNUQVRFQ0hBTkdFID0gJ29ucmVhZHlzdGF0ZWNoYW5nZSc7XG52YXIgJGxvY2F0aW9uLCBkZWZlciwgY2hhbm5lbCwgcG9ydDtcblxuZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBEZW5vIHRocm93cyBhIFJlZmVyZW5jZUVycm9yIG9uIGBsb2NhdGlvbmAgYWNjZXNzIHdpdGhvdXQgYC0tbG9jYXRpb25gIGZsYWdcbiAgJGxvY2F0aW9uID0gZ2xvYmFsVGhpcy5sb2NhdGlvbjtcbn0pO1xuXG52YXIgcnVuID0gZnVuY3Rpb24gKGlkKSB7XG4gIGlmIChoYXNPd24ocXVldWUsIGlkKSkge1xuICAgIHZhciBmbiA9IHF1ZXVlW2lkXTtcbiAgICBkZWxldGUgcXVldWVbaWRdO1xuICAgIGZuKCk7XG4gIH1cbn07XG5cbnZhciBydW5uZXIgPSBmdW5jdGlvbiAoaWQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICBydW4oaWQpO1xuICB9O1xufTtcblxudmFyIGV2ZW50TGlzdGVuZXIgPSBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgcnVuKGV2ZW50LmRhdGEpO1xufTtcblxudmFyIGdsb2JhbFBvc3RNZXNzYWdlRGVmZXIgPSBmdW5jdGlvbiAoaWQpIHtcbiAgLy8gb2xkIGVuZ2luZXMgaGF2ZSBub3QgbG9jYXRpb24ub3JpZ2luXG4gIGdsb2JhbFRoaXMucG9zdE1lc3NhZ2UoU3RyaW5nKGlkKSwgJGxvY2F0aW9uLnByb3RvY29sICsgJy8vJyArICRsb2NhdGlvbi5ob3N0KTtcbn07XG5cbi8vIE5vZGUuanMgMC45KyAmIElFMTArIGhhcyBzZXRJbW1lZGlhdGUsIG90aGVyd2lzZTpcbmlmICghc2V0IHx8ICFjbGVhcikge1xuICBzZXQgPSBmdW5jdGlvbiBzZXRJbW1lZGlhdGUoaGFuZGxlcikge1xuICAgIHZhbGlkYXRlQXJndW1lbnRzTGVuZ3RoKGFyZ3VtZW50cy5sZW5ndGgsIDEpO1xuICAgIHZhciBmbiA9IGlzQ2FsbGFibGUoaGFuZGxlcikgPyBoYW5kbGVyIDogRnVuY3Rpb24oaGFuZGxlcik7XG4gICAgdmFyIGFyZ3MgPSBhcnJheVNsaWNlKGFyZ3VtZW50cywgMSk7XG4gICAgcXVldWVbKytjb3VudGVyXSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIGFwcGx5KGZuLCB1bmRlZmluZWQsIGFyZ3MpO1xuICAgIH07XG4gICAgZGVmZXIoY291bnRlcik7XG4gICAgcmV0dXJuIGNvdW50ZXI7XG4gIH07XG4gIGNsZWFyID0gZnVuY3Rpb24gY2xlYXJJbW1lZGlhdGUoaWQpIHtcbiAgICBkZWxldGUgcXVldWVbaWRdO1xuICB9O1xuICAvLyBOb2RlLmpzIDAuOC1cbiAgaWYgKElTX05PREUpIHtcbiAgICBkZWZlciA9IGZ1bmN0aW9uIChpZCkge1xuICAgICAgcHJvY2Vzcy5uZXh0VGljayhydW5uZXIoaWQpKTtcbiAgICB9O1xuICAvLyBTcGhlcmUgKEpTIGdhbWUgZW5naW5lKSBEaXNwYXRjaCBBUElcbiAgfSBlbHNlIGlmIChEaXNwYXRjaCAmJiBEaXNwYXRjaC5ub3cpIHtcbiAgICBkZWZlciA9IGZ1bmN0aW9uIChpZCkge1xuICAgICAgRGlzcGF0Y2gubm93KHJ1bm5lcihpZCkpO1xuICAgIH07XG4gIC8vIEJyb3dzZXJzIHdpdGggTWVzc2FnZUNoYW5uZWwsIGluY2x1ZGVzIFdlYldvcmtlcnNcbiAgLy8gZXhjZXB0IGlPUyAtIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy82MjRcbiAgfSBlbHNlIGlmIChNZXNzYWdlQ2hhbm5lbCAmJiAhSVNfSU9TKSB7XG4gICAgY2hhbm5lbCA9IG5ldyBNZXNzYWdlQ2hhbm5lbCgpO1xuICAgIHBvcnQgPSBjaGFubmVsLnBvcnQyO1xuICAgIGNoYW5uZWwucG9ydDEub25tZXNzYWdlID0gZXZlbnRMaXN0ZW5lcjtcbiAgICBkZWZlciA9IGJpbmQocG9ydC5wb3N0TWVzc2FnZSwgcG9ydCk7XG4gIC8vIEJyb3dzZXJzIHdpdGggcG9zdE1lc3NhZ2UsIHNraXAgV2ViV29ya2Vyc1xuICAvLyBJRTggaGFzIHBvc3RNZXNzYWdlLCBidXQgaXQncyBzeW5jICYgdHlwZW9mIGl0cyBwb3N0TWVzc2FnZSBpcyAnb2JqZWN0J1xuICB9IGVsc2UgaWYgKFxuICAgIGdsb2JhbFRoaXMuYWRkRXZlbnRMaXN0ZW5lciAmJlxuICAgIGlzQ2FsbGFibGUoZ2xvYmFsVGhpcy5wb3N0TWVzc2FnZSkgJiZcbiAgICAhZ2xvYmFsVGhpcy5pbXBvcnRTY3JpcHRzICYmXG4gICAgJGxvY2F0aW9uICYmICRsb2NhdGlvbi5wcm90b2NvbCAhPT0gJ2ZpbGU6JyAmJlxuICAgICFmYWlscyhnbG9iYWxQb3N0TWVzc2FnZURlZmVyKVxuICApIHtcbiAgICBkZWZlciA9IGdsb2JhbFBvc3RNZXNzYWdlRGVmZXI7XG4gICAgZ2xvYmFsVGhpcy5hZGRFdmVudExpc3RlbmVyKCdtZXNzYWdlJywgZXZlbnRMaXN0ZW5lciwgZmFsc2UpO1xuICAvLyBJRTgtXG4gIH0gZWxzZSBpZiAoT05SRUFEWVNUQVRFQ0hBTkdFIGluIGNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpKSB7XG4gICAgZGVmZXIgPSBmdW5jdGlvbiAoaWQpIHtcbiAgICAgIGh0bWwuYXBwZW5kQ2hpbGQoY3JlYXRlRWxlbWVudCgnc2NyaXB0JykpW09OUkVBRFlTVEFURUNIQU5HRV0gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGh0bWwucmVtb3ZlQ2hpbGQodGhpcyk7XG4gICAgICAgIHJ1bihpZCk7XG4gICAgICB9O1xuICAgIH07XG4gIC8vIFJlc3Qgb2xkIGJyb3dzZXJzXG4gIH0gZWxzZSB7XG4gICAgZGVmZXIgPSBmdW5jdGlvbiAoaWQpIHtcbiAgICAgIHNldFRpbWVvdXQocnVubmVyKGlkKSwgMCk7XG4gICAgfTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgc2V0OiBzZXQsXG4gIGNsZWFyOiBjbGVhclxufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciB0b0ludGVnZXJPckluZmluaXR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWludGVnZXItb3ItaW5maW5pdHknKTtcblxudmFyIG1heCA9IE1hdGgubWF4O1xudmFyIG1pbiA9IE1hdGgubWluO1xuXG4vLyBIZWxwZXIgZm9yIGEgcG9wdWxhciByZXBlYXRpbmcgY2FzZSBvZiB0aGUgc3BlYzpcbi8vIExldCBpbnRlZ2VyIGJlID8gVG9JbnRlZ2VyKGluZGV4KS5cbi8vIElmIGludGVnZXIgPCAwLCBsZXQgcmVzdWx0IGJlIG1heCgobGVuZ3RoICsgaW50ZWdlciksIDApOyBlbHNlIGxldCByZXN1bHQgYmUgbWluKGludGVnZXIsIGxlbmd0aCkuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpbmRleCwgbGVuZ3RoKSB7XG4gIHZhciBpbnRlZ2VyID0gdG9JbnRlZ2VyT3JJbmZpbml0eShpbmRleCk7XG4gIHJldHVybiBpbnRlZ2VyIDwgMCA/IG1heChpbnRlZ2VyICsgbGVuZ3RoLCAwKSA6IG1pbihpbnRlZ2VyLCBsZW5ndGgpO1xufTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIHRvT2JqZWN0IHdpdGggZmFsbGJhY2sgZm9yIG5vbi1hcnJheS1saWtlIEVTMyBzdHJpbmdzXG52YXIgSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbmRleGVkLW9iamVjdCcpO1xudmFyIHJlcXVpcmVPYmplY3RDb2VyY2libGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVxdWlyZS1vYmplY3QtY29lcmNpYmxlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBJbmRleGVkT2JqZWN0KHJlcXVpcmVPYmplY3RDb2VyY2libGUoaXQpKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgdHJ1bmMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbWF0aC10cnVuYycpO1xuXG4vLyBgVG9JbnRlZ2VyT3JJbmZpbml0eWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXRvaW50ZWdlcm9yaW5maW5pdHlcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHZhciBudW1iZXIgPSArYXJndW1lbnQ7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmUgLS0gTmFOIGNoZWNrXG4gIHJldHVybiBudW1iZXIgIT09IG51bWJlciB8fCBudW1iZXIgPT09IDAgPyAwIDogdHJ1bmMobnVtYmVyKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgdG9JbnRlZ2VyT3JJbmZpbml0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbnRlZ2VyLW9yLWluZmluaXR5Jyk7XG5cbnZhciBtaW4gPSBNYXRoLm1pbjtcblxuLy8gYFRvTGVuZ3RoYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtdG9sZW5ndGhcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHZhciBsZW4gPSB0b0ludGVnZXJPckluZmluaXR5KGFyZ3VtZW50KTtcbiAgcmV0dXJuIGxlbiA+IDAgPyBtaW4obGVuLCAweDFGRkZGRkZGRkZGRkZGKSA6IDA7IC8vIDIgKiogNTMgLSAxID09IDkwMDcxOTkyNTQ3NDA5OTFcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgcmVxdWlyZU9iamVjdENvZXJjaWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZXF1aXJlLW9iamVjdC1jb2VyY2libGUnKTtcblxudmFyICRPYmplY3QgPSBPYmplY3Q7XG5cbi8vIGBUb09iamVjdGAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXRvb2JqZWN0XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICByZXR1cm4gJE9iamVjdChyZXF1aXJlT2JqZWN0Q29lcmNpYmxlKGFyZ3VtZW50KSk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xudmFyIGlzU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXN5bWJvbCcpO1xudmFyIGdldE1ldGhvZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtbWV0aG9kJyk7XG52YXIgb3JkaW5hcnlUb1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vcmRpbmFyeS10by1wcmltaXRpdmUnKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG52YXIgVE9fUFJJTUlUSVZFID0gd2VsbEtub3duU3ltYm9sKCd0b1ByaW1pdGl2ZScpO1xuXG4vLyBgVG9QcmltaXRpdmVgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy10b3ByaW1pdGl2ZVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaW5wdXQsIHByZWYpIHtcbiAgaWYgKCFpc09iamVjdChpbnB1dCkgfHwgaXNTeW1ib2woaW5wdXQpKSByZXR1cm4gaW5wdXQ7XG4gIHZhciBleG90aWNUb1ByaW0gPSBnZXRNZXRob2QoaW5wdXQsIFRPX1BSSU1JVElWRSk7XG4gIHZhciByZXN1bHQ7XG4gIGlmIChleG90aWNUb1ByaW0pIHtcbiAgICBpZiAocHJlZiA9PT0gdW5kZWZpbmVkKSBwcmVmID0gJ2RlZmF1bHQnO1xuICAgIHJlc3VsdCA9IGNhbGwoZXhvdGljVG9QcmltLCBpbnB1dCwgcHJlZik7XG4gICAgaWYgKCFpc09iamVjdChyZXN1bHQpIHx8IGlzU3ltYm9sKHJlc3VsdCkpIHJldHVybiByZXN1bHQ7XG4gICAgdGhyb3cgbmV3ICRUeXBlRXJyb3IoXCJDYW4ndCBjb252ZXJ0IG9iamVjdCB0byBwcmltaXRpdmUgdmFsdWVcIik7XG4gIH1cbiAgaWYgKHByZWYgPT09IHVuZGVmaW5lZCkgcHJlZiA9ICdudW1iZXInO1xuICByZXR1cm4gb3JkaW5hcnlUb1ByaW1pdGl2ZShpbnB1dCwgcHJlZik7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHRvUHJpbWl0aXZlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXByaW1pdGl2ZScpO1xudmFyIGlzU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXN5bWJvbCcpO1xuXG4vLyBgVG9Qcm9wZXJ0eUtleWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXRvcHJvcGVydHlrZXlcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHZhciBrZXkgPSB0b1ByaW1pdGl2ZShhcmd1bWVudCwgJ3N0cmluZycpO1xuICByZXR1cm4gaXNTeW1ib2woa2V5KSA/IGtleSA6IGtleSArICcnO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcblxudmFyIFRPX1NUUklOR19UQUcgPSB3ZWxsS25vd25TeW1ib2woJ3RvU3RyaW5nVGFnJyk7XG52YXIgdGVzdCA9IHt9O1xuXG50ZXN0W1RPX1NUUklOR19UQUddID0gJ3onO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFN0cmluZyh0ZXN0KSA9PT0gJ1tvYmplY3Qgel0nO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZicpO1xuXG52YXIgJFN0cmluZyA9IFN0cmluZztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgaWYgKGNsYXNzb2YoYXJndW1lbnQpID09PSAnU3ltYm9sJykgdGhyb3cgbmV3IFR5cGVFcnJvcignQ2Fubm90IGNvbnZlcnQgYSBTeW1ib2wgdmFsdWUgdG8gYSBzdHJpbmcnKTtcbiAgcmV0dXJuICRTdHJpbmcoYXJndW1lbnQpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkU3RyaW5nID0gU3RyaW5nO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICB0cnkge1xuICAgIHJldHVybiAkU3RyaW5nKGFyZ3VtZW50KTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gJ09iamVjdCc7XG4gIH1cbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG5cbnZhciBpZCA9IDA7XG52YXIgcG9zdGZpeCA9IE1hdGgucmFuZG9tKCk7XG52YXIgdG9TdHJpbmcgPSB1bmN1cnJ5VGhpcygxLjAudG9TdHJpbmcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChrZXkpIHtcbiAgcmV0dXJuICdTeW1ib2woJyArIChrZXkgPT09IHVuZGVmaW5lZCA/ICcnIDoga2V5KSArICcpXycgKyB0b1N0cmluZygrK2lkICsgcG9zdGZpeCwgMzYpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgSVNfUFVSRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1wdXJlJyk7XG5cbnZhciBJVEVSQVRPUiA9IHdlbGxLbm93blN5bWJvbCgnaXRlcmF0b3InKTtcblxubW9kdWxlLmV4cG9ydHMgPSAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgdW5pY29ybi9yZWxhdGl2ZS11cmwtc3R5bGUgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmdcbiAgdmFyIHVybCA9IG5ldyBVUkwoJ2I/YT0xJmI9MiZjPTMnLCAnaHR0cHM6Ly9hJyk7XG4gIHZhciBwYXJhbXMgPSB1cmwuc2VhcmNoUGFyYW1zO1xuICB2YXIgcGFyYW1zMiA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoJ2E9MSZhPTImYj0zJyk7XG4gIHZhciByZXN1bHQgPSAnJztcbiAgdXJsLnBhdGhuYW1lID0gJ2MlMjBkJztcbiAgcGFyYW1zLmZvckVhY2goZnVuY3Rpb24gKHZhbHVlLCBrZXkpIHtcbiAgICBwYXJhbXNbJ2RlbGV0ZSddKCdiJyk7XG4gICAgcmVzdWx0ICs9IGtleSArIHZhbHVlO1xuICB9KTtcbiAgcGFyYW1zMlsnZGVsZXRlJ10oJ2EnLCAyKTtcbiAgLy8gYHVuZGVmaW5lZGAgY2FzZSBpcyBhIENocm9taXVtIDExNyBidWdcbiAgLy8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9MTQyMjJcbiAgcGFyYW1zMlsnZGVsZXRlJ10oJ2InLCB1bmRlZmluZWQpO1xuICByZXR1cm4gKElTX1BVUkUgJiYgKCF1cmwudG9KU09OIHx8ICFwYXJhbXMyLmhhcygnYScsIDEpIHx8IHBhcmFtczIuaGFzKCdhJywgMikgfHwgIXBhcmFtczIuaGFzKCdhJywgdW5kZWZpbmVkKSB8fCBwYXJhbXMyLmhhcygnYicpKSlcbiAgICB8fCAoIXBhcmFtcy5zaXplICYmIChJU19QVVJFIHx8ICFERVNDUklQVE9SUykpXG4gICAgfHwgIXBhcmFtcy5zb3J0XG4gICAgfHwgdXJsLmhyZWYgIT09ICdodHRwczovL2EvYyUyMGQ/YT0xJmM9MydcbiAgICB8fCBwYXJhbXMuZ2V0KCdjJykgIT09ICczJ1xuICAgIHx8IFN0cmluZyhuZXcgVVJMU2VhcmNoUGFyYW1zKCc/YT0xJykpICE9PSAnYT0xJ1xuICAgIHx8ICFwYXJhbXNbSVRFUkFUT1JdXG4gICAgLy8gdGhyb3dzIGluIEVkZ2VcbiAgICB8fCBuZXcgVVJMKCdodHRwczovL2FAYicpLnVzZXJuYW1lICE9PSAnYSdcbiAgICB8fCBuZXcgVVJMU2VhcmNoUGFyYW1zKG5ldyBVUkxTZWFyY2hQYXJhbXMoJ2E9YicpKS5nZXQoJ2EnKSAhPT0gJ2InXG4gICAgLy8gbm90IHB1bnljb2RlZCBpbiBFZGdlXG4gICAgfHwgbmV3IFVSTCgnaHR0cHM6Ly/RgtC10YHRgicpLmhvc3QgIT09ICd4bi0tZTFheWJjJ1xuICAgIC8vIG5vdCBlc2NhcGVkIGluIENocm9tZSA2Mi1cbiAgICB8fCBuZXcgVVJMKCdodHRwczovL2Ej0LEnKS5oYXNoICE9PSAnIyVEMCVCMSdcbiAgICAvLyBmYWlscyBpbiBDaHJvbWUgNjYtXG4gICAgfHwgcmVzdWx0ICE9PSAnYTFjMydcbiAgICAvLyB0aHJvd3MgaW4gU2FmYXJpXG4gICAgfHwgbmV3IFVSTCgnaHR0cHM6Ly94JywgdW5kZWZpbmVkKS5ob3N0ICE9PSAneCc7XG59KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8qIGVzbGludC1kaXNhYmxlIGVzL25vLXN5bWJvbCAtLSByZXF1aXJlZCBmb3IgdGVzdGluZyAqL1xudmFyIE5BVElWRV9TWU1CT0wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3ltYm9sLWNvbnN0cnVjdG9yLWRldGVjdGlvbicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IE5BVElWRV9TWU1CT0xcbiAgJiYgIVN5bWJvbC5zaGFtXG4gICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT0gJ3N5bWJvbCc7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xuXG4vLyBWOCB+IENocm9tZSAzNi1cbi8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTMzMzRcbm1vZHVsZS5leHBvcnRzID0gREVTQ1JJUFRPUlMgJiYgZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnR5IC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG4gIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9LCAncHJvdG90eXBlJywge1xuICAgIHZhbHVlOiA0MixcbiAgICB3cml0YWJsZTogZmFsc2VcbiAgfSkucHJvdG90eXBlICE9PSA0Mjtcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHBhc3NlZCwgcmVxdWlyZWQpIHtcbiAgaWYgKHBhc3NlZCA8IHJlcXVpcmVkKSB0aHJvdyBuZXcgJFR5cGVFcnJvcignTm90IGVub3VnaCBhcmd1bWVudHMnKTtcbiAgcmV0dXJuIHBhc3NlZDtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcblxudmFyIFdlYWtNYXAgPSBnbG9iYWxUaGlzLldlYWtNYXA7XG5cbm1vZHVsZS5leHBvcnRzID0gaXNDYWxsYWJsZShXZWFrTWFwKSAmJiAvbmF0aXZlIGNvZGUvLnRlc3QoU3RyaW5nKFdlYWtNYXApKTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBwYXRoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3BhdGgnKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIHdyYXBwZWRXZWxsS25vd25TeW1ib2xNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wtd3JhcHBlZCcpO1xudmFyIGRlZmluZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKS5mO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChOQU1FKSB7XG4gIHZhciBTeW1ib2wgPSBwYXRoLlN5bWJvbCB8fCAocGF0aC5TeW1ib2wgPSB7fSk7XG4gIGlmICghaGFzT3duKFN5bWJvbCwgTkFNRSkpIGRlZmluZVByb3BlcnR5KFN5bWJvbCwgTkFNRSwge1xuICAgIHZhbHVlOiB3cmFwcGVkV2VsbEtub3duU3ltYm9sTW9kdWxlLmYoTkFNRSlcbiAgfSk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xuXG5leHBvcnRzLmYgPSB3ZWxsS25vd25TeW1ib2w7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xudmFyIHNoYXJlZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQnKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIHVpZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy91aWQnKTtcbnZhciBOQVRJVkVfU1lNQk9MID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3N5bWJvbC1jb25zdHJ1Y3Rvci1kZXRlY3Rpb24nKTtcbnZhciBVU0VfU1lNQk9MX0FTX1VJRCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy91c2Utc3ltYm9sLWFzLXVpZCcpO1xuXG52YXIgU3ltYm9sID0gZ2xvYmFsVGhpcy5TeW1ib2w7XG52YXIgV2VsbEtub3duU3ltYm9sc1N0b3JlID0gc2hhcmVkKCd3a3MnKTtcbnZhciBjcmVhdGVXZWxsS25vd25TeW1ib2wgPSBVU0VfU1lNQk9MX0FTX1VJRCA/IFN5bWJvbFsnZm9yJ10gfHwgU3ltYm9sIDogU3ltYm9sICYmIFN5bWJvbC53aXRob3V0U2V0dGVyIHx8IHVpZDtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAobmFtZSkge1xuICBpZiAoIWhhc093bihXZWxsS25vd25TeW1ib2xzU3RvcmUsIG5hbWUpKSB7XG4gICAgV2VsbEtub3duU3ltYm9sc1N0b3JlW25hbWVdID0gTkFUSVZFX1NZTUJPTCAmJiBoYXNPd24oU3ltYm9sLCBuYW1lKVxuICAgICAgPyBTeW1ib2xbbmFtZV1cbiAgICAgIDogY3JlYXRlV2VsbEtub3duU3ltYm9sKCdTeW1ib2wuJyArIG5hbWUpO1xuICB9IHJldHVybiBXZWxsS25vd25TeW1ib2xzU3RvcmVbbmFtZV07XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gYSBzdHJpbmcgb2YgYWxsIHZhbGlkIHVuaWNvZGUgd2hpdGVzcGFjZXNcbm1vZHVsZS5leHBvcnRzID0gJ1xcdTAwMDlcXHUwMDBBXFx1MDAwQlxcdTAwMENcXHUwMDBEXFx1MDAyMFxcdTAwQTBcXHUxNjgwXFx1MjAwMFxcdTIwMDFcXHUyMDAyJyArXG4gICdcXHUyMDAzXFx1MjAwNFxcdTIwMDVcXHUyMDA2XFx1MjAwN1xcdTIwMDhcXHUyMDA5XFx1MjAwQVxcdTIwMkZcXHUyMDVGXFx1MzAwMFxcdTIwMjhcXHUyMDI5XFx1RkVGRic7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBpc1Byb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YnKTtcbnZhciBnZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LXByb3RvdHlwZS1vZicpO1xudmFyIHNldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1zZXQtcHJvdG90eXBlLW9mJyk7XG52YXIgY29weUNvbnN0cnVjdG9yUHJvcGVydGllcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jb3B5LWNvbnN0cnVjdG9yLXByb3BlcnRpZXMnKTtcbnZhciBjcmVhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWNyZWF0ZScpO1xudmFyIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHknKTtcbnZhciBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcbnZhciBpbnN0YWxsRXJyb3JDYXVzZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbnN0YWxsLWVycm9yLWNhdXNlJyk7XG52YXIgaW5zdGFsbEVycm9yU3RhY2sgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXJyb3Itc3RhY2staW5zdGFsbCcpO1xudmFyIGl0ZXJhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0ZScpO1xudmFyIG5vcm1hbGl6ZVN0cmluZ0FyZ3VtZW50ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL25vcm1hbGl6ZS1zdHJpbmctYXJndW1lbnQnKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcblxudmFyIFRPX1NUUklOR19UQUcgPSB3ZWxsS25vd25TeW1ib2woJ3RvU3RyaW5nVGFnJyk7XG52YXIgJEVycm9yID0gRXJyb3I7XG52YXIgcHVzaCA9IFtdLnB1c2g7XG5cbnZhciAkQWdncmVnYXRlRXJyb3IgPSBmdW5jdGlvbiBBZ2dyZWdhdGVFcnJvcihlcnJvcnMsIG1lc3NhZ2UgLyogLCBvcHRpb25zICovKSB7XG4gIHZhciBpc0luc3RhbmNlID0gaXNQcm90b3R5cGVPZihBZ2dyZWdhdGVFcnJvclByb3RvdHlwZSwgdGhpcyk7XG4gIHZhciB0aGF0O1xuICBpZiAoc2V0UHJvdG90eXBlT2YpIHtcbiAgICB0aGF0ID0gc2V0UHJvdG90eXBlT2YobmV3ICRFcnJvcigpLCBpc0luc3RhbmNlID8gZ2V0UHJvdG90eXBlT2YodGhpcykgOiBBZ2dyZWdhdGVFcnJvclByb3RvdHlwZSk7XG4gIH0gZWxzZSB7XG4gICAgdGhhdCA9IGlzSW5zdGFuY2UgPyB0aGlzIDogY3JlYXRlKEFnZ3JlZ2F0ZUVycm9yUHJvdG90eXBlKTtcbiAgICBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkodGhhdCwgVE9fU1RSSU5HX1RBRywgJ0Vycm9yJyk7XG4gIH1cbiAgaWYgKG1lc3NhZ2UgIT09IHVuZGVmaW5lZCkgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KHRoYXQsICdtZXNzYWdlJywgbm9ybWFsaXplU3RyaW5nQXJndW1lbnQobWVzc2FnZSkpO1xuICBpbnN0YWxsRXJyb3JTdGFjayh0aGF0LCAkQWdncmVnYXRlRXJyb3IsIHRoYXQuc3RhY2ssIDEpO1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDIpIGluc3RhbGxFcnJvckNhdXNlKHRoYXQsIGFyZ3VtZW50c1syXSk7XG4gIHZhciBlcnJvcnNBcnJheSA9IFtdO1xuICBpdGVyYXRlKGVycm9ycywgcHVzaCwgeyB0aGF0OiBlcnJvcnNBcnJheSB9KTtcbiAgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KHRoYXQsICdlcnJvcnMnLCBlcnJvcnNBcnJheSk7XG4gIHJldHVybiB0aGF0O1xufTtcblxuaWYgKHNldFByb3RvdHlwZU9mKSBzZXRQcm90b3R5cGVPZigkQWdncmVnYXRlRXJyb3IsICRFcnJvcik7XG5lbHNlIGNvcHlDb25zdHJ1Y3RvclByb3BlcnRpZXMoJEFnZ3JlZ2F0ZUVycm9yLCAkRXJyb3IsIHsgbmFtZTogdHJ1ZSB9KTtcblxudmFyIEFnZ3JlZ2F0ZUVycm9yUHJvdG90eXBlID0gJEFnZ3JlZ2F0ZUVycm9yLnByb3RvdHlwZSA9IGNyZWF0ZSgkRXJyb3IucHJvdG90eXBlLCB7XG4gIGNvbnN0cnVjdG9yOiBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IoMSwgJEFnZ3JlZ2F0ZUVycm9yKSxcbiAgbWVzc2FnZTogY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yKDEsICcnKSxcbiAgbmFtZTogY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yKDEsICdBZ2dyZWdhdGVFcnJvcicpXG59KTtcblxuLy8gYEFnZ3JlZ2F0ZUVycm9yYCBjb25zdHJ1Y3RvclxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hZ2dyZWdhdGUtZXJyb3ItY29uc3RydWN0b3JcbiQoeyBnbG9iYWw6IHRydWUsIGNvbnN0cnVjdG9yOiB0cnVlLCBhcml0eTogMiB9LCB7XG4gIEFnZ3JlZ2F0ZUVycm9yOiAkQWdncmVnYXRlRXJyb3Jcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gVE9ETzogUmVtb3ZlIHRoaXMgbW9kdWxlIGZyb20gYGNvcmUtanNANGAgc2luY2UgaXQncyByZXBsYWNlZCB0byBtb2R1bGUgYmVsb3dcbnJlcXVpcmUoJy4uL21vZHVsZXMvZXMuYWdncmVnYXRlLWVycm9yLmNvbnN0cnVjdG9yJyk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGlzQXJyYXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtYXJyYXknKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1vYmplY3QnKTtcbnZhciBsZW5ndGhPZkFycmF5TGlrZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9sZW5ndGgtb2YtYXJyYXktbGlrZScpO1xudmFyIGRvZXNOb3RFeGNlZWRTYWZlSW50ZWdlciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kb2VzLW5vdC1leGNlZWQtc2FmZS1pbnRlZ2VyJyk7XG52YXIgY3JlYXRlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5Jyk7XG52YXIgYXJyYXlTcGVjaWVzQ3JlYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LXNwZWNpZXMtY3JlYXRlJyk7XG52YXIgYXJyYXlNZXRob2RIYXNTcGVjaWVzU3VwcG9ydCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1tZXRob2QtaGFzLXNwZWNpZXMtc3VwcG9ydCcpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xudmFyIFY4X1ZFUlNJT04gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW52aXJvbm1lbnQtdjgtdmVyc2lvbicpO1xuXG52YXIgSVNfQ09OQ0FUX1NQUkVBREFCTEUgPSB3ZWxsS25vd25TeW1ib2woJ2lzQ29uY2F0U3ByZWFkYWJsZScpO1xuXG4vLyBXZSBjYW4ndCB1c2UgdGhpcyBmZWF0dXJlIGRldGVjdGlvbiBpbiBWOCBzaW5jZSBpdCBjYXVzZXNcbi8vIGRlb3B0aW1pemF0aW9uIGFuZCBzZXJpb3VzIHBlcmZvcm1hbmNlIGRlZ3JhZGF0aW9uXG4vLyBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvNjc5XG52YXIgSVNfQ09OQ0FUX1NQUkVBREFCTEVfU1VQUE9SVCA9IFY4X1ZFUlNJT04gPj0gNTEgfHwgIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgdmFyIGFycmF5ID0gW107XG4gIGFycmF5W0lTX0NPTkNBVF9TUFJFQURBQkxFXSA9IGZhbHNlO1xuICByZXR1cm4gYXJyYXkuY29uY2F0KClbMF0gIT09IGFycmF5O1xufSk7XG5cbnZhciBpc0NvbmNhdFNwcmVhZGFibGUgPSBmdW5jdGlvbiAoTykge1xuICBpZiAoIWlzT2JqZWN0KE8pKSByZXR1cm4gZmFsc2U7XG4gIHZhciBzcHJlYWRhYmxlID0gT1tJU19DT05DQVRfU1BSRUFEQUJMRV07XG4gIHJldHVybiBzcHJlYWRhYmxlICE9PSB1bmRlZmluZWQgPyAhIXNwcmVhZGFibGUgOiBpc0FycmF5KE8pO1xufTtcblxudmFyIEZPUkNFRCA9ICFJU19DT05DQVRfU1BSRUFEQUJMRV9TVVBQT1JUIHx8ICFhcnJheU1ldGhvZEhhc1NwZWNpZXNTdXBwb3J0KCdjb25jYXQnKTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS5jb25jYXRgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuY29uY2F0XG4vLyB3aXRoIGFkZGluZyBzdXBwb3J0IG9mIEBAaXNDb25jYXRTcHJlYWRhYmxlIGFuZCBAQHNwZWNpZXNcbiQoeyB0YXJnZXQ6ICdBcnJheScsIHByb3RvOiB0cnVlLCBhcml0eTogMSwgZm9yY2VkOiBGT1JDRUQgfSwge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnMgLS0gcmVxdWlyZWQgZm9yIGAubGVuZ3RoYFxuICBjb25jYXQ6IGZ1bmN0aW9uIGNvbmNhdChhcmcpIHtcbiAgICB2YXIgTyA9IHRvT2JqZWN0KHRoaXMpO1xuICAgIHZhciBBID0gYXJyYXlTcGVjaWVzQ3JlYXRlKE8sIDApO1xuICAgIHZhciBuID0gMDtcbiAgICB2YXIgaSwgaywgbGVuZ3RoLCBsZW4sIEU7XG4gICAgZm9yIChpID0gLTEsIGxlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgRSA9IGkgPT09IC0xID8gTyA6IGFyZ3VtZW50c1tpXTtcbiAgICAgIGlmIChpc0NvbmNhdFNwcmVhZGFibGUoRSkpIHtcbiAgICAgICAgbGVuID0gbGVuZ3RoT2ZBcnJheUxpa2UoRSk7XG4gICAgICAgIGRvZXNOb3RFeGNlZWRTYWZlSW50ZWdlcihuICsgbGVuKTtcbiAgICAgICAgZm9yIChrID0gMDsgayA8IGxlbjsgaysrLCBuKyspIGlmIChrIGluIEUpIGNyZWF0ZVByb3BlcnR5KEEsIG4sIEVba10pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZG9lc05vdEV4Y2VlZFNhZmVJbnRlZ2VyKG4gKyAxKTtcbiAgICAgICAgY3JlYXRlUHJvcGVydHkoQSwgbisrLCBFKTtcbiAgICAgIH1cbiAgICB9XG4gICAgQS5sZW5ndGggPSBuO1xuICAgIHJldHVybiBBO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyICRmaWx0ZXIgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktaXRlcmF0aW9uJykuZmlsdGVyO1xudmFyIGFycmF5TWV0aG9kSGFzU3BlY2llc1N1cHBvcnQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktbWV0aG9kLWhhcy1zcGVjaWVzLXN1cHBvcnQnKTtcblxudmFyIEhBU19TUEVDSUVTX1NVUFBPUlQgPSBhcnJheU1ldGhvZEhhc1NwZWNpZXNTdXBwb3J0KCdmaWx0ZXInKTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS5maWx0ZXJgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuZmlsdGVyXG4vLyB3aXRoIGFkZGluZyBzdXBwb3J0IG9mIEBAc3BlY2llc1xuJCh7IHRhcmdldDogJ0FycmF5JywgcHJvdG86IHRydWUsIGZvcmNlZDogIUhBU19TUEVDSUVTX1NVUFBPUlQgfSwge1xuICBmaWx0ZXI6IGZ1bmN0aW9uIGZpbHRlcihjYWxsYmFja2ZuIC8qICwgdGhpc0FyZyAqLykge1xuICAgIHJldHVybiAkZmlsdGVyKHRoaXMsIGNhbGxiYWNrZm4sIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBmb3JFYWNoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LWZvci1lYWNoJyk7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUuZm9yRWFjaGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5mb3JlYWNoXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tYXJyYXktcHJvdG90eXBlLWZvcmVhY2ggLS0gc2FmZVxuJCh7IHRhcmdldDogJ0FycmF5JywgcHJvdG86IHRydWUsIGZvcmNlZDogW10uZm9yRWFjaCAhPT0gZm9yRWFjaCB9LCB7XG4gIGZvckVhY2g6IGZvckVhY2hcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgJGluY2x1ZGVzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LWluY2x1ZGVzJykuaW5jbHVkZXM7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBhZGRUb1Vuc2NvcGFibGVzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FkZC10by11bnNjb3BhYmxlcycpO1xuXG4vLyBGRjk5KyBidWdcbnZhciBCUk9LRU5fT05fU1BBUlNFID0gZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tYXJyYXktcHJvdG90eXBlLWluY2x1ZGVzIC0tIGRldGVjdGlvblxuICByZXR1cm4gIUFycmF5KDEpLmluY2x1ZGVzKCk7XG59KTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS5pbmNsdWRlc2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5pbmNsdWRlc1xuJCh7IHRhcmdldDogJ0FycmF5JywgcHJvdG86IHRydWUsIGZvcmNlZDogQlJPS0VOX09OX1NQQVJTRSB9LCB7XG4gIGluY2x1ZGVzOiBmdW5jdGlvbiBpbmNsdWRlcyhlbCAvKiAsIGZyb21JbmRleCA9IDAgKi8pIHtcbiAgICByZXR1cm4gJGluY2x1ZGVzKHRoaXMsIGVsLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4gIH1cbn0pO1xuXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS1AQHVuc2NvcGFibGVzXG5hZGRUb1Vuc2NvcGFibGVzKCdpbmNsdWRlcycpO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgaXNBcnJheSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1hcnJheScpO1xuXG4vLyBgQXJyYXkuaXNBcnJheWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LmlzYXJyYXlcbiQoeyB0YXJnZXQ6ICdBcnJheScsIHN0YXQ6IHRydWUgfSwge1xuICBpc0FycmF5OiBpc0FycmF5XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciB0b0luZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QnKTtcbnZhciBhZGRUb1Vuc2NvcGFibGVzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FkZC10by11bnNjb3BhYmxlcycpO1xudmFyIEl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvcnMnKTtcbnZhciBJbnRlcm5hbFN0YXRlTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ludGVybmFsLXN0YXRlJyk7XG52YXIgZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpLmY7XG52YXIgZGVmaW5lSXRlcmF0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0b3ItZGVmaW5lJyk7XG52YXIgY3JlYXRlSXRlclJlc3VsdE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtaXRlci1yZXN1bHQtb2JqZWN0Jyk7XG52YXIgSVNfUFVSRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1wdXJlJyk7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcblxudmFyIEFSUkFZX0lURVJBVE9SID0gJ0FycmF5IEl0ZXJhdG9yJztcbnZhciBzZXRJbnRlcm5hbFN0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5zZXQ7XG52YXIgZ2V0SW50ZXJuYWxTdGF0ZSA9IEludGVybmFsU3RhdGVNb2R1bGUuZ2V0dGVyRm9yKEFSUkFZX0lURVJBVE9SKTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS5lbnRyaWVzYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmVudHJpZXNcbi8vIGBBcnJheS5wcm90b3R5cGUua2V5c2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5rZXlzXG4vLyBgQXJyYXkucHJvdG90eXBlLnZhbHVlc2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS52YWx1ZXNcbi8vIGBBcnJheS5wcm90b3R5cGVbQEBpdGVyYXRvcl1gIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUtQEBpdGVyYXRvclxuLy8gYENyZWF0ZUFycmF5SXRlcmF0b3JgIGludGVybmFsIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1jcmVhdGVhcnJheWl0ZXJhdG9yXG5tb2R1bGUuZXhwb3J0cyA9IGRlZmluZUl0ZXJhdG9yKEFycmF5LCAnQXJyYXknLCBmdW5jdGlvbiAoaXRlcmF0ZWQsIGtpbmQpIHtcbiAgc2V0SW50ZXJuYWxTdGF0ZSh0aGlzLCB7XG4gICAgdHlwZTogQVJSQVlfSVRFUkFUT1IsXG4gICAgdGFyZ2V0OiB0b0luZGV4ZWRPYmplY3QoaXRlcmF0ZWQpLCAvLyB0YXJnZXRcbiAgICBpbmRleDogMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG5leHQgaW5kZXhcbiAgICBraW5kOiBraW5kICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGtpbmRcbiAgfSk7XG4vLyBgJUFycmF5SXRlcmF0b3JQcm90b3R5cGUlLm5leHRgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy0lYXJyYXlpdGVyYXRvcnByb3RvdHlwZSUubmV4dFxufSwgZnVuY3Rpb24gKCkge1xuICB2YXIgc3RhdGUgPSBnZXRJbnRlcm5hbFN0YXRlKHRoaXMpO1xuICB2YXIgdGFyZ2V0ID0gc3RhdGUudGFyZ2V0O1xuICB2YXIgaW5kZXggPSBzdGF0ZS5pbmRleCsrO1xuICBpZiAoIXRhcmdldCB8fCBpbmRleCA+PSB0YXJnZXQubGVuZ3RoKSB7XG4gICAgc3RhdGUudGFyZ2V0ID0gbnVsbDtcbiAgICByZXR1cm4gY3JlYXRlSXRlclJlc3VsdE9iamVjdCh1bmRlZmluZWQsIHRydWUpO1xuICB9XG4gIHN3aXRjaCAoc3RhdGUua2luZCkge1xuICAgIGNhc2UgJ2tleXMnOiByZXR1cm4gY3JlYXRlSXRlclJlc3VsdE9iamVjdChpbmRleCwgZmFsc2UpO1xuICAgIGNhc2UgJ3ZhbHVlcyc6IHJldHVybiBjcmVhdGVJdGVyUmVzdWx0T2JqZWN0KHRhcmdldFtpbmRleF0sIGZhbHNlKTtcbiAgfSByZXR1cm4gY3JlYXRlSXRlclJlc3VsdE9iamVjdChbaW5kZXgsIHRhcmdldFtpbmRleF1dLCBmYWxzZSk7XG59LCAndmFsdWVzJyk7XG5cbi8vIGFyZ3VtZW50c0xpc3RbQEBpdGVyYXRvcl0gaXMgJUFycmF5UHJvdG9fdmFsdWVzJVxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1jcmVhdGV1bm1hcHBlZGFyZ3VtZW50c29iamVjdFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1jcmVhdGVtYXBwZWRhcmd1bWVudHNvYmplY3RcbnZhciB2YWx1ZXMgPSBJdGVyYXRvcnMuQXJndW1lbnRzID0gSXRlcmF0b3JzLkFycmF5O1xuXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS1AQHVuc2NvcGFibGVzXG5hZGRUb1Vuc2NvcGFibGVzKCdrZXlzJyk7XG5hZGRUb1Vuc2NvcGFibGVzKCd2YWx1ZXMnKTtcbmFkZFRvVW5zY29wYWJsZXMoJ2VudHJpZXMnKTtcblxuLy8gVjggfiBDaHJvbWUgNDUtIGJ1Z1xuaWYgKCFJU19QVVJFICYmIERFU0NSSVBUT1JTICYmIHZhbHVlcy5uYW1lICE9PSAndmFsdWVzJykgdHJ5IHtcbiAgZGVmaW5lUHJvcGVydHkodmFsdWVzLCAnbmFtZScsIHsgdmFsdWU6ICd2YWx1ZXMnIH0pO1xufSBjYXRjaCAoZXJyb3IpIHsgLyogZW1wdHkgKi8gfVxuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgJHNvbWUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktaXRlcmF0aW9uJykuc29tZTtcbnZhciBhcnJheU1ldGhvZElzU3RyaWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LW1ldGhvZC1pcy1zdHJpY3QnKTtcblxudmFyIFNUUklDVF9NRVRIT0QgPSBhcnJheU1ldGhvZElzU3RyaWN0KCdzb21lJyk7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUuc29tZWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5zb21lXG4kKHsgdGFyZ2V0OiAnQXJyYXknLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiAhU1RSSUNUX01FVEhPRCB9LCB7XG4gIHNvbWU6IGZ1bmN0aW9uIHNvbWUoY2FsbGJhY2tmbiAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICByZXR1cm4gJHNvbWUodGhpcywgY2FsbGJhY2tmbiwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGFDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLWNhbGxhYmxlJyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tb2JqZWN0Jyk7XG52YXIgbGVuZ3RoT2ZBcnJheUxpa2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbGVuZ3RoLW9mLWFycmF5LWxpa2UnKTtcbnZhciBkZWxldGVQcm9wZXJ0eU9yVGhyb3cgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVsZXRlLXByb3BlcnR5LW9yLXRocm93Jyk7XG52YXIgdG9TdHJpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tc3RyaW5nJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBpbnRlcm5hbFNvcnQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktc29ydCcpO1xudmFyIGFycmF5TWV0aG9kSXNTdHJpY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktbWV0aG9kLWlzLXN0cmljdCcpO1xudmFyIEZGID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Vudmlyb25tZW50LWZmLXZlcnNpb24nKTtcbnZhciBJRV9PUl9FREdFID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Vudmlyb25tZW50LWlzLWllLW9yLWVkZ2UnKTtcbnZhciBWOCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbnZpcm9ubWVudC12OC12ZXJzaW9uJyk7XG52YXIgV0VCS0lUID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Vudmlyb25tZW50LXdlYmtpdC12ZXJzaW9uJyk7XG5cbnZhciB0ZXN0ID0gW107XG52YXIgbmF0aXZlU29ydCA9IHVuY3VycnlUaGlzKHRlc3Quc29ydCk7XG52YXIgcHVzaCA9IHVuY3VycnlUaGlzKHRlc3QucHVzaCk7XG5cbi8vIElFOC1cbnZhciBGQUlMU19PTl9VTkRFRklORUQgPSBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHRlc3Quc29ydCh1bmRlZmluZWQpO1xufSk7XG4vLyBWOCBidWdcbnZhciBGQUlMU19PTl9OVUxMID0gZmFpbHMoZnVuY3Rpb24gKCkge1xuICB0ZXN0LnNvcnQobnVsbCk7XG59KTtcbi8vIE9sZCBXZWJLaXRcbnZhciBTVFJJQ1RfTUVUSE9EID0gYXJyYXlNZXRob2RJc1N0cmljdCgnc29ydCcpO1xuXG52YXIgU1RBQkxFX1NPUlQgPSAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBmZWF0dXJlIGRldGVjdGlvbiBjYW4gYmUgdG9vIHNsb3csIHNvIGNoZWNrIGVuZ2luZXMgdmVyc2lvbnNcbiAgaWYgKFY4KSByZXR1cm4gVjggPCA3MDtcbiAgaWYgKEZGICYmIEZGID4gMykgcmV0dXJuO1xuICBpZiAoSUVfT1JfRURHRSkgcmV0dXJuIHRydWU7XG4gIGlmIChXRUJLSVQpIHJldHVybiBXRUJLSVQgPCA2MDM7XG5cbiAgdmFyIHJlc3VsdCA9ICcnO1xuICB2YXIgY29kZSwgY2hyLCB2YWx1ZSwgaW5kZXg7XG5cbiAgLy8gZ2VuZXJhdGUgYW4gYXJyYXkgd2l0aCBtb3JlIDUxMiBlbGVtZW50cyAoQ2hha3JhIGFuZCBvbGQgVjggZmFpbHMgb25seSBpbiB0aGlzIGNhc2UpXG4gIGZvciAoY29kZSA9IDY1OyBjb2RlIDwgNzY7IGNvZGUrKykge1xuICAgIGNociA9IFN0cmluZy5mcm9tQ2hhckNvZGUoY29kZSk7XG5cbiAgICBzd2l0Y2ggKGNvZGUpIHtcbiAgICAgIGNhc2UgNjY6IGNhc2UgNjk6IGNhc2UgNzA6IGNhc2UgNzI6IHZhbHVlID0gMzsgYnJlYWs7XG4gICAgICBjYXNlIDY4OiBjYXNlIDcxOiB2YWx1ZSA9IDQ7IGJyZWFrO1xuICAgICAgZGVmYXVsdDogdmFsdWUgPSAyO1xuICAgIH1cblxuICAgIGZvciAoaW5kZXggPSAwOyBpbmRleCA8IDQ3OyBpbmRleCsrKSB7XG4gICAgICB0ZXN0LnB1c2goeyBrOiBjaHIgKyBpbmRleCwgdjogdmFsdWUgfSk7XG4gICAgfVxuICB9XG5cbiAgdGVzdC5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7IHJldHVybiBiLnYgLSBhLnY7IH0pO1xuXG4gIGZvciAoaW5kZXggPSAwOyBpbmRleCA8IHRlc3QubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgY2hyID0gdGVzdFtpbmRleF0uay5jaGFyQXQoMCk7XG4gICAgaWYgKHJlc3VsdC5jaGFyQXQocmVzdWx0Lmxlbmd0aCAtIDEpICE9PSBjaHIpIHJlc3VsdCArPSBjaHI7XG4gIH1cblxuICByZXR1cm4gcmVzdWx0ICE9PSAnREdCRUZIQUNJSksnO1xufSk7XG5cbnZhciBGT1JDRUQgPSBGQUlMU19PTl9VTkRFRklORUQgfHwgIUZBSUxTX09OX05VTEwgfHwgIVNUUklDVF9NRVRIT0QgfHwgIVNUQUJMRV9TT1JUO1xuXG52YXIgZ2V0U29ydENvbXBhcmUgPSBmdW5jdGlvbiAoY29tcGFyZWZuKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoeCwgeSkge1xuICAgIGlmICh5ID09PSB1bmRlZmluZWQpIHJldHVybiAtMTtcbiAgICBpZiAoeCA9PT0gdW5kZWZpbmVkKSByZXR1cm4gMTtcbiAgICBpZiAoY29tcGFyZWZuICE9PSB1bmRlZmluZWQpIHJldHVybiArY29tcGFyZWZuKHgsIHkpIHx8IDA7XG4gICAgcmV0dXJuIHRvU3RyaW5nKHgpID4gdG9TdHJpbmcoeSkgPyAxIDogLTE7XG4gIH07XG59O1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLnNvcnRgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuc29ydFxuJCh7IHRhcmdldDogJ0FycmF5JywgcHJvdG86IHRydWUsIGZvcmNlZDogRk9SQ0VEIH0sIHtcbiAgc29ydDogZnVuY3Rpb24gc29ydChjb21wYXJlZm4pIHtcbiAgICBpZiAoY29tcGFyZWZuICE9PSB1bmRlZmluZWQpIGFDYWxsYWJsZShjb21wYXJlZm4pO1xuXG4gICAgdmFyIGFycmF5ID0gdG9PYmplY3QodGhpcyk7XG5cbiAgICBpZiAoU1RBQkxFX1NPUlQpIHJldHVybiBjb21wYXJlZm4gPT09IHVuZGVmaW5lZCA/IG5hdGl2ZVNvcnQoYXJyYXkpIDogbmF0aXZlU29ydChhcnJheSwgY29tcGFyZWZuKTtcblxuICAgIHZhciBpdGVtcyA9IFtdO1xuICAgIHZhciBhcnJheUxlbmd0aCA9IGxlbmd0aE9mQXJyYXlMaWtlKGFycmF5KTtcbiAgICB2YXIgaXRlbXNMZW5ndGgsIGluZGV4O1xuXG4gICAgZm9yIChpbmRleCA9IDA7IGluZGV4IDwgYXJyYXlMZW5ndGg7IGluZGV4KyspIHtcbiAgICAgIGlmIChpbmRleCBpbiBhcnJheSkgcHVzaChpdGVtcywgYXJyYXlbaW5kZXhdKTtcbiAgICB9XG5cbiAgICBpbnRlcm5hbFNvcnQoaXRlbXMsIGdldFNvcnRDb21wYXJlKGNvbXBhcmVmbikpO1xuXG4gICAgaXRlbXNMZW5ndGggPSBsZW5ndGhPZkFycmF5TGlrZShpdGVtcyk7XG4gICAgaW5kZXggPSAwO1xuXG4gICAgd2hpbGUgKGluZGV4IDwgaXRlbXNMZW5ndGgpIGFycmF5W2luZGV4XSA9IGl0ZW1zW2luZGV4KytdO1xuICAgIHdoaWxlIChpbmRleCA8IGFycmF5TGVuZ3RoKSBkZWxldGVQcm9wZXJ0eU9yVGhyb3coYXJyYXksIGluZGV4KyspO1xuXG4gICAgcmV0dXJuIGFycmF5O1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIFRPRE86IFJlbW92ZSBmcm9tIGBjb3JlLWpzQDRgXG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcblxudmFyICREYXRlID0gRGF0ZTtcbnZhciB0aGlzVGltZVZhbHVlID0gdW5jdXJyeVRoaXMoJERhdGUucHJvdG90eXBlLmdldFRpbWUpO1xuXG4vLyBgRGF0ZS5ub3dgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1kYXRlLm5vd1xuJCh7IHRhcmdldDogJ0RhdGUnLCBzdGF0OiB0cnVlIH0sIHtcbiAgbm93OiBmdW5jdGlvbiBub3coKSB7XG4gICAgcmV0dXJuIHRoaXNUaW1lVmFsdWUobmV3ICREYXRlKCkpO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLW9iamVjdCcpO1xudmFyIHRvUHJpbWl0aXZlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXByaW1pdGl2ZScpO1xudmFyIHRvSVNPU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RhdGUtdG8taXNvLXN0cmluZycpO1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZi1yYXcnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xuXG52YXIgRk9SQ0VEID0gZmFpbHMoZnVuY3Rpb24gKCkge1xuICByZXR1cm4gbmV3IERhdGUoTmFOKS50b0pTT04oKSAhPT0gbnVsbFxuICAgIHx8IGNhbGwoRGF0ZS5wcm90b3R5cGUudG9KU09OLCB7IHRvSVNPU3RyaW5nOiBmdW5jdGlvbiAoKSB7IHJldHVybiAxOyB9IH0pICE9PSAxO1xufSk7XG5cbi8vIGBEYXRlLnByb3RvdHlwZS50b0pTT05gIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1kYXRlLnByb3RvdHlwZS50b2pzb25cbiQoeyB0YXJnZXQ6ICdEYXRlJywgcHJvdG86IHRydWUsIGZvcmNlZDogRk9SQ0VEIH0sIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzIC0tIHJlcXVpcmVkIGZvciBgLmxlbmd0aGBcbiAgdG9KU09OOiBmdW5jdGlvbiB0b0pTT04oa2V5KSB7XG4gICAgdmFyIE8gPSB0b09iamVjdCh0aGlzKTtcbiAgICB2YXIgcHYgPSB0b1ByaW1pdGl2ZShPLCAnbnVtYmVyJyk7XG4gICAgcmV0dXJuIHR5cGVvZiBwdiA9PSAnbnVtYmVyJyAmJiAhaXNGaW5pdGUocHYpID8gbnVsbCA6XG4gICAgICAoISgndG9JU09TdHJpbmcnIGluIE8pICYmIGNsYXNzb2YoTykgPT09ICdEYXRlJykgPyBjYWxsKHRvSVNPU3RyaW5nLCBPKSA6IE8udG9JU09TdHJpbmcoKTtcbiAgfVxufSk7XG4iLCIvLyBlbXB0eVxuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcbnZhciBhcHBseSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1hcHBseScpO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGlzU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXN5bWJvbCcpO1xudmFyIGFycmF5U2xpY2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktc2xpY2UnKTtcbnZhciBnZXRSZXBsYWNlckZ1bmN0aW9uID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1qc29uLXJlcGxhY2VyLWZ1bmN0aW9uJyk7XG52YXIgTkFUSVZFX1NZTUJPTCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zeW1ib2wtY29uc3RydWN0b3ItZGV0ZWN0aW9uJyk7XG5cbnZhciAkU3RyaW5nID0gU3RyaW5nO1xudmFyICRzdHJpbmdpZnkgPSBnZXRCdWlsdEluKCdKU09OJywgJ3N0cmluZ2lmeScpO1xudmFyIGV4ZWMgPSB1bmN1cnJ5VGhpcygvLi8uZXhlYyk7XG52YXIgY2hhckF0ID0gdW5jdXJyeVRoaXMoJycuY2hhckF0KTtcbnZhciBjaGFyQ29kZUF0ID0gdW5jdXJyeVRoaXMoJycuY2hhckNvZGVBdCk7XG52YXIgcmVwbGFjZSA9IHVuY3VycnlUaGlzKCcnLnJlcGxhY2UpO1xudmFyIG51bWJlclRvU3RyaW5nID0gdW5jdXJyeVRoaXMoMS4wLnRvU3RyaW5nKTtcblxudmFyIHRlc3RlciA9IC9bXFx1RDgwMC1cXHVERkZGXS9nO1xudmFyIGxvdyA9IC9eW1xcdUQ4MDAtXFx1REJGRl0kLztcbnZhciBoaSA9IC9eW1xcdURDMDAtXFx1REZGRl0kLztcblxudmFyIFdST05HX1NZTUJPTFNfQ09OVkVSU0lPTiA9ICFOQVRJVkVfU1lNQk9MIHx8IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgdmFyIHN5bWJvbCA9IGdldEJ1aWx0SW4oJ1N5bWJvbCcpKCdzdHJpbmdpZnkgZGV0ZWN0aW9uJyk7XG4gIC8vIE1TIEVkZ2UgY29udmVydHMgc3ltYm9sIHZhbHVlcyB0byBKU09OIGFzIHt9XG4gIHJldHVybiAkc3RyaW5naWZ5KFtzeW1ib2xdKSAhPT0gJ1tudWxsXSdcbiAgICAvLyBXZWJLaXQgY29udmVydHMgc3ltYm9sIHZhbHVlcyB0byBKU09OIGFzIG51bGxcbiAgICB8fCAkc3RyaW5naWZ5KHsgYTogc3ltYm9sIH0pICE9PSAne30nXG4gICAgLy8gVjggdGhyb3dzIG9uIGJveGVkIHN5bWJvbHNcbiAgICB8fCAkc3RyaW5naWZ5KE9iamVjdChzeW1ib2wpKSAhPT0gJ3t9Jztcbn0pO1xuXG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC13ZWxsLWZvcm1lZC1zdHJpbmdpZnlcbnZhciBJTExfRk9STUVEX1VOSUNPREUgPSBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHJldHVybiAkc3RyaW5naWZ5KCdcXHVERjA2XFx1RDgzNCcpICE9PSAnXCJcXFxcdWRmMDZcXFxcdWQ4MzRcIidcbiAgICB8fCAkc3RyaW5naWZ5KCdcXHVERUFEJykgIT09ICdcIlxcXFx1ZGVhZFwiJztcbn0pO1xuXG52YXIgc3RyaW5naWZ5V2l0aFN5bWJvbHNGaXggPSBmdW5jdGlvbiAoaXQsIHJlcGxhY2VyKSB7XG4gIHZhciBhcmdzID0gYXJyYXlTbGljZShhcmd1bWVudHMpO1xuICB2YXIgJHJlcGxhY2VyID0gZ2V0UmVwbGFjZXJGdW5jdGlvbihyZXBsYWNlcik7XG4gIGlmICghaXNDYWxsYWJsZSgkcmVwbGFjZXIpICYmIChpdCA9PT0gdW5kZWZpbmVkIHx8IGlzU3ltYm9sKGl0KSkpIHJldHVybjsgLy8gSUU4IHJldHVybnMgc3RyaW5nIG9uIHVuZGVmaW5lZFxuICBhcmdzWzFdID0gZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgICAvLyBzb21lIG9sZCBpbXBsZW1lbnRhdGlvbnMgKGxpa2UgV2ViS2l0KSBjb3VsZCBwYXNzIG51bWJlcnMgYXMga2V5c1xuICAgIGlmIChpc0NhbGxhYmxlKCRyZXBsYWNlcikpIHZhbHVlID0gY2FsbCgkcmVwbGFjZXIsIHRoaXMsICRTdHJpbmcoa2V5KSwgdmFsdWUpO1xuICAgIGlmICghaXNTeW1ib2wodmFsdWUpKSByZXR1cm4gdmFsdWU7XG4gIH07XG4gIHJldHVybiBhcHBseSgkc3RyaW5naWZ5LCBudWxsLCBhcmdzKTtcbn07XG5cbnZhciBmaXhJbGxGb3JtZWQgPSBmdW5jdGlvbiAobWF0Y2gsIG9mZnNldCwgc3RyaW5nKSB7XG4gIHZhciBwcmV2ID0gY2hhckF0KHN0cmluZywgb2Zmc2V0IC0gMSk7XG4gIHZhciBuZXh0ID0gY2hhckF0KHN0cmluZywgb2Zmc2V0ICsgMSk7XG4gIGlmICgoZXhlYyhsb3csIG1hdGNoKSAmJiAhZXhlYyhoaSwgbmV4dCkpIHx8IChleGVjKGhpLCBtYXRjaCkgJiYgIWV4ZWMobG93LCBwcmV2KSkpIHtcbiAgICByZXR1cm4gJ1xcXFx1JyArIG51bWJlclRvU3RyaW5nKGNoYXJDb2RlQXQobWF0Y2gsIDApLCAxNik7XG4gIH0gcmV0dXJuIG1hdGNoO1xufTtcblxuaWYgKCRzdHJpbmdpZnkpIHtcbiAgLy8gYEpTT04uc3RyaW5naWZ5YCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1qc29uLnN0cmluZ2lmeVxuICAkKHsgdGFyZ2V0OiAnSlNPTicsIHN0YXQ6IHRydWUsIGFyaXR5OiAzLCBmb3JjZWQ6IFdST05HX1NZTUJPTFNfQ09OVkVSU0lPTiB8fCBJTExfRk9STUVEX1VOSUNPREUgfSwge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFycyAtLSByZXF1aXJlZCBmb3IgYC5sZW5ndGhgXG4gICAgc3RyaW5naWZ5OiBmdW5jdGlvbiBzdHJpbmdpZnkoaXQsIHJlcGxhY2VyLCBzcGFjZSkge1xuICAgICAgdmFyIGFyZ3MgPSBhcnJheVNsaWNlKGFyZ3VtZW50cyk7XG4gICAgICB2YXIgcmVzdWx0ID0gYXBwbHkoV1JPTkdfU1lNQk9MU19DT05WRVJTSU9OID8gc3RyaW5naWZ5V2l0aFN5bWJvbHNGaXggOiAkc3RyaW5naWZ5LCBudWxsLCBhcmdzKTtcbiAgICAgIHJldHVybiBJTExfRk9STUVEX1VOSUNPREUgJiYgdHlwZW9mIHJlc3VsdCA9PSAnc3RyaW5nJyA/IHJlcGxhY2UocmVzdWx0LCB0ZXN0ZXIsIGZpeElsbEZvcm1lZCkgOiByZXN1bHQ7XG4gICAgfVxuICB9KTtcbn1cbiIsIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG52YXIgc2V0VG9TdHJpbmdUYWcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LXRvLXN0cmluZy10YWcnKTtcblxuLy8gSlNPTltAQHRvU3RyaW5nVGFnXSBwcm9wZXJ0eVxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1qc29uLUBAdG9zdHJpbmd0YWdcbnNldFRvU3RyaW5nVGFnKGdsb2JhbFRoaXMuSlNPTiwgJ0pTT04nLCB0cnVlKTtcbiIsIi8vIGVtcHR5XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBhc3NpZ24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWFzc2lnbicpO1xuXG4vLyBgT2JqZWN0LmFzc2lnbmAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5hc3NpZ25cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtYXNzaWduIC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG4kKHsgdGFyZ2V0OiAnT2JqZWN0Jywgc3RhdDogdHJ1ZSwgYXJpdHk6IDIsIGZvcmNlZDogT2JqZWN0LmFzc2lnbiAhPT0gYXNzaWduIH0sIHtcbiAgYXNzaWduOiBhc3NpZ25cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBkZWZpbmVQcm9wZXJ0aWVzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydGllcycpLmY7XG5cbi8vIGBPYmplY3QuZGVmaW5lUHJvcGVydGllc2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5kZWZpbmVwcm9wZXJ0aWVzXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnRpZXMgLS0gc2FmZVxuJCh7IHRhcmdldDogJ09iamVjdCcsIHN0YXQ6IHRydWUsIGZvcmNlZDogT2JqZWN0LmRlZmluZVByb3BlcnRpZXMgIT09IGRlZmluZVByb3BlcnRpZXMsIHNoYW06ICFERVNDUklQVE9SUyB9LCB7XG4gIGRlZmluZVByb3BlcnRpZXM6IGRlZmluZVByb3BlcnRpZXNcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBkZWZpbmVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5JykuZjtcblxuLy8gYE9iamVjdC5kZWZpbmVQcm9wZXJ0eWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5kZWZpbmVwcm9wZXJ0eVxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSBzYWZlXG4kKHsgdGFyZ2V0OiAnT2JqZWN0Jywgc3RhdDogdHJ1ZSwgZm9yY2VkOiBPYmplY3QuZGVmaW5lUHJvcGVydHkgIT09IGRlZmluZVByb3BlcnR5LCBzaGFtOiAhREVTQ1JJUFRPUlMgfSwge1xuICBkZWZpbmVQcm9wZXJ0eTogZGVmaW5lUHJvcGVydHlcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciB0b0luZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QnKTtcbnZhciBuYXRpdmVHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvcicpLmY7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcblxudmFyIEZPUkNFRCA9ICFERVNDUklQVE9SUyB8fCBmYWlscyhmdW5jdGlvbiAoKSB7IG5hdGl2ZUdldE93blByb3BlcnR5RGVzY3JpcHRvcigxKTsgfSk7XG5cbi8vIGBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmdldG93bnByb3BlcnR5ZGVzY3JpcHRvclxuJCh7IHRhcmdldDogJ09iamVjdCcsIHN0YXQ6IHRydWUsIGZvcmNlZDogRk9SQ0VELCBzaGFtOiAhREVTQ1JJUFRPUlMgfSwge1xuICBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I6IGZ1bmN0aW9uIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihpdCwga2V5KSB7XG4gICAgcmV0dXJuIG5hdGl2ZUdldE93blByb3BlcnR5RGVzY3JpcHRvcih0b0luZGV4ZWRPYmplY3QoaXQpLCBrZXkpO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgb3duS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vd24ta2V5cycpO1xudmFyIHRvSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdCcpO1xudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvck1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yJyk7XG52YXIgY3JlYXRlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5Jyk7XG5cbi8vIGBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yc2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3JzXG4kKHsgdGFyZ2V0OiAnT2JqZWN0Jywgc3RhdDogdHJ1ZSwgc2hhbTogIURFU0NSSVBUT1JTIH0sIHtcbiAgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yczogZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhvYmplY3QpIHtcbiAgICB2YXIgTyA9IHRvSW5kZXhlZE9iamVjdChvYmplY3QpO1xuICAgIHZhciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JNb2R1bGUuZjtcbiAgICB2YXIga2V5cyA9IG93bktleXMoTyk7XG4gICAgdmFyIHJlc3VsdCA9IHt9O1xuICAgIHZhciBpbmRleCA9IDA7XG4gICAgdmFyIGtleSwgZGVzY3JpcHRvcjtcbiAgICB3aGlsZSAoa2V5cy5sZW5ndGggPiBpbmRleCkge1xuICAgICAgZGVzY3JpcHRvciA9IGdldE93blByb3BlcnR5RGVzY3JpcHRvcihPLCBrZXkgPSBrZXlzW2luZGV4KytdKTtcbiAgICAgIGlmIChkZXNjcmlwdG9yICE9PSB1bmRlZmluZWQpIGNyZWF0ZVByb3BlcnR5KHJlc3VsdCwga2V5LCBkZXNjcmlwdG9yKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBOQVRJVkVfU1lNQk9MID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3N5bWJvbC1jb25zdHJ1Y3Rvci1kZXRlY3Rpb24nKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGdldE93blByb3BlcnR5U3ltYm9sc01vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1zeW1ib2xzJyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tb2JqZWN0Jyk7XG5cbi8vIFY4IH4gQ2hyb21lIDM4IGFuZCAzOSBgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9sc2AgZmFpbHMgb24gcHJpbWl0aXZlc1xuLy8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9MzQ0M1xudmFyIEZPUkNFRCA9ICFOQVRJVkVfU1lNQk9MIHx8IGZhaWxzKGZ1bmN0aW9uICgpIHsgZ2V0T3duUHJvcGVydHlTeW1ib2xzTW9kdWxlLmYoMSk7IH0pO1xuXG4vLyBgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9sc2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5nZXRvd25wcm9wZXJ0eXN5bWJvbHNcbiQoeyB0YXJnZXQ6ICdPYmplY3QnLCBzdGF0OiB0cnVlLCBmb3JjZWQ6IEZPUkNFRCB9LCB7XG4gIGdldE93blByb3BlcnR5U3ltYm9sczogZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlTeW1ib2xzKGl0KSB7XG4gICAgdmFyICRnZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPSBnZXRPd25Qcm9wZXJ0eVN5bWJvbHNNb2R1bGUuZjtcbiAgICByZXR1cm4gJGdldE93blByb3BlcnR5U3ltYm9scyA/ICRnZXRPd25Qcm9wZXJ0eVN5bWJvbHModG9PYmplY3QoaXQpKSA6IFtdO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLW9iamVjdCcpO1xudmFyIG5hdGl2ZUtleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWtleXMnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xuXG52YXIgRkFJTFNfT05fUFJJTUlUSVZFUyA9IGZhaWxzKGZ1bmN0aW9uICgpIHsgbmF0aXZlS2V5cygxKTsgfSk7XG5cbi8vIGBPYmplY3Qua2V5c2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5rZXlzXG4kKHsgdGFyZ2V0OiAnT2JqZWN0Jywgc3RhdDogdHJ1ZSwgZm9yY2VkOiBGQUlMU19PTl9QUklNSVRJVkVTIH0sIHtcbiAga2V5czogZnVuY3Rpb24ga2V5cyhpdCkge1xuICAgIHJldHVybiBuYXRpdmVLZXlzKHRvT2JqZWN0KGl0KSk7XG4gIH1cbn0pO1xuIiwiLy8gZW1wdHlcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIGFDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLWNhbGxhYmxlJyk7XG52YXIgbmV3UHJvbWlzZUNhcGFiaWxpdHlNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbmV3LXByb21pc2UtY2FwYWJpbGl0eScpO1xudmFyIHBlcmZvcm0gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcGVyZm9ybScpO1xudmFyIGl0ZXJhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0ZScpO1xudmFyIFBST01JU0VfU1RBVElDU19JTkNPUlJFQ1RfSVRFUkFUSU9OID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3Byb21pc2Utc3RhdGljcy1pbmNvcnJlY3QtaXRlcmF0aW9uJyk7XG5cbi8vIGBQcm9taXNlLmFsbFNldHRsZWRgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1wcm9taXNlLmFsbHNldHRsZWRcbiQoeyB0YXJnZXQ6ICdQcm9taXNlJywgc3RhdDogdHJ1ZSwgZm9yY2VkOiBQUk9NSVNFX1NUQVRJQ1NfSU5DT1JSRUNUX0lURVJBVElPTiB9LCB7XG4gIGFsbFNldHRsZWQ6IGZ1bmN0aW9uIGFsbFNldHRsZWQoaXRlcmFibGUpIHtcbiAgICB2YXIgQyA9IHRoaXM7XG4gICAgdmFyIGNhcGFiaWxpdHkgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eU1vZHVsZS5mKEMpO1xuICAgIHZhciByZXNvbHZlID0gY2FwYWJpbGl0eS5yZXNvbHZlO1xuICAgIHZhciByZWplY3QgPSBjYXBhYmlsaXR5LnJlamVjdDtcbiAgICB2YXIgcmVzdWx0ID0gcGVyZm9ybShmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgcHJvbWlzZVJlc29sdmUgPSBhQ2FsbGFibGUoQy5yZXNvbHZlKTtcbiAgICAgIHZhciB2YWx1ZXMgPSBbXTtcbiAgICAgIHZhciBjb3VudGVyID0gMDtcbiAgICAgIHZhciByZW1haW5pbmcgPSAxO1xuICAgICAgaXRlcmF0ZShpdGVyYWJsZSwgZnVuY3Rpb24gKHByb21pc2UpIHtcbiAgICAgICAgdmFyIGluZGV4ID0gY291bnRlcisrO1xuICAgICAgICB2YXIgYWxyZWFkeUNhbGxlZCA9IGZhbHNlO1xuICAgICAgICByZW1haW5pbmcrKztcbiAgICAgICAgY2FsbChwcm9taXNlUmVzb2x2ZSwgQywgcHJvbWlzZSkudGhlbihmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICBpZiAoYWxyZWFkeUNhbGxlZCkgcmV0dXJuO1xuICAgICAgICAgIGFscmVhZHlDYWxsZWQgPSB0cnVlO1xuICAgICAgICAgIHZhbHVlc1tpbmRleF0gPSB7IHN0YXR1czogJ2Z1bGZpbGxlZCcsIHZhbHVlOiB2YWx1ZSB9O1xuICAgICAgICAgIC0tcmVtYWluaW5nIHx8IHJlc29sdmUodmFsdWVzKTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKGVycm9yKSB7XG4gICAgICAgICAgaWYgKGFscmVhZHlDYWxsZWQpIHJldHVybjtcbiAgICAgICAgICBhbHJlYWR5Q2FsbGVkID0gdHJ1ZTtcbiAgICAgICAgICB2YWx1ZXNbaW5kZXhdID0geyBzdGF0dXM6ICdyZWplY3RlZCcsIHJlYXNvbjogZXJyb3IgfTtcbiAgICAgICAgICAtLXJlbWFpbmluZyB8fCByZXNvbHZlKHZhbHVlcyk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgICAtLXJlbWFpbmluZyB8fCByZXNvbHZlKHZhbHVlcyk7XG4gICAgfSk7XG4gICAgaWYgKHJlc3VsdC5lcnJvcikgcmVqZWN0KHJlc3VsdC52YWx1ZSk7XG4gICAgcmV0dXJuIGNhcGFiaWxpdHkucHJvbWlzZTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciBhQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1jYWxsYWJsZScpO1xudmFyIG5ld1Byb21pc2VDYXBhYmlsaXR5TW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL25ldy1wcm9taXNlLWNhcGFiaWxpdHknKTtcbnZhciBwZXJmb3JtID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3BlcmZvcm0nKTtcbnZhciBpdGVyYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdGUnKTtcbnZhciBQUk9NSVNFX1NUQVRJQ1NfSU5DT1JSRUNUX0lURVJBVElPTiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9wcm9taXNlLXN0YXRpY3MtaW5jb3JyZWN0LWl0ZXJhdGlvbicpO1xuXG4vLyBgUHJvbWlzZS5hbGxgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1wcm9taXNlLmFsbFxuJCh7IHRhcmdldDogJ1Byb21pc2UnLCBzdGF0OiB0cnVlLCBmb3JjZWQ6IFBST01JU0VfU1RBVElDU19JTkNPUlJFQ1RfSVRFUkFUSU9OIH0sIHtcbiAgYWxsOiBmdW5jdGlvbiBhbGwoaXRlcmFibGUpIHtcbiAgICB2YXIgQyA9IHRoaXM7XG4gICAgdmFyIGNhcGFiaWxpdHkgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eU1vZHVsZS5mKEMpO1xuICAgIHZhciByZXNvbHZlID0gY2FwYWJpbGl0eS5yZXNvbHZlO1xuICAgIHZhciByZWplY3QgPSBjYXBhYmlsaXR5LnJlamVjdDtcbiAgICB2YXIgcmVzdWx0ID0gcGVyZm9ybShmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgJHByb21pc2VSZXNvbHZlID0gYUNhbGxhYmxlKEMucmVzb2x2ZSk7XG4gICAgICB2YXIgdmFsdWVzID0gW107XG4gICAgICB2YXIgY291bnRlciA9IDA7XG4gICAgICB2YXIgcmVtYWluaW5nID0gMTtcbiAgICAgIGl0ZXJhdGUoaXRlcmFibGUsIGZ1bmN0aW9uIChwcm9taXNlKSB7XG4gICAgICAgIHZhciBpbmRleCA9IGNvdW50ZXIrKztcbiAgICAgICAgdmFyIGFscmVhZHlDYWxsZWQgPSBmYWxzZTtcbiAgICAgICAgcmVtYWluaW5nKys7XG4gICAgICAgIGNhbGwoJHByb21pc2VSZXNvbHZlLCBDLCBwcm9taXNlKS50aGVuKGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgIGlmIChhbHJlYWR5Q2FsbGVkKSByZXR1cm47XG4gICAgICAgICAgYWxyZWFkeUNhbGxlZCA9IHRydWU7XG4gICAgICAgICAgdmFsdWVzW2luZGV4XSA9IHZhbHVlO1xuICAgICAgICAgIC0tcmVtYWluaW5nIHx8IHJlc29sdmUodmFsdWVzKTtcbiAgICAgICAgfSwgcmVqZWN0KTtcbiAgICAgIH0pO1xuICAgICAgLS1yZW1haW5pbmcgfHwgcmVzb2x2ZSh2YWx1ZXMpO1xuICAgIH0pO1xuICAgIGlmIChyZXN1bHQuZXJyb3IpIHJlamVjdChyZXN1bHQudmFsdWUpO1xuICAgIHJldHVybiBjYXBhYmlsaXR5LnByb21pc2U7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgYUNhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2EtY2FsbGFibGUnKTtcbnZhciBnZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbicpO1xudmFyIG5ld1Byb21pc2VDYXBhYmlsaXR5TW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL25ldy1wcm9taXNlLWNhcGFiaWxpdHknKTtcbnZhciBwZXJmb3JtID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3BlcmZvcm0nKTtcbnZhciBpdGVyYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdGUnKTtcbnZhciBQUk9NSVNFX1NUQVRJQ1NfSU5DT1JSRUNUX0lURVJBVElPTiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9wcm9taXNlLXN0YXRpY3MtaW5jb3JyZWN0LWl0ZXJhdGlvbicpO1xuXG52YXIgUFJPTUlTRV9BTllfRVJST1IgPSAnTm8gb25lIHByb21pc2UgcmVzb2x2ZWQnO1xuXG4vLyBgUHJvbWlzZS5hbnlgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1wcm9taXNlLmFueVxuJCh7IHRhcmdldDogJ1Byb21pc2UnLCBzdGF0OiB0cnVlLCBmb3JjZWQ6IFBST01JU0VfU1RBVElDU19JTkNPUlJFQ1RfSVRFUkFUSU9OIH0sIHtcbiAgYW55OiBmdW5jdGlvbiBhbnkoaXRlcmFibGUpIHtcbiAgICB2YXIgQyA9IHRoaXM7XG4gICAgdmFyIEFnZ3JlZ2F0ZUVycm9yID0gZ2V0QnVpbHRJbignQWdncmVnYXRlRXJyb3InKTtcbiAgICB2YXIgY2FwYWJpbGl0eSA9IG5ld1Byb21pc2VDYXBhYmlsaXR5TW9kdWxlLmYoQyk7XG4gICAgdmFyIHJlc29sdmUgPSBjYXBhYmlsaXR5LnJlc29sdmU7XG4gICAgdmFyIHJlamVjdCA9IGNhcGFiaWxpdHkucmVqZWN0O1xuICAgIHZhciByZXN1bHQgPSBwZXJmb3JtKGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciBwcm9taXNlUmVzb2x2ZSA9IGFDYWxsYWJsZShDLnJlc29sdmUpO1xuICAgICAgdmFyIGVycm9ycyA9IFtdO1xuICAgICAgdmFyIGNvdW50ZXIgPSAwO1xuICAgICAgdmFyIHJlbWFpbmluZyA9IDE7XG4gICAgICB2YXIgYWxyZWFkeVJlc29sdmVkID0gZmFsc2U7XG4gICAgICBpdGVyYXRlKGl0ZXJhYmxlLCBmdW5jdGlvbiAocHJvbWlzZSkge1xuICAgICAgICB2YXIgaW5kZXggPSBjb3VudGVyKys7XG4gICAgICAgIHZhciBhbHJlYWR5UmVqZWN0ZWQgPSBmYWxzZTtcbiAgICAgICAgcmVtYWluaW5nKys7XG4gICAgICAgIGNhbGwocHJvbWlzZVJlc29sdmUsIEMsIHByb21pc2UpLnRoZW4oZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgaWYgKGFscmVhZHlSZWplY3RlZCB8fCBhbHJlYWR5UmVzb2x2ZWQpIHJldHVybjtcbiAgICAgICAgICBhbHJlYWR5UmVzb2x2ZWQgPSB0cnVlO1xuICAgICAgICAgIHJlc29sdmUodmFsdWUpO1xuICAgICAgICB9LCBmdW5jdGlvbiAoZXJyb3IpIHtcbiAgICAgICAgICBpZiAoYWxyZWFkeVJlamVjdGVkIHx8IGFscmVhZHlSZXNvbHZlZCkgcmV0dXJuO1xuICAgICAgICAgIGFscmVhZHlSZWplY3RlZCA9IHRydWU7XG4gICAgICAgICAgZXJyb3JzW2luZGV4XSA9IGVycm9yO1xuICAgICAgICAgIC0tcmVtYWluaW5nIHx8IHJlamVjdChuZXcgQWdncmVnYXRlRXJyb3IoZXJyb3JzLCBQUk9NSVNFX0FOWV9FUlJPUikpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgICAgLS1yZW1haW5pbmcgfHwgcmVqZWN0KG5ldyBBZ2dyZWdhdGVFcnJvcihlcnJvcnMsIFBST01JU0VfQU5ZX0VSUk9SKSk7XG4gICAgfSk7XG4gICAgaWYgKHJlc3VsdC5lcnJvcikgcmVqZWN0KHJlc3VsdC52YWx1ZSk7XG4gICAgcmV0dXJuIGNhcGFiaWxpdHkucHJvbWlzZTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBJU19QVVJFID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXB1cmUnKTtcbnZhciBGT1JDRURfUFJPTUlTRV9DT05TVFJVQ1RPUiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9wcm9taXNlLWNvbnN0cnVjdG9yLWRldGVjdGlvbicpLkNPTlNUUlVDVE9SO1xudmFyIE5hdGl2ZVByb21pc2VDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9wcm9taXNlLW5hdGl2ZS1jb25zdHJ1Y3RvcicpO1xudmFyIGdldEJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGRlZmluZUJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWluJyk7XG5cbnZhciBOYXRpdmVQcm9taXNlUHJvdG90eXBlID0gTmF0aXZlUHJvbWlzZUNvbnN0cnVjdG9yICYmIE5hdGl2ZVByb21pc2VDb25zdHJ1Y3Rvci5wcm90b3R5cGU7XG5cbi8vIGBQcm9taXNlLnByb3RvdHlwZS5jYXRjaGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXByb21pc2UucHJvdG90eXBlLmNhdGNoXG4kKHsgdGFyZ2V0OiAnUHJvbWlzZScsIHByb3RvOiB0cnVlLCBmb3JjZWQ6IEZPUkNFRF9QUk9NSVNFX0NPTlNUUlVDVE9SLCByZWFsOiB0cnVlIH0sIHtcbiAgJ2NhdGNoJzogZnVuY3Rpb24gKG9uUmVqZWN0ZWQpIHtcbiAgICByZXR1cm4gdGhpcy50aGVuKHVuZGVmaW5lZCwgb25SZWplY3RlZCk7XG4gIH1cbn0pO1xuXG4vLyBtYWtlcyBzdXJlIHRoYXQgbmF0aXZlIHByb21pc2UtYmFzZWQgQVBJcyBgUHJvbWlzZSNjYXRjaGAgcHJvcGVybHkgd29ya3Mgd2l0aCBwYXRjaGVkIGBQcm9taXNlI3RoZW5gXG5pZiAoIUlTX1BVUkUgJiYgaXNDYWxsYWJsZShOYXRpdmVQcm9taXNlQ29uc3RydWN0b3IpKSB7XG4gIHZhciBtZXRob2QgPSBnZXRCdWlsdEluKCdQcm9taXNlJykucHJvdG90eXBlWydjYXRjaCddO1xuICBpZiAoTmF0aXZlUHJvbWlzZVByb3RvdHlwZVsnY2F0Y2gnXSAhPT0gbWV0aG9kKSB7XG4gICAgZGVmaW5lQnVpbHRJbihOYXRpdmVQcm9taXNlUHJvdG90eXBlLCAnY2F0Y2gnLCBtZXRob2QsIHsgdW5zYWZlOiB0cnVlIH0pO1xuICB9XG59XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBJU19QVVJFID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXB1cmUnKTtcbnZhciBJU19OT0RFID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Vudmlyb25tZW50LWlzLW5vZGUnKTtcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgZGVmaW5lQnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4nKTtcbnZhciBzZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3Qtc2V0LXByb3RvdHlwZS1vZicpO1xudmFyIHNldFRvU3RyaW5nVGFnID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC10by1zdHJpbmctdGFnJyk7XG52YXIgc2V0U3BlY2llcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtc3BlY2llcycpO1xudmFyIGFDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLWNhbGxhYmxlJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xudmFyIGFuSW5zdGFuY2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4taW5zdGFuY2UnKTtcbnZhciBzcGVjaWVzQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3BlY2llcy1jb25zdHJ1Y3RvcicpO1xudmFyIHRhc2sgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdGFzaycpLnNldDtcbnZhciBtaWNyb3Rhc2sgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbWljcm90YXNrJyk7XG52YXIgaG9zdFJlcG9ydEVycm9ycyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9ob3N0LXJlcG9ydC1lcnJvcnMnKTtcbnZhciBwZXJmb3JtID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3BlcmZvcm0nKTtcbnZhciBRdWV1ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9xdWV1ZScpO1xudmFyIEludGVybmFsU3RhdGVNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW50ZXJuYWwtc3RhdGUnKTtcbnZhciBOYXRpdmVQcm9taXNlQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcHJvbWlzZS1uYXRpdmUtY29uc3RydWN0b3InKTtcbnZhciBQcm9taXNlQ29uc3RydWN0b3JEZXRlY3Rpb24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcHJvbWlzZS1jb25zdHJ1Y3Rvci1kZXRlY3Rpb24nKTtcbnZhciBuZXdQcm9taXNlQ2FwYWJpbGl0eU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9uZXctcHJvbWlzZS1jYXBhYmlsaXR5Jyk7XG5cbnZhciBQUk9NSVNFID0gJ1Byb21pc2UnO1xudmFyIEZPUkNFRF9QUk9NSVNFX0NPTlNUUlVDVE9SID0gUHJvbWlzZUNvbnN0cnVjdG9yRGV0ZWN0aW9uLkNPTlNUUlVDVE9SO1xudmFyIE5BVElWRV9QUk9NSVNFX1JFSkVDVElPTl9FVkVOVCA9IFByb21pc2VDb25zdHJ1Y3RvckRldGVjdGlvbi5SRUpFQ1RJT05fRVZFTlQ7XG52YXIgTkFUSVZFX1BST01JU0VfU1VCQ0xBU1NJTkcgPSBQcm9taXNlQ29uc3RydWN0b3JEZXRlY3Rpb24uU1VCQ0xBU1NJTkc7XG52YXIgZ2V0SW50ZXJuYWxQcm9taXNlU3RhdGUgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLmdldHRlckZvcihQUk9NSVNFKTtcbnZhciBzZXRJbnRlcm5hbFN0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5zZXQ7XG52YXIgTmF0aXZlUHJvbWlzZVByb3RvdHlwZSA9IE5hdGl2ZVByb21pc2VDb25zdHJ1Y3RvciAmJiBOYXRpdmVQcm9taXNlQ29uc3RydWN0b3IucHJvdG90eXBlO1xudmFyIFByb21pc2VDb25zdHJ1Y3RvciA9IE5hdGl2ZVByb21pc2VDb25zdHJ1Y3RvcjtcbnZhciBQcm9taXNlUHJvdG90eXBlID0gTmF0aXZlUHJvbWlzZVByb3RvdHlwZTtcbnZhciBUeXBlRXJyb3IgPSBnbG9iYWxUaGlzLlR5cGVFcnJvcjtcbnZhciBkb2N1bWVudCA9IGdsb2JhbFRoaXMuZG9jdW1lbnQ7XG52YXIgcHJvY2VzcyA9IGdsb2JhbFRoaXMucHJvY2VzcztcbnZhciBuZXdQcm9taXNlQ2FwYWJpbGl0eSA9IG5ld1Byb21pc2VDYXBhYmlsaXR5TW9kdWxlLmY7XG52YXIgbmV3R2VuZXJpY1Byb21pc2VDYXBhYmlsaXR5ID0gbmV3UHJvbWlzZUNhcGFiaWxpdHk7XG5cbnZhciBESVNQQVRDSF9FVkVOVCA9ICEhKGRvY3VtZW50ICYmIGRvY3VtZW50LmNyZWF0ZUV2ZW50ICYmIGdsb2JhbFRoaXMuZGlzcGF0Y2hFdmVudCk7XG52YXIgVU5IQU5ETEVEX1JFSkVDVElPTiA9ICd1bmhhbmRsZWRyZWplY3Rpb24nO1xudmFyIFJFSkVDVElPTl9IQU5ETEVEID0gJ3JlamVjdGlvbmhhbmRsZWQnO1xudmFyIFBFTkRJTkcgPSAwO1xudmFyIEZVTEZJTExFRCA9IDE7XG52YXIgUkVKRUNURUQgPSAyO1xudmFyIEhBTkRMRUQgPSAxO1xudmFyIFVOSEFORExFRCA9IDI7XG5cbnZhciBJbnRlcm5hbCwgT3duUHJvbWlzZUNhcGFiaWxpdHksIFByb21pc2VXcmFwcGVyLCBuYXRpdmVUaGVuO1xuXG4vLyBoZWxwZXJzXG52YXIgaXNUaGVuYWJsZSA9IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgdGhlbjtcbiAgcmV0dXJuIGlzT2JqZWN0KGl0KSAmJiBpc0NhbGxhYmxlKHRoZW4gPSBpdC50aGVuKSA/IHRoZW4gOiBmYWxzZTtcbn07XG5cbnZhciBjYWxsUmVhY3Rpb24gPSBmdW5jdGlvbiAocmVhY3Rpb24sIHN0YXRlKSB7XG4gIHZhciB2YWx1ZSA9IHN0YXRlLnZhbHVlO1xuICB2YXIgb2sgPSBzdGF0ZS5zdGF0ZSA9PT0gRlVMRklMTEVEO1xuICB2YXIgaGFuZGxlciA9IG9rID8gcmVhY3Rpb24ub2sgOiByZWFjdGlvbi5mYWlsO1xuICB2YXIgcmVzb2x2ZSA9IHJlYWN0aW9uLnJlc29sdmU7XG4gIHZhciByZWplY3QgPSByZWFjdGlvbi5yZWplY3Q7XG4gIHZhciBkb21haW4gPSByZWFjdGlvbi5kb21haW47XG4gIHZhciByZXN1bHQsIHRoZW4sIGV4aXRlZDtcbiAgdHJ5IHtcbiAgICBpZiAoaGFuZGxlcikge1xuICAgICAgaWYgKCFvaykge1xuICAgICAgICBpZiAoc3RhdGUucmVqZWN0aW9uID09PSBVTkhBTkRMRUQpIG9uSGFuZGxlVW5oYW5kbGVkKHN0YXRlKTtcbiAgICAgICAgc3RhdGUucmVqZWN0aW9uID0gSEFORExFRDtcbiAgICAgIH1cbiAgICAgIGlmIChoYW5kbGVyID09PSB0cnVlKSByZXN1bHQgPSB2YWx1ZTtcbiAgICAgIGVsc2Uge1xuICAgICAgICBpZiAoZG9tYWluKSBkb21haW4uZW50ZXIoKTtcbiAgICAgICAgcmVzdWx0ID0gaGFuZGxlcih2YWx1ZSk7IC8vIGNhbiB0aHJvd1xuICAgICAgICBpZiAoZG9tYWluKSB7XG4gICAgICAgICAgZG9tYWluLmV4aXQoKTtcbiAgICAgICAgICBleGl0ZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAocmVzdWx0ID09PSByZWFjdGlvbi5wcm9taXNlKSB7XG4gICAgICAgIHJlamVjdChuZXcgVHlwZUVycm9yKCdQcm9taXNlLWNoYWluIGN5Y2xlJykpO1xuICAgICAgfSBlbHNlIGlmICh0aGVuID0gaXNUaGVuYWJsZShyZXN1bHQpKSB7XG4gICAgICAgIGNhbGwodGhlbiwgcmVzdWx0LCByZXNvbHZlLCByZWplY3QpO1xuICAgICAgfSBlbHNlIHJlc29sdmUocmVzdWx0KTtcbiAgICB9IGVsc2UgcmVqZWN0KHZhbHVlKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBpZiAoZG9tYWluICYmICFleGl0ZWQpIGRvbWFpbi5leGl0KCk7XG4gICAgcmVqZWN0KGVycm9yKTtcbiAgfVxufTtcblxudmFyIG5vdGlmeSA9IGZ1bmN0aW9uIChzdGF0ZSwgaXNSZWplY3QpIHtcbiAgaWYgKHN0YXRlLm5vdGlmaWVkKSByZXR1cm47XG4gIHN0YXRlLm5vdGlmaWVkID0gdHJ1ZTtcbiAgbWljcm90YXNrKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgcmVhY3Rpb25zID0gc3RhdGUucmVhY3Rpb25zO1xuICAgIHZhciByZWFjdGlvbjtcbiAgICB3aGlsZSAocmVhY3Rpb24gPSByZWFjdGlvbnMuZ2V0KCkpIHtcbiAgICAgIGNhbGxSZWFjdGlvbihyZWFjdGlvbiwgc3RhdGUpO1xuICAgIH1cbiAgICBzdGF0ZS5ub3RpZmllZCA9IGZhbHNlO1xuICAgIGlmIChpc1JlamVjdCAmJiAhc3RhdGUucmVqZWN0aW9uKSBvblVuaGFuZGxlZChzdGF0ZSk7XG4gIH0pO1xufTtcblxudmFyIGRpc3BhdGNoRXZlbnQgPSBmdW5jdGlvbiAobmFtZSwgcHJvbWlzZSwgcmVhc29uKSB7XG4gIHZhciBldmVudCwgaGFuZGxlcjtcbiAgaWYgKERJU1BBVENIX0VWRU5UKSB7XG4gICAgZXZlbnQgPSBkb2N1bWVudC5jcmVhdGVFdmVudCgnRXZlbnQnKTtcbiAgICBldmVudC5wcm9taXNlID0gcHJvbWlzZTtcbiAgICBldmVudC5yZWFzb24gPSByZWFzb247XG4gICAgZXZlbnQuaW5pdEV2ZW50KG5hbWUsIGZhbHNlLCB0cnVlKTtcbiAgICBnbG9iYWxUaGlzLmRpc3BhdGNoRXZlbnQoZXZlbnQpO1xuICB9IGVsc2UgZXZlbnQgPSB7IHByb21pc2U6IHByb21pc2UsIHJlYXNvbjogcmVhc29uIH07XG4gIGlmICghTkFUSVZFX1BST01JU0VfUkVKRUNUSU9OX0VWRU5UICYmIChoYW5kbGVyID0gZ2xvYmFsVGhpc1snb24nICsgbmFtZV0pKSBoYW5kbGVyKGV2ZW50KTtcbiAgZWxzZSBpZiAobmFtZSA9PT0gVU5IQU5ETEVEX1JFSkVDVElPTikgaG9zdFJlcG9ydEVycm9ycygnVW5oYW5kbGVkIHByb21pc2UgcmVqZWN0aW9uJywgcmVhc29uKTtcbn07XG5cbnZhciBvblVuaGFuZGxlZCA9IGZ1bmN0aW9uIChzdGF0ZSkge1xuICBjYWxsKHRhc2ssIGdsb2JhbFRoaXMsIGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgcHJvbWlzZSA9IHN0YXRlLmZhY2FkZTtcbiAgICB2YXIgdmFsdWUgPSBzdGF0ZS52YWx1ZTtcbiAgICB2YXIgSVNfVU5IQU5ETEVEID0gaXNVbmhhbmRsZWQoc3RhdGUpO1xuICAgIHZhciByZXN1bHQ7XG4gICAgaWYgKElTX1VOSEFORExFRCkge1xuICAgICAgcmVzdWx0ID0gcGVyZm9ybShmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmIChJU19OT0RFKSB7XG4gICAgICAgICAgcHJvY2Vzcy5lbWl0KCd1bmhhbmRsZWRSZWplY3Rpb24nLCB2YWx1ZSwgcHJvbWlzZSk7XG4gICAgICAgIH0gZWxzZSBkaXNwYXRjaEV2ZW50KFVOSEFORExFRF9SRUpFQ1RJT04sIHByb21pc2UsIHZhbHVlKTtcbiAgICAgIH0pO1xuICAgICAgLy8gQnJvd3NlcnMgc2hvdWxkIG5vdCB0cmlnZ2VyIGByZWplY3Rpb25IYW5kbGVkYCBldmVudCBpZiBpdCB3YXMgaGFuZGxlZCBoZXJlLCBOb2RlSlMgLSBzaG91bGRcbiAgICAgIHN0YXRlLnJlamVjdGlvbiA9IElTX05PREUgfHwgaXNVbmhhbmRsZWQoc3RhdGUpID8gVU5IQU5ETEVEIDogSEFORExFRDtcbiAgICAgIGlmIChyZXN1bHQuZXJyb3IpIHRocm93IHJlc3VsdC52YWx1ZTtcbiAgICB9XG4gIH0pO1xufTtcblxudmFyIGlzVW5oYW5kbGVkID0gZnVuY3Rpb24gKHN0YXRlKSB7XG4gIHJldHVybiBzdGF0ZS5yZWplY3Rpb24gIT09IEhBTkRMRUQgJiYgIXN0YXRlLnBhcmVudDtcbn07XG5cbnZhciBvbkhhbmRsZVVuaGFuZGxlZCA9IGZ1bmN0aW9uIChzdGF0ZSkge1xuICBjYWxsKHRhc2ssIGdsb2JhbFRoaXMsIGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgcHJvbWlzZSA9IHN0YXRlLmZhY2FkZTtcbiAgICBpZiAoSVNfTk9ERSkge1xuICAgICAgcHJvY2Vzcy5lbWl0KCdyZWplY3Rpb25IYW5kbGVkJywgcHJvbWlzZSk7XG4gICAgfSBlbHNlIGRpc3BhdGNoRXZlbnQoUkVKRUNUSU9OX0hBTkRMRUQsIHByb21pc2UsIHN0YXRlLnZhbHVlKTtcbiAgfSk7XG59O1xuXG52YXIgYmluZCA9IGZ1bmN0aW9uIChmbiwgc3RhdGUsIHVud3JhcCkge1xuICByZXR1cm4gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgZm4oc3RhdGUsIHZhbHVlLCB1bndyYXApO1xuICB9O1xufTtcblxudmFyIGludGVybmFsUmVqZWN0ID0gZnVuY3Rpb24gKHN0YXRlLCB2YWx1ZSwgdW53cmFwKSB7XG4gIGlmIChzdGF0ZS5kb25lKSByZXR1cm47XG4gIHN0YXRlLmRvbmUgPSB0cnVlO1xuICBpZiAodW53cmFwKSBzdGF0ZSA9IHVud3JhcDtcbiAgc3RhdGUudmFsdWUgPSB2YWx1ZTtcbiAgc3RhdGUuc3RhdGUgPSBSRUpFQ1RFRDtcbiAgbm90aWZ5KHN0YXRlLCB0cnVlKTtcbn07XG5cbnZhciBpbnRlcm5hbFJlc29sdmUgPSBmdW5jdGlvbiAoc3RhdGUsIHZhbHVlLCB1bndyYXApIHtcbiAgaWYgKHN0YXRlLmRvbmUpIHJldHVybjtcbiAgc3RhdGUuZG9uZSA9IHRydWU7XG4gIGlmICh1bndyYXApIHN0YXRlID0gdW53cmFwO1xuICB0cnkge1xuICAgIGlmIChzdGF0ZS5mYWNhZGUgPT09IHZhbHVlKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiUHJvbWlzZSBjYW4ndCBiZSByZXNvbHZlZCBpdHNlbGZcIik7XG4gICAgdmFyIHRoZW4gPSBpc1RoZW5hYmxlKHZhbHVlKTtcbiAgICBpZiAodGhlbikge1xuICAgICAgbWljcm90YXNrKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIHdyYXBwZXIgPSB7IGRvbmU6IGZhbHNlIH07XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY2FsbCh0aGVuLCB2YWx1ZSxcbiAgICAgICAgICAgIGJpbmQoaW50ZXJuYWxSZXNvbHZlLCB3cmFwcGVyLCBzdGF0ZSksXG4gICAgICAgICAgICBiaW5kKGludGVybmFsUmVqZWN0LCB3cmFwcGVyLCBzdGF0ZSlcbiAgICAgICAgICApO1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIGludGVybmFsUmVqZWN0KHdyYXBwZXIsIGVycm9yLCBzdGF0ZSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBzdGF0ZS52YWx1ZSA9IHZhbHVlO1xuICAgICAgc3RhdGUuc3RhdGUgPSBGVUxGSUxMRUQ7XG4gICAgICBub3RpZnkoc3RhdGUsIGZhbHNlKTtcbiAgICB9XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgaW50ZXJuYWxSZWplY3QoeyBkb25lOiBmYWxzZSB9LCBlcnJvciwgc3RhdGUpO1xuICB9XG59O1xuXG4vLyBjb25zdHJ1Y3RvciBwb2x5ZmlsbFxuaWYgKEZPUkNFRF9QUk9NSVNFX0NPTlNUUlVDVE9SKSB7XG4gIC8vIDI1LjQuMy4xIFByb21pc2UoZXhlY3V0b3IpXG4gIFByb21pc2VDb25zdHJ1Y3RvciA9IGZ1bmN0aW9uIFByb21pc2UoZXhlY3V0b3IpIHtcbiAgICBhbkluc3RhbmNlKHRoaXMsIFByb21pc2VQcm90b3R5cGUpO1xuICAgIGFDYWxsYWJsZShleGVjdXRvcik7XG4gICAgY2FsbChJbnRlcm5hbCwgdGhpcyk7XG4gICAgdmFyIHN0YXRlID0gZ2V0SW50ZXJuYWxQcm9taXNlU3RhdGUodGhpcyk7XG4gICAgdHJ5IHtcbiAgICAgIGV4ZWN1dG9yKGJpbmQoaW50ZXJuYWxSZXNvbHZlLCBzdGF0ZSksIGJpbmQoaW50ZXJuYWxSZWplY3QsIHN0YXRlKSk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGludGVybmFsUmVqZWN0KHN0YXRlLCBlcnJvcik7XG4gICAgfVxuICB9O1xuXG4gIFByb21pc2VQcm90b3R5cGUgPSBQcm9taXNlQ29uc3RydWN0b3IucHJvdG90eXBlO1xuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFycyAtLSByZXF1aXJlZCBmb3IgYC5sZW5ndGhgXG4gIEludGVybmFsID0gZnVuY3Rpb24gUHJvbWlzZShleGVjdXRvcikge1xuICAgIHNldEludGVybmFsU3RhdGUodGhpcywge1xuICAgICAgdHlwZTogUFJPTUlTRSxcbiAgICAgIGRvbmU6IGZhbHNlLFxuICAgICAgbm90aWZpZWQ6IGZhbHNlLFxuICAgICAgcGFyZW50OiBmYWxzZSxcbiAgICAgIHJlYWN0aW9uczogbmV3IFF1ZXVlKCksXG4gICAgICByZWplY3Rpb246IGZhbHNlLFxuICAgICAgc3RhdGU6IFBFTkRJTkcsXG4gICAgICB2YWx1ZTogbnVsbFxuICAgIH0pO1xuICB9O1xuXG4gIC8vIGBQcm9taXNlLnByb3RvdHlwZS50aGVuYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1wcm9taXNlLnByb3RvdHlwZS50aGVuXG4gIEludGVybmFsLnByb3RvdHlwZSA9IGRlZmluZUJ1aWx0SW4oUHJvbWlzZVByb3RvdHlwZSwgJ3RoZW4nLCBmdW5jdGlvbiB0aGVuKG9uRnVsZmlsbGVkLCBvblJlamVjdGVkKSB7XG4gICAgdmFyIHN0YXRlID0gZ2V0SW50ZXJuYWxQcm9taXNlU3RhdGUodGhpcyk7XG4gICAgdmFyIHJlYWN0aW9uID0gbmV3UHJvbWlzZUNhcGFiaWxpdHkoc3BlY2llc0NvbnN0cnVjdG9yKHRoaXMsIFByb21pc2VDb25zdHJ1Y3RvcikpO1xuICAgIHN0YXRlLnBhcmVudCA9IHRydWU7XG4gICAgcmVhY3Rpb24ub2sgPSBpc0NhbGxhYmxlKG9uRnVsZmlsbGVkKSA/IG9uRnVsZmlsbGVkIDogdHJ1ZTtcbiAgICByZWFjdGlvbi5mYWlsID0gaXNDYWxsYWJsZShvblJlamVjdGVkKSAmJiBvblJlamVjdGVkO1xuICAgIHJlYWN0aW9uLmRvbWFpbiA9IElTX05PREUgPyBwcm9jZXNzLmRvbWFpbiA6IHVuZGVmaW5lZDtcbiAgICBpZiAoc3RhdGUuc3RhdGUgPT09IFBFTkRJTkcpIHN0YXRlLnJlYWN0aW9ucy5hZGQocmVhY3Rpb24pO1xuICAgIGVsc2UgbWljcm90YXNrKGZ1bmN0aW9uICgpIHtcbiAgICAgIGNhbGxSZWFjdGlvbihyZWFjdGlvbiwgc3RhdGUpO1xuICAgIH0pO1xuICAgIHJldHVybiByZWFjdGlvbi5wcm9taXNlO1xuICB9KTtcblxuICBPd25Qcm9taXNlQ2FwYWJpbGl0eSA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgcHJvbWlzZSA9IG5ldyBJbnRlcm5hbCgpO1xuICAgIHZhciBzdGF0ZSA9IGdldEludGVybmFsUHJvbWlzZVN0YXRlKHByb21pc2UpO1xuICAgIHRoaXMucHJvbWlzZSA9IHByb21pc2U7XG4gICAgdGhpcy5yZXNvbHZlID0gYmluZChpbnRlcm5hbFJlc29sdmUsIHN0YXRlKTtcbiAgICB0aGlzLnJlamVjdCA9IGJpbmQoaW50ZXJuYWxSZWplY3QsIHN0YXRlKTtcbiAgfTtcblxuICBuZXdQcm9taXNlQ2FwYWJpbGl0eU1vZHVsZS5mID0gbmV3UHJvbWlzZUNhcGFiaWxpdHkgPSBmdW5jdGlvbiAoQykge1xuICAgIHJldHVybiBDID09PSBQcm9taXNlQ29uc3RydWN0b3IgfHwgQyA9PT0gUHJvbWlzZVdyYXBwZXJcbiAgICAgID8gbmV3IE93blByb21pc2VDYXBhYmlsaXR5KEMpXG4gICAgICA6IG5ld0dlbmVyaWNQcm9taXNlQ2FwYWJpbGl0eShDKTtcbiAgfTtcblxuICBpZiAoIUlTX1BVUkUgJiYgaXNDYWxsYWJsZShOYXRpdmVQcm9taXNlQ29uc3RydWN0b3IpICYmIE5hdGl2ZVByb21pc2VQcm90b3R5cGUgIT09IE9iamVjdC5wcm90b3R5cGUpIHtcbiAgICBuYXRpdmVUaGVuID0gTmF0aXZlUHJvbWlzZVByb3RvdHlwZS50aGVuO1xuXG4gICAgaWYgKCFOQVRJVkVfUFJPTUlTRV9TVUJDTEFTU0lORykge1xuICAgICAgLy8gbWFrZSBgUHJvbWlzZSN0aGVuYCByZXR1cm4gYSBwb2x5ZmlsbGVkIGBQcm9taXNlYCBmb3IgbmF0aXZlIHByb21pc2UtYmFzZWQgQVBJc1xuICAgICAgZGVmaW5lQnVpbHRJbihOYXRpdmVQcm9taXNlUHJvdG90eXBlLCAndGhlbicsIGZ1bmN0aW9uIHRoZW4ob25GdWxmaWxsZWQsIG9uUmVqZWN0ZWQpIHtcbiAgICAgICAgdmFyIHRoYXQgPSB0aGlzO1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2VDb25zdHJ1Y3RvcihmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgICAgY2FsbChuYXRpdmVUaGVuLCB0aGF0LCByZXNvbHZlLCByZWplY3QpO1xuICAgICAgICB9KS50aGVuKG9uRnVsZmlsbGVkLCBvblJlamVjdGVkKTtcbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy82NDBcbiAgICAgIH0sIHsgdW5zYWZlOiB0cnVlIH0pO1xuICAgIH1cblxuICAgIC8vIG1ha2UgYC5jb25zdHJ1Y3RvciA9PT0gUHJvbWlzZWAgd29yayBmb3IgbmF0aXZlIHByb21pc2UtYmFzZWQgQVBJc1xuICAgIHRyeSB7XG4gICAgICBkZWxldGUgTmF0aXZlUHJvbWlzZVByb3RvdHlwZS5jb25zdHJ1Y3RvcjtcbiAgICB9IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG5cbiAgICAvLyBtYWtlIGBpbnN0YW5jZW9mIFByb21pc2VgIHdvcmsgZm9yIG5hdGl2ZSBwcm9taXNlLWJhc2VkIEFQSXNcbiAgICBpZiAoc2V0UHJvdG90eXBlT2YpIHtcbiAgICAgIHNldFByb3RvdHlwZU9mKE5hdGl2ZVByb21pc2VQcm90b3R5cGUsIFByb21pc2VQcm90b3R5cGUpO1xuICAgIH1cbiAgfVxufVxuXG4kKHsgZ2xvYmFsOiB0cnVlLCBjb25zdHJ1Y3RvcjogdHJ1ZSwgd3JhcDogdHJ1ZSwgZm9yY2VkOiBGT1JDRURfUFJPTUlTRV9DT05TVFJVQ1RPUiB9LCB7XG4gIFByb21pc2U6IFByb21pc2VDb25zdHJ1Y3RvclxufSk7XG5cbnNldFRvU3RyaW5nVGFnKFByb21pc2VDb25zdHJ1Y3RvciwgUFJPTUlTRSwgZmFsc2UsIHRydWUpO1xuc2V0U3BlY2llcyhQUk9NSVNFKTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIElTX1BVUkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtcHVyZScpO1xudmFyIE5hdGl2ZVByb21pc2VDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9wcm9taXNlLW5hdGl2ZS1jb25zdHJ1Y3RvcicpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgc3BlY2llc0NvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NwZWNpZXMtY29uc3RydWN0b3InKTtcbnZhciBwcm9taXNlUmVzb2x2ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9wcm9taXNlLXJlc29sdmUnKTtcbnZhciBkZWZpbmVCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbicpO1xuXG52YXIgTmF0aXZlUHJvbWlzZVByb3RvdHlwZSA9IE5hdGl2ZVByb21pc2VDb25zdHJ1Y3RvciAmJiBOYXRpdmVQcm9taXNlQ29uc3RydWN0b3IucHJvdG90eXBlO1xuXG4vLyBTYWZhcmkgYnVnIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDA4MjlcbnZhciBOT05fR0VORVJJQyA9ICEhTmF0aXZlUHJvbWlzZUNvbnN0cnVjdG9yICYmIGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHVuaWNvcm4vbm8tdGhlbmFibGUgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmdcbiAgTmF0aXZlUHJvbWlzZVByb3RvdHlwZVsnZmluYWxseSddLmNhbGwoeyB0aGVuOiBmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH0gfSwgZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9KTtcbn0pO1xuXG4vLyBgUHJvbWlzZS5wcm90b3R5cGUuZmluYWxseWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXByb21pc2UucHJvdG90eXBlLmZpbmFsbHlcbiQoeyB0YXJnZXQ6ICdQcm9taXNlJywgcHJvdG86IHRydWUsIHJlYWw6IHRydWUsIGZvcmNlZDogTk9OX0dFTkVSSUMgfSwge1xuICAnZmluYWxseSc6IGZ1bmN0aW9uIChvbkZpbmFsbHkpIHtcbiAgICB2YXIgQyA9IHNwZWNpZXNDb25zdHJ1Y3Rvcih0aGlzLCBnZXRCdWlsdEluKCdQcm9taXNlJykpO1xuICAgIHZhciBpc0Z1bmN0aW9uID0gaXNDYWxsYWJsZShvbkZpbmFsbHkpO1xuICAgIHJldHVybiB0aGlzLnRoZW4oXG4gICAgICBpc0Z1bmN0aW9uID8gZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgcmV0dXJuIHByb21pc2VSZXNvbHZlKEMsIG9uRmluYWxseSgpKS50aGVuKGZ1bmN0aW9uICgpIHsgcmV0dXJuIHg7IH0pO1xuICAgICAgfSA6IG9uRmluYWxseSxcbiAgICAgIGlzRnVuY3Rpb24gPyBmdW5jdGlvbiAoZSkge1xuICAgICAgICByZXR1cm4gcHJvbWlzZVJlc29sdmUoQywgb25GaW5hbGx5KCkpLnRoZW4oZnVuY3Rpb24gKCkgeyB0aHJvdyBlOyB9KTtcbiAgICAgIH0gOiBvbkZpbmFsbHlcbiAgICApO1xuICB9XG59KTtcblxuLy8gbWFrZXMgc3VyZSB0aGF0IG5hdGl2ZSBwcm9taXNlLWJhc2VkIEFQSXMgYFByb21pc2UjZmluYWxseWAgcHJvcGVybHkgd29ya3Mgd2l0aCBwYXRjaGVkIGBQcm9taXNlI3RoZW5gXG5pZiAoIUlTX1BVUkUgJiYgaXNDYWxsYWJsZShOYXRpdmVQcm9taXNlQ29uc3RydWN0b3IpKSB7XG4gIHZhciBtZXRob2QgPSBnZXRCdWlsdEluKCdQcm9taXNlJykucHJvdG90eXBlWydmaW5hbGx5J107XG4gIGlmIChOYXRpdmVQcm9taXNlUHJvdG90eXBlWydmaW5hbGx5J10gIT09IG1ldGhvZCkge1xuICAgIGRlZmluZUJ1aWx0SW4oTmF0aXZlUHJvbWlzZVByb3RvdHlwZSwgJ2ZpbmFsbHknLCBtZXRob2QsIHsgdW5zYWZlOiB0cnVlIH0pO1xuICB9XG59XG4iLCIndXNlIHN0cmljdCc7XG4vLyBUT0RPOiBSZW1vdmUgdGhpcyBtb2R1bGUgZnJvbSBgY29yZS1qc0A0YCBzaW5jZSBpdCdzIHNwbGl0IHRvIG1vZHVsZXMgbGlzdGVkIGJlbG93XG5yZXF1aXJlKCcuLi9tb2R1bGVzL2VzLnByb21pc2UuY29uc3RydWN0b3InKTtcbnJlcXVpcmUoJy4uL21vZHVsZXMvZXMucHJvbWlzZS5hbGwnKTtcbnJlcXVpcmUoJy4uL21vZHVsZXMvZXMucHJvbWlzZS5jYXRjaCcpO1xucmVxdWlyZSgnLi4vbW9kdWxlcy9lcy5wcm9taXNlLnJhY2UnKTtcbnJlcXVpcmUoJy4uL21vZHVsZXMvZXMucHJvbWlzZS5yZWplY3QnKTtcbnJlcXVpcmUoJy4uL21vZHVsZXMvZXMucHJvbWlzZS5yZXNvbHZlJyk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciBhQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1jYWxsYWJsZScpO1xudmFyIG5ld1Byb21pc2VDYXBhYmlsaXR5TW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL25ldy1wcm9taXNlLWNhcGFiaWxpdHknKTtcbnZhciBwZXJmb3JtID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3BlcmZvcm0nKTtcbnZhciBpdGVyYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdGUnKTtcbnZhciBQUk9NSVNFX1NUQVRJQ1NfSU5DT1JSRUNUX0lURVJBVElPTiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9wcm9taXNlLXN0YXRpY3MtaW5jb3JyZWN0LWl0ZXJhdGlvbicpO1xuXG4vLyBgUHJvbWlzZS5yYWNlYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtcHJvbWlzZS5yYWNlXG4kKHsgdGFyZ2V0OiAnUHJvbWlzZScsIHN0YXQ6IHRydWUsIGZvcmNlZDogUFJPTUlTRV9TVEFUSUNTX0lOQ09SUkVDVF9JVEVSQVRJT04gfSwge1xuICByYWNlOiBmdW5jdGlvbiByYWNlKGl0ZXJhYmxlKSB7XG4gICAgdmFyIEMgPSB0aGlzO1xuICAgIHZhciBjYXBhYmlsaXR5ID0gbmV3UHJvbWlzZUNhcGFiaWxpdHlNb2R1bGUuZihDKTtcbiAgICB2YXIgcmVqZWN0ID0gY2FwYWJpbGl0eS5yZWplY3Q7XG4gICAgdmFyIHJlc3VsdCA9IHBlcmZvcm0oZnVuY3Rpb24gKCkge1xuICAgICAgdmFyICRwcm9taXNlUmVzb2x2ZSA9IGFDYWxsYWJsZShDLnJlc29sdmUpO1xuICAgICAgaXRlcmF0ZShpdGVyYWJsZSwgZnVuY3Rpb24gKHByb21pc2UpIHtcbiAgICAgICAgY2FsbCgkcHJvbWlzZVJlc29sdmUsIEMsIHByb21pc2UpLnRoZW4oY2FwYWJpbGl0eS5yZXNvbHZlLCByZWplY3QpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gICAgaWYgKHJlc3VsdC5lcnJvcikgcmVqZWN0KHJlc3VsdC52YWx1ZSk7XG4gICAgcmV0dXJuIGNhcGFiaWxpdHkucHJvbWlzZTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBuZXdQcm9taXNlQ2FwYWJpbGl0eU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9uZXctcHJvbWlzZS1jYXBhYmlsaXR5Jyk7XG52YXIgRk9SQ0VEX1BST01JU0VfQ09OU1RSVUNUT1IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcHJvbWlzZS1jb25zdHJ1Y3Rvci1kZXRlY3Rpb24nKS5DT05TVFJVQ1RPUjtcblxuLy8gYFByb21pc2UucmVqZWN0YCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtcHJvbWlzZS5yZWplY3RcbiQoeyB0YXJnZXQ6ICdQcm9taXNlJywgc3RhdDogdHJ1ZSwgZm9yY2VkOiBGT1JDRURfUFJPTUlTRV9DT05TVFJVQ1RPUiB9LCB7XG4gIHJlamVjdDogZnVuY3Rpb24gcmVqZWN0KHIpIHtcbiAgICB2YXIgY2FwYWJpbGl0eSA9IG5ld1Byb21pc2VDYXBhYmlsaXR5TW9kdWxlLmYodGhpcyk7XG4gICAgdmFyIGNhcGFiaWxpdHlSZWplY3QgPSBjYXBhYmlsaXR5LnJlamVjdDtcbiAgICBjYXBhYmlsaXR5UmVqZWN0KHIpO1xuICAgIHJldHVybiBjYXBhYmlsaXR5LnByb21pc2U7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcbnZhciBJU19QVVJFID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXB1cmUnKTtcbnZhciBOYXRpdmVQcm9taXNlQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcHJvbWlzZS1uYXRpdmUtY29uc3RydWN0b3InKTtcbnZhciBGT1JDRURfUFJPTUlTRV9DT05TVFJVQ1RPUiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9wcm9taXNlLWNvbnN0cnVjdG9yLWRldGVjdGlvbicpLkNPTlNUUlVDVE9SO1xudmFyIHByb21pc2VSZXNvbHZlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3Byb21pc2UtcmVzb2x2ZScpO1xuXG52YXIgUHJvbWlzZUNvbnN0cnVjdG9yV3JhcHBlciA9IGdldEJ1aWx0SW4oJ1Byb21pc2UnKTtcbnZhciBDSEVDS19XUkFQUEVSID0gSVNfUFVSRSAmJiAhRk9SQ0VEX1BST01JU0VfQ09OU1RSVUNUT1I7XG5cbi8vIGBQcm9taXNlLnJlc29sdmVgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1wcm9taXNlLnJlc29sdmVcbiQoeyB0YXJnZXQ6ICdQcm9taXNlJywgc3RhdDogdHJ1ZSwgZm9yY2VkOiBJU19QVVJFIHx8IEZPUkNFRF9QUk9NSVNFX0NPTlNUUlVDVE9SIH0sIHtcbiAgcmVzb2x2ZTogZnVuY3Rpb24gcmVzb2x2ZSh4KSB7XG4gICAgcmV0dXJuIHByb21pc2VSZXNvbHZlKENIRUNLX1dSQVBQRVIgJiYgdGhpcyA9PT0gUHJvbWlzZUNvbnN0cnVjdG9yV3JhcHBlciA/IE5hdGl2ZVByb21pc2VDb25zdHJ1Y3RvciA6IHRoaXMsIHgpO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIG5ld1Byb21pc2VDYXBhYmlsaXR5TW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL25ldy1wcm9taXNlLWNhcGFiaWxpdHknKTtcblxuLy8gYFByb21pc2Uud2l0aFJlc29sdmVyc2AgbWV0aG9kXG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1wcm9taXNlLXdpdGgtcmVzb2x2ZXJzXG4kKHsgdGFyZ2V0OiAnUHJvbWlzZScsIHN0YXQ6IHRydWUgfSwge1xuICB3aXRoUmVzb2x2ZXJzOiBmdW5jdGlvbiB3aXRoUmVzb2x2ZXJzKCkge1xuICAgIHZhciBwcm9taXNlQ2FwYWJpbGl0eSA9IG5ld1Byb21pc2VDYXBhYmlsaXR5TW9kdWxlLmYodGhpcyk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHByb21pc2U6IHByb21pc2VDYXBhYmlsaXR5LnByb21pc2UsXG4gICAgICByZXNvbHZlOiBwcm9taXNlQ2FwYWJpbGl0eS5yZXNvbHZlLFxuICAgICAgcmVqZWN0OiBwcm9taXNlQ2FwYWJpbGl0eS5yZWplY3RcbiAgICB9O1xuICB9XG59KTtcbiIsIi8vIGVtcHR5XG4iLCIndXNlIHN0cmljdCc7XG52YXIgY29sbGVjdGlvbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jb2xsZWN0aW9uJyk7XG52YXIgY29sbGVjdGlvblN0cm9uZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jb2xsZWN0aW9uLXN0cm9uZycpO1xuXG4vLyBgU2V0YCBjb25zdHJ1Y3RvclxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zZXQtb2JqZWN0c1xuY29sbGVjdGlvbignU2V0JywgZnVuY3Rpb24gKGluaXQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIFNldCgpIHsgcmV0dXJuIGluaXQodGhpcywgYXJndW1lbnRzLmxlbmd0aCA/IGFyZ3VtZW50c1swXSA6IHVuZGVmaW5lZCk7IH07XG59LCBjb2xsZWN0aW9uU3Ryb25nKTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGRpZmZlcmVuY2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LWRpZmZlcmVuY2UnKTtcbnZhciBzZXRNZXRob2RBY2NlcHRTZXRMaWtlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1tZXRob2QtYWNjZXB0LXNldC1saWtlJyk7XG5cbi8vIGBTZXQucHJvdG90eXBlLmRpZmZlcmVuY2VgIG1ldGhvZFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtc2V0LW1ldGhvZHNcbiQoeyB0YXJnZXQ6ICdTZXQnLCBwcm90bzogdHJ1ZSwgcmVhbDogdHJ1ZSwgZm9yY2VkOiAhc2V0TWV0aG9kQWNjZXB0U2V0TGlrZSgnZGlmZmVyZW5jZScpIH0sIHtcbiAgZGlmZmVyZW5jZTogZGlmZmVyZW5jZVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGludGVyc2VjdGlvbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtaW50ZXJzZWN0aW9uJyk7XG52YXIgc2V0TWV0aG9kQWNjZXB0U2V0TGlrZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtbWV0aG9kLWFjY2VwdC1zZXQtbGlrZScpO1xuXG52YXIgSU5DT1JSRUNUID0gIXNldE1ldGhvZEFjY2VwdFNldExpa2UoJ2ludGVyc2VjdGlvbicpIHx8IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLWFycmF5LWZyb20sIGVzL25vLXNldCAtLSB0ZXN0aW5nXG4gIHJldHVybiBTdHJpbmcoQXJyYXkuZnJvbShuZXcgU2V0KFsxLCAyLCAzXSkuaW50ZXJzZWN0aW9uKG5ldyBTZXQoWzMsIDJdKSkpKSAhPT0gJzMsMic7XG59KTtcblxuLy8gYFNldC5wcm90b3R5cGUuaW50ZXJzZWN0aW9uYCBtZXRob2Rcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLXNldC1tZXRob2RzXG4kKHsgdGFyZ2V0OiAnU2V0JywgcHJvdG86IHRydWUsIHJlYWw6IHRydWUsIGZvcmNlZDogSU5DT1JSRUNUIH0sIHtcbiAgaW50ZXJzZWN0aW9uOiBpbnRlcnNlY3Rpb25cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgaXNEaXNqb2ludEZyb20gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LWlzLWRpc2pvaW50LWZyb20nKTtcbnZhciBzZXRNZXRob2RBY2NlcHRTZXRMaWtlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1tZXRob2QtYWNjZXB0LXNldC1saWtlJyk7XG5cbi8vIGBTZXQucHJvdG90eXBlLmlzRGlzam9pbnRGcm9tYCBtZXRob2Rcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLXNldC1tZXRob2RzXG4kKHsgdGFyZ2V0OiAnU2V0JywgcHJvdG86IHRydWUsIHJlYWw6IHRydWUsIGZvcmNlZDogIXNldE1ldGhvZEFjY2VwdFNldExpa2UoJ2lzRGlzam9pbnRGcm9tJykgfSwge1xuICBpc0Rpc2pvaW50RnJvbTogaXNEaXNqb2ludEZyb21cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgaXNTdWJzZXRPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtaXMtc3Vic2V0LW9mJyk7XG52YXIgc2V0TWV0aG9kQWNjZXB0U2V0TGlrZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtbWV0aG9kLWFjY2VwdC1zZXQtbGlrZScpO1xuXG4vLyBgU2V0LnByb3RvdHlwZS5pc1N1YnNldE9mYCBtZXRob2Rcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLXNldC1tZXRob2RzXG4kKHsgdGFyZ2V0OiAnU2V0JywgcHJvdG86IHRydWUsIHJlYWw6IHRydWUsIGZvcmNlZDogIXNldE1ldGhvZEFjY2VwdFNldExpa2UoJ2lzU3Vic2V0T2YnKSB9LCB7XG4gIGlzU3Vic2V0T2Y6IGlzU3Vic2V0T2Zcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgaXNTdXBlcnNldE9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1pcy1zdXBlcnNldC1vZicpO1xudmFyIHNldE1ldGhvZEFjY2VwdFNldExpa2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LW1ldGhvZC1hY2NlcHQtc2V0LWxpa2UnKTtcblxuLy8gYFNldC5wcm90b3R5cGUuaXNTdXBlcnNldE9mYCBtZXRob2Rcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLXNldC1tZXRob2RzXG4kKHsgdGFyZ2V0OiAnU2V0JywgcHJvdG86IHRydWUsIHJlYWw6IHRydWUsIGZvcmNlZDogIXNldE1ldGhvZEFjY2VwdFNldExpa2UoJ2lzU3VwZXJzZXRPZicpIH0sIHtcbiAgaXNTdXBlcnNldE9mOiBpc1N1cGVyc2V0T2Zcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gVE9ETzogUmVtb3ZlIHRoaXMgbW9kdWxlIGZyb20gYGNvcmUtanNANGAgc2luY2UgaXQncyByZXBsYWNlZCB0byBtb2R1bGUgYmVsb3dcbnJlcXVpcmUoJy4uL21vZHVsZXMvZXMuc2V0LmNvbnN0cnVjdG9yJyk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBzeW1tZXRyaWNEaWZmZXJlbmNlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1zeW1tZXRyaWMtZGlmZmVyZW5jZScpO1xudmFyIHNldE1ldGhvZEFjY2VwdFNldExpa2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LW1ldGhvZC1hY2NlcHQtc2V0LWxpa2UnKTtcblxuLy8gYFNldC5wcm90b3R5cGUuc3ltbWV0cmljRGlmZmVyZW5jZWAgbWV0aG9kXG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1zZXQtbWV0aG9kc1xuJCh7IHRhcmdldDogJ1NldCcsIHByb3RvOiB0cnVlLCByZWFsOiB0cnVlLCBmb3JjZWQ6ICFzZXRNZXRob2RBY2NlcHRTZXRMaWtlKCdzeW1tZXRyaWNEaWZmZXJlbmNlJykgfSwge1xuICBzeW1tZXRyaWNEaWZmZXJlbmNlOiBzeW1tZXRyaWNEaWZmZXJlbmNlXG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIHVuaW9uID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC11bmlvbicpO1xudmFyIHNldE1ldGhvZEFjY2VwdFNldExpa2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LW1ldGhvZC1hY2NlcHQtc2V0LWxpa2UnKTtcblxuLy8gYFNldC5wcm90b3R5cGUudW5pb25gIG1ldGhvZFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtc2V0LW1ldGhvZHNcbiQoeyB0YXJnZXQ6ICdTZXQnLCBwcm90bzogdHJ1ZSwgcmVhbDogdHJ1ZSwgZm9yY2VkOiAhc2V0TWV0aG9kQWNjZXB0U2V0TGlrZSgndW5pb24nKSB9LCB7XG4gIHVuaW9uOiB1bmlvblxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciB0b0Fic29sdXRlSW5kZXggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tYWJzb2x1dGUtaW5kZXgnKTtcblxudmFyICRSYW5nZUVycm9yID0gUmFuZ2VFcnJvcjtcbnZhciBmcm9tQ2hhckNvZGUgPSBTdHJpbmcuZnJvbUNoYXJDb2RlO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLXN0cmluZy1mcm9tY29kZXBvaW50IC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG52YXIgJGZyb21Db2RlUG9pbnQgPSBTdHJpbmcuZnJvbUNvZGVQb2ludDtcbnZhciBqb2luID0gdW5jdXJyeVRoaXMoW10uam9pbik7XG5cbi8vIGxlbmd0aCBzaG91bGQgYmUgMSwgb2xkIEZGIHByb2JsZW1cbnZhciBJTkNPUlJFQ1RfTEVOR1RIID0gISEkZnJvbUNvZGVQb2ludCAmJiAkZnJvbUNvZGVQb2ludC5sZW5ndGggIT09IDE7XG5cbi8vIGBTdHJpbmcuZnJvbUNvZGVQb2ludGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN0cmluZy5mcm9tY29kZXBvaW50XG4kKHsgdGFyZ2V0OiAnU3RyaW5nJywgc3RhdDogdHJ1ZSwgYXJpdHk6IDEsIGZvcmNlZDogSU5DT1JSRUNUX0xFTkdUSCB9LCB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFycyAtLSByZXF1aXJlZCBmb3IgYC5sZW5ndGhgXG4gIGZyb21Db2RlUG9pbnQ6IGZ1bmN0aW9uIGZyb21Db2RlUG9pbnQoeCkge1xuICAgIHZhciBlbGVtZW50cyA9IFtdO1xuICAgIHZhciBsZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgIHZhciBpID0gMDtcbiAgICB2YXIgY29kZTtcbiAgICB3aGlsZSAobGVuZ3RoID4gaSkge1xuICAgICAgY29kZSA9ICthcmd1bWVudHNbaSsrXTtcbiAgICAgIGlmICh0b0Fic29sdXRlSW5kZXgoY29kZSwgMHgxMEZGRkYpICE9PSBjb2RlKSB0aHJvdyBuZXcgJFJhbmdlRXJyb3IoY29kZSArICcgaXMgbm90IGEgdmFsaWQgY29kZSBwb2ludCcpO1xuICAgICAgZWxlbWVudHNbaV0gPSBjb2RlIDwgMHgxMDAwMFxuICAgICAgICA/IGZyb21DaGFyQ29kZShjb2RlKVxuICAgICAgICA6IGZyb21DaGFyQ29kZSgoKGNvZGUgLT0gMHgxMDAwMCkgPj4gMTApICsgMHhEODAwLCBjb2RlICUgMHg0MDAgKyAweERDMDApO1xuICAgIH0gcmV0dXJuIGpvaW4oZWxlbWVudHMsICcnKTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBub3RBUmVnRXhwID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL25vdC1hLXJlZ2V4cCcpO1xudmFyIHJlcXVpcmVPYmplY3RDb2VyY2libGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVxdWlyZS1vYmplY3QtY29lcmNpYmxlJyk7XG52YXIgdG9TdHJpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tc3RyaW5nJyk7XG52YXIgY29ycmVjdElzUmVnRXhwTG9naWMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY29ycmVjdC1pcy1yZWdleHAtbG9naWMnKTtcblxudmFyIHN0cmluZ0luZGV4T2YgPSB1bmN1cnJ5VGhpcygnJy5pbmRleE9mKTtcblxuLy8gYFN0cmluZy5wcm90b3R5cGUuaW5jbHVkZXNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zdHJpbmcucHJvdG90eXBlLmluY2x1ZGVzXG4kKHsgdGFyZ2V0OiAnU3RyaW5nJywgcHJvdG86IHRydWUsIGZvcmNlZDogIWNvcnJlY3RJc1JlZ0V4cExvZ2ljKCdpbmNsdWRlcycpIH0sIHtcbiAgaW5jbHVkZXM6IGZ1bmN0aW9uIGluY2x1ZGVzKHNlYXJjaFN0cmluZyAvKiAsIHBvc2l0aW9uID0gMCAqLykge1xuICAgIHJldHVybiAhIX5zdHJpbmdJbmRleE9mKFxuICAgICAgdG9TdHJpbmcocmVxdWlyZU9iamVjdENvZXJjaWJsZSh0aGlzKSksXG4gICAgICB0b1N0cmluZyhub3RBUmVnRXhwKHNlYXJjaFN0cmluZykpLFxuICAgICAgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWRcbiAgICApO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBjaGFyQXQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3RyaW5nLW11bHRpYnl0ZScpLmNoYXJBdDtcbnZhciB0b1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1zdHJpbmcnKTtcbnZhciBJbnRlcm5hbFN0YXRlTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ludGVybmFsLXN0YXRlJyk7XG52YXIgZGVmaW5lSXRlcmF0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0b3ItZGVmaW5lJyk7XG52YXIgY3JlYXRlSXRlclJlc3VsdE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtaXRlci1yZXN1bHQtb2JqZWN0Jyk7XG5cbnZhciBTVFJJTkdfSVRFUkFUT1IgPSAnU3RyaW5nIEl0ZXJhdG9yJztcbnZhciBzZXRJbnRlcm5hbFN0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5zZXQ7XG52YXIgZ2V0SW50ZXJuYWxTdGF0ZSA9IEludGVybmFsU3RhdGVNb2R1bGUuZ2V0dGVyRm9yKFNUUklOR19JVEVSQVRPUik7XG5cbi8vIGBTdHJpbmcucHJvdG90eXBlW0BAaXRlcmF0b3JdYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3RyaW5nLnByb3RvdHlwZS1AQGl0ZXJhdG9yXG5kZWZpbmVJdGVyYXRvcihTdHJpbmcsICdTdHJpbmcnLCBmdW5jdGlvbiAoaXRlcmF0ZWQpIHtcbiAgc2V0SW50ZXJuYWxTdGF0ZSh0aGlzLCB7XG4gICAgdHlwZTogU1RSSU5HX0lURVJBVE9SLFxuICAgIHN0cmluZzogdG9TdHJpbmcoaXRlcmF0ZWQpLFxuICAgIGluZGV4OiAwXG4gIH0pO1xuLy8gYCVTdHJpbmdJdGVyYXRvclByb3RvdHlwZSUubmV4dGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLSVzdHJpbmdpdGVyYXRvcnByb3RvdHlwZSUubmV4dFxufSwgZnVuY3Rpb24gbmV4dCgpIHtcbiAgdmFyIHN0YXRlID0gZ2V0SW50ZXJuYWxTdGF0ZSh0aGlzKTtcbiAgdmFyIHN0cmluZyA9IHN0YXRlLnN0cmluZztcbiAgdmFyIGluZGV4ID0gc3RhdGUuaW5kZXg7XG4gIHZhciBwb2ludDtcbiAgaWYgKGluZGV4ID49IHN0cmluZy5sZW5ndGgpIHJldHVybiBjcmVhdGVJdGVyUmVzdWx0T2JqZWN0KHVuZGVmaW5lZCwgdHJ1ZSk7XG4gIHBvaW50ID0gY2hhckF0KHN0cmluZywgaW5kZXgpO1xuICBzdGF0ZS5pbmRleCArPSBwb2ludC5sZW5ndGg7XG4gIHJldHVybiBjcmVhdGVJdGVyUmVzdWx0T2JqZWN0KHBvaW50LCBmYWxzZSk7XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyICR0cmltID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3N0cmluZy10cmltJykudHJpbTtcbnZhciBmb3JjZWRTdHJpbmdUcmltTWV0aG9kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3N0cmluZy10cmltLWZvcmNlZCcpO1xuXG4vLyBgU3RyaW5nLnByb3RvdHlwZS50cmltYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3RyaW5nLnByb3RvdHlwZS50cmltXG4kKHsgdGFyZ2V0OiAnU3RyaW5nJywgcHJvdG86IHRydWUsIGZvcmNlZDogZm9yY2VkU3RyaW5nVHJpbU1ldGhvZCgndHJpbScpIH0sIHtcbiAgdHJpbTogZnVuY3Rpb24gdHJpbSgpIHtcbiAgICByZXR1cm4gJHRyaW0odGhpcyk7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGRlZmluZVdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC1kZWZpbmUnKTtcblxuLy8gYFN5bWJvbC5hc3luY0l0ZXJhdG9yYCB3ZWxsLWtub3duIHN5bWJvbFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zeW1ib2wuYXN5bmNpdGVyYXRvclxuZGVmaW5lV2VsbEtub3duU3ltYm9sKCdhc3luY0l0ZXJhdG9yJyk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgSVNfUFVSRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1wdXJlJyk7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBOQVRJVkVfU1lNQk9MID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3N5bWJvbC1jb25zdHJ1Y3Rvci1kZXRlY3Rpb24nKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgaXNQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtaXMtcHJvdG90eXBlLW9mJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgdG9JbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0Jyk7XG52YXIgdG9Qcm9wZXJ0eUtleSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1wcm9wZXJ0eS1rZXknKTtcbnZhciAkdG9TdHJpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tc3RyaW5nJyk7XG52YXIgY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eS1kZXNjcmlwdG9yJyk7XG52YXIgbmF0aXZlT2JqZWN0Q3JlYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1jcmVhdGUnKTtcbnZhciBvYmplY3RLZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1rZXlzJyk7XG52YXIgZ2V0T3duUHJvcGVydHlOYW1lc01vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1uYW1lcycpO1xudmFyIGdldE93blByb3BlcnR5TmFtZXNFeHRlcm5hbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1uYW1lcy1leHRlcm5hbCcpO1xudmFyIGdldE93blByb3BlcnR5U3ltYm9sc01vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1zeW1ib2xzJyk7XG52YXIgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcbnZhciBkZWZpbmVQcm9wZXJ0eU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5Jyk7XG52YXIgZGVmaW5lUHJvcGVydGllc01vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnRpZXMnKTtcbnZhciBwcm9wZXJ0eUlzRW51bWVyYWJsZU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtcHJvcGVydHktaXMtZW51bWVyYWJsZScpO1xudmFyIGRlZmluZUJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWluJyk7XG52YXIgZGVmaW5lQnVpbHRJbkFjY2Vzc29yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbi1hY2Nlc3NvcicpO1xudmFyIHNoYXJlZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQnKTtcbnZhciBzaGFyZWRLZXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkLWtleScpO1xudmFyIGhpZGRlbktleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGlkZGVuLWtleXMnKTtcbnZhciB1aWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdWlkJyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG52YXIgd3JhcHBlZFdlbGxLbm93blN5bWJvbE1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC13cmFwcGVkJyk7XG52YXIgZGVmaW5lV2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLWRlZmluZScpO1xudmFyIGRlZmluZVN5bWJvbFRvUHJpbWl0aXZlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3N5bWJvbC1kZWZpbmUtdG8tcHJpbWl0aXZlJyk7XG52YXIgc2V0VG9TdHJpbmdUYWcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LXRvLXN0cmluZy10YWcnKTtcbnZhciBJbnRlcm5hbFN0YXRlTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ludGVybmFsLXN0YXRlJyk7XG52YXIgJGZvckVhY2ggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktaXRlcmF0aW9uJykuZm9yRWFjaDtcblxudmFyIEhJRERFTiA9IHNoYXJlZEtleSgnaGlkZGVuJyk7XG52YXIgU1lNQk9MID0gJ1N5bWJvbCc7XG52YXIgUFJPVE9UWVBFID0gJ3Byb3RvdHlwZSc7XG5cbnZhciBzZXRJbnRlcm5hbFN0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5zZXQ7XG52YXIgZ2V0SW50ZXJuYWxTdGF0ZSA9IEludGVybmFsU3RhdGVNb2R1bGUuZ2V0dGVyRm9yKFNZTUJPTCk7XG5cbnZhciBPYmplY3RQcm90b3R5cGUgPSBPYmplY3RbUFJPVE9UWVBFXTtcbnZhciAkU3ltYm9sID0gZ2xvYmFsVGhpcy5TeW1ib2w7XG52YXIgU3ltYm9sUHJvdG90eXBlID0gJFN5bWJvbCAmJiAkU3ltYm9sW1BST1RPVFlQRV07XG52YXIgUmFuZ2VFcnJvciA9IGdsb2JhbFRoaXMuUmFuZ2VFcnJvcjtcbnZhciBUeXBlRXJyb3IgPSBnbG9iYWxUaGlzLlR5cGVFcnJvcjtcbnZhciBRT2JqZWN0ID0gZ2xvYmFsVGhpcy5RT2JqZWN0O1xudmFyIG5hdGl2ZUdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IGdldE93blByb3BlcnR5RGVzY3JpcHRvck1vZHVsZS5mO1xudmFyIG5hdGl2ZURlZmluZVByb3BlcnR5ID0gZGVmaW5lUHJvcGVydHlNb2R1bGUuZjtcbnZhciBuYXRpdmVHZXRPd25Qcm9wZXJ0eU5hbWVzID0gZ2V0T3duUHJvcGVydHlOYW1lc0V4dGVybmFsLmY7XG52YXIgbmF0aXZlUHJvcGVydHlJc0VudW1lcmFibGUgPSBwcm9wZXJ0eUlzRW51bWVyYWJsZU1vZHVsZS5mO1xudmFyIHB1c2ggPSB1bmN1cnJ5VGhpcyhbXS5wdXNoKTtcblxudmFyIEFsbFN5bWJvbHMgPSBzaGFyZWQoJ3N5bWJvbHMnKTtcbnZhciBPYmplY3RQcm90b3R5cGVTeW1ib2xzID0gc2hhcmVkKCdvcC1zeW1ib2xzJyk7XG52YXIgV2VsbEtub3duU3ltYm9sc1N0b3JlID0gc2hhcmVkKCd3a3MnKTtcblxuLy8gRG9uJ3QgdXNlIHNldHRlcnMgaW4gUXQgU2NyaXB0LCBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvMTczXG52YXIgVVNFX1NFVFRFUiA9ICFRT2JqZWN0IHx8ICFRT2JqZWN0W1BST1RPVFlQRV0gfHwgIVFPYmplY3RbUFJPVE9UWVBFXS5maW5kQ2hpbGQ7XG5cbi8vIGZhbGxiYWNrIGZvciBvbGQgQW5kcm9pZCwgaHR0cHM6Ly9jb2RlLmdvb2dsZS5jb20vcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTY4N1xudmFyIGZhbGxiYWNrRGVmaW5lUHJvcGVydHkgPSBmdW5jdGlvbiAoTywgUCwgQXR0cmlidXRlcykge1xuICB2YXIgT2JqZWN0UHJvdG90eXBlRGVzY3JpcHRvciA9IG5hdGl2ZUdldE93blByb3BlcnR5RGVzY3JpcHRvcihPYmplY3RQcm90b3R5cGUsIFApO1xuICBpZiAoT2JqZWN0UHJvdG90eXBlRGVzY3JpcHRvcikgZGVsZXRlIE9iamVjdFByb3RvdHlwZVtQXTtcbiAgbmF0aXZlRGVmaW5lUHJvcGVydHkoTywgUCwgQXR0cmlidXRlcyk7XG4gIGlmIChPYmplY3RQcm90b3R5cGVEZXNjcmlwdG9yICYmIE8gIT09IE9iamVjdFByb3RvdHlwZSkge1xuICAgIG5hdGl2ZURlZmluZVByb3BlcnR5KE9iamVjdFByb3RvdHlwZSwgUCwgT2JqZWN0UHJvdG90eXBlRGVzY3JpcHRvcik7XG4gIH1cbn07XG5cbnZhciBzZXRTeW1ib2xEZXNjcmlwdG9yID0gREVTQ1JJUFRPUlMgJiYgZmFpbHMoZnVuY3Rpb24gKCkge1xuICByZXR1cm4gbmF0aXZlT2JqZWN0Q3JlYXRlKG5hdGl2ZURlZmluZVByb3BlcnR5KHt9LCAnYScsIHtcbiAgICBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIG5hdGl2ZURlZmluZVByb3BlcnR5KHRoaXMsICdhJywgeyB2YWx1ZTogNyB9KS5hOyB9XG4gIH0pKS5hICE9PSA3O1xufSkgPyBmYWxsYmFja0RlZmluZVByb3BlcnR5IDogbmF0aXZlRGVmaW5lUHJvcGVydHk7XG5cbnZhciB3cmFwID0gZnVuY3Rpb24gKHRhZywgZGVzY3JpcHRpb24pIHtcbiAgdmFyIHN5bWJvbCA9IEFsbFN5bWJvbHNbdGFnXSA9IG5hdGl2ZU9iamVjdENyZWF0ZShTeW1ib2xQcm90b3R5cGUpO1xuICBzZXRJbnRlcm5hbFN0YXRlKHN5bWJvbCwge1xuICAgIHR5cGU6IFNZTUJPTCxcbiAgICB0YWc6IHRhZyxcbiAgICBkZXNjcmlwdGlvbjogZGVzY3JpcHRpb25cbiAgfSk7XG4gIGlmICghREVTQ1JJUFRPUlMpIHN5bWJvbC5kZXNjcmlwdGlvbiA9IGRlc2NyaXB0aW9uO1xuICByZXR1cm4gc3ltYm9sO1xufTtcblxudmFyICRkZWZpbmVQcm9wZXJ0eSA9IGZ1bmN0aW9uIGRlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpIHtcbiAgaWYgKE8gPT09IE9iamVjdFByb3RvdHlwZSkgJGRlZmluZVByb3BlcnR5KE9iamVjdFByb3RvdHlwZVN5bWJvbHMsIFAsIEF0dHJpYnV0ZXMpO1xuICBhbk9iamVjdChPKTtcbiAgdmFyIGtleSA9IHRvUHJvcGVydHlLZXkoUCk7XG4gIGFuT2JqZWN0KEF0dHJpYnV0ZXMpO1xuICBpZiAoaGFzT3duKEFsbFN5bWJvbHMsIGtleSkpIHtcbiAgICBpZiAoIUF0dHJpYnV0ZXMuZW51bWVyYWJsZSkge1xuICAgICAgaWYgKCFoYXNPd24oTywgSElEREVOKSkgbmF0aXZlRGVmaW5lUHJvcGVydHkoTywgSElEREVOLCBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IoMSwgbmF0aXZlT2JqZWN0Q3JlYXRlKG51bGwpKSk7XG4gICAgICBPW0hJRERFTl1ba2V5XSA9IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChoYXNPd24oTywgSElEREVOKSAmJiBPW0hJRERFTl1ba2V5XSkgT1tISURERU5dW2tleV0gPSBmYWxzZTtcbiAgICAgIEF0dHJpYnV0ZXMgPSBuYXRpdmVPYmplY3RDcmVhdGUoQXR0cmlidXRlcywgeyBlbnVtZXJhYmxlOiBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IoMCwgZmFsc2UpIH0pO1xuICAgIH0gcmV0dXJuIHNldFN5bWJvbERlc2NyaXB0b3IoTywga2V5LCBBdHRyaWJ1dGVzKTtcbiAgfSByZXR1cm4gbmF0aXZlRGVmaW5lUHJvcGVydHkoTywga2V5LCBBdHRyaWJ1dGVzKTtcbn07XG5cbnZhciAkZGVmaW5lUHJvcGVydGllcyA9IGZ1bmN0aW9uIGRlZmluZVByb3BlcnRpZXMoTywgUHJvcGVydGllcykge1xuICBhbk9iamVjdChPKTtcbiAgdmFyIHByb3BlcnRpZXMgPSB0b0luZGV4ZWRPYmplY3QoUHJvcGVydGllcyk7XG4gIHZhciBrZXlzID0gb2JqZWN0S2V5cyhwcm9wZXJ0aWVzKS5jb25jYXQoJGdldE93blByb3BlcnR5U3ltYm9scyhwcm9wZXJ0aWVzKSk7XG4gICRmb3JFYWNoKGtleXMsIGZ1bmN0aW9uIChrZXkpIHtcbiAgICBpZiAoIURFU0NSSVBUT1JTIHx8IGNhbGwoJHByb3BlcnR5SXNFbnVtZXJhYmxlLCBwcm9wZXJ0aWVzLCBrZXkpKSAkZGVmaW5lUHJvcGVydHkoTywga2V5LCBwcm9wZXJ0aWVzW2tleV0pO1xuICB9KTtcbiAgcmV0dXJuIE87XG59O1xuXG52YXIgJGNyZWF0ZSA9IGZ1bmN0aW9uIGNyZWF0ZShPLCBQcm9wZXJ0aWVzKSB7XG4gIHJldHVybiBQcm9wZXJ0aWVzID09PSB1bmRlZmluZWQgPyBuYXRpdmVPYmplY3RDcmVhdGUoTykgOiAkZGVmaW5lUHJvcGVydGllcyhuYXRpdmVPYmplY3RDcmVhdGUoTyksIFByb3BlcnRpZXMpO1xufTtcblxudmFyICRwcm9wZXJ0eUlzRW51bWVyYWJsZSA9IGZ1bmN0aW9uIHByb3BlcnR5SXNFbnVtZXJhYmxlKFYpIHtcbiAgdmFyIFAgPSB0b1Byb3BlcnR5S2V5KFYpO1xuICB2YXIgZW51bWVyYWJsZSA9IGNhbGwobmF0aXZlUHJvcGVydHlJc0VudW1lcmFibGUsIHRoaXMsIFApO1xuICBpZiAodGhpcyA9PT0gT2JqZWN0UHJvdG90eXBlICYmIGhhc093bihBbGxTeW1ib2xzLCBQKSAmJiAhaGFzT3duKE9iamVjdFByb3RvdHlwZVN5bWJvbHMsIFApKSByZXR1cm4gZmFsc2U7XG4gIHJldHVybiBlbnVtZXJhYmxlIHx8ICFoYXNPd24odGhpcywgUCkgfHwgIWhhc093bihBbGxTeW1ib2xzLCBQKSB8fCBoYXNPd24odGhpcywgSElEREVOKSAmJiB0aGlzW0hJRERFTl1bUF1cbiAgICA/IGVudW1lcmFibGUgOiB0cnVlO1xufTtcblxudmFyICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTywgUCkge1xuICB2YXIgaXQgPSB0b0luZGV4ZWRPYmplY3QoTyk7XG4gIHZhciBrZXkgPSB0b1Byb3BlcnR5S2V5KFApO1xuICBpZiAoaXQgPT09IE9iamVjdFByb3RvdHlwZSAmJiBoYXNPd24oQWxsU3ltYm9scywga2V5KSAmJiAhaGFzT3duKE9iamVjdFByb3RvdHlwZVN5bWJvbHMsIGtleSkpIHJldHVybjtcbiAgdmFyIGRlc2NyaXB0b3IgPSBuYXRpdmVHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoaXQsIGtleSk7XG4gIGlmIChkZXNjcmlwdG9yICYmIGhhc093bihBbGxTeW1ib2xzLCBrZXkpICYmICEoaGFzT3duKGl0LCBISURERU4pICYmIGl0W0hJRERFTl1ba2V5XSkpIHtcbiAgICBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSB0cnVlO1xuICB9XG4gIHJldHVybiBkZXNjcmlwdG9yO1xufTtcblxudmFyICRnZXRPd25Qcm9wZXJ0eU5hbWVzID0gZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlOYW1lcyhPKSB7XG4gIHZhciBuYW1lcyA9IG5hdGl2ZUdldE93blByb3BlcnR5TmFtZXModG9JbmRleGVkT2JqZWN0KE8pKTtcbiAgdmFyIHJlc3VsdCA9IFtdO1xuICAkZm9yRWFjaChuYW1lcywgZnVuY3Rpb24gKGtleSkge1xuICAgIGlmICghaGFzT3duKEFsbFN5bWJvbHMsIGtleSkgJiYgIWhhc093bihoaWRkZW5LZXlzLCBrZXkpKSBwdXNoKHJlc3VsdCwga2V5KTtcbiAgfSk7XG4gIHJldHVybiByZXN1bHQ7XG59O1xuXG52YXIgJGdldE93blByb3BlcnR5U3ltYm9scyA9IGZ1bmN0aW9uIChPKSB7XG4gIHZhciBJU19PQkpFQ1RfUFJPVE9UWVBFID0gTyA9PT0gT2JqZWN0UHJvdG90eXBlO1xuICB2YXIgbmFtZXMgPSBuYXRpdmVHZXRPd25Qcm9wZXJ0eU5hbWVzKElTX09CSkVDVF9QUk9UT1RZUEUgPyBPYmplY3RQcm90b3R5cGVTeW1ib2xzIDogdG9JbmRleGVkT2JqZWN0KE8pKTtcbiAgdmFyIHJlc3VsdCA9IFtdO1xuICAkZm9yRWFjaChuYW1lcywgZnVuY3Rpb24gKGtleSkge1xuICAgIGlmIChoYXNPd24oQWxsU3ltYm9scywga2V5KSAmJiAoIUlTX09CSkVDVF9QUk9UT1RZUEUgfHwgaGFzT3duKE9iamVjdFByb3RvdHlwZSwga2V5KSkpIHtcbiAgICAgIHB1c2gocmVzdWx0LCBBbGxTeW1ib2xzW2tleV0pO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiByZXN1bHQ7XG59O1xuXG4vLyBgU3ltYm9sYCBjb25zdHJ1Y3RvclxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zeW1ib2wtY29uc3RydWN0b3JcbmlmICghTkFUSVZFX1NZTUJPTCkge1xuICAkU3ltYm9sID0gZnVuY3Rpb24gU3ltYm9sKCkge1xuICAgIGlmIChpc1Byb3RvdHlwZU9mKFN5bWJvbFByb3RvdHlwZSwgdGhpcykpIHRocm93IG5ldyBUeXBlRXJyb3IoJ1N5bWJvbCBpcyBub3QgYSBjb25zdHJ1Y3RvcicpO1xuICAgIHZhciBkZXNjcmlwdGlvbiA9ICFhcmd1bWVudHMubGVuZ3RoIHx8IGFyZ3VtZW50c1swXSA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogJHRvU3RyaW5nKGFyZ3VtZW50c1swXSk7XG4gICAgdmFyIHRhZyA9IHVpZChkZXNjcmlwdGlvbik7XG4gICAgdmFyIHNldHRlciA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgdmFyICR0aGlzID0gdGhpcyA9PT0gdW5kZWZpbmVkID8gZ2xvYmFsVGhpcyA6IHRoaXM7XG4gICAgICBpZiAoJHRoaXMgPT09IE9iamVjdFByb3RvdHlwZSkgY2FsbChzZXR0ZXIsIE9iamVjdFByb3RvdHlwZVN5bWJvbHMsIHZhbHVlKTtcbiAgICAgIGlmIChoYXNPd24oJHRoaXMsIEhJRERFTikgJiYgaGFzT3duKCR0aGlzW0hJRERFTl0sIHRhZykpICR0aGlzW0hJRERFTl1bdGFnXSA9IGZhbHNlO1xuICAgICAgdmFyIGRlc2NyaXB0b3IgPSBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IoMSwgdmFsdWUpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgc2V0U3ltYm9sRGVzY3JpcHRvcigkdGhpcywgdGFnLCBkZXNjcmlwdG9yKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGlmICghKGVycm9yIGluc3RhbmNlb2YgUmFuZ2VFcnJvcikpIHRocm93IGVycm9yO1xuICAgICAgICBmYWxsYmFja0RlZmluZVByb3BlcnR5KCR0aGlzLCB0YWcsIGRlc2NyaXB0b3IpO1xuICAgICAgfVxuICAgIH07XG4gICAgaWYgKERFU0NSSVBUT1JTICYmIFVTRV9TRVRURVIpIHNldFN5bWJvbERlc2NyaXB0b3IoT2JqZWN0UHJvdG90eXBlLCB0YWcsIHsgY29uZmlndXJhYmxlOiB0cnVlLCBzZXQ6IHNldHRlciB9KTtcbiAgICByZXR1cm4gd3JhcCh0YWcsIGRlc2NyaXB0aW9uKTtcbiAgfTtcblxuICBTeW1ib2xQcm90b3R5cGUgPSAkU3ltYm9sW1BST1RPVFlQRV07XG5cbiAgZGVmaW5lQnVpbHRJbihTeW1ib2xQcm90b3R5cGUsICd0b1N0cmluZycsIGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICAgIHJldHVybiBnZXRJbnRlcm5hbFN0YXRlKHRoaXMpLnRhZztcbiAgfSk7XG5cbiAgZGVmaW5lQnVpbHRJbigkU3ltYm9sLCAnd2l0aG91dFNldHRlcicsIGZ1bmN0aW9uIChkZXNjcmlwdGlvbikge1xuICAgIHJldHVybiB3cmFwKHVpZChkZXNjcmlwdGlvbiksIGRlc2NyaXB0aW9uKTtcbiAgfSk7XG5cbiAgcHJvcGVydHlJc0VudW1lcmFibGVNb2R1bGUuZiA9ICRwcm9wZXJ0eUlzRW51bWVyYWJsZTtcbiAgZGVmaW5lUHJvcGVydHlNb2R1bGUuZiA9ICRkZWZpbmVQcm9wZXJ0eTtcbiAgZGVmaW5lUHJvcGVydGllc01vZHVsZS5mID0gJGRlZmluZVByb3BlcnRpZXM7XG4gIGdldE93blByb3BlcnR5RGVzY3JpcHRvck1vZHVsZS5mID0gJGdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcbiAgZ2V0T3duUHJvcGVydHlOYW1lc01vZHVsZS5mID0gZ2V0T3duUHJvcGVydHlOYW1lc0V4dGVybmFsLmYgPSAkZ2V0T3duUHJvcGVydHlOYW1lcztcbiAgZ2V0T3duUHJvcGVydHlTeW1ib2xzTW9kdWxlLmYgPSAkZ2V0T3duUHJvcGVydHlTeW1ib2xzO1xuXG4gIHdyYXBwZWRXZWxsS25vd25TeW1ib2xNb2R1bGUuZiA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgcmV0dXJuIHdyYXAod2VsbEtub3duU3ltYm9sKG5hbWUpLCBuYW1lKTtcbiAgfTtcblxuICBpZiAoREVTQ1JJUFRPUlMpIHtcbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1TeW1ib2wtZGVzY3JpcHRpb25cbiAgICBkZWZpbmVCdWlsdEluQWNjZXNzb3IoU3ltYm9sUHJvdG90eXBlLCAnZGVzY3JpcHRpb24nLCB7XG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICBnZXQ6IGZ1bmN0aW9uIGRlc2NyaXB0aW9uKCkge1xuICAgICAgICByZXR1cm4gZ2V0SW50ZXJuYWxTdGF0ZSh0aGlzKS5kZXNjcmlwdGlvbjtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBpZiAoIUlTX1BVUkUpIHtcbiAgICAgIGRlZmluZUJ1aWx0SW4oT2JqZWN0UHJvdG90eXBlLCAncHJvcGVydHlJc0VudW1lcmFibGUnLCAkcHJvcGVydHlJc0VudW1lcmFibGUsIHsgdW5zYWZlOiB0cnVlIH0pO1xuICAgIH1cbiAgfVxufVxuXG4kKHsgZ2xvYmFsOiB0cnVlLCBjb25zdHJ1Y3RvcjogdHJ1ZSwgd3JhcDogdHJ1ZSwgZm9yY2VkOiAhTkFUSVZFX1NZTUJPTCwgc2hhbTogIU5BVElWRV9TWU1CT0wgfSwge1xuICBTeW1ib2w6ICRTeW1ib2xcbn0pO1xuXG4kZm9yRWFjaChvYmplY3RLZXlzKFdlbGxLbm93blN5bWJvbHNTdG9yZSksIGZ1bmN0aW9uIChuYW1lKSB7XG4gIGRlZmluZVdlbGxLbm93blN5bWJvbChuYW1lKTtcbn0pO1xuXG4kKHsgdGFyZ2V0OiBTWU1CT0wsIHN0YXQ6IHRydWUsIGZvcmNlZDogIU5BVElWRV9TWU1CT0wgfSwge1xuICB1c2VTZXR0ZXI6IGZ1bmN0aW9uICgpIHsgVVNFX1NFVFRFUiA9IHRydWU7IH0sXG4gIHVzZVNpbXBsZTogZnVuY3Rpb24gKCkgeyBVU0VfU0VUVEVSID0gZmFsc2U7IH1cbn0pO1xuXG4kKHsgdGFyZ2V0OiAnT2JqZWN0Jywgc3RhdDogdHJ1ZSwgZm9yY2VkOiAhTkFUSVZFX1NZTUJPTCwgc2hhbTogIURFU0NSSVBUT1JTIH0sIHtcbiAgLy8gYE9iamVjdC5jcmVhdGVgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5jcmVhdGVcbiAgY3JlYXRlOiAkY3JlYXRlLFxuICAvLyBgT2JqZWN0LmRlZmluZVByb3BlcnR5YCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuZGVmaW5lcHJvcGVydHlcbiAgZGVmaW5lUHJvcGVydHk6ICRkZWZpbmVQcm9wZXJ0eSxcbiAgLy8gYE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuZGVmaW5lcHJvcGVydGllc1xuICBkZWZpbmVQcm9wZXJ0aWVzOiAkZGVmaW5lUHJvcGVydGllcyxcbiAgLy8gYE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3JzXG4gIGdldE93blByb3BlcnR5RGVzY3JpcHRvcjogJGdldE93blByb3BlcnR5RGVzY3JpcHRvclxufSk7XG5cbiQoeyB0YXJnZXQ6ICdPYmplY3QnLCBzdGF0OiB0cnVlLCBmb3JjZWQ6ICFOQVRJVkVfU1lNQk9MIH0sIHtcbiAgLy8gYE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuZ2V0b3ducHJvcGVydHluYW1lc1xuICBnZXRPd25Qcm9wZXJ0eU5hbWVzOiAkZ2V0T3duUHJvcGVydHlOYW1lc1xufSk7XG5cbi8vIGBTeW1ib2wucHJvdG90eXBlW0BAdG9QcmltaXRpdmVdYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3ltYm9sLnByb3RvdHlwZS1AQHRvcHJpbWl0aXZlXG5kZWZpbmVTeW1ib2xUb1ByaW1pdGl2ZSgpO1xuXG4vLyBgU3ltYm9sLnByb3RvdHlwZVtAQHRvU3RyaW5nVGFnXWAgcHJvcGVydHlcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3ltYm9sLnByb3RvdHlwZS1AQHRvc3RyaW5ndGFnXG5zZXRUb1N0cmluZ1RhZygkU3ltYm9sLCBTWU1CT0wpO1xuXG5oaWRkZW5LZXlzW0hJRERFTl0gPSB0cnVlO1xuIiwiLy8gZW1wdHlcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGdldEJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluJyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciB0b1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1zdHJpbmcnKTtcbnZhciBzaGFyZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkJyk7XG52YXIgTkFUSVZFX1NZTUJPTF9SRUdJU1RSWSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zeW1ib2wtcmVnaXN0cnktZGV0ZWN0aW9uJyk7XG5cbnZhciBTdHJpbmdUb1N5bWJvbFJlZ2lzdHJ5ID0gc2hhcmVkKCdzdHJpbmctdG8tc3ltYm9sLXJlZ2lzdHJ5Jyk7XG52YXIgU3ltYm9sVG9TdHJpbmdSZWdpc3RyeSA9IHNoYXJlZCgnc3ltYm9sLXRvLXN0cmluZy1yZWdpc3RyeScpO1xuXG4vLyBgU3ltYm9sLmZvcmAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN5bWJvbC5mb3JcbiQoeyB0YXJnZXQ6ICdTeW1ib2wnLCBzdGF0OiB0cnVlLCBmb3JjZWQ6ICFOQVRJVkVfU1lNQk9MX1JFR0lTVFJZIH0sIHtcbiAgJ2Zvcic6IGZ1bmN0aW9uIChrZXkpIHtcbiAgICB2YXIgc3RyaW5nID0gdG9TdHJpbmcoa2V5KTtcbiAgICBpZiAoaGFzT3duKFN0cmluZ1RvU3ltYm9sUmVnaXN0cnksIHN0cmluZykpIHJldHVybiBTdHJpbmdUb1N5bWJvbFJlZ2lzdHJ5W3N0cmluZ107XG4gICAgdmFyIHN5bWJvbCA9IGdldEJ1aWx0SW4oJ1N5bWJvbCcpKHN0cmluZyk7XG4gICAgU3RyaW5nVG9TeW1ib2xSZWdpc3RyeVtzdHJpbmddID0gc3ltYm9sO1xuICAgIFN5bWJvbFRvU3RyaW5nUmVnaXN0cnlbc3ltYm9sXSA9IHN0cmluZztcbiAgICByZXR1cm4gc3ltYm9sO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBkZWZpbmVXZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wtZGVmaW5lJyk7XG5cbi8vIGBTeW1ib2wuaGFzSW5zdGFuY2VgIHdlbGwta25vd24gc3ltYm9sXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN5bWJvbC5oYXNpbnN0YW5jZVxuZGVmaW5lV2VsbEtub3duU3ltYm9sKCdoYXNJbnN0YW5jZScpO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGRlZmluZVdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC1kZWZpbmUnKTtcblxuLy8gYFN5bWJvbC5pc0NvbmNhdFNwcmVhZGFibGVgIHdlbGwta25vd24gc3ltYm9sXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN5bWJvbC5pc2NvbmNhdHNwcmVhZGFibGVcbmRlZmluZVdlbGxLbm93blN5bWJvbCgnaXNDb25jYXRTcHJlYWRhYmxlJyk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZGVmaW5lV2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLWRlZmluZScpO1xuXG4vLyBgU3ltYm9sLml0ZXJhdG9yYCB3ZWxsLWtub3duIHN5bWJvbFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zeW1ib2wuaXRlcmF0b3JcbmRlZmluZVdlbGxLbm93blN5bWJvbCgnaXRlcmF0b3InKTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIFRPRE86IFJlbW92ZSB0aGlzIG1vZHVsZSBmcm9tIGBjb3JlLWpzQDRgIHNpbmNlIGl0J3Mgc3BsaXQgdG8gbW9kdWxlcyBsaXN0ZWQgYmVsb3dcbnJlcXVpcmUoJy4uL21vZHVsZXMvZXMuc3ltYm9sLmNvbnN0cnVjdG9yJyk7XG5yZXF1aXJlKCcuLi9tb2R1bGVzL2VzLnN5bWJvbC5mb3InKTtcbnJlcXVpcmUoJy4uL21vZHVsZXMvZXMuc3ltYm9sLmtleS1mb3InKTtcbnJlcXVpcmUoJy4uL21vZHVsZXMvZXMuanNvbi5zdHJpbmdpZnknKTtcbnJlcXVpcmUoJy4uL21vZHVsZXMvZXMub2JqZWN0LmdldC1vd24tcHJvcGVydHktc3ltYm9scycpO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciBpc1N5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1zeW1ib2wnKTtcbnZhciB0cnlUb1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90cnktdG8tc3RyaW5nJyk7XG52YXIgc2hhcmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZCcpO1xudmFyIE5BVElWRV9TWU1CT0xfUkVHSVNUUlkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3ltYm9sLXJlZ2lzdHJ5LWRldGVjdGlvbicpO1xuXG52YXIgU3ltYm9sVG9TdHJpbmdSZWdpc3RyeSA9IHNoYXJlZCgnc3ltYm9sLXRvLXN0cmluZy1yZWdpc3RyeScpO1xuXG4vLyBgU3ltYm9sLmtleUZvcmAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN5bWJvbC5rZXlmb3JcbiQoeyB0YXJnZXQ6ICdTeW1ib2wnLCBzdGF0OiB0cnVlLCBmb3JjZWQ6ICFOQVRJVkVfU1lNQk9MX1JFR0lTVFJZIH0sIHtcbiAga2V5Rm9yOiBmdW5jdGlvbiBrZXlGb3Ioc3ltKSB7XG4gICAgaWYgKCFpc1N5bWJvbChzeW0pKSB0aHJvdyBuZXcgVHlwZUVycm9yKHRyeVRvU3RyaW5nKHN5bSkgKyAnIGlzIG5vdCBhIHN5bWJvbCcpO1xuICAgIGlmIChoYXNPd24oU3ltYm9sVG9TdHJpbmdSZWdpc3RyeSwgc3ltKSkgcmV0dXJuIFN5bWJvbFRvU3RyaW5nUmVnaXN0cnlbc3ltXTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZGVmaW5lV2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLWRlZmluZScpO1xuXG4vLyBgU3ltYm9sLm1hdGNoQWxsYCB3ZWxsLWtub3duIHN5bWJvbFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zeW1ib2wubWF0Y2hhbGxcbmRlZmluZVdlbGxLbm93blN5bWJvbCgnbWF0Y2hBbGwnKTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBkZWZpbmVXZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wtZGVmaW5lJyk7XG5cbi8vIGBTeW1ib2wubWF0Y2hgIHdlbGwta25vd24gc3ltYm9sXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN5bWJvbC5tYXRjaFxuZGVmaW5lV2VsbEtub3duU3ltYm9sKCdtYXRjaCcpO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGRlZmluZVdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC1kZWZpbmUnKTtcblxuLy8gYFN5bWJvbC5yZXBsYWNlYCB3ZWxsLWtub3duIHN5bWJvbFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zeW1ib2wucmVwbGFjZVxuZGVmaW5lV2VsbEtub3duU3ltYm9sKCdyZXBsYWNlJyk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZGVmaW5lV2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLWRlZmluZScpO1xuXG4vLyBgU3ltYm9sLnNlYXJjaGAgd2VsbC1rbm93biBzeW1ib2xcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3ltYm9sLnNlYXJjaFxuZGVmaW5lV2VsbEtub3duU3ltYm9sKCdzZWFyY2gnKTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBkZWZpbmVXZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wtZGVmaW5lJyk7XG5cbi8vIGBTeW1ib2wuc3BlY2llc2Agd2VsbC1rbm93biBzeW1ib2xcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3ltYm9sLnNwZWNpZXNcbmRlZmluZVdlbGxLbm93blN5bWJvbCgnc3BlY2llcycpO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGRlZmluZVdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC1kZWZpbmUnKTtcblxuLy8gYFN5bWJvbC5zcGxpdGAgd2VsbC1rbm93biBzeW1ib2xcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3ltYm9sLnNwbGl0XG5kZWZpbmVXZWxsS25vd25TeW1ib2woJ3NwbGl0Jyk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZGVmaW5lV2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLWRlZmluZScpO1xudmFyIGRlZmluZVN5bWJvbFRvUHJpbWl0aXZlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3N5bWJvbC1kZWZpbmUtdG8tcHJpbWl0aXZlJyk7XG5cbi8vIGBTeW1ib2wudG9QcmltaXRpdmVgIHdlbGwta25vd24gc3ltYm9sXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN5bWJvbC50b3ByaW1pdGl2ZVxuZGVmaW5lV2VsbEtub3duU3ltYm9sKCd0b1ByaW1pdGl2ZScpO1xuXG4vLyBgU3ltYm9sLnByb3RvdHlwZVtAQHRvUHJpbWl0aXZlXWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN5bWJvbC5wcm90b3R5cGUtQEB0b3ByaW1pdGl2ZVxuZGVmaW5lU3ltYm9sVG9QcmltaXRpdmUoKTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBnZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbicpO1xudmFyIGRlZmluZVdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC1kZWZpbmUnKTtcbnZhciBzZXRUb1N0cmluZ1RhZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtdG8tc3RyaW5nLXRhZycpO1xuXG4vLyBgU3ltYm9sLnRvU3RyaW5nVGFnYCB3ZWxsLWtub3duIHN5bWJvbFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zeW1ib2wudG9zdHJpbmd0YWdcbmRlZmluZVdlbGxLbm93blN5bWJvbCgndG9TdHJpbmdUYWcnKTtcblxuLy8gYFN5bWJvbC5wcm90b3R5cGVbQEB0b1N0cmluZ1RhZ11gIHByb3BlcnR5XG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN5bWJvbC5wcm90b3R5cGUtQEB0b3N0cmluZ3RhZ1xuc2V0VG9TdHJpbmdUYWcoZ2V0QnVpbHRJbignU3ltYm9sJyksICdTeW1ib2wnKTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBkZWZpbmVXZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wtZGVmaW5lJyk7XG5cbi8vIGBTeW1ib2wudW5zY29wYWJsZXNgIHdlbGwta25vd24gc3ltYm9sXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN5bWJvbC51bnNjb3BhYmxlc1xuZGVmaW5lV2VsbEtub3duU3ltYm9sKCd1bnNjb3BhYmxlcycpO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xudmFyIGRlZmluZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKS5mO1xuXG52YXIgTUVUQURBVEEgPSB3ZWxsS25vd25TeW1ib2woJ21ldGFkYXRhJyk7XG52YXIgRnVuY3Rpb25Qcm90b3R5cGUgPSBGdW5jdGlvbi5wcm90b3R5cGU7XG5cbi8vIEZ1bmN0aW9uLnByb3RvdHlwZVtAQG1ldGFkYXRhXVxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtZGVjb3JhdG9yLW1ldGFkYXRhXG5pZiAoRnVuY3Rpb25Qcm90b3R5cGVbTUVUQURBVEFdID09PSB1bmRlZmluZWQpIHtcbiAgZGVmaW5lUHJvcGVydHkoRnVuY3Rpb25Qcm90b3R5cGUsIE1FVEFEQVRBLCB7XG4gICAgdmFsdWU6IG51bGxcbiAgfSk7XG59XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZGVmaW5lV2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLWRlZmluZScpO1xuXG4vLyBgU3ltYm9sLmFzeW5jRGlzcG9zZWAgd2VsbC1rbm93biBzeW1ib2xcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLWFzeW5jLWV4cGxpY2l0LXJlc291cmNlLW1hbmFnZW1lbnRcbmRlZmluZVdlbGxLbm93blN5bWJvbCgnYXN5bmNEaXNwb3NlJyk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZGVmaW5lV2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLWRlZmluZScpO1xuXG4vLyBgU3ltYm9sLmN1c3RvbU1hdGNoZXJgIHdlbGwta25vd24gc3ltYm9sXG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1wYXR0ZXJuLW1hdGNoaW5nXG5kZWZpbmVXZWxsS25vd25TeW1ib2woJ2N1c3RvbU1hdGNoZXInKTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBkZWZpbmVXZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wtZGVmaW5lJyk7XG5cbi8vIGBTeW1ib2wuZGlzcG9zZWAgd2VsbC1rbm93biBzeW1ib2xcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLWV4cGxpY2l0LXJlc291cmNlLW1hbmFnZW1lbnRcbmRlZmluZVdlbGxLbm93blN5bWJvbCgnZGlzcG9zZScpO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgaXNSZWdpc3RlcmVkU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3N5bWJvbC1pcy1yZWdpc3RlcmVkJyk7XG5cbi8vIGBTeW1ib2wuaXNSZWdpc3RlcmVkU3ltYm9sYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9wcm9wb3NhbC1zeW1ib2wtcHJlZGljYXRlcy8jc2VjLXN5bWJvbC1pc3JlZ2lzdGVyZWRzeW1ib2xcbiQoeyB0YXJnZXQ6ICdTeW1ib2wnLCBzdGF0OiB0cnVlIH0sIHtcbiAgaXNSZWdpc3RlcmVkU3ltYm9sOiBpc1JlZ2lzdGVyZWRTeW1ib2xcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgaXNSZWdpc3RlcmVkU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3N5bWJvbC1pcy1yZWdpc3RlcmVkJyk7XG5cbi8vIGBTeW1ib2wuaXNSZWdpc3RlcmVkYCBtZXRob2Rcbi8vIG9ic29sZXRlIHZlcnNpb24gb2YgaHR0cHM6Ly90YzM5LmVzL3Byb3Bvc2FsLXN5bWJvbC1wcmVkaWNhdGVzLyNzZWMtc3ltYm9sLWlzcmVnaXN0ZXJlZHN5bWJvbFxuJCh7IHRhcmdldDogJ1N5bWJvbCcsIHN0YXQ6IHRydWUsIG5hbWU6ICdpc1JlZ2lzdGVyZWRTeW1ib2wnIH0sIHtcbiAgaXNSZWdpc3RlcmVkOiBpc1JlZ2lzdGVyZWRTeW1ib2xcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgaXNXZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3ltYm9sLWlzLXdlbGwta25vd24nKTtcblxuLy8gYFN5bWJvbC5pc1dlbGxLbm93blN5bWJvbGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvcHJvcG9zYWwtc3ltYm9sLXByZWRpY2F0ZXMvI3NlYy1zeW1ib2wtaXN3ZWxsa25vd25zeW1ib2xcbi8vIFdlIHNob3VsZCBwYXRjaCBpdCBmb3IgbmV3bHkgYWRkZWQgd2VsbC1rbm93biBzeW1ib2xzLiBJZiBpdCdzIG5vdCByZXF1aXJlZCwgdGhpcyBtb2R1bGUganVzdCB3aWxsIG5vdCBiZSBpbmplY3RlZFxuJCh7IHRhcmdldDogJ1N5bWJvbCcsIHN0YXQ6IHRydWUsIGZvcmNlZDogdHJ1ZSB9LCB7XG4gIGlzV2VsbEtub3duU3ltYm9sOiBpc1dlbGxLbm93blN5bWJvbFxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBpc1dlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zeW1ib2wtaXMtd2VsbC1rbm93bicpO1xuXG4vLyBgU3ltYm9sLmlzV2VsbEtub3duYCBtZXRob2Rcbi8vIG9ic29sZXRlIHZlcnNpb24gb2YgaHR0cHM6Ly90YzM5LmVzL3Byb3Bvc2FsLXN5bWJvbC1wcmVkaWNhdGVzLyNzZWMtc3ltYm9sLWlzd2VsbGtub3duc3ltYm9sXG4vLyBXZSBzaG91bGQgcGF0Y2ggaXQgZm9yIG5ld2x5IGFkZGVkIHdlbGwta25vd24gc3ltYm9scy4gSWYgaXQncyBub3QgcmVxdWlyZWQsIHRoaXMgbW9kdWxlIGp1c3Qgd2lsbCBub3QgYmUgaW5qZWN0ZWRcbiQoeyB0YXJnZXQ6ICdTeW1ib2wnLCBzdGF0OiB0cnVlLCBuYW1lOiAnaXNXZWxsS25vd25TeW1ib2wnLCBmb3JjZWQ6IHRydWUgfSwge1xuICBpc1dlbGxLbm93bjogaXNXZWxsS25vd25TeW1ib2xcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGRlZmluZVdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC1kZWZpbmUnKTtcblxuLy8gYFN5bWJvbC5tYXRjaGVyYCB3ZWxsLWtub3duIHN5bWJvbFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtcGF0dGVybi1tYXRjaGluZ1xuZGVmaW5lV2VsbEtub3duU3ltYm9sKCdtYXRjaGVyJyk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBUT0RPOiBSZW1vdmUgZnJvbSBgY29yZS1qc0A0YFxudmFyIGRlZmluZVdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC1kZWZpbmUnKTtcblxuLy8gYFN5bWJvbC5tZXRhZGF0YUtleWAgd2VsbC1rbm93biBzeW1ib2xcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLWRlY29yYXRvci1tZXRhZGF0YVxuZGVmaW5lV2VsbEtub3duU3ltYm9sKCdtZXRhZGF0YUtleScpO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGRlZmluZVdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC1kZWZpbmUnKTtcblxuLy8gYFN5bWJvbC5tZXRhZGF0YWAgd2VsbC1rbm93biBzeW1ib2xcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLWRlY29yYXRvcnNcbmRlZmluZVdlbGxLbm93blN5bWJvbCgnbWV0YWRhdGEnKTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBkZWZpbmVXZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wtZGVmaW5lJyk7XG5cbi8vIGBTeW1ib2wub2JzZXJ2YWJsZWAgd2VsbC1rbm93biBzeW1ib2xcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLW9ic2VydmFibGVcbmRlZmluZVdlbGxLbm93blN5bWJvbCgnb2JzZXJ2YWJsZScpO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gVE9ETzogcmVtb3ZlIGZyb20gYGNvcmUtanNANGBcbnZhciBkZWZpbmVXZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wtZGVmaW5lJyk7XG5cbi8vIGBTeW1ib2wucGF0dGVybk1hdGNoYCB3ZWxsLWtub3duIHN5bWJvbFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtcGF0dGVybi1tYXRjaGluZ1xuZGVmaW5lV2VsbEtub3duU3ltYm9sKCdwYXR0ZXJuTWF0Y2gnKTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIFRPRE86IHJlbW92ZSBmcm9tIGBjb3JlLWpzQDRgXG52YXIgZGVmaW5lV2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLWRlZmluZScpO1xuXG5kZWZpbmVXZWxsS25vd25TeW1ib2woJ3JlcGxhY2VBbGwnKTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcbnZhciBjbGVhckltbWVkaWF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90YXNrJykuY2xlYXI7XG5cbi8vIGBjbGVhckltbWVkaWF0ZWAgbWV0aG9kXG4vLyBodHRwOi8vdzNjLmdpdGh1Yi5pby9zZXRJbW1lZGlhdGUvI3NpLWNsZWFySW1tZWRpYXRlXG4kKHsgZ2xvYmFsOiB0cnVlLCBiaW5kOiB0cnVlLCBlbnVtZXJhYmxlOiB0cnVlLCBmb3JjZWQ6IGdsb2JhbFRoaXMuY2xlYXJJbW1lZGlhdGUgIT09IGNsZWFySW1tZWRpYXRlIH0sIHtcbiAgY2xlYXJJbW1lZGlhdGU6IGNsZWFySW1tZWRpYXRlXG59KTtcbiIsIi8vIGVtcHR5XG4iLCIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi9tb2R1bGVzL2VzLmFycmF5Lml0ZXJhdG9yJyk7XG52YXIgRE9NSXRlcmFibGVzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RvbS1pdGVyYWJsZXMnKTtcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG52YXIgc2V0VG9TdHJpbmdUYWcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LXRvLXN0cmluZy10YWcnKTtcbnZhciBJdGVyYXRvcnMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0b3JzJyk7XG5cbmZvciAodmFyIENPTExFQ1RJT05fTkFNRSBpbiBET01JdGVyYWJsZXMpIHtcbiAgc2V0VG9TdHJpbmdUYWcoZ2xvYmFsVGhpc1tDT0xMRUNUSU9OX05BTUVdLCBDT0xMRUNUSU9OX05BTUUpO1xuICBJdGVyYXRvcnNbQ09MTEVDVElPTl9OQU1FXSA9IEl0ZXJhdG9ycy5BcnJheTtcbn1cbiIsIid1c2Ugc3RyaWN0Jztcbi8vIFRPRE86IFJlbW92ZSB0aGlzIG1vZHVsZSBmcm9tIGBjb3JlLWpzQDRgIHNpbmNlIGl0J3Mgc3BsaXQgdG8gbW9kdWxlcyBsaXN0ZWQgYmVsb3dcbnJlcXVpcmUoJy4uL21vZHVsZXMvd2ViLmNsZWFyLWltbWVkaWF0ZScpO1xucmVxdWlyZSgnLi4vbW9kdWxlcy93ZWIuc2V0LWltbWVkaWF0ZScpO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xudmFyIHNldFRhc2sgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdGFzaycpLnNldDtcbnZhciBzY2hlZHVsZXJzRml4ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NjaGVkdWxlcnMtZml4Jyk7XG5cbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9vdmVuLXNoL2J1bi9pc3N1ZXMvMTYzM1xudmFyIHNldEltbWVkaWF0ZSA9IGdsb2JhbFRoaXMuc2V0SW1tZWRpYXRlID8gc2NoZWR1bGVyc0ZpeChzZXRUYXNrLCBmYWxzZSkgOiBzZXRUYXNrO1xuXG4vLyBgc2V0SW1tZWRpYXRlYCBtZXRob2Rcbi8vIGh0dHA6Ly93M2MuZ2l0aHViLmlvL3NldEltbWVkaWF0ZS8jc2ktc2V0SW1tZWRpYXRlXG4kKHsgZ2xvYmFsOiB0cnVlLCBiaW5kOiB0cnVlLCBlbnVtZXJhYmxlOiB0cnVlLCBmb3JjZWQ6IGdsb2JhbFRoaXMuc2V0SW1tZWRpYXRlICE9PSBzZXRJbW1lZGlhdGUgfSwge1xuICBzZXRJbW1lZGlhdGU6IHNldEltbWVkaWF0ZVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG52YXIgc2NoZWR1bGVyc0ZpeCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zY2hlZHVsZXJzLWZpeCcpO1xuXG52YXIgc2V0SW50ZXJ2YWwgPSBzY2hlZHVsZXJzRml4KGdsb2JhbFRoaXMuc2V0SW50ZXJ2YWwsIHRydWUpO1xuXG4vLyBCdW4gLyBJRTktIHNldEludGVydmFsIGFkZGl0aW9uYWwgcGFyYW1ldGVycyBmaXhcbi8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL3RpbWVycy1hbmQtdXNlci1wcm9tcHRzLmh0bWwjZG9tLXNldGludGVydmFsXG4kKHsgZ2xvYmFsOiB0cnVlLCBiaW5kOiB0cnVlLCBmb3JjZWQ6IGdsb2JhbFRoaXMuc2V0SW50ZXJ2YWwgIT09IHNldEludGVydmFsIH0sIHtcbiAgc2V0SW50ZXJ2YWw6IHNldEludGVydmFsXG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcbnZhciBzY2hlZHVsZXJzRml4ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NjaGVkdWxlcnMtZml4Jyk7XG5cbnZhciBzZXRUaW1lb3V0ID0gc2NoZWR1bGVyc0ZpeChnbG9iYWxUaGlzLnNldFRpbWVvdXQsIHRydWUpO1xuXG4vLyBCdW4gLyBJRTktIHNldFRpbWVvdXQgYWRkaXRpb25hbCBwYXJhbWV0ZXJzIGZpeFxuLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2UvdGltZXJzLWFuZC11c2VyLXByb21wdHMuaHRtbCNkb20tc2V0dGltZW91dFxuJCh7IGdsb2JhbDogdHJ1ZSwgYmluZDogdHJ1ZSwgZm9yY2VkOiBnbG9iYWxUaGlzLnNldFRpbWVvdXQgIT09IHNldFRpbWVvdXQgfSwge1xuICBzZXRUaW1lb3V0OiBzZXRUaW1lb3V0XG59KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIFRPRE86IFJlbW92ZSB0aGlzIG1vZHVsZSBmcm9tIGBjb3JlLWpzQDRgIHNpbmNlIGl0J3Mgc3BsaXQgdG8gbW9kdWxlcyBsaXN0ZWQgYmVsb3dcbnJlcXVpcmUoJy4uL21vZHVsZXMvd2ViLnNldC1pbnRlcnZhbCcpO1xucmVxdWlyZSgnLi4vbW9kdWxlcy93ZWIuc2V0LXRpbWVvdXQnKTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIFRPRE86IGluIGNvcmUtanNANCwgbW92ZSAvbW9kdWxlcy8gZGVwZW5kZW5jaWVzIHRvIHB1YmxpYyBlbnRyaWVzIGZvciBiZXR0ZXIgb3B0aW1pemF0aW9uIGJ5IHRvb2xzIGxpa2UgYHByZXNldC1lbnZgXG5yZXF1aXJlKCcuLi9tb2R1bGVzL2VzLmFycmF5Lml0ZXJhdG9yJyk7XG5yZXF1aXJlKCcuLi9tb2R1bGVzL2VzLnN0cmluZy5mcm9tLWNvZGUtcG9pbnQnKTtcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcbnZhciBzYWZlR2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zYWZlLWdldC1idWlsdC1pbicpO1xudmFyIGdldEJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluJyk7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBVU0VfTkFUSVZFX1VSTCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy91cmwtY29uc3RydWN0b3ItZGV0ZWN0aW9uJyk7XG52YXIgZGVmaW5lQnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4nKTtcbnZhciBkZWZpbmVCdWlsdEluQWNjZXNzb3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWluLWFjY2Vzc29yJyk7XG52YXIgZGVmaW5lQnVpbHRJbnMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWlucycpO1xudmFyIHNldFRvU3RyaW5nVGFnID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC10by1zdHJpbmctdGFnJyk7XG52YXIgY3JlYXRlSXRlcmF0b3JDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvci1jcmVhdGUtY29uc3RydWN0b3InKTtcbnZhciBJbnRlcm5hbFN0YXRlTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ludGVybmFsLXN0YXRlJyk7XG52YXIgYW5JbnN0YW5jZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1pbnN0YW5jZScpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIGJpbmQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZC1jb250ZXh0Jyk7XG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jbGFzc29mJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgJHRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXN0cmluZycpO1xudmFyIGNyZWF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtY3JlYXRlJyk7XG52YXIgY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eS1kZXNjcmlwdG9yJyk7XG52YXIgZ2V0SXRlcmF0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWl0ZXJhdG9yJyk7XG52YXIgZ2V0SXRlcmF0b3JNZXRob2QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWl0ZXJhdG9yLW1ldGhvZCcpO1xudmFyIGNyZWF0ZUl0ZXJSZXN1bHRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLWl0ZXItcmVzdWx0LW9iamVjdCcpO1xudmFyIHZhbGlkYXRlQXJndW1lbnRzTGVuZ3RoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3ZhbGlkYXRlLWFyZ3VtZW50cy1sZW5ndGgnKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcbnZhciBhcnJheVNvcnQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktc29ydCcpO1xuXG52YXIgSVRFUkFUT1IgPSB3ZWxsS25vd25TeW1ib2woJ2l0ZXJhdG9yJyk7XG52YXIgVVJMX1NFQVJDSF9QQVJBTVMgPSAnVVJMU2VhcmNoUGFyYW1zJztcbnZhciBVUkxfU0VBUkNIX1BBUkFNU19JVEVSQVRPUiA9IFVSTF9TRUFSQ0hfUEFSQU1TICsgJ0l0ZXJhdG9yJztcbnZhciBzZXRJbnRlcm5hbFN0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5zZXQ7XG52YXIgZ2V0SW50ZXJuYWxQYXJhbXNTdGF0ZSA9IEludGVybmFsU3RhdGVNb2R1bGUuZ2V0dGVyRm9yKFVSTF9TRUFSQ0hfUEFSQU1TKTtcbnZhciBnZXRJbnRlcm5hbEl0ZXJhdG9yU3RhdGUgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLmdldHRlckZvcihVUkxfU0VBUkNIX1BBUkFNU19JVEVSQVRPUik7XG5cbnZhciBuYXRpdmVGZXRjaCA9IHNhZmVHZXRCdWlsdEluKCdmZXRjaCcpO1xudmFyIE5hdGl2ZVJlcXVlc3QgPSBzYWZlR2V0QnVpbHRJbignUmVxdWVzdCcpO1xudmFyIEhlYWRlcnMgPSBzYWZlR2V0QnVpbHRJbignSGVhZGVycycpO1xudmFyIFJlcXVlc3RQcm90b3R5cGUgPSBOYXRpdmVSZXF1ZXN0ICYmIE5hdGl2ZVJlcXVlc3QucHJvdG90eXBlO1xudmFyIEhlYWRlcnNQcm90b3R5cGUgPSBIZWFkZXJzICYmIEhlYWRlcnMucHJvdG90eXBlO1xudmFyIFR5cGVFcnJvciA9IGdsb2JhbFRoaXMuVHlwZUVycm9yO1xudmFyIGVuY29kZVVSSUNvbXBvbmVudCA9IGdsb2JhbFRoaXMuZW5jb2RlVVJJQ29tcG9uZW50O1xudmFyIGZyb21DaGFyQ29kZSA9IFN0cmluZy5mcm9tQ2hhckNvZGU7XG52YXIgZnJvbUNvZGVQb2ludCA9IGdldEJ1aWx0SW4oJ1N0cmluZycsICdmcm9tQ29kZVBvaW50Jyk7XG52YXIgJHBhcnNlSW50ID0gcGFyc2VJbnQ7XG52YXIgY2hhckF0ID0gdW5jdXJyeVRoaXMoJycuY2hhckF0KTtcbnZhciBqb2luID0gdW5jdXJyeVRoaXMoW10uam9pbik7XG52YXIgcHVzaCA9IHVuY3VycnlUaGlzKFtdLnB1c2gpO1xudmFyIHJlcGxhY2UgPSB1bmN1cnJ5VGhpcygnJy5yZXBsYWNlKTtcbnZhciBzaGlmdCA9IHVuY3VycnlUaGlzKFtdLnNoaWZ0KTtcbnZhciBzcGxpY2UgPSB1bmN1cnJ5VGhpcyhbXS5zcGxpY2UpO1xudmFyIHNwbGl0ID0gdW5jdXJyeVRoaXMoJycuc3BsaXQpO1xudmFyIHN0cmluZ1NsaWNlID0gdW5jdXJyeVRoaXMoJycuc2xpY2UpO1xudmFyIGV4ZWMgPSB1bmN1cnJ5VGhpcygvLi8uZXhlYyk7XG5cbnZhciBwbHVzID0gL1xcKy9nO1xudmFyIEZBTExCQUNLX1JFUExBQ0VSID0gJ1xcdUZGRkQnO1xudmFyIFZBTElEX0hFWCA9IC9eWzAtOWEtZl0rJC9pO1xuXG52YXIgcGFyc2VIZXhPY3RldCA9IGZ1bmN0aW9uIChzdHJpbmcsIHN0YXJ0KSB7XG4gIHZhciBzdWJzdHIgPSBzdHJpbmdTbGljZShzdHJpbmcsIHN0YXJ0LCBzdGFydCArIDIpO1xuICBpZiAoIWV4ZWMoVkFMSURfSEVYLCBzdWJzdHIpKSByZXR1cm4gTmFOO1xuXG4gIHJldHVybiAkcGFyc2VJbnQoc3Vic3RyLCAxNik7XG59O1xuXG52YXIgZ2V0TGVhZGluZ09uZXMgPSBmdW5jdGlvbiAob2N0ZXQpIHtcbiAgdmFyIGNvdW50ID0gMDtcbiAgZm9yICh2YXIgbWFzayA9IDB4ODA7IG1hc2sgPiAwICYmIChvY3RldCAmIG1hc2spICE9PSAwOyBtYXNrID4+PSAxKSB7XG4gICAgY291bnQrKztcbiAgfVxuICByZXR1cm4gY291bnQ7XG59O1xuXG52YXIgdXRmOERlY29kZSA9IGZ1bmN0aW9uIChvY3RldHMpIHtcbiAgdmFyIGNvZGVQb2ludCA9IG51bGw7XG5cbiAgc3dpdGNoIChvY3RldHMubGVuZ3RoKSB7XG4gICAgY2FzZSAxOlxuICAgICAgY29kZVBvaW50ID0gb2N0ZXRzWzBdO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAyOlxuICAgICAgY29kZVBvaW50ID0gKG9jdGV0c1swXSAmIDB4MUYpIDw8IDYgfCAob2N0ZXRzWzFdICYgMHgzRik7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDM6XG4gICAgICBjb2RlUG9pbnQgPSAob2N0ZXRzWzBdICYgMHgwRikgPDwgMTIgfCAob2N0ZXRzWzFdICYgMHgzRikgPDwgNiB8IChvY3RldHNbMl0gJiAweDNGKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgNDpcbiAgICAgIGNvZGVQb2ludCA9IChvY3RldHNbMF0gJiAweDA3KSA8PCAxOCB8IChvY3RldHNbMV0gJiAweDNGKSA8PCAxMiB8IChvY3RldHNbMl0gJiAweDNGKSA8PCA2IHwgKG9jdGV0c1szXSAmIDB4M0YpO1xuICAgICAgYnJlYWs7XG4gIH1cblxuICByZXR1cm4gY29kZVBvaW50ID4gMHgxMEZGRkYgPyBudWxsIDogY29kZVBvaW50O1xufTtcblxudmFyIGRlY29kZSA9IGZ1bmN0aW9uIChpbnB1dCkge1xuICBpbnB1dCA9IHJlcGxhY2UoaW5wdXQsIHBsdXMsICcgJyk7XG4gIHZhciBsZW5ndGggPSBpbnB1dC5sZW5ndGg7XG4gIHZhciByZXN1bHQgPSAnJztcbiAgdmFyIGkgPSAwO1xuXG4gIHdoaWxlIChpIDwgbGVuZ3RoKSB7XG4gICAgdmFyIGRlY29kZWRDaGFyID0gY2hhckF0KGlucHV0LCBpKTtcblxuICAgIGlmIChkZWNvZGVkQ2hhciA9PT0gJyUnKSB7XG4gICAgICBpZiAoY2hhckF0KGlucHV0LCBpICsgMSkgPT09ICclJyB8fCBpICsgMyA+IGxlbmd0aCkge1xuICAgICAgICByZXN1bHQgKz0gJyUnO1xuICAgICAgICBpKys7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICB2YXIgb2N0ZXQgPSBwYXJzZUhleE9jdGV0KGlucHV0LCBpICsgMSk7XG5cbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmUgLS0gTmFOIGNoZWNrXG4gICAgICBpZiAob2N0ZXQgIT09IG9jdGV0KSB7XG4gICAgICAgIHJlc3VsdCArPSBkZWNvZGVkQ2hhcjtcbiAgICAgICAgaSsrO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgaSArPSAyO1xuICAgICAgdmFyIGJ5dGVTZXF1ZW5jZUxlbmd0aCA9IGdldExlYWRpbmdPbmVzKG9jdGV0KTtcblxuICAgICAgaWYgKGJ5dGVTZXF1ZW5jZUxlbmd0aCA9PT0gMCkge1xuICAgICAgICBkZWNvZGVkQ2hhciA9IGZyb21DaGFyQ29kZShvY3RldCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoYnl0ZVNlcXVlbmNlTGVuZ3RoID09PSAxIHx8IGJ5dGVTZXF1ZW5jZUxlbmd0aCA+IDQpIHtcbiAgICAgICAgICByZXN1bHQgKz0gRkFMTEJBQ0tfUkVQTEFDRVI7XG4gICAgICAgICAgaSsrO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIG9jdGV0cyA9IFtvY3RldF07XG4gICAgICAgIHZhciBzZXF1ZW5jZUluZGV4ID0gMTtcblxuICAgICAgICB3aGlsZSAoc2VxdWVuY2VJbmRleCA8IGJ5dGVTZXF1ZW5jZUxlbmd0aCkge1xuICAgICAgICAgIGkrKztcbiAgICAgICAgICBpZiAoaSArIDMgPiBsZW5ndGggfHwgY2hhckF0KGlucHV0LCBpKSAhPT0gJyUnKSBicmVhaztcblxuICAgICAgICAgIHZhciBuZXh0Qnl0ZSA9IHBhcnNlSGV4T2N0ZXQoaW5wdXQsIGkgKyAxKTtcblxuICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmUgLS0gTmFOIGNoZWNrXG4gICAgICAgICAgaWYgKG5leHRCeXRlICE9PSBuZXh0Qnl0ZSkge1xuICAgICAgICAgICAgaSArPSAzO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChuZXh0Qnl0ZSA+IDE5MSB8fCBuZXh0Qnl0ZSA8IDEyOCkgYnJlYWs7XG5cbiAgICAgICAgICBwdXNoKG9jdGV0cywgbmV4dEJ5dGUpO1xuICAgICAgICAgIGkgKz0gMjtcbiAgICAgICAgICBzZXF1ZW5jZUluZGV4Kys7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAob2N0ZXRzLmxlbmd0aCAhPT0gYnl0ZVNlcXVlbmNlTGVuZ3RoKSB7XG4gICAgICAgICAgcmVzdWx0ICs9IEZBTExCQUNLX1JFUExBQ0VSO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGNvZGVQb2ludCA9IHV0ZjhEZWNvZGUob2N0ZXRzKTtcbiAgICAgICAgaWYgKGNvZGVQb2ludCA9PT0gbnVsbCkge1xuICAgICAgICAgIHJlc3VsdCArPSBGQUxMQkFDS19SRVBMQUNFUjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBkZWNvZGVkQ2hhciA9IGZyb21Db2RlUG9pbnQoY29kZVBvaW50KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJlc3VsdCArPSBkZWNvZGVkQ2hhcjtcbiAgICBpKys7XG4gIH1cblxuICByZXR1cm4gcmVzdWx0O1xufTtcblxudmFyIGZpbmQgPSAvWyEnKCl+XXwlMjAvZztcblxudmFyIHJlcGxhY2VtZW50cyA9IHtcbiAgJyEnOiAnJTIxJyxcbiAgXCInXCI6ICclMjcnLFxuICAnKCc6ICclMjgnLFxuICAnKSc6ICclMjknLFxuICAnfic6ICclN0UnLFxuICAnJTIwJzogJysnXG59O1xuXG52YXIgcmVwbGFjZXIgPSBmdW5jdGlvbiAobWF0Y2gpIHtcbiAgcmV0dXJuIHJlcGxhY2VtZW50c1ttYXRjaF07XG59O1xuXG52YXIgc2VyaWFsaXplID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiByZXBsYWNlKGVuY29kZVVSSUNvbXBvbmVudChpdCksIGZpbmQsIHJlcGxhY2VyKTtcbn07XG5cbnZhciBVUkxTZWFyY2hQYXJhbXNJdGVyYXRvciA9IGNyZWF0ZUl0ZXJhdG9yQ29uc3RydWN0b3IoZnVuY3Rpb24gSXRlcmF0b3IocGFyYW1zLCBraW5kKSB7XG4gIHNldEludGVybmFsU3RhdGUodGhpcywge1xuICAgIHR5cGU6IFVSTF9TRUFSQ0hfUEFSQU1TX0lURVJBVE9SLFxuICAgIHRhcmdldDogZ2V0SW50ZXJuYWxQYXJhbXNTdGF0ZShwYXJhbXMpLmVudHJpZXMsXG4gICAgaW5kZXg6IDAsXG4gICAga2luZDoga2luZFxuICB9KTtcbn0sIFVSTF9TRUFSQ0hfUEFSQU1TLCBmdW5jdGlvbiBuZXh0KCkge1xuICB2YXIgc3RhdGUgPSBnZXRJbnRlcm5hbEl0ZXJhdG9yU3RhdGUodGhpcyk7XG4gIHZhciB0YXJnZXQgPSBzdGF0ZS50YXJnZXQ7XG4gIHZhciBpbmRleCA9IHN0YXRlLmluZGV4Kys7XG4gIGlmICghdGFyZ2V0IHx8IGluZGV4ID49IHRhcmdldC5sZW5ndGgpIHtcbiAgICBzdGF0ZS50YXJnZXQgPSBudWxsO1xuICAgIHJldHVybiBjcmVhdGVJdGVyUmVzdWx0T2JqZWN0KHVuZGVmaW5lZCwgdHJ1ZSk7XG4gIH1cbiAgdmFyIGVudHJ5ID0gdGFyZ2V0W2luZGV4XTtcbiAgc3dpdGNoIChzdGF0ZS5raW5kKSB7XG4gICAgY2FzZSAna2V5cyc6IHJldHVybiBjcmVhdGVJdGVyUmVzdWx0T2JqZWN0KGVudHJ5LmtleSwgZmFsc2UpO1xuICAgIGNhc2UgJ3ZhbHVlcyc6IHJldHVybiBjcmVhdGVJdGVyUmVzdWx0T2JqZWN0KGVudHJ5LnZhbHVlLCBmYWxzZSk7XG4gIH0gcmV0dXJuIGNyZWF0ZUl0ZXJSZXN1bHRPYmplY3QoW2VudHJ5LmtleSwgZW50cnkudmFsdWVdLCBmYWxzZSk7XG59LCB0cnVlKTtcblxudmFyIFVSTFNlYXJjaFBhcmFtc1N0YXRlID0gZnVuY3Rpb24gKGluaXQpIHtcbiAgdGhpcy5lbnRyaWVzID0gW107XG4gIHRoaXMudXJsID0gbnVsbDtcblxuICBpZiAoaW5pdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgaWYgKGlzT2JqZWN0KGluaXQpKSB0aGlzLnBhcnNlT2JqZWN0KGluaXQpO1xuICAgIGVsc2UgdGhpcy5wYXJzZVF1ZXJ5KHR5cGVvZiBpbml0ID09ICdzdHJpbmcnID8gY2hhckF0KGluaXQsIDApID09PSAnPycgPyBzdHJpbmdTbGljZShpbml0LCAxKSA6IGluaXQgOiAkdG9TdHJpbmcoaW5pdCkpO1xuICB9XG59O1xuXG5VUkxTZWFyY2hQYXJhbXNTdGF0ZS5wcm90b3R5cGUgPSB7XG4gIHR5cGU6IFVSTF9TRUFSQ0hfUEFSQU1TLFxuICBiaW5kVVJMOiBmdW5jdGlvbiAodXJsKSB7XG4gICAgdGhpcy51cmwgPSB1cmw7XG4gICAgdGhpcy51cGRhdGUoKTtcbiAgfSxcbiAgcGFyc2VPYmplY3Q6IGZ1bmN0aW9uIChvYmplY3QpIHtcbiAgICB2YXIgZW50cmllcyA9IHRoaXMuZW50cmllcztcbiAgICB2YXIgaXRlcmF0b3JNZXRob2QgPSBnZXRJdGVyYXRvck1ldGhvZChvYmplY3QpO1xuICAgIHZhciBpdGVyYXRvciwgbmV4dCwgc3RlcCwgZW50cnlJdGVyYXRvciwgZW50cnlOZXh0LCBmaXJzdCwgc2Vjb25kO1xuXG4gICAgaWYgKGl0ZXJhdG9yTWV0aG9kKSB7XG4gICAgICBpdGVyYXRvciA9IGdldEl0ZXJhdG9yKG9iamVjdCwgaXRlcmF0b3JNZXRob2QpO1xuICAgICAgbmV4dCA9IGl0ZXJhdG9yLm5leHQ7XG4gICAgICB3aGlsZSAoIShzdGVwID0gY2FsbChuZXh0LCBpdGVyYXRvcikpLmRvbmUpIHtcbiAgICAgICAgZW50cnlJdGVyYXRvciA9IGdldEl0ZXJhdG9yKGFuT2JqZWN0KHN0ZXAudmFsdWUpKTtcbiAgICAgICAgZW50cnlOZXh0ID0gZW50cnlJdGVyYXRvci5uZXh0O1xuICAgICAgICBpZiAoXG4gICAgICAgICAgKGZpcnN0ID0gY2FsbChlbnRyeU5leHQsIGVudHJ5SXRlcmF0b3IpKS5kb25lIHx8XG4gICAgICAgICAgKHNlY29uZCA9IGNhbGwoZW50cnlOZXh0LCBlbnRyeUl0ZXJhdG9yKSkuZG9uZSB8fFxuICAgICAgICAgICFjYWxsKGVudHJ5TmV4dCwgZW50cnlJdGVyYXRvcikuZG9uZVxuICAgICAgICApIHRocm93IG5ldyBUeXBlRXJyb3IoJ0V4cGVjdGVkIHNlcXVlbmNlIHdpdGggbGVuZ3RoIDInKTtcbiAgICAgICAgcHVzaChlbnRyaWVzLCB7IGtleTogJHRvU3RyaW5nKGZpcnN0LnZhbHVlKSwgdmFsdWU6ICR0b1N0cmluZyhzZWNvbmQudmFsdWUpIH0pO1xuICAgICAgfVxuICAgIH0gZWxzZSBmb3IgKHZhciBrZXkgaW4gb2JqZWN0KSBpZiAoaGFzT3duKG9iamVjdCwga2V5KSkge1xuICAgICAgcHVzaChlbnRyaWVzLCB7IGtleToga2V5LCB2YWx1ZTogJHRvU3RyaW5nKG9iamVjdFtrZXldKSB9KTtcbiAgICB9XG4gIH0sXG4gIHBhcnNlUXVlcnk6IGZ1bmN0aW9uIChxdWVyeSkge1xuICAgIGlmIChxdWVyeSkge1xuICAgICAgdmFyIGVudHJpZXMgPSB0aGlzLmVudHJpZXM7XG4gICAgICB2YXIgYXR0cmlidXRlcyA9IHNwbGl0KHF1ZXJ5LCAnJicpO1xuICAgICAgdmFyIGluZGV4ID0gMDtcbiAgICAgIHZhciBhdHRyaWJ1dGUsIGVudHJ5O1xuICAgICAgd2hpbGUgKGluZGV4IDwgYXR0cmlidXRlcy5sZW5ndGgpIHtcbiAgICAgICAgYXR0cmlidXRlID0gYXR0cmlidXRlc1tpbmRleCsrXTtcbiAgICAgICAgaWYgKGF0dHJpYnV0ZS5sZW5ndGgpIHtcbiAgICAgICAgICBlbnRyeSA9IHNwbGl0KGF0dHJpYnV0ZSwgJz0nKTtcbiAgICAgICAgICBwdXNoKGVudHJpZXMsIHtcbiAgICAgICAgICAgIGtleTogZGVjb2RlKHNoaWZ0KGVudHJ5KSksXG4gICAgICAgICAgICB2YWx1ZTogZGVjb2RlKGpvaW4oZW50cnksICc9JykpXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0sXG4gIHNlcmlhbGl6ZTogZnVuY3Rpb24gKCkge1xuICAgIHZhciBlbnRyaWVzID0gdGhpcy5lbnRyaWVzO1xuICAgIHZhciByZXN1bHQgPSBbXTtcbiAgICB2YXIgaW5kZXggPSAwO1xuICAgIHZhciBlbnRyeTtcbiAgICB3aGlsZSAoaW5kZXggPCBlbnRyaWVzLmxlbmd0aCkge1xuICAgICAgZW50cnkgPSBlbnRyaWVzW2luZGV4KytdO1xuICAgICAgcHVzaChyZXN1bHQsIHNlcmlhbGl6ZShlbnRyeS5rZXkpICsgJz0nICsgc2VyaWFsaXplKGVudHJ5LnZhbHVlKSk7XG4gICAgfSByZXR1cm4gam9pbihyZXN1bHQsICcmJyk7XG4gIH0sXG4gIHVwZGF0ZTogZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuZW50cmllcy5sZW5ndGggPSAwO1xuICAgIHRoaXMucGFyc2VRdWVyeSh0aGlzLnVybC5xdWVyeSk7XG4gIH0sXG4gIHVwZGF0ZVVSTDogZnVuY3Rpb24gKCkge1xuICAgIGlmICh0aGlzLnVybCkgdGhpcy51cmwudXBkYXRlKCk7XG4gIH1cbn07XG5cbi8vIGBVUkxTZWFyY2hQYXJhbXNgIGNvbnN0cnVjdG9yXG4vLyBodHRwczovL3VybC5zcGVjLndoYXR3Zy5vcmcvI2ludGVyZmFjZS11cmxzZWFyY2hwYXJhbXNcbnZhciBVUkxTZWFyY2hQYXJhbXNDb25zdHJ1Y3RvciA9IGZ1bmN0aW9uIFVSTFNlYXJjaFBhcmFtcygvKiBpbml0ICovKSB7XG4gIGFuSW5zdGFuY2UodGhpcywgVVJMU2VhcmNoUGFyYW1zUHJvdG90eXBlKTtcbiAgdmFyIGluaXQgPSBhcmd1bWVudHMubGVuZ3RoID4gMCA/IGFyZ3VtZW50c1swXSA6IHVuZGVmaW5lZDtcbiAgdmFyIHN0YXRlID0gc2V0SW50ZXJuYWxTdGF0ZSh0aGlzLCBuZXcgVVJMU2VhcmNoUGFyYW1zU3RhdGUoaW5pdCkpO1xuICBpZiAoIURFU0NSSVBUT1JTKSB0aGlzLnNpemUgPSBzdGF0ZS5lbnRyaWVzLmxlbmd0aDtcbn07XG5cbnZhciBVUkxTZWFyY2hQYXJhbXNQcm90b3R5cGUgPSBVUkxTZWFyY2hQYXJhbXNDb25zdHJ1Y3Rvci5wcm90b3R5cGU7XG5cbmRlZmluZUJ1aWx0SW5zKFVSTFNlYXJjaFBhcmFtc1Byb3RvdHlwZSwge1xuICAvLyBgVVJMU2VhcmNoUGFyYW1zLnByb3RvdHlwZS5hcHBlbmRgIG1ldGhvZFxuICAvLyBodHRwczovL3VybC5zcGVjLndoYXR3Zy5vcmcvI2RvbS11cmxzZWFyY2hwYXJhbXMtYXBwZW5kXG4gIGFwcGVuZDogZnVuY3Rpb24gYXBwZW5kKG5hbWUsIHZhbHVlKSB7XG4gICAgdmFyIHN0YXRlID0gZ2V0SW50ZXJuYWxQYXJhbXNTdGF0ZSh0aGlzKTtcbiAgICB2YWxpZGF0ZUFyZ3VtZW50c0xlbmd0aChhcmd1bWVudHMubGVuZ3RoLCAyKTtcbiAgICBwdXNoKHN0YXRlLmVudHJpZXMsIHsga2V5OiAkdG9TdHJpbmcobmFtZSksIHZhbHVlOiAkdG9TdHJpbmcodmFsdWUpIH0pO1xuICAgIGlmICghREVTQ1JJUFRPUlMpIHRoaXMubGVuZ3RoKys7XG4gICAgc3RhdGUudXBkYXRlVVJMKCk7XG4gIH0sXG4gIC8vIGBVUkxTZWFyY2hQYXJhbXMucHJvdG90eXBlLmRlbGV0ZWAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdXJsLnNwZWMud2hhdHdnLm9yZy8jZG9tLXVybHNlYXJjaHBhcmFtcy1kZWxldGVcbiAgJ2RlbGV0ZSc6IGZ1bmN0aW9uIChuYW1lIC8qICwgdmFsdWUgKi8pIHtcbiAgICB2YXIgc3RhdGUgPSBnZXRJbnRlcm5hbFBhcmFtc1N0YXRlKHRoaXMpO1xuICAgIHZhciBsZW5ndGggPSB2YWxpZGF0ZUFyZ3VtZW50c0xlbmd0aChhcmd1bWVudHMubGVuZ3RoLCAxKTtcbiAgICB2YXIgZW50cmllcyA9IHN0YXRlLmVudHJpZXM7XG4gICAgdmFyIGtleSA9ICR0b1N0cmluZyhuYW1lKTtcbiAgICB2YXIgJHZhbHVlID0gbGVuZ3RoIDwgMiA/IHVuZGVmaW5lZCA6IGFyZ3VtZW50c1sxXTtcbiAgICB2YXIgdmFsdWUgPSAkdmFsdWUgPT09IHVuZGVmaW5lZCA/ICR2YWx1ZSA6ICR0b1N0cmluZygkdmFsdWUpO1xuICAgIHZhciBpbmRleCA9IDA7XG4gICAgd2hpbGUgKGluZGV4IDwgZW50cmllcy5sZW5ndGgpIHtcbiAgICAgIHZhciBlbnRyeSA9IGVudHJpZXNbaW5kZXhdO1xuICAgICAgaWYgKGVudHJ5LmtleSA9PT0ga2V5ICYmICh2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IGVudHJ5LnZhbHVlID09PSB2YWx1ZSkpIHtcbiAgICAgICAgc3BsaWNlKGVudHJpZXMsIGluZGV4LCAxKTtcbiAgICAgICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpIGJyZWFrO1xuICAgICAgfSBlbHNlIGluZGV4Kys7XG4gICAgfVxuICAgIGlmICghREVTQ1JJUFRPUlMpIHRoaXMuc2l6ZSA9IGVudHJpZXMubGVuZ3RoO1xuICAgIHN0YXRlLnVwZGF0ZVVSTCgpO1xuICB9LFxuICAvLyBgVVJMU2VhcmNoUGFyYW1zLnByb3RvdHlwZS5nZXRgIG1ldGhvZFxuICAvLyBodHRwczovL3VybC5zcGVjLndoYXR3Zy5vcmcvI2RvbS11cmxzZWFyY2hwYXJhbXMtZ2V0XG4gIGdldDogZnVuY3Rpb24gZ2V0KG5hbWUpIHtcbiAgICB2YXIgZW50cmllcyA9IGdldEludGVybmFsUGFyYW1zU3RhdGUodGhpcykuZW50cmllcztcbiAgICB2YWxpZGF0ZUFyZ3VtZW50c0xlbmd0aChhcmd1bWVudHMubGVuZ3RoLCAxKTtcbiAgICB2YXIga2V5ID0gJHRvU3RyaW5nKG5hbWUpO1xuICAgIHZhciBpbmRleCA9IDA7XG4gICAgZm9yICg7IGluZGV4IDwgZW50cmllcy5sZW5ndGg7IGluZGV4KyspIHtcbiAgICAgIGlmIChlbnRyaWVzW2luZGV4XS5rZXkgPT09IGtleSkgcmV0dXJuIGVudHJpZXNbaW5kZXhdLnZhbHVlO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfSxcbiAgLy8gYFVSTFNlYXJjaFBhcmFtcy5wcm90b3R5cGUuZ2V0QWxsYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly91cmwuc3BlYy53aGF0d2cub3JnLyNkb20tdXJsc2VhcmNocGFyYW1zLWdldGFsbFxuICBnZXRBbGw6IGZ1bmN0aW9uIGdldEFsbChuYW1lKSB7XG4gICAgdmFyIGVudHJpZXMgPSBnZXRJbnRlcm5hbFBhcmFtc1N0YXRlKHRoaXMpLmVudHJpZXM7XG4gICAgdmFsaWRhdGVBcmd1bWVudHNMZW5ndGgoYXJndW1lbnRzLmxlbmd0aCwgMSk7XG4gICAgdmFyIGtleSA9ICR0b1N0cmluZyhuYW1lKTtcbiAgICB2YXIgcmVzdWx0ID0gW107XG4gICAgdmFyIGluZGV4ID0gMDtcbiAgICBmb3IgKDsgaW5kZXggPCBlbnRyaWVzLmxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgaWYgKGVudHJpZXNbaW5kZXhdLmtleSA9PT0ga2V5KSBwdXNoKHJlc3VsdCwgZW50cmllc1tpbmRleF0udmFsdWUpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9LFxuICAvLyBgVVJMU2VhcmNoUGFyYW1zLnByb3RvdHlwZS5oYXNgIG1ldGhvZFxuICAvLyBodHRwczovL3VybC5zcGVjLndoYXR3Zy5vcmcvI2RvbS11cmxzZWFyY2hwYXJhbXMtaGFzXG4gIGhhczogZnVuY3Rpb24gaGFzKG5hbWUgLyogLCB2YWx1ZSAqLykge1xuICAgIHZhciBlbnRyaWVzID0gZ2V0SW50ZXJuYWxQYXJhbXNTdGF0ZSh0aGlzKS5lbnRyaWVzO1xuICAgIHZhciBsZW5ndGggPSB2YWxpZGF0ZUFyZ3VtZW50c0xlbmd0aChhcmd1bWVudHMubGVuZ3RoLCAxKTtcbiAgICB2YXIga2V5ID0gJHRvU3RyaW5nKG5hbWUpO1xuICAgIHZhciAkdmFsdWUgPSBsZW5ndGggPCAyID8gdW5kZWZpbmVkIDogYXJndW1lbnRzWzFdO1xuICAgIHZhciB2YWx1ZSA9ICR2YWx1ZSA9PT0gdW5kZWZpbmVkID8gJHZhbHVlIDogJHRvU3RyaW5nKCR2YWx1ZSk7XG4gICAgdmFyIGluZGV4ID0gMDtcbiAgICB3aGlsZSAoaW5kZXggPCBlbnRyaWVzLmxlbmd0aCkge1xuICAgICAgdmFyIGVudHJ5ID0gZW50cmllc1tpbmRleCsrXTtcbiAgICAgIGlmIChlbnRyeS5rZXkgPT09IGtleSAmJiAodmFsdWUgPT09IHVuZGVmaW5lZCB8fCBlbnRyeS52YWx1ZSA9PT0gdmFsdWUpKSByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9LFxuICAvLyBgVVJMU2VhcmNoUGFyYW1zLnByb3RvdHlwZS5zZXRgIG1ldGhvZFxuICAvLyBodHRwczovL3VybC5zcGVjLndoYXR3Zy5vcmcvI2RvbS11cmxzZWFyY2hwYXJhbXMtc2V0XG4gIHNldDogZnVuY3Rpb24gc2V0KG5hbWUsIHZhbHVlKSB7XG4gICAgdmFyIHN0YXRlID0gZ2V0SW50ZXJuYWxQYXJhbXNTdGF0ZSh0aGlzKTtcbiAgICB2YWxpZGF0ZUFyZ3VtZW50c0xlbmd0aChhcmd1bWVudHMubGVuZ3RoLCAxKTtcbiAgICB2YXIgZW50cmllcyA9IHN0YXRlLmVudHJpZXM7XG4gICAgdmFyIGZvdW5kID0gZmFsc2U7XG4gICAgdmFyIGtleSA9ICR0b1N0cmluZyhuYW1lKTtcbiAgICB2YXIgdmFsID0gJHRvU3RyaW5nKHZhbHVlKTtcbiAgICB2YXIgaW5kZXggPSAwO1xuICAgIHZhciBlbnRyeTtcbiAgICBmb3IgKDsgaW5kZXggPCBlbnRyaWVzLmxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgZW50cnkgPSBlbnRyaWVzW2luZGV4XTtcbiAgICAgIGlmIChlbnRyeS5rZXkgPT09IGtleSkge1xuICAgICAgICBpZiAoZm91bmQpIHNwbGljZShlbnRyaWVzLCBpbmRleC0tLCAxKTtcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgZm91bmQgPSB0cnVlO1xuICAgICAgICAgIGVudHJ5LnZhbHVlID0gdmFsO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGlmICghZm91bmQpIHB1c2goZW50cmllcywgeyBrZXk6IGtleSwgdmFsdWU6IHZhbCB9KTtcbiAgICBpZiAoIURFU0NSSVBUT1JTKSB0aGlzLnNpemUgPSBlbnRyaWVzLmxlbmd0aDtcbiAgICBzdGF0ZS51cGRhdGVVUkwoKTtcbiAgfSxcbiAgLy8gYFVSTFNlYXJjaFBhcmFtcy5wcm90b3R5cGUuc29ydGAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdXJsLnNwZWMud2hhdHdnLm9yZy8jZG9tLXVybHNlYXJjaHBhcmFtcy1zb3J0XG4gIHNvcnQ6IGZ1bmN0aW9uIHNvcnQoKSB7XG4gICAgdmFyIHN0YXRlID0gZ2V0SW50ZXJuYWxQYXJhbXNTdGF0ZSh0aGlzKTtcbiAgICBhcnJheVNvcnQoc3RhdGUuZW50cmllcywgZnVuY3Rpb24gKGEsIGIpIHtcbiAgICAgIHJldHVybiBhLmtleSA+IGIua2V5ID8gMSA6IC0xO1xuICAgIH0pO1xuICAgIHN0YXRlLnVwZGF0ZVVSTCgpO1xuICB9LFxuICAvLyBgVVJMU2VhcmNoUGFyYW1zLnByb3RvdHlwZS5mb3JFYWNoYCBtZXRob2RcbiAgZm9yRWFjaDogZnVuY3Rpb24gZm9yRWFjaChjYWxsYmFjayAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICB2YXIgZW50cmllcyA9IGdldEludGVybmFsUGFyYW1zU3RhdGUodGhpcykuZW50cmllcztcbiAgICB2YXIgYm91bmRGdW5jdGlvbiA9IGJpbmQoY2FsbGJhY2ssIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgICB2YXIgaW5kZXggPSAwO1xuICAgIHZhciBlbnRyeTtcbiAgICB3aGlsZSAoaW5kZXggPCBlbnRyaWVzLmxlbmd0aCkge1xuICAgICAgZW50cnkgPSBlbnRyaWVzW2luZGV4KytdO1xuICAgICAgYm91bmRGdW5jdGlvbihlbnRyeS52YWx1ZSwgZW50cnkua2V5LCB0aGlzKTtcbiAgICB9XG4gIH0sXG4gIC8vIGBVUkxTZWFyY2hQYXJhbXMucHJvdG90eXBlLmtleXNgIG1ldGhvZFxuICBrZXlzOiBmdW5jdGlvbiBrZXlzKCkge1xuICAgIHJldHVybiBuZXcgVVJMU2VhcmNoUGFyYW1zSXRlcmF0b3IodGhpcywgJ2tleXMnKTtcbiAgfSxcbiAgLy8gYFVSTFNlYXJjaFBhcmFtcy5wcm90b3R5cGUudmFsdWVzYCBtZXRob2RcbiAgdmFsdWVzOiBmdW5jdGlvbiB2YWx1ZXMoKSB7XG4gICAgcmV0dXJuIG5ldyBVUkxTZWFyY2hQYXJhbXNJdGVyYXRvcih0aGlzLCAndmFsdWVzJyk7XG4gIH0sXG4gIC8vIGBVUkxTZWFyY2hQYXJhbXMucHJvdG90eXBlLmVudHJpZXNgIG1ldGhvZFxuICBlbnRyaWVzOiBmdW5jdGlvbiBlbnRyaWVzKCkge1xuICAgIHJldHVybiBuZXcgVVJMU2VhcmNoUGFyYW1zSXRlcmF0b3IodGhpcywgJ2VudHJpZXMnKTtcbiAgfVxufSwgeyBlbnVtZXJhYmxlOiB0cnVlIH0pO1xuXG4vLyBgVVJMU2VhcmNoUGFyYW1zLnByb3RvdHlwZVtAQGl0ZXJhdG9yXWAgbWV0aG9kXG5kZWZpbmVCdWlsdEluKFVSTFNlYXJjaFBhcmFtc1Byb3RvdHlwZSwgSVRFUkFUT1IsIFVSTFNlYXJjaFBhcmFtc1Byb3RvdHlwZS5lbnRyaWVzLCB7IG5hbWU6ICdlbnRyaWVzJyB9KTtcblxuLy8gYFVSTFNlYXJjaFBhcmFtcy5wcm90b3R5cGUudG9TdHJpbmdgIG1ldGhvZFxuLy8gaHR0cHM6Ly91cmwuc3BlYy53aGF0d2cub3JnLyN1cmxzZWFyY2hwYXJhbXMtc3RyaW5naWZpY2F0aW9uLWJlaGF2aW9yXG5kZWZpbmVCdWlsdEluKFVSTFNlYXJjaFBhcmFtc1Byb3RvdHlwZSwgJ3RvU3RyaW5nJywgZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gIHJldHVybiBnZXRJbnRlcm5hbFBhcmFtc1N0YXRlKHRoaXMpLnNlcmlhbGl6ZSgpO1xufSwgeyBlbnVtZXJhYmxlOiB0cnVlIH0pO1xuXG4vLyBgVVJMU2VhcmNoUGFyYW1zLnByb3RvdHlwZS5zaXplYCBnZXR0ZXJcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS93aGF0d2cvdXJsL3B1bGwvNzM0XG5pZiAoREVTQ1JJUFRPUlMpIGRlZmluZUJ1aWx0SW5BY2Nlc3NvcihVUkxTZWFyY2hQYXJhbXNQcm90b3R5cGUsICdzaXplJywge1xuICBnZXQ6IGZ1bmN0aW9uIHNpemUoKSB7XG4gICAgcmV0dXJuIGdldEludGVybmFsUGFyYW1zU3RhdGUodGhpcykuZW50cmllcy5sZW5ndGg7XG4gIH0sXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgZW51bWVyYWJsZTogdHJ1ZVxufSk7XG5cbnNldFRvU3RyaW5nVGFnKFVSTFNlYXJjaFBhcmFtc0NvbnN0cnVjdG9yLCBVUkxfU0VBUkNIX1BBUkFNUyk7XG5cbiQoeyBnbG9iYWw6IHRydWUsIGNvbnN0cnVjdG9yOiB0cnVlLCBmb3JjZWQ6ICFVU0VfTkFUSVZFX1VSTCB9LCB7XG4gIFVSTFNlYXJjaFBhcmFtczogVVJMU2VhcmNoUGFyYW1zQ29uc3RydWN0b3Jcbn0pO1xuXG4vLyBXcmFwIGBmZXRjaGAgYW5kIGBSZXF1ZXN0YCBmb3IgY29ycmVjdCB3b3JrIHdpdGggcG9seWZpbGxlZCBgVVJMU2VhcmNoUGFyYW1zYFxuaWYgKCFVU0VfTkFUSVZFX1VSTCAmJiBpc0NhbGxhYmxlKEhlYWRlcnMpKSB7XG4gIHZhciBoZWFkZXJzSGFzID0gdW5jdXJyeVRoaXMoSGVhZGVyc1Byb3RvdHlwZS5oYXMpO1xuICB2YXIgaGVhZGVyc1NldCA9IHVuY3VycnlUaGlzKEhlYWRlcnNQcm90b3R5cGUuc2V0KTtcblxuICB2YXIgd3JhcFJlcXVlc3RPcHRpb25zID0gZnVuY3Rpb24gKGluaXQpIHtcbiAgICBpZiAoaXNPYmplY3QoaW5pdCkpIHtcbiAgICAgIHZhciBib2R5ID0gaW5pdC5ib2R5O1xuICAgICAgdmFyIGhlYWRlcnM7XG4gICAgICBpZiAoY2xhc3NvZihib2R5KSA9PT0gVVJMX1NFQVJDSF9QQVJBTVMpIHtcbiAgICAgICAgaGVhZGVycyA9IGluaXQuaGVhZGVycyA/IG5ldyBIZWFkZXJzKGluaXQuaGVhZGVycykgOiBuZXcgSGVhZGVycygpO1xuICAgICAgICBpZiAoIWhlYWRlcnNIYXMoaGVhZGVycywgJ2NvbnRlbnQtdHlwZScpKSB7XG4gICAgICAgICAgaGVhZGVyc1NldChoZWFkZXJzLCAnY29udGVudC10eXBlJywgJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZDtjaGFyc2V0PVVURi04Jyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNyZWF0ZShpbml0LCB7XG4gICAgICAgICAgYm9keTogY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yKDAsICR0b1N0cmluZyhib2R5KSksXG4gICAgICAgICAgaGVhZGVyczogY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yKDAsIGhlYWRlcnMpXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0gcmV0dXJuIGluaXQ7XG4gIH07XG5cbiAgaWYgKGlzQ2FsbGFibGUobmF0aXZlRmV0Y2gpKSB7XG4gICAgJCh7IGdsb2JhbDogdHJ1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgZG9udENhbGxHZXRTZXQ6IHRydWUsIGZvcmNlZDogdHJ1ZSB9LCB7XG4gICAgICBmZXRjaDogZnVuY3Rpb24gZmV0Y2goaW5wdXQgLyogLCBpbml0ICovKSB7XG4gICAgICAgIHJldHVybiBuYXRpdmVGZXRjaChpbnB1dCwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyB3cmFwUmVxdWVzdE9wdGlvbnMoYXJndW1lbnRzWzFdKSA6IHt9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGlmIChpc0NhbGxhYmxlKE5hdGl2ZVJlcXVlc3QpKSB7XG4gICAgdmFyIFJlcXVlc3RDb25zdHJ1Y3RvciA9IGZ1bmN0aW9uIFJlcXVlc3QoaW5wdXQgLyogLCBpbml0ICovKSB7XG4gICAgICBhbkluc3RhbmNlKHRoaXMsIFJlcXVlc3RQcm90b3R5cGUpO1xuICAgICAgcmV0dXJuIG5ldyBOYXRpdmVSZXF1ZXN0KGlucHV0LCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IHdyYXBSZXF1ZXN0T3B0aW9ucyhhcmd1bWVudHNbMV0pIDoge30pO1xuICAgIH07XG5cbiAgICBSZXF1ZXN0UHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUmVxdWVzdENvbnN0cnVjdG9yO1xuICAgIFJlcXVlc3RDb25zdHJ1Y3Rvci5wcm90b3R5cGUgPSBSZXF1ZXN0UHJvdG90eXBlO1xuXG4gICAgJCh7IGdsb2JhbDogdHJ1ZSwgY29uc3RydWN0b3I6IHRydWUsIGRvbnRDYWxsR2V0U2V0OiB0cnVlLCBmb3JjZWQ6IHRydWUgfSwge1xuICAgICAgUmVxdWVzdDogUmVxdWVzdENvbnN0cnVjdG9yXG4gICAgfSk7XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIFVSTFNlYXJjaFBhcmFtczogVVJMU2VhcmNoUGFyYW1zQ29uc3RydWN0b3IsXG4gIGdldFN0YXRlOiBnZXRJbnRlcm5hbFBhcmFtc1N0YXRlXG59O1xuIiwiLy8gZW1wdHlcbiIsIi8vIGVtcHR5XG4iLCIndXNlIHN0cmljdCc7XG4vLyBUT0RPOiBSZW1vdmUgdGhpcyBtb2R1bGUgZnJvbSBgY29yZS1qc0A0YCBzaW5jZSBpdCdzIHJlcGxhY2VkIHRvIG1vZHVsZSBiZWxvd1xucmVxdWlyZSgnLi4vbW9kdWxlcy93ZWIudXJsLXNlYXJjaC1wYXJhbXMuY29uc3RydWN0b3InKTtcbiIsIi8vIGVtcHR5XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBnZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbicpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgdmFsaWRhdGVBcmd1bWVudHNMZW5ndGggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdmFsaWRhdGUtYXJndW1lbnRzLWxlbmd0aCcpO1xudmFyIHRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXN0cmluZycpO1xudmFyIFVTRV9OQVRJVkVfVVJMID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3VybC1jb25zdHJ1Y3Rvci1kZXRlY3Rpb24nKTtcblxudmFyIFVSTCA9IGdldEJ1aWx0SW4oJ1VSTCcpO1xuXG4vLyBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL25vZGUvaXNzdWVzLzQ3NTA1XG4vLyBodHRwczovL2dpdGh1Yi5jb20vZGVub2xhbmQvZGVuby9pc3N1ZXMvMTg4OTNcbnZhciBUSFJPV1NfV0lUSE9VVF9BUkdVTUVOVFMgPSBVU0VfTkFUSVZFX1VSTCAmJiBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIFVSTC5jYW5QYXJzZSgpO1xufSk7XG5cbi8vIEJ1biB+IDEuMC4zMCBidWdcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9vdmVuLXNoL2J1bi9pc3N1ZXMvOTI1MFxudmFyIFdST05HX0FSSVRZID0gZmFpbHMoZnVuY3Rpb24gKCkge1xuICByZXR1cm4gVVJMLmNhblBhcnNlLmxlbmd0aCAhPT0gMTtcbn0pO1xuXG4vLyBgVVJMLmNhblBhcnNlYCBtZXRob2Rcbi8vIGh0dHBzOi8vdXJsLnNwZWMud2hhdHdnLm9yZy8jZG9tLXVybC1jYW5wYXJzZVxuJCh7IHRhcmdldDogJ1VSTCcsIHN0YXQ6IHRydWUsIGZvcmNlZDogIVRIUk9XU19XSVRIT1VUX0FSR1VNRU5UUyB8fCBXUk9OR19BUklUWSB9LCB7XG4gIGNhblBhcnNlOiBmdW5jdGlvbiBjYW5QYXJzZSh1cmwpIHtcbiAgICB2YXIgbGVuZ3RoID0gdmFsaWRhdGVBcmd1bWVudHNMZW5ndGgoYXJndW1lbnRzLmxlbmd0aCwgMSk7XG4gICAgdmFyIHVybFN0cmluZyA9IHRvU3RyaW5nKHVybCk7XG4gICAgdmFyIGJhc2UgPSBsZW5ndGggPCAyIHx8IGFyZ3VtZW50c1sxXSA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogdG9TdHJpbmcoYXJndW1lbnRzWzFdKTtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuICEhbmV3IFVSTCh1cmxTdHJpbmcsIGJhc2UpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIFRPRE86IGluIGNvcmUtanNANCwgbW92ZSAvbW9kdWxlcy8gZGVwZW5kZW5jaWVzIHRvIHB1YmxpYyBlbnRyaWVzIGZvciBiZXR0ZXIgb3B0aW1pemF0aW9uIGJ5IHRvb2xzIGxpa2UgYHByZXNldC1lbnZgXG5yZXF1aXJlKCcuLi9tb2R1bGVzL2VzLnN0cmluZy5pdGVyYXRvcicpO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBVU0VfTkFUSVZFX1VSTCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy91cmwtY29uc3RydWN0b3ItZGV0ZWN0aW9uJyk7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xudmFyIGJpbmQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZC1jb250ZXh0Jyk7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgZGVmaW5lQnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4nKTtcbnZhciBkZWZpbmVCdWlsdEluQWNjZXNzb3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWluLWFjY2Vzc29yJyk7XG52YXIgYW5JbnN0YW5jZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1pbnN0YW5jZScpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgYXNzaWduID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1hc3NpZ24nKTtcbnZhciBhcnJheUZyb20gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktZnJvbScpO1xudmFyIGFycmF5U2xpY2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktc2xpY2UnKTtcbnZhciBjb2RlQXQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3RyaW5nLW11bHRpYnl0ZScpLmNvZGVBdDtcbnZhciB0b0FTQ0lJID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3N0cmluZy1wdW55Y29kZS10by1hc2NpaScpO1xudmFyICR0b1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1zdHJpbmcnKTtcbnZhciBzZXRUb1N0cmluZ1RhZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtdG8tc3RyaW5nLXRhZycpO1xudmFyIHZhbGlkYXRlQXJndW1lbnRzTGVuZ3RoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3ZhbGlkYXRlLWFyZ3VtZW50cy1sZW5ndGgnKTtcbnZhciBVUkxTZWFyY2hQYXJhbXNNb2R1bGUgPSByZXF1aXJlKCcuLi9tb2R1bGVzL3dlYi51cmwtc2VhcmNoLXBhcmFtcy5jb25zdHJ1Y3RvcicpO1xudmFyIEludGVybmFsU3RhdGVNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW50ZXJuYWwtc3RhdGUnKTtcblxudmFyIHNldEludGVybmFsU3RhdGUgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLnNldDtcbnZhciBnZXRJbnRlcm5hbFVSTFN0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5nZXR0ZXJGb3IoJ1VSTCcpO1xudmFyIFVSTFNlYXJjaFBhcmFtcyA9IFVSTFNlYXJjaFBhcmFtc01vZHVsZS5VUkxTZWFyY2hQYXJhbXM7XG52YXIgZ2V0SW50ZXJuYWxTZWFyY2hQYXJhbXNTdGF0ZSA9IFVSTFNlYXJjaFBhcmFtc01vZHVsZS5nZXRTdGF0ZTtcblxudmFyIE5hdGl2ZVVSTCA9IGdsb2JhbFRoaXMuVVJMO1xudmFyIFR5cGVFcnJvciA9IGdsb2JhbFRoaXMuVHlwZUVycm9yO1xudmFyIHBhcnNlSW50ID0gZ2xvYmFsVGhpcy5wYXJzZUludDtcbnZhciBmbG9vciA9IE1hdGguZmxvb3I7XG52YXIgcG93ID0gTWF0aC5wb3c7XG52YXIgY2hhckF0ID0gdW5jdXJyeVRoaXMoJycuY2hhckF0KTtcbnZhciBleGVjID0gdW5jdXJyeVRoaXMoLy4vLmV4ZWMpO1xudmFyIGpvaW4gPSB1bmN1cnJ5VGhpcyhbXS5qb2luKTtcbnZhciBudW1iZXJUb1N0cmluZyA9IHVuY3VycnlUaGlzKDEuMC50b1N0cmluZyk7XG52YXIgcG9wID0gdW5jdXJyeVRoaXMoW10ucG9wKTtcbnZhciBwdXNoID0gdW5jdXJyeVRoaXMoW10ucHVzaCk7XG52YXIgcmVwbGFjZSA9IHVuY3VycnlUaGlzKCcnLnJlcGxhY2UpO1xudmFyIHNoaWZ0ID0gdW5jdXJyeVRoaXMoW10uc2hpZnQpO1xudmFyIHNwbGl0ID0gdW5jdXJyeVRoaXMoJycuc3BsaXQpO1xudmFyIHN0cmluZ1NsaWNlID0gdW5jdXJyeVRoaXMoJycuc2xpY2UpO1xudmFyIHRvTG93ZXJDYXNlID0gdW5jdXJyeVRoaXMoJycudG9Mb3dlckNhc2UpO1xudmFyIHVuc2hpZnQgPSB1bmN1cnJ5VGhpcyhbXS51bnNoaWZ0KTtcblxudmFyIElOVkFMSURfQVVUSE9SSVRZID0gJ0ludmFsaWQgYXV0aG9yaXR5JztcbnZhciBJTlZBTElEX1NDSEVNRSA9ICdJbnZhbGlkIHNjaGVtZSc7XG52YXIgSU5WQUxJRF9IT1NUID0gJ0ludmFsaWQgaG9zdCc7XG52YXIgSU5WQUxJRF9QT1JUID0gJ0ludmFsaWQgcG9ydCc7XG5cbnZhciBBTFBIQSA9IC9bYS16XS9pO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlZ2V4cC9uby1vYnNjdXJlLXJhbmdlIC0tIHNhZmVcbnZhciBBTFBIQU5VTUVSSUMgPSAvW1xcZCstLmEtel0vaTtcbnZhciBESUdJVCA9IC9cXGQvO1xudmFyIEhFWF9TVEFSVCA9IC9eMHgvaTtcbnZhciBPQ1QgPSAvXlswLTddKyQvO1xudmFyIERFQyA9IC9eXFxkKyQvO1xudmFyIEhFWCA9IC9eW1xcZGEtZl0rJC9pO1xuLyogZXNsaW50LWRpc2FibGUgcmVnZXhwL25vLWNvbnRyb2wtY2hhcmFjdGVyIC0tIHNhZmUgKi9cbnZhciBGT1JCSURERU5fSE9TVF9DT0RFX1BPSU5UID0gL1tcXDBcXHRcXG5cXHIgIyUvOjw+P0BbXFxcXFxcXV58XS87XG52YXIgRk9SQklEREVOX0hPU1RfQ09ERV9QT0lOVF9FWENMVURJTkdfUEVSQ0VOVCA9IC9bXFwwXFx0XFxuXFxyICMvOjw+P0BbXFxcXFxcXV58XS87XG52YXIgTEVBRElOR19DMF9DT05UUk9MX09SX1NQQUNFID0gL15bXFx1MDAwMC1cXHUwMDIwXSsvO1xudmFyIFRSQUlMSU5HX0MwX0NPTlRST0xfT1JfU1BBQ0UgPSAvKF58W15cXHUwMDAwLVxcdTAwMjBdKVtcXHUwMDAwLVxcdTAwMjBdKyQvO1xudmFyIFRBQl9BTkRfTkVXX0xJTkUgPSAvW1xcdFxcblxccl0vZztcbi8qIGVzbGludC1lbmFibGUgcmVnZXhwL25vLWNvbnRyb2wtY2hhcmFjdGVyIC0tIHNhZmUgKi9cbnZhciBFT0Y7XG5cbi8vIGh0dHBzOi8vdXJsLnNwZWMud2hhdHdnLm9yZy8jaXB2NC1udW1iZXItcGFyc2VyXG52YXIgcGFyc2VJUHY0ID0gZnVuY3Rpb24gKGlucHV0KSB7XG4gIHZhciBwYXJ0cyA9IHNwbGl0KGlucHV0LCAnLicpO1xuICB2YXIgcGFydHNMZW5ndGgsIG51bWJlcnMsIGluZGV4LCBwYXJ0LCByYWRpeCwgbnVtYmVyLCBpcHY0O1xuICBpZiAocGFydHMubGVuZ3RoICYmIHBhcnRzW3BhcnRzLmxlbmd0aCAtIDFdID09PSAnJykge1xuICAgIHBhcnRzLmxlbmd0aC0tO1xuICB9XG4gIHBhcnRzTGVuZ3RoID0gcGFydHMubGVuZ3RoO1xuICBpZiAocGFydHNMZW5ndGggPiA0KSByZXR1cm4gaW5wdXQ7XG4gIG51bWJlcnMgPSBbXTtcbiAgZm9yIChpbmRleCA9IDA7IGluZGV4IDwgcGFydHNMZW5ndGg7IGluZGV4KyspIHtcbiAgICBwYXJ0ID0gcGFydHNbaW5kZXhdO1xuICAgIGlmIChwYXJ0ID09PSAnJykgcmV0dXJuIGlucHV0O1xuICAgIHJhZGl4ID0gMTA7XG4gICAgaWYgKHBhcnQubGVuZ3RoID4gMSAmJiBjaGFyQXQocGFydCwgMCkgPT09ICcwJykge1xuICAgICAgcmFkaXggPSBleGVjKEhFWF9TVEFSVCwgcGFydCkgPyAxNiA6IDg7XG4gICAgICBwYXJ0ID0gc3RyaW5nU2xpY2UocGFydCwgcmFkaXggPT09IDggPyAxIDogMik7XG4gICAgfVxuICAgIGlmIChwYXJ0ID09PSAnJykge1xuICAgICAgbnVtYmVyID0gMDtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKCFleGVjKHJhZGl4ID09PSAxMCA/IERFQyA6IHJhZGl4ID09PSA4ID8gT0NUIDogSEVYLCBwYXJ0KSkgcmV0dXJuIGlucHV0O1xuICAgICAgbnVtYmVyID0gcGFyc2VJbnQocGFydCwgcmFkaXgpO1xuICAgIH1cbiAgICBwdXNoKG51bWJlcnMsIG51bWJlcik7XG4gIH1cbiAgZm9yIChpbmRleCA9IDA7IGluZGV4IDwgcGFydHNMZW5ndGg7IGluZGV4KyspIHtcbiAgICBudW1iZXIgPSBudW1iZXJzW2luZGV4XTtcbiAgICBpZiAoaW5kZXggPT09IHBhcnRzTGVuZ3RoIC0gMSkge1xuICAgICAgaWYgKG51bWJlciA+PSBwb3coMjU2LCA1IC0gcGFydHNMZW5ndGgpKSByZXR1cm4gbnVsbDtcbiAgICB9IGVsc2UgaWYgKG51bWJlciA+IDI1NSkgcmV0dXJuIG51bGw7XG4gIH1cbiAgaXB2NCA9IHBvcChudW1iZXJzKTtcbiAgZm9yIChpbmRleCA9IDA7IGluZGV4IDwgbnVtYmVycy5sZW5ndGg7IGluZGV4KyspIHtcbiAgICBpcHY0ICs9IG51bWJlcnNbaW5kZXhdICogcG93KDI1NiwgMyAtIGluZGV4KTtcbiAgfVxuICByZXR1cm4gaXB2NDtcbn07XG5cbi8vIGh0dHBzOi8vdXJsLnNwZWMud2hhdHdnLm9yZy8jY29uY2VwdC1pcHY2LXBhcnNlclxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG1heC1zdGF0ZW1lbnRzIC0tIFRPRE9cbnZhciBwYXJzZUlQdjYgPSBmdW5jdGlvbiAoaW5wdXQpIHtcbiAgdmFyIGFkZHJlc3MgPSBbMCwgMCwgMCwgMCwgMCwgMCwgMCwgMF07XG4gIHZhciBwaWVjZUluZGV4ID0gMDtcbiAgdmFyIGNvbXByZXNzID0gbnVsbDtcbiAgdmFyIHBvaW50ZXIgPSAwO1xuICB2YXIgdmFsdWUsIGxlbmd0aCwgbnVtYmVyc1NlZW4sIGlwdjRQaWVjZSwgbnVtYmVyLCBzd2Fwcywgc3dhcDtcblxuICB2YXIgY2hyID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBjaGFyQXQoaW5wdXQsIHBvaW50ZXIpO1xuICB9O1xuXG4gIGlmIChjaHIoKSA9PT0gJzonKSB7XG4gICAgaWYgKGNoYXJBdChpbnB1dCwgMSkgIT09ICc6JykgcmV0dXJuO1xuICAgIHBvaW50ZXIgKz0gMjtcbiAgICBwaWVjZUluZGV4Kys7XG4gICAgY29tcHJlc3MgPSBwaWVjZUluZGV4O1xuICB9XG4gIHdoaWxlIChjaHIoKSkge1xuICAgIGlmIChwaWVjZUluZGV4ID09PSA4KSByZXR1cm47XG4gICAgaWYgKGNocigpID09PSAnOicpIHtcbiAgICAgIGlmIChjb21wcmVzcyAhPT0gbnVsbCkgcmV0dXJuO1xuICAgICAgcG9pbnRlcisrO1xuICAgICAgcGllY2VJbmRleCsrO1xuICAgICAgY29tcHJlc3MgPSBwaWVjZUluZGV4O1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIHZhbHVlID0gbGVuZ3RoID0gMDtcbiAgICB3aGlsZSAobGVuZ3RoIDwgNCAmJiBleGVjKEhFWCwgY2hyKCkpKSB7XG4gICAgICB2YWx1ZSA9IHZhbHVlICogMTYgKyBwYXJzZUludChjaHIoKSwgMTYpO1xuICAgICAgcG9pbnRlcisrO1xuICAgICAgbGVuZ3RoKys7XG4gICAgfVxuICAgIGlmIChjaHIoKSA9PT0gJy4nKSB7XG4gICAgICBpZiAobGVuZ3RoID09PSAwKSByZXR1cm47XG4gICAgICBwb2ludGVyIC09IGxlbmd0aDtcbiAgICAgIGlmIChwaWVjZUluZGV4ID4gNikgcmV0dXJuO1xuICAgICAgbnVtYmVyc1NlZW4gPSAwO1xuICAgICAgd2hpbGUgKGNocigpKSB7XG4gICAgICAgIGlwdjRQaWVjZSA9IG51bGw7XG4gICAgICAgIGlmIChudW1iZXJzU2VlbiA+IDApIHtcbiAgICAgICAgICBpZiAoY2hyKCkgPT09ICcuJyAmJiBudW1iZXJzU2VlbiA8IDQpIHBvaW50ZXIrKztcbiAgICAgICAgICBlbHNlIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWV4ZWMoRElHSVQsIGNocigpKSkgcmV0dXJuO1xuICAgICAgICB3aGlsZSAoZXhlYyhESUdJVCwgY2hyKCkpKSB7XG4gICAgICAgICAgbnVtYmVyID0gcGFyc2VJbnQoY2hyKCksIDEwKTtcbiAgICAgICAgICBpZiAoaXB2NFBpZWNlID09PSBudWxsKSBpcHY0UGllY2UgPSBudW1iZXI7XG4gICAgICAgICAgZWxzZSBpZiAoaXB2NFBpZWNlID09PSAwKSByZXR1cm47XG4gICAgICAgICAgZWxzZSBpcHY0UGllY2UgPSBpcHY0UGllY2UgKiAxMCArIG51bWJlcjtcbiAgICAgICAgICBpZiAoaXB2NFBpZWNlID4gMjU1KSByZXR1cm47XG4gICAgICAgICAgcG9pbnRlcisrO1xuICAgICAgICB9XG4gICAgICAgIGFkZHJlc3NbcGllY2VJbmRleF0gPSBhZGRyZXNzW3BpZWNlSW5kZXhdICogMjU2ICsgaXB2NFBpZWNlO1xuICAgICAgICBudW1iZXJzU2VlbisrO1xuICAgICAgICBpZiAobnVtYmVyc1NlZW4gPT09IDIgfHwgbnVtYmVyc1NlZW4gPT09IDQpIHBpZWNlSW5kZXgrKztcbiAgICAgIH1cbiAgICAgIGlmIChudW1iZXJzU2VlbiAhPT0gNCkgcmV0dXJuO1xuICAgICAgYnJlYWs7XG4gICAgfSBlbHNlIGlmIChjaHIoKSA9PT0gJzonKSB7XG4gICAgICBwb2ludGVyKys7XG4gICAgICBpZiAoIWNocigpKSByZXR1cm47XG4gICAgfSBlbHNlIGlmIChjaHIoKSkgcmV0dXJuO1xuICAgIGFkZHJlc3NbcGllY2VJbmRleCsrXSA9IHZhbHVlO1xuICB9XG4gIGlmIChjb21wcmVzcyAhPT0gbnVsbCkge1xuICAgIHN3YXBzID0gcGllY2VJbmRleCAtIGNvbXByZXNzO1xuICAgIHBpZWNlSW5kZXggPSA3O1xuICAgIHdoaWxlIChwaWVjZUluZGV4ICE9PSAwICYmIHN3YXBzID4gMCkge1xuICAgICAgc3dhcCA9IGFkZHJlc3NbcGllY2VJbmRleF07XG4gICAgICBhZGRyZXNzW3BpZWNlSW5kZXgtLV0gPSBhZGRyZXNzW2NvbXByZXNzICsgc3dhcHMgLSAxXTtcbiAgICAgIGFkZHJlc3NbY29tcHJlc3MgKyAtLXN3YXBzXSA9IHN3YXA7XG4gICAgfVxuICB9IGVsc2UgaWYgKHBpZWNlSW5kZXggIT09IDgpIHJldHVybjtcbiAgcmV0dXJuIGFkZHJlc3M7XG59O1xuXG52YXIgZmluZExvbmdlc3RaZXJvU2VxdWVuY2UgPSBmdW5jdGlvbiAoaXB2Nikge1xuICB2YXIgbWF4SW5kZXggPSBudWxsO1xuICB2YXIgbWF4TGVuZ3RoID0gMTtcbiAgdmFyIGN1cnJTdGFydCA9IG51bGw7XG4gIHZhciBjdXJyTGVuZ3RoID0gMDtcbiAgdmFyIGluZGV4ID0gMDtcbiAgZm9yICg7IGluZGV4IDwgODsgaW5kZXgrKykge1xuICAgIGlmIChpcHY2W2luZGV4XSAhPT0gMCkge1xuICAgICAgaWYgKGN1cnJMZW5ndGggPiBtYXhMZW5ndGgpIHtcbiAgICAgICAgbWF4SW5kZXggPSBjdXJyU3RhcnQ7XG4gICAgICAgIG1heExlbmd0aCA9IGN1cnJMZW5ndGg7XG4gICAgICB9XG4gICAgICBjdXJyU3RhcnQgPSBudWxsO1xuICAgICAgY3Vyckxlbmd0aCA9IDA7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChjdXJyU3RhcnQgPT09IG51bGwpIGN1cnJTdGFydCA9IGluZGV4O1xuICAgICAgKytjdXJyTGVuZ3RoO1xuICAgIH1cbiAgfVxuICByZXR1cm4gY3Vyckxlbmd0aCA+IG1heExlbmd0aCA/IGN1cnJTdGFydCA6IG1heEluZGV4O1xufTtcblxuLy8gaHR0cHM6Ly91cmwuc3BlYy53aGF0d2cub3JnLyNob3N0LXNlcmlhbGl6aW5nXG52YXIgc2VyaWFsaXplSG9zdCA9IGZ1bmN0aW9uIChob3N0KSB7XG4gIHZhciByZXN1bHQsIGluZGV4LCBjb21wcmVzcywgaWdub3JlMDtcblxuICAvLyBpcHY0XG4gIGlmICh0eXBlb2YgaG9zdCA9PSAnbnVtYmVyJykge1xuICAgIHJlc3VsdCA9IFtdO1xuICAgIGZvciAoaW5kZXggPSAwOyBpbmRleCA8IDQ7IGluZGV4KyspIHtcbiAgICAgIHVuc2hpZnQocmVzdWx0LCBob3N0ICUgMjU2KTtcbiAgICAgIGhvc3QgPSBmbG9vcihob3N0IC8gMjU2KTtcbiAgICB9XG4gICAgcmV0dXJuIGpvaW4ocmVzdWx0LCAnLicpO1xuICB9XG5cbiAgLy8gaXB2NlxuICBpZiAodHlwZW9mIGhvc3QgPT0gJ29iamVjdCcpIHtcbiAgICByZXN1bHQgPSAnJztcbiAgICBjb21wcmVzcyA9IGZpbmRMb25nZXN0WmVyb1NlcXVlbmNlKGhvc3QpO1xuICAgIGZvciAoaW5kZXggPSAwOyBpbmRleCA8IDg7IGluZGV4KyspIHtcbiAgICAgIGlmIChpZ25vcmUwICYmIGhvc3RbaW5kZXhdID09PSAwKSBjb250aW51ZTtcbiAgICAgIGlmIChpZ25vcmUwKSBpZ25vcmUwID0gZmFsc2U7XG4gICAgICBpZiAoY29tcHJlc3MgPT09IGluZGV4KSB7XG4gICAgICAgIHJlc3VsdCArPSBpbmRleCA/ICc6JyA6ICc6Oic7XG4gICAgICAgIGlnbm9yZTAgPSB0cnVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzdWx0ICs9IG51bWJlclRvU3RyaW5nKGhvc3RbaW5kZXhdLCAxNik7XG4gICAgICAgIGlmIChpbmRleCA8IDcpIHJlc3VsdCArPSAnOic7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiAnWycgKyByZXN1bHQgKyAnXSc7XG4gIH1cblxuICByZXR1cm4gaG9zdDtcbn07XG5cbnZhciBDMENvbnRyb2xQZXJjZW50RW5jb2RlU2V0ID0ge307XG52YXIgZnJhZ21lbnRQZXJjZW50RW5jb2RlU2V0ID0gYXNzaWduKHt9LCBDMENvbnRyb2xQZXJjZW50RW5jb2RlU2V0LCB7XG4gICcgJzogMSwgJ1wiJzogMSwgJzwnOiAxLCAnPic6IDEsICdgJzogMVxufSk7XG52YXIgcGF0aFBlcmNlbnRFbmNvZGVTZXQgPSBhc3NpZ24oe30sIGZyYWdtZW50UGVyY2VudEVuY29kZVNldCwge1xuICAnIyc6IDEsICc/JzogMSwgJ3snOiAxLCAnfSc6IDFcbn0pO1xudmFyIHVzZXJpbmZvUGVyY2VudEVuY29kZVNldCA9IGFzc2lnbih7fSwgcGF0aFBlcmNlbnRFbmNvZGVTZXQsIHtcbiAgJy8nOiAxLCAnOic6IDEsICc7JzogMSwgJz0nOiAxLCAnQCc6IDEsICdbJzogMSwgJ1xcXFwnOiAxLCAnXSc6IDEsICdeJzogMSwgJ3wnOiAxXG59KTtcblxudmFyIHBlcmNlbnRFbmNvZGUgPSBmdW5jdGlvbiAoY2hyLCBzZXQpIHtcbiAgdmFyIGNvZGUgPSBjb2RlQXQoY2hyLCAwKTtcbiAgcmV0dXJuIGNvZGUgPiAweDIwICYmIGNvZGUgPCAweDdGICYmICFoYXNPd24oc2V0LCBjaHIpID8gY2hyIDogZW5jb2RlVVJJQ29tcG9uZW50KGNocik7XG59O1xuXG4vLyBodHRwczovL3VybC5zcGVjLndoYXR3Zy5vcmcvI3NwZWNpYWwtc2NoZW1lXG52YXIgc3BlY2lhbFNjaGVtZXMgPSB7XG4gIGZ0cDogMjEsXG4gIGZpbGU6IG51bGwsXG4gIGh0dHA6IDgwLFxuICBodHRwczogNDQzLFxuICB3czogODAsXG4gIHdzczogNDQzXG59O1xuXG4vLyBodHRwczovL3VybC5zcGVjLndoYXR3Zy5vcmcvI3dpbmRvd3MtZHJpdmUtbGV0dGVyXG52YXIgaXNXaW5kb3dzRHJpdmVMZXR0ZXIgPSBmdW5jdGlvbiAoc3RyaW5nLCBub3JtYWxpemVkKSB7XG4gIHZhciBzZWNvbmQ7XG4gIHJldHVybiBzdHJpbmcubGVuZ3RoID09PSAyICYmIGV4ZWMoQUxQSEEsIGNoYXJBdChzdHJpbmcsIDApKVxuICAgICYmICgoc2Vjb25kID0gY2hhckF0KHN0cmluZywgMSkpID09PSAnOicgfHwgKCFub3JtYWxpemVkICYmIHNlY29uZCA9PT0gJ3wnKSk7XG59O1xuXG4vLyBodHRwczovL3VybC5zcGVjLndoYXR3Zy5vcmcvI3N0YXJ0LXdpdGgtYS13aW5kb3dzLWRyaXZlLWxldHRlclxudmFyIHN0YXJ0c1dpdGhXaW5kb3dzRHJpdmVMZXR0ZXIgPSBmdW5jdGlvbiAoc3RyaW5nKSB7XG4gIHZhciB0aGlyZDtcbiAgcmV0dXJuIHN0cmluZy5sZW5ndGggPiAxICYmIGlzV2luZG93c0RyaXZlTGV0dGVyKHN0cmluZ1NsaWNlKHN0cmluZywgMCwgMikpICYmIChcbiAgICBzdHJpbmcubGVuZ3RoID09PSAyIHx8XG4gICAgKCh0aGlyZCA9IGNoYXJBdChzdHJpbmcsIDIpKSA9PT0gJy8nIHx8IHRoaXJkID09PSAnXFxcXCcgfHwgdGhpcmQgPT09ICc/JyB8fCB0aGlyZCA9PT0gJyMnKVxuICApO1xufTtcblxuLy8gaHR0cHM6Ly91cmwuc3BlYy53aGF0d2cub3JnLyNzaW5nbGUtZG90LXBhdGgtc2VnbWVudFxudmFyIGlzU2luZ2xlRG90ID0gZnVuY3Rpb24gKHNlZ21lbnQpIHtcbiAgcmV0dXJuIHNlZ21lbnQgPT09ICcuJyB8fCB0b0xvd2VyQ2FzZShzZWdtZW50KSA9PT0gJyUyZSc7XG59O1xuXG4vLyBodHRwczovL3VybC5zcGVjLndoYXR3Zy5vcmcvI2RvdWJsZS1kb3QtcGF0aC1zZWdtZW50XG52YXIgaXNEb3VibGVEb3QgPSBmdW5jdGlvbiAoc2VnbWVudCkge1xuICBzZWdtZW50ID0gdG9Mb3dlckNhc2Uoc2VnbWVudCk7XG4gIHJldHVybiBzZWdtZW50ID09PSAnLi4nIHx8IHNlZ21lbnQgPT09ICclMmUuJyB8fCBzZWdtZW50ID09PSAnLiUyZScgfHwgc2VnbWVudCA9PT0gJyUyZSUyZSc7XG59O1xuXG4vLyBTdGF0ZXM6XG52YXIgU0NIRU1FX1NUQVJUID0ge307XG52YXIgU0NIRU1FID0ge307XG52YXIgTk9fU0NIRU1FID0ge307XG52YXIgU1BFQ0lBTF9SRUxBVElWRV9PUl9BVVRIT1JJVFkgPSB7fTtcbnZhciBQQVRIX09SX0FVVEhPUklUWSA9IHt9O1xudmFyIFJFTEFUSVZFID0ge307XG52YXIgUkVMQVRJVkVfU0xBU0ggPSB7fTtcbnZhciBTUEVDSUFMX0FVVEhPUklUWV9TTEFTSEVTID0ge307XG52YXIgU1BFQ0lBTF9BVVRIT1JJVFlfSUdOT1JFX1NMQVNIRVMgPSB7fTtcbnZhciBBVVRIT1JJVFkgPSB7fTtcbnZhciBIT1NUID0ge307XG52YXIgSE9TVE5BTUUgPSB7fTtcbnZhciBQT1JUID0ge307XG52YXIgRklMRSA9IHt9O1xudmFyIEZJTEVfU0xBU0ggPSB7fTtcbnZhciBGSUxFX0hPU1QgPSB7fTtcbnZhciBQQVRIX1NUQVJUID0ge307XG52YXIgUEFUSCA9IHt9O1xudmFyIENBTk5PVF9CRV9BX0JBU0VfVVJMX1BBVEggPSB7fTtcbnZhciBRVUVSWSA9IHt9O1xudmFyIEZSQUdNRU5UID0ge307XG5cbnZhciBVUkxTdGF0ZSA9IGZ1bmN0aW9uICh1cmwsIGlzQmFzZSwgYmFzZSkge1xuICB2YXIgdXJsU3RyaW5nID0gJHRvU3RyaW5nKHVybCk7XG4gIHZhciBiYXNlU3RhdGUsIGZhaWx1cmUsIHNlYXJjaFBhcmFtcztcbiAgaWYgKGlzQmFzZSkge1xuICAgIGZhaWx1cmUgPSB0aGlzLnBhcnNlKHVybFN0cmluZyk7XG4gICAgaWYgKGZhaWx1cmUpIHRocm93IG5ldyBUeXBlRXJyb3IoZmFpbHVyZSk7XG4gICAgdGhpcy5zZWFyY2hQYXJhbXMgPSBudWxsO1xuICB9IGVsc2Uge1xuICAgIGlmIChiYXNlICE9PSB1bmRlZmluZWQpIGJhc2VTdGF0ZSA9IG5ldyBVUkxTdGF0ZShiYXNlLCB0cnVlKTtcbiAgICBmYWlsdXJlID0gdGhpcy5wYXJzZSh1cmxTdHJpbmcsIG51bGwsIGJhc2VTdGF0ZSk7XG4gICAgaWYgKGZhaWx1cmUpIHRocm93IG5ldyBUeXBlRXJyb3IoZmFpbHVyZSk7XG4gICAgc2VhcmNoUGFyYW1zID0gZ2V0SW50ZXJuYWxTZWFyY2hQYXJhbXNTdGF0ZShuZXcgVVJMU2VhcmNoUGFyYW1zKCkpO1xuICAgIHNlYXJjaFBhcmFtcy5iaW5kVVJMKHRoaXMpO1xuICAgIHRoaXMuc2VhcmNoUGFyYW1zID0gc2VhcmNoUGFyYW1zO1xuICB9XG59O1xuXG5VUkxTdGF0ZS5wcm90b3R5cGUgPSB7XG4gIHR5cGU6ICdVUkwnLFxuICAvLyBodHRwczovL3VybC5zcGVjLndoYXR3Zy5vcmcvI3VybC1wYXJzaW5nXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBtYXgtc3RhdGVtZW50cyAtLSBUT0RPXG4gIHBhcnNlOiBmdW5jdGlvbiAoaW5wdXQsIHN0YXRlT3ZlcnJpZGUsIGJhc2UpIHtcbiAgICB2YXIgdXJsID0gdGhpcztcbiAgICB2YXIgc3RhdGUgPSBzdGF0ZU92ZXJyaWRlIHx8IFNDSEVNRV9TVEFSVDtcbiAgICB2YXIgcG9pbnRlciA9IDA7XG4gICAgdmFyIGJ1ZmZlciA9ICcnO1xuICAgIHZhciBzZWVuQXQgPSBmYWxzZTtcbiAgICB2YXIgc2VlbkJyYWNrZXQgPSBmYWxzZTtcbiAgICB2YXIgc2VlblBhc3N3b3JkVG9rZW4gPSBmYWxzZTtcbiAgICB2YXIgY29kZVBvaW50cywgY2hyLCBidWZmZXJDb2RlUG9pbnRzLCBmYWlsdXJlO1xuXG4gICAgaW5wdXQgPSAkdG9TdHJpbmcoaW5wdXQpO1xuXG4gICAgaWYgKCFzdGF0ZU92ZXJyaWRlKSB7XG4gICAgICB1cmwuc2NoZW1lID0gJyc7XG4gICAgICB1cmwudXNlcm5hbWUgPSAnJztcbiAgICAgIHVybC5wYXNzd29yZCA9ICcnO1xuICAgICAgdXJsLmhvc3QgPSBudWxsO1xuICAgICAgdXJsLnBvcnQgPSBudWxsO1xuICAgICAgdXJsLnBhdGggPSBbXTtcbiAgICAgIHVybC5xdWVyeSA9IG51bGw7XG4gICAgICB1cmwuZnJhZ21lbnQgPSBudWxsO1xuICAgICAgdXJsLmNhbm5vdEJlQUJhc2VVUkwgPSBmYWxzZTtcbiAgICAgIGlucHV0ID0gcmVwbGFjZShpbnB1dCwgTEVBRElOR19DMF9DT05UUk9MX09SX1NQQUNFLCAnJyk7XG4gICAgICBpbnB1dCA9IHJlcGxhY2UoaW5wdXQsIFRSQUlMSU5HX0MwX0NPTlRST0xfT1JfU1BBQ0UsICckMScpO1xuICAgIH1cblxuICAgIGlucHV0ID0gcmVwbGFjZShpbnB1dCwgVEFCX0FORF9ORVdfTElORSwgJycpO1xuXG4gICAgY29kZVBvaW50cyA9IGFycmF5RnJvbShpbnB1dCk7XG5cbiAgICB3aGlsZSAocG9pbnRlciA8PSBjb2RlUG9pbnRzLmxlbmd0aCkge1xuICAgICAgY2hyID0gY29kZVBvaW50c1twb2ludGVyXTtcbiAgICAgIHN3aXRjaCAoc3RhdGUpIHtcbiAgICAgICAgY2FzZSBTQ0hFTUVfU1RBUlQ6XG4gICAgICAgICAgaWYgKGNociAmJiBleGVjKEFMUEhBLCBjaHIpKSB7XG4gICAgICAgICAgICBidWZmZXIgKz0gdG9Mb3dlckNhc2UoY2hyKTtcbiAgICAgICAgICAgIHN0YXRlID0gU0NIRU1FO1xuICAgICAgICAgIH0gZWxzZSBpZiAoIXN0YXRlT3ZlcnJpZGUpIHtcbiAgICAgICAgICAgIHN0YXRlID0gTk9fU0NIRU1FO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfSBlbHNlIHJldHVybiBJTlZBTElEX1NDSEVNRTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIFNDSEVNRTpcbiAgICAgICAgICBpZiAoY2hyICYmIChleGVjKEFMUEhBTlVNRVJJQywgY2hyKSB8fCBjaHIgPT09ICcrJyB8fCBjaHIgPT09ICctJyB8fCBjaHIgPT09ICcuJykpIHtcbiAgICAgICAgICAgIGJ1ZmZlciArPSB0b0xvd2VyQ2FzZShjaHIpO1xuICAgICAgICAgIH0gZWxzZSBpZiAoY2hyID09PSAnOicpIHtcbiAgICAgICAgICAgIGlmIChzdGF0ZU92ZXJyaWRlICYmIChcbiAgICAgICAgICAgICAgKHVybC5pc1NwZWNpYWwoKSAhPT0gaGFzT3duKHNwZWNpYWxTY2hlbWVzLCBidWZmZXIpKSB8fFxuICAgICAgICAgICAgICAoYnVmZmVyID09PSAnZmlsZScgJiYgKHVybC5pbmNsdWRlc0NyZWRlbnRpYWxzKCkgfHwgdXJsLnBvcnQgIT09IG51bGwpKSB8fFxuICAgICAgICAgICAgICAodXJsLnNjaGVtZSA9PT0gJ2ZpbGUnICYmICF1cmwuaG9zdClcbiAgICAgICAgICAgICkpIHJldHVybjtcbiAgICAgICAgICAgIHVybC5zY2hlbWUgPSBidWZmZXI7XG4gICAgICAgICAgICBpZiAoc3RhdGVPdmVycmlkZSkge1xuICAgICAgICAgICAgICBpZiAodXJsLmlzU3BlY2lhbCgpICYmIHNwZWNpYWxTY2hlbWVzW3VybC5zY2hlbWVdID09PSB1cmwucG9ydCkgdXJsLnBvcnQgPSBudWxsO1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBidWZmZXIgPSAnJztcbiAgICAgICAgICAgIGlmICh1cmwuc2NoZW1lID09PSAnZmlsZScpIHtcbiAgICAgICAgICAgICAgc3RhdGUgPSBGSUxFO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh1cmwuaXNTcGVjaWFsKCkgJiYgYmFzZSAmJiBiYXNlLnNjaGVtZSA9PT0gdXJsLnNjaGVtZSkge1xuICAgICAgICAgICAgICBzdGF0ZSA9IFNQRUNJQUxfUkVMQVRJVkVfT1JfQVVUSE9SSVRZO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh1cmwuaXNTcGVjaWFsKCkpIHtcbiAgICAgICAgICAgICAgc3RhdGUgPSBTUEVDSUFMX0FVVEhPUklUWV9TTEFTSEVTO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChjb2RlUG9pbnRzW3BvaW50ZXIgKyAxXSA9PT0gJy8nKSB7XG4gICAgICAgICAgICAgIHN0YXRlID0gUEFUSF9PUl9BVVRIT1JJVFk7XG4gICAgICAgICAgICAgIHBvaW50ZXIrKztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHVybC5jYW5ub3RCZUFCYXNlVVJMID0gdHJ1ZTtcbiAgICAgICAgICAgICAgcHVzaCh1cmwucGF0aCwgJycpO1xuICAgICAgICAgICAgICBzdGF0ZSA9IENBTk5PVF9CRV9BX0JBU0VfVVJMX1BBVEg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIGlmICghc3RhdGVPdmVycmlkZSkge1xuICAgICAgICAgICAgYnVmZmVyID0gJyc7XG4gICAgICAgICAgICBzdGF0ZSA9IE5PX1NDSEVNRTtcbiAgICAgICAgICAgIHBvaW50ZXIgPSAwO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfSBlbHNlIHJldHVybiBJTlZBTElEX1NDSEVNRTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIE5PX1NDSEVNRTpcbiAgICAgICAgICBpZiAoIWJhc2UgfHwgKGJhc2UuY2Fubm90QmVBQmFzZVVSTCAmJiBjaHIgIT09ICcjJykpIHJldHVybiBJTlZBTElEX1NDSEVNRTtcbiAgICAgICAgICBpZiAoYmFzZS5jYW5ub3RCZUFCYXNlVVJMICYmIGNociA9PT0gJyMnKSB7XG4gICAgICAgICAgICB1cmwuc2NoZW1lID0gYmFzZS5zY2hlbWU7XG4gICAgICAgICAgICB1cmwucGF0aCA9IGFycmF5U2xpY2UoYmFzZS5wYXRoKTtcbiAgICAgICAgICAgIHVybC5xdWVyeSA9IGJhc2UucXVlcnk7XG4gICAgICAgICAgICB1cmwuZnJhZ21lbnQgPSAnJztcbiAgICAgICAgICAgIHVybC5jYW5ub3RCZUFCYXNlVVJMID0gdHJ1ZTtcbiAgICAgICAgICAgIHN0YXRlID0gRlJBR01FTlQ7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgc3RhdGUgPSBiYXNlLnNjaGVtZSA9PT0gJ2ZpbGUnID8gRklMRSA6IFJFTEFUSVZFO1xuICAgICAgICAgIGNvbnRpbnVlO1xuXG4gICAgICAgIGNhc2UgU1BFQ0lBTF9SRUxBVElWRV9PUl9BVVRIT1JJVFk6XG4gICAgICAgICAgaWYgKGNociA9PT0gJy8nICYmIGNvZGVQb2ludHNbcG9pbnRlciArIDFdID09PSAnLycpIHtcbiAgICAgICAgICAgIHN0YXRlID0gU1BFQ0lBTF9BVVRIT1JJVFlfSUdOT1JFX1NMQVNIRVM7XG4gICAgICAgICAgICBwb2ludGVyKys7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHN0YXRlID0gUkVMQVRJVkU7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9IGJyZWFrO1xuXG4gICAgICAgIGNhc2UgUEFUSF9PUl9BVVRIT1JJVFk6XG4gICAgICAgICAgaWYgKGNociA9PT0gJy8nKSB7XG4gICAgICAgICAgICBzdGF0ZSA9IEFVVEhPUklUWTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzdGF0ZSA9IFBBVEg7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgY2FzZSBSRUxBVElWRTpcbiAgICAgICAgICB1cmwuc2NoZW1lID0gYmFzZS5zY2hlbWU7XG4gICAgICAgICAgaWYgKGNociA9PT0gRU9GKSB7XG4gICAgICAgICAgICB1cmwudXNlcm5hbWUgPSBiYXNlLnVzZXJuYW1lO1xuICAgICAgICAgICAgdXJsLnBhc3N3b3JkID0gYmFzZS5wYXNzd29yZDtcbiAgICAgICAgICAgIHVybC5ob3N0ID0gYmFzZS5ob3N0O1xuICAgICAgICAgICAgdXJsLnBvcnQgPSBiYXNlLnBvcnQ7XG4gICAgICAgICAgICB1cmwucGF0aCA9IGFycmF5U2xpY2UoYmFzZS5wYXRoKTtcbiAgICAgICAgICAgIHVybC5xdWVyeSA9IGJhc2UucXVlcnk7XG4gICAgICAgICAgfSBlbHNlIGlmIChjaHIgPT09ICcvJyB8fCAoY2hyID09PSAnXFxcXCcgJiYgdXJsLmlzU3BlY2lhbCgpKSkge1xuICAgICAgICAgICAgc3RhdGUgPSBSRUxBVElWRV9TTEFTSDtcbiAgICAgICAgICB9IGVsc2UgaWYgKGNociA9PT0gJz8nKSB7XG4gICAgICAgICAgICB1cmwudXNlcm5hbWUgPSBiYXNlLnVzZXJuYW1lO1xuICAgICAgICAgICAgdXJsLnBhc3N3b3JkID0gYmFzZS5wYXNzd29yZDtcbiAgICAgICAgICAgIHVybC5ob3N0ID0gYmFzZS5ob3N0O1xuICAgICAgICAgICAgdXJsLnBvcnQgPSBiYXNlLnBvcnQ7XG4gICAgICAgICAgICB1cmwucGF0aCA9IGFycmF5U2xpY2UoYmFzZS5wYXRoKTtcbiAgICAgICAgICAgIHVybC5xdWVyeSA9ICcnO1xuICAgICAgICAgICAgc3RhdGUgPSBRVUVSWTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGNociA9PT0gJyMnKSB7XG4gICAgICAgICAgICB1cmwudXNlcm5hbWUgPSBiYXNlLnVzZXJuYW1lO1xuICAgICAgICAgICAgdXJsLnBhc3N3b3JkID0gYmFzZS5wYXNzd29yZDtcbiAgICAgICAgICAgIHVybC5ob3N0ID0gYmFzZS5ob3N0O1xuICAgICAgICAgICAgdXJsLnBvcnQgPSBiYXNlLnBvcnQ7XG4gICAgICAgICAgICB1cmwucGF0aCA9IGFycmF5U2xpY2UoYmFzZS5wYXRoKTtcbiAgICAgICAgICAgIHVybC5xdWVyeSA9IGJhc2UucXVlcnk7XG4gICAgICAgICAgICB1cmwuZnJhZ21lbnQgPSAnJztcbiAgICAgICAgICAgIHN0YXRlID0gRlJBR01FTlQ7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHVybC51c2VybmFtZSA9IGJhc2UudXNlcm5hbWU7XG4gICAgICAgICAgICB1cmwucGFzc3dvcmQgPSBiYXNlLnBhc3N3b3JkO1xuICAgICAgICAgICAgdXJsLmhvc3QgPSBiYXNlLmhvc3Q7XG4gICAgICAgICAgICB1cmwucG9ydCA9IGJhc2UucG9ydDtcbiAgICAgICAgICAgIHVybC5wYXRoID0gYXJyYXlTbGljZShiYXNlLnBhdGgpO1xuICAgICAgICAgICAgdXJsLnBhdGgubGVuZ3RoLS07XG4gICAgICAgICAgICBzdGF0ZSA9IFBBVEg7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9IGJyZWFrO1xuXG4gICAgICAgIGNhc2UgUkVMQVRJVkVfU0xBU0g6XG4gICAgICAgICAgaWYgKHVybC5pc1NwZWNpYWwoKSAmJiAoY2hyID09PSAnLycgfHwgY2hyID09PSAnXFxcXCcpKSB7XG4gICAgICAgICAgICBzdGF0ZSA9IFNQRUNJQUxfQVVUSE9SSVRZX0lHTk9SRV9TTEFTSEVTO1xuICAgICAgICAgIH0gZWxzZSBpZiAoY2hyID09PSAnLycpIHtcbiAgICAgICAgICAgIHN0YXRlID0gQVVUSE9SSVRZO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB1cmwudXNlcm5hbWUgPSBiYXNlLnVzZXJuYW1lO1xuICAgICAgICAgICAgdXJsLnBhc3N3b3JkID0gYmFzZS5wYXNzd29yZDtcbiAgICAgICAgICAgIHVybC5ob3N0ID0gYmFzZS5ob3N0O1xuICAgICAgICAgICAgdXJsLnBvcnQgPSBiYXNlLnBvcnQ7XG4gICAgICAgICAgICBzdGF0ZSA9IFBBVEg7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9IGJyZWFrO1xuXG4gICAgICAgIGNhc2UgU1BFQ0lBTF9BVVRIT1JJVFlfU0xBU0hFUzpcbiAgICAgICAgICBzdGF0ZSA9IFNQRUNJQUxfQVVUSE9SSVRZX0lHTk9SRV9TTEFTSEVTO1xuICAgICAgICAgIGlmIChjaHIgIT09ICcvJyB8fCBjaGFyQXQoYnVmZmVyLCBwb2ludGVyICsgMSkgIT09ICcvJykgY29udGludWU7XG4gICAgICAgICAgcG9pbnRlcisrO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgU1BFQ0lBTF9BVVRIT1JJVFlfSUdOT1JFX1NMQVNIRVM6XG4gICAgICAgICAgaWYgKGNociAhPT0gJy8nICYmIGNociAhPT0gJ1xcXFwnKSB7XG4gICAgICAgICAgICBzdGF0ZSA9IEFVVEhPUklUWTtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH0gYnJlYWs7XG5cbiAgICAgICAgY2FzZSBBVVRIT1JJVFk6XG4gICAgICAgICAgaWYgKGNociA9PT0gJ0AnKSB7XG4gICAgICAgICAgICBpZiAoc2VlbkF0KSBidWZmZXIgPSAnJTQwJyArIGJ1ZmZlcjtcbiAgICAgICAgICAgIHNlZW5BdCA9IHRydWU7XG4gICAgICAgICAgICBidWZmZXJDb2RlUG9pbnRzID0gYXJyYXlGcm9tKGJ1ZmZlcik7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGJ1ZmZlckNvZGVQb2ludHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgdmFyIGNvZGVQb2ludCA9IGJ1ZmZlckNvZGVQb2ludHNbaV07XG4gICAgICAgICAgICAgIGlmIChjb2RlUG9pbnQgPT09ICc6JyAmJiAhc2VlblBhc3N3b3JkVG9rZW4pIHtcbiAgICAgICAgICAgICAgICBzZWVuUGFzc3dvcmRUb2tlbiA9IHRydWU7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgdmFyIGVuY29kZWRDb2RlUG9pbnRzID0gcGVyY2VudEVuY29kZShjb2RlUG9pbnQsIHVzZXJpbmZvUGVyY2VudEVuY29kZVNldCk7XG4gICAgICAgICAgICAgIGlmIChzZWVuUGFzc3dvcmRUb2tlbikgdXJsLnBhc3N3b3JkICs9IGVuY29kZWRDb2RlUG9pbnRzO1xuICAgICAgICAgICAgICBlbHNlIHVybC51c2VybmFtZSArPSBlbmNvZGVkQ29kZVBvaW50cztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJ1ZmZlciA9ICcnO1xuICAgICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICBjaHIgPT09IEVPRiB8fCBjaHIgPT09ICcvJyB8fCBjaHIgPT09ICc/JyB8fCBjaHIgPT09ICcjJyB8fFxuICAgICAgICAgICAgKGNociA9PT0gJ1xcXFwnICYmIHVybC5pc1NwZWNpYWwoKSlcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIGlmIChzZWVuQXQgJiYgYnVmZmVyID09PSAnJykgcmV0dXJuIElOVkFMSURfQVVUSE9SSVRZO1xuICAgICAgICAgICAgcG9pbnRlciAtPSBhcnJheUZyb20oYnVmZmVyKS5sZW5ndGggKyAxO1xuICAgICAgICAgICAgYnVmZmVyID0gJyc7XG4gICAgICAgICAgICBzdGF0ZSA9IEhPU1Q7XG4gICAgICAgICAgfSBlbHNlIGJ1ZmZlciArPSBjaHI7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBIT1NUOlxuICAgICAgICBjYXNlIEhPU1ROQU1FOlxuICAgICAgICAgIGlmIChzdGF0ZU92ZXJyaWRlICYmIHVybC5zY2hlbWUgPT09ICdmaWxlJykge1xuICAgICAgICAgICAgc3RhdGUgPSBGSUxFX0hPU1Q7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGNociA9PT0gJzonICYmICFzZWVuQnJhY2tldCkge1xuICAgICAgICAgICAgaWYgKGJ1ZmZlciA9PT0gJycpIHJldHVybiBJTlZBTElEX0hPU1Q7XG4gICAgICAgICAgICBmYWlsdXJlID0gdXJsLnBhcnNlSG9zdChidWZmZXIpO1xuICAgICAgICAgICAgaWYgKGZhaWx1cmUpIHJldHVybiBmYWlsdXJlO1xuICAgICAgICAgICAgYnVmZmVyID0gJyc7XG4gICAgICAgICAgICBzdGF0ZSA9IFBPUlQ7XG4gICAgICAgICAgICBpZiAoc3RhdGVPdmVycmlkZSA9PT0gSE9TVE5BTUUpIHJldHVybjtcbiAgICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgY2hyID09PSBFT0YgfHwgY2hyID09PSAnLycgfHwgY2hyID09PSAnPycgfHwgY2hyID09PSAnIycgfHxcbiAgICAgICAgICAgIChjaHIgPT09ICdcXFxcJyAmJiB1cmwuaXNTcGVjaWFsKCkpXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBpZiAodXJsLmlzU3BlY2lhbCgpICYmIGJ1ZmZlciA9PT0gJycpIHJldHVybiBJTlZBTElEX0hPU1Q7XG4gICAgICAgICAgICBpZiAoc3RhdGVPdmVycmlkZSAmJiBidWZmZXIgPT09ICcnICYmICh1cmwuaW5jbHVkZXNDcmVkZW50aWFscygpIHx8IHVybC5wb3J0ICE9PSBudWxsKSkgcmV0dXJuO1xuICAgICAgICAgICAgZmFpbHVyZSA9IHVybC5wYXJzZUhvc3QoYnVmZmVyKTtcbiAgICAgICAgICAgIGlmIChmYWlsdXJlKSByZXR1cm4gZmFpbHVyZTtcbiAgICAgICAgICAgIGJ1ZmZlciA9ICcnO1xuICAgICAgICAgICAgc3RhdGUgPSBQQVRIX1NUQVJUO1xuICAgICAgICAgICAgaWYgKHN0YXRlT3ZlcnJpZGUpIHJldHVybjtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoY2hyID09PSAnWycpIHNlZW5CcmFja2V0ID0gdHJ1ZTtcbiAgICAgICAgICAgIGVsc2UgaWYgKGNociA9PT0gJ10nKSBzZWVuQnJhY2tldCA9IGZhbHNlO1xuICAgICAgICAgICAgYnVmZmVyICs9IGNocjtcbiAgICAgICAgICB9IGJyZWFrO1xuXG4gICAgICAgIGNhc2UgUE9SVDpcbiAgICAgICAgICBpZiAoZXhlYyhESUdJVCwgY2hyKSkge1xuICAgICAgICAgICAgYnVmZmVyICs9IGNocjtcbiAgICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgY2hyID09PSBFT0YgfHwgY2hyID09PSAnLycgfHwgY2hyID09PSAnPycgfHwgY2hyID09PSAnIycgfHxcbiAgICAgICAgICAgIChjaHIgPT09ICdcXFxcJyAmJiB1cmwuaXNTcGVjaWFsKCkpIHx8XG4gICAgICAgICAgICBzdGF0ZU92ZXJyaWRlXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBpZiAoYnVmZmVyICE9PSAnJykge1xuICAgICAgICAgICAgICB2YXIgcG9ydCA9IHBhcnNlSW50KGJ1ZmZlciwgMTApO1xuICAgICAgICAgICAgICBpZiAocG9ydCA+IDB4RkZGRikgcmV0dXJuIElOVkFMSURfUE9SVDtcbiAgICAgICAgICAgICAgdXJsLnBvcnQgPSAodXJsLmlzU3BlY2lhbCgpICYmIHBvcnQgPT09IHNwZWNpYWxTY2hlbWVzW3VybC5zY2hlbWVdKSA/IG51bGwgOiBwb3J0O1xuICAgICAgICAgICAgICBidWZmZXIgPSAnJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChzdGF0ZU92ZXJyaWRlKSByZXR1cm47XG4gICAgICAgICAgICBzdGF0ZSA9IFBBVEhfU1RBUlQ7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9IGVsc2UgcmV0dXJuIElOVkFMSURfUE9SVDtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIEZJTEU6XG4gICAgICAgICAgdXJsLnNjaGVtZSA9ICdmaWxlJztcbiAgICAgICAgICBpZiAoY2hyID09PSAnLycgfHwgY2hyID09PSAnXFxcXCcpIHN0YXRlID0gRklMRV9TTEFTSDtcbiAgICAgICAgICBlbHNlIGlmIChiYXNlICYmIGJhc2Uuc2NoZW1lID09PSAnZmlsZScpIHtcbiAgICAgICAgICAgIHN3aXRjaCAoY2hyKSB7XG4gICAgICAgICAgICAgIGNhc2UgRU9GOlxuICAgICAgICAgICAgICAgIHVybC5ob3N0ID0gYmFzZS5ob3N0O1xuICAgICAgICAgICAgICAgIHVybC5wYXRoID0gYXJyYXlTbGljZShiYXNlLnBhdGgpO1xuICAgICAgICAgICAgICAgIHVybC5xdWVyeSA9IGJhc2UucXVlcnk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIGNhc2UgJz8nOlxuICAgICAgICAgICAgICAgIHVybC5ob3N0ID0gYmFzZS5ob3N0O1xuICAgICAgICAgICAgICAgIHVybC5wYXRoID0gYXJyYXlTbGljZShiYXNlLnBhdGgpO1xuICAgICAgICAgICAgICAgIHVybC5xdWVyeSA9ICcnO1xuICAgICAgICAgICAgICAgIHN0YXRlID0gUVVFUlk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIGNhc2UgJyMnOlxuICAgICAgICAgICAgICAgIHVybC5ob3N0ID0gYmFzZS5ob3N0O1xuICAgICAgICAgICAgICAgIHVybC5wYXRoID0gYXJyYXlTbGljZShiYXNlLnBhdGgpO1xuICAgICAgICAgICAgICAgIHVybC5xdWVyeSA9IGJhc2UucXVlcnk7XG4gICAgICAgICAgICAgICAgdXJsLmZyYWdtZW50ID0gJyc7XG4gICAgICAgICAgICAgICAgc3RhdGUgPSBGUkFHTUVOVDtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICBpZiAoIXN0YXJ0c1dpdGhXaW5kb3dzRHJpdmVMZXR0ZXIoam9pbihhcnJheVNsaWNlKGNvZGVQb2ludHMsIHBvaW50ZXIpLCAnJykpKSB7XG4gICAgICAgICAgICAgICAgICB1cmwuaG9zdCA9IGJhc2UuaG9zdDtcbiAgICAgICAgICAgICAgICAgIHVybC5wYXRoID0gYXJyYXlTbGljZShiYXNlLnBhdGgpO1xuICAgICAgICAgICAgICAgICAgdXJsLnNob3J0ZW5QYXRoKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHN0YXRlID0gUEFUSDtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc3RhdGUgPSBQQVRIO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfSBicmVhaztcblxuICAgICAgICBjYXNlIEZJTEVfU0xBU0g6XG4gICAgICAgICAgaWYgKGNociA9PT0gJy8nIHx8IGNociA9PT0gJ1xcXFwnKSB7XG4gICAgICAgICAgICBzdGF0ZSA9IEZJTEVfSE9TVDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoYmFzZSAmJiBiYXNlLnNjaGVtZSA9PT0gJ2ZpbGUnICYmICFzdGFydHNXaXRoV2luZG93c0RyaXZlTGV0dGVyKGpvaW4oYXJyYXlTbGljZShjb2RlUG9pbnRzLCBwb2ludGVyKSwgJycpKSkge1xuICAgICAgICAgICAgaWYgKGlzV2luZG93c0RyaXZlTGV0dGVyKGJhc2UucGF0aFswXSwgdHJ1ZSkpIHB1c2godXJsLnBhdGgsIGJhc2UucGF0aFswXSk7XG4gICAgICAgICAgICBlbHNlIHVybC5ob3N0ID0gYmFzZS5ob3N0O1xuICAgICAgICAgIH1cbiAgICAgICAgICBzdGF0ZSA9IFBBVEg7XG4gICAgICAgICAgY29udGludWU7XG5cbiAgICAgICAgY2FzZSBGSUxFX0hPU1Q6XG4gICAgICAgICAgaWYgKGNociA9PT0gRU9GIHx8IGNociA9PT0gJy8nIHx8IGNociA9PT0gJ1xcXFwnIHx8IGNociA9PT0gJz8nIHx8IGNociA9PT0gJyMnKSB7XG4gICAgICAgICAgICBpZiAoIXN0YXRlT3ZlcnJpZGUgJiYgaXNXaW5kb3dzRHJpdmVMZXR0ZXIoYnVmZmVyKSkge1xuICAgICAgICAgICAgICBzdGF0ZSA9IFBBVEg7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGJ1ZmZlciA9PT0gJycpIHtcbiAgICAgICAgICAgICAgdXJsLmhvc3QgPSAnJztcbiAgICAgICAgICAgICAgaWYgKHN0YXRlT3ZlcnJpZGUpIHJldHVybjtcbiAgICAgICAgICAgICAgc3RhdGUgPSBQQVRIX1NUQVJUO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgZmFpbHVyZSA9IHVybC5wYXJzZUhvc3QoYnVmZmVyKTtcbiAgICAgICAgICAgICAgaWYgKGZhaWx1cmUpIHJldHVybiBmYWlsdXJlO1xuICAgICAgICAgICAgICBpZiAodXJsLmhvc3QgPT09ICdsb2NhbGhvc3QnKSB1cmwuaG9zdCA9ICcnO1xuICAgICAgICAgICAgICBpZiAoc3RhdGVPdmVycmlkZSkgcmV0dXJuO1xuICAgICAgICAgICAgICBidWZmZXIgPSAnJztcbiAgICAgICAgICAgICAgc3RhdGUgPSBQQVRIX1NUQVJUO1xuICAgICAgICAgICAgfSBjb250aW51ZTtcbiAgICAgICAgICB9IGVsc2UgYnVmZmVyICs9IGNocjtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIFBBVEhfU1RBUlQ6XG4gICAgICAgICAgaWYgKHVybC5pc1NwZWNpYWwoKSkge1xuICAgICAgICAgICAgc3RhdGUgPSBQQVRIO1xuICAgICAgICAgICAgaWYgKGNociAhPT0gJy8nICYmIGNociAhPT0gJ1xcXFwnKSBjb250aW51ZTtcbiAgICAgICAgICB9IGVsc2UgaWYgKCFzdGF0ZU92ZXJyaWRlICYmIGNociA9PT0gJz8nKSB7XG4gICAgICAgICAgICB1cmwucXVlcnkgPSAnJztcbiAgICAgICAgICAgIHN0YXRlID0gUVVFUlk7XG4gICAgICAgICAgfSBlbHNlIGlmICghc3RhdGVPdmVycmlkZSAmJiBjaHIgPT09ICcjJykge1xuICAgICAgICAgICAgdXJsLmZyYWdtZW50ID0gJyc7XG4gICAgICAgICAgICBzdGF0ZSA9IEZSQUdNRU5UO1xuICAgICAgICAgIH0gZWxzZSBpZiAoY2hyICE9PSBFT0YpIHtcbiAgICAgICAgICAgIHN0YXRlID0gUEFUSDtcbiAgICAgICAgICAgIGlmIChjaHIgIT09ICcvJykgY29udGludWU7XG4gICAgICAgICAgfSBicmVhaztcblxuICAgICAgICBjYXNlIFBBVEg6XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgY2hyID09PSBFT0YgfHwgY2hyID09PSAnLycgfHxcbiAgICAgICAgICAgIChjaHIgPT09ICdcXFxcJyAmJiB1cmwuaXNTcGVjaWFsKCkpIHx8XG4gICAgICAgICAgICAoIXN0YXRlT3ZlcnJpZGUgJiYgKGNociA9PT0gJz8nIHx8IGNociA9PT0gJyMnKSlcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIGlmIChpc0RvdWJsZURvdChidWZmZXIpKSB7XG4gICAgICAgICAgICAgIHVybC5zaG9ydGVuUGF0aCgpO1xuICAgICAgICAgICAgICBpZiAoY2hyICE9PSAnLycgJiYgIShjaHIgPT09ICdcXFxcJyAmJiB1cmwuaXNTcGVjaWFsKCkpKSB7XG4gICAgICAgICAgICAgICAgcHVzaCh1cmwucGF0aCwgJycpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGlzU2luZ2xlRG90KGJ1ZmZlcikpIHtcbiAgICAgICAgICAgICAgaWYgKGNociAhPT0gJy8nICYmICEoY2hyID09PSAnXFxcXCcgJiYgdXJsLmlzU3BlY2lhbCgpKSkge1xuICAgICAgICAgICAgICAgIHB1c2godXJsLnBhdGgsICcnKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgaWYgKHVybC5zY2hlbWUgPT09ICdmaWxlJyAmJiAhdXJsLnBhdGgubGVuZ3RoICYmIGlzV2luZG93c0RyaXZlTGV0dGVyKGJ1ZmZlcikpIHtcbiAgICAgICAgICAgICAgICBpZiAodXJsLmhvc3QpIHVybC5ob3N0ID0gJyc7XG4gICAgICAgICAgICAgICAgYnVmZmVyID0gY2hhckF0KGJ1ZmZlciwgMCkgKyAnOic7IC8vIG5vcm1hbGl6ZSB3aW5kb3dzIGRyaXZlIGxldHRlclxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHB1c2godXJsLnBhdGgsIGJ1ZmZlcik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBidWZmZXIgPSAnJztcbiAgICAgICAgICAgIGlmICh1cmwuc2NoZW1lID09PSAnZmlsZScgJiYgKGNociA9PT0gRU9GIHx8IGNociA9PT0gJz8nIHx8IGNociA9PT0gJyMnKSkge1xuICAgICAgICAgICAgICB3aGlsZSAodXJsLnBhdGgubGVuZ3RoID4gMSAmJiB1cmwucGF0aFswXSA9PT0gJycpIHtcbiAgICAgICAgICAgICAgICBzaGlmdCh1cmwucGF0aCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChjaHIgPT09ICc/Jykge1xuICAgICAgICAgICAgICB1cmwucXVlcnkgPSAnJztcbiAgICAgICAgICAgICAgc3RhdGUgPSBRVUVSWTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoY2hyID09PSAnIycpIHtcbiAgICAgICAgICAgICAgdXJsLmZyYWdtZW50ID0gJyc7XG4gICAgICAgICAgICAgIHN0YXRlID0gRlJBR01FTlQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGJ1ZmZlciArPSBwZXJjZW50RW5jb2RlKGNociwgcGF0aFBlcmNlbnRFbmNvZGVTZXQpO1xuICAgICAgICAgIH0gYnJlYWs7XG5cbiAgICAgICAgY2FzZSBDQU5OT1RfQkVfQV9CQVNFX1VSTF9QQVRIOlxuICAgICAgICAgIGlmIChjaHIgPT09ICc/Jykge1xuICAgICAgICAgICAgdXJsLnF1ZXJ5ID0gJyc7XG4gICAgICAgICAgICBzdGF0ZSA9IFFVRVJZO1xuICAgICAgICAgIH0gZWxzZSBpZiAoY2hyID09PSAnIycpIHtcbiAgICAgICAgICAgIHVybC5mcmFnbWVudCA9ICcnO1xuICAgICAgICAgICAgc3RhdGUgPSBGUkFHTUVOVDtcbiAgICAgICAgICB9IGVsc2UgaWYgKGNociAhPT0gRU9GKSB7XG4gICAgICAgICAgICB1cmwucGF0aFswXSArPSBwZXJjZW50RW5jb2RlKGNociwgQzBDb250cm9sUGVyY2VudEVuY29kZVNldCk7XG4gICAgICAgICAgfSBicmVhaztcblxuICAgICAgICBjYXNlIFFVRVJZOlxuICAgICAgICAgIGlmICghc3RhdGVPdmVycmlkZSAmJiBjaHIgPT09ICcjJykge1xuICAgICAgICAgICAgdXJsLmZyYWdtZW50ID0gJyc7XG4gICAgICAgICAgICBzdGF0ZSA9IEZSQUdNRU5UO1xuICAgICAgICAgIH0gZWxzZSBpZiAoY2hyICE9PSBFT0YpIHtcbiAgICAgICAgICAgIGlmIChjaHIgPT09IFwiJ1wiICYmIHVybC5pc1NwZWNpYWwoKSkgdXJsLnF1ZXJ5ICs9ICclMjcnO1xuICAgICAgICAgICAgZWxzZSBpZiAoY2hyID09PSAnIycpIHVybC5xdWVyeSArPSAnJTIzJztcbiAgICAgICAgICAgIGVsc2UgdXJsLnF1ZXJ5ICs9IHBlcmNlbnRFbmNvZGUoY2hyLCBDMENvbnRyb2xQZXJjZW50RW5jb2RlU2V0KTtcbiAgICAgICAgICB9IGJyZWFrO1xuXG4gICAgICAgIGNhc2UgRlJBR01FTlQ6XG4gICAgICAgICAgaWYgKGNociAhPT0gRU9GKSB1cmwuZnJhZ21lbnQgKz0gcGVyY2VudEVuY29kZShjaHIsIGZyYWdtZW50UGVyY2VudEVuY29kZVNldCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIHBvaW50ZXIrKztcbiAgICB9XG4gIH0sXG4gIC8vIGh0dHBzOi8vdXJsLnNwZWMud2hhdHdnLm9yZy8jaG9zdC1wYXJzaW5nXG4gIHBhcnNlSG9zdDogZnVuY3Rpb24gKGlucHV0KSB7XG4gICAgdmFyIHJlc3VsdCwgY29kZVBvaW50cywgaW5kZXg7XG4gICAgaWYgKGNoYXJBdChpbnB1dCwgMCkgPT09ICdbJykge1xuICAgICAgaWYgKGNoYXJBdChpbnB1dCwgaW5wdXQubGVuZ3RoIC0gMSkgIT09ICddJykgcmV0dXJuIElOVkFMSURfSE9TVDtcbiAgICAgIHJlc3VsdCA9IHBhcnNlSVB2NihzdHJpbmdTbGljZShpbnB1dCwgMSwgLTEpKTtcbiAgICAgIGlmICghcmVzdWx0KSByZXR1cm4gSU5WQUxJRF9IT1NUO1xuICAgICAgdGhpcy5ob3N0ID0gcmVzdWx0O1xuICAgIC8vIG9wYXF1ZSBob3N0XG4gICAgfSBlbHNlIGlmICghdGhpcy5pc1NwZWNpYWwoKSkge1xuICAgICAgaWYgKGV4ZWMoRk9SQklEREVOX0hPU1RfQ09ERV9QT0lOVF9FWENMVURJTkdfUEVSQ0VOVCwgaW5wdXQpKSByZXR1cm4gSU5WQUxJRF9IT1NUO1xuICAgICAgcmVzdWx0ID0gJyc7XG4gICAgICBjb2RlUG9pbnRzID0gYXJyYXlGcm9tKGlucHV0KTtcbiAgICAgIGZvciAoaW5kZXggPSAwOyBpbmRleCA8IGNvZGVQb2ludHMubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICAgIHJlc3VsdCArPSBwZXJjZW50RW5jb2RlKGNvZGVQb2ludHNbaW5kZXhdLCBDMENvbnRyb2xQZXJjZW50RW5jb2RlU2V0KTtcbiAgICAgIH1cbiAgICAgIHRoaXMuaG9zdCA9IHJlc3VsdDtcbiAgICB9IGVsc2Uge1xuICAgICAgaW5wdXQgPSB0b0FTQ0lJKGlucHV0KTtcbiAgICAgIGlmIChleGVjKEZPUkJJRERFTl9IT1NUX0NPREVfUE9JTlQsIGlucHV0KSkgcmV0dXJuIElOVkFMSURfSE9TVDtcbiAgICAgIHJlc3VsdCA9IHBhcnNlSVB2NChpbnB1dCk7XG4gICAgICBpZiAocmVzdWx0ID09PSBudWxsKSByZXR1cm4gSU5WQUxJRF9IT1NUO1xuICAgICAgdGhpcy5ob3N0ID0gcmVzdWx0O1xuICAgIH1cbiAgfSxcbiAgLy8gaHR0cHM6Ly91cmwuc3BlYy53aGF0d2cub3JnLyNjYW5ub3QtaGF2ZS1hLXVzZXJuYW1lLXBhc3N3b3JkLXBvcnRcbiAgY2Fubm90SGF2ZVVzZXJuYW1lUGFzc3dvcmRQb3J0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuICF0aGlzLmhvc3QgfHwgdGhpcy5jYW5ub3RCZUFCYXNlVVJMIHx8IHRoaXMuc2NoZW1lID09PSAnZmlsZSc7XG4gIH0sXG4gIC8vIGh0dHBzOi8vdXJsLnNwZWMud2hhdHdnLm9yZy8jaW5jbHVkZS1jcmVkZW50aWFsc1xuICBpbmNsdWRlc0NyZWRlbnRpYWxzOiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMudXNlcm5hbWUgIT09ICcnIHx8IHRoaXMucGFzc3dvcmQgIT09ICcnO1xuICB9LFxuICAvLyBodHRwczovL3VybC5zcGVjLndoYXR3Zy5vcmcvI2lzLXNwZWNpYWxcbiAgaXNTcGVjaWFsOiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGhhc093bihzcGVjaWFsU2NoZW1lcywgdGhpcy5zY2hlbWUpO1xuICB9LFxuICAvLyBodHRwczovL3VybC5zcGVjLndoYXR3Zy5vcmcvI3Nob3J0ZW4tYS11cmxzLXBhdGhcbiAgc2hvcnRlblBhdGg6IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgcGF0aCA9IHRoaXMucGF0aDtcbiAgICB2YXIgcGF0aFNpemUgPSBwYXRoLmxlbmd0aDtcbiAgICBpZiAocGF0aFNpemUgJiYgKHRoaXMuc2NoZW1lICE9PSAnZmlsZScgfHwgcGF0aFNpemUgIT09IDEgfHwgIWlzV2luZG93c0RyaXZlTGV0dGVyKHBhdGhbMF0sIHRydWUpKSkge1xuICAgICAgcGF0aC5sZW5ndGgtLTtcbiAgICB9XG4gIH0sXG4gIC8vIGh0dHBzOi8vdXJsLnNwZWMud2hhdHdnLm9yZy8jY29uY2VwdC11cmwtc2VyaWFsaXplclxuICBzZXJpYWxpemU6IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgdXJsID0gdGhpcztcbiAgICB2YXIgc2NoZW1lID0gdXJsLnNjaGVtZTtcbiAgICB2YXIgdXNlcm5hbWUgPSB1cmwudXNlcm5hbWU7XG4gICAgdmFyIHBhc3N3b3JkID0gdXJsLnBhc3N3b3JkO1xuICAgIHZhciBob3N0ID0gdXJsLmhvc3Q7XG4gICAgdmFyIHBvcnQgPSB1cmwucG9ydDtcbiAgICB2YXIgcGF0aCA9IHVybC5wYXRoO1xuICAgIHZhciBxdWVyeSA9IHVybC5xdWVyeTtcbiAgICB2YXIgZnJhZ21lbnQgPSB1cmwuZnJhZ21lbnQ7XG4gICAgdmFyIG91dHB1dCA9IHNjaGVtZSArICc6JztcbiAgICBpZiAoaG9zdCAhPT0gbnVsbCkge1xuICAgICAgb3V0cHV0ICs9ICcvLyc7XG4gICAgICBpZiAodXJsLmluY2x1ZGVzQ3JlZGVudGlhbHMoKSkge1xuICAgICAgICBvdXRwdXQgKz0gdXNlcm5hbWUgKyAocGFzc3dvcmQgPyAnOicgKyBwYXNzd29yZCA6ICcnKSArICdAJztcbiAgICAgIH1cbiAgICAgIG91dHB1dCArPSBzZXJpYWxpemVIb3N0KGhvc3QpO1xuICAgICAgaWYgKHBvcnQgIT09IG51bGwpIG91dHB1dCArPSAnOicgKyBwb3J0O1xuICAgIH0gZWxzZSBpZiAoc2NoZW1lID09PSAnZmlsZScpIG91dHB1dCArPSAnLy8nO1xuICAgIG91dHB1dCArPSB1cmwuY2Fubm90QmVBQmFzZVVSTCA/IHBhdGhbMF0gOiBwYXRoLmxlbmd0aCA/ICcvJyArIGpvaW4ocGF0aCwgJy8nKSA6ICcnO1xuICAgIGlmIChxdWVyeSAhPT0gbnVsbCkgb3V0cHV0ICs9ICc/JyArIHF1ZXJ5O1xuICAgIGlmIChmcmFnbWVudCAhPT0gbnVsbCkgb3V0cHV0ICs9ICcjJyArIGZyYWdtZW50O1xuICAgIHJldHVybiBvdXRwdXQ7XG4gIH0sXG4gIC8vIGh0dHBzOi8vdXJsLnNwZWMud2hhdHdnLm9yZy8jZG9tLXVybC1ocmVmXG4gIHNldEhyZWY6IGZ1bmN0aW9uIChocmVmKSB7XG4gICAgdmFyIGZhaWx1cmUgPSB0aGlzLnBhcnNlKGhyZWYpO1xuICAgIGlmIChmYWlsdXJlKSB0aHJvdyBuZXcgVHlwZUVycm9yKGZhaWx1cmUpO1xuICAgIHRoaXMuc2VhcmNoUGFyYW1zLnVwZGF0ZSgpO1xuICB9LFxuICAvLyBodHRwczovL3VybC5zcGVjLndoYXR3Zy5vcmcvI2RvbS11cmwtb3JpZ2luXG4gIGdldE9yaWdpbjogZnVuY3Rpb24gKCkge1xuICAgIHZhciBzY2hlbWUgPSB0aGlzLnNjaGVtZTtcbiAgICB2YXIgcG9ydCA9IHRoaXMucG9ydDtcbiAgICBpZiAoc2NoZW1lID09PSAnYmxvYicpIHRyeSB7XG4gICAgICByZXR1cm4gbmV3IFVSTENvbnN0cnVjdG9yKHNjaGVtZS5wYXRoWzBdKS5vcmlnaW47XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHJldHVybiAnbnVsbCc7XG4gICAgfVxuICAgIGlmIChzY2hlbWUgPT09ICdmaWxlJyB8fCAhdGhpcy5pc1NwZWNpYWwoKSkgcmV0dXJuICdudWxsJztcbiAgICByZXR1cm4gc2NoZW1lICsgJzovLycgKyBzZXJpYWxpemVIb3N0KHRoaXMuaG9zdCkgKyAocG9ydCAhPT0gbnVsbCA/ICc6JyArIHBvcnQgOiAnJyk7XG4gIH0sXG4gIC8vIGh0dHBzOi8vdXJsLnNwZWMud2hhdHdnLm9yZy8jZG9tLXVybC1wcm90b2NvbFxuICBnZXRQcm90b2NvbDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLnNjaGVtZSArICc6JztcbiAgfSxcbiAgc2V0UHJvdG9jb2w6IGZ1bmN0aW9uIChwcm90b2NvbCkge1xuICAgIHRoaXMucGFyc2UoJHRvU3RyaW5nKHByb3RvY29sKSArICc6JywgU0NIRU1FX1NUQVJUKTtcbiAgfSxcbiAgLy8gaHR0cHM6Ly91cmwuc3BlYy53aGF0d2cub3JnLyNkb20tdXJsLXVzZXJuYW1lXG4gIGdldFVzZXJuYW1lOiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMudXNlcm5hbWU7XG4gIH0sXG4gIHNldFVzZXJuYW1lOiBmdW5jdGlvbiAodXNlcm5hbWUpIHtcbiAgICB2YXIgY29kZVBvaW50cyA9IGFycmF5RnJvbSgkdG9TdHJpbmcodXNlcm5hbWUpKTtcbiAgICBpZiAodGhpcy5jYW5ub3RIYXZlVXNlcm5hbWVQYXNzd29yZFBvcnQoKSkgcmV0dXJuO1xuICAgIHRoaXMudXNlcm5hbWUgPSAnJztcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNvZGVQb2ludHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHRoaXMudXNlcm5hbWUgKz0gcGVyY2VudEVuY29kZShjb2RlUG9pbnRzW2ldLCB1c2VyaW5mb1BlcmNlbnRFbmNvZGVTZXQpO1xuICAgIH1cbiAgfSxcbiAgLy8gaHR0cHM6Ly91cmwuc3BlYy53aGF0d2cub3JnLyNkb20tdXJsLXBhc3N3b3JkXG4gIGdldFBhc3N3b3JkOiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMucGFzc3dvcmQ7XG4gIH0sXG4gIHNldFBhc3N3b3JkOiBmdW5jdGlvbiAocGFzc3dvcmQpIHtcbiAgICB2YXIgY29kZVBvaW50cyA9IGFycmF5RnJvbSgkdG9TdHJpbmcocGFzc3dvcmQpKTtcbiAgICBpZiAodGhpcy5jYW5ub3RIYXZlVXNlcm5hbWVQYXNzd29yZFBvcnQoKSkgcmV0dXJuO1xuICAgIHRoaXMucGFzc3dvcmQgPSAnJztcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNvZGVQb2ludHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHRoaXMucGFzc3dvcmQgKz0gcGVyY2VudEVuY29kZShjb2RlUG9pbnRzW2ldLCB1c2VyaW5mb1BlcmNlbnRFbmNvZGVTZXQpO1xuICAgIH1cbiAgfSxcbiAgLy8gaHR0cHM6Ly91cmwuc3BlYy53aGF0d2cub3JnLyNkb20tdXJsLWhvc3RcbiAgZ2V0SG9zdDogZnVuY3Rpb24gKCkge1xuICAgIHZhciBob3N0ID0gdGhpcy5ob3N0O1xuICAgIHZhciBwb3J0ID0gdGhpcy5wb3J0O1xuICAgIHJldHVybiBob3N0ID09PSBudWxsID8gJydcbiAgICAgIDogcG9ydCA9PT0gbnVsbCA/IHNlcmlhbGl6ZUhvc3QoaG9zdClcbiAgICAgIDogc2VyaWFsaXplSG9zdChob3N0KSArICc6JyArIHBvcnQ7XG4gIH0sXG4gIHNldEhvc3Q6IGZ1bmN0aW9uIChob3N0KSB7XG4gICAgaWYgKHRoaXMuY2Fubm90QmVBQmFzZVVSTCkgcmV0dXJuO1xuICAgIHRoaXMucGFyc2UoaG9zdCwgSE9TVCk7XG4gIH0sXG4gIC8vIGh0dHBzOi8vdXJsLnNwZWMud2hhdHdnLm9yZy8jZG9tLXVybC1ob3N0bmFtZVxuICBnZXRIb3N0bmFtZTogZnVuY3Rpb24gKCkge1xuICAgIHZhciBob3N0ID0gdGhpcy5ob3N0O1xuICAgIHJldHVybiBob3N0ID09PSBudWxsID8gJycgOiBzZXJpYWxpemVIb3N0KGhvc3QpO1xuICB9LFxuICBzZXRIb3N0bmFtZTogZnVuY3Rpb24gKGhvc3RuYW1lKSB7XG4gICAgaWYgKHRoaXMuY2Fubm90QmVBQmFzZVVSTCkgcmV0dXJuO1xuICAgIHRoaXMucGFyc2UoaG9zdG5hbWUsIEhPU1ROQU1FKTtcbiAgfSxcbiAgLy8gaHR0cHM6Ly91cmwuc3BlYy53aGF0d2cub3JnLyNkb20tdXJsLXBvcnRcbiAgZ2V0UG9ydDogZnVuY3Rpb24gKCkge1xuICAgIHZhciBwb3J0ID0gdGhpcy5wb3J0O1xuICAgIHJldHVybiBwb3J0ID09PSBudWxsID8gJycgOiAkdG9TdHJpbmcocG9ydCk7XG4gIH0sXG4gIHNldFBvcnQ6IGZ1bmN0aW9uIChwb3J0KSB7XG4gICAgaWYgKHRoaXMuY2Fubm90SGF2ZVVzZXJuYW1lUGFzc3dvcmRQb3J0KCkpIHJldHVybjtcbiAgICBwb3J0ID0gJHRvU3RyaW5nKHBvcnQpO1xuICAgIGlmIChwb3J0ID09PSAnJykgdGhpcy5wb3J0ID0gbnVsbDtcbiAgICBlbHNlIHRoaXMucGFyc2UocG9ydCwgUE9SVCk7XG4gIH0sXG4gIC8vIGh0dHBzOi8vdXJsLnNwZWMud2hhdHdnLm9yZy8jZG9tLXVybC1wYXRobmFtZVxuICBnZXRQYXRobmFtZTogZnVuY3Rpb24gKCkge1xuICAgIHZhciBwYXRoID0gdGhpcy5wYXRoO1xuICAgIHJldHVybiB0aGlzLmNhbm5vdEJlQUJhc2VVUkwgPyBwYXRoWzBdIDogcGF0aC5sZW5ndGggPyAnLycgKyBqb2luKHBhdGgsICcvJykgOiAnJztcbiAgfSxcbiAgc2V0UGF0aG5hbWU6IGZ1bmN0aW9uIChwYXRobmFtZSkge1xuICAgIGlmICh0aGlzLmNhbm5vdEJlQUJhc2VVUkwpIHJldHVybjtcbiAgICB0aGlzLnBhdGggPSBbXTtcbiAgICB0aGlzLnBhcnNlKHBhdGhuYW1lLCBQQVRIX1NUQVJUKTtcbiAgfSxcbiAgLy8gaHR0cHM6Ly91cmwuc3BlYy53aGF0d2cub3JnLyNkb20tdXJsLXNlYXJjaFxuICBnZXRTZWFyY2g6IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgcXVlcnkgPSB0aGlzLnF1ZXJ5O1xuICAgIHJldHVybiBxdWVyeSA/ICc/JyArIHF1ZXJ5IDogJyc7XG4gIH0sXG4gIHNldFNlYXJjaDogZnVuY3Rpb24gKHNlYXJjaCkge1xuICAgIHNlYXJjaCA9ICR0b1N0cmluZyhzZWFyY2gpO1xuICAgIGlmIChzZWFyY2ggPT09ICcnKSB7XG4gICAgICB0aGlzLnF1ZXJ5ID0gbnVsbDtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKGNoYXJBdChzZWFyY2gsIDApID09PSAnPycpIHNlYXJjaCA9IHN0cmluZ1NsaWNlKHNlYXJjaCwgMSk7XG4gICAgICB0aGlzLnF1ZXJ5ID0gJyc7XG4gICAgICB0aGlzLnBhcnNlKHNlYXJjaCwgUVVFUlkpO1xuICAgIH1cbiAgICB0aGlzLnNlYXJjaFBhcmFtcy51cGRhdGUoKTtcbiAgfSxcbiAgLy8gaHR0cHM6Ly91cmwuc3BlYy53aGF0d2cub3JnLyNkb20tdXJsLXNlYXJjaHBhcmFtc1xuICBnZXRTZWFyY2hQYXJhbXM6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5zZWFyY2hQYXJhbXMuZmFjYWRlO1xuICB9LFxuICAvLyBodHRwczovL3VybC5zcGVjLndoYXR3Zy5vcmcvI2RvbS11cmwtaGFzaFxuICBnZXRIYXNoOiBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGZyYWdtZW50ID0gdGhpcy5mcmFnbWVudDtcbiAgICByZXR1cm4gZnJhZ21lbnQgPyAnIycgKyBmcmFnbWVudCA6ICcnO1xuICB9LFxuICBzZXRIYXNoOiBmdW5jdGlvbiAoaGFzaCkge1xuICAgIGhhc2ggPSAkdG9TdHJpbmcoaGFzaCk7XG4gICAgaWYgKGhhc2ggPT09ICcnKSB7XG4gICAgICB0aGlzLmZyYWdtZW50ID0gbnVsbDtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKGNoYXJBdChoYXNoLCAwKSA9PT0gJyMnKSBoYXNoID0gc3RyaW5nU2xpY2UoaGFzaCwgMSk7XG4gICAgdGhpcy5mcmFnbWVudCA9ICcnO1xuICAgIHRoaXMucGFyc2UoaGFzaCwgRlJBR01FTlQpO1xuICB9LFxuICB1cGRhdGU6IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLnF1ZXJ5ID0gdGhpcy5zZWFyY2hQYXJhbXMuc2VyaWFsaXplKCkgfHwgbnVsbDtcbiAgfVxufTtcblxuLy8gYFVSTGAgY29uc3RydWN0b3Jcbi8vIGh0dHBzOi8vdXJsLnNwZWMud2hhdHdnLm9yZy8jdXJsLWNsYXNzXG52YXIgVVJMQ29uc3RydWN0b3IgPSBmdW5jdGlvbiBVUkwodXJsIC8qICwgYmFzZSAqLykge1xuICB2YXIgdGhhdCA9IGFuSW5zdGFuY2UodGhpcywgVVJMUHJvdG90eXBlKTtcbiAgdmFyIGJhc2UgPSB2YWxpZGF0ZUFyZ3VtZW50c0xlbmd0aChhcmd1bWVudHMubGVuZ3RoLCAxKSA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQ7XG4gIHZhciBzdGF0ZSA9IHNldEludGVybmFsU3RhdGUodGhhdCwgbmV3IFVSTFN0YXRlKHVybCwgZmFsc2UsIGJhc2UpKTtcbiAgaWYgKCFERVNDUklQVE9SUykge1xuICAgIHRoYXQuaHJlZiA9IHN0YXRlLnNlcmlhbGl6ZSgpO1xuICAgIHRoYXQub3JpZ2luID0gc3RhdGUuZ2V0T3JpZ2luKCk7XG4gICAgdGhhdC5wcm90b2NvbCA9IHN0YXRlLmdldFByb3RvY29sKCk7XG4gICAgdGhhdC51c2VybmFtZSA9IHN0YXRlLmdldFVzZXJuYW1lKCk7XG4gICAgdGhhdC5wYXNzd29yZCA9IHN0YXRlLmdldFBhc3N3b3JkKCk7XG4gICAgdGhhdC5ob3N0ID0gc3RhdGUuZ2V0SG9zdCgpO1xuICAgIHRoYXQuaG9zdG5hbWUgPSBzdGF0ZS5nZXRIb3N0bmFtZSgpO1xuICAgIHRoYXQucG9ydCA9IHN0YXRlLmdldFBvcnQoKTtcbiAgICB0aGF0LnBhdGhuYW1lID0gc3RhdGUuZ2V0UGF0aG5hbWUoKTtcbiAgICB0aGF0LnNlYXJjaCA9IHN0YXRlLmdldFNlYXJjaCgpO1xuICAgIHRoYXQuc2VhcmNoUGFyYW1zID0gc3RhdGUuZ2V0U2VhcmNoUGFyYW1zKCk7XG4gICAgdGhhdC5oYXNoID0gc3RhdGUuZ2V0SGFzaCgpO1xuICB9XG59O1xuXG52YXIgVVJMUHJvdG90eXBlID0gVVJMQ29uc3RydWN0b3IucHJvdG90eXBlO1xuXG52YXIgYWNjZXNzb3JEZXNjcmlwdG9yID0gZnVuY3Rpb24gKGdldHRlciwgc2V0dGVyKSB7XG4gIHJldHVybiB7XG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gZ2V0SW50ZXJuYWxVUkxTdGF0ZSh0aGlzKVtnZXR0ZXJdKCk7XG4gICAgfSxcbiAgICBzZXQ6IHNldHRlciAmJiBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgIHJldHVybiBnZXRJbnRlcm5hbFVSTFN0YXRlKHRoaXMpW3NldHRlcl0odmFsdWUpO1xuICAgIH0sXG4gICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgIGVudW1lcmFibGU6IHRydWVcbiAgfTtcbn07XG5cbmlmIChERVNDUklQVE9SUykge1xuICAvLyBgVVJMLnByb3RvdHlwZS5ocmVmYCBhY2Nlc3NvcnMgcGFpclxuICAvLyBodHRwczovL3VybC5zcGVjLndoYXR3Zy5vcmcvI2RvbS11cmwtaHJlZlxuICBkZWZpbmVCdWlsdEluQWNjZXNzb3IoVVJMUHJvdG90eXBlLCAnaHJlZicsIGFjY2Vzc29yRGVzY3JpcHRvcignc2VyaWFsaXplJywgJ3NldEhyZWYnKSk7XG4gIC8vIGBVUkwucHJvdG90eXBlLm9yaWdpbmAgZ2V0dGVyXG4gIC8vIGh0dHBzOi8vdXJsLnNwZWMud2hhdHdnLm9yZy8jZG9tLXVybC1vcmlnaW5cbiAgZGVmaW5lQnVpbHRJbkFjY2Vzc29yKFVSTFByb3RvdHlwZSwgJ29yaWdpbicsIGFjY2Vzc29yRGVzY3JpcHRvcignZ2V0T3JpZ2luJykpO1xuICAvLyBgVVJMLnByb3RvdHlwZS5wcm90b2NvbGAgYWNjZXNzb3JzIHBhaXJcbiAgLy8gaHR0cHM6Ly91cmwuc3BlYy53aGF0d2cub3JnLyNkb20tdXJsLXByb3RvY29sXG4gIGRlZmluZUJ1aWx0SW5BY2Nlc3NvcihVUkxQcm90b3R5cGUsICdwcm90b2NvbCcsIGFjY2Vzc29yRGVzY3JpcHRvcignZ2V0UHJvdG9jb2wnLCAnc2V0UHJvdG9jb2wnKSk7XG4gIC8vIGBVUkwucHJvdG90eXBlLnVzZXJuYW1lYCBhY2Nlc3NvcnMgcGFpclxuICAvLyBodHRwczovL3VybC5zcGVjLndoYXR3Zy5vcmcvI2RvbS11cmwtdXNlcm5hbWVcbiAgZGVmaW5lQnVpbHRJbkFjY2Vzc29yKFVSTFByb3RvdHlwZSwgJ3VzZXJuYW1lJywgYWNjZXNzb3JEZXNjcmlwdG9yKCdnZXRVc2VybmFtZScsICdzZXRVc2VybmFtZScpKTtcbiAgLy8gYFVSTC5wcm90b3R5cGUucGFzc3dvcmRgIGFjY2Vzc29ycyBwYWlyXG4gIC8vIGh0dHBzOi8vdXJsLnNwZWMud2hhdHdnLm9yZy8jZG9tLXVybC1wYXNzd29yZFxuICBkZWZpbmVCdWlsdEluQWNjZXNzb3IoVVJMUHJvdG90eXBlLCAncGFzc3dvcmQnLCBhY2Nlc3NvckRlc2NyaXB0b3IoJ2dldFBhc3N3b3JkJywgJ3NldFBhc3N3b3JkJykpO1xuICAvLyBgVVJMLnByb3RvdHlwZS5ob3N0YCBhY2Nlc3NvcnMgcGFpclxuICAvLyBodHRwczovL3VybC5zcGVjLndoYXR3Zy5vcmcvI2RvbS11cmwtaG9zdFxuICBkZWZpbmVCdWlsdEluQWNjZXNzb3IoVVJMUHJvdG90eXBlLCAnaG9zdCcsIGFjY2Vzc29yRGVzY3JpcHRvcignZ2V0SG9zdCcsICdzZXRIb3N0JykpO1xuICAvLyBgVVJMLnByb3RvdHlwZS5ob3N0bmFtZWAgYWNjZXNzb3JzIHBhaXJcbiAgLy8gaHR0cHM6Ly91cmwuc3BlYy53aGF0d2cub3JnLyNkb20tdXJsLWhvc3RuYW1lXG4gIGRlZmluZUJ1aWx0SW5BY2Nlc3NvcihVUkxQcm90b3R5cGUsICdob3N0bmFtZScsIGFjY2Vzc29yRGVzY3JpcHRvcignZ2V0SG9zdG5hbWUnLCAnc2V0SG9zdG5hbWUnKSk7XG4gIC8vIGBVUkwucHJvdG90eXBlLnBvcnRgIGFjY2Vzc29ycyBwYWlyXG4gIC8vIGh0dHBzOi8vdXJsLnNwZWMud2hhdHdnLm9yZy8jZG9tLXVybC1wb3J0XG4gIGRlZmluZUJ1aWx0SW5BY2Nlc3NvcihVUkxQcm90b3R5cGUsICdwb3J0JywgYWNjZXNzb3JEZXNjcmlwdG9yKCdnZXRQb3J0JywgJ3NldFBvcnQnKSk7XG4gIC8vIGBVUkwucHJvdG90eXBlLnBhdGhuYW1lYCBhY2Nlc3NvcnMgcGFpclxuICAvLyBodHRwczovL3VybC5zcGVjLndoYXR3Zy5vcmcvI2RvbS11cmwtcGF0aG5hbWVcbiAgZGVmaW5lQnVpbHRJbkFjY2Vzc29yKFVSTFByb3RvdHlwZSwgJ3BhdGhuYW1lJywgYWNjZXNzb3JEZXNjcmlwdG9yKCdnZXRQYXRobmFtZScsICdzZXRQYXRobmFtZScpKTtcbiAgLy8gYFVSTC5wcm90b3R5cGUuc2VhcmNoYCBhY2Nlc3NvcnMgcGFpclxuICAvLyBodHRwczovL3VybC5zcGVjLndoYXR3Zy5vcmcvI2RvbS11cmwtc2VhcmNoXG4gIGRlZmluZUJ1aWx0SW5BY2Nlc3NvcihVUkxQcm90b3R5cGUsICdzZWFyY2gnLCBhY2Nlc3NvckRlc2NyaXB0b3IoJ2dldFNlYXJjaCcsICdzZXRTZWFyY2gnKSk7XG4gIC8vIGBVUkwucHJvdG90eXBlLnNlYXJjaFBhcmFtc2AgZ2V0dGVyXG4gIC8vIGh0dHBzOi8vdXJsLnNwZWMud2hhdHdnLm9yZy8jZG9tLXVybC1zZWFyY2hwYXJhbXNcbiAgZGVmaW5lQnVpbHRJbkFjY2Vzc29yKFVSTFByb3RvdHlwZSwgJ3NlYXJjaFBhcmFtcycsIGFjY2Vzc29yRGVzY3JpcHRvcignZ2V0U2VhcmNoUGFyYW1zJykpO1xuICAvLyBgVVJMLnByb3RvdHlwZS5oYXNoYCBhY2Nlc3NvcnMgcGFpclxuICAvLyBodHRwczovL3VybC5zcGVjLndoYXR3Zy5vcmcvI2RvbS11cmwtaGFzaFxuICBkZWZpbmVCdWlsdEluQWNjZXNzb3IoVVJMUHJvdG90eXBlLCAnaGFzaCcsIGFjY2Vzc29yRGVzY3JpcHRvcignZ2V0SGFzaCcsICdzZXRIYXNoJykpO1xufVxuXG4vLyBgVVJMLnByb3RvdHlwZS50b0pTT05gIG1ldGhvZFxuLy8gaHR0cHM6Ly91cmwuc3BlYy53aGF0d2cub3JnLyNkb20tdXJsLXRvanNvblxuZGVmaW5lQnVpbHRJbihVUkxQcm90b3R5cGUsICd0b0pTT04nLCBmdW5jdGlvbiB0b0pTT04oKSB7XG4gIHJldHVybiBnZXRJbnRlcm5hbFVSTFN0YXRlKHRoaXMpLnNlcmlhbGl6ZSgpO1xufSwgeyBlbnVtZXJhYmxlOiB0cnVlIH0pO1xuXG4vLyBgVVJMLnByb3RvdHlwZS50b1N0cmluZ2AgbWV0aG9kXG4vLyBodHRwczovL3VybC5zcGVjLndoYXR3Zy5vcmcvI1VSTC1zdHJpbmdpZmljYXRpb24tYmVoYXZpb3JcbmRlZmluZUJ1aWx0SW4oVVJMUHJvdG90eXBlLCAndG9TdHJpbmcnLCBmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgcmV0dXJuIGdldEludGVybmFsVVJMU3RhdGUodGhpcykuc2VyaWFsaXplKCk7XG59LCB7IGVudW1lcmFibGU6IHRydWUgfSk7XG5cbmlmIChOYXRpdmVVUkwpIHtcbiAgdmFyIG5hdGl2ZUNyZWF0ZU9iamVjdFVSTCA9IE5hdGl2ZVVSTC5jcmVhdGVPYmplY3RVUkw7XG4gIHZhciBuYXRpdmVSZXZva2VPYmplY3RVUkwgPSBOYXRpdmVVUkwucmV2b2tlT2JqZWN0VVJMO1xuICAvLyBgVVJMLmNyZWF0ZU9iamVjdFVSTGAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9VUkwvY3JlYXRlT2JqZWN0VVJMXG4gIGlmIChuYXRpdmVDcmVhdGVPYmplY3RVUkwpIGRlZmluZUJ1aWx0SW4oVVJMQ29uc3RydWN0b3IsICdjcmVhdGVPYmplY3RVUkwnLCBiaW5kKG5hdGl2ZUNyZWF0ZU9iamVjdFVSTCwgTmF0aXZlVVJMKSk7XG4gIC8vIGBVUkwucmV2b2tlT2JqZWN0VVJMYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL1VSTC9yZXZva2VPYmplY3RVUkxcbiAgaWYgKG5hdGl2ZVJldm9rZU9iamVjdFVSTCkgZGVmaW5lQnVpbHRJbihVUkxDb25zdHJ1Y3RvciwgJ3Jldm9rZU9iamVjdFVSTCcsIGJpbmQobmF0aXZlUmV2b2tlT2JqZWN0VVJMLCBOYXRpdmVVUkwpKTtcbn1cblxuc2V0VG9TdHJpbmdUYWcoVVJMQ29uc3RydWN0b3IsICdVUkwnKTtcblxuJCh7IGdsb2JhbDogdHJ1ZSwgY29uc3RydWN0b3I6IHRydWUsIGZvcmNlZDogIVVTRV9OQVRJVkVfVVJMLCBzaGFtOiAhREVTQ1JJUFRPUlMgfSwge1xuICBVUkw6IFVSTENvbnN0cnVjdG9yXG59KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIFRPRE86IFJlbW92ZSB0aGlzIG1vZHVsZSBmcm9tIGBjb3JlLWpzQDRgIHNpbmNlIGl0J3MgcmVwbGFjZWQgdG8gbW9kdWxlIGJlbG93XG5yZXF1aXJlKCcuLi9tb2R1bGVzL3dlYi51cmwuY29uc3RydWN0b3InKTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGdldEJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluJyk7XG52YXIgdmFsaWRhdGVBcmd1bWVudHNMZW5ndGggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdmFsaWRhdGUtYXJndW1lbnRzLWxlbmd0aCcpO1xudmFyIHRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXN0cmluZycpO1xudmFyIFVTRV9OQVRJVkVfVVJMID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3VybC1jb25zdHJ1Y3Rvci1kZXRlY3Rpb24nKTtcblxudmFyIFVSTCA9IGdldEJ1aWx0SW4oJ1VSTCcpO1xuXG4vLyBgVVJMLnBhcnNlYCBtZXRob2Rcbi8vIGh0dHBzOi8vdXJsLnNwZWMud2hhdHdnLm9yZy8jZG9tLXVybC1jYW5wYXJzZVxuJCh7IHRhcmdldDogJ1VSTCcsIHN0YXQ6IHRydWUsIGZvcmNlZDogIVVTRV9OQVRJVkVfVVJMIH0sIHtcbiAgcGFyc2U6IGZ1bmN0aW9uIHBhcnNlKHVybCkge1xuICAgIHZhciBsZW5ndGggPSB2YWxpZGF0ZUFyZ3VtZW50c0xlbmd0aChhcmd1bWVudHMubGVuZ3RoLCAxKTtcbiAgICB2YXIgdXJsU3RyaW5nID0gdG9TdHJpbmcodXJsKTtcbiAgICB2YXIgYmFzZSA9IGxlbmd0aCA8IDIgfHwgYXJndW1lbnRzWzFdID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiB0b1N0cmluZyhhcmd1bWVudHNbMV0pO1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gbmV3IFVSTCh1cmxTdHJpbmcsIGJhc2UpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cbn0pO1xuIiwiLy8gZW1wdHlcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9lcy9hcnJheS9pcy1hcnJheScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi8uLi9lcy9hcnJheS92aXJ0dWFsL2Zvci1lYWNoJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uLy4uL2VzL2FycmF5L3ZpcnR1YWwva2V5cycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9lcy9kYXRlL25vdycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9lcy9pbnN0YW5jZS9maWx0ZXInKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9jbGFzc29mJyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciBpc1Byb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YnKTtcbnZhciBtZXRob2QgPSByZXF1aXJlKCcuLi9hcnJheS92aXJ0dWFsL2Zvci1lYWNoJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL3dlYi5kb20tY29sbGVjdGlvbnMuZm9yLWVhY2gnKTtcblxudmFyIEFycmF5UHJvdG90eXBlID0gQXJyYXkucHJvdG90eXBlO1xuXG52YXIgRE9NSXRlcmFibGVzID0ge1xuICBET01Ub2tlbkxpc3Q6IHRydWUsXG4gIE5vZGVMaXN0OiB0cnVlXG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgb3duID0gaXQuZm9yRWFjaDtcbiAgcmV0dXJuIGl0ID09PSBBcnJheVByb3RvdHlwZSB8fCAoaXNQcm90b3R5cGVPZihBcnJheVByb3RvdHlwZSwgaXQpICYmIG93biA9PT0gQXJyYXlQcm90b3R5cGUuZm9yRWFjaClcbiAgICB8fCBoYXNPd24oRE9NSXRlcmFibGVzLCBjbGFzc29mKGl0KSkgPyBtZXRob2QgOiBvd247XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL2VzL2luc3RhbmNlL2luY2x1ZGVzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy93ZWIuZG9tLWNvbGxlY3Rpb25zLml0ZXJhdG9yJyk7XG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9jbGFzc29mJyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciBpc1Byb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YnKTtcbnZhciBtZXRob2QgPSByZXF1aXJlKCcuLi9hcnJheS92aXJ0dWFsL2tleXMnKTtcblxudmFyIEFycmF5UHJvdG90eXBlID0gQXJyYXkucHJvdG90eXBlO1xuXG52YXIgRE9NSXRlcmFibGVzID0ge1xuICBET01Ub2tlbkxpc3Q6IHRydWUsXG4gIE5vZGVMaXN0OiB0cnVlXG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgb3duID0gaXQua2V5cztcbiAgcmV0dXJuIGl0ID09PSBBcnJheVByb3RvdHlwZSB8fCAoaXNQcm90b3R5cGVPZihBcnJheVByb3RvdHlwZSwgaXQpICYmIG93biA9PT0gQXJyYXlQcm90b3R5cGUua2V5cylcbiAgICB8fCBoYXNPd24oRE9NSXRlcmFibGVzLCBjbGFzc29mKGl0KSkgPyBtZXRob2QgOiBvd247XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL2VzL2luc3RhbmNlL3NvbWUnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vZXMvaW5zdGFuY2Uvc29ydCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9lcy9pbnN0YW5jZS90cmltJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL2VzL2pzb24vc3RyaW5naWZ5Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL2VzL29iamVjdC9hc3NpZ24nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vZXMvb2JqZWN0L2RlZmluZS1wcm9wZXJ0aWVzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL2VzL29iamVjdC9kZWZpbmUtcHJvcGVydHknKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vZXMvb2JqZWN0L2dldC1vd24tcHJvcGVydHktZGVzY3JpcHRvcicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9lcy9vYmplY3QvZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9ycycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9lcy9vYmplY3QvZ2V0LW93bi1wcm9wZXJ0eS1zeW1ib2xzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL2VzL29iamVjdC9rZXlzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL2VzL3Byb21pc2UnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvd2ViLmRvbS1jb2xsZWN0aW9ucy5pdGVyYXRvcicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uL21vZHVsZXMvd2ViLmltbWVkaWF0ZScpO1xudmFyIHBhdGggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcGF0aCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhdGguc2V0SW1tZWRpYXRlO1xuIiwiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vbW9kdWxlcy93ZWIudGltZXJzJyk7XG52YXIgcGF0aCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9wYXRoJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGF0aC5zZXRUaW1lb3V0O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL2VzL3NldCcpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy93ZWIuZG9tLWNvbGxlY3Rpb25zLml0ZXJhdG9yJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL2VzL3N5bWJvbCcpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy93ZWIuZG9tLWNvbGxlY3Rpb25zLml0ZXJhdG9yJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL2VzL3N5bWJvbC9pdGVyYXRvcicpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy93ZWIuZG9tLWNvbGxlY3Rpb25zLml0ZXJhdG9yJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL2VzL3N5bWJvbC90by1wcmltaXRpdmUnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vd2ViL3VybC1zZWFyY2gtcGFyYW1zJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL3dlYi5kb20tY29sbGVjdGlvbnMuaXRlcmF0b3InKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vd2ViL3VybCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uL21vZHVsZXMvd2ViLnVybC1zZWFyY2gtcGFyYW1zJyk7XG5yZXF1aXJlKCcuLi9tb2R1bGVzL3dlYi51cmwtc2VhcmNoLXBhcmFtcy5kZWxldGUnKTtcbnJlcXVpcmUoJy4uL21vZHVsZXMvd2ViLnVybC1zZWFyY2gtcGFyYW1zLmhhcycpO1xucmVxdWlyZSgnLi4vbW9kdWxlcy93ZWIudXJsLXNlYXJjaC1wYXJhbXMuc2l6ZScpO1xudmFyIHBhdGggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcGF0aCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhdGguVVJMU2VhcmNoUGFyYW1zO1xuIiwiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi91cmwtc2VhcmNoLXBhcmFtcycpO1xucmVxdWlyZSgnLi4vbW9kdWxlcy93ZWIudXJsJyk7XG5yZXF1aXJlKCcuLi9tb2R1bGVzL3dlYi51cmwuY2FuLXBhcnNlJyk7XG5yZXF1aXJlKCcuLi9tb2R1bGVzL3dlYi51cmwucGFyc2UnKTtcbnJlcXVpcmUoJy4uL21vZHVsZXMvd2ViLnVybC50by1qc29uJyk7XG52YXIgcGF0aCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9wYXRoJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGF0aC5VUkw7XG4iLCIvLyBUaGUgbW9kdWxlIGNhY2hlXG52YXIgX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fID0ge307XG5cbi8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG5mdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuXHR2YXIgY2FjaGVkTW9kdWxlID0gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXTtcblx0aWYgKGNhY2hlZE1vZHVsZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0cmV0dXJuIGNhY2hlZE1vZHVsZS5leHBvcnRzO1xuXHR9XG5cdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG5cdHZhciBtb2R1bGUgPSBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdID0ge1xuXHRcdC8vIG5vIG1vZHVsZS5pZCBuZWVkZWRcblx0XHQvLyBubyBtb2R1bGUubG9hZGVkIG5lZWRlZFxuXHRcdGV4cG9ydHM6IHt9XG5cdH07XG5cblx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG5cdF9fd2VicGFja19tb2R1bGVzX19bbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG5cdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG5cdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbn1cblxuIiwiLy8gZ2V0RGVmYXVsdEV4cG9ydCBmdW5jdGlvbiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG5vbi1oYXJtb255IG1vZHVsZXNcbl9fd2VicGFja19yZXF1aXJlX18ubiA9IChtb2R1bGUpID0+IHtcblx0dmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSA/XG5cdFx0KCkgPT4gKG1vZHVsZVsnZGVmYXVsdCddKSA6XG5cdFx0KCkgPT4gKG1vZHVsZSk7XG5cdF9fd2VicGFja19yZXF1aXJlX18uZChnZXR0ZXIsIHsgYTogZ2V0dGVyIH0pO1xuXHRyZXR1cm4gZ2V0dGVyO1xufTsiLCIvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9ucyBmb3IgaGFybW9ueSBleHBvcnRzXG5fX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSAoZXhwb3J0cywgZGVmaW5pdGlvbikgPT4ge1xuXHRmb3IodmFyIGtleSBpbiBkZWZpbml0aW9uKSB7XG5cdFx0aWYoX193ZWJwYWNrX3JlcXVpcmVfXy5vKGRlZmluaXRpb24sIGtleSkgJiYgIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBrZXkpKSB7XG5cdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywga2V5LCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZGVmaW5pdGlvbltrZXldIH0pO1xuXHRcdH1cblx0fVxufTsiLCJfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSAob2JqLCBwcm9wKSA9PiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwgcHJvcCkpIiwiLy8gZGVmaW5lIF9fZXNNb2R1bGUgb24gZXhwb3J0c1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yID0gKGV4cG9ydHMpID0+IHtcblx0aWYodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sLnRvU3RyaW5nVGFnKSB7XG5cdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFN5bWJvbC50b1N0cmluZ1RhZywgeyB2YWx1ZTogJ01vZHVsZScgfSk7XG5cdH1cblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbn07IiwiaW1wb3J0IHsgYXBwIGFzIEVsZWN0cm9uQXBwLCBCcm93c2VyV2luZG93LCBkaWFsb2csIHNjcmVlbiB9IGZyb20gXCJlbGVjdHJvblwiO1xuaW1wb3J0IHNlcnZlIGZyb20gXCJlbGVjdHJvbi1zZXJ2ZVwiO1xuaW1wb3J0IFN0b3JlIGZyb20gXCJlbGVjdHJvbi1zdG9yZVwiO1xuaW1wb3J0IERlYnVnIGZyb20gXCJkZWJ1Z1wiO1xuaW1wb3J0IHsgY3JlYXRlV2luZG93LCB4Ym94V29ya2VyIH0gZnJvbSBcIi4vaGVscGVyc1wiO1xuaW1wb3J0IEF1dGhlbnRpY2F0aW9uIGZyb20gXCIuL2F1dGhlbnRpY2F0aW9uXCI7XG5pbXBvcnQgSXBjIGZyb20gXCIuL2lwY1wiO1xuaW1wb3J0IHsgZGVmYXVsdFNldHRpbmdzIH0gZnJvbSAnLi4vcmVuZGVyZXIvY29udGV4dC91c2VyQ29udGV4dC5kZWZhdWx0cydcblxuaW1wb3J0IHhib3hXZWJBcGkgZnJvbSBcInhib3gtd2ViYXBpXCI7XG5pbXBvcnQgeENsb3VkQXBpIGZyb20gXCIuL2hlbHBlcnMveGNsb3VkYXBpXCI7XG5cbmltcG9ydCBwa2cgZnJvbSBcIi4uL3BhY2thZ2UuanNvblwiO1xuXG5pbnRlcmZhY2Ugc3RhcnR1cEZsYWdzIHtcbiAgZnVsbHNjcmVlbjogYm9vbGVhbjtcbiAgYXV0b1N0cmVhbTogc3RyaW5nO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBBcHBsaWNhdGlvbiB7XG4gIHByaXZhdGUgX2xvZztcbiAgcHVibGljIF9zdG9yZSA9IG5ldyBTdG9yZSgpO1xuICBwcml2YXRlIF9zdGFydHVwRmxhZ3M6IHN0YXJ0dXBGbGFncyA9IHtcbiAgICBmdWxsc2NyZWVuOiBmYWxzZSxcbiAgICBhdXRvU3RyZWFtOiBcIlwiLFxuICB9O1xuXG4gIHB1YmxpYyBfaXNQcm9kdWN0aW9uOiBib29sZWFuID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiO1xuICBwcml2YXRlIF9pc0NpOiBib29sZWFuID0gcHJvY2Vzcy5lbnYuQ0kgIT09IHVuZGVmaW5lZDtcbiAgcHJpdmF0ZSBfaXNNYWM6IGJvb2xlYW4gPSBwcm9jZXNzLnBsYXRmb3JtID09PSBcImRhcndpblwiO1xuICBwcml2YXRlIF9pc1dpbmRvd3M6IGJvb2xlYW4gPSBwcm9jZXNzLnBsYXRmb3JtID09PSBcIndpbjMyXCI7XG4gIHByaXZhdGUgX2lzUXVpdHRpbmc6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBwdWJsaWMgX21haW5XaW5kb3c7XG4gIHB1YmxpYyBfaXBjOiBJcGM7XG4gIHB1YmxpYyBfYXV0aGVudGljYXRpb246IEF1dGhlbnRpY2F0aW9uO1xuXG4gIHB1YmxpYyBzdHJlYW1pbmdUb2tlbnM6IGFueVxuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGNvbnNvbGUubG9nKFxuICAgICAgX19maWxlbmFtZSArIFwiW2NvbnN0cnVjdG9yKCldIFN0YXJ0aW5nIFhTdHJlYW1pbmcgdlwiICsgcGtnLnZlcnNpb25cbiAgICApO1xuICAgIHRoaXMuX2xvZyA9IERlYnVnKFwieHN0cmVhbWluZ1wiKTtcblxuICAgIEVsZWN0cm9uQXBwLmNvbW1hbmRMaW5lLmFwcGVuZFN3aXRjaChcbiAgICAgIFwiZW5hYmxlLWZlYXR1cmVzXCIsXG4gICAgICBcIlZhYXBpSWdub3JlRHJpdmVyQ2hlY2tzLFZhYXBpVmlkZW9EZWNvZGVyLFBsYXRmb3JtSEVWQ0RlY29kZXJTdXBwb3J0LENhbnZhc09vcFJhc3Rlcml6YXRpb25cIlxuICAgICk7XG4gICAgLy8gRWxlY3Ryb25BcHAuY29tbWFuZExpbmUuYXBwZW5kU3dpdGNoKCdkaXNhYmxlLWZlYXR1cmVzJywgJ1VzZUNocm9tZU9TRGlyZWN0VmlkZW9EZWNvZGVyJyk7XG4gICAgRWxlY3Ryb25BcHAuY29tbWFuZExpbmUuYXBwZW5kU3dpdGNoKFwiZW5hYmxlLWdwdS1yYXN0ZXJpemF0aW9uXCIpO1xuICAgIEVsZWN0cm9uQXBwLmNvbW1hbmRMaW5lLmFwcGVuZFN3aXRjaChcImVuYWJsZS1vb3AtcmFzdGVyaXphdGlvblwiKTtcbiAgICBFbGVjdHJvbkFwcC5jb21tYW5kTGluZS5hcHBlbmRTd2l0Y2goXCJhY2NlbGVyYXRlZC12aWRlby1kZWNvZGVcIik7XG4gICAgRWxlY3Ryb25BcHAuY29tbWFuZExpbmUuYXBwZW5kU3dpdGNoKFwib3pvbmUtcGxhdGZvcm0taGludFwiLCBcIngxMVwiKTtcbiAgICBFbGVjdHJvbkFwcC5jb21tYW5kTGluZS5hcHBlbmRTd2l0Y2goXCJpZ25vcmUtZ3B1LWJsb2NrbGlzdFwiKTtcbiAgICAvLyBFbGVjdHJvbkFwcC5jb21tYW5kTGluZS5hcHBlbmRTd2l0Y2goJ2VuYWJsZS16ZXJvLWNvcHknKTtcblxuICAgIHRoaXMucmVhZFN0YXJ0dXBGbGFncygpO1xuICAgIHRoaXMubG9hZEFwcGxpY2F0aW9uRGVmYXVsdHMoKTtcblxuICAgIC8vIEVsZWN0cm9uQXBwLnJlbW92ZUFzRGVmYXVsdFByb3RvY29sQ2xpZW50KCdtcy14YWwtcHVibGljLWJldGEtMDAwMDAwMDA0YzIwYTkwOCcpXG5cbiAgICB0aGlzLl9pcGMgPSBuZXcgSXBjKHRoaXMpO1xuICAgIHRoaXMuX2F1dGhlbnRpY2F0aW9uID0gbmV3IEF1dGhlbnRpY2F0aW9uKHRoaXMpO1xuXG4gICAgdGhpcy5faXBjLnN0YXJ0VXAoKTtcbiAgfVxuXG4gIGxvZyhuYW1lc3BhY2UgPSBcImFwcGxpY2F0aW9uXCIsIC4uLmFyZ3MpIHtcbiAgICB0aGlzLl9sb2cuZXh0ZW5kKG5hbWVzcGFjZSkoLi4uYXJncyk7XG4gIH1cblxuICBnZXRTdGFydHVwRmxhZ3MoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3N0YXJ0dXBGbGFncztcbiAgfVxuXG4gIHJlc2V0QXV0b3N0cmVhbSgpIHtcbiAgICB0aGlzLl9zdGFydHVwRmxhZ3MuYXV0b1N0cmVhbSA9IFwiXCI7XG4gIH1cblxuICByZWFkU3RhcnR1cEZsYWdzKCkge1xuICAgIHRoaXMubG9nKFxuICAgICAgXCJhcHBsaWNhdGlvblwiLFxuICAgICAgX19maWxlbmFtZSArIFwiW3JlYWRTdGFydHVwRmxhZ3MoKV0gUHJvZ3JhbSBhcmdzIGRldGVjdGVkOlwiLFxuICAgICAgcHJvY2Vzcy5hcmd2XG4gICAgKTtcblxuICAgIGZvciAoY29uc3QgYXJnIGluIHByb2Nlc3MuYXJndikge1xuICAgICAgaWYgKHByb2Nlc3MuYXJndlthcmddLmluY2x1ZGVzKFwiLS1mdWxsc2NyZWVuXCIpKSB7XG4gICAgICAgIHRoaXMubG9nKFxuICAgICAgICAgIFwiYXBwbGljYXRpb25cIixcbiAgICAgICAgICBfX2ZpbGVuYW1lICtcbiAgICAgICAgICAgIFwiW3JlYWRTdGFydHVwRmxhZ3MoKV0gLS1mdWxsc2NyZWVuIHN3aXRjaCBmb3VuZC4gU2V0dGluZyBmdWxsc2NyZWVuIHRvIHRydWVcIlxuICAgICAgICApO1xuICAgICAgICB0aGlzLl9zdGFydHVwRmxhZ3MuZnVsbHNjcmVlbiA9IHRydWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChwcm9jZXNzLmFyZ3ZbYXJnXS5pbmNsdWRlcyhcIi0tY29ubmVjdD1cIikpIHtcbiAgICAgICAgY29uc3Qga2V5ID0gcHJvY2Vzcy5hcmd2W2FyZ10uc3Vic3RyaW5nKDEwKTtcblxuICAgICAgICB0aGlzLmxvZyhcbiAgICAgICAgICBcImFwcGxpY2F0aW9uXCIsXG4gICAgICAgICAgX19maWxlbmFtZSArXG4gICAgICAgICAgICBcIltyZWFkU3RhcnR1cEZsYWdzKCldIC0tY29ubmVjdCBzd2l0Y2ggZm91bmQuIFNldHRpbmcgYXV0b1N0cmVhbSB0b1wiLFxuICAgICAgICAgIGtleVxuICAgICAgICApO1xuICAgICAgICB0aGlzLl9zdGFydHVwRmxhZ3MuYXV0b1N0cmVhbSA9IGtleTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmxvZyhcbiAgICAgIFwiYXBwbGljYXRpb25cIixcbiAgICAgIF9fZmlsZW5hbWUgKyBcIltyZWFkU3RhcnR1cEZsYWdzKCldIEVuZCByZXN1bHQgb2Ygc3RhcnR1cEZsYWdzOlwiLFxuICAgICAgdGhpcy5fc3RhcnR1cEZsYWdzXG4gICAgKTtcbiAgfVxuXG4gIGxvYWRBcHBsaWNhdGlvbkRlZmF1bHRzKCkge1xuICAgIGlmICh0aGlzLl9pc1Byb2R1Y3Rpb24gPT09IHRydWUgJiYgdGhpcy5faXNDaSA9PT0gZmFsc2UpIHtcbiAgICAgIHNlcnZlKHsgZGlyZWN0b3J5OiBcImFwcFwiIH0pO1xuICAgIH0gZWxzZSBpZiAodGhpcy5faXNDaSA9PT0gdHJ1ZSkge1xuICAgICAgY29uc3QgcmFuZG9tID0gTWF0aC5yYW5kb20oKSAqIDEwMDtcbiAgICAgIEVsZWN0cm9uQXBwLnNldFBhdGgoXG4gICAgICAgIFwidXNlckRhdGFcIixcbiAgICAgICAgYCR7RWxlY3Ryb25BcHAuZ2V0UGF0aChcInVzZXJEYXRhXCIpfSAoJHtyYW5kb219KWBcbiAgICAgICk7XG4gICAgICBFbGVjdHJvbkFwcC5zZXRQYXRoKFxuICAgICAgICBcInNlc3Npb25EYXRhXCIsXG4gICAgICAgIGAke0VsZWN0cm9uQXBwLmdldFBhdGgoXCJ1c2VyRGF0YVwiKX0gKCR7cmFuZG9tfSlgXG4gICAgICApO1xuICAgICAgdGhpcy5fc3RvcmUuZGVsZXRlKFwidXNlclwiKTtcbiAgICAgIHRoaXMuX3N0b3JlLmRlbGV0ZShcImF1dGhcIik7XG5cbiAgICAgIHNlcnZlKHsgZGlyZWN0b3J5OiBcImFwcFwiIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBFbGVjdHJvbkFwcC5zZXRQYXRoKFxuICAgICAgICBcInVzZXJEYXRhXCIsXG4gICAgICAgIGAke0VsZWN0cm9uQXBwLmdldFBhdGgoXCJ1c2VyRGF0YVwiKX0gKGRldmVsb3BtZW50KWBcbiAgICAgICk7XG4gICAgfVxuXG4gICAgRWxlY3Ryb25BcHAud2hlblJlYWR5KClcbiAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgLy8gdXBkYXRlcih7XG4gICAgICAgIC8vICAgICAvLyBkZWJ1ZzogdHJ1ZSxcbiAgICAgICAgLy8gICAgIHNpbGVudDogdHJ1ZSxcbiAgICAgICAgLy8gICAgIHByZXJlbGVhc2VzOiAoRWxlY3Ryb25BcHAuZ2V0VmVyc2lvbigpLmluY2x1ZGVzKCdiZXRhJykpID8gdHJ1ZSA6IGZhbHNlLFxuICAgICAgICAvLyB9LCB0aGlzKVxuXG4gICAgICAgIHRoaXMubG9nKFxuICAgICAgICAgIFwiZWxlY3Ryb25cIixcbiAgICAgICAgICBfX2ZpbGVuYW1lICtcbiAgICAgICAgICAgIFwiW2xvYWRBcHBsaWNhdGlvbkRlZmF1bHRzKCldIEVsZWN0cm9uIGhhcyBiZWVuIGZ1bGx5IGxvYWRlZC4gUmVhZHkgdG8gb3BlbiB3aW5kb3dzXCJcbiAgICAgICAgKTtcblxuICAgICAgICB0aGlzLm9wZW5NYWluV2luZG93KCk7XG4gICAgICAgIHRoaXMuX2F1dGhlbnRpY2F0aW9uLnN0YXJ0V2Vidmlld0hvb2tzKCk7XG5cbiAgICAgICAgLy8gQ2hlY2sgYXV0aGVudGljYXRpb25cbiAgICAgICAgLy8gaWYgKCF0aGlzLl9hdXRoZW50aWNhdGlvbi5jaGVja0F1dGhlbnRpY2F0aW9uKCkpIHtcbiAgICAgICAgLy8gICB0aGlzLl9hdXRoZW50aWNhdGlvbi5zdGFydEF1dGhmbG93KCk7XG4gICAgICAgIC8vIH1cbiAgICAgIH0pXG4gICAgICAuY2F0Y2goKGVycm9yKSA9PiB7XG4gICAgICAgIHRoaXMubG9nKFxuICAgICAgICAgIFwiZWxlY3Ryb25cIixcbiAgICAgICAgICBfX2ZpbGVuYW1lICtcbiAgICAgICAgICAgIFwiW2xvYWRBcHBsaWNhdGlvbkRlZmF1bHRzKCldIEVsZWN0cm9uIGhhcyBmYWlsZWQgdG8gbG9hZDpcIixcbiAgICAgICAgICBlcnJvclxuICAgICAgICApO1xuICAgICAgfSk7XG5cbiAgICBFbGVjdHJvbkFwcC5vbihcIndpbmRvdy1hbGwtY2xvc2VkXCIsICgpID0+IHtcbiAgICAgIGlmICh0aGlzLl9pc01hYyA9PT0gdHJ1ZSkge1xuICAgICAgICB0aGlzLmxvZyhcbiAgICAgICAgICBcImVsZWN0cm9uXCIsXG4gICAgICAgICAgX19maWxlbmFtZSArXG4gICAgICAgICAgICBcIltsb2FkQXBwbGljYXRpb25EZWZhdWx0cygpXSBFbGVjdHJvbiBkZXRlY3RlZCB0aGF0IGFsbCB3aW5kb3dzIGFyZSBjbG9zZWQuIFJ1bm5pbmcgaW4gYmFja2dyb3VuZC4uLlwiXG4gICAgICAgICk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmxvZyhcbiAgICAgICAgICBcImVsZWN0cm9uXCIsXG4gICAgICAgICAgX19maWxlbmFtZSArXG4gICAgICAgICAgICBcIltsb2FkQXBwbGljYXRpb25EZWZhdWx0cygpXSBFbGVjdHJvbiBkZXRlY3RlZCB0aGF0IGFsbCB3aW5kb3dzIGFyZSBjbG9zZWQuIFF1aXR0aW5nIGFwcC4uLlwiXG4gICAgICAgICk7XG4gICAgICAgIEVsZWN0cm9uQXBwLnF1aXQoKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIEVsZWN0cm9uQXBwLm9uKFwiYWN0aXZhdGVcIiwgKCkgPT4ge1xuICAgICAgdGhpcy5fbWFpbldpbmRvdyAhPT0gdW5kZWZpbmVkXG4gICAgICAgID8gdGhpcy5fbWFpbldpbmRvdy5zaG93KClcbiAgICAgICAgOiB0aGlzLm9wZW5NYWluV2luZG93KCk7XG4gICAgfSk7XG4gICAgRWxlY3Ryb25BcHAub24oXCJiZWZvcmUtcXVpdFwiLCAoKSA9PiAodGhpcy5faXNRdWl0dGluZyA9IHRydWUpKTtcbiAgfVxuXG4gIF93ZWJBcGk6IHhib3hXZWJBcGk7XG4gIF94SG9tZUFwaTogeENsb3VkQXBpO1xuICBfeENsb3VkQXBpOiB4Q2xvdWRBcGk7XG4gIF94Ym94V29ya2VyOiB4Ym94V29ya2VyO1xuXG4gIGF1dGhlbnRpY2F0aW9uQ29tcGxldGVkKHN0cmVhbWluZ1Rva2Vucywgd2ViVG9rZW4pIHtcbiAgICB0aGlzLmxvZyhcbiAgICAgIFwiZWxlY3Ryb25cIixcbiAgICAgIF9fZmlsZW5hbWUgKyBcIlthdXRoZW50aWNhdGlvbkNvbXBsZXRlZCgpXSBhdXRoZW50aWNhdGlvbkNvbXBsZXRlZCBjYWxsZWRcIlxuICAgICk7XG4gICAgdGhpcy5sb2coXG4gICAgICBcImVsZWN0cm9uXCIsXG4gICAgICBfX2ZpbGVuYW1lICsgXCJbYXV0aGVudGljYXRpb25Db21wbGV0ZWQoKV0gc3RyZWFtaW5nVG9rZW5zOlwiLFxuICAgICAgc3RyZWFtaW5nVG9rZW5zXG4gICAgKTtcblxuICAgIHRoaXMuc3RyZWFtaW5nVG9rZW5zID0gc3RyZWFtaW5nVG9rZW5zXG5cbiAgICB0aGlzLl93ZWJBcGkgPSBuZXcgeGJveFdlYkFwaSh7XG4gICAgICB1c2VyVG9rZW46IHdlYlRva2VuLmRhdGEuVG9rZW4sXG4gICAgICB1aHM6IHdlYlRva2VuLmRhdGEuRGlzcGxheUNsYWltcy54dWlbMF0udWhzLFxuICAgIH0pO1xuXG4gICAgdGhpcy5fYXV0aGVudGljYXRpb24uX2lzQXV0aGVudGljYXRpbmcgPSBmYWxzZTtcbiAgICB0aGlzLl9hdXRoZW50aWNhdGlvbi5faXNBdXRoZW50aWNhdGVkID0gdHJ1ZTtcblxuICAgIHRoaXMuX3dlYkFwaVxuICAgICAgLmdldFByb3ZpZGVyKFwicHJvZmlsZVwiKVxuICAgICAgLmdldChcbiAgICAgICAgXCIvdXNlcnMvbWUvcHJvZmlsZS9zZXR0aW5ncz9zZXR0aW5ncz1HYW1lRGlzcGxheU5hbWUsR2FtZURpc3BsYXlQaWNSYXcsR2FtZXJzY29yZSxHYW1lcnRhZ1wiXG4gICAgICApXG4gICAgICAudGhlbigocmVzdWx0KSA9PiB7XG4gICAgICAgIGlmIChyZXN1bHQucHJvZmlsZVVzZXJzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBmb3IgKGNvbnN0IHNldHRpbmcgaW4gcmVzdWx0LnByb2ZpbGVVc2Vyc1swXS5zZXR0aW5ncykge1xuICAgICAgICAgICAgaWYgKHJlc3VsdC5wcm9maWxlVXNlcnNbMF0uc2V0dGluZ3Nbc2V0dGluZ10uaWQgPT09IFwiR2FtZXJ0YWdcIikge1xuICAgICAgICAgICAgICB0aGlzLl9zdG9yZS5zZXQoXG4gICAgICAgICAgICAgICAgXCJ1c2VyLmdhbWVydGFnXCIsXG4gICAgICAgICAgICAgICAgcmVzdWx0LnByb2ZpbGVVc2Vyc1swXS5zZXR0aW5nc1tzZXR0aW5nXS52YWx1ZVxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgICAgcmVzdWx0LnByb2ZpbGVVc2Vyc1swXS5zZXR0aW5nc1tzZXR0aW5nXS5pZCA9PT1cbiAgICAgICAgICAgICAgXCJHYW1lRGlzcGxheVBpY1Jhd1wiXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgdGhpcy5fc3RvcmUuc2V0KFxuICAgICAgICAgICAgICAgIFwidXNlci5nYW1lcnBpY1wiLFxuICAgICAgICAgICAgICAgIHJlc3VsdC5wcm9maWxlVXNlcnNbMF0uc2V0dGluZ3Nbc2V0dGluZ10udmFsdWVcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICAgIHJlc3VsdC5wcm9maWxlVXNlcnNbMF0uc2V0dGluZ3Nbc2V0dGluZ10uaWQgPT09IFwiR2FtZXJzY29yZVwiXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgdGhpcy5fc3RvcmUuc2V0KFxuICAgICAgICAgICAgICAgIFwidXNlci5nYW1lcnNjb3JlXCIsXG4gICAgICAgICAgICAgICAgcmVzdWx0LnByb2ZpbGVVc2Vyc1swXS5zZXR0aW5nc1tzZXR0aW5nXS52YWx1ZVxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFJ1biB3b3JrZXJzXG4gICAgICAgIHRoaXMuX3hib3hXb3JrZXIgPSBuZXcgeGJveFdvcmtlcih0aGlzKTtcbiAgICAgICAgdGhpcy5faXBjLm9uVXNlckxvYWRlZCgpO1xuICAgICAgfSlcbiAgICAgIC5jYXRjaCgoZXJyb3IpID0+IHtcbiAgICAgICAgdGhpcy5sb2coXG4gICAgICAgICAgXCJlbGVjdHJvblwiLFxuICAgICAgICAgIF9fZmlsZW5hbWUgK1xuICAgICAgICAgICAgXCJbYXV0aGVudGljYXRpb25Db21wbGV0ZWQoKV0gRmFpbGVkIHRvIHJldHJpZXZlIHVzZXIgcHJvZmlsZTpcIixcbiAgICAgICAgICBlcnJvclxuICAgICAgICApO1xuICAgICAgICBkaWFsb2cuc2hvd01lc3NhZ2VCb3goe1xuICAgICAgICAgIG1lc3NhZ2U6XG4gICAgICAgICAgICBcIkVycm9yOiBGYWlsZWQgdG8gcmV0cmlldmUgdXNlciBwcm9maWxlOlwiICsgSlNPTi5zdHJpbmdpZnkoZXJyb3IpLFxuICAgICAgICAgIHR5cGU6IFwiZXJyb3JcIixcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgfVxuXG4gIG9wZW5NYWluV2luZG93KCkge1xuICAgIHRoaXMubG9nKFxuICAgICAgXCJlbGVjdHJvblwiLFxuICAgICAgX19maWxlbmFtZSArIFwiW29wZW5NYWluV2luZG93KCldIENyZWF0aW5nIG5ldyBtYWluIHdpbmRvd1wiXG4gICAgKTtcblxuICAgIGNvbnN0IHdpbmRvd09wdGlvbnM6IGFueSA9IHtcbiAgICAgIHRpdGxlOiBcIlhTdHJlYW1pbmdcIixcbiAgICAgIGJhY2tncm91bmRDb2xvcjogXCJyZ2IoMjYsIDI3LCAzMClcIixcbiAgICB9O1xuICAgIGNvbnN0IHNjcmVlbldpZHRoID0gc2NyZWVuLmdldFByaW1hcnlEaXNwbGF5KCkud29ya0FyZWFTaXplLndpZHRoO1xuICAgIGNvbnN0IHNjcmVlbkhpZ2h0ID0gc2NyZWVuLmdldFByaW1hcnlEaXNwbGF5KCkud29ya0FyZWFTaXplLmhlaWdodDtcblxuICAgIHRoaXMuX21haW5XaW5kb3cgPSBjcmVhdGVXaW5kb3coXCJtYWluXCIsIHtcbiAgICAgIHdpZHRoOiBzY3JlZW5XaWR0aCxcbiAgICAgIGhlaWdodDogc2NyZWVuSGlnaHQsXG4gICAgICAuLi53aW5kb3dPcHRpb25zLFxuICAgIH0pO1xuXG4gICAgdGhpcy5fbWFpbldpbmRvdy5vbihcInNob3dcIiwgKCkgPT4ge1xuICAgICAgdGhpcy5sb2coXG4gICAgICAgIFwiZWxlY3Ryb25cIixcbiAgICAgICAgX19maWxlbmFtZSArIFwiW29wZW5NYWluV2luZG93KCldIFNob3dpbmcgTWFpbiB3aW5kb3cuXCJcbiAgICAgICk7XG4gICAgfSk7XG5cbiAgICB0aGlzLl9tYWluV2luZG93Lm9uKFwiY2xvc2VcIiwgKGV2ZW50KSA9PiB7XG4gICAgICBpZiAodGhpcy5faXNNYWMgPT09IHRydWUgJiYgdGhpcy5faXNRdWl0dGluZyA9PT0gZmFsc2UpIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgdGhpcy5sb2coXG4gICAgICAgICAgXCJlbGVjdHJvblwiLFxuICAgICAgICAgIF9fZmlsZW5hbWUgKyBcIltvcGVuTWFpbldpbmRvdygpXSBNYWluIHdpbmRvd3MgaGFzIGJlZW4gaGlkZGVuXCJcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5fbWFpbldpbmRvdy5oaWRlKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmxvZyhcbiAgICAgICAgICBcImVsZWN0cm9uXCIsXG4gICAgICAgICAgX19maWxlbmFtZSArIFwiW29wZW5NYWluV2luZG93KCldIE1haW4gd2luZG93cyBoYXMgYmVlbiBjbG9zZWRcIlxuICAgICAgICApO1xuICAgICAgICB0aGlzLl9tYWluV2luZG93ID0gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgY29uc3Qgc2V0dGluZ3M6IGFueSA9IHRoaXMuX3N0b3JlLmdldCgnc2V0dGluZ3MnLCBkZWZhdWx0U2V0dGluZ3MpXG4gICAgY29uc29sZS5sb2coJ3NldHRpbmdzOicsIHNldHRpbmdzKVxuICAgIGNvbnN0IGxvY2FsZSA9IHNldHRpbmdzLmxvY2FsZSB8fCAnZW4nXG5cbiAgICBpZiAodGhpcy5faXNQcm9kdWN0aW9uID09PSB0cnVlICYmIHRoaXMuX2lzQ2kgPT09IGZhbHNlKSB7XG4gICAgICB0aGlzLl9tYWluV2luZG93LmxvYWRVUkwoYGFwcDovLy4vJHtsb2NhbGV9L2hvbWVgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgcG9ydCA9IHByb2Nlc3MuYXJndlsyXSB8fCAzMDAwO1xuICAgICAgdGhpcy5fbWFpbldpbmRvdy5sb2FkVVJMKGBodHRwOi8vbG9jYWxob3N0OiR7cG9ydH0vJHtsb2NhbGV9L2hvbWVgKTtcblxuICAgICAgLy8gaWYodGhpcy5faXNDaSAhPT0gdHJ1ZSl7XG4gICAgICAvLyAgICAgdGhpcy5fbWFpbldpbmRvdy53ZWJDb250ZW50cy5vcGVuRGV2VG9vbHMoKVxuICAgICAgLy8gICAgIHRoaXMub3BlbkdQVVdpbmRvdygpXG4gICAgICAvLyB9XG4gICAgfVxuICB9XG5cbiAgX2dwdVdpbmRvdztcblxuICBvcGVuR1BVV2luZG93KCkge1xuICAgIHRoaXMuX2dwdVdpbmRvdyA9IG5ldyBCcm93c2VyV2luZG93KHtcbiAgICAgIHdpZHRoOiA4MDAsXG4gICAgICBoZWlnaHQ6IDYwMCxcbiAgICB9KTtcblxuICAgIC8vIExvYWQgY2hyb21lOi8vZ3B1XG4gICAgdGhpcy5fZ3B1V2luZG93LmxvYWRVUkwoXCJjaHJvbWU6Ly9ncHVcIik7XG5cbiAgICAvLyBPcGVuIERldlRvb2xzXG4gICAgdGhpcy5fZ3B1V2luZG93LndlYkNvbnRlbnRzLm9wZW5EZXZUb29scygpO1xuICB9XG5cbiAgcXVpdCgpIHtcbiAgICBFbGVjdHJvbkFwcC5xdWl0KCk7XG4gIH1cblxuICByZXN0YXJ0KCkge1xuICAgIHRoaXMucXVpdCgpO1xuICAgIEVsZWN0cm9uQXBwLnJlbGF1bmNoKCk7XG4gIH1cbn1cblxubmV3IEFwcGxpY2F0aW9uKCk7XG4iXSwibmFtZXMiOlsic2Vzc2lvbiIsImRpYWxvZyIsImNyZWF0ZVdpbmRvdyIsIlhhbCIsIkF1dGhUb2tlblN0b3JlIiwiZGVmYXVsdFNldHRpbmdzIiwiQXV0aGVudGljYXRpb24iLCJjb25zdHJ1Y3RvciIsImFwcGxpY2F0aW9uIiwiX2RlZmluZVByb3BlcnR5IiwiX2FwcGxpY2F0aW9uIiwiX3Rva2VuU3RvcmUiLCJsb2FkIiwiX3hhbCIsImNoZWNrQXV0aGVudGljYXRpb24iLCJfaXNBdXRoZW50aWNhdGluZyIsIl9pc0F1dGhlbnRpY2F0ZWQiLCJsb2ciLCJoYXNWYWxpZEF1dGhUb2tlbnMiLCJzdGFydFNpbGVudEZsb3ciLCJnZXRVc2VyVG9rZW4iLCJ1bmRlZmluZWQiLCJyZWZyZXNoVG9rZW5zIiwidGhlbiIsImdldFN0cmVhbWluZ1Rva2VuIiwic3RyZWFtaW5nVG9rZW5zIiwieENsb3VkVG9rZW4iLCJfYXBwTGV2ZWwiLCJnZXRXZWJUb2tlbiIsIndlYlRva2VuIiwiX19maWxlbmFtZSIsImF1dGhlbnRpY2F0aW9uQ29tcGxldGVkIiwiY2F0Y2giLCJlcnJvciIsInNob3dNZXNzYWdlQm94IiwibWVzc2FnZSIsIl9KU09OJHN0cmluZ2lmeSIsInR5cGUiLCJlcnIiLCJjbGVhciIsInN0YXJ0QXV0aGZsb3ciLCJnZXRSZWRpcmVjdFVyaSIsInJlZGlyZWN0Iiwib3BlbkF1dGhXaW5kb3ciLCJzaXN1QXV0aCIsIk1zYU9hdXRoUmVkaXJlY3QiLCJfYXV0aENhbGxiYWNrIiwicmVkaXJlY3RVcmkiLCJhdXRoZW50aWNhdGVVc2VyIiwicmVzdWx0Iiwic2hvd0Vycm9yQm94Iiwic3RhcnRXZWJ2aWV3SG9va3MiLCJkZWZhdWx0U2Vzc2lvbiIsIndlYlJlcXVlc3QiLCJvbkhlYWRlcnNSZWNlaXZlZCIsInVybHMiLCJkZXRhaWxzIiwiY2FsbGJhY2siLCJfY29udGV4dCIsInJlc3BvbnNlSGVhZGVycyIsIkxvY2F0aW9uIiwiX2luY2x1ZGVzSW5zdGFuY2VQcm9wZXJ0eSIsImNhbGwiLCJfYXBwIiwiUmVkaXJlY3RVcmkiLCJfYXV0aFdpbmRvdyIsImNsb3NlIiwiY2FuY2VsIiwidXJsIiwiYXV0aFdpbmRvdyIsIndpZHRoIiwiaGVpZ2h0IiwidGl0bGUiLCJsb2FkVVJMIiwib24iLCJ0b2tlblN0b3JlIiwiY29uc29sZSIsInNpc3VUb2tlbiIsImdldFNpc3VUb2tlbiIsIkVycm9yIiwieHN0c1Rva2VuIiwiZG9Yc3RzQXV0aG9yaXphdGlvbiIsIl94aG9tZVRva2VuIiwiZ2V0U2Vjb25kc1ZhbGlkIiwiZ2V0U3RyZWFtVG9rZW4iLCJfeGNsb3VkVG9rZW4iLCJzZXR0aW5ncyIsIl9zdG9yZSIsImdldCIsImZvcmNlX3JlZ2lvbl9pcCIsInhIb21lVG9rZW4iLCJzY3JlZW4iLCJCcm93c2VyV2luZG93IiwiU3RvcmUiLCJwYXRoIiwid2luZG93TmFtZSIsIm9wdGlvbnMiLCJrZXkiLCJuYW1lIiwic3RvcmUiLCJkZWZhdWx0U2l6ZSIsInN0YXRlIiwicmVzdG9yZSIsImdldEN1cnJlbnRQb3NpdGlvbiIsIndpbiIsInJlbW92ZU1lbnUiLCJwb3NpdGlvbiIsImdldFBvc2l0aW9uIiwic2l6ZSIsImdldFNpemUiLCJ4IiwieSIsIndpbmRvd1dpdGhpbkJvdW5kcyIsIndpbmRvd1N0YXRlIiwiYm91bmRzIiwicmVzZXRUb0RlZmF1bHRzIiwiZ2V0UHJpbWFyeURpc3BsYXkiLCJfT2JqZWN0JGFzc2lnbiIsImVuc3VyZVZpc2libGVPblNvbWVEaXNwbGF5IiwidmlzaWJsZSIsIl9zb21lSW5zdGFuY2VQcm9wZXJ0eSIsImdldEFsbERpc3BsYXlzIiwiZGlzcGxheSIsInNhdmVTdGF0ZSIsImlzTWluaW1pemVkIiwiaXNNYXhpbWl6ZWQiLCJzZXQiLCJicm93c2VyT3B0aW9ucyIsIl9vYmplY3RTcHJlYWQiLCJ3ZWJQcmVmZXJlbmNlcyIsIm5vZGVJbnRlZ3JhdGlvbiIsImNvbnRleHRJc29sYXRpb24iLCJlbmFibGVCbGlua0ZlYXR1cmVzIiwic2FuZGJveCIsInByZWxvYWQiLCJqb2luIiwiX19kaXJuYW1lIiwiYXV0b0hpZGVNZW51QmFyIiwiaHR0cHMiLCJIdHRwIiwiaG9zdCIsIm1ldGhvZCIsIl9Qcm9taXNlIiwicmVzb2x2ZSIsInJlamVjdCIsInJlc3BvbnNlRGF0YSIsInJlcSIsInJlcXVlc3QiLCJoZWFkZXJzIiwicmVzcG9uc2UiLCJkYXRhIiwic3RhdHVzQ29kZSIsInJldHVybkRhdGEiLCJKU09OIiwicGFyc2UiLCJfc2V0VGltZW91dCIsInN0YXR1cyIsImJvZHkiLCJlbmQiLCJwb3N0IiwicG9zdERhdGEiLCJtZXJnZWRIZWFkZXJzIiwic3Vic3RyaW5nIiwid3JpdGUiLCJ4Q2xvdWRBcGkiLCJ4Ym94V29ya2VyIiwic2V0VXBkYXRlTm90aWZpY2F0aW9uIiwidXBkYXRlciIsIlN0cmVhbU1hbmFnZXIiLCJnZXRBcGkiLCJnZXREZWZhdWx0UmVnaW9uIiwiYmFzZVVyaSIsImdzVG9rZW4iLCJnZXRTZXNzaW9uIiwic2Vzc2lvbklkIiwiX3Nlc3Npb25zIiwic3RhcnRTdHJlYW0iLCJ0YXJnZXQiLCJwbGF5UmVzdWx0Iiwic2Vzc2lvblBhdGgiLCJzcGxpdCIsInN0cmVhbVNlc3Npb24iLCJpZCIsInBsYXllclN0YXRlIiwibW9uaXRvclNlc3Npb24iLCJzdG9wU3RyZWFtIiwic2VuZFNkcCIsInNkcCIsInNlbmRDaGF0U2RwIiwic2VuZEljZSIsImljZSIsInNlbmRLZWVwYWxpdmUiLCJnZXRTdHJlYW1TdGF0ZSIsIl9hdXRoZW50aWNhdGlvbiIsImdldE1zYWxUb2tlbiIsIm1zYWxUb2tlbiIsInNlbmRNU0FMQXV0aCIsImxwdCIsImFsZXJ0Iiwid2FpdGluZ1RpbWVzIiwiZ2V0V2FpdGluZ1RpbWVzIiwiZXJyb3JEZXRhaWxzIiwiZ2V0QWN0aXZlU2Vzc2lvbnMiLCJIVFRQIiwiYXhpb3MiLCJUaXRsZU1hbmFnZXIiLCJfaHR0cCIsImdldE9mZmljaWFsVGl0bGVzIiwib2ZmaWNpYWxUaXRsZXMiLCJ0aW1lb3V0IiwicmVzIiwiUHJvZHVjdHMiLCJlIiwiZ2V0R2FtZVBhc3NQcm9kdWN0cyIsInRpdGxlcyIsInByb2R1Y3RJZFF1ZXVlIiwiX0FycmF5JGlzQXJyYXkiLCJfZm9yRWFjaEluc3RhbmNlUHJvcGVydHkiLCJwcm9kdWN0SWQiLCJwdXNoIiwibWVyZ2VQcm9kdWN0SWRzIiwiX1NldCIsInByb2R1Y3RzIiwibWVyZ2VkVGl0bGVzIiwiX3NvcnRJbnN0YW5jZVByb3BlcnR5IiwiYSIsImIiLCJQcm9kdWN0VGl0bGUiLCJsb2NhbGVDb21wYXJlIiwiZ2V0TmV3VGl0bGVzIiwiVGl0bGUiLCJ0aXRsZUlkIiwieGJveFRpdGxlSWQiLCJzdXBwb3J0ZWRJbnB1dFR5cGVzIiwic2V0Q2F0YWxvZ0RldGFpbHMiLCJ0aXRsZUluZm8iLCJjYXRhbG9nRGV0YWlscyIsInRvU3RyaW5nIiwicmVzdG9yZUZyb21DYWNoZSIsImNhY2hlZE9iaiIsIlRva2VuU3RvcmUiLCJhcmdzIiwidG9rZW5zIiwibG9hZEpzb24iLCJzYXZlIiwidXNlclRva2VuIiwiX3VzZXJUb2tlbiIsIl9zaXN1VG9rZW4iLCJqd3RLZXlzIiwiX2p3dEtleXMiLCJkZWxldGUiLCJlbGVjdHJvbiIsImNvbXBhcmUiLCJnaCIsInBrZyIsImRlZmF1bHRPcHRpb25zIiwiZGVidWciLCJzaWxlbnQiLCJwcmVyZWxlYXNlcyIsImxvZ2dlciIsIndpdGhEZWZhdWx0cyIsImFwcCIsImlzUmVhZHkiLCJjaGVja0ZvclVwZGF0ZXMiLCJyZXBvc2l0b3J5IiwidG9rZW4iLCJpc1BhY2thZ2VkIiwiZ2hPYmoiLCJ1c2VyIiwicmVwbyIsImxhdGVzdFJlbGVhc2UiLCJyZWxlYXNlcyIsImF1dGhvcml6YXRpb24iLCJyZWxlYXNlIiwicHJlcmVsZWFzZSIsInNob3dEaWFsb2ciLCJ0YWdfbmFtZSIsImdldFZlcnNpb24iLCJzaG93VXBkYXRlRGlhbG9nIiwiZ2V0TmFtZSIsImRldGFpbCIsIl90cmltSW5zdGFuY2VQcm9wZXJ0eSIsImJ1dHRvbnMiLCJkZWZhdWx0SWQiLCJjYW5jZWxJZCIsIl9zZXRJbW1lZGlhdGUiLCJzaGVsbCIsIm9wZW5FeHRlcm5hbCIsImh0bWxfdXJsIiwiaW50ZXJ2YWxGcmllbmRzIiwidXBkYXRlRnJpZW5kcyIsImZyaWVuZHMiLCJvbmxpbmVGcmllbmRzIiwiZnJpZW5kIiwicHJlc2VuY2VTdGF0ZSIsIl9vbmxpbmVGcmllbmRzIiwiX3dlYkFwaSIsImdldFByb3ZpZGVyIiwiZ2V0RnJpZW5kcyIsInBlb3BsZSIsIl9mcmllbmRzIiwieHVpZCIsIkFkZHJlc3M2IiwiX2hvc3QiLCJfdG9rZW4iLCJfdHlwZSIsIkF1dGhvcml6YXRpb24iLCJnZXRUaXRsZXMiLCJnZXRSZWNlbnRUaXRsZXMiLCJkZXZpY2VJbmZvIiwiYXBwSW5mbyIsImVudiIsImNsaWVudEFwcElkIiwiY2xpZW50QXBwVHlwZSIsImNsaWVudEFwcFZlcnNpb24iLCJjbGllbnRTZGtWZXJzaW9uIiwiaHR0cEVudmlyb25tZW50Iiwic2RrSW5zdGFsbElkIiwiZGV2IiwiaHciLCJtYWtlIiwibW9kZWwiLCJzZGt0eXBlIiwib3MiLCJyZXNvbHV0aW9uIiwidmVyIiwicGxhdGZvcm0iLCJkaXNwbGF5SW5mbyIsImRpbWVuc2lvbnMiLCJ3aWR0aEluUGl4ZWxzIiwiaGVpZ2h0SW5QaXhlbHMiLCJwaXhlbERlbnNpdHkiLCJkcGlYIiwiZHBpWSIsInN5c3RlbVVwZGF0ZUdyb3VwIiwiY2xpZW50U2Vzc2lvbklkIiwibmFub1ZlcnNpb24iLCJlbmFibGVUZXh0VG9TcGVlY2giLCJoaWdoQ29udHJhc3QiLCJsb2NhbGUiLCJwcmVmZXJyZWRfZ2FtZV9sYW5ndWFnZSIsInVzZUljZUNvbm5lY3Rpb24iLCJ0aW1lem9uZU9mZnNldE1pbnV0ZXMiLCJzZGtUeXBlIiwib3NOYW1lIiwic2VydmVySWQiLCJmYWxsYmFja1JlZ2lvbk5hbWVzIiwibWVzc2FnZVR5cGUiLCJjb25maWd1cmF0aW9uIiwiY2hhdENvbmZpZ3VyYXRpb24iLCJieXRlc1BlclNhbXBsZSIsImV4cGVjdGVkQ2xpcER1cmF0aW9uTXMiLCJmb3JtYXQiLCJjb2RlYyIsImNvbnRhaW5lciIsIm51bUNoYW5uZWxzIiwic2FtcGxlRnJlcXVlbmN5SHoiLCJjaGF0IiwibWluVmVyc2lvbiIsIm1heFZlcnNpb24iLCJjb250cm9sIiwiaW5wdXQiLCJzZHBSZXN1bHQiLCJleGNoYW5nZVNkcCIsImV4Y2hhbmdlUmVzcG9uc2UiLCJpc01lZGlhU3RyZWFtc0NoYXRSZW5lZ290aWF0aW9uIiwiY2hlY2tJY2UiLCJpY2VSZXN1bHQiLCJfaWNlUmVzdWx0IiwiZXhjaGFuZ2VJY2UiLCJjb21wdXRlZENhbmRpZGF0ZXMiLCJjYW5kaWRhdGUiLCJjYW5kaWRhdGVBZGRyZXNzIiwibGVuZ3RoIiwic3Vic3RyIiwiYWRkcmVzcyIsInRlcmVkbyIsImluc3BlY3RUZXJlZG8iLCJjbGllbnQ0Iiwic2RwTUxpbmVJbmRleCIsInNkcE1pZCIsInVkcFBvcnQiLCJwYXR0ZXJuIiwiUmVnRXhwIiwibHN0IiwiaXRlbSIsImdyb3VwcyIsImV4ZWMiLCJpcHY2IiwiZmlyc3RJcCIsImlwIiwic2Vjb25kSXAiLCJuZXdDYW5kaWRhdGVzIiwiZm91bmRhdGlvbiIsIm5ld0NhbmRpZGF0ZSIsInByaW9yaXR5IiwicG9ydCIsInRoZV9yZXN0IiwiY2FuZGlkYXRlcyIsIklwY0NvbnNvbGVzIiwiSXBjU3RyZWFtaW5nIiwiSXBjeENsb3VkIiwiSXBjQXBwIiwiSXBjU2V0dGluZ3MiLCJpcGNNYWluIiwiSXBjIiwiX2NoYW5uZWxzIiwic3RyZWFtaW5nIiwiY29uc29sZXMiLCJ4Q2xvdWQiLCJjaGFubmVsIiwiZXZlbnQiLCJvbkV2ZW50Iiwic3RhcnRVcCIsIm9uVXNlckxvYWRlZCIsIklwY0Jhc2UiLCJsb2FkQ2FjaGVkVXNlciIsImdldFVzZXJTdGF0ZSIsImdhbWVydGFnIiwiZ2FtZXJwaWMiLCJnYW1lcnNjb3JlIiwic2lnbmVkSW4iLCJsZXZlbCIsImdldEF1dGhTdGF0ZSIsImlzQXV0aGVudGljYXRpbmciLCJpc0F1dGhlbnRpY2F0ZWQiLCJnZXRBcHBMZXZlbCIsImxvZ2luIiwicXVpdCIsInJlc3RhcnQiLCJjbGVhckRhdGEiLCJjbGVhclN0b3JhZ2VEYXRhIiwiZ2V0T25saW5lRnJpZW5kcyIsIl94Ym94V29ya2VyIiwib25VaVNob3duIiwidG9nZ2xlRnVsbHNjcmVlbiIsImlzRnVsbFNjcmVlbiIsIl9tYWluV2luZG93Iiwic2V0RnVsbFNjcmVlbiIsImV4aXRGdWxsc2NyZWVuIiwiYWN0aW9uIiwiX09iamVjdCRrZXlzIiwic2VuZCIsIndlYkNvbnRlbnRzIiwiX2NvbnNvbGVzTGFzdFVwZGF0ZSIsIl9EYXRlJG5vdyIsImdldENvbnNvbGVzTGlzdCIsIl9jb25zb2xlcyIsInNldFNldHRpbmdzIiwibmV3U2V0dGluZ3MiLCJnZXRTZXR0aW5ncyIsInJlc2V0U2V0dGluZ3MiLCJfc3RyZWFtTWFuYWdlciIsIl9pcGMiLCJfcmVjZW50VGl0bGVzTGFzdFVwZGF0ZSIsImdldFBsYXllclN0YXRlIiwiYWN0aXZlU2Vzc2lvbnMiLCJfdGl0bGVNYW5hZ2VyIiwiX3hDbG91ZEFwaSIsImdldFhob21lVG9rZW4iLCJzZXRYaG9tZVRva2VuRGVmYXVsdCIsInNldERlZmF1bHRSZWdpb24iLCJnZXRYY2xvdWRUb2tlbiIsInNldFhjbG91ZFRva2VuRGVmYXVsdCIsImdldFJlcXVlc3QiLCJob3N0SGVhZGVycyIsImhvc3RuYW1lIiwiSHR0cFJlc3BvbnNlIiwic3RhdHVzY29kZSIsInBvc3RSZXF1ZXN0IiwiaGVhZGVyIiwiVG9rZW4iLCJjYWxjdWxhdGVTZWNvbmRzTGVmdCIsImRhdGUiLCJleHBpcmVzT24iLCJjdXJyZW50RGF0ZSIsIkRhdGUiLCJNYXRoIiwiZmxvb3IiLCJnZXRUaW1lIiwiaXNWYWxpZCIsImdldFVzZXJIYXNoIiwiVXNlclRva2VuIiwiRGlzcGxheUNsYWltcyIsInh1aSIsInVocyIsImdldEdhbWVydGFnIiwiQXV0aG9yaXphdGlvblRva2VuIiwiZ3RnIiwiRGV2aWNlVG9rZW4iLCJOb3RBZnRlciIsIk1zYWxUb2tlbiIsIlNpc3VUb2tlbiIsInNlY29uZHNMZWZ0VGl0bGUiLCJUaXRsZVRva2VuIiwic2Vjb25kc0xlZnRVc2VyIiwic2Vjb25kc0xlZnRBdXRob3JpemF0aW9uIiwibWluIiwiU3RyZWFtaW5nVG9rZW4iLCJ0b2tlbkRhdGEiLCJfb2JqZWN0Q3JlYXRlVGltZSIsImR1cmF0aW9uSW5TZWNvbmRzIiwic2Vjb25kc0xlZnQiLCJnZXRNYXJrZXQiLCJtYXJrZXQiLCJnZXRSZWdpb25zIiwib2ZmZXJpbmdTZXR0aW5ncyIsInJlZ2lvbnMiLCJfZmlsdGVySW5zdGFuY2VQcm9wZXJ0eSIsInJlZ2lvbiIsImlzRGVmYXVsdCIsIl9jb250ZXh0MiIsImdldEVudmlyb25tZW50cyIsImNsaWVudENsb3VkU2V0dGluZ3MiLCJFbnZpcm9ubWVudHMiLCJleHBpcmVzX29uIiwiWHN0c1Rva2VuIiwiZnMiLCJmaWxlcGF0aCIsIl9maWxlcGF0aCIsImV4aXN0c1N5bmMiLCJmaWxlQ29udGVudHMiLCJyZWFkRmlsZVN5bmMiLCJqc29uIiwianNvbkRhdGEiLCJzZXRVc2VyVG9rZW4iLCJleHBpcmVEYXRlIiwic2V0U2Vjb25kcyIsImdldFNlY29uZHMiLCJleHBpcmVzX2luIiwidG9JU09TdHJpbmciLCJzZXRTaXN1VG9rZW4iLCJzZXRKd3RLZXlzIiwid3JpdGVGaWxlU3luYyIsInJlbW92ZUFsbCIsImNyeXB0byIsInN1YnRsZSIsIktleU9iamVjdCIsImV4cG9ydEpXSyIsIlVVSUQiLCJyZXF1aXJlIiwibmV4dFVVSUQiLCJ2MyIsIm5hbWVzcGFjZSIsIkFwcElkIiwiVGl0bGVJZCIsInNldEtleXMiLCJqd3QiLCJrZXlzIiwib3JnSnd0S2V5IiwiaW1wb3J0S2V5IiwibmFtZWRDdXJ2ZSIsImp3dEtleSIsInByaXZhdGVLZXkiLCJmcm9tIiwicmF3IiwiZ2V0S2V5cyIsIl9rZXlzSW5zdGFuY2VQcm9wZXJ0eSIsImdlbmVyYXRlS2V5UGFpclN5bmMiLCJwdWJsaWNLZXkiLCJqd2siLCJqd2tLZXkiLCJhbGciLCJ1c2UiLCJqd2tLZXlzIiwiZXhwb3J0IiwiZ2V0Q29kZUNoYWxsYW5nZSIsImNvZGVDaGFsbGFuZ2UiLCJjb2RlX3ZlcmlmaWVyIiwiQnVmZmVyIiwicHNldWRvUmFuZG9tQnl0ZXMiLCJjb2RlX2NoYWxsZW5nZSIsImNyZWF0ZUhhc2giLCJ1cGRhdGUiLCJkaWdlc3QiLCJ2YWx1ZSIsInZlcmlmaWVyIiwiZ2V0UmFuZG9tU3RhdGUiLCJieXRlcyIsInJhbmRvbUJ5dGVzIiwiZ2V0RGV2aWNlVG9rZW4iLCJwYXlsb2FkIiwiUHJvcGVydGllcyIsIkF1dGhNZXRob2QiLCJJZCIsIkRldmljZVR5cGUiLCJTZXJpYWxOdW1iZXIiLCJWZXJzaW9uIiwiUHJvb2ZLZXkiLCJSZWx5aW5nUGFydHkiLCJUb2tlblR5cGUiLCJzaWduYXR1cmUiLCJzaWduIiwiU2lnbmF0dXJlIiwiSHR0cENsaWVudCIsImRvU2lzdUF1dGhlbnRpY2F0aW9uIiwiZGV2aWNlVG9rZW4iLCJTYW5kYm94IiwiT2ZmZXJzIiwiUXVlcnkiLCJjb2RlX2NoYWxsZW5nZV9tZXRob2QiLCJyZXNCb2R5IiwiU2Vzc2lvbklkIiwiZG9TaXN1QXV0aG9yaXphdGlvbiIsIkFjY2Vzc1Rva2VuIiwiYWNjZXNzX3Rva2VuIiwiU2l0ZU5hbWUiLCJVc2VNb2Rlcm5HYW1lcnRhZyIsImV4Y2hhbmdlQ29kZUZvclRva2VuIiwiY29kZSIsImNvZGVWZXJpZmllciIsIl9VUkxTZWFyY2hQYXJhbXMiLCJyZWZyZXNoVXNlclRva2VuIiwicmVmcmVzaF90b2tlbiIsInJlbHlpbmdQYXJ0eSIsIlNhbmRib3hJZCIsIlVzZXJUb2tlbnMiLCJleGNoYW5nZVJlZnJlc2hUb2tlbkZvclhjbG91ZFRyYW5zZmVyVG9rZW4iLCJjbGllbnRfaWQiLCJncmFudF90eXBlIiwic2NvcGUiLCJyZWRpcmVjdF91cmkiLCJvZmZlcmluZyIsImZvcmNlUmVnaW9uSXAiLCJhdXRob3JpemF0aW9uVG9rZW4iLCJ3aW5kb3dzVGltZXN0YW1wIiwiQmlnSW50IiwicGF0aEFuZFF1ZXJ5IiwiX1VSTCIsInBhdGhuYW1lIiwiYWxsb2NTaXplIiwiYnVmIiwiYWxsb2MiLCJ3cml0ZUludDMyQkUiLCJ3cml0ZVVJbnQ4Iiwid3JpdGVCaWdVSW50NjRCRSIsIm9mZnNldCIsImNvcHkiLCJkc2FFbmNvZGluZyIsImN1clVzZXJUb2tlbiIsIlRva2VuUmVmcmVzaEVycm9yIiwiX3dlYlRva2VuIiwicmVkaXJlY3RPYmplY3QiLCJzZWFyY2hQYXJhbXMiLCJlcnJvcl9kZXNjcmlwdGlvbiIsImF1dGhlbnRpY2F0ZVVzZXJVc2luZ0NvZGUiLCJFbGVjdHJvbkFwcCIsInNlcnZlIiwiRGVidWciLCJ4Ym94V2ViQXBpIiwiQXBwbGljYXRpb24iLCJmdWxsc2NyZWVuIiwiYXV0b1N0cmVhbSIsInByb2Nlc3MiLCJOT0RFX0VOViIsIkNJIiwidmVyc2lvbiIsIl9sb2ciLCJjb21tYW5kTGluZSIsImFwcGVuZFN3aXRjaCIsInJlYWRTdGFydHVwRmxhZ3MiLCJsb2FkQXBwbGljYXRpb25EZWZhdWx0cyIsImV4dGVuZCIsImdldFN0YXJ0dXBGbGFncyIsIl9zdGFydHVwRmxhZ3MiLCJyZXNldEF1dG9zdHJlYW0iLCJhcmd2IiwiYXJnIiwiX2lzUHJvZHVjdGlvbiIsIl9pc0NpIiwiZGlyZWN0b3J5IiwicmFuZG9tIiwic2V0UGF0aCIsImdldFBhdGgiLCJ3aGVuUmVhZHkiLCJvcGVuTWFpbldpbmRvdyIsIl9pc01hYyIsInNob3ciLCJfaXNRdWl0dGluZyIsInByb2ZpbGVVc2VycyIsInNldHRpbmciLCJ3aW5kb3dPcHRpb25zIiwiYmFja2dyb3VuZENvbG9yIiwic2NyZWVuV2lkdGgiLCJ3b3JrQXJlYVNpemUiLCJzY3JlZW5IaWdodCIsInByZXZlbnREZWZhdWx0IiwiaGlkZSIsIm9wZW5HUFVXaW5kb3ciLCJfZ3B1V2luZG93Iiwib3BlbkRldlRvb2xzIiwicmVsYXVuY2giXSwic291cmNlUm9vdCI6IiJ9 \ No newline at end of file diff --git a/app/preload.js b/app/preload.js index 6320d45..f457abd 100644 --- a/app/preload.js +++ b/app/preload.js @@ -1,2 +1,4801 @@ -!function(t,r){if("object"==typeof exports&&"object"==typeof module)module.exports=r();else if("function"==typeof define&&define.amd)define([],r);else{var e=r();for(var n in e)("object"==typeof exports?exports:t)[n]=e[n]}}(global,(()=>(()=>{var t={1240:(t,r,e)=>{t.exports=e(5204)},7027:(t,r,e)=>{"use strict";e(4502),e(9363),e(3643),e(5931),e(7450),e(6415),e(5823),e(7714),e(7057);var n=e(2046);t.exports=n.Promise},2159:(t,r,e)=>{"use strict";var n=e(2250),o=e(4640),i=TypeError;t.exports=function(t){if(n(t))return t;throw new i(o(t)+" is not a function")}},2235:(t,r,e)=>{"use strict";var n=e(5468),o=e(4640),i=TypeError;t.exports=function(t){if(n(t))return t;throw new i(o(t)+" is not a constructor")}},43:(t,r,e)=>{"use strict";var n=e(4018),o=String,i=TypeError;t.exports=function(t){if(n(t))return t;throw new i("Can't set "+o(t)+" as a prototype")}},2156:t=>{"use strict";t.exports=function(){}},9596:(t,r,e)=>{"use strict";var n=e(8280),o=TypeError;t.exports=function(t,r){if(n(r,t))return t;throw new o("Incorrect invocation")}},6624:(t,r,e)=>{"use strict";var n=e(6285),o=String,i=TypeError;t.exports=function(t){if(n(t))return t;throw new i(o(t)+" is not an object")}},4436:(t,r,e)=>{"use strict";var n=e(7374),o=e(4849),i=e(575),s=function(t){return function(r,e,s){var c=n(r),u=i(c);if(0===u)return!t&&-1;var a,f=o(s,u);if(t&&e!=e){for(;u>f;)if((a=c[f++])!=a)return!0}else for(;u>f;f++)if((t||f in c)&&c[f]===e)return t||f||0;return!t&&-1}};t.exports={includes:s(!0),indexOf:s(!1)}},3427:(t,r,e)=>{"use strict";var n=e(1907);t.exports=n([].slice)},473:(t,r,e)=>{"use strict";var n=e(6264)("iterator"),o=!1;try{var i=0,s={next:function(){return{done:!!i++}},return:function(){o=!0}};s[n]=function(){return this},Array.from(s,(function(){throw 2}))}catch(t){}t.exports=function(t,r){try{if(!r&&!o)return!1}catch(t){return!1}var e=!1;try{var i={};i[n]=function(){return{next:function(){return{done:e=!0}}}},t(i)}catch(t){}return e}},5807:(t,r,e)=>{"use strict";var n=e(1907),o=n({}.toString),i=n("".slice);t.exports=function(t){return i(o(t),8,-1)}},3948:(t,r,e)=>{"use strict";var n=e(2623),o=e(2250),i=e(5807),s=e(6264)("toStringTag"),c=Object,u="Arguments"===i(function(){return arguments}());t.exports=n?i:function(t){var r,e,n;return void 0===t?"Undefined":null===t?"Null":"string"==typeof(e=function(t,r){try{return t[r]}catch(t){}}(r=c(t),s))?e:u?i(r):"Object"===(n=i(r))&&o(r.callee)?"Arguments":n}},9595:(t,r,e)=>{"use strict";var n=e(9724),o=e(1042),i=e(3846),s=e(4284);t.exports=function(t,r,e){for(var c=o(r),u=s.f,a=i.f,f=0;f{"use strict";var n=e(8828);t.exports=!n((function(){function t(){}return t.prototype.constructor=null,Object.getPrototypeOf(new t)!==t.prototype}))},9550:t=>{"use strict";t.exports=function(t,r){return{value:t,done:r}}},1626:(t,r,e)=>{"use strict";var n=e(9447),o=e(4284),i=e(5817);t.exports=n?function(t,r,e){return o.f(t,r,i(1,e))}:function(t,r,e){return t[r]=e,t}},5817:t=>{"use strict";t.exports=function(t,r){return{enumerable:!(1&t),configurable:!(2&t),writable:!(4&t),value:r}}},9251:(t,r,e)=>{"use strict";var n=e(4284);t.exports=function(t,r,e){return n.f(t,r,e)}},8055:(t,r,e)=>{"use strict";var n=e(1626);t.exports=function(t,r,e,o){return o&&o.enumerable?t[r]=e:n(t,r,e),t}},2532:(t,r,e)=>{"use strict";var n=e(5951),o=Object.defineProperty;t.exports=function(t,r){try{o(n,t,{value:r,configurable:!0,writable:!0})}catch(e){n[t]=r}return r}},9447:(t,r,e)=>{"use strict";var n=e(8828);t.exports=!n((function(){return 7!==Object.defineProperty({},1,{get:function(){return 7}})[1]}))},9552:(t,r,e)=>{"use strict";var n=e(5951),o=e(6285),i=n.document,s=o(i)&&o(i.createElement);t.exports=function(t){return s?i.createElement(t):{}}},9287:t=>{"use strict";t.exports={CSSRuleList:0,CSSStyleDeclaration:0,CSSValueList:0,ClientRectList:0,DOMRectList:0,DOMStringList:0,DOMTokenList:1,DataTransferItemList:0,FileList:0,HTMLAllCollection:0,HTMLCollection:0,HTMLFormElement:0,HTMLSelectElement:0,MediaList:0,MimeTypeArray:0,NamedNodeMap:0,NodeList:1,PaintRequestList:0,Plugin:0,PluginArray:0,SVGLengthList:0,SVGNumberList:0,SVGPathSegList:0,SVGPointList:0,SVGStringList:0,SVGTransformList:0,SourceBufferList:0,StyleSheetList:0,TextTrackCueList:0,TextTrackList:0,TouchList:0}},376:t=>{"use strict";t.exports=["constructor","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","toLocaleString","toString","valueOf"]},8606:(t,r,e)=>{"use strict";var n=e(6794);t.exports=/ipad|iphone|ipod/i.test(n)&&"undefined"!=typeof Pebble},1829:(t,r,e)=>{"use strict";var n=e(6794);t.exports=/(?:ipad|iphone|ipod).*applewebkit/i.test(n)},7586:(t,r,e)=>{"use strict";var n=e(2832);t.exports="NODE"===n},9291:(t,r,e)=>{"use strict";var n=e(6794);t.exports=/web0s(?!.*chrome)/i.test(n)},6794:(t,r,e)=>{"use strict";var n=e(5951).navigator,o=n&&n.userAgent;t.exports=o?String(o):""},798:(t,r,e)=>{"use strict";var n,o,i=e(5951),s=e(6794),c=i.process,u=i.Deno,a=c&&c.versions||u&&u.version,f=a&&a.v8;f&&(o=(n=f.split("."))[0]>0&&n[0]<4?1:+(n[0]+n[1])),!o&&s&&(!(n=s.match(/Edge\/(\d+)/))||n[1]>=74)&&(n=s.match(/Chrome\/(\d+)/))&&(o=+n[1]),t.exports=o},2832:(t,r,e)=>{"use strict";var n=e(5951),o=e(6794),i=e(5807),s=function(t){return o.slice(0,t.length)===t};t.exports=s("Bun/")?"BUN":s("Cloudflare-Workers")?"CLOUDFLARE":s("Deno/")?"DENO":s("Node.js/")?"NODE":n.Bun&&"string"==typeof Bun.version?"BUN":n.Deno&&"object"==typeof Deno.version?"DENO":"process"===i(n.process)?"NODE":n.window&&n.document?"BROWSER":"REST"},5762:(t,r,e)=>{"use strict";var n=e(1907),o=Error,i=n("".replace),s=String(new o("zxcasd").stack),c=/\n\s*at [^:]*:[^\n]*/,u=c.test(s);t.exports=function(t,r){if(u&&"string"==typeof t&&!o.prepareStackTrace)for(;r--;)t=i(t,c,"");return t}},5884:(t,r,e)=>{"use strict";var n=e(1626),o=e(5762),i=e(3888),s=Error.captureStackTrace;t.exports=function(t,r,e,c){i&&(s?s(t,r):n(t,"stack",o(e,c)))}},3888:(t,r,e)=>{"use strict";var n=e(8828),o=e(5817);t.exports=!n((function(){var t=new Error("a");return!("stack"in t)||(Object.defineProperty(t,"stack",o(1,7)),7!==t.stack)}))},1091:(t,r,e)=>{"use strict";var n=e(5951),o=e(6024),i=e(2361),s=e(2250),c=e(3846).f,u=e(7463),a=e(2046),f=e(8311),p=e(1626),v=e(9724);e(6128);var l=function(t){var r=function(e,n,i){if(this instanceof r){switch(arguments.length){case 0:return new t;case 1:return new t(e);case 2:return new t(e,n)}return new t(e,n,i)}return o(t,this,arguments)};return r.prototype=t.prototype,r};t.exports=function(t,r){var e,o,h,d,y,x,m,g,b,w=t.target,O=t.global,S=t.stat,j=t.proto,E=O?n:S?n[w]:n[w]&&n[w].prototype,P=O?a:a[w]||p(a,w,{})[w],T=P.prototype;for(d in r)o=!(e=u(O?d:w+(S?".":"#")+d,t.forced))&&E&&v(E,d),x=P[d],o&&(m=t.dontCallGetSet?(b=c(E,d))&&b.value:E[d]),y=o&&m?m:r[d],(e||j||typeof x!=typeof y)&&(g=t.bind&&o?f(y,n):t.wrap&&o?l(y):j&&s(y)?i(y):y,(t.sham||y&&y.sham||x&&x.sham)&&p(g,"sham",!0),p(P,d,g),j&&(v(a,h=w+"Prototype")||p(a,h,{}),p(a[h],d,y),t.real&&T&&(e||!T[d])&&p(T,d,y)))}},8828:t=>{"use strict";t.exports=function(t){try{return!!t()}catch(t){return!0}}},6024:(t,r,e)=>{"use strict";var n=e(1505),o=Function.prototype,i=o.apply,s=o.call;t.exports="object"==typeof Reflect&&Reflect.apply||(n?s.bind(i):function(){return s.apply(i,arguments)})},8311:(t,r,e)=>{"use strict";var n=e(2361),o=e(2159),i=e(1505),s=n(n.bind);t.exports=function(t,r){return o(t),void 0===r?t:i?s(t,r):function(){return t.apply(r,arguments)}}},1505:(t,r,e)=>{"use strict";var n=e(8828);t.exports=!n((function(){var t=function(){}.bind();return"function"!=typeof t||t.hasOwnProperty("prototype")}))},3930:(t,r,e)=>{"use strict";var n=e(1505),o=Function.prototype.call;t.exports=n?o.bind(o):function(){return o.apply(o,arguments)}},6833:(t,r,e)=>{"use strict";var n=e(9447),o=e(9724),i=Function.prototype,s=n&&Object.getOwnPropertyDescriptor,c=o(i,"name"),u=c&&"something"===function(){}.name,a=c&&(!n||n&&s(i,"name").configurable);t.exports={EXISTS:c,PROPER:u,CONFIGURABLE:a}},1871:(t,r,e)=>{"use strict";var n=e(1907),o=e(2159);t.exports=function(t,r,e){try{return n(o(Object.getOwnPropertyDescriptor(t,r)[e]))}catch(t){}}},2361:(t,r,e)=>{"use strict";var n=e(5807),o=e(1907);t.exports=function(t){if("Function"===n(t))return o(t)}},1907:(t,r,e)=>{"use strict";var n=e(1505),o=Function.prototype,i=o.call,s=n&&o.bind.bind(i,i);t.exports=n?s:function(t){return function(){return i.apply(t,arguments)}}},5582:(t,r,e)=>{"use strict";var n=e(2046),o=e(5951),i=e(2250),s=function(t){return i(t)?t:void 0};t.exports=function(t,r){return arguments.length<2?s(n[t])||s(o[t]):n[t]&&n[t][r]||o[t]&&o[t][r]}},3448:(t,r,e)=>{"use strict";var n=e(3948),o=e(9367),i=e(7136),s=e(3742),c=e(6264)("iterator");t.exports=function(t){if(!i(t))return o(t,c)||o(t,"@@iterator")||s[n(t)]}},300:(t,r,e)=>{"use strict";var n=e(3930),o=e(2159),i=e(6624),s=e(4640),c=e(3448),u=TypeError;t.exports=function(t,r){var e=arguments.length<2?c(t):r;if(o(e))return i(n(e,t));throw new u(s(t)+" is not iterable")}},9367:(t,r,e)=>{"use strict";var n=e(2159),o=e(7136);t.exports=function(t,r){var e=t[r];return o(e)?void 0:n(e)}},5951:function(t){"use strict";var r=function(t){return t&&t.Math===Math&&t};t.exports=r("object"==typeof globalThis&&globalThis)||r("object"==typeof window&&window)||r("object"==typeof self&&self)||r("object"==typeof global&&global)||r("object"==typeof this&&this)||function(){return this}()||Function("return this")()},9724:(t,r,e)=>{"use strict";var n=e(1907),o=e(9298),i=n({}.hasOwnProperty);t.exports=Object.hasOwn||function(t,r){return i(o(t),r)}},8530:t=>{"use strict";t.exports={}},3904:t=>{"use strict";t.exports=function(t,r){try{1===arguments.length?console.error(t):console.error(t,r)}catch(t){}}},2416:(t,r,e)=>{"use strict";var n=e(5582);t.exports=n("document","documentElement")},3648:(t,r,e)=>{"use strict";var n=e(9447),o=e(8828),i=e(9552);t.exports=!n&&!o((function(){return 7!==Object.defineProperty(i("div"),"a",{get:function(){return 7}}).a}))},6946:(t,r,e)=>{"use strict";var n=e(1907),o=e(8828),i=e(5807),s=Object,c=n("".split);t.exports=o((function(){return!s("z").propertyIsEnumerable(0)}))?function(t){return"String"===i(t)?c(t,""):s(t)}:s},2647:(t,r,e)=>{"use strict";var n=e(1907),o=e(2250),i=e(6128),s=n(Function.toString);o(i.inspectSource)||(i.inspectSource=function(t){return s(t)}),t.exports=i.inspectSource},9259:(t,r,e)=>{"use strict";var n=e(6285),o=e(1626);t.exports=function(t,r){n(r)&&"cause"in r&&o(t,"cause",r.cause)}},4932:(t,r,e)=>{"use strict";var n,o,i,s=e(551),c=e(5951),u=e(6285),a=e(1626),f=e(9724),p=e(6128),v=e(2522),l=e(8530),h="Object already initialized",d=c.TypeError,y=c.WeakMap;if(s||p.state){var x=p.state||(p.state=new y);x.get=x.get,x.has=x.has,x.set=x.set,n=function(t,r){if(x.has(t))throw new d(h);return r.facade=t,x.set(t,r),r},o=function(t){return x.get(t)||{}},i=function(t){return x.has(t)}}else{var m=v("state");l[m]=!0,n=function(t,r){if(f(t,m))throw new d(h);return r.facade=t,a(t,m,r),r},o=function(t){return f(t,m)?t[m]:{}},i=function(t){return f(t,m)}}t.exports={set:n,get:o,has:i,enforce:function(t){return i(t)?o(t):n(t,{})},getterFor:function(t){return function(r){var e;if(!u(r)||(e=o(r)).type!==t)throw new d("Incompatible receiver, "+t+" required");return e}}}},7812:(t,r,e)=>{"use strict";var n=e(6264),o=e(3742),i=n("iterator"),s=Array.prototype;t.exports=function(t){return void 0!==t&&(o.Array===t||s[i]===t)}},2250:t=>{"use strict";var r="object"==typeof document&&document.all;t.exports=void 0===r&&void 0!==r?function(t){return"function"==typeof t||t===r}:function(t){return"function"==typeof t}},5468:(t,r,e)=>{"use strict";var n=e(1907),o=e(8828),i=e(2250),s=e(3948),c=e(5582),u=e(2647),a=function(){},f=c("Reflect","construct"),p=/^\s*(?:class|function)\b/,v=n(p.exec),l=!p.test(a),h=function(t){if(!i(t))return!1;try{return f(a,[],t),!0}catch(t){return!1}},d=function(t){if(!i(t))return!1;switch(s(t)){case"AsyncFunction":case"GeneratorFunction":case"AsyncGeneratorFunction":return!1}try{return l||!!v(p,u(t))}catch(t){return!0}};d.sham=!0,t.exports=!f||o((function(){var t;return h(h.call)||!h(Object)||!h((function(){t=!0}))||t}))?d:h},7463:(t,r,e)=>{"use strict";var n=e(8828),o=e(2250),i=/#|\.prototype\./,s=function(t,r){var e=u[c(t)];return e===f||e!==a&&(o(r)?n(r):!!r)},c=s.normalize=function(t){return String(t).replace(i,".").toLowerCase()},u=s.data={},a=s.NATIVE="N",f=s.POLYFILL="P";t.exports=s},7136:t=>{"use strict";t.exports=function(t){return null==t}},6285:(t,r,e)=>{"use strict";var n=e(2250);t.exports=function(t){return"object"==typeof t?null!==t:n(t)}},4018:(t,r,e)=>{"use strict";var n=e(6285);t.exports=function(t){return n(t)||null===t}},7376:t=>{"use strict";t.exports=!0},5594:(t,r,e)=>{"use strict";var n=e(5582),o=e(2250),i=e(8280),s=e(1175),c=Object;t.exports=s?function(t){return"symbol"==typeof t}:function(t){var r=n("Symbol");return o(r)&&i(r.prototype,c(t))}},4823:(t,r,e)=>{"use strict";var n=e(8311),o=e(3930),i=e(6624),s=e(4640),c=e(7812),u=e(575),a=e(8280),f=e(300),p=e(3448),v=e(154),l=TypeError,h=function(t,r){this.stopped=t,this.result=r},d=h.prototype;t.exports=function(t,r,e){var y,x,m,g,b,w,O,S=e&&e.that,j=!(!e||!e.AS_ENTRIES),E=!(!e||!e.IS_RECORD),P=!(!e||!e.IS_ITERATOR),T=!(!e||!e.INTERRUPTED),R=n(r,S),A=function(t){return y&&v(y,"normal",t),new h(!0,t)},L=function(t){return j?(i(t),T?R(t[0],t[1],A):R(t[0],t[1])):T?R(t,A):R(t)};if(E)y=t.iterator;else if(P)y=t;else{if(!(x=p(t)))throw new l(s(t)+" is not iterable");if(c(x)){for(m=0,g=u(t);g>m;m++)if((b=L(t[m]))&&a(d,b))return b;return new h(!1)}y=f(t,x)}for(w=E?t.next:y.next;!(O=o(w,y)).done;){try{b=L(O.value)}catch(t){v(y,"throw",t)}if("object"==typeof b&&b&&a(d,b))return b}return new h(!1)}},154:(t,r,e)=>{"use strict";var n=e(3930),o=e(6624),i=e(9367);t.exports=function(t,r,e){var s,c;o(t);try{if(!(s=i(t,"return"))){if("throw"===r)throw e;return e}s=n(s,t)}catch(t){c=!0,s=t}if("throw"===r)throw e;if(c)throw s;return o(s),e}},7181:(t,r,e)=>{"use strict";var n=e(5116).IteratorPrototype,o=e(8075),i=e(5817),s=e(4840),c=e(3742),u=function(){return this};t.exports=function(t,r,e,a){var f=r+" Iterator";return t.prototype=o(n,{next:i(+!a,e)}),s(t,f,!1,!0),c[f]=u,t}},183:(t,r,e)=>{"use strict";var n=e(1091),o=e(3930),i=e(7376),s=e(6833),c=e(2250),u=e(7181),a=e(5972),f=e(9192),p=e(4840),v=e(1626),l=e(8055),h=e(6264),d=e(3742),y=e(5116),x=s.PROPER,m=s.CONFIGURABLE,g=y.IteratorPrototype,b=y.BUGGY_SAFARI_ITERATORS,w=h("iterator"),O="keys",S="values",j="entries",E=function(){return this};t.exports=function(t,r,e,s,h,y,P){u(e,r,s);var T,R,A,L=function(t){if(t===h&&M)return M;if(!b&&t&&t in N)return N[t];switch(t){case O:case S:case j:return function(){return new e(this,t)}}return function(){return new e(this)}},C=r+" Iterator",I=!1,N=t.prototype,k=N[w]||N["@@iterator"]||h&&N[h],M=!b&&k||L(h),_="Array"===r&&N.entries||k;if(_&&(T=a(_.call(new t)))!==Object.prototype&&T.next&&(i||a(T)===g||(f?f(T,g):c(T[w])||l(T,w,E)),p(T,C,!0,!0),i&&(d[C]=E)),x&&h===S&&k&&k.name!==S&&(!i&&m?v(N,"name",S):(I=!0,M=function(){return o(k,this)})),h)if(R={values:L(S),keys:y?M:L(O),entries:L(j)},P)for(A in R)(b||I||!(A in N))&&l(N,A,R[A]);else n({target:r,proto:!0,forced:b||I},R);return i&&!P||N[w]===M||l(N,w,M,{name:h}),d[r]=M,R}},5116:(t,r,e)=>{"use strict";var n,o,i,s=e(8828),c=e(2250),u=e(6285),a=e(8075),f=e(5972),p=e(8055),v=e(6264),l=e(7376),h=v("iterator"),d=!1;[].keys&&("next"in(i=[].keys())?(o=f(f(i)))!==Object.prototype&&(n=o):d=!0),!u(n)||s((function(){var t={};return n[h].call(t)!==t}))?n={}:l&&(n=a(n)),c(n[h])||p(n,h,(function(){return this})),t.exports={IteratorPrototype:n,BUGGY_SAFARI_ITERATORS:d}},3742:t=>{"use strict";t.exports={}},575:(t,r,e)=>{"use strict";var n=e(3121);t.exports=function(t){return n(t.length)}},1176:t=>{"use strict";var r=Math.ceil,e=Math.floor;t.exports=Math.trunc||function(t){var n=+t;return(n>0?e:r)(n)}},2292:(t,r,e)=>{"use strict";var n,o,i,s,c,u=e(5951),a=e(2098),f=e(8311),p=e(9472).set,v=e(9245),l=e(1829),h=e(8606),d=e(9291),y=e(7586),x=u.MutationObserver||u.WebKitMutationObserver,m=u.document,g=u.process,b=u.Promise,w=a("queueMicrotask");if(!w){var O=new v,S=function(){var t,r;for(y&&(t=g.domain)&&t.exit();r=O.get();)try{r()}catch(t){throw O.head&&n(),t}t&&t.enter()};l||y||d||!x||!m?!h&&b&&b.resolve?((s=b.resolve(void 0)).constructor=b,c=f(s.then,s),n=function(){c(S)}):y?n=function(){g.nextTick(S)}:(p=f(p,u),n=function(){p(S)}):(o=!0,i=m.createTextNode(""),new x(S).observe(i,{characterData:!0}),n=function(){i.data=o=!o}),w=function(t){O.head||n(),O.add(t)}}t.exports=w},6254:(t,r,e)=>{"use strict";var n=e(2159),o=TypeError,i=function(t){var r,e;this.promise=new t((function(t,n){if(void 0!==r||void 0!==e)throw new o("Bad Promise constructor");r=t,e=n})),this.resolve=n(r),this.reject=n(e)};t.exports.f=function(t){return new i(t)}},2096:(t,r,e)=>{"use strict";var n=e(160);t.exports=function(t,r){return void 0===t?arguments.length<2?"":r:n(t)}},8075:(t,r,e)=>{"use strict";var n,o=e(6624),i=e(2220),s=e(376),c=e(8530),u=e(2416),a=e(9552),f=e(2522),p="prototype",v="script",l=f("IE_PROTO"),h=function(){},d=function(t){return"<"+v+">"+t+""},y=function(t){t.write(d("")),t.close();var r=t.parentWindow.Object;return t=null,r},x=function(){try{n=new ActiveXObject("htmlfile")}catch(t){}var t,r,e;x="undefined"!=typeof document?document.domain&&n?y(n):(r=a("iframe"),e="java"+v+":",r.style.display="none",u.appendChild(r),r.src=String(e),(t=r.contentWindow.document).open(),t.write(d("document.F=Object")),t.close(),t.F):y(n);for(var o=s.length;o--;)delete x[p][s[o]];return x()};c[l]=!0,t.exports=Object.create||function(t,r){var e;return null!==t?(h[p]=o(t),e=new h,h[p]=null,e[l]=t):e=x(),void 0===r?e:i.f(e,r)}},2220:(t,r,e)=>{"use strict";var n=e(9447),o=e(8661),i=e(4284),s=e(6624),c=e(7374),u=e(2875);r.f=n&&!o?Object.defineProperties:function(t,r){s(t);for(var e,n=c(r),o=u(r),a=o.length,f=0;a>f;)i.f(t,e=o[f++],n[e]);return t}},4284:(t,r,e)=>{"use strict";var n=e(9447),o=e(3648),i=e(8661),s=e(6624),c=e(470),u=TypeError,a=Object.defineProperty,f=Object.getOwnPropertyDescriptor,p="enumerable",v="configurable",l="writable";r.f=n?i?function(t,r,e){if(s(t),r=c(r),s(e),"function"==typeof t&&"prototype"===r&&"value"in e&&l in e&&!e[l]){var n=f(t,r);n&&n[l]&&(t[r]=e.value,e={configurable:v in e?e[v]:n[v],enumerable:p in e?e[p]:n[p],writable:!1})}return a(t,r,e)}:a:function(t,r,e){if(s(t),r=c(r),s(e),o)try{return a(t,r,e)}catch(t){}if("get"in e||"set"in e)throw new u("Accessors not supported");return"value"in e&&(t[r]=e.value),t}},3846:(t,r,e)=>{"use strict";var n=e(9447),o=e(3930),i=e(2574),s=e(5817),c=e(7374),u=e(470),a=e(9724),f=e(3648),p=Object.getOwnPropertyDescriptor;r.f=n?p:function(t,r){if(t=c(t),r=u(r),f)try{return p(t,r)}catch(t){}if(a(t,r))return s(!o(i.f,t,r),t[r])}},4443:(t,r,e)=>{"use strict";var n=e(3045),o=e(376).concat("length","prototype");r.f=Object.getOwnPropertyNames||function(t){return n(t,o)}},7170:(t,r)=>{"use strict";r.f=Object.getOwnPropertySymbols},5972:(t,r,e)=>{"use strict";var n=e(9724),o=e(2250),i=e(9298),s=e(2522),c=e(7382),u=s("IE_PROTO"),a=Object,f=a.prototype;t.exports=c?a.getPrototypeOf:function(t){var r=i(t);if(n(r,u))return r[u];var e=r.constructor;return o(e)&&r instanceof e?e.prototype:r instanceof a?f:null}},8280:(t,r,e)=>{"use strict";var n=e(1907);t.exports=n({}.isPrototypeOf)},3045:(t,r,e)=>{"use strict";var n=e(1907),o=e(9724),i=e(7374),s=e(4436).indexOf,c=e(8530),u=n([].push);t.exports=function(t,r){var e,n=i(t),a=0,f=[];for(e in n)!o(c,e)&&o(n,e)&&u(f,e);for(;r.length>a;)o(n,e=r[a++])&&(~s(f,e)||u(f,e));return f}},2875:(t,r,e)=>{"use strict";var n=e(3045),o=e(376);t.exports=Object.keys||function(t){return n(t,o)}},2574:(t,r)=>{"use strict";var e={}.propertyIsEnumerable,n=Object.getOwnPropertyDescriptor,o=n&&!e.call({1:2},1);r.f=o?function(t){var r=n(this,t);return!!r&&r.enumerable}:e},9192:(t,r,e)=>{"use strict";var n=e(1871),o=e(6285),i=e(4239),s=e(43);t.exports=Object.setPrototypeOf||("__proto__"in{}?function(){var t,r=!1,e={};try{(t=n(Object.prototype,"__proto__","set"))(e,[]),r=e instanceof Array}catch(t){}return function(e,n){return i(e),s(n),o(e)?(r?t(e,n):e.__proto__=n,e):e}}():void 0)},4878:(t,r,e)=>{"use strict";var n=e(2623),o=e(3948);t.exports=n?{}.toString:function(){return"[object "+o(this)+"]"}},581:(t,r,e)=>{"use strict";var n=e(3930),o=e(2250),i=e(6285),s=TypeError;t.exports=function(t,r){var e,c;if("string"===r&&o(e=t.toString)&&!i(c=n(e,t)))return c;if(o(e=t.valueOf)&&!i(c=n(e,t)))return c;if("string"!==r&&o(e=t.toString)&&!i(c=n(e,t)))return c;throw new s("Can't convert object to primitive value")}},1042:(t,r,e)=>{"use strict";var n=e(5582),o=e(1907),i=e(4443),s=e(7170),c=e(6624),u=o([].concat);t.exports=n("Reflect","ownKeys")||function(t){var r=i.f(c(t)),e=s.f;return e?u(r,e(t)):r}},2046:t=>{"use strict";t.exports={}},4420:t=>{"use strict";t.exports=function(t){try{return{error:!1,value:t()}}catch(t){return{error:!0,value:t}}}},1759:(t,r,e)=>{"use strict";var n=e(5951),o=e(5463),i=e(2250),s=e(7463),c=e(2647),u=e(6264),a=e(2832),f=e(7376),p=e(798),v=o&&o.prototype,l=u("species"),h=!1,d=i(n.PromiseRejectionEvent),y=s("Promise",(function(){var t=c(o),r=t!==String(o);if(!r&&66===p)return!0;if(f&&(!v.catch||!v.finally))return!0;if(!p||p<51||!/native code/.test(t)){var e=new o((function(t){t(1)})),n=function(t){t((function(){}),(function(){}))};if((e.constructor={})[l]=n,!(h=e.then((function(){}))instanceof n))return!0}return!(r||"BROWSER"!==a&&"DENO"!==a||d)}));t.exports={CONSTRUCTOR:y,REJECTION_EVENT:d,SUBCLASSING:h}},5463:(t,r,e)=>{"use strict";var n=e(5951);t.exports=n.Promise},3569:(t,r,e)=>{"use strict";var n=e(6624),o=e(6285),i=e(6254);t.exports=function(t,r){if(n(t),o(r)&&r.constructor===t)return r;var e=i.f(t);return(0,e.resolve)(r),e.promise}},3282:(t,r,e)=>{"use strict";var n=e(5463),o=e(473),i=e(1759).CONSTRUCTOR;t.exports=i||!o((function(t){n.all(t).then(void 0,(function(){}))}))},9245:t=>{"use strict";var r=function(){this.head=null,this.tail=null};r.prototype={add:function(t){var r={item:t,next:null},e=this.tail;e?e.next=r:this.head=r,this.tail=r},get:function(){var t=this.head;if(t)return null===(this.head=t.next)&&(this.tail=null),t.item}},t.exports=r},4239:(t,r,e)=>{"use strict";var n=e(7136),o=TypeError;t.exports=function(t){if(n(t))throw new o("Can't call method on "+t);return t}},2098:(t,r,e)=>{"use strict";var n=e(5951),o=e(9447),i=Object.getOwnPropertyDescriptor;t.exports=function(t){if(!o)return n[t];var r=i(n,t);return r&&r.value}},7118:(t,r,e)=>{"use strict";var n=e(5582),o=e(9251),i=e(6264),s=e(9447),c=i("species");t.exports=function(t){var r=n(t);s&&r&&!r[c]&&o(r,c,{configurable:!0,get:function(){return this}})}},4840:(t,r,e)=>{"use strict";var n=e(2623),o=e(4284).f,i=e(1626),s=e(9724),c=e(4878),u=e(6264)("toStringTag");t.exports=function(t,r,e,a){var f=e?t:t&&t.prototype;f&&(s(f,u)||o(f,u,{configurable:!0,value:r}),a&&!n&&i(f,"toString",c))}},2522:(t,r,e)=>{"use strict";var n=e(5816),o=e(6499),i=n("keys");t.exports=function(t){return i[t]||(i[t]=o(t))}},6128:(t,r,e)=>{"use strict";var n=e(7376),o=e(5951),i=e(2532),s="__core-js_shared__",c=t.exports=o[s]||i(s,{});(c.versions||(c.versions=[])).push({version:"3.38.1",mode:n?"pure":"global",copyright:"© 2014-2024 Denis Pushkarev (zloirock.ru)",license:"https://github.com/zloirock/core-js/blob/v3.38.1/LICENSE",source:"https://github.com/zloirock/core-js"})},5816:(t,r,e)=>{"use strict";var n=e(6128);t.exports=function(t,r){return n[t]||(n[t]=r||{})}},8450:(t,r,e)=>{"use strict";var n=e(6624),o=e(2235),i=e(7136),s=e(6264)("species");t.exports=function(t,r){var e,c=n(t).constructor;return void 0===c||i(e=n(c)[s])?r:o(e)}},1470:(t,r,e)=>{"use strict";var n=e(1907),o=e(5482),i=e(160),s=e(4239),c=n("".charAt),u=n("".charCodeAt),a=n("".slice),f=function(t){return function(r,e){var n,f,p=i(s(r)),v=o(e),l=p.length;return v<0||v>=l?t?"":void 0:(n=u(p,v))<55296||n>56319||v+1===l||(f=u(p,v+1))<56320||f>57343?t?c(p,v):n:t?a(p,v,v+2):f-56320+(n-55296<<10)+65536}};t.exports={codeAt:f(!1),charAt:f(!0)}},9846:(t,r,e)=>{"use strict";var n=e(798),o=e(8828),i=e(5951).String;t.exports=!!Object.getOwnPropertySymbols&&!o((function(){var t=Symbol("symbol detection");return!i(t)||!(Object(t)instanceof Symbol)||!Symbol.sham&&n&&n<41}))},9472:(t,r,e)=>{"use strict";var n,o,i,s,c=e(5951),u=e(6024),a=e(8311),f=e(2250),p=e(9724),v=e(8828),l=e(2416),h=e(3427),d=e(9552),y=e(4787),x=e(1829),m=e(7586),g=c.setImmediate,b=c.clearImmediate,w=c.process,O=c.Dispatch,S=c.Function,j=c.MessageChannel,E=c.String,P=0,T={},R="onreadystatechange";v((function(){n=c.location}));var A=function(t){if(p(T,t)){var r=T[t];delete T[t],r()}},L=function(t){return function(){A(t)}},C=function(t){A(t.data)},I=function(t){c.postMessage(E(t),n.protocol+"//"+n.host)};g&&b||(g=function(t){y(arguments.length,1);var r=f(t)?t:S(t),e=h(arguments,1);return T[++P]=function(){u(r,void 0,e)},o(P),P},b=function(t){delete T[t]},m?o=function(t){w.nextTick(L(t))}:O&&O.now?o=function(t){O.now(L(t))}:j&&!x?(s=(i=new j).port2,i.port1.onmessage=C,o=a(s.postMessage,s)):c.addEventListener&&f(c.postMessage)&&!c.importScripts&&n&&"file:"!==n.protocol&&!v(I)?(o=I,c.addEventListener("message",C,!1)):o=R in d("script")?function(t){l.appendChild(d("script"))[R]=function(){l.removeChild(this),A(t)}}:function(t){setTimeout(L(t),0)}),t.exports={set:g,clear:b}},4849:(t,r,e)=>{"use strict";var n=e(5482),o=Math.max,i=Math.min;t.exports=function(t,r){var e=n(t);return e<0?o(e+r,0):i(e,r)}},7374:(t,r,e)=>{"use strict";var n=e(6946),o=e(4239);t.exports=function(t){return n(o(t))}},5482:(t,r,e)=>{"use strict";var n=e(1176);t.exports=function(t){var r=+t;return r!=r||0===r?0:n(r)}},3121:(t,r,e)=>{"use strict";var n=e(5482),o=Math.min;t.exports=function(t){var r=n(t);return r>0?o(r,9007199254740991):0}},9298:(t,r,e)=>{"use strict";var n=e(4239),o=Object;t.exports=function(t){return o(n(t))}},6028:(t,r,e)=>{"use strict";var n=e(3930),o=e(6285),i=e(5594),s=e(9367),c=e(581),u=e(6264),a=TypeError,f=u("toPrimitive");t.exports=function(t,r){if(!o(t)||i(t))return t;var e,u=s(t,f);if(u){if(void 0===r&&(r="default"),e=n(u,t,r),!o(e)||i(e))return e;throw new a("Can't convert object to primitive value")}return void 0===r&&(r="number"),c(t,r)}},470:(t,r,e)=>{"use strict";var n=e(6028),o=e(5594);t.exports=function(t){var r=n(t,"string");return o(r)?r:r+""}},2623:(t,r,e)=>{"use strict";var n={};n[e(6264)("toStringTag")]="z",t.exports="[object z]"===String(n)},160:(t,r,e)=>{"use strict";var n=e(3948),o=String;t.exports=function(t){if("Symbol"===n(t))throw new TypeError("Cannot convert a Symbol value to a string");return o(t)}},4640:t=>{"use strict";var r=String;t.exports=function(t){try{return r(t)}catch(t){return"Object"}}},6499:(t,r,e)=>{"use strict";var n=e(1907),o=0,i=Math.random(),s=n(1..toString);t.exports=function(t){return"Symbol("+(void 0===t?"":t)+")_"+s(++o+i,36)}},1175:(t,r,e)=>{"use strict";var n=e(9846);t.exports=n&&!Symbol.sham&&"symbol"==typeof Symbol.iterator},8661:(t,r,e)=>{"use strict";var n=e(9447),o=e(8828);t.exports=n&&o((function(){return 42!==Object.defineProperty((function(){}),"prototype",{value:42,writable:!1}).prototype}))},4787:t=>{"use strict";var r=TypeError;t.exports=function(t,e){if(t{"use strict";var n=e(5951),o=e(2250),i=n.WeakMap;t.exports=o(i)&&/native code/.test(String(i))},6264:(t,r,e)=>{"use strict";var n=e(5951),o=e(5816),i=e(9724),s=e(6499),c=e(9846),u=e(1175),a=n.Symbol,f=o("wks"),p=u?a.for||a:a&&a.withoutSetter||s;t.exports=function(t){return i(f,t)||(f[t]=c&&i(a,t)?a[t]:p("Symbol."+t)),f[t]}},2048:(t,r,e)=>{"use strict";var n=e(1091),o=e(8280),i=e(5972),s=e(9192),c=e(9595),u=e(8075),a=e(1626),f=e(5817),p=e(9259),v=e(5884),l=e(4823),h=e(2096),d=e(6264)("toStringTag"),y=Error,x=[].push,m=function(t,r){var e,n=o(g,this);s?e=s(new y,n?i(this):g):(e=n?this:u(g),a(e,d,"Error")),void 0!==r&&a(e,"message",h(r)),v(e,m,e.stack,1),arguments.length>2&&p(e,arguments[2]);var c=[];return l(t,x,{that:c}),a(e,"errors",c),e};s?s(m,y):c(m,y,{name:!0});var g=m.prototype=u(y.prototype,{constructor:f(1,m),message:f(1,""),name:f(1,"AggregateError")});n({global:!0,constructor:!0,arity:2},{AggregateError:m})},4502:(t,r,e)=>{"use strict";e(2048)},9363:(t,r,e)=>{"use strict";var n=e(7374),o=e(2156),i=e(3742),s=e(4932),c=e(4284).f,u=e(183),a=e(9550),f=e(7376),p=e(9447),v="Array Iterator",l=s.set,h=s.getterFor(v);t.exports=u(Array,"Array",(function(t,r){l(this,{type:v,target:n(t),index:0,kind:r})}),(function(){var t=h(this),r=t.target,e=t.index++;if(!r||e>=r.length)return t.target=null,a(void 0,!0);switch(t.kind){case"keys":return a(e,!1);case"values":return a(r[e],!1)}return a([e,r[e]],!1)}),"values");var d=i.Arguments=i.Array;if(o("keys"),o("values"),o("entries"),!f&&p&&"values"!==d.name)try{c(d,"name",{value:"values"})}catch(t){}},3643:()=>{},7450:(t,r,e)=>{"use strict";var n=e(1091),o=e(3930),i=e(2159),s=e(6254),c=e(4420),u=e(4823);n({target:"Promise",stat:!0,forced:e(3282)},{allSettled:function(t){var r=this,e=s.f(r),n=e.resolve,a=e.reject,f=c((function(){var e=i(r.resolve),s=[],c=0,a=1;u(t,(function(t){var i=c++,u=!1;a++,o(e,r,t).then((function(t){u||(u=!0,s[i]={status:"fulfilled",value:t},--a||n(s))}),(function(t){u||(u=!0,s[i]={status:"rejected",reason:t},--a||n(s))}))})),--a||n(s)}));return f.error&&a(f.value),e.promise}})},6630:(t,r,e)=>{"use strict";var n=e(1091),o=e(3930),i=e(2159),s=e(6254),c=e(4420),u=e(4823);n({target:"Promise",stat:!0,forced:e(3282)},{all:function(t){var r=this,e=s.f(r),n=e.resolve,a=e.reject,f=c((function(){var e=i(r.resolve),s=[],c=0,f=1;u(t,(function(t){var i=c++,u=!1;f++,o(e,r,t).then((function(t){u||(u=!0,s[i]=t,--f||n(s))}),a)})),--f||n(s)}));return f.error&&a(f.value),e.promise}})},6415:(t,r,e)=>{"use strict";var n=e(1091),o=e(3930),i=e(2159),s=e(5582),c=e(6254),u=e(4420),a=e(4823),f=e(3282),p="No one promise resolved";n({target:"Promise",stat:!0,forced:f},{any:function(t){var r=this,e=s("AggregateError"),n=c.f(r),f=n.resolve,v=n.reject,l=u((function(){var n=i(r.resolve),s=[],c=0,u=1,l=!1;a(t,(function(t){var i=c++,a=!1;u++,o(n,r,t).then((function(t){a||l||(l=!0,f(t))}),(function(t){a||l||(a=!0,s[i]=t,--u||v(new e(s,p)))}))})),--u||v(new e(s,p))}));return l.error&&v(l.value),n.promise}})},1866:(t,r,e)=>{"use strict";var n=e(1091),o=e(7376),i=e(1759).CONSTRUCTOR,s=e(5463),c=e(5582),u=e(2250),a=e(8055),f=s&&s.prototype;if(n({target:"Promise",proto:!0,forced:i,real:!0},{catch:function(t){return this.then(void 0,t)}}),!o&&u(s)){var p=c("Promise").prototype.catch;f.catch!==p&&a(f,"catch",p,{unsafe:!0})}},3825:(t,r,e)=>{"use strict";var n,o,i,s=e(1091),c=e(7376),u=e(7586),a=e(5951),f=e(3930),p=e(8055),v=e(9192),l=e(4840),h=e(7118),d=e(2159),y=e(2250),x=e(6285),m=e(9596),g=e(8450),b=e(9472).set,w=e(2292),O=e(3904),S=e(4420),j=e(9245),E=e(4932),P=e(5463),T=e(1759),R=e(6254),A="Promise",L=T.CONSTRUCTOR,C=T.REJECTION_EVENT,I=T.SUBCLASSING,N=E.getterFor(A),k=E.set,M=P&&P.prototype,_=P,D=M,F=a.TypeError,U=a.document,G=a.process,B=R.f,V=B,z=!!(U&&U.createEvent&&a.dispatchEvent),W="unhandledrejection",H=function(t){var r;return!(!x(t)||!y(r=t.then))&&r},q=function(t,r){var e,n,o,i=r.value,s=1===r.state,c=s?t.ok:t.fail,u=t.resolve,a=t.reject,p=t.domain;try{c?(s||(2===r.rejection&&Q(r),r.rejection=1),!0===c?e=i:(p&&p.enter(),e=c(i),p&&(p.exit(),o=!0)),e===t.promise?a(new F("Promise-chain cycle")):(n=H(e))?f(n,e,u,a):u(e)):a(i)}catch(t){p&&!o&&p.exit(),a(t)}},X=function(t,r){t.notified||(t.notified=!0,w((function(){for(var e,n=t.reactions;e=n.get();)q(e,t);t.notified=!1,r&&!t.rejection&&J(t)})))},Y=function(t,r,e){var n,o;z?((n=U.createEvent("Event")).promise=r,n.reason=e,n.initEvent(t,!1,!0),a.dispatchEvent(n)):n={promise:r,reason:e},!C&&(o=a["on"+t])?o(n):t===W&&O("Unhandled promise rejection",e)},J=function(t){f(b,a,(function(){var r,e=t.facade,n=t.value;if(K(t)&&(r=S((function(){u?G.emit("unhandledRejection",n,e):Y(W,e,n)})),t.rejection=u||K(t)?2:1,r.error))throw r.value}))},K=function(t){return 1!==t.rejection&&!t.parent},Q=function(t){f(b,a,(function(){var r=t.facade;u?G.emit("rejectionHandled",r):Y("rejectionhandled",r,t.value)}))},Z=function(t,r,e){return function(n){t(r,n,e)}},$=function(t,r,e){t.done||(t.done=!0,e&&(t=e),t.value=r,t.state=2,X(t,!0))},tt=function(t,r,e){if(!t.done){t.done=!0,e&&(t=e);try{if(t.facade===r)throw new F("Promise can't be resolved itself");var n=H(r);n?w((function(){var e={done:!1};try{f(n,r,Z(tt,e,t),Z($,e,t))}catch(r){$(e,r,t)}})):(t.value=r,t.state=1,X(t,!1))}catch(r){$({done:!1},r,t)}}};if(L&&(D=(_=function(t){m(this,D),d(t),f(n,this);var r=N(this);try{t(Z(tt,r),Z($,r))}catch(t){$(r,t)}}).prototype,(n=function(t){k(this,{type:A,done:!1,notified:!1,parent:!1,reactions:new j,rejection:!1,state:0,value:null})}).prototype=p(D,"then",(function(t,r){var e=N(this),n=B(g(this,_));return e.parent=!0,n.ok=!y(t)||t,n.fail=y(r)&&r,n.domain=u?G.domain:void 0,0===e.state?e.reactions.add(n):w((function(){q(n,e)})),n.promise})),o=function(){var t=new n,r=N(t);this.promise=t,this.resolve=Z(tt,r),this.reject=Z($,r)},R.f=B=function(t){return t===_||undefined===t?new o(t):V(t)},!c&&y(P)&&M!==Object.prototype)){i=M.then,I||p(M,"then",(function(t,r){var e=this;return new _((function(t,r){f(i,e,t,r)})).then(t,r)}),{unsafe:!0});try{delete M.constructor}catch(t){}v&&v(M,D)}s({global:!0,constructor:!0,wrap:!0,forced:L},{Promise:_}),l(_,A,!1,!0),h(A)},7714:(t,r,e)=>{"use strict";var n=e(1091),o=e(7376),i=e(5463),s=e(8828),c=e(5582),u=e(2250),a=e(8450),f=e(3569),p=e(8055),v=i&&i.prototype;if(n({target:"Promise",proto:!0,real:!0,forced:!!i&&s((function(){v.finally.call({then:function(){}},(function(){}))}))},{finally:function(t){var r=a(this,c("Promise")),e=u(t);return this.then(e?function(e){return f(r,t()).then((function(){return e}))}:t,e?function(e){return f(r,t()).then((function(){throw e}))}:t)}}),!o&&u(i)){var l=c("Promise").prototype.finally;v.finally!==l&&p(v,"finally",l,{unsafe:!0})}},5931:(t,r,e)=>{"use strict";e(3825),e(6630),e(1866),e(2736),e(7286),e(6761)},2736:(t,r,e)=>{"use strict";var n=e(1091),o=e(3930),i=e(2159),s=e(6254),c=e(4420),u=e(4823);n({target:"Promise",stat:!0,forced:e(3282)},{race:function(t){var r=this,e=s.f(r),n=e.reject,a=c((function(){var s=i(r.resolve);u(t,(function(t){o(s,r,t).then(e.resolve,n)}))}));return a.error&&n(a.value),e.promise}})},7286:(t,r,e)=>{"use strict";var n=e(1091),o=e(6254);n({target:"Promise",stat:!0,forced:e(1759).CONSTRUCTOR},{reject:function(t){var r=o.f(this);return(0,r.reject)(t),r.promise}})},6761:(t,r,e)=>{"use strict";var n=e(1091),o=e(5582),i=e(7376),s=e(5463),c=e(1759).CONSTRUCTOR,u=e(3569),a=o("Promise"),f=i&&!c;n({target:"Promise",stat:!0,forced:i||c},{resolve:function(t){return u(f&&this===a?s:this,t)}})},5823:(t,r,e)=>{"use strict";var n=e(1091),o=e(6254);n({target:"Promise",stat:!0},{withResolvers:function(){var t=o.f(this);return{promise:t.promise,resolve:t.resolve,reject:t.reject}}})},7057:(t,r,e)=>{"use strict";var n=e(1470).charAt,o=e(160),i=e(4932),s=e(183),c=e(9550),u="String Iterator",a=i.set,f=i.getterFor(u);s(String,"String",(function(t){a(this,{type:u,string:o(t),index:0})}),(function(){var t,r=f(this),e=r.string,o=r.index;return o>=e.length?c(void 0,!0):(t=n(e,o),r.index+=t.length,c(t,!1))}))},2560:(t,r,e)=>{"use strict";e(9363);var n=e(9287),o=e(5951),i=e(4840),s=e(3742);for(var c in n)i(o[c],c),s[c]=s.Array},5204:(t,r,e)=>{"use strict";var n=e(7027);e(2560),t.exports=n}},r={};function e(n){var o=r[n];if(void 0!==o)return o.exports;var i=r[n]={exports:{}};return t[n].call(i.exports,i,i.exports,e),i.exports}e.n=t=>{var r=t&&t.__esModule?()=>t.default:()=>t;return e.d(r,{a:r}),r},e.d=(t,r)=>{for(var n in r)e.o(r,n)&&!e.o(t,n)&&Object.defineProperty(t,n,{enumerable:!0,get:r[n]})},e.o=(t,r)=>Object.prototype.hasOwnProperty.call(t,r),e.r=t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})};var n={};return(()=>{"use strict";e.r(n),e.d(n,{Preload:()=>s});var t=e(1240),r=e.n(t);const o=require("electron"),i="1.0.0",s={send:(t,e,n={})=>new(r())(((r,i)=>{const s=Math.round(1e3*Math.random());o.ipcRenderer.send(t,{id:s,action:e,data:n});const c=(n,u)=>{u.action===e&&u.id===s&&(o.ipcRenderer.removeListener(t,c),void 0===u.error?r(u.data):i(u.error))};o.ipcRenderer.on(t,c)})),on(t,r){const e=(t,e)=>{r(t,e.action,e.data)};return o.ipcRenderer.on(t,e),e},onAction(t,r,e){const n=(t,n)=>{n.action===r&&e(t,n.data)};return o.ipcRenderer.on(t,n),n},removeListener(t,r){o.ipcRenderer.removeListener(t,r)},openExternal(t){o.shell.openExternal(t)},getVersion:()=>i};o.contextBridge.exposeInMainWorld("XStreaming",s)})(),n})())); -//# sourceMappingURL=preload.js.map \ No newline at end of file +(function webpackUniversalModuleDefinition(root, factory) { + if(typeof exports === 'object' && typeof module === 'object') + module.exports = factory(); + else if(typeof define === 'function' && define.amd) + define([], factory); + else { + var a = factory(); + for(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i]; + } +})(global, () => { +return /******/ (() => { // webpackBootstrap +/******/ var __webpack_modules__ = ({ + +/***/ "electron": +/*!***************************!*\ + !*** external "electron" ***! + \***************************/ +/***/ ((module) => { + +"use strict"; +module.exports = require("electron"); + +/***/ }), + +/***/ "./node_modules/@babel/runtime-corejs3/core-js-stable/promise.js": +/*!***********************************************************************!*\ + !*** ./node_modules/@babel/runtime-corejs3/core-js-stable/promise.js ***! + \***********************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +module.exports = __webpack_require__(/*! core-js-pure/stable/promise */ "./node_modules/core-js-pure/stable/promise/index.js"); + +/***/ }), + +/***/ "./node_modules/core-js-pure/es/promise/index.js": +/*!*******************************************************!*\ + !*** ./node_modules/core-js-pure/es/promise/index.js ***! + \*******************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +__webpack_require__(/*! ../../modules/es.aggregate-error */ "./node_modules/core-js-pure/modules/es.aggregate-error.js"); +__webpack_require__(/*! ../../modules/es.array.iterator */ "./node_modules/core-js-pure/modules/es.array.iterator.js"); +__webpack_require__(/*! ../../modules/es.object.to-string */ "./node_modules/core-js-pure/modules/es.object.to-string.js"); +__webpack_require__(/*! ../../modules/es.promise */ "./node_modules/core-js-pure/modules/es.promise.js"); +__webpack_require__(/*! ../../modules/es.promise.all-settled */ "./node_modules/core-js-pure/modules/es.promise.all-settled.js"); +__webpack_require__(/*! ../../modules/es.promise.any */ "./node_modules/core-js-pure/modules/es.promise.any.js"); +__webpack_require__(/*! ../../modules/es.promise.with-resolvers */ "./node_modules/core-js-pure/modules/es.promise.with-resolvers.js"); +__webpack_require__(/*! ../../modules/es.promise.finally */ "./node_modules/core-js-pure/modules/es.promise.finally.js"); +__webpack_require__(/*! ../../modules/es.string.iterator */ "./node_modules/core-js-pure/modules/es.string.iterator.js"); +var path = __webpack_require__(/*! ../../internals/path */ "./node_modules/core-js-pure/internals/path.js"); + +module.exports = path.Promise; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/a-callable.js": +/*!***********************************************************!*\ + !*** ./node_modules/core-js-pure/internals/a-callable.js ***! + \***********************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var isCallable = __webpack_require__(/*! ../internals/is-callable */ "./node_modules/core-js-pure/internals/is-callable.js"); +var tryToString = __webpack_require__(/*! ../internals/try-to-string */ "./node_modules/core-js-pure/internals/try-to-string.js"); + +var $TypeError = TypeError; + +// `Assert: IsCallable(argument) is true` +module.exports = function (argument) { + if (isCallable(argument)) return argument; + throw new $TypeError(tryToString(argument) + ' is not a function'); +}; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/a-constructor.js": +/*!**************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/a-constructor.js ***! + \**************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var isConstructor = __webpack_require__(/*! ../internals/is-constructor */ "./node_modules/core-js-pure/internals/is-constructor.js"); +var tryToString = __webpack_require__(/*! ../internals/try-to-string */ "./node_modules/core-js-pure/internals/try-to-string.js"); + +var $TypeError = TypeError; + +// `Assert: IsConstructor(argument) is true` +module.exports = function (argument) { + if (isConstructor(argument)) return argument; + throw new $TypeError(tryToString(argument) + ' is not a constructor'); +}; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/a-possible-prototype.js": +/*!*********************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/a-possible-prototype.js ***! + \*********************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var isPossiblePrototype = __webpack_require__(/*! ../internals/is-possible-prototype */ "./node_modules/core-js-pure/internals/is-possible-prototype.js"); + +var $String = String; +var $TypeError = TypeError; + +module.exports = function (argument) { + if (isPossiblePrototype(argument)) return argument; + throw new $TypeError("Can't set " + $String(argument) + ' as a prototype'); +}; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/add-to-unscopables.js": +/*!*******************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/add-to-unscopables.js ***! + \*******************************************************************/ +/***/ ((module) => { + +"use strict"; + +module.exports = function () { /* empty */ }; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/an-instance.js": +/*!************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/an-instance.js ***! + \************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var isPrototypeOf = __webpack_require__(/*! ../internals/object-is-prototype-of */ "./node_modules/core-js-pure/internals/object-is-prototype-of.js"); + +var $TypeError = TypeError; + +module.exports = function (it, Prototype) { + if (isPrototypeOf(Prototype, it)) return it; + throw new $TypeError('Incorrect invocation'); +}; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/an-object.js": +/*!**********************************************************!*\ + !*** ./node_modules/core-js-pure/internals/an-object.js ***! + \**********************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var isObject = __webpack_require__(/*! ../internals/is-object */ "./node_modules/core-js-pure/internals/is-object.js"); + +var $String = String; +var $TypeError = TypeError; + +// `Assert: Type(argument) is Object` +module.exports = function (argument) { + if (isObject(argument)) return argument; + throw new $TypeError($String(argument) + ' is not an object'); +}; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/array-includes.js": +/*!***************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/array-includes.js ***! + \***************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var toIndexedObject = __webpack_require__(/*! ../internals/to-indexed-object */ "./node_modules/core-js-pure/internals/to-indexed-object.js"); +var toAbsoluteIndex = __webpack_require__(/*! ../internals/to-absolute-index */ "./node_modules/core-js-pure/internals/to-absolute-index.js"); +var lengthOfArrayLike = __webpack_require__(/*! ../internals/length-of-array-like */ "./node_modules/core-js-pure/internals/length-of-array-like.js"); + +// `Array.prototype.{ indexOf, includes }` methods implementation +var createMethod = function (IS_INCLUDES) { + return function ($this, el, fromIndex) { + var O = toIndexedObject($this); + var length = lengthOfArrayLike(O); + if (length === 0) return !IS_INCLUDES && -1; + var index = toAbsoluteIndex(fromIndex, length); + var value; + // Array#includes uses SameValueZero equality algorithm + // eslint-disable-next-line no-self-compare -- NaN check + if (IS_INCLUDES && el !== el) while (length > index) { + value = O[index++]; + // eslint-disable-next-line no-self-compare -- NaN check + if (value !== value) return true; + // Array#indexOf ignores holes, Array#includes - not + } else for (;length > index; index++) { + if ((IS_INCLUDES || index in O) && O[index] === el) return IS_INCLUDES || index || 0; + } return !IS_INCLUDES && -1; + }; +}; + +module.exports = { + // `Array.prototype.includes` method + // https://tc39.es/ecma262/#sec-array.prototype.includes + includes: createMethod(true), + // `Array.prototype.indexOf` method + // https://tc39.es/ecma262/#sec-array.prototype.indexof + indexOf: createMethod(false) +}; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/array-slice.js": +/*!************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/array-slice.js ***! + \************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var uncurryThis = __webpack_require__(/*! ../internals/function-uncurry-this */ "./node_modules/core-js-pure/internals/function-uncurry-this.js"); + +module.exports = uncurryThis([].slice); + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/check-correctness-of-iteration.js": +/*!*******************************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/check-correctness-of-iteration.js ***! + \*******************************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ "./node_modules/core-js-pure/internals/well-known-symbol.js"); + +var ITERATOR = wellKnownSymbol('iterator'); +var SAFE_CLOSING = false; + +try { + var called = 0; + var iteratorWithReturn = { + next: function () { + return { done: !!called++ }; + }, + 'return': function () { + SAFE_CLOSING = true; + } + }; + iteratorWithReturn[ITERATOR] = function () { + return this; + }; + // eslint-disable-next-line es/no-array-from, no-throw-literal -- required for testing + Array.from(iteratorWithReturn, function () { throw 2; }); +} catch (error) { /* empty */ } + +module.exports = function (exec, SKIP_CLOSING) { + try { + if (!SKIP_CLOSING && !SAFE_CLOSING) return false; + } catch (error) { return false; } // workaround of old WebKit + `eval` bug + var ITERATION_SUPPORT = false; + try { + var object = {}; + object[ITERATOR] = function () { + return { + next: function () { + return { done: ITERATION_SUPPORT = true }; + } + }; + }; + exec(object); + } catch (error) { /* empty */ } + return ITERATION_SUPPORT; +}; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/classof-raw.js": +/*!************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/classof-raw.js ***! + \************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var uncurryThis = __webpack_require__(/*! ../internals/function-uncurry-this */ "./node_modules/core-js-pure/internals/function-uncurry-this.js"); + +var toString = uncurryThis({}.toString); +var stringSlice = uncurryThis(''.slice); + +module.exports = function (it) { + return stringSlice(toString(it), 8, -1); +}; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/classof.js": +/*!********************************************************!*\ + !*** ./node_modules/core-js-pure/internals/classof.js ***! + \********************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var TO_STRING_TAG_SUPPORT = __webpack_require__(/*! ../internals/to-string-tag-support */ "./node_modules/core-js-pure/internals/to-string-tag-support.js"); +var isCallable = __webpack_require__(/*! ../internals/is-callable */ "./node_modules/core-js-pure/internals/is-callable.js"); +var classofRaw = __webpack_require__(/*! ../internals/classof-raw */ "./node_modules/core-js-pure/internals/classof-raw.js"); +var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ "./node_modules/core-js-pure/internals/well-known-symbol.js"); + +var TO_STRING_TAG = wellKnownSymbol('toStringTag'); +var $Object = Object; + +// ES3 wrong here +var CORRECT_ARGUMENTS = classofRaw(function () { return arguments; }()) === 'Arguments'; + +// fallback for IE11 Script Access Denied error +var tryGet = function (it, key) { + try { + return it[key]; + } catch (error) { /* empty */ } +}; + +// getting tag from ES6+ `Object.prototype.toString` +module.exports = TO_STRING_TAG_SUPPORT ? classofRaw : function (it) { + var O, tag, result; + return it === undefined ? 'Undefined' : it === null ? 'Null' + // @@toStringTag case + : typeof (tag = tryGet(O = $Object(it), TO_STRING_TAG)) == 'string' ? tag + // builtinTag case + : CORRECT_ARGUMENTS ? classofRaw(O) + // ES3 arguments fallback + : (result = classofRaw(O)) === 'Object' && isCallable(O.callee) ? 'Arguments' : result; +}; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/copy-constructor-properties.js": +/*!****************************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/copy-constructor-properties.js ***! + \****************************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var hasOwn = __webpack_require__(/*! ../internals/has-own-property */ "./node_modules/core-js-pure/internals/has-own-property.js"); +var ownKeys = __webpack_require__(/*! ../internals/own-keys */ "./node_modules/core-js-pure/internals/own-keys.js"); +var getOwnPropertyDescriptorModule = __webpack_require__(/*! ../internals/object-get-own-property-descriptor */ "./node_modules/core-js-pure/internals/object-get-own-property-descriptor.js"); +var definePropertyModule = __webpack_require__(/*! ../internals/object-define-property */ "./node_modules/core-js-pure/internals/object-define-property.js"); + +module.exports = function (target, source, exceptions) { + var keys = ownKeys(source); + var defineProperty = definePropertyModule.f; + var getOwnPropertyDescriptor = getOwnPropertyDescriptorModule.f; + for (var i = 0; i < keys.length; i++) { + var key = keys[i]; + if (!hasOwn(target, key) && !(exceptions && hasOwn(exceptions, key))) { + defineProperty(target, key, getOwnPropertyDescriptor(source, key)); + } + } +}; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/correct-prototype-getter.js": +/*!*************************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/correct-prototype-getter.js ***! + \*************************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var fails = __webpack_require__(/*! ../internals/fails */ "./node_modules/core-js-pure/internals/fails.js"); + +module.exports = !fails(function () { + function F() { /* empty */ } + F.prototype.constructor = null; + // eslint-disable-next-line es/no-object-getprototypeof -- required for testing + return Object.getPrototypeOf(new F()) !== F.prototype; +}); + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/create-iter-result-object.js": +/*!**************************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/create-iter-result-object.js ***! + \**************************************************************************/ +/***/ ((module) => { + +"use strict"; + +// `CreateIterResultObject` abstract operation +// https://tc39.es/ecma262/#sec-createiterresultobject +module.exports = function (value, done) { + return { value: value, done: done }; +}; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/create-non-enumerable-property.js": +/*!*******************************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/create-non-enumerable-property.js ***! + \*******************************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ "./node_modules/core-js-pure/internals/descriptors.js"); +var definePropertyModule = __webpack_require__(/*! ../internals/object-define-property */ "./node_modules/core-js-pure/internals/object-define-property.js"); +var createPropertyDescriptor = __webpack_require__(/*! ../internals/create-property-descriptor */ "./node_modules/core-js-pure/internals/create-property-descriptor.js"); + +module.exports = DESCRIPTORS ? function (object, key, value) { + return definePropertyModule.f(object, key, createPropertyDescriptor(1, value)); +} : function (object, key, value) { + object[key] = value; + return object; +}; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/create-property-descriptor.js": +/*!***************************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/create-property-descriptor.js ***! + \***************************************************************************/ +/***/ ((module) => { + +"use strict"; + +module.exports = function (bitmap, value) { + return { + enumerable: !(bitmap & 1), + configurable: !(bitmap & 2), + writable: !(bitmap & 4), + value: value + }; +}; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/define-built-in-accessor.js": +/*!*************************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/define-built-in-accessor.js ***! + \*************************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var defineProperty = __webpack_require__(/*! ../internals/object-define-property */ "./node_modules/core-js-pure/internals/object-define-property.js"); + +module.exports = function (target, name, descriptor) { + return defineProperty.f(target, name, descriptor); +}; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/define-built-in.js": +/*!****************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/define-built-in.js ***! + \****************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var createNonEnumerableProperty = __webpack_require__(/*! ../internals/create-non-enumerable-property */ "./node_modules/core-js-pure/internals/create-non-enumerable-property.js"); + +module.exports = function (target, key, value, options) { + if (options && options.enumerable) target[key] = value; + else createNonEnumerableProperty(target, key, value); + return target; +}; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/define-global-property.js": +/*!***********************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/define-global-property.js ***! + \***********************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var globalThis = __webpack_require__(/*! ../internals/global-this */ "./node_modules/core-js-pure/internals/global-this.js"); + +// eslint-disable-next-line es/no-object-defineproperty -- safe +var defineProperty = Object.defineProperty; + +module.exports = function (key, value) { + try { + defineProperty(globalThis, key, { value: value, configurable: true, writable: true }); + } catch (error) { + globalThis[key] = value; + } return value; +}; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/descriptors.js": +/*!************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/descriptors.js ***! + \************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var fails = __webpack_require__(/*! ../internals/fails */ "./node_modules/core-js-pure/internals/fails.js"); + +// Detect IE8's incomplete defineProperty implementation +module.exports = !fails(function () { + // eslint-disable-next-line es/no-object-defineproperty -- required for testing + return Object.defineProperty({}, 1, { get: function () { return 7; } })[1] !== 7; +}); + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/document-create-element.js": +/*!************************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/document-create-element.js ***! + \************************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var globalThis = __webpack_require__(/*! ../internals/global-this */ "./node_modules/core-js-pure/internals/global-this.js"); +var isObject = __webpack_require__(/*! ../internals/is-object */ "./node_modules/core-js-pure/internals/is-object.js"); + +var document = globalThis.document; +// typeof document.createElement is 'object' in old IE +var EXISTS = isObject(document) && isObject(document.createElement); + +module.exports = function (it) { + return EXISTS ? document.createElement(it) : {}; +}; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/dom-iterables.js": +/*!**************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/dom-iterables.js ***! + \**************************************************************/ +/***/ ((module) => { + +"use strict"; + +// iterable DOM collections +// flag - `iterable` interface - 'entries', 'keys', 'values', 'forEach' methods +module.exports = { + CSSRuleList: 0, + CSSStyleDeclaration: 0, + CSSValueList: 0, + ClientRectList: 0, + DOMRectList: 0, + DOMStringList: 0, + DOMTokenList: 1, + DataTransferItemList: 0, + FileList: 0, + HTMLAllCollection: 0, + HTMLCollection: 0, + HTMLFormElement: 0, + HTMLSelectElement: 0, + MediaList: 0, + MimeTypeArray: 0, + NamedNodeMap: 0, + NodeList: 1, + PaintRequestList: 0, + Plugin: 0, + PluginArray: 0, + SVGLengthList: 0, + SVGNumberList: 0, + SVGPathSegList: 0, + SVGPointList: 0, + SVGStringList: 0, + SVGTransformList: 0, + SourceBufferList: 0, + StyleSheetList: 0, + TextTrackCueList: 0, + TextTrackList: 0, + TouchList: 0 +}; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/enum-bug-keys.js": +/*!**************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/enum-bug-keys.js ***! + \**************************************************************/ +/***/ ((module) => { + +"use strict"; + +// IE8- don't enum bug keys +module.exports = [ + 'constructor', + 'hasOwnProperty', + 'isPrototypeOf', + 'propertyIsEnumerable', + 'toLocaleString', + 'toString', + 'valueOf' +]; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/environment-is-ios-pebble.js": +/*!**************************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/environment-is-ios-pebble.js ***! + \**************************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var userAgent = __webpack_require__(/*! ../internals/environment-user-agent */ "./node_modules/core-js-pure/internals/environment-user-agent.js"); + +module.exports = /ipad|iphone|ipod/i.test(userAgent) && typeof Pebble != 'undefined'; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/environment-is-ios.js": +/*!*******************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/environment-is-ios.js ***! + \*******************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var userAgent = __webpack_require__(/*! ../internals/environment-user-agent */ "./node_modules/core-js-pure/internals/environment-user-agent.js"); + +// eslint-disable-next-line redos/no-vulnerable -- safe +module.exports = /(?:ipad|iphone|ipod).*applewebkit/i.test(userAgent); + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/environment-is-node.js": +/*!********************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/environment-is-node.js ***! + \********************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var ENVIRONMENT = __webpack_require__(/*! ../internals/environment */ "./node_modules/core-js-pure/internals/environment.js"); + +module.exports = ENVIRONMENT === 'NODE'; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/environment-is-webos-webkit.js": +/*!****************************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/environment-is-webos-webkit.js ***! + \****************************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var userAgent = __webpack_require__(/*! ../internals/environment-user-agent */ "./node_modules/core-js-pure/internals/environment-user-agent.js"); + +module.exports = /web0s(?!.*chrome)/i.test(userAgent); + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/environment-user-agent.js": +/*!***********************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/environment-user-agent.js ***! + \***********************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var globalThis = __webpack_require__(/*! ../internals/global-this */ "./node_modules/core-js-pure/internals/global-this.js"); + +var navigator = globalThis.navigator; +var userAgent = navigator && navigator.userAgent; + +module.exports = userAgent ? String(userAgent) : ''; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/environment-v8-version.js": +/*!***********************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/environment-v8-version.js ***! + \***********************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var globalThis = __webpack_require__(/*! ../internals/global-this */ "./node_modules/core-js-pure/internals/global-this.js"); +var userAgent = __webpack_require__(/*! ../internals/environment-user-agent */ "./node_modules/core-js-pure/internals/environment-user-agent.js"); + +var process = globalThis.process; +var Deno = globalThis.Deno; +var versions = process && process.versions || Deno && Deno.version; +var v8 = versions && versions.v8; +var match, version; + +if (v8) { + match = v8.split('.'); + // in old Chrome, versions of V8 isn't V8 = Chrome / 10 + // but their correct versions are not interesting for us + version = match[0] > 0 && match[0] < 4 ? 1 : +(match[0] + match[1]); +} + +// BrowserFS NodeJS `process` polyfill incorrectly set `.v8` to `0.0` +// so check `userAgent` even if `.v8` exists, but 0 +if (!version && userAgent) { + match = userAgent.match(/Edge\/(\d+)/); + if (!match || match[1] >= 74) { + match = userAgent.match(/Chrome\/(\d+)/); + if (match) version = +match[1]; + } +} + +module.exports = version; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/environment.js": +/*!************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/environment.js ***! + \************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +/* global Bun, Deno -- detection */ +var globalThis = __webpack_require__(/*! ../internals/global-this */ "./node_modules/core-js-pure/internals/global-this.js"); +var userAgent = __webpack_require__(/*! ../internals/environment-user-agent */ "./node_modules/core-js-pure/internals/environment-user-agent.js"); +var classof = __webpack_require__(/*! ../internals/classof-raw */ "./node_modules/core-js-pure/internals/classof-raw.js"); + +var userAgentStartsWith = function (string) { + return userAgent.slice(0, string.length) === string; +}; + +module.exports = (function () { + if (userAgentStartsWith('Bun/')) return 'BUN'; + if (userAgentStartsWith('Cloudflare-Workers')) return 'CLOUDFLARE'; + if (userAgentStartsWith('Deno/')) return 'DENO'; + if (userAgentStartsWith('Node.js/')) return 'NODE'; + if (globalThis.Bun && typeof Bun.version == 'string') return 'BUN'; + if (globalThis.Deno && typeof Deno.version == 'object') return 'DENO'; + if (classof(globalThis.process) === 'process') return 'NODE'; + if (globalThis.window && globalThis.document) return 'BROWSER'; + return 'REST'; +})(); + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/error-stack-clear.js": +/*!******************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/error-stack-clear.js ***! + \******************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var uncurryThis = __webpack_require__(/*! ../internals/function-uncurry-this */ "./node_modules/core-js-pure/internals/function-uncurry-this.js"); + +var $Error = Error; +var replace = uncurryThis(''.replace); + +var TEST = (function (arg) { return String(new $Error(arg).stack); })('zxcasd'); +// eslint-disable-next-line redos/no-vulnerable -- safe +var V8_OR_CHAKRA_STACK_ENTRY = /\n\s*at [^:]*:[^\n]*/; +var IS_V8_OR_CHAKRA_STACK = V8_OR_CHAKRA_STACK_ENTRY.test(TEST); + +module.exports = function (stack, dropEntries) { + if (IS_V8_OR_CHAKRA_STACK && typeof stack == 'string' && !$Error.prepareStackTrace) { + while (dropEntries--) stack = replace(stack, V8_OR_CHAKRA_STACK_ENTRY, ''); + } return stack; +}; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/error-stack-install.js": +/*!********************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/error-stack-install.js ***! + \********************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var createNonEnumerableProperty = __webpack_require__(/*! ../internals/create-non-enumerable-property */ "./node_modules/core-js-pure/internals/create-non-enumerable-property.js"); +var clearErrorStack = __webpack_require__(/*! ../internals/error-stack-clear */ "./node_modules/core-js-pure/internals/error-stack-clear.js"); +var ERROR_STACK_INSTALLABLE = __webpack_require__(/*! ../internals/error-stack-installable */ "./node_modules/core-js-pure/internals/error-stack-installable.js"); + +// non-standard V8 +var captureStackTrace = Error.captureStackTrace; + +module.exports = function (error, C, stack, dropEntries) { + if (ERROR_STACK_INSTALLABLE) { + if (captureStackTrace) captureStackTrace(error, C); + else createNonEnumerableProperty(error, 'stack', clearErrorStack(stack, dropEntries)); + } +}; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/error-stack-installable.js": +/*!************************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/error-stack-installable.js ***! + \************************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var fails = __webpack_require__(/*! ../internals/fails */ "./node_modules/core-js-pure/internals/fails.js"); +var createPropertyDescriptor = __webpack_require__(/*! ../internals/create-property-descriptor */ "./node_modules/core-js-pure/internals/create-property-descriptor.js"); + +module.exports = !fails(function () { + var error = new Error('a'); + if (!('stack' in error)) return true; + // eslint-disable-next-line es/no-object-defineproperty -- safe + Object.defineProperty(error, 'stack', createPropertyDescriptor(1, 7)); + return error.stack !== 7; +}); + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/export.js": +/*!*******************************************************!*\ + !*** ./node_modules/core-js-pure/internals/export.js ***! + \*******************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var globalThis = __webpack_require__(/*! ../internals/global-this */ "./node_modules/core-js-pure/internals/global-this.js"); +var apply = __webpack_require__(/*! ../internals/function-apply */ "./node_modules/core-js-pure/internals/function-apply.js"); +var uncurryThis = __webpack_require__(/*! ../internals/function-uncurry-this-clause */ "./node_modules/core-js-pure/internals/function-uncurry-this-clause.js"); +var isCallable = __webpack_require__(/*! ../internals/is-callable */ "./node_modules/core-js-pure/internals/is-callable.js"); +var getOwnPropertyDescriptor = (__webpack_require__(/*! ../internals/object-get-own-property-descriptor */ "./node_modules/core-js-pure/internals/object-get-own-property-descriptor.js").f); +var isForced = __webpack_require__(/*! ../internals/is-forced */ "./node_modules/core-js-pure/internals/is-forced.js"); +var path = __webpack_require__(/*! ../internals/path */ "./node_modules/core-js-pure/internals/path.js"); +var bind = __webpack_require__(/*! ../internals/function-bind-context */ "./node_modules/core-js-pure/internals/function-bind-context.js"); +var createNonEnumerableProperty = __webpack_require__(/*! ../internals/create-non-enumerable-property */ "./node_modules/core-js-pure/internals/create-non-enumerable-property.js"); +var hasOwn = __webpack_require__(/*! ../internals/has-own-property */ "./node_modules/core-js-pure/internals/has-own-property.js"); +// add debugging info +__webpack_require__(/*! ../internals/shared-store */ "./node_modules/core-js-pure/internals/shared-store.js"); + +var wrapConstructor = function (NativeConstructor) { + var Wrapper = function (a, b, c) { + if (this instanceof Wrapper) { + switch (arguments.length) { + case 0: return new NativeConstructor(); + case 1: return new NativeConstructor(a); + case 2: return new NativeConstructor(a, b); + } return new NativeConstructor(a, b, c); + } return apply(NativeConstructor, this, arguments); + }; + Wrapper.prototype = NativeConstructor.prototype; + return Wrapper; +}; + +/* + options.target - name of the target object + options.global - target is the global object + options.stat - export as static methods of target + options.proto - export as prototype methods of target + options.real - real prototype method for the `pure` version + options.forced - export even if the native feature is available + options.bind - bind methods to the target, required for the `pure` version + options.wrap - wrap constructors to preventing global pollution, required for the `pure` version + options.unsafe - use the simple assignment of property instead of delete + defineProperty + options.sham - add a flag to not completely full polyfills + options.enumerable - export as enumerable property + options.dontCallGetSet - prevent calling a getter on target + options.name - the .name of the function if it does not match the key +*/ +module.exports = function (options, source) { + var TARGET = options.target; + var GLOBAL = options.global; + var STATIC = options.stat; + var PROTO = options.proto; + + var nativeSource = GLOBAL ? globalThis : STATIC ? globalThis[TARGET] : globalThis[TARGET] && globalThis[TARGET].prototype; + + var target = GLOBAL ? path : path[TARGET] || createNonEnumerableProperty(path, TARGET, {})[TARGET]; + var targetPrototype = target.prototype; + + var FORCED, USE_NATIVE, VIRTUAL_PROTOTYPE; + var key, sourceProperty, targetProperty, nativeProperty, resultProperty, descriptor; + + for (key in source) { + FORCED = isForced(GLOBAL ? key : TARGET + (STATIC ? '.' : '#') + key, options.forced); + // contains in native + USE_NATIVE = !FORCED && nativeSource && hasOwn(nativeSource, key); + + targetProperty = target[key]; + + if (USE_NATIVE) if (options.dontCallGetSet) { + descriptor = getOwnPropertyDescriptor(nativeSource, key); + nativeProperty = descriptor && descriptor.value; + } else nativeProperty = nativeSource[key]; + + // export native or implementation + sourceProperty = (USE_NATIVE && nativeProperty) ? nativeProperty : source[key]; + + if (!FORCED && !PROTO && typeof targetProperty == typeof sourceProperty) continue; + + // bind methods to global for calling from export context + if (options.bind && USE_NATIVE) resultProperty = bind(sourceProperty, globalThis); + // wrap global constructors for prevent changes in this version + else if (options.wrap && USE_NATIVE) resultProperty = wrapConstructor(sourceProperty); + // make static versions for prototype methods + else if (PROTO && isCallable(sourceProperty)) resultProperty = uncurryThis(sourceProperty); + // default case + else resultProperty = sourceProperty; + + // add a flag to not completely full polyfills + if (options.sham || (sourceProperty && sourceProperty.sham) || (targetProperty && targetProperty.sham)) { + createNonEnumerableProperty(resultProperty, 'sham', true); + } + + createNonEnumerableProperty(target, key, resultProperty); + + if (PROTO) { + VIRTUAL_PROTOTYPE = TARGET + 'Prototype'; + if (!hasOwn(path, VIRTUAL_PROTOTYPE)) { + createNonEnumerableProperty(path, VIRTUAL_PROTOTYPE, {}); + } + // export virtual prototype methods + createNonEnumerableProperty(path[VIRTUAL_PROTOTYPE], key, sourceProperty); + // export real prototype methods + if (options.real && targetPrototype && (FORCED || !targetPrototype[key])) { + createNonEnumerableProperty(targetPrototype, key, sourceProperty); + } + } + } +}; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/fails.js": +/*!******************************************************!*\ + !*** ./node_modules/core-js-pure/internals/fails.js ***! + \******************************************************/ +/***/ ((module) => { + +"use strict"; + +module.exports = function (exec) { + try { + return !!exec(); + } catch (error) { + return true; + } +}; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/function-apply.js": +/*!***************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/function-apply.js ***! + \***************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var NATIVE_BIND = __webpack_require__(/*! ../internals/function-bind-native */ "./node_modules/core-js-pure/internals/function-bind-native.js"); + +var FunctionPrototype = Function.prototype; +var apply = FunctionPrototype.apply; +var call = FunctionPrototype.call; + +// eslint-disable-next-line es/no-reflect -- safe +module.exports = typeof Reflect == 'object' && Reflect.apply || (NATIVE_BIND ? call.bind(apply) : function () { + return call.apply(apply, arguments); +}); + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/function-bind-context.js": +/*!**********************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/function-bind-context.js ***! + \**********************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var uncurryThis = __webpack_require__(/*! ../internals/function-uncurry-this-clause */ "./node_modules/core-js-pure/internals/function-uncurry-this-clause.js"); +var aCallable = __webpack_require__(/*! ../internals/a-callable */ "./node_modules/core-js-pure/internals/a-callable.js"); +var NATIVE_BIND = __webpack_require__(/*! ../internals/function-bind-native */ "./node_modules/core-js-pure/internals/function-bind-native.js"); + +var bind = uncurryThis(uncurryThis.bind); + +// optional / simple context binding +module.exports = function (fn, that) { + aCallable(fn); + return that === undefined ? fn : NATIVE_BIND ? bind(fn, that) : function (/* ...args */) { + return fn.apply(that, arguments); + }; +}; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/function-bind-native.js": +/*!*********************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/function-bind-native.js ***! + \*********************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var fails = __webpack_require__(/*! ../internals/fails */ "./node_modules/core-js-pure/internals/fails.js"); + +module.exports = !fails(function () { + // eslint-disable-next-line es/no-function-prototype-bind -- safe + var test = (function () { /* empty */ }).bind(); + // eslint-disable-next-line no-prototype-builtins -- safe + return typeof test != 'function' || test.hasOwnProperty('prototype'); +}); + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/function-call.js": +/*!**************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/function-call.js ***! + \**************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var NATIVE_BIND = __webpack_require__(/*! ../internals/function-bind-native */ "./node_modules/core-js-pure/internals/function-bind-native.js"); + +var call = Function.prototype.call; + +module.exports = NATIVE_BIND ? call.bind(call) : function () { + return call.apply(call, arguments); +}; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/function-name.js": +/*!**************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/function-name.js ***! + \**************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ "./node_modules/core-js-pure/internals/descriptors.js"); +var hasOwn = __webpack_require__(/*! ../internals/has-own-property */ "./node_modules/core-js-pure/internals/has-own-property.js"); + +var FunctionPrototype = Function.prototype; +// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe +var getDescriptor = DESCRIPTORS && Object.getOwnPropertyDescriptor; + +var EXISTS = hasOwn(FunctionPrototype, 'name'); +// additional protection from minified / mangled / dropped function names +var PROPER = EXISTS && (function something() { /* empty */ }).name === 'something'; +var CONFIGURABLE = EXISTS && (!DESCRIPTORS || (DESCRIPTORS && getDescriptor(FunctionPrototype, 'name').configurable)); + +module.exports = { + EXISTS: EXISTS, + PROPER: PROPER, + CONFIGURABLE: CONFIGURABLE +}; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/function-uncurry-this-accessor.js": +/*!*******************************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/function-uncurry-this-accessor.js ***! + \*******************************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var uncurryThis = __webpack_require__(/*! ../internals/function-uncurry-this */ "./node_modules/core-js-pure/internals/function-uncurry-this.js"); +var aCallable = __webpack_require__(/*! ../internals/a-callable */ "./node_modules/core-js-pure/internals/a-callable.js"); + +module.exports = function (object, key, method) { + try { + // eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe + return uncurryThis(aCallable(Object.getOwnPropertyDescriptor(object, key)[method])); + } catch (error) { /* empty */ } +}; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/function-uncurry-this-clause.js": +/*!*****************************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/function-uncurry-this-clause.js ***! + \*****************************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var classofRaw = __webpack_require__(/*! ../internals/classof-raw */ "./node_modules/core-js-pure/internals/classof-raw.js"); +var uncurryThis = __webpack_require__(/*! ../internals/function-uncurry-this */ "./node_modules/core-js-pure/internals/function-uncurry-this.js"); + +module.exports = function (fn) { + // Nashorn bug: + // https://github.com/zloirock/core-js/issues/1128 + // https://github.com/zloirock/core-js/issues/1130 + if (classofRaw(fn) === 'Function') return uncurryThis(fn); +}; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/function-uncurry-this.js": +/*!**********************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/function-uncurry-this.js ***! + \**********************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var NATIVE_BIND = __webpack_require__(/*! ../internals/function-bind-native */ "./node_modules/core-js-pure/internals/function-bind-native.js"); + +var FunctionPrototype = Function.prototype; +var call = FunctionPrototype.call; +var uncurryThisWithBind = NATIVE_BIND && FunctionPrototype.bind.bind(call, call); + +module.exports = NATIVE_BIND ? uncurryThisWithBind : function (fn) { + return function () { + return call.apply(fn, arguments); + }; +}; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/get-built-in.js": +/*!*************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/get-built-in.js ***! + \*************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var path = __webpack_require__(/*! ../internals/path */ "./node_modules/core-js-pure/internals/path.js"); +var globalThis = __webpack_require__(/*! ../internals/global-this */ "./node_modules/core-js-pure/internals/global-this.js"); +var isCallable = __webpack_require__(/*! ../internals/is-callable */ "./node_modules/core-js-pure/internals/is-callable.js"); + +var aFunction = function (variable) { + return isCallable(variable) ? variable : undefined; +}; + +module.exports = function (namespace, method) { + return arguments.length < 2 ? aFunction(path[namespace]) || aFunction(globalThis[namespace]) + : path[namespace] && path[namespace][method] || globalThis[namespace] && globalThis[namespace][method]; +}; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/get-iterator-method.js": +/*!********************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/get-iterator-method.js ***! + \********************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var classof = __webpack_require__(/*! ../internals/classof */ "./node_modules/core-js-pure/internals/classof.js"); +var getMethod = __webpack_require__(/*! ../internals/get-method */ "./node_modules/core-js-pure/internals/get-method.js"); +var isNullOrUndefined = __webpack_require__(/*! ../internals/is-null-or-undefined */ "./node_modules/core-js-pure/internals/is-null-or-undefined.js"); +var Iterators = __webpack_require__(/*! ../internals/iterators */ "./node_modules/core-js-pure/internals/iterators.js"); +var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ "./node_modules/core-js-pure/internals/well-known-symbol.js"); + +var ITERATOR = wellKnownSymbol('iterator'); + +module.exports = function (it) { + if (!isNullOrUndefined(it)) return getMethod(it, ITERATOR) + || getMethod(it, '@@iterator') + || Iterators[classof(it)]; +}; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/get-iterator.js": +/*!*************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/get-iterator.js ***! + \*************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var call = __webpack_require__(/*! ../internals/function-call */ "./node_modules/core-js-pure/internals/function-call.js"); +var aCallable = __webpack_require__(/*! ../internals/a-callable */ "./node_modules/core-js-pure/internals/a-callable.js"); +var anObject = __webpack_require__(/*! ../internals/an-object */ "./node_modules/core-js-pure/internals/an-object.js"); +var tryToString = __webpack_require__(/*! ../internals/try-to-string */ "./node_modules/core-js-pure/internals/try-to-string.js"); +var getIteratorMethod = __webpack_require__(/*! ../internals/get-iterator-method */ "./node_modules/core-js-pure/internals/get-iterator-method.js"); + +var $TypeError = TypeError; + +module.exports = function (argument, usingIterator) { + var iteratorMethod = arguments.length < 2 ? getIteratorMethod(argument) : usingIterator; + if (aCallable(iteratorMethod)) return anObject(call(iteratorMethod, argument)); + throw new $TypeError(tryToString(argument) + ' is not iterable'); +}; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/get-method.js": +/*!***********************************************************!*\ + !*** ./node_modules/core-js-pure/internals/get-method.js ***! + \***********************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var aCallable = __webpack_require__(/*! ../internals/a-callable */ "./node_modules/core-js-pure/internals/a-callable.js"); +var isNullOrUndefined = __webpack_require__(/*! ../internals/is-null-or-undefined */ "./node_modules/core-js-pure/internals/is-null-or-undefined.js"); + +// `GetMethod` abstract operation +// https://tc39.es/ecma262/#sec-getmethod +module.exports = function (V, P) { + var func = V[P]; + return isNullOrUndefined(func) ? undefined : aCallable(func); +}; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/global-this.js": +/*!************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/global-this.js ***! + \************************************************************/ +/***/ (function(module) { + +"use strict"; + +var check = function (it) { + return it && it.Math === Math && it; +}; + +// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028 +module.exports = + // eslint-disable-next-line es/no-global-this -- safe + check(typeof globalThis == 'object' && globalThis) || + check(typeof window == 'object' && window) || + // eslint-disable-next-line no-restricted-globals -- safe + check(typeof self == 'object' && self) || + check(typeof global == 'object' && global) || + check(typeof this == 'object' && this) || + // eslint-disable-next-line no-new-func -- fallback + (function () { return this; })() || Function('return this')(); + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/has-own-property.js": +/*!*****************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/has-own-property.js ***! + \*****************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var uncurryThis = __webpack_require__(/*! ../internals/function-uncurry-this */ "./node_modules/core-js-pure/internals/function-uncurry-this.js"); +var toObject = __webpack_require__(/*! ../internals/to-object */ "./node_modules/core-js-pure/internals/to-object.js"); + +var hasOwnProperty = uncurryThis({}.hasOwnProperty); + +// `HasOwnProperty` abstract operation +// https://tc39.es/ecma262/#sec-hasownproperty +// eslint-disable-next-line es/no-object-hasown -- safe +module.exports = Object.hasOwn || function hasOwn(it, key) { + return hasOwnProperty(toObject(it), key); +}; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/hidden-keys.js": +/*!************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/hidden-keys.js ***! + \************************************************************/ +/***/ ((module) => { + +"use strict"; + +module.exports = {}; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/host-report-errors.js": +/*!*******************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/host-report-errors.js ***! + \*******************************************************************/ +/***/ ((module) => { + +"use strict"; + +module.exports = function (a, b) { + try { + // eslint-disable-next-line no-console -- safe + arguments.length === 1 ? console.error(a) : console.error(a, b); + } catch (error) { /* empty */ } +}; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/html.js": +/*!*****************************************************!*\ + !*** ./node_modules/core-js-pure/internals/html.js ***! + \*****************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var getBuiltIn = __webpack_require__(/*! ../internals/get-built-in */ "./node_modules/core-js-pure/internals/get-built-in.js"); + +module.exports = getBuiltIn('document', 'documentElement'); + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/ie8-dom-define.js": +/*!***************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/ie8-dom-define.js ***! + \***************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ "./node_modules/core-js-pure/internals/descriptors.js"); +var fails = __webpack_require__(/*! ../internals/fails */ "./node_modules/core-js-pure/internals/fails.js"); +var createElement = __webpack_require__(/*! ../internals/document-create-element */ "./node_modules/core-js-pure/internals/document-create-element.js"); + +// Thanks to IE8 for its funny defineProperty +module.exports = !DESCRIPTORS && !fails(function () { + // eslint-disable-next-line es/no-object-defineproperty -- required for testing + return Object.defineProperty(createElement('div'), 'a', { + get: function () { return 7; } + }).a !== 7; +}); + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/indexed-object.js": +/*!***************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/indexed-object.js ***! + \***************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var uncurryThis = __webpack_require__(/*! ../internals/function-uncurry-this */ "./node_modules/core-js-pure/internals/function-uncurry-this.js"); +var fails = __webpack_require__(/*! ../internals/fails */ "./node_modules/core-js-pure/internals/fails.js"); +var classof = __webpack_require__(/*! ../internals/classof-raw */ "./node_modules/core-js-pure/internals/classof-raw.js"); + +var $Object = Object; +var split = uncurryThis(''.split); + +// fallback for non-array-like ES3 and non-enumerable old V8 strings +module.exports = fails(function () { + // throws an error in rhino, see https://github.com/mozilla/rhino/issues/346 + // eslint-disable-next-line no-prototype-builtins -- safe + return !$Object('z').propertyIsEnumerable(0); +}) ? function (it) { + return classof(it) === 'String' ? split(it, '') : $Object(it); +} : $Object; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/inspect-source.js": +/*!***************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/inspect-source.js ***! + \***************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var uncurryThis = __webpack_require__(/*! ../internals/function-uncurry-this */ "./node_modules/core-js-pure/internals/function-uncurry-this.js"); +var isCallable = __webpack_require__(/*! ../internals/is-callable */ "./node_modules/core-js-pure/internals/is-callable.js"); +var store = __webpack_require__(/*! ../internals/shared-store */ "./node_modules/core-js-pure/internals/shared-store.js"); + +var functionToString = uncurryThis(Function.toString); + +// this helper broken in `core-js@3.4.1-3.4.4`, so we can't use `shared` helper +if (!isCallable(store.inspectSource)) { + store.inspectSource = function (it) { + return functionToString(it); + }; +} + +module.exports = store.inspectSource; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/install-error-cause.js": +/*!********************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/install-error-cause.js ***! + \********************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var isObject = __webpack_require__(/*! ../internals/is-object */ "./node_modules/core-js-pure/internals/is-object.js"); +var createNonEnumerableProperty = __webpack_require__(/*! ../internals/create-non-enumerable-property */ "./node_modules/core-js-pure/internals/create-non-enumerable-property.js"); + +// `InstallErrorCause` abstract operation +// https://tc39.es/proposal-error-cause/#sec-errorobjects-install-error-cause +module.exports = function (O, options) { + if (isObject(options) && 'cause' in options) { + createNonEnumerableProperty(O, 'cause', options.cause); + } +}; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/internal-state.js": +/*!***************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/internal-state.js ***! + \***************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var NATIVE_WEAK_MAP = __webpack_require__(/*! ../internals/weak-map-basic-detection */ "./node_modules/core-js-pure/internals/weak-map-basic-detection.js"); +var globalThis = __webpack_require__(/*! ../internals/global-this */ "./node_modules/core-js-pure/internals/global-this.js"); +var isObject = __webpack_require__(/*! ../internals/is-object */ "./node_modules/core-js-pure/internals/is-object.js"); +var createNonEnumerableProperty = __webpack_require__(/*! ../internals/create-non-enumerable-property */ "./node_modules/core-js-pure/internals/create-non-enumerable-property.js"); +var hasOwn = __webpack_require__(/*! ../internals/has-own-property */ "./node_modules/core-js-pure/internals/has-own-property.js"); +var shared = __webpack_require__(/*! ../internals/shared-store */ "./node_modules/core-js-pure/internals/shared-store.js"); +var sharedKey = __webpack_require__(/*! ../internals/shared-key */ "./node_modules/core-js-pure/internals/shared-key.js"); +var hiddenKeys = __webpack_require__(/*! ../internals/hidden-keys */ "./node_modules/core-js-pure/internals/hidden-keys.js"); + +var OBJECT_ALREADY_INITIALIZED = 'Object already initialized'; +var TypeError = globalThis.TypeError; +var WeakMap = globalThis.WeakMap; +var set, get, has; + +var enforce = function (it) { + return has(it) ? get(it) : set(it, {}); +}; + +var getterFor = function (TYPE) { + return function (it) { + var state; + if (!isObject(it) || (state = get(it)).type !== TYPE) { + throw new TypeError('Incompatible receiver, ' + TYPE + ' required'); + } return state; + }; +}; + +if (NATIVE_WEAK_MAP || shared.state) { + var store = shared.state || (shared.state = new WeakMap()); + /* eslint-disable no-self-assign -- prototype methods protection */ + store.get = store.get; + store.has = store.has; + store.set = store.set; + /* eslint-enable no-self-assign -- prototype methods protection */ + set = function (it, metadata) { + if (store.has(it)) throw new TypeError(OBJECT_ALREADY_INITIALIZED); + metadata.facade = it; + store.set(it, metadata); + return metadata; + }; + get = function (it) { + return store.get(it) || {}; + }; + has = function (it) { + return store.has(it); + }; +} else { + var STATE = sharedKey('state'); + hiddenKeys[STATE] = true; + set = function (it, metadata) { + if (hasOwn(it, STATE)) throw new TypeError(OBJECT_ALREADY_INITIALIZED); + metadata.facade = it; + createNonEnumerableProperty(it, STATE, metadata); + return metadata; + }; + get = function (it) { + return hasOwn(it, STATE) ? it[STATE] : {}; + }; + has = function (it) { + return hasOwn(it, STATE); + }; +} + +module.exports = { + set: set, + get: get, + has: has, + enforce: enforce, + getterFor: getterFor +}; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/is-array-iterator-method.js": +/*!*************************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/is-array-iterator-method.js ***! + \*************************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ "./node_modules/core-js-pure/internals/well-known-symbol.js"); +var Iterators = __webpack_require__(/*! ../internals/iterators */ "./node_modules/core-js-pure/internals/iterators.js"); + +var ITERATOR = wellKnownSymbol('iterator'); +var ArrayPrototype = Array.prototype; + +// check on default Array iterator +module.exports = function (it) { + return it !== undefined && (Iterators.Array === it || ArrayPrototype[ITERATOR] === it); +}; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/is-callable.js": +/*!************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/is-callable.js ***! + \************************************************************/ +/***/ ((module) => { + +"use strict"; + +// https://tc39.es/ecma262/#sec-IsHTMLDDA-internal-slot +var documentAll = typeof document == 'object' && document.all; + +// `IsCallable` abstract operation +// https://tc39.es/ecma262/#sec-iscallable +// eslint-disable-next-line unicorn/no-typeof-undefined -- required for testing +module.exports = typeof documentAll == 'undefined' && documentAll !== undefined ? function (argument) { + return typeof argument == 'function' || argument === documentAll; +} : function (argument) { + return typeof argument == 'function'; +}; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/is-constructor.js": +/*!***************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/is-constructor.js ***! + \***************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var uncurryThis = __webpack_require__(/*! ../internals/function-uncurry-this */ "./node_modules/core-js-pure/internals/function-uncurry-this.js"); +var fails = __webpack_require__(/*! ../internals/fails */ "./node_modules/core-js-pure/internals/fails.js"); +var isCallable = __webpack_require__(/*! ../internals/is-callable */ "./node_modules/core-js-pure/internals/is-callable.js"); +var classof = __webpack_require__(/*! ../internals/classof */ "./node_modules/core-js-pure/internals/classof.js"); +var getBuiltIn = __webpack_require__(/*! ../internals/get-built-in */ "./node_modules/core-js-pure/internals/get-built-in.js"); +var inspectSource = __webpack_require__(/*! ../internals/inspect-source */ "./node_modules/core-js-pure/internals/inspect-source.js"); + +var noop = function () { /* empty */ }; +var construct = getBuiltIn('Reflect', 'construct'); +var constructorRegExp = /^\s*(?:class|function)\b/; +var exec = uncurryThis(constructorRegExp.exec); +var INCORRECT_TO_STRING = !constructorRegExp.test(noop); + +var isConstructorModern = function isConstructor(argument) { + if (!isCallable(argument)) return false; + try { + construct(noop, [], argument); + return true; + } catch (error) { + return false; + } +}; + +var isConstructorLegacy = function isConstructor(argument) { + if (!isCallable(argument)) return false; + switch (classof(argument)) { + case 'AsyncFunction': + case 'GeneratorFunction': + case 'AsyncGeneratorFunction': return false; + } + try { + // we can't check .prototype since constructors produced by .bind haven't it + // `Function#toString` throws on some built-it function in some legacy engines + // (for example, `DOMQuad` and similar in FF41-) + return INCORRECT_TO_STRING || !!exec(constructorRegExp, inspectSource(argument)); + } catch (error) { + return true; + } +}; + +isConstructorLegacy.sham = true; + +// `IsConstructor` abstract operation +// https://tc39.es/ecma262/#sec-isconstructor +module.exports = !construct || fails(function () { + var called; + return isConstructorModern(isConstructorModern.call) + || !isConstructorModern(Object) + || !isConstructorModern(function () { called = true; }) + || called; +}) ? isConstructorLegacy : isConstructorModern; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/is-forced.js": +/*!**********************************************************!*\ + !*** ./node_modules/core-js-pure/internals/is-forced.js ***! + \**********************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var fails = __webpack_require__(/*! ../internals/fails */ "./node_modules/core-js-pure/internals/fails.js"); +var isCallable = __webpack_require__(/*! ../internals/is-callable */ "./node_modules/core-js-pure/internals/is-callable.js"); + +var replacement = /#|\.prototype\./; + +var isForced = function (feature, detection) { + var value = data[normalize(feature)]; + return value === POLYFILL ? true + : value === NATIVE ? false + : isCallable(detection) ? fails(detection) + : !!detection; +}; + +var normalize = isForced.normalize = function (string) { + return String(string).replace(replacement, '.').toLowerCase(); +}; + +var data = isForced.data = {}; +var NATIVE = isForced.NATIVE = 'N'; +var POLYFILL = isForced.POLYFILL = 'P'; + +module.exports = isForced; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/is-null-or-undefined.js": +/*!*********************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/is-null-or-undefined.js ***! + \*********************************************************************/ +/***/ ((module) => { + +"use strict"; + +// we can't use just `it == null` since of `document.all` special case +// https://tc39.es/ecma262/#sec-IsHTMLDDA-internal-slot-aec +module.exports = function (it) { + return it === null || it === undefined; +}; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/is-object.js": +/*!**********************************************************!*\ + !*** ./node_modules/core-js-pure/internals/is-object.js ***! + \**********************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var isCallable = __webpack_require__(/*! ../internals/is-callable */ "./node_modules/core-js-pure/internals/is-callable.js"); + +module.exports = function (it) { + return typeof it == 'object' ? it !== null : isCallable(it); +}; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/is-possible-prototype.js": +/*!**********************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/is-possible-prototype.js ***! + \**********************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var isObject = __webpack_require__(/*! ../internals/is-object */ "./node_modules/core-js-pure/internals/is-object.js"); + +module.exports = function (argument) { + return isObject(argument) || argument === null; +}; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/is-pure.js": +/*!********************************************************!*\ + !*** ./node_modules/core-js-pure/internals/is-pure.js ***! + \********************************************************/ +/***/ ((module) => { + +"use strict"; + +module.exports = true; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/is-symbol.js": +/*!**********************************************************!*\ + !*** ./node_modules/core-js-pure/internals/is-symbol.js ***! + \**********************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var getBuiltIn = __webpack_require__(/*! ../internals/get-built-in */ "./node_modules/core-js-pure/internals/get-built-in.js"); +var isCallable = __webpack_require__(/*! ../internals/is-callable */ "./node_modules/core-js-pure/internals/is-callable.js"); +var isPrototypeOf = __webpack_require__(/*! ../internals/object-is-prototype-of */ "./node_modules/core-js-pure/internals/object-is-prototype-of.js"); +var USE_SYMBOL_AS_UID = __webpack_require__(/*! ../internals/use-symbol-as-uid */ "./node_modules/core-js-pure/internals/use-symbol-as-uid.js"); + +var $Object = Object; + +module.exports = USE_SYMBOL_AS_UID ? function (it) { + return typeof it == 'symbol'; +} : function (it) { + var $Symbol = getBuiltIn('Symbol'); + return isCallable($Symbol) && isPrototypeOf($Symbol.prototype, $Object(it)); +}; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/iterate.js": +/*!********************************************************!*\ + !*** ./node_modules/core-js-pure/internals/iterate.js ***! + \********************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var bind = __webpack_require__(/*! ../internals/function-bind-context */ "./node_modules/core-js-pure/internals/function-bind-context.js"); +var call = __webpack_require__(/*! ../internals/function-call */ "./node_modules/core-js-pure/internals/function-call.js"); +var anObject = __webpack_require__(/*! ../internals/an-object */ "./node_modules/core-js-pure/internals/an-object.js"); +var tryToString = __webpack_require__(/*! ../internals/try-to-string */ "./node_modules/core-js-pure/internals/try-to-string.js"); +var isArrayIteratorMethod = __webpack_require__(/*! ../internals/is-array-iterator-method */ "./node_modules/core-js-pure/internals/is-array-iterator-method.js"); +var lengthOfArrayLike = __webpack_require__(/*! ../internals/length-of-array-like */ "./node_modules/core-js-pure/internals/length-of-array-like.js"); +var isPrototypeOf = __webpack_require__(/*! ../internals/object-is-prototype-of */ "./node_modules/core-js-pure/internals/object-is-prototype-of.js"); +var getIterator = __webpack_require__(/*! ../internals/get-iterator */ "./node_modules/core-js-pure/internals/get-iterator.js"); +var getIteratorMethod = __webpack_require__(/*! ../internals/get-iterator-method */ "./node_modules/core-js-pure/internals/get-iterator-method.js"); +var iteratorClose = __webpack_require__(/*! ../internals/iterator-close */ "./node_modules/core-js-pure/internals/iterator-close.js"); + +var $TypeError = TypeError; + +var Result = function (stopped, result) { + this.stopped = stopped; + this.result = result; +}; + +var ResultPrototype = Result.prototype; + +module.exports = function (iterable, unboundFunction, options) { + var that = options && options.that; + var AS_ENTRIES = !!(options && options.AS_ENTRIES); + var IS_RECORD = !!(options && options.IS_RECORD); + var IS_ITERATOR = !!(options && options.IS_ITERATOR); + var INTERRUPTED = !!(options && options.INTERRUPTED); + var fn = bind(unboundFunction, that); + var iterator, iterFn, index, length, result, next, step; + + var stop = function (condition) { + if (iterator) iteratorClose(iterator, 'normal', condition); + return new Result(true, condition); + }; + + var callFn = function (value) { + if (AS_ENTRIES) { + anObject(value); + return INTERRUPTED ? fn(value[0], value[1], stop) : fn(value[0], value[1]); + } return INTERRUPTED ? fn(value, stop) : fn(value); + }; + + if (IS_RECORD) { + iterator = iterable.iterator; + } else if (IS_ITERATOR) { + iterator = iterable; + } else { + iterFn = getIteratorMethod(iterable); + if (!iterFn) throw new $TypeError(tryToString(iterable) + ' is not iterable'); + // optimisation for array iterators + if (isArrayIteratorMethod(iterFn)) { + for (index = 0, length = lengthOfArrayLike(iterable); length > index; index++) { + result = callFn(iterable[index]); + if (result && isPrototypeOf(ResultPrototype, result)) return result; + } return new Result(false); + } + iterator = getIterator(iterable, iterFn); + } + + next = IS_RECORD ? iterable.next : iterator.next; + while (!(step = call(next, iterator)).done) { + try { + result = callFn(step.value); + } catch (error) { + iteratorClose(iterator, 'throw', error); + } + if (typeof result == 'object' && result && isPrototypeOf(ResultPrototype, result)) return result; + } return new Result(false); +}; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/iterator-close.js": +/*!***************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/iterator-close.js ***! + \***************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var call = __webpack_require__(/*! ../internals/function-call */ "./node_modules/core-js-pure/internals/function-call.js"); +var anObject = __webpack_require__(/*! ../internals/an-object */ "./node_modules/core-js-pure/internals/an-object.js"); +var getMethod = __webpack_require__(/*! ../internals/get-method */ "./node_modules/core-js-pure/internals/get-method.js"); + +module.exports = function (iterator, kind, value) { + var innerResult, innerError; + anObject(iterator); + try { + innerResult = getMethod(iterator, 'return'); + if (!innerResult) { + if (kind === 'throw') throw value; + return value; + } + innerResult = call(innerResult, iterator); + } catch (error) { + innerError = true; + innerResult = error; + } + if (kind === 'throw') throw value; + if (innerError) throw innerResult; + anObject(innerResult); + return value; +}; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/iterator-create-constructor.js": +/*!****************************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/iterator-create-constructor.js ***! + \****************************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var IteratorPrototype = (__webpack_require__(/*! ../internals/iterators-core */ "./node_modules/core-js-pure/internals/iterators-core.js").IteratorPrototype); +var create = __webpack_require__(/*! ../internals/object-create */ "./node_modules/core-js-pure/internals/object-create.js"); +var createPropertyDescriptor = __webpack_require__(/*! ../internals/create-property-descriptor */ "./node_modules/core-js-pure/internals/create-property-descriptor.js"); +var setToStringTag = __webpack_require__(/*! ../internals/set-to-string-tag */ "./node_modules/core-js-pure/internals/set-to-string-tag.js"); +var Iterators = __webpack_require__(/*! ../internals/iterators */ "./node_modules/core-js-pure/internals/iterators.js"); + +var returnThis = function () { return this; }; + +module.exports = function (IteratorConstructor, NAME, next, ENUMERABLE_NEXT) { + var TO_STRING_TAG = NAME + ' Iterator'; + IteratorConstructor.prototype = create(IteratorPrototype, { next: createPropertyDescriptor(+!ENUMERABLE_NEXT, next) }); + setToStringTag(IteratorConstructor, TO_STRING_TAG, false, true); + Iterators[TO_STRING_TAG] = returnThis; + return IteratorConstructor; +}; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/iterator-define.js": +/*!****************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/iterator-define.js ***! + \****************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var $ = __webpack_require__(/*! ../internals/export */ "./node_modules/core-js-pure/internals/export.js"); +var call = __webpack_require__(/*! ../internals/function-call */ "./node_modules/core-js-pure/internals/function-call.js"); +var IS_PURE = __webpack_require__(/*! ../internals/is-pure */ "./node_modules/core-js-pure/internals/is-pure.js"); +var FunctionName = __webpack_require__(/*! ../internals/function-name */ "./node_modules/core-js-pure/internals/function-name.js"); +var isCallable = __webpack_require__(/*! ../internals/is-callable */ "./node_modules/core-js-pure/internals/is-callable.js"); +var createIteratorConstructor = __webpack_require__(/*! ../internals/iterator-create-constructor */ "./node_modules/core-js-pure/internals/iterator-create-constructor.js"); +var getPrototypeOf = __webpack_require__(/*! ../internals/object-get-prototype-of */ "./node_modules/core-js-pure/internals/object-get-prototype-of.js"); +var setPrototypeOf = __webpack_require__(/*! ../internals/object-set-prototype-of */ "./node_modules/core-js-pure/internals/object-set-prototype-of.js"); +var setToStringTag = __webpack_require__(/*! ../internals/set-to-string-tag */ "./node_modules/core-js-pure/internals/set-to-string-tag.js"); +var createNonEnumerableProperty = __webpack_require__(/*! ../internals/create-non-enumerable-property */ "./node_modules/core-js-pure/internals/create-non-enumerable-property.js"); +var defineBuiltIn = __webpack_require__(/*! ../internals/define-built-in */ "./node_modules/core-js-pure/internals/define-built-in.js"); +var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ "./node_modules/core-js-pure/internals/well-known-symbol.js"); +var Iterators = __webpack_require__(/*! ../internals/iterators */ "./node_modules/core-js-pure/internals/iterators.js"); +var IteratorsCore = __webpack_require__(/*! ../internals/iterators-core */ "./node_modules/core-js-pure/internals/iterators-core.js"); + +var PROPER_FUNCTION_NAME = FunctionName.PROPER; +var CONFIGURABLE_FUNCTION_NAME = FunctionName.CONFIGURABLE; +var IteratorPrototype = IteratorsCore.IteratorPrototype; +var BUGGY_SAFARI_ITERATORS = IteratorsCore.BUGGY_SAFARI_ITERATORS; +var ITERATOR = wellKnownSymbol('iterator'); +var KEYS = 'keys'; +var VALUES = 'values'; +var ENTRIES = 'entries'; + +var returnThis = function () { return this; }; + +module.exports = function (Iterable, NAME, IteratorConstructor, next, DEFAULT, IS_SET, FORCED) { + createIteratorConstructor(IteratorConstructor, NAME, next); + + var getIterationMethod = function (KIND) { + if (KIND === DEFAULT && defaultIterator) return defaultIterator; + if (!BUGGY_SAFARI_ITERATORS && KIND && KIND in IterablePrototype) return IterablePrototype[KIND]; + + switch (KIND) { + case KEYS: return function keys() { return new IteratorConstructor(this, KIND); }; + case VALUES: return function values() { return new IteratorConstructor(this, KIND); }; + case ENTRIES: return function entries() { return new IteratorConstructor(this, KIND); }; + } + + return function () { return new IteratorConstructor(this); }; + }; + + var TO_STRING_TAG = NAME + ' Iterator'; + var INCORRECT_VALUES_NAME = false; + var IterablePrototype = Iterable.prototype; + var nativeIterator = IterablePrototype[ITERATOR] + || IterablePrototype['@@iterator'] + || DEFAULT && IterablePrototype[DEFAULT]; + var defaultIterator = !BUGGY_SAFARI_ITERATORS && nativeIterator || getIterationMethod(DEFAULT); + var anyNativeIterator = NAME === 'Array' ? IterablePrototype.entries || nativeIterator : nativeIterator; + var CurrentIteratorPrototype, methods, KEY; + + // fix native + if (anyNativeIterator) { + CurrentIteratorPrototype = getPrototypeOf(anyNativeIterator.call(new Iterable())); + if (CurrentIteratorPrototype !== Object.prototype && CurrentIteratorPrototype.next) { + if (!IS_PURE && getPrototypeOf(CurrentIteratorPrototype) !== IteratorPrototype) { + if (setPrototypeOf) { + setPrototypeOf(CurrentIteratorPrototype, IteratorPrototype); + } else if (!isCallable(CurrentIteratorPrototype[ITERATOR])) { + defineBuiltIn(CurrentIteratorPrototype, ITERATOR, returnThis); + } + } + // Set @@toStringTag to native iterators + setToStringTag(CurrentIteratorPrototype, TO_STRING_TAG, true, true); + if (IS_PURE) Iterators[TO_STRING_TAG] = returnThis; + } + } + + // fix Array.prototype.{ values, @@iterator }.name in V8 / FF + if (PROPER_FUNCTION_NAME && DEFAULT === VALUES && nativeIterator && nativeIterator.name !== VALUES) { + if (!IS_PURE && CONFIGURABLE_FUNCTION_NAME) { + createNonEnumerableProperty(IterablePrototype, 'name', VALUES); + } else { + INCORRECT_VALUES_NAME = true; + defaultIterator = function values() { return call(nativeIterator, this); }; + } + } + + // export additional methods + if (DEFAULT) { + methods = { + values: getIterationMethod(VALUES), + keys: IS_SET ? defaultIterator : getIterationMethod(KEYS), + entries: getIterationMethod(ENTRIES) + }; + if (FORCED) for (KEY in methods) { + if (BUGGY_SAFARI_ITERATORS || INCORRECT_VALUES_NAME || !(KEY in IterablePrototype)) { + defineBuiltIn(IterablePrototype, KEY, methods[KEY]); + } + } else $({ target: NAME, proto: true, forced: BUGGY_SAFARI_ITERATORS || INCORRECT_VALUES_NAME }, methods); + } + + // define iterator + if ((!IS_PURE || FORCED) && IterablePrototype[ITERATOR] !== defaultIterator) { + defineBuiltIn(IterablePrototype, ITERATOR, defaultIterator, { name: DEFAULT }); + } + Iterators[NAME] = defaultIterator; + + return methods; +}; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/iterators-core.js": +/*!***************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/iterators-core.js ***! + \***************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var fails = __webpack_require__(/*! ../internals/fails */ "./node_modules/core-js-pure/internals/fails.js"); +var isCallable = __webpack_require__(/*! ../internals/is-callable */ "./node_modules/core-js-pure/internals/is-callable.js"); +var isObject = __webpack_require__(/*! ../internals/is-object */ "./node_modules/core-js-pure/internals/is-object.js"); +var create = __webpack_require__(/*! ../internals/object-create */ "./node_modules/core-js-pure/internals/object-create.js"); +var getPrototypeOf = __webpack_require__(/*! ../internals/object-get-prototype-of */ "./node_modules/core-js-pure/internals/object-get-prototype-of.js"); +var defineBuiltIn = __webpack_require__(/*! ../internals/define-built-in */ "./node_modules/core-js-pure/internals/define-built-in.js"); +var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ "./node_modules/core-js-pure/internals/well-known-symbol.js"); +var IS_PURE = __webpack_require__(/*! ../internals/is-pure */ "./node_modules/core-js-pure/internals/is-pure.js"); + +var ITERATOR = wellKnownSymbol('iterator'); +var BUGGY_SAFARI_ITERATORS = false; + +// `%IteratorPrototype%` object +// https://tc39.es/ecma262/#sec-%iteratorprototype%-object +var IteratorPrototype, PrototypeOfArrayIteratorPrototype, arrayIterator; + +/* eslint-disable es/no-array-prototype-keys -- safe */ +if ([].keys) { + arrayIterator = [].keys(); + // Safari 8 has buggy iterators w/o `next` + if (!('next' in arrayIterator)) BUGGY_SAFARI_ITERATORS = true; + else { + PrototypeOfArrayIteratorPrototype = getPrototypeOf(getPrototypeOf(arrayIterator)); + if (PrototypeOfArrayIteratorPrototype !== Object.prototype) IteratorPrototype = PrototypeOfArrayIteratorPrototype; + } +} + +var NEW_ITERATOR_PROTOTYPE = !isObject(IteratorPrototype) || fails(function () { + var test = {}; + // FF44- legacy iterators case + return IteratorPrototype[ITERATOR].call(test) !== test; +}); + +if (NEW_ITERATOR_PROTOTYPE) IteratorPrototype = {}; +else if (IS_PURE) IteratorPrototype = create(IteratorPrototype); + +// `%IteratorPrototype%[@@iterator]()` method +// https://tc39.es/ecma262/#sec-%iteratorprototype%-@@iterator +if (!isCallable(IteratorPrototype[ITERATOR])) { + defineBuiltIn(IteratorPrototype, ITERATOR, function () { + return this; + }); +} + +module.exports = { + IteratorPrototype: IteratorPrototype, + BUGGY_SAFARI_ITERATORS: BUGGY_SAFARI_ITERATORS +}; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/iterators.js": +/*!**********************************************************!*\ + !*** ./node_modules/core-js-pure/internals/iterators.js ***! + \**********************************************************/ +/***/ ((module) => { + +"use strict"; + +module.exports = {}; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/length-of-array-like.js": +/*!*********************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/length-of-array-like.js ***! + \*********************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var toLength = __webpack_require__(/*! ../internals/to-length */ "./node_modules/core-js-pure/internals/to-length.js"); + +// `LengthOfArrayLike` abstract operation +// https://tc39.es/ecma262/#sec-lengthofarraylike +module.exports = function (obj) { + return toLength(obj.length); +}; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/math-trunc.js": +/*!***********************************************************!*\ + !*** ./node_modules/core-js-pure/internals/math-trunc.js ***! + \***********************************************************/ +/***/ ((module) => { + +"use strict"; + +var ceil = Math.ceil; +var floor = Math.floor; + +// `Math.trunc` method +// https://tc39.es/ecma262/#sec-math.trunc +// eslint-disable-next-line es/no-math-trunc -- safe +module.exports = Math.trunc || function trunc(x) { + var n = +x; + return (n > 0 ? floor : ceil)(n); +}; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/microtask.js": +/*!**********************************************************!*\ + !*** ./node_modules/core-js-pure/internals/microtask.js ***! + \**********************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var globalThis = __webpack_require__(/*! ../internals/global-this */ "./node_modules/core-js-pure/internals/global-this.js"); +var safeGetBuiltIn = __webpack_require__(/*! ../internals/safe-get-built-in */ "./node_modules/core-js-pure/internals/safe-get-built-in.js"); +var bind = __webpack_require__(/*! ../internals/function-bind-context */ "./node_modules/core-js-pure/internals/function-bind-context.js"); +var macrotask = (__webpack_require__(/*! ../internals/task */ "./node_modules/core-js-pure/internals/task.js").set); +var Queue = __webpack_require__(/*! ../internals/queue */ "./node_modules/core-js-pure/internals/queue.js"); +var IS_IOS = __webpack_require__(/*! ../internals/environment-is-ios */ "./node_modules/core-js-pure/internals/environment-is-ios.js"); +var IS_IOS_PEBBLE = __webpack_require__(/*! ../internals/environment-is-ios-pebble */ "./node_modules/core-js-pure/internals/environment-is-ios-pebble.js"); +var IS_WEBOS_WEBKIT = __webpack_require__(/*! ../internals/environment-is-webos-webkit */ "./node_modules/core-js-pure/internals/environment-is-webos-webkit.js"); +var IS_NODE = __webpack_require__(/*! ../internals/environment-is-node */ "./node_modules/core-js-pure/internals/environment-is-node.js"); + +var MutationObserver = globalThis.MutationObserver || globalThis.WebKitMutationObserver; +var document = globalThis.document; +var process = globalThis.process; +var Promise = globalThis.Promise; +var microtask = safeGetBuiltIn('queueMicrotask'); +var notify, toggle, node, promise, then; + +// modern engines have queueMicrotask method +if (!microtask) { + var queue = new Queue(); + + var flush = function () { + var parent, fn; + if (IS_NODE && (parent = process.domain)) parent.exit(); + while (fn = queue.get()) try { + fn(); + } catch (error) { + if (queue.head) notify(); + throw error; + } + if (parent) parent.enter(); + }; + + // browsers with MutationObserver, except iOS - https://github.com/zloirock/core-js/issues/339 + // also except WebOS Webkit https://github.com/zloirock/core-js/issues/898 + if (!IS_IOS && !IS_NODE && !IS_WEBOS_WEBKIT && MutationObserver && document) { + toggle = true; + node = document.createTextNode(''); + new MutationObserver(flush).observe(node, { characterData: true }); + notify = function () { + node.data = toggle = !toggle; + }; + // environments with maybe non-completely correct, but existent Promise + } else if (!IS_IOS_PEBBLE && Promise && Promise.resolve) { + // Promise.resolve without an argument throws an error in LG WebOS 2 + promise = Promise.resolve(undefined); + // workaround of WebKit ~ iOS Safari 10.1 bug + promise.constructor = Promise; + then = bind(promise.then, promise); + notify = function () { + then(flush); + }; + // Node.js without promises + } else if (IS_NODE) { + notify = function () { + process.nextTick(flush); + }; + // for other environments - macrotask based on: + // - setImmediate + // - MessageChannel + // - window.postMessage + // - onreadystatechange + // - setTimeout + } else { + // `webpack` dev server bug on IE global methods - use bind(fn, global) + macrotask = bind(macrotask, globalThis); + notify = function () { + macrotask(flush); + }; + } + + microtask = function (fn) { + if (!queue.head) notify(); + queue.add(fn); + }; +} + +module.exports = microtask; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/new-promise-capability.js": +/*!***********************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/new-promise-capability.js ***! + \***********************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var aCallable = __webpack_require__(/*! ../internals/a-callable */ "./node_modules/core-js-pure/internals/a-callable.js"); + +var $TypeError = TypeError; + +var PromiseCapability = function (C) { + var resolve, reject; + this.promise = new C(function ($$resolve, $$reject) { + if (resolve !== undefined || reject !== undefined) throw new $TypeError('Bad Promise constructor'); + resolve = $$resolve; + reject = $$reject; + }); + this.resolve = aCallable(resolve); + this.reject = aCallable(reject); +}; + +// `NewPromiseCapability` abstract operation +// https://tc39.es/ecma262/#sec-newpromisecapability +module.exports.f = function (C) { + return new PromiseCapability(C); +}; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/normalize-string-argument.js": +/*!**************************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/normalize-string-argument.js ***! + \**************************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var toString = __webpack_require__(/*! ../internals/to-string */ "./node_modules/core-js-pure/internals/to-string.js"); + +module.exports = function (argument, $default) { + return argument === undefined ? arguments.length < 2 ? '' : $default : toString(argument); +}; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/object-create.js": +/*!**************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/object-create.js ***! + \**************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +/* global ActiveXObject -- old IE, WSH */ +var anObject = __webpack_require__(/*! ../internals/an-object */ "./node_modules/core-js-pure/internals/an-object.js"); +var definePropertiesModule = __webpack_require__(/*! ../internals/object-define-properties */ "./node_modules/core-js-pure/internals/object-define-properties.js"); +var enumBugKeys = __webpack_require__(/*! ../internals/enum-bug-keys */ "./node_modules/core-js-pure/internals/enum-bug-keys.js"); +var hiddenKeys = __webpack_require__(/*! ../internals/hidden-keys */ "./node_modules/core-js-pure/internals/hidden-keys.js"); +var html = __webpack_require__(/*! ../internals/html */ "./node_modules/core-js-pure/internals/html.js"); +var documentCreateElement = __webpack_require__(/*! ../internals/document-create-element */ "./node_modules/core-js-pure/internals/document-create-element.js"); +var sharedKey = __webpack_require__(/*! ../internals/shared-key */ "./node_modules/core-js-pure/internals/shared-key.js"); + +var GT = '>'; +var LT = '<'; +var PROTOTYPE = 'prototype'; +var SCRIPT = 'script'; +var IE_PROTO = sharedKey('IE_PROTO'); + +var EmptyConstructor = function () { /* empty */ }; + +var scriptTag = function (content) { + return LT + SCRIPT + GT + content + LT + '/' + SCRIPT + GT; +}; + +// Create object with fake `null` prototype: use ActiveX Object with cleared prototype +var NullProtoObjectViaActiveX = function (activeXDocument) { + activeXDocument.write(scriptTag('')); + activeXDocument.close(); + var temp = activeXDocument.parentWindow.Object; + // eslint-disable-next-line no-useless-assignment -- avoid memory leak + activeXDocument = null; + return temp; +}; + +// Create object with fake `null` prototype: use iframe Object with cleared prototype +var NullProtoObjectViaIFrame = function () { + // Thrash, waste and sodomy: IE GC bug + var iframe = documentCreateElement('iframe'); + var JS = 'java' + SCRIPT + ':'; + var iframeDocument; + iframe.style.display = 'none'; + html.appendChild(iframe); + // https://github.com/zloirock/core-js/issues/475 + iframe.src = String(JS); + iframeDocument = iframe.contentWindow.document; + iframeDocument.open(); + iframeDocument.write(scriptTag('document.F=Object')); + iframeDocument.close(); + return iframeDocument.F; +}; + +// Check for document.domain and active x support +// No need to use active x approach when document.domain is not set +// see https://github.com/es-shims/es5-shim/issues/150 +// variation of https://github.com/kitcambridge/es5-shim/commit/4f738ac066346 +// avoid IE GC bug +var activeXDocument; +var NullProtoObject = function () { + try { + activeXDocument = new ActiveXObject('htmlfile'); + } catch (error) { /* ignore */ } + NullProtoObject = typeof document != 'undefined' + ? document.domain && activeXDocument + ? NullProtoObjectViaActiveX(activeXDocument) // old IE + : NullProtoObjectViaIFrame() + : NullProtoObjectViaActiveX(activeXDocument); // WSH + var length = enumBugKeys.length; + while (length--) delete NullProtoObject[PROTOTYPE][enumBugKeys[length]]; + return NullProtoObject(); +}; + +hiddenKeys[IE_PROTO] = true; + +// `Object.create` method +// https://tc39.es/ecma262/#sec-object.create +// eslint-disable-next-line es/no-object-create -- safe +module.exports = Object.create || function create(O, Properties) { + var result; + if (O !== null) { + EmptyConstructor[PROTOTYPE] = anObject(O); + result = new EmptyConstructor(); + EmptyConstructor[PROTOTYPE] = null; + // add "__proto__" for Object.getPrototypeOf polyfill + result[IE_PROTO] = O; + } else result = NullProtoObject(); + return Properties === undefined ? result : definePropertiesModule.f(result, Properties); +}; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/object-define-properties.js": +/*!*************************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/object-define-properties.js ***! + \*************************************************************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + +"use strict"; + +var DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ "./node_modules/core-js-pure/internals/descriptors.js"); +var V8_PROTOTYPE_DEFINE_BUG = __webpack_require__(/*! ../internals/v8-prototype-define-bug */ "./node_modules/core-js-pure/internals/v8-prototype-define-bug.js"); +var definePropertyModule = __webpack_require__(/*! ../internals/object-define-property */ "./node_modules/core-js-pure/internals/object-define-property.js"); +var anObject = __webpack_require__(/*! ../internals/an-object */ "./node_modules/core-js-pure/internals/an-object.js"); +var toIndexedObject = __webpack_require__(/*! ../internals/to-indexed-object */ "./node_modules/core-js-pure/internals/to-indexed-object.js"); +var objectKeys = __webpack_require__(/*! ../internals/object-keys */ "./node_modules/core-js-pure/internals/object-keys.js"); + +// `Object.defineProperties` method +// https://tc39.es/ecma262/#sec-object.defineproperties +// eslint-disable-next-line es/no-object-defineproperties -- safe +exports.f = DESCRIPTORS && !V8_PROTOTYPE_DEFINE_BUG ? Object.defineProperties : function defineProperties(O, Properties) { + anObject(O); + var props = toIndexedObject(Properties); + var keys = objectKeys(Properties); + var length = keys.length; + var index = 0; + var key; + while (length > index) definePropertyModule.f(O, key = keys[index++], props[key]); + return O; +}; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/object-define-property.js": +/*!***********************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/object-define-property.js ***! + \***********************************************************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + +"use strict"; + +var DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ "./node_modules/core-js-pure/internals/descriptors.js"); +var IE8_DOM_DEFINE = __webpack_require__(/*! ../internals/ie8-dom-define */ "./node_modules/core-js-pure/internals/ie8-dom-define.js"); +var V8_PROTOTYPE_DEFINE_BUG = __webpack_require__(/*! ../internals/v8-prototype-define-bug */ "./node_modules/core-js-pure/internals/v8-prototype-define-bug.js"); +var anObject = __webpack_require__(/*! ../internals/an-object */ "./node_modules/core-js-pure/internals/an-object.js"); +var toPropertyKey = __webpack_require__(/*! ../internals/to-property-key */ "./node_modules/core-js-pure/internals/to-property-key.js"); + +var $TypeError = TypeError; +// eslint-disable-next-line es/no-object-defineproperty -- safe +var $defineProperty = Object.defineProperty; +// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe +var $getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor; +var ENUMERABLE = 'enumerable'; +var CONFIGURABLE = 'configurable'; +var WRITABLE = 'writable'; + +// `Object.defineProperty` method +// https://tc39.es/ecma262/#sec-object.defineproperty +exports.f = DESCRIPTORS ? V8_PROTOTYPE_DEFINE_BUG ? function defineProperty(O, P, Attributes) { + anObject(O); + P = toPropertyKey(P); + anObject(Attributes); + if (typeof O === 'function' && P === 'prototype' && 'value' in Attributes && WRITABLE in Attributes && !Attributes[WRITABLE]) { + var current = $getOwnPropertyDescriptor(O, P); + if (current && current[WRITABLE]) { + O[P] = Attributes.value; + Attributes = { + configurable: CONFIGURABLE in Attributes ? Attributes[CONFIGURABLE] : current[CONFIGURABLE], + enumerable: ENUMERABLE in Attributes ? Attributes[ENUMERABLE] : current[ENUMERABLE], + writable: false + }; + } + } return $defineProperty(O, P, Attributes); +} : $defineProperty : function defineProperty(O, P, Attributes) { + anObject(O); + P = toPropertyKey(P); + anObject(Attributes); + if (IE8_DOM_DEFINE) try { + return $defineProperty(O, P, Attributes); + } catch (error) { /* empty */ } + if ('get' in Attributes || 'set' in Attributes) throw new $TypeError('Accessors not supported'); + if ('value' in Attributes) O[P] = Attributes.value; + return O; +}; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/object-get-own-property-descriptor.js": +/*!***********************************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/object-get-own-property-descriptor.js ***! + \***********************************************************************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + +"use strict"; + +var DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ "./node_modules/core-js-pure/internals/descriptors.js"); +var call = __webpack_require__(/*! ../internals/function-call */ "./node_modules/core-js-pure/internals/function-call.js"); +var propertyIsEnumerableModule = __webpack_require__(/*! ../internals/object-property-is-enumerable */ "./node_modules/core-js-pure/internals/object-property-is-enumerable.js"); +var createPropertyDescriptor = __webpack_require__(/*! ../internals/create-property-descriptor */ "./node_modules/core-js-pure/internals/create-property-descriptor.js"); +var toIndexedObject = __webpack_require__(/*! ../internals/to-indexed-object */ "./node_modules/core-js-pure/internals/to-indexed-object.js"); +var toPropertyKey = __webpack_require__(/*! ../internals/to-property-key */ "./node_modules/core-js-pure/internals/to-property-key.js"); +var hasOwn = __webpack_require__(/*! ../internals/has-own-property */ "./node_modules/core-js-pure/internals/has-own-property.js"); +var IE8_DOM_DEFINE = __webpack_require__(/*! ../internals/ie8-dom-define */ "./node_modules/core-js-pure/internals/ie8-dom-define.js"); + +// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe +var $getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor; + +// `Object.getOwnPropertyDescriptor` method +// https://tc39.es/ecma262/#sec-object.getownpropertydescriptor +exports.f = DESCRIPTORS ? $getOwnPropertyDescriptor : function getOwnPropertyDescriptor(O, P) { + O = toIndexedObject(O); + P = toPropertyKey(P); + if (IE8_DOM_DEFINE) try { + return $getOwnPropertyDescriptor(O, P); + } catch (error) { /* empty */ } + if (hasOwn(O, P)) return createPropertyDescriptor(!call(propertyIsEnumerableModule.f, O, P), O[P]); +}; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/object-get-own-property-names.js": +/*!******************************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/object-get-own-property-names.js ***! + \******************************************************************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + +"use strict"; + +var internalObjectKeys = __webpack_require__(/*! ../internals/object-keys-internal */ "./node_modules/core-js-pure/internals/object-keys-internal.js"); +var enumBugKeys = __webpack_require__(/*! ../internals/enum-bug-keys */ "./node_modules/core-js-pure/internals/enum-bug-keys.js"); + +var hiddenKeys = enumBugKeys.concat('length', 'prototype'); + +// `Object.getOwnPropertyNames` method +// https://tc39.es/ecma262/#sec-object.getownpropertynames +// eslint-disable-next-line es/no-object-getownpropertynames -- safe +exports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) { + return internalObjectKeys(O, hiddenKeys); +}; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/object-get-own-property-symbols.js": +/*!********************************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/object-get-own-property-symbols.js ***! + \********************************************************************************/ +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; + +// eslint-disable-next-line es/no-object-getownpropertysymbols -- safe +exports.f = Object.getOwnPropertySymbols; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/object-get-prototype-of.js": +/*!************************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/object-get-prototype-of.js ***! + \************************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var hasOwn = __webpack_require__(/*! ../internals/has-own-property */ "./node_modules/core-js-pure/internals/has-own-property.js"); +var isCallable = __webpack_require__(/*! ../internals/is-callable */ "./node_modules/core-js-pure/internals/is-callable.js"); +var toObject = __webpack_require__(/*! ../internals/to-object */ "./node_modules/core-js-pure/internals/to-object.js"); +var sharedKey = __webpack_require__(/*! ../internals/shared-key */ "./node_modules/core-js-pure/internals/shared-key.js"); +var CORRECT_PROTOTYPE_GETTER = __webpack_require__(/*! ../internals/correct-prototype-getter */ "./node_modules/core-js-pure/internals/correct-prototype-getter.js"); + +var IE_PROTO = sharedKey('IE_PROTO'); +var $Object = Object; +var ObjectPrototype = $Object.prototype; + +// `Object.getPrototypeOf` method +// https://tc39.es/ecma262/#sec-object.getprototypeof +// eslint-disable-next-line es/no-object-getprototypeof -- safe +module.exports = CORRECT_PROTOTYPE_GETTER ? $Object.getPrototypeOf : function (O) { + var object = toObject(O); + if (hasOwn(object, IE_PROTO)) return object[IE_PROTO]; + var constructor = object.constructor; + if (isCallable(constructor) && object instanceof constructor) { + return constructor.prototype; + } return object instanceof $Object ? ObjectPrototype : null; +}; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/object-is-prototype-of.js": +/*!***********************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/object-is-prototype-of.js ***! + \***********************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var uncurryThis = __webpack_require__(/*! ../internals/function-uncurry-this */ "./node_modules/core-js-pure/internals/function-uncurry-this.js"); + +module.exports = uncurryThis({}.isPrototypeOf); + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/object-keys-internal.js": +/*!*********************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/object-keys-internal.js ***! + \*********************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var uncurryThis = __webpack_require__(/*! ../internals/function-uncurry-this */ "./node_modules/core-js-pure/internals/function-uncurry-this.js"); +var hasOwn = __webpack_require__(/*! ../internals/has-own-property */ "./node_modules/core-js-pure/internals/has-own-property.js"); +var toIndexedObject = __webpack_require__(/*! ../internals/to-indexed-object */ "./node_modules/core-js-pure/internals/to-indexed-object.js"); +var indexOf = (__webpack_require__(/*! ../internals/array-includes */ "./node_modules/core-js-pure/internals/array-includes.js").indexOf); +var hiddenKeys = __webpack_require__(/*! ../internals/hidden-keys */ "./node_modules/core-js-pure/internals/hidden-keys.js"); + +var push = uncurryThis([].push); + +module.exports = function (object, names) { + var O = toIndexedObject(object); + var i = 0; + var result = []; + var key; + for (key in O) !hasOwn(hiddenKeys, key) && hasOwn(O, key) && push(result, key); + // Don't enum bug & hidden keys + while (names.length > i) if (hasOwn(O, key = names[i++])) { + ~indexOf(result, key) || push(result, key); + } + return result; +}; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/object-keys.js": +/*!************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/object-keys.js ***! + \************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var internalObjectKeys = __webpack_require__(/*! ../internals/object-keys-internal */ "./node_modules/core-js-pure/internals/object-keys-internal.js"); +var enumBugKeys = __webpack_require__(/*! ../internals/enum-bug-keys */ "./node_modules/core-js-pure/internals/enum-bug-keys.js"); + +// `Object.keys` method +// https://tc39.es/ecma262/#sec-object.keys +// eslint-disable-next-line es/no-object-keys -- safe +module.exports = Object.keys || function keys(O) { + return internalObjectKeys(O, enumBugKeys); +}; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/object-property-is-enumerable.js": +/*!******************************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/object-property-is-enumerable.js ***! + \******************************************************************************/ +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; + +var $propertyIsEnumerable = {}.propertyIsEnumerable; +// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe +var getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor; + +// Nashorn ~ JDK8 bug +var NASHORN_BUG = getOwnPropertyDescriptor && !$propertyIsEnumerable.call({ 1: 2 }, 1); + +// `Object.prototype.propertyIsEnumerable` method implementation +// https://tc39.es/ecma262/#sec-object.prototype.propertyisenumerable +exports.f = NASHORN_BUG ? function propertyIsEnumerable(V) { + var descriptor = getOwnPropertyDescriptor(this, V); + return !!descriptor && descriptor.enumerable; +} : $propertyIsEnumerable; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/object-set-prototype-of.js": +/*!************************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/object-set-prototype-of.js ***! + \************************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +/* eslint-disable no-proto -- safe */ +var uncurryThisAccessor = __webpack_require__(/*! ../internals/function-uncurry-this-accessor */ "./node_modules/core-js-pure/internals/function-uncurry-this-accessor.js"); +var isObject = __webpack_require__(/*! ../internals/is-object */ "./node_modules/core-js-pure/internals/is-object.js"); +var requireObjectCoercible = __webpack_require__(/*! ../internals/require-object-coercible */ "./node_modules/core-js-pure/internals/require-object-coercible.js"); +var aPossiblePrototype = __webpack_require__(/*! ../internals/a-possible-prototype */ "./node_modules/core-js-pure/internals/a-possible-prototype.js"); + +// `Object.setPrototypeOf` method +// https://tc39.es/ecma262/#sec-object.setprototypeof +// Works with __proto__ only. Old v8 can't work with null proto objects. +// eslint-disable-next-line es/no-object-setprototypeof -- safe +module.exports = Object.setPrototypeOf || ('__proto__' in {} ? function () { + var CORRECT_SETTER = false; + var test = {}; + var setter; + try { + setter = uncurryThisAccessor(Object.prototype, '__proto__', 'set'); + setter(test, []); + CORRECT_SETTER = test instanceof Array; + } catch (error) { /* empty */ } + return function setPrototypeOf(O, proto) { + requireObjectCoercible(O); + aPossiblePrototype(proto); + if (!isObject(O)) return O; + if (CORRECT_SETTER) setter(O, proto); + else O.__proto__ = proto; + return O; + }; +}() : undefined); + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/object-to-string.js": +/*!*****************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/object-to-string.js ***! + \*****************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var TO_STRING_TAG_SUPPORT = __webpack_require__(/*! ../internals/to-string-tag-support */ "./node_modules/core-js-pure/internals/to-string-tag-support.js"); +var classof = __webpack_require__(/*! ../internals/classof */ "./node_modules/core-js-pure/internals/classof.js"); + +// `Object.prototype.toString` method implementation +// https://tc39.es/ecma262/#sec-object.prototype.tostring +module.exports = TO_STRING_TAG_SUPPORT ? {}.toString : function toString() { + return '[object ' + classof(this) + ']'; +}; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/ordinary-to-primitive.js": +/*!**********************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/ordinary-to-primitive.js ***! + \**********************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var call = __webpack_require__(/*! ../internals/function-call */ "./node_modules/core-js-pure/internals/function-call.js"); +var isCallable = __webpack_require__(/*! ../internals/is-callable */ "./node_modules/core-js-pure/internals/is-callable.js"); +var isObject = __webpack_require__(/*! ../internals/is-object */ "./node_modules/core-js-pure/internals/is-object.js"); + +var $TypeError = TypeError; + +// `OrdinaryToPrimitive` abstract operation +// https://tc39.es/ecma262/#sec-ordinarytoprimitive +module.exports = function (input, pref) { + var fn, val; + if (pref === 'string' && isCallable(fn = input.toString) && !isObject(val = call(fn, input))) return val; + if (isCallable(fn = input.valueOf) && !isObject(val = call(fn, input))) return val; + if (pref !== 'string' && isCallable(fn = input.toString) && !isObject(val = call(fn, input))) return val; + throw new $TypeError("Can't convert object to primitive value"); +}; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/own-keys.js": +/*!*********************************************************!*\ + !*** ./node_modules/core-js-pure/internals/own-keys.js ***! + \*********************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var getBuiltIn = __webpack_require__(/*! ../internals/get-built-in */ "./node_modules/core-js-pure/internals/get-built-in.js"); +var uncurryThis = __webpack_require__(/*! ../internals/function-uncurry-this */ "./node_modules/core-js-pure/internals/function-uncurry-this.js"); +var getOwnPropertyNamesModule = __webpack_require__(/*! ../internals/object-get-own-property-names */ "./node_modules/core-js-pure/internals/object-get-own-property-names.js"); +var getOwnPropertySymbolsModule = __webpack_require__(/*! ../internals/object-get-own-property-symbols */ "./node_modules/core-js-pure/internals/object-get-own-property-symbols.js"); +var anObject = __webpack_require__(/*! ../internals/an-object */ "./node_modules/core-js-pure/internals/an-object.js"); + +var concat = uncurryThis([].concat); + +// all object keys, includes non-enumerable and symbols +module.exports = getBuiltIn('Reflect', 'ownKeys') || function ownKeys(it) { + var keys = getOwnPropertyNamesModule.f(anObject(it)); + var getOwnPropertySymbols = getOwnPropertySymbolsModule.f; + return getOwnPropertySymbols ? concat(keys, getOwnPropertySymbols(it)) : keys; +}; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/path.js": +/*!*****************************************************!*\ + !*** ./node_modules/core-js-pure/internals/path.js ***! + \*****************************************************/ +/***/ ((module) => { + +"use strict"; + +module.exports = {}; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/perform.js": +/*!********************************************************!*\ + !*** ./node_modules/core-js-pure/internals/perform.js ***! + \********************************************************/ +/***/ ((module) => { + +"use strict"; + +module.exports = function (exec) { + try { + return { error: false, value: exec() }; + } catch (error) { + return { error: true, value: error }; + } +}; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/promise-constructor-detection.js": +/*!******************************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/promise-constructor-detection.js ***! + \******************************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var globalThis = __webpack_require__(/*! ../internals/global-this */ "./node_modules/core-js-pure/internals/global-this.js"); +var NativePromiseConstructor = __webpack_require__(/*! ../internals/promise-native-constructor */ "./node_modules/core-js-pure/internals/promise-native-constructor.js"); +var isCallable = __webpack_require__(/*! ../internals/is-callable */ "./node_modules/core-js-pure/internals/is-callable.js"); +var isForced = __webpack_require__(/*! ../internals/is-forced */ "./node_modules/core-js-pure/internals/is-forced.js"); +var inspectSource = __webpack_require__(/*! ../internals/inspect-source */ "./node_modules/core-js-pure/internals/inspect-source.js"); +var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ "./node_modules/core-js-pure/internals/well-known-symbol.js"); +var ENVIRONMENT = __webpack_require__(/*! ../internals/environment */ "./node_modules/core-js-pure/internals/environment.js"); +var IS_PURE = __webpack_require__(/*! ../internals/is-pure */ "./node_modules/core-js-pure/internals/is-pure.js"); +var V8_VERSION = __webpack_require__(/*! ../internals/environment-v8-version */ "./node_modules/core-js-pure/internals/environment-v8-version.js"); + +var NativePromisePrototype = NativePromiseConstructor && NativePromiseConstructor.prototype; +var SPECIES = wellKnownSymbol('species'); +var SUBCLASSING = false; +var NATIVE_PROMISE_REJECTION_EVENT = isCallable(globalThis.PromiseRejectionEvent); + +var FORCED_PROMISE_CONSTRUCTOR = isForced('Promise', function () { + var PROMISE_CONSTRUCTOR_SOURCE = inspectSource(NativePromiseConstructor); + var GLOBAL_CORE_JS_PROMISE = PROMISE_CONSTRUCTOR_SOURCE !== String(NativePromiseConstructor); + // V8 6.6 (Node 10 and Chrome 66) have a bug with resolving custom thenables + // https://bugs.chromium.org/p/chromium/issues/detail?id=830565 + // We can't detect it synchronously, so just check versions + if (!GLOBAL_CORE_JS_PROMISE && V8_VERSION === 66) return true; + // We need Promise#{ catch, finally } in the pure version for preventing prototype pollution + if (IS_PURE && !(NativePromisePrototype['catch'] && NativePromisePrototype['finally'])) return true; + // We can't use @@species feature detection in V8 since it causes + // deoptimization and performance degradation + // https://github.com/zloirock/core-js/issues/679 + if (!V8_VERSION || V8_VERSION < 51 || !/native code/.test(PROMISE_CONSTRUCTOR_SOURCE)) { + // Detect correctness of subclassing with @@species support + var promise = new NativePromiseConstructor(function (resolve) { resolve(1); }); + var FakePromise = function (exec) { + exec(function () { /* empty */ }, function () { /* empty */ }); + }; + var constructor = promise.constructor = {}; + constructor[SPECIES] = FakePromise; + SUBCLASSING = promise.then(function () { /* empty */ }) instanceof FakePromise; + if (!SUBCLASSING) return true; + // Unhandled rejections tracking support, NodeJS Promise without it fails @@species test + } return !GLOBAL_CORE_JS_PROMISE && (ENVIRONMENT === 'BROWSER' || ENVIRONMENT === 'DENO') && !NATIVE_PROMISE_REJECTION_EVENT; +}); + +module.exports = { + CONSTRUCTOR: FORCED_PROMISE_CONSTRUCTOR, + REJECTION_EVENT: NATIVE_PROMISE_REJECTION_EVENT, + SUBCLASSING: SUBCLASSING +}; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/promise-native-constructor.js": +/*!***************************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/promise-native-constructor.js ***! + \***************************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var globalThis = __webpack_require__(/*! ../internals/global-this */ "./node_modules/core-js-pure/internals/global-this.js"); + +module.exports = globalThis.Promise; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/promise-resolve.js": +/*!****************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/promise-resolve.js ***! + \****************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var anObject = __webpack_require__(/*! ../internals/an-object */ "./node_modules/core-js-pure/internals/an-object.js"); +var isObject = __webpack_require__(/*! ../internals/is-object */ "./node_modules/core-js-pure/internals/is-object.js"); +var newPromiseCapability = __webpack_require__(/*! ../internals/new-promise-capability */ "./node_modules/core-js-pure/internals/new-promise-capability.js"); + +module.exports = function (C, x) { + anObject(C); + if (isObject(x) && x.constructor === C) return x; + var promiseCapability = newPromiseCapability.f(C); + var resolve = promiseCapability.resolve; + resolve(x); + return promiseCapability.promise; +}; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/promise-statics-incorrect-iteration.js": +/*!************************************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/promise-statics-incorrect-iteration.js ***! + \************************************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var NativePromiseConstructor = __webpack_require__(/*! ../internals/promise-native-constructor */ "./node_modules/core-js-pure/internals/promise-native-constructor.js"); +var checkCorrectnessOfIteration = __webpack_require__(/*! ../internals/check-correctness-of-iteration */ "./node_modules/core-js-pure/internals/check-correctness-of-iteration.js"); +var FORCED_PROMISE_CONSTRUCTOR = (__webpack_require__(/*! ../internals/promise-constructor-detection */ "./node_modules/core-js-pure/internals/promise-constructor-detection.js").CONSTRUCTOR); + +module.exports = FORCED_PROMISE_CONSTRUCTOR || !checkCorrectnessOfIteration(function (iterable) { + NativePromiseConstructor.all(iterable).then(undefined, function () { /* empty */ }); +}); + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/queue.js": +/*!******************************************************!*\ + !*** ./node_modules/core-js-pure/internals/queue.js ***! + \******************************************************/ +/***/ ((module) => { + +"use strict"; + +var Queue = function () { + this.head = null; + this.tail = null; +}; + +Queue.prototype = { + add: function (item) { + var entry = { item: item, next: null }; + var tail = this.tail; + if (tail) tail.next = entry; + else this.head = entry; + this.tail = entry; + }, + get: function () { + var entry = this.head; + if (entry) { + var next = this.head = entry.next; + if (next === null) this.tail = null; + return entry.item; + } + } +}; + +module.exports = Queue; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/require-object-coercible.js": +/*!*************************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/require-object-coercible.js ***! + \*************************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var isNullOrUndefined = __webpack_require__(/*! ../internals/is-null-or-undefined */ "./node_modules/core-js-pure/internals/is-null-or-undefined.js"); + +var $TypeError = TypeError; + +// `RequireObjectCoercible` abstract operation +// https://tc39.es/ecma262/#sec-requireobjectcoercible +module.exports = function (it) { + if (isNullOrUndefined(it)) throw new $TypeError("Can't call method on " + it); + return it; +}; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/safe-get-built-in.js": +/*!******************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/safe-get-built-in.js ***! + \******************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var globalThis = __webpack_require__(/*! ../internals/global-this */ "./node_modules/core-js-pure/internals/global-this.js"); +var DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ "./node_modules/core-js-pure/internals/descriptors.js"); + +// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe +var getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor; + +// Avoid NodeJS experimental warning +module.exports = function (name) { + if (!DESCRIPTORS) return globalThis[name]; + var descriptor = getOwnPropertyDescriptor(globalThis, name); + return descriptor && descriptor.value; +}; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/set-species.js": +/*!************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/set-species.js ***! + \************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var getBuiltIn = __webpack_require__(/*! ../internals/get-built-in */ "./node_modules/core-js-pure/internals/get-built-in.js"); +var defineBuiltInAccessor = __webpack_require__(/*! ../internals/define-built-in-accessor */ "./node_modules/core-js-pure/internals/define-built-in-accessor.js"); +var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ "./node_modules/core-js-pure/internals/well-known-symbol.js"); +var DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ "./node_modules/core-js-pure/internals/descriptors.js"); + +var SPECIES = wellKnownSymbol('species'); + +module.exports = function (CONSTRUCTOR_NAME) { + var Constructor = getBuiltIn(CONSTRUCTOR_NAME); + + if (DESCRIPTORS && Constructor && !Constructor[SPECIES]) { + defineBuiltInAccessor(Constructor, SPECIES, { + configurable: true, + get: function () { return this; } + }); + } +}; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/set-to-string-tag.js": +/*!******************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/set-to-string-tag.js ***! + \******************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var TO_STRING_TAG_SUPPORT = __webpack_require__(/*! ../internals/to-string-tag-support */ "./node_modules/core-js-pure/internals/to-string-tag-support.js"); +var defineProperty = (__webpack_require__(/*! ../internals/object-define-property */ "./node_modules/core-js-pure/internals/object-define-property.js").f); +var createNonEnumerableProperty = __webpack_require__(/*! ../internals/create-non-enumerable-property */ "./node_modules/core-js-pure/internals/create-non-enumerable-property.js"); +var hasOwn = __webpack_require__(/*! ../internals/has-own-property */ "./node_modules/core-js-pure/internals/has-own-property.js"); +var toString = __webpack_require__(/*! ../internals/object-to-string */ "./node_modules/core-js-pure/internals/object-to-string.js"); +var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ "./node_modules/core-js-pure/internals/well-known-symbol.js"); + +var TO_STRING_TAG = wellKnownSymbol('toStringTag'); + +module.exports = function (it, TAG, STATIC, SET_METHOD) { + var target = STATIC ? it : it && it.prototype; + if (target) { + if (!hasOwn(target, TO_STRING_TAG)) { + defineProperty(target, TO_STRING_TAG, { configurable: true, value: TAG }); + } + if (SET_METHOD && !TO_STRING_TAG_SUPPORT) { + createNonEnumerableProperty(target, 'toString', toString); + } + } +}; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/shared-key.js": +/*!***********************************************************!*\ + !*** ./node_modules/core-js-pure/internals/shared-key.js ***! + \***********************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var shared = __webpack_require__(/*! ../internals/shared */ "./node_modules/core-js-pure/internals/shared.js"); +var uid = __webpack_require__(/*! ../internals/uid */ "./node_modules/core-js-pure/internals/uid.js"); + +var keys = shared('keys'); + +module.exports = function (key) { + return keys[key] || (keys[key] = uid(key)); +}; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/shared-store.js": +/*!*************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/shared-store.js ***! + \*************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var IS_PURE = __webpack_require__(/*! ../internals/is-pure */ "./node_modules/core-js-pure/internals/is-pure.js"); +var globalThis = __webpack_require__(/*! ../internals/global-this */ "./node_modules/core-js-pure/internals/global-this.js"); +var defineGlobalProperty = __webpack_require__(/*! ../internals/define-global-property */ "./node_modules/core-js-pure/internals/define-global-property.js"); + +var SHARED = '__core-js_shared__'; +var store = module.exports = globalThis[SHARED] || defineGlobalProperty(SHARED, {}); + +(store.versions || (store.versions = [])).push({ + version: '3.38.1', + mode: IS_PURE ? 'pure' : 'global', + copyright: '© 2014-2024 Denis Pushkarev (zloirock.ru)', + license: 'https://github.com/zloirock/core-js/blob/v3.38.1/LICENSE', + source: 'https://github.com/zloirock/core-js' +}); + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/shared.js": +/*!*******************************************************!*\ + !*** ./node_modules/core-js-pure/internals/shared.js ***! + \*******************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var store = __webpack_require__(/*! ../internals/shared-store */ "./node_modules/core-js-pure/internals/shared-store.js"); + +module.exports = function (key, value) { + return store[key] || (store[key] = value || {}); +}; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/species-constructor.js": +/*!********************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/species-constructor.js ***! + \********************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var anObject = __webpack_require__(/*! ../internals/an-object */ "./node_modules/core-js-pure/internals/an-object.js"); +var aConstructor = __webpack_require__(/*! ../internals/a-constructor */ "./node_modules/core-js-pure/internals/a-constructor.js"); +var isNullOrUndefined = __webpack_require__(/*! ../internals/is-null-or-undefined */ "./node_modules/core-js-pure/internals/is-null-or-undefined.js"); +var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ "./node_modules/core-js-pure/internals/well-known-symbol.js"); + +var SPECIES = wellKnownSymbol('species'); + +// `SpeciesConstructor` abstract operation +// https://tc39.es/ecma262/#sec-speciesconstructor +module.exports = function (O, defaultConstructor) { + var C = anObject(O).constructor; + var S; + return C === undefined || isNullOrUndefined(S = anObject(C)[SPECIES]) ? defaultConstructor : aConstructor(S); +}; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/string-multibyte.js": +/*!*****************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/string-multibyte.js ***! + \*****************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var uncurryThis = __webpack_require__(/*! ../internals/function-uncurry-this */ "./node_modules/core-js-pure/internals/function-uncurry-this.js"); +var toIntegerOrInfinity = __webpack_require__(/*! ../internals/to-integer-or-infinity */ "./node_modules/core-js-pure/internals/to-integer-or-infinity.js"); +var toString = __webpack_require__(/*! ../internals/to-string */ "./node_modules/core-js-pure/internals/to-string.js"); +var requireObjectCoercible = __webpack_require__(/*! ../internals/require-object-coercible */ "./node_modules/core-js-pure/internals/require-object-coercible.js"); + +var charAt = uncurryThis(''.charAt); +var charCodeAt = uncurryThis(''.charCodeAt); +var stringSlice = uncurryThis(''.slice); + +var createMethod = function (CONVERT_TO_STRING) { + return function ($this, pos) { + var S = toString(requireObjectCoercible($this)); + var position = toIntegerOrInfinity(pos); + var size = S.length; + var first, second; + if (position < 0 || position >= size) return CONVERT_TO_STRING ? '' : undefined; + first = charCodeAt(S, position); + return first < 0xD800 || first > 0xDBFF || position + 1 === size + || (second = charCodeAt(S, position + 1)) < 0xDC00 || second > 0xDFFF + ? CONVERT_TO_STRING + ? charAt(S, position) + : first + : CONVERT_TO_STRING + ? stringSlice(S, position, position + 2) + : (first - 0xD800 << 10) + (second - 0xDC00) + 0x10000; + }; +}; + +module.exports = { + // `String.prototype.codePointAt` method + // https://tc39.es/ecma262/#sec-string.prototype.codepointat + codeAt: createMethod(false), + // `String.prototype.at` method + // https://github.com/mathiasbynens/String.prototype.at + charAt: createMethod(true) +}; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/symbol-constructor-detection.js": +/*!*****************************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/symbol-constructor-detection.js ***! + \*****************************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +/* eslint-disable es/no-symbol -- required for testing */ +var V8_VERSION = __webpack_require__(/*! ../internals/environment-v8-version */ "./node_modules/core-js-pure/internals/environment-v8-version.js"); +var fails = __webpack_require__(/*! ../internals/fails */ "./node_modules/core-js-pure/internals/fails.js"); +var globalThis = __webpack_require__(/*! ../internals/global-this */ "./node_modules/core-js-pure/internals/global-this.js"); + +var $String = globalThis.String; + +// eslint-disable-next-line es/no-object-getownpropertysymbols -- required for testing +module.exports = !!Object.getOwnPropertySymbols && !fails(function () { + var symbol = Symbol('symbol detection'); + // Chrome 38 Symbol has incorrect toString conversion + // `get-own-property-symbols` polyfill symbols converted to object are not Symbol instances + // nb: Do not call `String` directly to avoid this being optimized out to `symbol+''` which will, + // of course, fail. + return !$String(symbol) || !(Object(symbol) instanceof Symbol) || + // Chrome 38-40 symbols are not inherited from DOM collections prototypes to instances + !Symbol.sham && V8_VERSION && V8_VERSION < 41; +}); + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/task.js": +/*!*****************************************************!*\ + !*** ./node_modules/core-js-pure/internals/task.js ***! + \*****************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var globalThis = __webpack_require__(/*! ../internals/global-this */ "./node_modules/core-js-pure/internals/global-this.js"); +var apply = __webpack_require__(/*! ../internals/function-apply */ "./node_modules/core-js-pure/internals/function-apply.js"); +var bind = __webpack_require__(/*! ../internals/function-bind-context */ "./node_modules/core-js-pure/internals/function-bind-context.js"); +var isCallable = __webpack_require__(/*! ../internals/is-callable */ "./node_modules/core-js-pure/internals/is-callable.js"); +var hasOwn = __webpack_require__(/*! ../internals/has-own-property */ "./node_modules/core-js-pure/internals/has-own-property.js"); +var fails = __webpack_require__(/*! ../internals/fails */ "./node_modules/core-js-pure/internals/fails.js"); +var html = __webpack_require__(/*! ../internals/html */ "./node_modules/core-js-pure/internals/html.js"); +var arraySlice = __webpack_require__(/*! ../internals/array-slice */ "./node_modules/core-js-pure/internals/array-slice.js"); +var createElement = __webpack_require__(/*! ../internals/document-create-element */ "./node_modules/core-js-pure/internals/document-create-element.js"); +var validateArgumentsLength = __webpack_require__(/*! ../internals/validate-arguments-length */ "./node_modules/core-js-pure/internals/validate-arguments-length.js"); +var IS_IOS = __webpack_require__(/*! ../internals/environment-is-ios */ "./node_modules/core-js-pure/internals/environment-is-ios.js"); +var IS_NODE = __webpack_require__(/*! ../internals/environment-is-node */ "./node_modules/core-js-pure/internals/environment-is-node.js"); + +var set = globalThis.setImmediate; +var clear = globalThis.clearImmediate; +var process = globalThis.process; +var Dispatch = globalThis.Dispatch; +var Function = globalThis.Function; +var MessageChannel = globalThis.MessageChannel; +var String = globalThis.String; +var counter = 0; +var queue = {}; +var ONREADYSTATECHANGE = 'onreadystatechange'; +var $location, defer, channel, port; + +fails(function () { + // Deno throws a ReferenceError on `location` access without `--location` flag + $location = globalThis.location; +}); + +var run = function (id) { + if (hasOwn(queue, id)) { + var fn = queue[id]; + delete queue[id]; + fn(); + } +}; + +var runner = function (id) { + return function () { + run(id); + }; +}; + +var eventListener = function (event) { + run(event.data); +}; + +var globalPostMessageDefer = function (id) { + // old engines have not location.origin + globalThis.postMessage(String(id), $location.protocol + '//' + $location.host); +}; + +// Node.js 0.9+ & IE10+ has setImmediate, otherwise: +if (!set || !clear) { + set = function setImmediate(handler) { + validateArgumentsLength(arguments.length, 1); + var fn = isCallable(handler) ? handler : Function(handler); + var args = arraySlice(arguments, 1); + queue[++counter] = function () { + apply(fn, undefined, args); + }; + defer(counter); + return counter; + }; + clear = function clearImmediate(id) { + delete queue[id]; + }; + // Node.js 0.8- + if (IS_NODE) { + defer = function (id) { + process.nextTick(runner(id)); + }; + // Sphere (JS game engine) Dispatch API + } else if (Dispatch && Dispatch.now) { + defer = function (id) { + Dispatch.now(runner(id)); + }; + // Browsers with MessageChannel, includes WebWorkers + // except iOS - https://github.com/zloirock/core-js/issues/624 + } else if (MessageChannel && !IS_IOS) { + channel = new MessageChannel(); + port = channel.port2; + channel.port1.onmessage = eventListener; + defer = bind(port.postMessage, port); + // Browsers with postMessage, skip WebWorkers + // IE8 has postMessage, but it's sync & typeof its postMessage is 'object' + } else if ( + globalThis.addEventListener && + isCallable(globalThis.postMessage) && + !globalThis.importScripts && + $location && $location.protocol !== 'file:' && + !fails(globalPostMessageDefer) + ) { + defer = globalPostMessageDefer; + globalThis.addEventListener('message', eventListener, false); + // IE8- + } else if (ONREADYSTATECHANGE in createElement('script')) { + defer = function (id) { + html.appendChild(createElement('script'))[ONREADYSTATECHANGE] = function () { + html.removeChild(this); + run(id); + }; + }; + // Rest old browsers + } else { + defer = function (id) { + setTimeout(runner(id), 0); + }; + } +} + +module.exports = { + set: set, + clear: clear +}; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/to-absolute-index.js": +/*!******************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/to-absolute-index.js ***! + \******************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var toIntegerOrInfinity = __webpack_require__(/*! ../internals/to-integer-or-infinity */ "./node_modules/core-js-pure/internals/to-integer-or-infinity.js"); + +var max = Math.max; +var min = Math.min; + +// Helper for a popular repeating case of the spec: +// Let integer be ? ToInteger(index). +// If integer < 0, let result be max((length + integer), 0); else let result be min(integer, length). +module.exports = function (index, length) { + var integer = toIntegerOrInfinity(index); + return integer < 0 ? max(integer + length, 0) : min(integer, length); +}; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/to-indexed-object.js": +/*!******************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/to-indexed-object.js ***! + \******************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +// toObject with fallback for non-array-like ES3 strings +var IndexedObject = __webpack_require__(/*! ../internals/indexed-object */ "./node_modules/core-js-pure/internals/indexed-object.js"); +var requireObjectCoercible = __webpack_require__(/*! ../internals/require-object-coercible */ "./node_modules/core-js-pure/internals/require-object-coercible.js"); + +module.exports = function (it) { + return IndexedObject(requireObjectCoercible(it)); +}; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/to-integer-or-infinity.js": +/*!***********************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/to-integer-or-infinity.js ***! + \***********************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var trunc = __webpack_require__(/*! ../internals/math-trunc */ "./node_modules/core-js-pure/internals/math-trunc.js"); + +// `ToIntegerOrInfinity` abstract operation +// https://tc39.es/ecma262/#sec-tointegerorinfinity +module.exports = function (argument) { + var number = +argument; + // eslint-disable-next-line no-self-compare -- NaN check + return number !== number || number === 0 ? 0 : trunc(number); +}; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/to-length.js": +/*!**********************************************************!*\ + !*** ./node_modules/core-js-pure/internals/to-length.js ***! + \**********************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var toIntegerOrInfinity = __webpack_require__(/*! ../internals/to-integer-or-infinity */ "./node_modules/core-js-pure/internals/to-integer-or-infinity.js"); + +var min = Math.min; + +// `ToLength` abstract operation +// https://tc39.es/ecma262/#sec-tolength +module.exports = function (argument) { + var len = toIntegerOrInfinity(argument); + return len > 0 ? min(len, 0x1FFFFFFFFFFFFF) : 0; // 2 ** 53 - 1 == 9007199254740991 +}; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/to-object.js": +/*!**********************************************************!*\ + !*** ./node_modules/core-js-pure/internals/to-object.js ***! + \**********************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var requireObjectCoercible = __webpack_require__(/*! ../internals/require-object-coercible */ "./node_modules/core-js-pure/internals/require-object-coercible.js"); + +var $Object = Object; + +// `ToObject` abstract operation +// https://tc39.es/ecma262/#sec-toobject +module.exports = function (argument) { + return $Object(requireObjectCoercible(argument)); +}; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/to-primitive.js": +/*!*************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/to-primitive.js ***! + \*************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var call = __webpack_require__(/*! ../internals/function-call */ "./node_modules/core-js-pure/internals/function-call.js"); +var isObject = __webpack_require__(/*! ../internals/is-object */ "./node_modules/core-js-pure/internals/is-object.js"); +var isSymbol = __webpack_require__(/*! ../internals/is-symbol */ "./node_modules/core-js-pure/internals/is-symbol.js"); +var getMethod = __webpack_require__(/*! ../internals/get-method */ "./node_modules/core-js-pure/internals/get-method.js"); +var ordinaryToPrimitive = __webpack_require__(/*! ../internals/ordinary-to-primitive */ "./node_modules/core-js-pure/internals/ordinary-to-primitive.js"); +var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ "./node_modules/core-js-pure/internals/well-known-symbol.js"); + +var $TypeError = TypeError; +var TO_PRIMITIVE = wellKnownSymbol('toPrimitive'); + +// `ToPrimitive` abstract operation +// https://tc39.es/ecma262/#sec-toprimitive +module.exports = function (input, pref) { + if (!isObject(input) || isSymbol(input)) return input; + var exoticToPrim = getMethod(input, TO_PRIMITIVE); + var result; + if (exoticToPrim) { + if (pref === undefined) pref = 'default'; + result = call(exoticToPrim, input, pref); + if (!isObject(result) || isSymbol(result)) return result; + throw new $TypeError("Can't convert object to primitive value"); + } + if (pref === undefined) pref = 'number'; + return ordinaryToPrimitive(input, pref); +}; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/to-property-key.js": +/*!****************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/to-property-key.js ***! + \****************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var toPrimitive = __webpack_require__(/*! ../internals/to-primitive */ "./node_modules/core-js-pure/internals/to-primitive.js"); +var isSymbol = __webpack_require__(/*! ../internals/is-symbol */ "./node_modules/core-js-pure/internals/is-symbol.js"); + +// `ToPropertyKey` abstract operation +// https://tc39.es/ecma262/#sec-topropertykey +module.exports = function (argument) { + var key = toPrimitive(argument, 'string'); + return isSymbol(key) ? key : key + ''; +}; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/to-string-tag-support.js": +/*!**********************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/to-string-tag-support.js ***! + \**********************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ "./node_modules/core-js-pure/internals/well-known-symbol.js"); + +var TO_STRING_TAG = wellKnownSymbol('toStringTag'); +var test = {}; + +test[TO_STRING_TAG] = 'z'; + +module.exports = String(test) === '[object z]'; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/to-string.js": +/*!**********************************************************!*\ + !*** ./node_modules/core-js-pure/internals/to-string.js ***! + \**********************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var classof = __webpack_require__(/*! ../internals/classof */ "./node_modules/core-js-pure/internals/classof.js"); + +var $String = String; + +module.exports = function (argument) { + if (classof(argument) === 'Symbol') throw new TypeError('Cannot convert a Symbol value to a string'); + return $String(argument); +}; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/try-to-string.js": +/*!**************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/try-to-string.js ***! + \**************************************************************/ +/***/ ((module) => { + +"use strict"; + +var $String = String; + +module.exports = function (argument) { + try { + return $String(argument); + } catch (error) { + return 'Object'; + } +}; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/uid.js": +/*!****************************************************!*\ + !*** ./node_modules/core-js-pure/internals/uid.js ***! + \****************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var uncurryThis = __webpack_require__(/*! ../internals/function-uncurry-this */ "./node_modules/core-js-pure/internals/function-uncurry-this.js"); + +var id = 0; +var postfix = Math.random(); +var toString = uncurryThis(1.0.toString); + +module.exports = function (key) { + return 'Symbol(' + (key === undefined ? '' : key) + ')_' + toString(++id + postfix, 36); +}; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/use-symbol-as-uid.js": +/*!******************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/use-symbol-as-uid.js ***! + \******************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +/* eslint-disable es/no-symbol -- required for testing */ +var NATIVE_SYMBOL = __webpack_require__(/*! ../internals/symbol-constructor-detection */ "./node_modules/core-js-pure/internals/symbol-constructor-detection.js"); + +module.exports = NATIVE_SYMBOL + && !Symbol.sham + && typeof Symbol.iterator == 'symbol'; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/v8-prototype-define-bug.js": +/*!************************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/v8-prototype-define-bug.js ***! + \************************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ "./node_modules/core-js-pure/internals/descriptors.js"); +var fails = __webpack_require__(/*! ../internals/fails */ "./node_modules/core-js-pure/internals/fails.js"); + +// V8 ~ Chrome 36- +// https://bugs.chromium.org/p/v8/issues/detail?id=3334 +module.exports = DESCRIPTORS && fails(function () { + // eslint-disable-next-line es/no-object-defineproperty -- required for testing + return Object.defineProperty(function () { /* empty */ }, 'prototype', { + value: 42, + writable: false + }).prototype !== 42; +}); + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/validate-arguments-length.js": +/*!**************************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/validate-arguments-length.js ***! + \**************************************************************************/ +/***/ ((module) => { + +"use strict"; + +var $TypeError = TypeError; + +module.exports = function (passed, required) { + if (passed < required) throw new $TypeError('Not enough arguments'); + return passed; +}; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/weak-map-basic-detection.js": +/*!*************************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/weak-map-basic-detection.js ***! + \*************************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var globalThis = __webpack_require__(/*! ../internals/global-this */ "./node_modules/core-js-pure/internals/global-this.js"); +var isCallable = __webpack_require__(/*! ../internals/is-callable */ "./node_modules/core-js-pure/internals/is-callable.js"); + +var WeakMap = globalThis.WeakMap; + +module.exports = isCallable(WeakMap) && /native code/.test(String(WeakMap)); + + +/***/ }), + +/***/ "./node_modules/core-js-pure/internals/well-known-symbol.js": +/*!******************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/well-known-symbol.js ***! + \******************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var globalThis = __webpack_require__(/*! ../internals/global-this */ "./node_modules/core-js-pure/internals/global-this.js"); +var shared = __webpack_require__(/*! ../internals/shared */ "./node_modules/core-js-pure/internals/shared.js"); +var hasOwn = __webpack_require__(/*! ../internals/has-own-property */ "./node_modules/core-js-pure/internals/has-own-property.js"); +var uid = __webpack_require__(/*! ../internals/uid */ "./node_modules/core-js-pure/internals/uid.js"); +var NATIVE_SYMBOL = __webpack_require__(/*! ../internals/symbol-constructor-detection */ "./node_modules/core-js-pure/internals/symbol-constructor-detection.js"); +var USE_SYMBOL_AS_UID = __webpack_require__(/*! ../internals/use-symbol-as-uid */ "./node_modules/core-js-pure/internals/use-symbol-as-uid.js"); + +var Symbol = globalThis.Symbol; +var WellKnownSymbolsStore = shared('wks'); +var createWellKnownSymbol = USE_SYMBOL_AS_UID ? Symbol['for'] || Symbol : Symbol && Symbol.withoutSetter || uid; + +module.exports = function (name) { + if (!hasOwn(WellKnownSymbolsStore, name)) { + WellKnownSymbolsStore[name] = NATIVE_SYMBOL && hasOwn(Symbol, name) + ? Symbol[name] + : createWellKnownSymbol('Symbol.' + name); + } return WellKnownSymbolsStore[name]; +}; + + +/***/ }), + +/***/ "./node_modules/core-js-pure/modules/es.aggregate-error.constructor.js": +/*!*****************************************************************************!*\ + !*** ./node_modules/core-js-pure/modules/es.aggregate-error.constructor.js ***! + \*****************************************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var $ = __webpack_require__(/*! ../internals/export */ "./node_modules/core-js-pure/internals/export.js"); +var isPrototypeOf = __webpack_require__(/*! ../internals/object-is-prototype-of */ "./node_modules/core-js-pure/internals/object-is-prototype-of.js"); +var getPrototypeOf = __webpack_require__(/*! ../internals/object-get-prototype-of */ "./node_modules/core-js-pure/internals/object-get-prototype-of.js"); +var setPrototypeOf = __webpack_require__(/*! ../internals/object-set-prototype-of */ "./node_modules/core-js-pure/internals/object-set-prototype-of.js"); +var copyConstructorProperties = __webpack_require__(/*! ../internals/copy-constructor-properties */ "./node_modules/core-js-pure/internals/copy-constructor-properties.js"); +var create = __webpack_require__(/*! ../internals/object-create */ "./node_modules/core-js-pure/internals/object-create.js"); +var createNonEnumerableProperty = __webpack_require__(/*! ../internals/create-non-enumerable-property */ "./node_modules/core-js-pure/internals/create-non-enumerable-property.js"); +var createPropertyDescriptor = __webpack_require__(/*! ../internals/create-property-descriptor */ "./node_modules/core-js-pure/internals/create-property-descriptor.js"); +var installErrorCause = __webpack_require__(/*! ../internals/install-error-cause */ "./node_modules/core-js-pure/internals/install-error-cause.js"); +var installErrorStack = __webpack_require__(/*! ../internals/error-stack-install */ "./node_modules/core-js-pure/internals/error-stack-install.js"); +var iterate = __webpack_require__(/*! ../internals/iterate */ "./node_modules/core-js-pure/internals/iterate.js"); +var normalizeStringArgument = __webpack_require__(/*! ../internals/normalize-string-argument */ "./node_modules/core-js-pure/internals/normalize-string-argument.js"); +var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ "./node_modules/core-js-pure/internals/well-known-symbol.js"); + +var TO_STRING_TAG = wellKnownSymbol('toStringTag'); +var $Error = Error; +var push = [].push; + +var $AggregateError = function AggregateError(errors, message /* , options */) { + var isInstance = isPrototypeOf(AggregateErrorPrototype, this); + var that; + if (setPrototypeOf) { + that = setPrototypeOf(new $Error(), isInstance ? getPrototypeOf(this) : AggregateErrorPrototype); + } else { + that = isInstance ? this : create(AggregateErrorPrototype); + createNonEnumerableProperty(that, TO_STRING_TAG, 'Error'); + } + if (message !== undefined) createNonEnumerableProperty(that, 'message', normalizeStringArgument(message)); + installErrorStack(that, $AggregateError, that.stack, 1); + if (arguments.length > 2) installErrorCause(that, arguments[2]); + var errorsArray = []; + iterate(errors, push, { that: errorsArray }); + createNonEnumerableProperty(that, 'errors', errorsArray); + return that; +}; + +if (setPrototypeOf) setPrototypeOf($AggregateError, $Error); +else copyConstructorProperties($AggregateError, $Error, { name: true }); + +var AggregateErrorPrototype = $AggregateError.prototype = create($Error.prototype, { + constructor: createPropertyDescriptor(1, $AggregateError), + message: createPropertyDescriptor(1, ''), + name: createPropertyDescriptor(1, 'AggregateError') +}); + +// `AggregateError` constructor +// https://tc39.es/ecma262/#sec-aggregate-error-constructor +$({ global: true, constructor: true, arity: 2 }, { + AggregateError: $AggregateError +}); + + +/***/ }), + +/***/ "./node_modules/core-js-pure/modules/es.aggregate-error.js": +/*!*****************************************************************!*\ + !*** ./node_modules/core-js-pure/modules/es.aggregate-error.js ***! + \*****************************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +// TODO: Remove this module from `core-js@4` since it's replaced to module below +__webpack_require__(/*! ../modules/es.aggregate-error.constructor */ "./node_modules/core-js-pure/modules/es.aggregate-error.constructor.js"); + + +/***/ }), + +/***/ "./node_modules/core-js-pure/modules/es.array.iterator.js": +/*!****************************************************************!*\ + !*** ./node_modules/core-js-pure/modules/es.array.iterator.js ***! + \****************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var toIndexedObject = __webpack_require__(/*! ../internals/to-indexed-object */ "./node_modules/core-js-pure/internals/to-indexed-object.js"); +var addToUnscopables = __webpack_require__(/*! ../internals/add-to-unscopables */ "./node_modules/core-js-pure/internals/add-to-unscopables.js"); +var Iterators = __webpack_require__(/*! ../internals/iterators */ "./node_modules/core-js-pure/internals/iterators.js"); +var InternalStateModule = __webpack_require__(/*! ../internals/internal-state */ "./node_modules/core-js-pure/internals/internal-state.js"); +var defineProperty = (__webpack_require__(/*! ../internals/object-define-property */ "./node_modules/core-js-pure/internals/object-define-property.js").f); +var defineIterator = __webpack_require__(/*! ../internals/iterator-define */ "./node_modules/core-js-pure/internals/iterator-define.js"); +var createIterResultObject = __webpack_require__(/*! ../internals/create-iter-result-object */ "./node_modules/core-js-pure/internals/create-iter-result-object.js"); +var IS_PURE = __webpack_require__(/*! ../internals/is-pure */ "./node_modules/core-js-pure/internals/is-pure.js"); +var DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ "./node_modules/core-js-pure/internals/descriptors.js"); + +var ARRAY_ITERATOR = 'Array Iterator'; +var setInternalState = InternalStateModule.set; +var getInternalState = InternalStateModule.getterFor(ARRAY_ITERATOR); + +// `Array.prototype.entries` method +// https://tc39.es/ecma262/#sec-array.prototype.entries +// `Array.prototype.keys` method +// https://tc39.es/ecma262/#sec-array.prototype.keys +// `Array.prototype.values` method +// https://tc39.es/ecma262/#sec-array.prototype.values +// `Array.prototype[@@iterator]` method +// https://tc39.es/ecma262/#sec-array.prototype-@@iterator +// `CreateArrayIterator` internal method +// https://tc39.es/ecma262/#sec-createarrayiterator +module.exports = defineIterator(Array, 'Array', function (iterated, kind) { + setInternalState(this, { + type: ARRAY_ITERATOR, + target: toIndexedObject(iterated), // target + index: 0, // next index + kind: kind // kind + }); +// `%ArrayIteratorPrototype%.next` method +// https://tc39.es/ecma262/#sec-%arrayiteratorprototype%.next +}, function () { + var state = getInternalState(this); + var target = state.target; + var index = state.index++; + if (!target || index >= target.length) { + state.target = null; + return createIterResultObject(undefined, true); + } + switch (state.kind) { + case 'keys': return createIterResultObject(index, false); + case 'values': return createIterResultObject(target[index], false); + } return createIterResultObject([index, target[index]], false); +}, 'values'); + +// argumentsList[@@iterator] is %ArrayProto_values% +// https://tc39.es/ecma262/#sec-createunmappedargumentsobject +// https://tc39.es/ecma262/#sec-createmappedargumentsobject +var values = Iterators.Arguments = Iterators.Array; + +// https://tc39.es/ecma262/#sec-array.prototype-@@unscopables +addToUnscopables('keys'); +addToUnscopables('values'); +addToUnscopables('entries'); + +// V8 ~ Chrome 45- bug +if (!IS_PURE && DESCRIPTORS && values.name !== 'values') try { + defineProperty(values, 'name', { value: 'values' }); +} catch (error) { /* empty */ } + + +/***/ }), + +/***/ "./node_modules/core-js-pure/modules/es.object.to-string.js": +/*!******************************************************************!*\ + !*** ./node_modules/core-js-pure/modules/es.object.to-string.js ***! + \******************************************************************/ +/***/ (() => { + +// empty + + +/***/ }), + +/***/ "./node_modules/core-js-pure/modules/es.promise.all-settled.js": +/*!*********************************************************************!*\ + !*** ./node_modules/core-js-pure/modules/es.promise.all-settled.js ***! + \*********************************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var $ = __webpack_require__(/*! ../internals/export */ "./node_modules/core-js-pure/internals/export.js"); +var call = __webpack_require__(/*! ../internals/function-call */ "./node_modules/core-js-pure/internals/function-call.js"); +var aCallable = __webpack_require__(/*! ../internals/a-callable */ "./node_modules/core-js-pure/internals/a-callable.js"); +var newPromiseCapabilityModule = __webpack_require__(/*! ../internals/new-promise-capability */ "./node_modules/core-js-pure/internals/new-promise-capability.js"); +var perform = __webpack_require__(/*! ../internals/perform */ "./node_modules/core-js-pure/internals/perform.js"); +var iterate = __webpack_require__(/*! ../internals/iterate */ "./node_modules/core-js-pure/internals/iterate.js"); +var PROMISE_STATICS_INCORRECT_ITERATION = __webpack_require__(/*! ../internals/promise-statics-incorrect-iteration */ "./node_modules/core-js-pure/internals/promise-statics-incorrect-iteration.js"); + +// `Promise.allSettled` method +// https://tc39.es/ecma262/#sec-promise.allsettled +$({ target: 'Promise', stat: true, forced: PROMISE_STATICS_INCORRECT_ITERATION }, { + allSettled: function allSettled(iterable) { + var C = this; + var capability = newPromiseCapabilityModule.f(C); + var resolve = capability.resolve; + var reject = capability.reject; + var result = perform(function () { + var promiseResolve = aCallable(C.resolve); + var values = []; + var counter = 0; + var remaining = 1; + iterate(iterable, function (promise) { + var index = counter++; + var alreadyCalled = false; + remaining++; + call(promiseResolve, C, promise).then(function (value) { + if (alreadyCalled) return; + alreadyCalled = true; + values[index] = { status: 'fulfilled', value: value }; + --remaining || resolve(values); + }, function (error) { + if (alreadyCalled) return; + alreadyCalled = true; + values[index] = { status: 'rejected', reason: error }; + --remaining || resolve(values); + }); + }); + --remaining || resolve(values); + }); + if (result.error) reject(result.value); + return capability.promise; + } +}); + + +/***/ }), + +/***/ "./node_modules/core-js-pure/modules/es.promise.all.js": +/*!*************************************************************!*\ + !*** ./node_modules/core-js-pure/modules/es.promise.all.js ***! + \*************************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var $ = __webpack_require__(/*! ../internals/export */ "./node_modules/core-js-pure/internals/export.js"); +var call = __webpack_require__(/*! ../internals/function-call */ "./node_modules/core-js-pure/internals/function-call.js"); +var aCallable = __webpack_require__(/*! ../internals/a-callable */ "./node_modules/core-js-pure/internals/a-callable.js"); +var newPromiseCapabilityModule = __webpack_require__(/*! ../internals/new-promise-capability */ "./node_modules/core-js-pure/internals/new-promise-capability.js"); +var perform = __webpack_require__(/*! ../internals/perform */ "./node_modules/core-js-pure/internals/perform.js"); +var iterate = __webpack_require__(/*! ../internals/iterate */ "./node_modules/core-js-pure/internals/iterate.js"); +var PROMISE_STATICS_INCORRECT_ITERATION = __webpack_require__(/*! ../internals/promise-statics-incorrect-iteration */ "./node_modules/core-js-pure/internals/promise-statics-incorrect-iteration.js"); + +// `Promise.all` method +// https://tc39.es/ecma262/#sec-promise.all +$({ target: 'Promise', stat: true, forced: PROMISE_STATICS_INCORRECT_ITERATION }, { + all: function all(iterable) { + var C = this; + var capability = newPromiseCapabilityModule.f(C); + var resolve = capability.resolve; + var reject = capability.reject; + var result = perform(function () { + var $promiseResolve = aCallable(C.resolve); + var values = []; + var counter = 0; + var remaining = 1; + iterate(iterable, function (promise) { + var index = counter++; + var alreadyCalled = false; + remaining++; + call($promiseResolve, C, promise).then(function (value) { + if (alreadyCalled) return; + alreadyCalled = true; + values[index] = value; + --remaining || resolve(values); + }, reject); + }); + --remaining || resolve(values); + }); + if (result.error) reject(result.value); + return capability.promise; + } +}); + + +/***/ }), + +/***/ "./node_modules/core-js-pure/modules/es.promise.any.js": +/*!*************************************************************!*\ + !*** ./node_modules/core-js-pure/modules/es.promise.any.js ***! + \*************************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var $ = __webpack_require__(/*! ../internals/export */ "./node_modules/core-js-pure/internals/export.js"); +var call = __webpack_require__(/*! ../internals/function-call */ "./node_modules/core-js-pure/internals/function-call.js"); +var aCallable = __webpack_require__(/*! ../internals/a-callable */ "./node_modules/core-js-pure/internals/a-callable.js"); +var getBuiltIn = __webpack_require__(/*! ../internals/get-built-in */ "./node_modules/core-js-pure/internals/get-built-in.js"); +var newPromiseCapabilityModule = __webpack_require__(/*! ../internals/new-promise-capability */ "./node_modules/core-js-pure/internals/new-promise-capability.js"); +var perform = __webpack_require__(/*! ../internals/perform */ "./node_modules/core-js-pure/internals/perform.js"); +var iterate = __webpack_require__(/*! ../internals/iterate */ "./node_modules/core-js-pure/internals/iterate.js"); +var PROMISE_STATICS_INCORRECT_ITERATION = __webpack_require__(/*! ../internals/promise-statics-incorrect-iteration */ "./node_modules/core-js-pure/internals/promise-statics-incorrect-iteration.js"); + +var PROMISE_ANY_ERROR = 'No one promise resolved'; + +// `Promise.any` method +// https://tc39.es/ecma262/#sec-promise.any +$({ target: 'Promise', stat: true, forced: PROMISE_STATICS_INCORRECT_ITERATION }, { + any: function any(iterable) { + var C = this; + var AggregateError = getBuiltIn('AggregateError'); + var capability = newPromiseCapabilityModule.f(C); + var resolve = capability.resolve; + var reject = capability.reject; + var result = perform(function () { + var promiseResolve = aCallable(C.resolve); + var errors = []; + var counter = 0; + var remaining = 1; + var alreadyResolved = false; + iterate(iterable, function (promise) { + var index = counter++; + var alreadyRejected = false; + remaining++; + call(promiseResolve, C, promise).then(function (value) { + if (alreadyRejected || alreadyResolved) return; + alreadyResolved = true; + resolve(value); + }, function (error) { + if (alreadyRejected || alreadyResolved) return; + alreadyRejected = true; + errors[index] = error; + --remaining || reject(new AggregateError(errors, PROMISE_ANY_ERROR)); + }); + }); + --remaining || reject(new AggregateError(errors, PROMISE_ANY_ERROR)); + }); + if (result.error) reject(result.value); + return capability.promise; + } +}); + + +/***/ }), + +/***/ "./node_modules/core-js-pure/modules/es.promise.catch.js": +/*!***************************************************************!*\ + !*** ./node_modules/core-js-pure/modules/es.promise.catch.js ***! + \***************************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var $ = __webpack_require__(/*! ../internals/export */ "./node_modules/core-js-pure/internals/export.js"); +var IS_PURE = __webpack_require__(/*! ../internals/is-pure */ "./node_modules/core-js-pure/internals/is-pure.js"); +var FORCED_PROMISE_CONSTRUCTOR = (__webpack_require__(/*! ../internals/promise-constructor-detection */ "./node_modules/core-js-pure/internals/promise-constructor-detection.js").CONSTRUCTOR); +var NativePromiseConstructor = __webpack_require__(/*! ../internals/promise-native-constructor */ "./node_modules/core-js-pure/internals/promise-native-constructor.js"); +var getBuiltIn = __webpack_require__(/*! ../internals/get-built-in */ "./node_modules/core-js-pure/internals/get-built-in.js"); +var isCallable = __webpack_require__(/*! ../internals/is-callable */ "./node_modules/core-js-pure/internals/is-callable.js"); +var defineBuiltIn = __webpack_require__(/*! ../internals/define-built-in */ "./node_modules/core-js-pure/internals/define-built-in.js"); + +var NativePromisePrototype = NativePromiseConstructor && NativePromiseConstructor.prototype; + +// `Promise.prototype.catch` method +// https://tc39.es/ecma262/#sec-promise.prototype.catch +$({ target: 'Promise', proto: true, forced: FORCED_PROMISE_CONSTRUCTOR, real: true }, { + 'catch': function (onRejected) { + return this.then(undefined, onRejected); + } +}); + +// makes sure that native promise-based APIs `Promise#catch` properly works with patched `Promise#then` +if (!IS_PURE && isCallable(NativePromiseConstructor)) { + var method = getBuiltIn('Promise').prototype['catch']; + if (NativePromisePrototype['catch'] !== method) { + defineBuiltIn(NativePromisePrototype, 'catch', method, { unsafe: true }); + } +} + + +/***/ }), + +/***/ "./node_modules/core-js-pure/modules/es.promise.constructor.js": +/*!*********************************************************************!*\ + !*** ./node_modules/core-js-pure/modules/es.promise.constructor.js ***! + \*********************************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var $ = __webpack_require__(/*! ../internals/export */ "./node_modules/core-js-pure/internals/export.js"); +var IS_PURE = __webpack_require__(/*! ../internals/is-pure */ "./node_modules/core-js-pure/internals/is-pure.js"); +var IS_NODE = __webpack_require__(/*! ../internals/environment-is-node */ "./node_modules/core-js-pure/internals/environment-is-node.js"); +var globalThis = __webpack_require__(/*! ../internals/global-this */ "./node_modules/core-js-pure/internals/global-this.js"); +var call = __webpack_require__(/*! ../internals/function-call */ "./node_modules/core-js-pure/internals/function-call.js"); +var defineBuiltIn = __webpack_require__(/*! ../internals/define-built-in */ "./node_modules/core-js-pure/internals/define-built-in.js"); +var setPrototypeOf = __webpack_require__(/*! ../internals/object-set-prototype-of */ "./node_modules/core-js-pure/internals/object-set-prototype-of.js"); +var setToStringTag = __webpack_require__(/*! ../internals/set-to-string-tag */ "./node_modules/core-js-pure/internals/set-to-string-tag.js"); +var setSpecies = __webpack_require__(/*! ../internals/set-species */ "./node_modules/core-js-pure/internals/set-species.js"); +var aCallable = __webpack_require__(/*! ../internals/a-callable */ "./node_modules/core-js-pure/internals/a-callable.js"); +var isCallable = __webpack_require__(/*! ../internals/is-callable */ "./node_modules/core-js-pure/internals/is-callable.js"); +var isObject = __webpack_require__(/*! ../internals/is-object */ "./node_modules/core-js-pure/internals/is-object.js"); +var anInstance = __webpack_require__(/*! ../internals/an-instance */ "./node_modules/core-js-pure/internals/an-instance.js"); +var speciesConstructor = __webpack_require__(/*! ../internals/species-constructor */ "./node_modules/core-js-pure/internals/species-constructor.js"); +var task = (__webpack_require__(/*! ../internals/task */ "./node_modules/core-js-pure/internals/task.js").set); +var microtask = __webpack_require__(/*! ../internals/microtask */ "./node_modules/core-js-pure/internals/microtask.js"); +var hostReportErrors = __webpack_require__(/*! ../internals/host-report-errors */ "./node_modules/core-js-pure/internals/host-report-errors.js"); +var perform = __webpack_require__(/*! ../internals/perform */ "./node_modules/core-js-pure/internals/perform.js"); +var Queue = __webpack_require__(/*! ../internals/queue */ "./node_modules/core-js-pure/internals/queue.js"); +var InternalStateModule = __webpack_require__(/*! ../internals/internal-state */ "./node_modules/core-js-pure/internals/internal-state.js"); +var NativePromiseConstructor = __webpack_require__(/*! ../internals/promise-native-constructor */ "./node_modules/core-js-pure/internals/promise-native-constructor.js"); +var PromiseConstructorDetection = __webpack_require__(/*! ../internals/promise-constructor-detection */ "./node_modules/core-js-pure/internals/promise-constructor-detection.js"); +var newPromiseCapabilityModule = __webpack_require__(/*! ../internals/new-promise-capability */ "./node_modules/core-js-pure/internals/new-promise-capability.js"); + +var PROMISE = 'Promise'; +var FORCED_PROMISE_CONSTRUCTOR = PromiseConstructorDetection.CONSTRUCTOR; +var NATIVE_PROMISE_REJECTION_EVENT = PromiseConstructorDetection.REJECTION_EVENT; +var NATIVE_PROMISE_SUBCLASSING = PromiseConstructorDetection.SUBCLASSING; +var getInternalPromiseState = InternalStateModule.getterFor(PROMISE); +var setInternalState = InternalStateModule.set; +var NativePromisePrototype = NativePromiseConstructor && NativePromiseConstructor.prototype; +var PromiseConstructor = NativePromiseConstructor; +var PromisePrototype = NativePromisePrototype; +var TypeError = globalThis.TypeError; +var document = globalThis.document; +var process = globalThis.process; +var newPromiseCapability = newPromiseCapabilityModule.f; +var newGenericPromiseCapability = newPromiseCapability; + +var DISPATCH_EVENT = !!(document && document.createEvent && globalThis.dispatchEvent); +var UNHANDLED_REJECTION = 'unhandledrejection'; +var REJECTION_HANDLED = 'rejectionhandled'; +var PENDING = 0; +var FULFILLED = 1; +var REJECTED = 2; +var HANDLED = 1; +var UNHANDLED = 2; + +var Internal, OwnPromiseCapability, PromiseWrapper, nativeThen; + +// helpers +var isThenable = function (it) { + var then; + return isObject(it) && isCallable(then = it.then) ? then : false; +}; + +var callReaction = function (reaction, state) { + var value = state.value; + var ok = state.state === FULFILLED; + var handler = ok ? reaction.ok : reaction.fail; + var resolve = reaction.resolve; + var reject = reaction.reject; + var domain = reaction.domain; + var result, then, exited; + try { + if (handler) { + if (!ok) { + if (state.rejection === UNHANDLED) onHandleUnhandled(state); + state.rejection = HANDLED; + } + if (handler === true) result = value; + else { + if (domain) domain.enter(); + result = handler(value); // can throw + if (domain) { + domain.exit(); + exited = true; + } + } + if (result === reaction.promise) { + reject(new TypeError('Promise-chain cycle')); + } else if (then = isThenable(result)) { + call(then, result, resolve, reject); + } else resolve(result); + } else reject(value); + } catch (error) { + if (domain && !exited) domain.exit(); + reject(error); + } +}; + +var notify = function (state, isReject) { + if (state.notified) return; + state.notified = true; + microtask(function () { + var reactions = state.reactions; + var reaction; + while (reaction = reactions.get()) { + callReaction(reaction, state); + } + state.notified = false; + if (isReject && !state.rejection) onUnhandled(state); + }); +}; + +var dispatchEvent = function (name, promise, reason) { + var event, handler; + if (DISPATCH_EVENT) { + event = document.createEvent('Event'); + event.promise = promise; + event.reason = reason; + event.initEvent(name, false, true); + globalThis.dispatchEvent(event); + } else event = { promise: promise, reason: reason }; + if (!NATIVE_PROMISE_REJECTION_EVENT && (handler = globalThis['on' + name])) handler(event); + else if (name === UNHANDLED_REJECTION) hostReportErrors('Unhandled promise rejection', reason); +}; + +var onUnhandled = function (state) { + call(task, globalThis, function () { + var promise = state.facade; + var value = state.value; + var IS_UNHANDLED = isUnhandled(state); + var result; + if (IS_UNHANDLED) { + result = perform(function () { + if (IS_NODE) { + process.emit('unhandledRejection', value, promise); + } else dispatchEvent(UNHANDLED_REJECTION, promise, value); + }); + // Browsers should not trigger `rejectionHandled` event if it was handled here, NodeJS - should + state.rejection = IS_NODE || isUnhandled(state) ? UNHANDLED : HANDLED; + if (result.error) throw result.value; + } + }); +}; + +var isUnhandled = function (state) { + return state.rejection !== HANDLED && !state.parent; +}; + +var onHandleUnhandled = function (state) { + call(task, globalThis, function () { + var promise = state.facade; + if (IS_NODE) { + process.emit('rejectionHandled', promise); + } else dispatchEvent(REJECTION_HANDLED, promise, state.value); + }); +}; + +var bind = function (fn, state, unwrap) { + return function (value) { + fn(state, value, unwrap); + }; +}; + +var internalReject = function (state, value, unwrap) { + if (state.done) return; + state.done = true; + if (unwrap) state = unwrap; + state.value = value; + state.state = REJECTED; + notify(state, true); +}; + +var internalResolve = function (state, value, unwrap) { + if (state.done) return; + state.done = true; + if (unwrap) state = unwrap; + try { + if (state.facade === value) throw new TypeError("Promise can't be resolved itself"); + var then = isThenable(value); + if (then) { + microtask(function () { + var wrapper = { done: false }; + try { + call(then, value, + bind(internalResolve, wrapper, state), + bind(internalReject, wrapper, state) + ); + } catch (error) { + internalReject(wrapper, error, state); + } + }); + } else { + state.value = value; + state.state = FULFILLED; + notify(state, false); + } + } catch (error) { + internalReject({ done: false }, error, state); + } +}; + +// constructor polyfill +if (FORCED_PROMISE_CONSTRUCTOR) { + // 25.4.3.1 Promise(executor) + PromiseConstructor = function Promise(executor) { + anInstance(this, PromisePrototype); + aCallable(executor); + call(Internal, this); + var state = getInternalPromiseState(this); + try { + executor(bind(internalResolve, state), bind(internalReject, state)); + } catch (error) { + internalReject(state, error); + } + }; + + PromisePrototype = PromiseConstructor.prototype; + + // eslint-disable-next-line no-unused-vars -- required for `.length` + Internal = function Promise(executor) { + setInternalState(this, { + type: PROMISE, + done: false, + notified: false, + parent: false, + reactions: new Queue(), + rejection: false, + state: PENDING, + value: null + }); + }; + + // `Promise.prototype.then` method + // https://tc39.es/ecma262/#sec-promise.prototype.then + Internal.prototype = defineBuiltIn(PromisePrototype, 'then', function then(onFulfilled, onRejected) { + var state = getInternalPromiseState(this); + var reaction = newPromiseCapability(speciesConstructor(this, PromiseConstructor)); + state.parent = true; + reaction.ok = isCallable(onFulfilled) ? onFulfilled : true; + reaction.fail = isCallable(onRejected) && onRejected; + reaction.domain = IS_NODE ? process.domain : undefined; + if (state.state === PENDING) state.reactions.add(reaction); + else microtask(function () { + callReaction(reaction, state); + }); + return reaction.promise; + }); + + OwnPromiseCapability = function () { + var promise = new Internal(); + var state = getInternalPromiseState(promise); + this.promise = promise; + this.resolve = bind(internalResolve, state); + this.reject = bind(internalReject, state); + }; + + newPromiseCapabilityModule.f = newPromiseCapability = function (C) { + return C === PromiseConstructor || C === PromiseWrapper + ? new OwnPromiseCapability(C) + : newGenericPromiseCapability(C); + }; + + if (!IS_PURE && isCallable(NativePromiseConstructor) && NativePromisePrototype !== Object.prototype) { + nativeThen = NativePromisePrototype.then; + + if (!NATIVE_PROMISE_SUBCLASSING) { + // make `Promise#then` return a polyfilled `Promise` for native promise-based APIs + defineBuiltIn(NativePromisePrototype, 'then', function then(onFulfilled, onRejected) { + var that = this; + return new PromiseConstructor(function (resolve, reject) { + call(nativeThen, that, resolve, reject); + }).then(onFulfilled, onRejected); + // https://github.com/zloirock/core-js/issues/640 + }, { unsafe: true }); + } + + // make `.constructor === Promise` work for native promise-based APIs + try { + delete NativePromisePrototype.constructor; + } catch (error) { /* empty */ } + + // make `instanceof Promise` work for native promise-based APIs + if (setPrototypeOf) { + setPrototypeOf(NativePromisePrototype, PromisePrototype); + } + } +} + +$({ global: true, constructor: true, wrap: true, forced: FORCED_PROMISE_CONSTRUCTOR }, { + Promise: PromiseConstructor +}); + +setToStringTag(PromiseConstructor, PROMISE, false, true); +setSpecies(PROMISE); + + +/***/ }), + +/***/ "./node_modules/core-js-pure/modules/es.promise.finally.js": +/*!*****************************************************************!*\ + !*** ./node_modules/core-js-pure/modules/es.promise.finally.js ***! + \*****************************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var $ = __webpack_require__(/*! ../internals/export */ "./node_modules/core-js-pure/internals/export.js"); +var IS_PURE = __webpack_require__(/*! ../internals/is-pure */ "./node_modules/core-js-pure/internals/is-pure.js"); +var NativePromiseConstructor = __webpack_require__(/*! ../internals/promise-native-constructor */ "./node_modules/core-js-pure/internals/promise-native-constructor.js"); +var fails = __webpack_require__(/*! ../internals/fails */ "./node_modules/core-js-pure/internals/fails.js"); +var getBuiltIn = __webpack_require__(/*! ../internals/get-built-in */ "./node_modules/core-js-pure/internals/get-built-in.js"); +var isCallable = __webpack_require__(/*! ../internals/is-callable */ "./node_modules/core-js-pure/internals/is-callable.js"); +var speciesConstructor = __webpack_require__(/*! ../internals/species-constructor */ "./node_modules/core-js-pure/internals/species-constructor.js"); +var promiseResolve = __webpack_require__(/*! ../internals/promise-resolve */ "./node_modules/core-js-pure/internals/promise-resolve.js"); +var defineBuiltIn = __webpack_require__(/*! ../internals/define-built-in */ "./node_modules/core-js-pure/internals/define-built-in.js"); + +var NativePromisePrototype = NativePromiseConstructor && NativePromiseConstructor.prototype; + +// Safari bug https://bugs.webkit.org/show_bug.cgi?id=200829 +var NON_GENERIC = !!NativePromiseConstructor && fails(function () { + // eslint-disable-next-line unicorn/no-thenable -- required for testing + NativePromisePrototype['finally'].call({ then: function () { /* empty */ } }, function () { /* empty */ }); +}); + +// `Promise.prototype.finally` method +// https://tc39.es/ecma262/#sec-promise.prototype.finally +$({ target: 'Promise', proto: true, real: true, forced: NON_GENERIC }, { + 'finally': function (onFinally) { + var C = speciesConstructor(this, getBuiltIn('Promise')); + var isFunction = isCallable(onFinally); + return this.then( + isFunction ? function (x) { + return promiseResolve(C, onFinally()).then(function () { return x; }); + } : onFinally, + isFunction ? function (e) { + return promiseResolve(C, onFinally()).then(function () { throw e; }); + } : onFinally + ); + } +}); + +// makes sure that native promise-based APIs `Promise#finally` properly works with patched `Promise#then` +if (!IS_PURE && isCallable(NativePromiseConstructor)) { + var method = getBuiltIn('Promise').prototype['finally']; + if (NativePromisePrototype['finally'] !== method) { + defineBuiltIn(NativePromisePrototype, 'finally', method, { unsafe: true }); + } +} + + +/***/ }), + +/***/ "./node_modules/core-js-pure/modules/es.promise.js": +/*!*********************************************************!*\ + !*** ./node_modules/core-js-pure/modules/es.promise.js ***! + \*********************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +// TODO: Remove this module from `core-js@4` since it's split to modules listed below +__webpack_require__(/*! ../modules/es.promise.constructor */ "./node_modules/core-js-pure/modules/es.promise.constructor.js"); +__webpack_require__(/*! ../modules/es.promise.all */ "./node_modules/core-js-pure/modules/es.promise.all.js"); +__webpack_require__(/*! ../modules/es.promise.catch */ "./node_modules/core-js-pure/modules/es.promise.catch.js"); +__webpack_require__(/*! ../modules/es.promise.race */ "./node_modules/core-js-pure/modules/es.promise.race.js"); +__webpack_require__(/*! ../modules/es.promise.reject */ "./node_modules/core-js-pure/modules/es.promise.reject.js"); +__webpack_require__(/*! ../modules/es.promise.resolve */ "./node_modules/core-js-pure/modules/es.promise.resolve.js"); + + +/***/ }), + +/***/ "./node_modules/core-js-pure/modules/es.promise.race.js": +/*!**************************************************************!*\ + !*** ./node_modules/core-js-pure/modules/es.promise.race.js ***! + \**************************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var $ = __webpack_require__(/*! ../internals/export */ "./node_modules/core-js-pure/internals/export.js"); +var call = __webpack_require__(/*! ../internals/function-call */ "./node_modules/core-js-pure/internals/function-call.js"); +var aCallable = __webpack_require__(/*! ../internals/a-callable */ "./node_modules/core-js-pure/internals/a-callable.js"); +var newPromiseCapabilityModule = __webpack_require__(/*! ../internals/new-promise-capability */ "./node_modules/core-js-pure/internals/new-promise-capability.js"); +var perform = __webpack_require__(/*! ../internals/perform */ "./node_modules/core-js-pure/internals/perform.js"); +var iterate = __webpack_require__(/*! ../internals/iterate */ "./node_modules/core-js-pure/internals/iterate.js"); +var PROMISE_STATICS_INCORRECT_ITERATION = __webpack_require__(/*! ../internals/promise-statics-incorrect-iteration */ "./node_modules/core-js-pure/internals/promise-statics-incorrect-iteration.js"); + +// `Promise.race` method +// https://tc39.es/ecma262/#sec-promise.race +$({ target: 'Promise', stat: true, forced: PROMISE_STATICS_INCORRECT_ITERATION }, { + race: function race(iterable) { + var C = this; + var capability = newPromiseCapabilityModule.f(C); + var reject = capability.reject; + var result = perform(function () { + var $promiseResolve = aCallable(C.resolve); + iterate(iterable, function (promise) { + call($promiseResolve, C, promise).then(capability.resolve, reject); + }); + }); + if (result.error) reject(result.value); + return capability.promise; + } +}); + + +/***/ }), + +/***/ "./node_modules/core-js-pure/modules/es.promise.reject.js": +/*!****************************************************************!*\ + !*** ./node_modules/core-js-pure/modules/es.promise.reject.js ***! + \****************************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var $ = __webpack_require__(/*! ../internals/export */ "./node_modules/core-js-pure/internals/export.js"); +var newPromiseCapabilityModule = __webpack_require__(/*! ../internals/new-promise-capability */ "./node_modules/core-js-pure/internals/new-promise-capability.js"); +var FORCED_PROMISE_CONSTRUCTOR = (__webpack_require__(/*! ../internals/promise-constructor-detection */ "./node_modules/core-js-pure/internals/promise-constructor-detection.js").CONSTRUCTOR); + +// `Promise.reject` method +// https://tc39.es/ecma262/#sec-promise.reject +$({ target: 'Promise', stat: true, forced: FORCED_PROMISE_CONSTRUCTOR }, { + reject: function reject(r) { + var capability = newPromiseCapabilityModule.f(this); + var capabilityReject = capability.reject; + capabilityReject(r); + return capability.promise; + } +}); + + +/***/ }), + +/***/ "./node_modules/core-js-pure/modules/es.promise.resolve.js": +/*!*****************************************************************!*\ + !*** ./node_modules/core-js-pure/modules/es.promise.resolve.js ***! + \*****************************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var $ = __webpack_require__(/*! ../internals/export */ "./node_modules/core-js-pure/internals/export.js"); +var getBuiltIn = __webpack_require__(/*! ../internals/get-built-in */ "./node_modules/core-js-pure/internals/get-built-in.js"); +var IS_PURE = __webpack_require__(/*! ../internals/is-pure */ "./node_modules/core-js-pure/internals/is-pure.js"); +var NativePromiseConstructor = __webpack_require__(/*! ../internals/promise-native-constructor */ "./node_modules/core-js-pure/internals/promise-native-constructor.js"); +var FORCED_PROMISE_CONSTRUCTOR = (__webpack_require__(/*! ../internals/promise-constructor-detection */ "./node_modules/core-js-pure/internals/promise-constructor-detection.js").CONSTRUCTOR); +var promiseResolve = __webpack_require__(/*! ../internals/promise-resolve */ "./node_modules/core-js-pure/internals/promise-resolve.js"); + +var PromiseConstructorWrapper = getBuiltIn('Promise'); +var CHECK_WRAPPER = IS_PURE && !FORCED_PROMISE_CONSTRUCTOR; + +// `Promise.resolve` method +// https://tc39.es/ecma262/#sec-promise.resolve +$({ target: 'Promise', stat: true, forced: IS_PURE || FORCED_PROMISE_CONSTRUCTOR }, { + resolve: function resolve(x) { + return promiseResolve(CHECK_WRAPPER && this === PromiseConstructorWrapper ? NativePromiseConstructor : this, x); + } +}); + + +/***/ }), + +/***/ "./node_modules/core-js-pure/modules/es.promise.with-resolvers.js": +/*!************************************************************************!*\ + !*** ./node_modules/core-js-pure/modules/es.promise.with-resolvers.js ***! + \************************************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var $ = __webpack_require__(/*! ../internals/export */ "./node_modules/core-js-pure/internals/export.js"); +var newPromiseCapabilityModule = __webpack_require__(/*! ../internals/new-promise-capability */ "./node_modules/core-js-pure/internals/new-promise-capability.js"); + +// `Promise.withResolvers` method +// https://github.com/tc39/proposal-promise-with-resolvers +$({ target: 'Promise', stat: true }, { + withResolvers: function withResolvers() { + var promiseCapability = newPromiseCapabilityModule.f(this); + return { + promise: promiseCapability.promise, + resolve: promiseCapability.resolve, + reject: promiseCapability.reject + }; + } +}); + + +/***/ }), + +/***/ "./node_modules/core-js-pure/modules/es.string.iterator.js": +/*!*****************************************************************!*\ + !*** ./node_modules/core-js-pure/modules/es.string.iterator.js ***! + \*****************************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var charAt = (__webpack_require__(/*! ../internals/string-multibyte */ "./node_modules/core-js-pure/internals/string-multibyte.js").charAt); +var toString = __webpack_require__(/*! ../internals/to-string */ "./node_modules/core-js-pure/internals/to-string.js"); +var InternalStateModule = __webpack_require__(/*! ../internals/internal-state */ "./node_modules/core-js-pure/internals/internal-state.js"); +var defineIterator = __webpack_require__(/*! ../internals/iterator-define */ "./node_modules/core-js-pure/internals/iterator-define.js"); +var createIterResultObject = __webpack_require__(/*! ../internals/create-iter-result-object */ "./node_modules/core-js-pure/internals/create-iter-result-object.js"); + +var STRING_ITERATOR = 'String Iterator'; +var setInternalState = InternalStateModule.set; +var getInternalState = InternalStateModule.getterFor(STRING_ITERATOR); + +// `String.prototype[@@iterator]` method +// https://tc39.es/ecma262/#sec-string.prototype-@@iterator +defineIterator(String, 'String', function (iterated) { + setInternalState(this, { + type: STRING_ITERATOR, + string: toString(iterated), + index: 0 + }); +// `%StringIteratorPrototype%.next` method +// https://tc39.es/ecma262/#sec-%stringiteratorprototype%.next +}, function next() { + var state = getInternalState(this); + var string = state.string; + var index = state.index; + var point; + if (index >= string.length) return createIterResultObject(undefined, true); + point = charAt(string, index); + state.index += point.length; + return createIterResultObject(point, false); +}); + + +/***/ }), + +/***/ "./node_modules/core-js-pure/modules/web.dom-collections.iterator.js": +/*!***************************************************************************!*\ + !*** ./node_modules/core-js-pure/modules/web.dom-collections.iterator.js ***! + \***************************************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +__webpack_require__(/*! ../modules/es.array.iterator */ "./node_modules/core-js-pure/modules/es.array.iterator.js"); +var DOMIterables = __webpack_require__(/*! ../internals/dom-iterables */ "./node_modules/core-js-pure/internals/dom-iterables.js"); +var globalThis = __webpack_require__(/*! ../internals/global-this */ "./node_modules/core-js-pure/internals/global-this.js"); +var setToStringTag = __webpack_require__(/*! ../internals/set-to-string-tag */ "./node_modules/core-js-pure/internals/set-to-string-tag.js"); +var Iterators = __webpack_require__(/*! ../internals/iterators */ "./node_modules/core-js-pure/internals/iterators.js"); + +for (var COLLECTION_NAME in DOMIterables) { + setToStringTag(globalThis[COLLECTION_NAME], COLLECTION_NAME); + Iterators[COLLECTION_NAME] = Iterators.Array; +} + + +/***/ }), + +/***/ "./node_modules/core-js-pure/stable/promise/index.js": +/*!***********************************************************!*\ + !*** ./node_modules/core-js-pure/stable/promise/index.js ***! + \***********************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var parent = __webpack_require__(/*! ../../es/promise */ "./node_modules/core-js-pure/es/promise/index.js"); +__webpack_require__(/*! ../../modules/web.dom-collections.iterator */ "./node_modules/core-js-pure/modules/web.dom-collections.iterator.js"); + +module.exports = parent; + + +/***/ }), + +/***/ "./package.json": +/*!**********************!*\ + !*** ./package.json ***! + \**********************/ +/***/ ((module) => { + +"use strict"; +module.exports = /*#__PURE__*/JSON.parse('{"private":true,"name":"xstreaming","description":"xstreaming","version":"1.0.1","author":"Geocld ","main":"app/background.js","scripts":{"dev":"DEBUG=xstreaming:authenticationV2 nextron","build":"nextron build","lint":"eslint . --ext .ts && eslint renderer/ --ext .tsx","lint:fix":"eslint . --ext .ts --fix && eslint renderer/ --ext .tsx --fix","postinstall":"electron-builder install-app-deps","publish":"electron-builder -p onTag","flatpak-build":"nextron build --no-pack && electron-builder --dir"},"dependencies":{"@nextui-org/react":"^2.4.6","axios":"^1.7.7","compare-versions":"^6.1.0","debug":"^4.3.4","electron-serve":"^1.3.0","electron-store":"^8.0.1","express":"^4.18.3","express-http-proxy":"^2.0.0","express-ws":"^5.0.2","framer-motion":"^11.5.4","github-url-to-object":"^4.0.6","i18next":"23.14.0","ip-address":"^9.0.5","jose":"^5.1.0","next-i18next":"^15.3.1","next-themes":"^0.3.0","react-i18next":"^15.0.1","react-query":"^3.39.3","semver":"^7.6.3","uplot":"^1.6.30","uuid-1345":"^1.0.2","xbox-webapi":"^1.4.1","xstreaming-player":"^0.2.1","xvfb-maybe":"^0.2.1"},"devDependencies":{"@babel/core":"^7.24.4","@fortawesome/fontawesome-free":"^6.5.1","@next/eslint-plugin-next":"^14.2.2","@types/node":"^20.12.7","@types/react":"^18.2.47","@typescript-eslint/eslint-plugin":"^8.6.0","@typescript-eslint/parser":"^8.6.0","autoprefixer":"^10.4.20","babel-loader":"^9.1.3","electron":"28","electron-builder":"^24.13.3","eslint":"^8.57.0","eslint-plugin-react-hooks":"^4.6.2","eslint-plugin-react-refresh":"^0.4.12","next":"^13.5.6","nextron":"^8.13.0","node-loader":"^2.0.0","postcss":"^8.4.45","react":"^18.1.0","react-dom":"^18.1.0","sass":"^1.78.0","tailwindcss":"^3.4.10","typescript":"^5.3.3"},"packageManager":"yarn@1.22.19+sha1.4ba7fc5c6e704fce2066ecbfb0b0d8976fe62447"}'); + +/***/ }) + +/******/ }); +/************************************************************************/ +/******/ // The module cache +/******/ var __webpack_module_cache__ = {}; +/******/ +/******/ // The require function +/******/ function __webpack_require__(moduleId) { +/******/ // Check if module is in cache +/******/ var cachedModule = __webpack_module_cache__[moduleId]; +/******/ if (cachedModule !== undefined) { +/******/ return cachedModule.exports; +/******/ } +/******/ // Create a new module (and put it into the cache) +/******/ var module = __webpack_module_cache__[moduleId] = { +/******/ // no module.id needed +/******/ // no module.loaded needed +/******/ exports: {} +/******/ }; +/******/ +/******/ // Execute the module function +/******/ __webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__); +/******/ +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } +/******/ +/************************************************************************/ +/******/ /* webpack/runtime/compat get default export */ +/******/ (() => { +/******/ // getDefaultExport function for compatibility with non-harmony modules +/******/ __webpack_require__.n = (module) => { +/******/ var getter = module && module.__esModule ? +/******/ () => (module['default']) : +/******/ () => (module); +/******/ __webpack_require__.d(getter, { a: getter }); +/******/ return getter; +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/define property getters */ +/******/ (() => { +/******/ // define getter functions for harmony exports +/******/ __webpack_require__.d = (exports, definition) => { +/******/ for(var key in definition) { +/******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) { +/******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] }); +/******/ } +/******/ } +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/hasOwnProperty shorthand */ +/******/ (() => { +/******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop)) +/******/ })(); +/******/ +/******/ /* webpack/runtime/make namespace object */ +/******/ (() => { +/******/ // define __esModule on exports +/******/ __webpack_require__.r = (exports) => { +/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { +/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); +/******/ } +/******/ Object.defineProperty(exports, '__esModule', { value: true }); +/******/ }; +/******/ })(); +/******/ +/************************************************************************/ +var __webpack_exports__ = {}; +// This entry need to be wrapped in an IIFE because it need to be in strict mode. +(() => { +"use strict"; +/*!*************************!*\ + !*** ./main/preload.ts ***! + \*************************/ +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Preload: () => (/* binding */ Preload) +/* harmony export */ }); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_promise__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/promise */ "./node_modules/@babel/runtime-corejs3/core-js-stable/promise.js"); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_promise__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_promise__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var electron__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! electron */ "electron"); +/* harmony import */ var electron__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(electron__WEBPACK_IMPORTED_MODULE_1__); +/* harmony import */ var _package_json__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../package.json */ "./package.json"); + + + +const Preload = { + send(channel, action, data = {}) { + return new (_babel_runtime_corejs3_core_js_stable_promise__WEBPACK_IMPORTED_MODULE_0___default())((resolve, reject) => { + const requestId = Math.round(Math.random() * 1000); + electron__WEBPACK_IMPORTED_MODULE_1__.ipcRenderer.send(channel, { + id: requestId, + action: action, + data: data + }); + + // Wait for event back.. + const callbackFunction = (event, args) => { + if (args.action === action && args.id === requestId) { + electron__WEBPACK_IMPORTED_MODULE_1__.ipcRenderer.removeListener(channel, callbackFunction); + if (args.error === undefined) resolve(args.data);else { + // if(args.error.status){ + // alert('HTTP Status: ' + args.error.status + '\nPath:' + args.error.url + '\n' + args.error.body) + // } else { + // alert(args.error) + // } + reject(args.error); + } + } + }; + electron__WEBPACK_IMPORTED_MODULE_1__.ipcRenderer.on(channel, callbackFunction); + }); + }, + on(channel, listener) { + const wrapEvent = (event, args) => { + listener(event, args.action, args.data); + }; + electron__WEBPACK_IMPORTED_MODULE_1__.ipcRenderer.on(channel, wrapEvent); + return wrapEvent; + }, + onAction(channel, action, listener) { + const wrapEvent = (event, args) => { + if (args.action === action) { + listener(event, args.data); + } + }; + electron__WEBPACK_IMPORTED_MODULE_1__.ipcRenderer.on(channel, wrapEvent); + return wrapEvent; + }, + removeListener(channel, listener) { + electron__WEBPACK_IMPORTED_MODULE_1__.ipcRenderer.removeListener(channel, listener); + }, + openExternal(url) { + electron__WEBPACK_IMPORTED_MODULE_1__.shell.openExternal(url); + }, + getVersion() { + return _package_json__WEBPACK_IMPORTED_MODULE_2__.version; + } +}; +electron__WEBPACK_IMPORTED_MODULE_1__.contextBridge.exposeInMainWorld('XStreaming', Preload); +})(); + +/******/ return __webpack_exports__; +/******/ })() +; +}); +//# sourceMappingURL=data:application/json;charset=utf-8;base64,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LEtBQUssRUFBRUMsSUFBSSxLQUFLO01BQy9CSyxRQUFRLENBQUNOLEtBQUssRUFBRUMsSUFBSSxDQUFDWixNQUFNLEVBQUVZLElBQUksQ0FBQ1gsSUFBSSxDQUFDO0lBQzNDLENBQUM7SUFFRFAsaURBQVcsQ0FBQ3NCLEVBQUUsQ0FBQ2pCLE9BQU8sRUFBRW1CLFNBQVMsQ0FBQztJQUVsQyxPQUFPQSxTQUFTO0VBQ3BCLENBQUM7RUFFREMsUUFBUUEsQ0FBQ3BCLE9BQWMsRUFBRUMsTUFBYSxFQUFFaUIsUUFBUSxFQUFDO0lBRTdDLE1BQU1DLFNBQVMsR0FBR0EsQ0FBQ1AsS0FBSyxFQUFFQyxJQUFJLEtBQUs7TUFDL0IsSUFBR0EsSUFBSSxDQUFDWixNQUFNLEtBQUtBLE1BQU0sRUFBQztRQUN0QmlCLFFBQVEsQ0FBQ04sS0FBSyxFQUFFQyxJQUFJLENBQUNYLElBQUksQ0FBQztNQUM5QjtJQUNKLENBQUM7SUFFRFAsaURBQVcsQ0FBQ3NCLEVBQUUsQ0FBQ2pCLE9BQU8sRUFBRW1CLFNBQVMsQ0FBQztJQUVsQyxPQUFPQSxTQUFTO0VBQ3BCLENBQUM7RUFFREwsY0FBY0EsQ0FBQ2QsT0FBYyxFQUFFa0IsUUFBUSxFQUFDO0lBQ3BDdkIsaURBQVcsQ0FBQ21CLGNBQWMsQ0FBQ2QsT0FBTyxFQUFFa0IsUUFBUSxDQUFDO0VBQ2pELENBQUM7RUFFREcsWUFBWUEsQ0FBQ0MsR0FBVSxFQUFDO0lBQ3BCMUIsMkNBQUssQ0FBQ3lCLFlBQVksQ0FBQ0MsR0FBRyxDQUFDO0VBQzNCLENBQUM7RUFFREMsVUFBVUEsQ0FBQSxFQUFFO0lBQ1IsT0FBTzFCLGtEQUFXO0VBQ3RCO0FBQ0osQ0FBQztBQUVESCxtREFBYSxDQUFDK0IsaUJBQWlCLENBQUMsWUFBWSxFQUFFM0IsT0FBTyxDQUFDLEMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly94c3RyZWFtaW5nL3dlYnBhY2svdW5pdmVyc2FsTW9kdWxlRGVmaW5pdGlvbiIsIndlYnBhY2s6Ly94c3RyZWFtaW5nL2V4dGVybmFsIG5vZGUtY29tbW9uanMgXCJlbGVjdHJvblwiIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9jb3JlLWpzLXN0YWJsZS9wcm9taXNlLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL3Byb21pc2UvaW5kZXguanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2EtY2FsbGFibGUuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2EtY29uc3RydWN0b3IuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2EtcG9zc2libGUtcHJvdG90eXBlLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9hZGQtdG8tdW5zY29wYWJsZXMuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2FuLWluc3RhbmNlLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9hbi1vYmplY3QuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2FycmF5LWluY2x1ZGVzLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9hcnJheS1zbGljZS5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvY2hlY2stY29ycmVjdG5lc3Mtb2YtaXRlcmF0aW9uLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9jbGFzc29mLXJhdy5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvY2xhc3NvZi5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvY29weS1jb25zdHJ1Y3Rvci1wcm9wZXJ0aWVzLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9jb3JyZWN0LXByb3RvdHlwZS1nZXR0ZXIuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2NyZWF0ZS1pdGVyLXJlc3VsdC1vYmplY3QuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2NyZWF0ZS1ub24tZW51bWVyYWJsZS1wcm9wZXJ0eS5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5LWRlc2NyaXB0b3IuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbi1hY2Nlc3Nvci5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWluLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9kZWZpbmUtZ2xvYmFsLXByb3BlcnR5LmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9kZXNjcmlwdG9ycy5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZG9jdW1lbnQtY3JlYXRlLWVsZW1lbnQuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2RvbS1pdGVyYWJsZXMuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2VudW0tYnVnLWtleXMuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2Vudmlyb25tZW50LWlzLWlvcy1wZWJibGUuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2Vudmlyb25tZW50LWlzLWlvcy5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZW52aXJvbm1lbnQtaXMtbm9kZS5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZW52aXJvbm1lbnQtaXMtd2Vib3Mtd2Via2l0LmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9lbnZpcm9ubWVudC11c2VyLWFnZW50LmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9lbnZpcm9ubWVudC12OC12ZXJzaW9uLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9lbnZpcm9ubWVudC5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZXJyb3Itc3RhY2stY2xlYXIuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2Vycm9yLXN0YWNrLWluc3RhbGwuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2Vycm9yLXN0YWNrLWluc3RhbGxhYmxlLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9leHBvcnQuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2ZhaWxzLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9mdW5jdGlvbi1hcHBseS5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZC1jb250ZXh0LmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLW5hdGl2ZS5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbC5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZnVuY3Rpb24tbmFtZS5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzLWFjY2Vzc29yLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMtY2xhdXNlLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2dldC1idWlsdC1pbi5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZ2V0LWl0ZXJhdG9yLW1ldGhvZC5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZ2V0LWl0ZXJhdG9yLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9nZXQtbWV0aG9kLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9nbG9iYWwtdGhpcy5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eS5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvaGlkZGVuLWtleXMuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2hvc3QtcmVwb3J0LWVycm9ycy5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvaHRtbC5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvaWU4LWRvbS1kZWZpbmUuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2luZGV4ZWQtb2JqZWN0LmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9pbnNwZWN0LXNvdXJjZS5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvaW5zdGFsbC1lcnJvci1jYXVzZS5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvaW50ZXJuYWwtc3RhdGUuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2lzLWFycmF5LWl0ZXJhdG9yLW1ldGhvZC5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvaXMtY2FsbGFibGUuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2lzLWNvbnN0cnVjdG9yLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9pcy1mb3JjZWQuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2lzLW51bGwtb3ItdW5kZWZpbmVkLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9pcy1vYmplY3QuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2lzLXBvc3NpYmxlLXByb3RvdHlwZS5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvaXMtcHVyZS5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvaXMtc3ltYm9sLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9pdGVyYXRlLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9pdGVyYXRvci1jbG9zZS5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvaXRlcmF0b3ItY3JlYXRlLWNvbnN0cnVjdG9yLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9pdGVyYXRvci1kZWZpbmUuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2l0ZXJhdG9ycy1jb3JlLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9pdGVyYXRvcnMuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2xlbmd0aC1vZi1hcnJheS1saWtlLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9tYXRoLXRydW5jLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9taWNyb3Rhc2suanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL25ldy1wcm9taXNlLWNhcGFiaWxpdHkuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL25vcm1hbGl6ZS1zdHJpbmctYXJndW1lbnQuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL29iamVjdC1jcmVhdGUuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydGllcy5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eS5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvci5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktbmFtZXMuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LXN5bWJvbHMuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL29iamVjdC1nZXQtcHJvdG90eXBlLW9mLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9vYmplY3QtaXMtcHJvdG90eXBlLW9mLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9vYmplY3Qta2V5cy1pbnRlcm5hbC5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvb2JqZWN0LWtleXMuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL29iamVjdC1wcm9wZXJ0eS1pcy1lbnVtZXJhYmxlLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9vYmplY3Qtc2V0LXByb3RvdHlwZS1vZi5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvb2JqZWN0LXRvLXN0cmluZy5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvb3JkaW5hcnktdG8tcHJpbWl0aXZlLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9vd24ta2V5cy5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvcGF0aC5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvcGVyZm9ybS5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvcHJvbWlzZS1jb25zdHJ1Y3Rvci1kZXRlY3Rpb24uanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3Byb21pc2UtbmF0aXZlLWNvbnN0cnVjdG9yLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9wcm9taXNlLXJlc29sdmUuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3Byb21pc2Utc3RhdGljcy1pbmNvcnJlY3QtaXRlcmF0aW9uLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9xdWV1ZS5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvcmVxdWlyZS1vYmplY3QtY29lcmNpYmxlLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9zYWZlLWdldC1idWlsdC1pbi5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvc2V0LXNwZWNpZXMuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3NldC10by1zdHJpbmctdGFnLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9zaGFyZWQta2V5LmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9zaGFyZWQtc3RvcmUuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3NoYXJlZC5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvc3BlY2llcy1jb25zdHJ1Y3Rvci5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvc3RyaW5nLW11bHRpYnl0ZS5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvc3ltYm9sLWNvbnN0cnVjdG9yLWRldGVjdGlvbi5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvdGFzay5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvdG8tYWJzb2x1dGUtaW5kZXguanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0LmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy90by1pbnRlZ2VyLW9yLWluZmluaXR5LmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy90by1sZW5ndGguanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3RvLW9iamVjdC5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvdG8tcHJpbWl0aXZlLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy90by1wcm9wZXJ0eS1rZXkuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3RvLXN0cmluZy10YWctc3VwcG9ydC5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvdG8tc3RyaW5nLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy90cnktdG8tc3RyaW5nLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy91aWQuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3VzZS1zeW1ib2wtYXMtdWlkLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy92OC1wcm90b3R5cGUtZGVmaW5lLWJ1Zy5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvdmFsaWRhdGUtYXJndW1lbnRzLWxlbmd0aC5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvd2Vhay1tYXAtYmFzaWMtZGV0ZWN0aW9uLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLmFnZ3JlZ2F0ZS1lcnJvci5jb25zdHJ1Y3Rvci5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLmFnZ3JlZ2F0ZS1lcnJvci5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLmFycmF5Lml0ZXJhdG9yLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMub2JqZWN0LnRvLXN0cmluZy5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLnByb21pc2UuYWxsLXNldHRsZWQuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5wcm9taXNlLmFsbC5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLnByb21pc2UuYW55LmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMucHJvbWlzZS5jYXRjaC5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLnByb21pc2UuY29uc3RydWN0b3IuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5wcm9taXNlLmZpbmFsbHkuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5wcm9taXNlLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMucHJvbWlzZS5yYWNlLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMucHJvbWlzZS5yZWplY3QuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5wcm9taXNlLnJlc29sdmUuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5wcm9taXNlLndpdGgtcmVzb2x2ZXJzLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuc3RyaW5nLml0ZXJhdG9yLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvd2ViLmRvbS1jb2xsZWN0aW9ucy5pdGVyYXRvci5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvcHJvbWlzZS9pbmRleC5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nL3dlYnBhY2svYm9vdHN0cmFwIiwid2VicGFjazovL3hzdHJlYW1pbmcvd2VicGFjay9ydW50aW1lL2NvbXBhdCBnZXQgZGVmYXVsdCBleHBvcnQiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy93ZWJwYWNrL3J1bnRpbWUvZGVmaW5lIHByb3BlcnR5IGdldHRlcnMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy93ZWJwYWNrL3J1bnRpbWUvaGFzT3duUHJvcGVydHkgc2hvcnRoYW5kIiwid2VicGFjazovL3hzdHJlYW1pbmcvd2VicGFjay9ydW50aW1lL21ha2UgbmFtZXNwYWNlIG9iamVjdCIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbWFpbi9wcmVsb2FkLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIihmdW5jdGlvbiB3ZWJwYWNrVW5pdmVyc2FsTW9kdWxlRGVmaW5pdGlvbihyb290LCBmYWN0b3J5KSB7XG5cdGlmKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlID09PSAnb2JqZWN0Jylcblx0XHRtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkoKTtcblx0ZWxzZSBpZih0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpXG5cdFx0ZGVmaW5lKFtdLCBmYWN0b3J5KTtcblx0ZWxzZSB7XG5cdFx0dmFyIGEgPSBmYWN0b3J5KCk7XG5cdFx0Zm9yKHZhciBpIGluIGEpICh0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgPyBleHBvcnRzIDogcm9vdClbaV0gPSBhW2ldO1xuXHR9XG59KShnbG9iYWwsICgpID0+IHtcbnJldHVybiAiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJlbGVjdHJvblwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJjb3JlLWpzLXB1cmUvc3RhYmxlL3Byb21pc2VcIik7IiwiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5hZ2dyZWdhdGUtZXJyb3InKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuYXJyYXkuaXRlcmF0b3InKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMub2JqZWN0LnRvLXN0cmluZycpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5wcm9taXNlJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLnByb21pc2UuYWxsLXNldHRsZWQnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMucHJvbWlzZS5hbnknKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMucHJvbWlzZS53aXRoLXJlc29sdmVycycpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5wcm9taXNlLmZpbmFsbHknKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuc3RyaW5nLml0ZXJhdG9yJyk7XG52YXIgcGF0aCA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9wYXRoJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGF0aC5Qcm9taXNlO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciB0cnlUb1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90cnktdG8tc3RyaW5nJyk7XG5cbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG4vLyBgQXNzZXJ0OiBJc0NhbGxhYmxlKGFyZ3VtZW50KSBpcyB0cnVlYFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgaWYgKGlzQ2FsbGFibGUoYXJndW1lbnQpKSByZXR1cm4gYXJndW1lbnQ7XG4gIHRocm93IG5ldyAkVHlwZUVycm9yKHRyeVRvU3RyaW5nKGFyZ3VtZW50KSArICcgaXMgbm90IGEgZnVuY3Rpb24nKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgaXNDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jb25zdHJ1Y3RvcicpO1xudmFyIHRyeVRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RyeS10by1zdHJpbmcnKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbi8vIGBBc3NlcnQ6IElzQ29uc3RydWN0b3IoYXJndW1lbnQpIGlzIHRydWVgXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICBpZiAoaXNDb25zdHJ1Y3Rvcihhcmd1bWVudCkpIHJldHVybiBhcmd1bWVudDtcbiAgdGhyb3cgbmV3ICRUeXBlRXJyb3IodHJ5VG9TdHJpbmcoYXJndW1lbnQpICsgJyBpcyBub3QgYSBjb25zdHJ1Y3RvcicpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBpc1Bvc3NpYmxlUHJvdG90eXBlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXBvc3NpYmxlLXByb3RvdHlwZScpO1xuXG52YXIgJFN0cmluZyA9IFN0cmluZztcbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICBpZiAoaXNQb3NzaWJsZVByb3RvdHlwZShhcmd1bWVudCkpIHJldHVybiBhcmd1bWVudDtcbiAgdGhyb3cgbmV3ICRUeXBlRXJyb3IoXCJDYW4ndCBzZXQgXCIgKyAkU3RyaW5nKGFyZ3VtZW50KSArICcgYXMgYSBwcm90b3R5cGUnKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBpc1Byb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YnKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0LCBQcm90b3R5cGUpIHtcbiAgaWYgKGlzUHJvdG90eXBlT2YoUHJvdG90eXBlLCBpdCkpIHJldHVybiBpdDtcbiAgdGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0luY29ycmVjdCBpbnZvY2F0aW9uJyk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xuXG52YXIgJFN0cmluZyA9IFN0cmluZztcbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG4vLyBgQXNzZXJ0OiBUeXBlKGFyZ3VtZW50KSBpcyBPYmplY3RgXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICBpZiAoaXNPYmplY3QoYXJndW1lbnQpKSByZXR1cm4gYXJndW1lbnQ7XG4gIHRocm93IG5ldyAkVHlwZUVycm9yKCRTdHJpbmcoYXJndW1lbnQpICsgJyBpcyBub3QgYW4gb2JqZWN0Jyk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHRvSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdCcpO1xudmFyIHRvQWJzb2x1dGVJbmRleCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1hYnNvbHV0ZS1pbmRleCcpO1xudmFyIGxlbmd0aE9mQXJyYXlMaWtlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2xlbmd0aC1vZi1hcnJheS1saWtlJyk7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUueyBpbmRleE9mLCBpbmNsdWRlcyB9YCBtZXRob2RzIGltcGxlbWVudGF0aW9uXG52YXIgY3JlYXRlTWV0aG9kID0gZnVuY3Rpb24gKElTX0lOQ0xVREVTKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoJHRoaXMsIGVsLCBmcm9tSW5kZXgpIHtcbiAgICB2YXIgTyA9IHRvSW5kZXhlZE9iamVjdCgkdGhpcyk7XG4gICAgdmFyIGxlbmd0aCA9IGxlbmd0aE9mQXJyYXlMaWtlKE8pO1xuICAgIGlmIChsZW5ndGggPT09IDApIHJldHVybiAhSVNfSU5DTFVERVMgJiYgLTE7XG4gICAgdmFyIGluZGV4ID0gdG9BYnNvbHV0ZUluZGV4KGZyb21JbmRleCwgbGVuZ3RoKTtcbiAgICB2YXIgdmFsdWU7XG4gICAgLy8gQXJyYXkjaW5jbHVkZXMgdXNlcyBTYW1lVmFsdWVaZXJvIGVxdWFsaXR5IGFsZ29yaXRobVxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmUgLS0gTmFOIGNoZWNrXG4gICAgaWYgKElTX0lOQ0xVREVTICYmIGVsICE9PSBlbCkgd2hpbGUgKGxlbmd0aCA+IGluZGV4KSB7XG4gICAgICB2YWx1ZSA9IE9baW5kZXgrK107XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlIC0tIE5hTiBjaGVja1xuICAgICAgaWYgKHZhbHVlICE9PSB2YWx1ZSkgcmV0dXJuIHRydWU7XG4gICAgLy8gQXJyYXkjaW5kZXhPZiBpZ25vcmVzIGhvbGVzLCBBcnJheSNpbmNsdWRlcyAtIG5vdFxuICAgIH0gZWxzZSBmb3IgKDtsZW5ndGggPiBpbmRleDsgaW5kZXgrKykge1xuICAgICAgaWYgKChJU19JTkNMVURFUyB8fCBpbmRleCBpbiBPKSAmJiBPW2luZGV4XSA9PT0gZWwpIHJldHVybiBJU19JTkNMVURFUyB8fCBpbmRleCB8fCAwO1xuICAgIH0gcmV0dXJuICFJU19JTkNMVURFUyAmJiAtMTtcbiAgfTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICAvLyBgQXJyYXkucHJvdG90eXBlLmluY2x1ZGVzYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuaW5jbHVkZXNcbiAgaW5jbHVkZXM6IGNyZWF0ZU1ldGhvZCh0cnVlKSxcbiAgLy8gYEFycmF5LnByb3RvdHlwZS5pbmRleE9mYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuaW5kZXhvZlxuICBpbmRleE9mOiBjcmVhdGVNZXRob2QoZmFsc2UpXG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHVuY3VycnlUaGlzKFtdLnNsaWNlKTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcblxudmFyIElURVJBVE9SID0gd2VsbEtub3duU3ltYm9sKCdpdGVyYXRvcicpO1xudmFyIFNBRkVfQ0xPU0lORyA9IGZhbHNlO1xuXG50cnkge1xuICB2YXIgY2FsbGVkID0gMDtcbiAgdmFyIGl0ZXJhdG9yV2l0aFJldHVybiA9IHtcbiAgICBuZXh0OiBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4geyBkb25lOiAhIWNhbGxlZCsrIH07XG4gICAgfSxcbiAgICAncmV0dXJuJzogZnVuY3Rpb24gKCkge1xuICAgICAgU0FGRV9DTE9TSU5HID0gdHJ1ZTtcbiAgICB9XG4gIH07XG4gIGl0ZXJhdG9yV2l0aFJldHVybltJVEVSQVRPUl0gPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1hcnJheS1mcm9tLCBuby10aHJvdy1saXRlcmFsIC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG4gIEFycmF5LmZyb20oaXRlcmF0b3JXaXRoUmV0dXJuLCBmdW5jdGlvbiAoKSB7IHRocm93IDI7IH0pO1xufSBjYXRjaCAoZXJyb3IpIHsgLyogZW1wdHkgKi8gfVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChleGVjLCBTS0lQX0NMT1NJTkcpIHtcbiAgdHJ5IHtcbiAgICBpZiAoIVNLSVBfQ0xPU0lORyAmJiAhU0FGRV9DTE9TSU5HKSByZXR1cm4gZmFsc2U7XG4gIH0gY2F0Y2ggKGVycm9yKSB7IHJldHVybiBmYWxzZTsgfSAvLyB3b3JrYXJvdW5kIG9mIG9sZCBXZWJLaXQgKyBgZXZhbGAgYnVnXG4gIHZhciBJVEVSQVRJT05fU1VQUE9SVCA9IGZhbHNlO1xuICB0cnkge1xuICAgIHZhciBvYmplY3QgPSB7fTtcbiAgICBvYmplY3RbSVRFUkFUT1JdID0gZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbmV4dDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHJldHVybiB7IGRvbmU6IElURVJBVElPTl9TVVBQT1JUID0gdHJ1ZSB9O1xuICAgICAgICB9XG4gICAgICB9O1xuICAgIH07XG4gICAgZXhlYyhvYmplY3QpO1xuICB9IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG4gIHJldHVybiBJVEVSQVRJT05fU1VQUE9SVDtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG5cbnZhciB0b1N0cmluZyA9IHVuY3VycnlUaGlzKHt9LnRvU3RyaW5nKTtcbnZhciBzdHJpbmdTbGljZSA9IHVuY3VycnlUaGlzKCcnLnNsaWNlKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIHN0cmluZ1NsaWNlKHRvU3RyaW5nKGl0KSwgOCwgLTEpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBUT19TVFJJTkdfVEFHX1NVUFBPUlQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tc3RyaW5nLXRhZy1zdXBwb3J0Jyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGNsYXNzb2ZSYXcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZi1yYXcnKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcblxudmFyIFRPX1NUUklOR19UQUcgPSB3ZWxsS25vd25TeW1ib2woJ3RvU3RyaW5nVGFnJyk7XG52YXIgJE9iamVjdCA9IE9iamVjdDtcblxuLy8gRVMzIHdyb25nIGhlcmVcbnZhciBDT1JSRUNUX0FSR1VNRU5UUyA9IGNsYXNzb2ZSYXcoZnVuY3Rpb24gKCkgeyByZXR1cm4gYXJndW1lbnRzOyB9KCkpID09PSAnQXJndW1lbnRzJztcblxuLy8gZmFsbGJhY2sgZm9yIElFMTEgU2NyaXB0IEFjY2VzcyBEZW5pZWQgZXJyb3JcbnZhciB0cnlHZXQgPSBmdW5jdGlvbiAoaXQsIGtleSkge1xuICB0cnkge1xuICAgIHJldHVybiBpdFtrZXldO1xuICB9IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG59O1xuXG4vLyBnZXR0aW5nIHRhZyBmcm9tIEVTNisgYE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmdgXG5tb2R1bGUuZXhwb3J0cyA9IFRPX1NUUklOR19UQUdfU1VQUE9SVCA/IGNsYXNzb2ZSYXcgOiBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIE8sIHRhZywgcmVzdWx0O1xuICByZXR1cm4gaXQgPT09IHVuZGVmaW5lZCA/ICdVbmRlZmluZWQnIDogaXQgPT09IG51bGwgPyAnTnVsbCdcbiAgICAvLyBAQHRvU3RyaW5nVGFnIGNhc2VcbiAgICA6IHR5cGVvZiAodGFnID0gdHJ5R2V0KE8gPSAkT2JqZWN0KGl0KSwgVE9fU1RSSU5HX1RBRykpID09ICdzdHJpbmcnID8gdGFnXG4gICAgLy8gYnVpbHRpblRhZyBjYXNlXG4gICAgOiBDT1JSRUNUX0FSR1VNRU5UUyA/IGNsYXNzb2ZSYXcoTylcbiAgICAvLyBFUzMgYXJndW1lbnRzIGZhbGxiYWNrXG4gICAgOiAocmVzdWx0ID0gY2xhc3NvZlJhdyhPKSkgPT09ICdPYmplY3QnICYmIGlzQ2FsbGFibGUoTy5jYWxsZWUpID8gJ0FyZ3VtZW50cycgOiByZXN1bHQ7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgb3duS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vd24ta2V5cycpO1xudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvck1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yJyk7XG52YXIgZGVmaW5lUHJvcGVydHlNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh0YXJnZXQsIHNvdXJjZSwgZXhjZXB0aW9ucykge1xuICB2YXIga2V5cyA9IG93bktleXMoc291cmNlKTtcbiAgdmFyIGRlZmluZVByb3BlcnR5ID0gZGVmaW5lUHJvcGVydHlNb2R1bGUuZjtcbiAgdmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IGdldE93blByb3BlcnR5RGVzY3JpcHRvck1vZHVsZS5mO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIga2V5ID0ga2V5c1tpXTtcbiAgICBpZiAoIWhhc093bih0YXJnZXQsIGtleSkgJiYgIShleGNlcHRpb25zICYmIGhhc093bihleGNlcHRpb25zLCBrZXkpKSkge1xuICAgICAgZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihzb3VyY2UsIGtleSkpO1xuICAgIH1cbiAgfVxufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIEYoKSB7IC8qIGVtcHR5ICovIH1cbiAgRi5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBudWxsO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldHByb3RvdHlwZW9mIC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG4gIHJldHVybiBPYmplY3QuZ2V0UHJvdG90eXBlT2YobmV3IEYoKSkgIT09IEYucHJvdG90eXBlO1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBgQ3JlYXRlSXRlclJlc3VsdE9iamVjdGAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWNyZWF0ZWl0ZXJyZXN1bHRvYmplY3Rcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHZhbHVlLCBkb25lKSB7XG4gIHJldHVybiB7IHZhbHVlOiB2YWx1ZSwgZG9uZTogZG9uZSB9O1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGRlZmluZVByb3BlcnR5TW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKTtcbnZhciBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcblxubW9kdWxlLmV4cG9ydHMgPSBERVNDUklQVE9SUyA/IGZ1bmN0aW9uIChvYmplY3QsIGtleSwgdmFsdWUpIHtcbiAgcmV0dXJuIGRlZmluZVByb3BlcnR5TW9kdWxlLmYob2JqZWN0LCBrZXksIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvcigxLCB2YWx1ZSkpO1xufSA6IGZ1bmN0aW9uIChvYmplY3QsIGtleSwgdmFsdWUpIHtcbiAgb2JqZWN0W2tleV0gPSB2YWx1ZTtcbiAgcmV0dXJuIG9iamVjdDtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChiaXRtYXAsIHZhbHVlKSB7XG4gIHJldHVybiB7XG4gICAgZW51bWVyYWJsZTogIShiaXRtYXAgJiAxKSxcbiAgICBjb25maWd1cmFibGU6ICEoYml0bWFwICYgMiksXG4gICAgd3JpdGFibGU6ICEoYml0bWFwICYgNCksXG4gICAgdmFsdWU6IHZhbHVlXG4gIH07XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGRlZmluZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodGFyZ2V0LCBuYW1lLCBkZXNjcmlwdG9yKSB7XG4gIHJldHVybiBkZWZpbmVQcm9wZXJ0eS5mKHRhcmdldCwgbmFtZSwgZGVzY3JpcHRvcik7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHknKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodGFyZ2V0LCBrZXksIHZhbHVlLCBvcHRpb25zKSB7XG4gIGlmIChvcHRpb25zICYmIG9wdGlvbnMuZW51bWVyYWJsZSkgdGFyZ2V0W2tleV0gPSB2YWx1ZTtcbiAgZWxzZSBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkodGFyZ2V0LCBrZXksIHZhbHVlKTtcbiAgcmV0dXJuIHRhcmdldDtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnR5IC0tIHNhZmVcbnZhciBkZWZpbmVQcm9wZXJ0eSA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICB0cnkge1xuICAgIGRlZmluZVByb3BlcnR5KGdsb2JhbFRoaXMsIGtleSwgeyB2YWx1ZTogdmFsdWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgZ2xvYmFsVGhpc1trZXldID0gdmFsdWU7XG4gIH0gcmV0dXJuIHZhbHVlO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xuXG4vLyBEZXRlY3QgSUU4J3MgaW5jb21wbGV0ZSBkZWZpbmVQcm9wZXJ0eSBpbXBsZW1lbnRhdGlvblxubW9kdWxlLmV4cG9ydHMgPSAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnR5IC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG4gIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoe30sIDEsIHsgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiA3OyB9IH0pWzFdICE9PSA3O1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xuXG52YXIgZG9jdW1lbnQgPSBnbG9iYWxUaGlzLmRvY3VtZW50O1xuLy8gdHlwZW9mIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQgaXMgJ29iamVjdCcgaW4gb2xkIElFXG52YXIgRVhJU1RTID0gaXNPYmplY3QoZG9jdW1lbnQpICYmIGlzT2JqZWN0KGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gRVhJU1RTID8gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChpdCkgOiB7fTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG4vLyBpdGVyYWJsZSBET00gY29sbGVjdGlvbnNcbi8vIGZsYWcgLSBgaXRlcmFibGVgIGludGVyZmFjZSAtICdlbnRyaWVzJywgJ2tleXMnLCAndmFsdWVzJywgJ2ZvckVhY2gnIG1ldGhvZHNcbm1vZHVsZS5leHBvcnRzID0ge1xuICBDU1NSdWxlTGlzdDogMCxcbiAgQ1NTU3R5bGVEZWNsYXJhdGlvbjogMCxcbiAgQ1NTVmFsdWVMaXN0OiAwLFxuICBDbGllbnRSZWN0TGlzdDogMCxcbiAgRE9NUmVjdExpc3Q6IDAsXG4gIERPTVN0cmluZ0xpc3Q6IDAsXG4gIERPTVRva2VuTGlzdDogMSxcbiAgRGF0YVRyYW5zZmVySXRlbUxpc3Q6IDAsXG4gIEZpbGVMaXN0OiAwLFxuICBIVE1MQWxsQ29sbGVjdGlvbjogMCxcbiAgSFRNTENvbGxlY3Rpb246IDAsXG4gIEhUTUxGb3JtRWxlbWVudDogMCxcbiAgSFRNTFNlbGVjdEVsZW1lbnQ6IDAsXG4gIE1lZGlhTGlzdDogMCxcbiAgTWltZVR5cGVBcnJheTogMCxcbiAgTmFtZWROb2RlTWFwOiAwLFxuICBOb2RlTGlzdDogMSxcbiAgUGFpbnRSZXF1ZXN0TGlzdDogMCxcbiAgUGx1Z2luOiAwLFxuICBQbHVnaW5BcnJheTogMCxcbiAgU1ZHTGVuZ3RoTGlzdDogMCxcbiAgU1ZHTnVtYmVyTGlzdDogMCxcbiAgU1ZHUGF0aFNlZ0xpc3Q6IDAsXG4gIFNWR1BvaW50TGlzdDogMCxcbiAgU1ZHU3RyaW5nTGlzdDogMCxcbiAgU1ZHVHJhbnNmb3JtTGlzdDogMCxcbiAgU291cmNlQnVmZmVyTGlzdDogMCxcbiAgU3R5bGVTaGVldExpc3Q6IDAsXG4gIFRleHRUcmFja0N1ZUxpc3Q6IDAsXG4gIFRleHRUcmFja0xpc3Q6IDAsXG4gIFRvdWNoTGlzdDogMFxufTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIElFOC0gZG9uJ3QgZW51bSBidWcga2V5c1xubW9kdWxlLmV4cG9ydHMgPSBbXG4gICdjb25zdHJ1Y3RvcicsXG4gICdoYXNPd25Qcm9wZXJ0eScsXG4gICdpc1Byb3RvdHlwZU9mJyxcbiAgJ3Byb3BlcnR5SXNFbnVtZXJhYmxlJyxcbiAgJ3RvTG9jYWxlU3RyaW5nJyxcbiAgJ3RvU3RyaW5nJyxcbiAgJ3ZhbHVlT2YnXG5dO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHVzZXJBZ2VudCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbnZpcm9ubWVudC11c2VyLWFnZW50Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gL2lwYWR8aXBob25lfGlwb2QvaS50ZXN0KHVzZXJBZ2VudCkgJiYgdHlwZW9mIFBlYmJsZSAhPSAndW5kZWZpbmVkJztcbiIsIid1c2Ugc3RyaWN0JztcbnZhciB1c2VyQWdlbnQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW52aXJvbm1lbnQtdXNlci1hZ2VudCcpO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVkb3Mvbm8tdnVsbmVyYWJsZSAtLSBzYWZlXG5tb2R1bGUuZXhwb3J0cyA9IC8oPzppcGFkfGlwaG9uZXxpcG9kKS4qYXBwbGV3ZWJraXQvaS50ZXN0KHVzZXJBZ2VudCk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgRU5WSVJPTk1FTlQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW52aXJvbm1lbnQnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBFTlZJUk9OTUVOVCA9PT0gJ05PREUnO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHVzZXJBZ2VudCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbnZpcm9ubWVudC11c2VyLWFnZW50Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gL3dlYjBzKD8hLipjaHJvbWUpL2kudGVzdCh1c2VyQWdlbnQpO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcblxudmFyIG5hdmlnYXRvciA9IGdsb2JhbFRoaXMubmF2aWdhdG9yO1xudmFyIHVzZXJBZ2VudCA9IG5hdmlnYXRvciAmJiBuYXZpZ2F0b3IudXNlckFnZW50O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHVzZXJBZ2VudCA/IFN0cmluZyh1c2VyQWdlbnQpIDogJyc7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xudmFyIHVzZXJBZ2VudCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbnZpcm9ubWVudC11c2VyLWFnZW50Jyk7XG5cbnZhciBwcm9jZXNzID0gZ2xvYmFsVGhpcy5wcm9jZXNzO1xudmFyIERlbm8gPSBnbG9iYWxUaGlzLkRlbm87XG52YXIgdmVyc2lvbnMgPSBwcm9jZXNzICYmIHByb2Nlc3MudmVyc2lvbnMgfHwgRGVubyAmJiBEZW5vLnZlcnNpb247XG52YXIgdjggPSB2ZXJzaW9ucyAmJiB2ZXJzaW9ucy52ODtcbnZhciBtYXRjaCwgdmVyc2lvbjtcblxuaWYgKHY4KSB7XG4gIG1hdGNoID0gdjguc3BsaXQoJy4nKTtcbiAgLy8gaW4gb2xkIENocm9tZSwgdmVyc2lvbnMgb2YgVjggaXNuJ3QgVjggPSBDaHJvbWUgLyAxMFxuICAvLyBidXQgdGhlaXIgY29ycmVjdCB2ZXJzaW9ucyBhcmUgbm90IGludGVyZXN0aW5nIGZvciB1c1xuICB2ZXJzaW9uID0gbWF0Y2hbMF0gPiAwICYmIG1hdGNoWzBdIDwgNCA/IDEgOiArKG1hdGNoWzBdICsgbWF0Y2hbMV0pO1xufVxuXG4vLyBCcm93c2VyRlMgTm9kZUpTIGBwcm9jZXNzYCBwb2x5ZmlsbCBpbmNvcnJlY3RseSBzZXQgYC52OGAgdG8gYDAuMGBcbi8vIHNvIGNoZWNrIGB1c2VyQWdlbnRgIGV2ZW4gaWYgYC52OGAgZXhpc3RzLCBidXQgMFxuaWYgKCF2ZXJzaW9uICYmIHVzZXJBZ2VudCkge1xuICBtYXRjaCA9IHVzZXJBZ2VudC5tYXRjaCgvRWRnZVxcLyhcXGQrKS8pO1xuICBpZiAoIW1hdGNoIHx8IG1hdGNoWzFdID49IDc0KSB7XG4gICAgbWF0Y2ggPSB1c2VyQWdlbnQubWF0Y2goL0Nocm9tZVxcLyhcXGQrKS8pO1xuICAgIGlmIChtYXRjaCkgdmVyc2lvbiA9ICttYXRjaFsxXTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHZlcnNpb247XG4iLCIndXNlIHN0cmljdCc7XG4vKiBnbG9iYWwgQnVuLCBEZW5vIC0tIGRldGVjdGlvbiAqL1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcbnZhciB1c2VyQWdlbnQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW52aXJvbm1lbnQtdXNlci1hZ2VudCcpO1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZi1yYXcnKTtcblxudmFyIHVzZXJBZ2VudFN0YXJ0c1dpdGggPSBmdW5jdGlvbiAoc3RyaW5nKSB7XG4gIHJldHVybiB1c2VyQWdlbnQuc2xpY2UoMCwgc3RyaW5nLmxlbmd0aCkgPT09IHN0cmluZztcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gKGZ1bmN0aW9uICgpIHtcbiAgaWYgKHVzZXJBZ2VudFN0YXJ0c1dpdGgoJ0J1bi8nKSkgcmV0dXJuICdCVU4nO1xuICBpZiAodXNlckFnZW50U3RhcnRzV2l0aCgnQ2xvdWRmbGFyZS1Xb3JrZXJzJykpIHJldHVybiAnQ0xPVURGTEFSRSc7XG4gIGlmICh1c2VyQWdlbnRTdGFydHNXaXRoKCdEZW5vLycpKSByZXR1cm4gJ0RFTk8nO1xuICBpZiAodXNlckFnZW50U3RhcnRzV2l0aCgnTm9kZS5qcy8nKSkgcmV0dXJuICdOT0RFJztcbiAgaWYgKGdsb2JhbFRoaXMuQnVuICYmIHR5cGVvZiBCdW4udmVyc2lvbiA9PSAnc3RyaW5nJykgcmV0dXJuICdCVU4nO1xuICBpZiAoZ2xvYmFsVGhpcy5EZW5vICYmIHR5cGVvZiBEZW5vLnZlcnNpb24gPT0gJ29iamVjdCcpIHJldHVybiAnREVOTyc7XG4gIGlmIChjbGFzc29mKGdsb2JhbFRoaXMucHJvY2VzcykgPT09ICdwcm9jZXNzJykgcmV0dXJuICdOT0RFJztcbiAgaWYgKGdsb2JhbFRoaXMud2luZG93ICYmIGdsb2JhbFRoaXMuZG9jdW1lbnQpIHJldHVybiAnQlJPV1NFUic7XG4gIHJldHVybiAnUkVTVCc7XG59KSgpO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xuXG52YXIgJEVycm9yID0gRXJyb3I7XG52YXIgcmVwbGFjZSA9IHVuY3VycnlUaGlzKCcnLnJlcGxhY2UpO1xuXG52YXIgVEVTVCA9IChmdW5jdGlvbiAoYXJnKSB7IHJldHVybiBTdHJpbmcobmV3ICRFcnJvcihhcmcpLnN0YWNrKTsgfSkoJ3p4Y2FzZCcpO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlZG9zL25vLXZ1bG5lcmFibGUgLS0gc2FmZVxudmFyIFY4X09SX0NIQUtSQV9TVEFDS19FTlRSWSA9IC9cXG5cXHMqYXQgW146XSo6W15cXG5dKi87XG52YXIgSVNfVjhfT1JfQ0hBS1JBX1NUQUNLID0gVjhfT1JfQ0hBS1JBX1NUQUNLX0VOVFJZLnRlc3QoVEVTVCk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHN0YWNrLCBkcm9wRW50cmllcykge1xuICBpZiAoSVNfVjhfT1JfQ0hBS1JBX1NUQUNLICYmIHR5cGVvZiBzdGFjayA9PSAnc3RyaW5nJyAmJiAhJEVycm9yLnByZXBhcmVTdGFja1RyYWNlKSB7XG4gICAgd2hpbGUgKGRyb3BFbnRyaWVzLS0pIHN0YWNrID0gcmVwbGFjZShzdGFjaywgVjhfT1JfQ0hBS1JBX1NUQUNLX0VOVFJZLCAnJyk7XG4gIH0gcmV0dXJuIHN0YWNrO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLW5vbi1lbnVtZXJhYmxlLXByb3BlcnR5Jyk7XG52YXIgY2xlYXJFcnJvclN0YWNrID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Vycm9yLXN0YWNrLWNsZWFyJyk7XG52YXIgRVJST1JfU1RBQ0tfSU5TVEFMTEFCTEUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXJyb3Itc3RhY2staW5zdGFsbGFibGUnKTtcblxuLy8gbm9uLXN0YW5kYXJkIFY4XG52YXIgY2FwdHVyZVN0YWNrVHJhY2UgPSBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZXJyb3IsIEMsIHN0YWNrLCBkcm9wRW50cmllcykge1xuICBpZiAoRVJST1JfU1RBQ0tfSU5TVEFMTEFCTEUpIHtcbiAgICBpZiAoY2FwdHVyZVN0YWNrVHJhY2UpIGNhcHR1cmVTdGFja1RyYWNlKGVycm9yLCBDKTtcbiAgICBlbHNlIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eShlcnJvciwgJ3N0YWNrJywgY2xlYXJFcnJvclN0YWNrKHN0YWNrLCBkcm9wRW50cmllcykpO1xuICB9XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eS1kZXNjcmlwdG9yJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgdmFyIGVycm9yID0gbmV3IEVycm9yKCdhJyk7XG4gIGlmICghKCdzdGFjaycgaW4gZXJyb3IpKSByZXR1cm4gdHJ1ZTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSBzYWZlXG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlcnJvciwgJ3N0YWNrJywgY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yKDEsIDcpKTtcbiAgcmV0dXJuIGVycm9yLnN0YWNrICE9PSA3O1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xudmFyIGFwcGx5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWFwcGx5Jyk7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzLWNsYXVzZScpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvcicpLmY7XG52YXIgaXNGb3JjZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtZm9yY2VkJyk7XG52YXIgcGF0aCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9wYXRoJyk7XG52YXIgYmluZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLWNvbnRleHQnKTtcbnZhciBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLW5vbi1lbnVtZXJhYmxlLXByb3BlcnR5Jyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbi8vIGFkZCBkZWJ1Z2dpbmcgaW5mb1xucmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZC1zdG9yZScpO1xuXG52YXIgd3JhcENvbnN0cnVjdG9yID0gZnVuY3Rpb24gKE5hdGl2ZUNvbnN0cnVjdG9yKSB7XG4gIHZhciBXcmFwcGVyID0gZnVuY3Rpb24gKGEsIGIsIGMpIHtcbiAgICBpZiAodGhpcyBpbnN0YW5jZW9mIFdyYXBwZXIpIHtcbiAgICAgIHN3aXRjaCAoYXJndW1lbnRzLmxlbmd0aCkge1xuICAgICAgICBjYXNlIDA6IHJldHVybiBuZXcgTmF0aXZlQ29uc3RydWN0b3IoKTtcbiAgICAgICAgY2FzZSAxOiByZXR1cm4gbmV3IE5hdGl2ZUNvbnN0cnVjdG9yKGEpO1xuICAgICAgICBjYXNlIDI6IHJldHVybiBuZXcgTmF0aXZlQ29uc3RydWN0b3IoYSwgYik7XG4gICAgICB9IHJldHVybiBuZXcgTmF0aXZlQ29uc3RydWN0b3IoYSwgYiwgYyk7XG4gICAgfSByZXR1cm4gYXBwbHkoTmF0aXZlQ29uc3RydWN0b3IsIHRoaXMsIGFyZ3VtZW50cyk7XG4gIH07XG4gIFdyYXBwZXIucHJvdG90eXBlID0gTmF0aXZlQ29uc3RydWN0b3IucHJvdG90eXBlO1xuICByZXR1cm4gV3JhcHBlcjtcbn07XG5cbi8qXG4gIG9wdGlvbnMudGFyZ2V0ICAgICAgICAgLSBuYW1lIG9mIHRoZSB0YXJnZXQgb2JqZWN0XG4gIG9wdGlvbnMuZ2xvYmFsICAgICAgICAgLSB0YXJnZXQgaXMgdGhlIGdsb2JhbCBvYmplY3RcbiAgb3B0aW9ucy5zdGF0ICAgICAgICAgICAtIGV4cG9ydCBhcyBzdGF0aWMgbWV0aG9kcyBvZiB0YXJnZXRcbiAgb3B0aW9ucy5wcm90byAgICAgICAgICAtIGV4cG9ydCBhcyBwcm90b3R5cGUgbWV0aG9kcyBvZiB0YXJnZXRcbiAgb3B0aW9ucy5yZWFsICAgICAgICAgICAtIHJlYWwgcHJvdG90eXBlIG1ldGhvZCBmb3IgdGhlIGBwdXJlYCB2ZXJzaW9uXG4gIG9wdGlvbnMuZm9yY2VkICAgICAgICAgLSBleHBvcnQgZXZlbiBpZiB0aGUgbmF0aXZlIGZlYXR1cmUgaXMgYXZhaWxhYmxlXG4gIG9wdGlvbnMuYmluZCAgICAgICAgICAgLSBiaW5kIG1ldGhvZHMgdG8gdGhlIHRhcmdldCwgcmVxdWlyZWQgZm9yIHRoZSBgcHVyZWAgdmVyc2lvblxuICBvcHRpb25zLndyYXAgICAgICAgICAgIC0gd3JhcCBjb25zdHJ1Y3RvcnMgdG8gcHJldmVudGluZyBnbG9iYWwgcG9sbHV0aW9uLCByZXF1aXJlZCBmb3IgdGhlIGBwdXJlYCB2ZXJzaW9uXG4gIG9wdGlvbnMudW5zYWZlICAgICAgICAgLSB1c2UgdGhlIHNpbXBsZSBhc3NpZ25tZW50IG9mIHByb3BlcnR5IGluc3RlYWQgb2YgZGVsZXRlICsgZGVmaW5lUHJvcGVydHlcbiAgb3B0aW9ucy5zaGFtICAgICAgICAgICAtIGFkZCBhIGZsYWcgdG8gbm90IGNvbXBsZXRlbHkgZnVsbCBwb2x5ZmlsbHNcbiAgb3B0aW9ucy5lbnVtZXJhYmxlICAgICAtIGV4cG9ydCBhcyBlbnVtZXJhYmxlIHByb3BlcnR5XG4gIG9wdGlvbnMuZG9udENhbGxHZXRTZXQgLSBwcmV2ZW50IGNhbGxpbmcgYSBnZXR0ZXIgb24gdGFyZ2V0XG4gIG9wdGlvbnMubmFtZSAgICAgICAgICAgLSB0aGUgLm5hbWUgb2YgdGhlIGZ1bmN0aW9uIGlmIGl0IGRvZXMgbm90IG1hdGNoIHRoZSBrZXlcbiovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvcHRpb25zLCBzb3VyY2UpIHtcbiAgdmFyIFRBUkdFVCA9IG9wdGlvbnMudGFyZ2V0O1xuICB2YXIgR0xPQkFMID0gb3B0aW9ucy5nbG9iYWw7XG4gIHZhciBTVEFUSUMgPSBvcHRpb25zLnN0YXQ7XG4gIHZhciBQUk9UTyA9IG9wdGlvbnMucHJvdG87XG5cbiAgdmFyIG5hdGl2ZVNvdXJjZSA9IEdMT0JBTCA/IGdsb2JhbFRoaXMgOiBTVEFUSUMgPyBnbG9iYWxUaGlzW1RBUkdFVF0gOiBnbG9iYWxUaGlzW1RBUkdFVF0gJiYgZ2xvYmFsVGhpc1tUQVJHRVRdLnByb3RvdHlwZTtcblxuICB2YXIgdGFyZ2V0ID0gR0xPQkFMID8gcGF0aCA6IHBhdGhbVEFSR0VUXSB8fCBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkocGF0aCwgVEFSR0VULCB7fSlbVEFSR0VUXTtcbiAgdmFyIHRhcmdldFByb3RvdHlwZSA9IHRhcmdldC5wcm90b3R5cGU7XG5cbiAgdmFyIEZPUkNFRCwgVVNFX05BVElWRSwgVklSVFVBTF9QUk9UT1RZUEU7XG4gIHZhciBrZXksIHNvdXJjZVByb3BlcnR5LCB0YXJnZXRQcm9wZXJ0eSwgbmF0aXZlUHJvcGVydHksIHJlc3VsdFByb3BlcnR5LCBkZXNjcmlwdG9yO1xuXG4gIGZvciAoa2V5IGluIHNvdXJjZSkge1xuICAgIEZPUkNFRCA9IGlzRm9yY2VkKEdMT0JBTCA/IGtleSA6IFRBUkdFVCArIChTVEFUSUMgPyAnLicgOiAnIycpICsga2V5LCBvcHRpb25zLmZvcmNlZCk7XG4gICAgLy8gY29udGFpbnMgaW4gbmF0aXZlXG4gICAgVVNFX05BVElWRSA9ICFGT1JDRUQgJiYgbmF0aXZlU291cmNlICYmIGhhc093bihuYXRpdmVTb3VyY2UsIGtleSk7XG5cbiAgICB0YXJnZXRQcm9wZXJ0eSA9IHRhcmdldFtrZXldO1xuXG4gICAgaWYgKFVTRV9OQVRJVkUpIGlmIChvcHRpb25zLmRvbnRDYWxsR2V0U2V0KSB7XG4gICAgICBkZXNjcmlwdG9yID0gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG5hdGl2ZVNvdXJjZSwga2V5KTtcbiAgICAgIG5hdGl2ZVByb3BlcnR5ID0gZGVzY3JpcHRvciAmJiBkZXNjcmlwdG9yLnZhbHVlO1xuICAgIH0gZWxzZSBuYXRpdmVQcm9wZXJ0eSA9IG5hdGl2ZVNvdXJjZVtrZXldO1xuXG4gICAgLy8gZXhwb3J0IG5hdGl2ZSBvciBpbXBsZW1lbnRhdGlvblxuICAgIHNvdXJjZVByb3BlcnR5ID0gKFVTRV9OQVRJVkUgJiYgbmF0aXZlUHJvcGVydHkpID8gbmF0aXZlUHJvcGVydHkgOiBzb3VyY2Vba2V5XTtcblxuICAgIGlmICghRk9SQ0VEICYmICFQUk9UTyAmJiB0eXBlb2YgdGFyZ2V0UHJvcGVydHkgPT0gdHlwZW9mIHNvdXJjZVByb3BlcnR5KSBjb250aW51ZTtcblxuICAgIC8vIGJpbmQgbWV0aG9kcyB0byBnbG9iYWwgZm9yIGNhbGxpbmcgZnJvbSBleHBvcnQgY29udGV4dFxuICAgIGlmIChvcHRpb25zLmJpbmQgJiYgVVNFX05BVElWRSkgcmVzdWx0UHJvcGVydHkgPSBiaW5kKHNvdXJjZVByb3BlcnR5LCBnbG9iYWxUaGlzKTtcbiAgICAvLyB3cmFwIGdsb2JhbCBjb25zdHJ1Y3RvcnMgZm9yIHByZXZlbnQgY2hhbmdlcyBpbiB0aGlzIHZlcnNpb25cbiAgICBlbHNlIGlmIChvcHRpb25zLndyYXAgJiYgVVNFX05BVElWRSkgcmVzdWx0UHJvcGVydHkgPSB3cmFwQ29uc3RydWN0b3Ioc291cmNlUHJvcGVydHkpO1xuICAgIC8vIG1ha2Ugc3RhdGljIHZlcnNpb25zIGZvciBwcm90b3R5cGUgbWV0aG9kc1xuICAgIGVsc2UgaWYgKFBST1RPICYmIGlzQ2FsbGFibGUoc291cmNlUHJvcGVydHkpKSByZXN1bHRQcm9wZXJ0eSA9IHVuY3VycnlUaGlzKHNvdXJjZVByb3BlcnR5KTtcbiAgICAvLyBkZWZhdWx0IGNhc2VcbiAgICBlbHNlIHJlc3VsdFByb3BlcnR5ID0gc291cmNlUHJvcGVydHk7XG5cbiAgICAvLyBhZGQgYSBmbGFnIHRvIG5vdCBjb21wbGV0ZWx5IGZ1bGwgcG9seWZpbGxzXG4gICAgaWYgKG9wdGlvbnMuc2hhbSB8fCAoc291cmNlUHJvcGVydHkgJiYgc291cmNlUHJvcGVydHkuc2hhbSkgfHwgKHRhcmdldFByb3BlcnR5ICYmIHRhcmdldFByb3BlcnR5LnNoYW0pKSB7XG4gICAgICBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkocmVzdWx0UHJvcGVydHksICdzaGFtJywgdHJ1ZSk7XG4gICAgfVxuXG4gICAgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KHRhcmdldCwga2V5LCByZXN1bHRQcm9wZXJ0eSk7XG5cbiAgICBpZiAoUFJPVE8pIHtcbiAgICAgIFZJUlRVQUxfUFJPVE9UWVBFID0gVEFSR0VUICsgJ1Byb3RvdHlwZSc7XG4gICAgICBpZiAoIWhhc093bihwYXRoLCBWSVJUVUFMX1BST1RPVFlQRSkpIHtcbiAgICAgICAgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KHBhdGgsIFZJUlRVQUxfUFJPVE9UWVBFLCB7fSk7XG4gICAgICB9XG4gICAgICAvLyBleHBvcnQgdmlydHVhbCBwcm90b3R5cGUgbWV0aG9kc1xuICAgICAgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KHBhdGhbVklSVFVBTF9QUk9UT1RZUEVdLCBrZXksIHNvdXJjZVByb3BlcnR5KTtcbiAgICAgIC8vIGV4cG9ydCByZWFsIHByb3RvdHlwZSBtZXRob2RzXG4gICAgICBpZiAob3B0aW9ucy5yZWFsICYmIHRhcmdldFByb3RvdHlwZSAmJiAoRk9SQ0VEIHx8ICF0YXJnZXRQcm90b3R5cGVba2V5XSkpIHtcbiAgICAgICAgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KHRhcmdldFByb3RvdHlwZSwga2V5LCBzb3VyY2VQcm9wZXJ0eSk7XG4gICAgICB9XG4gICAgfVxuICB9XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZXhlYykge1xuICB0cnkge1xuICAgIHJldHVybiAhIWV4ZWMoKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBOQVRJVkVfQklORCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLW5hdGl2ZScpO1xuXG52YXIgRnVuY3Rpb25Qcm90b3R5cGUgPSBGdW5jdGlvbi5wcm90b3R5cGU7XG52YXIgYXBwbHkgPSBGdW5jdGlvblByb3RvdHlwZS5hcHBseTtcbnZhciBjYWxsID0gRnVuY3Rpb25Qcm90b3R5cGUuY2FsbDtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLXJlZmxlY3QgLS0gc2FmZVxubW9kdWxlLmV4cG9ydHMgPSB0eXBlb2YgUmVmbGVjdCA9PSAnb2JqZWN0JyAmJiBSZWZsZWN0LmFwcGx5IHx8IChOQVRJVkVfQklORCA/IGNhbGwuYmluZChhcHBseSkgOiBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBjYWxsLmFwcGx5KGFwcGx5LCBhcmd1bWVudHMpO1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzLWNsYXVzZScpO1xudmFyIGFDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLWNhbGxhYmxlJyk7XG52YXIgTkFUSVZFX0JJTkQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZC1uYXRpdmUnKTtcblxudmFyIGJpbmQgPSB1bmN1cnJ5VGhpcyh1bmN1cnJ5VGhpcy5iaW5kKTtcblxuLy8gb3B0aW9uYWwgLyBzaW1wbGUgY29udGV4dCBiaW5kaW5nXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChmbiwgdGhhdCkge1xuICBhQ2FsbGFibGUoZm4pO1xuICByZXR1cm4gdGhhdCA9PT0gdW5kZWZpbmVkID8gZm4gOiBOQVRJVkVfQklORCA/IGJpbmQoZm4sIHRoYXQpIDogZnVuY3Rpb24gKC8qIC4uLmFyZ3MgKi8pIHtcbiAgICByZXR1cm4gZm4uYXBwbHkodGhhdCwgYXJndW1lbnRzKTtcbiAgfTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tZnVuY3Rpb24tcHJvdG90eXBlLWJpbmQgLS0gc2FmZVxuICB2YXIgdGVzdCA9IChmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH0pLmJpbmQoKTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXByb3RvdHlwZS1idWlsdGlucyAtLSBzYWZlXG4gIHJldHVybiB0eXBlb2YgdGVzdCAhPSAnZnVuY3Rpb24nIHx8IHRlc3QuaGFzT3duUHJvcGVydHkoJ3Byb3RvdHlwZScpO1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgTkFUSVZFX0JJTkQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZC1uYXRpdmUnKTtcblxudmFyIGNhbGwgPSBGdW5jdGlvbi5wcm90b3R5cGUuY2FsbDtcblxubW9kdWxlLmV4cG9ydHMgPSBOQVRJVkVfQklORCA/IGNhbGwuYmluZChjYWxsKSA6IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIGNhbGwuYXBwbHkoY2FsbCwgYXJndW1lbnRzKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xuXG52YXIgRnVuY3Rpb25Qcm90b3R5cGUgPSBGdW5jdGlvbi5wcm90b3R5cGU7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5ZGVzY3JpcHRvciAtLSBzYWZlXG52YXIgZ2V0RGVzY3JpcHRvciA9IERFU0NSSVBUT1JTICYmIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG5cbnZhciBFWElTVFMgPSBoYXNPd24oRnVuY3Rpb25Qcm90b3R5cGUsICduYW1lJyk7XG4vLyBhZGRpdGlvbmFsIHByb3RlY3Rpb24gZnJvbSBtaW5pZmllZCAvIG1hbmdsZWQgLyBkcm9wcGVkIGZ1bmN0aW9uIG5hbWVzXG52YXIgUFJPUEVSID0gRVhJU1RTICYmIChmdW5jdGlvbiBzb21ldGhpbmcoKSB7IC8qIGVtcHR5ICovIH0pLm5hbWUgPT09ICdzb21ldGhpbmcnO1xudmFyIENPTkZJR1VSQUJMRSA9IEVYSVNUUyAmJiAoIURFU0NSSVBUT1JTIHx8IChERVNDUklQVE9SUyAmJiBnZXREZXNjcmlwdG9yKEZ1bmN0aW9uUHJvdG90eXBlLCAnbmFtZScpLmNvbmZpZ3VyYWJsZSkpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgRVhJU1RTOiBFWElTVFMsXG4gIFBST1BFUjogUFJPUEVSLFxuICBDT05GSUdVUkFCTEU6IENPTkZJR1VSQUJMRVxufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBhQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1jYWxsYWJsZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvYmplY3QsIGtleSwgbWV0aG9kKSB7XG4gIHRyeSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3IgLS0gc2FmZVxuICAgIHJldHVybiB1bmN1cnJ5VGhpcyhhQ2FsbGFibGUoT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIGtleSlbbWV0aG9kXSkpO1xuICB9IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGNsYXNzb2ZSYXcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZi1yYXcnKTtcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZm4pIHtcbiAgLy8gTmFzaG9ybiBidWc6XG4gIC8vICAgaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzExMjhcbiAgLy8gICBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvMTEzMFxuICBpZiAoY2xhc3NvZlJhdyhmbikgPT09ICdGdW5jdGlvbicpIHJldHVybiB1bmN1cnJ5VGhpcyhmbik7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIE5BVElWRV9CSU5EID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtbmF0aXZlJyk7XG5cbnZhciBGdW5jdGlvblByb3RvdHlwZSA9IEZ1bmN0aW9uLnByb3RvdHlwZTtcbnZhciBjYWxsID0gRnVuY3Rpb25Qcm90b3R5cGUuY2FsbDtcbnZhciB1bmN1cnJ5VGhpc1dpdGhCaW5kID0gTkFUSVZFX0JJTkQgJiYgRnVuY3Rpb25Qcm90b3R5cGUuYmluZC5iaW5kKGNhbGwsIGNhbGwpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IE5BVElWRV9CSU5EID8gdW5jdXJyeVRoaXNXaXRoQmluZCA6IGZ1bmN0aW9uIChmbikge1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBjYWxsLmFwcGx5KGZuLCBhcmd1bWVudHMpO1xuICB9O1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBwYXRoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3BhdGgnKTtcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xuXG52YXIgYUZ1bmN0aW9uID0gZnVuY3Rpb24gKHZhcmlhYmxlKSB7XG4gIHJldHVybiBpc0NhbGxhYmxlKHZhcmlhYmxlKSA/IHZhcmlhYmxlIDogdW5kZWZpbmVkO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAobmFtZXNwYWNlLCBtZXRob2QpIHtcbiAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPCAyID8gYUZ1bmN0aW9uKHBhdGhbbmFtZXNwYWNlXSkgfHwgYUZ1bmN0aW9uKGdsb2JhbFRoaXNbbmFtZXNwYWNlXSlcbiAgICA6IHBhdGhbbmFtZXNwYWNlXSAmJiBwYXRoW25hbWVzcGFjZV1bbWV0aG9kXSB8fCBnbG9iYWxUaGlzW25hbWVzcGFjZV0gJiYgZ2xvYmFsVGhpc1tuYW1lc3BhY2VdW21ldGhvZF07XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZicpO1xudmFyIGdldE1ldGhvZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtbWV0aG9kJyk7XG52YXIgaXNOdWxsT3JVbmRlZmluZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtbnVsbC1vci11bmRlZmluZWQnKTtcbnZhciBJdGVyYXRvcnMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0b3JzJyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciBJVEVSQVRPUiA9IHdlbGxLbm93blN5bWJvbCgnaXRlcmF0b3InKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKCFpc051bGxPclVuZGVmaW5lZChpdCkpIHJldHVybiBnZXRNZXRob2QoaXQsIElURVJBVE9SKVxuICAgIHx8IGdldE1ldGhvZChpdCwgJ0BAaXRlcmF0b3InKVxuICAgIHx8IEl0ZXJhdG9yc1tjbGFzc29mKGl0KV07XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIGFDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLWNhbGxhYmxlJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgdHJ5VG9TdHJpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdHJ5LXRvLXN0cmluZycpO1xudmFyIGdldEl0ZXJhdG9yTWV0aG9kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1pdGVyYXRvci1tZXRob2QnKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50LCB1c2luZ0l0ZXJhdG9yKSB7XG4gIHZhciBpdGVyYXRvck1ldGhvZCA9IGFyZ3VtZW50cy5sZW5ndGggPCAyID8gZ2V0SXRlcmF0b3JNZXRob2QoYXJndW1lbnQpIDogdXNpbmdJdGVyYXRvcjtcbiAgaWYgKGFDYWxsYWJsZShpdGVyYXRvck1ldGhvZCkpIHJldHVybiBhbk9iamVjdChjYWxsKGl0ZXJhdG9yTWV0aG9kLCBhcmd1bWVudCkpO1xuICB0aHJvdyBuZXcgJFR5cGVFcnJvcih0cnlUb1N0cmluZyhhcmd1bWVudCkgKyAnIGlzIG5vdCBpdGVyYWJsZScpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBhQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1jYWxsYWJsZScpO1xudmFyIGlzTnVsbE9yVW5kZWZpbmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW51bGwtb3ItdW5kZWZpbmVkJyk7XG5cbi8vIGBHZXRNZXRob2RgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1nZXRtZXRob2Rcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKFYsIFApIHtcbiAgdmFyIGZ1bmMgPSBWW1BdO1xuICByZXR1cm4gaXNOdWxsT3JVbmRlZmluZWQoZnVuYykgPyB1bmRlZmluZWQgOiBhQ2FsbGFibGUoZnVuYyk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGNoZWNrID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBpdCAmJiBpdC5NYXRoID09PSBNYXRoICYmIGl0O1xufTtcblxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzg2I2lzc3VlY29tbWVudC0xMTU3NTkwMjhcbm1vZHVsZS5leHBvcnRzID1cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLWdsb2JhbC10aGlzIC0tIHNhZmVcbiAgY2hlY2sodHlwZW9mIGdsb2JhbFRoaXMgPT0gJ29iamVjdCcgJiYgZ2xvYmFsVGhpcykgfHxcbiAgY2hlY2sodHlwZW9mIHdpbmRvdyA9PSAnb2JqZWN0JyAmJiB3aW5kb3cpIHx8XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1yZXN0cmljdGVkLWdsb2JhbHMgLS0gc2FmZVxuICBjaGVjayh0eXBlb2Ygc2VsZiA9PSAnb2JqZWN0JyAmJiBzZWxmKSB8fFxuICBjaGVjayh0eXBlb2YgZ2xvYmFsID09ICdvYmplY3QnICYmIGdsb2JhbCkgfHxcbiAgY2hlY2sodHlwZW9mIHRoaXMgPT0gJ29iamVjdCcgJiYgdGhpcykgfHxcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLW5ldy1mdW5jIC0tIGZhbGxiYWNrXG4gIChmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9KSgpIHx8IEZ1bmN0aW9uKCdyZXR1cm4gdGhpcycpKCk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tb2JqZWN0Jyk7XG5cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IHVuY3VycnlUaGlzKHt9Lmhhc093blByb3BlcnR5KTtcblxuLy8gYEhhc093blByb3BlcnR5YCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtaGFzb3ducHJvcGVydHlcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtaGFzb3duIC0tIHNhZmVcbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0Lmhhc093biB8fCBmdW5jdGlvbiBoYXNPd24oaXQsIGtleSkge1xuICByZXR1cm4gaGFzT3duUHJvcGVydHkodG9PYmplY3QoaXQpLCBrZXkpO1xufTtcbiIsIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0ge307XG4iLCIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhLCBiKSB7XG4gIHRyeSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGUgLS0gc2FmZVxuICAgIGFyZ3VtZW50cy5sZW5ndGggPT09IDEgPyBjb25zb2xlLmVycm9yKGEpIDogY29uc29sZS5lcnJvcihhLCBiKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHsgLyogZW1wdHkgKi8gfVxufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBnZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGdldEJ1aWx0SW4oJ2RvY3VtZW50JywgJ2RvY3VtZW50RWxlbWVudCcpO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBjcmVhdGVFbGVtZW50ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RvY3VtZW50LWNyZWF0ZS1lbGVtZW50Jyk7XG5cbi8vIFRoYW5rcyB0byBJRTggZm9yIGl0cyBmdW5ueSBkZWZpbmVQcm9wZXJ0eVxubW9kdWxlLmV4cG9ydHMgPSAhREVTQ1JJUFRPUlMgJiYgIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xuICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGNyZWF0ZUVsZW1lbnQoJ2RpdicpLCAnYScsIHtcbiAgICBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIDc7IH1cbiAgfSkuYSAhPT0gNztcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jbGFzc29mLXJhdycpO1xuXG52YXIgJE9iamVjdCA9IE9iamVjdDtcbnZhciBzcGxpdCA9IHVuY3VycnlUaGlzKCcnLnNwbGl0KTtcblxuLy8gZmFsbGJhY2sgZm9yIG5vbi1hcnJheS1saWtlIEVTMyBhbmQgbm9uLWVudW1lcmFibGUgb2xkIFY4IHN0cmluZ3Ncbm1vZHVsZS5leHBvcnRzID0gZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyB0aHJvd3MgYW4gZXJyb3IgaW4gcmhpbm8sIHNlZSBodHRwczovL2dpdGh1Yi5jb20vbW96aWxsYS9yaGluby9pc3N1ZXMvMzQ2XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wcm90b3R5cGUtYnVpbHRpbnMgLS0gc2FmZVxuICByZXR1cm4gISRPYmplY3QoJ3onKS5wcm9wZXJ0eUlzRW51bWVyYWJsZSgwKTtcbn0pID8gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBjbGFzc29mKGl0KSA9PT0gJ1N0cmluZycgPyBzcGxpdChpdCwgJycpIDogJE9iamVjdChpdCk7XG59IDogJE9iamVjdDtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgc3RvcmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkLXN0b3JlJyk7XG5cbnZhciBmdW5jdGlvblRvU3RyaW5nID0gdW5jdXJyeVRoaXMoRnVuY3Rpb24udG9TdHJpbmcpO1xuXG4vLyB0aGlzIGhlbHBlciBicm9rZW4gaW4gYGNvcmUtanNAMy40LjEtMy40LjRgLCBzbyB3ZSBjYW4ndCB1c2UgYHNoYXJlZGAgaGVscGVyXG5pZiAoIWlzQ2FsbGFibGUoc3RvcmUuaW5zcGVjdFNvdXJjZSkpIHtcbiAgc3RvcmUuaW5zcGVjdFNvdXJjZSA9IGZ1bmN0aW9uIChpdCkge1xuICAgIHJldHVybiBmdW5jdGlvblRvU3RyaW5nKGl0KTtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzdG9yZS5pbnNwZWN0U291cmNlO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xudmFyIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHknKTtcblxuLy8gYEluc3RhbGxFcnJvckNhdXNlYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9wcm9wb3NhbC1lcnJvci1jYXVzZS8jc2VjLWVycm9yb2JqZWN0cy1pbnN0YWxsLWVycm9yLWNhdXNlXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChPLCBvcHRpb25zKSB7XG4gIGlmIChpc09iamVjdChvcHRpb25zKSAmJiAnY2F1c2UnIGluIG9wdGlvbnMpIHtcbiAgICBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkoTywgJ2NhdXNlJywgb3B0aW9ucy5jYXVzZSk7XG4gIH1cbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgTkFUSVZFX1dFQUtfTUFQID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlYWstbWFwLWJhc2ljLWRldGVjdGlvbicpO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLW5vbi1lbnVtZXJhYmxlLXByb3BlcnR5Jyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciBzaGFyZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkLXN0b3JlJyk7XG52YXIgc2hhcmVkS2V5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZC1rZXknKTtcbnZhciBoaWRkZW5LZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hpZGRlbi1rZXlzJyk7XG5cbnZhciBPQkpFQ1RfQUxSRUFEWV9JTklUSUFMSVpFRCA9ICdPYmplY3QgYWxyZWFkeSBpbml0aWFsaXplZCc7XG52YXIgVHlwZUVycm9yID0gZ2xvYmFsVGhpcy5UeXBlRXJyb3I7XG52YXIgV2Vha01hcCA9IGdsb2JhbFRoaXMuV2Vha01hcDtcbnZhciBzZXQsIGdldCwgaGFzO1xuXG52YXIgZW5mb3JjZSA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaGFzKGl0KSA/IGdldChpdCkgOiBzZXQoaXQsIHt9KTtcbn07XG5cbnZhciBnZXR0ZXJGb3IgPSBmdW5jdGlvbiAoVFlQRSkge1xuICByZXR1cm4gZnVuY3Rpb24gKGl0KSB7XG4gICAgdmFyIHN0YXRlO1xuICAgIGlmICghaXNPYmplY3QoaXQpIHx8IChzdGF0ZSA9IGdldChpdCkpLnR5cGUgIT09IFRZUEUpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0luY29tcGF0aWJsZSByZWNlaXZlciwgJyArIFRZUEUgKyAnIHJlcXVpcmVkJyk7XG4gICAgfSByZXR1cm4gc3RhdGU7XG4gIH07XG59O1xuXG5pZiAoTkFUSVZFX1dFQUtfTUFQIHx8IHNoYXJlZC5zdGF0ZSkge1xuICB2YXIgc3RvcmUgPSBzaGFyZWQuc3RhdGUgfHwgKHNoYXJlZC5zdGF0ZSA9IG5ldyBXZWFrTWFwKCkpO1xuICAvKiBlc2xpbnQtZGlzYWJsZSBuby1zZWxmLWFzc2lnbiAtLSBwcm90b3R5cGUgbWV0aG9kcyBwcm90ZWN0aW9uICovXG4gIHN0b3JlLmdldCA9IHN0b3JlLmdldDtcbiAgc3RvcmUuaGFzID0gc3RvcmUuaGFzO1xuICBzdG9yZS5zZXQgPSBzdG9yZS5zZXQ7XG4gIC8qIGVzbGludC1lbmFibGUgbm8tc2VsZi1hc3NpZ24gLS0gcHJvdG90eXBlIG1ldGhvZHMgcHJvdGVjdGlvbiAqL1xuICBzZXQgPSBmdW5jdGlvbiAoaXQsIG1ldGFkYXRhKSB7XG4gICAgaWYgKHN0b3JlLmhhcyhpdCkpIHRocm93IG5ldyBUeXBlRXJyb3IoT0JKRUNUX0FMUkVBRFlfSU5JVElBTElaRUQpO1xuICAgIG1ldGFkYXRhLmZhY2FkZSA9IGl0O1xuICAgIHN0b3JlLnNldChpdCwgbWV0YWRhdGEpO1xuICAgIHJldHVybiBtZXRhZGF0YTtcbiAgfTtcbiAgZ2V0ID0gZnVuY3Rpb24gKGl0KSB7XG4gICAgcmV0dXJuIHN0b3JlLmdldChpdCkgfHwge307XG4gIH07XG4gIGhhcyA9IGZ1bmN0aW9uIChpdCkge1xuICAgIHJldHVybiBzdG9yZS5oYXMoaXQpO1xuICB9O1xufSBlbHNlIHtcbiAgdmFyIFNUQVRFID0gc2hhcmVkS2V5KCdzdGF0ZScpO1xuICBoaWRkZW5LZXlzW1NUQVRFXSA9IHRydWU7XG4gIHNldCA9IGZ1bmN0aW9uIChpdCwgbWV0YWRhdGEpIHtcbiAgICBpZiAoaGFzT3duKGl0LCBTVEFURSkpIHRocm93IG5ldyBUeXBlRXJyb3IoT0JKRUNUX0FMUkVBRFlfSU5JVElBTElaRUQpO1xuICAgIG1ldGFkYXRhLmZhY2FkZSA9IGl0O1xuICAgIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eShpdCwgU1RBVEUsIG1ldGFkYXRhKTtcbiAgICByZXR1cm4gbWV0YWRhdGE7XG4gIH07XG4gIGdldCA9IGZ1bmN0aW9uIChpdCkge1xuICAgIHJldHVybiBoYXNPd24oaXQsIFNUQVRFKSA/IGl0W1NUQVRFXSA6IHt9O1xuICB9O1xuICBoYXMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgICByZXR1cm4gaGFzT3duKGl0LCBTVEFURSk7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBzZXQ6IHNldCxcbiAgZ2V0OiBnZXQsXG4gIGhhczogaGFzLFxuICBlbmZvcmNlOiBlbmZvcmNlLFxuICBnZXR0ZXJGb3I6IGdldHRlckZvclxufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcbnZhciBJdGVyYXRvcnMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0b3JzJyk7XG5cbnZhciBJVEVSQVRPUiA9IHdlbGxLbm93blN5bWJvbCgnaXRlcmF0b3InKTtcbnZhciBBcnJheVByb3RvdHlwZSA9IEFycmF5LnByb3RvdHlwZTtcblxuLy8gY2hlY2sgb24gZGVmYXVsdCBBcnJheSBpdGVyYXRvclxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGl0ICE9PSB1bmRlZmluZWQgJiYgKEl0ZXJhdG9ycy5BcnJheSA9PT0gaXQgfHwgQXJyYXlQcm90b3R5cGVbSVRFUkFUT1JdID09PSBpdCk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1Jc0hUTUxEREEtaW50ZXJuYWwtc2xvdFxudmFyIGRvY3VtZW50QWxsID0gdHlwZW9mIGRvY3VtZW50ID09ICdvYmplY3QnICYmIGRvY3VtZW50LmFsbDtcblxuLy8gYElzQ2FsbGFibGVgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1pc2NhbGxhYmxlXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgdW5pY29ybi9uby10eXBlb2YtdW5kZWZpbmVkIC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG5tb2R1bGUuZXhwb3J0cyA9IHR5cGVvZiBkb2N1bWVudEFsbCA9PSAndW5kZWZpbmVkJyAmJiBkb2N1bWVudEFsbCAhPT0gdW5kZWZpbmVkID8gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHJldHVybiB0eXBlb2YgYXJndW1lbnQgPT0gJ2Z1bmN0aW9uJyB8fCBhcmd1bWVudCA9PT0gZG9jdW1lbnRBbGw7XG59IDogZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHJldHVybiB0eXBlb2YgYXJndW1lbnQgPT0gJ2Z1bmN0aW9uJztcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jbGFzc29mJyk7XG52YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcbnZhciBpbnNwZWN0U291cmNlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2luc3BlY3Qtc291cmNlJyk7XG5cbnZhciBub29wID0gZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9O1xudmFyIGNvbnN0cnVjdCA9IGdldEJ1aWx0SW4oJ1JlZmxlY3QnLCAnY29uc3RydWN0Jyk7XG52YXIgY29uc3RydWN0b3JSZWdFeHAgPSAvXlxccyooPzpjbGFzc3xmdW5jdGlvbilcXGIvO1xudmFyIGV4ZWMgPSB1bmN1cnJ5VGhpcyhjb25zdHJ1Y3RvclJlZ0V4cC5leGVjKTtcbnZhciBJTkNPUlJFQ1RfVE9fU1RSSU5HID0gIWNvbnN0cnVjdG9yUmVnRXhwLnRlc3Qobm9vcCk7XG5cbnZhciBpc0NvbnN0cnVjdG9yTW9kZXJuID0gZnVuY3Rpb24gaXNDb25zdHJ1Y3Rvcihhcmd1bWVudCkge1xuICBpZiAoIWlzQ2FsbGFibGUoYXJndW1lbnQpKSByZXR1cm4gZmFsc2U7XG4gIHRyeSB7XG4gICAgY29uc3RydWN0KG5vb3AsIFtdLCBhcmd1bWVudCk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59O1xuXG52YXIgaXNDb25zdHJ1Y3RvckxlZ2FjeSA9IGZ1bmN0aW9uIGlzQ29uc3RydWN0b3IoYXJndW1lbnQpIHtcbiAgaWYgKCFpc0NhbGxhYmxlKGFyZ3VtZW50KSkgcmV0dXJuIGZhbHNlO1xuICBzd2l0Y2ggKGNsYXNzb2YoYXJndW1lbnQpKSB7XG4gICAgY2FzZSAnQXN5bmNGdW5jdGlvbic6XG4gICAgY2FzZSAnR2VuZXJhdG9yRnVuY3Rpb24nOlxuICAgIGNhc2UgJ0FzeW5jR2VuZXJhdG9yRnVuY3Rpb24nOiByZXR1cm4gZmFsc2U7XG4gIH1cbiAgdHJ5IHtcbiAgICAvLyB3ZSBjYW4ndCBjaGVjayAucHJvdG90eXBlIHNpbmNlIGNvbnN0cnVjdG9ycyBwcm9kdWNlZCBieSAuYmluZCBoYXZlbid0IGl0XG4gICAgLy8gYEZ1bmN0aW9uI3RvU3RyaW5nYCB0aHJvd3Mgb24gc29tZSBidWlsdC1pdCBmdW5jdGlvbiBpbiBzb21lIGxlZ2FjeSBlbmdpbmVzXG4gICAgLy8gKGZvciBleGFtcGxlLCBgRE9NUXVhZGAgYW5kIHNpbWlsYXIgaW4gRkY0MS0pXG4gICAgcmV0dXJuIElOQ09SUkVDVF9UT19TVFJJTkcgfHwgISFleGVjKGNvbnN0cnVjdG9yUmVnRXhwLCBpbnNwZWN0U291cmNlKGFyZ3VtZW50KSk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbn07XG5cbmlzQ29uc3RydWN0b3JMZWdhY3kuc2hhbSA9IHRydWU7XG5cbi8vIGBJc0NvbnN0cnVjdG9yYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtaXNjb25zdHJ1Y3RvclxubW9kdWxlLmV4cG9ydHMgPSAhY29uc3RydWN0IHx8IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgdmFyIGNhbGxlZDtcbiAgcmV0dXJuIGlzQ29uc3RydWN0b3JNb2Rlcm4oaXNDb25zdHJ1Y3Rvck1vZGVybi5jYWxsKVxuICAgIHx8ICFpc0NvbnN0cnVjdG9yTW9kZXJuKE9iamVjdClcbiAgICB8fCAhaXNDb25zdHJ1Y3Rvck1vZGVybihmdW5jdGlvbiAoKSB7IGNhbGxlZCA9IHRydWU7IH0pXG4gICAgfHwgY2FsbGVkO1xufSkgPyBpc0NvbnN0cnVjdG9yTGVnYWN5IDogaXNDb25zdHJ1Y3Rvck1vZGVybjtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcblxudmFyIHJlcGxhY2VtZW50ID0gLyN8XFwucHJvdG90eXBlXFwuLztcblxudmFyIGlzRm9yY2VkID0gZnVuY3Rpb24gKGZlYXR1cmUsIGRldGVjdGlvbikge1xuICB2YXIgdmFsdWUgPSBkYXRhW25vcm1hbGl6ZShmZWF0dXJlKV07XG4gIHJldHVybiB2YWx1ZSA9PT0gUE9MWUZJTEwgPyB0cnVlXG4gICAgOiB2YWx1ZSA9PT0gTkFUSVZFID8gZmFsc2VcbiAgICA6IGlzQ2FsbGFibGUoZGV0ZWN0aW9uKSA/IGZhaWxzKGRldGVjdGlvbilcbiAgICA6ICEhZGV0ZWN0aW9uO1xufTtcblxudmFyIG5vcm1hbGl6ZSA9IGlzRm9yY2VkLm5vcm1hbGl6ZSA9IGZ1bmN0aW9uIChzdHJpbmcpIHtcbiAgcmV0dXJuIFN0cmluZyhzdHJpbmcpLnJlcGxhY2UocmVwbGFjZW1lbnQsICcuJykudG9Mb3dlckNhc2UoKTtcbn07XG5cbnZhciBkYXRhID0gaXNGb3JjZWQuZGF0YSA9IHt9O1xudmFyIE5BVElWRSA9IGlzRm9yY2VkLk5BVElWRSA9ICdOJztcbnZhciBQT0xZRklMTCA9IGlzRm9yY2VkLlBPTFlGSUxMID0gJ1AnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGlzRm9yY2VkO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gd2UgY2FuJ3QgdXNlIGp1c3QgYGl0ID09IG51bGxgIHNpbmNlIG9mIGBkb2N1bWVudC5hbGxgIHNwZWNpYWwgY2FzZVxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1Jc0hUTUxEREEtaW50ZXJuYWwtc2xvdC1hZWNcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBpdCA9PT0gbnVsbCB8fCBpdCA9PT0gdW5kZWZpbmVkO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiB0eXBlb2YgaXQgPT0gJ29iamVjdCcgPyBpdCAhPT0gbnVsbCA6IGlzQ2FsbGFibGUoaXQpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgcmV0dXJuIGlzT2JqZWN0KGFyZ3VtZW50KSB8fCBhcmd1bWVudCA9PT0gbnVsbDtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IHRydWU7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgaXNQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtaXMtcHJvdG90eXBlLW9mJyk7XG52YXIgVVNFX1NZTUJPTF9BU19VSUQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdXNlLXN5bWJvbC1hcy11aWQnKTtcblxudmFyICRPYmplY3QgPSBPYmplY3Q7XG5cbm1vZHVsZS5leHBvcnRzID0gVVNFX1NZTUJPTF9BU19VSUQgPyBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIHR5cGVvZiBpdCA9PSAnc3ltYm9sJztcbn0gOiBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyICRTeW1ib2wgPSBnZXRCdWlsdEluKCdTeW1ib2wnKTtcbiAgcmV0dXJuIGlzQ2FsbGFibGUoJFN5bWJvbCkgJiYgaXNQcm90b3R5cGVPZigkU3ltYm9sLnByb3RvdHlwZSwgJE9iamVjdChpdCkpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBiaW5kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtY29udGV4dCcpO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIHRyeVRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RyeS10by1zdHJpbmcnKTtcbnZhciBpc0FycmF5SXRlcmF0b3JNZXRob2QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtYXJyYXktaXRlcmF0b3ItbWV0aG9kJyk7XG52YXIgbGVuZ3RoT2ZBcnJheUxpa2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbGVuZ3RoLW9mLWFycmF5LWxpa2UnKTtcbnZhciBpc1Byb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YnKTtcbnZhciBnZXRJdGVyYXRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtaXRlcmF0b3InKTtcbnZhciBnZXRJdGVyYXRvck1ldGhvZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtaXRlcmF0b3ItbWV0aG9kJyk7XG52YXIgaXRlcmF0b3JDbG9zZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvci1jbG9zZScpO1xuXG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcblxudmFyIFJlc3VsdCA9IGZ1bmN0aW9uIChzdG9wcGVkLCByZXN1bHQpIHtcbiAgdGhpcy5zdG9wcGVkID0gc3RvcHBlZDtcbiAgdGhpcy5yZXN1bHQgPSByZXN1bHQ7XG59O1xuXG52YXIgUmVzdWx0UHJvdG90eXBlID0gUmVzdWx0LnByb3RvdHlwZTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXRlcmFibGUsIHVuYm91bmRGdW5jdGlvbiwgb3B0aW9ucykge1xuICB2YXIgdGhhdCA9IG9wdGlvbnMgJiYgb3B0aW9ucy50aGF0O1xuICB2YXIgQVNfRU5UUklFUyA9ICEhKG9wdGlvbnMgJiYgb3B0aW9ucy5BU19FTlRSSUVTKTtcbiAgdmFyIElTX1JFQ09SRCA9ICEhKG9wdGlvbnMgJiYgb3B0aW9ucy5JU19SRUNPUkQpO1xuICB2YXIgSVNfSVRFUkFUT1IgPSAhIShvcHRpb25zICYmIG9wdGlvbnMuSVNfSVRFUkFUT1IpO1xuICB2YXIgSU5URVJSVVBURUQgPSAhIShvcHRpb25zICYmIG9wdGlvbnMuSU5URVJSVVBURUQpO1xuICB2YXIgZm4gPSBiaW5kKHVuYm91bmRGdW5jdGlvbiwgdGhhdCk7XG4gIHZhciBpdGVyYXRvciwgaXRlckZuLCBpbmRleCwgbGVuZ3RoLCByZXN1bHQsIG5leHQsIHN0ZXA7XG5cbiAgdmFyIHN0b3AgPSBmdW5jdGlvbiAoY29uZGl0aW9uKSB7XG4gICAgaWYgKGl0ZXJhdG9yKSBpdGVyYXRvckNsb3NlKGl0ZXJhdG9yLCAnbm9ybWFsJywgY29uZGl0aW9uKTtcbiAgICByZXR1cm4gbmV3IFJlc3VsdCh0cnVlLCBjb25kaXRpb24pO1xuICB9O1xuXG4gIHZhciBjYWxsRm4gPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICBpZiAoQVNfRU5UUklFUykge1xuICAgICAgYW5PYmplY3QodmFsdWUpO1xuICAgICAgcmV0dXJuIElOVEVSUlVQVEVEID8gZm4odmFsdWVbMF0sIHZhbHVlWzFdLCBzdG9wKSA6IGZuKHZhbHVlWzBdLCB2YWx1ZVsxXSk7XG4gICAgfSByZXR1cm4gSU5URVJSVVBURUQgPyBmbih2YWx1ZSwgc3RvcCkgOiBmbih2YWx1ZSk7XG4gIH07XG5cbiAgaWYgKElTX1JFQ09SRCkge1xuICAgIGl0ZXJhdG9yID0gaXRlcmFibGUuaXRlcmF0b3I7XG4gIH0gZWxzZSBpZiAoSVNfSVRFUkFUT1IpIHtcbiAgICBpdGVyYXRvciA9IGl0ZXJhYmxlO1xuICB9IGVsc2Uge1xuICAgIGl0ZXJGbiA9IGdldEl0ZXJhdG9yTWV0aG9kKGl0ZXJhYmxlKTtcbiAgICBpZiAoIWl0ZXJGbikgdGhyb3cgbmV3ICRUeXBlRXJyb3IodHJ5VG9TdHJpbmcoaXRlcmFibGUpICsgJyBpcyBub3QgaXRlcmFibGUnKTtcbiAgICAvLyBvcHRpbWlzYXRpb24gZm9yIGFycmF5IGl0ZXJhdG9yc1xuICAgIGlmIChpc0FycmF5SXRlcmF0b3JNZXRob2QoaXRlckZuKSkge1xuICAgICAgZm9yIChpbmRleCA9IDAsIGxlbmd0aCA9IGxlbmd0aE9mQXJyYXlMaWtlKGl0ZXJhYmxlKTsgbGVuZ3RoID4gaW5kZXg7IGluZGV4KyspIHtcbiAgICAgICAgcmVzdWx0ID0gY2FsbEZuKGl0ZXJhYmxlW2luZGV4XSk7XG4gICAgICAgIGlmIChyZXN1bHQgJiYgaXNQcm90b3R5cGVPZihSZXN1bHRQcm90b3R5cGUsIHJlc3VsdCkpIHJldHVybiByZXN1bHQ7XG4gICAgICB9IHJldHVybiBuZXcgUmVzdWx0KGZhbHNlKTtcbiAgICB9XG4gICAgaXRlcmF0b3IgPSBnZXRJdGVyYXRvcihpdGVyYWJsZSwgaXRlckZuKTtcbiAgfVxuXG4gIG5leHQgPSBJU19SRUNPUkQgPyBpdGVyYWJsZS5uZXh0IDogaXRlcmF0b3IubmV4dDtcbiAgd2hpbGUgKCEoc3RlcCA9IGNhbGwobmV4dCwgaXRlcmF0b3IpKS5kb25lKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJlc3VsdCA9IGNhbGxGbihzdGVwLnZhbHVlKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgaXRlcmF0b3JDbG9zZShpdGVyYXRvciwgJ3Rocm93JywgZXJyb3IpO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIHJlc3VsdCA9PSAnb2JqZWN0JyAmJiByZXN1bHQgJiYgaXNQcm90b3R5cGVPZihSZXN1bHRQcm90b3R5cGUsIHJlc3VsdCkpIHJldHVybiByZXN1bHQ7XG4gIH0gcmV0dXJuIG5ldyBSZXN1bHQoZmFsc2UpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciBnZXRNZXRob2QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LW1ldGhvZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdGVyYXRvciwga2luZCwgdmFsdWUpIHtcbiAgdmFyIGlubmVyUmVzdWx0LCBpbm5lckVycm9yO1xuICBhbk9iamVjdChpdGVyYXRvcik7XG4gIHRyeSB7XG4gICAgaW5uZXJSZXN1bHQgPSBnZXRNZXRob2QoaXRlcmF0b3IsICdyZXR1cm4nKTtcbiAgICBpZiAoIWlubmVyUmVzdWx0KSB7XG4gICAgICBpZiAoa2luZCA9PT0gJ3Rocm93JykgdGhyb3cgdmFsdWU7XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuICAgIGlubmVyUmVzdWx0ID0gY2FsbChpbm5lclJlc3VsdCwgaXRlcmF0b3IpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGlubmVyRXJyb3IgPSB0cnVlO1xuICAgIGlubmVyUmVzdWx0ID0gZXJyb3I7XG4gIH1cbiAgaWYgKGtpbmQgPT09ICd0aHJvdycpIHRocm93IHZhbHVlO1xuICBpZiAoaW5uZXJFcnJvcikgdGhyb3cgaW5uZXJSZXN1bHQ7XG4gIGFuT2JqZWN0KGlubmVyUmVzdWx0KTtcbiAgcmV0dXJuIHZhbHVlO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBJdGVyYXRvclByb3RvdHlwZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvcnMtY29yZScpLkl0ZXJhdG9yUHJvdG90eXBlO1xudmFyIGNyZWF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtY3JlYXRlJyk7XG52YXIgY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eS1kZXNjcmlwdG9yJyk7XG52YXIgc2V0VG9TdHJpbmdUYWcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LXRvLXN0cmluZy10YWcnKTtcbnZhciBJdGVyYXRvcnMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0b3JzJyk7XG5cbnZhciByZXR1cm5UaGlzID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoSXRlcmF0b3JDb25zdHJ1Y3RvciwgTkFNRSwgbmV4dCwgRU5VTUVSQUJMRV9ORVhUKSB7XG4gIHZhciBUT19TVFJJTkdfVEFHID0gTkFNRSArICcgSXRlcmF0b3InO1xuICBJdGVyYXRvckNvbnN0cnVjdG9yLnByb3RvdHlwZSA9IGNyZWF0ZShJdGVyYXRvclByb3RvdHlwZSwgeyBuZXh0OiBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IoKyFFTlVNRVJBQkxFX05FWFQsIG5leHQpIH0pO1xuICBzZXRUb1N0cmluZ1RhZyhJdGVyYXRvckNvbnN0cnVjdG9yLCBUT19TVFJJTkdfVEFHLCBmYWxzZSwgdHJ1ZSk7XG4gIEl0ZXJhdG9yc1tUT19TVFJJTkdfVEFHXSA9IHJldHVyblRoaXM7XG4gIHJldHVybiBJdGVyYXRvckNvbnN0cnVjdG9yO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIElTX1BVUkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtcHVyZScpO1xudmFyIEZ1bmN0aW9uTmFtZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1uYW1lJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGNyZWF0ZUl0ZXJhdG9yQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0b3ItY3JlYXRlLWNvbnN0cnVjdG9yJyk7XG52YXIgZ2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1wcm90b3R5cGUtb2YnKTtcbnZhciBzZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3Qtc2V0LXByb3RvdHlwZS1vZicpO1xudmFyIHNldFRvU3RyaW5nVGFnID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC10by1zdHJpbmctdGFnJyk7XG52YXIgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1ub24tZW51bWVyYWJsZS1wcm9wZXJ0eScpO1xudmFyIGRlZmluZUJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWluJyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG52YXIgSXRlcmF0b3JzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdG9ycycpO1xudmFyIEl0ZXJhdG9yc0NvcmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0b3JzLWNvcmUnKTtcblxudmFyIFBST1BFUl9GVU5DVElPTl9OQU1FID0gRnVuY3Rpb25OYW1lLlBST1BFUjtcbnZhciBDT05GSUdVUkFCTEVfRlVOQ1RJT05fTkFNRSA9IEZ1bmN0aW9uTmFtZS5DT05GSUdVUkFCTEU7XG52YXIgSXRlcmF0b3JQcm90b3R5cGUgPSBJdGVyYXRvcnNDb3JlLkl0ZXJhdG9yUHJvdG90eXBlO1xudmFyIEJVR0dZX1NBRkFSSV9JVEVSQVRPUlMgPSBJdGVyYXRvcnNDb3JlLkJVR0dZX1NBRkFSSV9JVEVSQVRPUlM7XG52YXIgSVRFUkFUT1IgPSB3ZWxsS25vd25TeW1ib2woJ2l0ZXJhdG9yJyk7XG52YXIgS0VZUyA9ICdrZXlzJztcbnZhciBWQUxVRVMgPSAndmFsdWVzJztcbnZhciBFTlRSSUVTID0gJ2VudHJpZXMnO1xuXG52YXIgcmV0dXJuVGhpcyA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKEl0ZXJhYmxlLCBOQU1FLCBJdGVyYXRvckNvbnN0cnVjdG9yLCBuZXh0LCBERUZBVUxULCBJU19TRVQsIEZPUkNFRCkge1xuICBjcmVhdGVJdGVyYXRvckNvbnN0cnVjdG9yKEl0ZXJhdG9yQ29uc3RydWN0b3IsIE5BTUUsIG5leHQpO1xuXG4gIHZhciBnZXRJdGVyYXRpb25NZXRob2QgPSBmdW5jdGlvbiAoS0lORCkge1xuICAgIGlmIChLSU5EID09PSBERUZBVUxUICYmIGRlZmF1bHRJdGVyYXRvcikgcmV0dXJuIGRlZmF1bHRJdGVyYXRvcjtcbiAgICBpZiAoIUJVR0dZX1NBRkFSSV9JVEVSQVRPUlMgJiYgS0lORCAmJiBLSU5EIGluIEl0ZXJhYmxlUHJvdG90eXBlKSByZXR1cm4gSXRlcmFibGVQcm90b3R5cGVbS0lORF07XG5cbiAgICBzd2l0Y2ggKEtJTkQpIHtcbiAgICAgIGNhc2UgS0VZUzogcmV0dXJuIGZ1bmN0aW9uIGtleXMoKSB7IHJldHVybiBuZXcgSXRlcmF0b3JDb25zdHJ1Y3Rvcih0aGlzLCBLSU5EKTsgfTtcbiAgICAgIGNhc2UgVkFMVUVTOiByZXR1cm4gZnVuY3Rpb24gdmFsdWVzKCkgeyByZXR1cm4gbmV3IEl0ZXJhdG9yQ29uc3RydWN0b3IodGhpcywgS0lORCk7IH07XG4gICAgICBjYXNlIEVOVFJJRVM6IHJldHVybiBmdW5jdGlvbiBlbnRyaWVzKCkgeyByZXR1cm4gbmV3IEl0ZXJhdG9yQ29uc3RydWN0b3IodGhpcywgS0lORCk7IH07XG4gICAgfVxuXG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHsgcmV0dXJuIG5ldyBJdGVyYXRvckNvbnN0cnVjdG9yKHRoaXMpOyB9O1xuICB9O1xuXG4gIHZhciBUT19TVFJJTkdfVEFHID0gTkFNRSArICcgSXRlcmF0b3InO1xuICB2YXIgSU5DT1JSRUNUX1ZBTFVFU19OQU1FID0gZmFsc2U7XG4gIHZhciBJdGVyYWJsZVByb3RvdHlwZSA9IEl0ZXJhYmxlLnByb3RvdHlwZTtcbiAgdmFyIG5hdGl2ZUl0ZXJhdG9yID0gSXRlcmFibGVQcm90b3R5cGVbSVRFUkFUT1JdXG4gICAgfHwgSXRlcmFibGVQcm90b3R5cGVbJ0BAaXRlcmF0b3InXVxuICAgIHx8IERFRkFVTFQgJiYgSXRlcmFibGVQcm90b3R5cGVbREVGQVVMVF07XG4gIHZhciBkZWZhdWx0SXRlcmF0b3IgPSAhQlVHR1lfU0FGQVJJX0lURVJBVE9SUyAmJiBuYXRpdmVJdGVyYXRvciB8fCBnZXRJdGVyYXRpb25NZXRob2QoREVGQVVMVCk7XG4gIHZhciBhbnlOYXRpdmVJdGVyYXRvciA9IE5BTUUgPT09ICdBcnJheScgPyBJdGVyYWJsZVByb3RvdHlwZS5lbnRyaWVzIHx8IG5hdGl2ZUl0ZXJhdG9yIDogbmF0aXZlSXRlcmF0b3I7XG4gIHZhciBDdXJyZW50SXRlcmF0b3JQcm90b3R5cGUsIG1ldGhvZHMsIEtFWTtcblxuICAvLyBmaXggbmF0aXZlXG4gIGlmIChhbnlOYXRpdmVJdGVyYXRvcikge1xuICAgIEN1cnJlbnRJdGVyYXRvclByb3RvdHlwZSA9IGdldFByb3RvdHlwZU9mKGFueU5hdGl2ZUl0ZXJhdG9yLmNhbGwobmV3IEl0ZXJhYmxlKCkpKTtcbiAgICBpZiAoQ3VycmVudEl0ZXJhdG9yUHJvdG90eXBlICE9PSBPYmplY3QucHJvdG90eXBlICYmIEN1cnJlbnRJdGVyYXRvclByb3RvdHlwZS5uZXh0KSB7XG4gICAgICBpZiAoIUlTX1BVUkUgJiYgZ2V0UHJvdG90eXBlT2YoQ3VycmVudEl0ZXJhdG9yUHJvdG90eXBlKSAhPT0gSXRlcmF0b3JQcm90b3R5cGUpIHtcbiAgICAgICAgaWYgKHNldFByb3RvdHlwZU9mKSB7XG4gICAgICAgICAgc2V0UHJvdG90eXBlT2YoQ3VycmVudEl0ZXJhdG9yUHJvdG90eXBlLCBJdGVyYXRvclByb3RvdHlwZSk7XG4gICAgICAgIH0gZWxzZSBpZiAoIWlzQ2FsbGFibGUoQ3VycmVudEl0ZXJhdG9yUHJvdG90eXBlW0lURVJBVE9SXSkpIHtcbiAgICAgICAgICBkZWZpbmVCdWlsdEluKEN1cnJlbnRJdGVyYXRvclByb3RvdHlwZSwgSVRFUkFUT1IsIHJldHVyblRoaXMpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICAvLyBTZXQgQEB0b1N0cmluZ1RhZyB0byBuYXRpdmUgaXRlcmF0b3JzXG4gICAgICBzZXRUb1N0cmluZ1RhZyhDdXJyZW50SXRlcmF0b3JQcm90b3R5cGUsIFRPX1NUUklOR19UQUcsIHRydWUsIHRydWUpO1xuICAgICAgaWYgKElTX1BVUkUpIEl0ZXJhdG9yc1tUT19TVFJJTkdfVEFHXSA9IHJldHVyblRoaXM7XG4gICAgfVxuICB9XG5cbiAgLy8gZml4IEFycmF5LnByb3RvdHlwZS57IHZhbHVlcywgQEBpdGVyYXRvciB9Lm5hbWUgaW4gVjggLyBGRlxuICBpZiAoUFJPUEVSX0ZVTkNUSU9OX05BTUUgJiYgREVGQVVMVCA9PT0gVkFMVUVTICYmIG5hdGl2ZUl0ZXJhdG9yICYmIG5hdGl2ZUl0ZXJhdG9yLm5hbWUgIT09IFZBTFVFUykge1xuICAgIGlmICghSVNfUFVSRSAmJiBDT05GSUdVUkFCTEVfRlVOQ1RJT05fTkFNRSkge1xuICAgICAgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KEl0ZXJhYmxlUHJvdG90eXBlLCAnbmFtZScsIFZBTFVFUyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIElOQ09SUkVDVF9WQUxVRVNfTkFNRSA9IHRydWU7XG4gICAgICBkZWZhdWx0SXRlcmF0b3IgPSBmdW5jdGlvbiB2YWx1ZXMoKSB7IHJldHVybiBjYWxsKG5hdGl2ZUl0ZXJhdG9yLCB0aGlzKTsgfTtcbiAgICB9XG4gIH1cblxuICAvLyBleHBvcnQgYWRkaXRpb25hbCBtZXRob2RzXG4gIGlmIChERUZBVUxUKSB7XG4gICAgbWV0aG9kcyA9IHtcbiAgICAgIHZhbHVlczogZ2V0SXRlcmF0aW9uTWV0aG9kKFZBTFVFUyksXG4gICAgICBrZXlzOiBJU19TRVQgPyBkZWZhdWx0SXRlcmF0b3IgOiBnZXRJdGVyYXRpb25NZXRob2QoS0VZUyksXG4gICAgICBlbnRyaWVzOiBnZXRJdGVyYXRpb25NZXRob2QoRU5UUklFUylcbiAgICB9O1xuICAgIGlmIChGT1JDRUQpIGZvciAoS0VZIGluIG1ldGhvZHMpIHtcbiAgICAgIGlmIChCVUdHWV9TQUZBUklfSVRFUkFUT1JTIHx8IElOQ09SUkVDVF9WQUxVRVNfTkFNRSB8fCAhKEtFWSBpbiBJdGVyYWJsZVByb3RvdHlwZSkpIHtcbiAgICAgICAgZGVmaW5lQnVpbHRJbihJdGVyYWJsZVByb3RvdHlwZSwgS0VZLCBtZXRob2RzW0tFWV0pO1xuICAgICAgfVxuICAgIH0gZWxzZSAkKHsgdGFyZ2V0OiBOQU1FLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiBCVUdHWV9TQUZBUklfSVRFUkFUT1JTIHx8IElOQ09SUkVDVF9WQUxVRVNfTkFNRSB9LCBtZXRob2RzKTtcbiAgfVxuXG4gIC8vIGRlZmluZSBpdGVyYXRvclxuICBpZiAoKCFJU19QVVJFIHx8IEZPUkNFRCkgJiYgSXRlcmFibGVQcm90b3R5cGVbSVRFUkFUT1JdICE9PSBkZWZhdWx0SXRlcmF0b3IpIHtcbiAgICBkZWZpbmVCdWlsdEluKEl0ZXJhYmxlUHJvdG90eXBlLCBJVEVSQVRPUiwgZGVmYXVsdEl0ZXJhdG9yLCB7IG5hbWU6IERFRkFVTFQgfSk7XG4gIH1cbiAgSXRlcmF0b3JzW05BTUVdID0gZGVmYXVsdEl0ZXJhdG9yO1xuXG4gIHJldHVybiBtZXRob2RzO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciBjcmVhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWNyZWF0ZScpO1xudmFyIGdldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtcHJvdG90eXBlLW9mJyk7XG52YXIgZGVmaW5lQnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4nKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcbnZhciBJU19QVVJFID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXB1cmUnKTtcblxudmFyIElURVJBVE9SID0gd2VsbEtub3duU3ltYm9sKCdpdGVyYXRvcicpO1xudmFyIEJVR0dZX1NBRkFSSV9JVEVSQVRPUlMgPSBmYWxzZTtcblxuLy8gYCVJdGVyYXRvclByb3RvdHlwZSVgIG9iamVjdFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy0laXRlcmF0b3Jwcm90b3R5cGUlLW9iamVjdFxudmFyIEl0ZXJhdG9yUHJvdG90eXBlLCBQcm90b3R5cGVPZkFycmF5SXRlcmF0b3JQcm90b3R5cGUsIGFycmF5SXRlcmF0b3I7XG5cbi8qIGVzbGludC1kaXNhYmxlIGVzL25vLWFycmF5LXByb3RvdHlwZS1rZXlzIC0tIHNhZmUgKi9cbmlmIChbXS5rZXlzKSB7XG4gIGFycmF5SXRlcmF0b3IgPSBbXS5rZXlzKCk7XG4gIC8vIFNhZmFyaSA4IGhhcyBidWdneSBpdGVyYXRvcnMgdy9vIGBuZXh0YFxuICBpZiAoISgnbmV4dCcgaW4gYXJyYXlJdGVyYXRvcikpIEJVR0dZX1NBRkFSSV9JVEVSQVRPUlMgPSB0cnVlO1xuICBlbHNlIHtcbiAgICBQcm90b3R5cGVPZkFycmF5SXRlcmF0b3JQcm90b3R5cGUgPSBnZXRQcm90b3R5cGVPZihnZXRQcm90b3R5cGVPZihhcnJheUl0ZXJhdG9yKSk7XG4gICAgaWYgKFByb3RvdHlwZU9mQXJyYXlJdGVyYXRvclByb3RvdHlwZSAhPT0gT2JqZWN0LnByb3RvdHlwZSkgSXRlcmF0b3JQcm90b3R5cGUgPSBQcm90b3R5cGVPZkFycmF5SXRlcmF0b3JQcm90b3R5cGU7XG4gIH1cbn1cblxudmFyIE5FV19JVEVSQVRPUl9QUk9UT1RZUEUgPSAhaXNPYmplY3QoSXRlcmF0b3JQcm90b3R5cGUpIHx8IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgdmFyIHRlc3QgPSB7fTtcbiAgLy8gRkY0NC0gbGVnYWN5IGl0ZXJhdG9ycyBjYXNlXG4gIHJldHVybiBJdGVyYXRvclByb3RvdHlwZVtJVEVSQVRPUl0uY2FsbCh0ZXN0KSAhPT0gdGVzdDtcbn0pO1xuXG5pZiAoTkVXX0lURVJBVE9SX1BST1RPVFlQRSkgSXRlcmF0b3JQcm90b3R5cGUgPSB7fTtcbmVsc2UgaWYgKElTX1BVUkUpIEl0ZXJhdG9yUHJvdG90eXBlID0gY3JlYXRlKEl0ZXJhdG9yUHJvdG90eXBlKTtcblxuLy8gYCVJdGVyYXRvclByb3RvdHlwZSVbQEBpdGVyYXRvcl0oKWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLSVpdGVyYXRvcnByb3RvdHlwZSUtQEBpdGVyYXRvclxuaWYgKCFpc0NhbGxhYmxlKEl0ZXJhdG9yUHJvdG90eXBlW0lURVJBVE9SXSkpIHtcbiAgZGVmaW5lQnVpbHRJbihJdGVyYXRvclByb3RvdHlwZSwgSVRFUkFUT1IsIGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBJdGVyYXRvclByb3RvdHlwZTogSXRlcmF0b3JQcm90b3R5cGUsXG4gIEJVR0dZX1NBRkFSSV9JVEVSQVRPUlM6IEJVR0dZX1NBRkFSSV9JVEVSQVRPUlNcbn07XG4iLCIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IHt9O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWxlbmd0aCcpO1xuXG4vLyBgTGVuZ3RoT2ZBcnJheUxpa2VgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1sZW5ndGhvZmFycmF5bGlrZVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob2JqKSB7XG4gIHJldHVybiB0b0xlbmd0aChvYmoubGVuZ3RoKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgY2VpbCA9IE1hdGguY2VpbDtcbnZhciBmbG9vciA9IE1hdGguZmxvb3I7XG5cbi8vIGBNYXRoLnRydW5jYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtbWF0aC50cnVuY1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW1hdGgtdHJ1bmMgLS0gc2FmZVxubW9kdWxlLmV4cG9ydHMgPSBNYXRoLnRydW5jIHx8IGZ1bmN0aW9uIHRydW5jKHgpIHtcbiAgdmFyIG4gPSAreDtcbiAgcmV0dXJuIChuID4gMCA/IGZsb29yIDogY2VpbCkobik7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcbnZhciBzYWZlR2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zYWZlLWdldC1idWlsdC1pbicpO1xudmFyIGJpbmQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZC1jb250ZXh0Jyk7XG52YXIgbWFjcm90YXNrID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3Rhc2snKS5zZXQ7XG52YXIgUXVldWUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcXVldWUnKTtcbnZhciBJU19JT1MgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW52aXJvbm1lbnQtaXMtaW9zJyk7XG52YXIgSVNfSU9TX1BFQkJMRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbnZpcm9ubWVudC1pcy1pb3MtcGViYmxlJyk7XG52YXIgSVNfV0VCT1NfV0VCS0lUID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Vudmlyb25tZW50LWlzLXdlYm9zLXdlYmtpdCcpO1xudmFyIElTX05PREUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW52aXJvbm1lbnQtaXMtbm9kZScpO1xuXG52YXIgTXV0YXRpb25PYnNlcnZlciA9IGdsb2JhbFRoaXMuTXV0YXRpb25PYnNlcnZlciB8fCBnbG9iYWxUaGlzLldlYktpdE11dGF0aW9uT2JzZXJ2ZXI7XG52YXIgZG9jdW1lbnQgPSBnbG9iYWxUaGlzLmRvY3VtZW50O1xudmFyIHByb2Nlc3MgPSBnbG9iYWxUaGlzLnByb2Nlc3M7XG52YXIgUHJvbWlzZSA9IGdsb2JhbFRoaXMuUHJvbWlzZTtcbnZhciBtaWNyb3Rhc2sgPSBzYWZlR2V0QnVpbHRJbigncXVldWVNaWNyb3Rhc2snKTtcbnZhciBub3RpZnksIHRvZ2dsZSwgbm9kZSwgcHJvbWlzZSwgdGhlbjtcblxuLy8gbW9kZXJuIGVuZ2luZXMgaGF2ZSBxdWV1ZU1pY3JvdGFzayBtZXRob2RcbmlmICghbWljcm90YXNrKSB7XG4gIHZhciBxdWV1ZSA9IG5ldyBRdWV1ZSgpO1xuXG4gIHZhciBmbHVzaCA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgcGFyZW50LCBmbjtcbiAgICBpZiAoSVNfTk9ERSAmJiAocGFyZW50ID0gcHJvY2Vzcy5kb21haW4pKSBwYXJlbnQuZXhpdCgpO1xuICAgIHdoaWxlIChmbiA9IHF1ZXVlLmdldCgpKSB0cnkge1xuICAgICAgZm4oKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgaWYgKHF1ZXVlLmhlYWQpIG5vdGlmeSgpO1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICAgIGlmIChwYXJlbnQpIHBhcmVudC5lbnRlcigpO1xuICB9O1xuXG4gIC8vIGJyb3dzZXJzIHdpdGggTXV0YXRpb25PYnNlcnZlciwgZXhjZXB0IGlPUyAtIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy8zMzlcbiAgLy8gYWxzbyBleGNlcHQgV2ViT1MgV2Via2l0IGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy84OThcbiAgaWYgKCFJU19JT1MgJiYgIUlTX05PREUgJiYgIUlTX1dFQk9TX1dFQktJVCAmJiBNdXRhdGlvbk9ic2VydmVyICYmIGRvY3VtZW50KSB7XG4gICAgdG9nZ2xlID0gdHJ1ZTtcbiAgICBub2RlID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoJycpO1xuICAgIG5ldyBNdXRhdGlvbk9ic2VydmVyKGZsdXNoKS5vYnNlcnZlKG5vZGUsIHsgY2hhcmFjdGVyRGF0YTogdHJ1ZSB9KTtcbiAgICBub3RpZnkgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBub2RlLmRhdGEgPSB0b2dnbGUgPSAhdG9nZ2xlO1xuICAgIH07XG4gIC8vIGVudmlyb25tZW50cyB3aXRoIG1heWJlIG5vbi1jb21wbGV0ZWx5IGNvcnJlY3QsIGJ1dCBleGlzdGVudCBQcm9taXNlXG4gIH0gZWxzZSBpZiAoIUlTX0lPU19QRUJCTEUgJiYgUHJvbWlzZSAmJiBQcm9taXNlLnJlc29sdmUpIHtcbiAgICAvLyBQcm9taXNlLnJlc29sdmUgd2l0aG91dCBhbiBhcmd1bWVudCB0aHJvd3MgYW4gZXJyb3IgaW4gTEcgV2ViT1MgMlxuICAgIHByb21pc2UgPSBQcm9taXNlLnJlc29sdmUodW5kZWZpbmVkKTtcbiAgICAvLyB3b3JrYXJvdW5kIG9mIFdlYktpdCB+IGlPUyBTYWZhcmkgMTAuMSBidWdcbiAgICBwcm9taXNlLmNvbnN0cnVjdG9yID0gUHJvbWlzZTtcbiAgICB0aGVuID0gYmluZChwcm9taXNlLnRoZW4sIHByb21pc2UpO1xuICAgIG5vdGlmeSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHRoZW4oZmx1c2gpO1xuICAgIH07XG4gIC8vIE5vZGUuanMgd2l0aG91dCBwcm9taXNlc1xuICB9IGVsc2UgaWYgKElTX05PREUpIHtcbiAgICBub3RpZnkgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBwcm9jZXNzLm5leHRUaWNrKGZsdXNoKTtcbiAgICB9O1xuICAvLyBmb3Igb3RoZXIgZW52aXJvbm1lbnRzIC0gbWFjcm90YXNrIGJhc2VkIG9uOlxuICAvLyAtIHNldEltbWVkaWF0ZVxuICAvLyAtIE1lc3NhZ2VDaGFubmVsXG4gIC8vIC0gd2luZG93LnBvc3RNZXNzYWdlXG4gIC8vIC0gb25yZWFkeXN0YXRlY2hhbmdlXG4gIC8vIC0gc2V0VGltZW91dFxuICB9IGVsc2Uge1xuICAgIC8vIGB3ZWJwYWNrYCBkZXYgc2VydmVyIGJ1ZyBvbiBJRSBnbG9iYWwgbWV0aG9kcyAtIHVzZSBiaW5kKGZuLCBnbG9iYWwpXG4gICAgbWFjcm90YXNrID0gYmluZChtYWNyb3Rhc2ssIGdsb2JhbFRoaXMpO1xuICAgIG5vdGlmeSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIG1hY3JvdGFzayhmbHVzaCk7XG4gICAgfTtcbiAgfVxuXG4gIG1pY3JvdGFzayA9IGZ1bmN0aW9uIChmbikge1xuICAgIGlmICghcXVldWUuaGVhZCkgbm90aWZ5KCk7XG4gICAgcXVldWUuYWRkKGZuKTtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBtaWNyb3Rhc2s7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgYUNhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2EtY2FsbGFibGUnKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbnZhciBQcm9taXNlQ2FwYWJpbGl0eSA9IGZ1bmN0aW9uIChDKSB7XG4gIHZhciByZXNvbHZlLCByZWplY3Q7XG4gIHRoaXMucHJvbWlzZSA9IG5ldyBDKGZ1bmN0aW9uICgkJHJlc29sdmUsICQkcmVqZWN0KSB7XG4gICAgaWYgKHJlc29sdmUgIT09IHVuZGVmaW5lZCB8fCByZWplY3QgIT09IHVuZGVmaW5lZCkgdGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0JhZCBQcm9taXNlIGNvbnN0cnVjdG9yJyk7XG4gICAgcmVzb2x2ZSA9ICQkcmVzb2x2ZTtcbiAgICByZWplY3QgPSAkJHJlamVjdDtcbiAgfSk7XG4gIHRoaXMucmVzb2x2ZSA9IGFDYWxsYWJsZShyZXNvbHZlKTtcbiAgdGhpcy5yZWplY3QgPSBhQ2FsbGFibGUocmVqZWN0KTtcbn07XG5cbi8vIGBOZXdQcm9taXNlQ2FwYWJpbGl0eWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW5ld3Byb21pc2VjYXBhYmlsaXR5XG5tb2R1bGUuZXhwb3J0cy5mID0gZnVuY3Rpb24gKEMpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlQ2FwYWJpbGl0eShDKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgdG9TdHJpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tc3RyaW5nJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50LCAkZGVmYXVsdCkge1xuICByZXR1cm4gYXJndW1lbnQgPT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50cy5sZW5ndGggPCAyID8gJycgOiAkZGVmYXVsdCA6IHRvU3RyaW5nKGFyZ3VtZW50KTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG4vKiBnbG9iYWwgQWN0aXZlWE9iamVjdCAtLSBvbGQgSUUsIFdTSCAqL1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIGRlZmluZVByb3BlcnRpZXNNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0aWVzJyk7XG52YXIgZW51bUJ1Z0tleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW51bS1idWcta2V5cycpO1xudmFyIGhpZGRlbktleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGlkZGVuLWtleXMnKTtcbnZhciBodG1sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2h0bWwnKTtcbnZhciBkb2N1bWVudENyZWF0ZUVsZW1lbnQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZG9jdW1lbnQtY3JlYXRlLWVsZW1lbnQnKTtcbnZhciBzaGFyZWRLZXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkLWtleScpO1xuXG52YXIgR1QgPSAnPic7XG52YXIgTFQgPSAnPCc7XG52YXIgUFJPVE9UWVBFID0gJ3Byb3RvdHlwZSc7XG52YXIgU0NSSVBUID0gJ3NjcmlwdCc7XG52YXIgSUVfUFJPVE8gPSBzaGFyZWRLZXkoJ0lFX1BST1RPJyk7XG5cbnZhciBFbXB0eUNvbnN0cnVjdG9yID0gZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9O1xuXG52YXIgc2NyaXB0VGFnID0gZnVuY3Rpb24gKGNvbnRlbnQpIHtcbiAgcmV0dXJuIExUICsgU0NSSVBUICsgR1QgKyBjb250ZW50ICsgTFQgKyAnLycgKyBTQ1JJUFQgKyBHVDtcbn07XG5cbi8vIENyZWF0ZSBvYmplY3Qgd2l0aCBmYWtlIGBudWxsYCBwcm90b3R5cGU6IHVzZSBBY3RpdmVYIE9iamVjdCB3aXRoIGNsZWFyZWQgcHJvdG90eXBlXG52YXIgTnVsbFByb3RvT2JqZWN0VmlhQWN0aXZlWCA9IGZ1bmN0aW9uIChhY3RpdmVYRG9jdW1lbnQpIHtcbiAgYWN0aXZlWERvY3VtZW50LndyaXRlKHNjcmlwdFRhZygnJykpO1xuICBhY3RpdmVYRG9jdW1lbnQuY2xvc2UoKTtcbiAgdmFyIHRlbXAgPSBhY3RpdmVYRG9jdW1lbnQucGFyZW50V2luZG93Lk9iamVjdDtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVzZWxlc3MtYXNzaWdubWVudCAtLSBhdm9pZCBtZW1vcnkgbGVha1xuICBhY3RpdmVYRG9jdW1lbnQgPSBudWxsO1xuICByZXR1cm4gdGVtcDtcbn07XG5cbi8vIENyZWF0ZSBvYmplY3Qgd2l0aCBmYWtlIGBudWxsYCBwcm90b3R5cGU6IHVzZSBpZnJhbWUgT2JqZWN0IHdpdGggY2xlYXJlZCBwcm90b3R5cGVcbnZhciBOdWxsUHJvdG9PYmplY3RWaWFJRnJhbWUgPSBmdW5jdGlvbiAoKSB7XG4gIC8vIFRocmFzaCwgd2FzdGUgYW5kIHNvZG9teTogSUUgR0MgYnVnXG4gIHZhciBpZnJhbWUgPSBkb2N1bWVudENyZWF0ZUVsZW1lbnQoJ2lmcmFtZScpO1xuICB2YXIgSlMgPSAnamF2YScgKyBTQ1JJUFQgKyAnOic7XG4gIHZhciBpZnJhbWVEb2N1bWVudDtcbiAgaWZyYW1lLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gIGh0bWwuYXBwZW5kQ2hpbGQoaWZyYW1lKTtcbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzQ3NVxuICBpZnJhbWUuc3JjID0gU3RyaW5nKEpTKTtcbiAgaWZyYW1lRG9jdW1lbnQgPSBpZnJhbWUuY29udGVudFdpbmRvdy5kb2N1bWVudDtcbiAgaWZyYW1lRG9jdW1lbnQub3BlbigpO1xuICBpZnJhbWVEb2N1bWVudC53cml0ZShzY3JpcHRUYWcoJ2RvY3VtZW50LkY9T2JqZWN0JykpO1xuICBpZnJhbWVEb2N1bWVudC5jbG9zZSgpO1xuICByZXR1cm4gaWZyYW1lRG9jdW1lbnQuRjtcbn07XG5cbi8vIENoZWNrIGZvciBkb2N1bWVudC5kb21haW4gYW5kIGFjdGl2ZSB4IHN1cHBvcnRcbi8vIE5vIG5lZWQgdG8gdXNlIGFjdGl2ZSB4IGFwcHJvYWNoIHdoZW4gZG9jdW1lbnQuZG9tYWluIGlzIG5vdCBzZXRcbi8vIHNlZSBodHRwczovL2dpdGh1Yi5jb20vZXMtc2hpbXMvZXM1LXNoaW0vaXNzdWVzLzE1MFxuLy8gdmFyaWF0aW9uIG9mIGh0dHBzOi8vZ2l0aHViLmNvbS9raXRjYW1icmlkZ2UvZXM1LXNoaW0vY29tbWl0LzRmNzM4YWMwNjYzNDZcbi8vIGF2b2lkIElFIEdDIGJ1Z1xudmFyIGFjdGl2ZVhEb2N1bWVudDtcbnZhciBOdWxsUHJvdG9PYmplY3QgPSBmdW5jdGlvbiAoKSB7XG4gIHRyeSB7XG4gICAgYWN0aXZlWERvY3VtZW50ID0gbmV3IEFjdGl2ZVhPYmplY3QoJ2h0bWxmaWxlJyk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGlnbm9yZSAqLyB9XG4gIE51bGxQcm90b09iamVjdCA9IHR5cGVvZiBkb2N1bWVudCAhPSAndW5kZWZpbmVkJ1xuICAgID8gZG9jdW1lbnQuZG9tYWluICYmIGFjdGl2ZVhEb2N1bWVudFxuICAgICAgPyBOdWxsUHJvdG9PYmplY3RWaWFBY3RpdmVYKGFjdGl2ZVhEb2N1bWVudCkgLy8gb2xkIElFXG4gICAgICA6IE51bGxQcm90b09iamVjdFZpYUlGcmFtZSgpXG4gICAgOiBOdWxsUHJvdG9PYmplY3RWaWFBY3RpdmVYKGFjdGl2ZVhEb2N1bWVudCk7IC8vIFdTSFxuICB2YXIgbGVuZ3RoID0gZW51bUJ1Z0tleXMubGVuZ3RoO1xuICB3aGlsZSAobGVuZ3RoLS0pIGRlbGV0ZSBOdWxsUHJvdG9PYmplY3RbUFJPVE9UWVBFXVtlbnVtQnVnS2V5c1tsZW5ndGhdXTtcbiAgcmV0dXJuIE51bGxQcm90b09iamVjdCgpO1xufTtcblxuaGlkZGVuS2V5c1tJRV9QUk9UT10gPSB0cnVlO1xuXG4vLyBgT2JqZWN0LmNyZWF0ZWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5jcmVhdGVcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtY3JlYXRlIC0tIHNhZmVcbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0LmNyZWF0ZSB8fCBmdW5jdGlvbiBjcmVhdGUoTywgUHJvcGVydGllcykge1xuICB2YXIgcmVzdWx0O1xuICBpZiAoTyAhPT0gbnVsbCkge1xuICAgIEVtcHR5Q29uc3RydWN0b3JbUFJPVE9UWVBFXSA9IGFuT2JqZWN0KE8pO1xuICAgIHJlc3VsdCA9IG5ldyBFbXB0eUNvbnN0cnVjdG9yKCk7XG4gICAgRW1wdHlDb25zdHJ1Y3RvcltQUk9UT1RZUEVdID0gbnVsbDtcbiAgICAvLyBhZGQgXCJfX3Byb3RvX19cIiBmb3IgT2JqZWN0LmdldFByb3RvdHlwZU9mIHBvbHlmaWxsXG4gICAgcmVzdWx0W0lFX1BST1RPXSA9IE87XG4gIH0gZWxzZSByZXN1bHQgPSBOdWxsUHJvdG9PYmplY3QoKTtcbiAgcmV0dXJuIFByb3BlcnRpZXMgPT09IHVuZGVmaW5lZCA/IHJlc3VsdCA6IGRlZmluZVByb3BlcnRpZXNNb2R1bGUuZihyZXN1bHQsIFByb3BlcnRpZXMpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIFY4X1BST1RPVFlQRV9ERUZJTkVfQlVHID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3Y4LXByb3RvdHlwZS1kZWZpbmUtYnVnJyk7XG52YXIgZGVmaW5lUHJvcGVydHlNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIHRvSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdCcpO1xudmFyIG9iamVjdEtleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWtleXMnKTtcblxuLy8gYE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmRlZmluZXByb3BlcnRpZXNcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydGllcyAtLSBzYWZlXG5leHBvcnRzLmYgPSBERVNDUklQVE9SUyAmJiAhVjhfUFJPVE9UWVBFX0RFRklORV9CVUcgPyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyA6IGZ1bmN0aW9uIGRlZmluZVByb3BlcnRpZXMoTywgUHJvcGVydGllcykge1xuICBhbk9iamVjdChPKTtcbiAgdmFyIHByb3BzID0gdG9JbmRleGVkT2JqZWN0KFByb3BlcnRpZXMpO1xuICB2YXIga2V5cyA9IG9iamVjdEtleXMoUHJvcGVydGllcyk7XG4gIHZhciBsZW5ndGggPSBrZXlzLmxlbmd0aDtcbiAgdmFyIGluZGV4ID0gMDtcbiAgdmFyIGtleTtcbiAgd2hpbGUgKGxlbmd0aCA+IGluZGV4KSBkZWZpbmVQcm9wZXJ0eU1vZHVsZS5mKE8sIGtleSA9IGtleXNbaW5kZXgrK10sIHByb3BzW2tleV0pO1xuICByZXR1cm4gTztcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBJRThfRE9NX0RFRklORSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pZTgtZG9tLWRlZmluZScpO1xudmFyIFY4X1BST1RPVFlQRV9ERUZJTkVfQlVHID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3Y4LXByb3RvdHlwZS1kZWZpbmUtYnVnJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgdG9Qcm9wZXJ0eUtleSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1wcm9wZXJ0eS1rZXknKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnR5IC0tIHNhZmVcbnZhciAkZGVmaW5lUHJvcGVydHkgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5ZGVzY3JpcHRvciAtLSBzYWZlXG52YXIgJGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG52YXIgRU5VTUVSQUJMRSA9ICdlbnVtZXJhYmxlJztcbnZhciBDT05GSUdVUkFCTEUgPSAnY29uZmlndXJhYmxlJztcbnZhciBXUklUQUJMRSA9ICd3cml0YWJsZSc7XG5cbi8vIGBPYmplY3QuZGVmaW5lUHJvcGVydHlgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuZGVmaW5lcHJvcGVydHlcbmV4cG9ydHMuZiA9IERFU0NSSVBUT1JTID8gVjhfUFJPVE9UWVBFX0RFRklORV9CVUcgPyBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0eShPLCBQLCBBdHRyaWJ1dGVzKSB7XG4gIGFuT2JqZWN0KE8pO1xuICBQID0gdG9Qcm9wZXJ0eUtleShQKTtcbiAgYW5PYmplY3QoQXR0cmlidXRlcyk7XG4gIGlmICh0eXBlb2YgTyA9PT0gJ2Z1bmN0aW9uJyAmJiBQID09PSAncHJvdG90eXBlJyAmJiAndmFsdWUnIGluIEF0dHJpYnV0ZXMgJiYgV1JJVEFCTEUgaW4gQXR0cmlidXRlcyAmJiAhQXR0cmlidXRlc1tXUklUQUJMRV0pIHtcbiAgICB2YXIgY3VycmVudCA9ICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTywgUCk7XG4gICAgaWYgKGN1cnJlbnQgJiYgY3VycmVudFtXUklUQUJMRV0pIHtcbiAgICAgIE9bUF0gPSBBdHRyaWJ1dGVzLnZhbHVlO1xuICAgICAgQXR0cmlidXRlcyA9IHtcbiAgICAgICAgY29uZmlndXJhYmxlOiBDT05GSUdVUkFCTEUgaW4gQXR0cmlidXRlcyA/IEF0dHJpYnV0ZXNbQ09ORklHVVJBQkxFXSA6IGN1cnJlbnRbQ09ORklHVVJBQkxFXSxcbiAgICAgICAgZW51bWVyYWJsZTogRU5VTUVSQUJMRSBpbiBBdHRyaWJ1dGVzID8gQXR0cmlidXRlc1tFTlVNRVJBQkxFXSA6IGN1cnJlbnRbRU5VTUVSQUJMRV0sXG4gICAgICAgIHdyaXRhYmxlOiBmYWxzZVxuICAgICAgfTtcbiAgICB9XG4gIH0gcmV0dXJuICRkZWZpbmVQcm9wZXJ0eShPLCBQLCBBdHRyaWJ1dGVzKTtcbn0gOiAkZGVmaW5lUHJvcGVydHkgOiBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0eShPLCBQLCBBdHRyaWJ1dGVzKSB7XG4gIGFuT2JqZWN0KE8pO1xuICBQID0gdG9Qcm9wZXJ0eUtleShQKTtcbiAgYW5PYmplY3QoQXR0cmlidXRlcyk7XG4gIGlmIChJRThfRE9NX0RFRklORSkgdHJ5IHtcbiAgICByZXR1cm4gJGRlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpO1xuICB9IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG4gIGlmICgnZ2V0JyBpbiBBdHRyaWJ1dGVzIHx8ICdzZXQnIGluIEF0dHJpYnV0ZXMpIHRocm93IG5ldyAkVHlwZUVycm9yKCdBY2Nlc3NvcnMgbm90IHN1cHBvcnRlZCcpO1xuICBpZiAoJ3ZhbHVlJyBpbiBBdHRyaWJ1dGVzKSBPW1BdID0gQXR0cmlidXRlcy52YWx1ZTtcbiAgcmV0dXJuIE87XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgcHJvcGVydHlJc0VudW1lcmFibGVNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LXByb3BlcnR5LWlzLWVudW1lcmFibGUnKTtcbnZhciBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcbnZhciB0b0luZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QnKTtcbnZhciB0b1Byb3BlcnR5S2V5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXByb3BlcnR5LWtleScpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgSUU4X0RPTV9ERUZJTkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaWU4LWRvbS1kZWZpbmUnKTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3IgLS0gc2FmZVxudmFyICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xuXG4vLyBgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcmAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3JcbmV4cG9ydHMuZiA9IERFU0NSSVBUT1JTID8gJGdldE93blByb3BlcnR5RGVzY3JpcHRvciA6IGZ1bmN0aW9uIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihPLCBQKSB7XG4gIE8gPSB0b0luZGV4ZWRPYmplY3QoTyk7XG4gIFAgPSB0b1Byb3BlcnR5S2V5KFApO1xuICBpZiAoSUU4X0RPTV9ERUZJTkUpIHRyeSB7XG4gICAgcmV0dXJuICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTywgUCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cbiAgaWYgKGhhc093bihPLCBQKSkgcmV0dXJuIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvcighY2FsbChwcm9wZXJ0eUlzRW51bWVyYWJsZU1vZHVsZS5mLCBPLCBQKSwgT1tQXSk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGludGVybmFsT2JqZWN0S2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3Qta2V5cy1pbnRlcm5hbCcpO1xudmFyIGVudW1CdWdLZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VudW0tYnVnLWtleXMnKTtcblxudmFyIGhpZGRlbktleXMgPSBlbnVtQnVnS2V5cy5jb25jYXQoJ2xlbmd0aCcsICdwcm90b3R5cGUnKTtcblxuLy8gYE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmdldG93bnByb3BlcnR5bmFtZXNcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHluYW1lcyAtLSBzYWZlXG5leHBvcnRzLmYgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyB8fCBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eU5hbWVzKE8pIHtcbiAgcmV0dXJuIGludGVybmFsT2JqZWN0S2V5cyhPLCBoaWRkZW5LZXlzKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5c3ltYm9scyAtLSBzYWZlXG5leHBvcnRzLmYgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLW9iamVjdCcpO1xudmFyIHNoYXJlZEtleSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQta2V5Jyk7XG52YXIgQ09SUkVDVF9QUk9UT1RZUEVfR0VUVEVSID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NvcnJlY3QtcHJvdG90eXBlLWdldHRlcicpO1xuXG52YXIgSUVfUFJPVE8gPSBzaGFyZWRLZXkoJ0lFX1BST1RPJyk7XG52YXIgJE9iamVjdCA9IE9iamVjdDtcbnZhciBPYmplY3RQcm90b3R5cGUgPSAkT2JqZWN0LnByb3RvdHlwZTtcblxuLy8gYE9iamVjdC5nZXRQcm90b3R5cGVPZmAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5nZXRwcm90b3R5cGVvZlxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRwcm90b3R5cGVvZiAtLSBzYWZlXG5tb2R1bGUuZXhwb3J0cyA9IENPUlJFQ1RfUFJPVE9UWVBFX0dFVFRFUiA/ICRPYmplY3QuZ2V0UHJvdG90eXBlT2YgOiBmdW5jdGlvbiAoTykge1xuICB2YXIgb2JqZWN0ID0gdG9PYmplY3QoTyk7XG4gIGlmIChoYXNPd24ob2JqZWN0LCBJRV9QUk9UTykpIHJldHVybiBvYmplY3RbSUVfUFJPVE9dO1xuICB2YXIgY29uc3RydWN0b3IgPSBvYmplY3QuY29uc3RydWN0b3I7XG4gIGlmIChpc0NhbGxhYmxlKGNvbnN0cnVjdG9yKSAmJiBvYmplY3QgaW5zdGFuY2VvZiBjb25zdHJ1Y3Rvcikge1xuICAgIHJldHVybiBjb25zdHJ1Y3Rvci5wcm90b3R5cGU7XG4gIH0gcmV0dXJuIG9iamVjdCBpbnN0YW5jZW9mICRPYmplY3QgPyBPYmplY3RQcm90b3R5cGUgOiBudWxsO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSB1bmN1cnJ5VGhpcyh7fS5pc1Byb3RvdHlwZU9mKTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIHRvSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdCcpO1xudmFyIGluZGV4T2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktaW5jbHVkZXMnKS5pbmRleE9mO1xudmFyIGhpZGRlbktleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGlkZGVuLWtleXMnKTtcblxudmFyIHB1c2ggPSB1bmN1cnJ5VGhpcyhbXS5wdXNoKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob2JqZWN0LCBuYW1lcykge1xuICB2YXIgTyA9IHRvSW5kZXhlZE9iamVjdChvYmplY3QpO1xuICB2YXIgaSA9IDA7XG4gIHZhciByZXN1bHQgPSBbXTtcbiAgdmFyIGtleTtcbiAgZm9yIChrZXkgaW4gTykgIWhhc093bihoaWRkZW5LZXlzLCBrZXkpICYmIGhhc093bihPLCBrZXkpICYmIHB1c2gocmVzdWx0LCBrZXkpO1xuICAvLyBEb24ndCBlbnVtIGJ1ZyAmIGhpZGRlbiBrZXlzXG4gIHdoaWxlIChuYW1lcy5sZW5ndGggPiBpKSBpZiAoaGFzT3duKE8sIGtleSA9IG5hbWVzW2krK10pKSB7XG4gICAgfmluZGV4T2YocmVzdWx0LCBrZXkpIHx8IHB1c2gocmVzdWx0LCBrZXkpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGludGVybmFsT2JqZWN0S2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3Qta2V5cy1pbnRlcm5hbCcpO1xudmFyIGVudW1CdWdLZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VudW0tYnVnLWtleXMnKTtcblxuLy8gYE9iamVjdC5rZXlzYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmtleXNcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3Qta2V5cyAtLSBzYWZlXG5tb2R1bGUuZXhwb3J0cyA9IE9iamVjdC5rZXlzIHx8IGZ1bmN0aW9uIGtleXMoTykge1xuICByZXR1cm4gaW50ZXJuYWxPYmplY3RLZXlzKE8sIGVudW1CdWdLZXlzKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJHByb3BlcnR5SXNFbnVtZXJhYmxlID0ge30ucHJvcGVydHlJc0VudW1lcmFibGU7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5ZGVzY3JpcHRvciAtLSBzYWZlXG52YXIgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcblxuLy8gTmFzaG9ybiB+IEpESzggYnVnXG52YXIgTkFTSE9STl9CVUcgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgJiYgISRwcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHsgMTogMiB9LCAxKTtcblxuLy8gYE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGVgIG1ldGhvZCBpbXBsZW1lbnRhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QucHJvdG90eXBlLnByb3BlcnR5aXNlbnVtZXJhYmxlXG5leHBvcnRzLmYgPSBOQVNIT1JOX0JVRyA/IGZ1bmN0aW9uIHByb3BlcnR5SXNFbnVtZXJhYmxlKFYpIHtcbiAgdmFyIGRlc2NyaXB0b3IgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGhpcywgVik7XG4gIHJldHVybiAhIWRlc2NyaXB0b3IgJiYgZGVzY3JpcHRvci5lbnVtZXJhYmxlO1xufSA6ICRwcm9wZXJ0eUlzRW51bWVyYWJsZTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8qIGVzbGludC1kaXNhYmxlIG5vLXByb3RvIC0tIHNhZmUgKi9cbnZhciB1bmN1cnJ5VGhpc0FjY2Vzc29yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcy1hY2Nlc3NvcicpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xudmFyIHJlcXVpcmVPYmplY3RDb2VyY2libGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVxdWlyZS1vYmplY3QtY29lcmNpYmxlJyk7XG52YXIgYVBvc3NpYmxlUHJvdG90eXBlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2EtcG9zc2libGUtcHJvdG90eXBlJyk7XG5cbi8vIGBPYmplY3Quc2V0UHJvdG90eXBlT2ZgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3Quc2V0cHJvdG90eXBlb2Zcbi8vIFdvcmtzIHdpdGggX19wcm90b19fIG9ubHkuIE9sZCB2OCBjYW4ndCB3b3JrIHdpdGggbnVsbCBwcm90byBvYmplY3RzLlxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1zZXRwcm90b3R5cGVvZiAtLSBzYWZlXG5tb2R1bGUuZXhwb3J0cyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCAoJ19fcHJvdG9fXycgaW4ge30gPyBmdW5jdGlvbiAoKSB7XG4gIHZhciBDT1JSRUNUX1NFVFRFUiA9IGZhbHNlO1xuICB2YXIgdGVzdCA9IHt9O1xuICB2YXIgc2V0dGVyO1xuICB0cnkge1xuICAgIHNldHRlciA9IHVuY3VycnlUaGlzQWNjZXNzb3IoT2JqZWN0LnByb3RvdHlwZSwgJ19fcHJvdG9fXycsICdzZXQnKTtcbiAgICBzZXR0ZXIodGVzdCwgW10pO1xuICAgIENPUlJFQ1RfU0VUVEVSID0gdGVzdCBpbnN0YW5jZW9mIEFycmF5O1xuICB9IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG4gIHJldHVybiBmdW5jdGlvbiBzZXRQcm90b3R5cGVPZihPLCBwcm90bykge1xuICAgIHJlcXVpcmVPYmplY3RDb2VyY2libGUoTyk7XG4gICAgYVBvc3NpYmxlUHJvdG90eXBlKHByb3RvKTtcbiAgICBpZiAoIWlzT2JqZWN0KE8pKSByZXR1cm4gTztcbiAgICBpZiAoQ09SUkVDVF9TRVRURVIpIHNldHRlcihPLCBwcm90byk7XG4gICAgZWxzZSBPLl9fcHJvdG9fXyA9IHByb3RvO1xuICAgIHJldHVybiBPO1xuICB9O1xufSgpIDogdW5kZWZpbmVkKTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBUT19TVFJJTkdfVEFHX1NVUFBPUlQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tc3RyaW5nLXRhZy1zdXBwb3J0Jyk7XG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jbGFzc29mJyk7XG5cbi8vIGBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nYCBtZXRob2QgaW1wbGVtZW50YXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LnByb3RvdHlwZS50b3N0cmluZ1xubW9kdWxlLmV4cG9ydHMgPSBUT19TVFJJTkdfVEFHX1NVUFBPUlQgPyB7fS50b1N0cmluZyA6IGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICByZXR1cm4gJ1tvYmplY3QgJyArIGNsYXNzb2YodGhpcykgKyAnXSc7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbi8vIGBPcmRpbmFyeVRvUHJpbWl0aXZlYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb3JkaW5hcnl0b3ByaW1pdGl2ZVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaW5wdXQsIHByZWYpIHtcbiAgdmFyIGZuLCB2YWw7XG4gIGlmIChwcmVmID09PSAnc3RyaW5nJyAmJiBpc0NhbGxhYmxlKGZuID0gaW5wdXQudG9TdHJpbmcpICYmICFpc09iamVjdCh2YWwgPSBjYWxsKGZuLCBpbnB1dCkpKSByZXR1cm4gdmFsO1xuICBpZiAoaXNDYWxsYWJsZShmbiA9IGlucHV0LnZhbHVlT2YpICYmICFpc09iamVjdCh2YWwgPSBjYWxsKGZuLCBpbnB1dCkpKSByZXR1cm4gdmFsO1xuICBpZiAocHJlZiAhPT0gJ3N0cmluZycgJiYgaXNDYWxsYWJsZShmbiA9IGlucHV0LnRvU3RyaW5nKSAmJiAhaXNPYmplY3QodmFsID0gY2FsbChmbiwgaW5wdXQpKSkgcmV0dXJuIHZhbDtcbiAgdGhyb3cgbmV3ICRUeXBlRXJyb3IoXCJDYW4ndCBjb252ZXJ0IG9iamVjdCB0byBwcmltaXRpdmUgdmFsdWVcIik7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGdldEJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluJyk7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgZ2V0T3duUHJvcGVydHlOYW1lc01vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1uYW1lcycpO1xudmFyIGdldE93blByb3BlcnR5U3ltYm9sc01vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1zeW1ib2xzJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG5cbnZhciBjb25jYXQgPSB1bmN1cnJ5VGhpcyhbXS5jb25jYXQpO1xuXG4vLyBhbGwgb2JqZWN0IGtleXMsIGluY2x1ZGVzIG5vbi1lbnVtZXJhYmxlIGFuZCBzeW1ib2xzXG5tb2R1bGUuZXhwb3J0cyA9IGdldEJ1aWx0SW4oJ1JlZmxlY3QnLCAnb3duS2V5cycpIHx8IGZ1bmN0aW9uIG93bktleXMoaXQpIHtcbiAgdmFyIGtleXMgPSBnZXRPd25Qcm9wZXJ0eU5hbWVzTW9kdWxlLmYoYW5PYmplY3QoaXQpKTtcbiAgdmFyIGdldE93blByb3BlcnR5U3ltYm9scyA9IGdldE93blByb3BlcnR5U3ltYm9sc01vZHVsZS5mO1xuICByZXR1cm4gZ2V0T3duUHJvcGVydHlTeW1ib2xzID8gY29uY2F0KGtleXMsIGdldE93blByb3BlcnR5U3ltYm9scyhpdCkpIDoga2V5cztcbn07XG4iLCIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IHt9O1xuIiwiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZXhlYykge1xuICB0cnkge1xuICAgIHJldHVybiB7IGVycm9yOiBmYWxzZSwgdmFsdWU6IGV4ZWMoKSB9O1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiB7IGVycm9yOiB0cnVlLCB2YWx1ZTogZXJyb3IgfTtcbiAgfVxufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG52YXIgTmF0aXZlUHJvbWlzZUNvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3Byb21pc2UtbmF0aXZlLWNvbnN0cnVjdG9yJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGlzRm9yY2VkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWZvcmNlZCcpO1xudmFyIGluc3BlY3RTb3VyY2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW5zcGVjdC1zb3VyY2UnKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcbnZhciBFTlZJUk9OTUVOVCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbnZpcm9ubWVudCcpO1xudmFyIElTX1BVUkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtcHVyZScpO1xudmFyIFY4X1ZFUlNJT04gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW52aXJvbm1lbnQtdjgtdmVyc2lvbicpO1xuXG52YXIgTmF0aXZlUHJvbWlzZVByb3RvdHlwZSA9IE5hdGl2ZVByb21pc2VDb25zdHJ1Y3RvciAmJiBOYXRpdmVQcm9taXNlQ29uc3RydWN0b3IucHJvdG90eXBlO1xudmFyIFNQRUNJRVMgPSB3ZWxsS25vd25TeW1ib2woJ3NwZWNpZXMnKTtcbnZhciBTVUJDTEFTU0lORyA9IGZhbHNlO1xudmFyIE5BVElWRV9QUk9NSVNFX1JFSkVDVElPTl9FVkVOVCA9IGlzQ2FsbGFibGUoZ2xvYmFsVGhpcy5Qcm9taXNlUmVqZWN0aW9uRXZlbnQpO1xuXG52YXIgRk9SQ0VEX1BST01JU0VfQ09OU1RSVUNUT1IgPSBpc0ZvcmNlZCgnUHJvbWlzZScsIGZ1bmN0aW9uICgpIHtcbiAgdmFyIFBST01JU0VfQ09OU1RSVUNUT1JfU09VUkNFID0gaW5zcGVjdFNvdXJjZShOYXRpdmVQcm9taXNlQ29uc3RydWN0b3IpO1xuICB2YXIgR0xPQkFMX0NPUkVfSlNfUFJPTUlTRSA9IFBST01JU0VfQ09OU1RSVUNUT1JfU09VUkNFICE9PSBTdHJpbmcoTmF0aXZlUHJvbWlzZUNvbnN0cnVjdG9yKTtcbiAgLy8gVjggNi42IChOb2RlIDEwIGFuZCBDaHJvbWUgNjYpIGhhdmUgYSBidWcgd2l0aCByZXNvbHZpbmcgY3VzdG9tIHRoZW5hYmxlc1xuICAvLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvY2hyb21pdW0vaXNzdWVzL2RldGFpbD9pZD04MzA1NjVcbiAgLy8gV2UgY2FuJ3QgZGV0ZWN0IGl0IHN5bmNocm9ub3VzbHksIHNvIGp1c3QgY2hlY2sgdmVyc2lvbnNcbiAgaWYgKCFHTE9CQUxfQ09SRV9KU19QUk9NSVNFICYmIFY4X1ZFUlNJT04gPT09IDY2KSByZXR1cm4gdHJ1ZTtcbiAgLy8gV2UgbmVlZCBQcm9taXNlI3sgY2F0Y2gsIGZpbmFsbHkgfSBpbiB0aGUgcHVyZSB2ZXJzaW9uIGZvciBwcmV2ZW50aW5nIHByb3RvdHlwZSBwb2xsdXRpb25cbiAgaWYgKElTX1BVUkUgJiYgIShOYXRpdmVQcm9taXNlUHJvdG90eXBlWydjYXRjaCddICYmIE5hdGl2ZVByb21pc2VQcm90b3R5cGVbJ2ZpbmFsbHknXSkpIHJldHVybiB0cnVlO1xuICAvLyBXZSBjYW4ndCB1c2UgQEBzcGVjaWVzIGZlYXR1cmUgZGV0ZWN0aW9uIGluIFY4IHNpbmNlIGl0IGNhdXNlc1xuICAvLyBkZW9wdGltaXphdGlvbiBhbmQgcGVyZm9ybWFuY2UgZGVncmFkYXRpb25cbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzY3OVxuICBpZiAoIVY4X1ZFUlNJT04gfHwgVjhfVkVSU0lPTiA8IDUxIHx8ICEvbmF0aXZlIGNvZGUvLnRlc3QoUFJPTUlTRV9DT05TVFJVQ1RPUl9TT1VSQ0UpKSB7XG4gICAgLy8gRGV0ZWN0IGNvcnJlY3RuZXNzIG9mIHN1YmNsYXNzaW5nIHdpdGggQEBzcGVjaWVzIHN1cHBvcnRcbiAgICB2YXIgcHJvbWlzZSA9IG5ldyBOYXRpdmVQcm9taXNlQ29uc3RydWN0b3IoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSgxKTsgfSk7XG4gICAgdmFyIEZha2VQcm9taXNlID0gZnVuY3Rpb24gKGV4ZWMpIHtcbiAgICAgIGV4ZWMoZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9LCBmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH0pO1xuICAgIH07XG4gICAgdmFyIGNvbnN0cnVjdG9yID0gcHJvbWlzZS5jb25zdHJ1Y3RvciA9IHt9O1xuICAgIGNvbnN0cnVjdG9yW1NQRUNJRVNdID0gRmFrZVByb21pc2U7XG4gICAgU1VCQ0xBU1NJTkcgPSBwcm9taXNlLnRoZW4oZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9KSBpbnN0YW5jZW9mIEZha2VQcm9taXNlO1xuICAgIGlmICghU1VCQ0xBU1NJTkcpIHJldHVybiB0cnVlO1xuICAvLyBVbmhhbmRsZWQgcmVqZWN0aW9ucyB0cmFja2luZyBzdXBwb3J0LCBOb2RlSlMgUHJvbWlzZSB3aXRob3V0IGl0IGZhaWxzIEBAc3BlY2llcyB0ZXN0XG4gIH0gcmV0dXJuICFHTE9CQUxfQ09SRV9KU19QUk9NSVNFICYmIChFTlZJUk9OTUVOVCA9PT0gJ0JST1dTRVInIHx8IEVOVklST05NRU5UID09PSAnREVOTycpICYmICFOQVRJVkVfUFJPTUlTRV9SRUpFQ1RJT05fRVZFTlQ7XG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIENPTlNUUlVDVE9SOiBGT1JDRURfUFJPTUlTRV9DT05TVFJVQ1RPUixcbiAgUkVKRUNUSU9OX0VWRU5UOiBOQVRJVkVfUFJPTUlTRV9SRUpFQ1RJT05fRVZFTlQsXG4gIFNVQkNMQVNTSU5HOiBTVUJDTEFTU0lOR1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZ2xvYmFsVGhpcy5Qcm9taXNlO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xudmFyIG5ld1Byb21pc2VDYXBhYmlsaXR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL25ldy1wcm9taXNlLWNhcGFiaWxpdHknKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoQywgeCkge1xuICBhbk9iamVjdChDKTtcbiAgaWYgKGlzT2JqZWN0KHgpICYmIHguY29uc3RydWN0b3IgPT09IEMpIHJldHVybiB4O1xuICB2YXIgcHJvbWlzZUNhcGFiaWxpdHkgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eS5mKEMpO1xuICB2YXIgcmVzb2x2ZSA9IHByb21pc2VDYXBhYmlsaXR5LnJlc29sdmU7XG4gIHJlc29sdmUoeCk7XG4gIHJldHVybiBwcm9taXNlQ2FwYWJpbGl0eS5wcm9taXNlO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBOYXRpdmVQcm9taXNlQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcHJvbWlzZS1uYXRpdmUtY29uc3RydWN0b3InKTtcbnZhciBjaGVja0NvcnJlY3RuZXNzT2ZJdGVyYXRpb24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2hlY2stY29ycmVjdG5lc3Mtb2YtaXRlcmF0aW9uJyk7XG52YXIgRk9SQ0VEX1BST01JU0VfQ09OU1RSVUNUT1IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcHJvbWlzZS1jb25zdHJ1Y3Rvci1kZXRlY3Rpb24nKS5DT05TVFJVQ1RPUjtcblxubW9kdWxlLmV4cG9ydHMgPSBGT1JDRURfUFJPTUlTRV9DT05TVFJVQ1RPUiB8fCAhY2hlY2tDb3JyZWN0bmVzc09mSXRlcmF0aW9uKGZ1bmN0aW9uIChpdGVyYWJsZSkge1xuICBOYXRpdmVQcm9taXNlQ29uc3RydWN0b3IuYWxsKGl0ZXJhYmxlKS50aGVuKHVuZGVmaW5lZCwgZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9KTtcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIFF1ZXVlID0gZnVuY3Rpb24gKCkge1xuICB0aGlzLmhlYWQgPSBudWxsO1xuICB0aGlzLnRhaWwgPSBudWxsO1xufTtcblxuUXVldWUucHJvdG90eXBlID0ge1xuICBhZGQ6IGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgdmFyIGVudHJ5ID0geyBpdGVtOiBpdGVtLCBuZXh0OiBudWxsIH07XG4gICAgdmFyIHRhaWwgPSB0aGlzLnRhaWw7XG4gICAgaWYgKHRhaWwpIHRhaWwubmV4dCA9IGVudHJ5O1xuICAgIGVsc2UgdGhpcy5oZWFkID0gZW50cnk7XG4gICAgdGhpcy50YWlsID0gZW50cnk7XG4gIH0sXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHZhciBlbnRyeSA9IHRoaXMuaGVhZDtcbiAgICBpZiAoZW50cnkpIHtcbiAgICAgIHZhciBuZXh0ID0gdGhpcy5oZWFkID0gZW50cnkubmV4dDtcbiAgICAgIGlmIChuZXh0ID09PSBudWxsKSB0aGlzLnRhaWwgPSBudWxsO1xuICAgICAgcmV0dXJuIGVudHJ5Lml0ZW07XG4gICAgfVxuICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFF1ZXVlO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGlzTnVsbE9yVW5kZWZpbmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW51bGwtb3ItdW5kZWZpbmVkJyk7XG5cbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG4vLyBgUmVxdWlyZU9iamVjdENvZXJjaWJsZWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXJlcXVpcmVvYmplY3Rjb2VyY2libGVcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIGlmIChpc051bGxPclVuZGVmaW5lZChpdCkpIHRocm93IG5ldyAkVHlwZUVycm9yKFwiQ2FuJ3QgY2FsbCBtZXRob2Qgb24gXCIgKyBpdCk7XG4gIHJldHVybiBpdDtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9yIC0tIHNhZmVcbnZhciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xuXG4vLyBBdm9pZCBOb2RlSlMgZXhwZXJpbWVudGFsIHdhcm5pbmdcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgaWYgKCFERVNDUklQVE9SUykgcmV0dXJuIGdsb2JhbFRoaXNbbmFtZV07XG4gIHZhciBkZXNjcmlwdG9yID0gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGdsb2JhbFRoaXMsIG5hbWUpO1xuICByZXR1cm4gZGVzY3JpcHRvciAmJiBkZXNjcmlwdG9yLnZhbHVlO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBnZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbicpO1xudmFyIGRlZmluZUJ1aWx0SW5BY2Nlc3NvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4tYWNjZXNzb3InKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xuXG52YXIgU1BFQ0lFUyA9IHdlbGxLbm93blN5bWJvbCgnc3BlY2llcycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChDT05TVFJVQ1RPUl9OQU1FKSB7XG4gIHZhciBDb25zdHJ1Y3RvciA9IGdldEJ1aWx0SW4oQ09OU1RSVUNUT1JfTkFNRSk7XG5cbiAgaWYgKERFU0NSSVBUT1JTICYmIENvbnN0cnVjdG9yICYmICFDb25zdHJ1Y3RvcltTUEVDSUVTXSkge1xuICAgIGRlZmluZUJ1aWx0SW5BY2Nlc3NvcihDb25zdHJ1Y3RvciwgU1BFQ0lFUywge1xuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9XG4gICAgfSk7XG4gIH1cbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgVE9fU1RSSU5HX1RBR19TVVBQT1JUID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXN0cmluZy10YWctc3VwcG9ydCcpO1xudmFyIGRlZmluZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKS5mO1xudmFyIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHknKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIHRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC10by1zdHJpbmcnKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcblxudmFyIFRPX1NUUklOR19UQUcgPSB3ZWxsS25vd25TeW1ib2woJ3RvU3RyaW5nVGFnJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0LCBUQUcsIFNUQVRJQywgU0VUX01FVEhPRCkge1xuICB2YXIgdGFyZ2V0ID0gU1RBVElDID8gaXQgOiBpdCAmJiBpdC5wcm90b3R5cGU7XG4gIGlmICh0YXJnZXQpIHtcbiAgICBpZiAoIWhhc093bih0YXJnZXQsIFRPX1NUUklOR19UQUcpKSB7XG4gICAgICBkZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIFRPX1NUUklOR19UQUcsIHsgY29uZmlndXJhYmxlOiB0cnVlLCB2YWx1ZTogVEFHIH0pO1xuICAgIH1cbiAgICBpZiAoU0VUX01FVEhPRCAmJiAhVE9fU1RSSU5HX1RBR19TVVBQT1JUKSB7XG4gICAgICBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkodGFyZ2V0LCAndG9TdHJpbmcnLCB0b1N0cmluZyk7XG4gICAgfVxuICB9XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHNoYXJlZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQnKTtcbnZhciB1aWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdWlkJyk7XG5cbnZhciBrZXlzID0gc2hhcmVkKCdrZXlzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGtleSkge1xuICByZXR1cm4ga2V5c1trZXldIHx8IChrZXlzW2tleV0gPSB1aWQoa2V5KSk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIElTX1BVUkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtcHVyZScpO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcbnZhciBkZWZpbmVHbG9iYWxQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtZ2xvYmFsLXByb3BlcnR5Jyk7XG5cbnZhciBTSEFSRUQgPSAnX19jb3JlLWpzX3NoYXJlZF9fJztcbnZhciBzdG9yZSA9IG1vZHVsZS5leHBvcnRzID0gZ2xvYmFsVGhpc1tTSEFSRURdIHx8IGRlZmluZUdsb2JhbFByb3BlcnR5KFNIQVJFRCwge30pO1xuXG4oc3RvcmUudmVyc2lvbnMgfHwgKHN0b3JlLnZlcnNpb25zID0gW10pKS5wdXNoKHtcbiAgdmVyc2lvbjogJzMuMzguMScsXG4gIG1vZGU6IElTX1BVUkUgPyAncHVyZScgOiAnZ2xvYmFsJyxcbiAgY29weXJpZ2h0OiAnwqkgMjAxNC0yMDI0IERlbmlzIFB1c2hrYXJldiAoemxvaXJvY2sucnUpJyxcbiAgbGljZW5zZTogJ2h0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2Jsb2IvdjMuMzguMS9MSUNFTlNFJyxcbiAgc291cmNlOiAnaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMnXG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBzdG9yZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQtc3RvcmUnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICByZXR1cm4gc3RvcmVba2V5XSB8fCAoc3RvcmVba2V5XSA9IHZhbHVlIHx8IHt9KTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgYUNvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2EtY29uc3RydWN0b3InKTtcbnZhciBpc051bGxPclVuZGVmaW5lZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1udWxsLW9yLXVuZGVmaW5lZCcpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xuXG52YXIgU1BFQ0lFUyA9IHdlbGxLbm93blN5bWJvbCgnc3BlY2llcycpO1xuXG4vLyBgU3BlY2llc0NvbnN0cnVjdG9yYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3BlY2llc2NvbnN0cnVjdG9yXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChPLCBkZWZhdWx0Q29uc3RydWN0b3IpIHtcbiAgdmFyIEMgPSBhbk9iamVjdChPKS5jb25zdHJ1Y3RvcjtcbiAgdmFyIFM7XG4gIHJldHVybiBDID09PSB1bmRlZmluZWQgfHwgaXNOdWxsT3JVbmRlZmluZWQoUyA9IGFuT2JqZWN0KEMpW1NQRUNJRVNdKSA/IGRlZmF1bHRDb25zdHJ1Y3RvciA6IGFDb25zdHJ1Y3RvcihTKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgdG9JbnRlZ2VyT3JJbmZpbml0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbnRlZ2VyLW9yLWluZmluaXR5Jyk7XG52YXIgdG9TdHJpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tc3RyaW5nJyk7XG52YXIgcmVxdWlyZU9iamVjdENvZXJjaWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZXF1aXJlLW9iamVjdC1jb2VyY2libGUnKTtcblxudmFyIGNoYXJBdCA9IHVuY3VycnlUaGlzKCcnLmNoYXJBdCk7XG52YXIgY2hhckNvZGVBdCA9IHVuY3VycnlUaGlzKCcnLmNoYXJDb2RlQXQpO1xudmFyIHN0cmluZ1NsaWNlID0gdW5jdXJyeVRoaXMoJycuc2xpY2UpO1xuXG52YXIgY3JlYXRlTWV0aG9kID0gZnVuY3Rpb24gKENPTlZFUlRfVE9fU1RSSU5HKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoJHRoaXMsIHBvcykge1xuICAgIHZhciBTID0gdG9TdHJpbmcocmVxdWlyZU9iamVjdENvZXJjaWJsZSgkdGhpcykpO1xuICAgIHZhciBwb3NpdGlvbiA9IHRvSW50ZWdlck9ySW5maW5pdHkocG9zKTtcbiAgICB2YXIgc2l6ZSA9IFMubGVuZ3RoO1xuICAgIHZhciBmaXJzdCwgc2Vjb25kO1xuICAgIGlmIChwb3NpdGlvbiA8IDAgfHwgcG9zaXRpb24gPj0gc2l6ZSkgcmV0dXJuIENPTlZFUlRfVE9fU1RSSU5HID8gJycgOiB1bmRlZmluZWQ7XG4gICAgZmlyc3QgPSBjaGFyQ29kZUF0KFMsIHBvc2l0aW9uKTtcbiAgICByZXR1cm4gZmlyc3QgPCAweEQ4MDAgfHwgZmlyc3QgPiAweERCRkYgfHwgcG9zaXRpb24gKyAxID09PSBzaXplXG4gICAgICB8fCAoc2Vjb25kID0gY2hhckNvZGVBdChTLCBwb3NpdGlvbiArIDEpKSA8IDB4REMwMCB8fCBzZWNvbmQgPiAweERGRkZcbiAgICAgICAgPyBDT05WRVJUX1RPX1NUUklOR1xuICAgICAgICAgID8gY2hhckF0KFMsIHBvc2l0aW9uKVxuICAgICAgICAgIDogZmlyc3RcbiAgICAgICAgOiBDT05WRVJUX1RPX1NUUklOR1xuICAgICAgICAgID8gc3RyaW5nU2xpY2UoUywgcG9zaXRpb24sIHBvc2l0aW9uICsgMilcbiAgICAgICAgICA6IChmaXJzdCAtIDB4RDgwMCA8PCAxMCkgKyAoc2Vjb25kIC0gMHhEQzAwKSArIDB4MTAwMDA7XG4gIH07XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgLy8gYFN0cmluZy5wcm90b3R5cGUuY29kZVBvaW50QXRgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN0cmluZy5wcm90b3R5cGUuY29kZXBvaW50YXRcbiAgY29kZUF0OiBjcmVhdGVNZXRob2QoZmFsc2UpLFxuICAvLyBgU3RyaW5nLnByb3RvdHlwZS5hdGAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9tYXRoaWFzYnluZW5zL1N0cmluZy5wcm90b3R5cGUuYXRcbiAgY2hhckF0OiBjcmVhdGVNZXRob2QodHJ1ZSlcbn07XG4iLCIndXNlIHN0cmljdCc7XG4vKiBlc2xpbnQtZGlzYWJsZSBlcy9uby1zeW1ib2wgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmcgKi9cbnZhciBWOF9WRVJTSU9OID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Vudmlyb25tZW50LXY4LXZlcnNpb24nKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcblxudmFyICRTdHJpbmcgPSBnbG9iYWxUaGlzLlN0cmluZztcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eXN5bWJvbHMgLS0gcmVxdWlyZWQgZm9yIHRlc3Rpbmdcbm1vZHVsZS5leHBvcnRzID0gISFPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzICYmICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHZhciBzeW1ib2wgPSBTeW1ib2woJ3N5bWJvbCBkZXRlY3Rpb24nKTtcbiAgLy8gQ2hyb21lIDM4IFN5bWJvbCBoYXMgaW5jb3JyZWN0IHRvU3RyaW5nIGNvbnZlcnNpb25cbiAgLy8gYGdldC1vd24tcHJvcGVydHktc3ltYm9sc2AgcG9seWZpbGwgc3ltYm9scyBjb252ZXJ0ZWQgdG8gb2JqZWN0IGFyZSBub3QgU3ltYm9sIGluc3RhbmNlc1xuICAvLyBuYjogRG8gbm90IGNhbGwgYFN0cmluZ2AgZGlyZWN0bHkgdG8gYXZvaWQgdGhpcyBiZWluZyBvcHRpbWl6ZWQgb3V0IHRvIGBzeW1ib2wrJydgIHdoaWNoIHdpbGwsXG4gIC8vIG9mIGNvdXJzZSwgZmFpbC5cbiAgcmV0dXJuICEkU3RyaW5nKHN5bWJvbCkgfHwgIShPYmplY3Qoc3ltYm9sKSBpbnN0YW5jZW9mIFN5bWJvbCkgfHxcbiAgICAvLyBDaHJvbWUgMzgtNDAgc3ltYm9scyBhcmUgbm90IGluaGVyaXRlZCBmcm9tIERPTSBjb2xsZWN0aW9ucyBwcm90b3R5cGVzIHRvIGluc3RhbmNlc1xuICAgICFTeW1ib2wuc2hhbSAmJiBWOF9WRVJTSU9OICYmIFY4X1ZFUlNJT04gPCA0MTtcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcbnZhciBhcHBseSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1hcHBseScpO1xudmFyIGJpbmQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZC1jb250ZXh0Jyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBodG1sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2h0bWwnKTtcbnZhciBhcnJheVNsaWNlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LXNsaWNlJyk7XG52YXIgY3JlYXRlRWxlbWVudCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kb2N1bWVudC1jcmVhdGUtZWxlbWVudCcpO1xudmFyIHZhbGlkYXRlQXJndW1lbnRzTGVuZ3RoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3ZhbGlkYXRlLWFyZ3VtZW50cy1sZW5ndGgnKTtcbnZhciBJU19JT1MgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW52aXJvbm1lbnQtaXMtaW9zJyk7XG52YXIgSVNfTk9ERSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbnZpcm9ubWVudC1pcy1ub2RlJyk7XG5cbnZhciBzZXQgPSBnbG9iYWxUaGlzLnNldEltbWVkaWF0ZTtcbnZhciBjbGVhciA9IGdsb2JhbFRoaXMuY2xlYXJJbW1lZGlhdGU7XG52YXIgcHJvY2VzcyA9IGdsb2JhbFRoaXMucHJvY2VzcztcbnZhciBEaXNwYXRjaCA9IGdsb2JhbFRoaXMuRGlzcGF0Y2g7XG52YXIgRnVuY3Rpb24gPSBnbG9iYWxUaGlzLkZ1bmN0aW9uO1xudmFyIE1lc3NhZ2VDaGFubmVsID0gZ2xvYmFsVGhpcy5NZXNzYWdlQ2hhbm5lbDtcbnZhciBTdHJpbmcgPSBnbG9iYWxUaGlzLlN0cmluZztcbnZhciBjb3VudGVyID0gMDtcbnZhciBxdWV1ZSA9IHt9O1xudmFyIE9OUkVBRFlTVEFURUNIQU5HRSA9ICdvbnJlYWR5c3RhdGVjaGFuZ2UnO1xudmFyICRsb2NhdGlvbiwgZGVmZXIsIGNoYW5uZWwsIHBvcnQ7XG5cbmZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gRGVubyB0aHJvd3MgYSBSZWZlcmVuY2VFcnJvciBvbiBgbG9jYXRpb25gIGFjY2VzcyB3aXRob3V0IGAtLWxvY2F0aW9uYCBmbGFnXG4gICRsb2NhdGlvbiA9IGdsb2JhbFRoaXMubG9jYXRpb247XG59KTtcblxudmFyIHJ1biA9IGZ1bmN0aW9uIChpZCkge1xuICBpZiAoaGFzT3duKHF1ZXVlLCBpZCkpIHtcbiAgICB2YXIgZm4gPSBxdWV1ZVtpZF07XG4gICAgZGVsZXRlIHF1ZXVlW2lkXTtcbiAgICBmbigpO1xuICB9XG59O1xuXG52YXIgcnVubmVyID0gZnVuY3Rpb24gKGlkKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgcnVuKGlkKTtcbiAgfTtcbn07XG5cbnZhciBldmVudExpc3RlbmVyID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gIHJ1bihldmVudC5kYXRhKTtcbn07XG5cbnZhciBnbG9iYWxQb3N0TWVzc2FnZURlZmVyID0gZnVuY3Rpb24gKGlkKSB7XG4gIC8vIG9sZCBlbmdpbmVzIGhhdmUgbm90IGxvY2F0aW9uLm9yaWdpblxuICBnbG9iYWxUaGlzLnBvc3RNZXNzYWdlKFN0cmluZyhpZCksICRsb2NhdGlvbi5wcm90b2NvbCArICcvLycgKyAkbG9jYXRpb24uaG9zdCk7XG59O1xuXG4vLyBOb2RlLmpzIDAuOSsgJiBJRTEwKyBoYXMgc2V0SW1tZWRpYXRlLCBvdGhlcndpc2U6XG5pZiAoIXNldCB8fCAhY2xlYXIpIHtcbiAgc2V0ID0gZnVuY3Rpb24gc2V0SW1tZWRpYXRlKGhhbmRsZXIpIHtcbiAgICB2YWxpZGF0ZUFyZ3VtZW50c0xlbmd0aChhcmd1bWVudHMubGVuZ3RoLCAxKTtcbiAgICB2YXIgZm4gPSBpc0NhbGxhYmxlKGhhbmRsZXIpID8gaGFuZGxlciA6IEZ1bmN0aW9uKGhhbmRsZXIpO1xuICAgIHZhciBhcmdzID0gYXJyYXlTbGljZShhcmd1bWVudHMsIDEpO1xuICAgIHF1ZXVlWysrY291bnRlcl0gPSBmdW5jdGlvbiAoKSB7XG4gICAgICBhcHBseShmbiwgdW5kZWZpbmVkLCBhcmdzKTtcbiAgICB9O1xuICAgIGRlZmVyKGNvdW50ZXIpO1xuICAgIHJldHVybiBjb3VudGVyO1xuICB9O1xuICBjbGVhciA9IGZ1bmN0aW9uIGNsZWFySW1tZWRpYXRlKGlkKSB7XG4gICAgZGVsZXRlIHF1ZXVlW2lkXTtcbiAgfTtcbiAgLy8gTm9kZS5qcyAwLjgtXG4gIGlmIChJU19OT0RFKSB7XG4gICAgZGVmZXIgPSBmdW5jdGlvbiAoaWQpIHtcbiAgICAgIHByb2Nlc3MubmV4dFRpY2socnVubmVyKGlkKSk7XG4gICAgfTtcbiAgLy8gU3BoZXJlIChKUyBnYW1lIGVuZ2luZSkgRGlzcGF0Y2ggQVBJXG4gIH0gZWxzZSBpZiAoRGlzcGF0Y2ggJiYgRGlzcGF0Y2gubm93KSB7XG4gICAgZGVmZXIgPSBmdW5jdGlvbiAoaWQpIHtcbiAgICAgIERpc3BhdGNoLm5vdyhydW5uZXIoaWQpKTtcbiAgICB9O1xuICAvLyBCcm93c2VycyB3aXRoIE1lc3NhZ2VDaGFubmVsLCBpbmNsdWRlcyBXZWJXb3JrZXJzXG4gIC8vIGV4Y2VwdCBpT1MgLSBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvNjI0XG4gIH0gZWxzZSBpZiAoTWVzc2FnZUNoYW5uZWwgJiYgIUlTX0lPUykge1xuICAgIGNoYW5uZWwgPSBuZXcgTWVzc2FnZUNoYW5uZWwoKTtcbiAgICBwb3J0ID0gY2hhbm5lbC5wb3J0MjtcbiAgICBjaGFubmVsLnBvcnQxLm9ubWVzc2FnZSA9IGV2ZW50TGlzdGVuZXI7XG4gICAgZGVmZXIgPSBiaW5kKHBvcnQucG9zdE1lc3NhZ2UsIHBvcnQpO1xuICAvLyBCcm93c2VycyB3aXRoIHBvc3RNZXNzYWdlLCBza2lwIFdlYldvcmtlcnNcbiAgLy8gSUU4IGhhcyBwb3N0TWVzc2FnZSwgYnV0IGl0J3Mgc3luYyAmIHR5cGVvZiBpdHMgcG9zdE1lc3NhZ2UgaXMgJ29iamVjdCdcbiAgfSBlbHNlIGlmIChcbiAgICBnbG9iYWxUaGlzLmFkZEV2ZW50TGlzdGVuZXIgJiZcbiAgICBpc0NhbGxhYmxlKGdsb2JhbFRoaXMucG9zdE1lc3NhZ2UpICYmXG4gICAgIWdsb2JhbFRoaXMuaW1wb3J0U2NyaXB0cyAmJlxuICAgICRsb2NhdGlvbiAmJiAkbG9jYXRpb24ucHJvdG9jb2wgIT09ICdmaWxlOicgJiZcbiAgICAhZmFpbHMoZ2xvYmFsUG9zdE1lc3NhZ2VEZWZlcilcbiAgKSB7XG4gICAgZGVmZXIgPSBnbG9iYWxQb3N0TWVzc2FnZURlZmVyO1xuICAgIGdsb2JhbFRoaXMuYWRkRXZlbnRMaXN0ZW5lcignbWVzc2FnZScsIGV2ZW50TGlzdGVuZXIsIGZhbHNlKTtcbiAgLy8gSUU4LVxuICB9IGVsc2UgaWYgKE9OUkVBRFlTVEFURUNIQU5HRSBpbiBjcmVhdGVFbGVtZW50KCdzY3JpcHQnKSkge1xuICAgIGRlZmVyID0gZnVuY3Rpb24gKGlkKSB7XG4gICAgICBodG1sLmFwcGVuZENoaWxkKGNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpKVtPTlJFQURZU1RBVEVDSEFOR0VdID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBodG1sLnJlbW92ZUNoaWxkKHRoaXMpO1xuICAgICAgICBydW4oaWQpO1xuICAgICAgfTtcbiAgICB9O1xuICAvLyBSZXN0IG9sZCBicm93c2Vyc1xuICB9IGVsc2Uge1xuICAgIGRlZmVyID0gZnVuY3Rpb24gKGlkKSB7XG4gICAgICBzZXRUaW1lb3V0KHJ1bm5lcihpZCksIDApO1xuICAgIH07XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIHNldDogc2V0LFxuICBjbGVhcjogY2xlYXJcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgdG9JbnRlZ2VyT3JJbmZpbml0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbnRlZ2VyLW9yLWluZmluaXR5Jyk7XG5cbnZhciBtYXggPSBNYXRoLm1heDtcbnZhciBtaW4gPSBNYXRoLm1pbjtcblxuLy8gSGVscGVyIGZvciBhIHBvcHVsYXIgcmVwZWF0aW5nIGNhc2Ugb2YgdGhlIHNwZWM6XG4vLyBMZXQgaW50ZWdlciBiZSA/IFRvSW50ZWdlcihpbmRleCkuXG4vLyBJZiBpbnRlZ2VyIDwgMCwgbGV0IHJlc3VsdCBiZSBtYXgoKGxlbmd0aCArIGludGVnZXIpLCAwKTsgZWxzZSBsZXQgcmVzdWx0IGJlIG1pbihpbnRlZ2VyLCBsZW5ndGgpLlxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaW5kZXgsIGxlbmd0aCkge1xuICB2YXIgaW50ZWdlciA9IHRvSW50ZWdlck9ySW5maW5pdHkoaW5kZXgpO1xuICByZXR1cm4gaW50ZWdlciA8IDAgPyBtYXgoaW50ZWdlciArIGxlbmd0aCwgMCkgOiBtaW4oaW50ZWdlciwgbGVuZ3RoKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG4vLyB0b09iamVjdCB3aXRoIGZhbGxiYWNrIGZvciBub24tYXJyYXktbGlrZSBFUzMgc3RyaW5nc1xudmFyIEluZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW5kZXhlZC1vYmplY3QnKTtcbnZhciByZXF1aXJlT2JqZWN0Q29lcmNpYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlcXVpcmUtb2JqZWN0LWNvZXJjaWJsZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gSW5kZXhlZE9iamVjdChyZXF1aXJlT2JqZWN0Q29lcmNpYmxlKGl0KSk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHRydW5jID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL21hdGgtdHJ1bmMnKTtcblxuLy8gYFRvSW50ZWdlck9ySW5maW5pdHlgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy10b2ludGVnZXJvcmluZmluaXR5XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICB2YXIgbnVtYmVyID0gK2FyZ3VtZW50O1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlIC0tIE5hTiBjaGVja1xuICByZXR1cm4gbnVtYmVyICE9PSBudW1iZXIgfHwgbnVtYmVyID09PSAwID8gMCA6IHRydW5jKG51bWJlcik7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHRvSW50ZWdlck9ySW5maW5pdHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW50ZWdlci1vci1pbmZpbml0eScpO1xuXG52YXIgbWluID0gTWF0aC5taW47XG5cbi8vIGBUb0xlbmd0aGAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXRvbGVuZ3RoXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICB2YXIgbGVuID0gdG9JbnRlZ2VyT3JJbmZpbml0eShhcmd1bWVudCk7XG4gIHJldHVybiBsZW4gPiAwID8gbWluKGxlbiwgMHgxRkZGRkZGRkZGRkZGRikgOiAwOyAvLyAyICoqIDUzIC0gMSA9PSA5MDA3MTk5MjU0NzQwOTkxXG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHJlcXVpcmVPYmplY3RDb2VyY2libGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVxdWlyZS1vYmplY3QtY29lcmNpYmxlJyk7XG5cbnZhciAkT2JqZWN0ID0gT2JqZWN0O1xuXG4vLyBgVG9PYmplY3RgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy10b29iamVjdFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgcmV0dXJuICRPYmplY3QocmVxdWlyZU9iamVjdENvZXJjaWJsZShhcmd1bWVudCkpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciBpc1N5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1zeW1ib2wnKTtcbnZhciBnZXRNZXRob2QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LW1ldGhvZCcpO1xudmFyIG9yZGluYXJ5VG9QcmltaXRpdmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb3JkaW5hcnktdG8tcHJpbWl0aXZlJyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xudmFyIFRPX1BSSU1JVElWRSA9IHdlbGxLbm93blN5bWJvbCgndG9QcmltaXRpdmUnKTtcblxuLy8gYFRvUHJpbWl0aXZlYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtdG9wcmltaXRpdmVcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGlucHV0LCBwcmVmKSB7XG4gIGlmICghaXNPYmplY3QoaW5wdXQpIHx8IGlzU3ltYm9sKGlucHV0KSkgcmV0dXJuIGlucHV0O1xuICB2YXIgZXhvdGljVG9QcmltID0gZ2V0TWV0aG9kKGlucHV0LCBUT19QUklNSVRJVkUpO1xuICB2YXIgcmVzdWx0O1xuICBpZiAoZXhvdGljVG9QcmltKSB7XG4gICAgaWYgKHByZWYgPT09IHVuZGVmaW5lZCkgcHJlZiA9ICdkZWZhdWx0JztcbiAgICByZXN1bHQgPSBjYWxsKGV4b3RpY1RvUHJpbSwgaW5wdXQsIHByZWYpO1xuICAgIGlmICghaXNPYmplY3QocmVzdWx0KSB8fCBpc1N5bWJvbChyZXN1bHQpKSByZXR1cm4gcmVzdWx0O1xuICAgIHRocm93IG5ldyAkVHlwZUVycm9yKFwiQ2FuJ3QgY29udmVydCBvYmplY3QgdG8gcHJpbWl0aXZlIHZhbHVlXCIpO1xuICB9XG4gIGlmIChwcmVmID09PSB1bmRlZmluZWQpIHByZWYgPSAnbnVtYmVyJztcbiAgcmV0dXJuIG9yZGluYXJ5VG9QcmltaXRpdmUoaW5wdXQsIHByZWYpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciB0b1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1wcmltaXRpdmUnKTtcbnZhciBpc1N5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1zeW1ib2wnKTtcblxuLy8gYFRvUHJvcGVydHlLZXlgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy10b3Byb3BlcnR5a2V5XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICB2YXIga2V5ID0gdG9QcmltaXRpdmUoYXJndW1lbnQsICdzdHJpbmcnKTtcbiAgcmV0dXJuIGlzU3ltYm9sKGtleSkgPyBrZXkgOiBrZXkgKyAnJztcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciBUT19TVFJJTkdfVEFHID0gd2VsbEtub3duU3ltYm9sKCd0b1N0cmluZ1RhZycpO1xudmFyIHRlc3QgPSB7fTtcblxudGVzdFtUT19TVFJJTkdfVEFHXSA9ICd6JztcblxubW9kdWxlLmV4cG9ydHMgPSBTdHJpbmcodGVzdCkgPT09ICdbb2JqZWN0IHpdJztcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YnKTtcblxudmFyICRTdHJpbmcgPSBTdHJpbmc7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIGlmIChjbGFzc29mKGFyZ3VtZW50KSA9PT0gJ1N5bWJvbCcpIHRocm93IG5ldyBUeXBlRXJyb3IoJ0Nhbm5vdCBjb252ZXJ0IGEgU3ltYm9sIHZhbHVlIHRvIGEgc3RyaW5nJyk7XG4gIHJldHVybiAkU3RyaW5nKGFyZ3VtZW50KTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJFN0cmluZyA9IFN0cmluZztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gJFN0cmluZyhhcmd1bWVudCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuICdPYmplY3QnO1xuICB9XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xuXG52YXIgaWQgPSAwO1xudmFyIHBvc3RmaXggPSBNYXRoLnJhbmRvbSgpO1xudmFyIHRvU3RyaW5nID0gdW5jdXJyeVRoaXMoMS4wLnRvU3RyaW5nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5KSB7XG4gIHJldHVybiAnU3ltYm9sKCcgKyAoa2V5ID09PSB1bmRlZmluZWQgPyAnJyA6IGtleSkgKyAnKV8nICsgdG9TdHJpbmcoKytpZCArIHBvc3RmaXgsIDM2KTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG4vKiBlc2xpbnQtZGlzYWJsZSBlcy9uby1zeW1ib2wgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmcgKi9cbnZhciBOQVRJVkVfU1lNQk9MID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3N5bWJvbC1jb25zdHJ1Y3Rvci1kZXRlY3Rpb24nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBOQVRJVkVfU1lNQk9MXG4gICYmICFTeW1ib2wuc2hhbVxuICAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09ICdzeW1ib2wnO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcblxuLy8gVjggfiBDaHJvbWUgMzYtXG4vLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvdjgvaXNzdWVzL2RldGFpbD9pZD0zMzM0XG5tb2R1bGUuZXhwb3J0cyA9IERFU0NSSVBUT1JTICYmIGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xuICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfSwgJ3Byb3RvdHlwZScsIHtcbiAgICB2YWx1ZTogNDIsXG4gICAgd3JpdGFibGU6IGZhbHNlXG4gIH0pLnByb3RvdHlwZSAhPT0gNDI7XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChwYXNzZWQsIHJlcXVpcmVkKSB7XG4gIGlmIChwYXNzZWQgPCByZXF1aXJlZCkgdGhyb3cgbmV3ICRUeXBlRXJyb3IoJ05vdCBlbm91Z2ggYXJndW1lbnRzJyk7XG4gIHJldHVybiBwYXNzZWQ7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG5cbnZhciBXZWFrTWFwID0gZ2xvYmFsVGhpcy5XZWFrTWFwO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGlzQ2FsbGFibGUoV2Vha01hcCkgJiYgL25hdGl2ZSBjb2RlLy50ZXN0KFN0cmluZyhXZWFrTWFwKSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xudmFyIHNoYXJlZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQnKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIHVpZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy91aWQnKTtcbnZhciBOQVRJVkVfU1lNQk9MID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3N5bWJvbC1jb25zdHJ1Y3Rvci1kZXRlY3Rpb24nKTtcbnZhciBVU0VfU1lNQk9MX0FTX1VJRCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy91c2Utc3ltYm9sLWFzLXVpZCcpO1xuXG52YXIgU3ltYm9sID0gZ2xvYmFsVGhpcy5TeW1ib2w7XG52YXIgV2VsbEtub3duU3ltYm9sc1N0b3JlID0gc2hhcmVkKCd3a3MnKTtcbnZhciBjcmVhdGVXZWxsS25vd25TeW1ib2wgPSBVU0VfU1lNQk9MX0FTX1VJRCA/IFN5bWJvbFsnZm9yJ10gfHwgU3ltYm9sIDogU3ltYm9sICYmIFN5bWJvbC53aXRob3V0U2V0dGVyIHx8IHVpZDtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAobmFtZSkge1xuICBpZiAoIWhhc093bihXZWxsS25vd25TeW1ib2xzU3RvcmUsIG5hbWUpKSB7XG4gICAgV2VsbEtub3duU3ltYm9sc1N0b3JlW25hbWVdID0gTkFUSVZFX1NZTUJPTCAmJiBoYXNPd24oU3ltYm9sLCBuYW1lKVxuICAgICAgPyBTeW1ib2xbbmFtZV1cbiAgICAgIDogY3JlYXRlV2VsbEtub3duU3ltYm9sKCdTeW1ib2wuJyArIG5hbWUpO1xuICB9IHJldHVybiBXZWxsS25vd25TeW1ib2xzU3RvcmVbbmFtZV07XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgaXNQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtaXMtcHJvdG90eXBlLW9mJyk7XG52YXIgZ2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1wcm90b3R5cGUtb2YnKTtcbnZhciBzZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3Qtc2V0LXByb3RvdHlwZS1vZicpO1xudmFyIGNvcHlDb25zdHJ1Y3RvclByb3BlcnRpZXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY29weS1jb25zdHJ1Y3Rvci1wcm9wZXJ0aWVzJyk7XG52YXIgY3JlYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1jcmVhdGUnKTtcbnZhciBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLW5vbi1lbnVtZXJhYmxlLXByb3BlcnR5Jyk7XG52YXIgY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eS1kZXNjcmlwdG9yJyk7XG52YXIgaW5zdGFsbEVycm9yQ2F1c2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW5zdGFsbC1lcnJvci1jYXVzZScpO1xudmFyIGluc3RhbGxFcnJvclN0YWNrID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Vycm9yLXN0YWNrLWluc3RhbGwnKTtcbnZhciBpdGVyYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdGUnKTtcbnZhciBub3JtYWxpemVTdHJpbmdBcmd1bWVudCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9ub3JtYWxpemUtc3RyaW5nLWFyZ3VtZW50Jyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciBUT19TVFJJTkdfVEFHID0gd2VsbEtub3duU3ltYm9sKCd0b1N0cmluZ1RhZycpO1xudmFyICRFcnJvciA9IEVycm9yO1xudmFyIHB1c2ggPSBbXS5wdXNoO1xuXG52YXIgJEFnZ3JlZ2F0ZUVycm9yID0gZnVuY3Rpb24gQWdncmVnYXRlRXJyb3IoZXJyb3JzLCBtZXNzYWdlIC8qICwgb3B0aW9ucyAqLykge1xuICB2YXIgaXNJbnN0YW5jZSA9IGlzUHJvdG90eXBlT2YoQWdncmVnYXRlRXJyb3JQcm90b3R5cGUsIHRoaXMpO1xuICB2YXIgdGhhdDtcbiAgaWYgKHNldFByb3RvdHlwZU9mKSB7XG4gICAgdGhhdCA9IHNldFByb3RvdHlwZU9mKG5ldyAkRXJyb3IoKSwgaXNJbnN0YW5jZSA/IGdldFByb3RvdHlwZU9mKHRoaXMpIDogQWdncmVnYXRlRXJyb3JQcm90b3R5cGUpO1xuICB9IGVsc2Uge1xuICAgIHRoYXQgPSBpc0luc3RhbmNlID8gdGhpcyA6IGNyZWF0ZShBZ2dyZWdhdGVFcnJvclByb3RvdHlwZSk7XG4gICAgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KHRoYXQsIFRPX1NUUklOR19UQUcsICdFcnJvcicpO1xuICB9XG4gIGlmIChtZXNzYWdlICE9PSB1bmRlZmluZWQpIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSh0aGF0LCAnbWVzc2FnZScsIG5vcm1hbGl6ZVN0cmluZ0FyZ3VtZW50KG1lc3NhZ2UpKTtcbiAgaW5zdGFsbEVycm9yU3RhY2sodGhhdCwgJEFnZ3JlZ2F0ZUVycm9yLCB0aGF0LnN0YWNrLCAxKTtcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAyKSBpbnN0YWxsRXJyb3JDYXVzZSh0aGF0LCBhcmd1bWVudHNbMl0pO1xuICB2YXIgZXJyb3JzQXJyYXkgPSBbXTtcbiAgaXRlcmF0ZShlcnJvcnMsIHB1c2gsIHsgdGhhdDogZXJyb3JzQXJyYXkgfSk7XG4gIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSh0aGF0LCAnZXJyb3JzJywgZXJyb3JzQXJyYXkpO1xuICByZXR1cm4gdGhhdDtcbn07XG5cbmlmIChzZXRQcm90b3R5cGVPZikgc2V0UHJvdG90eXBlT2YoJEFnZ3JlZ2F0ZUVycm9yLCAkRXJyb3IpO1xuZWxzZSBjb3B5Q29uc3RydWN0b3JQcm9wZXJ0aWVzKCRBZ2dyZWdhdGVFcnJvciwgJEVycm9yLCB7IG5hbWU6IHRydWUgfSk7XG5cbnZhciBBZ2dyZWdhdGVFcnJvclByb3RvdHlwZSA9ICRBZ2dyZWdhdGVFcnJvci5wcm90b3R5cGUgPSBjcmVhdGUoJEVycm9yLnByb3RvdHlwZSwge1xuICBjb25zdHJ1Y3RvcjogY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yKDEsICRBZ2dyZWdhdGVFcnJvciksXG4gIG1lc3NhZ2U6IGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvcigxLCAnJyksXG4gIG5hbWU6IGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvcigxLCAnQWdncmVnYXRlRXJyb3InKVxufSk7XG5cbi8vIGBBZ2dyZWdhdGVFcnJvcmAgY29uc3RydWN0b3Jcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYWdncmVnYXRlLWVycm9yLWNvbnN0cnVjdG9yXG4kKHsgZ2xvYmFsOiB0cnVlLCBjb25zdHJ1Y3RvcjogdHJ1ZSwgYXJpdHk6IDIgfSwge1xuICBBZ2dyZWdhdGVFcnJvcjogJEFnZ3JlZ2F0ZUVycm9yXG59KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIFRPRE86IFJlbW92ZSB0aGlzIG1vZHVsZSBmcm9tIGBjb3JlLWpzQDRgIHNpbmNlIGl0J3MgcmVwbGFjZWQgdG8gbW9kdWxlIGJlbG93XG5yZXF1aXJlKCcuLi9tb2R1bGVzL2VzLmFnZ3JlZ2F0ZS1lcnJvci5jb25zdHJ1Y3RvcicpO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHRvSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdCcpO1xudmFyIGFkZFRvVW5zY29wYWJsZXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYWRkLXRvLXVuc2NvcGFibGVzJyk7XG52YXIgSXRlcmF0b3JzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdG9ycycpO1xudmFyIEludGVybmFsU3RhdGVNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW50ZXJuYWwtc3RhdGUnKTtcbnZhciBkZWZpbmVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5JykuZjtcbnZhciBkZWZpbmVJdGVyYXRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvci1kZWZpbmUnKTtcbnZhciBjcmVhdGVJdGVyUmVzdWx0T2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1pdGVyLXJlc3VsdC1vYmplY3QnKTtcbnZhciBJU19QVVJFID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXB1cmUnKTtcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xuXG52YXIgQVJSQVlfSVRFUkFUT1IgPSAnQXJyYXkgSXRlcmF0b3InO1xudmFyIHNldEludGVybmFsU3RhdGUgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLnNldDtcbnZhciBnZXRJbnRlcm5hbFN0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5nZXR0ZXJGb3IoQVJSQVlfSVRFUkFUT1IpO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLmVudHJpZXNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuZW50cmllc1xuLy8gYEFycmF5LnByb3RvdHlwZS5rZXlzYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmtleXNcbi8vIGBBcnJheS5wcm90b3R5cGUudmFsdWVzYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLnZhbHVlc1xuLy8gYEFycmF5LnByb3RvdHlwZVtAQGl0ZXJhdG9yXWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS1AQGl0ZXJhdG9yXG4vLyBgQ3JlYXRlQXJyYXlJdGVyYXRvcmAgaW50ZXJuYWwgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWNyZWF0ZWFycmF5aXRlcmF0b3Jcbm1vZHVsZS5leHBvcnRzID0gZGVmaW5lSXRlcmF0b3IoQXJyYXksICdBcnJheScsIGZ1bmN0aW9uIChpdGVyYXRlZCwga2luZCkge1xuICBzZXRJbnRlcm5hbFN0YXRlKHRoaXMsIHtcbiAgICB0eXBlOiBBUlJBWV9JVEVSQVRPUixcbiAgICB0YXJnZXQ6IHRvSW5kZXhlZE9iamVjdChpdGVyYXRlZCksIC8vIHRhcmdldFxuICAgIGluZGV4OiAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gbmV4dCBpbmRleFxuICAgIGtpbmQ6IGtpbmQgICAgICAgICAgICAgICAgICAgICAgICAgLy8ga2luZFxuICB9KTtcbi8vIGAlQXJyYXlJdGVyYXRvclByb3RvdHlwZSUubmV4dGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLSVhcnJheWl0ZXJhdG9ycHJvdG90eXBlJS5uZXh0XG59LCBmdW5jdGlvbiAoKSB7XG4gIHZhciBzdGF0ZSA9IGdldEludGVybmFsU3RhdGUodGhpcyk7XG4gIHZhciB0YXJnZXQgPSBzdGF0ZS50YXJnZXQ7XG4gIHZhciBpbmRleCA9IHN0YXRlLmluZGV4Kys7XG4gIGlmICghdGFyZ2V0IHx8IGluZGV4ID49IHRhcmdldC5sZW5ndGgpIHtcbiAgICBzdGF0ZS50YXJnZXQgPSBudWxsO1xuICAgIHJldHVybiBjcmVhdGVJdGVyUmVzdWx0T2JqZWN0KHVuZGVmaW5lZCwgdHJ1ZSk7XG4gIH1cbiAgc3dpdGNoIChzdGF0ZS5raW5kKSB7XG4gICAgY2FzZSAna2V5cyc6IHJldHVybiBjcmVhdGVJdGVyUmVzdWx0T2JqZWN0KGluZGV4LCBmYWxzZSk7XG4gICAgY2FzZSAndmFsdWVzJzogcmV0dXJuIGNyZWF0ZUl0ZXJSZXN1bHRPYmplY3QodGFyZ2V0W2luZGV4XSwgZmFsc2UpO1xuICB9IHJldHVybiBjcmVhdGVJdGVyUmVzdWx0T2JqZWN0KFtpbmRleCwgdGFyZ2V0W2luZGV4XV0sIGZhbHNlKTtcbn0sICd2YWx1ZXMnKTtcblxuLy8gYXJndW1lbnRzTGlzdFtAQGl0ZXJhdG9yXSBpcyAlQXJyYXlQcm90b192YWx1ZXMlXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWNyZWF0ZXVubWFwcGVkYXJndW1lbnRzb2JqZWN0XG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWNyZWF0ZW1hcHBlZGFyZ3VtZW50c29iamVjdFxudmFyIHZhbHVlcyA9IEl0ZXJhdG9ycy5Bcmd1bWVudHMgPSBJdGVyYXRvcnMuQXJyYXk7XG5cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLUBAdW5zY29wYWJsZXNcbmFkZFRvVW5zY29wYWJsZXMoJ2tleXMnKTtcbmFkZFRvVW5zY29wYWJsZXMoJ3ZhbHVlcycpO1xuYWRkVG9VbnNjb3BhYmxlcygnZW50cmllcycpO1xuXG4vLyBWOCB+IENocm9tZSA0NS0gYnVnXG5pZiAoIUlTX1BVUkUgJiYgREVTQ1JJUFRPUlMgJiYgdmFsdWVzLm5hbWUgIT09ICd2YWx1ZXMnKSB0cnkge1xuICBkZWZpbmVQcm9wZXJ0eSh2YWx1ZXMsICduYW1lJywgeyB2YWx1ZTogJ3ZhbHVlcycgfSk7XG59IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG4iLCIvLyBlbXB0eVxuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgYUNhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2EtY2FsbGFibGUnKTtcbnZhciBuZXdQcm9taXNlQ2FwYWJpbGl0eU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9uZXctcHJvbWlzZS1jYXBhYmlsaXR5Jyk7XG52YXIgcGVyZm9ybSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9wZXJmb3JtJyk7XG52YXIgaXRlcmF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRlJyk7XG52YXIgUFJPTUlTRV9TVEFUSUNTX0lOQ09SUkVDVF9JVEVSQVRJT04gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcHJvbWlzZS1zdGF0aWNzLWluY29ycmVjdC1pdGVyYXRpb24nKTtcblxuLy8gYFByb21pc2UuYWxsU2V0dGxlZGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXByb21pc2UuYWxsc2V0dGxlZFxuJCh7IHRhcmdldDogJ1Byb21pc2UnLCBzdGF0OiB0cnVlLCBmb3JjZWQ6IFBST01JU0VfU1RBVElDU19JTkNPUlJFQ1RfSVRFUkFUSU9OIH0sIHtcbiAgYWxsU2V0dGxlZDogZnVuY3Rpb24gYWxsU2V0dGxlZChpdGVyYWJsZSkge1xuICAgIHZhciBDID0gdGhpcztcbiAgICB2YXIgY2FwYWJpbGl0eSA9IG5ld1Byb21pc2VDYXBhYmlsaXR5TW9kdWxlLmYoQyk7XG4gICAgdmFyIHJlc29sdmUgPSBjYXBhYmlsaXR5LnJlc29sdmU7XG4gICAgdmFyIHJlamVjdCA9IGNhcGFiaWxpdHkucmVqZWN0O1xuICAgIHZhciByZXN1bHQgPSBwZXJmb3JtKGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciBwcm9taXNlUmVzb2x2ZSA9IGFDYWxsYWJsZShDLnJlc29sdmUpO1xuICAgICAgdmFyIHZhbHVlcyA9IFtdO1xuICAgICAgdmFyIGNvdW50ZXIgPSAwO1xuICAgICAgdmFyIHJlbWFpbmluZyA9IDE7XG4gICAgICBpdGVyYXRlKGl0ZXJhYmxlLCBmdW5jdGlvbiAocHJvbWlzZSkge1xuICAgICAgICB2YXIgaW5kZXggPSBjb3VudGVyKys7XG4gICAgICAgIHZhciBhbHJlYWR5Q2FsbGVkID0gZmFsc2U7XG4gICAgICAgIHJlbWFpbmluZysrO1xuICAgICAgICBjYWxsKHByb21pc2VSZXNvbHZlLCBDLCBwcm9taXNlKS50aGVuKGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgIGlmIChhbHJlYWR5Q2FsbGVkKSByZXR1cm47XG4gICAgICAgICAgYWxyZWFkeUNhbGxlZCA9IHRydWU7XG4gICAgICAgICAgdmFsdWVzW2luZGV4XSA9IHsgc3RhdHVzOiAnZnVsZmlsbGVkJywgdmFsdWU6IHZhbHVlIH07XG4gICAgICAgICAgLS1yZW1haW5pbmcgfHwgcmVzb2x2ZSh2YWx1ZXMpO1xuICAgICAgICB9LCBmdW5jdGlvbiAoZXJyb3IpIHtcbiAgICAgICAgICBpZiAoYWxyZWFkeUNhbGxlZCkgcmV0dXJuO1xuICAgICAgICAgIGFscmVhZHlDYWxsZWQgPSB0cnVlO1xuICAgICAgICAgIHZhbHVlc1tpbmRleF0gPSB7IHN0YXR1czogJ3JlamVjdGVkJywgcmVhc29uOiBlcnJvciB9O1xuICAgICAgICAgIC0tcmVtYWluaW5nIHx8IHJlc29sdmUodmFsdWVzKTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICAgIC0tcmVtYWluaW5nIHx8IHJlc29sdmUodmFsdWVzKTtcbiAgICB9KTtcbiAgICBpZiAocmVzdWx0LmVycm9yKSByZWplY3QocmVzdWx0LnZhbHVlKTtcbiAgICByZXR1cm4gY2FwYWJpbGl0eS5wcm9taXNlO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIGFDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLWNhbGxhYmxlJyk7XG52YXIgbmV3UHJvbWlzZUNhcGFiaWxpdHlNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbmV3LXByb21pc2UtY2FwYWJpbGl0eScpO1xudmFyIHBlcmZvcm0gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcGVyZm9ybScpO1xudmFyIGl0ZXJhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0ZScpO1xudmFyIFBST01JU0VfU1RBVElDU19JTkNPUlJFQ1RfSVRFUkFUSU9OID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3Byb21pc2Utc3RhdGljcy1pbmNvcnJlY3QtaXRlcmF0aW9uJyk7XG5cbi8vIGBQcm9taXNlLmFsbGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXByb21pc2UuYWxsXG4kKHsgdGFyZ2V0OiAnUHJvbWlzZScsIHN0YXQ6IHRydWUsIGZvcmNlZDogUFJPTUlTRV9TVEFUSUNTX0lOQ09SUkVDVF9JVEVSQVRJT04gfSwge1xuICBhbGw6IGZ1bmN0aW9uIGFsbChpdGVyYWJsZSkge1xuICAgIHZhciBDID0gdGhpcztcbiAgICB2YXIgY2FwYWJpbGl0eSA9IG5ld1Byb21pc2VDYXBhYmlsaXR5TW9kdWxlLmYoQyk7XG4gICAgdmFyIHJlc29sdmUgPSBjYXBhYmlsaXR5LnJlc29sdmU7XG4gICAgdmFyIHJlamVjdCA9IGNhcGFiaWxpdHkucmVqZWN0O1xuICAgIHZhciByZXN1bHQgPSBwZXJmb3JtKGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciAkcHJvbWlzZVJlc29sdmUgPSBhQ2FsbGFibGUoQy5yZXNvbHZlKTtcbiAgICAgIHZhciB2YWx1ZXMgPSBbXTtcbiAgICAgIHZhciBjb3VudGVyID0gMDtcbiAgICAgIHZhciByZW1haW5pbmcgPSAxO1xuICAgICAgaXRlcmF0ZShpdGVyYWJsZSwgZnVuY3Rpb24gKHByb21pc2UpIHtcbiAgICAgICAgdmFyIGluZGV4ID0gY291bnRlcisrO1xuICAgICAgICB2YXIgYWxyZWFkeUNhbGxlZCA9IGZhbHNlO1xuICAgICAgICByZW1haW5pbmcrKztcbiAgICAgICAgY2FsbCgkcHJvbWlzZVJlc29sdmUsIEMsIHByb21pc2UpLnRoZW4oZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgaWYgKGFscmVhZHlDYWxsZWQpIHJldHVybjtcbiAgICAgICAgICBhbHJlYWR5Q2FsbGVkID0gdHJ1ZTtcbiAgICAgICAgICB2YWx1ZXNbaW5kZXhdID0gdmFsdWU7XG4gICAgICAgICAgLS1yZW1haW5pbmcgfHwgcmVzb2x2ZSh2YWx1ZXMpO1xuICAgICAgICB9LCByZWplY3QpO1xuICAgICAgfSk7XG4gICAgICAtLXJlbWFpbmluZyB8fCByZXNvbHZlKHZhbHVlcyk7XG4gICAgfSk7XG4gICAgaWYgKHJlc3VsdC5lcnJvcikgcmVqZWN0KHJlc3VsdC52YWx1ZSk7XG4gICAgcmV0dXJuIGNhcGFiaWxpdHkucHJvbWlzZTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciBhQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1jYWxsYWJsZScpO1xudmFyIGdldEJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluJyk7XG52YXIgbmV3UHJvbWlzZUNhcGFiaWxpdHlNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbmV3LXByb21pc2UtY2FwYWJpbGl0eScpO1xudmFyIHBlcmZvcm0gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcGVyZm9ybScpO1xudmFyIGl0ZXJhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0ZScpO1xudmFyIFBST01JU0VfU1RBVElDU19JTkNPUlJFQ1RfSVRFUkFUSU9OID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3Byb21pc2Utc3RhdGljcy1pbmNvcnJlY3QtaXRlcmF0aW9uJyk7XG5cbnZhciBQUk9NSVNFX0FOWV9FUlJPUiA9ICdObyBvbmUgcHJvbWlzZSByZXNvbHZlZCc7XG5cbi8vIGBQcm9taXNlLmFueWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXByb21pc2UuYW55XG4kKHsgdGFyZ2V0OiAnUHJvbWlzZScsIHN0YXQ6IHRydWUsIGZvcmNlZDogUFJPTUlTRV9TVEFUSUNTX0lOQ09SUkVDVF9JVEVSQVRJT04gfSwge1xuICBhbnk6IGZ1bmN0aW9uIGFueShpdGVyYWJsZSkge1xuICAgIHZhciBDID0gdGhpcztcbiAgICB2YXIgQWdncmVnYXRlRXJyb3IgPSBnZXRCdWlsdEluKCdBZ2dyZWdhdGVFcnJvcicpO1xuICAgIHZhciBjYXBhYmlsaXR5ID0gbmV3UHJvbWlzZUNhcGFiaWxpdHlNb2R1bGUuZihDKTtcbiAgICB2YXIgcmVzb2x2ZSA9IGNhcGFiaWxpdHkucmVzb2x2ZTtcbiAgICB2YXIgcmVqZWN0ID0gY2FwYWJpbGl0eS5yZWplY3Q7XG4gICAgdmFyIHJlc3VsdCA9IHBlcmZvcm0oZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIHByb21pc2VSZXNvbHZlID0gYUNhbGxhYmxlKEMucmVzb2x2ZSk7XG4gICAgICB2YXIgZXJyb3JzID0gW107XG4gICAgICB2YXIgY291bnRlciA9IDA7XG4gICAgICB2YXIgcmVtYWluaW5nID0gMTtcbiAgICAgIHZhciBhbHJlYWR5UmVzb2x2ZWQgPSBmYWxzZTtcbiAgICAgIGl0ZXJhdGUoaXRlcmFibGUsIGZ1bmN0aW9uIChwcm9taXNlKSB7XG4gICAgICAgIHZhciBpbmRleCA9IGNvdW50ZXIrKztcbiAgICAgICAgdmFyIGFscmVhZHlSZWplY3RlZCA9IGZhbHNlO1xuICAgICAgICByZW1haW5pbmcrKztcbiAgICAgICAgY2FsbChwcm9taXNlUmVzb2x2ZSwgQywgcHJvbWlzZSkudGhlbihmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICBpZiAoYWxyZWFkeVJlamVjdGVkIHx8IGFscmVhZHlSZXNvbHZlZCkgcmV0dXJuO1xuICAgICAgICAgIGFscmVhZHlSZXNvbHZlZCA9IHRydWU7XG4gICAgICAgICAgcmVzb2x2ZSh2YWx1ZSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnJvcikge1xuICAgICAgICAgIGlmIChhbHJlYWR5UmVqZWN0ZWQgfHwgYWxyZWFkeVJlc29sdmVkKSByZXR1cm47XG4gICAgICAgICAgYWxyZWFkeVJlamVjdGVkID0gdHJ1ZTtcbiAgICAgICAgICBlcnJvcnNbaW5kZXhdID0gZXJyb3I7XG4gICAgICAgICAgLS1yZW1haW5pbmcgfHwgcmVqZWN0KG5ldyBBZ2dyZWdhdGVFcnJvcihlcnJvcnMsIFBST01JU0VfQU5ZX0VSUk9SKSk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgICAtLXJlbWFpbmluZyB8fCByZWplY3QobmV3IEFnZ3JlZ2F0ZUVycm9yKGVycm9ycywgUFJPTUlTRV9BTllfRVJST1IpKTtcbiAgICB9KTtcbiAgICBpZiAocmVzdWx0LmVycm9yKSByZWplY3QocmVzdWx0LnZhbHVlKTtcbiAgICByZXR1cm4gY2FwYWJpbGl0eS5wcm9taXNlO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIElTX1BVUkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtcHVyZScpO1xudmFyIEZPUkNFRF9QUk9NSVNFX0NPTlNUUlVDVE9SID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3Byb21pc2UtY29uc3RydWN0b3ItZGV0ZWN0aW9uJykuQ09OU1RSVUNUT1I7XG52YXIgTmF0aXZlUHJvbWlzZUNvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3Byb21pc2UtbmF0aXZlLWNvbnN0cnVjdG9yJyk7XG52YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgZGVmaW5lQnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4nKTtcblxudmFyIE5hdGl2ZVByb21pc2VQcm90b3R5cGUgPSBOYXRpdmVQcm9taXNlQ29uc3RydWN0b3IgJiYgTmF0aXZlUHJvbWlzZUNvbnN0cnVjdG9yLnByb3RvdHlwZTtcblxuLy8gYFByb21pc2UucHJvdG90eXBlLmNhdGNoYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtcHJvbWlzZS5wcm90b3R5cGUuY2F0Y2hcbiQoeyB0YXJnZXQ6ICdQcm9taXNlJywgcHJvdG86IHRydWUsIGZvcmNlZDogRk9SQ0VEX1BST01JU0VfQ09OU1RSVUNUT1IsIHJlYWw6IHRydWUgfSwge1xuICAnY2F0Y2gnOiBmdW5jdGlvbiAob25SZWplY3RlZCkge1xuICAgIHJldHVybiB0aGlzLnRoZW4odW5kZWZpbmVkLCBvblJlamVjdGVkKTtcbiAgfVxufSk7XG5cbi8vIG1ha2VzIHN1cmUgdGhhdCBuYXRpdmUgcHJvbWlzZS1iYXNlZCBBUElzIGBQcm9taXNlI2NhdGNoYCBwcm9wZXJseSB3b3JrcyB3aXRoIHBhdGNoZWQgYFByb21pc2UjdGhlbmBcbmlmICghSVNfUFVSRSAmJiBpc0NhbGxhYmxlKE5hdGl2ZVByb21pc2VDb25zdHJ1Y3RvcikpIHtcbiAgdmFyIG1ldGhvZCA9IGdldEJ1aWx0SW4oJ1Byb21pc2UnKS5wcm90b3R5cGVbJ2NhdGNoJ107XG4gIGlmIChOYXRpdmVQcm9taXNlUHJvdG90eXBlWydjYXRjaCddICE9PSBtZXRob2QpIHtcbiAgICBkZWZpbmVCdWlsdEluKE5hdGl2ZVByb21pc2VQcm90b3R5cGUsICdjYXRjaCcsIG1ldGhvZCwgeyB1bnNhZmU6IHRydWUgfSk7XG4gIH1cbn1cbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIElTX1BVUkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtcHVyZScpO1xudmFyIElTX05PREUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW52aXJvbm1lbnQtaXMtbm9kZScpO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciBkZWZpbmVCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbicpO1xudmFyIHNldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1zZXQtcHJvdG90eXBlLW9mJyk7XG52YXIgc2V0VG9TdHJpbmdUYWcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LXRvLXN0cmluZy10YWcnKTtcbnZhciBzZXRTcGVjaWVzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1zcGVjaWVzJyk7XG52YXIgYUNhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2EtY2FsbGFibGUnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgYW5JbnN0YW5jZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1pbnN0YW5jZScpO1xudmFyIHNwZWNpZXNDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zcGVjaWVzLWNvbnN0cnVjdG9yJyk7XG52YXIgdGFzayA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90YXNrJykuc2V0O1xudmFyIG1pY3JvdGFzayA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9taWNyb3Rhc2snKTtcbnZhciBob3N0UmVwb3J0RXJyb3JzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hvc3QtcmVwb3J0LWVycm9ycycpO1xudmFyIHBlcmZvcm0gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcGVyZm9ybScpO1xudmFyIFF1ZXVlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3F1ZXVlJyk7XG52YXIgSW50ZXJuYWxTdGF0ZU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbnRlcm5hbC1zdGF0ZScpO1xudmFyIE5hdGl2ZVByb21pc2VDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9wcm9taXNlLW5hdGl2ZS1jb25zdHJ1Y3RvcicpO1xudmFyIFByb21pc2VDb25zdHJ1Y3RvckRldGVjdGlvbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9wcm9taXNlLWNvbnN0cnVjdG9yLWRldGVjdGlvbicpO1xudmFyIG5ld1Byb21pc2VDYXBhYmlsaXR5TW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL25ldy1wcm9taXNlLWNhcGFiaWxpdHknKTtcblxudmFyIFBST01JU0UgPSAnUHJvbWlzZSc7XG52YXIgRk9SQ0VEX1BST01JU0VfQ09OU1RSVUNUT1IgPSBQcm9taXNlQ29uc3RydWN0b3JEZXRlY3Rpb24uQ09OU1RSVUNUT1I7XG52YXIgTkFUSVZFX1BST01JU0VfUkVKRUNUSU9OX0VWRU5UID0gUHJvbWlzZUNvbnN0cnVjdG9yRGV0ZWN0aW9uLlJFSkVDVElPTl9FVkVOVDtcbnZhciBOQVRJVkVfUFJPTUlTRV9TVUJDTEFTU0lORyA9IFByb21pc2VDb25zdHJ1Y3RvckRldGVjdGlvbi5TVUJDTEFTU0lORztcbnZhciBnZXRJbnRlcm5hbFByb21pc2VTdGF0ZSA9IEludGVybmFsU3RhdGVNb2R1bGUuZ2V0dGVyRm9yKFBST01JU0UpO1xudmFyIHNldEludGVybmFsU3RhdGUgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLnNldDtcbnZhciBOYXRpdmVQcm9taXNlUHJvdG90eXBlID0gTmF0aXZlUHJvbWlzZUNvbnN0cnVjdG9yICYmIE5hdGl2ZVByb21pc2VDb25zdHJ1Y3Rvci5wcm90b3R5cGU7XG52YXIgUHJvbWlzZUNvbnN0cnVjdG9yID0gTmF0aXZlUHJvbWlzZUNvbnN0cnVjdG9yO1xudmFyIFByb21pc2VQcm90b3R5cGUgPSBOYXRpdmVQcm9taXNlUHJvdG90eXBlO1xudmFyIFR5cGVFcnJvciA9IGdsb2JhbFRoaXMuVHlwZUVycm9yO1xudmFyIGRvY3VtZW50ID0gZ2xvYmFsVGhpcy5kb2N1bWVudDtcbnZhciBwcm9jZXNzID0gZ2xvYmFsVGhpcy5wcm9jZXNzO1xudmFyIG5ld1Byb21pc2VDYXBhYmlsaXR5ID0gbmV3UHJvbWlzZUNhcGFiaWxpdHlNb2R1bGUuZjtcbnZhciBuZXdHZW5lcmljUHJvbWlzZUNhcGFiaWxpdHkgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eTtcblxudmFyIERJU1BBVENIX0VWRU5UID0gISEoZG9jdW1lbnQgJiYgZG9jdW1lbnQuY3JlYXRlRXZlbnQgJiYgZ2xvYmFsVGhpcy5kaXNwYXRjaEV2ZW50KTtcbnZhciBVTkhBTkRMRURfUkVKRUNUSU9OID0gJ3VuaGFuZGxlZHJlamVjdGlvbic7XG52YXIgUkVKRUNUSU9OX0hBTkRMRUQgPSAncmVqZWN0aW9uaGFuZGxlZCc7XG52YXIgUEVORElORyA9IDA7XG52YXIgRlVMRklMTEVEID0gMTtcbnZhciBSRUpFQ1RFRCA9IDI7XG52YXIgSEFORExFRCA9IDE7XG52YXIgVU5IQU5ETEVEID0gMjtcblxudmFyIEludGVybmFsLCBPd25Qcm9taXNlQ2FwYWJpbGl0eSwgUHJvbWlzZVdyYXBwZXIsIG5hdGl2ZVRoZW47XG5cbi8vIGhlbHBlcnNcbnZhciBpc1RoZW5hYmxlID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciB0aGVuO1xuICByZXR1cm4gaXNPYmplY3QoaXQpICYmIGlzQ2FsbGFibGUodGhlbiA9IGl0LnRoZW4pID8gdGhlbiA6IGZhbHNlO1xufTtcblxudmFyIGNhbGxSZWFjdGlvbiA9IGZ1bmN0aW9uIChyZWFjdGlvbiwgc3RhdGUpIHtcbiAgdmFyIHZhbHVlID0gc3RhdGUudmFsdWU7XG4gIHZhciBvayA9IHN0YXRlLnN0YXRlID09PSBGVUxGSUxMRUQ7XG4gIHZhciBoYW5kbGVyID0gb2sgPyByZWFjdGlvbi5vayA6IHJlYWN0aW9uLmZhaWw7XG4gIHZhciByZXNvbHZlID0gcmVhY3Rpb24ucmVzb2x2ZTtcbiAgdmFyIHJlamVjdCA9IHJlYWN0aW9uLnJlamVjdDtcbiAgdmFyIGRvbWFpbiA9IHJlYWN0aW9uLmRvbWFpbjtcbiAgdmFyIHJlc3VsdCwgdGhlbiwgZXhpdGVkO1xuICB0cnkge1xuICAgIGlmIChoYW5kbGVyKSB7XG4gICAgICBpZiAoIW9rKSB7XG4gICAgICAgIGlmIChzdGF0ZS5yZWplY3Rpb24gPT09IFVOSEFORExFRCkgb25IYW5kbGVVbmhhbmRsZWQoc3RhdGUpO1xuICAgICAgICBzdGF0ZS5yZWplY3Rpb24gPSBIQU5ETEVEO1xuICAgICAgfVxuICAgICAgaWYgKGhhbmRsZXIgPT09IHRydWUpIHJlc3VsdCA9IHZhbHVlO1xuICAgICAgZWxzZSB7XG4gICAgICAgIGlmIChkb21haW4pIGRvbWFpbi5lbnRlcigpO1xuICAgICAgICByZXN1bHQgPSBoYW5kbGVyKHZhbHVlKTsgLy8gY2FuIHRocm93XG4gICAgICAgIGlmIChkb21haW4pIHtcbiAgICAgICAgICBkb21haW4uZXhpdCgpO1xuICAgICAgICAgIGV4aXRlZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChyZXN1bHQgPT09IHJlYWN0aW9uLnByb21pc2UpIHtcbiAgICAgICAgcmVqZWN0KG5ldyBUeXBlRXJyb3IoJ1Byb21pc2UtY2hhaW4gY3ljbGUnKSk7XG4gICAgICB9IGVsc2UgaWYgKHRoZW4gPSBpc1RoZW5hYmxlKHJlc3VsdCkpIHtcbiAgICAgICAgY2FsbCh0aGVuLCByZXN1bHQsIHJlc29sdmUsIHJlamVjdCk7XG4gICAgICB9IGVsc2UgcmVzb2x2ZShyZXN1bHQpO1xuICAgIH0gZWxzZSByZWplY3QodmFsdWUpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGlmIChkb21haW4gJiYgIWV4aXRlZCkgZG9tYWluLmV4aXQoKTtcbiAgICByZWplY3QoZXJyb3IpO1xuICB9XG59O1xuXG52YXIgbm90aWZ5ID0gZnVuY3Rpb24gKHN0YXRlLCBpc1JlamVjdCkge1xuICBpZiAoc3RhdGUubm90aWZpZWQpIHJldHVybjtcbiAgc3RhdGUubm90aWZpZWQgPSB0cnVlO1xuICBtaWNyb3Rhc2soZnVuY3Rpb24gKCkge1xuICAgIHZhciByZWFjdGlvbnMgPSBzdGF0ZS5yZWFjdGlvbnM7XG4gICAgdmFyIHJlYWN0aW9uO1xuICAgIHdoaWxlIChyZWFjdGlvbiA9IHJlYWN0aW9ucy5nZXQoKSkge1xuICAgICAgY2FsbFJlYWN0aW9uKHJlYWN0aW9uLCBzdGF0ZSk7XG4gICAgfVxuICAgIHN0YXRlLm5vdGlmaWVkID0gZmFsc2U7XG4gICAgaWYgKGlzUmVqZWN0ICYmICFzdGF0ZS5yZWplY3Rpb24pIG9uVW5oYW5kbGVkKHN0YXRlKTtcbiAgfSk7XG59O1xuXG52YXIgZGlzcGF0Y2hFdmVudCA9IGZ1bmN0aW9uIChuYW1lLCBwcm9taXNlLCByZWFzb24pIHtcbiAgdmFyIGV2ZW50LCBoYW5kbGVyO1xuICBpZiAoRElTUEFUQ0hfRVZFTlQpIHtcbiAgICBldmVudCA9IGRvY3VtZW50LmNyZWF0ZUV2ZW50KCdFdmVudCcpO1xuICAgIGV2ZW50LnByb21pc2UgPSBwcm9taXNlO1xuICAgIGV2ZW50LnJlYXNvbiA9IHJlYXNvbjtcbiAgICBldmVudC5pbml0RXZlbnQobmFtZSwgZmFsc2UsIHRydWUpO1xuICAgIGdsb2JhbFRoaXMuZGlzcGF0Y2hFdmVudChldmVudCk7XG4gIH0gZWxzZSBldmVudCA9IHsgcHJvbWlzZTogcHJvbWlzZSwgcmVhc29uOiByZWFzb24gfTtcbiAgaWYgKCFOQVRJVkVfUFJPTUlTRV9SRUpFQ1RJT05fRVZFTlQgJiYgKGhhbmRsZXIgPSBnbG9iYWxUaGlzWydvbicgKyBuYW1lXSkpIGhhbmRsZXIoZXZlbnQpO1xuICBlbHNlIGlmIChuYW1lID09PSBVTkhBTkRMRURfUkVKRUNUSU9OKSBob3N0UmVwb3J0RXJyb3JzKCdVbmhhbmRsZWQgcHJvbWlzZSByZWplY3Rpb24nLCByZWFzb24pO1xufTtcblxudmFyIG9uVW5oYW5kbGVkID0gZnVuY3Rpb24gKHN0YXRlKSB7XG4gIGNhbGwodGFzaywgZ2xvYmFsVGhpcywgZnVuY3Rpb24gKCkge1xuICAgIHZhciBwcm9taXNlID0gc3RhdGUuZmFjYWRlO1xuICAgIHZhciB2YWx1ZSA9IHN0YXRlLnZhbHVlO1xuICAgIHZhciBJU19VTkhBTkRMRUQgPSBpc1VuaGFuZGxlZChzdGF0ZSk7XG4gICAgdmFyIHJlc3VsdDtcbiAgICBpZiAoSVNfVU5IQU5ETEVEKSB7XG4gICAgICByZXN1bHQgPSBwZXJmb3JtKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKElTX05PREUpIHtcbiAgICAgICAgICBwcm9jZXNzLmVtaXQoJ3VuaGFuZGxlZFJlamVjdGlvbicsIHZhbHVlLCBwcm9taXNlKTtcbiAgICAgICAgfSBlbHNlIGRpc3BhdGNoRXZlbnQoVU5IQU5ETEVEX1JFSkVDVElPTiwgcHJvbWlzZSwgdmFsdWUpO1xuICAgICAgfSk7XG4gICAgICAvLyBCcm93c2VycyBzaG91bGQgbm90IHRyaWdnZXIgYHJlamVjdGlvbkhhbmRsZWRgIGV2ZW50IGlmIGl0IHdhcyBoYW5kbGVkIGhlcmUsIE5vZGVKUyAtIHNob3VsZFxuICAgICAgc3RhdGUucmVqZWN0aW9uID0gSVNfTk9ERSB8fCBpc1VuaGFuZGxlZChzdGF0ZSkgPyBVTkhBTkRMRUQgOiBIQU5ETEVEO1xuICAgICAgaWYgKHJlc3VsdC5lcnJvcikgdGhyb3cgcmVzdWx0LnZhbHVlO1xuICAgIH1cbiAgfSk7XG59O1xuXG52YXIgaXNVbmhhbmRsZWQgPSBmdW5jdGlvbiAoc3RhdGUpIHtcbiAgcmV0dXJuIHN0YXRlLnJlamVjdGlvbiAhPT0gSEFORExFRCAmJiAhc3RhdGUucGFyZW50O1xufTtcblxudmFyIG9uSGFuZGxlVW5oYW5kbGVkID0gZnVuY3Rpb24gKHN0YXRlKSB7XG4gIGNhbGwodGFzaywgZ2xvYmFsVGhpcywgZnVuY3Rpb24gKCkge1xuICAgIHZhciBwcm9taXNlID0gc3RhdGUuZmFjYWRlO1xuICAgIGlmIChJU19OT0RFKSB7XG4gICAgICBwcm9jZXNzLmVtaXQoJ3JlamVjdGlvbkhhbmRsZWQnLCBwcm9taXNlKTtcbiAgICB9IGVsc2UgZGlzcGF0Y2hFdmVudChSRUpFQ1RJT05fSEFORExFRCwgcHJvbWlzZSwgc3RhdGUudmFsdWUpO1xuICB9KTtcbn07XG5cbnZhciBiaW5kID0gZnVuY3Rpb24gKGZuLCBzdGF0ZSwgdW53cmFwKSB7XG4gIHJldHVybiBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICBmbihzdGF0ZSwgdmFsdWUsIHVud3JhcCk7XG4gIH07XG59O1xuXG52YXIgaW50ZXJuYWxSZWplY3QgPSBmdW5jdGlvbiAoc3RhdGUsIHZhbHVlLCB1bndyYXApIHtcbiAgaWYgKHN0YXRlLmRvbmUpIHJldHVybjtcbiAgc3RhdGUuZG9uZSA9IHRydWU7XG4gIGlmICh1bndyYXApIHN0YXRlID0gdW53cmFwO1xuICBzdGF0ZS52YWx1ZSA9IHZhbHVlO1xuICBzdGF0ZS5zdGF0ZSA9IFJFSkVDVEVEO1xuICBub3RpZnkoc3RhdGUsIHRydWUpO1xufTtcblxudmFyIGludGVybmFsUmVzb2x2ZSA9IGZ1bmN0aW9uIChzdGF0ZSwgdmFsdWUsIHVud3JhcCkge1xuICBpZiAoc3RhdGUuZG9uZSkgcmV0dXJuO1xuICBzdGF0ZS5kb25lID0gdHJ1ZTtcbiAgaWYgKHVud3JhcCkgc3RhdGUgPSB1bndyYXA7XG4gIHRyeSB7XG4gICAgaWYgKHN0YXRlLmZhY2FkZSA9PT0gdmFsdWUpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJQcm9taXNlIGNhbid0IGJlIHJlc29sdmVkIGl0c2VsZlwiKTtcbiAgICB2YXIgdGhlbiA9IGlzVGhlbmFibGUodmFsdWUpO1xuICAgIGlmICh0aGVuKSB7XG4gICAgICBtaWNyb3Rhc2soZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgd3JhcHBlciA9IHsgZG9uZTogZmFsc2UgfTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjYWxsKHRoZW4sIHZhbHVlLFxuICAgICAgICAgICAgYmluZChpbnRlcm5hbFJlc29sdmUsIHdyYXBwZXIsIHN0YXRlKSxcbiAgICAgICAgICAgIGJpbmQoaW50ZXJuYWxSZWplY3QsIHdyYXBwZXIsIHN0YXRlKVxuICAgICAgICAgICk7XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgaW50ZXJuYWxSZWplY3Qod3JhcHBlciwgZXJyb3IsIHN0YXRlKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0YXRlLnZhbHVlID0gdmFsdWU7XG4gICAgICBzdGF0ZS5zdGF0ZSA9IEZVTEZJTExFRDtcbiAgICAgIG5vdGlmeShzdGF0ZSwgZmFsc2UpO1xuICAgIH1cbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBpbnRlcm5hbFJlamVjdCh7IGRvbmU6IGZhbHNlIH0sIGVycm9yLCBzdGF0ZSk7XG4gIH1cbn07XG5cbi8vIGNvbnN0cnVjdG9yIHBvbHlmaWxsXG5pZiAoRk9SQ0VEX1BST01JU0VfQ09OU1RSVUNUT1IpIHtcbiAgLy8gMjUuNC4zLjEgUHJvbWlzZShleGVjdXRvcilcbiAgUHJvbWlzZUNvbnN0cnVjdG9yID0gZnVuY3Rpb24gUHJvbWlzZShleGVjdXRvcikge1xuICAgIGFuSW5zdGFuY2UodGhpcywgUHJvbWlzZVByb3RvdHlwZSk7XG4gICAgYUNhbGxhYmxlKGV4ZWN1dG9yKTtcbiAgICBjYWxsKEludGVybmFsLCB0aGlzKTtcbiAgICB2YXIgc3RhdGUgPSBnZXRJbnRlcm5hbFByb21pc2VTdGF0ZSh0aGlzKTtcbiAgICB0cnkge1xuICAgICAgZXhlY3V0b3IoYmluZChpbnRlcm5hbFJlc29sdmUsIHN0YXRlKSwgYmluZChpbnRlcm5hbFJlamVjdCwgc3RhdGUpKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgaW50ZXJuYWxSZWplY3Qoc3RhdGUsIGVycm9yKTtcbiAgICB9XG4gIH07XG5cbiAgUHJvbWlzZVByb3RvdHlwZSA9IFByb21pc2VDb25zdHJ1Y3Rvci5wcm90b3R5cGU7XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzIC0tIHJlcXVpcmVkIGZvciBgLmxlbmd0aGBcbiAgSW50ZXJuYWwgPSBmdW5jdGlvbiBQcm9taXNlKGV4ZWN1dG9yKSB7XG4gICAgc2V0SW50ZXJuYWxTdGF0ZSh0aGlzLCB7XG4gICAgICB0eXBlOiBQUk9NSVNFLFxuICAgICAgZG9uZTogZmFsc2UsXG4gICAgICBub3RpZmllZDogZmFsc2UsXG4gICAgICBwYXJlbnQ6IGZhbHNlLFxuICAgICAgcmVhY3Rpb25zOiBuZXcgUXVldWUoKSxcbiAgICAgIHJlamVjdGlvbjogZmFsc2UsXG4gICAgICBzdGF0ZTogUEVORElORyxcbiAgICAgIHZhbHVlOiBudWxsXG4gICAgfSk7XG4gIH07XG5cbiAgLy8gYFByb21pc2UucHJvdG90eXBlLnRoZW5gIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXByb21pc2UucHJvdG90eXBlLnRoZW5cbiAgSW50ZXJuYWwucHJvdG90eXBlID0gZGVmaW5lQnVpbHRJbihQcm9taXNlUHJvdG90eXBlLCAndGhlbicsIGZ1bmN0aW9uIHRoZW4ob25GdWxmaWxsZWQsIG9uUmVqZWN0ZWQpIHtcbiAgICB2YXIgc3RhdGUgPSBnZXRJbnRlcm5hbFByb21pc2VTdGF0ZSh0aGlzKTtcbiAgICB2YXIgcmVhY3Rpb24gPSBuZXdQcm9taXNlQ2FwYWJpbGl0eShzcGVjaWVzQ29uc3RydWN0b3IodGhpcywgUHJvbWlzZUNvbnN0cnVjdG9yKSk7XG4gICAgc3RhdGUucGFyZW50ID0gdHJ1ZTtcbiAgICByZWFjdGlvbi5vayA9IGlzQ2FsbGFibGUob25GdWxmaWxsZWQpID8gb25GdWxmaWxsZWQgOiB0cnVlO1xuICAgIHJlYWN0aW9uLmZhaWwgPSBpc0NhbGxhYmxlKG9uUmVqZWN0ZWQpICYmIG9uUmVqZWN0ZWQ7XG4gICAgcmVhY3Rpb24uZG9tYWluID0gSVNfTk9ERSA/IHByb2Nlc3MuZG9tYWluIDogdW5kZWZpbmVkO1xuICAgIGlmIChzdGF0ZS5zdGF0ZSA9PT0gUEVORElORykgc3RhdGUucmVhY3Rpb25zLmFkZChyZWFjdGlvbik7XG4gICAgZWxzZSBtaWNyb3Rhc2soZnVuY3Rpb24gKCkge1xuICAgICAgY2FsbFJlYWN0aW9uKHJlYWN0aW9uLCBzdGF0ZSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIHJlYWN0aW9uLnByb21pc2U7XG4gIH0pO1xuXG4gIE93blByb21pc2VDYXBhYmlsaXR5ID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBwcm9taXNlID0gbmV3IEludGVybmFsKCk7XG4gICAgdmFyIHN0YXRlID0gZ2V0SW50ZXJuYWxQcm9taXNlU3RhdGUocHJvbWlzZSk7XG4gICAgdGhpcy5wcm9taXNlID0gcHJvbWlzZTtcbiAgICB0aGlzLnJlc29sdmUgPSBiaW5kKGludGVybmFsUmVzb2x2ZSwgc3RhdGUpO1xuICAgIHRoaXMucmVqZWN0ID0gYmluZChpbnRlcm5hbFJlamVjdCwgc3RhdGUpO1xuICB9O1xuXG4gIG5ld1Byb21pc2VDYXBhYmlsaXR5TW9kdWxlLmYgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eSA9IGZ1bmN0aW9uIChDKSB7XG4gICAgcmV0dXJuIEMgPT09IFByb21pc2VDb25zdHJ1Y3RvciB8fCBDID09PSBQcm9taXNlV3JhcHBlclxuICAgICAgPyBuZXcgT3duUHJvbWlzZUNhcGFiaWxpdHkoQylcbiAgICAgIDogbmV3R2VuZXJpY1Byb21pc2VDYXBhYmlsaXR5KEMpO1xuICB9O1xuXG4gIGlmICghSVNfUFVSRSAmJiBpc0NhbGxhYmxlKE5hdGl2ZVByb21pc2VDb25zdHJ1Y3RvcikgJiYgTmF0aXZlUHJvbWlzZVByb3RvdHlwZSAhPT0gT2JqZWN0LnByb3RvdHlwZSkge1xuICAgIG5hdGl2ZVRoZW4gPSBOYXRpdmVQcm9taXNlUHJvdG90eXBlLnRoZW47XG5cbiAgICBpZiAoIU5BVElWRV9QUk9NSVNFX1NVQkNMQVNTSU5HKSB7XG4gICAgICAvLyBtYWtlIGBQcm9taXNlI3RoZW5gIHJldHVybiBhIHBvbHlmaWxsZWQgYFByb21pc2VgIGZvciBuYXRpdmUgcHJvbWlzZS1iYXNlZCBBUElzXG4gICAgICBkZWZpbmVCdWlsdEluKE5hdGl2ZVByb21pc2VQcm90b3R5cGUsICd0aGVuJywgZnVuY3Rpb24gdGhlbihvbkZ1bGZpbGxlZCwgb25SZWplY3RlZCkge1xuICAgICAgICB2YXIgdGhhdCA9IHRoaXM7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZUNvbnN0cnVjdG9yKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgICBjYWxsKG5hdGl2ZVRoZW4sIHRoYXQsIHJlc29sdmUsIHJlamVjdCk7XG4gICAgICAgIH0pLnRoZW4ob25GdWxmaWxsZWQsIG9uUmVqZWN0ZWQpO1xuICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzY0MFxuICAgICAgfSwgeyB1bnNhZmU6IHRydWUgfSk7XG4gICAgfVxuXG4gICAgLy8gbWFrZSBgLmNvbnN0cnVjdG9yID09PSBQcm9taXNlYCB3b3JrIGZvciBuYXRpdmUgcHJvbWlzZS1iYXNlZCBBUElzXG4gICAgdHJ5IHtcbiAgICAgIGRlbGV0ZSBOYXRpdmVQcm9taXNlUHJvdG90eXBlLmNvbnN0cnVjdG9yO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cblxuICAgIC8vIG1ha2UgYGluc3RhbmNlb2YgUHJvbWlzZWAgd29yayBmb3IgbmF0aXZlIHByb21pc2UtYmFzZWQgQVBJc1xuICAgIGlmIChzZXRQcm90b3R5cGVPZikge1xuICAgICAgc2V0UHJvdG90eXBlT2YoTmF0aXZlUHJvbWlzZVByb3RvdHlwZSwgUHJvbWlzZVByb3RvdHlwZSk7XG4gICAgfVxuICB9XG59XG5cbiQoeyBnbG9iYWw6IHRydWUsIGNvbnN0cnVjdG9yOiB0cnVlLCB3cmFwOiB0cnVlLCBmb3JjZWQ6IEZPUkNFRF9QUk9NSVNFX0NPTlNUUlVDVE9SIH0sIHtcbiAgUHJvbWlzZTogUHJvbWlzZUNvbnN0cnVjdG9yXG59KTtcblxuc2V0VG9TdHJpbmdUYWcoUHJvbWlzZUNvbnN0cnVjdG9yLCBQUk9NSVNFLCBmYWxzZSwgdHJ1ZSk7XG5zZXRTcGVjaWVzKFBST01JU0UpO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgSVNfUFVSRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1wdXJlJyk7XG52YXIgTmF0aXZlUHJvbWlzZUNvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3Byb21pc2UtbmF0aXZlLWNvbnN0cnVjdG9yJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBnZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbicpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBzcGVjaWVzQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3BlY2llcy1jb25zdHJ1Y3RvcicpO1xudmFyIHByb21pc2VSZXNvbHZlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3Byb21pc2UtcmVzb2x2ZScpO1xudmFyIGRlZmluZUJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWluJyk7XG5cbnZhciBOYXRpdmVQcm9taXNlUHJvdG90eXBlID0gTmF0aXZlUHJvbWlzZUNvbnN0cnVjdG9yICYmIE5hdGl2ZVByb21pc2VDb25zdHJ1Y3Rvci5wcm90b3R5cGU7XG5cbi8vIFNhZmFyaSBidWcgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwMDgyOVxudmFyIE5PTl9HRU5FUklDID0gISFOYXRpdmVQcm9taXNlQ29uc3RydWN0b3IgJiYgZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgdW5pY29ybi9uby10aGVuYWJsZSAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xuICBOYXRpdmVQcm9taXNlUHJvdG90eXBlWydmaW5hbGx5J10uY2FsbCh7IHRoZW46IGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfSB9LCBmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH0pO1xufSk7XG5cbi8vIGBQcm9taXNlLnByb3RvdHlwZS5maW5hbGx5YCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtcHJvbWlzZS5wcm90b3R5cGUuZmluYWxseVxuJCh7IHRhcmdldDogJ1Byb21pc2UnLCBwcm90bzogdHJ1ZSwgcmVhbDogdHJ1ZSwgZm9yY2VkOiBOT05fR0VORVJJQyB9LCB7XG4gICdmaW5hbGx5JzogZnVuY3Rpb24gKG9uRmluYWxseSkge1xuICAgIHZhciBDID0gc3BlY2llc0NvbnN0cnVjdG9yKHRoaXMsIGdldEJ1aWx0SW4oJ1Byb21pc2UnKSk7XG4gICAgdmFyIGlzRnVuY3Rpb24gPSBpc0NhbGxhYmxlKG9uRmluYWxseSk7XG4gICAgcmV0dXJuIHRoaXMudGhlbihcbiAgICAgIGlzRnVuY3Rpb24gPyBmdW5jdGlvbiAoeCkge1xuICAgICAgICByZXR1cm4gcHJvbWlzZVJlc29sdmUoQywgb25GaW5hbGx5KCkpLnRoZW4oZnVuY3Rpb24gKCkgeyByZXR1cm4geDsgfSk7XG4gICAgICB9IDogb25GaW5hbGx5LFxuICAgICAgaXNGdW5jdGlvbiA/IGZ1bmN0aW9uIChlKSB7XG4gICAgICAgIHJldHVybiBwcm9taXNlUmVzb2x2ZShDLCBvbkZpbmFsbHkoKSkudGhlbihmdW5jdGlvbiAoKSB7IHRocm93IGU7IH0pO1xuICAgICAgfSA6IG9uRmluYWxseVxuICAgICk7XG4gIH1cbn0pO1xuXG4vLyBtYWtlcyBzdXJlIHRoYXQgbmF0aXZlIHByb21pc2UtYmFzZWQgQVBJcyBgUHJvbWlzZSNmaW5hbGx5YCBwcm9wZXJseSB3b3JrcyB3aXRoIHBhdGNoZWQgYFByb21pc2UjdGhlbmBcbmlmICghSVNfUFVSRSAmJiBpc0NhbGxhYmxlKE5hdGl2ZVByb21pc2VDb25zdHJ1Y3RvcikpIHtcbiAgdmFyIG1ldGhvZCA9IGdldEJ1aWx0SW4oJ1Byb21pc2UnKS5wcm90b3R5cGVbJ2ZpbmFsbHknXTtcbiAgaWYgKE5hdGl2ZVByb21pc2VQcm90b3R5cGVbJ2ZpbmFsbHknXSAhPT0gbWV0aG9kKSB7XG4gICAgZGVmaW5lQnVpbHRJbihOYXRpdmVQcm9taXNlUHJvdG90eXBlLCAnZmluYWxseScsIG1ldGhvZCwgeyB1bnNhZmU6IHRydWUgfSk7XG4gIH1cbn1cbiIsIid1c2Ugc3RyaWN0Jztcbi8vIFRPRE86IFJlbW92ZSB0aGlzIG1vZHVsZSBmcm9tIGBjb3JlLWpzQDRgIHNpbmNlIGl0J3Mgc3BsaXQgdG8gbW9kdWxlcyBsaXN0ZWQgYmVsb3dcbnJlcXVpcmUoJy4uL21vZHVsZXMvZXMucHJvbWlzZS5jb25zdHJ1Y3RvcicpO1xucmVxdWlyZSgnLi4vbW9kdWxlcy9lcy5wcm9taXNlLmFsbCcpO1xucmVxdWlyZSgnLi4vbW9kdWxlcy9lcy5wcm9taXNlLmNhdGNoJyk7XG5yZXF1aXJlKCcuLi9tb2R1bGVzL2VzLnByb21pc2UucmFjZScpO1xucmVxdWlyZSgnLi4vbW9kdWxlcy9lcy5wcm9taXNlLnJlamVjdCcpO1xucmVxdWlyZSgnLi4vbW9kdWxlcy9lcy5wcm9taXNlLnJlc29sdmUnKTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIGFDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLWNhbGxhYmxlJyk7XG52YXIgbmV3UHJvbWlzZUNhcGFiaWxpdHlNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbmV3LXByb21pc2UtY2FwYWJpbGl0eScpO1xudmFyIHBlcmZvcm0gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcGVyZm9ybScpO1xudmFyIGl0ZXJhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0ZScpO1xudmFyIFBST01JU0VfU1RBVElDU19JTkNPUlJFQ1RfSVRFUkFUSU9OID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3Byb21pc2Utc3RhdGljcy1pbmNvcnJlY3QtaXRlcmF0aW9uJyk7XG5cbi8vIGBQcm9taXNlLnJhY2VgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1wcm9taXNlLnJhY2VcbiQoeyB0YXJnZXQ6ICdQcm9taXNlJywgc3RhdDogdHJ1ZSwgZm9yY2VkOiBQUk9NSVNFX1NUQVRJQ1NfSU5DT1JSRUNUX0lURVJBVElPTiB9LCB7XG4gIHJhY2U6IGZ1bmN0aW9uIHJhY2UoaXRlcmFibGUpIHtcbiAgICB2YXIgQyA9IHRoaXM7XG4gICAgdmFyIGNhcGFiaWxpdHkgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eU1vZHVsZS5mKEMpO1xuICAgIHZhciByZWplY3QgPSBjYXBhYmlsaXR5LnJlamVjdDtcbiAgICB2YXIgcmVzdWx0ID0gcGVyZm9ybShmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgJHByb21pc2VSZXNvbHZlID0gYUNhbGxhYmxlKEMucmVzb2x2ZSk7XG4gICAgICBpdGVyYXRlKGl0ZXJhYmxlLCBmdW5jdGlvbiAocHJvbWlzZSkge1xuICAgICAgICBjYWxsKCRwcm9taXNlUmVzb2x2ZSwgQywgcHJvbWlzZSkudGhlbihjYXBhYmlsaXR5LnJlc29sdmUsIHJlamVjdCk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICBpZiAocmVzdWx0LmVycm9yKSByZWplY3QocmVzdWx0LnZhbHVlKTtcbiAgICByZXR1cm4gY2FwYWJpbGl0eS5wcm9taXNlO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIG5ld1Byb21pc2VDYXBhYmlsaXR5TW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL25ldy1wcm9taXNlLWNhcGFiaWxpdHknKTtcbnZhciBGT1JDRURfUFJPTUlTRV9DT05TVFJVQ1RPUiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9wcm9taXNlLWNvbnN0cnVjdG9yLWRldGVjdGlvbicpLkNPTlNUUlVDVE9SO1xuXG4vLyBgUHJvbWlzZS5yZWplY3RgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1wcm9taXNlLnJlamVjdFxuJCh7IHRhcmdldDogJ1Byb21pc2UnLCBzdGF0OiB0cnVlLCBmb3JjZWQ6IEZPUkNFRF9QUk9NSVNFX0NPTlNUUlVDVE9SIH0sIHtcbiAgcmVqZWN0OiBmdW5jdGlvbiByZWplY3Qocikge1xuICAgIHZhciBjYXBhYmlsaXR5ID0gbmV3UHJvbWlzZUNhcGFiaWxpdHlNb2R1bGUuZih0aGlzKTtcbiAgICB2YXIgY2FwYWJpbGl0eVJlamVjdCA9IGNhcGFiaWxpdHkucmVqZWN0O1xuICAgIGNhcGFiaWxpdHlSZWplY3Qocik7XG4gICAgcmV0dXJuIGNhcGFiaWxpdHkucHJvbWlzZTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBnZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbicpO1xudmFyIElTX1BVUkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtcHVyZScpO1xudmFyIE5hdGl2ZVByb21pc2VDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9wcm9taXNlLW5hdGl2ZS1jb25zdHJ1Y3RvcicpO1xudmFyIEZPUkNFRF9QUk9NSVNFX0NPTlNUUlVDVE9SID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3Byb21pc2UtY29uc3RydWN0b3ItZGV0ZWN0aW9uJykuQ09OU1RSVUNUT1I7XG52YXIgcHJvbWlzZVJlc29sdmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcHJvbWlzZS1yZXNvbHZlJyk7XG5cbnZhciBQcm9taXNlQ29uc3RydWN0b3JXcmFwcGVyID0gZ2V0QnVpbHRJbignUHJvbWlzZScpO1xudmFyIENIRUNLX1dSQVBQRVIgPSBJU19QVVJFICYmICFGT1JDRURfUFJPTUlTRV9DT05TVFJVQ1RPUjtcblxuLy8gYFByb21pc2UucmVzb2x2ZWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXByb21pc2UucmVzb2x2ZVxuJCh7IHRhcmdldDogJ1Byb21pc2UnLCBzdGF0OiB0cnVlLCBmb3JjZWQ6IElTX1BVUkUgfHwgRk9SQ0VEX1BST01JU0VfQ09OU1RSVUNUT1IgfSwge1xuICByZXNvbHZlOiBmdW5jdGlvbiByZXNvbHZlKHgpIHtcbiAgICByZXR1cm4gcHJvbWlzZVJlc29sdmUoQ0hFQ0tfV1JBUFBFUiAmJiB0aGlzID09PSBQcm9taXNlQ29uc3RydWN0b3JXcmFwcGVyID8gTmF0aXZlUHJvbWlzZUNvbnN0cnVjdG9yIDogdGhpcywgeCk7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgbmV3UHJvbWlzZUNhcGFiaWxpdHlNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbmV3LXByb21pc2UtY2FwYWJpbGl0eScpO1xuXG4vLyBgUHJvbWlzZS53aXRoUmVzb2x2ZXJzYCBtZXRob2Rcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLXByb21pc2Utd2l0aC1yZXNvbHZlcnNcbiQoeyB0YXJnZXQ6ICdQcm9taXNlJywgc3RhdDogdHJ1ZSB9LCB7XG4gIHdpdGhSZXNvbHZlcnM6IGZ1bmN0aW9uIHdpdGhSZXNvbHZlcnMoKSB7XG4gICAgdmFyIHByb21pc2VDYXBhYmlsaXR5ID0gbmV3UHJvbWlzZUNhcGFiaWxpdHlNb2R1bGUuZih0aGlzKTtcbiAgICByZXR1cm4ge1xuICAgICAgcHJvbWlzZTogcHJvbWlzZUNhcGFiaWxpdHkucHJvbWlzZSxcbiAgICAgIHJlc29sdmU6IHByb21pc2VDYXBhYmlsaXR5LnJlc29sdmUsXG4gICAgICByZWplY3Q6IHByb21pc2VDYXBhYmlsaXR5LnJlamVjdFxuICAgIH07XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGNoYXJBdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zdHJpbmctbXVsdGlieXRlJykuY2hhckF0O1xudmFyIHRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXN0cmluZycpO1xudmFyIEludGVybmFsU3RhdGVNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW50ZXJuYWwtc3RhdGUnKTtcbnZhciBkZWZpbmVJdGVyYXRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvci1kZWZpbmUnKTtcbnZhciBjcmVhdGVJdGVyUmVzdWx0T2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1pdGVyLXJlc3VsdC1vYmplY3QnKTtcblxudmFyIFNUUklOR19JVEVSQVRPUiA9ICdTdHJpbmcgSXRlcmF0b3InO1xudmFyIHNldEludGVybmFsU3RhdGUgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLnNldDtcbnZhciBnZXRJbnRlcm5hbFN0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5nZXR0ZXJGb3IoU1RSSU5HX0lURVJBVE9SKTtcblxuLy8gYFN0cmluZy5wcm90b3R5cGVbQEBpdGVyYXRvcl1gIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zdHJpbmcucHJvdG90eXBlLUBAaXRlcmF0b3JcbmRlZmluZUl0ZXJhdG9yKFN0cmluZywgJ1N0cmluZycsIGZ1bmN0aW9uIChpdGVyYXRlZCkge1xuICBzZXRJbnRlcm5hbFN0YXRlKHRoaXMsIHtcbiAgICB0eXBlOiBTVFJJTkdfSVRFUkFUT1IsXG4gICAgc3RyaW5nOiB0b1N0cmluZyhpdGVyYXRlZCksXG4gICAgaW5kZXg6IDBcbiAgfSk7XG4vLyBgJVN0cmluZ0l0ZXJhdG9yUHJvdG90eXBlJS5uZXh0YCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtJXN0cmluZ2l0ZXJhdG9ycHJvdG90eXBlJS5uZXh0XG59LCBmdW5jdGlvbiBuZXh0KCkge1xuICB2YXIgc3RhdGUgPSBnZXRJbnRlcm5hbFN0YXRlKHRoaXMpO1xuICB2YXIgc3RyaW5nID0gc3RhdGUuc3RyaW5nO1xuICB2YXIgaW5kZXggPSBzdGF0ZS5pbmRleDtcbiAgdmFyIHBvaW50O1xuICBpZiAoaW5kZXggPj0gc3RyaW5nLmxlbmd0aCkgcmV0dXJuIGNyZWF0ZUl0ZXJSZXN1bHRPYmplY3QodW5kZWZpbmVkLCB0cnVlKTtcbiAgcG9pbnQgPSBjaGFyQXQoc3RyaW5nLCBpbmRleCk7XG4gIHN0YXRlLmluZGV4ICs9IHBvaW50Lmxlbmd0aDtcbiAgcmV0dXJuIGNyZWF0ZUl0ZXJSZXN1bHRPYmplY3QocG9pbnQsIGZhbHNlKTtcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vbW9kdWxlcy9lcy5hcnJheS5pdGVyYXRvcicpO1xudmFyIERPTUl0ZXJhYmxlcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kb20taXRlcmFibGVzJyk7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xudmFyIHNldFRvU3RyaW5nVGFnID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC10by1zdHJpbmctdGFnJyk7XG52YXIgSXRlcmF0b3JzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdG9ycycpO1xuXG5mb3IgKHZhciBDT0xMRUNUSU9OX05BTUUgaW4gRE9NSXRlcmFibGVzKSB7XG4gIHNldFRvU3RyaW5nVGFnKGdsb2JhbFRoaXNbQ09MTEVDVElPTl9OQU1FXSwgQ09MTEVDVElPTl9OQU1FKTtcbiAgSXRlcmF0b3JzW0NPTExFQ1RJT05fTkFNRV0gPSBJdGVyYXRvcnMuQXJyYXk7XG59XG4iLCIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vZXMvcHJvbWlzZScpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy93ZWIuZG9tLWNvbGxlY3Rpb25zLml0ZXJhdG9yJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwiLy8gVGhlIG1vZHVsZSBjYWNoZVxudmFyIF9fd2VicGFja19tb2R1bGVfY2FjaGVfXyA9IHt9O1xuXG4vLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcblx0dmFyIGNhY2hlZE1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF07XG5cdGlmIChjYWNoZWRNb2R1bGUgIT09IHVuZGVmaW5lZCkge1xuXHRcdHJldHVybiBjYWNoZWRNb2R1bGUuZXhwb3J0cztcblx0fVxuXHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuXHR2YXIgbW9kdWxlID0gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXSA9IHtcblx0XHQvLyBubyBtb2R1bGUuaWQgbmVlZGVkXG5cdFx0Ly8gbm8gbW9kdWxlLmxvYWRlZCBuZWVkZWRcblx0XHRleHBvcnRzOiB7fVxuXHR9O1xuXG5cdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuXHRfX3dlYnBhY2tfbW9kdWxlc19fW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuXHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuXHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG59XG5cbiIsIi8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG5fX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSAobW9kdWxlKSA9PiB7XG5cdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuXHRcdCgpID0+IChtb2R1bGVbJ2RlZmF1bHQnXSkgOlxuXHRcdCgpID0+IChtb2R1bGUpO1xuXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCB7IGE6IGdldHRlciB9KTtcblx0cmV0dXJuIGdldHRlcjtcbn07IiwiLy8gZGVmaW5lIGdldHRlciBmdW5jdGlvbnMgZm9yIGhhcm1vbnkgZXhwb3J0c1xuX193ZWJwYWNrX3JlcXVpcmVfXy5kID0gKGV4cG9ydHMsIGRlZmluaXRpb24pID0+IHtcblx0Zm9yKHZhciBrZXkgaW4gZGVmaW5pdGlvbikge1xuXHRcdGlmKF9fd2VicGFja19yZXF1aXJlX18ubyhkZWZpbml0aW9uLCBrZXkpICYmICFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywga2V5KSkge1xuXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIGtleSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGRlZmluaXRpb25ba2V5XSB9KTtcblx0XHR9XG5cdH1cbn07IiwiX193ZWJwYWNrX3JlcXVpcmVfXy5vID0gKG9iaiwgcHJvcCkgPT4gKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIHByb3ApKSIsIi8vIGRlZmluZSBfX2VzTW9kdWxlIG9uIGV4cG9ydHNcbl9fd2VicGFja19yZXF1aXJlX18uciA9IChleHBvcnRzKSA9PiB7XG5cdGlmKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC50b1N0cmluZ1RhZykge1xuXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBTeW1ib2wudG9TdHJpbmdUYWcsIHsgdmFsdWU6ICdNb2R1bGUnIH0pO1xuXHR9XG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG59OyIsImltcG9ydCB7IGNvbnRleHRCcmlkZ2UsIGlwY1JlbmRlcmVyLCBzaGVsbCB9IGZyb20gJ2VsZWN0cm9uJ1xuaW1wb3J0IHBrZyBmcm9tICcuLi9wYWNrYWdlLmpzb24nXG5cbmV4cG9ydCBjb25zdCBQcmVsb2FkID0ge1xuXG4gICAgc2VuZChjaGFubmVsOnN0cmluZywgYWN0aW9uOnN0cmluZywgZGF0YSA9IHt9KXtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHJlcXVlc3RJZCA9IE1hdGgucm91bmQoTWF0aC5yYW5kb20oKSoxMDAwKVxuXG4gICAgICAgICAgICBpcGNSZW5kZXJlci5zZW5kKGNoYW5uZWwsIHtcbiAgICAgICAgICAgICAgICBpZDogcmVxdWVzdElkLFxuICAgICAgICAgICAgICAgIGFjdGlvbjogYWN0aW9uLFxuICAgICAgICAgICAgICAgIGRhdGE6IGRhdGEsXG4gICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICAvLyBXYWl0IGZvciBldmVudCBiYWNrLi5cbiAgICAgICAgICAgIGNvbnN0IGNhbGxiYWNrRnVuY3Rpb24gPSAoZXZlbnQsIGFyZ3MpID0+IHtcbiAgICAgICAgICAgICAgICBpZihhcmdzLmFjdGlvbiA9PT0gYWN0aW9uICYmIGFyZ3MuaWQgPT09IHJlcXVlc3RJZCl7XG4gICAgICAgICAgICAgICAgICAgIGlwY1JlbmRlcmVyLnJlbW92ZUxpc3RlbmVyKGNoYW5uZWwsIGNhbGxiYWNrRnVuY3Rpb24pXG4gICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICBpZihhcmdzLmVycm9yID09PSB1bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKGFyZ3MuZGF0YSlcbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBpZihhcmdzLmVycm9yLnN0YXR1cyl7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgYWxlcnQoJ0hUVFAgU3RhdHVzOiAnICsgYXJncy5lcnJvci5zdGF0dXMgKyAnXFxuUGF0aDonICsgYXJncy5lcnJvci51cmwgKyAnXFxuJyArIGFyZ3MuZXJyb3IuYm9keSlcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgYWxlcnQoYXJncy5lcnJvcilcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChhcmdzLmVycm9yKVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpcGNSZW5kZXJlci5vbihjaGFubmVsLCBjYWxsYmFja0Z1bmN0aW9uKVxuXG4gICAgICAgIH0pXG4gICAgfSxcblxuICAgIG9uKGNoYW5uZWw6c3RyaW5nLCBsaXN0ZW5lcil7XG5cbiAgICAgICAgY29uc3Qgd3JhcEV2ZW50ID0gKGV2ZW50LCBhcmdzKSA9PiB7XG4gICAgICAgICAgICBsaXN0ZW5lcihldmVudCwgYXJncy5hY3Rpb24sIGFyZ3MuZGF0YSlcbiAgICAgICAgfVxuXG4gICAgICAgIGlwY1JlbmRlcmVyLm9uKGNoYW5uZWwsIHdyYXBFdmVudClcblxuICAgICAgICByZXR1cm4gd3JhcEV2ZW50XG4gICAgfSwgXG5cbiAgICBvbkFjdGlvbihjaGFubmVsOnN0cmluZywgYWN0aW9uOnN0cmluZywgbGlzdGVuZXIpe1xuXG4gICAgICAgIGNvbnN0IHdyYXBFdmVudCA9IChldmVudCwgYXJncykgPT4ge1xuICAgICAgICAgICAgaWYoYXJncy5hY3Rpb24gPT09IGFjdGlvbil7XG4gICAgICAgICAgICAgICAgbGlzdGVuZXIoZXZlbnQsIGFyZ3MuZGF0YSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlwY1JlbmRlcmVyLm9uKGNoYW5uZWwsIHdyYXBFdmVudClcblxuICAgICAgICByZXR1cm4gd3JhcEV2ZW50XG4gICAgfSxcblxuICAgIHJlbW92ZUxpc3RlbmVyKGNoYW5uZWw6c3RyaW5nLCBsaXN0ZW5lcil7XG4gICAgICAgIGlwY1JlbmRlcmVyLnJlbW92ZUxpc3RlbmVyKGNoYW5uZWwsIGxpc3RlbmVyKVxuICAgIH0sXG5cbiAgICBvcGVuRXh0ZXJuYWwodXJsOnN0cmluZyl7XG4gICAgICAgIHNoZWxsLm9wZW5FeHRlcm5hbCh1cmwpXG4gICAgfSxcblxuICAgIGdldFZlcnNpb24oKXtcbiAgICAgICAgcmV0dXJuIHBrZy52ZXJzaW9uXG4gICAgfSxcbn1cblxuY29udGV4dEJyaWRnZS5leHBvc2VJbk1haW5Xb3JsZCgnWFN0cmVhbWluZycsIFByZWxvYWQpIl0sIm5hbWVzIjpbImNvbnRleHRCcmlkZ2UiLCJpcGNSZW5kZXJlciIsInNoZWxsIiwicGtnIiwiUHJlbG9hZCIsInNlbmQiLCJjaGFubmVsIiwiYWN0aW9uIiwiZGF0YSIsIl9Qcm9taXNlIiwicmVzb2x2ZSIsInJlamVjdCIsInJlcXVlc3RJZCIsIk1hdGgiLCJyb3VuZCIsInJhbmRvbSIsImlkIiwiY2FsbGJhY2tGdW5jdGlvbiIsImV2ZW50IiwiYXJncyIsInJlbW92ZUxpc3RlbmVyIiwiZXJyb3IiLCJ1bmRlZmluZWQiLCJvbiIsImxpc3RlbmVyIiwid3JhcEV2ZW50Iiwib25BY3Rpb24iLCJvcGVuRXh0ZXJuYWwiLCJ1cmwiLCJnZXRWZXJzaW9uIiwidmVyc2lvbiIsImV4cG9zZUluTWFpbldvcmxkIl0sInNvdXJjZVJvb3QiOiIifQ== \ No newline at end of file diff --git a/main/application.ts b/main/application.ts index 98963e3..9ab2ab5 100644 --- a/main/application.ts +++ b/main/application.ts @@ -1,4 +1,4 @@ -import { app as ElectronApp, BrowserWindow, dialog } from "electron"; +import { app as ElectronApp, BrowserWindow, dialog, screen } from "electron"; import serve from "electron-serve"; import Store from "electron-store"; import Debug from "debug"; @@ -282,15 +282,12 @@ export default class Application { title: "XStreaming", backgroundColor: "rgb(26, 27, 30)", }; - - // Fullscreen - // if(this._startupFlags.fullscreen === true){ - // windowOptions.fullscreen = true - // } + const screenWidth = screen.getPrimaryDisplay().workAreaSize.width; + const screenHight = screen.getPrimaryDisplay().workAreaSize.height; this._mainWindow = createWindow("main", { - width: 1280, - height: 800, + width: screenWidth, + height: screenHight, ...windowOptions, }); diff --git a/main/helpers/create-window.ts b/main/helpers/create-window.ts index 057968d..4bc51c3 100644 --- a/main/helpers/create-window.ts +++ b/main/helpers/create-window.ts @@ -70,7 +70,7 @@ export default (windowName: string, options: BrowserWindowConstructorOptions): B const browserOptions: BrowserWindowConstructorOptions = { ...options, - ...state, + // ...state, webPreferences: { // nodeIntegration: true, // contextIsolation: false, diff --git a/main/ipc/app.ts b/main/ipc/app.ts index 599e1b7..c947e68 100644 --- a/main/ipc/app.ts +++ b/main/ipc/app.ts @@ -1,14 +1,5 @@ import IpcBase from "./base"; import { session } from "electron"; -import electron from "electron"; - -interface setForceRegionIpArgs { - ip: string; -} - -interface setPreferredGameLanguageArgs { - language: string; -} export default class IpcApp extends IpcBase { // _streamingSessions:any = {} @@ -127,4 +118,19 @@ export default class IpcApp extends IpcBase { resolve({}); }); } + + toggleFullscreen() { + return new Promise((resolve) => { + const isFullScreen = this._application._mainWindow.isFullScreen(); + this._application._mainWindow.setFullScreen(!isFullScreen); + resolve({}) + }); + } + + exitFullscreen() { + return new Promise((resolve) => { + this._application._mainWindow.setFullScreen(false); + resolve({}) + }); + } } diff --git a/main/ipc/xcloud.ts b/main/ipc/xcloud.ts index 4b95f0c..f5d1a44 100644 --- a/main/ipc/xcloud.ts +++ b/main/ipc/xcloud.ts @@ -3,10 +3,6 @@ import Application from '../application' import TitleManager from '../helpers/titlemanager' import xCloudApi from '../helpers/xcloudapi' -interface getTitleArgs { - titleId: string; -} - export default class IpcxCloud extends IpcBase { _titleManager:TitleManager @@ -55,7 +51,10 @@ export default class IpcxCloud extends IpcBase { } setXhomeTokenDefault(name: string) { - this._application.streamingTokens.xHomeToken.setDefaultRegion(name) + return new Promise(resolve => { + this._application.streamingTokens.xHomeToken.setDefaultRegion(name) + resolve(null) + }) } getXcloudToken() { @@ -70,9 +69,12 @@ export default class IpcxCloud extends IpcBase { } setXcloudTokenDefault(name: string) { - if (this._application.streamingTokens.xCloudToken) { - this._application.streamingTokens.xCloudToken.setDefaultRegion(name) - } + return new Promise(resolve => { + if (this._application.streamingTokens.xCloudToken) { + this._application.streamingTokens.xCloudToken.setDefaultRegion(name) + } + resolve({}) + }) } getTitles() { diff --git a/package.json b/package.json index 58a45e7..a936eb6 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "private": true, "name": "xstreaming", "description": "xstreaming", - "version": "1.0.0", + "version": "1.0.1", "author": "Geocld ", "main": "app/background.js", "scripts": { @@ -37,7 +37,7 @@ "uplot": "^1.6.30", "uuid-1345": "^1.0.2", "xbox-webapi": "^1.4.1", - "xstreaming-player": "^0.2.0", + "xstreaming-player": "^0.2.1", "xvfb-maybe": "^0.2.1" }, "devDependencies": { diff --git a/renderer/common/settings.ts b/renderer/common/settings.ts index 0a44f75..e188ac5 100644 --- a/renderer/common/settings.ts +++ b/renderer/common/settings.ts @@ -51,6 +51,16 @@ const getSettingsMetas = (t) => { {value: 'zh-TW', label: '繁體中文'}, ], }, + // { + // name: 'theme', + // type: 'radio', + // title: t('Theme'), + // description: t('Set the app theme'), + // data: [ + // {value: 'dark', label: t('Dark')}, + // {value: 'light', label: t('Light')}, + // ], + // }, ], streaming: [ { diff --git a/renderer/components/ActionBar.tsx b/renderer/components/ActionBar.tsx index ffcd0cf..8991e87 100644 --- a/renderer/components/ActionBar.tsx +++ b/renderer/components/ActionBar.tsx @@ -7,6 +7,7 @@ import { DropdownMenu, DropdownItem, } from "@nextui-org/react"; +import Ipc from "../lib/ipc"; function ActionBar(props) { const { t } = useTranslation('cloud'); @@ -19,6 +20,13 @@ function ActionBar(props) { window.addEventListener("mousemove", mouseEvent); window.addEventListener("mousedown", mouseEvent); + const escEvent = (event) => { + if (event.key === 'Escape') { + Ipc.send('app', 'exitFullscreen') + } + } + window.addEventListener('keydown', escEvent) + const mouseInterval = setInterval(() => { const gamebarElement = document.getElementById("actionBar"); if (gamebarElement === null) { @@ -38,11 +46,17 @@ function ActionBar(props) { return () => { if (mouseInterval) clearInterval(mouseInterval); + + window.removeEventListener("mousemove", mouseEvent); + window.removeEventListener("mousedown", mouseEvent); + window.removeEventListener('keydown', escEvent) }; }, []); const handleDisconnect = () => { props.onDisconnect && props.onDisconnect(); + + Ipc.send('app', 'exitFullscreen'); }; const handleTogglePerformance = () => { @@ -61,6 +75,10 @@ function ActionBar(props) { props.onLongPressNexus && props.onLongPressNexus(); }; + const handleToggleFullscreen = () => { + Ipc.send('app', 'toggleFullscreen') + } + return (
@@ -82,6 +100,9 @@ function ActionBar(props) { {t("Long press Nexus")} + + {t("Toggle fullscreen")} + { } return ( - +

XStreaming

diff --git a/renderer/components/SettingItem.tsx b/renderer/components/SettingItem.tsx index 62fd7dd..3498065 100644 --- a/renderer/components/SettingItem.tsx +++ b/renderer/components/SettingItem.tsx @@ -21,7 +21,14 @@ const SettingItem = (props) => { const [defaultValue, setDefaultValue] = useState(settings[item.name]); useEffect(() => { - setDefaultValue(settings[item.name]) + if (item.name === 'theme') { + const localTheme = localStorage.getItem('theme') || 'dark' + console.log('localTheme:', localTheme) + setDefaultValue(localTheme) + } else { + setDefaultValue(settings[item.name]) + } + if (item.name === "signaling_cloud" || item.name === "signaling_home") { const method = item.name === "signaling_cloud" ? "getXcloudToken" : "getXhomeToken"; @@ -56,6 +63,8 @@ const SettingItem = (props) => { ? "setXcloudTokenDefault" : "setXhomeTokenDefault"; Ipc.send("xCloud", method, value); + } else if (key === 'theme') { + localStorage.setItem('theme', value) } else { setSettings({ ...settings, @@ -97,7 +106,7 @@ const SettingItem = (props) => { {item.type === "radio" && ( { handleChangeSetting(value); }} diff --git a/renderer/pages/[locale]/home.tsx b/renderer/pages/[locale]/home.tsx index 3790dcb..6d9fa93 100644 --- a/renderer/pages/[locale]/home.tsx +++ b/renderer/pages/[locale]/home.tsx @@ -7,6 +7,7 @@ import { Divider, Chip, } from "@nextui-org/react"; +import { useTheme } from "next-themes"; import { useTranslation } from "next-i18next"; import { useRouter } from 'next/router'; import Layout from "../../components/Layout"; @@ -23,6 +24,7 @@ function Home() { const { t, i18n: {language: locale} } = useTranslation('home'); const router = useRouter(); + const { setTheme } = useTheme(); const [loading, setLoading] = useState(false); const [loadingText, setLoadingText] = useState(""); const [isLogined, setIsLogined] = useState(false); @@ -32,6 +34,10 @@ function Home() { const authInterval = useRef(null); useEffect(() => { + const theme = localStorage.getItem('theme'); + if (theme === 'light') { + setTheme('xbox-light') + } setLoading(true); setLoadingText(t("Loading...")); @@ -91,7 +97,7 @@ function Home() { return () => { if (authInterval.current) clearInterval(authInterval.current); }; - }, [t]); + }, [t, setTheme]); const handleLogin = () => { setLoading(true); diff --git a/renderer/pages/_app.tsx b/renderer/pages/_app.tsx index 9254c8e..b629200 100644 --- a/renderer/pages/_app.tsx +++ b/renderer/pages/_app.tsx @@ -42,7 +42,7 @@ const App = ({ Component, pageProps }) => { return ( - + diff --git a/renderer/public/locales/en/cloud.json b/renderer/public/locales/en/cloud.json index abb2d64..cf672db 100644 --- a/renderer/public/locales/en/cloud.json +++ b/renderer/public/locales/en/cloud.json @@ -6,6 +6,7 @@ "Toggle Performance": "Toggle Performance", "Toggle Virtual Gamepad": "Toggle Virtual Gamepad", "Press Nexus": "Press Nexus", + "Toggle fullscreen": "Toggle fullscreen", "Display settings": "Display settings", "Long press Nexus": "Long press Nexus", "Disconnect": "Disconnect", diff --git a/renderer/public/locales/en/settings.json b/renderer/public/locales/en/settings.json index 820c926..8d66bbf 100644 --- a/renderer/public/locales/en/settings.json +++ b/renderer/public/locales/en/settings.json @@ -17,6 +17,10 @@ "Others": "Others", "Enable": "Enable", "Disable": "Disable", + "Theme": "Theme", + "Set the app theme": "Set the app theme", + "Dark": "Dark", + "Light": "Light", "Gamepad tester": "Gamepad tester", "Gamepad mapping": "Gamepad mapping", "Mapping key of gamepad": "Mapping key of gamepad", diff --git a/renderer/public/locales/zh/cloud.json b/renderer/public/locales/zh/cloud.json index 3088fbb..af8304c 100644 --- a/renderer/public/locales/zh/cloud.json +++ b/renderer/public/locales/zh/cloud.json @@ -9,6 +9,7 @@ "Press Nexus": "按下西瓜键", "Long press Nexus": "长按西瓜键", "Display settings": "画面设置", + "Toggle fullscreen": "进入/退出全屏", "Disconnect": "断开连接", "Display": "画面", "Sharpness": "锐化", diff --git a/renderer/public/locales/zh/settings.json b/renderer/public/locales/zh/settings.json index c41491e..623e09d 100644 --- a/renderer/public/locales/zh/settings.json +++ b/renderer/public/locales/zh/settings.json @@ -17,6 +17,10 @@ "Others": "其他", "Enable": "开", "Disable": "关", + "Theme": "主题", + "Set the app theme": "设置应用主题", + "Dark": "暗黑", + "Light": "明亮", "Gamepad tester": "手柄测试", "Gamepad mapping": "手柄映射", "Mapping key of gamepad": "映射手柄按键", diff --git a/renderer/tailwind.config.js b/renderer/tailwind.config.js index 1d8ece4..5f08b36 100644 --- a/renderer/tailwind.config.js +++ b/renderer/tailwind.config.js @@ -33,6 +33,24 @@ module.exports = { foreground: "#ffffff", }, } + }, + "xbox-light": { + extend: "light", + colors: { + primary: { + 50: "#DCF8CD", + 100: "#DCF8CD", + 200: "#B3F19D", + 300: "#7AD766", + 400: "#47B03D", + 500: "#107C10", + 600: "#0B6A13", + 700: "#085916", + 800: "#054716", + 900: "#033B16", + DEFAULT: "#107C10", + }, + } } } })] diff --git a/yarn.lock b/yarn.lock index 0bba210..9d5396b 100644 --- a/yarn.lock +++ b/yarn.lock @@ -7677,16 +7677,7 @@ streamsearch@^1.1.0: resolved "https://registry.yarnpkg.com/streamsearch/-/streamsearch-1.1.0.tgz#404dd1e2247ca94af554e841a8ef0eaa238da764" integrity sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg== -"string-width-cjs@npm:string-width@^4.2.0": - version "4.2.3" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" - integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== - dependencies: - emoji-regex "^8.0.0" - is-fullwidth-code-point "^3.0.0" - strip-ansi "^6.0.1" - -string-width@^4.0.0, string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: +"string-width-cjs@npm:string-width@^4.2.0", string-width@^4.0.0, string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: version "4.2.3" resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== @@ -7704,14 +7695,7 @@ string-width@^5.0.1, string-width@^5.1.2: emoji-regex "^9.2.2" strip-ansi "^7.0.1" -"strip-ansi-cjs@npm:strip-ansi@^6.0.1": - version "6.0.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" - integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== - dependencies: - ansi-regex "^5.0.1" - -strip-ansi@^6.0.0, strip-ansi@^6.0.1: +"strip-ansi-cjs@npm:strip-ansi@^6.0.1", strip-ansi@^6.0.0, strip-ansi@^6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== @@ -8260,16 +8244,7 @@ word-wrap@^1.2.5: resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.5.tgz#d2c45c6dd4fbce621a66f136cbe328afd0410b34" integrity sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA== -"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" - integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== - dependencies: - ansi-styles "^4.0.0" - string-width "^4.1.0" - strip-ansi "^6.0.0" - -wrap-ansi@^7.0.0: +"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0", wrap-ansi@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== @@ -8312,10 +8287,10 @@ xmlbuilder@>=11.0.1, xmlbuilder@^15.1.1: resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-15.1.1.tgz#9dcdce49eea66d8d10b42cae94a79c3c8d0c2ec5" integrity sha512-yMqGBqtXyeN1e3TGYvgNgDVZ3j84W4cwkOXQswghol6APgZWaff9lnbvN7MHYJOiXsvGPXtjTYJEiC9J2wv9Eg== -xstreaming-player@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/xstreaming-player/-/xstreaming-player-0.2.0.tgz#94e52b6c59050ffc35859a4e7f509f0a0a6ec317" - integrity sha512-K9KNsDj39DhFmFrRV630L6MD2Cg2Zny06ddMgBDP2FPKUMRFEz0wS87s8qwTCcCeSSpmUx0jLg/8FVPvi5rqPw== +xstreaming-player@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/xstreaming-player/-/xstreaming-player-0.2.1.tgz#937491b3cba575cb7e406ce52dcbb42fb8356ebc" + integrity sha512-3pa9gIH2ceH5JDKjDCR1fs/D6+ee1/fQQhunxSpDICKE52yCDbVEY4NDjxpLDqqPBQ2WMmUt7MozXUnW7+f+RA== xvfb-maybe@^0.2.1: version "0.2.1"