clientnode 4.0.1428 → 4.0.1430
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/dist/Lock.js +100 -1
- package/dist/Logger.js +185 -1
- package/dist/Semaphore.js +65 -1
- package/dist/array.js +452 -1
- package/dist/cli.js +51 -1
- package/dist/constants.js +126 -1
- package/dist/context.js +40 -1
- package/dist/cookie.js +84 -1
- package/dist/data-transfer.js +216 -1
- package/dist/datetime.js +282 -1
- package/dist/domNode.js +331 -1
- package/dist/expression/evaluators.js +273 -1
- package/dist/expression/helper.js +97 -1
- package/dist/expression/index.js +26 -1
- package/dist/expression/indicator-functions.js +37 -1
- package/dist/expression/type.js +20 -0
- package/dist/filesystem.js +410 -1
- package/dist/function.js +75 -1
- package/dist/index.js +43 -1
- package/dist/indicators.js +121 -1
- package/dist/number.js +61 -1
- package/dist/object.js +934 -1
- package/dist/process.js +69 -1
- package/dist/property-types.js +115 -1
- package/dist/require.js +82 -1
- package/dist/scope.js +85 -1
- package/dist/string.js +806 -1
- package/dist/test-helper.js +341 -1
- package/dist/type.js +21 -1
- package/dist/utility.js +139 -1
- package/package.json +23 -22
- package/dist/Lock.d.ts +0 -39
- package/dist/Logger.d.ts +0 -102
- package/dist/Semaphore.d.ts +0 -29
- package/dist/array.d.ts +0 -150
- package/dist/bundle/Lock.js +0 -1
- package/dist/bundle/Logger.js +0 -1
- package/dist/bundle/Semaphore.js +0 -1
- package/dist/bundle/array.js +0 -1
- package/dist/bundle/cli.js +0 -1
- package/dist/bundle/constants.js +0 -1
- package/dist/bundle/context.js +0 -1
- package/dist/bundle/cookie.js +0 -1
- package/dist/bundle/data-transfer.js +0 -1
- package/dist/bundle/datetime.js +0 -1
- package/dist/bundle/domNode.js +0 -1
- package/dist/bundle/expression/evaluators.js +0 -1
- package/dist/bundle/expression/helper.js +0 -1
- package/dist/bundle/expression/index.js +0 -1
- package/dist/bundle/expression/indicator-functions.js +0 -1
- package/dist/bundle/expression/types.js +0 -1
- package/dist/bundle/filesystem.js +0 -1
- package/dist/bundle/function.js +0 -1
- package/dist/bundle/index.js +0 -1
- package/dist/bundle/indicators.js +0 -1
- package/dist/bundle/number.js +0 -1
- package/dist/bundle/object.js +0 -1
- package/dist/bundle/process.js +0 -1
- package/dist/bundle/property-types.js +0 -1
- package/dist/bundle/require.js +0 -1
- package/dist/bundle/scope.js +0 -1
- package/dist/bundle/string.js +0 -1
- package/dist/bundle/test-helper.js +0 -1
- package/dist/bundle/type.js +0 -1
- package/dist/bundle/utility.js +0 -1
- package/dist/cli.d.ts +0 -31
- package/dist/compatible/Lock.js +0 -1
- package/dist/compatible/Logger.js +0 -1
- package/dist/compatible/Semaphore.js +0 -1
- package/dist/compatible/array.js +0 -1
- package/dist/compatible/cli.js +0 -1
- package/dist/compatible/constants.js +0 -1
- package/dist/compatible/context.js +0 -1
- package/dist/compatible/cookie.js +0 -1
- package/dist/compatible/data-transfer.js +0 -1
- package/dist/compatible/datetime.js +0 -1
- package/dist/compatible/domNode.js +0 -1
- package/dist/compatible/expression/evaluators.js +0 -1
- package/dist/compatible/expression/helper.js +0 -1
- package/dist/compatible/expression/index.js +0 -1
- package/dist/compatible/expression/indicator-functions.js +0 -1
- package/dist/compatible/expression/types.js +0 -1
- package/dist/compatible/filesystem.js +0 -1
- package/dist/compatible/function.js +0 -1
- package/dist/compatible/index.js +0 -1
- package/dist/compatible/indicators.js +0 -1
- package/dist/compatible/number.js +0 -1
- package/dist/compatible/object.js +0 -1
- package/dist/compatible/process.js +0 -1
- package/dist/compatible/property-types.js +0 -1
- package/dist/compatible/require.js +0 -1
- package/dist/compatible/scope.js +0 -1
- package/dist/compatible/string.js +0 -1
- package/dist/compatible/test-helper.js +0 -1
- package/dist/compatible/type.js +0 -1
- package/dist/compatible/utility.js +0 -1
- package/dist/constants.d.ts +0 -99
- package/dist/context.d.ts +0 -9
- package/dist/cookie.d.ts +0 -31
- package/dist/data-transfer.d.ts +0 -45
- package/dist/datetime.d.ts +0 -37
- package/dist/domNode.d.ts +0 -82
- package/dist/expression/evaluators.d.ts +0 -55
- package/dist/expression/helper.d.ts +0 -4
- package/dist/expression/index.d.ts +0 -7
- package/dist/expression/indicator-functions.d.ts +0 -14
- package/dist/expression/types.d.ts +0 -70
- package/dist/expression/types.js +0 -1
- package/dist/filesystem.d.ts +0 -138
- package/dist/function.d.ts +0 -20
- package/dist/index.d.ts +0 -23
- package/dist/indicators.d.ts +0 -68
- package/dist/number.d.ts +0 -35
- package/dist/object.d.ts +0 -213
- package/dist/process.d.ts +0 -22
- package/dist/property-types.d.ts +0 -460
- package/dist/require.d.ts +0 -6
- package/dist/scope.d.ts +0 -44
- package/dist/string.d.ts +0 -299
- package/dist/test/Lock.d.ts +0 -1
- package/dist/test/Logger.d.ts +0 -1
- package/dist/test/Semaphore.d.ts +0 -1
- package/dist/test/array.d.ts +0 -1
- package/dist/test/cookie.d.ts +0 -1
- package/dist/test/data-transfer.d.ts +0 -1
- package/dist/test/datetime.d.ts +0 -1
- package/dist/test/domNode.d.ts +0 -1
- package/dist/test/expression/evaluators.d.ts +0 -1
- package/dist/test/expression/helper.d.ts +0 -1
- package/dist/test/expression/indicator-functions.d.ts +0 -1
- package/dist/test/filesystem.d.ts +0 -1
- package/dist/test/function.d.ts +0 -1
- package/dist/test/indicators.d.ts +0 -1
- package/dist/test/number.d.ts +0 -1
- package/dist/test/object.d.ts +0 -1
- package/dist/test/process.d.ts +0 -1
- package/dist/test/property-types.d.ts +0 -1
- package/dist/test/scope.d.ts +0 -1
- package/dist/test/string.d.ts +0 -1
- package/dist/test/utility.d.ts +0 -1
- package/dist/test-helper.d.ts +0 -143
- package/dist/type.d.ts +0 -211
- package/dist/utility.d.ts +0 -44
package/dist/test-helper.js
CHANGED
|
@@ -1 +1,341 @@
|
|
|
1
|
-
"use strict";if("undefined"!=typeof module&&null!==module&&"undefined"!==eval("typeof require")&&null!==eval("require")&&"main"in eval("require")&&"undefined"!==eval("typeof require.main")&&null!==eval("require.main")){var ORIGINAL_MAIN_MODULE=module;module!==eval("require.main")&&"paths"in module&&"paths"in eval("require.main")&&"undefined"!=typeof __dirname&&null!==__dirname&&(module.paths=eval("require.main.paths").concat(module.paths.filter(function(path){return eval("require.main.paths").includes(path)})))}if(null==window)var window="undefined"==typeof global||null===global?{}:global;!function(e,t){if("object"==typeof exports&&"object"==typeof module)module.exports=t(require("@jest/globals"),require("@babel/runtime/helpers/extends"));else if("function"==typeof define&&define.amd)define(["@jest/globals","@babel/runtime/helpers/extends"],t);else{var r="object"==typeof exports?t(require("@jest/globals"),require("@babel/runtime/helpers/extends")):t(e["@jest/globals"],e["@babel/runtime/helpers/extends"]);for(var n in r)("object"==typeof exports?exports:e)[n]=r[n]}}(this,function(__WEBPACK_EXTERNAL_MODULE__37__,__WEBPACK_EXTERNAL_MODULE__3__){return function(){var __webpack_modules__={0:function(e,t,r){r.d(t,{CLASS_TO_TYPE_MAPPING:function(){return n}});Symbol.for("clientnodeValue"),Symbol.for("clientnodeIgnoreNullAndUndefined");var n={"[object Array]":"array","[object Boolean]":"boolean","[object Date]":"date","[object Error]":"error","[object Function]":"function","[object Map]":"map","[object Number]":"number","[object Object]":"object","[object RegExp]":"regexp","[object Set]":"set","[object String]":"string"};Object.prototype},4:function(e,t,r){r.d(t,{isFunction:function(){return _},isMap:function(){return i},isNumeric:function(){return a},isSet:function(){return o}});var n=r(2);var a=function(e){var t=(0,n.determineType)(e);return["number","string"].includes(t)&&!isNaN(e-parseFloat(e))},o=function(e){return"set"===(0,n.determineType)(e)},i=function(e){return"map"===(0,n.determineType)(e)},_=function(e){return Boolean(e)&&["[object AsyncFunction]","[object Function]"].includes({}.toString.call(e))}},2:function(__unused_webpack_module,__webpack_exports__,__webpack_require__){var _extends,VALUE_COPY_SYMBOL,IGNORE_NULL_AND_UNDEFINED_SYMBOL,isMap,isSet,isObject,isPlainObject,isFunction,isProxy,isNotANumber,evaluate,escapeRegularExpressions;__webpack_require__.d(__webpack_exports__,{determineType:function(){return determineType},represent:function(){return _represent}});var _babel_runtime_helpers_extends__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__(3),_babel_runtime_helpers_extends__WEBPACK_IMPORTED_MODULE_0___default=__webpack_require__.n(_babel_runtime_helpers_extends__WEBPACK_IMPORTED_MODULE_0__),_constants__WEBPACK_IMPORTED_MODULE_1__=__webpack_require__(0),_indicators__WEBPACK_IMPORTED_MODULE_2__=__webpack_require__(4);function _createForOfIteratorHelperLoose(e,t){var r="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(r)return(r=r.call(e)).next.bind(r);if(Array.isArray(e)||(r=_unsupportedIterableToArray(e))||t&&e&&"number"==typeof e.length){r&&(e=r);var n=0;return function(){return n>=e.length?{done:!0}:{done:!1,value:e[n++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function _unsupportedIterableToArray(e,t){if(e){if("string"==typeof e)return _arrayLikeToArray(e,t);var r={}.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)?_arrayLikeToArray(e,t):void 0}}function _arrayLikeToArray(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);r<t;r++)n[r]=e[r];return n}var _addDynamicGetterAndSetter=function(e,t,r,n,a,o){if(void 0===t&&(t=null),void 0===r&&(r=null),void 0===n&&(n={}),void 0===a&&(a=!0),void 0===o&&(o=[Object]),a&&"object"==typeof e)if(Array.isArray(e))for(var i,_=0,s=_createForOfIteratorHelperLoose(e);!(i=s()).done;){var c=i.value;e[_]=_addDynamicGetterAndSetter(c,t,r,n,a),_+=1}else if(isMap(e))for(var l,u=_createForOfIteratorHelperLoose(e);!(l=u()).done;){var f=l.value,p=f[0],v=f[1];e.set(p,_addDynamicGetterAndSetter(v,t,r,n,a))}else if(isSet(e)){for(var d,E=[],y=_createForOfIteratorHelperLoose(e);!(d=y()).done;){var g=d.value;e.delete(g),E.push(_addDynamicGetterAndSetter(g,t,r,n,a))}for(var O=0,b=E;O<b.length;O++){var h=b[O];e.add(h)}}else if(null!==e)for(var P=0,m=Object.entries(e);P<m.length;P++){var A=m[P],j=A[0],M=A[1];e[j]=_addDynamicGetterAndSetter(M,t,r,n,a)}if(t||r)for(var x,S,D=function(){var a=S.value;if(isObject(e)&&e instanceof a){var o=getProxyHandler(e,n),i=getProxyHandler(e,n);t&&(i.get=function(r,n){return"__target__"===n?e:"__revoke__"===n?function(){return c(),e}:"function"==typeof e[n]?e[n]:t(o.get(s,n),n,e)}),r&&(i.set=function(t,n,a){return o.set(s,n,r(n,a,e))});var _=Proxy.revocable({},i),s=_.proxy,c=_.revoke;return{v:s}}},T=_createForOfIteratorHelperLoose(o);!(S=T()).done;)if(x=D())return x.v;return e},convertCircularObjectToJSON=function(e,t,r){void 0===t&&(t=function(e){return null!=e?e:"__circularReference__"}),void 0===r&&(r=0);var n=new Map;return function(e){var a=function(e,r){if(isObject(r)){var o,i;if(n.has(r))return t(null!==(o=n.get(r))&&void 0!==o?o:null,e,r,n);if(n.set(r,null),Array.isArray(r)){i=[];for(var _,s=_createForOfIteratorHelperLoose(r);!(_=s()).done;){var c=_.value;i.push(a(null,c))}}else{i={};for(var l=0,u=Object.entries(r);l<u.length;l++){var f=u[l],p=f[0],v=f[1];i[p]=a(p,v)}}return n.set(r,i),i}return r};return JSON.stringify(e,a,r)}(e)},_convertMapToPlainObject=function(e,t){if(void 0===t&&(t=!0),"object"==typeof e){if(isMap(e)){for(var r,n={},a=_createForOfIteratorHelperLoose(e);!(r=a()).done;){var o=r.value,i=o[0],_=o[1];t&&(_=_convertMapToPlainObject(_,t)),["number","string"].includes(typeof i)&&(n[String(i)]=_)}return n}if(t)if(isPlainObject(e))for(var s=0,c=Object.entries(e);s<c.length;s++){var l=c[s],u=l[0],f=l[1];e[u]=_convertMapToPlainObject(f,t)}else if(Array.isArray(e))for(var p=0,v=0,d=e;v<d.length;v++){var E=d[v];e[p]=_convertMapToPlainObject(E,t),p+=1}else if(isSet(e)){for(var y,g=[],O=_createForOfIteratorHelperLoose(e);!(y=O()).done;){var b=y.value;e.delete(b),g.push(_convertMapToPlainObject(b,t))}for(var h=0,P=g;h<P.length;h++){var m=P[h];e.add(m)}}}return e},_convertPlainObjectToMap=function(e,t){if(void 0===t&&(t=!0),"object"==typeof e){if(isPlainObject(e)){for(var r=new Map,n=0,a=Object.entries(e);n<a.length;n++){var o=a[n],i=o[0],_=o[1];t&&(e[i]=_convertPlainObjectToMap(_,t)),r.set(i,e[i])}return r}if(t)if(Array.isArray(e))for(var s=0,c=0,l=e;c<l.length;c++){var u=l[c];e[s]=_convertPlainObjectToMap(u,t),s+=1}else if(isMap(e))for(var f,p=_createForOfIteratorHelperLoose(e);!(f=p()).done;){var v=f.value,d=v[0],E=v[1];e.set(d,_convertPlainObjectToMap(E,t))}else if(isSet(e)){for(var y,g=[],O=_createForOfIteratorHelperLoose(e);!(y=O()).done;){var b=y.value;e.delete(b),g.push(_convertPlainObjectToMap(b,t))}for(var h=0,P=g;h<P.length;h++){var m=P[h];e.add(m)}}}return e},_convertSubstringInPlainObject=function(e,t,r){for(var n=0,a=Object.entries(e);n<a.length;n++){var o=a[n],i=o[0],_=o[1];isPlainObject(_)?e[i]=_convertSubstringInPlainObject(_,t,r):"string"==typeof _&&(e[i]=_.replace(t,r))}return e},_copy=function(e,t,r,n,a,o,i,_){if(void 0===t&&(t=!1),void 0===r&&(r=-1),void 0===n&&(n=VALUE_COPY_SYMBOL),void 0===a&&(a=null),void 0===o&&(o=!1),void 0===i&&(i=[]),void 0===_&&(_=0),isObject(e)){if(!a){if(Array.isArray(e))return _copy(e,t,r,n,[],o,i,_);if(e instanceof Map)return _copy(e,t,r,n,new Map,o,i,_);if(e instanceof Set)return _copy(e,t,r,n,new Set,o,i,_);if(e instanceof Date)return new Date(e.getTime());if(e instanceof RegExp){var s=/[^/]*$/.exec(e.toString());return(a=new RegExp(e.source,s?s[0]:void 0)).lastIndex=e.lastIndex,a}return"undefined"!=typeof Blob&&e instanceof Blob?t?e.slice(0,e.size,e.type):e:_copy(e,t,r,n,{},o,i,_)}if(e===a)throw new Error("Can't copy because source and destination are identical.");if(!o&&![void 0,null].includes(e)){var c=i.indexOf(e);if(-1!==c)return i[c];i.push(e)}var l=function(e){if(-1!==r&&r<_+1)return n===VALUE_COPY_SYMBOL?e:n;var a=_copy(e,t,r,n,null,o,i,_+1);return o||[void 0,null].includes(e)||"object"!=typeof e||i.push(e),a};if(Array.isArray(e))for(var u,f=_createForOfIteratorHelperLoose(e);!(u=f()).done;){var p=u.value;a.push(l(p))}else if(e instanceof Map)for(var v,d=_createForOfIteratorHelperLoose(e);!(v=d()).done;){var E=v.value,y=E[0],g=E[1];a.set(y,l(g))}else if(e instanceof Set)for(var O,b=_createForOfIteratorHelperLoose(e);!(O=b()).done;){var h=O.value;a.add(l(h))}else for(var P=0,m=Object.entries(e);P<m.length;P++){var A=m[P],j=A[0],M=A[1];try{a[j]=l(M)}catch(e){throw new Error('Failed to copy property value object "'+j+'": '+_represent(e),{cause:e})}}}return a||e},determineType=function(e){if([null,void 0].includes(e))return String(e);var t=typeof e;if(["function","object"].includes(t)&&"toString"in e){var r=Object.prototype.toString.call(e);if(Object.prototype.hasOwnProperty.call(_constants__WEBPACK_IMPORTED_MODULE_1__.CLASS_TO_TYPE_MAPPING,r))return _constants__WEBPACK_IMPORTED_MODULE_1__.CLASS_TO_TYPE_MAPPING[r]}return t},_equals=function equals(firstValue,secondValue,givenOptions){void 0===givenOptions&&(givenOptions={});var options=_extends({compareBlobs:!1,deep:-1,exceptionPrefixes:[],ignoreFunctions:!0,properties:null,returnReasonIfNotEqual:!1},givenOptions);if(options.ignoreFunctions&&isFunction(firstValue)&&isFunction(secondValue)||firstValue===secondValue||isNotANumber(firstValue)&&isNotANumber(secondValue)||firstValue instanceof RegExp&&secondValue instanceof RegExp&&firstValue.toString()===secondValue.toString()&&firstValue.flags.split("").sort().join("")===secondValue.flags.split("").sort().join("")||firstValue instanceof Date&&secondValue instanceof Date&&(isNaN(firstValue.getTime())&&isNaN(secondValue.getTime())||!isNaN(firstValue.getTime())&&!isNaN(secondValue.getTime())&&firstValue.getTime()===secondValue.getTime())||options.compareBlobs&&"undefined"!==eval("typeof Buffer")&&Object.prototype.hasOwnProperty.call(eval("Buffer"),"isBuffer")&&firstValue instanceof eval("Buffer")&&secondValue instanceof eval("Buffer")&&firstValue.toString("base64")===secondValue.toString("base64"))return!0;if(options.compareBlobs&&"undefined"!=typeof Blob&&firstValue instanceof Blob&&secondValue instanceof Blob)return new Promise(function(e){for(var t=[],r=0,n=[firstValue,secondValue];r<n.length;r++){var a=n[r],o=new FileReader;o.onload=function(r){null===r.target?t.push(null):t.push(r.target.result),2===t.length&&(t[0]===t[1]?e(!0):e(!!options.returnReasonIfNotEqual&&">>> Blob("+_represent(t[0])+") !== Blob("+_represent(t[1])+")"))},o.readAsDataURL(a)}});if(isPlainObject(firstValue)&&isPlainObject(secondValue)&&!(firstValue instanceof RegExp||secondValue instanceof RegExp)||Array.isArray(firstValue)&&Array.isArray(secondValue)&&firstValue.length===secondValue.length||determineType(firstValue)===determineType(secondValue)&&["map","set"].includes(determineType(firstValue))&&firstValue.size===secondValue.size){for(var promises=[],_i11=0,_arr4=[[firstValue,secondValue],[secondValue,firstValue]];_i11<_arr4.length;_i11++){var _arr4$_i=_arr4[_i11],first=_arr4$_i[0],second=_arr4$_i[1],firstIsArray=Array.isArray(first);if(firstIsArray&&(!Array.isArray(second)||first.length!==second.length))return!!options.returnReasonIfNotEqual&&".length";var firstIsMap=isMap(first);if(firstIsMap&&(!isMap(second)||first.size!==second.size))return!!options.returnReasonIfNotEqual&&".size";var firstIsSet=isSet(first);if(firstIsSet&&(!isSet(second)||first.size!==second.size))return!!options.returnReasonIfNotEqual&&".size";if(firstIsArray){for(var index=0,_loop2=function(){var e=_arr5[_i12];if(0!==options.deep){var t=_equals(e,second[index],_extends({},options,{deep:options.deep-1}));if(!t)return{v:!1};var r=index,n=function(e){var t;return"string"==typeof e?"["+String(r)+"]"+(null!==(t={"[":"",">":" "}[e[0]])&&void 0!==t?t:".")+e:e};if(Object.prototype.hasOwnProperty.call(t,"then")&&promises.push(t.then(n)),"string"==typeof t)return{v:n(t)}}index+=1},_ret2,_i12=0,_arr5=first;_i12<_arr5.length;_i12++)if(_ret2=_loop2(),_ret2)return _ret2.v}else if(firstIsMap){for(var _loop3=function(){var e=_step11.value,t=e[0],r=e[1];if(0!==options.deep){var n=_equals(r,second.get(t),_extends({},options,{deep:options.deep-1}));if(!n)return{v:!1};var a=function(e){var r;return"string"==typeof e?"get("+_represent(t)+")"+(null!==(r={"[":"",">":" "}[e[0]])&&void 0!==r?r:".")+e:e};if(Object.prototype.hasOwnProperty.call(n,"then")&&promises.push(n.then(a)),"string"==typeof n)return{v:a(n)}}},_ret3,_iterator11=_createForOfIteratorHelperLoose(first),_step11;!(_step11=_iterator11()).done;)if(_ret3=_loop3(),_ret3)return _ret3.v}else if(firstIsSet){for(var _loop4=function(){var e=_step12.value;if(0!==options.deep){for(var t,r=!1,n=[],a=_createForOfIteratorHelperLoose(second);!(t=a()).done;){var o=t.value,i=_equals(e,o,_extends({},options,{deep:options.deep-1}));if("boolean"==typeof i){if(i){r=!0;break}}else n.push(i)}var _=function(t){return!!t||!!options.returnReasonIfNotEqual&&">>> {-> "+_represent(e)+" not found}"};return r?0:(n.length&&promises.push(new Promise(function(e){Promise.all(n).then(function(t){e(_(t.some(function(e){return e})))},function(){})})),{v:_(!1)})}},_ret4,_iterator12=_createForOfIteratorHelperLoose(first),_step12;!(_step12=_iterator12()).done;)if(_ret4=_loop4(),0!==_ret4&&_ret4)return _ret4.v}else for(var _loop5=function(){var e=_Object$entries7[_i13],t=e[0],r=e[1];if(options.properties&&!options.properties.includes(t))return 0;for(var n,a=!1,o=_createForOfIteratorHelperLoose(options.exceptionPrefixes);!(n=o()).done;){var i=n.value;if(t.startsWith(i)){a=!0;break}}if(a)return 0;if(0!==options.deep){var _=_equals(r,second[t],_extends({},options,{deep:options.deep-1}));if(!_)return{v:!1};var s=function(e){var r;return"string"==typeof e?t+(null!==(r={"[":"",">":" "}[e[0]])&&void 0!==r?r:".")+e:e};if(Object.prototype.hasOwnProperty.call(_,"then")&&promises.push(_.then(s)),"string"==typeof _)return{v:s(_)}}},_ret5,_i13=0,_Object$entries7=Object.entries(first);_i13<_Object$entries7.length&&(_ret5=_loop5(),0!==_ret5);_i13++)if(_ret5)return _ret5.v}return!promises.length||new Promise(function(e){Promise.all(promises).then(function(t){for(var r,n=_createForOfIteratorHelperLoose(t);!(r=n()).done;){var a=r.value;if(!a||"string"==typeof a){e(a);break}}e(!0)},function(){})})}return!!options.returnReasonIfNotEqual&&">>> "+_represent(firstValue)+" !== "+_represent(secondValue)},evaluateDynamicData=function(e,t,r,n,a){if(void 0===t&&(t={}),void 0===r&&(r="self"),void 0===n&&(n="__evaluate__"),void 0===a&&(a="__execute__"),"object"!=typeof e||null===e)return e;r in t||(t[r]=e);var o=function(e,r){void 0===r&&(r=n);var o=evaluate(e,t,r===a);if(o.error)throw new Error(o.error);return o.result},i=function(e){if("object"!=typeof e||null===e||"undefined"==typeof Proxy)return e;for(var t=0,r=Object.entries(e);t<r.length;t++){var s=r[t],c=s[0],l=s[1];if("__target__"!==c&&isObject(l)){var u=l;if(i(u),Object.prototype.hasOwnProperty.call(u,n)||Object.prototype.hasOwnProperty.call(u,a)){var f=u;e[c]=new Proxy(u,{get:function(e,t){if("__target__"===t)return e;if("hasOwnProperty"===t)return e[t];for(var r=0,i=[n,a];r<i.length;r++){var s=i[r];if(t===s&&"string"==typeof e[t])return _(o(e[t],s))}var c=_(e);if("toString"===t){var l=o(c);return l[t].bind(l)}if("string"!=typeof t){var u,f=o(c);return null!=(u=f[t])&&u.bind?f[t].bind(f):f[t]}for(var p=0,v=[n,a];p<v.length;p++){var d=v[p];if(Object.prototype.hasOwnProperty.call(e,d))return o(c,d)[t]}return c[t]},ownKeys:function(e){for(var t=0,r=[n,a];t<r.length;t++){var i=r[t];if(Object.prototype.hasOwnProperty.call(e,i))return Object.getOwnPropertyNames(_(o(e[i],i)))}return Object.getOwnPropertyNames(e)}}),e[c].__target__||(e[c].__target__=f)}}}return e},_=function(e){if(isObject(e)){if(isProxy(e)){for(var t=0,r=[n,a];t<r.length;t++){var i=r[t];if(Object.prototype.hasOwnProperty.call(e,i))return e[i]}e=e.__target__}for(var s=0,c=Object.entries(e);s<c.length;s++){var l=c[s],u=l[0],f=l[1];if([n,a].includes(u))return"undefined"==typeof Proxy?_(o(f)):f;e[u]=_(f)}}return e};t.resolve=_;var s=function(e){if(isObject(e))for(var t=0,r=Object.entries(e);t<r.length;t++){var n=r[t],a=n[0],o=n[1];if("__target__"!==a&&null!==o&&["function","undefined"].includes(typeof o)){var i=o.__target__;void 0!==i&&(e[a]=i),s(o)}}return e};return Object.prototype.hasOwnProperty.call(e,n)?o(e[n]):Object.prototype.hasOwnProperty.call(e,a)?o(e[a],a):s(_(i(e)))},_removeKeysInEvaluation=function(e,t){void 0===t&&(t=["__evaluate__","__execute__"]);for(var r=0,n=Object.entries(e);r<n.length;r++){var a=n[r],o=a[0],i=a[1];!t.includes(o)&&t.some(function(t){return Object.prototype.hasOwnProperty.call(e,t)})?delete e[o]:isPlainObject(i)&&_removeKeysInEvaluation(i,t)}return e},_extend=function(e,t){for(var r=!1,n=arguments.length,a=new Array(n>2?n-2:0),o=2;o<n;o++)a[o-2]=arguments[o];var i,_=a;e===IGNORE_NULL_AND_UNDEFINED_SYMBOL||"boolean"==typeof e?(r=e,i=t):(i=e,isObject(t)?_=[t].concat(_):void 0!==t&&(i=t));for(var s,c=function(e,t){return t===e?e:r&&t&&(isPlainObject(t)||isMap(t))?(n=isMap(t)?e&&isMap(e)?e:new Map:e&&isPlainObject(e)?e:{},_extend(r,n,t)):t;var n},l=_createForOfIteratorHelperLoose(_);!(s=l()).done;){var u=s.value,f=typeof i,p=typeof u;if(isMap(i)&&(f+=" Map"),isMap(u)&&(p+=" Map"),f===p&&i!==u)if(isMap(i)&&isMap(u))for(var v,d=_createForOfIteratorHelperLoose(u);!(v=d()).done;){var E=v.value,y=E[0],g=E[1];i.set(y,c(i.get(y),g))}else if(!isObject(i)||Array.isArray(i)||"undefined"!=typeof Blob&&i instanceof Blob||!isObject(u)||Array.isArray(u)||"undefined"!=typeof Blob&&u instanceof Blob)i=u;else for(var O=0,b=Object.entries(u);O<b.length;O++){var h=b[O],P=h[0],m=h[1];r===IGNORE_NULL_AND_UNDEFINED_SYMBOL&&[null,void 0].includes(m)||(i[P]=c(i[P],m))}else i=u}return i},getProxyHandler=function(e,t){return void 0===t&&(t={}),t=_extends({delete:"[]",get:"[]",has:"[]",set:"[]"},t),{deleteProperty:function(r,n){return"[]"!==t.delete||"string"!=typeof n?e[t.delete](n):(delete e[n],!0)},get:function(r,n){return"[]"===t.get&&"string"==typeof n?e[n]:e[t.get](n)},has:function(r,n){return"[]"===t.has?n in e:e[t.has](n)},set:function(r,n,a){return"[]"!==t.set||"string"!=typeof n?e[t.set](n,a):(e[n]=a,!0)}}},_mask=function(e,t){if(!0===(t=_extends({exclude:!1,include:!0},t)).exclude||Array.isArray(t.exclude)&&0===t.exclude.length||!1===t.include||"object"!=typeof e)return{};var r=Array.isArray(t.exclude)?t.exclude.reduce(function(e,t){var r;return _extends({},e,((r={})[t]=!0,r))},{}):t.exclude,n=Array.isArray(t.include)?t.include.reduce(function(e,t){var r;return _extends({},e,((r={})[t]=!0,r))},{}):t.include,a={};if(isPlainObject(n))for(var o=0,i=Object.entries(n);o<i.length;o++){var _=i[o],s=_[0],c=_[1];Object.prototype.hasOwnProperty.call(e,s)&&(!0===c?a[s]=e[s]:(isPlainObject(c)||Array.isArray(c)&&c.length)&&"object"==typeof e[s]&&(a[s]=_mask(e[s],{include:c})))}else a=e;if(isPlainObject(r)){for(var l=!1,u=_extends({},a),f=0,p=Object.entries(r);f<p.length;f++){var v=p[f],d=v[0],E=v[1];if(Object.prototype.hasOwnProperty.call(u,d))if(!0===E)l=!0,delete u[d];else if((isPlainObject(E)||Array.isArray(E)&&E.length)&&"object"==typeof u[d]){var y=u[d];u[d]=_mask(u[d],{exclude:E}),u[d]!==y&&(l=!0)}}l&&(a=u)}return a},_modifyObject=function(e,t,r,n,a,o,i,_,s){if(void 0===r&&(r="__remove__"),void 0===n&&(n="__prepend__"),void 0===a&&(a="__append__"),void 0===o&&(o="__"),void 0===i&&(i="__"),void 0===_&&(_=null),void 0===s&&(s=null),isMap(t)&&isMap(e))for(var c,l=_createForOfIteratorHelperLoose(t);!(c=l()).done;){var u=c.value,f=u[0],p=u[1];e.has(f)&&_modifyObject(e.get(f),p,r,n,a,o,i,t,f)}else if(isObject(t)&&isObject(e))for(var v=0,d=Object.entries(t);v<d.length;v++){var E=d[v],y=E[0],g=E[1],O=NaN;if(Array.isArray(e)&&y.startsWith(o)&&y.endsWith(i)&&((O=parseInt(y.substring(o.length,y.length-i.length),10))<0||O>=e.length)&&(O=NaN),[r,n,a].includes(y)||!isNaN(O)){if(Array.isArray(e))if(y===r)for(var b,h=_createForOfIteratorHelperLoose([].concat(g));!(b=h()).done;){var P=b.value;"string"==typeof P&&P.startsWith(o)&&P.endsWith(i)?e.splice(parseInt(P.substring(o.length,P.length-i.length),10),1):e.includes(P)?e.splice(e.indexOf(P),1):"number"==typeof P&&P<e.length&&e.splice(P,1)}else y===a?e=e.concat(g):y===n?e=[].concat(g).concat(e):isObject(e[O])&&isObject(g)?_extend(!0,_modifyObject(e[O],g,r,n,a,o,i),e[O],g):e[O]=g;else if(y===r)for(var m,A=_createForOfIteratorHelperLoose([].concat(g));!(m=A()).done;){var j=m.value;"string"==typeof j&&Object.prototype.hasOwnProperty.call(e,j)&&delete e[j]}delete t[y],_&&"string"==typeof s&&delete _[s]}else null!==e&&Object.prototype.hasOwnProperty.call(e,y)&&(e[y]=_modifyObject(e[y],g,r,n,a,o,i,t,y))}return e},_removeKeyPrefixes=function(e,t){void 0===t&&(t="#");var r=[].concat(t);if(Array.isArray(e))for(var n,a=0,o=_createForOfIteratorHelperLoose(e.slice());!(n=o()).done;){var i=n.value,_=!1;if("string"==typeof i){for(var s,c=_createForOfIteratorHelperLoose(r);!(s=c()).done;){var l=s.value;if(i.startsWith(l+":")){e.splice(a,1),_=!0;break}}if(_)continue}e[a]=_removeKeyPrefixes(i,r),a+=1}else if(isSet(e))for(var u,f=_createForOfIteratorHelperLoose(new Set(e));!(u=f()).done;){var p=u.value,v=!1;if("string"==typeof p){for(var d,E=_createForOfIteratorHelperLoose(r);!(d=E()).done;){var y=d.value;if(p.startsWith(y+":")){e.delete(p),v=!0;break}}if(v)continue}_removeKeyPrefixes(p,r)}else if(isMap(e))for(var g,O=_createForOfIteratorHelperLoose(new Map(e));!(g=O()).done;){var b=g.value,h=b[0],P=b[1],m=!1;if("string"==typeof h){for(var A,j=_createForOfIteratorHelperLoose(r);!(A=j()).done;){var M=A.value,x=escapeRegularExpressions(M);if(new RegExp("^"+x+"[0-9]*$").test(h)){e.delete(h),m=!0;break}}if(m)continue}e.set(h,_removeKeyPrefixes(P,r))}else if(isObject(e))for(var S=0,D=Object.entries(Object.assign({},e));S<D.length;S++){for(var T,I=D[S],L=I[0],w=I[1],R=!1,B=_createForOfIteratorHelperLoose(r);!(T=B()).done;){var U=T.value,N=escapeRegularExpressions(U);if(new RegExp("^"+N+"[0-9]*$").test(L)){delete e[L],R=!0;break}}R||(e[L]=_removeKeyPrefixes(w,r))}return e},_represent=function(e,t,r,n,a,o){if(void 0===t&&(t=30),void 0===r&&(r=" "),void 0===n&&(n=""),void 0===a&&(a="__maximum_number_of_levels_reached__"),void 0===o&&(o=8),0===o)return String(a);if(null===e)return"null";if(void 0===e)return"undefined";if("string"==typeof e)return'"'+e.replace(/\n/g,"\n"+n)+'"';if((0,_indicators__WEBPACK_IMPORTED_MODULE_2__.isNumeric)(e)||"boolean"==typeof e)return String(e);if(e instanceof Date)return e.toISOString();if(Array.isArray(e)){for(var i,_="[",s=!1,c=1,l=_createForOfIteratorHelperLoose(e);!(i=l()).done;){var u=i.value;if(c>t){_+="\n"+n+"...";break}s&&(_+=","),_+="\n"+n+r+_represent(u,t,r,""+n+r,a,o-1),s=!0,c+=1}return s&&(_+="\n"+n),_+="]"}if((0,_indicators__WEBPACK_IMPORTED_MODULE_2__.isMap)(e)){for(var f,p="",v=!1,d=1,E=_createForOfIteratorHelperLoose(e);!(f=E()).done;){var y=f.value,g=y[0],O=y[1];if(d>t){p+=",\n"+n+"...";break}v&&(p+=",\n"+n+r),p+=_represent(g,t,r,""+n+r,a,o-1)+" -> "+_represent(O,t,r,""+n+r,a,o-1),v=!0,d+=1}return v||(p="EmptyMap"),p}if((0,_indicators__WEBPACK_IMPORTED_MODULE_2__.isSet)(e)){for(var b,h="{",P=!1,m=1,A=_createForOfIteratorHelperLoose(e);!(b=A()).done;){var j=b.value;if(m>t){h+=",\n"+n+"...";break}P&&(h+=","),h+="\n"+n+r+_represent(j,t,r,""+n+r,a,o-1),P=!0,m+=1}return P?h+="\n"+n+"}":h="EmptySet",h}if((0,_indicators__WEBPACK_IMPORTED_MODULE_2__.isFunction)(e))return"__function__";for(var M,x="{",S=!1,D=1,T=_createForOfIteratorHelperLoose(Object.getOwnPropertyNames(e).sort());!(M=T()).done;){var I=M.value;if(D>t){x+=",\n"+n+"...";break}S&&(x+=","),x+="\n"+n+r+I+": "+_represent(e[I],t,r,""+n+r,a,o-1),S=!0,D+=1}return S&&(x+="\n"+n),x+="}"},sort=function(e){var t=[];if(Array.isArray(e))for(var r=0;r<e.length;r++)t.push(r);else if("object"==typeof e)if(isMap(e))for(var n,a=_createForOfIteratorHelperLoose(e);!(n=a()).done;){var o=n.value;t.push(o[0])}else if(null!==e)for(var i=0,_=Object.keys(e);i<_.length;i++){var s=_[i];t.push(s)}return t.sort()},_unwrapProxy=function(e,t){if(void 0===t&&(t=new Set),isObject(e)){if(t.has(e))return e;try{isFunction(e.__revoke__)&&(isProxy(e)&&(e=e.__target__),e.__revoke__())}catch(t){return e}finally{t.add(e)}if(Array.isArray(e))for(var r,n=0,a=_createForOfIteratorHelperLoose(e);!(r=a()).done;){var o=r.value;e[n]=_unwrapProxy(o,t),n+=1}else if(isMap(e))for(var i,_=_createForOfIteratorHelperLoose(e);!(i=_()).done;){var s=i.value,c=s[0],l=s[1];e.set(c,_unwrapProxy(l,t))}else if(isSet(e)){for(var u,f=[],p=_createForOfIteratorHelperLoose(e);!(u=p()).done;){var v=u.value;e.delete(v),f.push(_unwrapProxy(v,t))}for(var d=0,E=f;d<E.length;d++){var y=E[d];e.add(y)}}else for(var g=0,O=Object.entries(e);g<O.length;g++){var b=O[g],h=b[0],P=b[1];e[h]=_unwrapProxy(P,t)}}return e}},3:function(e){e.exports=__WEBPACK_EXTERNAL_MODULE__3__},37:function(e){e.exports=__WEBPACK_EXTERNAL_MODULE__37__}},__webpack_module_cache__={};function __webpack_require__(e){var t=__webpack_module_cache__[e];if(void 0!==t)return t.exports;var r=__webpack_module_cache__[e]={exports:{}};return __webpack_modules__[e](r,r.exports,__webpack_require__),r.exports}__webpack_require__.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return __webpack_require__.d(t,{a:t}),t},__webpack_require__.d=function(e,t){for(var r in t)__webpack_require__.o(t,r)&&!__webpack_require__.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},__webpack_require__.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},__webpack_require__.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})};var __webpack_exports__={};__webpack_require__.r(__webpack_exports__),__webpack_require__.d(__webpack_exports__,{TEST_DEFINED_SYMBOL:function(){return TEST_DEFINED_SYMBOL},TEST_THROW_SYMBOL:function(){return TEST_THROW_SYMBOL},TEST_UNDEFINED_SYMBOL:function(){return TEST_UNDEFINED_SYMBOL},expectExpectedType:function(){return expectExpectedType},testEach:function(){return testEach},testEachAgainstSameExpectation:function(){return testEachAgainstSameExpectation},testEachPromise:function(){return testEachPromise},testEachPromiseAgainstSameExpectation:function(){return testEachPromiseAgainstSameExpectation},testEachPromiseRejection:function(){return testEachPromiseRejection},testEachPromiseRejectionAgainstSameExpectation:function(){return testEachPromiseRejectionAgainstSameExpectation},testEachSingleParameterAgainstSameExpectation:function(){return testEachSingleParameterAgainstSameExpectation},testEachSingleParameterAgainstSamePromisedExpectation:function(){return testEachSingleParameterAgainstSamePromisedExpectation},testEachSingleParameterAgainstSameRejectedExpectation:function(){return testEachSingleParameterAgainstSameRejectedExpectation}});var _jest_globals__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__(37),_jest_globals__WEBPACK_IMPORTED_MODULE_0___default=__webpack_require__.n(_jest_globals__WEBPACK_IMPORTED_MODULE_0__),_object__WEBPACK_IMPORTED_MODULE_1__=__webpack_require__(2),TEST_DEFINED_SYMBOL=Symbol.for("clientnodeTestHelperDefined"),TEST_THROW_SYMBOL=Symbol.for("clientnodeTestHelperThrow"),TEST_UNDEFINED_SYMBOL=Symbol.for("clientnodeTestHelperUndefined"),expectExpectedType=function(e,t,r){void 0===r&&(r=!0);var n=r?(0,_jest_globals__WEBPACK_IMPORTED_MODULE_0__.expect)(e):e;return t===TEST_DEFINED_SYMBOL?n.toBeDefined():t===TEST_THROW_SYMBOL?n.toThrow():t===TEST_UNDEFINED_SYMBOL?n.not.toBeDefined():n.toStrictEqual(t)},_testEach=function(e,t,r){for(var n=arguments.length,a=new Array(n>3?n-3:0),o=3;o<n;o++)a[o-3]=arguments[o];e([].concat(a))("%p === "+t+"(%p, ...)",function(e){for(var t=arguments.length,n=new Array(t>1?t-1:0),a=1;a<t;a++)n[a-1]=arguments[a];expectExpectedType(r.apply(void 0,n),e)})},testEach=function(e,t){for(var r=arguments.length,n=new Array(r>2?r-2:0),a=2;a<r;a++)n[a-2]=arguments[a];_testEach.apply(void 0,[_jest_globals__WEBPACK_IMPORTED_MODULE_0__.test.each,e,t].concat(n))};testEach.only=function(e,t){for(var r=arguments.length,n=new Array(r>2?r-2:0),a=2;a<r;a++)n[a-2]=arguments[a];_testEach.apply(void 0,[_jest_globals__WEBPACK_IMPORTED_MODULE_0__.test.only.each,e,t].concat(n))},testEach.skip=function(e,t){for(var r=arguments.length,n=new Array(r>2?r-2:0),a=2;a<r;a++)n[a-2]=arguments[a];_testEach.apply(void 0,[_jest_globals__WEBPACK_IMPORTED_MODULE_0__.test.skip.each,e,t].concat(n))};var _testEachPromise=function(e,t,r){for(var n=arguments.length,a=new Array(n>3?n-3:0),o=3;o<n;o++)a[o-3]=arguments[o];e([].concat(a))("%p === "+t+"(%p, ...)",function(e){for(var t=arguments.length,n=new Array(t>1?t-1:0),a=1;a<t;a++)n[a-1]=arguments[a];return expectExpectedType((0,_jest_globals__WEBPACK_IMPORTED_MODULE_0__.expect)(r.apply(void 0,n)).resolves,e,!1)})},testEachPromise=function(e,t){for(var r=arguments.length,n=new Array(r>2?r-2:0),a=2;a<r;a++)n[a-2]=arguments[a];_testEachPromise.apply(void 0,[_jest_globals__WEBPACK_IMPORTED_MODULE_0__.test.each,e,t].concat(n))};testEachPromise.only=function(e,t){for(var r=arguments.length,n=new Array(r>2?r-2:0),a=2;a<r;a++)n[a-2]=arguments[a];_testEachPromise.apply(void 0,[_jest_globals__WEBPACK_IMPORTED_MODULE_0__.test.only.each,e,t].concat(n))},testEachPromise.skip=function(e,t){for(var r=arguments.length,n=new Array(r>2?r-2:0),a=2;a<r;a++)n[a-2]=arguments[a];_testEachPromise.apply(void 0,[_jest_globals__WEBPACK_IMPORTED_MODULE_0__.test.skip.each,e,t].concat(n))};var _testEachPromiseRejection=function(e,t,r){for(var n=arguments.length,a=new Array(n>3?n-3:0),o=3;o<n;o++)a[o-3]=arguments[o];e([].concat(a))("%p === "+t+"(%p, ...)",function(e){for(var t=arguments.length,n=new Array(t>1?t-1:0),a=1;a<t;a++)n[a-1]=arguments[a];return expectExpectedType((0,_jest_globals__WEBPACK_IMPORTED_MODULE_0__.expect)(r.apply(void 0,n)).rejects,e,!1)})},testEachPromiseRejection=function(e,t){for(var r=arguments.length,n=new Array(r>2?r-2:0),a=2;a<r;a++)n[a-2]=arguments[a];_testEachPromiseRejection.apply(void 0,[_jest_globals__WEBPACK_IMPORTED_MODULE_0__.test.each,e,t].concat(n))};testEachPromiseRejection.only=function(e,t){for(var r=arguments.length,n=new Array(r>2?r-2:0),a=2;a<r;a++)n[a-2]=arguments[a];_testEachPromiseRejection.apply(void 0,[_jest_globals__WEBPACK_IMPORTED_MODULE_0__.test.only.each,e,t].concat(n))},testEachPromiseRejection.skip=function(e,t){for(var r=arguments.length,n=new Array(r>2?r-2:0),a=2;a<r;a++)n[a-2]=arguments[a];_testEachPromiseRejection.apply(void 0,[_jest_globals__WEBPACK_IMPORTED_MODULE_0__.test.skip.each,e,t].concat(n))};var _testEachSingleParameterAgainstSameExpectation=function(e,t,r,n){for(var a=arguments.length,o=new Array(a>4?a-4:0),i=4;i<a;i++)o[i-4]=arguments[i];e([].concat(o))((0,_object__WEBPACK_IMPORTED_MODULE_1__.represent)(n)+" === "+t+"(%p)",function(e){expectExpectedType(n===TEST_THROW_SYMBOL?function(){return r(e)}:r(e),n)})},testEachSingleParameterAgainstSameExpectation=function(e,t,r){for(var n=arguments.length,a=new Array(n>3?n-3:0),o=3;o<n;o++)a[o-3]=arguments[o];_testEachSingleParameterAgainstSameExpectation.apply(void 0,[_jest_globals__WEBPACK_IMPORTED_MODULE_0__.test.each,e,t,r].concat(a))};testEachSingleParameterAgainstSameExpectation.only=function(e,t,r){for(var n=arguments.length,a=new Array(n>3?n-3:0),o=3;o<n;o++)a[o-3]=arguments[o];_testEachSingleParameterAgainstSameExpectation.apply(void 0,[_jest_globals__WEBPACK_IMPORTED_MODULE_0__.test.only.each,e,t,r].concat(a))},testEachSingleParameterAgainstSameExpectation.skip=function(e,t,r){for(var n=arguments.length,a=new Array(n>3?n-3:0),o=3;o<n;o++)a[o-3]=arguments[o];_testEachSingleParameterAgainstSameExpectation.apply(void 0,[_jest_globals__WEBPACK_IMPORTED_MODULE_0__.test.skip.each,e,t,r].concat(a))};var _testEachSingleParameterAgainstSamePromisedExpectation=function(e,t,r,n){for(var a=arguments.length,o=new Array(a>4?a-4:0),i=4;i<a;i++)o[i-4]=arguments[i];e([].concat(o))((0,_object__WEBPACK_IMPORTED_MODULE_1__.represent)(n)+" === "+t+"(%p)",function(e){return expectExpectedType((0,_jest_globals__WEBPACK_IMPORTED_MODULE_0__.expect)(r(e)).resolves,n,!1)})},testEachSingleParameterAgainstSamePromisedExpectation=function(e,t,r){for(var n=arguments.length,a=new Array(n>3?n-3:0),o=3;o<n;o++)a[o-3]=arguments[o];_testEachSingleParameterAgainstSamePromisedExpectation.apply(void 0,[_jest_globals__WEBPACK_IMPORTED_MODULE_0__.test.each,e,t,r].concat(a))};testEachSingleParameterAgainstSamePromisedExpectation.only=function(e,t,r){for(var n=arguments.length,a=new Array(n>3?n-3:0),o=3;o<n;o++)a[o-3]=arguments[o];_testEachSingleParameterAgainstSamePromisedExpectation.apply(void 0,[_jest_globals__WEBPACK_IMPORTED_MODULE_0__.test.only.each,e,t,r].concat(a))},testEachSingleParameterAgainstSamePromisedExpectation.skip=function(e,t,r){for(var n=arguments.length,a=new Array(n>3?n-3:0),o=3;o<n;o++)a[o-3]=arguments[o];_testEachSingleParameterAgainstSamePromisedExpectation.apply(void 0,[_jest_globals__WEBPACK_IMPORTED_MODULE_0__.test.skip.each,e,t,r].concat(a))};var _testEachSingleParameterAgainstSameRejectedExpectation=function(e,t,r,n){for(var a=arguments.length,o=new Array(a>4?a-4:0),i=4;i<a;i++)o[i-4]=arguments[i];e([].concat(o))((0,_object__WEBPACK_IMPORTED_MODULE_1__.represent)(n)+" === "+t+"(%p)",function(e){return expectExpectedType((0,_jest_globals__WEBPACK_IMPORTED_MODULE_0__.expect)(r(e)).rejects,n,!1)})},testEachSingleParameterAgainstSameRejectedExpectation=function(e,t,r){for(var n=arguments.length,a=new Array(n>3?n-3:0),o=3;o<n;o++)a[o-3]=arguments[o];_testEachSingleParameterAgainstSameRejectedExpectation.apply(void 0,[_jest_globals__WEBPACK_IMPORTED_MODULE_0__.test.each,e,t,r].concat(a))};testEachSingleParameterAgainstSameRejectedExpectation.only=function(e,t,r){for(var n=arguments.length,a=new Array(n>3?n-3:0),o=3;o<n;o++)a[o-3]=arguments[o];_testEachSingleParameterAgainstSameRejectedExpectation.apply(void 0,[_jest_globals__WEBPACK_IMPORTED_MODULE_0__.test.only.each,e,t,r].concat(a))},testEachSingleParameterAgainstSameRejectedExpectation.skip=function(e,t,r){for(var n=arguments.length,a=new Array(n>3?n-3:0),o=3;o<n;o++)a[o-3]=arguments[o];_testEachSingleParameterAgainstSameRejectedExpectation.apply(void 0,[_jest_globals__WEBPACK_IMPORTED_MODULE_0__.test.skip.each,e,t,r].concat(a))};var _testEachAgainstSameExpectation=function(e,t,r,n){for(var a=arguments.length,o=new Array(a>4?a-4:0),i=4;i<a;i++)o[i-4]=arguments[i];e([].concat(o))((0,_object__WEBPACK_IMPORTED_MODULE_1__.represent)(n)+" === "+t+"(%p, ...)",function(){for(var e=arguments.length,t=new Array(e),a=0;a<e;a++)t[a]=arguments[a];expectExpectedType(n===TEST_THROW_SYMBOL?function(){return r.apply(void 0,t)}:r.apply(void 0,t),n)})},testEachAgainstSameExpectation=function(e,t,r){for(var n=arguments.length,a=new Array(n>3?n-3:0),o=3;o<n;o++)a[o-3]=arguments[o];_testEachAgainstSameExpectation.apply(void 0,[_jest_globals__WEBPACK_IMPORTED_MODULE_0__.test.each,e,t,r].concat(a))};testEachAgainstSameExpectation.only=function(e,t,r){for(var n=arguments.length,a=new Array(n>3?n-3:0),o=3;o<n;o++)a[o-3]=arguments[o];_testEachAgainstSameExpectation.apply(void 0,[_jest_globals__WEBPACK_IMPORTED_MODULE_0__.test.only.each,e,t,r].concat(a))},testEachAgainstSameExpectation.skip=function(e,t,r){for(var n=arguments.length,a=new Array(n>3?n-3:0),o=3;o<n;o++)a[o-3]=arguments[o];_testEachAgainstSameExpectation.apply(void 0,[_jest_globals__WEBPACK_IMPORTED_MODULE_0__.test.skip.each,e,t,r].concat(a))};var _testEachPromiseAgainstSameExpectation=function(e,t,r,n){for(var a=arguments.length,o=new Array(a>4?a-4:0),i=4;i<a;i++)o[i-4]=arguments[i];e([].concat(o))((0,_object__WEBPACK_IMPORTED_MODULE_1__.represent)(n)+" === "+t+"(%p, ...)",function(){return expectExpectedType((0,_jest_globals__WEBPACK_IMPORTED_MODULE_0__.expect)(r.apply(void 0,arguments)).resolves,n,!1)})},testEachPromiseAgainstSameExpectation=function(e,t,r){for(var n=arguments.length,a=new Array(n>3?n-3:0),o=3;o<n;o++)a[o-3]=arguments[o];_testEachPromiseAgainstSameExpectation.apply(void 0,[_jest_globals__WEBPACK_IMPORTED_MODULE_0__.test.each,e,t,r].concat(a))};testEachPromiseAgainstSameExpectation.only=function(e,t,r){for(var n=arguments.length,a=new Array(n>3?n-3:0),o=3;o<n;o++)a[o-3]=arguments[o];_testEachPromiseAgainstSameExpectation.apply(void 0,[_jest_globals__WEBPACK_IMPORTED_MODULE_0__.test.only.each,e,t,r].concat(a))},testEachPromiseAgainstSameExpectation.skip=function(e,t,r){for(var n=arguments.length,a=new Array(n>3?n-3:0),o=3;o<n;o++)a[o-3]=arguments[o];_testEachPromiseAgainstSameExpectation.apply(void 0,[_jest_globals__WEBPACK_IMPORTED_MODULE_0__.test.skip.each,e,t,r].concat(a))};var _testEachPromiseRejectionAgainstSameExpectation=function(e,t,r,n){for(var a=arguments.length,o=new Array(a>4?a-4:0),i=4;i<a;i++)o[i-4]=arguments[i];e([].concat(o))((0,_object__WEBPACK_IMPORTED_MODULE_1__.represent)(n)+" === "+t+"(%p, ...)",function(){return expectExpectedType((0,_jest_globals__WEBPACK_IMPORTED_MODULE_0__.expect)(r.apply(void 0,arguments)).rejects,n,!1)})},testEachPromiseRejectionAgainstSameExpectation=function(e,t,r){for(var n=arguments.length,a=new Array(n>3?n-3:0),o=3;o<n;o++)a[o-3]=arguments[o];_testEachPromiseRejectionAgainstSameExpectation.apply(void 0,[_jest_globals__WEBPACK_IMPORTED_MODULE_0__.test.each,e,t,r].concat(a))};return testEachPromiseRejectionAgainstSameExpectation.only=function(e,t,r){for(var n=arguments.length,a=new Array(n>3?n-3:0),o=3;o<n;o++)a[o-3]=arguments[o];_testEachPromiseRejectionAgainstSameExpectation.apply(void 0,[_jest_globals__WEBPACK_IMPORTED_MODULE_0__.test.only.each,e,t,r].concat(a))},testEachPromiseRejectionAgainstSameExpectation.skip=function(e,t,r){for(var n=arguments.length,a=new Array(n>3?n-3:0),o=3;o<n;o++)a[o-3]=arguments[o];_testEachPromiseRejectionAgainstSameExpectation.apply(void 0,[_jest_globals__WEBPACK_IMPORTED_MODULE_0__.test.skip.each,e,t,r].concat(a))},__webpack_exports__.default=testEach,__webpack_exports__}()});
|
|
1
|
+
// #!/usr/bin/env babel-node
|
|
2
|
+
// -*- coding: utf-8 -*-
|
|
3
|
+
/** @module testHelper */
|
|
4
|
+
'use strict';
|
|
5
|
+
|
|
6
|
+
/* !
|
|
7
|
+
region header
|
|
8
|
+
Copyright Torben Sickert (info["~at~"]torben.website) 16.12.2012
|
|
9
|
+
|
|
10
|
+
License
|
|
11
|
+
-------
|
|
12
|
+
|
|
13
|
+
This library written by Torben Sickert stands under a creative commons
|
|
14
|
+
naming 3.0 unported license.
|
|
15
|
+
See https://creativecommons.org/licenses/by/3.0/deed.de
|
|
16
|
+
endregion
|
|
17
|
+
|
|
18
|
+
generic test boilerplate:
|
|
19
|
+
|
|
20
|
+
test.each([[EXPECTED, ...PARAMETERS], ...])(
|
|
21
|
+
'%p === FUNCTION(...%p)',
|
|
22
|
+
(expected: ReturnType<FUNCTION>, ...parameters: Parameters<FUNCTION>) =>
|
|
23
|
+
expect(FUNCTION(...parameters)).toStrictEqual(expected)
|
|
24
|
+
)
|
|
25
|
+
*/
|
|
26
|
+
// region imports
|
|
27
|
+
import { AnyFunction, FirstParameter, FunctionTestTuple, FunctionTestPromiseTuple, FunctionTestPromiseRejectionTuple, TestMatchers as Matchers, TestSymbol, ThenParameter, UnknownFunction } from "./type.js";
|
|
28
|
+
import { expect, test } from '@jest/globals';
|
|
29
|
+
import { represent } from "./object.js";
|
|
30
|
+
// endregion
|
|
31
|
+
export const TEST_DEFINED_SYMBOL = Symbol.for('clientnodeTestHelperDefined');
|
|
32
|
+
export const TEST_THROW_SYMBOL = Symbol.for('clientnodeTestHelperThrow');
|
|
33
|
+
export const TEST_UNDEFINED_SYMBOL = Symbol.for('clientnodeTestHelperUndefined');
|
|
34
|
+
/**
|
|
35
|
+
* Tests given result against given expectations. Respects special symbol
|
|
36
|
+
* values.
|
|
37
|
+
* @param givenResult - Target to compare expectation against.
|
|
38
|
+
* @param expected - Expected result.
|
|
39
|
+
* @param wrap - Indicates whether to wrap with an expect function call.
|
|
40
|
+
* @returns Nothing or a promise resolving to nothing.
|
|
41
|
+
*/
|
|
42
|
+
export const expectExpectedType = (givenResult, expected, wrap = true) => {
|
|
43
|
+
const result = wrap ? expect(givenResult) : givenResult;
|
|
44
|
+
if (expected === TEST_DEFINED_SYMBOL) return result.toBeDefined();
|
|
45
|
+
if (expected === TEST_THROW_SYMBOL) return result.toThrow();
|
|
46
|
+
if (expected === TEST_UNDEFINED_SYMBOL) return result.not.toBeDefined();
|
|
47
|
+
return result.toStrictEqual(expected);
|
|
48
|
+
};
|
|
49
|
+
/**
|
|
50
|
+
* Tests each given test set (expected value follows by various list of
|
|
51
|
+
* function parameters). It respects function signature to raise compile time
|
|
52
|
+
* errors if given test set does not match given function signature.
|
|
53
|
+
* @param tester - Underling testing function to use.
|
|
54
|
+
* @param functionName - Function description to test.
|
|
55
|
+
* @param callback - Function reference to test.
|
|
56
|
+
* @param functionTestTuple - Additional arrays of test sets to test given
|
|
57
|
+
* function again.
|
|
58
|
+
*/
|
|
59
|
+
const _testEach = (tester, functionName, callback, ...functionTestTuple) => {
|
|
60
|
+
tester([...functionTestTuple])(`%p === ${functionName}(%p, ...)`, (expected, ...parameters) => {
|
|
61
|
+
expectExpectedType(callback(...parameters), expected);
|
|
62
|
+
});
|
|
63
|
+
};
|
|
64
|
+
/**
|
|
65
|
+
* Tests each given test set (expected value follows by various list of
|
|
66
|
+
* function parameters). It respects function signature to raise compile time
|
|
67
|
+
* errors if given test set does not match given function signature.
|
|
68
|
+
* @param functionName - Function description to test.
|
|
69
|
+
* @param callback - Function reference to test.
|
|
70
|
+
* @param functionTestTuple - Additional arrays of test sets to test given
|
|
71
|
+
* function again.
|
|
72
|
+
*/
|
|
73
|
+
export const testEach = (functionName, callback, ...functionTestTuple) => {
|
|
74
|
+
_testEach(test.each, functionName, callback, ...functionTestTuple);
|
|
75
|
+
};
|
|
76
|
+
testEach.only = (functionName, callback, ...functionTestTuple) => {
|
|
77
|
+
_testEach(test.only.each, functionName, callback, ...functionTestTuple);
|
|
78
|
+
};
|
|
79
|
+
testEach.skip = (functionName, callback, ...functionTestTuple) => {
|
|
80
|
+
_testEach(test.skip.each, functionName, callback, ...functionTestTuple);
|
|
81
|
+
};
|
|
82
|
+
/**
|
|
83
|
+
* Tests each given test set (expected value follows by various list of
|
|
84
|
+
* function parameters). It respects function signature to raise compile time
|
|
85
|
+
* errors if given test set does not match given function signature.
|
|
86
|
+
* @param tester - Underling testing function to use.
|
|
87
|
+
* @param functionName - Function description to test.
|
|
88
|
+
* @param callback - Function reference to test.
|
|
89
|
+
* @param functionTestTuple - Additional arrays of test sets to test given
|
|
90
|
+
* function again.
|
|
91
|
+
*/
|
|
92
|
+
const _testEachPromise = (tester, functionName, callback, ...functionTestTuple) => {
|
|
93
|
+
tester([...functionTestTuple])(`%p === ${functionName}(%p, ...)`, (expected, ...parameters) => expectExpectedType(expect(callback(...parameters)).resolves, expected, false));
|
|
94
|
+
};
|
|
95
|
+
/**
|
|
96
|
+
* Tests each given test set (expected value follows by various list of
|
|
97
|
+
* function parameters). It respects function signature to raise compile time
|
|
98
|
+
* errors if given test set does not match given function signature.
|
|
99
|
+
* @param functionName - Function description to test.
|
|
100
|
+
* @param callback - Function reference to test.
|
|
101
|
+
* @param functionTestTuple - Additional arrays of test sets to test given
|
|
102
|
+
* function again.
|
|
103
|
+
*/
|
|
104
|
+
export const testEachPromise = (functionName, callback, ...functionTestTuple) => {
|
|
105
|
+
_testEachPromise(test.each, functionName, callback, ...functionTestTuple);
|
|
106
|
+
};
|
|
107
|
+
testEachPromise.only = (functionName, callback, ...functionTestTuple) => {
|
|
108
|
+
_testEachPromise(test.only.each, functionName, callback, ...functionTestTuple);
|
|
109
|
+
};
|
|
110
|
+
testEachPromise.skip = (functionName, callback, ...functionTestTuple) => {
|
|
111
|
+
_testEachPromise(test.skip.each, functionName, callback, ...functionTestTuple);
|
|
112
|
+
};
|
|
113
|
+
/**
|
|
114
|
+
* Tests each given test set (expected value follows by various list of
|
|
115
|
+
* function parameters). It respects function signature to raise compile time
|
|
116
|
+
* errors if given test set does not match given function signature.
|
|
117
|
+
* @param tester - Underling testing function to use.
|
|
118
|
+
* @param functionName - Function description to test.
|
|
119
|
+
* @param callback - Function reference to test.
|
|
120
|
+
* @param functionTestTuple - Additional arrays of test sets to test given
|
|
121
|
+
* function again.
|
|
122
|
+
*/
|
|
123
|
+
const _testEachPromiseRejection = (tester, functionName, callback, ...functionTestTuple) => {
|
|
124
|
+
tester([...functionTestTuple])(`%p === ${functionName}(%p, ...)`, (expected, ...parameters) => expectExpectedType(expect(callback(...parameters)).rejects, expected, false));
|
|
125
|
+
};
|
|
126
|
+
/**
|
|
127
|
+
* Tests each given test set (expected value follows by various list of
|
|
128
|
+
* function parameters). It respects function signature to raise compile time
|
|
129
|
+
* errors if given test set does not match given function signature.
|
|
130
|
+
* @param functionName - Function description to test.
|
|
131
|
+
* @param callback - Function reference to test.
|
|
132
|
+
* @param functionTestTuple - Additional arrays of test sets to test given
|
|
133
|
+
* function again.
|
|
134
|
+
*/
|
|
135
|
+
export const testEachPromiseRejection = (functionName, callback, ...functionTestTuple) => {
|
|
136
|
+
_testEachPromiseRejection(test.each, functionName, callback, ...functionTestTuple);
|
|
137
|
+
};
|
|
138
|
+
testEachPromiseRejection.only = (functionName, callback, ...functionTestTuple) => {
|
|
139
|
+
_testEachPromiseRejection(test.only.each, functionName, callback, ...functionTestTuple);
|
|
140
|
+
};
|
|
141
|
+
testEachPromiseRejection.skip = (functionName, callback, ...functionTestTuple) => {
|
|
142
|
+
_testEachPromiseRejection(test.skip.each, functionName, callback, ...functionTestTuple);
|
|
143
|
+
};
|
|
144
|
+
/**
|
|
145
|
+
* Tests each given single parameter against same given expected value. It
|
|
146
|
+
* respects function signature to raise compile time errors if given test set
|
|
147
|
+
* does not match given function signature.
|
|
148
|
+
* @param tester - Underling testing function to use.
|
|
149
|
+
* @param functionName - Function description to test.
|
|
150
|
+
* @param callback - Function reference to test.
|
|
151
|
+
* @param expected - Value to check each function call return value against.
|
|
152
|
+
* @param parameters - Additional first parameters to test given function with.
|
|
153
|
+
*/
|
|
154
|
+
const _testEachSingleParameterAgainstSameExpectation = (tester, functionName, callback, expected, ...parameters) => {
|
|
155
|
+
tester([...parameters])(`${represent(expected)} === ${functionName}(%p)`, parameter => {
|
|
156
|
+
expectExpectedType(expected === TEST_THROW_SYMBOL ? () => callback(parameter) : callback(parameter), expected);
|
|
157
|
+
});
|
|
158
|
+
};
|
|
159
|
+
/**
|
|
160
|
+
* Tests each given single parameter against same given expected value. It
|
|
161
|
+
* respects function signature to raise compile time errors if given test set
|
|
162
|
+
* does not match given function signature.
|
|
163
|
+
* @param functionName - Function description to test.
|
|
164
|
+
* @param callback - Function reference to test.
|
|
165
|
+
* @param expected - Value to check each function call return value against.
|
|
166
|
+
* @param parameters - Additional first parameters to test given function with.
|
|
167
|
+
*/
|
|
168
|
+
export const testEachSingleParameterAgainstSameExpectation = (functionName, callback, expected, ...parameters) => {
|
|
169
|
+
_testEachSingleParameterAgainstSameExpectation(test.each, functionName, callback, expected, ...parameters);
|
|
170
|
+
};
|
|
171
|
+
testEachSingleParameterAgainstSameExpectation.only = (functionName, callback, expected, ...parameters) => {
|
|
172
|
+
_testEachSingleParameterAgainstSameExpectation(test.only.each, functionName, callback, expected, ...parameters);
|
|
173
|
+
};
|
|
174
|
+
testEachSingleParameterAgainstSameExpectation.skip = (functionName, callback, expected, ...parameters) => {
|
|
175
|
+
_testEachSingleParameterAgainstSameExpectation(test.skip.each, functionName, callback, expected, ...parameters);
|
|
176
|
+
};
|
|
177
|
+
/**
|
|
178
|
+
* Tests each given single parameter against same given expected value. It
|
|
179
|
+
* respects function signature to raise compile time errors if given test set
|
|
180
|
+
* does not match given function signature.
|
|
181
|
+
* @param tester - Underling testing function to use.
|
|
182
|
+
* @param functionName - Function description to test.
|
|
183
|
+
* @param callback - Function reference to test.
|
|
184
|
+
* @param expected - Value to check each function call return value against.
|
|
185
|
+
* @param parameters - Additional first parameters to test given function with.
|
|
186
|
+
*/
|
|
187
|
+
const _testEachSingleParameterAgainstSamePromisedExpectation = (tester, functionName, callback, expected, ...parameters) => {
|
|
188
|
+
tester([...parameters])(`${represent(expected)} === ${functionName}(%p)`, parameter => expectExpectedType(expect(callback(parameter)).resolves, expected, false));
|
|
189
|
+
};
|
|
190
|
+
/**
|
|
191
|
+
* Tests each given single parameter against same given expected value. It
|
|
192
|
+
* respects function signature to raise compile time errors if given test set
|
|
193
|
+
* does not match given function signature.
|
|
194
|
+
* @param functionName - Function description to test.
|
|
195
|
+
* @param callback - Function reference to test.
|
|
196
|
+
* @param expected - Value to check each function call return value against.
|
|
197
|
+
* @param parameters - Additional first parameters to test given function with.
|
|
198
|
+
*/
|
|
199
|
+
export const testEachSingleParameterAgainstSamePromisedExpectation = (functionName, callback, expected, ...parameters) => {
|
|
200
|
+
_testEachSingleParameterAgainstSamePromisedExpectation(test.each, functionName, callback, expected, ...parameters);
|
|
201
|
+
};
|
|
202
|
+
testEachSingleParameterAgainstSamePromisedExpectation.only = (functionName, callback, expected, ...parameters) => {
|
|
203
|
+
_testEachSingleParameterAgainstSamePromisedExpectation(test.only.each, functionName, callback, expected, ...parameters);
|
|
204
|
+
};
|
|
205
|
+
testEachSingleParameterAgainstSamePromisedExpectation.skip = (functionName, callback, expected, ...parameters) => {
|
|
206
|
+
_testEachSingleParameterAgainstSamePromisedExpectation(test.skip.each, functionName, callback, expected, ...parameters);
|
|
207
|
+
};
|
|
208
|
+
/**
|
|
209
|
+
* Tests each given single parameter against same given expected value. It
|
|
210
|
+
* respects function signature to raise compile time errors if given test set
|
|
211
|
+
* does not match given function signature.
|
|
212
|
+
* @param tester - Underling testing function to use.
|
|
213
|
+
* @param functionName - Function description to test.
|
|
214
|
+
* @param callback - Function reference to test.
|
|
215
|
+
* @param expected - Value to check each function call return value against.
|
|
216
|
+
* @param parameters - Additional first parameters to test given function with.
|
|
217
|
+
*/
|
|
218
|
+
const _testEachSingleParameterAgainstSameRejectedExpectation = (tester, functionName, callback, expected, ...parameters) => {
|
|
219
|
+
tester([...parameters])(`${represent(expected)} === ${functionName}(%p)`, parameter => expectExpectedType(expect(callback(parameter)).rejects, expected, false));
|
|
220
|
+
};
|
|
221
|
+
/**
|
|
222
|
+
* Tests each given single parameter against same given expected value. It
|
|
223
|
+
* respects function signature to raise compile time errors if given test set
|
|
224
|
+
* does not match given function signature.
|
|
225
|
+
* @param functionName - Function description to test.
|
|
226
|
+
* @param callback - Function reference to test.
|
|
227
|
+
* @param expected - Value to check each function call return value against.
|
|
228
|
+
* @param parameters - Additional first parameters to test given function with.
|
|
229
|
+
*/
|
|
230
|
+
export const testEachSingleParameterAgainstSameRejectedExpectation = (functionName, callback, expected, ...parameters) => {
|
|
231
|
+
_testEachSingleParameterAgainstSameRejectedExpectation(test.each, functionName, callback, expected, ...parameters);
|
|
232
|
+
};
|
|
233
|
+
testEachSingleParameterAgainstSameRejectedExpectation.only = (functionName, callback, expected, ...parameters) => {
|
|
234
|
+
_testEachSingleParameterAgainstSameRejectedExpectation(test.only.each, functionName, callback, expected, ...parameters);
|
|
235
|
+
};
|
|
236
|
+
testEachSingleParameterAgainstSameRejectedExpectation.skip = (functionName, callback, expected, ...parameters) => {
|
|
237
|
+
_testEachSingleParameterAgainstSameRejectedExpectation(test.skip.each, functionName, callback, expected, ...parameters);
|
|
238
|
+
};
|
|
239
|
+
/**
|
|
240
|
+
* Tests each given test set (various list of function parameters) against same
|
|
241
|
+
* given expected value. It respects function signature to raise compile time
|
|
242
|
+
* errors if given test set does not match given function signature.
|
|
243
|
+
* @param tester - Underling testing function to use.
|
|
244
|
+
* @param functionName - Function description to test.
|
|
245
|
+
* @param callback - Function reference to test.
|
|
246
|
+
* @param expected - Value to check each function call return value against.
|
|
247
|
+
* @param functionParameters - Additional lists of parameters to test given
|
|
248
|
+
* function again.
|
|
249
|
+
*/
|
|
250
|
+
const _testEachAgainstSameExpectation = (tester, functionName, callback, expected, ...functionParameters) => {
|
|
251
|
+
tester([...functionParameters])(`${represent(expected)} === ${functionName}(%p, ...)`, (...parameters) => {
|
|
252
|
+
expectExpectedType(expected === TEST_THROW_SYMBOL ? () => callback(...parameters) : callback(...parameters), expected);
|
|
253
|
+
});
|
|
254
|
+
};
|
|
255
|
+
/**
|
|
256
|
+
* Tests each given test set (various list of function parameters) against same
|
|
257
|
+
* given expected value. It respects function signature to raise compile time
|
|
258
|
+
* errors if given test set does not match given function signature.
|
|
259
|
+
* @param functionName - Function description to test.
|
|
260
|
+
* @param callback - Function reference to test.
|
|
261
|
+
* @param expected - Value to check each function call return value against.
|
|
262
|
+
* @param functionParameters - Additional lists of parameters to test given
|
|
263
|
+
* function again.
|
|
264
|
+
*/
|
|
265
|
+
export const testEachAgainstSameExpectation = (functionName, callback, expected, ...functionParameters) => {
|
|
266
|
+
_testEachAgainstSameExpectation(test.each, functionName, callback, expected, ...functionParameters);
|
|
267
|
+
};
|
|
268
|
+
testEachAgainstSameExpectation.only = (functionName, callback, expected, ...functionParameters) => {
|
|
269
|
+
_testEachAgainstSameExpectation(test.only.each, functionName, callback, expected, ...functionParameters);
|
|
270
|
+
};
|
|
271
|
+
testEachAgainstSameExpectation.skip = (functionName, callback, expected, ...functionParameters) => {
|
|
272
|
+
_testEachAgainstSameExpectation(test.skip.each, functionName, callback, expected, ...functionParameters);
|
|
273
|
+
};
|
|
274
|
+
/**
|
|
275
|
+
* Tests each given test set (various list of function parameters) against same
|
|
276
|
+
* given expected value. It respects function signature to raise compile time
|
|
277
|
+
* errors if given test set does not match given function signature.
|
|
278
|
+
* @param tester - Underling testing function to use.
|
|
279
|
+
* @param functionName - Function description to test.
|
|
280
|
+
* @param callback - Function reference to test.
|
|
281
|
+
* @param expected - Value to check each function call return value against.
|
|
282
|
+
* @param functionParameters - Additional lists of parameters to test given
|
|
283
|
+
* function again.
|
|
284
|
+
*/
|
|
285
|
+
const _testEachPromiseAgainstSameExpectation = (tester, functionName, callback, expected, ...functionParameters) => {
|
|
286
|
+
tester([...functionParameters])(`${represent(expected)} === ${functionName}(%p, ...)`, (...parameters) => expectExpectedType(expect(callback(...parameters)).resolves, expected, false));
|
|
287
|
+
};
|
|
288
|
+
/**
|
|
289
|
+
* Tests each given test set (various list of function parameters) against same
|
|
290
|
+
* given expected value. It respects function signature to raise compile time
|
|
291
|
+
* errors if given test set does not match given function signature.
|
|
292
|
+
* @param functionName - Function description to test.
|
|
293
|
+
* @param callback - Function reference to test.
|
|
294
|
+
* @param expected - Value to check each function call return value against.
|
|
295
|
+
* @param functionParameters - Additional lists of parameters to test given
|
|
296
|
+
* function again.
|
|
297
|
+
*/
|
|
298
|
+
export const testEachPromiseAgainstSameExpectation = (functionName, callback, expected, ...functionParameters) => {
|
|
299
|
+
_testEachPromiseAgainstSameExpectation(test.each, functionName, callback, expected, ...functionParameters);
|
|
300
|
+
};
|
|
301
|
+
testEachPromiseAgainstSameExpectation.only = (functionName, callback, expected, ...functionParameters) => {
|
|
302
|
+
_testEachPromiseAgainstSameExpectation(test.only.each, functionName, callback, expected, ...functionParameters);
|
|
303
|
+
};
|
|
304
|
+
testEachPromiseAgainstSameExpectation.skip = (functionName, callback, expected, ...functionParameters) => {
|
|
305
|
+
_testEachPromiseAgainstSameExpectation(test.skip.each, functionName, callback, expected, ...functionParameters);
|
|
306
|
+
};
|
|
307
|
+
/**
|
|
308
|
+
* Tests each given test set (various list of function parameters) against same
|
|
309
|
+
* given expected value. It respects function signature to raise compile time
|
|
310
|
+
* errors if given test set does not match given function signature.
|
|
311
|
+
* @param tester - Underling testing function to use.
|
|
312
|
+
* @param functionName - Function description to test.
|
|
313
|
+
* @param callback - Function reference to test.
|
|
314
|
+
* @param expected - Value to check each function call return value against.
|
|
315
|
+
* @param functionParameters - Additional lists of parameters to test given
|
|
316
|
+
* function again.
|
|
317
|
+
*/
|
|
318
|
+
const _testEachPromiseRejectionAgainstSameExpectation = (tester, functionName, callback, expected, ...functionParameters) => {
|
|
319
|
+
tester([...functionParameters])(`${represent(expected)} === ${functionName}(%p, ...)`, (...parameters) => expectExpectedType(expect(callback(...parameters)).rejects, expected, false));
|
|
320
|
+
};
|
|
321
|
+
/**
|
|
322
|
+
* Tests each given test set (various list of function parameters) against same
|
|
323
|
+
* given expected value. It respects function signature to raise compile time
|
|
324
|
+
* errors if given test set does not match given function signature.
|
|
325
|
+
* @param functionName - Function description to test.
|
|
326
|
+
* @param callback - Function reference to test.
|
|
327
|
+
* @param expected - Value to check each function call return value against.
|
|
328
|
+
* @param functionParameters - Additional lists of parameters to test given
|
|
329
|
+
* function again.
|
|
330
|
+
*/
|
|
331
|
+
export const testEachPromiseRejectionAgainstSameExpectation = (functionName, callback, expected, ...functionParameters) => {
|
|
332
|
+
_testEachPromiseRejectionAgainstSameExpectation(test.each, functionName, callback, expected, ...functionParameters);
|
|
333
|
+
};
|
|
334
|
+
testEachPromiseRejectionAgainstSameExpectation.only = (functionName, callback, expected, ...functionParameters) => {
|
|
335
|
+
_testEachPromiseRejectionAgainstSameExpectation(test.only.each, functionName, callback, expected, ...functionParameters);
|
|
336
|
+
};
|
|
337
|
+
testEachPromiseRejectionAgainstSameExpectation.skip = (functionName, callback, expected, ...functionParameters) => {
|
|
338
|
+
_testEachPromiseRejectionAgainstSameExpectation(test.skip.each, functionName, callback, expected, ...functionParameters);
|
|
339
|
+
};
|
|
340
|
+
export default testEach;
|
|
341
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vc3JjL3Rlc3QtaGVscGVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vICMhL3Vzci9iaW4vZW52IGJhYmVsLW5vZGVcbi8vIC0qLSBjb2Rpbmc6IHV0Zi04IC0qLVxuLyoqIEBtb2R1bGUgdGVzdEhlbHBlciAqL1xuJ3VzZSBzdHJpY3QnXG4vKiAhXG4gICAgcmVnaW9uIGhlYWRlclxuICAgIENvcHlyaWdodCBUb3JiZW4gU2lja2VydCAoaW5mb1tcIn5hdH5cIl10b3JiZW4ud2Vic2l0ZSkgMTYuMTIuMjAxMlxuXG4gICAgTGljZW5zZVxuICAgIC0tLS0tLS1cblxuICAgIFRoaXMgbGlicmFyeSB3cml0dGVuIGJ5IFRvcmJlbiBTaWNrZXJ0IHN0YW5kcyB1bmRlciBhIGNyZWF0aXZlIGNvbW1vbnNcbiAgICBuYW1pbmcgMy4wIHVucG9ydGVkIGxpY2Vuc2UuXG4gICAgU2VlIGh0dHBzOi8vY3JlYXRpdmVjb21tb25zLm9yZy9saWNlbnNlcy9ieS8zLjAvZGVlZC5kZVxuICAgIGVuZHJlZ2lvblxuXG4gICAgZ2VuZXJpYyB0ZXN0IGJvaWxlcnBsYXRlOlxuXG4gICAgdGVzdC5lYWNoKFtbRVhQRUNURUQsIC4uLlBBUkFNRVRFUlNdLCAuLi5dKShcbiAgICAgICAgJyVwID09PSBGVU5DVElPTiguLi4lcCknLFxuICAgICAgICAoZXhwZWN0ZWQ6IFJldHVyblR5cGU8RlVOQ1RJT04+LCAuLi5wYXJhbWV0ZXJzOiBQYXJhbWV0ZXJzPEZVTkNUSU9OPikgPT5cbiAgICAgICAgICAgIGV4cGVjdChGVU5DVElPTiguLi5wYXJhbWV0ZXJzKSkudG9TdHJpY3RFcXVhbChleHBlY3RlZClcbiAgICApXG4qL1xuLy8gcmVnaW9uIGltcG9ydHNcbmltcG9ydCB7XG4gICAgQW55RnVuY3Rpb24sXG4gICAgRmlyc3RQYXJhbWV0ZXIsXG4gICAgRnVuY3Rpb25UZXN0VHVwbGUsXG4gICAgRnVuY3Rpb25UZXN0UHJvbWlzZVR1cGxlLFxuICAgIEZ1bmN0aW9uVGVzdFByb21pc2VSZWplY3Rpb25UdXBsZSxcbiAgICBUZXN0TWF0Y2hlcnMgYXMgTWF0Y2hlcnMsXG4gICAgVGVzdFN5bWJvbCxcbiAgICBUaGVuUGFyYW1ldGVyLFxuICAgIFVua25vd25GdW5jdGlvblxufSBmcm9tICcuL3R5cGUnXG5cbmltcG9ydCB7ZXhwZWN0LCB0ZXN0fSBmcm9tICdAamVzdC9nbG9iYWxzJ1xuXG5pbXBvcnQge3JlcHJlc2VudH0gZnJvbSAnLi9vYmplY3QnXG4vLyBlbmRyZWdpb25cbmV4cG9ydCBjb25zdCBURVNUX0RFRklORURfU1lNQk9MID0gU3ltYm9sLmZvcignY2xpZW50bm9kZVRlc3RIZWxwZXJEZWZpbmVkJylcbmV4cG9ydCBjb25zdCBURVNUX1RIUk9XX1NZTUJPTCA9IFN5bWJvbC5mb3IoJ2NsaWVudG5vZGVUZXN0SGVscGVyVGhyb3cnKVxuZXhwb3J0IGNvbnN0IFRFU1RfVU5ERUZJTkVEX1NZTUJPTCA9IFN5bWJvbC5mb3IoJ2NsaWVudG5vZGVUZXN0SGVscGVyVW5kZWZpbmVkJylcbi8qKlxuICogVGVzdHMgZ2l2ZW4gcmVzdWx0IGFnYWluc3QgZ2l2ZW4gZXhwZWN0YXRpb25zLiBSZXNwZWN0cyBzcGVjaWFsIHN5bWJvbFxuICogdmFsdWVzLlxuICogQHBhcmFtIGdpdmVuUmVzdWx0IC0gVGFyZ2V0IHRvIGNvbXBhcmUgZXhwZWN0YXRpb24gYWdhaW5zdC5cbiAqIEBwYXJhbSBleHBlY3RlZCAtIEV4cGVjdGVkIHJlc3VsdC5cbiAqIEBwYXJhbSB3cmFwIC0gSW5kaWNhdGVzIHdoZXRoZXIgdG8gd3JhcCB3aXRoIGFuIGV4cGVjdCBmdW5jdGlvbiBjYWxsLlxuICogQHJldHVybnMgTm90aGluZyBvciBhIHByb21pc2UgcmVzb2x2aW5nIHRvIG5vdGhpbmcuXG4gKi9cbmV4cG9ydCBjb25zdCBleHBlY3RFeHBlY3RlZFR5cGUgPSA8XG4gICAgVHlwZSA9IHVua25vd24sIFJlc3VsdCBleHRlbmRzIFByb21pc2U8dm9pZD4gfCB2b2lkID0gdm9pZFxuPihcbiAgICAgICAgZ2l2ZW5SZXN1bHQ6IE1hdGNoZXJzPFJlc3VsdD4gfCBSZXN1bHQsXG4gICAgICAgIGV4cGVjdGVkOiBUZXN0U3ltYm9sIHwgVHlwZSxcbiAgICAgICAgd3JhcCA9IHRydWVcbiAgICApOiBSZXN1bHQgPT4ge1xuICAgIGNvbnN0IHJlc3VsdDogTWF0Y2hlcnM8UmVzdWx0PiA9IHdyYXAgP1xuICAgICAgICBleHBlY3QoZ2l2ZW5SZXN1bHQgYXMgUmVzdWx0KSBhcyB1bmtub3duIGFzIE1hdGNoZXJzPFJlc3VsdD4gOlxuICAgICAgICBnaXZlblJlc3VsdCBhcyBNYXRjaGVyczxSZXN1bHQ+XG5cbiAgICBpZiAoZXhwZWN0ZWQgPT09IFRFU1RfREVGSU5FRF9TWU1CT0wpXG4gICAgICAgIHJldHVybiByZXN1bHQudG9CZURlZmluZWQoKVxuXG4gICAgaWYgKGV4cGVjdGVkID09PSBURVNUX1RIUk9XX1NZTUJPTClcbiAgICAgICAgcmV0dXJuIHJlc3VsdC50b1Rocm93KClcblxuICAgIGlmIChleHBlY3RlZCA9PT0gVEVTVF9VTkRFRklORURfU1lNQk9MKVxuICAgICAgICByZXR1cm4gcmVzdWx0Lm5vdC50b0JlRGVmaW5lZCgpXG5cbiAgICByZXR1cm4gcmVzdWx0LnRvU3RyaWN0RXF1YWwoZXhwZWN0ZWQpXG59XG4vKipcbiAqIFRlc3RzIGVhY2ggZ2l2ZW4gdGVzdCBzZXQgKGV4cGVjdGVkIHZhbHVlIGZvbGxvd3MgYnkgdmFyaW91cyBsaXN0IG9mXG4gKiBmdW5jdGlvbiBwYXJhbWV0ZXJzKS4gSXQgcmVzcGVjdHMgZnVuY3Rpb24gc2lnbmF0dXJlIHRvIHJhaXNlIGNvbXBpbGUgdGltZVxuICogZXJyb3JzIGlmIGdpdmVuIHRlc3Qgc2V0IGRvZXMgbm90IG1hdGNoIGdpdmVuIGZ1bmN0aW9uIHNpZ25hdHVyZS5cbiAqIEBwYXJhbSB0ZXN0ZXIgLSBVbmRlcmxpbmcgdGVzdGluZyBmdW5jdGlvbiB0byB1c2UuXG4gKiBAcGFyYW0gZnVuY3Rpb25OYW1lIC0gRnVuY3Rpb24gZGVzY3JpcHRpb24gdG8gdGVzdC5cbiAqIEBwYXJhbSBjYWxsYmFjayAtIEZ1bmN0aW9uIHJlZmVyZW5jZSB0byB0ZXN0LlxuICogQHBhcmFtIGZ1bmN0aW9uVGVzdFR1cGxlIC0gQWRkaXRpb25hbCBhcnJheXMgb2YgdGVzdCBzZXRzIHRvIHRlc3QgZ2l2ZW5cbiAqIGZ1bmN0aW9uIGFnYWluLlxuICovXG5jb25zdCBfdGVzdEVhY2ggPSA8XG4gICAgRnVuY3Rpb25UeXBlIGV4dGVuZHMgQW55RnVuY3Rpb24gPSBVbmtub3duRnVuY3Rpb25cbj4oXG4gICAgICAgIHRlc3RlcjogdHlwZW9mIHRlc3QuZWFjaCxcbiAgICAgICAgZnVuY3Rpb25OYW1lOiBzdHJpbmcsXG4gICAgICAgIGNhbGxiYWNrOiBGdW5jdGlvblR5cGUsXG4gICAgICAgIC4uLmZ1bmN0aW9uVGVzdFR1cGxlOiBBcnJheTxGdW5jdGlvblRlc3RUdXBsZTxGdW5jdGlvblR5cGU+PlxuICAgICkgPT4ge1xuICAgIHRlc3RlcihbLi4uZnVuY3Rpb25UZXN0VHVwbGVdKShcbiAgICAgICAgYCVwID09PSAke2Z1bmN0aW9uTmFtZX0oJXAsIC4uLilgLFxuICAgICAgICAoKFxuICAgICAgICAgICAgZXhwZWN0ZWQ6IFJldHVyblR5cGU8RnVuY3Rpb25UeXBlPiB8IFRlc3RTeW1ib2wsXG4gICAgICAgICAgICAuLi5wYXJhbWV0ZXJzOiBQYXJhbWV0ZXJzPEZ1bmN0aW9uVHlwZT5cbiAgICAgICAgKSA9PiB7XG4gICAgICAgICAgICBleHBlY3RFeHBlY3RlZFR5cGU8UmV0dXJuVHlwZTxGdW5jdGlvblR5cGU+PihcbiAgICAgICAgICAgICAgICBjYWxsYmFjayguLi5wYXJhbWV0ZXJzKSBhcyBNYXRjaGVyczx2b2lkPiB8IHZvaWQsXG4gICAgICAgICAgICAgICAgZXhwZWN0ZWRcbiAgICAgICAgICAgIClcbiAgICAgICAgfSlcbiAgICApXG59XG4vKipcbiAqIFRlc3RzIGVhY2ggZ2l2ZW4gdGVzdCBzZXQgKGV4cGVjdGVkIHZhbHVlIGZvbGxvd3MgYnkgdmFyaW91cyBsaXN0IG9mXG4gKiBmdW5jdGlvbiBwYXJhbWV0ZXJzKS4gSXQgcmVzcGVjdHMgZnVuY3Rpb24gc2lnbmF0dXJlIHRvIHJhaXNlIGNvbXBpbGUgdGltZVxuICogZXJyb3JzIGlmIGdpdmVuIHRlc3Qgc2V0IGRvZXMgbm90IG1hdGNoIGdpdmVuIGZ1bmN0aW9uIHNpZ25hdHVyZS5cbiAqIEBwYXJhbSBmdW5jdGlvbk5hbWUgLSBGdW5jdGlvbiBkZXNjcmlwdGlvbiB0byB0ZXN0LlxuICogQHBhcmFtIGNhbGxiYWNrIC0gRnVuY3Rpb24gcmVmZXJlbmNlIHRvIHRlc3QuXG4gKiBAcGFyYW0gZnVuY3Rpb25UZXN0VHVwbGUgLSBBZGRpdGlvbmFsIGFycmF5cyBvZiB0ZXN0IHNldHMgdG8gdGVzdCBnaXZlblxuICogZnVuY3Rpb24gYWdhaW4uXG4gKi9cbmV4cG9ydCBjb25zdCB0ZXN0RWFjaCA9IDxcbiAgICBGdW5jdGlvblR5cGUgZXh0ZW5kcyBBbnlGdW5jdGlvbiA9IFVua25vd25GdW5jdGlvblxuPihcbiAgICAgICAgZnVuY3Rpb25OYW1lOiBzdHJpbmcsXG4gICAgICAgIGNhbGxiYWNrOiBGdW5jdGlvblR5cGUsXG4gICAgICAgIC4uLmZ1bmN0aW9uVGVzdFR1cGxlOiBBcnJheTxGdW5jdGlvblRlc3RUdXBsZTxGdW5jdGlvblR5cGU+PlxuICAgICkgPT4ge1xuICAgIF90ZXN0RWFjaCh0ZXN0LmVhY2gsIGZ1bmN0aW9uTmFtZSwgY2FsbGJhY2ssIC4uLmZ1bmN0aW9uVGVzdFR1cGxlKVxufVxudGVzdEVhY2gub25seSA9IDxcbiAgICBGdW5jdGlvblR5cGUgZXh0ZW5kcyBBbnlGdW5jdGlvbiA9IFVua25vd25GdW5jdGlvblxuPihcbiAgICAgICAgZnVuY3Rpb25OYW1lOiBzdHJpbmcsXG4gICAgICAgIGNhbGxiYWNrOiBGdW5jdGlvblR5cGUsXG4gICAgICAgIC4uLmZ1bmN0aW9uVGVzdFR1cGxlOiBBcnJheTxGdW5jdGlvblRlc3RUdXBsZTxGdW5jdGlvblR5cGU+PlxuICAgICkgPT4ge1xuICAgIF90ZXN0RWFjaCh0ZXN0Lm9ubHkuZWFjaCwgZnVuY3Rpb25OYW1lLCBjYWxsYmFjaywgLi4uZnVuY3Rpb25UZXN0VHVwbGUpXG59XG50ZXN0RWFjaC5za2lwID0gPFxuICAgIEZ1bmN0aW9uVHlwZSBleHRlbmRzIEFueUZ1bmN0aW9uID0gVW5rbm93bkZ1bmN0aW9uXG4+KFxuICAgICAgICBmdW5jdGlvbk5hbWU6IHN0cmluZyxcbiAgICAgICAgY2FsbGJhY2s6IEZ1bmN0aW9uVHlwZSxcbiAgICAgICAgLi4uZnVuY3Rpb25UZXN0VHVwbGU6IEFycmF5PEZ1bmN0aW9uVGVzdFR1cGxlPEZ1bmN0aW9uVHlwZT4+XG4gICAgKSA9PiB7XG4gICAgX3Rlc3RFYWNoKHRlc3Quc2tpcC5lYWNoLCBmdW5jdGlvbk5hbWUsIGNhbGxiYWNrLCAuLi5mdW5jdGlvblRlc3RUdXBsZSlcbn1cbi8qKlxuICogVGVzdHMgZWFjaCBnaXZlbiB0ZXN0IHNldCAoZXhwZWN0ZWQgdmFsdWUgZm9sbG93cyBieSB2YXJpb3VzIGxpc3Qgb2ZcbiAqIGZ1bmN0aW9uIHBhcmFtZXRlcnMpLiBJdCByZXNwZWN0cyBmdW5jdGlvbiBzaWduYXR1cmUgdG8gcmFpc2UgY29tcGlsZSB0aW1lXG4gKiBlcnJvcnMgaWYgZ2l2ZW4gdGVzdCBzZXQgZG9lcyBub3QgbWF0Y2ggZ2l2ZW4gZnVuY3Rpb24gc2lnbmF0dXJlLlxuICogQHBhcmFtIHRlc3RlciAtIFVuZGVybGluZyB0ZXN0aW5nIGZ1bmN0aW9uIHRvIHVzZS5cbiAqIEBwYXJhbSBmdW5jdGlvbk5hbWUgLSBGdW5jdGlvbiBkZXNjcmlwdGlvbiB0byB0ZXN0LlxuICogQHBhcmFtIGNhbGxiYWNrIC0gRnVuY3Rpb24gcmVmZXJlbmNlIHRvIHRlc3QuXG4gKiBAcGFyYW0gZnVuY3Rpb25UZXN0VHVwbGUgLSBBZGRpdGlvbmFsIGFycmF5cyBvZiB0ZXN0IHNldHMgdG8gdGVzdCBnaXZlblxuICogZnVuY3Rpb24gYWdhaW4uXG4gKi9cbmNvbnN0IF90ZXN0RWFjaFByb21pc2UgPSA8XG4gICAgRnVuY3Rpb25UeXBlIGV4dGVuZHMgQW55RnVuY3Rpb24gPSBVbmtub3duRnVuY3Rpb25cbj4oXG4gICAgICAgIHRlc3RlcjogdHlwZW9mIHRlc3QuZWFjaCxcbiAgICAgICAgZnVuY3Rpb25OYW1lOiBzdHJpbmcsXG4gICAgICAgIGNhbGxiYWNrOiBGdW5jdGlvblR5cGUsXG4gICAgICAgIC4uLmZ1bmN0aW9uVGVzdFR1cGxlOiBBcnJheTxGdW5jdGlvblRlc3RQcm9taXNlVHVwbGU8RnVuY3Rpb25UeXBlPj5cbiAgICApID0+IHtcbiAgICB0ZXN0ZXIoWy4uLmZ1bmN0aW9uVGVzdFR1cGxlXSkoXG4gICAgICAgIGAlcCA9PT0gJHtmdW5jdGlvbk5hbWV9KCVwLCAuLi4pYCxcbiAgICAgICAgKChcbiAgICAgICAgICAgIGV4cGVjdGVkOiBUZXN0U3ltYm9sIHwgVGhlblBhcmFtZXRlcjxSZXR1cm5UeXBlPEZ1bmN0aW9uVHlwZT4+LFxuICAgICAgICAgICAgLi4ucGFyYW1ldGVyczogUGFyYW1ldGVyczxGdW5jdGlvblR5cGU+XG4gICAgICAgICk6IFByb21pc2U8dm9pZD4gPT5cbiAgICAgICAgICAgIGV4cGVjdEV4cGVjdGVkVHlwZTxcbiAgICAgICAgICAgICAgICBUaGVuUGFyYW1ldGVyPFJldHVyblR5cGU8RnVuY3Rpb25UeXBlPj4sIFByb21pc2U8dm9pZD5cbiAgICAgICAgICAgID4oZXhwZWN0KGNhbGxiYWNrKC4uLnBhcmFtZXRlcnMpKS5yZXNvbHZlcywgZXhwZWN0ZWQsIGZhbHNlKVxuICAgICAgICApXG4gICAgKVxufVxuLyoqXG4gKiBUZXN0cyBlYWNoIGdpdmVuIHRlc3Qgc2V0IChleHBlY3RlZCB2YWx1ZSBmb2xsb3dzIGJ5IHZhcmlvdXMgbGlzdCBvZlxuICogZnVuY3Rpb24gcGFyYW1ldGVycykuIEl0IHJlc3BlY3RzIGZ1bmN0aW9uIHNpZ25hdHVyZSB0byByYWlzZSBjb21waWxlIHRpbWVcbiAqIGVycm9ycyBpZiBnaXZlbiB0ZXN0IHNldCBkb2VzIG5vdCBtYXRjaCBnaXZlbiBmdW5jdGlvbiBzaWduYXR1cmUuXG4gKiBAcGFyYW0gZnVuY3Rpb25OYW1lIC0gRnVuY3Rpb24gZGVzY3JpcHRpb24gdG8gdGVzdC5cbiAqIEBwYXJhbSBjYWxsYmFjayAtIEZ1bmN0aW9uIHJlZmVyZW5jZSB0byB0ZXN0LlxuICogQHBhcmFtIGZ1bmN0aW9uVGVzdFR1cGxlIC0gQWRkaXRpb25hbCBhcnJheXMgb2YgdGVzdCBzZXRzIHRvIHRlc3QgZ2l2ZW5cbiAqIGZ1bmN0aW9uIGFnYWluLlxuICovXG5leHBvcnQgY29uc3QgdGVzdEVhY2hQcm9taXNlID0gPFxuICAgIEZ1bmN0aW9uVHlwZSBleHRlbmRzIEFueUZ1bmN0aW9uID0gVW5rbm93bkZ1bmN0aW9uXG4+KFxuICAgICAgICBmdW5jdGlvbk5hbWU6IHN0cmluZyxcbiAgICAgICAgY2FsbGJhY2s6IEZ1bmN0aW9uVHlwZSxcbiAgICAgICAgLi4uZnVuY3Rpb25UZXN0VHVwbGU6IEFycmF5PEZ1bmN0aW9uVGVzdFByb21pc2VUdXBsZTxGdW5jdGlvblR5cGU+PlxuICAgICkgPT4ge1xuICAgIF90ZXN0RWFjaFByb21pc2UodGVzdC5lYWNoLCBmdW5jdGlvbk5hbWUsIGNhbGxiYWNrLCAuLi5mdW5jdGlvblRlc3RUdXBsZSlcbn1cbnRlc3RFYWNoUHJvbWlzZS5vbmx5ID0gPFxuICAgIEZ1bmN0aW9uVHlwZSBleHRlbmRzIEFueUZ1bmN0aW9uID0gVW5rbm93bkZ1bmN0aW9uXG4+KFxuICAgICAgICBmdW5jdGlvbk5hbWU6IHN0cmluZyxcbiAgICAgICAgY2FsbGJhY2s6IEZ1bmN0aW9uVHlwZSxcbiAgICAgICAgLi4uZnVuY3Rpb25UZXN0VHVwbGU6IEFycmF5PEZ1bmN0aW9uVGVzdFByb21pc2VUdXBsZTxGdW5jdGlvblR5cGU+PlxuICAgICkgPT4ge1xuICAgIF90ZXN0RWFjaFByb21pc2UoXG4gICAgICAgIHRlc3Qub25seS5lYWNoLCBmdW5jdGlvbk5hbWUsIGNhbGxiYWNrLCAuLi5mdW5jdGlvblRlc3RUdXBsZVxuICAgIClcbn1cbnRlc3RFYWNoUHJvbWlzZS5za2lwID0gPFxuICAgIEZ1bmN0aW9uVHlwZSBleHRlbmRzIEFueUZ1bmN0aW9uID0gVW5rbm93bkZ1bmN0aW9uXG4+KFxuICAgICAgICBmdW5jdGlvbk5hbWU6IHN0cmluZyxcbiAgICAgICAgY2FsbGJhY2s6IEZ1bmN0aW9uVHlwZSxcbiAgICAgICAgLi4uZnVuY3Rpb25UZXN0VHVwbGU6IEFycmF5PEZ1bmN0aW9uVGVzdFByb21pc2VUdXBsZTxGdW5jdGlvblR5cGU+PlxuICAgICkgPT4ge1xuICAgIF90ZXN0RWFjaFByb21pc2UoXG4gICAgICAgIHRlc3Quc2tpcC5lYWNoLCBmdW5jdGlvbk5hbWUsIGNhbGxiYWNrLCAuLi5mdW5jdGlvblRlc3RUdXBsZVxuICAgIClcbn1cbi8qKlxuICogVGVzdHMgZWFjaCBnaXZlbiB0ZXN0IHNldCAoZXhwZWN0ZWQgdmFsdWUgZm9sbG93cyBieSB2YXJpb3VzIGxpc3Qgb2ZcbiAqIGZ1bmN0aW9uIHBhcmFtZXRlcnMpLiBJdCByZXNwZWN0cyBmdW5jdGlvbiBzaWduYXR1cmUgdG8gcmFpc2UgY29tcGlsZSB0aW1lXG4gKiBlcnJvcnMgaWYgZ2l2ZW4gdGVzdCBzZXQgZG9lcyBub3QgbWF0Y2ggZ2l2ZW4gZnVuY3Rpb24gc2lnbmF0dXJlLlxuICogQHBhcmFtIHRlc3RlciAtIFVuZGVybGluZyB0ZXN0aW5nIGZ1bmN0aW9uIHRvIHVzZS5cbiAqIEBwYXJhbSBmdW5jdGlvbk5hbWUgLSBGdW5jdGlvbiBkZXNjcmlwdGlvbiB0byB0ZXN0LlxuICogQHBhcmFtIGNhbGxiYWNrIC0gRnVuY3Rpb24gcmVmZXJlbmNlIHRvIHRlc3QuXG4gKiBAcGFyYW0gZnVuY3Rpb25UZXN0VHVwbGUgLSBBZGRpdGlvbmFsIGFycmF5cyBvZiB0ZXN0IHNldHMgdG8gdGVzdCBnaXZlblxuICogZnVuY3Rpb24gYWdhaW4uXG4gKi9cbmNvbnN0IF90ZXN0RWFjaFByb21pc2VSZWplY3Rpb24gPSA8XG4gICAgRnVuY3Rpb25UeXBlIGV4dGVuZHMgQW55RnVuY3Rpb24gPSBVbmtub3duRnVuY3Rpb25cbj4oXG4gICAgICAgIHRlc3RlcjogdHlwZW9mIHRlc3QuZWFjaCxcbiAgICAgICAgZnVuY3Rpb25OYW1lOiBzdHJpbmcsXG4gICAgICAgIGNhbGxiYWNrOiBGdW5jdGlvblR5cGUsXG4gICAgICAgIC4uLmZ1bmN0aW9uVGVzdFR1cGxlOiBBcnJheTxGdW5jdGlvblRlc3RQcm9taXNlUmVqZWN0aW9uVHVwbGU8XG4gICAgICAgICAgICBGdW5jdGlvblR5cGVcbiAgICAgICAgPj5cbiAgICApID0+IHtcbiAgICB0ZXN0ZXIoWy4uLmZ1bmN0aW9uVGVzdFR1cGxlXSkoXG4gICAgICAgIGAlcCA9PT0gJHtmdW5jdGlvbk5hbWV9KCVwLCAuLi4pYCxcbiAgICAgICAgKChcbiAgICAgICAgICAgIGV4cGVjdGVkOiBFcnJvciB8IFRlc3RTeW1ib2wsXG4gICAgICAgICAgICAuLi5wYXJhbWV0ZXJzOiBQYXJhbWV0ZXJzPEZ1bmN0aW9uVHlwZT5cbiAgICAgICAgKTogUHJvbWlzZTx2b2lkPiA9PlxuICAgICAgICAgICAgZXhwZWN0RXhwZWN0ZWRUeXBlPEVycm9yLCBQcm9taXNlPHZvaWQ+PihcbiAgICAgICAgICAgICAgICBleHBlY3QoY2FsbGJhY2soLi4ucGFyYW1ldGVycykpLnJlamVjdHMsIGV4cGVjdGVkLCBmYWxzZVxuICAgICAgICAgICAgKVxuICAgICAgICApXG4gICAgKVxufVxuLyoqXG4gKiBUZXN0cyBlYWNoIGdpdmVuIHRlc3Qgc2V0IChleHBlY3RlZCB2YWx1ZSBmb2xsb3dzIGJ5IHZhcmlvdXMgbGlzdCBvZlxuICogZnVuY3Rpb24gcGFyYW1ldGVycykuIEl0IHJlc3BlY3RzIGZ1bmN0aW9uIHNpZ25hdHVyZSB0byByYWlzZSBjb21waWxlIHRpbWVcbiAqIGVycm9ycyBpZiBnaXZlbiB0ZXN0IHNldCBkb2VzIG5vdCBtYXRjaCBnaXZlbiBmdW5jdGlvbiBzaWduYXR1cmUuXG4gKiBAcGFyYW0gZnVuY3Rpb25OYW1lIC0gRnVuY3Rpb24gZGVzY3JpcHRpb24gdG8gdGVzdC5cbiAqIEBwYXJhbSBjYWxsYmFjayAtIEZ1bmN0aW9uIHJlZmVyZW5jZSB0byB0ZXN0LlxuICogQHBhcmFtIGZ1bmN0aW9uVGVzdFR1cGxlIC0gQWRkaXRpb25hbCBhcnJheXMgb2YgdGVzdCBzZXRzIHRvIHRlc3QgZ2l2ZW5cbiAqIGZ1bmN0aW9uIGFnYWluLlxuICovXG5leHBvcnQgY29uc3QgdGVzdEVhY2hQcm9taXNlUmVqZWN0aW9uID0gPFxuICAgIEZ1bmN0aW9uVHlwZSBleHRlbmRzIEFueUZ1bmN0aW9uID0gVW5rbm93bkZ1bmN0aW9uXG4+KFxuICAgICAgICBmdW5jdGlvbk5hbWU6IHN0cmluZyxcbiAgICAgICAgY2FsbGJhY2s6IEZ1bmN0aW9uVHlwZSxcbiAgICAgICAgLi4uZnVuY3Rpb25UZXN0VHVwbGU6IEFycmF5PEZ1bmN0aW9uVGVzdFByb21pc2VSZWplY3Rpb25UdXBsZTxcbiAgICAgICAgICAgIEZ1bmN0aW9uVHlwZVxuICAgICAgICA+PlxuICAgICkgPT4ge1xuICAgIF90ZXN0RWFjaFByb21pc2VSZWplY3Rpb24oXG4gICAgICAgIHRlc3QuZWFjaCwgZnVuY3Rpb25OYW1lLCBjYWxsYmFjaywgLi4uZnVuY3Rpb25UZXN0VHVwbGVcbiAgICApXG59XG50ZXN0RWFjaFByb21pc2VSZWplY3Rpb24ub25seSA9IDxcbiAgICBGdW5jdGlvblR5cGUgZXh0ZW5kcyBBbnlGdW5jdGlvbiA9IFVua25vd25GdW5jdGlvblxuPihcbiAgICAgICAgZnVuY3Rpb25OYW1lOiBzdHJpbmcsXG4gICAgICAgIGNhbGxiYWNrOiBGdW5jdGlvblR5cGUsXG4gICAgICAgIC4uLmZ1bmN0aW9uVGVzdFR1cGxlOiBBcnJheTxGdW5jdGlvblRlc3RQcm9taXNlUmVqZWN0aW9uVHVwbGU8XG4gICAgICAgICAgICBGdW5jdGlvblR5cGVcbiAgICAgICAgPj5cbiAgICApID0+IHtcbiAgICBfdGVzdEVhY2hQcm9taXNlUmVqZWN0aW9uKFxuICAgICAgICB0ZXN0Lm9ubHkuZWFjaCwgZnVuY3Rpb25OYW1lLCBjYWxsYmFjaywgLi4uZnVuY3Rpb25UZXN0VHVwbGVcbiAgICApXG59XG50ZXN0RWFjaFByb21pc2VSZWplY3Rpb24uc2tpcCA9IDxcbiAgICBGdW5jdGlvblR5cGUgZXh0ZW5kcyBBbnlGdW5jdGlvbiA9IFVua25vd25GdW5jdGlvblxuPihcbiAgICAgICAgZnVuY3Rpb25OYW1lOiBzdHJpbmcsXG4gICAgICAgIGNhbGxiYWNrOiBGdW5jdGlvblR5cGUsXG4gICAgICAgIC4uLmZ1bmN0aW9uVGVzdFR1cGxlOiBBcnJheTxGdW5jdGlvblRlc3RQcm9taXNlUmVqZWN0aW9uVHVwbGU8XG4gICAgICAgICAgICBGdW5jdGlvblR5cGVcbiAgICAgICAgPj5cbiAgICApID0+IHtcbiAgICBfdGVzdEVhY2hQcm9taXNlUmVqZWN0aW9uKFxuICAgICAgICB0ZXN0LnNraXAuZWFjaCwgZnVuY3Rpb25OYW1lLCBjYWxsYmFjaywgLi4uZnVuY3Rpb25UZXN0VHVwbGVcbiAgICApXG59XG4vKipcbiAqIFRlc3RzIGVhY2ggZ2l2ZW4gc2luZ2xlIHBhcmFtZXRlciBhZ2FpbnN0IHNhbWUgZ2l2ZW4gZXhwZWN0ZWQgdmFsdWUuIEl0XG4gKiByZXNwZWN0cyBmdW5jdGlvbiBzaWduYXR1cmUgdG8gcmFpc2UgY29tcGlsZSB0aW1lIGVycm9ycyBpZiBnaXZlbiB0ZXN0IHNldFxuICogZG9lcyBub3QgbWF0Y2ggZ2l2ZW4gZnVuY3Rpb24gc2lnbmF0dXJlLlxuICogQHBhcmFtIHRlc3RlciAtIFVuZGVybGluZyB0ZXN0aW5nIGZ1bmN0aW9uIHRvIHVzZS5cbiAqIEBwYXJhbSBmdW5jdGlvbk5hbWUgLSBGdW5jdGlvbiBkZXNjcmlwdGlvbiB0byB0ZXN0LlxuICogQHBhcmFtIGNhbGxiYWNrIC0gRnVuY3Rpb24gcmVmZXJlbmNlIHRvIHRlc3QuXG4gKiBAcGFyYW0gZXhwZWN0ZWQgLSBWYWx1ZSB0byBjaGVjayBlYWNoIGZ1bmN0aW9uIGNhbGwgcmV0dXJuIHZhbHVlIGFnYWluc3QuXG4gKiBAcGFyYW0gcGFyYW1ldGVycyAtIEFkZGl0aW9uYWwgZmlyc3QgcGFyYW1ldGVycyB0byB0ZXN0IGdpdmVuIGZ1bmN0aW9uIHdpdGguXG4gKi9cbmNvbnN0IF90ZXN0RWFjaFNpbmdsZVBhcmFtZXRlckFnYWluc3RTYW1lRXhwZWN0YXRpb24gPSA8XG4gICAgRnVuY3Rpb25UeXBlIGV4dGVuZHMgQW55RnVuY3Rpb24gPSBVbmtub3duRnVuY3Rpb25cbj4oXG4gICAgICAgIHRlc3RlcjogdHlwZW9mIHRlc3QuZWFjaCxcbiAgICAgICAgZnVuY3Rpb25OYW1lOiBzdHJpbmcsXG4gICAgICAgIGNhbGxiYWNrOiBGdW5jdGlvblR5cGUsXG4gICAgICAgIGV4cGVjdGVkOiBSZXR1cm5UeXBlPEZ1bmN0aW9uVHlwZT4gfCBUZXN0U3ltYm9sLFxuICAgICAgICAuLi5wYXJhbWV0ZXJzOiBBcnJheTxGaXJzdFBhcmFtZXRlcjxGdW5jdGlvblR5cGU+PlxuICAgICkgPT4ge1xuICAgIHRlc3RlcihbLi4ucGFyYW1ldGVyc10pKFxuICAgICAgICBgJHtyZXByZXNlbnQoZXhwZWN0ZWQpfSA9PT0gJHtmdW5jdGlvbk5hbWV9KCVwKWAsXG4gICAgICAgICgocGFyYW1ldGVyOiBGaXJzdFBhcmFtZXRlcjxGdW5jdGlvblR5cGU+KSA9PiB7XG4gICAgICAgICAgICBleHBlY3RFeHBlY3RlZFR5cGU8UmV0dXJuVHlwZTxGdW5jdGlvblR5cGU+PihcbiAgICAgICAgICAgICAgICAoZXhwZWN0ZWQgPT09IFRFU1RfVEhST1dfU1lNQk9MID9cbiAgICAgICAgICAgICAgICAgICAgKCkgPT4gY2FsbGJhY2socGFyYW1ldGVyKSBhcyB1bmtub3duIDpcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2socGFyYW1ldGVyKVxuICAgICAgICAgICAgICAgICkgYXMgTWF0Y2hlcnM8dm9pZD4gfCB2b2lkLFxuICAgICAgICAgICAgICAgIGV4cGVjdGVkXG4gICAgICAgICAgICApXG4gICAgICAgIH0pXG4gICAgKVxufVxuLyoqXG4gKiBUZXN0cyBlYWNoIGdpdmVuIHNpbmdsZSBwYXJhbWV0ZXIgYWdhaW5zdCBzYW1lIGdpdmVuIGV4cGVjdGVkIHZhbHVlLiBJdFxuICogcmVzcGVjdHMgZnVuY3Rpb24gc2lnbmF0dXJlIHRvIHJhaXNlIGNvbXBpbGUgdGltZSBlcnJvcnMgaWYgZ2l2ZW4gdGVzdCBzZXRcbiAqIGRvZXMgbm90IG1hdGNoIGdpdmVuIGZ1bmN0aW9uIHNpZ25hdHVyZS5cbiAqIEBwYXJhbSBmdW5jdGlvbk5hbWUgLSBGdW5jdGlvbiBkZXNjcmlwdGlvbiB0byB0ZXN0LlxuICogQHBhcmFtIGNhbGxiYWNrIC0gRnVuY3Rpb24gcmVmZXJlbmNlIHRvIHRlc3QuXG4gKiBAcGFyYW0gZXhwZWN0ZWQgLSBWYWx1ZSB0byBjaGVjayBlYWNoIGZ1bmN0aW9uIGNhbGwgcmV0dXJuIHZhbHVlIGFnYWluc3QuXG4gKiBAcGFyYW0gcGFyYW1ldGVycyAtIEFkZGl0aW9uYWwgZmlyc3QgcGFyYW1ldGVycyB0byB0ZXN0IGdpdmVuIGZ1bmN0aW9uIHdpdGguXG4gKi9cbmV4cG9ydCBjb25zdCB0ZXN0RWFjaFNpbmdsZVBhcmFtZXRlckFnYWluc3RTYW1lRXhwZWN0YXRpb24gPSA8XG4gICAgRnVuY3Rpb25UeXBlIGV4dGVuZHMgQW55RnVuY3Rpb24gPSBVbmtub3duRnVuY3Rpb25cbj4oXG4gICAgICAgIGZ1bmN0aW9uTmFtZTogc3RyaW5nLFxuICAgICAgICBjYWxsYmFjazogRnVuY3Rpb25UeXBlLFxuICAgICAgICBleHBlY3RlZDogUmV0dXJuVHlwZTxGdW5jdGlvblR5cGU+IHwgVGVzdFN5bWJvbCxcbiAgICAgICAgLi4ucGFyYW1ldGVyczogQXJyYXk8Rmlyc3RQYXJhbWV0ZXI8RnVuY3Rpb25UeXBlPj5cbiAgICApID0+IHtcbiAgICBfdGVzdEVhY2hTaW5nbGVQYXJhbWV0ZXJBZ2FpbnN0U2FtZUV4cGVjdGF0aW9uKFxuICAgICAgICB0ZXN0LmVhY2gsIGZ1bmN0aW9uTmFtZSwgY2FsbGJhY2ssIGV4cGVjdGVkLCAuLi5wYXJhbWV0ZXJzXG4gICAgKVxufVxudGVzdEVhY2hTaW5nbGVQYXJhbWV0ZXJBZ2FpbnN0U2FtZUV4cGVjdGF0aW9uLm9ubHkgPSA8XG4gICAgRnVuY3Rpb25UeXBlIGV4dGVuZHMgQW55RnVuY3Rpb24gPSBVbmtub3duRnVuY3Rpb25cbj4oXG4gICAgICAgIGZ1bmN0aW9uTmFtZTogc3RyaW5nLFxuICAgICAgICBjYWxsYmFjazogRnVuY3Rpb25UeXBlLFxuICAgICAgICBleHBlY3RlZDogUmV0dXJuVHlwZTxGdW5jdGlvblR5cGU+IHwgVGVzdFN5bWJvbCxcbiAgICAgICAgLi4ucGFyYW1ldGVyczogQXJyYXk8Rmlyc3RQYXJhbWV0ZXI8RnVuY3Rpb25UeXBlPj5cbiAgICApID0+IHtcbiAgICBfdGVzdEVhY2hTaW5nbGVQYXJhbWV0ZXJBZ2FpbnN0U2FtZUV4cGVjdGF0aW9uKFxuICAgICAgICB0ZXN0Lm9ubHkuZWFjaCwgZnVuY3Rpb25OYW1lLCBjYWxsYmFjaywgZXhwZWN0ZWQsIC4uLnBhcmFtZXRlcnNcbiAgICApXG59XG50ZXN0RWFjaFNpbmdsZVBhcmFtZXRlckFnYWluc3RTYW1lRXhwZWN0YXRpb24uc2tpcCA9IDxcbiAgICBGdW5jdGlvblR5cGUgZXh0ZW5kcyBBbnlGdW5jdGlvbiA9IFVua25vd25GdW5jdGlvblxuPihcbiAgICAgICAgZnVuY3Rpb25OYW1lOiBzdHJpbmcsXG4gICAgICAgIGNhbGxiYWNrOiBGdW5jdGlvblR5cGUsXG4gICAgICAgIGV4cGVjdGVkOiBSZXR1cm5UeXBlPEZ1bmN0aW9uVHlwZT4gfCBUZXN0U3ltYm9sLFxuICAgICAgICAuLi5wYXJhbWV0ZXJzOiBBcnJheTxGaXJzdFBhcmFtZXRlcjxGdW5jdGlvblR5cGU+PlxuICAgICkgPT4ge1xuICAgIF90ZXN0RWFjaFNpbmdsZVBhcmFtZXRlckFnYWluc3RTYW1lRXhwZWN0YXRpb24oXG4gICAgICAgIHRlc3Quc2tpcC5lYWNoLCBmdW5jdGlvbk5hbWUsIGNhbGxiYWNrLCBleHBlY3RlZCwgLi4ucGFyYW1ldGVyc1xuICAgIClcbn1cbi8qKlxuICogVGVzdHMgZWFjaCBnaXZlbiBzaW5nbGUgcGFyYW1ldGVyIGFnYWluc3Qgc2FtZSBnaXZlbiBleHBlY3RlZCB2YWx1ZS4gSXRcbiAqIHJlc3BlY3RzIGZ1bmN0aW9uIHNpZ25hdHVyZSB0byByYWlzZSBjb21waWxlIHRpbWUgZXJyb3JzIGlmIGdpdmVuIHRlc3Qgc2V0XG4gKiBkb2VzIG5vdCBtYXRjaCBnaXZlbiBmdW5jdGlvbiBzaWduYXR1cmUuXG4gKiBAcGFyYW0gdGVzdGVyIC0gVW5kZXJsaW5nIHRlc3RpbmcgZnVuY3Rpb24gdG8gdXNlLlxuICogQHBhcmFtIGZ1bmN0aW9uTmFtZSAtIEZ1bmN0aW9uIGRlc2NyaXB0aW9uIHRvIHRlc3QuXG4gKiBAcGFyYW0gY2FsbGJhY2sgLSBGdW5jdGlvbiByZWZlcmVuY2UgdG8gdGVzdC5cbiAqIEBwYXJhbSBleHBlY3RlZCAtIFZhbHVlIHRvIGNoZWNrIGVhY2ggZnVuY3Rpb24gY2FsbCByZXR1cm4gdmFsdWUgYWdhaW5zdC5cbiAqIEBwYXJhbSBwYXJhbWV0ZXJzIC0gQWRkaXRpb25hbCBmaXJzdCBwYXJhbWV0ZXJzIHRvIHRlc3QgZ2l2ZW4gZnVuY3Rpb24gd2l0aC5cbiAqL1xuY29uc3QgX3Rlc3RFYWNoU2luZ2xlUGFyYW1ldGVyQWdhaW5zdFNhbWVQcm9taXNlZEV4cGVjdGF0aW9uID0gPFxuICAgIEZ1bmN0aW9uVHlwZSBleHRlbmRzIEFueUZ1bmN0aW9uID0gVW5rbm93bkZ1bmN0aW9uXG4+KFxuICAgICAgICB0ZXN0ZXI6IHR5cGVvZiB0ZXN0LmVhY2gsXG4gICAgICAgIGZ1bmN0aW9uTmFtZTogc3RyaW5nLFxuICAgICAgICBjYWxsYmFjazogRnVuY3Rpb25UeXBlLFxuICAgICAgICBleHBlY3RlZDogVGVzdFN5bWJvbCB8IFRoZW5QYXJhbWV0ZXI8UmV0dXJuVHlwZTxGdW5jdGlvblR5cGU+PixcbiAgICAgICAgLi4ucGFyYW1ldGVyczogQXJyYXk8Rmlyc3RQYXJhbWV0ZXI8RnVuY3Rpb25UeXBlPj5cbiAgICApID0+IHtcbiAgICB0ZXN0ZXIoWy4uLnBhcmFtZXRlcnNdKShcbiAgICAgICAgYCR7cmVwcmVzZW50KGV4cGVjdGVkKX0gPT09ICR7ZnVuY3Rpb25OYW1lfSglcClgLFxuICAgICAgICAoKHBhcmFtZXRlcjogRmlyc3RQYXJhbWV0ZXI8RnVuY3Rpb25UeXBlPikgPT5cbiAgICAgICAgICAgIGV4cGVjdEV4cGVjdGVkVHlwZTxcbiAgICAgICAgICAgICAgICBUaGVuUGFyYW1ldGVyPFJldHVyblR5cGU8RnVuY3Rpb25UeXBlPj4sIFByb21pc2U8dm9pZD5cbiAgICAgICAgICAgID4oZXhwZWN0KGNhbGxiYWNrKHBhcmFtZXRlcikpLnJlc29sdmVzLCBleHBlY3RlZCwgZmFsc2UpXG4gICAgICAgIClcbiAgICApXG59XG4vKipcbiAqIFRlc3RzIGVhY2ggZ2l2ZW4gc2luZ2xlIHBhcmFtZXRlciBhZ2FpbnN0IHNhbWUgZ2l2ZW4gZXhwZWN0ZWQgdmFsdWUuIEl0XG4gKiByZXNwZWN0cyBmdW5jdGlvbiBzaWduYXR1cmUgdG8gcmFpc2UgY29tcGlsZSB0aW1lIGVycm9ycyBpZiBnaXZlbiB0ZXN0IHNldFxuICogZG9lcyBub3QgbWF0Y2ggZ2l2ZW4gZnVuY3Rpb24gc2lnbmF0dXJlLlxuICogQHBhcmFtIGZ1bmN0aW9uTmFtZSAtIEZ1bmN0aW9uIGRlc2NyaXB0aW9uIHRvIHRlc3QuXG4gKiBAcGFyYW0gY2FsbGJhY2sgLSBGdW5jdGlvbiByZWZlcmVuY2UgdG8gdGVzdC5cbiAqIEBwYXJhbSBleHBlY3RlZCAtIFZhbHVlIHRvIGNoZWNrIGVhY2ggZnVuY3Rpb24gY2FsbCByZXR1cm4gdmFsdWUgYWdhaW5zdC5cbiAqIEBwYXJhbSBwYXJhbWV0ZXJzIC0gQWRkaXRpb25hbCBmaXJzdCBwYXJhbWV0ZXJzIHRvIHRlc3QgZ2l2ZW4gZnVuY3Rpb24gd2l0aC5cbiAqL1xuZXhwb3J0IGNvbnN0IHRlc3RFYWNoU2luZ2xlUGFyYW1ldGVyQWdhaW5zdFNhbWVQcm9taXNlZEV4cGVjdGF0aW9uID0gPFxuICAgIEZ1bmN0aW9uVHlwZSBleHRlbmRzIEFueUZ1bmN0aW9uID0gVW5rbm93bkZ1bmN0aW9uXG4+KFxuICAgICAgICBmdW5jdGlvbk5hbWU6IHN0cmluZyxcbiAgICAgICAgY2FsbGJhY2s6IEZ1bmN0aW9uVHlwZSxcbiAgICAgICAgZXhwZWN0ZWQ6IFRlc3RTeW1ib2wgfCBUaGVuUGFyYW1ldGVyPFJldHVyblR5cGU8RnVuY3Rpb25UeXBlPj4sXG4gICAgICAgIC4uLnBhcmFtZXRlcnM6IEFycmF5PEZpcnN0UGFyYW1ldGVyPEZ1bmN0aW9uVHlwZT4+XG4gICAgKSA9PiB7XG4gICAgX3Rlc3RFYWNoU2luZ2xlUGFyYW1ldGVyQWdhaW5zdFNhbWVQcm9taXNlZEV4cGVjdGF0aW9uKFxuICAgICAgICB0ZXN0LmVhY2gsIGZ1bmN0aW9uTmFtZSwgY2FsbGJhY2ssIGV4cGVjdGVkLCAuLi5wYXJhbWV0ZXJzXG4gICAgKVxufVxudGVzdEVhY2hTaW5nbGVQYXJhbWV0ZXJBZ2FpbnN0U2FtZVByb21pc2VkRXhwZWN0YXRpb24ub25seSA9IDxcbiAgICBGdW5jdGlvblR5cGUgZXh0ZW5kcyBBbnlGdW5jdGlvbiA9IFVua25vd25GdW5jdGlvblxuPihcbiAgICAgICAgZnVuY3Rpb25OYW1lOiBzdHJpbmcsXG4gICAgICAgIGNhbGxiYWNrOiBGdW5jdGlvblR5cGUsXG4gICAgICAgIGV4cGVjdGVkOiBUZXN0U3ltYm9sIHwgVGhlblBhcmFtZXRlcjxSZXR1cm5UeXBlPEZ1bmN0aW9uVHlwZT4+LFxuICAgICAgICAuLi5wYXJhbWV0ZXJzOiBBcnJheTxGaXJzdFBhcmFtZXRlcjxGdW5jdGlvblR5cGU+PlxuICAgICkgPT4ge1xuICAgIF90ZXN0RWFjaFNpbmdsZVBhcmFtZXRlckFnYWluc3RTYW1lUHJvbWlzZWRFeHBlY3RhdGlvbihcbiAgICAgICAgdGVzdC5vbmx5LmVhY2gsIGZ1bmN0aW9uTmFtZSwgY2FsbGJhY2ssIGV4cGVjdGVkLCAuLi5wYXJhbWV0ZXJzXG4gICAgKVxufVxudGVzdEVhY2hTaW5nbGVQYXJhbWV0ZXJBZ2FpbnN0U2FtZVByb21pc2VkRXhwZWN0YXRpb24uc2tpcCA9IDxcbiAgICBGdW5jdGlvblR5cGUgZXh0ZW5kcyBBbnlGdW5jdGlvbiA9IFVua25vd25GdW5jdGlvblxuPihcbiAgICAgICAgZnVuY3Rpb25OYW1lOiBzdHJpbmcsXG4gICAgICAgIGNhbGxiYWNrOiBGdW5jdGlvblR5cGUsXG4gICAgICAgIGV4cGVjdGVkOiBUZXN0U3ltYm9sIHwgVGhlblBhcmFtZXRlcjxSZXR1cm5UeXBlPEZ1bmN0aW9uVHlwZT4+LFxuICAgICAgICAuLi5wYXJhbWV0ZXJzOiBBcnJheTxGaXJzdFBhcmFtZXRlcjxGdW5jdGlvblR5cGU+PlxuICAgICkgPT4ge1xuICAgIF90ZXN0RWFjaFNpbmdsZVBhcmFtZXRlckFnYWluc3RTYW1lUHJvbWlzZWRFeHBlY3RhdGlvbihcbiAgICAgICAgdGVzdC5za2lwLmVhY2gsIGZ1bmN0aW9uTmFtZSwgY2FsbGJhY2ssIGV4cGVjdGVkLCAuLi5wYXJhbWV0ZXJzXG4gICAgKVxufVxuLyoqXG4gKiBUZXN0cyBlYWNoIGdpdmVuIHNpbmdsZSBwYXJhbWV0ZXIgYWdhaW5zdCBzYW1lIGdpdmVuIGV4cGVjdGVkIHZhbHVlLiBJdFxuICogcmVzcGVjdHMgZnVuY3Rpb24gc2lnbmF0dXJlIHRvIHJhaXNlIGNvbXBpbGUgdGltZSBlcnJvcnMgaWYgZ2l2ZW4gdGVzdCBzZXRcbiAqIGRvZXMgbm90IG1hdGNoIGdpdmVuIGZ1bmN0aW9uIHNpZ25hdHVyZS5cbiAqIEBwYXJhbSB0ZXN0ZXIgLSBVbmRlcmxpbmcgdGVzdGluZyBmdW5jdGlvbiB0byB1c2UuXG4gKiBAcGFyYW0gZnVuY3Rpb25OYW1lIC0gRnVuY3Rpb24gZGVzY3JpcHRpb24gdG8gdGVzdC5cbiAqIEBwYXJhbSBjYWxsYmFjayAtIEZ1bmN0aW9uIHJlZmVyZW5jZSB0byB0ZXN0LlxuICogQHBhcmFtIGV4cGVjdGVkIC0gVmFsdWUgdG8gY2hlY2sgZWFjaCBmdW5jdGlvbiBjYWxsIHJldHVybiB2YWx1ZSBhZ2FpbnN0LlxuICogQHBhcmFtIHBhcmFtZXRlcnMgLSBBZGRpdGlvbmFsIGZpcnN0IHBhcmFtZXRlcnMgdG8gdGVzdCBnaXZlbiBmdW5jdGlvbiB3aXRoLlxuICovXG5jb25zdCBfdGVzdEVhY2hTaW5nbGVQYXJhbWV0ZXJBZ2FpbnN0U2FtZVJlamVjdGVkRXhwZWN0YXRpb24gPSA8XG4gICAgRnVuY3Rpb25UeXBlIGV4dGVuZHMgQW55RnVuY3Rpb24gPSBVbmtub3duRnVuY3Rpb25cbj4oXG4gICAgICAgIHRlc3RlcjogdHlwZW9mIHRlc3QuZWFjaCxcbiAgICAgICAgZnVuY3Rpb25OYW1lOiBzdHJpbmcsXG4gICAgICAgIGNhbGxiYWNrOiBGdW5jdGlvblR5cGUsXG4gICAgICAgIGV4cGVjdGVkOiBFcnJvciB8IFRlc3RTeW1ib2wsXG4gICAgICAgIC4uLnBhcmFtZXRlcnM6IEFycmF5PEZpcnN0UGFyYW1ldGVyPEZ1bmN0aW9uVHlwZT4+XG4gICAgKSA9PiB7XG4gICAgdGVzdGVyKFsuLi5wYXJhbWV0ZXJzXSkoXG4gICAgICAgIGAke3JlcHJlc2VudChleHBlY3RlZCl9ID09PSAke2Z1bmN0aW9uTmFtZX0oJXApYCxcbiAgICAgICAgKChwYXJhbWV0ZXI6IEZpcnN0UGFyYW1ldGVyPEZ1bmN0aW9uVHlwZT4pOiBQcm9taXNlPHZvaWQ+ID0+XG4gICAgICAgICAgICBleHBlY3RFeHBlY3RlZFR5cGU8RXJyb3IsIFByb21pc2U8dm9pZD4+KFxuICAgICAgICAgICAgICAgIGV4cGVjdChjYWxsYmFjayhwYXJhbWV0ZXIpKS5yZWplY3RzLCBleHBlY3RlZCwgZmFsc2VcbiAgICAgICAgICAgIClcbiAgICAgICAgKVxuICAgIClcbn1cbi8qKlxuICogVGVzdHMgZWFjaCBnaXZlbiBzaW5nbGUgcGFyYW1ldGVyIGFnYWluc3Qgc2FtZSBnaXZlbiBleHBlY3RlZCB2YWx1ZS4gSXRcbiAqIHJlc3BlY3RzIGZ1bmN0aW9uIHNpZ25hdHVyZSB0byByYWlzZSBjb21waWxlIHRpbWUgZXJyb3JzIGlmIGdpdmVuIHRlc3Qgc2V0XG4gKiBkb2VzIG5vdCBtYXRjaCBnaXZlbiBmdW5jdGlvbiBzaWduYXR1cmUuXG4gKiBAcGFyYW0gZnVuY3Rpb25OYW1lIC0gRnVuY3Rpb24gZGVzY3JpcHRpb24gdG8gdGVzdC5cbiAqIEBwYXJhbSBjYWxsYmFjayAtIEZ1bmN0aW9uIHJlZmVyZW5jZSB0byB0ZXN0LlxuICogQHBhcmFtIGV4cGVjdGVkIC0gVmFsdWUgdG8gY2hlY2sgZWFjaCBmdW5jdGlvbiBjYWxsIHJldHVybiB2YWx1ZSBhZ2FpbnN0LlxuICogQHBhcmFtIHBhcmFtZXRlcnMgLSBBZGRpdGlvbmFsIGZpcnN0IHBhcmFtZXRlcnMgdG8gdGVzdCBnaXZlbiBmdW5jdGlvbiB3aXRoLlxuICovXG5leHBvcnQgY29uc3QgdGVzdEVhY2hTaW5nbGVQYXJhbWV0ZXJBZ2FpbnN0U2FtZVJlamVjdGVkRXhwZWN0YXRpb24gPSA8XG4gICAgRnVuY3Rpb25UeXBlIGV4dGVuZHMgQW55RnVuY3Rpb24gPSBVbmtub3duRnVuY3Rpb25cbj4oXG4gICAgICAgIGZ1bmN0aW9uTmFtZTogc3RyaW5nLFxuICAgICAgICBjYWxsYmFjazogRnVuY3Rpb25UeXBlLFxuICAgICAgICBleHBlY3RlZDogRXJyb3IgfCBUZXN0U3ltYm9sLFxuICAgICAgICAuLi5wYXJhbWV0ZXJzOiBBcnJheTxGaXJzdFBhcmFtZXRlcjxGdW5jdGlvblR5cGU+PlxuICAgICkgPT4ge1xuICAgIF90ZXN0RWFjaFNpbmdsZVBhcmFtZXRlckFnYWluc3RTYW1lUmVqZWN0ZWRFeHBlY3RhdGlvbihcbiAgICAgICAgdGVzdC5lYWNoLCBmdW5jdGlvbk5hbWUsIGNhbGxiYWNrLCBleHBlY3RlZCwgLi4ucGFyYW1ldGVyc1xuICAgIClcbn1cbnRlc3RFYWNoU2luZ2xlUGFyYW1ldGVyQWdhaW5zdFNhbWVSZWplY3RlZEV4cGVjdGF0aW9uLm9ubHkgPSA8XG4gICAgRnVuY3Rpb25UeXBlIGV4dGVuZHMgQW55RnVuY3Rpb24gPSBVbmtub3duRnVuY3Rpb25cbj4oXG4gICAgICAgIGZ1bmN0aW9uTmFtZTogc3RyaW5nLFxuICAgICAgICBjYWxsYmFjazogRnVuY3Rpb25UeXBlLFxuICAgICAgICBleHBlY3RlZDogRXJyb3IgfCBUZXN0U3ltYm9sLFxuICAgICAgICAuLi5wYXJhbWV0ZXJzOiBBcnJheTxGaXJzdFBhcmFtZXRlcjxGdW5jdGlvblR5cGU+PlxuICAgICkgPT4ge1xuICAgIF90ZXN0RWFjaFNpbmdsZVBhcmFtZXRlckFnYWluc3RTYW1lUmVqZWN0ZWRFeHBlY3RhdGlvbihcbiAgICAgICAgdGVzdC5vbmx5LmVhY2gsIGZ1bmN0aW9uTmFtZSwgY2FsbGJhY2ssIGV4cGVjdGVkLCAuLi5wYXJhbWV0ZXJzXG4gICAgKVxufVxudGVzdEVhY2hTaW5nbGVQYXJhbWV0ZXJBZ2FpbnN0U2FtZVJlamVjdGVkRXhwZWN0YXRpb24uc2tpcCA9IDxcbiAgICBGdW5jdGlvblR5cGUgZXh0ZW5kcyBBbnlGdW5jdGlvbiA9IFVua25vd25GdW5jdGlvblxuPihcbiAgICAgICAgZnVuY3Rpb25OYW1lOiBzdHJpbmcsXG4gICAgICAgIGNhbGxiYWNrOiBGdW5jdGlvblR5cGUsXG4gICAgICAgIGV4cGVjdGVkOiBFcnJvciB8IFRlc3RTeW1ib2wsXG4gICAgICAgIC4uLnBhcmFtZXRlcnM6IEFycmF5PEZpcnN0UGFyYW1ldGVyPEZ1bmN0aW9uVHlwZT4+XG4gICAgKSA9PiB7XG4gICAgX3Rlc3RFYWNoU2luZ2xlUGFyYW1ldGVyQWdhaW5zdFNhbWVSZWplY3RlZEV4cGVjdGF0aW9uKFxuICAgICAgICB0ZXN0LnNraXAuZWFjaCwgZnVuY3Rpb25OYW1lLCBjYWxsYmFjaywgZXhwZWN0ZWQsIC4uLnBhcmFtZXRlcnNcbiAgICApXG59XG4vKipcbiAqIFRlc3RzIGVhY2ggZ2l2ZW4gdGVzdCBzZXQgKHZhcmlvdXMgbGlzdCBvZiBmdW5jdGlvbiBwYXJhbWV0ZXJzKSBhZ2FpbnN0IHNhbWVcbiAqIGdpdmVuIGV4cGVjdGVkIHZhbHVlLiBJdCByZXNwZWN0cyBmdW5jdGlvbiBzaWduYXR1cmUgdG8gcmFpc2UgY29tcGlsZSB0aW1lXG4gKiBlcnJvcnMgaWYgZ2l2ZW4gdGVzdCBzZXQgZG9lcyBub3QgbWF0Y2ggZ2l2ZW4gZnVuY3Rpb24gc2lnbmF0dXJlLlxuICogQHBhcmFtIHRlc3RlciAtIFVuZGVybGluZyB0ZXN0aW5nIGZ1bmN0aW9uIHRvIHVzZS5cbiAqIEBwYXJhbSBmdW5jdGlvbk5hbWUgLSBGdW5jdGlvbiBkZXNjcmlwdGlvbiB0byB0ZXN0LlxuICogQHBhcmFtIGNhbGxiYWNrIC0gRnVuY3Rpb24gcmVmZXJlbmNlIHRvIHRlc3QuXG4gKiBAcGFyYW0gZXhwZWN0ZWQgLSBWYWx1ZSB0byBjaGVjayBlYWNoIGZ1bmN0aW9uIGNhbGwgcmV0dXJuIHZhbHVlIGFnYWluc3QuXG4gKiBAcGFyYW0gZnVuY3Rpb25QYXJhbWV0ZXJzIC0gQWRkaXRpb25hbCBsaXN0cyBvZiBwYXJhbWV0ZXJzIHRvIHRlc3QgZ2l2ZW5cbiAqIGZ1bmN0aW9uIGFnYWluLlxuICovXG5jb25zdCBfdGVzdEVhY2hBZ2FpbnN0U2FtZUV4cGVjdGF0aW9uID0gPFxuICAgIEZ1bmN0aW9uVHlwZSBleHRlbmRzIEFueUZ1bmN0aW9uID0gVW5rbm93bkZ1bmN0aW9uXG4+KFxuICAgICAgICB0ZXN0ZXI6IHR5cGVvZiB0ZXN0LmVhY2gsXG4gICAgICAgIGZ1bmN0aW9uTmFtZTogc3RyaW5nLFxuICAgICAgICBjYWxsYmFjazogRnVuY3Rpb25UeXBlLFxuICAgICAgICBleHBlY3RlZDogUmV0dXJuVHlwZTxGdW5jdGlvblR5cGU+IHwgVGVzdFN5bWJvbCxcbiAgICAgICAgLi4uZnVuY3Rpb25QYXJhbWV0ZXJzOiBBcnJheTxQYXJhbWV0ZXJzPEZ1bmN0aW9uVHlwZT4+XG4gICAgKSA9PiB7XG4gICAgdGVzdGVyKFsuLi5mdW5jdGlvblBhcmFtZXRlcnNdKShcbiAgICAgICAgYCR7cmVwcmVzZW50KGV4cGVjdGVkKX0gPT09ICR7ZnVuY3Rpb25OYW1lfSglcCwgLi4uKWAsXG4gICAgICAgICgoLi4ucGFyYW1ldGVyczogUGFyYW1ldGVyczxGdW5jdGlvblR5cGU+KSA9PiB7XG4gICAgICAgICAgICBleHBlY3RFeHBlY3RlZFR5cGU8UmV0dXJuVHlwZTxGdW5jdGlvblR5cGU+PihcbiAgICAgICAgICAgICAgICAoZXhwZWN0ZWQgPT09IFRFU1RfVEhST1dfU1lNQk9MID9cbiAgICAgICAgICAgICAgICAgICAgKCkgPT4gY2FsbGJhY2soLi4ucGFyYW1ldGVycykgYXMgdW5rbm93biA6XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKC4uLnBhcmFtZXRlcnMpXG4gICAgICAgICAgICAgICAgKSBhcyBNYXRjaGVyczx2b2lkPiB8IHZvaWQsXG4gICAgICAgICAgICAgICAgZXhwZWN0ZWRcbiAgICAgICAgICAgIClcbiAgICAgICAgfSlcbiAgICApXG59XG4vKipcbiAqIFRlc3RzIGVhY2ggZ2l2ZW4gdGVzdCBzZXQgKHZhcmlvdXMgbGlzdCBvZiBmdW5jdGlvbiBwYXJhbWV0ZXJzKSBhZ2FpbnN0IHNhbWVcbiAqIGdpdmVuIGV4cGVjdGVkIHZhbHVlLiBJdCByZXNwZWN0cyBmdW5jdGlvbiBzaWduYXR1cmUgdG8gcmFpc2UgY29tcGlsZSB0aW1lXG4gKiBlcnJvcnMgaWYgZ2l2ZW4gdGVzdCBzZXQgZG9lcyBub3QgbWF0Y2ggZ2l2ZW4gZnVuY3Rpb24gc2lnbmF0dXJlLlxuICogQHBhcmFtIGZ1bmN0aW9uTmFtZSAtIEZ1bmN0aW9uIGRlc2NyaXB0aW9uIHRvIHRlc3QuXG4gKiBAcGFyYW0gY2FsbGJhY2sgLSBGdW5jdGlvbiByZWZlcmVuY2UgdG8gdGVzdC5cbiAqIEBwYXJhbSBleHBlY3RlZCAtIFZhbHVlIHRvIGNoZWNrIGVhY2ggZnVuY3Rpb24gY2FsbCByZXR1cm4gdmFsdWUgYWdhaW5zdC5cbiAqIEBwYXJhbSBmdW5jdGlvblBhcmFtZXRlcnMgLSBBZGRpdGlvbmFsIGxpc3RzIG9mIHBhcmFtZXRlcnMgdG8gdGVzdCBnaXZlblxuICogZnVuY3Rpb24gYWdhaW4uXG4gKi9cbmV4cG9ydCBjb25zdCB0ZXN0RWFjaEFnYWluc3RTYW1lRXhwZWN0YXRpb24gPSA8XG4gICAgRnVuY3Rpb25UeXBlIGV4dGVuZHMgQW55RnVuY3Rpb24gPSBVbmtub3duRnVuY3Rpb25cbj4oXG4gICAgICAgIGZ1bmN0aW9uTmFtZTogc3RyaW5nLFxuICAgICAgICBjYWxsYmFjazogRnVuY3Rpb25UeXBlLFxuICAgICAgICBleHBlY3RlZDogUmV0dXJuVHlwZTxGdW5jdGlvblR5cGU+IHwgVGVzdFN5bWJvbCxcbiAgICAgICAgLi4uZnVuY3Rpb25QYXJhbWV0ZXJzOiBBcnJheTxQYXJhbWV0ZXJzPEZ1bmN0aW9uVHlwZT4+XG4gICAgKSA9PiB7XG4gICAgX3Rlc3RFYWNoQWdhaW5zdFNhbWVFeHBlY3RhdGlvbihcbiAgICAgICAgdGVzdC5lYWNoLCBmdW5jdGlvbk5hbWUsIGNhbGxiYWNrLCBleHBlY3RlZCwgLi4uZnVuY3Rpb25QYXJhbWV0ZXJzXG4gICAgKVxufVxudGVzdEVhY2hBZ2FpbnN0U2FtZUV4cGVjdGF0aW9uLm9ubHkgPSA8XG4gICAgRnVuY3Rpb25UeXBlIGV4dGVuZHMgQW55RnVuY3Rpb24gPSBVbmtub3duRnVuY3Rpb25cbj4oXG4gICAgICAgIGZ1bmN0aW9uTmFtZTogc3RyaW5nLFxuICAgICAgICBjYWxsYmFjazogRnVuY3Rpb25UeXBlLFxuICAgICAgICBleHBlY3RlZDogUmV0dXJuVHlwZTxGdW5jdGlvblR5cGU+IHwgVGVzdFN5bWJvbCxcbiAgICAgICAgLi4uZnVuY3Rpb25QYXJhbWV0ZXJzOiBBcnJheTxQYXJhbWV0ZXJzPEZ1bmN0aW9uVHlwZT4+XG4gICAgKSA9PiB7XG4gICAgX3Rlc3RFYWNoQWdhaW5zdFNhbWVFeHBlY3RhdGlvbihcbiAgICAgICAgdGVzdC5vbmx5LmVhY2gsIGZ1bmN0aW9uTmFtZSwgY2FsbGJhY2ssIGV4cGVjdGVkLCAuLi5mdW5jdGlvblBhcmFtZXRlcnNcbiAgICApXG59XG50ZXN0RWFjaEFnYWluc3RTYW1lRXhwZWN0YXRpb24uc2tpcCA9IDxcbiAgICBGdW5jdGlvblR5cGUgZXh0ZW5kcyBBbnlGdW5jdGlvbiA9IFVua25vd25GdW5jdGlvblxuPihcbiAgICAgICAgZnVuY3Rpb25OYW1lOiBzdHJpbmcsXG4gICAgICAgIGNhbGxiYWNrOiBGdW5jdGlvblR5cGUsXG4gICAgICAgIGV4cGVjdGVkOiBSZXR1cm5UeXBlPEZ1bmN0aW9uVHlwZT4gfCBUZXN0U3ltYm9sLFxuICAgICAgICAuLi5mdW5jdGlvblBhcmFtZXRlcnM6IEFycmF5PFBhcmFtZXRlcnM8RnVuY3Rpb25UeXBlPj5cbiAgICApID0+IHtcbiAgICBfdGVzdEVhY2hBZ2FpbnN0U2FtZUV4cGVjdGF0aW9uKFxuICAgICAgICB0ZXN0LnNraXAuZWFjaCwgZnVuY3Rpb25OYW1lLCBjYWxsYmFjaywgZXhwZWN0ZWQsIC4uLmZ1bmN0aW9uUGFyYW1ldGVyc1xuICAgIClcbn1cbi8qKlxuICogVGVzdHMgZWFjaCBnaXZlbiB0ZXN0IHNldCAodmFyaW91cyBsaXN0IG9mIGZ1bmN0aW9uIHBhcmFtZXRlcnMpIGFnYWluc3Qgc2FtZVxuICogZ2l2ZW4gZXhwZWN0ZWQgdmFsdWUuIEl0IHJlc3BlY3RzIGZ1bmN0aW9uIHNpZ25hdHVyZSB0byByYWlzZSBjb21waWxlIHRpbWVcbiAqIGVycm9ycyBpZiBnaXZlbiB0ZXN0IHNldCBkb2VzIG5vdCBtYXRjaCBnaXZlbiBmdW5jdGlvbiBzaWduYXR1cmUuXG4gKiBAcGFyYW0gdGVzdGVyIC0gVW5kZXJsaW5nIHRlc3RpbmcgZnVuY3Rpb24gdG8gdXNlLlxuICogQHBhcmFtIGZ1bmN0aW9uTmFtZSAtIEZ1bmN0aW9uIGRlc2NyaXB0aW9uIHRvIHRlc3QuXG4gKiBAcGFyYW0gY2FsbGJhY2sgLSBGdW5jdGlvbiByZWZlcmVuY2UgdG8gdGVzdC5cbiAqIEBwYXJhbSBleHBlY3RlZCAtIFZhbHVlIHRvIGNoZWNrIGVhY2ggZnVuY3Rpb24gY2FsbCByZXR1cm4gdmFsdWUgYWdhaW5zdC5cbiAqIEBwYXJhbSBmdW5jdGlvblBhcmFtZXRlcnMgLSBBZGRpdGlvbmFsIGxpc3RzIG9mIHBhcmFtZXRlcnMgdG8gdGVzdCBnaXZlblxuICogZnVuY3Rpb24gYWdhaW4uXG4gKi9cbmNvbnN0IF90ZXN0RWFjaFByb21pc2VBZ2FpbnN0U2FtZUV4cGVjdGF0aW9uID0gPFxuICAgIEZ1bmN0aW9uVHlwZSBleHRlbmRzIEFueUZ1bmN0aW9uID0gVW5rbm93bkZ1bmN0aW9uXG4+KFxuICAgICAgICB0ZXN0ZXI6IHR5cGVvZiB0ZXN0LmVhY2gsXG4gICAgICAgIGZ1bmN0aW9uTmFtZTogc3RyaW5nLFxuICAgICAgICBjYWxsYmFjazogRnVuY3Rpb25UeXBlLFxuICAgICAgICBleHBlY3RlZDogVGVzdFN5bWJvbCB8IFRoZW5QYXJhbWV0ZXI8UmV0dXJuVHlwZTxGdW5jdGlvblR5cGU+PixcbiAgICAgICAgLi4uZnVuY3Rpb25QYXJhbWV0ZXJzOiBBcnJheTxQYXJhbWV0ZXJzPEZ1bmN0aW9uVHlwZT4+XG4gICAgKSA9PiB7XG4gICAgdGVzdGVyKFsuLi5mdW5jdGlvblBhcmFtZXRlcnNdKShcbiAgICAgICAgYCR7cmVwcmVzZW50KGV4cGVjdGVkKX0gPT09ICR7ZnVuY3Rpb25OYW1lfSglcCwgLi4uKWAsXG4gICAgICAgICgoLi4ucGFyYW1ldGVyczogUGFyYW1ldGVyczxGdW5jdGlvblR5cGU+KSA9PlxuICAgICAgICAgICAgZXhwZWN0RXhwZWN0ZWRUeXBlPFxuICAgICAgICAgICAgICAgIFRoZW5QYXJhbWV0ZXI8UmV0dXJuVHlwZTxGdW5jdGlvblR5cGU+PiwgUHJvbWlzZTx2b2lkPlxuICAgICAgICAgICAgPihleHBlY3QoY2FsbGJhY2soLi4ucGFyYW1ldGVycykpLnJlc29sdmVzLCBleHBlY3RlZCwgZmFsc2UpXG4gICAgICAgIClcbiAgICApXG59XG4vKipcbiAqIFRlc3RzIGVhY2ggZ2l2ZW4gdGVzdCBzZXQgKHZhcmlvdXMgbGlzdCBvZiBmdW5jdGlvbiBwYXJhbWV0ZXJzKSBhZ2FpbnN0IHNhbWVcbiAqIGdpdmVuIGV4cGVjdGVkIHZhbHVlLiBJdCByZXNwZWN0cyBmdW5jdGlvbiBzaWduYXR1cmUgdG8gcmFpc2UgY29tcGlsZSB0aW1lXG4gKiBlcnJvcnMgaWYgZ2l2ZW4gdGVzdCBzZXQgZG9lcyBub3QgbWF0Y2ggZ2l2ZW4gZnVuY3Rpb24gc2lnbmF0dXJlLlxuICogQHBhcmFtIGZ1bmN0aW9uTmFtZSAtIEZ1bmN0aW9uIGRlc2NyaXB0aW9uIHRvIHRlc3QuXG4gKiBAcGFyYW0gY2FsbGJhY2sgLSBGdW5jdGlvbiByZWZlcmVuY2UgdG8gdGVzdC5cbiAqIEBwYXJhbSBleHBlY3RlZCAtIFZhbHVlIHRvIGNoZWNrIGVhY2ggZnVuY3Rpb24gY2FsbCByZXR1cm4gdmFsdWUgYWdhaW5zdC5cbiAqIEBwYXJhbSBmdW5jdGlvblBhcmFtZXRlcnMgLSBBZGRpdGlvbmFsIGxpc3RzIG9mIHBhcmFtZXRlcnMgdG8gdGVzdCBnaXZlblxuICogZnVuY3Rpb24gYWdhaW4uXG4gKi9cbmV4cG9ydCBjb25zdCB0ZXN0RWFjaFByb21pc2VBZ2FpbnN0U2FtZUV4cGVjdGF0aW9uID0gPFxuICAgIEZ1bmN0aW9uVHlwZSBleHRlbmRzIEFueUZ1bmN0aW9uID0gVW5rbm93bkZ1bmN0aW9uXG4+KFxuICAgICAgICBmdW5jdGlvbk5hbWU6IHN0cmluZyxcbiAgICAgICAgY2FsbGJhY2s6IEZ1bmN0aW9uVHlwZSxcbiAgICAgICAgZXhwZWN0ZWQ6IFRlc3RTeW1ib2wgfCBUaGVuUGFyYW1ldGVyPFJldHVyblR5cGU8RnVuY3Rpb25UeXBlPj4sXG4gICAgICAgIC4uLmZ1bmN0aW9uUGFyYW1ldGVyczogQXJyYXk8UGFyYW1ldGVyczxGdW5jdGlvblR5cGU+PlxuICAgICkgPT4ge1xuICAgIF90ZXN0RWFjaFByb21pc2VBZ2FpbnN0U2FtZUV4cGVjdGF0aW9uKFxuICAgICAgICB0ZXN0LmVhY2gsIGZ1bmN0aW9uTmFtZSwgY2FsbGJhY2ssIGV4cGVjdGVkLCAuLi5mdW5jdGlvblBhcmFtZXRlcnNcbiAgICApXG59XG50ZXN0RWFjaFByb21pc2VBZ2FpbnN0U2FtZUV4cGVjdGF0aW9uLm9ubHkgPSA8XG4gICAgRnVuY3Rpb25UeXBlIGV4dGVuZHMgQW55RnVuY3Rpb24gPSBVbmtub3duRnVuY3Rpb25cbj4oXG4gICAgICAgIGZ1bmN0aW9uTmFtZTogc3RyaW5nLFxuICAgICAgICBjYWxsYmFjazogRnVuY3Rpb25UeXBlLFxuICAgICAgICBleHBlY3RlZDogVGVzdFN5bWJvbCB8IFRoZW5QYXJhbWV0ZXI8UmV0dXJuVHlwZTxGdW5jdGlvblR5cGU+PixcbiAgICAgICAgLi4uZnVuY3Rpb25QYXJhbWV0ZXJzOiBBcnJheTxQYXJhbWV0ZXJzPEZ1bmN0aW9uVHlwZT4+XG4gICAgKSA9PiB7XG4gICAgX3Rlc3RFYWNoUHJvbWlzZUFnYWluc3RTYW1lRXhwZWN0YXRpb24oXG4gICAgICAgIHRlc3Qub25seS5lYWNoLCBmdW5jdGlvbk5hbWUsIGNhbGxiYWNrLCBleHBlY3RlZCwgLi4uZnVuY3Rpb25QYXJhbWV0ZXJzXG4gICAgKVxufVxudGVzdEVhY2hQcm9taXNlQWdhaW5zdFNhbWVFeHBlY3RhdGlvbi5za2lwID0gPFxuICAgIEZ1bmN0aW9uVHlwZSBleHRlbmRzIEFueUZ1bmN0aW9uID0gVW5rbm93bkZ1bmN0aW9uXG4+KFxuICAgICAgICBmdW5jdGlvbk5hbWU6IHN0cmluZyxcbiAgICAgICAgY2FsbGJhY2s6IEZ1bmN0aW9uVHlwZSxcbiAgICAgICAgZXhwZWN0ZWQ6IFRlc3RTeW1ib2wgfCBUaGVuUGFyYW1ldGVyPFJldHVyblR5cGU8RnVuY3Rpb25UeXBlPj4sXG4gICAgICAgIC4uLmZ1bmN0aW9uUGFyYW1ldGVyczogQXJyYXk8UGFyYW1ldGVyczxGdW5jdGlvblR5cGU+PlxuICAgICkgPT4ge1xuICAgIF90ZXN0RWFjaFByb21pc2VBZ2FpbnN0U2FtZUV4cGVjdGF0aW9uKFxuICAgICAgICB0ZXN0LnNraXAuZWFjaCwgZnVuY3Rpb25OYW1lLCBjYWxsYmFjaywgZXhwZWN0ZWQsIC4uLmZ1bmN0aW9uUGFyYW1ldGVyc1xuICAgIClcbn1cbi8qKlxuICogVGVzdHMgZWFjaCBnaXZlbiB0ZXN0IHNldCAodmFyaW91cyBsaXN0IG9mIGZ1bmN0aW9uIHBhcmFtZXRlcnMpIGFnYWluc3Qgc2FtZVxuICogZ2l2ZW4gZXhwZWN0ZWQgdmFsdWUuIEl0IHJlc3BlY3RzIGZ1bmN0aW9uIHNpZ25hdHVyZSB0byByYWlzZSBjb21waWxlIHRpbWVcbiAqIGVycm9ycyBpZiBnaXZlbiB0ZXN0IHNldCBkb2VzIG5vdCBtYXRjaCBnaXZlbiBmdW5jdGlvbiBzaWduYXR1cmUuXG4gKiBAcGFyYW0gdGVzdGVyIC0gVW5kZXJsaW5nIHRlc3RpbmcgZnVuY3Rpb24gdG8gdXNlLlxuICogQHBhcmFtIGZ1bmN0aW9uTmFtZSAtIEZ1bmN0aW9uIGRlc2NyaXB0aW9uIHRvIHRlc3QuXG4gKiBAcGFyYW0gY2FsbGJhY2sgLSBGdW5jdGlvbiByZWZlcmVuY2UgdG8gdGVzdC5cbiAqIEBwYXJhbSBleHBlY3RlZCAtIFZhbHVlIHRvIGNoZWNrIGVhY2ggZnVuY3Rpb24gY2FsbCByZXR1cm4gdmFsdWUgYWdhaW5zdC5cbiAqIEBwYXJhbSBmdW5jdGlvblBhcmFtZXRlcnMgLSBBZGRpdGlvbmFsIGxpc3RzIG9mIHBhcmFtZXRlcnMgdG8gdGVzdCBnaXZlblxuICogZnVuY3Rpb24gYWdhaW4uXG4gKi9cbmNvbnN0IF90ZXN0RWFjaFByb21pc2VSZWplY3Rpb25BZ2FpbnN0U2FtZUV4cGVjdGF0aW9uID0gPFxuICAgIEZ1bmN0aW9uVHlwZSBleHRlbmRzIEFueUZ1bmN0aW9uID0gVW5rbm93bkZ1bmN0aW9uXG4+KFxuICAgICAgICB0ZXN0ZXI6IHR5cGVvZiB0ZXN0LmVhY2gsXG4gICAgICAgIGZ1bmN0aW9uTmFtZTogc3RyaW5nLFxuICAgICAgICBjYWxsYmFjazogRnVuY3Rpb25UeXBlLFxuICAgICAgICBleHBlY3RlZDogRXJyb3IgfCBUZXN0U3ltYm9sLFxuICAgICAgICAuLi5mdW5jdGlvblBhcmFtZXRlcnM6IEFycmF5PFBhcmFtZXRlcnM8RnVuY3Rpb25UeXBlPj5cbiAgICApID0+IHtcbiAgICB0ZXN0ZXIoWy4uLmZ1bmN0aW9uUGFyYW1ldGVyc10pKFxuICAgICAgICBgJHtyZXByZXNlbnQoZXhwZWN0ZWQpfSA9PT0gJHtmdW5jdGlvbk5hbWV9KCVwLCAuLi4pYCxcbiAgICAgICAgKCguLi5wYXJhbWV0ZXJzOiBQYXJhbWV0ZXJzPEZ1bmN0aW9uVHlwZT4pOiBQcm9taXNlPHZvaWQ+ID0+XG4gICAgICAgICAgICBleHBlY3RFeHBlY3RlZFR5cGU8RXJyb3IsIFByb21pc2U8dm9pZD4+KFxuICAgICAgICAgICAgICAgIGV4cGVjdChjYWxsYmFjayguLi5wYXJhbWV0ZXJzKSkucmVqZWN0cywgZXhwZWN0ZWQsIGZhbHNlXG4gICAgICAgICAgICApXG4gICAgICAgIClcbiAgICApXG59XG4vKipcbiAqIFRlc3RzIGVhY2ggZ2l2ZW4gdGVzdCBzZXQgKHZhcmlvdXMgbGlzdCBvZiBmdW5jdGlvbiBwYXJhbWV0ZXJzKSBhZ2FpbnN0IHNhbWVcbiAqIGdpdmVuIGV4cGVjdGVkIHZhbHVlLiBJdCByZXNwZWN0cyBmdW5jdGlvbiBzaWduYXR1cmUgdG8gcmFpc2UgY29tcGlsZSB0aW1lXG4gKiBlcnJvcnMgaWYgZ2l2ZW4gdGVzdCBzZXQgZG9lcyBub3QgbWF0Y2ggZ2l2ZW4gZnVuY3Rpb24gc2lnbmF0dXJlLlxuICogQHBhcmFtIGZ1bmN0aW9uTmFtZSAtIEZ1bmN0aW9uIGRlc2NyaXB0aW9uIHRvIHRlc3QuXG4gKiBAcGFyYW0gY2FsbGJhY2sgLSBGdW5jdGlvbiByZWZlcmVuY2UgdG8gdGVzdC5cbiAqIEBwYXJhbSBleHBlY3RlZCAtIFZhbHVlIHRvIGNoZWNrIGVhY2ggZnVuY3Rpb24gY2FsbCByZXR1cm4gdmFsdWUgYWdhaW5zdC5cbiAqIEBwYXJhbSBmdW5jdGlvblBhcmFtZXRlcnMgLSBBZGRpdGlvbmFsIGxpc3RzIG9mIHBhcmFtZXRlcnMgdG8gdGVzdCBnaXZlblxuICogZnVuY3Rpb24gYWdhaW4uXG4gKi9cbmV4cG9ydCBjb25zdCB0ZXN0RWFjaFByb21pc2VSZWplY3Rpb25BZ2FpbnN0U2FtZUV4cGVjdGF0aW9uID0gPFxuICAgIEZ1bmN0aW9uVHlwZSBleHRlbmRzIEFueUZ1bmN0aW9uID0gVW5rbm93bkZ1bmN0aW9uXG4+KFxuICAgICAgICBmdW5jdGlvbk5hbWU6IHN0cmluZyxcbiAgICAgICAgY2FsbGJhY2s6IEZ1bmN0aW9uVHlwZSxcbiAgICAgICAgZXhwZWN0ZWQ6IEVycm9yIHwgVGVzdFN5bWJvbCxcbiAgICAgICAgLi4uZnVuY3Rpb25QYXJhbWV0ZXJzOiBBcnJheTxQYXJhbWV0ZXJzPEZ1bmN0aW9uVHlwZT4+XG4gICAgKSA9PiB7XG4gICAgX3Rlc3RFYWNoUHJvbWlzZVJlamVjdGlvbkFnYWluc3RTYW1lRXhwZWN0YXRpb24oXG4gICAgICAgIHRlc3QuZWFjaCwgZnVuY3Rpb25OYW1lLCBjYWxsYmFjaywgZXhwZWN0ZWQsIC4uLmZ1bmN0aW9uUGFyYW1ldGVyc1xuICAgIClcbn1cbnRlc3RFYWNoUHJvbWlzZVJlamVjdGlvbkFnYWluc3RTYW1lRXhwZWN0YXRpb24ub25seSA9IDxcbiAgICBGdW5jdGlvblR5cGUgZXh0ZW5kcyBBbnlGdW5jdGlvbiA9IFVua25vd25GdW5jdGlvblxuPihcbiAgICAgICAgZnVuY3Rpb25OYW1lOiBzdHJpbmcsXG4gICAgICAgIGNhbGxiYWNrOiBGdW5jdGlvblR5cGUsXG4gICAgICAgIGV4cGVjdGVkOiBFcnJvciB8IFRlc3RTeW1ib2wsXG4gICAgICAgIC4uLmZ1bmN0aW9uUGFyYW1ldGVyczogQXJyYXk8UGFyYW1ldGVyczxGdW5jdGlvblR5cGU+PlxuICAgICkgPT4ge1xuICAgIF90ZXN0RWFjaFByb21pc2VSZWplY3Rpb25BZ2FpbnN0U2FtZUV4cGVjdGF0aW9uKFxuICAgICAgICB0ZXN0Lm9ubHkuZWFjaCwgZnVuY3Rpb25OYW1lLCBjYWxsYmFjaywgZXhwZWN0ZWQsIC4uLmZ1bmN0aW9uUGFyYW1ldGVyc1xuICAgIClcbn1cbnRlc3RFYWNoUHJvbWlzZVJlamVjdGlvbkFnYWluc3RTYW1lRXhwZWN0YXRpb24uc2tpcCA9IDxcbiAgICBGdW5jdGlvblR5cGUgZXh0ZW5kcyBBbnlGdW5jdGlvbiA9IFVua25vd25GdW5jdGlvblxuPihcbiAgICAgICAgZnVuY3Rpb25OYW1lOiBzdHJpbmcsXG4gICAgICAgIGNhbGxiYWNrOiBGdW5jdGlvblR5cGUsXG4gICAgICAgIGV4cGVjdGVkOiBFcnJvciB8IFRlc3RTeW1ib2wsXG4gICAgICAgIC4uLmZ1bmN0aW9uUGFyYW1ldGVyczogQXJyYXk8UGFyYW1ldGVyczxGdW5jdGlvblR5cGU+PlxuICAgICkgPT4ge1xuICAgIF90ZXN0RWFjaFByb21pc2VSZWplY3Rpb25BZ2FpbnN0U2FtZUV4cGVjdGF0aW9uKFxuICAgICAgICB0ZXN0LnNraXAuZWFjaCwgZnVuY3Rpb25OYW1lLCBjYWxsYmFjaywgZXhwZWN0ZWQsIC4uLmZ1bmN0aW9uUGFyYW1ldGVyc1xuICAgIClcbn1cbmV4cG9ydCBkZWZhdWx0IHRlc3RFYWNoXG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7O0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FDSSxXQUFXLEVBQ1gsY0FBYyxFQUNkLGlCQUFpQixFQUNqQix3QkFBd0IsRUFDeEIsaUNBQWlDLEVBQ2pDLFlBQVksSUFBSSxRQUFRLEVBQ3hCLFVBQVUsRUFDVixhQUFhLEVBQ2IsZUFBZTtBQUduQixTQUFRLE1BQU0sRUFBRSxJQUFJLFFBQU8sZUFBZTtBQUUxQyxTQUFRLFNBQVM7QUFDakI7QUFDQSxPQUFPLE1BQU0sbUJBQW1CLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyw2QkFBNkIsQ0FBQztBQUM1RSxPQUFPLE1BQU0saUJBQWlCLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQywyQkFBMkIsQ0FBQztBQUN4RSxPQUFPLE1BQU0scUJBQXFCLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQywrQkFBK0IsQ0FBQztBQUNoRjtBQUNBO0FBQ0E7QUFD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
|
package/dist/type.js
CHANGED
|
@@ -1 +1,21 @@
|
|
|
1
|
-
|
|
1
|
+
// -*- coding: utf-8 -*-
|
|
2
|
+
/** @module type */
|
|
3
|
+
'use strict';
|
|
4
|
+
|
|
5
|
+
/* !
|
|
6
|
+
region header
|
|
7
|
+
[Project page](https://torben.website/clientnode)
|
|
8
|
+
|
|
9
|
+
Copyright Torben Sickert (info["~at~"]torben.website) 16.12.2012
|
|
10
|
+
|
|
11
|
+
License
|
|
12
|
+
-------
|
|
13
|
+
|
|
14
|
+
This library written by Torben Sickert stands under a creative commons
|
|
15
|
+
naming 3.0 unported license.
|
|
16
|
+
See https://creativecommons.org/licenses/by/3.0/deed.de
|
|
17
|
+
endregion
|
|
18
|
+
*/
|
|
19
|
+
// region imports
|
|
20
|
+
export {};
|
|
21
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vc3JjL3R5cGUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gLSotIGNvZGluZzogdXRmLTggLSotXG4vKiogQG1vZHVsZSB0eXBlICovXG4ndXNlIHN0cmljdCdcbi8qICFcbiAgICByZWdpb24gaGVhZGVyXG4gICAgW1Byb2plY3QgcGFnZV0oaHR0cHM6Ly90b3JiZW4ud2Vic2l0ZS9jbGllbnRub2RlKVxuXG4gICAgQ29weXJpZ2h0IFRvcmJlbiBTaWNrZXJ0IChpbmZvW1wifmF0flwiXXRvcmJlbi53ZWJzaXRlKSAxNi4xMi4yMDEyXG5cbiAgICBMaWNlbnNlXG4gICAgLS0tLS0tLVxuXG4gICAgVGhpcyBsaWJyYXJ5IHdyaXR0ZW4gYnkgVG9yYmVuIFNpY2tlcnQgc3RhbmRzIHVuZGVyIGEgY3JlYXRpdmUgY29tbW9uc1xuICAgIG5hbWluZyAzLjAgdW5wb3J0ZWQgbGljZW5zZS5cbiAgICBTZWUgaHR0cHM6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL2xpY2Vuc2VzL2J5LzMuMC9kZWVkLmRlXG4gICAgZW5kcmVnaW9uXG4qL1xuLy8gcmVnaW9uIGltcG9ydHNcbmltcG9ydCB0eXBlIHtNYXRjaGVyc30gZnJvbSAnZXhwZWN0J1xuaW1wb3J0IHR5cGUge0RpcmVudCBhcyBEaXJlY3RvcnlFbnRyeSwgU3RhdHMgYXMgRmlsZVN0YXRzfSBmcm9tICdmcydcblxuaW1wb3J0IHR5cGUge0xldmVsfSBmcm9tICcuL0xvZ2dlcidcblxuaW1wb3J0IHR5cGUge1xuICAgIFRFU1RfREVGSU5FRF9TWU1CT0wsIFRFU1RfVEhST1dfU1lNQk9MLCBURVNUX1VOREVGSU5FRF9TWU1CT0xcbn0gZnJvbSAnLi90ZXN0LWhlbHBlcidcbi8vIGVuZHJlZ2lvblxuLy8gcmVnaW9uIGV4cG9ydHNcbi8vLyByZWdpb24gaGVscGVyXG4vKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55ICovXG5leHBvcnQgdHlwZSBBbnlGdW5jdGlvbiA9ICguLi5wYXJhbWV0ZXJzOiBBcnJheTxhbnk+KSA9PiBhbnlcbi8qIGVzbGludC1lbmFibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSAqL1xuXG5leHBvcnQgdHlwZSBVbnBhY2tlZDxUPiA9IFQgZXh0ZW5kcyBBcnJheTxpbmZlciBVPiA/XG4gICAgVSA6XG4gICAgVCBleHRlbmRzICguLi5wYXJhbWV0ZXJzOiBBcnJheTx1bmtub3duPikgPT4gaW5mZXIgVSA/XG4gICAgICAgIFUgOlxuICAgICAgICBUIGV4dGVuZHMgUHJvbWlzZTxpbmZlciBVPiA/XG4gICAgICAgICAgICBVIDpcbiAgICAgICAgICAgIFRcblxuZXhwb3J0IHR5cGUgRmlyc3RQYXJhbWV0ZXI8RnVuY3Rpb25UeXBlIGV4dGVuZHMgQW55RnVuY3Rpb24+ID1cbiAgICBQYXJhbWV0ZXJzPEZ1bmN0aW9uVHlwZT5bMF1cbmV4cG9ydCB0eXBlIFNlY29uZFBhcmFtZXRlcjxGdW5jdGlvblR5cGUgZXh0ZW5kcyBBbnlGdW5jdGlvbj4gPVxuICAgIFBhcmFtZXRlcnM8RnVuY3Rpb25UeXBlPlsxXVxuZXhwb3J0IHR5cGUgVGhpcmRQYXJhbWV0ZXI8RnVuY3Rpb25UeXBlIGV4dGVuZHMgQW55RnVuY3Rpb24+ID1cbiAgICBQYXJhbWV0ZXJzPEZ1bmN0aW9uVHlwZT5bMl1cbi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkgKi9cbmV4cG9ydCB0eXBlIFBhcmFtZXRlcnNFeGNlcHRGaXJzdDxGdW5jdGlvblR5cGU+ID0gRnVuY3Rpb25UeXBlIGV4dGVuZHNcbiAgICAocGFyYW1ldGVyOiBhbnksIC4uLmFkZGl0aW9uYWxQYXJhbWV0ZXJzOiBpbmZlciBBZGRpdGlvbmFsUGFyYW1ldGVycykgPT5cbiAgICAgICAgYW55ID9cbiAgICAgICAgICAgIEFkZGl0aW9uYWxQYXJhbWV0ZXJzIDpcbiAgICAgICAgICAgIFtdXG4vKiBlc2xpbnQtZW5hYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkgKi9cblxuZXhwb3J0IHR5cGUgRnVuY3Rpb25UZXN0VHVwbGU8RnVuY3Rpb25UeXBlIGV4dGVuZHMgQW55RnVuY3Rpb24+ID1cbiAgICBbUmV0dXJuVHlwZTxGdW5jdGlvblR5cGU+LCAuLi5QYXJhbWV0ZXJzPEZ1bmN0aW9uVHlwZT5dXG5leHBvcnQgdHlwZSBGdW5jdGlvblRlc3RQcm9taXNlVHVwbGU8RnVuY3Rpb25UeXBlIGV4dGVuZHMgQW55RnVuY3Rpb24+ID1cbiAgICBbVGhlblBhcmFtZXRlcjxSZXR1cm5UeXBlPEZ1bmN0aW9uVHlwZT4+LCAuLi5QYXJhbWV0ZXJzPEZ1bmN0aW9uVHlwZT5dXG5leHBvcnQgdHlwZSBGdW5jdGlvblRlc3RQcm9taXNlUmVqZWN0aW9uVHVwbGU8XG4gICAgRnVuY3Rpb25UeXBlIGV4dGVuZHMgQW55RnVuY3Rpb25cbj4gPSBbRXJyb3IsIC4uLlBhcmFtZXRlcnM8RnVuY3Rpb25UeXBlPl1cblxuZXhwb3J0IHR5cGUgVGVzdFN5bWJvbCA9IChcbiAgICB0eXBlb2YgVEVTVF9ERUZJTkVEX1NZTUJPTCB8XG4gICAgdHlwZW9mIFRFU1RfVEhST1dfU1lNQk9MIHxcbiAgICB0eXBlb2YgVEVTVF9VTkRFRklORURfU1lNQk9MXG4pXG5cbmV4cG9ydCB0eXBlIFRoZW5QYXJhbWV0ZXI8VHlwZT4gPSBUeXBlIGV4dGVuZHMgUHJvbWlzZUxpa2U8aW5mZXIgVT4gPyBVIDogVHlwZVxuZXhwb3J0IHR5cGUgVGhlblBhcmFtZXRlclJlY3Vyc2l2ZTxUeXBlPiA9XG4gICAgVHlwZSBleHRlbmRzIFByb21pc2VMaWtlPGluZmVyIFU+ID8gVGhlblBhcmFtZXRlclJlY3Vyc2l2ZTxVPiA6IFR5cGVcblxuZXhwb3J0IHR5cGUgVmFsdWVPZjxUeXBlPiA9IFR5cGVba2V5b2YgVHlwZV1cblxuZXhwb3J0IHR5cGUgUmVjdXJzaXZlTm9uTnVsbGFibGU8VHlwZT4gPSB7XG4gICAgW1Byb3BlcnR5IGluIGtleW9mIFR5cGVdOiBUeXBlW1Byb3BlcnR5XSBleHRlbmRzIEFycmF5PGluZmVyIE90aGVyVHlwZT4gP1xuICAgICAgICBBcnJheTxSZWN1cnNpdmVOb25OdWxsYWJsZTxPdGhlclR5cGU+PiA6XG4gICAgICAgIFR5cGVbUHJvcGVydHldIGV4dGVuZHMgQW55RnVuY3Rpb24gP1xuICAgICAgICAgICAgTm9uTnVsbGFibGU8VHlwZVtQcm9wZXJ0eV0+IDpcbiAgICAgICAgICAgIFR5cGVbUHJvcGVydHldIGV4dGVuZHMgTWFwcGluZzx1bmtub3duPiA/XG4gICAgICAgICAgICAgICAgUmVjdXJzaXZlTm9uTnVsbGFibGU8VHlwZVtQcm9wZXJ0eV0+IDpcbiAgICAgICAgICAgICAgICBOb25OdWxsYWJsZTxUeXBlW1Byb3BlcnR5XT5cbn1cbmV4cG9ydCB0eXBlIFJlY3Vyc2l2ZVBhcnRpYWw8VHlwZT4gPVxuICAgIFBhcnRpYWw8VHlwZT4gfFxuICAgIHtcbiAgICAgICAgW1Byb3BlcnR5IGluIGtleW9mIFR5cGVdPzogVHlwZVtcbiAgICAgICAgICAgIFByb3BlcnR5XG4gICAgICAgIF0gZXh0ZW5kcyBBcnJheTxpbmZlciBPdGhlclR5cGU+ID9cbiAgICAgICAgICAgIEFycmF5PFJlY3Vyc2l2ZVBhcnRpYWw8T3RoZXJUeXBlPj4gOlxuICAgICAgICAgICAgVHlwZVtQcm9wZXJ0eV0gZXh0ZW5kcyBBbnlGdW5jdGlvbiA/XG4gICAgICAgICAgICAgICAgUGFydGlhbDxUeXBlW1Byb3BlcnR5XT4gOlxuICAgICAgICAgICAgICAgIFR5cGVbUHJvcGVydHldIGV4dGVuZHMgTWFwcGluZzx1bmtub3duPiA/XG4gICAgICAgICAgICAgICAgICAgIFJlY3Vyc2l2ZVBhcnRpYWw8VHlwZVtQcm9wZXJ0eV0+IDpcbiAgICAgICAgICAgICAgICAgICAgUGFydGlhbDxUeXBlW1Byb3BlcnR5XT5cbiAgICB9XG5cbmV4cG9ydCB0eXBlIEZpbGVUcmF2ZXJzZVJlc3VsdCA9XG4gICAgZmFsc2UgfCBudWxsIHwgUHJvbWlzZTxmYWxzZSB8IG51bGwgfCB1bmRlZmluZWQ+IHwgdW5kZWZpbmVkXG5cbmV4cG9ydCB0eXBlIFRlc3RNYXRjaGVyczxUIGV4dGVuZHMgUHJvbWlzZTx2b2lkPiB8IHZvaWQ+ID1cbiAgICBNYXRjaGVyczxUPiAmIHtub3Q6IE1hdGNoZXJzPFQ+fVxuLy8vIGVuZHJlZ2lvblxuLy8vIHJlZ2lvbiBuYXRpdmVcbmV4cG9ydCB0eXBlIEltcG9ydEZ1bmN0aW9uID1cbiAgICAoaWQ6IHN0cmluZykgPT4gUHJvbWlzZTxSZXR1cm5UeXBlPHR5cGVvZiByZXF1aXJlPj5cbmV4cG9ydCB0eXBlIEhUTUxJdGVtID0gQ29tbWVudCB8IEhUTUxFbGVtZW50IHwgVGV4dFxuXG5leHBvcnQgdHlwZSBQcmltaXRpdmUgPSBib29sZWFuIHwgbnVsbCB8IG51bWJlciB8IHN0cmluZyB8IHVuZGVmaW5lZFxuZXhwb3J0IHR5cGUgTWFwcGluZzxWID0gc3RyaW5nLCBLIGV4dGVuZHMgc3RyaW5nID0gc3RyaW5nPiA9IFJlY29yZDxLLCBWPlxuLy8gTk9URTogTWFwcGluZyBjYW5ub3QgYmUgdXNlZCBoZXJlIHRvIGF2b2lkIGNpcmN1bGFyIHJlZmVyZW5jZXMuXG5leHBvcnQgdHlwZSBQbGFpbk9iamVjdDxWID0gUHJpbWl0aXZlLCBLIGV4dGVuZHMgc3RyaW5nID0gc3RyaW5nPiA9XG4gICAge1trZXkgaW4gS106IEFycmF5PFBsYWluT2JqZWN0PFYsIEs+IHwgVj4gfCBQbGFpbk9iamVjdDxWLCBLPiB8IFZ9XG5cbmV4cG9ydCBpbnRlcmZhY2UgUHJveHlIYW5kbGVyPFQgPSB1bmtub3duPiB7XG4gICAgZGVsZXRlUHJvcGVydHk6ICh0YXJnZXQ6IFQsIGtleTogc3RyaW5nIHwgc3ltYm9sKSA9PiBib29sZWFuXG4gICAgZ2V0OiAodGFyZ2V0OiBULCBrZXk6IHN0cmluZyB8IHN5bWJvbCkgPT4gdW5rbm93blxuICAgIGhhczogKHRhcmdldDogVCwga2V5OiBzdHJpbmcgfCBzeW1ib2wpID0+IGJvb2xlYW5cbiAgICBzZXQ6ICh0YXJnZXQ6IFQsIGtleTogc3RyaW5nIHwgc3ltYm9sLCB2YWx1ZTogdW5rbm93bikgPT4gYm9vbGVhblxufVxuZXhwb3J0IHR5cGUgUHJveHlUeXBlPFQgPSB1bmtub3duPiA9IFQgJiB7XG4gICAgX19yZXZva2VfXz86ICgpID0+IHZvaWRcbiAgICBfX3RhcmdldF9fOiBUXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29va2llT3B0aW9ucyB7XG4gICAgZG9tYWluOiBzdHJpbmdcbiAgICBodHRwT25seTogYm9vbGVhblxuICAgIG1pbmltYWw6IGJvb2xlYW5cbiAgICBudW1iZXJPZkRheXNVbnRpbEV4cGlyYXRpb246IG51bWJlclxuICAgIHBhdGg6IHN0cmluZ1xuICAgIHNhbWVTaXRlOiAnTGF4JyB8ICdOb25lJyB8ICdTdHJpY3QnIHwgJydcbiAgICBzZWN1cmU6IGJvb2xlYW5cbn1cblxuZXhwb3J0IGludGVyZmFjZSBLbm93bldpbmRvd0V2ZW50TWFwIGV4dGVuZHMgV2luZG93RXZlbnRNYXAge1xuICAgIERPTU1vdXNlU2Nyb2xsOiBFdmVudFxuICAgIG1vdXNld2hlZWw6IEV2ZW50XG59XG5leHBvcnQgdHlwZSBLbm93bkV2ZW50TmFtZSA9IGtleW9mIEtub3duV2luZG93RXZlbnRNYXBcbi8vLy8gcmVnaW9uIGZ1bmN0aW9uc1xuZXhwb3J0IHR5cGUgVW5rbm93bkZ1bmN0aW9uID0gKC4uLnBhcmFtZXRlcnM6IEFycmF5PHVua25vd24+KSA9PiB1bmtub3duXG5leHBvcnQgdHlwZSBBcnJheVRyYW5zZm9ybWVyPFQgPSB1bmtub3duLCBSID0gdW5rbm93biwgUCA9IHVua25vd24+ID0gKFxuICAgIGRhdGE6IEFycmF5PFQ+LCAuLi5hZGRpdGlvbmFsUGFyYW1ldGVyOiBBcnJheTxQPlxuKSA9PiBBcnJheTxSPlxuXG5leHBvcnQgdHlwZSBTeW5jaHJvbm91c1Byb2NlZHVyZUZ1bmN0aW9uID0gKC4uLnBhcmFtZXRlcnM6IEFycmF5PHVua25vd24+KSA9PlxuICAgIHZvaWRcbmV4cG9ydCB0eXBlIEFzeW5jaHJvbm91c1Byb2NlZHVyZUZ1bmN0aW9uID0gKC4uLnBhcmFtZXRlcnM6IEFycmF5PHVua25vd24+KSA9PlxuICAgIFByb21pc2U8dm9pZD5cbmV4cG9ydCB0eXBlIFByb2NlZHVyZUZ1bmN0aW9uID1cbiAgICBBc3luY2hyb25vdXNQcm9jZWR1cmVGdW5jdGlvbiB8IFN5bmNocm9ub3VzUHJvY2VkdXJlRnVuY3Rpb25cblxuZXhwb3J0IHR5cGUgR2V0dGVyRnVuY3Rpb24gPVxuICAgIChrZXlPclZhbHVlOiB1bmtub3duLCBrZXk6IHN0cmluZyB8IHN5bWJvbCwgdGFyZ2V0OiB1bmtub3duKSA9PiB1bmtub3duXG5leHBvcnQgdHlwZSBTZXR0ZXJGdW5jdGlvbiA9XG4gICAgKGtleTogc3RyaW5nIHwgc3ltYm9sLCB2YWx1ZTogdW5rbm93biwgdGFyZ2V0OiB1bmtub3duKSA9PiB1bmtub3duXG4vLy8vIGVuZHJlZ2lvblxuLy8vIGVuZHJlZ2lvblxuLy8vIHJlZ2lvbiBoZWxwZXJcbmV4cG9ydCBpbnRlcmZhY2UgQ2hlY2tSZWFjaGFiaWxpdHlPcHRpb25zIHtcbiAgICBhYm9ydENvbnRyb2xsZXI6IEFib3J0Q29udHJvbGxlclxuICAgIGV4cGVjdGVkSW50ZXJtZWRpYXRlU3RhdHVzQ29kZXM6IEFycmF5PG51bWJlcj4gfCBudW1iZXJcbiAgICBvcHRpb25zOiBSZXF1ZXN0SW5pdFxuICAgIHBvbGxJbnRlcnZhbGxJblNlY29uZHM6IG51bWJlclxuICAgIHN0YXR1c0NvZGVzOiBBcnJheTxudW1iZXI+IHwgbnVtYmVyXG4gICAgdGltZW91dEluU2Vjb25kczogbnVtYmVyXG4gICAgd2FpdDogYm9vbGVhblxufVxuXG5leHBvcnQgaW50ZXJmYWNlIENvbXBhcmVPcHRpb25zIHtcbiAgICBjb21wYXJlQmxvYnM6IGJvb2xlYW5cbiAgICBkZWVwOiBudW1iZXJcbiAgICBleGNlcHRpb25QcmVmaXhlczogQXJyYXk8c3RyaW5nPlxuICAgIGlnbm9yZUZ1bmN0aW9uczogYm9vbGVhblxuICAgIHByb3BlcnRpZXM6IEFycmF5PHN0cmluZz4gfCBudWxsXG4gICAgcmV0dXJuUmVhc29uSWZOb3RFcXVhbDogYm9vbGVhblxufVxuXG5leHBvcnQgdHlwZSBFbmNvZGluZyA9XG4gICAgJ2FzY2lpJyB8XG4gICAgJ2Jhc2U2NCcgfFxuICAgICdiYXNlNjR1cmwnIHxcbiAgICAnYmluYXJ5JyB8XG4gICAgJ2hleCcgfFxuICAgICdsYXRpbjEnIHxcbiAgICAndWNzMicgfFxuICAgICd1Y3MtMicgfFxuICAgICd1dGY4JyB8XG4gICAgJ3V0ZjE2bGUnIHxcbiAgICAndXRmLTgnXG5leHBvcnQgaW50ZXJmYWNlIEZpbGUge1xuICAgIGRpcmVjdG9yeVBhdGg6IHN0cmluZ1xuICAgIGRpcmVjdG9yeUVudHJ5OiBEaXJlY3RvcnlFbnRyeSB8IG51bGxcbiAgICBlcnJvcjogRXJyb3IgfCBudWxsXG4gICAgbmFtZTogc3RyaW5nXG4gICAgcGF0aDogc3RyaW5nXG4gICAgc3RhdHM6IEZpbGVTdGF0cyB8IG51bGxcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQcm9jZXNzRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gICAgcGFyYW1ldGVyczogQXJyYXk8dW5rbm93bj5cbiAgICByZXR1cm5Db2RlOiBudW1iZXJcbn1cblxuZXhwb3J0IHR5cGUgUXVlcnlQYXJhbWV0ZXJzID1cbiAgICBBcnJheTxBcnJheTxzdHJpbmc+IHwgc3RyaW5nPiAmIE1hcHBpbmc8QXJyYXk8c3RyaW5nPiB8IHN0cmluZz5cblxuZXhwb3J0IGludGVyZmFjZSBUaW1lb3V0UHJvbWlzZSBleHRlbmRzIFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNsZWFyOiAoKSA9PiB2b2lkXG4gICAgdGltZW91dElEOiBOb2RlSlMuVGltZW91dFxufVxuXG4vLyBOT1RFOiBNYXBwaW5nIGNhbm5vdCBiZSB1c2VkIGhlcmUgdG8gYXZvaWQgY2lyY3VsYXIgcmVmZXJlbmNlcy5cbmV4cG9ydCB0eXBlIE9iamVjdE1hc2sgPSBBcnJheTxzdHJpbmc+IHwgYm9vbGVhbiB8IHtba2V5OiBzdHJpbmddOiBPYmplY3RNYXNrfVxuZXhwb3J0IHR5cGUgTm9ybWFsaXplZE9iamVjdE1hc2sgPSBib29sZWFuIHwgTWFwcGluZzxPYmplY3RNYXNrPlxuZXhwb3J0IGludGVyZmFjZSBPYmplY3RNYXNrQ29uZmlndXJhdGlvbiB7XG4gICAgZXhjbHVkZT86IE9iamVjdE1hc2tcbiAgICBpbmNsdWRlPzogT2JqZWN0TWFza1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEV2YWx1YXRlT2JqZWN0IHtcbiAgICBfX2V2YWx1YXRlX186IHN0cmluZ1xufVxuZXhwb3J0IGludGVyZmFjZSBFeGVjdXRlT2JqZWN0IHtcbiAgICBfX2V4ZWN1dGVfXzogc3RyaW5nXG59XG5leHBvcnQgdHlwZSBFdmFsdWF0ZWFibGUgPSBFdmFsdWF0ZU9iamVjdCB8IEV4ZWN1dGVPYmplY3RcblxuZXhwb3J0IHR5cGUgRXZhbHVhdGVkT2JqZWN0PFR5cGUgZXh0ZW5kcyBvYmplY3Q+ID0ge1xuICAgIFtQcm9wZXJ0eSBpbiBrZXlvZiBUeXBlXTogKFxuICAgICAgICBUeXBlW1Byb3BlcnR5XSBleHRlbmRzIEV2YWx1YXRlYWJsZSA/XG4gICAgICAgICAgICB1bmtub3duIDpcbiAgICAgICAgICAgIFR5cGVbUHJvcGVydHldIGV4dGVuZHMgb2JqZWN0ID9cbiAgICAgICAgICAgICAgICBFdmFsdWF0ZWRPYmplY3Q8VHlwZVtQcm9wZXJ0eV0+IDpcbiAgICAgICAgICAgICAgICBUeXBlW1Byb3BlcnR5XVxuICAgICAgICApXG59XG5leHBvcnQgdHlwZSBSZWN1cnNpdmVFdmFsdWF0ZWFibGU8VHlwZT4gPVxuICAgIEV2YWx1YXRlYWJsZSB8XG4gICAge1xuICAgICAgICBbUHJvcGVydHkgaW4ga2V5b2YgVHlwZV06IChcbiAgICAgICAgICAgIEV2YWx1YXRlYWJsZSB8IChUeXBlW1Byb3BlcnR5XSBleHRlbmRzIEFycmF5PGluZmVyIE90aGVyVHlwZT4gP1xuICAgICAgICAgICAgICAgIEFycmF5PFJlY3Vyc2l2ZUV2YWx1YXRlYWJsZTxPdGhlclR5cGU+PiA6XG4gICAgICAgICAgICAgICAgVHlwZVtQcm9wZXJ0eV0gZXh0ZW5kcyBNYXBwaW5nPHVua25vd24+ID9cbiAgICAgICAgICAgICAgICAgICAgUmVjdXJzaXZlRXZhbHVhdGVhYmxlPFR5cGVbUHJvcGVydHldPiA6XG4gICAgICAgICAgICAgICAgICAgIEV2YWx1YXRlYWJsZSB8IFR5cGVbUHJvcGVydHldXG4gICAgICAgICAgICApXG4gICAgICAgIClcbiAgICB9XG5cbmV4cG9ydCBpbnRlcmZhY2UgUGFnaW5hdGVPcHRpb25zIHtcbiAgICBib3VuZGFyeUNvdW50OiBudW1iZXJcbiAgICBkaXNhYmxlZDogYm9vbGVhblxuICAgIGhpZGVOZXh0QnV0dG9uOiBib29sZWFuXG4gICAgaGlkZVByZXZCdXR0b246IGJvb2xlYW5cbiAgICBwYWdlOiBudW1iZXJcbiAgICBwYWdlU2l6ZT86IG51bGwgfCBudW1iZXJcbiAgICBzaG93Rmlyc3RCdXR0b246IGJvb2xlYW5cbiAgICBzaG93TGFzdEJ1dHRvbjogYm9vbGVhblxuICAgIHNpYmxpbmdDb3VudDogbnVtYmVyXG4gICAgdG90YWw6IG51bWJlclxufVxuZXhwb3J0IGludGVyZmFjZSBQYWdlIHtcbiAgICBkaXNhYmxlZDogYm9vbGVhblxuICAgIHBhZ2U/OiBudW1iZXJcbiAgICBzZWxlY3RlZDogYm9vbGVhblxuICAgIHR5cGU6IFBhZ2VUeXBlXG59XG5leHBvcnQgdHlwZSBQYWdlVHlwZSA9XG4gICAgJ2VuZC1lbGxpcHNpcycgfFxuICAgICdmaXJzdCcgfFxuICAgICdsYXN0JyB8XG4gICAgJ25leHQnIHxcbiAgICAncGFnZScgfFxuICAgICdwcmV2aW91cycgfFxuICAgICdzdGFydC1lbGxpcHNpcydcblxuZXhwb3J0IGludGVyZmFjZSBPZmZzZXQge1xuICAgIGxlZnQ6IG51bWJlclxuICAgIHRvcDogbnVtYmVyXG59XG5leHBvcnQgaW50ZXJmYWNlIFBvc2l0aW9uIGV4dGVuZHMgT2Zmc2V0IHtcbiAgICBib3R0b206IG51bWJlclxuICAgIHJpZ2h0OiBudW1iZXJcbn1cblxuZXhwb3J0IHR5cGUgUHJvY2Vzc0hhbmRsZXIgPVxuICAgIChyZXR1cm5Db2RlOiB1bmtub3duLCAuLi5wYXJhbWV0ZXJzOiBBcnJheTx1bmtub3duPikgPT4gdm9pZFxuZXhwb3J0IGludGVyZmFjZSBQcm9jZXNzQ2xvc2VSZWFzb24ge1xuICAgIHBhcmFtZXRlcnM6IEFycmF5PHVua25vd24+XG4gICAgcmVhc29uOiB1bmtub3duXG59XG5leHBvcnQgdHlwZSBQcm9jZXNzQ2xvc2VDYWxsYmFjayA9IChyZWFzb246IFByb2Nlc3NDbG9zZVJlYXNvbikgPT4gdm9pZFxuZXhwb3J0IHR5cGUgUHJvY2Vzc0Vycm9yQ2FsbGJhY2sgPSAocmVhc29uOiBQcm9jZXNzRXJyb3IpID0+IHZvaWRcblxuZXhwb3J0IHR5cGUgUmVsYXRpdmVQb3NpdGlvbiA9ICdhYm92ZScgfCAnYmVsb3cnIHwgJ2luJyB8ICdsZWZ0JyB8ICdyaWdodCdcblxuZXhwb3J0IHR5cGUgVGVtcGxhdGVGdW5jdGlvbjxUeXBlID0gc3RyaW5nPiA9XG4gICAgKC4uLnBhcmFtZXRlcnM6IEFycmF5PHVua25vd24+KSA9PiBUeXBlXG5leHBvcnQgaW50ZXJmYWNlIENvbXBpbGF0aW9uUmVzdWx0PFxuICAgIFQgPSBzdHJpbmcsIE4gZXh0ZW5kcyBBcnJheTxzdHJpbmc+ID0gQXJyYXk8c3RyaW5nPlxuPiB7XG4gICAgZXJyb3I6IG51bGwgfCBzdHJpbmdcblxuICAgIGdsb2JhbE5hbWVzOiBBcnJheTxzdHJpbmc+XG4gICAgZ2xvYmFsTmFtZXNVbmRlZmluZWRMaXN0OiBBcnJheTx1bmRlZmluZWQ+XG4gICAgb3JpZ2luYWxTY29wZU5hbWVzOiBOXG4gICAgc2NvcGVOYW1lTWFwcGluZzogUmVjb3JkPE5bbnVtYmVyXSwgc3RyaW5nPlxuICAgIHNjb3BlTmFtZXM6IEFycmF5PHN0cmluZz5cblxuICAgIHRlbXBsYXRlRnVuY3Rpb246IFRlbXBsYXRlRnVuY3Rpb248VD5cbn1cbmV4cG9ydCBpbnRlcmZhY2UgTmVnYXRpdmVFdmFsdWF0aW9uUmVzdWx0IHtcbiAgICBjb21waWxlRXJyb3I6IG51bGwgfCBzdHJpbmdcbiAgICBlcnJvcjogc3RyaW5nXG4gICAgcmVzdWx0OiB1bmRlZmluZWRcbiAgICBydW50aW1lRXJyb3I6IG51bGwgfCBzdHJpbmdcbn1cbmV4cG9ydCBpbnRlcmZhY2UgUG9zaXRpdmVFdmFsdWF0aW9uUmVzdWx0PFR5cGUgPSBzdHJpbmc+IHtcbiAgICBjb21waWxlRXJyb3I6IG51bGxcbiAgICBlcnJvcjogbnVsbFxuICAgIHJlc3VsdDogVHlwZVxuICAgIHJ1bnRpbWVFcnJvcjogbnVsbFxufVxuZXhwb3J0IHR5cGUgRXZhbHVhdGlvblJlc3VsdDxUeXBlID0gc3RyaW5nPiA9XG4gICAgUG9zaXRpdmVFdmFsdWF0aW9uUmVzdWx0PFR5cGU+IHwgTmVnYXRpdmVFdmFsdWF0aW9uUmVzdWx0XG5cbmV4cG9ydCB0eXBlIExvY2tDYWxsYmFja0Z1bmN0aW9uPFR5cGU+ID1cbiAgICAoZGVzY3JpcHRpb24/OiBzdHJpbmcpID0+IFByb21pc2U8VHlwZT4gfCBUeXBlXG4vLy8gZW5kcmVnaW9uXG5leHBvcnQgaW50ZXJmYWNlIFN0cmluZ01hcmtPcHRpb25zIHtcbiAgICBtYXJrZXI6XG4gICAgICAgICgoZm91bmRXb3JkOiBzdHJpbmcsIG1hcmtlZFRhcmdldDogQXJyYXk8dW5rbm93bj4pID0+IHVua25vd24pIHwgc3RyaW5nXG4gICAgbm9ybWFsaXplcjogKHZhbHVlOiB1bmtub3duKSA9PiBzdHJpbmdcbiAgICBza2lwVGFnRGVsaW1pdGVkUGFydHM6IG51bGwgfCBbc3RyaW5nLCBzdHJpbmddXG59XG5leHBvcnQgaW50ZXJmYWNlIEludGVycnVwdGFibGVTY3JvbGxUb09wdGlvbnMge1xuICAgIHRhcmdldERvbU5vZGU6IEhUTUxFbGVtZW50XG4gICAgY29udGFpbmVyRG9tTm9kZTogSFRNTEVsZW1lbnQgfCBXaW5kb3dcbiAgICBkdXJhdGlvbkluTWlsbGlzZWNvbmRzOiBudW1iZXJcbiAgICBpbnRlcnJ1cHRPbk1hbnVhbFNjcm9sbDogYm9vbGVhblxuICAgIG9mZnNldDoge1xuICAgICAgICB0b3A6IG51bWJlclxuICAgICAgICBsZWZ0OiBudW1iZXJcbiAgICB9XG59XG5leHBvcnQgaW50ZXJmYWNlIEdpdmVuSW50ZXJydXB0YWJsZVNjcm9sbFRvT3B0aW9uc1xuICAgIGV4dGVuZHNcblBhcnRpYWw8U2Nyb2xsVG9PcHRpb25zPiB7XG4gICAgdGFyZ2V0RG9tTm9kZT86IE5vZGUgfCBudWxsXG4gICAgY29udGFpbmVyRG9tTm9kZT86IE5vZGUgfCBudWxsIHwgV2luZG93XG4gICAgb2Zmc2V0PzogUGFydGlhbDxJbnRlcnJ1cHRhYmxlU2Nyb2xsVG9PcHRpb25zWydvZmZzZXQnXT5cbn1cbmV4cG9ydCBpbnRlcmZhY2UgTG9nZ2VyT3B0aW9ucyB7XG4gICAgbGV2ZWw6IExldmVsXG4gICAgbmFtZTogc3RyaW5nXG59XG5leHBvcnQgaW50ZXJmYWNlIEV2YWx1YXRlRHluYW1pY0RhdGFPcHRpb25zIHtcbiAgICBzY29wZTogTWFwcGluZzx1bmtub3duPlxuICAgIHNlbGZSZWZlcmVuY2VOYW1lOiBzdHJpbmdcbiAgICBleHByZXNzaW9uSW5kaWNhdG9yS2V5OiBzdHJpbmdcbiAgICBleGVjdXRpb25JbmRpY2F0b3JLZXk6IHN0cmluZ1xufVxuLy8gZW5kcmVnaW9uXG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQSxZQUFZOztBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBIiwiaWdub3JlTGlzdCI6W119
|