axe 12.2.1 → 12.2.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/dist/axe.js +43 -23
- package/dist/axe.min.js +1 -1
- package/lib/index.js +30 -10
- package/package.json +14 -14
package/README.md
CHANGED
|
@@ -322,7 +322,7 @@ Axe will automatically add the following metadata and information to the `meta`
|
|
|
322
322
|
|
|
323
323
|
Axe will omit from metadata all properties via the default Array from `meta.omittedFields` option (see [Options](#options) below for more insight).
|
|
324
324
|
|
|
325
|
-
If the argument "meta" is an empty object, then it will not be passed as an argument to logger methods
|
|
325
|
+
If the argument "meta" is an empty object, then it will not be passed as an argument to logger methods – because you don't want to see an empty `{}` polluting your log metadata. Axe keeps your log output tidy.
|
|
326
326
|
|
|
327
327
|
```sh
|
|
328
328
|
hello world {
|
package/dist/axe.js
CHANGED
|
@@ -1287,7 +1287,7 @@ module.exports = function unset(obj, prop) {
|
|
|
1287
1287
|
module.exports={
|
|
1288
1288
|
"name": "axe",
|
|
1289
1289
|
"description": "Axe is a logger-agnostic wrapper that normalizes logs regardless of argument style. Great for large development teams, old and new projects, and works with Pino, Bunyan, Winston, console, and more. It is lightweight, performant, highly-configurable, and automatically adds OS, CPU, and Git information to your logs. It supports hooks (useful for masking sensitive data) and dot-notation remapping, omitting, and picking of log metadata properties. Made for Forward Email, Lad, and Cabin.",
|
|
1290
|
-
"version": "12.2.
|
|
1290
|
+
"version": "12.2.3",
|
|
1291
1291
|
"author": "Nick Baugh <niftylettuce@gmail.com> (http://niftylettuce.com)",
|
|
1292
1292
|
"browser": {
|
|
1293
1293
|
"parse-app-info": false
|
|
@@ -1318,36 +1318,36 @@ module.exports={
|
|
|
1318
1318
|
"unset-value": "2.0.1"
|
|
1319
1319
|
},
|
|
1320
1320
|
"devDependencies": {
|
|
1321
|
-
"@babel/cli": "^7.
|
|
1322
|
-
"@babel/core": "^7.
|
|
1323
|
-
"@babel/preset-env": "^7.
|
|
1324
|
-
"@commitlint/cli": "^17.
|
|
1325
|
-
"@commitlint/config-conventional": "^17.
|
|
1326
|
-
"ava": "^5.
|
|
1321
|
+
"@babel/cli": "^7.22.15",
|
|
1322
|
+
"@babel/core": "^7.22.17",
|
|
1323
|
+
"@babel/preset-env": "^7.22.15",
|
|
1324
|
+
"@commitlint/cli": "^17.7.1",
|
|
1325
|
+
"@commitlint/config-conventional": "^17.7.0",
|
|
1326
|
+
"ava": "^5.3.1",
|
|
1327
1327
|
"babelify": "^10.0.0",
|
|
1328
1328
|
"browserify": "^17.0.0",
|
|
1329
|
-
"consola": "^3.
|
|
1329
|
+
"consola": "^3.2.3",
|
|
1330
1330
|
"cross-env": "^7.0.3",
|
|
1331
|
-
"eslint": "^8.
|
|
1331
|
+
"eslint": "^8.49.0",
|
|
1332
1332
|
"eslint-config-xo-lass": "^2.0.1",
|
|
1333
|
-
"eslint-plugin-compat": "^4.
|
|
1333
|
+
"eslint-plugin-compat": "^4.2.0",
|
|
1334
1334
|
"eslint-plugin-node": "^11.1.0",
|
|
1335
1335
|
"express": "^4.18.2",
|
|
1336
1336
|
"fixpack": "^4.0.0",
|
|
1337
1337
|
"husky": "^8.0.3",
|
|
1338
1338
|
"jsdom": "15.x",
|
|
1339
1339
|
"koa": "^2.14.2",
|
|
1340
|
-
"lint-staged": "^
|
|
1340
|
+
"lint-staged": "^14.0.1",
|
|
1341
1341
|
"lodash": "^4.17.21",
|
|
1342
1342
|
"nyc": "^15.1.0",
|
|
1343
|
-
"pino": "^8.
|
|
1343
|
+
"pino": "^8.15.1",
|
|
1344
1344
|
"remark-cli": "^11.0.0",
|
|
1345
1345
|
"remark-preset-github": "^4.0.4",
|
|
1346
1346
|
"rimraf": "^5.0.1",
|
|
1347
1347
|
"signale": "^1.4.0",
|
|
1348
|
-
"sinon": "^15.
|
|
1348
|
+
"sinon": "^15.2.0",
|
|
1349
1349
|
"tinyify": "3.0.0",
|
|
1350
|
-
"xo": "^0.
|
|
1350
|
+
"xo": "^0.56.0"
|
|
1351
1351
|
},
|
|
1352
1352
|
"engines": {
|
|
1353
1353
|
"node": ">=14"
|
|
@@ -1471,10 +1471,10 @@ function dotifyToArray(obj) {
|
|
|
1471
1471
|
const convertedKey = isSymbol(key) ? Symbol.keyFor(key) || key.description : key;
|
|
1472
1472
|
const newKey = current ? current + '.' + convertedKey : convertedKey; // joined key with dot
|
|
1473
1473
|
// if (value && typeof value === 'object' && !(value instanceof Date) && !ObjectID.isValid(value)) {
|
|
1474
|
-
if (isPlainObject(value)) {
|
|
1474
|
+
if (isPlainObject(value) && res.indexOf(convertedKey) === -1) {
|
|
1475
1475
|
res.push(convertedKey);
|
|
1476
1476
|
recurse(value, newKey); // it's a nested object, so do it again
|
|
1477
|
-
} else {
|
|
1477
|
+
} else if (res.indexOf(newKey) === -1) {
|
|
1478
1478
|
res.push(newKey);
|
|
1479
1479
|
}
|
|
1480
1480
|
}
|
|
@@ -1634,6 +1634,8 @@ class Axe {
|
|
|
1634
1634
|
log(level, message, meta) {
|
|
1635
1635
|
const originalArgs = [];
|
|
1636
1636
|
const errors = [];
|
|
1637
|
+
let hasMessage = false;
|
|
1638
|
+
let hasLevel = true;
|
|
1637
1639
|
if (!isUndefined(level)) originalArgs.push(level);
|
|
1638
1640
|
if (!isUndefined(message)) originalArgs.push(message);
|
|
1639
1641
|
if (!isUndefined(meta)) originalArgs.push(meta);
|
|
@@ -1647,10 +1649,12 @@ class Axe {
|
|
|
1647
1649
|
if (isString(level) && isString(aliases[level])) {
|
|
1648
1650
|
level = aliases[level];
|
|
1649
1651
|
} else if (isError(level)) {
|
|
1652
|
+
hasLevel = false;
|
|
1650
1653
|
meta = message;
|
|
1651
1654
|
message = level;
|
|
1652
1655
|
level = 'error';
|
|
1653
1656
|
} else if (!isString(level) || levels.indexOf(level) === -1) {
|
|
1657
|
+
hasLevel = false;
|
|
1654
1658
|
meta = message;
|
|
1655
1659
|
message = level;
|
|
1656
1660
|
level = this.getNormalizedLevel(level);
|
|
@@ -1683,10 +1687,16 @@ class Axe {
|
|
|
1683
1687
|
message = undefined;
|
|
1684
1688
|
meta = {};
|
|
1685
1689
|
const messages = [];
|
|
1686
|
-
for (const arg of originalArgs) {
|
|
1687
|
-
if (isError(arg)) errors.push(arg);
|
|
1690
|
+
for (const arg of originalArgs.slice(hasLevel && modifier === 0 ? 1 : 0)) {
|
|
1691
|
+
if (isError(arg)) errors.push(arg);
|
|
1692
|
+
// pushes number, object, string, etc for formatting
|
|
1693
|
+
else messages.push(arg);
|
|
1688
1694
|
}
|
|
1689
|
-
if (
|
|
1695
|
+
if (messages.length > 0) {
|
|
1696
|
+
message = format(...messages);
|
|
1697
|
+
hasMessage = true;
|
|
1698
|
+
}
|
|
1699
|
+
if (errors.length > 0 && level === 'log') level = 'error';
|
|
1690
1700
|
} else if (!isBunyan && originalArgs.length === 3 + modifier && isString(message) && formatSpecifiers.some(t => message.indexOf(t) !== -1)) {
|
|
1691
1701
|
// Otherwise if there are three args and if the `message` contains
|
|
1692
1702
|
// a placeholder token (e.g. '%s' or '%d' - see above `formatSpecifiers` variable)
|
|
@@ -1710,11 +1720,21 @@ class Axe {
|
|
|
1710
1720
|
} else if (isError(meta)) {
|
|
1711
1721
|
errors.push(meta);
|
|
1712
1722
|
// handle additional args
|
|
1723
|
+
const messages = [];
|
|
1724
|
+
if (isError(message)) {
|
|
1725
|
+
errors.unshift(message);
|
|
1726
|
+
message = undefined;
|
|
1727
|
+
}
|
|
1713
1728
|
for (const arg of originalArgs.slice(2 + modifier)) {
|
|
1714
1729
|
// should skip this better with slice and modifier adjustment
|
|
1715
1730
|
if (meta === arg) continue;
|
|
1716
|
-
if (isError(arg)) errors.push(arg);
|
|
1731
|
+
if (isError(arg)) errors.push(arg);else messages.push(arg);
|
|
1732
|
+
if (messages.length > 0) {
|
|
1733
|
+
message = format(...messages);
|
|
1734
|
+
hasMessage = true;
|
|
1735
|
+
}
|
|
1717
1736
|
}
|
|
1737
|
+
if (level === 'log') level = 'error';
|
|
1718
1738
|
meta = {};
|
|
1719
1739
|
}
|
|
1720
1740
|
if (!isUndefined(meta) && !isObject(meta)) meta = {
|
|
@@ -1903,11 +1923,11 @@ class Axe {
|
|
|
1903
1923
|
// Show stack trace if necessary (along with any metadata)
|
|
1904
1924
|
if (isError(err) && this.config.showStack) {
|
|
1905
1925
|
if (!this.config.meta.show || isEmpty(meta)) {
|
|
1906
|
-
this.config.logger[method](err);
|
|
1926
|
+
this.config.logger[method](...(hasMessage ? [message, err] : [err]));
|
|
1907
1927
|
} else if (this.config.meta.hideMeta && meta[this.config.meta.hideMeta]) {
|
|
1908
|
-
this.config.logger[method](err);
|
|
1928
|
+
this.config.logger[method](...(hasMessage ? [message, err] : [err]));
|
|
1909
1929
|
} else {
|
|
1910
|
-
this.config.logger[method](err, meta);
|
|
1930
|
+
this.config.logger[method](...(hasMessage ? [message, err, meta] : [err, meta]));
|
|
1911
1931
|
}
|
|
1912
1932
|
} else if (!this.config.meta.show || isEmpty(meta)) {
|
|
1913
1933
|
this.config.logger[method](message);
|
package/dist/axe.min.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
!function(e){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{("undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this).Axe=e()}}((function(){!function(e){"use strict";e.console||(e.console={});for(var t,r,n=e.console,o=function(){},i=["memory"],s="assert,clear,count,debug,dir,dirxml,error,exception,group,groupCollapsed,groupEnd,info,log,markTimeline,profile,profiles,profileEnd,show,table,time,timeEnd,timeline,timelineEnd,timeStamp,trace,warn".split(",");t=i.pop();)n[t]||(n[t]={});for(;r=s.pop();)n[r]||(n[r]=o)}("undefined"==typeof window?this:window);var e={hostname:function(){return"undefined"!=typeof location?location.hostname:""}},t=function(e){var t=Array.prototype.slice.call(arguments,1);return t.length&&(e=e.toString().replace(/(%?)(%([jds]))/g,(function(e,r,n,o){var i=t.shift();switch(o){case"s":i=""+i;break;case"d":i=Number(i);break;case"j":i=JSON.stringify(i)}return r?(t.unshift(i),e):i}))),t.length&&(e=e.toString()+" "+t.join(" ")),""+e.toString().replace(/%{2,2}/g,"%")},r=["%s","%d","%i","%f","%j","%o","%O","%%"],n=function(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:".";if(n=e,"[object Object]"!==Object.prototype.toString.call(n)||!t)return e;var n;const o=Array.isArray(t)?t:String(t).split(r),{length:i}=o;return i<2?e[o[0]]:((e,t,r)=>{for(let n=0;n<r;n++){if(null===e)return;const r=e[t[n]];if(void 0===r)return;e=r}return e})(e,o,i)},o=function(e){switch(Object.prototype.toString.call(e)){case"[object Error]":case"[object Exception]":case"[object DOMException]":return!0;default:return e instanceof Error}},i="undefined"!=typeof Symbol&&Symbol,s={},c=Object.prototype.toString;if("function"==typeof i&&"function"==typeof Symbol&&"symbol"==typeof i("foo")&&"symbol"==typeof Symbol("bar")&&function(){if("function"!=typeof Symbol||"function"!=typeof Object.getOwnPropertySymbols)return!1;if("symbol"==typeof Symbol.iterator)return!0;var e={},t=Symbol("test"),r=Object(t);if("string"==typeof t)return!1;if("[object Symbol]"!==Object.prototype.toString.call(t))return!1;if("[object Symbol]"!==Object.prototype.toString.call(r))return!1;for(t in e[t]=42,e)return!1;if("function"==typeof Object.keys&&0!==Object.keys(e).length)return!1;if("function"==typeof Object.getOwnPropertyNames&&0!==Object.getOwnPropertyNames(e).length)return!1;var n=Object.getOwnPropertySymbols(e);if(1!==n.length||n[0]!==t)return!1;if(!Object.prototype.propertyIsEnumerable.call(e,t))return!1;if("function"==typeof Object.getOwnPropertyDescriptor){var o=Object.getOwnPropertyDescriptor(e,t);if(42!==o.value||!0!==o.enumerable)return!1}return!0}()){var f=Symbol.prototype.toString,a=/^Symbol\(.*\)$/;s=function(e){if("symbol"==typeof e)return!0;if("[object Symbol]"!==c.call(e))return!1;try{return function(e){return"symbol"==typeof e.valueOf()&&a.test(f.call(e))}(e)}catch(t){return!1}}}else s=function(e){return!1};var l=e=>{if("[object Object]"!==Object.prototype.toString.call(e))return!1;const t=Object.getPrototypeOf(e);return null===t||t===Object.prototype};const{hasOwnProperty:u}=Object.prototype,{propertyIsEnumerable:p}=Object,g=(e,t,r)=>Object.defineProperty(e,t,{value:r,writable:!0,enumerable:!0,configurable:!0}),y=this,h={concatArrays:!1,ignoreUndefined:!1},m=e=>{const t=[];for(const r in e)u.call(e,r)&&t.push(r);if(Object.getOwnPropertySymbols){const r=Object.getOwnPropertySymbols(e);for(const n of r)p.call(e,n)&&t.push(n)}return t};function d(e){return Array.isArray(e)?function(e){const t=e.slice(0,0);return m(e).forEach(r=>{g(t,r,d(e[r]))}),t}(e):l(e)?function(e){const t=null===Object.getPrototypeOf(e)?Object.create(null):{};return m(e).forEach(r=>{g(t,r,d(e[r]))}),t}(e):e}const b=(e,t,r,n)=>(r.forEach(r=>{void 0===t[r]&&n.ignoreUndefined||(r in e&&e[r]!==Object.getPrototypeOf(e)?g(e,r,v(e[r],t[r],n)):g(e,r,d(t[r])))}),e);function v(e,t,r){return r.concatArrays&&Array.isArray(e)&&Array.isArray(t)?((e,t,r)=>{let n=e.slice(0,0),o=0;return[e,t].forEach(t=>{const i=[];for(let r=0;r<t.length;r++)u.call(t,r)&&(i.push(String(r)),g(n,o++,t===e?t[r]:d(t[r])));n=b(n,t,m(t).filter(e=>!i.includes(e)),r)}),n})(e,t,r):l(t)&&l(e)?b(e,t,m(t),r):d(t)}var O={};const A=async(e,t)=>{const r=[];let n=0;for(const o of e)r.push(await t(await o,n++));return r};(O=A).default=A;var j={};function w(e,t){var r="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!r){if(Array.isArray(e)||(r=function(e,t){if(e){if("string"==typeof e)return S(e,void 0);var r=Object.prototype.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?S(e,void 0):void 0}}(e))||t&&e&&"number"==typeof e.length){r&&(e=r);var n=0,o=function(){};return{s:o,n:function(){return n>=e.length?{done:!0}:{done:!1,value:e[n++]}},e:function(e){throw e},f:o}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,s=!0,c=!1;return{s:function(){r=r.call(e)},n:function(){var e=r.next();return s=e.done,e},e:function(e){c=!0,i=e},f:function(){try{s||null==r.return||r.return()}finally{if(c)throw i}}}}function S(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r<t;r++)n[r]=e[r];return n}var E=function e(t){let r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[];if(!o(t))throw new Error("`err` must be an Error");if(!Array.isArray(r))throw new TypeError("`fields` must be an Array");const n={};var i,s=w(new Set([...Object.getOwnPropertyNames(Object.getPrototypeOf(t)),...Object.getOwnPropertyNames(t)]));try{for(s.s();!(i=s.n()).done;){const e=i.value;"function"!=typeof t[e]&&(n[e]=t[e])}}catch(t){s.e(t)}finally{s.f()}return!n.name&&t.constructor.name&&(n.name=t.constructor.name),Array.isArray(t.errors)&&(n.errors=t.errors.map(t=>o(t)?e(t,r):t)),Array.isArray(r)&&r.length>0?n.filter(e=>r.includes(e)):n};const _=e=>"object"==typeof e||"function"==typeof e,T=(e,t)=>"__proto__"==e||"constructor"==e&&"function"==typeof t.constructor;var P=function(e,t,r){let n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:".";if(!_(e)||!t||!t.length)return e;const o=Array.isArray(t)?t:String(t).split(n);if(T(o[0],e))return e;const{length:i}=o;return 1===i?(e[o[0]]=r,e):((e,t,r,n)=>{let o=e,i=0;for(;i<r-1;i++){const e=t[i];T(e,o)||(o=_(o[e])?o[e]:o[e]={})}return o[t[i]]=n,e})(e,o,i,r)},k=function(e){return null!=e&&"object"==typeof e&&!1===Array.isArray(e)};function x(e,t,r){return"function"==typeof r.join?r.join(e):e[0]+t+e[1]}function I(e,t,r){return"function"!=typeof r.isValid||r.isValid(e,t)}function L(e){return k(e)||Array.isArray(e)||"function"==typeof e}var M=Object.prototype.toString;function F(e){return"function"==typeof e.constructor?e.constructor.name:null}var N=function e(t){switch(function(e){if(void 0===e)return"undefined";if(null===e)return"null";var t=typeof e;if("boolean"===t)return"boolean";if("string"===t)return"string";if("number"===t)return"number";if("symbol"===t)return"symbol";if("function"===t)return"GeneratorFunction"===F(e)?"generatorfunction":"function";if(function(e){return Array.isArray?Array.isArray(e):e instanceof Array}(e))return"array";if(function(e){return!(!e.constructor||"function"!=typeof e.constructor.isBuffer)&&e.constructor.isBuffer(e)}(e))return"buffer";if(function(e){try{if("number"==typeof e.length&&"function"==typeof e.callee)return!0}catch(t){if(-1!==t.message.indexOf("callee"))return!0}return!1}(e))return"arguments";if(function(e){return e instanceof Date||"function"==typeof e.toDateString&&"function"==typeof e.getDate&&"function"==typeof e.setDate}(e))return"date";if(function(e){return e instanceof Error||"string"==typeof e.message&&e.constructor&&"number"==typeof e.constructor.stackTraceLimit}(e))return"error";if(function(e){return e instanceof RegExp||"string"==typeof e.flags&&"boolean"==typeof e.ignoreCase&&"boolean"==typeof e.multiline&&"boolean"==typeof e.global}(e))return"regexp";switch(F(e)){case"Symbol":return"symbol";case"Promise":return"promise";case"WeakMap":return"weakmap";case"WeakSet":return"weakset";case"Map":return"map";case"Set":return"set";case"Int8Array":return"int8array";case"Uint8Array":return"uint8array";case"Uint8ClampedArray":return"uint8clampedarray";case"Int16Array":return"int16array";case"Uint16Array":return"uint16array";case"Int32Array":return"int32array";case"Uint32Array":return"uint32array";case"Float32Array":return"float32array";case"Float64Array":return"float64array"}if(function(e){return"function"==typeof e.throw&&"function"==typeof e.return&&"function"==typeof e.next}(e))return"generator";switch(t=M.call(e)){case"[object Object]":return"object";case"[object Map Iterator]":return"mapiterator";case"[object Set Iterator]":return"setiterator";case"[object String Iterator]":return"stringiterator";case"[object Array Iterator]":return"arrayiterator"}return t.slice(8,-1).toLowerCase().replace(/\s/g,"")}(t)){case"boolean":case"date":case"function":case"null":case"number":return!0;case"undefined":return!1;case"regexp":return"(?:)"!==t.source&&""!==t.source;case"buffer":return""!==t.toString();case"error":return""!==t.message;case"string":case"arguments":return 0!==t.length;case"file":case"map":case"set":return 0!==t.size;case"array":case"object":for(const r of Object.keys(t))if(e(t[r]))return!0;return!1;default:return!0}},D=function(e,t,r){return!(null==(n=e)||"object"!=typeof n&&"function"!=typeof n&&!Array.isArray(n)||"string"!=typeof t&&!Array.isArray(t))&&N(function(e,t,r){if(k(r)||(r={default:r}),!L(e))return void 0!==r.default?r.default:e;"number"==typeof t&&(t=String(t));const n=Array.isArray(t),o="string"==typeof t,i=r.separator||".",s=r.joinChar||("string"==typeof i?i:".");if(!o&&!n)return e;if(o&&t in e)return I(t,e,r)?e[t]:r.default;let c=n?t:function(e,t,r){return"function"==typeof r.split?r.split(e):e.split(t)}(t,i,r),f=c.length,a=0;do{let t=c[a];for("number"==typeof t&&(t=String(t));t&&"\\"===t.slice(-1);)t=x([t.slice(0,-1),c[++a]||""],s,r);if(t in e){if(!I(t,e,r))return r.default;e=e[t]}else{let n=!1,o=a+1;for(;o<f;)if(n=(t=x([t,c[o++]],s,r))in e){if(!I(t,e,r))return r.default;e=e[t],a=o-1;break}if(!n)return r.default}}while(++a<f&&L(e));return a===f?e:r.default}(e,t,r));var n};const C=e=>{if((e=>"__proto__"===e||"constructor"===e||"prototype"===e)(e))throw new Error(`Cannot set unsafe key: "${e}"`)};var B=function(e,t){if(null==(r=e)||"object"!=typeof r||!1!==Array.isArray(r))throw new TypeError("expected an object.");var r,n=Array.isArray(t);if(!n&&e.hasOwnProperty(t))return delete e[t],!0;if(D(e,t)){for(var o=n?t.slice():t.split("."),i=o.pop();o.length&&"\\"===o[o.length-1].slice(-1);)i=o.pop().slice(0,-1)+"."+i;for(;o.length;)t=o.shift(),C(t),e=e[t];return delete e[i]}return!0},X={};Object.defineProperty(X,"__esModule",{value:!0}),X.boolean=void 0,X.boolean=function(e){switch(Object.prototype.toString.call(e)){case"[object String]":return["true","t","yes","y","on","1"].includes(e.trim().toLowerCase());case"[object Number]":return 1===e.valueOf();case"[object Boolean]":return e.valueOf();default:return!1}};var H={};Object.defineProperty(H,"__esModule",{value:!0}),H.isBooleanable=void 0,H.isBooleanable=function(e){switch(Object.prototype.toString.call(e)){case"[object String]":return["true","t","yes","y","on","1","false","f","no","n","off","0"].includes(e.trim().toLowerCase());case"[object Number]":return[0,1].includes(e.valueOf());case"[object Boolean]":return!0;default:return!1}};var R={};Object.defineProperty(R,"__esModule",{value:!0}),R.boolean=void 0,Object.defineProperty(R,"boolean",{enumerable:!0,get:function(){return X.boolean}}),Object.defineProperty(R,"isBooleanable",{enumerable:!0,get:function(){return H.isBooleanable}});var U,K,W,z="12.2.1",$=U={};function V(){throw new Error("setTimeout has not been defined")}function G(){throw new Error("clearTimeout has not been defined")}function J(e){if(K===setTimeout)return setTimeout(e,0);if((K===V||!K)&&setTimeout)return K=setTimeout,setTimeout(e,0);try{return K(e,0)}catch(t){try{return K.call(null,e,0)}catch(t){return K.call(this,e,0)}}}!function(){try{K="function"==typeof setTimeout?setTimeout:V}catch(e){K=V}try{W="function"==typeof clearTimeout?clearTimeout:G}catch(e){W=G}}();var q,Q=[],Y=!1,Z=-1;function ee(){Y&&q&&(Y=!1,q.length?Q=q.concat(Q):Z=-1,Q.length&&te())}function te(){if(!Y){var e=J(ee);Y=!0;for(var t=Q.length;t;){for(q=Q,Q=[];++Z<t;)q&&q[Z].run();Z=-1,t=Q.length}q=null,Y=!1,function(e){if(W===clearTimeout)return clearTimeout(e);if((W===G||!W)&&clearTimeout)return W=clearTimeout,clearTimeout(e);try{W(e)}catch(t){try{return W.call(null,e)}catch(t){return W.call(this,e)}}}(e)}}function re(e,t){this.fun=e,this.array=t}function ne(){}$.nextTick=function(e){var t=new Array(arguments.length-1);if(arguments.length>1)for(var r=1;r<arguments.length;r++)t[r-1]=arguments[r];Q.push(new re(e,t)),1!==Q.length||Y||J(te)},re.prototype.run=function(){this.fun.apply(null,this.array)},$.title="browser",$.browser=!0,$.env={},$.argv=[],$.version="",$.versions={},$.on=ne,$.addListener=ne,$.once=ne,$.off=ne,$.removeListener=ne,$.removeAllListeners=ne,$.emit=ne,$.prependListener=ne,$.prependOnceListener=ne,$.listeners=function(e){return[]},$.binding=function(e){throw new Error("process.binding is not supported")},$.cwd=function(){return"/"},$.chdir=function(e){throw new Error("process.chdir is not supported")},$.umask=function(){return 0};var oe={};return function(i){(function(){const{boolean:c}=R,f=Symbol.for("axe.silent"),a=new Set(["config","log"]),u=["trace","debug","info","warn","error","fatal"],p={warning:"warn",err:"error"},g="`level` invalid, must be: "+u.join(", "),m=i.env.HOSTNAME||e.hostname();function b(e){if("object"!=typeof e||null===e)return!1;const t=Object.getPrototypeOf(e);return!(null!==t&&t!==Object.prototype&&null!==Object.getPrototypeOf(t)||Symbol.toStringTag in e||Symbol.iterator in e||s(e))}function A(e){return null==e||"object"==typeof e&&0===Reflect.ownKeys(e).length||"string"==typeof e&&0===e.trim().length}function w(e){return void 0===e}function S(e){return"object"==typeof e&&null!==e&&!Array.isArray(e)}function _(e){return"string"==typeof e}oe=class{constructor(){var e=this;let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};const r={};if(i.env.AXE_REMAPPED_META_FIELDS){const e=i.env.AXE_REMAPPED_META_FIELDS.split(",").map(e=>e.split(":"));for(const[t,n]of e)r[t]=n}let n=i.env.AXE_OMIT_META_FIELDS;"string"==typeof n&&(n=n.split(",").map(e=>e.trim())),Array.isArray(n)||(n=[]);let o=i.env.AXE_PICK_META_FIELDS;"string"==typeof o&&(o=o.split(",").map(e=>e.trim())),Array.isArray(o)||(o=[]),this.config=function(){const e=v(d(h),this!==y&&this||{},h);let t={_:{}};for(var r=arguments.length,n=new Array(r),o=0;o<r;o++)n[o]=arguments[o];for(const i of n)if(void 0!==i){if(!l(i))throw new TypeError("`"+i+"` is not an Option Object");t=v(t,{_:i},e)}return t._}({showStack:!i.env.AXE_SHOW_STACK||c(i.env.AXE_SHOW_STACK),meta:Object.assign({show:!i.env.AXE_SHOW_META||c(i.env.AXE_SHOW_META),remappedFields:r,omittedFields:n,pickedFields:o,cleanupRemapping:!0,hideHTTP:"is_http",hideMeta:"hide_meta"},"object"==typeof t.meta?t.meta:{}),version:z,silent:!1,logger:console,name:m,level:"info",levels:["info","warn","error","fatal"],appInfo:!i.env.AXE_APP_INFO||c(i.env.AXE_APP_INFO),hooks:Object.assign({pre:[],post:[]},"object"==typeof t.hooks?t.hooks:{})},t),this.appInfo=!!this.config.appInfo&&"function"==typeof j&&j(),this.log=this.log.bind(this);const s=Object.keys(this.config.logger).filter(e=>!a.has(e));for(const i of s)this[i]=this.config.logger[i];for(const i of u)"function"!=typeof this.config.logger[i]&&("fatal"===i?this.config.logger.fatal=this.config.logger.error||this.config.logger.info||this.config.logger.log:this.config.logger[i]=this.config.logger.info||this.config.logger.log),this[i]=function(){for(var t=arguments.length,r=new Array(t),n=0;n<t;n++)r[n]=arguments[n];return e.log(i,...Array.prototype.slice.call(r))};this.setLevel=this.setLevel.bind(this),this.getNormalizedLevel=this.getNormalizedLevel.bind(this),this.setName=this.setName.bind(this),this.config.name&&this.setName(this.config.name),this.setLevel(this.config.level),this.err=this.error,this.warning=this.warn,this.pre=function(e,t){this.config.hooks.pre.push((function(r){for(var n=arguments.length,o=new Array(n>1?n-1:0),i=1;i<n;i++)o[i-1]=arguments[i];return e!==r?[...o]:t(...o)}))},this.post=function(e,t){this.config.hooks.post.push((function(r){for(var n=arguments.length,o=new Array(n>1?n-1:0),i=1;i<n;i++)o[i-1]=arguments[i];return e!==r?[...o]:t(...o)}))}}setLevel(e){if(!_(e)||-1===u.indexOf(e))throw new Error(g);_(this.config.logger.logLevel)?this.config.logger.logLevel=e:this.config.logger.level=e,this.config.levels=u.slice(u.indexOf(e))}getNormalizedLevel(e){return _(e)?_(p[e])?p[e]:-1===u.indexOf(e)?"info":e:"info"}setName(e){if(!_(e))throw new Error("`name` must be a String");_(this.config.logger.scope)?this.config.logger.scope=e:this.config.logger.name=e}log(e,i,a){const l=[],g=[];w(e)||l.push(e),w(i)||l.push(i),w(a)||l.push(a);for(var y=arguments.length,h=new Array(y>3?y-3:0),m=3;m<y;m++)h[m-3]=arguments[m];for(const t of Array.prototype.slice.call(h))l.push(t);let d=0;if(_(e)&&_(p[e])?e=p[e]:o(e)?(a=i,i=e,e="error"):_(e)&&-1!==u.indexOf(e)||(a=i,i=e,e=this.getNormalizedLevel(e),d=-1),-1===this.config.levels.indexOf(e))return;let v,j=!1;if((S(i)||Array.isArray(i))&&_(a)){j=!0;const e=a;a=i,i=_(e)&&l.length>=3+d?t(...l.slice(2+d)):e}if(w(i)&&(i=e),1!==l.slice(1+d).length||_(i)||o(i))if(!j&&l.length>=4+d){i=void 0,a={};const r=[];for(const e of l)o(e)?g.push(e):_(e)&&r.push(e);0===g.length&&r.length>0?i=t(...r):g.length>0&&"log"===e&&(e="error")}else if(!j&&l.length===3+d&&_(i)&&r.some(e=>-1!==i.indexOf(e)))i=t(i,a),a={};else if(o(i)){if(o(a)){g.push(a);for(const e of l.slice(2+d))a!==e&&o(e)&&g.push(e);a={}}}else o(a)?(g.push(a),a={}):S(a)||w(a)||null===a?_(i)||(i=t(i)):(i=t(i,a),a={});else a={message:i},i=e;w(a)||S(a)?S(a)||(a={}):a={original_meta:a},o(i)&&(g.unshift(i),i=void 0),S(a.err)&&(o(a.err)&&g.push(a.err),a.original_err=o(a.err)?E(a.err):a.err),g.length>0&&(1===g.length?v=g[0]:((v=new Error([...new Set(g.map(e=>e.message).filter(Boolean))].join("; "))).stack=[...new Set(g.map(e=>e.stack).filter(Boolean))].join("\n\n"),v.errors=g),a.err=E(v),_(i)||(i=v.message)),a.level=e,this.appInfo&&(a.app=this.appInfo);const T=-1===d?"log":e;for(const t of this.config.hooks.pre)[v,i,a]=t(T,v,i,a);const k=c(a[f]);if(!A(this.config.meta.remappedFields))for(const t of Reflect.ownKeys(this.config.meta.remappedFields))if(P(a,this.config.meta.remappedFields[t],n(a,t)),B(a,t),this.config.meta.cleanupRemapping){const e=t.lastIndexOf(".");if(-1===e)continue;const r=t.slice(0,e);A(n(a,r))&&B(a,r)}if(!A(this.config.meta.omittedFields)||!A(this.config.meta.pickedFields)){const e=function(e){const t=[];return function e(r,n){for(const o of Reflect.ownKeys(r)){const i=r[o],c=s(o)?Symbol.keyFor(o)||o.description:o,f=n?n+"."+c:c;b(i)?(t.push(c),e(i,f)):t.push(f)}}(e),t}(a);if(!A(this.config.meta.omittedFields))for(const r of this.config.meta.omittedFields){let t=e.length;for(;t--;)(e[t]===r||!s(e[t])&&0===e[t].indexOf(r+"."))&&e.splice(t,1)}const t=[];if(!A(this.config.meta.pickedFields))for(const r of this.config.meta.pickedFields){if(s(r))a[r]&&t.push([r,a[r]]);else{const t=r.indexOf("."),n=r.slice(0,t+1);if(-1!==t){let t=e.length;for(;t--;)(e[t]===n.slice(0,-1)||0===e[t].indexOf(n))&&e.splice(t,1)}}-1===e.indexOf(r)&&e.push(r)}for(const r of e)s(r)?void 0!==a[r]&&t.push([r,a[r]]):void 0!==a[Symbol.for(r)]&&t.push([Symbol.for(r),a[Symbol.for(r)]]);try{a=function(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:".";if(o=e,"[object Object]"!==Object.prototype.toString.call(o)||!t||!Array.isArray(t)&&"string"!=typeof t)return{};var o;const{length:i}=t;if("string"==typeof t||i<2){const o="string"==typeof t?t:t[0],i=n(e,o,r);return void 0!==i?P({},o,i,r):{}}return((e,t,r,o)=>{const i={};for(let s=0;s<r;s++){const r=t[s],c=n(e,r,o);void 0!==c&&P(i,r,c,o)}return i})(e,t,i,r)}(a,e)}catch(v){this.config.logger.error(v)}if(t.length>0)for(const[r,n]of t)a[r]=n}return this.config.silent||k||(o(v)&&this.config.showStack?!this.config.meta.show||A(a)||this.config.meta.hideMeta&&a[this.config.meta.hideMeta]?this.config.logger[T](v):this.config.logger[T](v,a):!this.config.meta.show||A(a)||this.config.meta.hideMeta&&a[this.config.meta.hideMeta]||this.config.meta.hideHTTP&&a[this.config.meta.hideHTTP]?this.config.logger[T](i):this.config.logger[T](i,a)),0===this.config.hooks.post.length?{method:T,err:v,message:i,meta:a}:O(this.config.hooks.post,e=>e(T,v,i,a)).then().catch(e=>{this.config.logger.error(e)})}}}).call(this)}.call(this,U),oe}));
|
|
1
|
+
!function(e){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{("undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this).Axe=e()}}((function(){!function(e){"use strict";e.console||(e.console={});for(var t,r,n=e.console,o=function(){},i=["memory"],s="assert,clear,count,debug,dir,dirxml,error,exception,group,groupCollapsed,groupEnd,info,log,markTimeline,profile,profiles,profileEnd,show,table,time,timeEnd,timeline,timelineEnd,timeStamp,trace,warn".split(",");t=i.pop();)n[t]||(n[t]={});for(;r=s.pop();)n[r]||(n[r]=o)}("undefined"==typeof window?this:window);var e={hostname:function(){return"undefined"!=typeof location?location.hostname:""}},t=function(e){var t=Array.prototype.slice.call(arguments,1);return t.length&&(e=e.toString().replace(/(%?)(%([jds]))/g,(function(e,r,n,o){var i=t.shift();switch(o){case"s":i=""+i;break;case"d":i=Number(i);break;case"j":i=JSON.stringify(i)}return r?(t.unshift(i),e):i}))),t.length&&(e=e.toString()+" "+t.join(" ")),""+e.toString().replace(/%{2,2}/g,"%")},r=["%s","%d","%i","%f","%j","%o","%O","%%"],n=function(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:".";if(n=e,"[object Object]"!==Object.prototype.toString.call(n)||!t)return e;var n;const o=Array.isArray(t)?t:String(t).split(r),{length:i}=o;return i<2?e[o[0]]:((e,t,r)=>{for(let n=0;n<r;n++){if(null===e)return;const r=e[t[n]];if(void 0===r)return;e=r}return e})(e,o,i)},o=function(e){switch(Object.prototype.toString.call(e)){case"[object Error]":case"[object Exception]":case"[object DOMException]":return!0;default:return e instanceof Error}},i="undefined"!=typeof Symbol&&Symbol,s={},c=Object.prototype.toString;if("function"==typeof i&&"function"==typeof Symbol&&"symbol"==typeof i("foo")&&"symbol"==typeof Symbol("bar")&&function(){if("function"!=typeof Symbol||"function"!=typeof Object.getOwnPropertySymbols)return!1;if("symbol"==typeof Symbol.iterator)return!0;var e={},t=Symbol("test"),r=Object(t);if("string"==typeof t)return!1;if("[object Symbol]"!==Object.prototype.toString.call(t))return!1;if("[object Symbol]"!==Object.prototype.toString.call(r))return!1;for(t in e[t]=42,e)return!1;if("function"==typeof Object.keys&&0!==Object.keys(e).length)return!1;if("function"==typeof Object.getOwnPropertyNames&&0!==Object.getOwnPropertyNames(e).length)return!1;var n=Object.getOwnPropertySymbols(e);if(1!==n.length||n[0]!==t)return!1;if(!Object.prototype.propertyIsEnumerable.call(e,t))return!1;if("function"==typeof Object.getOwnPropertyDescriptor){var o=Object.getOwnPropertyDescriptor(e,t);if(42!==o.value||!0!==o.enumerable)return!1}return!0}()){var f=Symbol.prototype.toString,a=/^Symbol\(.*\)$/;s=function(e){if("symbol"==typeof e)return!0;if("[object Symbol]"!==c.call(e))return!1;try{return function(e){return"symbol"==typeof e.valueOf()&&a.test(f.call(e))}(e)}catch(t){return!1}}}else s=function(e){return!1};var l=e=>{if("[object Object]"!==Object.prototype.toString.call(e))return!1;const t=Object.getPrototypeOf(e);return null===t||t===Object.prototype};const{hasOwnProperty:u}=Object.prototype,{propertyIsEnumerable:p}=Object,g=(e,t,r)=>Object.defineProperty(e,t,{value:r,writable:!0,enumerable:!0,configurable:!0}),y=this,h={concatArrays:!1,ignoreUndefined:!1},d=e=>{const t=[];for(const r in e)u.call(e,r)&&t.push(r);if(Object.getOwnPropertySymbols){const r=Object.getOwnPropertySymbols(e);for(const n of r)p.call(e,n)&&t.push(n)}return t};function m(e){return Array.isArray(e)?function(e){const t=e.slice(0,0);return d(e).forEach(r=>{g(t,r,m(e[r]))}),t}(e):l(e)?function(e){const t=null===Object.getPrototypeOf(e)?Object.create(null):{};return d(e).forEach(r=>{g(t,r,m(e[r]))}),t}(e):e}const b=(e,t,r,n)=>(r.forEach(r=>{void 0===t[r]&&n.ignoreUndefined||(r in e&&e[r]!==Object.getPrototypeOf(e)?g(e,r,v(e[r],t[r],n)):g(e,r,m(t[r])))}),e);function v(e,t,r){return r.concatArrays&&Array.isArray(e)&&Array.isArray(t)?((e,t,r)=>{let n=e.slice(0,0),o=0;return[e,t].forEach(t=>{const i=[];for(let r=0;r<t.length;r++)u.call(t,r)&&(i.push(String(r)),g(n,o++,t===e?t[r]:m(t[r])));n=b(n,t,d(t).filter(e=>!i.includes(e)),r)}),n})(e,t,r):l(t)&&l(e)?b(e,t,d(t),r):m(t)}var O={};const A=async(e,t)=>{const r=[];let n=0;for(const o of e)r.push(await t(await o,n++));return r};(O=A).default=A;var j={};function w(e,t){var r="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!r){if(Array.isArray(e)||(r=function(e,t){if(e){if("string"==typeof e)return S(e,void 0);var r=Object.prototype.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?S(e,void 0):void 0}}(e))||t&&e&&"number"==typeof e.length){r&&(e=r);var n=0,o=function(){};return{s:o,n:function(){return n>=e.length?{done:!0}:{done:!1,value:e[n++]}},e:function(e){throw e},f:o}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,s=!0,c=!1;return{s:function(){r=r.call(e)},n:function(){var e=r.next();return s=e.done,e},e:function(e){c=!0,i=e},f:function(){try{s||null==r.return||r.return()}finally{if(c)throw i}}}}function S(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r<t;r++)n[r]=e[r];return n}var E=function e(t){let r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[];if(!o(t))throw new Error("`err` must be an Error");if(!Array.isArray(r))throw new TypeError("`fields` must be an Array");const n={};var i,s=w(new Set([...Object.getOwnPropertyNames(Object.getPrototypeOf(t)),...Object.getOwnPropertyNames(t)]));try{for(s.s();!(i=s.n()).done;){const e=i.value;"function"!=typeof t[e]&&(n[e]=t[e])}}catch(t){s.e(t)}finally{s.f()}return!n.name&&t.constructor.name&&(n.name=t.constructor.name),Array.isArray(t.errors)&&(n.errors=t.errors.map(t=>o(t)?e(t,r):t)),Array.isArray(r)&&r.length>0?n.filter(e=>r.includes(e)):n};const _=e=>"object"==typeof e||"function"==typeof e,T=(e,t)=>"__proto__"==e||"constructor"==e&&"function"==typeof t.constructor;var P=function(e,t,r){let n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:".";if(!_(e)||!t||!t.length)return e;const o=Array.isArray(t)?t:String(t).split(n);if(T(o[0],e))return e;const{length:i}=o;return 1===i?(e[o[0]]=r,e):((e,t,r,n)=>{let o=e,i=0;for(;i<r-1;i++){const e=t[i];T(e,o)||(o=_(o[e])?o[e]:o[e]={})}return o[t[i]]=n,e})(e,o,i,r)},k=function(e){return null!=e&&"object"==typeof e&&!1===Array.isArray(e)};function x(e,t,r){return"function"==typeof r.join?r.join(e):e[0]+t+e[1]}function I(e,t,r){return"function"!=typeof r.isValid||r.isValid(e,t)}function L(e){return k(e)||Array.isArray(e)||"function"==typeof e}var M=Object.prototype.toString;function F(e){return"function"==typeof e.constructor?e.constructor.name:null}var N=function e(t){switch(function(e){if(void 0===e)return"undefined";if(null===e)return"null";var t=typeof e;if("boolean"===t)return"boolean";if("string"===t)return"string";if("number"===t)return"number";if("symbol"===t)return"symbol";if("function"===t)return"GeneratorFunction"===F(e)?"generatorfunction":"function";if(function(e){return Array.isArray?Array.isArray(e):e instanceof Array}(e))return"array";if(function(e){return!(!e.constructor||"function"!=typeof e.constructor.isBuffer)&&e.constructor.isBuffer(e)}(e))return"buffer";if(function(e){try{if("number"==typeof e.length&&"function"==typeof e.callee)return!0}catch(t){if(-1!==t.message.indexOf("callee"))return!0}return!1}(e))return"arguments";if(function(e){return e instanceof Date||"function"==typeof e.toDateString&&"function"==typeof e.getDate&&"function"==typeof e.setDate}(e))return"date";if(function(e){return e instanceof Error||"string"==typeof e.message&&e.constructor&&"number"==typeof e.constructor.stackTraceLimit}(e))return"error";if(function(e){return e instanceof RegExp||"string"==typeof e.flags&&"boolean"==typeof e.ignoreCase&&"boolean"==typeof e.multiline&&"boolean"==typeof e.global}(e))return"regexp";switch(F(e)){case"Symbol":return"symbol";case"Promise":return"promise";case"WeakMap":return"weakmap";case"WeakSet":return"weakset";case"Map":return"map";case"Set":return"set";case"Int8Array":return"int8array";case"Uint8Array":return"uint8array";case"Uint8ClampedArray":return"uint8clampedarray";case"Int16Array":return"int16array";case"Uint16Array":return"uint16array";case"Int32Array":return"int32array";case"Uint32Array":return"uint32array";case"Float32Array":return"float32array";case"Float64Array":return"float64array"}if(function(e){return"function"==typeof e.throw&&"function"==typeof e.return&&"function"==typeof e.next}(e))return"generator";switch(t=M.call(e)){case"[object Object]":return"object";case"[object Map Iterator]":return"mapiterator";case"[object Set Iterator]":return"setiterator";case"[object String Iterator]":return"stringiterator";case"[object Array Iterator]":return"arrayiterator"}return t.slice(8,-1).toLowerCase().replace(/\s/g,"")}(t)){case"boolean":case"date":case"function":case"null":case"number":return!0;case"undefined":return!1;case"regexp":return"(?:)"!==t.source&&""!==t.source;case"buffer":return""!==t.toString();case"error":return""!==t.message;case"string":case"arguments":return 0!==t.length;case"file":case"map":case"set":return 0!==t.size;case"array":case"object":for(const r of Object.keys(t))if(e(t[r]))return!0;return!1;default:return!0}},D=function(e,t,r){return!(null==(n=e)||"object"!=typeof n&&"function"!=typeof n&&!Array.isArray(n)||"string"!=typeof t&&!Array.isArray(t))&&N(function(e,t,r){if(k(r)||(r={default:r}),!L(e))return void 0!==r.default?r.default:e;"number"==typeof t&&(t=String(t));const n=Array.isArray(t),o="string"==typeof t,i=r.separator||".",s=r.joinChar||("string"==typeof i?i:".");if(!o&&!n)return e;if(o&&t in e)return I(t,e,r)?e[t]:r.default;let c=n?t:function(e,t,r){return"function"==typeof r.split?r.split(e):e.split(t)}(t,i,r),f=c.length,a=0;do{let t=c[a];for("number"==typeof t&&(t=String(t));t&&"\\"===t.slice(-1);)t=x([t.slice(0,-1),c[++a]||""],s,r);if(t in e){if(!I(t,e,r))return r.default;e=e[t]}else{let n=!1,o=a+1;for(;o<f;)if(n=(t=x([t,c[o++]],s,r))in e){if(!I(t,e,r))return r.default;e=e[t],a=o-1;break}if(!n)return r.default}}while(++a<f&&L(e));return a===f?e:r.default}(e,t,r));var n};const C=e=>{if((e=>"__proto__"===e||"constructor"===e||"prototype"===e)(e))throw new Error(`Cannot set unsafe key: "${e}"`)};var B=function(e,t){if(null==(r=e)||"object"!=typeof r||!1!==Array.isArray(r))throw new TypeError("expected an object.");var r,n=Array.isArray(t);if(!n&&e.hasOwnProperty(t))return delete e[t],!0;if(D(e,t)){for(var o=n?t.slice():t.split("."),i=o.pop();o.length&&"\\"===o[o.length-1].slice(-1);)i=o.pop().slice(0,-1)+"."+i;for(;o.length;)t=o.shift(),C(t),e=e[t];return delete e[i]}return!0},X={};Object.defineProperty(X,"__esModule",{value:!0}),X.boolean=void 0,X.boolean=function(e){switch(Object.prototype.toString.call(e)){case"[object String]":return["true","t","yes","y","on","1"].includes(e.trim().toLowerCase());case"[object Number]":return 1===e.valueOf();case"[object Boolean]":return e.valueOf();default:return!1}};var H={};Object.defineProperty(H,"__esModule",{value:!0}),H.isBooleanable=void 0,H.isBooleanable=function(e){switch(Object.prototype.toString.call(e)){case"[object String]":return["true","t","yes","y","on","1","false","f","no","n","off","0"].includes(e.trim().toLowerCase());case"[object Number]":return[0,1].includes(e.valueOf());case"[object Boolean]":return!0;default:return!1}};var R={};Object.defineProperty(R,"__esModule",{value:!0}),R.boolean=void 0,Object.defineProperty(R,"boolean",{enumerable:!0,get:function(){return X.boolean}}),Object.defineProperty(R,"isBooleanable",{enumerable:!0,get:function(){return H.isBooleanable}});var U,K,W,z="12.2.3",$=U={};function V(){throw new Error("setTimeout has not been defined")}function G(){throw new Error("clearTimeout has not been defined")}function J(e){if(K===setTimeout)return setTimeout(e,0);if((K===V||!K)&&setTimeout)return K=setTimeout,setTimeout(e,0);try{return K(e,0)}catch(t){try{return K.call(null,e,0)}catch(t){return K.call(this,e,0)}}}!function(){try{K="function"==typeof setTimeout?setTimeout:V}catch(e){K=V}try{W="function"==typeof clearTimeout?clearTimeout:G}catch(e){W=G}}();var q,Q=[],Y=!1,Z=-1;function ee(){Y&&q&&(Y=!1,q.length?Q=q.concat(Q):Z=-1,Q.length&&te())}function te(){if(!Y){var e=J(ee);Y=!0;for(var t=Q.length;t;){for(q=Q,Q=[];++Z<t;)q&&q[Z].run();Z=-1,t=Q.length}q=null,Y=!1,function(e){if(W===clearTimeout)return clearTimeout(e);if((W===G||!W)&&clearTimeout)return W=clearTimeout,clearTimeout(e);try{W(e)}catch(t){try{return W.call(null,e)}catch(t){return W.call(this,e)}}}(e)}}function re(e,t){this.fun=e,this.array=t}function ne(){}$.nextTick=function(e){var t=new Array(arguments.length-1);if(arguments.length>1)for(var r=1;r<arguments.length;r++)t[r-1]=arguments[r];Q.push(new re(e,t)),1!==Q.length||Y||J(te)},re.prototype.run=function(){this.fun.apply(null,this.array)},$.title="browser",$.browser=!0,$.env={},$.argv=[],$.version="",$.versions={},$.on=ne,$.addListener=ne,$.once=ne,$.off=ne,$.removeListener=ne,$.removeAllListeners=ne,$.emit=ne,$.prependListener=ne,$.prependOnceListener=ne,$.listeners=function(e){return[]},$.binding=function(e){throw new Error("process.binding is not supported")},$.cwd=function(){return"/"},$.chdir=function(e){throw new Error("process.chdir is not supported")},$.umask=function(){return 0};var oe={};return function(i){(function(){const{boolean:c}=R,f=Symbol.for("axe.silent"),a=new Set(["config","log"]),u=["trace","debug","info","warn","error","fatal"],p={warning:"warn",err:"error"},g="`level` invalid, must be: "+u.join(", "),d=i.env.HOSTNAME||e.hostname();function b(e){if("object"!=typeof e||null===e)return!1;const t=Object.getPrototypeOf(e);return!(null!==t&&t!==Object.prototype&&null!==Object.getPrototypeOf(t)||Symbol.toStringTag in e||Symbol.iterator in e||s(e))}function A(e){return null==e||"object"==typeof e&&0===Reflect.ownKeys(e).length||"string"==typeof e&&0===e.trim().length}function w(e){return void 0===e}function S(e){return"object"==typeof e&&null!==e&&!Array.isArray(e)}function _(e){return"string"==typeof e}oe=class{constructor(){var e=this;let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};const r={};if(i.env.AXE_REMAPPED_META_FIELDS){const e=i.env.AXE_REMAPPED_META_FIELDS.split(",").map(e=>e.split(":"));for(const[t,n]of e)r[t]=n}let n=i.env.AXE_OMIT_META_FIELDS;"string"==typeof n&&(n=n.split(",").map(e=>e.trim())),Array.isArray(n)||(n=[]);let o=i.env.AXE_PICK_META_FIELDS;"string"==typeof o&&(o=o.split(",").map(e=>e.trim())),Array.isArray(o)||(o=[]),this.config=function(){const e=v(m(h),this!==y&&this||{},h);let t={_:{}};for(var r=arguments.length,n=new Array(r),o=0;o<r;o++)n[o]=arguments[o];for(const i of n)if(void 0!==i){if(!l(i))throw new TypeError("`"+i+"` is not an Option Object");t=v(t,{_:i},e)}return t._}({showStack:!i.env.AXE_SHOW_STACK||c(i.env.AXE_SHOW_STACK),meta:Object.assign({show:!i.env.AXE_SHOW_META||c(i.env.AXE_SHOW_META),remappedFields:r,omittedFields:n,pickedFields:o,cleanupRemapping:!0,hideHTTP:"is_http",hideMeta:"hide_meta"},"object"==typeof t.meta?t.meta:{}),version:z,silent:!1,logger:console,name:d,level:"info",levels:["info","warn","error","fatal"],appInfo:!i.env.AXE_APP_INFO||c(i.env.AXE_APP_INFO),hooks:Object.assign({pre:[],post:[]},"object"==typeof t.hooks?t.hooks:{})},t),this.appInfo=!!this.config.appInfo&&"function"==typeof j&&j(),this.log=this.log.bind(this);const s=Object.keys(this.config.logger).filter(e=>!a.has(e));for(const i of s)this[i]=this.config.logger[i];for(const i of u)"function"!=typeof this.config.logger[i]&&("fatal"===i?this.config.logger.fatal=this.config.logger.error||this.config.logger.info||this.config.logger.log:this.config.logger[i]=this.config.logger.info||this.config.logger.log),this[i]=function(){for(var t=arguments.length,r=new Array(t),n=0;n<t;n++)r[n]=arguments[n];return e.log(i,...Array.prototype.slice.call(r))};this.setLevel=this.setLevel.bind(this),this.getNormalizedLevel=this.getNormalizedLevel.bind(this),this.setName=this.setName.bind(this),this.config.name&&this.setName(this.config.name),this.setLevel(this.config.level),this.err=this.error,this.warning=this.warn,this.pre=function(e,t){this.config.hooks.pre.push((function(r){for(var n=arguments.length,o=new Array(n>1?n-1:0),i=1;i<n;i++)o[i-1]=arguments[i];return e!==r?[...o]:t(...o)}))},this.post=function(e,t){this.config.hooks.post.push((function(r){for(var n=arguments.length,o=new Array(n>1?n-1:0),i=1;i<n;i++)o[i-1]=arguments[i];return e!==r?[...o]:t(...o)}))}}setLevel(e){if(!_(e)||-1===u.indexOf(e))throw new Error(g);_(this.config.logger.logLevel)?this.config.logger.logLevel=e:this.config.logger.level=e,this.config.levels=u.slice(u.indexOf(e))}getNormalizedLevel(e){return _(e)?_(p[e])?p[e]:-1===u.indexOf(e)?"info":e:"info"}setName(e){if(!_(e))throw new Error("`name` must be a String");_(this.config.logger.scope)?this.config.logger.scope=e:this.config.logger.name=e}log(e,i,a){const l=[],g=[];let y=!1,h=!0;w(e)||l.push(e),w(i)||l.push(i),w(a)||l.push(a);for(var d=arguments.length,m=new Array(d>3?d-3:0),v=3;v<d;v++)m[v-3]=arguments[v];for(const t of Array.prototype.slice.call(m))l.push(t);let j=0;if(_(e)&&_(p[e])?e=p[e]:o(e)?(h=!1,a=i,i=e,e="error"):_(e)&&-1!==u.indexOf(e)||(h=!1,a=i,i=e,e=this.getNormalizedLevel(e),j=-1),-1===this.config.levels.indexOf(e))return;let T,k=!1;if((S(i)||Array.isArray(i))&&_(a)){k=!0;const e=a;a=i,i=_(e)&&l.length>=3+j?t(...l.slice(2+j)):e}if(w(i)&&(i=e),1!==l.slice(1+j).length||_(i)||o(i))if(!k&&l.length>=4+j){i=void 0,a={};const r=[];for(const e of l.slice(h&&0===j?1:0))o(e)?g.push(e):r.push(e);r.length>0&&(i=t(...r),y=!0),g.length>0&&"log"===e&&(e="error")}else if(!k&&l.length===3+j&&_(i)&&r.some(e=>-1!==i.indexOf(e)))i=t(i,a),a={};else if(o(i)){if(o(a)){g.push(a);const r=[];o(i)&&(g.unshift(i),i=void 0);for(const e of l.slice(2+j))a!==e&&(o(e)?g.push(e):r.push(e),r.length>0&&(i=t(...r),y=!0));"log"===e&&(e="error"),a={}}}else o(a)?(g.push(a),a={}):S(a)||w(a)||null===a?_(i)||(i=t(i)):(i=t(i,a),a={});else a={message:i},i=e;w(a)||S(a)?S(a)||(a={}):a={original_meta:a},o(i)&&(g.unshift(i),i=void 0),S(a.err)&&(o(a.err)&&g.push(a.err),a.original_err=o(a.err)?E(a.err):a.err),g.length>0&&(1===g.length?T=g[0]:((T=new Error([...new Set(g.map(e=>e.message).filter(Boolean))].join("; "))).stack=[...new Set(g.map(e=>e.stack).filter(Boolean))].join("\n\n"),T.errors=g),a.err=E(T),_(i)||(i=T.message)),a.level=e,this.appInfo&&(a.app=this.appInfo);const x=-1===j?"log":e;for(const t of this.config.hooks.pre)[T,i,a]=t(x,T,i,a);const I=c(a[f]);if(!A(this.config.meta.remappedFields))for(const t of Reflect.ownKeys(this.config.meta.remappedFields))if(P(a,this.config.meta.remappedFields[t],n(a,t)),B(a,t),this.config.meta.cleanupRemapping){const e=t.lastIndexOf(".");if(-1===e)continue;const r=t.slice(0,e);A(n(a,r))&&B(a,r)}if(!A(this.config.meta.omittedFields)||!A(this.config.meta.pickedFields)){const e=function(e){const t=[];return function e(r,n){for(const o of Reflect.ownKeys(r)){const i=r[o],c=s(o)?Symbol.keyFor(o)||o.description:o,f=n?n+"."+c:c;b(i)&&-1===t.indexOf(c)?(t.push(c),e(i,f)):-1===t.indexOf(f)&&t.push(f)}}(e),t}(a);if(!A(this.config.meta.omittedFields))for(const r of this.config.meta.omittedFields){let t=e.length;for(;t--;)(e[t]===r||!s(e[t])&&0===e[t].indexOf(r+"."))&&e.splice(t,1)}const t=[];if(!A(this.config.meta.pickedFields))for(const r of this.config.meta.pickedFields){if(s(r))a[r]&&t.push([r,a[r]]);else{const t=r.indexOf("."),n=r.slice(0,t+1);if(-1!==t){let t=e.length;for(;t--;)(e[t]===n.slice(0,-1)||0===e[t].indexOf(n))&&e.splice(t,1)}}-1===e.indexOf(r)&&e.push(r)}for(const r of e)s(r)?void 0!==a[r]&&t.push([r,a[r]]):void 0!==a[Symbol.for(r)]&&t.push([Symbol.for(r),a[Symbol.for(r)]]);try{a=function(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:".";if(o=e,"[object Object]"!==Object.prototype.toString.call(o)||!t||!Array.isArray(t)&&"string"!=typeof t)return{};var o;const{length:i}=t;if("string"==typeof t||i<2){const o="string"==typeof t?t:t[0],i=n(e,o,r);return void 0!==i?P({},o,i,r):{}}return((e,t,r,o)=>{const i={};for(let s=0;s<r;s++){const r=t[s],c=n(e,r,o);void 0!==c&&P(i,r,c,o)}return i})(e,t,i,r)}(a,e)}catch(T){this.config.logger.error(T)}if(t.length>0)for(const[r,n]of t)a[r]=n}return this.config.silent||I||(o(T)&&this.config.showStack?!this.config.meta.show||A(a)||this.config.meta.hideMeta&&a[this.config.meta.hideMeta]?this.config.logger[x](...y?[i,T]:[T]):this.config.logger[x](...y?[i,T,a]:[T,a]):!this.config.meta.show||A(a)||this.config.meta.hideMeta&&a[this.config.meta.hideMeta]||this.config.meta.hideHTTP&&a[this.config.meta.hideHTTP]?this.config.logger[x](i):this.config.logger[x](i,a)),0===this.config.hooks.post.length?{method:x,err:T,message:i,meta:a}:O(this.config.hooks.post,e=>e(x,T,i,a)).then().catch(e=>{this.config.logger.error(e)})}}}).call(this)}.call(this,U),oe}));
|
package/lib/index.js
CHANGED
|
@@ -49,10 +49,10 @@ function dotifyToArray(obj) {
|
|
|
49
49
|
const convertedKey = isSymbol(key) ? Symbol.keyFor(key) || key.description : key;
|
|
50
50
|
const newKey = current ? current + '.' + convertedKey : convertedKey; // joined key with dot
|
|
51
51
|
// if (value && typeof value === 'object' && !(value instanceof Date) && !ObjectID.isValid(value)) {
|
|
52
|
-
if (isPlainObject(value)) {
|
|
52
|
+
if (isPlainObject(value) && res.indexOf(convertedKey) === -1) {
|
|
53
53
|
res.push(convertedKey);
|
|
54
54
|
recurse(value, newKey); // it's a nested object, so do it again
|
|
55
|
-
} else {
|
|
55
|
+
} else if (res.indexOf(newKey) === -1) {
|
|
56
56
|
res.push(newKey);
|
|
57
57
|
}
|
|
58
58
|
}
|
|
@@ -212,6 +212,8 @@ class Axe {
|
|
|
212
212
|
log(level, message, meta) {
|
|
213
213
|
const originalArgs = [];
|
|
214
214
|
const errors = [];
|
|
215
|
+
let hasMessage = false;
|
|
216
|
+
let hasLevel = true;
|
|
215
217
|
if (!isUndefined(level)) originalArgs.push(level);
|
|
216
218
|
if (!isUndefined(message)) originalArgs.push(message);
|
|
217
219
|
if (!isUndefined(meta)) originalArgs.push(meta);
|
|
@@ -225,10 +227,12 @@ class Axe {
|
|
|
225
227
|
if (isString(level) && isString(aliases[level])) {
|
|
226
228
|
level = aliases[level];
|
|
227
229
|
} else if (isError(level)) {
|
|
230
|
+
hasLevel = false;
|
|
228
231
|
meta = message;
|
|
229
232
|
message = level;
|
|
230
233
|
level = 'error';
|
|
231
234
|
} else if (!isString(level) || levels.indexOf(level) === -1) {
|
|
235
|
+
hasLevel = false;
|
|
232
236
|
meta = message;
|
|
233
237
|
message = level;
|
|
234
238
|
level = this.getNormalizedLevel(level);
|
|
@@ -261,10 +265,16 @@ class Axe {
|
|
|
261
265
|
message = undefined;
|
|
262
266
|
meta = {};
|
|
263
267
|
const messages = [];
|
|
264
|
-
for (const arg of originalArgs) {
|
|
265
|
-
if (isError(arg)) errors.push(arg);
|
|
268
|
+
for (const arg of originalArgs.slice(hasLevel && modifier === 0 ? 1 : 0)) {
|
|
269
|
+
if (isError(arg)) errors.push(arg);
|
|
270
|
+
// pushes number, object, string, etc for formatting
|
|
271
|
+
else messages.push(arg);
|
|
266
272
|
}
|
|
267
|
-
if (
|
|
273
|
+
if (messages.length > 0) {
|
|
274
|
+
message = format(...messages);
|
|
275
|
+
hasMessage = true;
|
|
276
|
+
}
|
|
277
|
+
if (errors.length > 0 && level === 'log') level = 'error';
|
|
268
278
|
} else if (!isBunyan && originalArgs.length === 3 + modifier && isString(message) && formatSpecifiers.some(t => message.indexOf(t) !== -1)) {
|
|
269
279
|
// Otherwise if there are three args and if the `message` contains
|
|
270
280
|
// a placeholder token (e.g. '%s' or '%d' - see above `formatSpecifiers` variable)
|
|
@@ -288,11 +298,21 @@ class Axe {
|
|
|
288
298
|
} else if (isError(meta)) {
|
|
289
299
|
errors.push(meta);
|
|
290
300
|
// handle additional args
|
|
301
|
+
const messages = [];
|
|
302
|
+
if (isError(message)) {
|
|
303
|
+
errors.unshift(message);
|
|
304
|
+
message = undefined;
|
|
305
|
+
}
|
|
291
306
|
for (const arg of originalArgs.slice(2 + modifier)) {
|
|
292
307
|
// should skip this better with slice and modifier adjustment
|
|
293
308
|
if (meta === arg) continue;
|
|
294
|
-
if (isError(arg)) errors.push(arg);
|
|
309
|
+
if (isError(arg)) errors.push(arg);else messages.push(arg);
|
|
310
|
+
if (messages.length > 0) {
|
|
311
|
+
message = format(...messages);
|
|
312
|
+
hasMessage = true;
|
|
313
|
+
}
|
|
295
314
|
}
|
|
315
|
+
if (level === 'log') level = 'error';
|
|
296
316
|
meta = {};
|
|
297
317
|
}
|
|
298
318
|
if (!isUndefined(meta) && !isObject(meta)) meta = {
|
|
@@ -481,11 +501,11 @@ class Axe {
|
|
|
481
501
|
// Show stack trace if necessary (along with any metadata)
|
|
482
502
|
if (isError(err) && this.config.showStack) {
|
|
483
503
|
if (!this.config.meta.show || isEmpty(meta)) {
|
|
484
|
-
this.config.logger[method](err);
|
|
504
|
+
this.config.logger[method](...(hasMessage ? [message, err] : [err]));
|
|
485
505
|
} else if (this.config.meta.hideMeta && meta[this.config.meta.hideMeta]) {
|
|
486
|
-
this.config.logger[method](err);
|
|
506
|
+
this.config.logger[method](...(hasMessage ? [message, err] : [err]));
|
|
487
507
|
} else {
|
|
488
|
-
this.config.logger[method](err, meta);
|
|
508
|
+
this.config.logger[method](...(hasMessage ? [message, err, meta] : [err, meta]));
|
|
489
509
|
}
|
|
490
510
|
} else if (!this.config.meta.show || isEmpty(meta)) {
|
|
491
511
|
this.config.logger[method](message);
|
|
@@ -509,4 +529,4 @@ class Axe {
|
|
|
509
529
|
}
|
|
510
530
|
}
|
|
511
531
|
module.exports = Axe;
|
|
512
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJyZXF1aXJlIiwib3MiLCJmb3JtYXQiLCJmb3JtYXRTcGVjaWZpZXJzIiwiZ2V0IiwiaXNFcnJvciIsImlzU3ltYm9sIiwibWVyZ2VPcHRpb25zIiwicE1hcFNlcmllcyIsInBhcnNlQXBwSW5mbyIsInBhcnNlRXJyIiwicGlja0RlZXAiLCJzZXQiLCJ1bnNldCIsImJvb2xlYW4iLCJwa2ciLCJzaWxlbnRTeW1ib2wiLCJTeW1ib2wiLCJmb3IiLCJvbWl0dGVkTG9nZ2VyS2V5cyIsIlNldCIsImxldmVscyIsImFsaWFzZXMiLCJ3YXJuaW5nIiwiZXJyIiwibGV2ZWxFcnJvciIsImpvaW4iLCJuYW1lIiwicHJvY2VzcyIsImVudiIsIk5PREVfRU5WIiwiSE9TVE5BTUUiLCJob3N0bmFtZSIsImlzUGxhaW5PYmplY3QiLCJ2YWx1ZSIsInByb3RvdHlwZSIsIk9iamVjdCIsImdldFByb3RvdHlwZU9mIiwidG9TdHJpbmdUYWciLCJpdGVyYXRvciIsImRvdGlmeVRvQXJyYXkiLCJvYmoiLCJyZXMiLCJyZWN1cnNlIiwiY3VycmVudCIsImtleSIsIlJlZmxlY3QiLCJvd25LZXlzIiwiY29udmVydGVkS2V5Iiwia2V5Rm9yIiwiZGVzY3JpcHRpb24iLCJuZXdLZXkiLCJwdXNoIiwiaXNFbXB0eSIsInVuZGVmaW5lZCIsImxlbmd0aCIsInRyaW0iLCJpc051bGwiLCJpc1VuZGVmaW5lZCIsImlzT2JqZWN0IiwiQXJyYXkiLCJpc0FycmF5IiwiaXNTdHJpbmciLCJpc0Z1bmN0aW9uIiwiQXhlIiwiY29uc3RydWN0b3IiLCJfdGhpcyIsImNvbmZpZyIsImFyZ3VtZW50cyIsInJlbWFwcGVkRmllbGRzIiwiQVhFX1JFTUFQUEVEX01FVEFfRklFTERTIiwiZmllbGRzIiwiYXJyIiwic3BsaXQiLCJtYXAiLCJ2IiwicHJvcCIsIm9taXR0ZWRGaWVsZHMiLCJBWEVfT01JVF9NRVRBX0ZJRUxEUyIsInMiLCJwaWNrZWRGaWVsZHMiLCJBWEVfUElDS19NRVRBX0ZJRUxEUyIsInNob3dTdGFjayIsIkFYRV9TSE9XX1NUQUNLIiwibWV0YSIsImFzc2lnbiIsInNob3ciLCJBWEVfU0hPV19NRVRBIiwiY2xlYW51cFJlbWFwcGluZyIsImhpZGVIVFRQIiwiaGlkZU1ldGEiLCJ2ZXJzaW9uIiwic2lsZW50IiwibG9nZ2VyIiwiY29uc29sZSIsImxldmVsIiwiYXBwSW5mbyIsIkFYRV9BUFBfSU5GTyIsImhvb2tzIiwicHJlIiwicG9zdCIsImxvZyIsImJpbmQiLCJtZXRob2RzIiwia2V5cyIsImZpbHRlciIsImhhcyIsImVsZW1lbnQiLCJmYXRhbCIsImVycm9yIiwiaW5mbyIsIl9sZW4iLCJhcmdzIiwiX2tleSIsInNsaWNlIiwiY2FsbCIsInNldExldmVsIiwiZ2V0Tm9ybWFsaXplZExldmVsIiwic2V0TmFtZSIsIndhcm4iLCJmbiIsIl9sZXZlbCIsIl9sZW4yIiwiX2tleTIiLCJfbGVuMyIsIl9rZXkzIiwiaW5kZXhPZiIsIkVycm9yIiwibG9nTGV2ZWwiLCJzY29wZSIsIm1lc3NhZ2UiLCJvcmlnaW5hbEFyZ3MiLCJlcnJvcnMiLCJfbGVuNCIsIl9rZXk0IiwiYXJnIiwibW9kaWZpZXIiLCJpc0J1bnlhbiIsIl9tZXRhIiwibWVzc2FnZXMiLCJzb21lIiwidCIsIm9yaWdpbmFsX21ldGEiLCJ1bnNoaWZ0Iiwib3JpZ2luYWxfZXJyIiwiZSIsIkJvb2xlYW4iLCJzdGFjayIsImFwcCIsIm1ldGhvZCIsImhvb2siLCJoYWRUcnVlU2lsZW50U3ltYm9sIiwiaW5kZXgiLCJsYXN0SW5kZXhPZiIsInBhcmVudEtleSIsImRvdGlmaWVkIiwiaSIsInNwbGljZSIsInBpY2tlZFN5bWJvbHMiLCJ0aGVuIiwiY2F0Y2giLCJtb2R1bGUiLCJleHBvcnRzIl0sInNvdXJjZXMiOlsiLi4vc3JjL2luZGV4LmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW5hc3NpZ25lZC1pbXBvcnRcbnJlcXVpcmUoJ2NvbnNvbGUtcG9seWZpbGwnKTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHVuaWNvcm4vcHJlZmVyLW5vZGUtcHJvdG9jb2xcbmNvbnN0IG9zID0gcmVxdWlyZSgnb3MnKTtcbmNvbnN0IGZvcm1hdCA9IHJlcXVpcmUoJ0BsYWRqcy9mb3JtYXQtdXRpbCcpO1xuY29uc3QgZm9ybWF0U3BlY2lmaWVycyA9IHJlcXVpcmUoJ2Zvcm1hdC1zcGVjaWZpZXJzJyk7XG5jb25zdCBnZXQgPSByZXF1aXJlKCdAc3RyaWtlZW50Y28vZ2V0Jyk7XG5jb25zdCBpc0Vycm9yID0gcmVxdWlyZSgnaXNlcnJvcicpO1xuY29uc3QgaXNTeW1ib2wgPSByZXF1aXJlKCdpcy1zeW1ib2wnKTtcbmNvbnN0IG1lcmdlT3B0aW9ucyA9IHJlcXVpcmUoJ21lcmdlLW9wdGlvbnMnKTtcbmNvbnN0IHBNYXBTZXJpZXMgPSByZXF1aXJlKCdwLW1hcC1zZXJpZXMnKTtcbmNvbnN0IHBhcnNlQXBwSW5mbyA9IHJlcXVpcmUoJ3BhcnNlLWFwcC1pbmZvJyk7XG5jb25zdCBwYXJzZUVyciA9IHJlcXVpcmUoJ3BhcnNlLWVycicpO1xuY29uc3QgcGlja0RlZXAgPSByZXF1aXJlKCdwaWNrLWRlZXAnKTtcbmNvbnN0IHNldCA9IHJlcXVpcmUoJ0BzdHJpa2VlbnRjby9zZXQnKTtcbmNvbnN0IHVuc2V0ID0gcmVxdWlyZSgndW5zZXQtdmFsdWUnKTtcbmNvbnN0IHsgYm9vbGVhbiB9ID0gcmVxdWlyZSgnYm9vbGVhbicpO1xuY29uc3QgcGtnID0gcmVxdWlyZSgnLi4vcGFja2FnZS5qc29uJyk7XG5cbmNvbnN0IHNpbGVudFN5bWJvbCA9IFN5bWJvbC5mb3IoJ2F4ZS5zaWxlbnQnKTtcbmNvbnN0IG9taXR0ZWRMb2dnZXJLZXlzID0gbmV3IFNldChbJ2NvbmZpZycsICdsb2cnXSk7XG5jb25zdCBsZXZlbHMgPSBbJ3RyYWNlJywgJ2RlYnVnJywgJ2luZm8nLCAnd2FybicsICdlcnJvcicsICdmYXRhbCddO1xuY29uc3QgYWxpYXNlcyA9IHsgd2FybmluZzogJ3dhcm4nLCBlcnI6ICdlcnJvcicgfTtcbmNvbnN0IGxldmVsRXJyb3IgPSBgXFxgbGV2ZWxcXGAgaW52YWxpZCwgbXVzdCBiZTogJHtsZXZlbHMuam9pbignLCAnKX1gO1xuY29uc3QgbmFtZSA9XG4gIHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAnZGV2ZWxvcG1lbnQnXG4gICAgPyBmYWxzZVxuICAgIDogcHJvY2Vzcy5lbnYuSE9TVE5BTUUgfHwgb3MuaG9zdG5hbWUoKTtcblxuLy8gPGh0dHBzOi8vZ2l0aHViLmNvbS9zaW5kcmVzb3JodXMvaXMtcGxhaW4tb2JqL2Jsb2IvbWFpbi9pbmRleC5qcz5cbmZ1bmN0aW9uIGlzUGxhaW5PYmplY3QodmFsdWUpIHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ29iamVjdCcgfHwgdmFsdWUgPT09IG51bGwpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBjb25zdCBwcm90b3R5cGUgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YodmFsdWUpO1xuICByZXR1cm4gKFxuICAgIChwcm90b3R5cGUgPT09IG51bGwgfHxcbiAgICAgIHByb3RvdHlwZSA9PT0gT2JqZWN0LnByb3RvdHlwZSB8fFxuICAgICAgT2JqZWN0LmdldFByb3RvdHlwZU9mKHByb3RvdHlwZSkgPT09IG51bGwpICYmXG4gICAgIShTeW1ib2wudG9TdHJpbmdUYWcgaW4gdmFsdWUpICYmXG4gICAgIShTeW1ib2wuaXRlcmF0b3IgaW4gdmFsdWUpICYmXG4gICAgIWlzU3ltYm9sKHZhbHVlKVxuICApO1xufVxuXG4vLyA8aHR0cHM6Ly9naXRodWIuY29tL0dlZW5lblRpamQvZG90aWZ5L2Jsb2IvbWFzdGVyL2RvdGlmeS5qcz5cbmZ1bmN0aW9uIGRvdGlmeVRvQXJyYXkob2JqKSB7XG4gIGNvbnN0IHJlcyA9IFtdO1xuICBmdW5jdGlvbiByZWN1cnNlKG9iaiwgY3VycmVudCkge1xuICAgIGZvciAoY29uc3Qga2V5IG9mIFJlZmxlY3Qub3duS2V5cyhvYmopKSB7XG4gICAgICBjb25zdCB2YWx1ZSA9IG9ialtrZXldO1xuICAgICAgY29uc3QgY29udmVydGVkS2V5ID0gaXNTeW1ib2woa2V5KVxuICAgICAgICA/IFN5bWJvbC5rZXlGb3Ioa2V5KSB8fCBrZXkuZGVzY3JpcHRpb25cbiAgICAgICAgOiBrZXk7XG4gICAgICBjb25zdCBuZXdLZXkgPSBjdXJyZW50ID8gY3VycmVudCArICcuJyArIGNvbnZlcnRlZEtleSA6IGNvbnZlcnRlZEtleTsgLy8gam9pbmVkIGtleSB3aXRoIGRvdFxuICAgICAgLy8gaWYgKHZhbHVlICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgISh2YWx1ZSBpbnN0YW5jZW9mIERhdGUpICYmICFPYmplY3RJRC5pc1ZhbGlkKHZhbHVlKSkge1xuICAgICAgaWYgKGlzUGxhaW5PYmplY3QodmFsdWUpKSB7XG4gICAgICAgIHJlcy5wdXNoKGNvbnZlcnRlZEtleSk7XG4gICAgICAgIHJlY3Vyc2UodmFsdWUsIG5ld0tleSk7IC8vIGl0J3MgYSBuZXN0ZWQgb2JqZWN0LCBzbyBkbyBpdCBhZ2FpblxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzLnB1c2gobmV3S2V5KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZWN1cnNlKG9iaik7XG4gIHJldHVybiByZXM7XG59XG5cbi8vIDxodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL2EvNDMyMzMxNjM+XG5mdW5jdGlvbiBpc0VtcHR5KHZhbHVlKSB7XG4gIHJldHVybiAoXG4gICAgdmFsdWUgPT09IHVuZGVmaW5lZCB8fFxuICAgIHZhbHVlID09PSBudWxsIHx8XG4gICAgKHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgUmVmbGVjdC5vd25LZXlzKHZhbHVlKS5sZW5ndGggPT09IDApIHx8XG4gICAgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgJiYgdmFsdWUudHJpbSgpLmxlbmd0aCA9PT0gMClcbiAgKTtcbn1cblxuZnVuY3Rpb24gaXNOdWxsKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSA9PT0gbnVsbDtcbn1cblxuZnVuY3Rpb24gaXNVbmRlZmluZWQodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlID09PSB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIGlzT2JqZWN0KHZhbHVlKSB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlICE9PSBudWxsICYmICFBcnJheS5pc0FycmF5KHZhbHVlKTtcbn1cblxuZnVuY3Rpb24gaXNTdHJpbmcodmFsdWUpIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZyc7XG59XG5cbmZ1bmN0aW9uIGlzRnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJztcbn1cblxuY2xhc3MgQXhlIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbXBsZXhpdHlcbiAgY29uc3RydWN0b3IoY29uZmlnID0ge30pIHtcbiAgICBjb25zdCByZW1hcHBlZEZpZWxkcyA9IHt9O1xuICAgIGlmIChwcm9jZXNzLmVudi5BWEVfUkVNQVBQRURfTUVUQV9GSUVMRFMpIHtcbiAgICAgIGNvbnN0IGZpZWxkcyA9IHByb2Nlc3MuZW52LkFYRV9SRU1BUFBFRF9NRVRBX0ZJRUxEUztcbiAgICAgIGNvbnN0IGFyciA9IGZpZWxkcy5zcGxpdCgnLCcpLm1hcCgodikgPT4gdi5zcGxpdCgnOicpKTtcbiAgICAgIGZvciAoY29uc3QgW3Byb3AsIHZhbHVlXSBvZiBhcnIpIHtcbiAgICAgICAgcmVtYXBwZWRGaWVsZHNbcHJvcF0gPSB2YWx1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBlbnZpZnkgZG9lcyBub3Qgc3VwcG9ydCBjb25kaXRpb25hbHMgd2VsbCBlbm91Z2ggc28gd2UgZGVjbGFyZSB2YXJzIG91dHNpZGVcbiAgICBsZXQgb21pdHRlZEZpZWxkcyA9IHByb2Nlc3MuZW52LkFYRV9PTUlUX01FVEFfRklFTERTO1xuICAgIGlmICh0eXBlb2Ygb21pdHRlZEZpZWxkcyA9PT0gJ3N0cmluZycpXG4gICAgICBvbWl0dGVkRmllbGRzID0gb21pdHRlZEZpZWxkcy5zcGxpdCgnLCcpLm1hcCgocykgPT4gcy50cmltKCkpO1xuICAgIGlmICghQXJyYXkuaXNBcnJheShvbWl0dGVkRmllbGRzKSkgb21pdHRlZEZpZWxkcyA9IFtdO1xuXG4gICAgbGV0IHBpY2tlZEZpZWxkcyA9IHByb2Nlc3MuZW52LkFYRV9QSUNLX01FVEFfRklFTERTO1xuICAgIGlmICh0eXBlb2YgcGlja2VkRmllbGRzID09PSAnc3RyaW5nJylcbiAgICAgIHBpY2tlZEZpZWxkcyA9IHBpY2tlZEZpZWxkcy5zcGxpdCgnLCcpLm1hcCgocykgPT4gcy50cmltKCkpO1xuICAgIGlmICghQXJyYXkuaXNBcnJheShwaWNrZWRGaWVsZHMpKSBwaWNrZWRGaWVsZHMgPSBbXTtcblxuICAgIHRoaXMuY29uZmlnID0gbWVyZ2VPcHRpb25zKFxuICAgICAge1xuICAgICAgICBzaG93U3RhY2s6IHByb2Nlc3MuZW52LkFYRV9TSE9XX1NUQUNLXG4gICAgICAgICAgPyBib29sZWFuKHByb2Nlc3MuZW52LkFYRV9TSE9XX1NUQUNLKVxuICAgICAgICAgIDogdHJ1ZSxcbiAgICAgICAgbWV0YTogT2JqZWN0LmFzc2lnbihcbiAgICAgICAgICB7XG4gICAgICAgICAgICBzaG93OiBwcm9jZXNzLmVudi5BWEVfU0hPV19NRVRBXG4gICAgICAgICAgICAgID8gYm9vbGVhbihwcm9jZXNzLmVudi5BWEVfU0hPV19NRVRBKVxuICAgICAgICAgICAgICA6IHRydWUsXG4gICAgICAgICAgICByZW1hcHBlZEZpZWxkcyxcbiAgICAgICAgICAgIG9taXR0ZWRGaWVsZHMsXG4gICAgICAgICAgICBwaWNrZWRGaWVsZHMsXG4gICAgICAgICAgICBjbGVhbnVwUmVtYXBwaW5nOiB0cnVlLFxuICAgICAgICAgICAgaGlkZUhUVFA6ICdpc19odHRwJyxcbiAgICAgICAgICAgIC8vIGltcGxlbWVudGVkIG1haW5seSBmb3IgQGxhZGpzL2dyYWNlZnVsIHRvXG4gICAgICAgICAgICAvLyBzdXBwcmVzcyB1bm5lY2Vzc2FyeSBtZXRhIG91dHB1dCB0byBjb25zb2xlXG4gICAgICAgICAgICBoaWRlTWV0YTogJ2hpZGVfbWV0YSdcbiAgICAgICAgICB9LFxuICAgICAgICAgIHR5cGVvZiBjb25maWcubWV0YSA9PT0gJ29iamVjdCcgPyBjb25maWcubWV0YSA6IHt9XG4gICAgICAgICksXG4gICAgICAgIHZlcnNpb246IHBrZy52ZXJzaW9uLFxuICAgICAgICBzaWxlbnQ6IGZhbHNlLFxuICAgICAgICBsb2dnZXI6IGNvbnNvbGUsXG4gICAgICAgIG5hbWUsXG4gICAgICAgIGxldmVsOiAnaW5mbycsXG4gICAgICAgIGxldmVsczogWydpbmZvJywgJ3dhcm4nLCAnZXJyb3InLCAnZmF0YWwnXSxcbiAgICAgICAgYXBwSW5mbzogcHJvY2Vzcy5lbnYuQVhFX0FQUF9JTkZPXG4gICAgICAgICAgPyBib29sZWFuKHByb2Nlc3MuZW52LkFYRV9BUFBfSU5GTylcbiAgICAgICAgICA6IHRydWUsXG4gICAgICAgIGhvb2tzOiBPYmplY3QuYXNzaWduKFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHByZTogW10sXG4gICAgICAgICAgICBwb3N0OiBbXVxuICAgICAgICAgIH0sXG4gICAgICAgICAgdHlwZW9mIGNvbmZpZy5ob29rcyA9PT0gJ29iamVjdCcgPyBjb25maWcuaG9va3MgOiB7fVxuICAgICAgICApXG4gICAgICB9LFxuICAgICAgY29uZmlnXG4gICAgKTtcblxuICAgIHRoaXMuYXBwSW5mbyA9IHRoaXMuY29uZmlnLmFwcEluZm9cbiAgICAgID8gaXNGdW5jdGlvbihwYXJzZUFwcEluZm8pXG4gICAgICAgID8gcGFyc2VBcHBJbmZvKClcbiAgICAgICAgOiBmYWxzZVxuICAgICAgOiBmYWxzZTtcblxuICAgIHRoaXMubG9nID0gdGhpcy5sb2cuYmluZCh0aGlzKTtcblxuICAgIC8vIEluaGVyaXQgbWV0aG9kcyBmcm9tIHBhcmVudCBsb2dnZXJcbiAgICBjb25zdCBtZXRob2RzID0gT2JqZWN0LmtleXModGhpcy5jb25maWcubG9nZ2VyKS5maWx0ZXIoXG4gICAgICAoa2V5KSA9PiAhb21pdHRlZExvZ2dlcktleXMuaGFzKGtleSlcbiAgICApO1xuICAgIGZvciAoY29uc3QgZWxlbWVudCBvZiBtZXRob2RzKSB7XG4gICAgICB0aGlzW2VsZW1lbnRdID0gdGhpcy5jb25maWcubG9nZ2VyW2VsZW1lbnRdO1xuICAgIH1cblxuICAgIC8vIEJpbmQgaGVscGVyIGZ1bmN0aW9ucyBmb3IgZWFjaCBsb2cgbGV2ZWxcbiAgICBmb3IgKGNvbnN0IGVsZW1lbnQgb2YgbGV2ZWxzKSB7XG4gICAgICAvLyBFbnN1cmUgZnVuY3Rpb24gZXhpc3RzIGluIGxvZ2dlciBwYXNzZWRcbiAgICAgIGlmICh0eXBlb2YgdGhpcy5jb25maWcubG9nZ2VyW2VsZW1lbnRdICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGlmIChlbGVtZW50ID09PSAnZmF0YWwnKSB7XG4gICAgICAgICAgdGhpcy5jb25maWcubG9nZ2VyLmZhdGFsID1cbiAgICAgICAgICAgIHRoaXMuY29uZmlnLmxvZ2dlci5lcnJvciB8fFxuICAgICAgICAgICAgdGhpcy5jb25maWcubG9nZ2VyLmluZm8gfHxcbiAgICAgICAgICAgIHRoaXMuY29uZmlnLmxvZ2dlci5sb2c7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5jb25maWcubG9nZ2VyW2VsZW1lbnRdID1cbiAgICAgICAgICAgIHRoaXMuY29uZmlnLmxvZ2dlci5pbmZvIHx8IHRoaXMuY29uZmlnLmxvZ2dlci5sb2c7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gQmluZCBsb2cgaGFuZGxlciB3aGljaCBub3JtYWxpemVzIGFyZ3MgYW5kIHBvcHVsYXRlcyBtZXRhXG4gICAgICB0aGlzW2VsZW1lbnRdID0gKC4uLmFyZ3MpID0+XG4gICAgICAgIHRoaXMubG9nKGVsZW1lbnQsIC4uLkFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3MpKTtcbiAgICB9XG5cbiAgICB0aGlzLnNldExldmVsID0gdGhpcy5zZXRMZXZlbC5iaW5kKHRoaXMpO1xuICAgIHRoaXMuZ2V0Tm9ybWFsaXplZExldmVsID0gdGhpcy5nZXROb3JtYWxpemVkTGV2ZWwuYmluZCh0aGlzKTtcbiAgICB0aGlzLnNldE5hbWUgPSB0aGlzLnNldE5hbWUuYmluZCh0aGlzKTtcblxuICAgIC8vIFNldCB0aGUgbG9nZ2VyIG5hbWVcbiAgICBpZiAodGhpcy5jb25maWcubmFtZSkgdGhpcy5zZXROYW1lKHRoaXMuY29uZmlnLm5hbWUpO1xuXG4gICAgLy8gU2V0IHRoZSBsb2dnZXIgbGV2ZWxcbiAgICB0aGlzLnNldExldmVsKHRoaXMuY29uZmlnLmxldmVsKTtcblxuICAgIC8vIEFsaWFzZXNcbiAgICB0aGlzLmVyciA9IHRoaXMuZXJyb3I7XG4gICAgdGhpcy53YXJuaW5nID0gdGhpcy53YXJuO1xuXG4gICAgLy8gUHJlIGFuZCBQb3N0IEhvb2tzXG4gICAgdGhpcy5wcmUgPSBmdW5jdGlvbiAobGV2ZWwsIGZuKSB7XG4gICAgICB0aGlzLmNvbmZpZy5ob29rcy5wcmUucHVzaChmdW5jdGlvbiAoX2xldmVsLCAuLi5hcmdzKSB7XG4gICAgICAgIGlmIChsZXZlbCAhPT0gX2xldmVsKSByZXR1cm4gWy4uLmFyZ3NdO1xuICAgICAgICByZXR1cm4gZm4oLi4uYXJncyk7XG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgdGhpcy5wb3N0ID0gZnVuY3Rpb24gKGxldmVsLCBmbikge1xuICAgICAgdGhpcy5jb25maWcuaG9va3MucG9zdC5wdXNoKGZ1bmN0aW9uIChfbGV2ZWwsIC4uLmFyZ3MpIHtcbiAgICAgICAgaWYgKGxldmVsICE9PSBfbGV2ZWwpIHJldHVybiBbLi4uYXJnc107XG4gICAgICAgIHJldHVybiBmbiguLi5hcmdzKTtcbiAgICAgIH0pO1xuICAgIH07XG4gIH1cblxuICBzZXRMZXZlbChsZXZlbCkge1xuICAgIGlmICghaXNTdHJpbmcobGV2ZWwpIHx8IGxldmVscy5pbmRleE9mKGxldmVsKSA9PT0gLTEpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IobGV2ZWxFcnJvcik7XG4gICAgLy8gU3VwcG9ydCBzaWduYWxlIGxvZ2dlciBhbmQgb3RoZXIgbG9nZ2VycyB0aGF0IHVzZSBgbG9nTGV2ZWxgXG4gICAgaWYgKGlzU3RyaW5nKHRoaXMuY29uZmlnLmxvZ2dlci5sb2dMZXZlbCkpXG4gICAgICB0aGlzLmNvbmZpZy5sb2dnZXIubG9nTGV2ZWwgPSBsZXZlbDtcbiAgICBlbHNlIHRoaXMuY29uZmlnLmxvZ2dlci5sZXZlbCA9IGxldmVsO1xuICAgIC8vIEFkanVzdHMgYHRoaXMuY29uZmlnLmxldmVsc2AgYXJyYXlcbiAgICAvLyBzbyB0aGF0IGl0IGhhcyBhbGwgcHJvY2VlZGluZyAoaW5jbHVzaXZlKVxuICAgIHRoaXMuY29uZmlnLmxldmVscyA9IGxldmVscy5zbGljZShsZXZlbHMuaW5kZXhPZihsZXZlbCkpO1xuICB9XG5cbiAgZ2V0Tm9ybWFsaXplZExldmVsKGxldmVsKSB7XG4gICAgaWYgKCFpc1N0cmluZyhsZXZlbCkpIHJldHVybiAnaW5mbyc7XG4gICAgaWYgKGlzU3RyaW5nKGFsaWFzZXNbbGV2ZWxdKSkgcmV0dXJuIGFsaWFzZXNbbGV2ZWxdO1xuICAgIGlmIChsZXZlbHMuaW5kZXhPZihsZXZlbCkgPT09IC0xKSByZXR1cm4gJ2luZm8nO1xuICAgIHJldHVybiBsZXZlbDtcbiAgfVxuXG4gIHNldE5hbWUobmFtZSkge1xuICAgIGlmICghaXNTdHJpbmcobmFtZSkpIHRocm93IG5ldyBFcnJvcignYG5hbWVgIG11c3QgYmUgYSBTdHJpbmcnKTtcbiAgICAvLyBTdXBwb3J0IHNpZ25hbGUgbG9nZ2VyIGFuZCBvdGhlciBsb2dnZXJzIHRoYXQgdXNlIGBzY29wZWBcbiAgICBpZiAoaXNTdHJpbmcodGhpcy5jb25maWcubG9nZ2VyLnNjb3BlKSkgdGhpcy5jb25maWcubG9nZ2VyLnNjb3BlID0gbmFtZTtcbiAgICBlbHNlIHRoaXMuY29uZmlnLmxvZ2dlci5uYW1lID0gbmFtZTtcbiAgfVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb21wbGV4aXR5XG4gIGxvZyhsZXZlbCwgbWVzc2FnZSwgbWV0YSwgLi4uYXJncykge1xuICAgIGNvbnN0IG9yaWdpbmFsQXJncyA9IFtdO1xuICAgIGNvbnN0IGVycm9ycyA9IFtdO1xuICAgIGlmICghaXNVbmRlZmluZWQobGV2ZWwpKSBvcmlnaW5hbEFyZ3MucHVzaChsZXZlbCk7XG4gICAgaWYgKCFpc1VuZGVmaW5lZChtZXNzYWdlKSkgb3JpZ2luYWxBcmdzLnB1c2gobWVzc2FnZSk7XG4gICAgaWYgKCFpc1VuZGVmaW5lZChtZXRhKSkgb3JpZ2luYWxBcmdzLnB1c2gobWV0YSk7XG4gICAgZm9yIChjb25zdCBhcmcgb2YgQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJncykpIHtcbiAgICAgIG9yaWdpbmFsQXJncy5wdXNoKGFyZyk7XG4gICAgfVxuXG4gICAgbGV0IG1vZGlmaWVyID0gMDtcblxuICAgIGlmIChpc1N0cmluZyhsZXZlbCkgJiYgaXNTdHJpbmcoYWxpYXNlc1tsZXZlbF0pKSB7XG4gICAgICBsZXZlbCA9IGFsaWFzZXNbbGV2ZWxdO1xuICAgIH0gZWxzZSBpZiAoaXNFcnJvcihsZXZlbCkpIHtcbiAgICAgIG1ldGEgPSBtZXNzYWdlO1xuICAgICAgbWVzc2FnZSA9IGxldmVsO1xuICAgICAgbGV2ZWwgPSAnZXJyb3InO1xuICAgIH0gZWxzZSBpZiAoIWlzU3RyaW5nKGxldmVsKSB8fCBsZXZlbHMuaW5kZXhPZihsZXZlbCkgPT09IC0xKSB7XG4gICAgICBtZXRhID0gbWVzc2FnZTtcbiAgICAgIG1lc3NhZ2UgPSBsZXZlbDtcbiAgICAgIGxldmVsID0gdGhpcy5nZXROb3JtYWxpemVkTGV2ZWwobGV2ZWwpO1xuICAgICAgbW9kaWZpZXIgPSAtMTtcbiAgICB9XG5cbiAgICAvLyBSZXR1cm4gZWFybHkgaWYgaXQgaXMgbm90IGEgdmFsaWQgbG9nZ2luZyBsZXZlbFxuICAgIGlmICh0aGlzLmNvbmZpZy5sZXZlbHMuaW5kZXhPZihsZXZlbCkgPT09IC0xKSByZXR1cm47XG5cbiAgICAvLyBCdW55YW4gc3VwcG9ydCAobWV0YSwgbWVzc2FnZSwgLi4uYXJncylcbiAgICBsZXQgaXNCdW55YW4gPSBmYWxzZTtcbiAgICBpZiAoKGlzT2JqZWN0KG1lc3NhZ2UpIHx8IEFycmF5LmlzQXJyYXkobWVzc2FnZSkpICYmIGlzU3RyaW5nKG1ldGEpKSB7XG4gICAgICBpc0J1bnlhbiA9IHRydWU7XG4gICAgICBjb25zdCBfbWV0YSA9IG1ldGE7XG4gICAgICBtZXRhID0gbWVzc2FnZTtcbiAgICAgIG1lc3NhZ2UgPVxuICAgICAgICBpc1N0cmluZyhfbWV0YSkgJiYgb3JpZ2luYWxBcmdzLmxlbmd0aCA+PSAzICsgbW9kaWZpZXJcbiAgICAgICAgICA/IGZvcm1hdCguLi5vcmlnaW5hbEFyZ3Muc2xpY2UoMiArIG1vZGlmaWVyKSlcbiAgICAgICAgICA6IF9tZXRhO1xuICAgIH1cblxuICAgIC8vIElmIG1lc3NhZ2Ugd2FzIHVuZGVmaW5lZCB0aGVuIHNldCBpdCB0byBsZXZlbFxuICAgIGlmIChpc1VuZGVmaW5lZChtZXNzYWdlKSkgbWVzc2FnZSA9IGxldmVsO1xuXG4gICAgLy8gSWYgb25seSBgbWVzc2FnZWAgd2FzIHBhc3NlZCB0aGVuIGlmIGl0IHdhcyBhbiBPYmplY3RcbiAgICAvLyBwcmVzZXJ2ZSBpdCBhcyBhbiBPYmplY3QgYnkgc2V0dGluZyBpdCBhcyBtZXRhXG4gICAgaWYgKFxuICAgICAgb3JpZ2luYWxBcmdzLnNsaWNlKDEgKyBtb2RpZmllcikubGVuZ3RoID09PSAxICYmXG4gICAgICAhaXNTdHJpbmcobWVzc2FnZSkgJiZcbiAgICAgICFpc0Vycm9yKG1lc3NhZ2UpXG4gICAgKSB7XG4gICAgICBtZXRhID0geyBtZXNzYWdlIH07XG4gICAgICBtZXNzYWdlID0gbGV2ZWw7XG4gICAgfSBlbHNlIGlmICghaXNCdW55YW4gJiYgb3JpZ2luYWxBcmdzLmxlbmd0aCA+PSA0ICsgbW9kaWZpZXIpIHtcbiAgICAgIG1lc3NhZ2UgPSB1bmRlZmluZWQ7XG5cbiAgICAgIG1ldGEgPSB7fTtcbiAgICAgIGNvbnN0IG1lc3NhZ2VzID0gW107XG4gICAgICBmb3IgKGNvbnN0IGFyZyBvZiBvcmlnaW5hbEFyZ3MpIHtcbiAgICAgICAgaWYgKGlzRXJyb3IoYXJnKSkgZXJyb3JzLnB1c2goYXJnKTtcbiAgICAgICAgZWxzZSBpZiAoaXNTdHJpbmcoYXJnKSkgbWVzc2FnZXMucHVzaChhcmcpO1xuICAgICAgfVxuXG4gICAgICBpZiAoZXJyb3JzLmxlbmd0aCA9PT0gMCAmJiBtZXNzYWdlcy5sZW5ndGggPiAwKVxuICAgICAgICBtZXNzYWdlID0gZm9ybWF0KC4uLm1lc3NhZ2VzKTtcbiAgICAgIGVsc2UgaWYgKGVycm9ycy5sZW5ndGggPiAwICYmIGxldmVsID09PSAnbG9nJykgbGV2ZWwgPSAnZXJyb3InO1xuICAgIH0gZWxzZSBpZiAoXG4gICAgICAhaXNCdW55YW4gJiZcbiAgICAgIG9yaWdpbmFsQXJncy5sZW5ndGggPT09IDMgKyBtb2RpZmllciAmJlxuICAgICAgaXNTdHJpbmcobWVzc2FnZSkgJiZcbiAgICAgIGZvcm1hdFNwZWNpZmllcnMuc29tZSgodCkgPT4gbWVzc2FnZS5pbmRleE9mKHQpICE9PSAtMSlcbiAgICApIHtcbiAgICAgIC8vIE90aGVyd2lzZSBpZiB0aGVyZSBhcmUgdGhyZWUgYXJncyBhbmQgaWYgdGhlIGBtZXNzYWdlYCBjb250YWluc1xuICAgICAgLy8gYSBwbGFjZWhvbGRlciB0b2tlbiAoZS5nLiAnJXMnIG9yICclZCcgLSBzZWUgYWJvdmUgYGZvcm1hdFNwZWNpZmllcnNgIHZhcmlhYmxlKVxuICAgICAgLy8gdGhlbiB3ZSBjYW4gaW5mZXIgdGhhdCB0aGUgYG1ldGFgIGFyZyBwYXNzZWQgaXMgdXNlZCBmb3IgZm9ybWF0dGluZ1xuICAgICAgbWVzc2FnZSA9IGZvcm1hdChtZXNzYWdlLCBtZXRhKTtcbiAgICAgIG1ldGEgPSB7fTtcbiAgICB9IGVsc2UgaWYgKCFpc0Vycm9yKG1lc3NhZ2UpKSB7XG4gICAgICBpZiAoaXNFcnJvcihtZXRhKSkge1xuICAgICAgICBlcnJvcnMucHVzaChtZXRhKTtcbiAgICAgICAgbWV0YSA9IHt9O1xuICAgICAgfSBlbHNlIGlmICghaXNPYmplY3QobWV0YSkgJiYgIWlzVW5kZWZpbmVkKG1ldGEpICYmICFpc051bGwobWV0YSkpIHtcbiAgICAgICAgLy8gSWYgdGhlIGBtZXRhYCB2YXJpYWJsZSBwYXNzZWQgd2FzIG5vdCBhbiBPYmplY3QgdGhlbiBjb252ZXJ0IGl0XG4gICAgICAgIG1lc3NhZ2UgPSBmb3JtYXQobWVzc2FnZSwgbWV0YSk7XG4gICAgICAgIG1ldGEgPSB7fTtcbiAgICAgIH0gZWxzZSBpZiAoIWlzU3RyaW5nKG1lc3NhZ2UpKSB7XG4gICAgICAgIC8vIElmIHRoZSBtZXNzYWdlIGlzIG5vdCBhIHN0cmluZyB0aGVuIHdlIHNob3VsZCBydW4gYHV0aWwuZm9ybWF0YCBvbiBpdFxuICAgICAgICAvLyBhc3N1bWluZyB3ZSdyZSBmb3JtYXR0aW5nIGl0IGxpa2UgaXQgd2FzIGFub3RoZXIgYXJndW1lbnRcbiAgICAgICAgLy8gKGFzIG9wcG9zZWQgdG8gdXNpbmcgc29tZXRoaW5nIGxpa2UgZmFzdC1qc29uLXN0cmluZ2lmeSlcbiAgICAgICAgbWVzc2FnZSA9IGZvcm1hdChtZXNzYWdlKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGlzRXJyb3IobWV0YSkpIHtcbiAgICAgIGVycm9ycy5wdXNoKG1ldGEpO1xuICAgICAgLy8gaGFuZGxlIGFkZGl0aW9uYWwgYXJnc1xuICAgICAgZm9yIChjb25zdCBhcmcgb2Ygb3JpZ2luYWxBcmdzLnNsaWNlKDIgKyBtb2RpZmllcikpIHtcbiAgICAgICAgLy8gc2hvdWxkIHNraXAgdGhpcyBiZXR0ZXIgd2l0aCBzbGljZSBhbmQgbW9kaWZpZXIgYWRqdXN0bWVudFxuICAgICAgICBpZiAobWV0YSA9PT0gYXJnKSBjb250aW51ZTtcbiAgICAgICAgaWYgKGlzRXJyb3IoYXJnKSkgZXJyb3JzLnB1c2goYXJnKTtcbiAgICAgIH1cblxuICAgICAgbWV0YSA9IHt9O1xuICAgIH1cblxuICAgIGlmICghaXNVbmRlZmluZWQobWV0YSkgJiYgIWlzT2JqZWN0KG1ldGEpKSBtZXRhID0geyBvcmlnaW5hbF9tZXRhOiBtZXRhIH07XG4gICAgZWxzZSBpZiAoIWlzT2JqZWN0KG1ldGEpKSBtZXRhID0ge307XG5cbiAgICBpZiAoaXNFcnJvcihtZXNzYWdlKSkge1xuICAgICAgZXJyb3JzLnVuc2hpZnQobWVzc2FnZSk7XG4gICAgICBtZXNzYWdlID0gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIC8vXG4gICAgLy8gcmV3cml0ZSBgbWV0YS5lcnJgIHRvIGBtZXRhLm9yaWdpbmFsX2VycmAgZm9yIGNvbnNpc3RlbmN5XG4gICAgLy8gKGluIGNhc2Ugc29tZW9uZSBoYXMgYW4gb2JqZWN0IHdpdGggYC5lcnJgIHByb3BlcnR5IG9uIGl0IHdpdGggYW4gZXJyb3IpXG4gICAgLy9cbiAgICBpZiAoaXNPYmplY3QobWV0YS5lcnIpKSB7XG4gICAgICBpZiAoaXNFcnJvcihtZXRhLmVycikpIGVycm9ycy5wdXNoKG1ldGEuZXJyKTtcbiAgICAgIG1ldGEub3JpZ2luYWxfZXJyID0gaXNFcnJvcihtZXRhLmVycikgPyBwYXJzZUVycihtZXRhLmVycikgOiBtZXRhLmVycjtcbiAgICB9XG5cbiAgICBsZXQgZXJyO1xuICAgIGlmIChlcnJvcnMubGVuZ3RoID4gMCkge1xuICAgICAgaWYgKGVycm9ycy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgZXJyID0gZXJyb3JzWzBdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZXJyID0gbmV3IEVycm9yKFxuICAgICAgICAgIFsuLi5uZXcgU2V0KGVycm9ycy5tYXAoKGUpID0+IGUubWVzc2FnZSkuZmlsdGVyKEJvb2xlYW4pKV0uam9pbignOyAnKVxuICAgICAgICApO1xuICAgICAgICBlcnIuc3RhY2sgPSBbXG4gICAgICAgICAgLi4ubmV3IFNldChlcnJvcnMubWFwKChlKSA9PiBlLnN0YWNrKS5maWx0ZXIoQm9vbGVhbikpXG4gICAgICAgIF0uam9pbignXFxuXFxuJyk7XG4gICAgICAgIGVyci5lcnJvcnMgPSBlcnJvcnM7XG4gICAgICB9XG5cbiAgICAgIG1ldGEuZXJyID0gcGFyc2VFcnIoZXJyKTtcbiAgICAgIGlmICghaXNTdHJpbmcobWVzc2FnZSkpIG1lc3NhZ2UgPSBlcnIubWVzc2FnZTtcbiAgICB9XG5cbiAgICAvL1xuICAgIC8vIE5PVEU6IHRoaXMgd2FzIHJlbW92ZWQgaW4gdjEwLjIuMiBkdWUgdG8gY2lyY3VsYXIgcmVmZXJlbmNlIGlzc3Vlc1xuICAgIC8vICAgICAgICh0aGUgd29ya2Fyb3VuZCB3b3VsZCBpbnZvbHZlIHNhZmVTdHJpbmdpZnkgYW5kIHRoZW4gSlNPTi5wYXJzZSB3aGljaCB3b3VsZCBiZSBwZXJmIGJsb2F0KVxuICAgIC8vICAgICAgICh0aGVyZSBzdGlsbCBtaWdodCBiZSBhbm90aGVyIHdvcmthcm91bmQgb3IgcGVyaGFwcyB3ZSBkb24ndCBhZGQgYWxsIHRoZSBhcmdzIGhlcmUgZXhjZXB0IGFkZGl0aW9uYWwpXG4gICAgLy9cbiAgICAvLyBTZXQgYGFyZ3NgIHByb3Agd2l0aCBvcmlnaW5hbCBhcmd1bWVudHMgcGFzc2VkXG4gICAgLy8gbWV0YS5hcmdzID0gb3JpZ2luYWxBcmdzO1xuXG4gICAgLy8gU2V0IGRlZmF1bHQgbGV2ZWwgb24gbWV0YVxuICAgIG1ldGEubGV2ZWwgPSBsZXZlbDtcblxuICAgIC8vIEFkZCBgYXBwYCBvYmplY3QgdG8gbWV0YWRhdGFcbiAgICBpZiAodGhpcy5hcHBJbmZvKSBtZXRhLmFwcCA9IHRoaXMuYXBwSW5mbztcblxuICAgIC8vXG4gICAgLy8gZGV0ZXJtaW5lIGxvZyBtZXRob2QgdG8gdXNlXG4gICAgLy9cbiAgICAvLyBpZiB3ZSBkaWRuJ3QgcGFzcyBhIGxldmVsIGFzIGEgbWV0aG9kXG4gICAgLy8gKGUuZy4gY29uc29sZS5pbmZvKSwgdGhlbiB3ZSBzaG91bGQgc3RpbGxcbiAgICAvLyB1c2UgdGhlIGxvZ2dlcidzIGBsb2dgIG1ldGhvZCB0byBvdXRwdXRcbiAgICAvL1xuICAgIC8vIGFuZCBmYXRhbCBzaG91bGQgdXNlIGVycm9yIChlLmcuIGluIGJyb3dzZXIpXG4gICAgLy9cbiAgICBjb25zdCBtZXRob2QgPSBtb2RpZmllciA9PT0gLTEgPyAnbG9nJyA6IGxldmVsO1xuXG4gICAgLy8gcHJlLWhvb2tzXG4gICAgZm9yIChjb25zdCBob29rIG9mIHRoaXMuY29uZmlnLmhvb2tzLnByZSkge1xuICAgICAgW2VyciwgbWVzc2FnZSwgbWV0YV0gPSBob29rKG1ldGhvZCwgZXJyLCBtZXNzYWdlLCBtZXRhKTtcbiAgICB9XG5cbiAgICAvL1xuICAgIC8vIE5PVEU6IHVzaW5nIGxvZGFzaCBfLm9taXQgYW5kIF8ucGljayB3b3VsZCBoYXZlIGJlZW4gX3Zlcnkgc2xvd19cbiAgICAvL1xuICAgIC8vIGNvbnN0IG9taXR0ZWRBbmRQaWNrZWRGaWVsZHMgPSB7XG4gICAgLy8gICAuLi5fLm9taXQobWV0YSwgdGhpcy5jb25maWcubWV0YS5vbWl0dGVkRmllbGRzKSxcbiAgICAvLyAgIC4uLl8ucGljayhtZXRhLCB0aGlzLmNvbmZpZy5tZXRhLnBpY2tlZEZpZWxkcylcbiAgICAvLyB9O1xuICAgIC8vXG4gICAgLy8gYWxzbyB3ZSBkb24ndCB3YW50IHRvIG11dGF0ZSBhbnl0aGluZyBpbiBgbWV0YWBcbiAgICAvLyBhbmQgaWRlYWxseSB3ZSBvbmx5IHdhbnQgdG8gcGljayBleGFjdGx5IHdoYXQgd2UgbmVlZFxuICAgIC8vIChhbmQgbm90IGhhdmUgdHdvIG9wZXJhdGlvbnMsIG9uZSBmb3Igb21pdCwgYW5kIG9uZSBmb3IgcGljaylcbiAgICAvL1xuXG4gICAgLy8gc2V0IGEgYm9vbGVhbiBmbGFnIGlmIHdlIGhhZCB0aGUgc2lsZW50IHN5bWJvbCBvciBub3RcbiAgICBjb25zdCBoYWRUcnVlU2lsZW50U3ltYm9sID0gYm9vbGVhbihtZXRhW3NpbGVudFN5bWJvbF0pO1xuXG4gICAgaWYgKCFpc0VtcHR5KHRoaXMuY29uZmlnLm1ldGEucmVtYXBwZWRGaWVsZHMpKSB7XG4gICAgICBmb3IgKGNvbnN0IGtleSBvZiBSZWZsZWN0Lm93bktleXModGhpcy5jb25maWcubWV0YS5yZW1hcHBlZEZpZWxkcykpIHtcbiAgICAgICAgc2V0KG1ldGEsIHRoaXMuY29uZmlnLm1ldGEucmVtYXBwZWRGaWVsZHNba2V5XSwgZ2V0KG1ldGEsIGtleSkpO1xuICAgICAgICB1bnNldChtZXRhLCBrZXkpO1xuICAgICAgICAvLyBjbGVhbnVwIGVtcHR5IG9iamVjdHMgYWZ0ZXIgcmVtYXBwaW5nXG4gICAgICAgIGlmICh0aGlzLmNvbmZpZy5tZXRhLmNsZWFudXBSZW1hcHBpbmcpIHtcbiAgICAgICAgICBjb25zdCBpbmRleCA9IGtleS5sYXN0SW5kZXhPZignLicpO1xuICAgICAgICAgIGlmIChpbmRleCA9PT0gLTEpIGNvbnRpbnVlO1xuICAgICAgICAgIGNvbnN0IHBhcmVudEtleSA9IGtleS5zbGljZSgwLCBpbmRleCk7XG4gICAgICAgICAgaWYgKGlzRW1wdHkoZ2V0KG1ldGEsIHBhcmVudEtleSkpKSB1bnNldChtZXRhLCBwYXJlbnRLZXkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgIWlzRW1wdHkodGhpcy5jb25maWcubWV0YS5vbWl0dGVkRmllbGRzKSB8fFxuICAgICAgIWlzRW1wdHkodGhpcy5jb25maWcubWV0YS5waWNrZWRGaWVsZHMpXG4gICAgKSB7XG4gICAgICBjb25zdCBkb3RpZmllZCA9IGRvdGlmeVRvQXJyYXkobWV0YSk7XG4gICAgICAvLyBkb3RpZmllZCA9IFtcbiAgICAgIC8vICAgJ2Vyci5uYW1lJyxcbiAgICAgIC8vICAgJ2Vyci5tZXNzYWdlJyxcbiAgICAgIC8vICAgJ2Vyci5zdGFjaycsXG4gICAgICAvLyAgICdsZXZlbCcsXG4gICAgICAvLyAgICdhcHAubmFtZScsXG4gICAgICAvLyAgICdhcHAudmVyc2lvbicsXG4gICAgICAvLyAgICdhcHAubm9kZScsXG4gICAgICAvLyAgICdhcHAuaGFzaCcsXG4gICAgICAvLyAgIC8vIC4uLlxuICAgICAgLy8gXVxuXG4gICAgICBpZiAoIWlzRW1wdHkodGhpcy5jb25maWcubWV0YS5vbWl0dGVkRmllbGRzKSkge1xuICAgICAgICBmb3IgKGNvbnN0IHByb3Agb2YgdGhpcy5jb25maWcubWV0YS5vbWl0dGVkRmllbGRzKSB7XG4gICAgICAgICAgLy8gPGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vYS85ODgyMzQ5PlxuICAgICAgICAgIGxldCBpID0gZG90aWZpZWQubGVuZ3RoO1xuICAgICAgICAgIHdoaWxlIChpLS0pIHtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgZG90aWZpZWRbaV0gPT09IHByb3AgfHxcbiAgICAgICAgICAgICAgKCFpc1N5bWJvbChkb3RpZmllZFtpXSkgJiYgZG90aWZpZWRbaV0uaW5kZXhPZihgJHtwcm9wfS5gKSA9PT0gMClcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgZG90aWZpZWQuc3BsaWNlKGksIDEpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBjb25zdCBwaWNrZWRTeW1ib2xzID0gW107XG5cbiAgICAgIGlmICghaXNFbXB0eSh0aGlzLmNvbmZpZy5tZXRhLnBpY2tlZEZpZWxkcykpIHtcbiAgICAgICAgZm9yIChjb25zdCBwcm9wIG9mIHRoaXMuY29uZmlnLm1ldGEucGlja2VkRmllbGRzKSB7XG4gICAgICAgICAgLy8gcmVzcG9uc2UuaGVhZGVycy5ib29wXG4gICAgICAgICAgLy8gcmVzcG9uc2UuaGVhZGVycy5iZWVwXG4gICAgICAgICAgLy8gcmVzcG9uc2UuYm9keVxuICAgICAgICAgIC8vIHJlc3BvbnNlLnRleHRcbiAgICAgICAgICAvLyByZXNwb25zZVxuICAgICAgICAgIC8vXG4gICAgICAgICAgLy8gc28gd2UgbmVlZCB0byBzcGxpdCBieSB0aGUgZmlyc3QgcGVyaW9kIGFuZCBvbWl0IGFueSBrZXlzIGZyb20gZG90aWZpZWQgc3RhcnRpbmcgd2l0aCBpdFxuICAgICAgICAgIGlmIChpc1N5bWJvbChwcm9wKSkge1xuICAgICAgICAgICAgaWYgKG1ldGFbcHJvcF0pIHBpY2tlZFN5bWJvbHMucHVzaChbcHJvcCwgbWV0YVtwcm9wXV0pO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBpbmRleCA9IHByb3AuaW5kZXhPZignLicpO1xuICAgICAgICAgICAgY29uc3Qga2V5ID0gcHJvcC5zbGljZSgwLCBpbmRleCArIDEpO1xuICAgICAgICAgICAgaWYgKGluZGV4ICE9PSAtMSkge1xuICAgICAgICAgICAgICBsZXQgaSA9IGRvdGlmaWVkLmxlbmd0aDtcbiAgICAgICAgICAgICAgd2hpbGUgKGktLSkge1xuICAgICAgICAgICAgICAgIGlmIChkb3RpZmllZFtpXSA9PT0ga2V5LnNsaWNlKDAsIC0xKSkgZG90aWZpZWQuc3BsaWNlKGksIDEpO1xuICAgICAgICAgICAgICAgIGVsc2UgaWYgKGRvdGlmaWVkW2ldLmluZGV4T2Yoa2V5KSA9PT0gMCkgZG90aWZpZWQuc3BsaWNlKGksIDEpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gZmluYWxseSBhZGQgaXQgaWYgaXQgZGlkIG5vdCBhbHJlYWR5IGV4aXN0XG4gICAgICAgICAgaWYgKGRvdGlmaWVkLmluZGV4T2YocHJvcCkgPT09IC0xKSBkb3RpZmllZC5wdXNoKHByb3ApO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vXG4gICAgICAvLyBpdGVyYXRlIG92ZXIgYWxsIGRvdGlmaWVkIHZhbHVlcyB0byBjaGVjayBmb3Igc3ltYm9sc1xuICAgICAgLy9cbiAgICAgIC8vIE5PVEU6IHRoaXMgZG9lcyBub3QgdGFrZSBpbnRvIGFjY291bnQgdGhhdCB0aGV5IGNvdWxkIGFscmVhZHkgYmUgaW4gYHBpY2tlZFN5bWJvbHNgXG4gICAgICAvLyAgICAgICAoYW5kIGl0IGRvZXNuJ3QgYWxzbyBkbyBiaWdpbnRzIHlldClcbiAgICAgIC8vXG4gICAgICBmb3IgKGNvbnN0IHByb3Agb2YgZG90aWZpZWQpIHtcbiAgICAgICAgaWYgKGlzU3ltYm9sKHByb3ApKSB7XG4gICAgICAgICAgaWYgKG1ldGFbcHJvcF0gIT09IHVuZGVmaW5lZCkgcGlja2VkU3ltYm9scy5wdXNoKFtwcm9wLCBtZXRhW3Byb3BdXSk7XG4gICAgICAgIH0gZWxzZSBpZiAobWV0YVtTeW1ib2wuZm9yKHByb3ApXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgcGlja2VkU3ltYm9scy5wdXNoKFtTeW1ib2wuZm9yKHByb3ApLCBtZXRhW1N5bWJvbC5mb3IocHJvcCldXSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy9cbiAgICAgIC8vIG5vdyB3ZSBjYWxsIHBpY2stZGVlcCB1c2luZyB0aGUgZmluYWwgYXJyYXlcbiAgICAgIC8vXG4gICAgICAvLyBOT1RFOiB0aGlzIGRvZXMgbm90IHBpY2sgc3ltYm9scywgYmlnaW50cywgbm9yIHN0cmVhbXNcbiAgICAgIC8vICAgICAgIDxodHRwczovL2dpdGh1Yi5jb20vc3RyaWtlZW50Y28vcGljay1kZWVwL2lzc3Vlcy8yPlxuICAgICAgLy8gICAgICAgPGh0dHBzOi8vZ2l0aHViLmNvbS9zdHJpa2VlbnRjby9waWNrLWRlZXAvaXNzdWVzLzI+XG4gICAgICAvL1xuICAgICAgLy8gTk9URTogdGhpcyBpcyB3cmFwcGVkIGluIHRyeS9jYXRjaCBpbiBjYXNlIHNpbWlsYXIgZXJyb3JzIG9jY3VyXG4gICAgICAvLyAgICAgICA8aHR0cHM6Ly9naXRodWIuY29tL3N0cmlwZS9zdHJpcGUtbm9kZS9pc3N1ZXMvMTc5Nj5cbiAgICAgIC8vXG4gICAgICB0cnkge1xuICAgICAgICBtZXRhID0gcGlja0RlZXAobWV0YSwgZG90aWZpZWQpO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIHRoaXMuY29uZmlnLmxvZ2dlci5lcnJvcihlcnIpO1xuICAgICAgfVxuXG4gICAgICAvL1xuICAgICAgLy8gaWYgdGhlcmUgd2VyZSBhbnkgdG9wLWxldmVsIHN5bWJvbHMgdG8gYmVcbiAgICAgIC8vIHBpY2tlZCB0aGVuIHdlIG5lZWQgdG8gYWRkIHRoZW0gYmFjayBoZXJlIHRvIHRoZSBsaXN0XG4gICAgICAvL1xuICAgICAgLy8gTk9URTogd2UnZCBwcm9iYWJseSB3YW50IHRvIGRvIHRoZSBzYW1lIGZvciBiaWdpbnRzIGFzIHN5bWJvbHNcbiAgICAgIC8vXG4gICAgICBpZiAocGlja2VkU3ltYm9scy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIHBpY2tlZFN5bWJvbHMpIHtcbiAgICAgICAgICBtZXRhW2tleV0gPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIG9ubHkgaW52b2tlIGxvZ2dlciBtZXRob2RzIGlmIGl0IHdhcyBub3Qgc2lsZW50XG4gICAgaWYgKCF0aGlzLmNvbmZpZy5zaWxlbnQgJiYgIWhhZFRydWVTaWxlbnRTeW1ib2wpIHtcbiAgICAgIC8vIFNob3cgc3RhY2sgdHJhY2UgaWYgbmVjZXNzYXJ5IChhbG9uZyB3aXRoIGFueSBtZXRhZGF0YSlcbiAgICAgIGlmIChpc0Vycm9yKGVycikgJiYgdGhpcy5jb25maWcuc2hvd1N0YWNrKSB7XG4gICAgICAgIGlmICghdGhpcy5jb25maWcubWV0YS5zaG93IHx8IGlzRW1wdHkobWV0YSkpIHtcbiAgICAgICAgICB0aGlzLmNvbmZpZy5sb2dnZXJbbWV0aG9kXShlcnIpO1xuICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgIHRoaXMuY29uZmlnLm1ldGEuaGlkZU1ldGEgJiZcbiAgICAgICAgICBtZXRhW3RoaXMuY29uZmlnLm1ldGEuaGlkZU1ldGFdXG4gICAgICAgICkge1xuICAgICAgICAgIHRoaXMuY29uZmlnLmxvZ2dlclttZXRob2RdKGVycik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5jb25maWcubG9nZ2VyW21ldGhvZF0oZXJyLCBtZXRhKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICghdGhpcy5jb25maWcubWV0YS5zaG93IHx8IGlzRW1wdHkobWV0YSkpIHtcbiAgICAgICAgdGhpcy5jb25maWcubG9nZ2VyW21ldGhvZF0obWVzc2FnZSk7XG4gICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAodGhpcy5jb25maWcubWV0YS5oaWRlTWV0YSAmJiBtZXRhW3RoaXMuY29uZmlnLm1ldGEuaGlkZU1ldGFdKSB8fFxuICAgICAgICAodGhpcy5jb25maWcubWV0YS5oaWRlSFRUUCAmJiBtZXRhW3RoaXMuY29uZmlnLm1ldGEuaGlkZUhUVFBdKVxuICAgICAgKSB7XG4gICAgICAgIHRoaXMuY29uZmlnLmxvZ2dlclttZXRob2RdKG1lc3NhZ2UpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5jb25maWcubG9nZ2VyW21ldGhvZF0obWVzc2FnZSwgbWV0YSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gcG9zdC1ob29rc1xuICAgIGlmICh0aGlzLmNvbmZpZy5ob29rcy5wb3N0Lmxlbmd0aCA9PT0gMClcbiAgICAgIHJldHVybiB7IG1ldGhvZCwgZXJyLCBtZXNzYWdlLCBtZXRhIH07XG4gICAgcmV0dXJuIHBNYXBTZXJpZXModGhpcy5jb25maWcuaG9va3MucG9zdCwgKGhvb2spID0+XG4gICAgICBob29rKG1ldGhvZCwgZXJyLCBtZXNzYWdlLCBtZXRhKVxuICAgIClcbiAgICAgIC50aGVuKClcbiAgICAgIC5jYXRjaCgoZXJyKSA9PiB7XG4gICAgICAgIHRoaXMuY29uZmlnLmxvZ2dlci5lcnJvcihlcnIpO1xuICAgICAgfSk7XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBBeGU7XG4iXSwibWFwcGluZ3MiOiI7O0FBQUE7QUFDQUEs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
|
|
532
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJyZXF1aXJlIiwib3MiLCJmb3JtYXQiLCJmb3JtYXRTcGVjaWZpZXJzIiwiZ2V0IiwiaXNFcnJvciIsImlzU3ltYm9sIiwibWVyZ2VPcHRpb25zIiwicE1hcFNlcmllcyIsInBhcnNlQXBwSW5mbyIsInBhcnNlRXJyIiwicGlja0RlZXAiLCJzZXQiLCJ1bnNldCIsImJvb2xlYW4iLCJwa2ciLCJzaWxlbnRTeW1ib2wiLCJTeW1ib2wiLCJmb3IiLCJvbWl0dGVkTG9nZ2VyS2V5cyIsIlNldCIsImxldmVscyIsImFsaWFzZXMiLCJ3YXJuaW5nIiwiZXJyIiwibGV2ZWxFcnJvciIsImpvaW4iLCJuYW1lIiwicHJvY2VzcyIsImVudiIsIk5PREVfRU5WIiwiSE9TVE5BTUUiLCJob3N0bmFtZSIsImlzUGxhaW5PYmplY3QiLCJ2YWx1ZSIsInByb3RvdHlwZSIsIk9iamVjdCIsImdldFByb3RvdHlwZU9mIiwidG9TdHJpbmdUYWciLCJpdGVyYXRvciIsImRvdGlmeVRvQXJyYXkiLCJvYmoiLCJyZXMiLCJyZWN1cnNlIiwiY3VycmVudCIsImtleSIsIlJlZmxlY3QiLCJvd25LZXlzIiwiY29udmVydGVkS2V5Iiwia2V5Rm9yIiwiZGVzY3JpcHRpb24iLCJuZXdLZXkiLCJpbmRleE9mIiwicHVzaCIsImlzRW1wdHkiLCJ1bmRlZmluZWQiLCJsZW5ndGgiLCJ0cmltIiwiaXNOdWxsIiwiaXNVbmRlZmluZWQiLCJpc09iamVjdCIsIkFycmF5IiwiaXNBcnJheSIsImlzU3RyaW5nIiwiaXNGdW5jdGlvbiIsIkF4ZSIsImNvbnN0cnVjdG9yIiwiX3RoaXMiLCJjb25maWciLCJhcmd1bWVudHMiLCJyZW1hcHBlZEZpZWxkcyIsIkFYRV9SRU1BUFBFRF9NRVRBX0ZJRUxEUyIsImZpZWxkcyIsImFyciIsInNwbGl0IiwibWFwIiwidiIsInByb3AiLCJvbWl0dGVkRmllbGRzIiwiQVhFX09NSVRfTUVUQV9GSUVMRFMiLCJzIiwicGlja2VkRmllbGRzIiwiQVhFX1BJQ0tfTUVUQV9GSUVMRFMiLCJzaG93U3RhY2siLCJBWEVfU0hPV19TVEFDSyIsIm1ldGEiLCJhc3NpZ24iLCJzaG93IiwiQVhFX1NIT1dfTUVUQSIsImNsZWFudXBSZW1hcHBpbmciLCJoaWRlSFRUUCIsImhpZGVNZXRhIiwidmVyc2lvbiIsInNpbGVudCIsImxvZ2dlciIsImNvbnNvbGUiLCJsZXZlbCIsImFwcEluZm8iLCJBWEVfQVBQX0lORk8iLCJob29rcyIsInByZSIsInBvc3QiLCJsb2ciLCJiaW5kIiwibWV0aG9kcyIsImtleXMiLCJmaWx0ZXIiLCJoYXMiLCJlbGVtZW50IiwiZmF0YWwiLCJlcnJvciIsImluZm8iLCJfbGVuIiwiYXJncyIsIl9rZXkiLCJzbGljZSIsImNhbGwiLCJzZXRMZXZlbCIsImdldE5vcm1hbGl6ZWRMZXZlbCIsInNldE5hbWUiLCJ3YXJuIiwiZm4iLCJfbGV2ZWwiLCJfbGVuMiIsIl9rZXkyIiwiX2xlbjMiLCJfa2V5MyIsIkVycm9yIiwibG9nTGV2ZWwiLCJzY29wZSIsIm1lc3NhZ2UiLCJvcmlnaW5hbEFyZ3MiLCJlcnJvcnMiLCJoYXNNZXNzYWdlIiwiaGFzTGV2ZWwiLCJfbGVuNCIsIl9rZXk0IiwiYXJnIiwibW9kaWZpZXIiLCJpc0J1bnlhbiIsIl9tZXRhIiwibWVzc2FnZXMiLCJzb21lIiwidCIsInVuc2hpZnQiLCJvcmlnaW5hbF9tZXRhIiwib3JpZ2luYWxfZXJyIiwiZSIsIkJvb2xlYW4iLCJzdGFjayIsImFwcCIsIm1ldGhvZCIsImhvb2siLCJoYWRUcnVlU2lsZW50U3ltYm9sIiwiaW5kZXgiLCJsYXN0SW5kZXhPZiIsInBhcmVudEtleSIsImRvdGlmaWVkIiwiaSIsInNwbGljZSIsInBpY2tlZFN5bWJvbHMiLCJ0aGVuIiwiY2F0Y2giLCJtb2R1bGUiLCJleHBvcnRzIl0sInNvdXJjZXMiOlsiLi4vc3JjL2luZGV4LmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW5hc3NpZ25lZC1pbXBvcnRcbnJlcXVpcmUoJ2NvbnNvbGUtcG9seWZpbGwnKTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHVuaWNvcm4vcHJlZmVyLW5vZGUtcHJvdG9jb2xcbmNvbnN0IG9zID0gcmVxdWlyZSgnb3MnKTtcbmNvbnN0IGZvcm1hdCA9IHJlcXVpcmUoJ0BsYWRqcy9mb3JtYXQtdXRpbCcpO1xuY29uc3QgZm9ybWF0U3BlY2lmaWVycyA9IHJlcXVpcmUoJ2Zvcm1hdC1zcGVjaWZpZXJzJyk7XG5jb25zdCBnZXQgPSByZXF1aXJlKCdAc3RyaWtlZW50Y28vZ2V0Jyk7XG5jb25zdCBpc0Vycm9yID0gcmVxdWlyZSgnaXNlcnJvcicpO1xuY29uc3QgaXNTeW1ib2wgPSByZXF1aXJlKCdpcy1zeW1ib2wnKTtcbmNvbnN0IG1lcmdlT3B0aW9ucyA9IHJlcXVpcmUoJ21lcmdlLW9wdGlvbnMnKTtcbmNvbnN0IHBNYXBTZXJpZXMgPSByZXF1aXJlKCdwLW1hcC1zZXJpZXMnKTtcbmNvbnN0IHBhcnNlQXBwSW5mbyA9IHJlcXVpcmUoJ3BhcnNlLWFwcC1pbmZvJyk7XG5jb25zdCBwYXJzZUVyciA9IHJlcXVpcmUoJ3BhcnNlLWVycicpO1xuY29uc3QgcGlja0RlZXAgPSByZXF1aXJlKCdwaWNrLWRlZXAnKTtcbmNvbnN0IHNldCA9IHJlcXVpcmUoJ0BzdHJpa2VlbnRjby9zZXQnKTtcbmNvbnN0IHVuc2V0ID0gcmVxdWlyZSgndW5zZXQtdmFsdWUnKTtcbmNvbnN0IHsgYm9vbGVhbiB9ID0gcmVxdWlyZSgnYm9vbGVhbicpO1xuY29uc3QgcGtnID0gcmVxdWlyZSgnLi4vcGFja2FnZS5qc29uJyk7XG5cbmNvbnN0IHNpbGVudFN5bWJvbCA9IFN5bWJvbC5mb3IoJ2F4ZS5zaWxlbnQnKTtcbmNvbnN0IG9taXR0ZWRMb2dnZXJLZXlzID0gbmV3IFNldChbJ2NvbmZpZycsICdsb2cnXSk7XG5jb25zdCBsZXZlbHMgPSBbJ3RyYWNlJywgJ2RlYnVnJywgJ2luZm8nLCAnd2FybicsICdlcnJvcicsICdmYXRhbCddO1xuY29uc3QgYWxpYXNlcyA9IHsgd2FybmluZzogJ3dhcm4nLCBlcnI6ICdlcnJvcicgfTtcbmNvbnN0IGxldmVsRXJyb3IgPSBgXFxgbGV2ZWxcXGAgaW52YWxpZCwgbXVzdCBiZTogJHtsZXZlbHMuam9pbignLCAnKX1gO1xuY29uc3QgbmFtZSA9XG4gIHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAnZGV2ZWxvcG1lbnQnXG4gICAgPyBmYWxzZVxuICAgIDogcHJvY2Vzcy5lbnYuSE9TVE5BTUUgfHwgb3MuaG9zdG5hbWUoKTtcblxuLy8gPGh0dHBzOi8vZ2l0aHViLmNvbS9zaW5kcmVzb3JodXMvaXMtcGxhaW4tb2JqL2Jsb2IvbWFpbi9pbmRleC5qcz5cbmZ1bmN0aW9uIGlzUGxhaW5PYmplY3QodmFsdWUpIHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ29iamVjdCcgfHwgdmFsdWUgPT09IG51bGwpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBjb25zdCBwcm90b3R5cGUgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YodmFsdWUpO1xuICByZXR1cm4gKFxuICAgIChwcm90b3R5cGUgPT09IG51bGwgfHxcbiAgICAgIHByb3RvdHlwZSA9PT0gT2JqZWN0LnByb3RvdHlwZSB8fFxuICAgICAgT2JqZWN0LmdldFByb3RvdHlwZU9mKHByb3RvdHlwZSkgPT09IG51bGwpICYmXG4gICAgIShTeW1ib2wudG9TdHJpbmdUYWcgaW4gdmFsdWUpICYmXG4gICAgIShTeW1ib2wuaXRlcmF0b3IgaW4gdmFsdWUpICYmXG4gICAgIWlzU3ltYm9sKHZhbHVlKVxuICApO1xufVxuXG4vLyA8aHR0cHM6Ly9naXRodWIuY29tL0dlZW5lblRpamQvZG90aWZ5L2Jsb2IvbWFzdGVyL2RvdGlmeS5qcz5cbmZ1bmN0aW9uIGRvdGlmeVRvQXJyYXkob2JqKSB7XG4gIGNvbnN0IHJlcyA9IFtdO1xuICBmdW5jdGlvbiByZWN1cnNlKG9iaiwgY3VycmVudCkge1xuICAgIGZvciAoY29uc3Qga2V5IG9mIFJlZmxlY3Qub3duS2V5cyhvYmopKSB7XG4gICAgICBjb25zdCB2YWx1ZSA9IG9ialtrZXldO1xuICAgICAgY29uc3QgY29udmVydGVkS2V5ID0gaXNTeW1ib2woa2V5KVxuICAgICAgICA/IFN5bWJvbC5rZXlGb3Ioa2V5KSB8fCBrZXkuZGVzY3JpcHRpb25cbiAgICAgICAgOiBrZXk7XG4gICAgICBjb25zdCBuZXdLZXkgPSBjdXJyZW50ID8gY3VycmVudCArICcuJyArIGNvbnZlcnRlZEtleSA6IGNvbnZlcnRlZEtleTsgLy8gam9pbmVkIGtleSB3aXRoIGRvdFxuICAgICAgLy8gaWYgKHZhbHVlICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgISh2YWx1ZSBpbnN0YW5jZW9mIERhdGUpICYmICFPYmplY3RJRC5pc1ZhbGlkKHZhbHVlKSkge1xuICAgICAgaWYgKGlzUGxhaW5PYmplY3QodmFsdWUpICYmIHJlcy5pbmRleE9mKGNvbnZlcnRlZEtleSkgPT09IC0xKSB7XG4gICAgICAgIHJlcy5wdXNoKGNvbnZlcnRlZEtleSk7XG4gICAgICAgIHJlY3Vyc2UodmFsdWUsIG5ld0tleSk7IC8vIGl0J3MgYSBuZXN0ZWQgb2JqZWN0LCBzbyBkbyBpdCBhZ2FpblxuICAgICAgfSBlbHNlIGlmIChyZXMuaW5kZXhPZihuZXdLZXkpID09PSAtMSkge1xuICAgICAgICByZXMucHVzaChuZXdLZXkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJlY3Vyc2Uob2JqKTtcbiAgcmV0dXJuIHJlcztcbn1cblxuLy8gPGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vYS80MzIzMzE2Mz5cbmZ1bmN0aW9uIGlzRW1wdHkodmFsdWUpIHtcbiAgcmV0dXJuIChcbiAgICB2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8XG4gICAgdmFsdWUgPT09IG51bGwgfHxcbiAgICAodHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiBSZWZsZWN0Lm93bktleXModmFsdWUpLmxlbmd0aCA9PT0gMCkgfHxcbiAgICAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyAmJiB2YWx1ZS50cmltKCkubGVuZ3RoID09PSAwKVxuICApO1xufVxuXG5mdW5jdGlvbiBpc051bGwodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlID09PSBudWxsO1xufVxuXG5mdW5jdGlvbiBpc1VuZGVmaW5lZCh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgPT09IHVuZGVmaW5lZDtcbn1cblxuZnVuY3Rpb24gaXNPYmplY3QodmFsdWUpIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgIT09IG51bGwgJiYgIUFycmF5LmlzQXJyYXkodmFsdWUpO1xufVxuXG5mdW5jdGlvbiBpc1N0cmluZyh2YWx1ZSkge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJztcbn1cblxuZnVuY3Rpb24gaXNGdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nO1xufVxuXG5jbGFzcyBBeGUge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29tcGxleGl0eVxuICBjb25zdHJ1Y3Rvcihjb25maWcgPSB7fSkge1xuICAgIGNvbnN0IHJlbWFwcGVkRmllbGRzID0ge307XG4gICAgaWYgKHByb2Nlc3MuZW52LkFYRV9SRU1BUFBFRF9NRVRBX0ZJRUxEUykge1xuICAgICAgY29uc3QgZmllbGRzID0gcHJvY2Vzcy5lbnYuQVhFX1JFTUFQUEVEX01FVEFfRklFTERTO1xuICAgICAgY29uc3QgYXJyID0gZmllbGRzLnNwbGl0KCcsJykubWFwKCh2KSA9PiB2LnNwbGl0KCc6JykpO1xuICAgICAgZm9yIChjb25zdCBbcHJvcCwgdmFsdWVdIG9mIGFycikge1xuICAgICAgICByZW1hcHBlZEZpZWxkc1twcm9wXSA9IHZhbHVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIGVudmlmeSBkb2VzIG5vdCBzdXBwb3J0IGNvbmRpdGlvbmFscyB3ZWxsIGVub3VnaCBzbyB3ZSBkZWNsYXJlIHZhcnMgb3V0c2lkZVxuICAgIGxldCBvbWl0dGVkRmllbGRzID0gcHJvY2Vzcy5lbnYuQVhFX09NSVRfTUVUQV9GSUVMRFM7XG4gICAgaWYgKHR5cGVvZiBvbWl0dGVkRmllbGRzID09PSAnc3RyaW5nJylcbiAgICAgIG9taXR0ZWRGaWVsZHMgPSBvbWl0dGVkRmllbGRzLnNwbGl0KCcsJykubWFwKChzKSA9PiBzLnRyaW0oKSk7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KG9taXR0ZWRGaWVsZHMpKSBvbWl0dGVkRmllbGRzID0gW107XG5cbiAgICBsZXQgcGlja2VkRmllbGRzID0gcHJvY2Vzcy5lbnYuQVhFX1BJQ0tfTUVUQV9GSUVMRFM7XG4gICAgaWYgKHR5cGVvZiBwaWNrZWRGaWVsZHMgPT09ICdzdHJpbmcnKVxuICAgICAgcGlja2VkRmllbGRzID0gcGlja2VkRmllbGRzLnNwbGl0KCcsJykubWFwKChzKSA9PiBzLnRyaW0oKSk7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KHBpY2tlZEZpZWxkcykpIHBpY2tlZEZpZWxkcyA9IFtdO1xuXG4gICAgdGhpcy5jb25maWcgPSBtZXJnZU9wdGlvbnMoXG4gICAgICB7XG4gICAgICAgIHNob3dTdGFjazogcHJvY2Vzcy5lbnYuQVhFX1NIT1dfU1RBQ0tcbiAgICAgICAgICA/IGJvb2xlYW4ocHJvY2Vzcy5lbnYuQVhFX1NIT1dfU1RBQ0spXG4gICAgICAgICAgOiB0cnVlLFxuICAgICAgICBtZXRhOiBPYmplY3QuYXNzaWduKFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHNob3c6IHByb2Nlc3MuZW52LkFYRV9TSE9XX01FVEFcbiAgICAgICAgICAgICAgPyBib29sZWFuKHByb2Nlc3MuZW52LkFYRV9TSE9XX01FVEEpXG4gICAgICAgICAgICAgIDogdHJ1ZSxcbiAgICAgICAgICAgIHJlbWFwcGVkRmllbGRzLFxuICAgICAgICAgICAgb21pdHRlZEZpZWxkcyxcbiAgICAgICAgICAgIHBpY2tlZEZpZWxkcyxcbiAgICAgICAgICAgIGNsZWFudXBSZW1hcHBpbmc6IHRydWUsXG4gICAgICAgICAgICBoaWRlSFRUUDogJ2lzX2h0dHAnLFxuICAgICAgICAgICAgLy8gaW1wbGVtZW50ZWQgbWFpbmx5IGZvciBAbGFkanMvZ3JhY2VmdWwgdG9cbiAgICAgICAgICAgIC8vIHN1cHByZXNzIHVubmVjZXNzYXJ5IG1ldGEgb3V0cHV0IHRvIGNvbnNvbGVcbiAgICAgICAgICAgIGhpZGVNZXRhOiAnaGlkZV9tZXRhJ1xuICAgICAgICAgIH0sXG4gICAgICAgICAgdHlwZW9mIGNvbmZpZy5tZXRhID09PSAnb2JqZWN0JyA/IGNvbmZpZy5tZXRhIDoge31cbiAgICAgICAgKSxcbiAgICAgICAgdmVyc2lvbjogcGtnLnZlcnNpb24sXG4gICAgICAgIHNpbGVudDogZmFsc2UsXG4gICAgICAgIGxvZ2dlcjogY29uc29sZSxcbiAgICAgICAgbmFtZSxcbiAgICAgICAgbGV2ZWw6ICdpbmZvJyxcbiAgICAgICAgbGV2ZWxzOiBbJ2luZm8nLCAnd2FybicsICdlcnJvcicsICdmYXRhbCddLFxuICAgICAgICBhcHBJbmZvOiBwcm9jZXNzLmVudi5BWEVfQVBQX0lORk9cbiAgICAgICAgICA/IGJvb2xlYW4ocHJvY2Vzcy5lbnYuQVhFX0FQUF9JTkZPKVxuICAgICAgICAgIDogdHJ1ZSxcbiAgICAgICAgaG9va3M6IE9iamVjdC5hc3NpZ24oXG4gICAgICAgICAge1xuICAgICAgICAgICAgcHJlOiBbXSxcbiAgICAgICAgICAgIHBvc3Q6IFtdXG4gICAgICAgICAgfSxcbiAgICAgICAgICB0eXBlb2YgY29uZmlnLmhvb2tzID09PSAnb2JqZWN0JyA/IGNvbmZpZy5ob29rcyA6IHt9XG4gICAgICAgIClcbiAgICAgIH0sXG4gICAgICBjb25maWdcbiAgICApO1xuXG4gICAgdGhpcy5hcHBJbmZvID0gdGhpcy5jb25maWcuYXBwSW5mb1xuICAgICAgPyBpc0Z1bmN0aW9uKHBhcnNlQXBwSW5mbylcbiAgICAgICAgPyBwYXJzZUFwcEluZm8oKVxuICAgICAgICA6IGZhbHNlXG4gICAgICA6IGZhbHNlO1xuXG4gICAgdGhpcy5sb2cgPSB0aGlzLmxvZy5iaW5kKHRoaXMpO1xuXG4gICAgLy8gSW5oZXJpdCBtZXRob2RzIGZyb20gcGFyZW50IGxvZ2dlclxuICAgIGNvbnN0IG1ldGhvZHMgPSBPYmplY3Qua2V5cyh0aGlzLmNvbmZpZy5sb2dnZXIpLmZpbHRlcihcbiAgICAgIChrZXkpID0+ICFvbWl0dGVkTG9nZ2VyS2V5cy5oYXMoa2V5KVxuICAgICk7XG4gICAgZm9yIChjb25zdCBlbGVtZW50IG9mIG1ldGhvZHMpIHtcbiAgICAgIHRoaXNbZWxlbWVudF0gPSB0aGlzLmNvbmZpZy5sb2dnZXJbZWxlbWVudF07XG4gICAgfVxuXG4gICAgLy8gQmluZCBoZWxwZXIgZnVuY3Rpb25zIGZvciBlYWNoIGxvZyBsZXZlbFxuICAgIGZvciAoY29uc3QgZWxlbWVudCBvZiBsZXZlbHMpIHtcbiAgICAgIC8vIEVuc3VyZSBmdW5jdGlvbiBleGlzdHMgaW4gbG9nZ2VyIHBhc3NlZFxuICAgICAgaWYgKHR5cGVvZiB0aGlzLmNvbmZpZy5sb2dnZXJbZWxlbWVudF0gIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgaWYgKGVsZW1lbnQgPT09ICdmYXRhbCcpIHtcbiAgICAgICAgICB0aGlzLmNvbmZpZy5sb2dnZXIuZmF0YWwgPVxuICAgICAgICAgICAgdGhpcy5jb25maWcubG9nZ2VyLmVycm9yIHx8XG4gICAgICAgICAgICB0aGlzLmNvbmZpZy5sb2dnZXIuaW5mbyB8fFxuICAgICAgICAgICAgdGhpcy5jb25maWcubG9nZ2VyLmxvZztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmNvbmZpZy5sb2dnZXJbZWxlbWVudF0gPVxuICAgICAgICAgICAgdGhpcy5jb25maWcubG9nZ2VyLmluZm8gfHwgdGhpcy5jb25maWcubG9nZ2VyLmxvZztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBCaW5kIGxvZyBoYW5kbGVyIHdoaWNoIG5vcm1hbGl6ZXMgYXJncyBhbmQgcG9wdWxhdGVzIG1ldGFcbiAgICAgIHRoaXNbZWxlbWVudF0gPSAoLi4uYXJncykgPT5cbiAgICAgICAgdGhpcy5sb2coZWxlbWVudCwgLi4uQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJncykpO1xuICAgIH1cblxuICAgIHRoaXMuc2V0TGV2ZWwgPSB0aGlzLnNldExldmVsLmJpbmQodGhpcyk7XG4gICAgdGhpcy5nZXROb3JtYWxpemVkTGV2ZWwgPSB0aGlzLmdldE5vcm1hbGl6ZWRMZXZlbC5iaW5kKHRoaXMpO1xuICAgIHRoaXMuc2V0TmFtZSA9IHRoaXMuc2V0TmFtZS5iaW5kKHRoaXMpO1xuXG4gICAgLy8gU2V0IHRoZSBsb2dnZXIgbmFtZVxuICAgIGlmICh0aGlzLmNvbmZpZy5uYW1lKSB0aGlzLnNldE5hbWUodGhpcy5jb25maWcubmFtZSk7XG5cbiAgICAvLyBTZXQgdGhlIGxvZ2dlciBsZXZlbFxuICAgIHRoaXMuc2V0TGV2ZWwodGhpcy5jb25maWcubGV2ZWwpO1xuXG4gICAgLy8gQWxpYXNlc1xuICAgIHRoaXMuZXJyID0gdGhpcy5lcnJvcjtcbiAgICB0aGlzLndhcm5pbmcgPSB0aGlzLndhcm47XG5cbiAgICAvLyBQcmUgYW5kIFBvc3QgSG9va3NcbiAgICB0aGlzLnByZSA9IGZ1bmN0aW9uIChsZXZlbCwgZm4pIHtcbiAgICAgIHRoaXMuY29uZmlnLmhvb2tzLnByZS5wdXNoKGZ1bmN0aW9uIChfbGV2ZWwsIC4uLmFyZ3MpIHtcbiAgICAgICAgaWYgKGxldmVsICE9PSBfbGV2ZWwpIHJldHVybiBbLi4uYXJnc107XG4gICAgICAgIHJldHVybiBmbiguLi5hcmdzKTtcbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICB0aGlzLnBvc3QgPSBmdW5jdGlvbiAobGV2ZWwsIGZuKSB7XG4gICAgICB0aGlzLmNvbmZpZy5ob29rcy5wb3N0LnB1c2goZnVuY3Rpb24gKF9sZXZlbCwgLi4uYXJncykge1xuICAgICAgICBpZiAobGV2ZWwgIT09IF9sZXZlbCkgcmV0dXJuIFsuLi5hcmdzXTtcbiAgICAgICAgcmV0dXJuIGZuKC4uLmFyZ3MpO1xuICAgICAgfSk7XG4gICAgfTtcbiAgfVxuXG4gIHNldExldmVsKGxldmVsKSB7XG4gICAgaWYgKCFpc1N0cmluZyhsZXZlbCkgfHwgbGV2ZWxzLmluZGV4T2YobGV2ZWwpID09PSAtMSlcbiAgICAgIHRocm93IG5ldyBFcnJvcihsZXZlbEVycm9yKTtcbiAgICAvLyBTdXBwb3J0IHNpZ25hbGUgbG9nZ2VyIGFuZCBvdGhlciBsb2dnZXJzIHRoYXQgdXNlIGBsb2dMZXZlbGBcbiAgICBpZiAoaXNTdHJpbmcodGhpcy5jb25maWcubG9nZ2VyLmxvZ0xldmVsKSlcbiAgICAgIHRoaXMuY29uZmlnLmxvZ2dlci5sb2dMZXZlbCA9IGxldmVsO1xuICAgIGVsc2UgdGhpcy5jb25maWcubG9nZ2VyLmxldmVsID0gbGV2ZWw7XG4gICAgLy8gQWRqdXN0cyBgdGhpcy5jb25maWcubGV2ZWxzYCBhcnJheVxuICAgIC8vIHNvIHRoYXQgaXQgaGFzIGFsbCBwcm9jZWVkaW5nIChpbmNsdXNpdmUpXG4gICAgdGhpcy5jb25maWcubGV2ZWxzID0gbGV2ZWxzLnNsaWNlKGxldmVscy5pbmRleE9mKGxldmVsKSk7XG4gIH1cblxuICBnZXROb3JtYWxpemVkTGV2ZWwobGV2ZWwpIHtcbiAgICBpZiAoIWlzU3RyaW5nKGxldmVsKSkgcmV0dXJuICdpbmZvJztcbiAgICBpZiAoaXNTdHJpbmcoYWxpYXNlc1tsZXZlbF0pKSByZXR1cm4gYWxpYXNlc1tsZXZlbF07XG4gICAgaWYgKGxldmVscy5pbmRleE9mKGxldmVsKSA9PT0gLTEpIHJldHVybiAnaW5mbyc7XG4gICAgcmV0dXJuIGxldmVsO1xuICB9XG5cbiAgc2V0TmFtZShuYW1lKSB7XG4gICAgaWYgKCFpc1N0cmluZyhuYW1lKSkgdGhyb3cgbmV3IEVycm9yKCdgbmFtZWAgbXVzdCBiZSBhIFN0cmluZycpO1xuICAgIC8vIFN1cHBvcnQgc2lnbmFsZSBsb2dnZXIgYW5kIG90aGVyIGxvZ2dlcnMgdGhhdCB1c2UgYHNjb3BlYFxuICAgIGlmIChpc1N0cmluZyh0aGlzLmNvbmZpZy5sb2dnZXIuc2NvcGUpKSB0aGlzLmNvbmZpZy5sb2dnZXIuc2NvcGUgPSBuYW1lO1xuICAgIGVsc2UgdGhpcy5jb25maWcubG9nZ2VyLm5hbWUgPSBuYW1lO1xuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbXBsZXhpdHlcbiAgbG9nKGxldmVsLCBtZXNzYWdlLCBtZXRhLCAuLi5hcmdzKSB7XG4gICAgY29uc3Qgb3JpZ2luYWxBcmdzID0gW107XG4gICAgY29uc3QgZXJyb3JzID0gW107XG4gICAgbGV0IGhhc01lc3NhZ2UgPSBmYWxzZTtcbiAgICBsZXQgaGFzTGV2ZWwgPSB0cnVlO1xuXG4gICAgaWYgKCFpc1VuZGVmaW5lZChsZXZlbCkpIG9yaWdpbmFsQXJncy5wdXNoKGxldmVsKTtcbiAgICBpZiAoIWlzVW5kZWZpbmVkKG1lc3NhZ2UpKSBvcmlnaW5hbEFyZ3MucHVzaChtZXNzYWdlKTtcbiAgICBpZiAoIWlzVW5kZWZpbmVkKG1ldGEpKSBvcmlnaW5hbEFyZ3MucHVzaChtZXRhKTtcbiAgICBmb3IgKGNvbnN0IGFyZyBvZiBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmdzKSkge1xuICAgICAgb3JpZ2luYWxBcmdzLnB1c2goYXJnKTtcbiAgICB9XG5cbiAgICBsZXQgbW9kaWZpZXIgPSAwO1xuXG4gICAgaWYgKGlzU3RyaW5nKGxldmVsKSAmJiBpc1N0cmluZyhhbGlhc2VzW2xldmVsXSkpIHtcbiAgICAgIGxldmVsID0gYWxpYXNlc1tsZXZlbF07XG4gICAgfSBlbHNlIGlmIChpc0Vycm9yKGxldmVsKSkge1xuICAgICAgaGFzTGV2ZWwgPSBmYWxzZTtcbiAgICAgIG1ldGEgPSBtZXNzYWdlO1xuICAgICAgbWVzc2FnZSA9IGxldmVsO1xuICAgICAgbGV2ZWwgPSAnZXJyb3InO1xuICAgIH0gZWxzZSBpZiAoIWlzU3RyaW5nKGxldmVsKSB8fCBsZXZlbHMuaW5kZXhPZihsZXZlbCkgPT09IC0xKSB7XG4gICAgICBoYXNMZXZlbCA9IGZhbHNlO1xuICAgICAgbWV0YSA9IG1lc3NhZ2U7XG4gICAgICBtZXNzYWdlID0gbGV2ZWw7XG4gICAgICBsZXZlbCA9IHRoaXMuZ2V0Tm9ybWFsaXplZExldmVsKGxldmVsKTtcbiAgICAgIG1vZGlmaWVyID0gLTE7XG4gICAgfVxuXG4gICAgLy8gUmV0dXJuIGVhcmx5IGlmIGl0IGlzIG5vdCBhIHZhbGlkIGxvZ2dpbmcgbGV2ZWxcbiAgICBpZiAodGhpcy5jb25maWcubGV2ZWxzLmluZGV4T2YobGV2ZWwpID09PSAtMSkgcmV0dXJuO1xuXG4gICAgLy8gQnVueWFuIHN1cHBvcnQgKG1ldGEsIG1lc3NhZ2UsIC4uLmFyZ3MpXG4gICAgbGV0IGlzQnVueWFuID0gZmFsc2U7XG4gICAgaWYgKChpc09iamVjdChtZXNzYWdlKSB8fCBBcnJheS5pc0FycmF5KG1lc3NhZ2UpKSAmJiBpc1N0cmluZyhtZXRhKSkge1xuICAgICAgaXNCdW55YW4gPSB0cnVlO1xuICAgICAgY29uc3QgX21ldGEgPSBtZXRhO1xuICAgICAgbWV0YSA9IG1lc3NhZ2U7XG4gICAgICBtZXNzYWdlID1cbiAgICAgICAgaXNTdHJpbmcoX21ldGEpICYmIG9yaWdpbmFsQXJncy5sZW5ndGggPj0gMyArIG1vZGlmaWVyXG4gICAgICAgICAgPyBmb3JtYXQoLi4ub3JpZ2luYWxBcmdzLnNsaWNlKDIgKyBtb2RpZmllcikpXG4gICAgICAgICAgOiBfbWV0YTtcbiAgICB9XG5cbiAgICAvLyBJZiBtZXNzYWdlIHdhcyB1bmRlZmluZWQgdGhlbiBzZXQgaXQgdG8gbGV2ZWxcbiAgICBpZiAoaXNVbmRlZmluZWQobWVzc2FnZSkpIG1lc3NhZ2UgPSBsZXZlbDtcblxuICAgIC8vIElmIG9ubHkgYG1lc3NhZ2VgIHdhcyBwYXNzZWQgdGhlbiBpZiBpdCB3YXMgYW4gT2JqZWN0XG4gICAgLy8gcHJlc2VydmUgaXQgYXMgYW4gT2JqZWN0IGJ5IHNldHRpbmcgaXQgYXMgbWV0YVxuICAgIGlmIChcbiAgICAgIG9yaWdpbmFsQXJncy5zbGljZSgxICsgbW9kaWZpZXIpLmxlbmd0aCA9PT0gMSAmJlxuICAgICAgIWlzU3RyaW5nKG1lc3NhZ2UpICYmXG4gICAgICAhaXNFcnJvcihtZXNzYWdlKVxuICAgICkge1xuICAgICAgbWV0YSA9IHsgbWVzc2FnZSB9O1xuICAgICAgbWVzc2FnZSA9IGxldmVsO1xuICAgIH0gZWxzZSBpZiAoIWlzQnVueWFuICYmIG9yaWdpbmFsQXJncy5sZW5ndGggPj0gNCArIG1vZGlmaWVyKSB7XG4gICAgICBtZXNzYWdlID0gdW5kZWZpbmVkO1xuICAgICAgbWV0YSA9IHt9O1xuICAgICAgY29uc3QgbWVzc2FnZXMgPSBbXTtcbiAgICAgIGZvciAoY29uc3QgYXJnIG9mIG9yaWdpbmFsQXJncy5zbGljZShcbiAgICAgICAgaGFzTGV2ZWwgJiYgbW9kaWZpZXIgPT09IDAgPyAxIDogMFxuICAgICAgKSkge1xuICAgICAgICBpZiAoaXNFcnJvcihhcmcpKSBlcnJvcnMucHVzaChhcmcpO1xuICAgICAgICAvLyBwdXNoZXMgbnVtYmVyLCBvYmplY3QsIHN0cmluZywgZXRjIGZvciBmb3JtYXR0aW5nXG4gICAgICAgIGVsc2UgbWVzc2FnZXMucHVzaChhcmcpO1xuICAgICAgfVxuXG4gICAgICBpZiAobWVzc2FnZXMubGVuZ3RoID4gMCkge1xuICAgICAgICBtZXNzYWdlID0gZm9ybWF0KC4uLm1lc3NhZ2VzKTtcbiAgICAgICAgaGFzTWVzc2FnZSA9IHRydWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChlcnJvcnMubGVuZ3RoID4gMCAmJiBsZXZlbCA9PT0gJ2xvZycpIGxldmVsID0gJ2Vycm9yJztcbiAgICB9IGVsc2UgaWYgKFxuICAgICAgIWlzQnVueWFuICYmXG4gICAgICBvcmlnaW5hbEFyZ3MubGVuZ3RoID09PSAzICsgbW9kaWZpZXIgJiZcbiAgICAgIGlzU3RyaW5nKG1lc3NhZ2UpICYmXG4gICAgICBmb3JtYXRTcGVjaWZpZXJzLnNvbWUoKHQpID0+IG1lc3NhZ2UuaW5kZXhPZih0KSAhPT0gLTEpXG4gICAgKSB7XG4gICAgICAvLyBPdGhlcndpc2UgaWYgdGhlcmUgYXJlIHRocmVlIGFyZ3MgYW5kIGlmIHRoZSBgbWVzc2FnZWAgY29udGFpbnNcbiAgICAgIC8vIGEgcGxhY2Vob2xkZXIgdG9rZW4gKGUuZy4gJyVzJyBvciAnJWQnIC0gc2VlIGFib3ZlIGBmb3JtYXRTcGVjaWZpZXJzYCB2YXJpYWJsZSlcbiAgICAgIC8vIHRoZW4gd2UgY2FuIGluZmVyIHRoYXQgdGhlIGBtZXRhYCBhcmcgcGFzc2VkIGlzIHVzZWQgZm9yIGZvcm1hdHRpbmdcbiAgICAgIG1lc3NhZ2UgPSBmb3JtYXQobWVzc2FnZSwgbWV0YSk7XG4gICAgICBtZXRhID0ge307XG4gICAgfSBlbHNlIGlmICghaXNFcnJvcihtZXNzYWdlKSkge1xuICAgICAgaWYgKGlzRXJyb3IobWV0YSkpIHtcbiAgICAgICAgZXJyb3JzLnB1c2gobWV0YSk7XG4gICAgICAgIG1ldGEgPSB7fTtcbiAgICAgIH0gZWxzZSBpZiAoIWlzT2JqZWN0KG1ldGEpICYmICFpc1VuZGVmaW5lZChtZXRhKSAmJiAhaXNOdWxsKG1ldGEpKSB7XG4gICAgICAgIC8vIElmIHRoZSBgbWV0YWAgdmFyaWFibGUgcGFzc2VkIHdhcyBub3QgYW4gT2JqZWN0IHRoZW4gY29udmVydCBpdFxuICAgICAgICBtZXNzYWdlID0gZm9ybWF0KG1lc3NhZ2UsIG1ldGEpO1xuICAgICAgICBtZXRhID0ge307XG4gICAgICB9IGVsc2UgaWYgKCFpc1N0cmluZyhtZXNzYWdlKSkge1xuICAgICAgICAvLyBJZiB0aGUgbWVzc2FnZSBpcyBub3QgYSBzdHJpbmcgdGhlbiB3ZSBzaG91bGQgcnVuIGB1dGlsLmZvcm1hdGAgb24gaXRcbiAgICAgICAgLy8gYXNzdW1pbmcgd2UncmUgZm9ybWF0dGluZyBpdCBsaWtlIGl0IHdhcyBhbm90aGVyIGFyZ3VtZW50XG4gICAgICAgIC8vIChhcyBvcHBvc2VkIHRvIHVzaW5nIHNvbWV0aGluZyBsaWtlIGZhc3QtanNvbi1zdHJpbmdpZnkpXG4gICAgICAgIG1lc3NhZ2UgPSBmb3JtYXQobWVzc2FnZSk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChpc0Vycm9yKG1ldGEpKSB7XG4gICAgICBlcnJvcnMucHVzaChtZXRhKTtcbiAgICAgIC8vIGhhbmRsZSBhZGRpdGlvbmFsIGFyZ3NcbiAgICAgIGNvbnN0IG1lc3NhZ2VzID0gW107XG4gICAgICBpZiAoaXNFcnJvcihtZXNzYWdlKSkge1xuICAgICAgICBlcnJvcnMudW5zaGlmdChtZXNzYWdlKTtcbiAgICAgICAgbWVzc2FnZSA9IHVuZGVmaW5lZDtcbiAgICAgIH1cblxuICAgICAgZm9yIChjb25zdCBhcmcgb2Ygb3JpZ2luYWxBcmdzLnNsaWNlKDIgKyBtb2RpZmllcikpIHtcbiAgICAgICAgLy8gc2hvdWxkIHNraXAgdGhpcyBiZXR0ZXIgd2l0aCBzbGljZSBhbmQgbW9kaWZpZXIgYWRqdXN0bWVudFxuICAgICAgICBpZiAobWV0YSA9PT0gYXJnKSBjb250aW51ZTtcbiAgICAgICAgaWYgKGlzRXJyb3IoYXJnKSkgZXJyb3JzLnB1c2goYXJnKTtcbiAgICAgICAgZWxzZSBtZXNzYWdlcy5wdXNoKGFyZyk7XG5cbiAgICAgICAgaWYgKG1lc3NhZ2VzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBtZXNzYWdlID0gZm9ybWF0KC4uLm1lc3NhZ2VzKTtcbiAgICAgICAgICBoYXNNZXNzYWdlID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAobGV2ZWwgPT09ICdsb2cnKSBsZXZlbCA9ICdlcnJvcic7XG5cbiAgICAgIG1ldGEgPSB7fTtcbiAgICB9XG5cbiAgICBpZiAoIWlzVW5kZWZpbmVkKG1ldGEpICYmICFpc09iamVjdChtZXRhKSkgbWV0YSA9IHsgb3JpZ2luYWxfbWV0YTogbWV0YSB9O1xuICAgIGVsc2UgaWYgKCFpc09iamVjdChtZXRhKSkgbWV0YSA9IHt9O1xuXG4gICAgaWYgKGlzRXJyb3IobWVzc2FnZSkpIHtcbiAgICAgIGVycm9ycy51bnNoaWZ0KG1lc3NhZ2UpO1xuICAgICAgbWVzc2FnZSA9IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICAvL1xuICAgIC8vIHJld3JpdGUgYG1ldGEuZXJyYCB0byBgbWV0YS5vcmlnaW5hbF9lcnJgIGZvciBjb25zaXN0ZW5jeVxuICAgIC8vIChpbiBjYXNlIHNvbWVvbmUgaGFzIGFuIG9iamVjdCB3aXRoIGAuZXJyYCBwcm9wZXJ0eSBvbiBpdCB3aXRoIGFuIGVycm9yKVxuICAgIC8vXG4gICAgaWYgKGlzT2JqZWN0KG1ldGEuZXJyKSkge1xuICAgICAgaWYgKGlzRXJyb3IobWV0YS5lcnIpKSBlcnJvcnMucHVzaChtZXRhLmVycik7XG4gICAgICBtZXRhLm9yaWdpbmFsX2VyciA9IGlzRXJyb3IobWV0YS5lcnIpID8gcGFyc2VFcnIobWV0YS5lcnIpIDogbWV0YS5lcnI7XG4gICAgfVxuXG4gICAgbGV0IGVycjtcbiAgICBpZiAoZXJyb3JzLmxlbmd0aCA+IDApIHtcbiAgICAgIGlmIChlcnJvcnMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgIGVyciA9IGVycm9yc1swXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGVyciA9IG5ldyBFcnJvcihcbiAgICAgICAgICBbLi4ubmV3IFNldChlcnJvcnMubWFwKChlKSA9PiBlLm1lc3NhZ2UpLmZpbHRlcihCb29sZWFuKSldLmpvaW4oJzsgJylcbiAgICAgICAgKTtcbiAgICAgICAgZXJyLnN0YWNrID0gW1xuICAgICAgICAgIC4uLm5ldyBTZXQoZXJyb3JzLm1hcCgoZSkgPT4gZS5zdGFjaykuZmlsdGVyKEJvb2xlYW4pKVxuICAgICAgICBdLmpvaW4oJ1xcblxcbicpO1xuICAgICAgICBlcnIuZXJyb3JzID0gZXJyb3JzO1xuICAgICAgfVxuXG4gICAgICBtZXRhLmVyciA9IHBhcnNlRXJyKGVycik7XG4gICAgICBpZiAoIWlzU3RyaW5nKG1lc3NhZ2UpKSBtZXNzYWdlID0gZXJyLm1lc3NhZ2U7XG4gICAgfVxuXG4gICAgLy9cbiAgICAvLyBOT1RFOiB0aGlzIHdhcyByZW1vdmVkIGluIHYxMC4yLjIgZHVlIHRvIGNpcmN1bGFyIHJlZmVyZW5jZSBpc3N1ZXNcbiAgICAvLyAgICAgICAodGhlIHdvcmthcm91bmQgd291bGQgaW52b2x2ZSBzYWZlU3RyaW5naWZ5IGFuZCB0aGVuIEpTT04ucGFyc2Ugd2hpY2ggd291bGQgYmUgcGVyZiBibG9hdClcbiAgICAvLyAgICAgICAodGhlcmUgc3RpbGwgbWlnaHQgYmUgYW5vdGhlciB3b3JrYXJvdW5kIG9yIHBlcmhhcHMgd2UgZG9uJ3QgYWRkIGFsbCB0aGUgYXJncyBoZXJlIGV4Y2VwdCBhZGRpdGlvbmFsKVxuICAgIC8vXG4gICAgLy8gU2V0IGBhcmdzYCBwcm9wIHdpdGggb3JpZ2luYWwgYXJndW1lbnRzIHBhc3NlZFxuICAgIC8vIG1ldGEuYXJncyA9IG9yaWdpbmFsQXJncztcblxuICAgIC8vIFNldCBkZWZhdWx0IGxldmVsIG9uIG1ldGFcbiAgICBtZXRhLmxldmVsID0gbGV2ZWw7XG5cbiAgICAvLyBBZGQgYGFwcGAgb2JqZWN0IHRvIG1ldGFkYXRhXG4gICAgaWYgKHRoaXMuYXBwSW5mbykgbWV0YS5hcHAgPSB0aGlzLmFwcEluZm87XG5cbiAgICAvL1xuICAgIC8vIGRldGVybWluZSBsb2cgbWV0aG9kIHRvIHVzZVxuICAgIC8vXG4gICAgLy8gaWYgd2UgZGlkbid0IHBhc3MgYSBsZXZlbCBhcyBhIG1ldGhvZFxuICAgIC8vIChlLmcuIGNvbnNvbGUuaW5mbyksIHRoZW4gd2Ugc2hvdWxkIHN0aWxsXG4gICAgLy8gdXNlIHRoZSBsb2dnZXIncyBgbG9nYCBtZXRob2QgdG8gb3V0cHV0XG4gICAgLy9cbiAgICAvLyBhbmQgZmF0YWwgc2hvdWxkIHVzZSBlcnJvciAoZS5nLiBpbiBicm93c2VyKVxuICAgIC8vXG4gICAgY29uc3QgbWV0aG9kID0gbW9kaWZpZXIgPT09IC0xID8gJ2xvZycgOiBsZXZlbDtcblxuICAgIC8vIHByZS1ob29rc1xuICAgIGZvciAoY29uc3QgaG9vayBvZiB0aGlzLmNvbmZpZy5ob29rcy5wcmUpIHtcbiAgICAgIFtlcnIsIG1lc3NhZ2UsIG1ldGFdID0gaG9vayhtZXRob2QsIGVyciwgbWVzc2FnZSwgbWV0YSk7XG4gICAgfVxuXG4gICAgLy9cbiAgICAvLyBOT1RFOiB1c2luZyBsb2Rhc2ggXy5vbWl0IGFuZCBfLnBpY2sgd291bGQgaGF2ZSBiZWVuIF92ZXJ5IHNsb3dfXG4gICAgLy9cbiAgICAvLyBjb25zdCBvbWl0dGVkQW5kUGlja2VkRmllbGRzID0ge1xuICAgIC8vICAgLi4uXy5vbWl0KG1ldGEsIHRoaXMuY29uZmlnLm1ldGEub21pdHRlZEZpZWxkcyksXG4gICAgLy8gICAuLi5fLnBpY2sobWV0YSwgdGhpcy5jb25maWcubWV0YS5waWNrZWRGaWVsZHMpXG4gICAgLy8gfTtcbiAgICAvL1xuICAgIC8vIGFsc28gd2UgZG9uJ3Qgd2FudCB0byBtdXRhdGUgYW55dGhpbmcgaW4gYG1ldGFgXG4gICAgLy8gYW5kIGlkZWFsbHkgd2Ugb25seSB3YW50IHRvIHBpY2sgZXhhY3RseSB3aGF0IHdlIG5lZWRcbiAgICAvLyAoYW5kIG5vdCBoYXZlIHR3byBvcGVyYXRpb25zLCBvbmUgZm9yIG9taXQsIGFuZCBvbmUgZm9yIHBpY2spXG4gICAgLy9cblxuICAgIC8vIHNldCBhIGJvb2xlYW4gZmxhZyBpZiB3ZSBoYWQgdGhlIHNpbGVudCBzeW1ib2wgb3Igbm90XG4gICAgY29uc3QgaGFkVHJ1ZVNpbGVudFN5bWJvbCA9IGJvb2xlYW4obWV0YVtzaWxlbnRTeW1ib2xdKTtcblxuICAgIGlmICghaXNFbXB0eSh0aGlzLmNvbmZpZy5tZXRhLnJlbWFwcGVkRmllbGRzKSkge1xuICAgICAgZm9yIChjb25zdCBrZXkgb2YgUmVmbGVjdC5vd25LZXlzKHRoaXMuY29uZmlnLm1ldGEucmVtYXBwZWRGaWVsZHMpKSB7XG4gICAgICAgIHNldChtZXRhLCB0aGlzLmNvbmZpZy5tZXRhLnJlbWFwcGVkRmllbGRzW2tleV0sIGdldChtZXRhLCBrZXkpKTtcbiAgICAgICAgdW5zZXQobWV0YSwga2V5KTtcbiAgICAgICAgLy8gY2xlYW51cCBlbXB0eSBvYmplY3RzIGFmdGVyIHJlbWFwcGluZ1xuICAgICAgICBpZiAodGhpcy5jb25maWcubWV0YS5jbGVhbnVwUmVtYXBwaW5nKSB7XG4gICAgICAgICAgY29uc3QgaW5kZXggPSBrZXkubGFzdEluZGV4T2YoJy4nKTtcbiAgICAgICAgICBpZiAoaW5kZXggPT09IC0xKSBjb250aW51ZTtcbiAgICAgICAgICBjb25zdCBwYXJlbnRLZXkgPSBrZXkuc2xpY2UoMCwgaW5kZXgpO1xuICAgICAgICAgIGlmIChpc0VtcHR5KGdldChtZXRhLCBwYXJlbnRLZXkpKSkgdW5zZXQobWV0YSwgcGFyZW50S2V5KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChcbiAgICAgICFpc0VtcHR5KHRoaXMuY29uZmlnLm1ldGEub21pdHRlZEZpZWxkcykgfHxcbiAgICAgICFpc0VtcHR5KHRoaXMuY29uZmlnLm1ldGEucGlja2VkRmllbGRzKVxuICAgICkge1xuICAgICAgY29uc3QgZG90aWZpZWQgPSBkb3RpZnlUb0FycmF5KG1ldGEpO1xuICAgICAgLy8gZG90aWZpZWQgPSBbXG4gICAgICAvLyAgICdlcnIubmFtZScsXG4gICAgICAvLyAgICdlcnIubWVzc2FnZScsXG4gICAgICAvLyAgICdlcnIuc3RhY2snLFxuICAgICAgLy8gICAnbGV2ZWwnLFxuICAgICAgLy8gICAnYXBwLm5hbWUnLFxuICAgICAgLy8gICAnYXBwLnZlcnNpb24nLFxuICAgICAgLy8gICAnYXBwLm5vZGUnLFxuICAgICAgLy8gICAnYXBwLmhhc2gnLFxuICAgICAgLy8gICAvLyAuLi5cbiAgICAgIC8vIF1cblxuICAgICAgaWYgKCFpc0VtcHR5KHRoaXMuY29uZmlnLm1ldGEub21pdHRlZEZpZWxkcykpIHtcbiAgICAgICAgZm9yIChjb25zdCBwcm9wIG9mIHRoaXMuY29uZmlnLm1ldGEub21pdHRlZEZpZWxkcykge1xuICAgICAgICAgIC8vIDxodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL2EvOTg4MjM0OT5cbiAgICAgICAgICBsZXQgaSA9IGRvdGlmaWVkLmxlbmd0aDtcbiAgICAgICAgICB3aGlsZSAoaS0tKSB7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIGRvdGlmaWVkW2ldID09PSBwcm9wIHx8XG4gICAgICAgICAgICAgICghaXNTeW1ib2woZG90aWZpZWRbaV0pICYmIGRvdGlmaWVkW2ldLmluZGV4T2YoYCR7cHJvcH0uYCkgPT09IDApXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAgIGRvdGlmaWVkLnNwbGljZShpLCAxKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgY29uc3QgcGlja2VkU3ltYm9scyA9IFtdO1xuXG4gICAgICBpZiAoIWlzRW1wdHkodGhpcy5jb25maWcubWV0YS5waWNrZWRGaWVsZHMpKSB7XG4gICAgICAgIGZvciAoY29uc3QgcHJvcCBvZiB0aGlzLmNvbmZpZy5tZXRhLnBpY2tlZEZpZWxkcykge1xuICAgICAgICAgIC8vIHJlc3BvbnNlLmhlYWRlcnMuYm9vcFxuICAgICAgICAgIC8vIHJlc3BvbnNlLmhlYWRlcnMuYmVlcFxuICAgICAgICAgIC8vIHJlc3BvbnNlLmJvZHlcbiAgICAgICAgICAvLyByZXNwb25zZS50ZXh0XG4gICAgICAgICAgLy8gcmVzcG9uc2VcbiAgICAgICAgICAvL1xuICAgICAgICAgIC8vIHNvIHdlIG5lZWQgdG8gc3BsaXQgYnkgdGhlIGZpcnN0IHBlcmlvZCBhbmQgb21pdCBhbnkga2V5cyBmcm9tIGRvdGlmaWVkIHN0YXJ0aW5nIHdpdGggaXRcbiAgICAgICAgICBpZiAoaXNTeW1ib2wocHJvcCkpIHtcbiAgICAgICAgICAgIGlmIChtZXRhW3Byb3BdKSBwaWNrZWRTeW1ib2xzLnB1c2goW3Byb3AsIG1ldGFbcHJvcF1dKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgaW5kZXggPSBwcm9wLmluZGV4T2YoJy4nKTtcbiAgICAgICAgICAgIGNvbnN0IGtleSA9IHByb3Auc2xpY2UoMCwgaW5kZXggKyAxKTtcbiAgICAgICAgICAgIGlmIChpbmRleCAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgbGV0IGkgPSBkb3RpZmllZC5sZW5ndGg7XG4gICAgICAgICAgICAgIHdoaWxlIChpLS0pIHtcbiAgICAgICAgICAgICAgICBpZiAoZG90aWZpZWRbaV0gPT09IGtleS5zbGljZSgwLCAtMSkpIGRvdGlmaWVkLnNwbGljZShpLCAxKTtcbiAgICAgICAgICAgICAgICBlbHNlIGlmIChkb3RpZmllZFtpXS5pbmRleE9mKGtleSkgPT09IDApIGRvdGlmaWVkLnNwbGljZShpLCAxKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIGZpbmFsbHkgYWRkIGl0IGlmIGl0IGRpZCBub3QgYWxyZWFkeSBleGlzdFxuICAgICAgICAgIGlmIChkb3RpZmllZC5pbmRleE9mKHByb3ApID09PSAtMSkgZG90aWZpZWQucHVzaChwcm9wKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvL1xuICAgICAgLy8gaXRlcmF0ZSBvdmVyIGFsbCBkb3RpZmllZCB2YWx1ZXMgdG8gY2hlY2sgZm9yIHN5bWJvbHNcbiAgICAgIC8vXG4gICAgICAvLyBOT1RFOiB0aGlzIGRvZXMgbm90IHRha2UgaW50byBhY2NvdW50IHRoYXQgdGhleSBjb3VsZCBhbHJlYWR5IGJlIGluIGBwaWNrZWRTeW1ib2xzYFxuICAgICAgLy8gICAgICAgKGFuZCBpdCBkb2Vzbid0IGFsc28gZG8gYmlnaW50cyB5ZXQpXG4gICAgICAvL1xuICAgICAgZm9yIChjb25zdCBwcm9wIG9mIGRvdGlmaWVkKSB7XG4gICAgICAgIGlmIChpc1N5bWJvbChwcm9wKSkge1xuICAgICAgICAgIGlmIChtZXRhW3Byb3BdICE9PSB1bmRlZmluZWQpIHBpY2tlZFN5bWJvbHMucHVzaChbcHJvcCwgbWV0YVtwcm9wXV0pO1xuICAgICAgICB9IGVsc2UgaWYgKG1ldGFbU3ltYm9sLmZvcihwcm9wKV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHBpY2tlZFN5bWJvbHMucHVzaChbU3ltYm9sLmZvcihwcm9wKSwgbWV0YVtTeW1ib2wuZm9yKHByb3ApXV0pO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vXG4gICAgICAvLyBub3cgd2UgY2FsbCBwaWNrLWRlZXAgdXNpbmcgdGhlIGZpbmFsIGFycmF5XG4gICAgICAvL1xuICAgICAgLy8gTk9URTogdGhpcyBkb2VzIG5vdCBwaWNrIHN5bWJvbHMsIGJpZ2ludHMsIG5vciBzdHJlYW1zXG4gICAgICAvLyAgICAgICA8aHR0cHM6Ly9naXRodWIuY29tL3N0cmlrZWVudGNvL3BpY2stZGVlcC9pc3N1ZXMvMj5cbiAgICAgIC8vICAgICAgIDxodHRwczovL2dpdGh1Yi5jb20vc3RyaWtlZW50Y28vcGljay1kZWVwL2lzc3Vlcy8yPlxuICAgICAgLy9cbiAgICAgIC8vIE5PVEU6IHRoaXMgaXMgd3JhcHBlZCBpbiB0cnkvY2F0Y2ggaW4gY2FzZSBzaW1pbGFyIGVycm9ycyBvY2N1clxuICAgICAgLy8gICAgICAgPGh0dHBzOi8vZ2l0aHViLmNvbS9zdHJpcGUvc3RyaXBlLW5vZGUvaXNzdWVzLzE3OTY+XG4gICAgICAvL1xuICAgICAgdHJ5IHtcbiAgICAgICAgbWV0YSA9IHBpY2tEZWVwKG1ldGEsIGRvdGlmaWVkKTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICB0aGlzLmNvbmZpZy5sb2dnZXIuZXJyb3IoZXJyKTtcbiAgICAgIH1cblxuICAgICAgLy9cbiAgICAgIC8vIGlmIHRoZXJlIHdlcmUgYW55IHRvcC1sZXZlbCBzeW1ib2xzIHRvIGJlXG4gICAgICAvLyBwaWNrZWQgdGhlbiB3ZSBuZWVkIHRvIGFkZCB0aGVtIGJhY2sgaGVyZSB0byB0aGUgbGlzdFxuICAgICAgLy9cbiAgICAgIC8vIE5PVEU6IHdlJ2QgcHJvYmFibHkgd2FudCB0byBkbyB0aGUgc2FtZSBmb3IgYmlnaW50cyBhcyBzeW1ib2xzXG4gICAgICAvL1xuICAgICAgaWYgKHBpY2tlZFN5bWJvbHMubGVuZ3RoID4gMCkge1xuICAgICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBwaWNrZWRTeW1ib2xzKSB7XG4gICAgICAgICAgbWV0YVtrZXldID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBvbmx5IGludm9rZSBsb2dnZXIgbWV0aG9kcyBpZiBpdCB3YXMgbm90IHNpbGVudFxuICAgIGlmICghdGhpcy5jb25maWcuc2lsZW50ICYmICFoYWRUcnVlU2lsZW50U3ltYm9sKSB7XG4gICAgICAvLyBTaG93IHN0YWNrIHRyYWNlIGlmIG5lY2Vzc2FyeSAoYWxvbmcgd2l0aCBhbnkgbWV0YWRhdGEpXG4gICAgICBpZiAoaXNFcnJvcihlcnIpICYmIHRoaXMuY29uZmlnLnNob3dTdGFjaykge1xuICAgICAgICBpZiAoIXRoaXMuY29uZmlnLm1ldGEuc2hvdyB8fCBpc0VtcHR5KG1ldGEpKSB7XG4gICAgICAgICAgdGhpcy5jb25maWcubG9nZ2VyW21ldGhvZF0oLi4uKGhhc01lc3NhZ2UgPyBbbWVzc2FnZSwgZXJyXSA6IFtlcnJdKSk7XG4gICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgdGhpcy5jb25maWcubWV0YS5oaWRlTWV0YSAmJlxuICAgICAgICAgIG1ldGFbdGhpcy5jb25maWcubWV0YS5oaWRlTWV0YV1cbiAgICAgICAgKSB7XG4gICAgICAgICAgdGhpcy5jb25maWcubG9nZ2VyW21ldGhvZF0oLi4uKGhhc01lc3NhZ2UgPyBbbWVzc2FnZSwgZXJyXSA6IFtlcnJdKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5jb25maWcubG9nZ2VyW21ldGhvZF0oXG4gICAgICAgICAgICAuLi4oaGFzTWVzc2FnZSA/IFttZXNzYWdlLCBlcnIsIG1ldGFdIDogW2VyciwgbWV0YV0pXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICghdGhpcy5jb25maWcubWV0YS5zaG93IHx8IGlzRW1wdHkobWV0YSkpIHtcbiAgICAgICAgdGhpcy5jb25maWcubG9nZ2VyW21ldGhvZF0obWVzc2FnZSk7XG4gICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAodGhpcy5jb25maWcubWV0YS5oaWRlTWV0YSAmJiBtZXRhW3RoaXMuY29uZmlnLm1ldGEuaGlkZU1ldGFdKSB8fFxuICAgICAgICAodGhpcy5jb25maWcubWV0YS5oaWRlSFRUUCAmJiBtZXRhW3RoaXMuY29uZmlnLm1ldGEuaGlkZUhUVFBdKVxuICAgICAgKSB7XG4gICAgICAgIHRoaXMuY29uZmlnLmxvZ2dlclttZXRob2RdKG1lc3NhZ2UpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5jb25maWcubG9nZ2VyW21ldGhvZF0obWVzc2FnZSwgbWV0YSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gcG9zdC1ob29rc1xuICAgIGlmICh0aGlzLmNvbmZpZy5ob29rcy5wb3N0Lmxlbmd0aCA9PT0gMClcbiAgICAgIHJldHVybiB7IG1ldGhvZCwgZXJyLCBtZXNzYWdlLCBtZXRhIH07XG4gICAgcmV0dXJuIHBNYXBTZXJpZXModGhpcy5jb25maWcuaG9va3MucG9zdCwgKGhvb2spID0+XG4gICAgICBob29rKG1ldGhvZCwgZXJyLCBtZXNzYWdlLCBtZXRhKVxuICAgIClcbiAgICAgIC50aGVuKClcbiAgICAgIC5jYXRjaCgoZXJyKSA9PiB7XG4gICAgICAgIHRoaXMuY29uZmlnLmxvZ2dlci5lcnJvcihlcnIpO1xuICAgICAgfSk7XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBBeGU7XG4iXSwibWFwcGluZ3MiOiI7O0FBQUE7QUFDQUEsT0FBTyxDQUFDLGtCQUFrQixDQUFDOztBQUUzQjtBQUNBLE1BQU1DLEVBQUUsR0FBR0QsT0FBTyxDQUFDLElBQUksQ0FBQztBQUN4QixNQUFNRSxNQUFNLEdBQUdGLE9BQU8sQ0FBQyxvQkFB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
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "axe",
|
|
3
3
|
"description": "Axe is a logger-agnostic wrapper that normalizes logs regardless of argument style. Great for large development teams, old and new projects, and works with Pino, Bunyan, Winston, console, and more. It is lightweight, performant, highly-configurable, and automatically adds OS, CPU, and Git information to your logs. It supports hooks (useful for masking sensitive data) and dot-notation remapping, omitting, and picking of log metadata properties. Made for Forward Email, Lad, and Cabin.",
|
|
4
|
-
"version": "12.2.
|
|
4
|
+
"version": "12.2.3",
|
|
5
5
|
"author": "Nick Baugh <niftylettuce@gmail.com> (http://niftylettuce.com)",
|
|
6
6
|
"browser": {
|
|
7
7
|
"parse-app-info": false
|
|
@@ -32,36 +32,36 @@
|
|
|
32
32
|
"unset-value": "2.0.1"
|
|
33
33
|
},
|
|
34
34
|
"devDependencies": {
|
|
35
|
-
"@babel/cli": "^7.
|
|
36
|
-
"@babel/core": "^7.
|
|
37
|
-
"@babel/preset-env": "^7.
|
|
38
|
-
"@commitlint/cli": "^17.
|
|
39
|
-
"@commitlint/config-conventional": "^17.
|
|
40
|
-
"ava": "^5.
|
|
35
|
+
"@babel/cli": "^7.22.15",
|
|
36
|
+
"@babel/core": "^7.22.17",
|
|
37
|
+
"@babel/preset-env": "^7.22.15",
|
|
38
|
+
"@commitlint/cli": "^17.7.1",
|
|
39
|
+
"@commitlint/config-conventional": "^17.7.0",
|
|
40
|
+
"ava": "^5.3.1",
|
|
41
41
|
"babelify": "^10.0.0",
|
|
42
42
|
"browserify": "^17.0.0",
|
|
43
|
-
"consola": "^3.
|
|
43
|
+
"consola": "^3.2.3",
|
|
44
44
|
"cross-env": "^7.0.3",
|
|
45
|
-
"eslint": "^8.
|
|
45
|
+
"eslint": "^8.49.0",
|
|
46
46
|
"eslint-config-xo-lass": "^2.0.1",
|
|
47
|
-
"eslint-plugin-compat": "^4.
|
|
47
|
+
"eslint-plugin-compat": "^4.2.0",
|
|
48
48
|
"eslint-plugin-node": "^11.1.0",
|
|
49
49
|
"express": "^4.18.2",
|
|
50
50
|
"fixpack": "^4.0.0",
|
|
51
51
|
"husky": "^8.0.3",
|
|
52
52
|
"jsdom": "15.x",
|
|
53
53
|
"koa": "^2.14.2",
|
|
54
|
-
"lint-staged": "^
|
|
54
|
+
"lint-staged": "^14.0.1",
|
|
55
55
|
"lodash": "^4.17.21",
|
|
56
56
|
"nyc": "^15.1.0",
|
|
57
|
-
"pino": "^8.
|
|
57
|
+
"pino": "^8.15.1",
|
|
58
58
|
"remark-cli": "^11.0.0",
|
|
59
59
|
"remark-preset-github": "^4.0.4",
|
|
60
60
|
"rimraf": "^5.0.1",
|
|
61
61
|
"signale": "^1.4.0",
|
|
62
|
-
"sinon": "^15.
|
|
62
|
+
"sinon": "^15.2.0",
|
|
63
63
|
"tinyify": "3.0.0",
|
|
64
|
-
"xo": "^0.
|
|
64
|
+
"xo": "^0.56.0"
|
|
65
65
|
},
|
|
66
66
|
"engines": {
|
|
67
67
|
"node": ">=14"
|