cpf-utils
Version:
Utility functions to deal with CPF data (Brazilian personal ID), like generation fake ones, validating and formatting
9 lines (8 loc) • 45.4 kB
JavaScript
/**
* cpf-utils v1.4.2
*
* @author Julio L. Muller.
* @license MIT - 2020-2025
*/
!function(e,n){"object"==typeof exports&&"undefined"!=typeof module?module.exports=n():"function"==typeof define&&define.amd?define(n):(e="undefined"!=typeof globalThis?globalThis:e||self).cpfUtils=n()}(this,(function(){"use strict";const{replace:e}="",n=/[&<>'"]/g,t={"&":"&","<":"<",">":">","'":"'",'"':"""},r=e=>t[e];function o(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var i,a;var c,u,d=o(a?i:(a=1,i=function(e){return String(e).replace(/\D/g,"")}));var s=o(function(){if(u)return c;u=1;var e=function(e){return function(e){return!!e&&"object"==typeof e}(e)&&!function(e){var t=Object.prototype.toString.call(e);return"[object RegExp]"===t||"[object Date]"===t||function(e){return e.$$typeof===n}(e)}(e)},n="function"==typeof Symbol&&Symbol.for?Symbol.for("react.element"):60103;function t(e,n){return!1!==n.clone&&n.isMergeableObject(e)?d((t=e,Array.isArray(t)?[]:{}),e,n):e;var t}function r(e,n,r){return e.concat(n).map((function(e){return t(e,r)}))}function o(e){return Object.keys(e).concat(function(e){return Object.getOwnPropertySymbols?Object.getOwnPropertySymbols(e).filter((function(n){return Object.propertyIsEnumerable.call(e,n)})):[]}(e))}function i(e,n){try{return n in e}catch(e){return!1}}function a(e,n,r){var a={};return r.isMergeableObject(e)&&o(e).forEach((function(n){a[n]=t(e[n],r)})),o(n).forEach((function(o){(function(e,n){return i(e,n)&&!(Object.hasOwnProperty.call(e,n)&&Object.propertyIsEnumerable.call(e,n))})(e,o)||(i(e,o)&&r.isMergeableObject(n[o])?a[o]=function(e,n){if(!n.customMerge)return d;var t=n.customMerge(e);return"function"==typeof t?t:d}(o,r)(e[o],n[o],r):a[o]=t(n[o],r))})),a}function d(n,o,i){(i=i||{}).arrayMerge=i.arrayMerge||r,i.isMergeableObject=i.isMergeableObject||e,i.cloneUnlessOtherwiseSpecified=t;var c=Array.isArray(o);return c===Array.isArray(n)?c?i.arrayMerge(n,o,i):a(n,o,i):t(o,i)}return d.all=function(e,n){if(!Array.isArray(e))throw new Error("first argument should be an array");return e.reduce((function(e,t){return d(e,t,n)}),{})},c=d}());const f={delimiters:{dot:".",dash:"-"},hiddenRange:{start:3,end:10},onFail:e=>e,hiddenKey:"*",hidden:!1,escape:!1};function l(t,o){const i=d(t).split(""),a=function(e={}){const n=s(f,e);if(n.hidden){if(isNaN(n.hiddenRange.start)||n.hiddenRange.start<0||n.hiddenRange.start>10)throw new TypeError('Option "hiddenRange.start" must be a number between 0 and 10.');if(isNaN(n.hiddenRange.end)||n.hiddenRange.end<0||n.hiddenRange.end>10)throw new TypeError('Option "hiddenRange.end" must be a number between 0 and 10.');if(n.hiddenRange.start>n.hiddenRange.end){const e=n.hiddenRange.start;n.hiddenRange.start=n.hiddenRange.end,n.hiddenRange.end=e}}if("function"!=typeof n.onFail)throw new TypeError('The option "onFail" must be a callback function.');return n}(o);if(11!==i.length){const e=new Error(`Parameter "${t}" does not contain 11 digits.`);return a.onFail(t,e)}if(a.hidden)for(let e=a.hiddenRange.start;e<=a.hiddenRange.end;e++)i[e]=a.hiddenKey;i.splice(9,0,a.delimiters.dash),i.splice(6,0,a.delimiters.dot),i.splice(3,0,a.delimiters.dot);const c=i.join("");return a.escape?(u=c,e.call(u,n,r)):c;var u}const p={format:!1,prefix:""};function h(e){const n=function(e={}){return s(p,e)}(e),t=d(n.prefix),r=t.length;if(r<0||r>9)throw new Error('Option "prefix" must be a string containing between 1 and 9 digits.');const o=t.split("").map(Number).concat(function(e){const n=[];for(;n.length<e;){const e=10*Math.random(),t=Math.floor(e);n.push(t)}return n}(9-r));return[9,10].forEach((e=>{let n=e+1,t=0;for(let r=0;r<e;r++,n--)t+=o[r]*n;const r=11-t%11;o.push(r>9?0:r)})),n.format?l(o.join("")):o.join("")}return{format:l,generate:h,isValid:function(e){const n=d(e);return 11===n.length&&n===h({prefix:n.substring(0,9)})}}}));
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3BmLXV0aWxzLm1pbi5qcyIsInNvdXJjZXMiOlsiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2h0bWwtZXNjYXBlci9lc20vaW5kZXguanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbnVtLW9ubHkvYnVpbGQvaW5kZXguY2pzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2RlZXBtZXJnZS9kaXN0L2Nqcy5qcyIsIi4uLy4uL2NwZi1mbXQvYnVpbGQvaW5kZXgubWpzIiwiLi4vLi4vY3BmLWdlbi9idWlsZC9pbmRleC5tanMiLCIuLi9zcmMvbW9kdWxlLnRzIiwiLi4vLi4vY3BmLXZhbC9idWlsZC9pbmRleC5tanMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb3B5cmlnaHQgKEMpIDIwMTctcHJlc2VudCBieSBBbmRyZWEgR2lhbW1hcmNoaSAtIEBXZWJSZWZsZWN0aW9uXG4gKlxuICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weVxuICogb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbFxuICogaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0c1xuICogdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbFxuICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzXG4gKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuICpcbiAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluXG4gKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbiAqXG4gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4gKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbiAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbiAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU5cbiAqIFRIRSBTT0ZUV0FSRS5cbiAqL1xuXG5jb25zdCB7cmVwbGFjZX0gPSAnJztcblxuLy8gZXNjYXBlXG5jb25zdCBlcyA9IC8mKD86YW1wfCMzOHxsdHwjNjB8Z3R8IzYyfGFwb3N8IzM5fHF1b3R8IzM0KTsvZztcbmNvbnN0IGNhID0gL1smPD4nXCJdL2c7XG5cbmNvbnN0IGVzY2EgPSB7XG4gICcmJzogJyZhbXA7JyxcbiAgJzwnOiAnJmx0OycsXG4gICc+JzogJyZndDsnLFxuICBcIidcIjogJyYjMzk7JyxcbiAgJ1wiJzogJyZxdW90Oydcbn07XG5jb25zdCBwZSA9IG0gPT4gZXNjYVttXTtcblxuLyoqXG4gKiBTYWZlbHkgZXNjYXBlIEhUTUwgZW50aXRpZXMgc3VjaCBhcyBgJmAsIGA8YCwgYD5gLCBgXCJgLCBhbmQgYCdgLlxuICogQHBhcmFtIHtzdHJpbmd9IGVzIHRoZSBpbnB1dCB0byBzYWZlbHkgZXNjYXBlXG4gKiBAcmV0dXJucyB7c3RyaW5nfSB0aGUgZXNjYXBlZCBpbnB1dCwgYW5kIGl0ICoqdGhyb3dzKiogYW4gZXJyb3IgaWZcbiAqICB0aGUgaW5wdXQgdHlwZSBpcyB1bmV4cGVjdGVkLCBleGNlcHQgZm9yIGJvb2xlYW4gYW5kIG51bWJlcnMsXG4gKiAgY29udmVydGVkIGFzIHN0cmluZy5cbiAqL1xuZXhwb3J0IGNvbnN0IGVzY2FwZSA9IGVzID0+IHJlcGxhY2UuY2FsbChlcywgY2EsIHBlKTtcblxuXG4vLyB1bmVzY2FwZVxuY29uc3QgdW5lcyA9IHtcbiAgJyZhbXA7JzogJyYnLFxuICAnJiMzODsnOiAnJicsXG4gICcmbHQ7JzogJzwnLFxuICAnJiM2MDsnOiAnPCcsXG4gICcmZ3Q7JzogJz4nLFxuICAnJiM2MjsnOiAnPicsXG4gICcmYXBvczsnOiBcIidcIixcbiAgJyYjMzk7JzogXCInXCIsXG4gICcmcXVvdDsnOiAnXCInLFxuICAnJiMzNDsnOiAnXCInXG59O1xuY29uc3QgY2FwZSA9IG0gPT4gdW5lc1ttXTtcblxuLyoqXG4gKiBTYWZlbHkgdW5lc2NhcGUgcHJldmlvdXNseSBlc2NhcGVkIGVudGl0aWVzIHN1Y2ggYXMgYCZgLCBgPGAsIGA+YCwgYFwiYCxcbiAqIGFuZCBgJ2AuXG4gKiBAcGFyYW0ge3N0cmluZ30gdW4gYSBwcmV2aW91c2x5IGVzY2FwZWQgc3RyaW5nXG4gKiBAcmV0dXJucyB7c3RyaW5nfSB0aGUgdW5lc2NhcGVkIGlucHV0LCBhbmQgaXQgKip0aHJvd3MqKiBhbiBlcnJvciBpZlxuICogIHRoZSBpbnB1dCB0eXBlIGlzIHVuZXhwZWN0ZWQsIGV4Y2VwdCBmb3IgYm9vbGVhbiBhbmQgbnVtYmVycyxcbiAqICBjb252ZXJ0ZWQgYXMgc3RyaW5nLlxuICovXG5leHBvcnQgY29uc3QgdW5lc2NhcGUgPSB1biA9PiByZXBsYWNlLmNhbGwodW4sIGVzLCBjYXBlKTtcbiIsIid1c2Ugc3RyaWN0JztcblxuZnVuY3Rpb24gbnVtT25seSh0YXJnZXQpIHtcbiAgcmV0dXJuIFN0cmluZyh0YXJnZXQpLnJlcGxhY2UoL1xcRC9nLCBcIlwiKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBudW1Pbmx5O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ9dXRmLTg7YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2lhVzVrWlhndVkycHpJaXdpYzI5MWNtTmxjeUk2V3lJdUxpOXpjbU12Ym5WdExXOXViSGt1ZEhNaVhTd2ljMjkxY21ObGMwTnZiblJsYm5RaU9sc2lablZ1WTNScGIyNGdiblZ0VDI1c2VTaDBZWEpuWlhRNklIVnVhMjV2ZDI0cE9pQnpkSEpwYm1jZ2UxeHVJQ0J5WlhSMWNtNGdVM1J5YVc1bktIUmhjbWRsZENrdWNtVndiR0ZqWlNndlhGeEVMMmNzSUNjbktUdGNibjFjYmx4dVpYaHdiM0owSUdSbFptRjFiSFFnYm5WdFQyNXNlVHRjYmlKZExDSnVZVzFsY3lJNlcxMHNJbTFoY0hCcGJtZHpJam9pT3p0QlFVRkJMRk5CUVZNc1VVRkJVU3hOUVVGNVFpeEZRVUZCTzBGQlEzaERMRVZCUVVFc1QwRkJUeXhOUVVGUExFTkJRVUVzVFVGQlRTeERRVUZGTEVOQlFVRXNUMEZCUVN4RFFVRlJMRTlCUVU4c1JVRkJSU3hEUVVGQk8wRkJRM3BET3pzN095SjlcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIGlzTWVyZ2VhYmxlT2JqZWN0ID0gZnVuY3Rpb24gaXNNZXJnZWFibGVPYmplY3QodmFsdWUpIHtcblx0cmV0dXJuIGlzTm9uTnVsbE9iamVjdCh2YWx1ZSlcblx0XHQmJiAhaXNTcGVjaWFsKHZhbHVlKVxufTtcblxuZnVuY3Rpb24gaXNOb25OdWxsT2JqZWN0KHZhbHVlKSB7XG5cdHJldHVybiAhIXZhbHVlICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCdcbn1cblxuZnVuY3Rpb24gaXNTcGVjaWFsKHZhbHVlKSB7XG5cdHZhciBzdHJpbmdWYWx1ZSA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh2YWx1ZSk7XG5cblx0cmV0dXJuIHN0cmluZ1ZhbHVlID09PSAnW29iamVjdCBSZWdFeHBdJ1xuXHRcdHx8IHN0cmluZ1ZhbHVlID09PSAnW29iamVjdCBEYXRlXSdcblx0XHR8fCBpc1JlYWN0RWxlbWVudCh2YWx1ZSlcbn1cblxuLy8gc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9ibG9iL2I1YWM5NjNmYjc5MWQxMjk4ZTdmMzk2MjM2MzgzYmM5NTVmOTE2YzEvc3JjL2lzb21vcnBoaWMvY2xhc3NpYy9lbGVtZW50L1JlYWN0RWxlbWVudC5qcyNMMjEtTDI1XG52YXIgY2FuVXNlU3ltYm9sID0gdHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJiBTeW1ib2wuZm9yO1xudmFyIFJFQUNUX0VMRU1FTlRfVFlQRSA9IGNhblVzZVN5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LmVsZW1lbnQnKSA6IDB4ZWFjNztcblxuZnVuY3Rpb24gaXNSZWFjdEVsZW1lbnQodmFsdWUpIHtcblx0cmV0dXJuIHZhbHVlLiQkdHlwZW9mID09PSBSRUFDVF9FTEVNRU5UX1RZUEVcbn1cblxuZnVuY3Rpb24gZW1wdHlUYXJnZXQodmFsKSB7XG5cdHJldHVybiBBcnJheS5pc0FycmF5KHZhbCkgPyBbXSA6IHt9XG59XG5cbmZ1bmN0aW9uIGNsb25lVW5sZXNzT3RoZXJ3aXNlU3BlY2lmaWVkKHZhbHVlLCBvcHRpb25zKSB7XG5cdHJldHVybiAob3B0aW9ucy5jbG9uZSAhPT0gZmFsc2UgJiYgb3B0aW9ucy5pc01lcmdlYWJsZU9iamVjdCh2YWx1ZSkpXG5cdFx0PyBkZWVwbWVyZ2UoZW1wdHlUYXJnZXQodmFsdWUpLCB2YWx1ZSwgb3B0aW9ucylcblx0XHQ6IHZhbHVlXG59XG5cbmZ1bmN0aW9uIGRlZmF1bHRBcnJheU1lcmdlKHRhcmdldCwgc291cmNlLCBvcHRpb25zKSB7XG5cdHJldHVybiB0YXJnZXQuY29uY2F0KHNvdXJjZSkubWFwKGZ1bmN0aW9uKGVsZW1lbnQpIHtcblx0XHRyZXR1cm4gY2xvbmVVbmxlc3NPdGhlcndpc2VTcGVjaWZpZWQoZWxlbWVudCwgb3B0aW9ucylcblx0fSlcbn1cblxuZnVuY3Rpb24gZ2V0TWVyZ2VGdW5jdGlvbihrZXksIG9wdGlvbnMpIHtcblx0aWYgKCFvcHRpb25zLmN1c3RvbU1lcmdlKSB7XG5cdFx0cmV0dXJuIGRlZXBtZXJnZVxuXHR9XG5cdHZhciBjdXN0b21NZXJnZSA9IG9wdGlvbnMuY3VzdG9tTWVyZ2Uoa2V5KTtcblx0cmV0dXJuIHR5cGVvZiBjdXN0b21NZXJnZSA9PT0gJ2Z1bmN0aW9uJyA/IGN1c3RvbU1lcmdlIDogZGVlcG1lcmdlXG59XG5cbmZ1bmN0aW9uIGdldEVudW1lcmFibGVPd25Qcm9wZXJ0eVN5bWJvbHModGFyZ2V0KSB7XG5cdHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzXG5cdFx0PyBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHRhcmdldCkuZmlsdGVyKGZ1bmN0aW9uKHN5bWJvbCkge1xuXHRcdFx0cmV0dXJuIE9iamVjdC5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHRhcmdldCwgc3ltYm9sKVxuXHRcdH0pXG5cdFx0OiBbXVxufVxuXG5mdW5jdGlvbiBnZXRLZXlzKHRhcmdldCkge1xuXHRyZXR1cm4gT2JqZWN0LmtleXModGFyZ2V0KS5jb25jYXQoZ2V0RW51bWVyYWJsZU93blByb3BlcnR5U3ltYm9scyh0YXJnZXQpKVxufVxuXG5mdW5jdGlvbiBwcm9wZXJ0eUlzT25PYmplY3Qob2JqZWN0LCBwcm9wZXJ0eSkge1xuXHR0cnkge1xuXHRcdHJldHVybiBwcm9wZXJ0eSBpbiBvYmplY3Rcblx0fSBjYXRjaChfKSB7XG5cdFx0cmV0dXJuIGZhbHNlXG5cdH1cbn1cblxuLy8gUHJvdGVjdHMgZnJvbSBwcm90b3R5cGUgcG9pc29uaW5nIGFuZCB1bmV4cGVjdGVkIG1lcmdpbmcgdXAgdGhlIHByb3RvdHlwZSBjaGFpbi5cbmZ1bmN0aW9uIHByb3BlcnR5SXNVbnNhZmUodGFyZ2V0LCBrZXkpIHtcblx0cmV0dXJuIHByb3BlcnR5SXNPbk9iamVjdCh0YXJnZXQsIGtleSkgLy8gUHJvcGVydGllcyBhcmUgc2FmZSB0byBtZXJnZSBpZiB0aGV5IGRvbid0IGV4aXN0IGluIHRoZSB0YXJnZXQgeWV0LFxuXHRcdCYmICEoT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwodGFyZ2V0LCBrZXkpIC8vIHVuc2FmZSBpZiB0aGV5IGV4aXN0IHVwIHRoZSBwcm90b3R5cGUgY2hhaW4sXG5cdFx0XHQmJiBPYmplY3QucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbCh0YXJnZXQsIGtleSkpIC8vIGFuZCBhbHNvIHVuc2FmZSBpZiB0aGV5J3JlIG5vbmVudW1lcmFibGUuXG59XG5cbmZ1bmN0aW9uIG1lcmdlT2JqZWN0KHRhcmdldCwgc291cmNlLCBvcHRpb25zKSB7XG5cdHZhciBkZXN0aW5hdGlvbiA9IHt9O1xuXHRpZiAob3B0aW9ucy5pc01lcmdlYWJsZU9iamVjdCh0YXJnZXQpKSB7XG5cdFx0Z2V0S2V5cyh0YXJnZXQpLmZvckVhY2goZnVuY3Rpb24oa2V5KSB7XG5cdFx0XHRkZXN0aW5hdGlvbltrZXldID0gY2xvbmVVbmxlc3NPdGhlcndpc2VTcGVjaWZpZWQodGFyZ2V0W2tleV0sIG9wdGlvbnMpO1xuXHRcdH0pO1xuXHR9XG5cdGdldEtleXMoc291cmNlKS5mb3JFYWNoKGZ1bmN0aW9uKGtleSkge1xuXHRcdGlmIChwcm9wZXJ0eUlzVW5zYWZlKHRhcmdldCwga2V5KSkge1xuXHRcdFx0cmV0dXJuXG5cdFx0fVxuXG5cdFx0aWYgKHByb3BlcnR5SXNPbk9iamVjdCh0YXJnZXQsIGtleSkgJiYgb3B0aW9ucy5pc01lcmdlYWJsZU9iamVjdChzb3VyY2Vba2V5XSkpIHtcblx0XHRcdGRlc3RpbmF0aW9uW2tleV0gPSBnZXRNZXJnZUZ1bmN0aW9uKGtleSwgb3B0aW9ucykodGFyZ2V0W2tleV0sIHNvdXJjZVtrZXldLCBvcHRpb25zKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0ZGVzdGluYXRpb25ba2V5XSA9IGNsb25lVW5sZXNzT3RoZXJ3aXNlU3BlY2lmaWVkKHNvdXJjZVtrZXldLCBvcHRpb25zKTtcblx0XHR9XG5cdH0pO1xuXHRyZXR1cm4gZGVzdGluYXRpb25cbn1cblxuZnVuY3Rpb24gZGVlcG1lcmdlKHRhcmdldCwgc291cmNlLCBvcHRpb25zKSB7XG5cdG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXHRvcHRpb25zLmFycmF5TWVyZ2UgPSBvcHRpb25zLmFycmF5TWVyZ2UgfHwgZGVmYXVsdEFycmF5TWVyZ2U7XG5cdG9wdGlvbnMuaXNNZXJnZWFibGVPYmplY3QgPSBvcHRpb25zLmlzTWVyZ2VhYmxlT2JqZWN0IHx8IGlzTWVyZ2VhYmxlT2JqZWN0O1xuXHQvLyBjbG9uZVVubGVzc090aGVyd2lzZVNwZWNpZmllZCBpcyBhZGRlZCB0byBgb3B0aW9uc2Agc28gdGhhdCBjdXN0b20gYXJyYXlNZXJnZSgpXG5cdC8vIGltcGxlbWVudGF0aW9ucyBjYW4gdXNlIGl0LiBUaGUgY2FsbGVyIG1heSBub3QgcmVwbGFjZSBpdC5cblx0b3B0aW9ucy5jbG9uZVVubGVzc090aGVyd2lzZVNwZWNpZmllZCA9IGNsb25lVW5sZXNzT3RoZXJ3aXNlU3BlY2lmaWVkO1xuXG5cdHZhciBzb3VyY2VJc0FycmF5ID0gQXJyYXkuaXNBcnJheShzb3VyY2UpO1xuXHR2YXIgdGFyZ2V0SXNBcnJheSA9IEFycmF5LmlzQXJyYXkodGFyZ2V0KTtcblx0dmFyIHNvdXJjZUFuZFRhcmdldFR5cGVzTWF0Y2ggPSBzb3VyY2VJc0FycmF5ID09PSB0YXJnZXRJc0FycmF5O1xuXG5cdGlmICghc291cmNlQW5kVGFyZ2V0VHlwZXNNYXRjaCkge1xuXHRcdHJldHVybiBjbG9uZVVubGVzc090aGVyd2lzZVNwZWNpZmllZChzb3VyY2UsIG9wdGlvbnMpXG5cdH0gZWxzZSBpZiAoc291cmNlSXNBcnJheSkge1xuXHRcdHJldHVybiBvcHRpb25zLmFycmF5TWVyZ2UodGFyZ2V0LCBzb3VyY2UsIG9wdGlvbnMpXG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIG1lcmdlT2JqZWN0KHRhcmdldCwgc291cmNlLCBvcHRpb25zKVxuXHR9XG59XG5cbmRlZXBtZXJnZS5hbGwgPSBmdW5jdGlvbiBkZWVwbWVyZ2VBbGwoYXJyYXksIG9wdGlvbnMpIHtcblx0aWYgKCFBcnJheS5pc0FycmF5KGFycmF5KSkge1xuXHRcdHRocm93IG5ldyBFcnJvcignZmlyc3QgYXJndW1lbnQgc2hvdWxkIGJlIGFuIGFycmF5Jylcblx0fVxuXG5cdHJldHVybiBhcnJheS5yZWR1Y2UoZnVuY3Rpb24ocHJldiwgbmV4dCkge1xuXHRcdHJldHVybiBkZWVwbWVyZ2UocHJldiwgbmV4dCwgb3B0aW9ucylcblx0fSwge30pXG59O1xuXG52YXIgZGVlcG1lcmdlXzEgPSBkZWVwbWVyZ2U7XG5cbm1vZHVsZS5leHBvcnRzID0gZGVlcG1lcmdlXzE7XG4iLCJpbXBvcnQgeyBlc2NhcGUgfSBmcm9tICdodG1sLWVzY2FwZXInO1xuaW1wb3J0IG51bU9ubHkgZnJvbSAnbnVtLW9ubHknO1xuaW1wb3J0IG1lcmdlRGVlcCBmcm9tICdkZWVwbWVyZ2UnO1xuXG5jb25zdCBkZWZhdWx0T3B0aW9ucyA9IHtcbiAgZGVsaW1pdGVyczoge1xuICAgIGRvdDogXCIuXCIsXG4gICAgZGFzaDogXCItXCJcbiAgfSxcbiAgaGlkZGVuUmFuZ2U6IHtcbiAgICBzdGFydDogMyxcbiAgICBlbmQ6IDEwXG4gIH0sXG4gIG9uRmFpbDogKHZhbHVlKSA9PiB2YWx1ZSxcbiAgaGlkZGVuS2V5OiBcIipcIixcbiAgaGlkZGVuOiBmYWxzZSxcbiAgZXNjYXBlOiBmYWxzZVxufTtcbmZ1bmN0aW9uIG1lcmdlT3B0aW9ucyhjdXN0b21PcHRpb25zID0ge30pIHtcbiAgY29uc3Qgb3B0aW9ucyA9IG1lcmdlRGVlcChcbiAgICBkZWZhdWx0T3B0aW9ucyxcbiAgICBjdXN0b21PcHRpb25zXG4gICk7XG4gIGlmIChvcHRpb25zLmhpZGRlbikge1xuICAgIGlmIChpc05hTihvcHRpb25zLmhpZGRlblJhbmdlLnN0YXJ0KSB8fCBvcHRpb25zLmhpZGRlblJhbmdlLnN0YXJ0IDwgMCB8fCBvcHRpb25zLmhpZGRlblJhbmdlLnN0YXJ0ID4gMTApIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ09wdGlvbiBcImhpZGRlblJhbmdlLnN0YXJ0XCIgbXVzdCBiZSBhIG51bWJlciBiZXR3ZWVuIDAgYW5kIDEwLicpO1xuICAgIH1cbiAgICBpZiAoaXNOYU4ob3B0aW9ucy5oaWRkZW5SYW5nZS5lbmQpIHx8IG9wdGlvbnMuaGlkZGVuUmFuZ2UuZW5kIDwgMCB8fCBvcHRpb25zLmhpZGRlblJhbmdlLmVuZCA+IDEwKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdPcHRpb24gXCJoaWRkZW5SYW5nZS5lbmRcIiBtdXN0IGJlIGEgbnVtYmVyIGJldHdlZW4gMCBhbmQgMTAuJyk7XG4gICAgfVxuICAgIGlmIChvcHRpb25zLmhpZGRlblJhbmdlLnN0YXJ0ID4gb3B0aW9ucy5oaWRkZW5SYW5nZS5lbmQpIHtcbiAgICAgIGNvbnN0IGF1eCA9IG9wdGlvbnMuaGlkZGVuUmFuZ2Uuc3RhcnQ7XG4gICAgICBvcHRpb25zLmhpZGRlblJhbmdlLnN0YXJ0ID0gb3B0aW9ucy5oaWRkZW5SYW5nZS5lbmQ7XG4gICAgICBvcHRpb25zLmhpZGRlblJhbmdlLmVuZCA9IGF1eDtcbiAgICB9XG4gIH1cbiAgaWYgKHR5cGVvZiBvcHRpb25zLm9uRmFpbCAhPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIG9wdGlvbiBcIm9uRmFpbFwiIG11c3QgYmUgYSBjYWxsYmFjayBmdW5jdGlvbi4nKTtcbiAgfVxuICByZXR1cm4gb3B0aW9ucztcbn1cblxuZnVuY3Rpb24gY3BmRm10KGNwZlN0cmluZywgb3B0aW9ucykge1xuICBjb25zdCBDUEZfTEVOR1RIID0gMTE7XG4gIGNvbnN0IGNwZkFycmF5ID0gbnVtT25seShjcGZTdHJpbmcpLnNwbGl0KFwiXCIpO1xuICBjb25zdCBjdXN0b21PcHRpb25zID0gbWVyZ2VPcHRpb25zKG9wdGlvbnMpO1xuICBpZiAoY3BmQXJyYXkubGVuZ3RoICE9PSBDUEZfTEVOR1RIKSB7XG4gICAgY29uc3QgZXJyb3IgPSBuZXcgRXJyb3IoYFBhcmFtZXRlciBcIiR7Y3BmU3RyaW5nfVwiIGRvZXMgbm90IGNvbnRhaW4gJHtDUEZfTEVOR1RIfSBkaWdpdHMuYCk7XG4gICAgcmV0dXJuIGN1c3RvbU9wdGlvbnMub25GYWlsKGNwZlN0cmluZywgZXJyb3IpO1xuICB9XG4gIGlmIChjdXN0b21PcHRpb25zLmhpZGRlbikge1xuICAgIGZvciAobGV0IGkgPSBjdXN0b21PcHRpb25zLmhpZGRlblJhbmdlLnN0YXJ0OyBpIDw9IGN1c3RvbU9wdGlvbnMuaGlkZGVuUmFuZ2UuZW5kOyBpKyspIHtcbiAgICAgIGNwZkFycmF5W2ldID0gY3VzdG9tT3B0aW9ucy5oaWRkZW5LZXk7XG4gICAgfVxuICB9XG4gIGNwZkFycmF5LnNwbGljZSg5LCAwLCBjdXN0b21PcHRpb25zLmRlbGltaXRlcnMuZGFzaCk7XG4gIGNwZkFycmF5LnNwbGljZSg2LCAwLCBjdXN0b21PcHRpb25zLmRlbGltaXRlcnMuZG90KTtcbiAgY3BmQXJyYXkuc3BsaWNlKDMsIDAsIGN1c3RvbU9wdGlvbnMuZGVsaW1pdGVycy5kb3QpO1xuICBjb25zdCBjcGZQcmV0dHkgPSBjcGZBcnJheS5qb2luKFwiXCIpO1xuICBpZiAoY3VzdG9tT3B0aW9ucy5lc2NhcGUpIHtcbiAgICByZXR1cm4gZXNjYXBlKGNwZlByZXR0eSk7XG4gIH1cbiAgcmV0dXJuIGNwZlByZXR0eTtcbn1cblxuZXhwb3J0IHsgY3BmRm10IGFzIGRlZmF1bHQgfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0PXV0Zi04O2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKbWFXeGxJam9pYVc1a1pYZ3ViV3B6SWl3aWMyOTFjbU5sY3lJNld5SXVMaTl6Y21NdmJXVnlaMlV0YjNCMGFXOXVjeTUwY3lJc0lpNHVMM055WXk5amNHWXRabTEwTG5SeklsMHNJbk52ZFhKalpYTkRiMjUwWlc1MElqcGJJbWx0Y0c5eWRDQnRaWEpuWlVSbFpYQWdabkp2YlNBblpHVmxjRzFsY21kbEp6dGNibHh1ZEhsd1pTQkVaV1Z3VUdGeWRHbGhiRHhVUGlBOUlIdGNiaUFnVzFBZ2FXNGdhMlY1YjJZZ1ZGMC9PaUJFWldWd1VHRnlkR2xoYkR4VVcxQmRQanRjYm4wN1hHNWNibVY0Y0c5eWRDQnBiblJsY21aaFkyVWdRV04wZFdGc1EzQm1SbTl5YldGMGRHbHVaMDl3ZEdsdmJuTThUMjVGY25KR1lXeHNZbUZqYXo0Z2UxeHVJQ0JrWld4cGJXbDBaWEp6T2lCN1hHNGdJQ0FnWkdGemFEb2djM1J5YVc1bk8xeHVJQ0FnSUdSdmREb2djM1J5YVc1bk8xeHVJQ0I5TzF4dUlDQmxjMk5oY0dVNklHSnZiMnhsWVc0N1hHNGdJR2hwWkdSbGJqb2dZbTl2YkdWaGJqdGNiaUFnYUdsa1pHVnVTMlY1T2lCemRISnBibWM3WEc0Z0lHaHBaR1JsYmxKaGJtZGxPaUI3WEc0Z0lDQWdaVzVrT2lCdWRXMWlaWEk3WEc0Z0lDQWdjM1JoY25RNklHNTFiV0psY2p0Y2JpQWdmVHRjYmlBZ2IyNUdZV2xzT2lBb2RtRnNkV1U2SUhOMGNtbHVaeXdnWlhKeWIzSTZJRVZ5Y205eUtTQTlQaUJQYmtWeWNrWmhiR3hpWVdOck8xeHVmVnh1WEc1bGVIQnZjblFnZEhsd1pTQkRjR1pHYjNKdFlYUjBhVzVuVDNCMGFXOXVjenhQYmtWeWNrWmhiR3hpWVdOclBpQTlJRVJsWlhCUVlYSjBhV0ZzUEZ4dUlDQkJZM1IxWVd4RGNHWkdiM0p0WVhSMGFXNW5UM0IwYVc5dWN6eFBia1Z5Y2taaGJHeGlZV05yUGx4dVBqdGNibHh1WTI5dWMzUWdaR1ZtWVhWc2RFOXdkR2x2Ym5NNklFRmpkSFZoYkVOd1prWnZjbTFoZEhScGJtZFBjSFJwYjI1elBITjBjbWx1Wno0Z1BTQjdYRzRnSUdSbGJHbHRhWFJsY25NNklIdGNiaUFnSUNCa2IzUTZJQ2N1Snl4Y2JpQWdJQ0JrWVhOb09pQW5MU2NzWEc0Z0lIMHNYRzRnSUdocFpHUmxibEpoYm1kbE9pQjdYRzRnSUNBZ2MzUmhjblE2SURNc1hHNGdJQ0FnWlc1a09pQXhNQ3hjYmlBZ2ZTeGNiaUFnYjI1R1lXbHNPaUFvZG1Gc2RXVXBJRDArSUhaaGJIVmxMRnh1SUNCb2FXUmtaVzVMWlhrNklDY3FKeXhjYmlBZ2FHbGtaR1Z1T2lCbVlXeHpaU3hjYmlBZ1pYTmpZWEJsT2lCbVlXeHpaU3hjYm4wN1hHNWNiaThxS2x4dUlDb2dUV1Z5WjJVZ1kzVnpkRzl0SUc5d2RHbHZibk1nZEc4Z2RHaGxJR1JsWm1GMWJIUWdiMjVsY3k1Y2JpQXFMMXh1Wm5WdVkzUnBiMjRnYldWeVoyVlBjSFJwYjI1elBFOXVSWEp5Um1Gc2JHSmhZMnMrS0Z4dUlDQmpkWE4wYjIxUGNIUnBiMjV6T2lCRGNHWkdiM0p0WVhSMGFXNW5UM0IwYVc5dWN6eFBia1Z5Y2taaGJHeGlZV05yUGlBOUlIdDlMRnh1S1RvZ1FXTjBkV0ZzUTNCbVJtOXliV0YwZEdsdVowOXdkR2x2Ym5NOFQyNUZjbkpHWVd4c1ltRmphejRnZTF4dUlDQmpiMjV6ZENCdmNIUnBiMjV6SUQwZ2JXVnlaMlZFWldWd0tGeHVJQ0FnSUdSbFptRjFiSFJQY0hScGIyNXpMRnh1SUNBZ0lHTjFjM1J2YlU5d2RHbHZibk1zWEc0Z0lDa2dZWE1nUVdOMGRXRnNRM0JtUm05eWJXRjBkR2x1WjA5d2RHbHZibk04VDI1RmNuSkdZV3hzWW1GamF6NDdYRzVjYmlBZ2FXWWdLRzl3ZEdsdmJuTXVhR2xrWkdWdUtTQjdYRzRnSUNBZ2FXWWdLRnh1SUNBZ0lDQWdhWE5PWVU0b2IzQjBhVzl1Y3k1b2FXUmtaVzVTWVc1blpTNXpkR0Z5ZENrZ2ZIeGNiaUFnSUNBZ0lHOXdkR2x2Ym5NdWFHbGtaR1Z1VW1GdVoyVXVjM1JoY25RZ1BDQXdJSHg4WEc0Z0lDQWdJQ0J2Y0hScGIyNXpMbWhwWkdSbGJsSmhibWRsTG5OMFlYSjBJRDRnTVRCY2JpQWdJQ0FwSUh0Y2JpQWdJQ0FnSUhSb2NtOTNJRzVsZHlCVWVYQmxSWEp5YjNJb0owOXdkR2x2YmlCY0ltaHBaR1JsYmxKaGJtZGxMbk4wWVhKMFhDSWdiWFZ6ZENCaVpTQmhJRzUxYldKbGNpQmlaWFIzWldWdUlEQWdZVzVrSURFd0xpY3BPMXh1SUNBZ0lIMWNibHh1SUNBZ0lHbG1JQ2hjYmlBZ0lDQWdJR2x6VG1GT0tHOXdkR2x2Ym5NdWFHbGtaR1Z1VW1GdVoyVXVaVzVrS1NCOGZGeHVJQ0FnSUNBZ2IzQjBhVzl1Y3k1b2FXUmtaVzVTWVc1blpTNWxibVFnUENBd0lIeDhYRzRnSUNBZ0lDQnZjSFJwYjI1ekxtaHBaR1JsYmxKaGJtZGxMbVZ1WkNBK0lERXdYRzRnSUNBZ0tTQjdYRzRnSUNBZ0lDQjBhSEp2ZHlCdVpYY2dWSGx3WlVWeWNtOXlLQ2RQY0hScGIyNGdYQ0pvYVdSa1pXNVNZVzVuWlM1bGJtUmNJaUJ0ZFhOMElHSmxJR0VnYm5WdFltVnlJR0psZEhkbFpXNGdNQ0JoYm1RZ01UQXVKeWs3WEc0Z0lDQWdmVnh1WEc0Z0lDQWdhV1lnS0c5d2RHbHZibk11YUdsa1pHVnVVbUZ1WjJVdWMzUmhjblFnUGlCdmNIUnBiMjV6TG1ocFpHUmxibEpoYm1kbExtVnVaQ2tnZTF4dUlDQWdJQ0FnWTI5dWMzUWdZWFY0SUQwZ2IzQjBhVzl1Y3k1b2FXUmtaVzVTWVc1blpTNXpkR0Z5ZER0Y2JpQWdJQ0FnSUc5d2RHbHZibk11YUdsa1pHVnVVbUZ1WjJVdWMzUmhjblFnUFNCdmNIUnBiMjV6TG1ocFpHUmxibEpoYm1kbExtVnVaRHRjYmlBZ0lDQWdJRzl3ZEdsdmJuTXVhR2xrWkdWdVVtRnVaMlV1Wlc1a0lEMGdZWFY0TzF4dUlDQWdJSDFjYmlBZ2ZWeHVYRzRnSUdsbUlDaDBlWEJsYjJZZ2IzQjBhVzl1Y3k1dmJrWmhhV3dnSVQwOUlDZG1kVzVqZEdsdmJpY3BJSHRjYmlBZ0lDQjBhSEp2ZHlCdVpYY2dWSGx3WlVWeWNtOXlLQ2RVYUdVZ2IzQjBhVzl1SUZ3aWIyNUdZV2xzWENJZ2JYVnpkQ0JpWlNCaElHTmhiR3hpWVdOcklHWjFibU4wYVc5dUxpY3BPMXh1SUNCOVhHNWNiaUFnY21WMGRYSnVJRzl3ZEdsdmJuTTdYRzU5WEc1Y2JtVjRjRzl5ZENCa1pXWmhkV3gwSUcxbGNtZGxUM0IwYVc5dWN6dGNiaUlzSW1sdGNHOXlkQ0I3SUdWelkyRndaU0JoY3lCbGMyTmhjR1ZJVkUxTUlIMGdabkp2YlNBbmFIUnRiQzFsYzJOaGNHVnlKenRjYm1sdGNHOXlkQ0J1ZFcxUGJteDVJR1p5YjIwZ0oyNTFiUzF2Ym14NUp6dGNibHh1YVcxd2IzSjBJRzFsY21kbFQzQjBhVzl1Y3lCbWNtOXRJQ2N1TDIxbGNtZGxMVzl3ZEdsdmJuTW5PMXh1YVcxd2IzSjBJSFI1Y0dVZ2V5QkRjR1pHYjNKdFlYUjBhVzVuVDNCMGFXOXVjeUI5SUdaeWIyMGdKeTR2YldWeVoyVXRiM0IwYVc5dWN5YzdYRzVjYmk4cUtseHVJQ29nUm05eWJXRjBJR0VnWjJsMlpXNGdRMUJHSUdOb1lYSWdjMlZ4ZFdWdVkyVXVYRzRnS2k5Y2JtWjFibU4wYVc5dUlHTndaa1p0ZER4UGJrVnlja1poYkd4aVlXTnJJRDBnYzNSeWFXNW5QaWhjYmlBZ1kzQm1VM1J5YVc1bk9pQnpkSEpwYm1jc1hHNGdJRzl3ZEdsdmJuTS9PaUJEY0daR2IzSnRZWFIwYVc1blQzQjBhVzl1Y3p4UGJrVnlja1poYkd4aVlXTnJQaXhjYmlrNklITjBjbWx1WnlCN1hHNGdJR052Ym5OMElFTlFSbDlNUlU1SFZFZ2dQU0F4TVR0Y2JpQWdZMjl1YzNRZ1kzQm1RWEp5WVhrZ1BTQnVkVzFQYm14NUtHTndabE4wY21sdVp5a3VjM0JzYVhRb0p5Y3BPMXh1SUNCamIyNXpkQ0JqZFhOMGIyMVBjSFJwYjI1eklEMGdiV1Z5WjJWUGNIUnBiMjV6S0c5d2RHbHZibk1wTzF4dVhHNGdJR2xtSUNoamNHWkJjbkpoZVM1c1pXNW5kR2dnSVQwOUlFTlFSbDlNUlU1SFZFZ3BJSHRjYmlBZ0lDQmpiMjV6ZENCbGNuSnZjaUE5SUc1bGR5QkZjbkp2Y2loZ1VHRnlZVzFsZEdWeUlGd2lKSHRqY0daVGRISnBibWQ5WENJZ1pHOWxjeUJ1YjNRZ1kyOXVkR0ZwYmlBa2UwTlFSbDlNUlU1SFZFaDlJR1JwWjJsMGN5NWdLVHRjYmx4dUlDQWdJSEpsZEhWeWJpQmpkWE4wYjIxUGNIUnBiMjV6TG05dVJtRnBiQ2hqY0daVGRISnBibWNzSUdWeWNtOXlLU0JoY3lCemRISnBibWM3WEc0Z0lIMWNibHh1SUNCcFppQW9ZM1Z6ZEc5dFQzQjBhVzl1Y3k1b2FXUmtaVzRwSUh0Y2JpQWdJQ0JtYjNJZ0tHeGxkQ0JwSUQwZ1kzVnpkRzl0VDNCMGFXOXVjeTVvYVdSa1pXNVNZVzVuWlM1emRHRnlkRHNnYVNBOFBTQmpkWE4wYjIxUGNIUnBiMjV6TG1ocFpHUmxibEpoYm1kbExtVnVaRHNnYVNzcktTQjdYRzRnSUNBZ0lDQmpjR1pCY25KaGVWdHBYU0E5SUdOMWMzUnZiVTl3ZEdsdmJuTXVhR2xrWkdWdVMyVjVPMXh1SUNBZ0lIMWNiaUFnZlZ4dVhHNGdJR053WmtGeWNtRjVMbk53YkdsalpTZzVMQ0F3TENCamRYTjBiMjFQY0hScGIyNXpMbVJsYkdsdGFYUmxjbk11WkdGemFDazdYRzRnSUdOd1prRnljbUY1TG5Od2JHbGpaU2cyTENBd0xDQmpkWE4wYjIxUGNIUnBiMjV6TG1SbGJHbHRhWFJsY25NdVpHOTBLVHRjYmlBZ1kzQm1RWEp5WVhrdWMzQnNhV05sS0RNc0lEQXNJR04xYzNSdmJVOXdkR2x2Ym5NdVpHVnNhVzFwZEdWeWN5NWtiM1FwTzF4dUlDQmpiMjV6ZENCamNHWlFjbVYwZEhrZ1BTQmpjR1pCY25KaGVTNXFiMmx1S0NjbktUdGNibHh1SUNCcFppQW9ZM1Z6ZEc5dFQzQjBhVzl1Y3k1bGMyTmhjR1VwSUh0Y2JpQWdJQ0J5WlhSMWNtNGdaWE5qWVhCbFNGUk5UQ2hqY0daUWNtVjBkSGtwTzF4dUlDQjlYRzVjYmlBZ2NtVjBkWEp1SUdOd1psQnlaWFIwZVR0Y2JuMWNibHh1Wlhod2IzSjBJR1JsWm1GMWJIUWdZM0JtUm0xME8xeHVJbDBzSW01aGJXVnpJanBiSW1WelkyRndaVWhVVFV3aVhTd2liV0Z3Y0dsdVozTWlPaUk3T3pzN1FVRjVRa0VzVFVGQlRTeGpRVUZ4UkN4SFFVRkJPMEZCUVVFc1JVRkRla1FzVlVGQldTeEZRVUZCTzBGQlFVRXNTVUZEVml4SFFVRkxMRVZCUVVFc1IwRkJRVHRCUVVGQkxFbEJRMHdzU1VGQlRTeEZRVUZCTzBGQlFVRXNSMEZEVWp0QlFVRkJMRVZCUTBFc1YwRkJZU3hGUVVGQk8wRkJRVUVzU1VGRFdDeExRVUZQTEVWQlFVRXNRMEZCUVR0QlFVRkJMRWxCUTFBc1IwRkJTeXhGUVVGQk8wRkJRVUVzUjBGRFVEdEJRVUZCTEVWQlEwRXNUVUZCUVN4RlFVRlJMRU5CUVVNc1MwRkJWU3hMUVVGQkxFdEJRVUU3UVVGQlFTeEZRVU51UWl4VFFVRlhMRVZCUVVFc1IwRkJRVHRCUVVGQkxFVkJRMWdzVFVGQlVTeEZRVUZCTEV0QlFVRTdRVUZCUVN4RlFVTlNMRTFCUVZFc1JVRkJRVHRCUVVOV0xFTkJRVUU3UVVGTFFTeFRRVUZUTEZsQlFVRXNRMEZEVUN4aFFVRnhSQ3hIUVVGQkxFVkJRMVlzUlVGQlFUdEJRVU16UXl4RlFVRkJMRTFCUVUwc1QwRkJWU3hIUVVGQkxGTkJRVUU3UVVGQlFTeEpRVU5rTEdOQlFVRTdRVUZCUVN4SlFVTkJPMEZCUVVFc1IwRkRSanRCUVVWQkxFVkJRVUVzU1VGQlNTeFJRVUZSTEUxQlFWRXNSVUZCUVR0QlFVTnNRaXhKUVVGQkxFbEJRMFVzUzBGQlRTeERRVUZCTEU5QlFVRXNRMEZCVVN4WFFVRlpMRU5CUVVFc1MwRkJTeXhEUVVNdlFpeEpRVUZCTEU5QlFVRXNRMEZCVVN4WFFVRlpMRU5CUVVFc1MwRkJRU3hIUVVGUkxFTkJRelZDTEVsQlFVRXNUMEZCUVN4RFFVRlJMRmRCUVZrc1EwRkJRU3hMUVVGQkxFZEJRVkVzUlVGRE5VSXNSVUZCUVR0QlFVTkJMRTFCUVUwc1RVRkJRU3hKUVVGSkxGVkJRVlVzSzBSQlFTdEVMRU5CUVVFN1FVRkJRVHRCUVVkeVJpeEpRVUZCTEVsQlEwVXNTMEZCVFN4RFFVRkJMRTlCUVVFc1EwRkJVU3hYUVVGWkxFTkJRVUVzUjBGQlJ5eERRVU0zUWl4SlFVRkJMRTlCUVVFc1EwRkJVU3hYUVVGWkxFTkJRVUVzUjBGQlFTeEhRVUZOTEVOQlF6RkNMRWxCUVVFc1QwRkJRU3hEUVVGUkxGZEJRVmtzUTBGQlFTeEhRVUZCTEVkQlFVMHNSVUZETVVJc1JVRkJRVHRCUVVOQkxFMUJRVTBzVFVGQlFTeEpRVUZKTEZWQlFWVXNOa1JCUVRaRUxFTkJRVUU3UVVGQlFUdEJRVWR1Uml4SlFVRkJMRWxCUVVrc1QwRkJVU3hEUVVGQkxGZEJRVUVzUTBGQldTeExRVUZSTEVkQlFVRXNUMEZCUVN4RFFVRlJMRmxCUVZrc1IwRkJTeXhGUVVGQk8wRkJRM1pFTEUxQlFVMHNUVUZCUVN4SFFVRkJMRWRCUVUwc1VVRkJVU3hYUVVGWkxFTkJRVUVzUzBGQlFUdEJRVU5vUXl4TlFVRlJMRTlCUVVFc1EwRkJRU3hYUVVGQkxFTkJRVmtzUzBGQlVTeEhRVUZCTEU5QlFVRXNRMEZCVVN4WFFVRlpMRU5CUVVFc1IwRkJRVHRCUVVOb1JDeE5RVUZCTEU5QlFVRXNRMEZCVVN4WlFVRlpMRWRCUVUwc1IwRkJRU3hIUVVGQk8wRkJRVUU3UVVGRE5VSTdRVUZIUml4RlFVRkpMRWxCUVVFc1QwRkJUeXhQUVVGUkxFTkJRVUVzVFVGQlFTeExRVUZYTEZWQlFWa3NSVUZCUVR0QlFVTjRReXhKUVVGTkxFMUJRVUVzU1VGQlNTeFZRVUZWTEd0RVFVRnJSQ3hEUVVGQk8wRkJRVUU3UVVGSGVFVXNSVUZCVHl4UFFVRkJMRTlCUVVFN1FVRkRWRHM3UVVOMlJVRXNVMEZCVXl4TlFVRkJMRU5CUTFBc1YwRkRRU3hQUVVOUkxFVkJRVUU3UVVGRFVpeEZRVUZCTEUxQlFVMHNWVUZCWVN4SFFVRkJMRVZCUVVFN1FVRkRia0lzUlVGQlFTeE5RVUZOTEZGQlFWY3NSMEZCUVN4UFFVRkJMRU5CUVZFc1UwRkJVeXhEUVVGQkxFTkJRVVVzVFVGQlRTeEZRVUZGTEVOQlFVRTdRVUZETlVNc1JVRkJUU3hOUVVGQkxHRkJRVUVzUjBGQlowSXNZVUZCWVN4UFFVRlBMRU5CUVVFN1FVRkZNVU1zUlVGQlNTeEpRVUZCTEZGQlFVRXNRMEZCVXl4WFFVRlhMRlZCUVZrc1JVRkJRVHRCUVVOc1F5eEpRVUZCTEUxQlFVMHNVVUZCVVN4SlFVRkpMRXRCUVVFc1EwRkJUU3hqUVVGakxGTkJRVk1zUTBGQlFTeHRRa0ZCUVN4RlFVRnpRaXhWUVVGVkxFTkJRVlVzVVVGQlFTeERRVUZCTEVOQlFVRTdRVUZGZWtZc1NVRkJUeXhQUVVGQkxHRkJRVUVzUTBGQll5eE5RVUZQTEVOQlFVRXNVMEZCUVN4RlFVRlhMRXRCUVVzc1EwRkJRVHRCUVVGQk8wRkJSemxETEVWQlFVRXNTVUZCU1N4alFVRmpMRTFCUVZFc1JVRkJRVHRCUVVONFFpeEpRVUZUTEV0QlFVRXNTVUZCUVN4RFFVRkJMRWRCUVVrc1kwRkJZeXhYUVVGWkxFTkJRVUVzUzBGQlFTeEZRVUZQTEV0QlFVc3NZVUZCWXl4RFFVRkJMRmRCUVVFc1EwRkJXU3hMUVVGTExFTkJRVXNzUlVGQlFTeEZRVUZCTzBGQlEzSkdMRTFCUVZNc1VVRkJRU3hEUVVGQkxFTkJRVU1zU1VGQlNTeGhRVUZqTEVOQlFVRXNVMEZCUVR0QlFVRkJPMEZCUXpsQ08wRkJSMFlzUlVGQlFTeFJRVUZCTEVOQlFWTXNUVUZCVHl4RFFVRkJMRU5CUVVFc1JVRkJSeXhEUVVGSExFVkJRVUVzWVVGQlFTeERRVUZqTEZkQlFWY3NTVUZCU1N4RFFVRkJPMEZCUTI1RUxFVkJRVUVzVVVGQlFTeERRVUZUTEUxQlFVOHNRMEZCUVN4RFFVRkJMRVZCUVVjc1EwRkJSeXhGUVVGQkxHRkJRVUVzUTBGQll5eFhRVUZYTEVkQlFVY3NRMEZCUVR0QlFVTnNSQ3hGUVVGQkxGRkJRVUVzUTBGQlV5eE5RVUZQTEVOQlFVRXNRMEZCUVN4RlFVRkhMRU5CUVVjc1JVRkJRU3hoUVVGQkxFTkJRV01zVjBGQlZ5eEhRVUZITEVOQlFVRTdRVUZEYkVRc1JVRkJUU3hOUVVGQkxGTkJRVUVzUjBGQldTeFJRVUZUTEVOQlFVRXNTVUZCUVN4RFFVRkxMRVZCUVVVc1EwRkJRVHRCUVVWc1F5eEZRVUZCTEVsQlFVa3NZMEZCWXl4TlFVRlJMRVZCUVVFN1FVRkRlRUlzU1VGQlFTeFBRVUZQUVN4UFFVRlhMRk5CUVZNc1EwRkJRVHRCUVVGQk8wRkJSemRDTEVWQlFVOHNUMEZCUVN4VFFVRkJPMEZCUTFRN096czdJbjA9XG4iLCJpbXBvcnQgY3BmRm10IGZyb20gJ0BsYWN1c3NvZnQvY3BmLWZtdCc7XG5pbXBvcnQgbnVtT25seSBmcm9tICdudW0tb25seSc7XG5pbXBvcnQgbWVyZ2VEZWVwIGZyb20gJ2RlZXBtZXJnZSc7XG5cbmNvbnN0IGRlZmF1bHRPcHRpb25zID0ge1xuICBmb3JtYXQ6IGZhbHNlLFxuICBwcmVmaXg6IFwiXCJcbn07XG5mdW5jdGlvbiBtZXJnZU9wdGlvbnMoY3VzdG9tT3B0aW9ucyA9IHt9KSB7XG4gIHJldHVybiBtZXJnZURlZXAoZGVmYXVsdE9wdGlvbnMsIGN1c3RvbU9wdGlvbnMpO1xufVxuXG5mdW5jdGlvbiBudW1iZXJHZW5lcmF0b3IobGVuZ3RoKSB7XG4gIGNvbnN0IG51bWVyaWNTZXF1ZW5jZSA9IFtdO1xuICB3aGlsZSAobnVtZXJpY1NlcXVlbmNlLmxlbmd0aCA8IGxlbmd0aCkge1xuICAgIGNvbnN0IHJhbmRvbSA9IE1hdGgucmFuZG9tKCkgKiAxMDtcbiAgICBjb25zdCBpbnRlZ2VyID0gTWF0aC5mbG9vcihyYW5kb20pO1xuICAgIG51bWVyaWNTZXF1ZW5jZS5wdXNoKGludGVnZXIpO1xuICB9XG4gIHJldHVybiBudW1lcmljU2VxdWVuY2U7XG59XG5cbmZ1bmN0aW9uIGNwZkdlbihvcHRpb25zKSB7XG4gIGNvbnN0IHVzZXJPcHRpb25zID0gbWVyZ2VPcHRpb25zKG9wdGlvbnMpO1xuICBjb25zdCBiYXNlU2VxdWVuY2UgPSBudW1Pbmx5KHVzZXJPcHRpb25zLnByZWZpeCk7XG4gIGNvbnN0IHByZWZpeExlbmd0aCA9IGJhc2VTZXF1ZW5jZS5sZW5ndGg7XG4gIGlmIChwcmVmaXhMZW5ndGggPCAwIHx8IHByZWZpeExlbmd0aCA+IDkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ09wdGlvbiBcInByZWZpeFwiIG11c3QgYmUgYSBzdHJpbmcgY29udGFpbmluZyBiZXR3ZWVuIDEgYW5kIDkgZGlnaXRzLicpO1xuICB9XG4gIGNvbnN0IGNwZlNlcXVlbmNlID0gYmFzZVNlcXVlbmNlLnNwbGl0KFwiXCIpLm1hcChOdW1iZXIpLmNvbmNhdChudW1iZXJHZW5lcmF0b3IoOSAtIHByZWZpeExlbmd0aCkpO1xuICBbOSwgMTBdLmZvckVhY2goKG5leHROdW1JbmRleCkgPT4ge1xuICAgIGxldCBmYWN0b3IgPSBuZXh0TnVtSW5kZXggKyAxO1xuICAgIGxldCBzdW0gPSAwO1xuICAgIGZvciAobGV0IG4gPSAwOyBuIDwgbmV4dE51bUluZGV4OyBuKyssIGZhY3Rvci0tKSB7XG4gICAgICBzdW0gKz0gY3BmU2VxdWVuY2Vbbl0gKiBmYWN0b3I7XG4gICAgfVxuICAgIGNvbnN0IHJlbWFpbmRlciA9IDExIC0gc3VtICUgMTE7XG4gICAgY3BmU2VxdWVuY2UucHVzaChyZW1haW5kZXIgPiA5ID8gMCA6IHJlbWFpbmRlcik7XG4gIH0pO1xuICByZXR1cm4gdXNlck9wdGlvbnMuZm9ybWF0ID8gY3BmRm10KGNwZlNlcXVlbmNlLmpvaW4oXCJcIikpIDogY3BmU2VxdWVuY2Uuam9pbihcIlwiKTtcbn1cblxuZXhwb3J0IHsgY3BmR2VuIGFzIGRlZmF1bHQgfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0PXV0Zi04O2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKbWFXeGxJam9pYVc1a1pYZ3ViV3B6SWl3aWMyOTFjbU5sY3lJNld5SXVMaTl6Y21NdmJXVnlaMlV0YjNCMGFXOXVjeTUwY3lJc0lpNHVMM055WXk5dWRXMWlaWEl0WjJWdVpYSmhkRzl5TG5Seklpd2lMaTR2YzNKakwyTndaaTFuWlc0dWRITWlYU3dpYzI5MWNtTmxjME52Ym5SbGJuUWlPbHNpYVcxd2IzSjBJRzFsY21kbFJHVmxjQ0JtY205dElDZGtaV1Z3YldWeVoyVW5PMXh1WEc1bGVIQnZjblFnYVc1MFpYSm1ZV05sSUVGamRIVmhiRU53WmtkbGJtVnlZWFJ2Y2s5d2RHbHZibk1nZTF4dUlDQm1iM0p0WVhRNklHSnZiMnhsWVc0N1hHNGdJSEJ5WldacGVEb2djM1J5YVc1bk8xeHVmVnh1WEc1bGVIQnZjblFnZEhsd1pTQkRjR1pIWlc1bGNtRjBiM0pQY0hScGIyNXpJRDBnVUdGeWRHbGhiRHhCWTNSMVlXeERjR1pIWlc1bGNtRjBiM0pQY0hScGIyNXpQanRjYmx4dVkyOXVjM1FnWkdWbVlYVnNkRTl3ZEdsdmJuTWdQU0I3WEc0Z0lHWnZjbTFoZERvZ1ptRnNjMlVzWEc0Z0lIQnlaV1pwZURvZ0p5Y3NYRzU5TzF4dVhHNHZLaXBjYmlBcUlFMWxjbWRsSUdOMWMzUnZiU0J2Y0hScGIyNXpJSFJ2SUhSb1pTQmtaV1poZFd4MElHOXVaWE11WEc0Z0tpOWNibVoxYm1OMGFXOXVJRzFsY21kbFQzQjBhVzl1Y3loamRYTjBiMjFQY0hScGIyNXpPaUJEY0daSFpXNWxjbUYwYjNKUGNIUnBiMjV6SUQwZ2UzMHBPaUJCWTNSMVlXeERjR1pIWlc1bGNtRjBiM0pQY0hScGIyNXpJSHRjYmlBZ2NtVjBkWEp1SUcxbGNtZGxSR1ZsY0Noa1pXWmhkV3gwVDNCMGFXOXVjeXdnWTNWemRHOXRUM0IwYVc5dWN5azdYRzU5WEc1Y2JtVjRjRzl5ZENCa1pXWmhkV3gwSUcxbGNtZGxUM0IwYVc5dWN6dGNiaUlzSWk4cUtseHVJQ29nUjJWdVpYSmhkR1VnWVc0Z1lYSnlZWGtnYjJZZ2NtRnVaRzl0SUc1MWJXSmxjbk1nS0dGeklITjBjbWx1WnlrZ1ltVjBkMlZsYmlBd0lHRnVaQ0FnT1M1Y2JpQXFMMXh1Wm5WdVkzUnBiMjRnYm5WdFltVnlSMlZ1WlhKaGRHOXlLR3hsYm1kMGFEb2diblZ0WW1WeUtUb2diblZ0WW1WeVcxMGdlMXh1SUNCamIyNXpkQ0J1ZFcxbGNtbGpVMlZ4ZFdWdVkyVTZJRzUxYldKbGNsdGRJRDBnVzEwN1hHNWNiaUFnZDJocGJHVWdLRzUxYldWeWFXTlRaWEYxWlc1alpTNXNaVzVuZEdnZ1BDQnNaVzVuZEdncElIdGNiaUFnSUNCamIyNXpkQ0J5WVc1a2IyMGdQU0JOWVhSb0xuSmhibVJ2YlNncElDb2dNVEE3WEc0Z0lDQWdZMjl1YzNRZ2FXNTBaV2RsY2lBOUlFMWhkR2d1Wm14dmIzSW9jbUZ1Wkc5dEtUdGNibHh1SUNBZ0lHNTFiV1Z5YVdOVFpYRjFaVzVqWlM1d2RYTm9LR2x1ZEdWblpYSXBPMXh1SUNCOVhHNWNiaUFnY21WMGRYSnVJRzUxYldWeWFXTlRaWEYxWlc1alpUdGNibjFjYmx4dVpYaHdiM0owSUdSbFptRjFiSFFnYm5WdFltVnlSMlZ1WlhKaGRHOXlPMXh1SWl3aWFXMXdiM0owSUdOd1prWnRkQ0JtY205dElDZEFiR0ZqZFhOemIyWjBMMk53WmkxbWJYUW5PMXh1YVcxd2IzSjBJRzUxYlU5dWJIa2dabkp2YlNBbmJuVnRMVzl1Ykhrbk8xeHVYRzVwYlhCdmNuUWdiV1Z5WjJWUGNIUnBiMjV6SUdaeWIyMGdKeTR2YldWeVoyVXRiM0IwYVc5dWN5YzdYRzVwYlhCdmNuUWdkSGx3WlNCN0lFTndaa2RsYm1WeVlYUnZjazl3ZEdsdmJuTWdmU0JtY205dElDY3VMMjFsY21kbExXOXdkR2x2Ym5Nbk8xeHVhVzF3YjNKMElHNTFiV0psY2tkbGJtVnlZWFJ2Y2lCbWNtOXRJQ2N1TDI1MWJXSmxjaTFuWlc1bGNtRjBiM0luTzF4dVhHNHZLaXBjYmlBcUlFZGxibVZ5WVhSbElHRWdkbUZzYVdRZ1ExQkdJQ2hDY21GNmFXeHBZVzRnU1VRZ1pHOWpkVzFsYm5RcElHNTFiV1Z5YVdNZ2MyVnhkV1Z1WTJVdVhHNGdLaTljYm1aMWJtTjBhVzl1SUdOd1prZGxiaWh2Y0hScGIyNXpQem9nUTNCbVIyVnVaWEpoZEc5eVQzQjBhVzl1Y3lrNklITjBjbWx1WnlCN1hHNGdJR052Ym5OMElIVnpaWEpQY0hScGIyNXpJRDBnYldWeVoyVlBjSFJwYjI1ektHOXdkR2x2Ym5NcE8xeHVJQ0JqYjI1emRDQmlZWE5sVTJWeGRXVnVZMlVnUFNCdWRXMVBibXg1S0hWelpYSlBjSFJwYjI1ekxuQnlaV1pwZUNrN1hHNGdJR052Ym5OMElIQnlaV1pwZUV4bGJtZDBhQ0E5SUdKaGMyVlRaWEYxWlc1alpTNXNaVzVuZEdnN1hHNWNiaUFnYVdZZ0tIQnlaV1pwZUV4bGJtZDBhQ0E4SURBZ2ZId2djSEpsWm1sNFRHVnVaM1JvSUQ0Z09Ta2dlMXh1SUNBZ0lIUm9jbTkzSUc1bGR5QkZjbkp2Y2lnblQzQjBhVzl1SUZ3aWNISmxabWw0WENJZ2JYVnpkQ0JpWlNCaElITjBjbWx1WnlCamIyNTBZV2x1YVc1bklHSmxkSGRsWlc0Z01TQmhibVFnT1NCa2FXZHBkSE11SnlrN1hHNGdJSDFjYmx4dUlDQmpiMjV6ZENCamNHWlRaWEYxWlc1alpTQTlJR0poYzJWVFpYRjFaVzVqWlZ4dUlDQWdJQzV6Y0d4cGRDZ25KeWxjYmlBZ0lDQXViV0Z3S0U1MWJXSmxjaWxjYmlBZ0lDQXVZMjl1WTJGMEtHNTFiV0psY2tkbGJtVnlZWFJ2Y2lnNUlDMGdjSEpsWm1sNFRHVnVaM1JvS1NrN1hHNGdJRnM1TENBeE1GMHVabTl5UldGamFDZ29ibVY0ZEU1MWJVbHVaR1Y0S1NBOVBpQjdYRzRnSUNBZ2JHVjBJR1poWTNSdmNpQTlJRzVsZUhST2RXMUpibVJsZUNBcklERTdYRzRnSUNBZ2JHVjBJSE4xYlNBOUlEQTdYRzVjYmlBZ0lDQm1iM0lnS0d4bGRDQnVJRDBnTURzZ2JpQThJRzVsZUhST2RXMUpibVJsZURzZ2Jpc3JMQ0JtWVdOMGIzSXRMU2tnZTF4dUlDQWdJQ0FnYzNWdElDczlJR053WmxObGNYVmxibU5sVzI1ZElDb2dabUZqZEc5eU8xeHVJQ0FnSUgxY2JseHVJQ0FnSUdOdmJuTjBJSEpsYldGcGJtUmxjaUE5SURFeElDMGdLSE4xYlNBbElERXhLVHRjYmlBZ0lDQmpjR1pUWlhGMVpXNWpaUzV3ZFhOb0tISmxiV0ZwYm1SbGNpQStJRGtnUHlBd0lEb2djbVZ0WVdsdVpHVnlLVHRjYmlBZ2ZTazdYRzVjYmlBZ2NtVjBkWEp1SUhWelpYSlBjSFJwYjI1ekxtWnZjbTFoZENBL0lHTndaa1p0ZENoamNHWlRaWEYxWlc1alpTNXFiMmx1S0NjbktTa2dPaUJqY0daVFpYRjFaVzVqWlM1cWIybHVLQ2NuS1R0Y2JuMWNibHh1Wlhod2IzSjBJR1JsWm1GMWJIUWdZM0JtUjJWdU8xeHVJbDBzSW01aGJXVnpJanBiWFN3aWJXRndjR2x1WjNNaU9pSTdPenM3UVVGVFFTeE5RVUZOTEdOQlFXbENMRWRCUVVFN1FVRkJRU3hGUVVOeVFpeE5RVUZSTEVWQlFVRXNTMEZCUVR0QlFVRkJMRVZCUTFJc1RVRkJVU3hGUVVGQk8wRkJRMVlzUTBGQlFUdEJRVXRCTEZOQlFWTXNXVUZCUVN4RFFVRmhMR0ZCUVhGRExFZEJRVUVzUlVGQkswSXNSVUZCUVR0QlFVTjRSaXhGUVVGUExFOUJRVUVzVTBGQlFTeERRVUZWTEdkQ1FVRm5RaXhoUVVGaExFTkJRVUU3UVVGRGFFUTdPMEZEYUVKQkxGTkJRVk1zWjBKQlFXZENMRTFCUVRCQ0xFVkJRVUU3UVVGRGFrUXNSVUZCUVN4TlFVRk5MR3RDUVVFMFFpeEZRVUZETzBGQlJXNURMRVZCUVU4c1QwRkJRU3hsUVVGQkxFTkJRV2RDTEZOQlFWTXNUVUZCVVN4RlFVRkJPMEZCUTNSRExFbEJRVTBzVFVGQlFTeE5RVUZCTEVkQlFWTXNTVUZCU3l4RFFVRkJMRTFCUVVFc1JVRkJWeXhIUVVGQkxFVkJRVUU3UVVGREwwSXNTVUZCVFN4TlFVRkJMRTlCUVVFc1IwRkJWU3hKUVVGTExFTkJRVUVzUzBGQlFTeERRVUZOTEUxQlFVMHNRMEZCUVR0QlFVVnFReXhKUVVGQkxHVkJRVUVzUTBGQlowSXNTMEZCU3l4UFFVRlBMRU5CUVVFN1FVRkJRVHRCUVVjNVFpeEZRVUZQTEU5QlFVRXNaVUZCUVR0QlFVTlVPenRCUTBwQkxGTkJRVk1zVDBGQlR5eFBRVUYxUXl4RlFVRkJPMEZCUTNKRUxFVkJRVTBzVFVGQlFTeFhRVUZCTEVkQlFXTXNZVUZCWVN4UFFVRlBMRU5CUVVFN1FVRkRlRU1zUlVGQlRTeE5RVUZCTEZsQlFVRXNSMEZCWlN4UFFVRlJMRU5CUVVFc1YwRkJRU3hEUVVGWkxFMUJRVTBzUTBGQlFUdEJRVU12UXl4RlFVRkJMRTFCUVUwc1pVRkJaU3haUVVGaExFTkJRVUVzVFVGQlFUdEJRVVZzUXl4RlFVRkpMRWxCUVVFc1dVRkJRU3hIUVVGbExFTkJRVXNzU1VGQlFTeFpRVUZCTEVkQlFXVXNRMEZCUnl4RlFVRkJPMEZCUTNoRExFbEJRVTBzVFVGQlFTeEpRVUZKTEUxQlFVMHNjVVZCUVhGRkxFTkJRVUU3UVVGQlFUdEJRVWQyUml4RlFVRkJMRTFCUVUwc1YwRkJZeXhIUVVGQkxGbEJRVUVzUTBGRGFrSXNTMEZCVFN4RFFVRkJMRVZCUVVVc1EwRkRVaXhEUVVGQkxFZEJRVUVzUTBGQlNTeE5RVUZOTEVOQlFVRXNRMEZEVml4TlFVRlBMRU5CUVVFc1pVRkJRU3hEUVVGblFpeERRVUZKTEVkQlFVRXNXVUZCV1N4RFFVRkRMRU5CUVVFN1FVRkRNME1zUlVGQlFTeERRVUZETEVOQlFVY3NSVUZCUVN4RlFVRkZMRU5CUVVVc1EwRkJRU3hQUVVGQkxFTkJRVkVzUTBGQlF5eFpRVUZwUWl4TFFVRkJPMEZCUTJoRExFbEJRVUVzU1VGQlNTeFRRVUZUTEZsQlFXVXNSMEZCUVN4RFFVRkJPMEZCUXpWQ0xFbEJRVUVzU1VGQlNTeEhRVUZOTEVkQlFVRXNRMEZCUVR0QlFVVldMRWxCUVVFc1MwRkJRU3hKUVVGVExFTkJRVWtzUjBGQlFTeERRVUZCTEVWQlFVY3NRMEZCU1N4SFFVRkJMRmxCUVVFc1JVRkJZeXhMUVVGTExFMUJRVlVzUlVGQlFTeEZRVUZCTzBGQlF5OURMRTFCUVU4c1IwRkJRU3hKUVVGQkxGZEJRVUVzUTBGQldTeERRVUZETEVOQlFVa3NSMEZCUVN4TlFVRkJPMEZCUVVFN1FVRkhNVUlzU1VGQlRTeE5RVUZCTEZOQlFVRXNSMEZCV1N4TFFVRk5MRWRCUVUwc1IwRkJRU3hGUVVGQk8wRkJRemxDTEVsQlFVRXNWMEZCUVN4RFFVRlpMRWxCUVVzc1EwRkJRU3hUUVVGQkxFZEJRVmtzUTBGQlNTeEhRVUZCTEVOQlFVRXNSMEZCU1N4VFFVRlRMRU5CUVVFN1FVRkJRU3hIUVVNdlF5eERRVUZCTzBGQlJVUXNSVUZCVHl4UFFVRkJMRmRCUVVFc1EwRkJXU3hOUVVGVExFZEJRVUVzVFVGQlFTeERRVUZQTEZkQlFWa3NRMEZCUVN4SlFVRkJMRU5CUVVzc1JVRkJSU3hEUVVGRExFTkJRVUVzUjBGQlNTeFhRVUZaTEVOQlFVRXNTVUZCUVN4RFFVRkxMRVZCUVVVc1EwRkJRVHRCUVVOb1JqczdPenNpZlE9PVxuIiwiaW1wb3J0IGNwZkZtdCBmcm9tICdAbGFjdXNzb2Z0L2NwZi1mbXQnO1xuaW1wb3J0IGNwZkdlbiBmcm9tICdAbGFjdXNzb2Z0L2NwZi1nZW4nO1xuaW1wb3J0IGNwZlZhbCBmcm9tICdAbGFjdXNzb2Z0L2NwZi12YWwnO1xuXG5leHBvcnQgY29uc3QgZm9ybWF0ID0gY3BmRm10O1xuXG5leHBvcnQgY29uc3QgZ2VuZXJhdGUgPSBjcGZHZW47XG5cbmV4cG9ydCBjb25zdCBpc1ZhbGlkID0gY3BmVmFsO1xuXG5leHBvcnQgZGVmYXVsdCB7IGZvcm1hdCwgZ2VuZXJhdGUsIGlzVmFsaWQgfTtcbiIsImltcG9ydCBjcGZHZW4gZnJvbSAnQGxhY3Vzc29mdC9jcGYtZ2VuJztcbmltcG9ydCBudW1Pbmx5IGZyb20gJ251bS1vbmx5JztcblxuZnVuY3Rpb24gY3BmVmFsKGNwZlN0cmluZykge1xuICBjb25zdCBDUEZfTEVOR1RIID0gMTE7XG4gIGNvbnN0IGNwZkRpZ2l0cyA9IG51bU9ubHkoY3BmU3RyaW5nKTtcbiAgaWYgKGNwZkRpZ2l0cy5sZW5ndGggIT09IENQRl9MRU5HVEgpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIGNwZkRpZ2l0cyA9PT0gY3BmR2VuKHtcbiAgICBwcmVmaXg6IGNwZkRpZ2l0cy5zdWJzdHJpbmcoMCwgOSlcbiAgfSk7XG59XG5cbmV4cG9ydCB7IGNwZlZhbCBhcyBkZWZhdWx0IH07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247Y2hhcnNldD11dGYtODtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSm1hV3hsSWpvaWFXNWtaWGd1Yldweklpd2ljMjkxY21ObGN5STZXeUl1TGk5emNtTXZZM0JtTFhaaGJDNTBjeUpkTENKemIzVnlZMlZ6UTI5dWRHVnVkQ0k2V3lKcGJYQnZjblFnWTNCbVIyVnVJR1p5YjIwZ0owQnNZV04xYzNOdlpuUXZZM0JtTFdkbGJpYzdYRzVwYlhCdmNuUWdiblZ0VDI1c2VTQm1jbTl0SUNkdWRXMHRiMjVzZVNjN1hHNWNiaThxS2x4dUlDb2dWbUZzYVdSaGRHVWdZU0JuYVhabGJpQkRVRVlnS0VKeVlYcHBiR2xoYmlCSlJDQmtiMk4xYldWdWRDa2dZMmhoY2lCelpYRjFaVzVqWlM1Y2JpQXFMMXh1Wm5WdVkzUnBiMjRnWTNCbVZtRnNLR053WmxOMGNtbHVaem9nYzNSeWFXNW5LVG9nWW05dmJHVmhiaUI3WEc0Z0lHTnZibk4wSUVOUVJsOU1SVTVIVkVnZ1BTQXhNVHRjYmlBZ1kyOXVjM1FnWTNCbVJHbG5hWFJ6SUQwZ2JuVnRUMjVzZVNoamNHWlRkSEpwYm1jcE8xeHVYRzRnSUdsbUlDaGpjR1pFYVdkcGRITXViR1Z1WjNSb0lDRTlQU0JEVUVaZlRFVk9SMVJJS1NCN1hHNGdJQ0FnY21WMGRYSnVJR1poYkhObE8xeHVJQ0I5WEc1Y2JpQWdjbVYwZFhKdUlDaGNiaUFnSUNCamNHWkVhV2RwZEhNZ1BUMDlYRzRnSUNBZ1kzQm1SMlZ1S0h0Y2JpQWdJQ0FnSUhCeVpXWnBlRG9nWTNCbVJHbG5hWFJ6TG5OMVluTjBjbWx1Wnlnd0xDQTVLU3hjYmlBZ0lDQjlLVnh1SUNBcE8xeHVmVnh1WEc1bGVIQnZjblFnWkdWbVlYVnNkQ0JqY0daV1lXdzdYRzRpWFN3aWJtRnRaWE1pT2x0ZExDSnRZWEJ3YVc1bmN5STZJanM3TzBGQlRVRXNVMEZCVXl4UFFVRlBMRk5CUVRSQ0xFVkJRVUU3UVVGRE1VTXNSVUZCUVN4TlFVRk5MRlZCUVdFc1IwRkJRU3hGUVVGQk8wRkJRMjVDTEVWQlFVMHNUVUZCUVN4VFFVRkJMRWRCUVZrc1VVRkJVU3hUUVVGVExFTkJRVUU3UVVGRmJrTXNSVUZCU1N4SlFVRkJMRk5CUVVFc1EwRkJWU3hYUVVGWExGVkJRVmtzUlVGQlFUdEJRVU51UXl4SlFVRlBMRTlCUVVFc1MwRkJRVHRCUVVGQk8wRkJSMVFzUlVGQlFTeFBRVU5GTEdOQlEwRXNUVUZCVHl4RFFVRkJPMEZCUVVFc1NVRkRUQ3hOUVVGUkxFVkJRVUVzVTBGQlFTeERRVUZWTEZOQlFWVXNRMEZCUVN4RFFVRkJMRVZCUVVjc1EwRkJRenRCUVVGQkxFZEJRMnBETEVOQlFVRTdRVUZGVERzN096c2lmUT09XG4iXSwibmFtZXMiOlsicmVwbGFjZSIsImNhIiwiZXNjYSIsInBlIiwibSIsImJ1aWxkIiwidGFyZ2V0IiwiU3RyaW5nIiwiaXNNZXJnZWFibGVPYmplY3QiLCJ2YWx1ZSIsImlzTm9uTnVsbE9iamVjdCIsInN0cmluZ1ZhbHVlIiwiT2JqZWN0IiwicHJvdG90eXBlIiwidG9TdHJpbmciLCJjYWxsIiwiJCR0eXBlb2YiLCJSRUFDVF9FTEVNRU5UX1RZUEUiLCJpc1JlYWN0RWxlbWVudCIsImlzU3BlY2lhbCIsIlN5bWJvbCIsImZvciIsImNsb25lVW5sZXNzT3RoZXJ3aXNlU3BlY2lmaWVkIiwib3B0aW9ucyIsImNsb25lIiwiZGVlcG1lcmdlIiwidmFsIiwiQXJyYXkiLCJpc0FycmF5IiwiZGVmYXVsdEFycmF5TWVyZ2UiLCJzb3VyY2UiLCJjb25jYXQiLCJtYXAiLCJlbGVtZW50IiwiZ2V0S2V5cyIsImtleXMiLCJnZXRPd25Qcm9wZXJ0eVN5bWJvbHMiLCJmaWx0ZXIiLCJzeW1ib2wiLCJwcm9wZXJ0eUlzRW51bWVyYWJsZSIsImdldEVudW1lcmFibGVPd25Qcm9wZXJ0eVN5bWJvbHMiLCJwcm9wZXJ0eUlzT25PYmplY3QiLCJvYmplY3QiLCJwcm9wZXJ0eSIsIl8iLCJtZXJnZU9iamVjdCIsImRlc3RpbmF0aW9uIiwiZm9yRWFjaCIsImtleSIsImhhc093blByb3BlcnR5IiwicHJvcGVydHlJc1Vuc2FmZSIsImN1c3RvbU1lcmdlIiwiZ2V0TWVyZ2VGdW5jdGlvbiIsImFycmF5TWVyZ2UiLCJzb3VyY2VJc0FycmF5IiwiYWxsIiwiYXJyYXkiLCJFcnJvciIsInJlZHVjZSIsInByZXYiLCJuZXh0IiwiY2pzIiwiZGVmYXVsdE9wdGlvbnMiLCJkZWxpbWl0ZXJzIiwiZG90IiwiZGFzaCIsImhpZGRlblJhbmdlIiwic3RhcnQiLCJlbmQiLCJvbkZhaWwiLCJoaWRkZW5LZXkiLCJoaWRkZW4iLCJlc2NhcGUiLCJjcGZGbXQiLCJjcGZTdHJpbmciLCJjcGZBcnJheSIsIm51bU9ubHkiLCJzcGxpdCIsImN1c3RvbU9wdGlvbnMiLCJtZXJnZURlZXAiLCJpc05hTiIsIlR5cGVFcnJvciIsImF1eCIsIm1lcmdlT3B0aW9ucyIsImxlbmd0aCIsImVycm9yIiwiaSIsInNwbGljZSIsImNwZlByZXR0eSIsImpvaW4iLCJlcyIsImZvcm1hdCIsInByZWZpeCIsImNwZkdlbiIsInVzZXJPcHRpb25zIiwiYmFzZVNlcXVlbmNlIiwicHJlZml4TGVuZ3RoIiwiY3BmU2VxdWVuY2UiLCJOdW1iZXIiLCJudW1lcmljU2VxdWVuY2UiLCJyYW5kb20iLCJNYXRoIiwiaW50ZWdlciIsImZsb29yIiwicHVzaCIsIm51bWJlckdlbmVyYXRvciIsIm5leHROdW1JbmRleCIsImZhY3RvciIsInN1bSIsIm4iLCJyZW1haW5kZXIiLCJnZW5lcmF0ZSIsImlzVmFsaWQiLCJjcGZEaWdpdHMiLCJzdWJzdHJpbmciXSwibWFwcGluZ3MiOiI7Ozs7Ozt5T0FzQkEsTUFBTUEsUUFBQ0EsR0FBVyxHQUlaQyxFQUFLLFdBRUxDLEVBQU8sQ0FDWCxJQUFLLFFBQ0wsSUFBSyxPQUNMLElBQUssT0FDTCxJQUFLLFFBQ0wsSUFBSyxVQUVEQyxFQUFLQyxHQUFLRixFQUFLRSxvSUM3QnJCQyxFQUpBLFNBQWlCQyxHQUNmLE9BQU9DLE9BQU9ELEdBQVFOLFFBQVEsTUFBTyxHQUN2Qyx5Q0NGQSxJQUFJUSxFQUFvQixTQUEyQkMsR0FDbEQsT0FJRCxTQUF5QkEsR0FDeEIsUUFBU0EsR0FBMEIsaUJBQVZBLENBQzFCLENBTlFDLENBQWdCRCxLQVF4QixT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