react-dropzone 10.1.9 → 10.2.2
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/.eslintignore +1 -0
- package/.eslintrc +21 -1
- package/README.md +14 -12
- package/dist/es/index.js +102 -109
- package/dist/es/utils/index.js +23 -4
- package/dist/index.js +2 -2
- package/package.json +58 -58
- package/src/.eslintrc +22 -4
- package/src/index.js +11 -23
- package/src/index.spec.js +33 -9
- package/src/utils/index.js +22 -4
- package/src/utils/index.spec.js +38 -0
- package/testSetup.js +1 -1
- package/.travis.yml +0 -12
package/dist/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
!function(e,n){"object"==typeof exports&&"undefined"!=typeof module?n(exports,require("react"),require("prop-types")):"function"==typeof define&&define.amd?define(["exports","react","prop-types"],n):n((e=e||self).reactDropzone={},e.React,e.PropTypes)}(this,function(e,ue,n){"use strict";var u="default"in ue?ue.default:ue;function c(e){return(c="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function ce(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function ae(n){for(var e=1;e<arguments.length;e++){var t=null!=arguments[e]?arguments[e]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),r.forEach(function(e){ce(n,e,t[e])})}return n}function fe(e,n){if(null==e)return{};var t,r,o=function(e,n){if(null==e)return{};var t,r,o={},i=Object.keys(e);for(r=0;r<i.length;r++)t=i[r],0<=n.indexOf(t)||(o[t]=e[t]);return o}(e,n);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r<i.length;r++)t=i[r],0<=n.indexOf(t)||Object.prototype.propertyIsEnumerable.call(e,t)&&(o[t]=e[t])}return o}function le(e,n){return function(e){if(Array.isArray(e))return e}(e)||function(e,n){var t=[],r=!0,o=!1,i=void 0;try{for(var u,c=e[Symbol.iterator]();!(r=(u=c.next()).done)&&(t.push(u.value),!n||t.length!==n);r=!0);}catch(e){o=!0,i=e}finally{try{r||null==c.return||c.return()}finally{if(o)throw i}}return t}(e,n)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance")}()}function se(e){return function(e){if(Array.isArray(e)){for(var n=0,t=new Array(e.length);n<e.length;n++)t[n]=e[n];return t}}(e)||function(e){if(Symbol.iterator in Object(e)||"[object Arguments]"===Object.prototype.toString.call(e))return Array.from(e)}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance")}()}function f(i,u,c,a){return new(c||(c=Promise))(function(e,n){function t(e){try{o(a.next(e))}catch(e){n(e)}}function r(e){try{o(a.throw(e))}catch(e){n(e)}}function o(n){n.done?e(n.value):new c(function(e){e(n.value)}).then(t,r)}o((a=a.apply(i,u||[])).next())})}function l(t,r){var o,i,u,e,c={label:0,sent:function(){if(1&u[0])throw u[1];return u[1]},trys:[],ops:[]};return e={next:n(0),throw:n(1),return:n(2)},"function"==typeof Symbol&&(e[Symbol.iterator]=function(){return this}),e;function n(n){return function(e){return function(n){if(o)throw new TypeError("Generator is already executing.");for(;c;)try{if(o=1,i&&(u=2&n[0]?i.return:n[0]?i.throw||((u=i.return)&&u.call(i),0):i.next)&&!(u=u.call(i,n[1])).done)return u;switch(i=0,u&&(n=[2&n[0],u.value]),n[0]){case 0:case 1:u=n;break;case 4:return c.label++,{value:n[1],done:!1};case 5:c.label++,i=n[1],n=[0];continue;case 7:n=c.ops.pop(),c.trys.pop();continue;default:if(!(u=0<(u=c.trys).length&&u[u.length-1])&&(6===n[0]||2===n[0])){c=0;continue}if(3===n[0]&&(!u||n[1]>u[0]&&n[1]<u[3])){c.label=n[1];break}if(6===n[0]&&c.label<u[1]){c.label=u[1],u=n;break}if(u&&c.label<u[2]){c.label=u[2],c.ops.push(n);break}u[2]&&c.ops.pop(),c.trys.pop();continue}n=r.call(t,c)}catch(e){n=[6,e],i=0}finally{o=u=0}if(5&n[0])throw n[1];return{value:n[0]?n[1]:void 0,done:!0}}([n,e])}}}function t(e,n){var t="function"==typeof Symbol&&e[Symbol.iterator];if(!t)return e;var r,o,i=t.call(e),u=[];try{for(;(void 0===n||0<n--)&&!(r=i.next()).done;)u.push(r.value)}catch(e){o={error:e}}finally{try{r&&!r.done&&(t=i.return)&&t.call(i)}finally{if(o)throw o.error}}return u}function i(){for(var e=[],n=0;n<arguments.length;n++)e=e.concat(t(arguments[n]));return e}n=n&&n.hasOwnProperty("default")?n.default:n;var o=new Map([["avi","video/avi"],["gif","image/gif"],["ico","image/x-icon"],["jpeg","image/jpeg"],["jpg","image/jpeg"],["mkv","video/x-matroska"],["mov","video/quicktime"],["mp4","video/mp4"],["pdf","application/pdf"],["png","image/png"],["zip","application/zip"],["doc","application/msword"],["docx","application/vnd.openxmlformats-officedocument.wordprocessingml.document"]]);function a(e,n){var t=function(e){var n=e.name;if(n&&-1!==n.lastIndexOf(".")&&!e.type){var t=n.split(".").pop().toLowerCase(),r=o.get(t);r&&Object.defineProperty(e,"type",{value:r,writable:!1,configurable:!1,enumerable:!0})}return e}(e),r=e.webkitRelativePath;return Object.defineProperty(t,"path",{value:"string"==typeof n?n:"string"==typeof r&&0<r.length?r:e.name,writable:!1,configurable:!1,enumerable:!0}),t}var r=[".DS_Store","Thumbs.db"];function pe(o){return f(this,void 0,void 0,function(){return l(this,function(e){return[2,(r=o,r.dataTransfer&&o.dataTransfer?function(t,r){return f(this,void 0,void 0,function(){var n;return l(this,function(e){switch(e.label){case 0:return t.items?(n=p(t.items).filter(function(e){return"file"===e.kind}),"drop"!==r?[2,n]:[4,Promise.all(n.map(d))]):[3,2];case 1:return[2,s(function t(e){return e.reduce(function(e,n){return i(e,Array.isArray(n)?t(n):[n])},[])}(e.sent()))];case 2:return[2,s(p(t.files).map(function(e){return a(e)}))]}})})}(o.dataTransfer,o.type):(n=o,(t=n.target,null!==t&&n.target.files?p(n.target.files):[]).map(function(e){return a(e)})))];var n,t,r})})}function s(e){return e.filter(function(e){return-1===r.indexOf(e.name)})}function p(e){for(var n=[],t=0;t<e.length;t++){var r=e[t];n.push(r)}return n}function d(e){if("function"!=typeof e.webkitGetAsEntry)return v(e);var n=e.webkitGetAsEntry();return n&&n.isDirectory?g(n):v(e)}function v(e){var n=e.getAsFile();if(!n)return Promise.reject(e+" is not a File");var t=a(n);return Promise.resolve(t)}function y(n){return f(this,void 0,void 0,function(){return l(this,function(e){return[2,n.isDirectory?g(n):function(r){return f(this,void 0,void 0,function(){return l(this,function(e){return[2,new Promise(function(t,n){r.file(function(e){var n=a(e,r.fullPath);t(n)},function(e){n(e)})})]})})}(n)]})})}function g(e){var n=e.createReader();return new Promise(function(u,c){var a=[];!function i(){var e=this;n.readEntries(function(o){return f(e,void 0,void 0,function(){var n,t,r;return l(this,function(e){switch(e.label){case 0:if(o.length)return[3,5];e.label=1;case 1:return e.trys.push([1,3,,4]),[4,Promise.all(a)];case 2:return n=e.sent(),u(n),[3,4];case 3:return t=e.sent(),c(t),[3,4];case 4:return[3,6];case 5:r=Promise.all(o.map(y)),a.push(r),i(),e.label=6;case 6:return[2]}})})},function(e){c(e)})}()})}var h,b,m=(function(e){e.exports=function(t){function r(e){if(o[e])return o[e].exports;var n=o[e]={i:e,l:!1,exports:{}};return t[e].call(n.exports,n,n.exports,r),n.l=!0,n.exports}var o={};return r.m=t,r.c=o,r.d=function(e,n,t){r.o(e,n)||Object.defineProperty(e,n,{configurable:!1,enumerable:!0,get:t})},r.n=function(e){var n=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(n,"a",n),n},r.o=function(e,n){return Object.prototype.hasOwnProperty.call(e,n)},r.p="",r(r.s=13)}([function(e,n){var t=e.exports="undefined"!=typeof window&&window.Math==Math?window:"undefined"!=typeof self&&self.Math==Math?self:Function("return this")();"number"==typeof __g&&(__g=t)},function(e,n){e.exports=function(e){return"object"==typeof e?null!==e:"function"==typeof e}},function(e,n){var t=e.exports={version:"2.5.0"};"number"==typeof __e&&(__e=t)},function(e,n,t){e.exports=!t(4)(function(){return 7!=Object.defineProperty({},"a",{get:function(){return 7}}).a})},function(e,n){e.exports=function(e){try{return!!e()}catch(e){return!0}}},function(e,n){var t={}.toString;e.exports=function(e){return t.call(e).slice(8,-1)}},function(e,n,t){var r=t(32)("wks"),o=t(9),i=t(0).Symbol,u="function"==typeof i;(e.exports=function(e){return r[e]||(r[e]=u&&i[e]||(u?i:o)("Symbol."+e))}).store=r},function(e,n,t){var y=t(0),g=t(2),h=t(8),b=t(22),m=t(10),x=function(e,n,t){var r,o,i,u,c=e&x.F,a=e&x.G,f=e&x.S,l=e&x.P,s=e&x.B,p=a?y:f?y[n]||(y[n]={}):(y[n]||{}).prototype,d=a?g:g[n]||(g[n]={}),v=d.prototype||(d.prototype={});for(r in a&&(t=n),t)i=((o=!c&&p&&void 0!==p[r])?p:t)[r],u=s&&o?m(i,y):l&&"function"==typeof i?m(Function.call,i):i,p&&b(p,r,i,e&x.U),d[r]!=i&&h(d,r,u),l&&v[r]!=i&&(v[r]=i)};y.core=g,x.F=1,x.G=2,x.S=4,x.P=8,x.B=16,x.W=32,x.U=64,x.R=128,e.exports=x},function(e,n,t){var r=t(16),o=t(21);e.exports=t(3)?function(e,n,t){return r.f(e,n,o(1,t))}:function(e,n,t){return e[n]=t,e}},function(e,n){var t=0,r=Math.random();e.exports=function(e){return"Symbol(".concat(void 0===e?"":e,")_",(++t+r).toString(36))}},function(e,n,t){var i=t(24);e.exports=function(r,o,e){if(i(r),void 0===o)return r;switch(e){case 1:return function(e){return r.call(o,e)};case 2:return function(e,n){return r.call(o,e,n)};case 3:return function(e,n,t){return r.call(o,e,n,t)}}return function(){return r.apply(o,arguments)}}},function(e,n){e.exports=function(e){if(null==e)throw TypeError("Can't call method on "+e);return e}},function(e,n,t){var r=t(28),o=Math.min;e.exports=function(e){return 0<e?o(r(e),9007199254740991):0}},function(e,n,t){n.__esModule=!0,n.default=function(e,n){if(e&&n){var t=Array.isArray(n)?n:n.split(","),r=e.name||"",o=e.type||"",i=o.replace(/\/.*$/,"");return t.some(function(e){var n=e.trim();return"."===n.charAt(0)?r.toLowerCase().endsWith(n.toLowerCase()):n.endsWith("/*")?i===n.replace(/\/.*$/,""):o===n})}return!0},t(14),t(34)},function(e,n,t){t(15),e.exports=t(2).Array.some},function(e,n,t){var r=t(7),o=t(25)(3);r(r.P+r.F*!t(33)([].some,!0),"Array",{some:function(e){return o(this,e,arguments[1])}})},function(e,n,t){var r=t(17),o=t(18),i=t(20),u=Object.defineProperty;n.f=t(3)?Object.defineProperty:function(e,n,t){if(r(e),n=i(n,!0),r(t),o)try{return u(e,n,t)}catch(e){}if("get"in t||"set"in t)throw TypeError("Accessors not supported!");return"value"in t&&(e[n]=t.value),e}},function(e,n,t){var r=t(1);e.exports=function(e){if(!r(e))throw TypeError(e+" is not an object!");return e}},function(e,n,t){e.exports=!t(3)&&!t(4)(function(){return 7!=Object.defineProperty(t(19)("div"),"a",{get:function(){return 7}}).a})},function(e,n,t){var r=t(1),o=t(0).document,i=r(o)&&r(o.createElement);e.exports=function(e){return i?o.createElement(e):{}}},function(e,n,t){var o=t(1);e.exports=function(e,n){if(!o(e))return e;var t,r;if(n&&"function"==typeof(t=e.toString)&&!o(r=t.call(e)))return r;if("function"==typeof(t=e.valueOf)&&!o(r=t.call(e)))return r;if(!n&&"function"==typeof(t=e.toString)&&!o(r=t.call(e)))return r;throw TypeError("Can't convert object to primitive value")}},function(e,n){e.exports=function(e,n){return{enumerable:!(1&e),configurable:!(2&e),writable:!(4&e),value:n}}},function(e,n,t){var i=t(0),u=t(8),c=t(23),a=t(9)("src"),r=Function.toString,f=(""+r).split("toString");t(2).inspectSource=function(e){return r.call(e)},(e.exports=function(e,n,t,r){var o="function"==typeof t;o&&(c(t,"name")||u(t,"name",n)),e[n]!==t&&(o&&(c(t,a)||u(t,a,e[n]?""+e[n]:f.join(String(n)))),e===i?e[n]=t:r?e[n]?e[n]=t:u(e,n,t):(delete e[n],u(e,n,t)))})(Function.prototype,"toString",function(){return"function"==typeof this&&this[a]||r.call(this)})},function(e,n){var t={}.hasOwnProperty;e.exports=function(e,n){return t.call(e,n)}},function(e,n){e.exports=function(e){if("function"!=typeof e)throw TypeError(e+" is not a function!");return e}},function(e,n,t){var m=t(10),x=t(26),D=t(27),w=t(12),r=t(29);e.exports=function(s,e){var p=1==s,d=2==s,v=3==s,y=4==s,g=6==s,h=5==s||g,b=e||r;return function(e,n,t){for(var r,o,i=D(e),u=x(i),c=m(n,t,3),a=w(u.length),f=0,l=p?b(e,a):d?b(e,0):void 0;f<a;f++)if((h||f in u)&&(o=c(r=u[f],f,i),s))if(p)l[f]=o;else if(o)switch(s){case 3:return!0;case 5:return r;case 6:return f;case 2:l.push(r)}else if(y)return!1;return g?-1:v||y?y:l}}},function(e,n,t){var r=t(5);e.exports=Object("z").propertyIsEnumerable(0)?Object:function(e){return"String"==r(e)?e.split(""):Object(e)}},function(e,n,t){var r=t(11);e.exports=function(e){return Object(r(e))}},function(e,n){var t=Math.ceil,r=Math.floor;e.exports=function(e){return isNaN(e=+e)?0:(0<e?r:t)(e)}},function(e,n,t){var r=t(30);e.exports=function(e,n){return new(r(e))(n)}},function(e,n,t){var r=t(1),o=t(31),i=t(6)("species");e.exports=function(e){var n;return o(e)&&("function"!=typeof(n=e.constructor)||n!==Array&&!o(n.prototype)||(n=void 0),r(n)&&null===(n=n[i])&&(n=void 0)),void 0===n?Array:n}},function(e,n,t){var r=t(5);e.exports=Array.isArray||function(e){return"Array"==r(e)}},function(e,n,t){var r=t(0),o=r["__core-js_shared__"]||(r["__core-js_shared__"]={});e.exports=function(e){return o[e]||(o[e]={})}},function(e,n,t){var r=t(4);e.exports=function(e,n){return!!e&&r(function(){n?e.call(null,function(){},1):e.call(null)})}},function(e,n,t){t(35),e.exports=t(2).String.endsWith},function(e,n,t){var r=t(7),u=t(12),c=t(36),a="".endsWith;r(r.P+r.F*t(38)("endsWith"),"String",{endsWith:function(e){var n=c(this,e,"endsWith"),t=1<arguments.length?arguments[1]:void 0,r=u(n.length),o=void 0===t?r:Math.min(u(t),r),i=String(e);return a?a.call(n,i,o):n.slice(o-i.length,o)===i}})},function(e,n,t){var r=t(37),o=t(11);e.exports=function(e,n,t){if(r(n))throw TypeError("String#"+t+" doesn't accept regex!");return String(o(e))}},function(e,n,t){var r=t(1),o=t(5),i=t(6)("match");e.exports=function(e){var n;return r(e)&&(void 0!==(n=e[i])?!!n:"RegExp"==o(e))}},function(e,n,t){var r=t(6)("match");e.exports=function(n){var t=/./;try{"/./"[n](t)}catch(e){try{return t[r]=!1,!"/./"[n](t)}catch(n){}}return!0}}])}(h={exports:{}},h.exports),h.exports),x=(b=m)&&b.__esModule&&Object.prototype.hasOwnProperty.call(b,"default")?b.default:b;function de(e,n){return"application/x-moz-file"===e.type||x(e,n)}function ve(e){return"function"==typeof e.isPropagationStopped?e.isPropagationStopped():void 0!==e.cancelBubble&&e.cancelBubble}function ye(e){return e.dataTransfer?Array.prototype.some.call(e.dataTransfer.types,function(e){return"Files"===e||"application/x-moz-file"===e}):!!e.target&&!!e.target.files}function ge(e){e.preventDefault()}function he(){for(var e=arguments.length,o=new Array(e),n=0;n<e;n++)o[n]=arguments[n];return function(n){for(var e=arguments.length,t=new Array(1<e?e-1:0),r=1;r<e;r++)t[r-1]=arguments[r];return o.some(function(e){return!ve(n)&&e&&e.apply(void 0,[n].concat(t)),ve(n)})}}var D=ue.forwardRef(function(e,n){var t=e.children,r=w(fe(e,["children"])),o=r.open,i=fe(r,["open"]);return ue.useEffect(function(){return"function"==typeof n?n({open:o}):"object"===c(n)&&null!==n&&(n.current={open:o}),function(){"function"==typeof n?n(null):"object"===c(n)&&null!==n&&(n.current=null)}},[n]),u.createElement(ue.Fragment,null,t(ae({},i,{open:o})))});D.displayName="Dropzone";var be={isFocused:!(D.propTypes={children:n.func,accept:n.oneOfType([n.string,n.arrayOf(n.string)]),multiple:n.bool,preventDropOnDocument:n.bool,noClick:n.bool,noKeyboard:n.bool,noDrag:n.bool,noDragEventsBubbling:n.bool,minSize:n.number,maxSize:n.number,disabled:n.bool,getFilesFromEvent:n.func,onFileDialogCancel:n.func,onDragEnter:n.func,onDragLeave:n.func,onDragOver:n.func,onDrop:n.func,onDropAccepted:n.func,onDropRejected:n.func}),isFileDialogActive:!1,isDragActive:!1,isDragAccept:!1,isDragReject:!1,draggedFiles:[],acceptedFiles:[],rejectedFiles:[]};function w(){var e=0<arguments.length&&void 0!==arguments[0]?arguments[0]:{},u=e.accept,n=e.disabled,p=void 0!==n&&n,t=e.getFilesFromEvent,r=void 0===t?pe:t,o=e.maxSize,c=void 0===o?1/0:o,i=e.minSize,a=void 0===i?0:i,f=e.multiple,l=void 0===f||f,s=e.onDragEnter,d=e.onDragLeave,v=e.onDragOver,y=e.onDrop,g=e.onDropAccepted,h=e.onDropRejected,b=e.onFileDialogCancel,m=e.preventDropOnDocument,x=void 0===m||m,D=e.noClick,w=void 0!==D&&D,O=e.noKeyboard,F=void 0!==O&&O,j=e.noDrag,S=void 0!==j&&j,A=e.noDragEventsBubbling,E=void 0!==A&&A,P=ue.useRef(null),k=ue.useRef(null),C=le(ue.useReducer(me,be),2),_=C[0],T=C[1],M=_.isFocused,R=_.isFileDialogActive,z=_.draggedFiles,L=function(){k.current&&(T({type:"openDialog"}),k.current.value=null,k.current.click())},B=function(){R&&setTimeout(function(){k.current&&(k.current.files.length||(T({type:"closeDialog"}),"function"==typeof b&&b()))},300)};ue.useEffect(function(){return window.addEventListener("focus",B,!1),function(){window.removeEventListener("focus",B,!1)}},[k,R,b]);var I=ue.useCallback(function(e){P.current&&P.current.isEqualNode(e.target)&&(32!==e.keyCode&&13!==e.keyCode||(e.preventDefault(),L()))},[P,k]),K=ue.useCallback(function(){T({type:"focus"})},[]),W=ue.useCallback(function(){T({type:"blur"})},[]),G=ue.useCallback(function(){w||(!function(){var e,n=0<arguments.length&&void 0!==arguments[0]?arguments[0]:window.navigator.userAgent;return-1!==(e=n).indexOf("MSIE")||-1!==e.indexOf("Trident/")||-1!==n.indexOf("Edge/")}()?L():setTimeout(L,0))},[k,w]),q=ue.useRef([]),N=function(e){P.current&&P.current.contains(e.target)||(e.preventDefault(),q.current=[])};ue.useEffect(function(){return x&&(document.addEventListener("dragover",ge,!1),document.addEventListener("drop",N,!1)),function(){x&&(document.removeEventListener("dragover",ge),document.removeEventListener("drop",N))}},[P,x]);var U,$=ue.useCallback(function(n){n.preventDefault(),n.persist(),Z(n),-1===q.current.indexOf(n.target)&&(q.current=[].concat(se(q.current),[n.target])),ye(n)&&Promise.resolve(r(n)).then(function(e){ve(n)&&!E||(T({draggedFiles:e,isDragActive:!0,type:"setDraggedFiles"}),s&&s(n))})},[r,s,E]),H=ue.useCallback(function(e){if(e.preventDefault(),e.persist(),Z(e),e.dataTransfer)try{e.dataTransfer.dropEffect="copy"}catch(e){}return ye(e)&&v&&v(e),!1},[v,E]),J=ue.useCallback(function(n){n.preventDefault(),n.persist(),Z(n);var e=q.current.filter(function(e){return e!==n.target&&P.current&&P.current.contains(e)});0<(q.current=e).length||(T({isDragActive:!1,type:"setDraggedFiles",draggedFiles:[]}),ye(n)&&d&&d(n))},[P,d,E]),Q=ue.useCallback(function(n){n.preventDefault(),n.persist(),Z(n),q.current=[],T({type:"reset"}),ye(n)&&Promise.resolve(r(n)).then(function(e){if(!ve(n)||E){var o=[],i=[];e.forEach(function(e){var n,t,r;de(e,u)&&(t=c,r=a,(n=e).size<=t&&n.size>=r)?o.push(e):i.push(e)}),!l&&1<o.length&&i.push.apply(i,se(o.splice(0))),T({acceptedFiles:o,rejectedFiles:i,type:"setFiles"}),y&&y(o,i,n),0<i.length&&h&&h(i,n),0<o.length&&g&&g(o,n)}})},[l,u,a,c,r,y,g,h,E]),V=function(e){return p?null:e},X=function(e){return F?null:V(e)},Y=function(e){return S?null:V(e)},Z=function(e){E&&e.stopPropagation()},ee=ue.useMemo(function(){return function(){var e=0<arguments.length&&void 0!==arguments[0]?arguments[0]:{},n=e.refKey,t=void 0===n?"ref":n,r=e.onKeyDown,o=e.onFocus,i=e.onBlur,u=e.onClick,c=e.onDragEnter,a=e.onDragOver,f=e.onDragLeave,l=e.onDrop,s=fe(e,["refKey","onKeyDown","onFocus","onBlur","onClick","onDragEnter","onDragOver","onDragLeave","onDrop"]);return ae(ce({onKeyDown:X(he(r,I)),onFocus:X(he(o,K)),onBlur:X(he(i,W)),onClick:V(he(u,G)),onDragEnter:Y(he(c,$)),onDragOver:Y(he(a,H)),onDragLeave:Y(he(f,J)),onDrop:Y(he(l,Q))},t,P),p||F?{}:{tabIndex:0},s)}},[P,I,K,W,G,$,H,J,Q,F,S,p]),ne=ue.useCallback(function(e){e.stopPropagation()},[]),te=ue.useMemo(function(){return function(){var e=0<arguments.length&&void 0!==arguments[0]?arguments[0]:{},n=e.refKey,t=void 0===n?"ref":n,r=e.onChange,o=e.onClick,i=fe(e,["refKey","onChange","onClick"]);return ae({},ce({accept:u,multiple:l,type:"file",style:{display:"none"},onChange:V(he(r,Q)),onClick:V(he(o,ne)),autoComplete:"off",tabIndex:-1},t,k),i)}},[k,u,l,Q,p]),re=z.length,oe=l||re<=1,ie=0<re&&(U=u,z.every(function(e){return de(e,U)}));return ae({},_,{isDragAccept:ie,isDragReject:0<re&&(!ie||!oe),isFocused:M&&!p,getRootProps:ee,getInputProps:te,rootRef:P,inputRef:k,open:V(L)})}function me(e,n){switch(n.type){case"focus":return ae({},e,{isFocused:!0});case"blur":return ae({},e,{isFocused:!1});case"openDialog":return ae({},e,{isFileDialogActive:!0});case"closeDialog":return ae({},e,{isFileDialogActive:!1});case"setDraggedFiles":var t=n.isDragActive;return ae({},e,{draggedFiles:n.draggedFiles,isDragActive:t});case"setFiles":return ae({},e,{acceptedFiles:n.acceptedFiles,rejectedFiles:n.rejectedFiles});case"reset":return ae({},e,{isFileDialogActive:!1,isDragActive:!1,draggedFiles:[]});default:return e}}e.default=D,e.useDropzone=w,Object.defineProperty(e,"__esModule",{value:!0})});
|
|
2
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VzIjpbIi4uL25vZGVfbW9kdWxlcy90c2xpYi90c2xpYi5lczYuanMiLCIuLi9ub2RlX21vZHVsZXMvZmlsZS1zZWxlY3Rvci9kaXN0L2VzNS9maWxlLmpzIiwiLi4vbm9kZV9tb2R1bGVzL2ZpbGUtc2VsZWN0b3IvZGlzdC9lczUvZmlsZS1zZWxlY3Rvci5qcyIsIi4uL25vZGVfbW9kdWxlcy9hdHRyLWFjY2VwdC9kaXN0L2luZGV4LmpzIiwiLi4vc3JjL3V0aWxzL2luZGV4LmpzIiwiLi4vc3JjL2luZGV4LmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qISAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxyXG5Db3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTsgeW91IG1heSBub3QgdXNlXHJcbnRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlXHJcbkxpY2Vuc2UgYXQgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXHJcblxyXG5USElTIENPREUgSVMgUFJPVklERUQgT04gQU4gKkFTIElTKiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZXHJcbktJTkQsIEVJVEhFUiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBXSVRIT1VUIExJTUlUQVRJT04gQU5ZIElNUExJRURcclxuV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIFRJVExFLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSxcclxuTUVSQ0hBTlRBQkxJVFkgT1IgTk9OLUlORlJJTkdFTUVOVC5cclxuXHJcblNlZSB0aGUgQXBhY2hlIFZlcnNpb24gMi4wIExpY2Vuc2UgZm9yIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9uc1xyXG5hbmQgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXHJcbioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovXHJcbi8qIGdsb2JhbCBSZWZsZWN0LCBQcm9taXNlICovXHJcblxyXG52YXIgZXh0ZW5kU3RhdGljcyA9IGZ1bmN0aW9uKGQsIGIpIHtcclxuICAgIGV4dGVuZFN0YXRpY3MgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHxcclxuICAgICAgICAoeyBfX3Byb3RvX186IFtdIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikgeyBkLl9fcHJvdG9fXyA9IGI7IH0pIHx8XHJcbiAgICAgICAgZnVuY3Rpb24gKGQsIGIpIHsgZm9yICh2YXIgcCBpbiBiKSBpZiAoYi5oYXNPd25Qcm9wZXJ0eShwKSkgZFtwXSA9IGJbcF07IH07XHJcbiAgICByZXR1cm4gZXh0ZW5kU3RhdGljcyhkLCBiKTtcclxufTtcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2V4dGVuZHMoZCwgYikge1xyXG4gICAgZXh0ZW5kU3RhdGljcyhkLCBiKTtcclxuICAgIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxyXG4gICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xyXG59XHJcblxyXG5leHBvcnQgdmFyIF9fYXNzaWduID0gZnVuY3Rpb24oKSB7XHJcbiAgICBfX2Fzc2lnbiA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gX19hc3NpZ24odCkge1xyXG4gICAgICAgIGZvciAodmFyIHMsIGkgPSAxLCBuID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IG47IGkrKykge1xyXG4gICAgICAgICAgICBzID0gYXJndW1lbnRzW2ldO1xyXG4gICAgICAgICAgICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkpIHRbcF0gPSBzW3BdO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdDtcclxuICAgIH1cclxuICAgIHJldHVybiBfX2Fzc2lnbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19yZXN0KHMsIGUpIHtcclxuICAgIHZhciB0ID0ge307XHJcbiAgICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkgJiYgZS5pbmRleE9mKHApIDwgMClcclxuICAgICAgICB0W3BdID0gc1twXTtcclxuICAgIGlmIChzICE9IG51bGwgJiYgdHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPT09IFwiZnVuY3Rpb25cIilcclxuICAgICAgICBmb3IgKHZhciBpID0gMCwgcCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMocyk7IGkgPCBwLmxlbmd0aDsgaSsrKSBpZiAoZS5pbmRleE9mKHBbaV0pIDwgMClcclxuICAgICAgICAgICAgdFtwW2ldXSA9IHNbcFtpXV07XHJcbiAgICByZXR1cm4gdDtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fZGVjb3JhdGUoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpIHtcclxuICAgIHZhciBjID0gYXJndW1lbnRzLmxlbmd0aCwgciA9IGMgPCAzID8gdGFyZ2V0IDogZGVzYyA9PT0gbnVsbCA/IGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwga2V5KSA6IGRlc2MsIGQ7XHJcbiAgICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIFJlZmxlY3QuZGVjb3JhdGUgPT09IFwiZnVuY3Rpb25cIikgciA9IFJlZmxlY3QuZGVjb3JhdGUoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpO1xyXG4gICAgZWxzZSBmb3IgKHZhciBpID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkgaWYgKGQgPSBkZWNvcmF0b3JzW2ldKSByID0gKGMgPCAzID8gZChyKSA6IGMgPiAzID8gZCh0YXJnZXQsIGtleSwgcikgOiBkKHRhcmdldCwga2V5KSkgfHwgcjtcclxuICAgIHJldHVybiBjID4gMyAmJiByICYmIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgciksIHI7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3BhcmFtKHBhcmFtSW5kZXgsIGRlY29yYXRvcikge1xyXG4gICAgcmV0dXJuIGZ1bmN0aW9uICh0YXJnZXQsIGtleSkgeyBkZWNvcmF0b3IodGFyZ2V0LCBrZXksIHBhcmFtSW5kZXgpOyB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX21ldGFkYXRhKG1ldGFkYXRhS2V5LCBtZXRhZGF0YVZhbHVlKSB7XHJcbiAgICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIFJlZmxlY3QubWV0YWRhdGEgPT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIFJlZmxlY3QubWV0YWRhdGEobWV0YWRhdGFLZXksIG1ldGFkYXRhVmFsdWUpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19hd2FpdGVyKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xyXG4gICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XHJcbiAgICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxyXG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxyXG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZShyZXN1bHQudmFsdWUpOyB9KS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XHJcbiAgICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xyXG4gICAgfSk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2dlbmVyYXRvcih0aGlzQXJnLCBib2R5KSB7XHJcbiAgICB2YXIgXyA9IHsgbGFiZWw6IDAsIHNlbnQ6IGZ1bmN0aW9uKCkgeyBpZiAodFswXSAmIDEpIHRocm93IHRbMV07IHJldHVybiB0WzFdOyB9LCB0cnlzOiBbXSwgb3BzOiBbXSB9LCBmLCB5LCB0LCBnO1xyXG4gICAgcmV0dXJuIGcgPSB7IG5leHQ6IHZlcmIoMCksIFwidGhyb3dcIjogdmVyYigxKSwgXCJyZXR1cm5cIjogdmVyYigyKSB9LCB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgKGdbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gdGhpczsgfSksIGc7XHJcbiAgICBmdW5jdGlvbiB2ZXJiKG4pIHsgcmV0dXJuIGZ1bmN0aW9uICh2KSB7IHJldHVybiBzdGVwKFtuLCB2XSk7IH07IH1cclxuICAgIGZ1bmN0aW9uIHN0ZXAob3ApIHtcclxuICAgICAgICBpZiAoZikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy5cIik7XHJcbiAgICAgICAgd2hpbGUgKF8pIHRyeSB7XHJcbiAgICAgICAgICAgIGlmIChmID0gMSwgeSAmJiAodCA9IG9wWzBdICYgMiA/IHlbXCJyZXR1cm5cIl0gOiBvcFswXSA/IHlbXCJ0aHJvd1wiXSB8fCAoKHQgPSB5W1wicmV0dXJuXCJdKSAmJiB0LmNhbGwoeSksIDApIDogeS5uZXh0KSAmJiAhKHQgPSB0LmNhbGwoeSwgb3BbMV0pKS5kb25lKSByZXR1cm4gdDtcclxuICAgICAgICAgICAgaWYgKHkgPSAwLCB0KSBvcCA9IFtvcFswXSAmIDIsIHQudmFsdWVdO1xyXG4gICAgICAgICAgICBzd2l0Y2ggKG9wWzBdKSB7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDA6IGNhc2UgMTogdCA9IG9wOyBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgNDogXy5sYWJlbCsrOyByZXR1cm4geyB2YWx1ZTogb3BbMV0sIGRvbmU6IGZhbHNlIH07XHJcbiAgICAgICAgICAgICAgICBjYXNlIDU6IF8ubGFiZWwrKzsgeSA9IG9wWzFdOyBvcCA9IFswXTsgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDc6IG9wID0gXy5vcHMucG9wKCk7IF8udHJ5cy5wb3AoKTsgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgICAgIGlmICghKHQgPSBfLnRyeXMsIHQgPSB0Lmxlbmd0aCA+IDAgJiYgdFt0Lmxlbmd0aCAtIDFdKSAmJiAob3BbMF0gPT09IDYgfHwgb3BbMF0gPT09IDIpKSB7IF8gPSAwOyBjb250aW51ZTsgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvcFswXSA9PT0gMyAmJiAoIXQgfHwgKG9wWzFdID4gdFswXSAmJiBvcFsxXSA8IHRbM10pKSkgeyBfLmxhYmVsID0gb3BbMV07IGJyZWFrOyB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wWzBdID09PSA2ICYmIF8ubGFiZWwgPCB0WzFdKSB7IF8ubGFiZWwgPSB0WzFdOyB0ID0gb3A7IGJyZWFrOyB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHQgJiYgXy5sYWJlbCA8IHRbMl0pIHsgXy5sYWJlbCA9IHRbMl07IF8ub3BzLnB1c2gob3ApOyBicmVhazsgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0WzJdKSBfLm9wcy5wb3AoKTtcclxuICAgICAgICAgICAgICAgICAgICBfLnRyeXMucG9wKCk7IGNvbnRpbnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIG9wID0gYm9keS5jYWxsKHRoaXNBcmcsIF8pO1xyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHsgb3AgPSBbNiwgZV07IHkgPSAwOyB9IGZpbmFsbHkgeyBmID0gdCA9IDA7IH1cclxuICAgICAgICBpZiAob3BbMF0gJiA1KSB0aHJvdyBvcFsxXTsgcmV0dXJuIHsgdmFsdWU6IG9wWzBdID8gb3BbMV0gOiB2b2lkIDAsIGRvbmU6IHRydWUgfTtcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fZXhwb3J0U3RhcihtLCBleHBvcnRzKSB7XHJcbiAgICBmb3IgKHZhciBwIGluIG0pIGlmICghZXhwb3J0cy5oYXNPd25Qcm9wZXJ0eShwKSkgZXhwb3J0c1twXSA9IG1bcF07XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3ZhbHVlcyhvKSB7XHJcbiAgICB2YXIgbSA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvW1N5bWJvbC5pdGVyYXRvcl0sIGkgPSAwO1xyXG4gICAgaWYgKG0pIHJldHVybiBtLmNhbGwobyk7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIG5leHQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgaWYgKG8gJiYgaSA+PSBvLmxlbmd0aCkgbyA9IHZvaWQgMDtcclxuICAgICAgICAgICAgcmV0dXJuIHsgdmFsdWU6IG8gJiYgb1tpKytdLCBkb25lOiAhbyB9O1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3JlYWQobywgbikge1xyXG4gICAgdmFyIG0gPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb1tTeW1ib2wuaXRlcmF0b3JdO1xyXG4gICAgaWYgKCFtKSByZXR1cm4gbztcclxuICAgIHZhciBpID0gbS5jYWxsKG8pLCByLCBhciA9IFtdLCBlO1xyXG4gICAgdHJ5IHtcclxuICAgICAgICB3aGlsZSAoKG4gPT09IHZvaWQgMCB8fCBuLS0gPiAwKSAmJiAhKHIgPSBpLm5leHQoKSkuZG9uZSkgYXIucHVzaChyLnZhbHVlKTtcclxuICAgIH1cclxuICAgIGNhdGNoIChlcnJvcikgeyBlID0geyBlcnJvcjogZXJyb3IgfTsgfVxyXG4gICAgZmluYWxseSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgaWYgKHIgJiYgIXIuZG9uZSAmJiAobSA9IGlbXCJyZXR1cm5cIl0pKSBtLmNhbGwoaSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZpbmFsbHkgeyBpZiAoZSkgdGhyb3cgZS5lcnJvcjsgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGFyO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19zcHJlYWQoKSB7XHJcbiAgICBmb3IgKHZhciBhciA9IFtdLCBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKylcclxuICAgICAgICBhciA9IGFyLmNvbmNhdChfX3JlYWQoYXJndW1lbnRzW2ldKSk7XHJcbiAgICByZXR1cm4gYXI7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2F3YWl0KHYpIHtcclxuICAgIHJldHVybiB0aGlzIGluc3RhbmNlb2YgX19hd2FpdCA/ICh0aGlzLnYgPSB2LCB0aGlzKSA6IG5ldyBfX2F3YWl0KHYpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19hc3luY0dlbmVyYXRvcih0aGlzQXJnLCBfYXJndW1lbnRzLCBnZW5lcmF0b3IpIHtcclxuICAgIGlmICghU3ltYm9sLmFzeW5jSXRlcmF0b3IpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTeW1ib2wuYXN5bmNJdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XHJcbiAgICB2YXIgZyA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSwgaSwgcSA9IFtdO1xyXG4gICAgcmV0dXJuIGkgPSB7fSwgdmVyYihcIm5leHRcIiksIHZlcmIoXCJ0aHJvd1wiKSwgdmVyYihcInJldHVyblwiKSwgaVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0gPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9LCBpO1xyXG4gICAgZnVuY3Rpb24gdmVyYihuKSB7IGlmIChnW25dKSBpW25dID0gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChhLCBiKSB7IHEucHVzaChbbiwgdiwgYSwgYl0pID4gMSB8fCByZXN1bWUobiwgdik7IH0pOyB9OyB9XHJcbiAgICBmdW5jdGlvbiByZXN1bWUobiwgdikgeyB0cnkgeyBzdGVwKGdbbl0odikpOyB9IGNhdGNoIChlKSB7IHNldHRsZShxWzBdWzNdLCBlKTsgfSB9XHJcbiAgICBmdW5jdGlvbiBzdGVwKHIpIHsgci52YWx1ZSBpbnN0YW5jZW9mIF9fYXdhaXQgPyBQcm9taXNlLnJlc29sdmUoci52YWx1ZS52KS50aGVuKGZ1bGZpbGwsIHJlamVjdCkgOiBzZXR0bGUocVswXVsyXSwgcik7IH1cclxuICAgIGZ1bmN0aW9uIGZ1bGZpbGwodmFsdWUpIHsgcmVzdW1lKFwibmV4dFwiLCB2YWx1ZSk7IH1cclxuICAgIGZ1bmN0aW9uIHJlamVjdCh2YWx1ZSkgeyByZXN1bWUoXCJ0aHJvd1wiLCB2YWx1ZSk7IH1cclxuICAgIGZ1bmN0aW9uIHNldHRsZShmLCB2KSB7IGlmIChmKHYpLCBxLnNoaWZ0KCksIHEubGVuZ3RoKSByZXN1bWUocVswXVswXSwgcVswXVsxXSk7IH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fYXN5bmNEZWxlZ2F0b3Iobykge1xyXG4gICAgdmFyIGksIHA7XHJcbiAgICByZXR1cm4gaSA9IHt9LCB2ZXJiKFwibmV4dFwiKSwgdmVyYihcInRocm93XCIsIGZ1bmN0aW9uIChlKSB7IHRocm93IGU7IH0pLCB2ZXJiKFwicmV0dXJuXCIpLCBpW1N5bWJvbC5pdGVyYXRvcl0gPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9LCBpO1xyXG4gICAgZnVuY3Rpb24gdmVyYihuLCBmKSB7IGlbbl0gPSBvW25dID8gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIChwID0gIXApID8geyB2YWx1ZTogX19hd2FpdChvW25dKHYpKSwgZG9uZTogbiA9PT0gXCJyZXR1cm5cIiB9IDogZiA/IGYodikgOiB2OyB9IDogZjsgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19hc3luY1ZhbHVlcyhvKSB7XHJcbiAgICBpZiAoIVN5bWJvbC5hc3luY0l0ZXJhdG9yKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3ltYm9sLmFzeW5jSXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xyXG4gICAgdmFyIG0gPSBvW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSwgaTtcclxuICAgIHJldHVybiBtID8gbS5jYWxsKG8pIDogKG8gPSB0eXBlb2YgX192YWx1ZXMgPT09IFwiZnVuY3Rpb25cIiA/IF9fdmFsdWVzKG8pIDogb1tTeW1ib2wuaXRlcmF0b3JdKCksIGkgPSB7fSwgdmVyYihcIm5leHRcIiksIHZlcmIoXCJ0aHJvd1wiKSwgdmVyYihcInJldHVyblwiKSwgaVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0gPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9LCBpKTtcclxuICAgIGZ1bmN0aW9uIHZlcmIobikgeyBpW25dID0gb1tuXSAmJiBmdW5jdGlvbiAodikgeyByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkgeyB2ID0gb1tuXSh2KSwgc2V0dGxlKHJlc29sdmUsIHJlamVjdCwgdi5kb25lLCB2LnZhbHVlKTsgfSk7IH07IH1cclxuICAgIGZ1bmN0aW9uIHNldHRsZShyZXNvbHZlLCByZWplY3QsIGQsIHYpIHsgUHJvbWlzZS5yZXNvbHZlKHYpLnRoZW4oZnVuY3Rpb24odikgeyByZXNvbHZlKHsgdmFsdWU6IHYsIGRvbmU6IGQgfSk7IH0sIHJlamVjdCk7IH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fbWFrZVRlbXBsYXRlT2JqZWN0KGNvb2tlZCwgcmF3KSB7XHJcbiAgICBpZiAoT2JqZWN0LmRlZmluZVByb3BlcnR5KSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjb29rZWQsIFwicmF3XCIsIHsgdmFsdWU6IHJhdyB9KTsgfSBlbHNlIHsgY29va2VkLnJhdyA9IHJhdzsgfVxyXG4gICAgcmV0dXJuIGNvb2tlZDtcclxufTtcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2ltcG9ydFN0YXIobW9kKSB7XHJcbiAgICBpZiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSByZXR1cm4gbW9kO1xyXG4gICAgdmFyIHJlc3VsdCA9IHt9O1xyXG4gICAgaWYgKG1vZCAhPSBudWxsKSBmb3IgKHZhciBrIGluIG1vZCkgaWYgKE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1vZCwgaykpIHJlc3VsdFtrXSA9IG1vZFtrXTtcclxuICAgIHJlc3VsdC5kZWZhdWx0ID0gbW9kO1xyXG4gICAgcmV0dXJuIHJlc3VsdDtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9faW1wb3J0RGVmYXVsdChtb2QpIHtcclxuICAgIHJldHVybiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSA/IG1vZCA6IHsgZGVmYXVsdDogbW9kIH07XHJcbn1cclxuIiwiZXhwb3J0IHZhciBDT01NT05fTUlNRV9UWVBFUyA9IG5ldyBNYXAoW1xuICAgIFsnYXZpJywgJ3ZpZGVvL2F2aSddLFxuICAgIFsnZ2lmJywgJ2ltYWdlL2dpZiddLFxuICAgIFsnaWNvJywgJ2ltYWdlL3gtaWNvbiddLFxuICAgIFsnanBlZycsICdpbWFnZS9qcGVnJ10sXG4gICAgWydqcGcnLCAnaW1hZ2UvanBlZyddLFxuICAgIFsnbWt2JywgJ3ZpZGVvL3gtbWF0cm9za2EnXSxcbiAgICBbJ21vdicsICd2aWRlby9xdWlja3RpbWUnXSxcbiAgICBbJ21wNCcsICd2aWRlby9tcDQnXSxcbiAgICBbJ3BkZicsICdhcHBsaWNhdGlvbi9wZGYnXSxcbiAgICBbJ3BuZycsICdpbWFnZS9wbmcnXSxcbiAgICBbJ3ppcCcsICdhcHBsaWNhdGlvbi96aXAnXSxcbiAgICBbJ2RvYycsICdhcHBsaWNhdGlvbi9tc3dvcmQnXSxcbiAgICBbJ2RvY3gnLCAnYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LndvcmRwcm9jZXNzaW5nbWwuZG9jdW1lbnQnXVxuXSk7XG5leHBvcnQgZnVuY3Rpb24gdG9GaWxlV2l0aFBhdGgoZmlsZSwgcGF0aCkge1xuICAgIHZhciBmID0gd2l0aE1pbWVUeXBlKGZpbGUpO1xuICAgIHZhciB3ZWJraXRSZWxhdGl2ZVBhdGggPSBmaWxlLndlYmtpdFJlbGF0aXZlUGF0aDtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZiwgJ3BhdGgnLCB7XG4gICAgICAgIHZhbHVlOiB0eXBlb2YgcGF0aCA9PT0gJ3N0cmluZydcbiAgICAgICAgICAgID8gcGF0aFxuICAgICAgICAgICAgLy8gSWYgPGlucHV0IHdlYmtpdGRpcmVjdG9yeT4gaXMgc2V0LFxuICAgICAgICAgICAgLy8gdGhlIEZpbGUgd2lsbCBoYXZlIGEge3dlYmtpdFJlbGF0aXZlUGF0aH0gcHJvcGVydHlcbiAgICAgICAgICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9IVE1MSW5wdXRFbGVtZW50L3dlYmtpdGRpcmVjdG9yeVxuICAgICAgICAgICAgOiB0eXBlb2Ygd2Via2l0UmVsYXRpdmVQYXRoID09PSAnc3RyaW5nJyAmJiB3ZWJraXRSZWxhdGl2ZVBhdGgubGVuZ3RoID4gMFxuICAgICAgICAgICAgICAgID8gd2Via2l0UmVsYXRpdmVQYXRoXG4gICAgICAgICAgICAgICAgOiBmaWxlLm5hbWUsXG4gICAgICAgIHdyaXRhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiBmYWxzZSxcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIHJldHVybiBmO1xufVxuZnVuY3Rpb24gd2l0aE1pbWVUeXBlKGZpbGUpIHtcbiAgICB2YXIgbmFtZSA9IGZpbGUubmFtZTtcbiAgICB2YXIgaGFzRXh0ZW5zaW9uID0gbmFtZSAmJiBuYW1lLmxhc3RJbmRleE9mKCcuJykgIT09IC0xO1xuICAgIGlmIChoYXNFeHRlbnNpb24gJiYgIWZpbGUudHlwZSkge1xuICAgICAgICB2YXIgZXh0ID0gbmFtZS5zcGxpdCgnLicpXG4gICAgICAgICAgICAucG9wKCkudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgdmFyIHR5cGUgPSBDT01NT05fTUlNRV9UWVBFUy5nZXQoZXh0KTtcbiAgICAgICAgaWYgKHR5cGUpIHtcbiAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmaWxlLCAndHlwZScsIHtcbiAgICAgICAgICAgICAgICB2YWx1ZTogdHlwZSxcbiAgICAgICAgICAgICAgICB3cml0YWJsZTogZmFsc2UsXG4gICAgICAgICAgICAgICAgY29uZmlndXJhYmxlOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmlsZTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWZpbGUuanMubWFwIiwiaW1wb3J0ICogYXMgdHNsaWJfMSBmcm9tIFwidHNsaWJcIjtcbmltcG9ydCB7IHRvRmlsZVdpdGhQYXRoIH0gZnJvbSAnLi9maWxlJztcbnZhciBGSUxFU19UT19JR05PUkUgPSBbXG4gICAgLy8gVGh1bWJuYWlsIGNhY2hlIGZpbGVzIGZvciBtYWNPUyBhbmQgV2luZG93c1xuICAgICcuRFNfU3RvcmUnLFxuICAgICdUaHVtYnMuZGInIC8vIFdpbmRvd3Ncbl07XG4vKipcbiAqIENvbnZlcnQgYSBEcmFnRXZlbnQncyBEYXRhVHJhc2ZlciBvYmplY3QgdG8gYSBsaXN0IG9mIEZpbGUgb2JqZWN0c1xuICogTk9URTogSWYgc29tZSBvZiB0aGUgaXRlbXMgYXJlIGZvbGRlcnMsXG4gKiBldmVyeXRoaW5nIHdpbGwgYmUgZmxhdHRlbmVkIGFuZCBwbGFjZWQgaW4gdGhlIHNhbWUgbGlzdCBidXQgdGhlIHBhdGhzIHdpbGwgYmUga2VwdCBhcyBhIHtwYXRofSBwcm9wZXJ0eS5cbiAqIEBwYXJhbSBldnRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZyb21FdmVudChldnQpIHtcbiAgICByZXR1cm4gdHNsaWJfMS5fX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRzbGliXzEuX19nZW5lcmF0b3IodGhpcywgZnVuY3Rpb24gKF9hKSB7XG4gICAgICAgICAgICByZXR1cm4gWzIgLypyZXR1cm4qLywgaXNEcmFnRXZ0KGV2dCkgJiYgZXZ0LmRhdGFUcmFuc2ZlclxuICAgICAgICAgICAgICAgICAgICA/IGdldERhdGFUcmFuc2ZlckZpbGVzKGV2dC5kYXRhVHJhbnNmZXIsIGV2dC50eXBlKVxuICAgICAgICAgICAgICAgICAgICA6IGdldElucHV0RmlsZXMoZXZ0KV07XG4gICAgICAgIH0pO1xuICAgIH0pO1xufVxuZnVuY3Rpb24gaXNEcmFnRXZ0KHZhbHVlKSB7XG4gICAgcmV0dXJuICEhdmFsdWUuZGF0YVRyYW5zZmVyO1xufVxuZnVuY3Rpb24gZ2V0SW5wdXRGaWxlcyhldnQpIHtcbiAgICB2YXIgZmlsZXMgPSBpc0lucHV0KGV2dC50YXJnZXQpXG4gICAgICAgID8gZXZ0LnRhcmdldC5maWxlc1xuICAgICAgICAgICAgPyBmcm9tTGlzdChldnQudGFyZ2V0LmZpbGVzKVxuICAgICAgICAgICAgOiBbXVxuICAgICAgICA6IFtdO1xuICAgIHJldHVybiBmaWxlcy5tYXAoZnVuY3Rpb24gKGZpbGUpIHsgcmV0dXJuIHRvRmlsZVdpdGhQYXRoKGZpbGUpOyB9KTtcbn1cbmZ1bmN0aW9uIGlzSW5wdXQodmFsdWUpIHtcbiAgICByZXR1cm4gdmFsdWUgIT09IG51bGw7XG59XG5mdW5jdGlvbiBnZXREYXRhVHJhbnNmZXJGaWxlcyhkdCwgdHlwZSkge1xuICAgIHJldHVybiB0c2xpYl8xLl9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgaXRlbXMsIGZpbGVzO1xuICAgICAgICByZXR1cm4gdHNsaWJfMS5fX2dlbmVyYXRvcih0aGlzLCBmdW5jdGlvbiAoX2EpIHtcbiAgICAgICAgICAgIHN3aXRjaCAoX2EubGFiZWwpIHtcbiAgICAgICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgICAgICAgIGlmICghZHQuaXRlbXMpIHJldHVybiBbMyAvKmJyZWFrKi8sIDJdO1xuICAgICAgICAgICAgICAgICAgICBpdGVtcyA9IGZyb21MaXN0KGR0Lml0ZW1zKVxuICAgICAgICAgICAgICAgICAgICAgICAgLmZpbHRlcihmdW5jdGlvbiAoaXRlbSkgeyByZXR1cm4gaXRlbS5raW5kID09PSAnZmlsZSc7IH0pO1xuICAgICAgICAgICAgICAgICAgICAvLyBBY2NvcmRpbmcgdG8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2UvZG5kLmh0bWwjZG5kZXZlbnRzLFxuICAgICAgICAgICAgICAgICAgICAvLyBvbmx5ICdkcmFnc3RhcnQnIGFuZCAnZHJvcCcgaGFzIGFjY2VzcyB0byB0aGUgZGF0YSAoc291cmNlIG5vZGUpXG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlICE9PSAnZHJvcCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbMiAvKnJldHVybiovLCBpdGVtc107XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFs0IC8qeWllbGQqLywgUHJvbWlzZS5hbGwoaXRlbXMubWFwKHRvRmlsZVByb21pc2VzKSldO1xuICAgICAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICAgICAgZmlsZXMgPSBfYS5zZW50KCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbMiAvKnJldHVybiovLCBub0lnbm9yZWRGaWxlcyhmbGF0dGVuKGZpbGVzKSldO1xuICAgICAgICAgICAgICAgIGNhc2UgMjogcmV0dXJuIFsyIC8qcmV0dXJuKi8sIG5vSWdub3JlZEZpbGVzKGZyb21MaXN0KGR0LmZpbGVzKVxuICAgICAgICAgICAgICAgICAgICAgICAgLm1hcChmdW5jdGlvbiAoZmlsZSkgeyByZXR1cm4gdG9GaWxlV2l0aFBhdGgoZmlsZSk7IH0pKV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0pO1xufVxuZnVuY3Rpb24gbm9JZ25vcmVkRmlsZXMoZmlsZXMpIHtcbiAgICByZXR1cm4gZmlsZXMuZmlsdGVyKGZ1bmN0aW9uIChmaWxlKSB7IHJldHVybiBGSUxFU19UT19JR05PUkUuaW5kZXhPZihmaWxlLm5hbWUpID09PSAtMTsgfSk7XG59XG4vLyBJRTExIGRvZXMgbm90IHN1cHBvcnQgQXJyYXkuZnJvbSgpXG4vLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9BcnJheS9mcm9tI0Jyb3dzZXJfY29tcGF0aWJpbGl0eVxuLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0ZpbGVMaXN0XG4vLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvRGF0YVRyYW5zZmVySXRlbUxpc3RcbmZ1bmN0aW9uIGZyb21MaXN0KGl0ZW1zKSB7XG4gICAgdmFyIGZpbGVzID0gW107XG4gICAgLy8gdHNsaW50OmRpc2FibGU6IHByZWZlci1mb3Itb2ZcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGl0ZW1zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBmaWxlID0gaXRlbXNbaV07XG4gICAgICAgIGZpbGVzLnB1c2goZmlsZSk7XG4gICAgfVxuICAgIHJldHVybiBmaWxlcztcbn1cbi8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9EYXRhVHJhbnNmZXJJdGVtXG5mdW5jdGlvbiB0b0ZpbGVQcm9taXNlcyhpdGVtKSB7XG4gICAgaWYgKHR5cGVvZiBpdGVtLndlYmtpdEdldEFzRW50cnkgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgcmV0dXJuIGZyb21EYXRhVHJhbnNmZXJJdGVtKGl0ZW0pO1xuICAgIH1cbiAgICB2YXIgZW50cnkgPSBpdGVtLndlYmtpdEdldEFzRW50cnkoKTtcbiAgICAvLyBTYWZhcmkgc3VwcG9ydHMgZHJvcHBpbmcgYW4gaW1hZ2Ugbm9kZSBmcm9tIGEgZGlmZmVyZW50IHdpbmRvdyBhbmQgY2FuIGJlIHJldHJpZXZlZCB1c2luZ1xuICAgIC8vIHRoZSBEYXRhVHJhbnNmZXJJdGVtLmdldEFzRmlsZSgpIEFQSVxuICAgIC8vIE5PVEU6IEZpbGVTeXN0ZW1FbnRyeS5maWxlKCkgdGhyb3dzIGlmIHRyeWluZyB0byBnZXQgdGhlIGZpbGVcbiAgICBpZiAoZW50cnkgJiYgZW50cnkuaXNEaXJlY3RvcnkpIHtcbiAgICAgICAgcmV0dXJuIGZyb21EaXJFbnRyeShlbnRyeSk7XG4gICAgfVxuICAgIHJldHVybiBmcm9tRGF0YVRyYW5zZmVySXRlbShpdGVtKTtcbn1cbmZ1bmN0aW9uIGZsYXR0ZW4oaXRlbXMpIHtcbiAgICByZXR1cm4gaXRlbXMucmVkdWNlKGZ1bmN0aW9uIChhY2MsIGZpbGVzKSB7IHJldHVybiB0c2xpYl8xLl9fc3ByZWFkKGFjYywgKEFycmF5LmlzQXJyYXkoZmlsZXMpID8gZmxhdHRlbihmaWxlcykgOiBbZmlsZXNdKSk7IH0sIFtdKTtcbn1cbmZ1bmN0aW9uIGZyb21EYXRhVHJhbnNmZXJJdGVtKGl0ZW0pIHtcbiAgICB2YXIgZmlsZSA9IGl0ZW0uZ2V0QXNGaWxlKCk7XG4gICAgaWYgKCFmaWxlKSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChpdGVtICsgXCIgaXMgbm90IGEgRmlsZVwiKTtcbiAgICB9XG4gICAgdmFyIGZ3cCA9IHRvRmlsZVdpdGhQYXRoKGZpbGUpO1xuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoZndwKTtcbn1cbi8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9GaWxlU3lzdGVtRW50cnlcbmZ1bmN0aW9uIGZyb21FbnRyeShlbnRyeSkge1xuICAgIHJldHVybiB0c2xpYl8xLl9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdHNsaWJfMS5fX2dlbmVyYXRvcih0aGlzLCBmdW5jdGlvbiAoX2EpIHtcbiAgICAgICAgICAgIHJldHVybiBbMiAvKnJldHVybiovLCBlbnRyeS5pc0RpcmVjdG9yeSA/IGZyb21EaXJFbnRyeShlbnRyeSkgOiBmcm9tRmlsZUVudHJ5KGVudHJ5KV07XG4gICAgICAgIH0pO1xuICAgIH0pO1xufVxuLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0ZpbGVTeXN0ZW1EaXJlY3RvcnlFbnRyeVxuZnVuY3Rpb24gZnJvbURpckVudHJ5KGVudHJ5KSB7XG4gICAgdmFyIHJlYWRlciA9IGVudHJ5LmNyZWF0ZVJlYWRlcigpO1xuICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIHZhciBlbnRyaWVzID0gW107XG4gICAgICAgIGZ1bmN0aW9uIHJlYWRFbnRyaWVzKCkge1xuICAgICAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9GaWxlU3lzdGVtRGlyZWN0b3J5RW50cnkvY3JlYXRlUmVhZGVyXG4gICAgICAgICAgICAvLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvRmlsZVN5c3RlbURpcmVjdG9yeVJlYWRlci9yZWFkRW50cmllc1xuICAgICAgICAgICAgcmVhZGVyLnJlYWRFbnRyaWVzKGZ1bmN0aW9uIChiYXRjaCkgeyByZXR1cm4gdHNsaWJfMS5fX2F3YWl0ZXIoX3RoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgdmFyIGZpbGVzLCBlcnJfMSwgaXRlbXM7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRzbGliXzEuX19nZW5lcmF0b3IodGhpcywgZnVuY3Rpb24gKF9hKSB7XG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoX2EubGFiZWwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoISFiYXRjaC5sZW5ndGgpIHJldHVybiBbMyAvKmJyZWFrKi8sIDVdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9hLmxhYmVsID0gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfYS50cnlzLnB1c2goWzEsIDMsICwgNF0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbNCAvKnlpZWxkKi8sIFByb21pc2UuYWxsKGVudHJpZXMpXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlcyA9IF9hLnNlbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKGZpbGVzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzMgLypicmVhayovLCA0XTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJfMSA9IF9hLnNlbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWplY3QoZXJyXzEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbMyAvKmJyZWFrKi8sIDRdO1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSA0OiByZXR1cm4gWzMgLypicmVhayovLCA2XTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgNTpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtcyA9IFByb21pc2UuYWxsKGJhdGNoLm1hcChmcm9tRW50cnkpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnRyaWVzLnB1c2goaXRlbXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIENvbnRpbnVlIHJlYWRpbmdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkRW50cmllcygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9hLmxhYmVsID0gNjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgNjogcmV0dXJuIFsyIC8qcmV0dXJuKi9dO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTsgfSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmVhZEVudHJpZXMoKTtcbiAgICB9KTtcbn1cbi8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9GaWxlU3lzdGVtRmlsZUVudHJ5XG5mdW5jdGlvbiBmcm9tRmlsZUVudHJ5KGVudHJ5KSB7XG4gICAgcmV0dXJuIHRzbGliXzEuX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0c2xpYl8xLl9fZ2VuZXJhdG9yKHRoaXMsIGZ1bmN0aW9uIChfYSkge1xuICAgICAgICAgICAgcmV0dXJuIFsyIC8qcmV0dXJuKi8sIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgZW50cnkuZmlsZShmdW5jdGlvbiAoZmlsZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZ3cCA9IHRvRmlsZVdpdGhQYXRoKGZpbGUsIGVudHJ5LmZ1bGxQYXRoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoZndwKTtcbiAgICAgICAgICAgICAgICAgICAgfSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0pXTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1maWxlLXNlbGVjdG9yLmpzLm1hcCIsIm1vZHVsZS5leHBvcnRzPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIG4oZSl7aWYocltlXSlyZXR1cm4gcltlXS5leHBvcnRzO3ZhciBvPXJbZV09e2k6ZSxsOiExLGV4cG9ydHM6e319O3JldHVybiB0W2VdLmNhbGwoby5leHBvcnRzLG8sby5leHBvcnRzLG4pLG8ubD0hMCxvLmV4cG9ydHN9dmFyIHI9e307cmV0dXJuIG4ubT10LG4uYz1yLG4uZD1mdW5jdGlvbih0LHIsZSl7bi5vKHQscil8fE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LHIse2NvbmZpZ3VyYWJsZTohMSxlbnVtZXJhYmxlOiEwLGdldDplfSl9LG4ubj1mdW5jdGlvbih0KXt2YXIgcj10JiZ0Ll9fZXNNb2R1bGU/ZnVuY3Rpb24oKXtyZXR1cm4gdC5kZWZhdWx0fTpmdW5jdGlvbigpe3JldHVybiB0fTtyZXR1cm4gbi5kKHIsXCJhXCIscikscn0sbi5vPWZ1bmN0aW9uKHQsbil7cmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LG4pfSxuLnA9XCJcIixuKG4ucz0xMyl9KFtmdW5jdGlvbih0LG4pe3ZhciByPXQuZXhwb3J0cz1cInVuZGVmaW5lZFwiIT10eXBlb2Ygd2luZG93JiZ3aW5kb3cuTWF0aD09TWF0aD93aW5kb3c6XCJ1bmRlZmluZWRcIiE9dHlwZW9mIHNlbGYmJnNlbGYuTWF0aD09TWF0aD9zZWxmOkZ1bmN0aW9uKFwicmV0dXJuIHRoaXNcIikoKTtcIm51bWJlclwiPT10eXBlb2YgX19nJiYoX19nPXIpfSxmdW5jdGlvbih0LG4pe3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm5cIm9iamVjdFwiPT10eXBlb2YgdD9udWxsIT09dDpcImZ1bmN0aW9uXCI9PXR5cGVvZiB0fX0sZnVuY3Rpb24odCxuKXt2YXIgcj10LmV4cG9ydHM9e3ZlcnNpb246XCIyLjUuMFwifTtcIm51bWJlclwiPT10eXBlb2YgX19lJiYoX19lPXIpfSxmdW5jdGlvbih0LG4scil7dC5leHBvcnRzPSFyKDQpKGZ1bmN0aW9uKCl7cmV0dXJuIDchPU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7fSxcImFcIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIDd9fSkuYX0pfSxmdW5jdGlvbih0LG4pe3QuZXhwb3J0cz1mdW5jdGlvbih0KXt0cnl7cmV0dXJuISF0KCl9Y2F0Y2godCl7cmV0dXJuITB9fX0sZnVuY3Rpb24odCxuKXt2YXIgcj17fS50b1N0cmluZzt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIHIuY2FsbCh0KS5zbGljZSg4LC0xKX19LGZ1bmN0aW9uKHQsbixyKXt2YXIgZT1yKDMyKShcIndrc1wiKSxvPXIoOSksaT1yKDApLlN5bWJvbCx1PVwiZnVuY3Rpb25cIj09dHlwZW9mIGk7KHQuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gZVt0XXx8KGVbdF09dSYmaVt0XXx8KHU/aTpvKShcIlN5bWJvbC5cIit0KSl9KS5zdG9yZT1lfSxmdW5jdGlvbih0LG4scil7dmFyIGU9cigwKSxvPXIoMiksaT1yKDgpLHU9cigyMiksYz1yKDEwKSxmPWZ1bmN0aW9uKHQsbixyKXt2YXIgYSxzLHAsbCx2PXQmZi5GLHk9dCZmLkcsaD10JmYuUyxkPXQmZi5QLHg9dCZmLkIsZz15P2U6aD9lW25dfHwoZVtuXT17fSk6KGVbbl18fHt9KS5wcm90b3R5cGUsbT15P286b1tuXXx8KG9bbl09e30pLGI9bS5wcm90b3R5cGV8fChtLnByb3RvdHlwZT17fSk7eSYmKHI9bik7Zm9yKGEgaW4gcilzPSF2JiZnJiZ2b2lkIDAhPT1nW2FdLHA9KHM/ZzpyKVthXSxsPXgmJnM/YyhwLGUpOmQmJlwiZnVuY3Rpb25cIj09dHlwZW9mIHA/YyhGdW5jdGlvbi5jYWxsLHApOnAsZyYmdShnLGEscCx0JmYuVSksbVthXSE9cCYmaShtLGEsbCksZCYmYlthXSE9cCYmKGJbYV09cCl9O2UuY29yZT1vLGYuRj0xLGYuRz0yLGYuUz00LGYuUD04LGYuQj0xNixmLlc9MzIsZi5VPTY0LGYuUj0xMjgsdC5leHBvcnRzPWZ9LGZ1bmN0aW9uKHQsbixyKXt2YXIgZT1yKDE2KSxvPXIoMjEpO3QuZXhwb3J0cz1yKDMpP2Z1bmN0aW9uKHQsbixyKXtyZXR1cm4gZS5mKHQsbixvKDEscikpfTpmdW5jdGlvbih0LG4scil7cmV0dXJuIHRbbl09cix0fX0sZnVuY3Rpb24odCxuKXt2YXIgcj0wLGU9TWF0aC5yYW5kb20oKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuXCJTeW1ib2woXCIuY29uY2F0KHZvaWQgMD09PXQ/XCJcIjp0LFwiKV9cIiwoKytyK2UpLnRvU3RyaW5nKDM2KSl9fSxmdW5jdGlvbih0LG4scil7dmFyIGU9cigyNCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsbixyKXtpZihlKHQpLHZvaWQgMD09PW4pcmV0dXJuIHQ7c3dpdGNoKHIpe2Nhc2UgMTpyZXR1cm4gZnVuY3Rpb24ocil7cmV0dXJuIHQuY2FsbChuLHIpfTtjYXNlIDI6cmV0dXJuIGZ1bmN0aW9uKHIsZSl7cmV0dXJuIHQuY2FsbChuLHIsZSl9O2Nhc2UgMzpyZXR1cm4gZnVuY3Rpb24ocixlLG8pe3JldHVybiB0LmNhbGwobixyLGUsbyl9fXJldHVybiBmdW5jdGlvbigpe3JldHVybiB0LmFwcGx5KG4sYXJndW1lbnRzKX19fSxmdW5jdGlvbih0LG4pe3QuZXhwb3J0cz1mdW5jdGlvbih0KXtpZih2b2lkIDA9PXQpdGhyb3cgVHlwZUVycm9yKFwiQ2FuJ3QgY2FsbCBtZXRob2Qgb24gIFwiK3QpO3JldHVybiB0fX0sZnVuY3Rpb24odCxuLHIpe3ZhciBlPXIoMjgpLG89TWF0aC5taW47dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiB0PjA/byhlKHQpLDkwMDcxOTkyNTQ3NDA5OTEpOjB9fSxmdW5jdGlvbih0LG4scil7XCJ1c2Ugc3RyaWN0XCI7bi5fX2VzTW9kdWxlPSEwLG4uZGVmYXVsdD1mdW5jdGlvbih0LG4pe2lmKHQmJm4pe3ZhciByPUFycmF5LmlzQXJyYXkobik/bjpuLnNwbGl0KFwiLFwiKSxlPXQubmFtZXx8XCJcIixvPXQudHlwZXx8XCJcIixpPW8ucmVwbGFjZSgvXFwvLiokLyxcIlwiKTtyZXR1cm4gci5zb21lKGZ1bmN0aW9uKHQpe3ZhciBuPXQudHJpbSgpO3JldHVyblwiLlwiPT09bi5jaGFyQXQoMCk/ZS50b0xvd2VyQ2FzZSgpLmVuZHNXaXRoKG4udG9Mb3dlckNhc2UoKSk6bi5lbmRzV2l0aChcIi8qXCIpP2k9PT1uLnJlcGxhY2UoL1xcLy4qJC8sXCJcIik6bz09PW59KX1yZXR1cm4hMH0scigxNCkscigzNCl9LGZ1bmN0aW9uKHQsbixyKXtyKDE1KSx0LmV4cG9ydHM9cigyKS5BcnJheS5zb21lfSxmdW5jdGlvbih0LG4scil7XCJ1c2Ugc3RyaWN0XCI7dmFyIGU9cig3KSxvPXIoMjUpKDMpO2UoZS5QK2UuRiohcigzMykoW10uc29tZSwhMCksXCJBcnJheVwiLHtzb21lOmZ1bmN0aW9uKHQpe3JldHVybiBvKHRoaXMsdCxhcmd1bWVudHNbMV0pfX0pfSxmdW5jdGlvbih0LG4scil7dmFyIGU9cigxNyksbz1yKDE4KSxpPXIoMjApLHU9T2JqZWN0LmRlZmluZVByb3BlcnR5O24uZj1yKDMpP09iamVjdC5kZWZpbmVQcm9wZXJ0eTpmdW5jdGlvbih0LG4scil7aWYoZSh0KSxuPWkobiwhMCksZShyKSxvKXRyeXtyZXR1cm4gdSh0LG4scil9Y2F0Y2godCl7fWlmKFwiZ2V0XCJpbiByfHxcInNldFwiaW4gcil0aHJvdyBUeXBlRXJyb3IoXCJBY2Nlc3NvcnMgbm90IHN1cHBvcnRlZCFcIik7cmV0dXJuXCJ2YWx1ZVwiaW4gciYmKHRbbl09ci52YWx1ZSksdH19LGZ1bmN0aW9uKHQsbixyKXt2YXIgZT1yKDEpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtpZighZSh0KSl0aHJvdyBUeXBlRXJyb3IodCtcIiBpcyBub3QgYW4gb2JqZWN0IVwiKTtyZXR1cm4gdH19LGZ1bmN0aW9uKHQsbixyKXt0LmV4cG9ydHM9IXIoMykmJiFyKDQpKGZ1bmN0aW9uKCl7cmV0dXJuIDchPU9iamVjdC5kZWZpbmVQcm9wZXJ0eShyKDE5KShcImRpdlwiKSxcImFcIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIDd9fSkuYX0pfSxmdW5jdGlvbih0LG4scil7dmFyIGU9cigxKSxvPXIoMCkuZG9jdW1lbnQsaT1lKG8pJiZlKG8uY3JlYXRlRWxlbWVudCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBpP28uY3JlYXRlRWxlbWVudCh0KTp7fX19LGZ1bmN0aW9uKHQsbixyKXt2YXIgZT1yKDEpO3QuZXhwb3J0cz1mdW5jdGlvbih0LG4pe2lmKCFlKHQpKXJldHVybiB0O3ZhciByLG87aWYobiYmXCJmdW5jdGlvblwiPT10eXBlb2Yocj10LnRvU3RyaW5nKSYmIWUobz1yLmNhbGwodCkpKXJldHVybiBvO2lmKFwiZnVuY3Rpb25cIj09dHlwZW9mKHI9dC52YWx1ZU9mKSYmIWUobz1yLmNhbGwodCkpKXJldHVybiBvO2lmKCFuJiZcImZ1bmN0aW9uXCI9PXR5cGVvZihyPXQudG9TdHJpbmcpJiYhZShvPXIuY2FsbCh0KSkpcmV0dXJuIG87dGhyb3cgVHlwZUVycm9yKFwiQ2FuJ3QgY29udmVydCBvYmplY3QgdG8gcHJpbWl0aXZlIHZhbHVlXCIpfX0sZnVuY3Rpb24odCxuKXt0LmV4cG9ydHM9ZnVuY3Rpb24odCxuKXtyZXR1cm57ZW51bWVyYWJsZTohKDEmdCksY29uZmlndXJhYmxlOiEoMiZ0KSx3cml0YWJsZTohKDQmdCksdmFsdWU6bn19fSxmdW5jdGlvbih0LG4scil7dmFyIGU9cigwKSxvPXIoOCksaT1yKDIzKSx1PXIoOSkoXCJzcmNcIiksYz1GdW5jdGlvbi50b1N0cmluZyxmPShcIlwiK2MpLnNwbGl0KFwidG9TdHJpbmdcIik7cigyKS5pbnNwZWN0U291cmNlPWZ1bmN0aW9uKHQpe3JldHVybiBjLmNhbGwodCl9LCh0LmV4cG9ydHM9ZnVuY3Rpb24odCxuLHIsYyl7dmFyIGE9XCJmdW5jdGlvblwiPT10eXBlb2YgcjthJiYoaShyLFwibmFtZVwiKXx8byhyLFwibmFtZVwiLG4pKSx0W25dIT09ciYmKGEmJihpKHIsdSl8fG8ocix1LHRbbl0/XCJcIit0W25dOmYuam9pbihTdHJpbmcobikpKSksdD09PWU/dFtuXT1yOmM/dFtuXT90W25dPXI6byh0LG4scik6KGRlbGV0ZSB0W25dLG8odCxuLHIpKSl9KShGdW5jdGlvbi5wcm90b3R5cGUsXCJ0b1N0cmluZ1wiLGZ1bmN0aW9uKCl7cmV0dXJuXCJmdW5jdGlvblwiPT10eXBlb2YgdGhpcyYmdGhpc1t1XXx8Yy5jYWxsKHRoaXMpfSl9LGZ1bmN0aW9uKHQsbil7dmFyIHI9e30uaGFzT3duUHJvcGVydHk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsbil7cmV0dXJuIHIuY2FsbCh0LG4pfX0sZnVuY3Rpb24odCxuKXt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7aWYoXCJmdW5jdGlvblwiIT10eXBlb2YgdCl0aHJvdyBUeXBlRXJyb3IodCtcIiBpcyBub3QgYSBmdW5jdGlvbiFcIik7cmV0dXJuIHR9fSxmdW5jdGlvbih0LG4scil7dmFyIGU9cigxMCksbz1yKDI2KSxpPXIoMjcpLHU9cigxMiksYz1yKDI5KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxuKXt2YXIgcj0xPT10LGY9Mj09dCxhPTM9PXQscz00PT10LHA9Nj09dCxsPTU9PXR8fHAsdj1ufHxjO3JldHVybiBmdW5jdGlvbihuLGMseSl7Zm9yKHZhciBoLGQseD1pKG4pLGc9byh4KSxtPWUoYyx5LDMpLGI9dShnLmxlbmd0aCksXz0wLHc9cj92KG4sYik6Zj92KG4sMCk6dm9pZCAwO2I+XztfKyspaWYoKGx8fF8gaW4gZykmJihoPWdbX10sZD1tKGgsXyx4KSx0KSlpZihyKXdbX109ZDtlbHNlIGlmKGQpc3dpdGNoKHQpe2Nhc2UgMzpyZXR1cm4hMDtjYXNlIDU6cmV0dXJuIGg7Y2FzZSA2OnJldHVybiBfO2Nhc2UgMjp3LnB1c2goaCl9ZWxzZSBpZihzKXJldHVybiExO3JldHVybiBwPy0xOmF8fHM/czp3fX19LGZ1bmN0aW9uKHQsbixyKXt2YXIgZT1yKDUpO3QuZXhwb3J0cz1PYmplY3QoXCJ6XCIpLnByb3BlcnR5SXNFbnVtZXJhYmxlKDApP09iamVjdDpmdW5jdGlvbih0KXtyZXR1cm5cIlN0cmluZ1wiPT1lKHQpP3Quc3BsaXQoXCJcIik6T2JqZWN0KHQpfX0sZnVuY3Rpb24odCxuLHIpe3ZhciBlPXIoMTEpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gT2JqZWN0KGUodCkpfX0sZnVuY3Rpb24odCxuKXt2YXIgcj1NYXRoLmNlaWwsZT1NYXRoLmZsb29yO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gaXNOYU4odD0rdCk/MDoodD4wP2U6cikodCl9fSxmdW5jdGlvbih0LG4scil7dmFyIGU9cigzMCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsbil7cmV0dXJuIG5ldyhlKHQpKShuKX19LGZ1bmN0aW9uKHQsbixyKXt2YXIgZT1yKDEpLG89cigzMSksaT1yKDYpKFwic3BlY2llc1wiKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIG47cmV0dXJuIG8odCkmJihuPXQuY29uc3RydWN0b3IsXCJmdW5jdGlvblwiIT10eXBlb2Ygbnx8biE9PUFycmF5JiYhbyhuLnByb3RvdHlwZSl8fChuPXZvaWQgMCksZShuKSYmbnVsbD09PShuPW5baV0pJiYobj12b2lkIDApKSx2b2lkIDA9PT1uP0FycmF5Om59fSxmdW5jdGlvbih0LG4scil7dmFyIGU9cig1KTt0LmV4cG9ydHM9QXJyYXkuaXNBcnJheXx8ZnVuY3Rpb24odCl7cmV0dXJuXCJBcnJheVwiPT1lKHQpfX0sZnVuY3Rpb24odCxuLHIpe3ZhciBlPXIoMCksbz1lW1wiX19jb3JlLWpzX3NoYXJlZF9fXCJdfHwoZVtcIl9fY29yZS1qc19zaGFyZWRfX1wiXT17fSk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBvW3RdfHwob1t0XT17fSl9fSxmdW5jdGlvbih0LG4scil7XCJ1c2Ugc3RyaWN0XCI7dmFyIGU9cig0KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxuKXtyZXR1cm4hIXQmJmUoZnVuY3Rpb24oKXtuP3QuY2FsbChudWxsLGZ1bmN0aW9uKCl7fSwxKTp0LmNhbGwobnVsbCl9KX19LGZ1bmN0aW9uKHQsbixyKXtyKDM1KSx0LmV4cG9ydHM9cigyKS5TdHJpbmcuZW5kc1dpdGh9LGZ1bmN0aW9uKHQsbixyKXtcInVzZSBzdHJpY3RcIjt2YXIgZT1yKDcpLG89cigxMiksaT1yKDM2KSx1PVwiXCIuZW5kc1dpdGg7ZShlLlArZS5GKnIoMzgpKFwiZW5kc1dpdGhcIiksXCJTdHJpbmdcIix7ZW5kc1dpdGg6ZnVuY3Rpb24odCl7dmFyIG49aSh0aGlzLHQsXCJlbmRzV2l0aFwiKSxyPWFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwLGU9byhuLmxlbmd0aCksYz12b2lkIDA9PT1yP2U6TWF0aC5taW4obyhyKSxlKSxmPVN0cmluZyh0KTtyZXR1cm4gdT91LmNhbGwobixmLGMpOm4uc2xpY2UoYy1mLmxlbmd0aCxjKT09PWZ9fSl9LGZ1bmN0aW9uKHQsbixyKXt2YXIgZT1yKDM3KSxvPXIoMTEpO3QuZXhwb3J0cz1mdW5jdGlvbih0LG4scil7aWYoZShuKSl0aHJvdyBUeXBlRXJyb3IoXCJTdHJpbmcjXCIrcitcIiBkb2Vzbid0IGFjY2VwdCByZWdleCFcIik7cmV0dXJuIFN0cmluZyhvKHQpKX19LGZ1bmN0aW9uKHQsbixyKXt2YXIgZT1yKDEpLG89cig1KSxpPXIoNikoXCJtYXRjaFwiKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIG47cmV0dXJuIGUodCkmJih2b2lkIDAhPT0obj10W2ldKT8hIW46XCJSZWdFeHBcIj09byh0KSl9fSxmdW5jdGlvbih0LG4scil7dmFyIGU9cig2KShcIm1hdGNoXCIpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgbj0vLi87dHJ5e1wiLy4vXCJbdF0obil9Y2F0Y2gocil7dHJ5e3JldHVybiBuW2VdPSExLCFcIi8uL1wiW3RdKG4pfWNhdGNoKHQpe319cmV0dXJuITB9fV0pOyIsImltcG9ydCBhY2NlcHRzIGZyb20gJ2F0dHItYWNjZXB0J1xuXG4vLyBGaXJlZm94IHZlcnNpb25zIHByaW9yIHRvIDUzIHJldHVybiBhIGJvZ3VzIE1JTUUgdHlwZSBmb3IgZXZlcnkgZmlsZSBkcmFnLCBzbyBkcmFnb3ZlcnMgd2l0aFxuLy8gdGhhdCBNSU1FIHR5cGUgd2lsbCBhbHdheXMgYmUgYWNjZXB0ZWRcbmV4cG9ydCBmdW5jdGlvbiBmaWxlQWNjZXB0ZWQoZmlsZSwgYWNjZXB0KSB7XG4gIHJldHVybiBmaWxlLnR5cGUgPT09ICdhcHBsaWNhdGlvbi94LW1vei1maWxlJyB8fCBhY2NlcHRzKGZpbGUsIGFjY2VwdClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZpbGVNYXRjaFNpemUoZmlsZSwgbWF4U2l6ZSwgbWluU2l6ZSkge1xuICByZXR1cm4gZmlsZS5zaXplIDw9IG1heFNpemUgJiYgZmlsZS5zaXplID49IG1pblNpemVcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFsbEZpbGVzQWNjZXB0ZWQoZmlsZXMsIGFjY2VwdCkge1xuICByZXR1cm4gZmlsZXMuZXZlcnkoZmlsZSA9PiBmaWxlQWNjZXB0ZWQoZmlsZSwgYWNjZXB0KSlcbn1cblxuLy8gUmVhY3QncyBzeW50aGV0aWMgZXZlbnRzIGhhcyBldmVudC5pc1Byb3BhZ2F0aW9uU3RvcHBlZCxcbi8vIGJ1dCB0byByZW1haW4gY29tcGF0aWJpbGl0eSB3aXRoIG90aGVyIGxpYnMgKFByZWFjdCkgZmFsbCBiYWNrXG4vLyB0byBjaGVjayBldmVudC5jYW5jZWxCdWJibGVcbmV4cG9ydCBmdW5jdGlvbiBpc1Byb3BhZ2F0aW9uU3RvcHBlZChldmVudCkge1xuICBpZiAodHlwZW9mIGV2ZW50LmlzUHJvcGFnYXRpb25TdG9wcGVkID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIGV2ZW50LmlzUHJvcGFnYXRpb25TdG9wcGVkKClcbiAgfSBlbHNlIGlmICh0eXBlb2YgZXZlbnQuY2FuY2VsQnViYmxlICE9PSAndW5kZWZpbmVkJykge1xuICAgIHJldHVybiBldmVudC5jYW5jZWxCdWJibGVcbiAgfVxuICByZXR1cm4gZmFsc2Vcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzRXZ0V2l0aEZpbGVzKGV2ZW50KSB7XG4gIGlmICghZXZlbnQuZGF0YVRyYW5zZmVyKSB7XG4gICAgcmV0dXJuICEhZXZlbnQudGFyZ2V0ICYmICEhZXZlbnQudGFyZ2V0LmZpbGVzXG4gIH1cbiAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0RhdGFUcmFuc2Zlci90eXBlc1xuICAvLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvSFRNTF9EcmFnX2FuZF9Ecm9wX0FQSS9SZWNvbW1lbmRlZF9kcmFnX3R5cGVzI2ZpbGVcbiAgcmV0dXJuIEFycmF5LnByb3RvdHlwZS5zb21lLmNhbGwoXG4gICAgZXZlbnQuZGF0YVRyYW5zZmVyLnR5cGVzLFxuICAgIHR5cGUgPT4gdHlwZSA9PT0gJ0ZpbGVzJyB8fCB0eXBlID09PSAnYXBwbGljYXRpb24veC1tb3otZmlsZSdcbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNLaW5kRmlsZShpdGVtKSB7XG4gIHJldHVybiB0eXBlb2YgaXRlbSA9PT0gJ29iamVjdCcgJiYgaXRlbSAhPT0gbnVsbCAmJiBpdGVtLmtpbmQgPT09ICdmaWxlJ1xufVxuXG4vLyBhbGxvdyB0aGUgZW50aXJlIGRvY3VtZW50IHRvIGJlIGEgZHJhZyB0YXJnZXRcbmV4cG9ydCBmdW5jdGlvbiBvbkRvY3VtZW50RHJhZ092ZXIoZXZlbnQpIHtcbiAgZXZlbnQucHJldmVudERlZmF1bHQoKVxufVxuXG5mdW5jdGlvbiBpc0llKHVzZXJBZ2VudCkge1xuICByZXR1cm4gdXNlckFnZW50LmluZGV4T2YoJ01TSUUnKSAhPT0gLTEgfHwgdXNlckFnZW50LmluZGV4T2YoJ1RyaWRlbnQvJykgIT09IC0xXG59XG5cbmZ1bmN0aW9uIGlzRWRnZSh1c2VyQWdlbnQpIHtcbiAgcmV0dXJuIHVzZXJBZ2VudC5pbmRleE9mKCdFZGdlLycpICE9PSAtMVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNJZU9yRWRnZSh1c2VyQWdlbnQgPSB3aW5kb3cubmF2aWdhdG9yLnVzZXJBZ2VudCkge1xuICByZXR1cm4gaXNJZSh1c2VyQWdlbnQpIHx8IGlzRWRnZSh1c2VyQWdlbnQpXG59XG5cbi8qKlxuICogVGhpcyBpcyBpbnRlbmRlZCB0byBiZSB1c2VkIHRvIGNvbXBvc2UgZXZlbnQgaGFuZGxlcnNcbiAqIFRoZXkgYXJlIGV4ZWN1dGVkIGluIG9yZGVyIHVudGlsIG9uZSBvZiB0aGVtIGNhbGxzIGBldmVudC5pc1Byb3BhZ2F0aW9uU3RvcHBlZCgpYC5cbiAqIE5vdGUgdGhhdCB0aGUgY2hlY2sgaXMgZG9uZSBvbiB0aGUgZmlyc3QgaW52b2tlIHRvbyxcbiAqIG1lYW5pbmcgdGhhdCBpZiBwcm9wYWdhdGlvbiB3YXMgc3RvcHBlZCBiZWZvcmUgaW52b2tpbmcgdGhlIGZucyxcbiAqIG5vIGhhbmRsZXJzIHdpbGwgYmUgZXhlY3V0ZWQuXG4gKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm5zIHRoZSBldmVudCBoYW5sZGVyIGZ1bmN0aW9uc1xuICogQHJldHVybiB7RnVuY3Rpb259IHRoZSBldmVudCBoYW5kbGVyIHRvIGFkZCB0byBhbiBlbGVtZW50XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb21wb3NlRXZlbnRIYW5kbGVycyguLi5mbnMpIHtcbiAgcmV0dXJuIChldmVudCwgLi4uYXJncykgPT5cbiAgICBmbnMuc29tZShmbiA9PiB7XG4gICAgICBpZiAoIWlzUHJvcGFnYXRpb25TdG9wcGVkKGV2ZW50KSAmJiBmbikge1xuICAgICAgICBmbihldmVudCwgLi4uYXJncylcbiAgICAgIH1cbiAgICAgIHJldHVybiBpc1Byb3BhZ2F0aW9uU3RvcHBlZChldmVudClcbiAgICB9KVxufVxuIiwiLyogZXNsaW50IHByZWZlci10ZW1wbGF0ZTogMCAqL1xuaW1wb3J0IFJlYWN0LCB7XG4gIGZvcndhcmRSZWYsXG4gIEZyYWdtZW50LFxuICB1c2VDYWxsYmFjayxcbiAgdXNlRWZmZWN0LFxuICB1c2VNZW1vLFxuICB1c2VSZWR1Y2VyLFxuICB1c2VSZWZcbn0gZnJvbSAncmVhY3QnXG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnXG5pbXBvcnQgeyBmcm9tRXZlbnQgfSBmcm9tICdmaWxlLXNlbGVjdG9yJ1xuaW1wb3J0IHtcbiAgYWxsRmlsZXNBY2NlcHRlZCxcbiAgY29tcG9zZUV2ZW50SGFuZGxlcnMsXG4gIGZpbGVBY2NlcHRlZCxcbiAgZmlsZU1hdGNoU2l6ZSxcbiAgaXNFdnRXaXRoRmlsZXMsXG4gIGlzSWVPckVkZ2UsXG4gIGlzUHJvcGFnYXRpb25TdG9wcGVkLFxuICBvbkRvY3VtZW50RHJhZ092ZXJcbn0gZnJvbSAnLi91dGlscy9pbmRleCdcblxuLyoqXG4gKiBDb252ZW5pZW5jZSB3cmFwcGVyIGNvbXBvbmVudCBmb3IgdGhlIGB1c2VEcm9wem9uZWAgaG9va1xuICpcbiAqIGBgYGpzeFxuICogPERyb3B6b25lPlxuICogICB7KHtnZXRSb290UHJvcHMsIGdldElucHV0UHJvcHN9KSA9PiAoXG4gKiAgICAgPGRpdiB7Li4uZ2V0Um9vdFByb3BzKCl9PlxuICogICAgICAgPGlucHV0IHsuLi5nZXRJbnB1dFByb3BzKCl9IC8+XG4gKiAgICAgICA8cD5EcmFnICduJyBkcm9wIHNvbWUgZmlsZXMgaGVyZSwgb3IgY2xpY2sgdG8gc2VsZWN0IGZpbGVzPC9wPlxuICogICAgIDwvZGl2PlxuICogICApfVxuICogPC9Ecm9wem9uZT5cbiAqIGBgYFxuICovXG5jb25zdCBEcm9wem9uZSA9IGZvcndhcmRSZWYoKHsgY2hpbGRyZW4sIC4uLnBhcmFtcyB9LCByZWYpID0+IHtcbiAgY29uc3QgeyBvcGVuLCAuLi5wcm9wcyB9ID0gdXNlRHJvcHpvbmUocGFyYW1zKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKHR5cGVvZiByZWYgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHJlZih7IG9wZW4gfSlcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiByZWYgPT09ICdvYmplY3QnICYmIHJlZiAhPT0gbnVsbCkge1xuICAgICAgcmVmLmN1cnJlbnQgPSB7IG9wZW4gfVxuICAgIH1cblxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBpZiAodHlwZW9mIHJlZiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICByZWYobnVsbClcbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHJlZiA9PT0gJ29iamVjdCcgJiYgcmVmICE9PSBudWxsKSB7XG4gICAgICAgIHJlZi5jdXJyZW50ID0gbnVsbFxuICAgICAgfVxuICAgIH1cbiAgfSwgW3JlZl0pXG5cbiAgLy8gVE9ETzogRmlndXJlIG91dCB3aHkgcmVhY3Qtc3R5bGVndWlkaXN0IGNhbm5vdCBjcmVhdGUgZG9jcyBpZiB3ZSBkb24ndCByZXR1cm4gYSBqc3ggZWxlbWVudFxuICByZXR1cm4gPEZyYWdtZW50PntjaGlsZHJlbih7IC4uLnByb3BzLCBvcGVuIH0pfTwvRnJhZ21lbnQ+XG59KVxuXG5Ecm9wem9uZS5kaXNwbGF5TmFtZSA9ICdEcm9wem9uZSdcbkRyb3B6b25lLnByb3BUeXBlcyA9IHtcbiAgLyoqXG4gICAqIFJlbmRlciBmdW5jdGlvbiB0aGF0IGV4cG9zZXMgdGhlIGRyb3B6b25lIHN0YXRlIGFuZCBwcm9wIGdldHRlciBmbnNcbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IHBhcmFtc1xuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBwYXJhbXMuZ2V0Um9vdFByb3BzIFJldHVybnMgdGhlIHByb3BzIHlvdSBzaG91bGQgYXBwbHkgdG8gdGhlIHJvb3QgZHJvcCBjb250YWluZXIgeW91IHJlbmRlclxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBwYXJhbXMuZ2V0SW5wdXRQcm9wcyBSZXR1cm5zIHRoZSBwcm9wcyB5b3Ugc2hvdWxkIGFwcGx5IHRvIGhpZGRlbiBmaWxlIGlucHV0IHlvdSByZW5kZXJcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gcGFyYW1zLm9wZW4gT3BlbiB0aGUgbmF0aXZlIGZpbGUgc2VsZWN0aW9uIGRpYWxvZ1xuICAgKiBAcGFyYW0ge2Jvb2xlYW59IHBhcmFtcy5pc0ZvY3VzZWQgRHJvcHpvbmUgYXJlYSBpcyBpbiBmb2N1c1xuICAgKiBAcGFyYW0ge2Jvb2xlYW59IHBhcmFtcy5pc0ZpbGVEaWFsb2dBY3RpdmUgRmlsZSBkaWFsb2cgaXMgb3BlbmVkXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gcGFyYW1zLmlzRHJhZ0FjdGl2ZSBBY3RpdmUgZHJhZyBpcyBpbiBwcm9ncmVzc1xuICAgKiBAcGFyYW0ge2Jvb2xlYW59IHBhcmFtcy5pc0RyYWdBY2NlcHQgRHJhZ2dlZCBmaWxlcyBhcmUgYWNjZXB0ZWRcbiAgICogQHBhcmFtIHtib29sZWFufSBwYXJhbXMuaXNEcmFnUmVqZWN0IFNvbWUgZHJhZ2dlZCBmaWxlcyBhcmUgcmVqZWN0ZWRcbiAgICogQHBhcmFtIHtGaWxlW119IHBhcmFtcy5kcmFnZ2VkRmlsZXMgRmlsZXMgaW4gYWN0aXZlIGRyYWdcbiAgICogQHBhcmFtIHtGaWxlW119IHBhcmFtcy5hY2NlcHRlZEZpbGVzIEFjY2VwdGVkIGZpbGVzXG4gICAqIEBwYXJhbSB7RmlsZVtdfSBwYXJhbXMucmVqZWN0ZWRGaWxlcyBSZWplY3RlZCBmaWxlc1xuICAgKi9cbiAgY2hpbGRyZW46IFByb3BUeXBlcy5mdW5jLFxuXG4gIC8qKlxuICAgKiBTZXQgYWNjZXB0ZWQgZmlsZSB0eXBlcy5cbiAgICogU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9va29uZXQvYXR0ci1hY2NlcHQgZm9yIG1vcmUgaW5mb3JtYXRpb24uXG4gICAqIEtlZXAgaW4gbWluZCB0aGF0IG1pbWUgdHlwZSBkZXRlcm1pbmF0aW9uIGlzIG5vdCByZWxpYWJsZSBhY3Jvc3MgcGxhdGZvcm1zLiBDU1YgZmlsZXMsXG4gICAqIGZvciBleGFtcGxlLCBhcmUgcmVwb3J0ZWQgYXMgdGV4dC9wbGFpbiB1bmRlciBtYWNPUyBidXQgYXMgYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsIHVuZGVyXG4gICAqIFdpbmRvd3MuIEluIHNvbWUgY2FzZXMgdGhlcmUgbWlnaHQgbm90IGJlIGEgbWltZSB0eXBlIHNldCBhdCBhbGwuXG4gICAqIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL3JlYWN0LWRyb3B6b25lL3JlYWN0LWRyb3B6b25lL2lzc3Vlcy8yNzZcbiAgICovXG4gIGFjY2VwdDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLnN0cmluZyldKSxcblxuICAvKipcbiAgICogQWxsb3cgZHJhZyAnbicgZHJvcCAob3Igc2VsZWN0aW9uIGZyb20gdGhlIGZpbGUgZGlhbG9nKSBvZiBtdWx0aXBsZSBmaWxlc1xuICAgKi9cbiAgbXVsdGlwbGU6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgKiBJZiBmYWxzZSwgYWxsb3cgZHJvcHBlZCBpdGVtcyB0byB0YWtlIG92ZXIgdGhlIGN1cnJlbnQgYnJvd3NlciB3aW5kb3dcbiAgICovXG4gIHByZXZlbnREcm9wT25Eb2N1bWVudDogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAqIElmIHRydWUsIGRpc2FibGVzIGNsaWNrIHRvIG9wZW4gdGhlIG5hdGl2ZSBmaWxlIHNlbGVjdGlvbiBkaWFsb2dcbiAgICovXG4gIG5vQ2xpY2s6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgKiBJZiB0cnVlLCBkaXNhYmxlcyBTUEFDRS9FTlRFUiB0byBvcGVuIHRoZSBuYXRpdmUgZmlsZSBzZWxlY3Rpb24gZGlhbG9nLlxuICAgKiBOb3RlIHRoYXQgaXQgYWxzbyBzdG9wcyB0cmFja2luZyB0aGUgZm9jdXMgc3RhdGUuXG4gICAqL1xuICBub0tleWJvYXJkOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICogSWYgdHJ1ZSwgZGlzYWJsZXMgZHJhZyAnbicgZHJvcFxuICAgKi9cbiAgbm9EcmFnOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICogSWYgdHJ1ZSwgc3RvcHMgZHJhZyBldmVudCBwcm9wYWdhdGlvbiB0byBwYXJlbnRzXG4gICAqL1xuICBub0RyYWdFdmVudHNCdWJibGluZzogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAqIE1pbmltdW0gZmlsZSBzaXplIChpbiBieXRlcylcbiAgICovXG4gIG1pblNpemU6IFByb3BUeXBlcy5udW1iZXIsXG5cbiAgLyoqXG4gICAqIE1heGltdW0gZmlsZSBzaXplIChpbiBieXRlcylcbiAgICovXG4gIG1heFNpemU6IFByb3BUeXBlcy5udW1iZXIsXG5cbiAgLyoqXG4gICAqIEVuYWJsZS9kaXNhYmxlIHRoZSBkcm9wem9uZVxuICAgKi9cbiAgZGlzYWJsZWQ6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgKiBVc2UgdGhpcyB0byBwcm92aWRlIGEgY3VzdG9tIGZpbGUgYWdncmVnYXRvclxuICAgKlxuICAgKiBAcGFyYW0geyhEcmFnRXZlbnR8RXZlbnQpfSBldmVudCBBIGRyYWcgZXZlbnQgb3IgaW5wdXQgY2hhbmdlIGV2ZW50IChpZiBmaWxlcyB3ZXJlIHNlbGVjdGVkIHZpYSB0aGUgZmlsZSBkaWFsb2cpXG4gICAqL1xuICBnZXRGaWxlc0Zyb21FdmVudDogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgLyoqXG4gICAqIENiIGZvciB3aGVuIGNsb3NpbmcgdGhlIGZpbGUgZGlhbG9nIHdpdGggbm8gc2VsZWN0aW9uXG4gICAqL1xuICBvbkZpbGVEaWFsb2dDYW5jZWw6IFByb3BUeXBlcy5mdW5jLFxuXG4gIC8qKlxuICAgKiBDYiBmb3Igd2hlbiB0aGUgYGRyYWdlbnRlcmAgZXZlbnQgb2NjdXJzLlxuICAgKlxuICAgKiBAcGFyYW0ge0RyYWdFdmVudH0gZXZlbnRcbiAgICovXG4gIG9uRHJhZ0VudGVyOiBQcm9wVHlwZXMuZnVuYyxcblxuICAvKipcbiAgICogQ2IgZm9yIHdoZW4gdGhlIGBkcmFnbGVhdmVgIGV2ZW50IG9jY3Vyc1xuICAgKlxuICAgKiBAcGFyYW0ge0RyYWdFdmVudH0gZXZlbnRcbiAgICovXG4gIG9uRHJhZ0xlYXZlOiBQcm9wVHlwZXMuZnVuYyxcblxuICAvKipcbiAgICogQ2IgZm9yIHdoZW4gdGhlIGBkcmFnb3ZlcmAgZXZlbnQgb2NjdXJzXG4gICAqXG4gICAqIEBwYXJhbSB7RHJhZ0V2ZW50fSBldmVudFxuICAgKi9cbiAgb25EcmFnT3ZlcjogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgLyoqXG4gICAqIENiIGZvciB3aGVuIHRoZSBgZHJvcGAgZXZlbnQgb2NjdXJzLlxuICAgKiBOb3RlIHRoYXQgdGhpcyBjYWxsYmFjayBpcyBpbnZva2VkIGFmdGVyIHRoZSBgZ2V0RmlsZXNGcm9tRXZlbnRgIGNhbGxiYWNrIGlzIGRvbmUuXG4gICAqXG4gICAqIEZpbGVzIGFyZSBhY2NlcHRlZCBvciByZWplY3RlZCBiYXNlZCBvbiB0aGUgYGFjY2VwdGAsIGBtdWx0aXBsZWAsIGBtaW5TaXplYCBhbmQgYG1heFNpemVgIHByb3BzLlxuICAgKiBgYWNjZXB0YCBtdXN0IGJlIGEgdmFsaWQgW01JTUUgdHlwZV0oaHR0cDovL3d3dy5pYW5hLm9yZy9hc3NpZ25tZW50cy9tZWRpYS10eXBlcy9tZWRpYS10eXBlcy54aHRtbCkgYWNjb3JkaW5nIHRvIFtpbnB1dCBlbGVtZW50IHNwZWNpZmljYXRpb25dKGh0dHBzOi8vd3d3LnczLm9yZy93aWtpL0hUTUwvRWxlbWVudHMvaW5wdXQvZmlsZSkgb3IgYSB2YWxpZCBmaWxlIGV4dGVuc2lvbi5cbiAgICogSWYgYG11bHRpcGxlYCBpcyBzZXQgdG8gZmFsc2UgYW5kIGFkZGl0aW9uYWwgZmlsZXMgYXJlIGRyb3BwcGVkLFxuICAgKiBhbGwgZmlsZXMgYmVzaWRlcyB0aGUgZmlyc3Qgd2lsbCBiZSByZWplY3RlZC5cbiAgICogQW55IGZpbGUgd2hpY2ggZG9lcyBub3QgaGF2ZSBhIHNpemUgaW4gdGhlIFtgbWluU2l6ZWAsIGBtYXhTaXplYF0gcmFuZ2UsIHdpbGwgYmUgcmVqZWN0ZWQgYXMgd2VsbC5cbiAgICpcbiAgICogTm90ZSB0aGF0IHRoZSBgb25Ecm9wYCBjYWxsYmFjayB3aWxsIGFsd2F5cyBiZSBpbnZva2VkIHJlZ2FyZGxlc3MgaWYgdGhlIGRyb3BwZWQgZmlsZXMgd2VyZSBhY2NlcHRlZCBvciByZWplY3RlZC5cbiAgICogSWYgeW91J2QgbGlrZSB0byByZWFjdCB0byBhIHNwZWNpZmljIHNjZW5hcmlvLCB1c2UgdGhlIGBvbkRyb3BBY2NlcHRlZGAvYG9uRHJvcFJlamVjdGVkYCBwcm9wcy5cbiAgICpcbiAgICogYG9uRHJvcGAgd2lsbCBwcm92aWRlIHlvdSB3aXRoIGFuIGFycmF5IG9mIFtGaWxlXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvRmlsZSkgb2JqZWN0cyB3aGljaCB5b3UgY2FuIHRoZW4gcHJvY2VzcyBhbmQgc2VuZCB0byBhIHNlcnZlci5cbiAgICogRm9yIGV4YW1wbGUsIHdpdGggW1N1cGVyQWdlbnRdKGh0dHBzOi8vZ2l0aHViLmNvbS92aXNpb25tZWRpYS9zdXBlcmFnZW50KSBhcyBhIGh0dHAvYWpheCBsaWJyYXJ5OlxuICAgKlxuICAgKiBgYGBqc1xuICAgKiBmdW5jdGlvbiBvbkRyb3AoYWNjZXB0ZWRGaWxlcykge1xuICAgKiAgIGNvbnN0IHJlcSA9IHJlcXVlc3QucG9zdCgnL3VwbG9hZCcpXG4gICAqICAgYWNjZXB0ZWRGaWxlcy5mb3JFYWNoKGZpbGUgPT4ge1xuICAgKiAgICAgcmVxLmF0dGFjaChmaWxlLm5hbWUsIGZpbGUpXG4gICAqICAgfSlcbiAgICogICByZXEuZW5kKGNhbGxiYWNrKVxuICAgKiB9XG4gICAqIGBgYFxuICAgKlxuICAgKiBAcGFyYW0ge0ZpbGVbXX0gYWNjZXB0ZWRGaWxlc1xuICAgKiBAcGFyYW0ge0ZpbGVbXX0gcmVqZWN0ZWRGaWxlc1xuICAgKiBAcGFyYW0geyhEcmFnRXZlbnR8RXZlbnQpfSBldmVudCBBIGRyYWcgZXZlbnQgb3IgaW5wdXQgY2hhbmdlIGV2ZW50IChpZiBmaWxlcyB3ZXJlIHNlbGVjdGVkIHZpYSB0aGUgZmlsZSBkaWFsb2cpXG4gICAqL1xuICBvbkRyb3A6IFByb3BUeXBlcy5mdW5jLFxuXG4gIC8qKlxuICAgKiBDYiBmb3Igd2hlbiB0aGUgYGRyb3BgIGV2ZW50IG9jY3Vycy5cbiAgICogTm90ZSB0aGF0IGlmIG5vIGZpbGVzIGFyZSBhY2NlcHRlZCwgdGhpcyBjYWxsYmFjayBpcyBub3QgaW52b2tlZC5cbiAgICpcbiAgICogQHBhcmFtIHtGaWxlW119IGZpbGVzXG4gICAqIEBwYXJhbSB7KERyYWdFdmVudHxFdmVudCl9IGV2ZW50XG4gICAqL1xuICBvbkRyb3BBY2NlcHRlZDogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgLyoqXG4gICAqIENiIGZvciB3aGVuIHRoZSBgZHJvcGAgZXZlbnQgb2NjdXJzLlxuICAgKiBOb3RlIHRoYXQgaWYgbm8gZmlsZXMgYXJlIHJlamVjdGVkLCB0aGlzIGNhbGxiYWNrIGlzIG5vdCBpbnZva2VkLlxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdFtdfSBmaWxlc1xuICAgKiBAcGFyYW0geyhEcmFnRXZlbnR8RXZlbnQpfSBldmVudFxuICAgKi9cbiAgb25Ecm9wUmVqZWN0ZWQ6IFByb3BUeXBlcy5mdW5jXG59XG5cbmV4cG9ydCBkZWZhdWx0IERyb3B6b25lXG5cbi8qKlxuICogQSBmdW5jdGlvbiB0aGF0IGlzIGludm9rZWQgZm9yIHRoZSBgZHJhZ2VudGVyYCxcbiAqIGBkcmFnb3ZlcmAgYW5kIGBkcmFnbGVhdmVgIGV2ZW50cy5cbiAqIEl0IGlzIG5vdCBpbnZva2VkIGlmIHRoZSBpdGVtcyBhcmUgbm90IGZpbGVzIChzdWNoIGFzIGxpbmssIHRleHQsIGV0Yy4pLlxuICpcbiAqIEBjYWxsYmFjayBkcmFnQ2JcbiAqIEBwYXJhbSB7RHJhZ0V2ZW50fSBldmVudFxuICovXG5cbi8qKlxuICogQSBmdW5jdGlvbiB0aGF0IGlzIGludm9rZWQgZm9yIHRoZSBgZHJvcGAgb3IgaW5wdXQgY2hhbmdlIGV2ZW50LlxuICogSXQgaXMgbm90IGludm9rZWQgaWYgdGhlIGl0ZW1zIGFyZSBub3QgZmlsZXMgKHN1Y2ggYXMgbGluaywgdGV4dCwgZXRjLikuXG4gKlxuICogQGNhbGxiYWNrIGRyb3BDYlxuICogQHBhcmFtIHtGaWxlW119IGFjY2VwdGVkRmlsZXMgTGlzdCBvZiBhY2NlcHRlZCBmaWxlc1xuICogQHBhcmFtIHtGaWxlW119IHJlamVjdGVkRmlsZXMgTGlzdCBvZiByZWplY3RlZCBmaWxlc1xuICogQHBhcmFtIHsoRHJhZ0V2ZW50fEV2ZW50KX0gZXZlbnQgQSBkcmFnIGV2ZW50IG9yIGlucHV0IGNoYW5nZSBldmVudCAoaWYgZmlsZXMgd2VyZSBzZWxlY3RlZCB2aWEgdGhlIGZpbGUgZGlhbG9nKVxuICovXG5cbi8qKlxuICogQSBmdW5jdGlvbiB0aGF0IGlzIGludm9rZWQgZm9yIHRoZSBgZHJvcGAgb3IgaW5wdXQgY2hhbmdlIGV2ZW50LlxuICogSXQgaXMgbm90IGludm9rZWQgaWYgdGhlIGl0ZW1zIGFyZSBmaWxlcyAoc3VjaCBhcyBsaW5rLCB0ZXh0LCBldGMuKS5cbiAqXG4gKiBAY2FsbGJhY2sgZHJvcEFjY2VwdGVkQ2JcbiAqIEBwYXJhbSB7RmlsZVtdfSBmaWxlcyBMaXN0IG9mIGFjY2VwdGVkIGZpbGVzIHRoYXQgbWVldCB0aGUgZ2l2ZW4gY3JpdGVyaWFcbiAqIChgYWNjZXB0YCwgYG11bHRpcGxlYCwgYG1pblNpemVgLCBgbWF4U2l6ZWApXG4gKiBAcGFyYW0geyhEcmFnRXZlbnR8RXZlbnQpfSBldmVudCBBIGRyYWcgZXZlbnQgb3IgaW5wdXQgY2hhbmdlIGV2ZW50IChpZiBmaWxlcyB3ZXJlIHNlbGVjdGVkIHZpYSB0aGUgZmlsZSBkaWFsb2cpXG4gKi9cblxuLyoqXG4gKiBBIGZ1bmN0aW9uIHRoYXQgaXMgaW52b2tlZCBmb3IgdGhlIGBkcm9wYCBvciBpbnB1dCBjaGFuZ2UgZXZlbnQuXG4gKlxuICogQGNhbGxiYWNrIGRyb3BSZWplY3RlZENiXG4gKiBAcGFyYW0ge0ZpbGVbXX0gZmlsZXMgTGlzdCBvZiByZWplY3RlZCBmaWxlcyB0aGF0IGRvIG5vdCBtZWV0IHRoZSBnaXZlbiBjcml0ZXJpYVxuICogKGBhY2NlcHRgLCBgbXVsdGlwbGVgLCBgbWluU2l6ZWAsIGBtYXhTaXplYClcbiAqIEBwYXJhbSB7KERyYWdFdmVudHxFdmVudCl9IGV2ZW50IEEgZHJhZyBldmVudCBvciBpbnB1dCBjaGFuZ2UgZXZlbnQgKGlmIGZpbGVzIHdlcmUgc2VsZWN0ZWQgdmlhIHRoZSBmaWxlIGRpYWxvZylcbiAqL1xuXG4vKipcbiAqIEEgZnVuY3Rpb24gdGhhdCBpcyB1c2VkIGFnZ3JlZ2F0ZSBmaWxlcyxcbiAqIGluIGEgYXN5bmNocm9ub3VzIGZhc2hpb24sIGZyb20gZHJhZyBvciBpbnB1dCBjaGFuZ2UgZXZlbnRzLlxuICpcbiAqIEBjYWxsYmFjayBnZXRGaWxlc0Zyb21FdmVudFxuICogQHBhcmFtIHsoRHJhZ0V2ZW50fEV2ZW50KX0gZXZlbnQgQSBkcmFnIGV2ZW50IG9yIGlucHV0IGNoYW5nZSBldmVudCAoaWYgZmlsZXMgd2VyZSBzZWxlY3RlZCB2aWEgdGhlIGZpbGUgZGlhbG9nKVxuICogQHJldHVybnMgeyhGaWxlW118UHJvbWlzZTxGaWxlW10+KX1cbiAqL1xuXG4vKipcbiAqIEFuIG9iamVjdCB3aXRoIHRoZSBjdXJyZW50IGRyb3B6b25lIHN0YXRlIGFuZCBzb21lIGhlbHBlciBmdW5jdGlvbnMuXG4gKlxuICogQHR5cGVkZWYge29iamVjdH0gRHJvcHpvbmVTdGF0ZVxuICogQHByb3BlcnR5IHtGdW5jdGlvbn0gZ2V0Um9vdFByb3BzIFJldHVybnMgdGhlIHByb3BzIHlvdSBzaG91bGQgYXBwbHkgdG8gdGhlIHJvb3QgZHJvcCBjb250YWluZXIgeW91IHJlbmRlclxuICogQHByb3BlcnR5IHtGdW5jdGlvbn0gZ2V0SW5wdXRQcm9wcyBSZXR1cm5zIHRoZSBwcm9wcyB5b3Ugc2hvdWxkIGFwcGx5IHRvIGhpZGRlbiBmaWxlIGlucHV0IHlvdSByZW5kZXJcbiAqIEBwcm9wZXJ0eSB7RnVuY3Rpb259IG9wZW4gT3BlbiB0aGUgbmF0aXZlIGZpbGUgc2VsZWN0aW9uIGRpYWxvZ1xuICogQHByb3BlcnR5IHtib29sZWFufSBpc0ZvY3VzZWQgRHJvcHpvbmUgYXJlYSBpcyBpbiBmb2N1c1xuICogQHByb3BlcnR5IHtib29sZWFufSBpc0ZpbGVEaWFsb2dBY3RpdmUgRmlsZSBkaWFsb2cgaXMgb3BlbmVkXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IGlzRHJhZ0FjdGl2ZSBBY3RpdmUgZHJhZyBpcyBpbiBwcm9ncmVzc1xuICogQHByb3BlcnR5IHtib29sZWFufSBpc0RyYWdBY2NlcHQgRHJhZ2dlZCBmaWxlcyBhcmUgYWNjZXB0ZWRcbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gaXNEcmFnUmVqZWN0IFNvbWUgZHJhZ2dlZCBmaWxlcyBhcmUgcmVqZWN0ZWRcbiAqIEBwcm9wZXJ0eSB7RmlsZVtdfSBkcmFnZ2VkRmlsZXMgRmlsZXMgaW4gYWN0aXZlIGRyYWdcbiAqIEBwcm9wZXJ0eSB7RmlsZVtdfSBhY2NlcHRlZEZpbGVzIEFjY2VwdGVkIGZpbGVzXG4gKiBAcHJvcGVydHkge0ZpbGVbXX0gcmVqZWN0ZWRGaWxlcyBSZWplY3RlZCBmaWxlc1xuICovXG5cbmNvbnN0IGluaXRpYWxTdGF0ZSA9IHtcbiAgaXNGb2N1c2VkOiBmYWxzZSxcbiAgaXNGaWxlRGlhbG9nQWN0aXZlOiBmYWxzZSxcbiAgaXNEcmFnQWN0aXZlOiBmYWxzZSxcbiAgaXNEcmFnQWNjZXB0OiBmYWxzZSxcbiAgaXNEcmFnUmVqZWN0OiBmYWxzZSxcbiAgZHJhZ2dlZEZpbGVzOiBbXSxcbiAgYWNjZXB0ZWRGaWxlczogW10sXG4gIHJlamVjdGVkRmlsZXM6IFtdXG59XG5cbi8qKlxuICogQSBSZWFjdCBob29rIHRoYXQgY3JlYXRlcyBhIGRyYWcgJ24nIGRyb3AgYXJlYS5cbiAqXG4gKiBgYGBqc3hcbiAqIGZ1bmN0aW9uIE15RHJvcHpvbmUocHJvcHMpIHtcbiAqICAgY29uc3Qge2dldFJvb3RQcm9wcywgZ2V0SW5wdXRQcm9wc30gPSB1c2VEcm9wem9uZSh7XG4gKiAgICAgb25Ecm9wOiBhY2NlcHRlZEZpbGVzID0+IHtcbiAqICAgICAgIC8vIGRvIHNvbWV0aGluZyB3aXRoIHRoZSBGaWxlIG9iamVjdHMsIGUuZy4gdXBsb2FkIHRvIHNvbWUgc2VydmVyXG4gKiAgICAgfVxuICogICB9KTtcbiAqICAgcmV0dXJuIChcbiAqICAgICA8ZGl2IHsuLi5nZXRSb290UHJvcHMoKX0+XG4gKiAgICAgICA8aW5wdXQgey4uLmdldElucHV0UHJvcHMoKX0gLz5cbiAqICAgICAgIDxwPkRyYWcgYW5kIGRyb3Agc29tZSBmaWxlcyBoZXJlLCBvciBjbGljayB0byBzZWxlY3QgZmlsZXM8L3A+XG4gKiAgICAgPC9kaXY+XG4gKiAgIClcbiAqIH1cbiAqIGBgYFxuICpcbiAqIEBmdW5jdGlvbiB1c2VEcm9wem9uZVxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBwcm9wc1xuICogQHBhcmFtIHtzdHJpbmd8c3RyaW5nW119IFtwcm9wcy5hY2NlcHRdIFNldCBhY2NlcHRlZCBmaWxlIHR5cGVzLlxuICogU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9va29uZXQvYXR0ci1hY2NlcHQgZm9yIG1vcmUgaW5mb3JtYXRpb24uXG4gKiBLZWVwIGluIG1pbmQgdGhhdCBtaW1lIHR5cGUgZGV0ZXJtaW5hdGlvbiBpcyBub3QgcmVsaWFibGUgYWNyb3NzIHBsYXRmb3Jtcy4gQ1NWIGZpbGVzLFxuICogZm9yIGV4YW1wbGUsIGFyZSByZXBvcnRlZCBhcyB0ZXh0L3BsYWluIHVuZGVyIG1hY09TIGJ1dCBhcyBhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwgdW5kZXJcbiAqIFdpbmRvd3MuIEluIHNvbWUgY2FzZXMgdGhlcmUgbWlnaHQgbm90IGJlIGEgbWltZSB0eXBlIHNldCBhdCBhbGwuXG4gKiBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9yZWFjdC1kcm9wem9uZS9yZWFjdC1kcm9wem9uZS9pc3N1ZXMvMjc2XG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtwcm9wcy5tdWx0aXBsZT10cnVlXSBBbGxvdyBkcmFnICduJyBkcm9wIChvciBzZWxlY3Rpb24gZnJvbSB0aGUgZmlsZSBkaWFsb2cpIG9mIG11bHRpcGxlIGZpbGVzXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtwcm9wcy5wcmV2ZW50RHJvcE9uRG9jdW1lbnQ9dHJ1ZV0gSWYgZmFsc2UsIGFsbG93IGRyb3BwZWQgaXRlbXMgdG8gdGFrZSBvdmVyIHRoZSBjdXJyZW50IGJyb3dzZXIgd2luZG93XG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtwcm9wcy5ub0NsaWNrPWZhbHNlXSBJZiB0cnVlLCBkaXNhYmxlcyBjbGljayB0byBvcGVuIHRoZSBuYXRpdmUgZmlsZSBzZWxlY3Rpb24gZGlhbG9nXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtwcm9wcy5ub0tleWJvYXJkPWZhbHNlXSBJZiB0cnVlLCBkaXNhYmxlcyBTUEFDRS9FTlRFUiB0byBvcGVuIHRoZSBuYXRpdmUgZmlsZSBzZWxlY3Rpb24gZGlhbG9nLlxuICogTm90ZSB0aGF0IGl0IGFsc28gc3RvcHMgdHJhY2tpbmcgdGhlIGZvY3VzIHN0YXRlLlxuICogQHBhcmFtIHtib29sZWFufSBbcHJvcHMubm9EcmFnPWZhbHNlXSBJZiB0cnVlLCBkaXNhYmxlcyBkcmFnICduJyBkcm9wXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtwcm9wcy5ub0RyYWdFdmVudHNCdWJibGluZz1mYWxzZV0gSWYgdHJ1ZSwgc3RvcHMgZHJhZyBldmVudCBwcm9wYWdhdGlvbiB0byBwYXJlbnRzXG4gKiBAcGFyYW0ge251bWJlcn0gW3Byb3BzLm1pblNpemU9MF0gTWluaW11bSBmaWxlIHNpemUgKGluIGJ5dGVzKVxuICogQHBhcmFtIHtudW1iZXJ9IFtwcm9wcy5tYXhTaXplPUluZmluaXR5XSBNYXhpbXVtIGZpbGUgc2l6ZSAoaW4gYnl0ZXMpXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtwcm9wcy5kaXNhYmxlZD1mYWxzZV0gRW5hYmxlL2Rpc2FibGUgdGhlIGRyb3B6b25lXG4gKiBAcGFyYW0ge2dldEZpbGVzRnJvbUV2ZW50fSBbcHJvcHMuZ2V0RmlsZXNGcm9tRXZlbnRdIFVzZSB0aGlzIHRvIHByb3ZpZGUgYSBjdXN0b20gZmlsZSBhZ2dyZWdhdG9yXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbcHJvcHMub25GaWxlRGlhbG9nQ2FuY2VsXSBDYiBmb3Igd2hlbiBjbG9zaW5nIHRoZSBmaWxlIGRpYWxvZyB3aXRoIG5vIHNlbGVjdGlvblxuICogQHBhcmFtIHtkcmFnQ2J9IFtwcm9wcy5vbkRyYWdFbnRlcl0gQ2IgZm9yIHdoZW4gdGhlIGBkcmFnZW50ZXJgIGV2ZW50IG9jY3Vycy5cbiAqIEBwYXJhbSB7ZHJhZ0NifSBbcHJvcHMub25EcmFnTGVhdmVdIENiIGZvciB3aGVuIHRoZSBgZHJhZ2xlYXZlYCBldmVudCBvY2N1cnNcbiAqIEBwYXJhbSB7ZHJhZ0NifSBbcHJvcHMub25EcmFnT3Zlcl0gQ2IgZm9yIHdoZW4gdGhlIGBkcmFnb3ZlcmAgZXZlbnQgb2NjdXJzXG4gKiBAcGFyYW0ge2Ryb3BDYn0gW3Byb3BzLm9uRHJvcF0gQ2IgZm9yIHdoZW4gdGhlIGBkcm9wYCBldmVudCBvY2N1cnMuXG4gKiBOb3RlIHRoYXQgdGhpcyBjYWxsYmFjayBpcyBpbnZva2VkIGFmdGVyIHRoZSBgZ2V0RmlsZXNGcm9tRXZlbnRgIGNhbGxiYWNrIGlzIGRvbmUuXG4gKlxuICogRmlsZXMgYXJlIGFjY2VwdGVkIG9yIHJlamVjdGVkIGJhc2VkIG9uIHRoZSBgYWNjZXB0YCwgYG11bHRpcGxlYCwgYG1pblNpemVgIGFuZCBgbWF4U2l6ZWAgcHJvcHMuXG4gKiBgYWNjZXB0YCBtdXN0IGJlIGEgdmFsaWQgW01JTUUgdHlwZV0oaHR0cDovL3d3dy5pYW5hLm9yZy9hc3NpZ25tZW50cy9tZWRpYS10eXBlcy9tZWRpYS10eXBlcy54aHRtbCkgYWNjb3JkaW5nIHRvIFtpbnB1dCBlbGVtZW50IHNwZWNpZmljYXRpb25dKGh0dHBzOi8vd3d3LnczLm9yZy93aWtpL0hUTUwvRWxlbWVudHMvaW5wdXQvZmlsZSkgb3IgYSB2YWxpZCBmaWxlIGV4dGVuc2lvbi5cbiAqIElmIGBtdWx0aXBsZWAgaXMgc2V0IHRvIGZhbHNlIGFuZCBhZGRpdGlvbmFsIGZpbGVzIGFyZSBkcm9wcHBlZCxcbiAqIGFsbCBmaWxlcyBiZXNpZGVzIHRoZSBmaXJzdCB3aWxsIGJlIHJlamVjdGVkLlxuICogQW55IGZpbGUgd2hpY2ggZG9lcyBub3QgaGF2ZSBhIHNpemUgaW4gdGhlIFtgbWluU2l6ZWAsIGBtYXhTaXplYF0gcmFuZ2UsIHdpbGwgYmUgcmVqZWN0ZWQgYXMgd2VsbC5cbiAqXG4gKiBOb3RlIHRoYXQgdGhlIGBvbkRyb3BgIGNhbGxiYWNrIHdpbGwgYWx3YXlzIGJlIGludm9rZWQgcmVnYXJkbGVzcyBpZiB0aGUgZHJvcHBlZCBmaWxlcyB3ZXJlIGFjY2VwdGVkIG9yIHJlamVjdGVkLlxuICogSWYgeW91J2QgbGlrZSB0byByZWFjdCB0byBhIHNwZWNpZmljIHNjZW5hcmlvLCB1c2UgdGhlIGBvbkRyb3BBY2NlcHRlZGAvYG9uRHJvcFJlamVjdGVkYCBwcm9wcy5cbiAqXG4gKiBgb25Ecm9wYCB3aWxsIHByb3ZpZGUgeW91IHdpdGggYW4gYXJyYXkgb2YgW0ZpbGVdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9GaWxlKSBvYmplY3RzIHdoaWNoIHlvdSBjYW4gdGhlbiBwcm9jZXNzIGFuZCBzZW5kIHRvIGEgc2VydmVyLlxuICogRm9yIGV4YW1wbGUsIHdpdGggW1N1cGVyQWdlbnRdKGh0dHBzOi8vZ2l0aHViLmNvbS92aXNpb25tZWRpYS9zdXBlcmFnZW50KSBhcyBhIGh0dHAvYWpheCBsaWJyYXJ5OlxuICpcbiAqIGBgYGpzXG4gKiBmdW5jdGlvbiBvbkRyb3AoYWNjZXB0ZWRGaWxlcykge1xuICogICBjb25zdCByZXEgPSByZXF1ZXN0LnBvc3QoJy91cGxvYWQnKVxuICogICBhY2NlcHRlZEZpbGVzLmZvckVhY2goZmlsZSA9PiB7XG4gKiAgICAgcmVxLmF0dGFjaChmaWxlLm5hbWUsIGZpbGUpXG4gKiAgIH0pXG4gKiAgIHJlcS5lbmQoY2FsbGJhY2spXG4gKiB9XG4gKiBgYGBcbiAqIEBwYXJhbSB7ZHJvcEFjY2VwdGVkQ2J9IFtwcm9wcy5vbkRyb3BBY2NlcHRlZF1cbiAqIEBwYXJhbSB7ZHJvcFJlamVjdGVkQ2J9IFtwcm9wcy5vbkRyb3BSZWplY3RlZF1cbiAqXG4gKiBAcmV0dXJucyB7RHJvcHpvbmVTdGF0ZX1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZURyb3B6b25lKHtcbiAgYWNjZXB0LFxuICBkaXNhYmxlZCA9IGZhbHNlLFxuICBnZXRGaWxlc0Zyb21FdmVudCA9IGZyb21FdmVudCxcbiAgbWF4U2l6ZSA9IEluZmluaXR5LFxuICBtaW5TaXplID0gMCxcbiAgbXVsdGlwbGUgPSB0cnVlLFxuICBvbkRyYWdFbnRlcixcbiAgb25EcmFnTGVhdmUsXG4gIG9uRHJhZ092ZXIsXG4gIG9uRHJvcCxcbiAgb25Ecm9wQWNjZXB0ZWQsXG4gIG9uRHJvcFJlamVjdGVkLFxuICBvbkZpbGVEaWFsb2dDYW5jZWwsXG4gIHByZXZlbnREcm9wT25Eb2N1bWVudCA9IHRydWUsXG4gIG5vQ2xpY2sgPSBmYWxzZSxcbiAgbm9LZXlib2FyZCA9IGZhbHNlLFxuICBub0RyYWcgPSBmYWxzZSxcbiAgbm9EcmFnRXZlbnRzQnViYmxpbmcgPSBmYWxzZVxufSA9IHt9KSB7XG4gIGNvbnN0IHJvb3RSZWYgPSB1c2VSZWYobnVsbClcbiAgY29uc3QgaW5wdXRSZWYgPSB1c2VSZWYobnVsbClcblxuICBjb25zdCBbc3RhdGUsIGRpc3BhdGNoXSA9IHVzZVJlZHVjZXIocmVkdWNlciwgaW5pdGlhbFN0YXRlKVxuICBjb25zdCB7IGlzRm9jdXNlZCwgaXNGaWxlRGlhbG9nQWN0aXZlLCBkcmFnZ2VkRmlsZXMgfSA9IHN0YXRlXG5cbiAgLy8gRm4gZm9yIG9wZW5pbmcgdGhlIGZpbGUgZGlhbG9nIHByb2dyYW1tYXRpY2FsbHlcbiAgY29uc3Qgb3BlbkZpbGVEaWFsb2cgPSAoKSA9PiB7XG4gICAgaWYgKGlucHV0UmVmLmN1cnJlbnQpIHtcbiAgICAgIGRpc3BhdGNoKHsgdHlwZTogJ29wZW5EaWFsb2cnIH0pXG4gICAgICBpbnB1dFJlZi5jdXJyZW50LnZhbHVlID0gbnVsbFxuICAgICAgaW5wdXRSZWYuY3VycmVudC5jbGljaygpXG4gICAgfVxuICB9XG5cbiAgLy8gVXBkYXRlIGZpbGUgZGlhbG9nIGFjdGl2ZSBzdGF0ZSB3aGVuIHRoZSB3aW5kb3cgaXMgZm9jdXNlZCBvblxuICBjb25zdCBvbldpbmRvd0ZvY3VzID0gKCkgPT4ge1xuICAgIC8vIEV4ZWN1dGUgdGhlIHRpbWVvdXQgb25seSBpZiB0aGUgZmlsZSBkaWFsb2cgaXMgb3BlbmVkIGluIHRoZSBicm93c2VyXG4gICAgaWYgKGlzRmlsZURpYWxvZ0FjdGl2ZSkge1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIGlmIChpbnB1dFJlZi5jdXJyZW50KSB7XG4gICAgICAgICAgY29uc3QgeyBmaWxlcyB9ID0gaW5wdXRSZWYuY3VycmVudFxuXG4gICAgICAgICAgaWYgKCFmaWxlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGRpc3BhdGNoKHsgdHlwZTogJ2Nsb3NlRGlhbG9nJyB9KVxuXG4gICAgICAgICAgICBpZiAodHlwZW9mIG9uRmlsZURpYWxvZ0NhbmNlbCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICBvbkZpbGVEaWFsb2dDYW5jZWwoKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSwgMzAwKVxuICAgIH1cbiAgfVxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdmb2N1cycsIG9uV2luZG93Rm9jdXMsIGZhbHNlKVxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignZm9jdXMnLCBvbldpbmRvd0ZvY3VzLCBmYWxzZSlcbiAgICB9XG4gIH0sIFtpbnB1dFJlZiwgaXNGaWxlRGlhbG9nQWN0aXZlLCBvbkZpbGVEaWFsb2dDYW5jZWxdKVxuXG4gIC8vIENiIHRvIG9wZW4gdGhlIGZpbGUgZGlhbG9nIHdoZW4gU1BBQ0UvRU5URVIgb2NjdXJzIG9uIHRoZSBkcm9wem9uZVxuICBjb25zdCBvbktleURvd25DYiA9IHVzZUNhbGxiYWNrKFxuICAgIGV2ZW50ID0+IHtcbiAgICAgIC8vIElnbm9yZSBrZXlib2FyZCBldmVudHMgYnViYmxpbmcgdXAgdGhlIERPTSB0cmVlXG4gICAgICBpZiAoIXJvb3RSZWYuY3VycmVudCB8fCAhcm9vdFJlZi5jdXJyZW50LmlzRXF1YWxOb2RlKGV2ZW50LnRhcmdldCkpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGlmIChldmVudC5rZXlDb2RlID09PSAzMiB8fCBldmVudC5rZXlDb2RlID09PSAxMykge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpXG4gICAgICAgIG9wZW5GaWxlRGlhbG9nKClcbiAgICAgIH1cbiAgICB9LFxuICAgIFtyb290UmVmLCBpbnB1dFJlZl1cbiAgKVxuXG4gIC8vIFVwZGF0ZSBmb2N1cyBzdGF0ZSBmb3IgdGhlIGRyb3B6b25lXG4gIGNvbnN0IG9uRm9jdXNDYiA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBkaXNwYXRjaCh7IHR5cGU6ICdmb2N1cycgfSlcbiAgfSwgW10pXG4gIGNvbnN0IG9uQmx1ckNiID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGRpc3BhdGNoKHsgdHlwZTogJ2JsdXInIH0pXG4gIH0sIFtdKVxuXG4gIC8vIENiIHRvIG9wZW4gdGhlIGZpbGUgZGlhbG9nIHdoZW4gY2xpY2sgb2NjdXJzIG9uIHRoZSBkcm9wem9uZVxuICBjb25zdCBvbkNsaWNrQ2IgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgaWYgKG5vQ2xpY2spIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIC8vIEluIElFMTEvRWRnZSB0aGUgZmlsZS1icm93c2VyIGRpYWxvZyBpcyBibG9ja2luZywgdGhlcmVmb3JlLCB1c2Ugc2V0VGltZW91dCgpXG4gICAgLy8gdG8gZW5zdXJlIFJlYWN0IGNhbiBoYW5kbGUgc3RhdGUgY2hhbmdlc1xuICAgIC8vIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL3JlYWN0LWRyb3B6b25lL3JlYWN0LWRyb3B6b25lL2lzc3Vlcy80NTBcbiAgICBpZiAoaXNJZU9yRWRnZSgpKSB7XG4gICAgICBzZXRUaW1lb3V0KG9wZW5GaWxlRGlhbG9nLCAwKVxuICAgIH0gZWxzZSB7XG4gICAgICBvcGVuRmlsZURpYWxvZygpXG4gICAgfVxuICB9LCBbaW5wdXRSZWYsIG5vQ2xpY2tdKVxuXG4gIGNvbnN0IGRyYWdUYXJnZXRzUmVmID0gdXNlUmVmKFtdKVxuICBjb25zdCBvbkRvY3VtZW50RHJvcCA9IGV2ZW50ID0+IHtcbiAgICBpZiAocm9vdFJlZi5jdXJyZW50ICYmIHJvb3RSZWYuY3VycmVudC5jb250YWlucyhldmVudC50YXJnZXQpKSB7XG4gICAgICAvLyBJZiB3ZSBpbnRlcmNlcHRlZCBhbiBldmVudCBmb3Igb3VyIGluc3RhbmNlLCBsZXQgaXQgcHJvcGFnYXRlIGRvd24gdG8gdGhlIGluc3RhbmNlJ3Mgb25Ecm9wIGhhbmRsZXJcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpXG4gICAgZHJhZ1RhcmdldHNSZWYuY3VycmVudCA9IFtdXG4gIH1cblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChwcmV2ZW50RHJvcE9uRG9jdW1lbnQpIHtcbiAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2RyYWdvdmVyJywgb25Eb2N1bWVudERyYWdPdmVyLCBmYWxzZSlcbiAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2Ryb3AnLCBvbkRvY3VtZW50RHJvcCwgZmFsc2UpXG4gICAgfVxuXG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGlmIChwcmV2ZW50RHJvcE9uRG9jdW1lbnQpIHtcbiAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignZHJhZ292ZXInLCBvbkRvY3VtZW50RHJhZ092ZXIpXG4gICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2Ryb3AnLCBvbkRvY3VtZW50RHJvcClcbiAgICAgIH1cbiAgICB9XG4gIH0sIFtyb290UmVmLCBwcmV2ZW50RHJvcE9uRG9jdW1lbnRdKVxuXG4gIGNvbnN0IG9uRHJhZ0VudGVyQ2IgPSB1c2VDYWxsYmFjayhcbiAgICBldmVudCA9PiB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpXG4gICAgICAvLyBQZXJzaXN0IGhlcmUgYmVjYXVzZSB3ZSBuZWVkIHRoZSBldmVudCBsYXRlciBhZnRlciBnZXRGaWxlc0Zyb21FdmVudCgpIGlzIGRvbmVcbiAgICAgIGV2ZW50LnBlcnNpc3QoKVxuICAgICAgc3RvcFByb3BhZ2F0aW9uKGV2ZW50KVxuXG4gICAgICAvLyBDb3VudCB0aGUgZHJvcHpvbmUgYW5kIGFueSBjaGlsZHJlbiB0aGF0IGFyZSBlbnRlcmVkLlxuICAgICAgaWYgKGRyYWdUYXJnZXRzUmVmLmN1cnJlbnQuaW5kZXhPZihldmVudC50YXJnZXQpID09PSAtMSkge1xuICAgICAgICBkcmFnVGFyZ2V0c1JlZi5jdXJyZW50ID0gWy4uLmRyYWdUYXJnZXRzUmVmLmN1cnJlbnQsIGV2ZW50LnRhcmdldF1cbiAgICAgIH1cblxuICAgICAgaWYgKGlzRXZ0V2l0aEZpbGVzKGV2ZW50KSkge1xuICAgICAgICBQcm9taXNlLnJlc29sdmUoZ2V0RmlsZXNGcm9tRXZlbnQoZXZlbnQpKS50aGVuKGRyYWdnZWRGaWxlcyA9PiB7XG4gICAgICAgICAgaWYgKGlzUHJvcGFnYXRpb25TdG9wcGVkKGV2ZW50KSAmJiAhbm9EcmFnRXZlbnRzQnViYmxpbmcpIHtcbiAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgIH1cblxuICAgICAgICAgIGRpc3BhdGNoKHtcbiAgICAgICAgICAgIGRyYWdnZWRGaWxlcyxcbiAgICAgICAgICAgIGlzRHJhZ0FjdGl2ZTogdHJ1ZSxcbiAgICAgICAgICAgIHR5cGU6ICdzZXREcmFnZ2VkRmlsZXMnXG4gICAgICAgICAgfSlcblxuICAgICAgICAgIGlmIChvbkRyYWdFbnRlcikge1xuICAgICAgICAgICAgb25EcmFnRW50ZXIoZXZlbnQpXG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgfVxuICAgIH0sXG4gICAgW2dldEZpbGVzRnJvbUV2ZW50LCBvbkRyYWdFbnRlciwgbm9EcmFnRXZlbnRzQnViYmxpbmddXG4gIClcblxuICBjb25zdCBvbkRyYWdPdmVyQ2IgPSB1c2VDYWxsYmFjayhcbiAgICBldmVudCA9PiB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpXG4gICAgICBldmVudC5wZXJzaXN0KClcbiAgICAgIHN0b3BQcm9wYWdhdGlvbihldmVudClcblxuICAgICAgaWYgKGV2ZW50LmRhdGFUcmFuc2Zlcikge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGV2ZW50LmRhdGFUcmFuc2Zlci5kcm9wRWZmZWN0ID0gJ2NvcHknXG4gICAgICAgIH0gY2F0Y2gge30gLyogZXNsaW50LWRpc2FibGUtbGluZSBuby1lbXB0eSAqL1xuICAgICAgfVxuXG4gICAgICBpZiAoaXNFdnRXaXRoRmlsZXMoZXZlbnQpICYmIG9uRHJhZ092ZXIpIHtcbiAgICAgICAgb25EcmFnT3ZlcihldmVudClcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfSxcbiAgICBbb25EcmFnT3Zlciwgbm9EcmFnRXZlbnRzQnViYmxpbmddXG4gIClcblxuICBjb25zdCBvbkRyYWdMZWF2ZUNiID0gdXNlQ2FsbGJhY2soXG4gICAgZXZlbnQgPT4ge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKVxuICAgICAgZXZlbnQucGVyc2lzdCgpXG4gICAgICBzdG9wUHJvcGFnYXRpb24oZXZlbnQpXG5cbiAgICAgIC8vIE9ubHkgZGVhY3RpdmF0ZSBvbmNlIHRoZSBkcm9wem9uZSBhbmQgYWxsIGNoaWxkcmVuIGhhdmUgYmVlbiBsZWZ0XG4gICAgICBjb25zdCB0YXJnZXRzID0gZHJhZ1RhcmdldHNSZWYuY3VycmVudC5maWx0ZXIoXG4gICAgICAgIHRhcmdldCA9PiB0YXJnZXQgIT09IGV2ZW50LnRhcmdldCAmJiByb290UmVmLmN1cnJlbnQgJiYgcm9vdFJlZi5jdXJyZW50LmNvbnRhaW5zKHRhcmdldClcbiAgICAgIClcbiAgICAgIGRyYWdUYXJnZXRzUmVmLmN1cnJlbnQgPSB0YXJnZXRzXG4gICAgICBpZiAodGFyZ2V0cy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBkaXNwYXRjaCh7XG4gICAgICAgIGlzRHJhZ0FjdGl2ZTogZmFsc2UsXG4gICAgICAgIHR5cGU6ICdzZXREcmFnZ2VkRmlsZXMnLFxuICAgICAgICBkcmFnZ2VkRmlsZXM6IFtdXG4gICAgICB9KVxuXG4gICAgICBpZiAoaXNFdnRXaXRoRmlsZXMoZXZlbnQpICYmIG9uRHJhZ0xlYXZlKSB7XG4gICAgICAgIG9uRHJhZ0xlYXZlKGV2ZW50KVxuICAgICAgfVxuICAgIH0sXG4gICAgW3Jvb3RSZWYsIG9uRHJhZ0xlYXZlLCBub0RyYWdFdmVudHNCdWJibGluZ11cbiAgKVxuXG4gIGNvbnN0IG9uRHJvcENiID0gdXNlQ2FsbGJhY2soXG4gICAgZXZlbnQgPT4ge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKVxuICAgICAgLy8gUGVyc2lzdCBoZXJlIGJlY2F1c2Ugd2UgbmVlZCB0aGUgZXZlbnQgbGF0ZXIgYWZ0ZXIgZ2V0RmlsZXNGcm9tRXZlbnQoKSBpcyBkb25lXG4gICAgICBldmVudC5wZXJzaXN0KClcbiAgICAgIHN0b3BQcm9wYWdhdGlvbihldmVudClcblxuICAgICAgZHJhZ1RhcmdldHNSZWYuY3VycmVudCA9IFtdXG4gICAgICBkaXNwYXRjaCh7IHR5cGU6ICdyZXNldCcgfSlcblxuICAgICAgaWYgKGlzRXZ0V2l0aEZpbGVzKGV2ZW50KSkge1xuICAgICAgICBQcm9taXNlLnJlc29sdmUoZ2V0RmlsZXNGcm9tRXZlbnQoZXZlbnQpKS50aGVuKGZpbGVzID0+IHtcbiAgICAgICAgICBpZiAoaXNQcm9wYWdhdGlvblN0b3BwZWQoZXZlbnQpICYmICFub0RyYWdFdmVudHNCdWJibGluZykge1xuICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3QgYWNjZXB0ZWRGaWxlcyA9IFtdXG4gICAgICAgICAgY29uc3QgcmVqZWN0ZWRGaWxlcyA9IFtdXG5cbiAgICAgICAgICBmaWxlcy5mb3JFYWNoKGZpbGUgPT4ge1xuICAgICAgICAgICAgaWYgKGZpbGVBY2NlcHRlZChmaWxlLCBhY2NlcHQpICYmIGZpbGVNYXRjaFNpemUoZmlsZSwgbWF4U2l6ZSwgbWluU2l6ZSkpIHtcbiAgICAgICAgICAgICAgYWNjZXB0ZWRGaWxlcy5wdXNoKGZpbGUpXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICByZWplY3RlZEZpbGVzLnB1c2goZmlsZSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KVxuXG4gICAgICAgICAgaWYgKCFtdWx0aXBsZSAmJiBhY2NlcHRlZEZpbGVzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgIHJlamVjdGVkRmlsZXMucHVzaCguLi5hY2NlcHRlZEZpbGVzLnNwbGljZSgwKSkgLy8gUmVqZWN0IGV2ZXJ5dGhpbmcgYW5kIGVtcHR5IGFjY2VwdGVkIGZpbGVzXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZGlzcGF0Y2goe1xuICAgICAgICAgICAgYWNjZXB0ZWRGaWxlcyxcbiAgICAgICAgICAgIHJlamVjdGVkRmlsZXMsXG4gICAgICAgICAgICB0eXBlOiAnc2V0RmlsZXMnXG4gICAgICAgICAgfSlcblxuICAgICAgICAgIGlmIChvbkRyb3ApIHtcbiAgICAgICAgICAgIG9uRHJvcChhY2NlcHRlZEZpbGVzLCByZWplY3RlZEZpbGVzLCBldmVudClcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAocmVqZWN0ZWRGaWxlcy5sZW5ndGggPiAwICYmIG9uRHJvcFJlamVjdGVkKSB7XG4gICAgICAgICAgICBvbkRyb3BSZWplY3RlZChyZWplY3RlZEZpbGVzLCBldmVudClcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoYWNjZXB0ZWRGaWxlcy5sZW5ndGggPiAwICYmIG9uRHJvcEFjY2VwdGVkKSB7XG4gICAgICAgICAgICBvbkRyb3BBY2NlcHRlZChhY2NlcHRlZEZpbGVzLCBldmVudClcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfSxcbiAgICBbXG4gICAgICBtdWx0aXBsZSxcbiAgICAgIGFjY2VwdCxcbiAgICAgIG1pblNpemUsXG4gICAgICBtYXhTaXplLFxuICAgICAgZ2V0RmlsZXNGcm9tRXZlbnQsXG4gICAgICBvbkRyb3AsXG4gICAgICBvbkRyb3BBY2NlcHRlZCxcbiAgICAgIG9uRHJvcFJlamVjdGVkLFxuICAgICAgbm9EcmFnRXZlbnRzQnViYmxpbmdcbiAgICBdXG4gIClcblxuICBjb25zdCBjb21wb3NlSGFuZGxlciA9IGZuID0+IHtcbiAgICByZXR1cm4gZGlzYWJsZWQgPyBudWxsIDogZm5cbiAgfVxuXG4gIGNvbnN0IGNvbXBvc2VLZXlib2FyZEhhbmRsZXIgPSBmbiA9PiB7XG4gICAgcmV0dXJuIG5vS2V5Ym9hcmQgPyBudWxsIDogY29tcG9zZUhhbmRsZXIoZm4pXG4gIH1cblxuICBjb25zdCBjb21wb3NlRHJhZ0hhbmRsZXIgPSBmbiA9PiB7XG4gICAgcmV0dXJuIG5vRHJhZyA/IG51bGwgOiBjb21wb3NlSGFuZGxlcihmbilcbiAgfVxuXG4gIGNvbnN0IHN0b3BQcm9wYWdhdGlvbiA9IGV2ZW50ID0+IHtcbiAgICBpZiAobm9EcmFnRXZlbnRzQnViYmxpbmcpIHtcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgfVxuICB9XG5cbiAgY29uc3QgZ2V0Um9vdFByb3BzID0gdXNlTWVtbyhcbiAgICAoKSA9PiAoe1xuICAgICAgcmVmS2V5ID0gJ3JlZicsXG4gICAgICBvbktleURvd24sXG4gICAgICBvbkZvY3VzLFxuICAgICAgb25CbHVyLFxuICAgICAgb25DbGljayxcbiAgICAgIG9uRHJhZ0VudGVyLFxuICAgICAgb25EcmFnT3ZlcixcbiAgICAgIG9uRHJhZ0xlYXZlLFxuICAgICAgb25Ecm9wLFxuICAgICAgLi4ucmVzdFxuICAgIH0gPSB7fSkgPT4gKHtcbiAgICAgIG9uS2V5RG93bjogY29tcG9zZUtleWJvYXJkSGFuZGxlcihjb21wb3NlRXZlbnRIYW5kbGVycyhvbktleURvd24sIG9uS2V5RG93bkNiKSksXG4gICAgICBvbkZvY3VzOiBjb21wb3NlS2V5Ym9hcmRIYW5kbGVyKGNvbXBvc2VFdmVudEhhbmRsZXJzKG9uRm9jdXMsIG9uRm9jdXNDYikpLFxuICAgICAgb25CbHVyOiBjb21wb3NlS2V5Ym9hcmRIYW5kbGVyKGNvbXBvc2VFdmVudEhhbmRsZXJzKG9uQmx1ciwgb25CbHVyQ2IpKSxcbiAgICAgIG9uQ2xpY2s6IGNvbXBvc2VIYW5kbGVyKGNvbXBvc2VFdmVudEhhbmRsZXJzKG9uQ2xpY2ssIG9uQ2xpY2tDYikpLFxuICAgICAgb25EcmFnRW50ZXI6IGNvbXBvc2VEcmFnSGFuZGxlcihjb21wb3NlRXZlbnRIYW5kbGVycyhvbkRyYWdFbnRlciwgb25EcmFnRW50ZXJDYikpLFxuICAgICAgb25EcmFnT3ZlcjogY29tcG9zZURyYWdIYW5kbGVyKGNvbXBvc2VFdmVudEhhbmRsZXJzKG9uRHJhZ092ZXIsIG9uRHJhZ092ZXJDYikpLFxuICAgICAgb25EcmFnTGVhdmU6IGNvbXBvc2VEcmFnSGFuZGxlcihjb21wb3NlRXZlbnRIYW5kbGVycyhvbkRyYWdMZWF2ZSwgb25EcmFnTGVhdmVDYikpLFxuICAgICAgb25Ecm9wOiBjb21wb3NlRHJhZ0hhbmRsZXIoY29tcG9zZUV2ZW50SGFuZGxlcnMob25Ecm9wLCBvbkRyb3BDYikpLFxuICAgICAgW3JlZktleV06IHJvb3RSZWYsXG4gICAgICAuLi4oIWRpc2FibGVkICYmICFub0tleWJvYXJkID8geyB0YWJJbmRleDogMCB9IDoge30pLFxuICAgICAgLi4ucmVzdFxuICAgIH0pLFxuICAgIFtcbiAgICAgIHJvb3RSZWYsXG4gICAgICBvbktleURvd25DYixcbiAgICAgIG9uRm9jdXNDYixcbiAgICAgIG9uQmx1ckNiLFxuICAgICAgb25DbGlja0NiLFxuICAgICAgb25EcmFnRW50ZXJDYixcbiAgICAgIG9uRHJhZ092ZXJDYixcbiAgICAgIG9uRHJhZ0xlYXZlQ2IsXG4gICAgICBvbkRyb3BDYixcbiAgICAgIG5vS2V5Ym9hcmQsXG4gICAgICBub0RyYWcsXG4gICAgICBkaXNhYmxlZFxuICAgIF1cbiAgKVxuXG4gIGNvbnN0IG9uSW5wdXRFbGVtZW50Q2xpY2sgPSB1c2VDYWxsYmFjayhldmVudCA9PiB7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgfSwgW10pXG5cbiAgY29uc3QgZ2V0SW5wdXRQcm9wcyA9IHVzZU1lbW8oXG4gICAgKCkgPT4gKHsgcmVmS2V5ID0gJ3JlZicsIG9uQ2hhbmdlLCBvbkNsaWNrLCAuLi5yZXN0IH0gPSB7fSkgPT4ge1xuICAgICAgY29uc3QgaW5wdXRQcm9wcyA9IHtcbiAgICAgICAgYWNjZXB0LFxuICAgICAgICBtdWx0aXBsZSxcbiAgICAgICAgdHlwZTogJ2ZpbGUnLFxuICAgICAgICBzdHlsZTogeyBkaXNwbGF5OiAnbm9uZScgfSxcbiAgICAgICAgb25DaGFuZ2U6IGNvbXBvc2VIYW5kbGVyKGNvbXBvc2VFdmVudEhhbmRsZXJzKG9uQ2hhbmdlLCBvbkRyb3BDYikpLFxuICAgICAgICBvbkNsaWNrOiBjb21wb3NlSGFuZGxlcihjb21wb3NlRXZlbnRIYW5kbGVycyhvbkNsaWNrLCBvbklucHV0RWxlbWVudENsaWNrKSksXG4gICAgICAgIGF1dG9Db21wbGV0ZTogJ29mZicsXG4gICAgICAgIHRhYkluZGV4OiAtMSxcbiAgICAgICAgW3JlZktleV06IGlucHV0UmVmXG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLmlucHV0UHJvcHMsXG4gICAgICAgIC4uLnJlc3RcbiAgICAgIH1cbiAgICB9LFxuICAgIFtpbnB1dFJlZiwgYWNjZXB0LCBtdWx0aXBsZSwgb25Ecm9wQ2IsIGRpc2FibGVkXVxuICApXG5cbiAgY29uc3QgZmlsZUNvdW50ID0gZHJhZ2dlZEZpbGVzLmxlbmd0aFxuICBjb25zdCBpc011bHRpcGxlQWxsb3dlZCA9IG11bHRpcGxlIHx8IGZpbGVDb3VudCA8PSAxXG4gIGNvbnN0IGlzRHJhZ0FjY2VwdCA9IGZpbGVDb3VudCA+IDAgJiYgYWxsRmlsZXNBY2NlcHRlZChkcmFnZ2VkRmlsZXMsIGFjY2VwdClcbiAgY29uc3QgaXNEcmFnUmVqZWN0ID0gZmlsZUNvdW50ID4gMCAmJiAoIWlzRHJhZ0FjY2VwdCB8fCAhaXNNdWx0aXBsZUFsbG93ZWQpXG5cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBpc0RyYWdBY2NlcHQsXG4gICAgaXNEcmFnUmVqZWN0LFxuICAgIGlzRm9jdXNlZDogaXNGb2N1c2VkICYmICFkaXNhYmxlZCxcbiAgICBnZXRSb290UHJvcHMsXG4gICAgZ2V0SW5wdXRQcm9wcyxcbiAgICByb290UmVmLFxuICAgIGlucHV0UmVmLFxuICAgIG9wZW46IGNvbXBvc2VIYW5kbGVyKG9wZW5GaWxlRGlhbG9nKVxuICB9XG59XG5cbmZ1bmN0aW9uIHJlZHVjZXIoc3RhdGUsIGFjdGlvbikge1xuICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICBzd2l0Y2ggKGFjdGlvbi50eXBlKSB7XG4gICAgY2FzZSAnZm9jdXMnOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIGlzRm9jdXNlZDogdHJ1ZVxuICAgICAgfVxuICAgIGNhc2UgJ2JsdXInOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIGlzRm9jdXNlZDogZmFsc2VcbiAgICAgIH1cbiAgICBjYXNlICdvcGVuRGlhbG9nJzpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICBpc0ZpbGVEaWFsb2dBY3RpdmU6IHRydWVcbiAgICAgIH1cbiAgICBjYXNlICdjbG9zZURpYWxvZyc6XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgaXNGaWxlRGlhbG9nQWN0aXZlOiBmYWxzZVxuICAgICAgfVxuICAgIGNhc2UgJ3NldERyYWdnZWRGaWxlcyc6XG4gICAgICAvKiBlc2xpbnQgbm8tY2FzZS1kZWNsYXJhdGlvbnM6IDAgKi9cbiAgICAgIGNvbnN0IHsgaXNEcmFnQWN0aXZlLCBkcmFnZ2VkRmlsZXMgfSA9IGFjdGlvblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIGRyYWdnZWRGaWxlcyxcbiAgICAgICAgaXNEcmFnQWN0aXZlXG4gICAgICB9XG4gICAgY2FzZSAnc2V0RmlsZXMnOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIGFjY2VwdGVkRmlsZXM6IGFjdGlvbi5hY2NlcHRlZEZpbGVzLFxuICAgICAgICByZWplY3RlZEZpbGVzOiBhY3Rpb24ucmVqZWN0ZWRGaWxlc1xuICAgICAgfVxuICAgIGNhc2UgJ3Jlc2V0JzpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICBpc0ZpbGVEaWFsb2dBY3RpdmU6IGZhbHNlLFxuICAgICAgICBpc0RyYWdBY3RpdmU6IGZhbHNlLFxuICAgICAgICBkcmFnZ2VkRmlsZXM6IFtdXG4gICAgICB9XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBzdGF0ZVxuICB9XG59XG4iXSwibmFtZXMiOlsiX19hd2FpdGVyIiwidGhpc0FyZyIsIl9hcmd1bWVudHMiLCJQIiwiZ2VuZXJhdG9yIiwiUHJvbWlzZSIsInJlc29sdmUiLCJyZWplY3QiLCJmdWxmaWxsZWQiLCJ2YWx1ZSIsInN0ZXAiLCJuZXh0IiwiZSIsInJlamVjdGVkIiwicmVzdWx0IiwiZG9uZSIsInRoZW4iLCJhcHBseSIsIl9fZ2VuZXJhdG9yIiwiYm9keSIsImYiLCJ5IiwidCIsImciLCJfIiwibGFiZWwiLCJzZW50IiwidHJ5cyIsIm9wcyIsInZlcmIiLCJ0aHJvdyIsInJldHVybiIsIlN5bWJvbCIsIml0ZXJhdG9yIiwidGhpcyIsIm4iLCJ2Iiwib3AiLCJUeXBlRXJyb3IiLCJjYWxsIiwicG9wIiwibGVuZ3RoIiwicHVzaCIsIl9fcmVhZCIsIm8iLCJtIiwiciIsImkiLCJhciIsImVycm9yIiwiX19zcHJlYWQiLCJhcmd1bWVudHMiLCJjb25jYXQiLCJDT01NT05fTUlNRV9UWVBFUyIsIk1hcCIsInRvRmlsZVdpdGhQYXRoIiwiZmlsZSIsInBhdGgiLCJuYW1lIiwibGFzdEluZGV4T2YiLCJ0eXBlIiwiZXh0Iiwic3BsaXQiLCJ0b0xvd2VyQ2FzZSIsImdldCIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5Iiwid3JpdGFibGUiLCJjb25maWd1cmFibGUiLCJlbnVtZXJhYmxlIiwid2l0aE1pbWVUeXBlIiwid2Via2l0UmVsYXRpdmVQYXRoIiwiRklMRVNfVE9fSUdOT1JFIiwiZnJvbUV2ZW50IiwiZXZ0IiwidHNsaWJfMS5fX2F3YWl0ZXIiLCJ0c2xpYl8xLl9fZ2VuZXJhdG9yIiwiX2EiLCJkYXRhVHJhbnNmZXIiLCJkdCIsIml0ZW1zIiwiZnJvbUxpc3QiLCJmaWx0ZXIiLCJpdGVtIiwia2luZCIsImFsbCIsIm1hcCIsInRvRmlsZVByb21pc2VzIiwibm9JZ25vcmVkRmlsZXMiLCJmbGF0dGVuIiwicmVkdWNlIiwiYWNjIiwiZmlsZXMiLCJ0c2xpYl8xLl9fc3ByZWFkIiwiQXJyYXkiLCJpc0FycmF5IiwiZ2V0RGF0YVRyYW5zZmVyRmlsZXMiLCJ0YXJnZXQiLCJpbmRleE9mIiwid2Via2l0R2V0QXNFbnRyeSIsImZyb21EYXRhVHJhbnNmZXJJdGVtIiwiZW50cnkiLCJpc0RpcmVjdG9yeSIsImZyb21EaXJFbnRyeSIsImdldEFzRmlsZSIsImZ3cCIsImZyb21FbnRyeSIsImZ1bGxQYXRoIiwiZXJyIiwiZnJvbUZpbGVFbnRyeSIsInJlYWRlciIsImNyZWF0ZVJlYWRlciIsImVudHJpZXMiLCJyZWFkRW50cmllcyIsIl90aGlzIiwiYmF0Y2giLCJlcnJfMSIsIm1vZHVsZSIsImV4cG9ydHMiLCJsIiwiYyIsImQiLCJfX2VzTW9kdWxlIiwiZGVmYXVsdCIsInByb3RvdHlwZSIsImhhc093blByb3BlcnR5IiwicCIsInMiLCJ3aW5kb3ciLCJNYXRoIiwic2VsZiIsIkZ1bmN0aW9uIiwiX19nIiwidmVyc2lvbiIsIl9fZSIsImEiLCJ0b1N0cmluZyIsInNsaWNlIiwidSIsInN0b3JlIiwiRiIsIkciLCJoIiwiUyIsIngiLCJCIiwiYiIsIlUiLCJjb3JlIiwiVyIsIlIiLCJyYW5kb20iLCJtaW4iLCJyZXBsYWNlIiwic29tZSIsInRyaW0iLCJjaGFyQXQiLCJlbmRzV2l0aCIsImRvY3VtZW50IiwiY3JlYXRlRWxlbWVudCIsInZhbHVlT2YiLCJpbnNwZWN0U291cmNlIiwiam9pbiIsIlN0cmluZyIsInciLCJwcm9wZXJ0eUlzRW51bWVyYWJsZSIsImNlaWwiLCJmbG9vciIsImlzTmFOIiwiY29uc3RydWN0b3IiLCJmaWxlQWNjZXB0ZWQiLCJhY2NlcHQiLCJhY2NlcHRzIiwiaXNQcm9wYWdhdGlvblN0b3BwZWQiLCJldmVudCIsImNhbmNlbEJ1YmJsZSIsImlzRXZ0V2l0aEZpbGVzIiwidHlwZXMiLCJvbkRvY3VtZW50RHJhZ092ZXIiLCJwcmV2ZW50RGVmYXVsdCIsImNvbXBvc2VFdmVudEhhbmRsZXJzIiwiZm5zIiwiYXJncyIsImZuIiwiRHJvcHpvbmUiLCJmb3J3YXJkUmVmIiwicmVmIiwiY2hpbGRyZW4iLCJ1c2VEcm9wem9uZSIsIm9wZW4iLCJwcm9wcyIsInVzZUVmZmVjdCIsIl90eXBlb2YiLCJjdXJyZW50IiwiUmVhY3QiLCJGcmFnbWVudCIsImRpc3BsYXlOYW1lIiwiaW5pdGlhbFN0YXRlIiwiaXNGb2N1c2VkIiwicHJvcFR5cGVzIiwiUHJvcFR5cGVzIiwiZnVuYyIsIm9uZU9mVHlwZSIsInN0cmluZyIsImFycmF5T2YiLCJtdWx0aXBsZSIsImJvb2wiLCJwcmV2ZW50RHJvcE9uRG9jdW1lbnQiLCJub0NsaWNrIiwibm9LZXlib2FyZCIsIm5vRHJhZyIsIm5vRHJhZ0V2ZW50c0J1YmJsaW5nIiwibWluU2l6ZSIsIm51bWJlciIsIm1heFNpemUiLCJkaXNhYmxlZCIsImdldEZpbGVzRnJvbUV2ZW50Iiwib25GaWxlRGlhbG9nQ2FuY2VsIiwib25EcmFnRW50ZXIiLCJvbkRyYWdMZWF2ZSIsIm9uRHJhZ092ZXIiLCJvbkRyb3AiLCJvbkRyb3BBY2NlcHRlZCIsIm9uRHJvcFJlamVjdGVkIiwiaXNGaWxlRGlhbG9nQWN0aXZlIiwiaXNEcmFnQWN0aXZlIiwiaXNEcmFnQWNjZXB0IiwiaXNEcmFnUmVqZWN0IiwiZHJhZ2dlZEZpbGVzIiwiYWNjZXB0ZWRGaWxlcyIsInJlamVjdGVkRmlsZXMiLCJJbmZpbml0eSIsInJvb3RSZWYiLCJ1c2VSZWYiLCJpbnB1dFJlZiIsInVzZVJlZHVjZXIiLCJyZWR1Y2VyIiwic3RhdGUiLCJkaXNwYXRjaCIsIm9wZW5GaWxlRGlhbG9nIiwiY2xpY2siLCJvbldpbmRvd0ZvY3VzIiwic2V0VGltZW91dCIsImFkZEV2ZW50TGlzdGVuZXIiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwib25LZXlEb3duQ2IiLCJ1c2VDYWxsYmFjayIsImlzRXF1YWxOb2RlIiwia2V5Q29kZSIsIm9uRm9jdXNDYiIsIm9uQmx1ckNiIiwib25DbGlja0NiIiwidXNlckFnZW50IiwibmF2aWdhdG9yIiwiaXNJZU9yRWRnZSIsImRyYWdUYXJnZXRzUmVmIiwib25Eb2N1bWVudERyb3AiLCJjb250YWlucyIsIm9uRHJhZ0VudGVyQ2IiLCJwZXJzaXN0Iiwic3RvcFByb3BhZ2F0aW9uIiwib25EcmFnT3ZlckNiIiwiZHJvcEVmZmVjdCIsIm9uRHJhZ0xlYXZlQ2IiLCJ0YXJnZXRzIiwib25Ecm9wQ2IiLCJmb3JFYWNoIiwic2l6ZSIsInNwbGljZSIsImNvbXBvc2VIYW5kbGVyIiwiY29tcG9zZUtleWJvYXJkSGFuZGxlciIsImNvbXBvc2VEcmFnSGFuZGxlciIsImdldFJvb3RQcm9wcyIsInVzZU1lbW8iLCJyZWZLZXkiLCJvbktleURvd24iLCJvbkZvY3VzIiwib25CbHVyIiwib25DbGljayIsInJlc3QiLCJ0YWJJbmRleCIsIm9uSW5wdXRFbGVtZW50Q2xpY2siLCJnZXRJbnB1dFByb3BzIiwib25DaGFuZ2UiLCJzdHlsZSIsImRpc3BsYXkiLCJhdXRvQ29tcGxldGUiLCJmaWxlQ291bnQiLCJpc011bHRpcGxlQWxsb3dlZCIsImV2ZXJ5IiwiYWN0aW9uIl0sIm1hcHBpbmdzIjoib2tFQWlFTyxTQUFTQSxFQUFVQyxFQUFTQyxFQUFZQyxFQUFHQyxHQUM5QyxPQUFPLElBQUtELElBQU1BLEVBQUlFLFVBQVUsU0FBVUMsRUFBU0MsR0FDL0MsU0FBU0MsRUFBVUMsR0FBUyxJQUFNQyxFQUFLTixFQUFVTyxLQUFLRixJQUFXLE1BQU9HLEdBQUtMLEVBQU9LLElBQ3BGLFNBQVNDLEVBQVNKLEdBQVMsSUFBTUMsRUFBS04sRUFBaUIsTUFBRUssSUFBVyxNQUFPRyxHQUFLTCxFQUFPSyxJQUN2RixTQUFTRixFQUFLSSxHQUFVQSxFQUFPQyxLQUFPVCxFQUFRUSxFQUFPTCxPQUFTLElBQUlOLEVBQUUsU0FBVUcsR0FBV0EsRUFBUVEsRUFBT0wsU0FBV08sS0FBS1IsRUFBV0ssR0FDbklILEdBQU1OLEVBQVlBLEVBQVVhLE1BQU1oQixFQUFTQyxHQUFjLEtBQUtTLFVBSS9ELFNBQVNPLEVBQVlqQixFQUFTa0IsR0FDakMsSUFBc0dDLEVBQUdDLEVBQUdDLEVBQUdDLEVBQTNHQyxFQUFJLENBQUVDLE1BQU8sRUFBR0MsS0FBTSxXQUFhLEdBQVcsRUFBUEosRUFBRSxHQUFRLE1BQU1BLEVBQUUsR0FBSSxPQUFPQSxFQUFFLElBQU9LLEtBQU0sR0FBSUMsSUFBSyxJQUNoRyxPQUFPTCxFQUFJLENBQUVaLEtBQU1rQixFQUFLLEdBQUlDLE1BQVNELEVBQUssR0FBSUUsT0FBVUYsRUFBSyxJQUF3QixtQkFBWEcsU0FBMEJULEVBQUVTLE9BQU9DLFVBQVksV0FBYSxPQUFPQyxPQUFVWCxFQUN2SixTQUFTTSxFQUFLTSxHQUFLLE9BQU8sU0FBVUMsR0FBSyxPQUN6QyxTQUFjQyxHQUNWLEdBQUlqQixFQUFHLE1BQU0sSUFBSWtCLFVBQVUsbUNBQzNCLEtBQU9kLEdBQUcsSUFDTixHQUFJSixFQUFJLEVBQUdDLElBQU1DLEVBQVksRUFBUmUsRUFBRyxHQUFTaEIsRUFBVSxPQUFJZ0IsRUFBRyxHQUFLaEIsRUFBUyxTQUFPQyxFQUFJRCxFQUFVLFNBQU1DLEVBQUVpQixLQUFLbEIsR0FBSSxHQUFLQSxFQUFFVixTQUFXVyxFQUFJQSxFQUFFaUIsS0FBS2xCLEVBQUdnQixFQUFHLEtBQUt0QixLQUFNLE9BQU9PLEVBRTNKLE9BRElELEVBQUksRUFBR0MsSUFBR2UsRUFBSyxDQUFTLEVBQVJBLEVBQUcsR0FBUWYsRUFBRWIsUUFDekI0QixFQUFHLElBQ1AsS0FBSyxFQUFHLEtBQUssRUFBR2YsRUFBSWUsRUFBSSxNQUN4QixLQUFLLEVBQWMsT0FBWGIsRUFBRUMsUUFBZ0IsQ0FBRWhCLE1BQU80QixFQUFHLEdBQUl0QixNQUFNLEdBQ2hELEtBQUssRUFBR1MsRUFBRUMsUUFBU0osRUFBSWdCLEVBQUcsR0FBSUEsRUFBSyxDQUFDLEdBQUksU0FDeEMsS0FBSyxFQUFHQSxFQUFLYixFQUFFSSxJQUFJWSxNQUFPaEIsRUFBRUcsS0FBS2EsTUFBTyxTQUN4QyxRQUNJLEtBQWtCbEIsRUFBZSxHQUEzQkEsRUFBSUUsRUFBRUcsTUFBWWMsUUFBY25CLEVBQUVBLEVBQUVtQixPQUFTLE1BQWtCLElBQVZKLEVBQUcsSUFBc0IsSUFBVkEsRUFBRyxJQUFXLENBQUViLEVBQUksRUFBRyxTQUNqRyxHQUFjLElBQVZhLEVBQUcsTUFBY2YsR0FBTWUsRUFBRyxHQUFLZixFQUFFLElBQU1lLEVBQUcsR0FBS2YsRUFBRSxJQUFNLENBQUVFLEVBQUVDLE1BQVFZLEVBQUcsR0FBSSxNQUM5RSxHQUFjLElBQVZBLEVBQUcsSUFBWWIsRUFBRUMsTUFBUUgsRUFBRSxHQUFJLENBQUVFLEVBQUVDLE1BQVFILEVBQUUsR0FBSUEsRUFBSWUsRUFBSSxNQUM3RCxHQUFJZixHQUFLRSxFQUFFQyxNQUFRSCxFQUFFLEdBQUksQ0FBRUUsRUFBRUMsTUFBUUgsRUFBRSxHQUFJRSxFQUFFSSxJQUFJYyxLQUFLTCxHQUFLLE1BQ3ZEZixFQUFFLElBQUlFLEVBQUVJLElBQUlZLE1BQ2hCaEIsRUFBRUcsS0FBS2EsTUFBTyxTQUV0QkgsRUFBS2xCLEVBQUtvQixLQUFLdEMsRUFBU3VCLEdBQzFCLE1BQU9aLEdBQUt5QixFQUFLLENBQUMsRUFBR3pCLEdBQUlTLEVBQUksVUFBZUQsRUFBSUUsRUFBSSxFQUN0RCxHQUFZLEVBQVJlLEVBQUcsR0FBUSxNQUFNQSxFQUFHLEdBQUksTUFBTyxDQUFFNUIsTUFBTzRCLEVBQUcsR0FBS0EsRUFBRyxRQUFLLEVBQVF0QixNQUFNLEdBckI5QkwsQ0FBSyxDQUFDeUIsRUFBR0MsTUF3Q3RELFNBQVNPLEVBQU9DLEVBQUdULEdBQ3RCLElBQUlVLEVBQXNCLG1CQUFYYixRQUF5QlksRUFBRVosT0FBT0MsVUFDakQsSUFBS1ksRUFBRyxPQUFPRCxFQUNmLElBQW1CRSxFQUFZbEMsRUFBM0JtQyxFQUFJRixFQUFFTixLQUFLSyxHQUFPSSxFQUFLLEdBQzNCLElBQ0ksV0FBYyxJQUFOYixHQUFzQixFQUFOQSxRQUFjVyxFQUFJQyxFQUFFcEMsUUFBUUksTUFBTWlDLEVBQUdOLEtBQUtJLEVBQUVyQyxPQUV4RSxNQUFPd0MsR0FBU3JDLEVBQUksQ0FBRXFDLE1BQU9BLFdBRXpCLElBQ1FILElBQU1BLEVBQUUvQixPQUFTOEIsRUFBSUUsRUFBVSxTQUFJRixFQUFFTixLQUFLUSxXQUV4QyxHQUFJbkMsRUFBRyxNQUFNQSxFQUFFcUMsT0FFN0IsT0FBT0QsRUFHSixTQUFTRSxJQUNaLElBQUssSUFBSUYsRUFBSyxHQUFJRCxFQUFJLEVBQUdBLEVBQUlJLFVBQVVWLE9BQVFNLElBQzNDQyxFQUFLQSxFQUFHSSxPQUFPVCxFQUFPUSxVQUFVSixLQUNwQyxPQUFPQywrQ0N6SUosSUFBSUssRUFBb0IsSUFBSUMsSUFBSSxDQUNuQyxDQUFDLE1BQU8sYUFDUixDQUFDLE1BQU8sYUFDUixDQUFDLE1BQU8sZ0JBQ1IsQ0FBQyxPQUFRLGNBQ1QsQ0FBQyxNQUFPLGNBQ1IsQ0FBQyxNQUFPLG9CQUNSLENBQUMsTUFBTyxtQkFDUixDQUFDLE1BQU8sYUFDUixDQUFDLE1BQU8sbUJBQ1IsQ0FBQyxNQUFPLGFBQ1IsQ0FBQyxNQUFPLG1CQUNSLENBQUMsTUFBTyxzQkFDUixDQUFDLE9BQVEsNkVBRU4sU0FBU0MsRUFBZUMsRUFBTUMsR0FDakMsSUFBSXJDLEVBaUJSLFNBQXNCb0MsR0FDbEIsSUFBSUUsRUFBT0YsRUFBS0UsS0FFaEIsR0FEbUJBLElBQW1DLElBQTNCQSxFQUFLQyxZQUFZLE9BQ3ZCSCxFQUFLSSxLQUFNLENBQzVCLElBQUlDLEVBQU1ILEVBQUtJLE1BQU0sS0FDaEJ0QixNQUFNdUIsY0FDUEgsRUFBT1AsRUFBa0JXLElBQUlILEdBQzdCRCxHQUNBSyxPQUFPQyxlQUFlVixFQUFNLE9BQVEsQ0FDaEMvQyxNQUFPbUQsRUFDUE8sVUFBVSxFQUNWQyxjQUFjLEVBQ2RDLFlBQVksSUFJeEIsT0FBT2IsRUFqQ0NjLENBQWFkLEdBQ2pCZSxFQUFxQmYsRUFBS2UsbUJBYzlCLE9BYkFOLE9BQU9DLGVBQWU5QyxFQUFHLE9BQVEsQ0FDN0JYLE1BQXVCLGlCQUFUZ0QsRUFDUkEsRUFJOEIsaUJBQXZCYyxHQUErRCxFQUE1QkEsRUFBbUI5QixPQUN6RDhCLEVBQ0FmLEVBQUtFLEtBQ2ZTLFVBQVUsRUFDVkMsY0FBYyxFQUNkQyxZQUFZLElBRVRqRCxFQzdCWCxJQUFJb0QsRUFBa0IsQ0FFbEIsWUFDQSxhQVFHLFNBQVNDLEdBQVVDLEdBQ3RCLE9BQU9DLEVBQWtCekMsVUFBTSxPQUFRLEVBQVEsV0FDM0MsT0FBTzBDLEVBQW9CMUMsS0FBTSxTQUFVMkMsR0FDdkMsTUFBTyxDQUFDLEdBTURwRSxFQU55QmlFLEVBTy9CakUsRUFBTXFFLGNBUGlDSixFQUFJSSxhQW9CeEQsU0FBOEJDLEVBQUluQixHQUM5QixPQUFPZSxFQUFrQnpDLFVBQU0sT0FBUSxFQUFRLFdBQzNDLElBQUk4QyxFQUNKLE9BQU9KLEVBQW9CMUMsS0FBTSxTQUFVMkMsR0FDdkMsT0FBUUEsRUFBR3BELE9BQ1AsS0FBSyxFQUNELE9BQUtzRCxFQUFHQyxPQUNSQSxFQUFRQyxFQUFTRixFQUFHQyxPQUNmRSxPQUFPLFNBQVVDLEdBQVEsTUFBcUIsU0FBZEEsRUFBS0MsT0FHN0IsU0FBVHhCLEVBQ08sQ0FBQyxFQUFjb0IsR0FFbkIsQ0FBQyxFQUFhM0UsUUFBUWdGLElBQUlMLEVBQU1NLElBQUlDLE1BUnJCLENBQUMsRUFBYSxHQVN4QyxLQUFLLEVBRUQsTUFBTyxDQUFDLEVBQWNDLEVBcUMxQyxTQUFTQyxFQUFRVCxHQUNiLE9BQU9BLEVBQU1VLE9BQU8sU0FBVUMsRUFBS0MsR0FBUyxPQUFPQyxFQUFpQkYsRUFBTUcsTUFBTUMsUUFBUUgsR0FBU0gsRUFBUUcsR0FBUyxDQUFDQSxLQUFhLElBdEMzRUgsQ0FEN0JaLEVBQUduRCxVQUVmLEtBQUssRUFBRyxNQUFPLENBQUMsRUFBYzhELEVBQWVQLEVBQVNGLEVBQUdhLE9BQ2hETixJQUFJLFNBQVU5QixHQUFRLE9BQU9ELEVBQWVDLFlBdEMvQ3dDLENBQXFCdEIsRUFBSUksYUFBY0osRUFBSWQsT0FRMUNjLEVBUGFBLEdBZW5CakUsRUFQT2lFLEVBQUl1QixPQVFQLE9BQVZ4RixHQVBEaUUsRUFBSXVCLE9BQU9MLE1BQ1BYLEVBQVNQLEVBQUl1QixPQUFPTCxPQUV4QixJQUNPTixJQUFJLFNBQVU5QixHQUFRLE9BQU9ELEVBQWVDLFFBTjdELElBQXVCa0IsRUFRTmpFLEVBWEVBLE1Bc0NuQixTQUFTK0UsRUFBZUksR0FDcEIsT0FBT0EsRUFBTVYsT0FBTyxTQUFVMUIsR0FBUSxPQUErQyxJQUF4Q2dCLEVBQWdCMEIsUUFBUTFDLEVBQUtFLFFBTTlFLFNBQVN1QixFQUFTRCxHQUdkLElBRkEsSUFBSVksRUFBUSxHQUVIN0MsRUFBSSxFQUFHQSxFQUFJaUMsRUFBTXZDLE9BQVFNLElBQUssQ0FDbkMsSUFBSVMsRUFBT3dCLEVBQU1qQyxHQUNqQjZDLEVBQU1sRCxLQUFLYyxHQUVmLE9BQU9vQyxFQUdYLFNBQVNMLEVBQWVKLEdBQ3BCLEdBQXFDLG1CQUExQkEsRUFBS2dCLGlCQUNaLE9BQU9DLEVBQXFCakIsR0FFaEMsSUFBSWtCLEVBQVFsQixFQUFLZ0IsbUJBSWpCLE9BQUlFLEdBQVNBLEVBQU1DLFlBQ1JDLEVBQWFGLEdBRWpCRCxFQUFxQmpCLEdBS2hDLFNBQVNpQixFQUFxQmpCLEdBQzFCLElBQUkzQixFQUFPMkIsRUFBS3FCLFlBQ2hCLElBQUtoRCxFQUNELE9BQU9uRCxRQUFRRSxPQUFPNEUsRUFBTyxrQkFFakMsSUFBSXNCLEVBQU1sRCxFQUFlQyxHQUN6QixPQUFPbkQsUUFBUUMsUUFBUW1HLEdBRzNCLFNBQVNDLEVBQVVMLEdBQ2YsT0FBTzFCLEVBQWtCekMsVUFBTSxPQUFRLEVBQVEsV0FDM0MsT0FBTzBDLEVBQW9CMUMsS0FBTSxTQUFVMkMsR0FDdkMsTUFBTyxDQUFDLEVBQWN3QixFQUFNQyxZQUFjQyxFQUFhRixHQWlEbkUsU0FBdUJBLEdBQ25CLE9BQU8xQixFQUFrQnpDLFVBQU0sT0FBUSxFQUFRLFdBQzNDLE9BQU8wQyxFQUFvQjFDLEtBQU0sU0FBVTJDLEdBQ3ZDLE1BQU8sQ0FBQyxFQUFjLElBQUl4RSxRQUFRLFNBQVVDLEVBQVNDLEdBQzdDOEYsRUFBTTdDLEtBQUssU0FBVUEsR0FDakIsSUFBSWlELEVBQU1sRCxFQUFlQyxFQUFNNkMsRUFBTU0sVUFDckNyRyxFQUFRbUcsSUFDVCxTQUFVRyxHQUNUckcsRUFBT3FHLFlBekQ2Q0MsQ0FBY1IsUUFLMUYsU0FBU0UsRUFBYUYsR0FDbEIsSUFBSVMsRUFBU1QsRUFBTVUsZUFDbkIsT0FBTyxJQUFJMUcsUUFBUSxTQUFVQyxFQUFTQyxHQUNsQyxJQUFJeUcsRUFBVSxJQUNkLFNBQVNDLElBQ0wsSUFBSUMsRUFBUWhGLEtBR1o0RSxFQUFPRyxZQUFZLFNBQVVFLEdBQVMsT0FBT3hDLEVBQWtCdUMsT0FBTyxPQUFRLEVBQVEsV0FDbEYsSUFBSXRCLEVBQU93QixFQUFPcEMsRUFDbEIsT0FBT0osRUFBb0IxQyxLQUFNLFNBQVUyQyxHQUN2QyxPQUFRQSxFQUFHcEQsT0FDUCxLQUFLLEVBQ0QsR0FBTTBGLEVBQU0xRSxPQUFRLE1BQU8sQ0FBQyxFQUFhLEdBQ3pDb0MsRUFBR3BELE1BQVEsRUFDZixLQUFLLEVBRUQsT0FEQW9ELEVBQUdsRCxLQUFLZSxLQUFLLENBQUMsRUFBRyxHQUFLLElBQ2YsQ0FBQyxFQUFhckMsUUFBUWdGLElBQUkyQixJQUNyQyxLQUFLLEVBR0QsT0FGQXBCLEVBQVFmLEVBQUduRCxPQUNYcEIsRUFBUXNGLEdBQ0QsQ0FBQyxFQUFhLEdBQ3pCLEtBQUssRUFHRCxPQUZBd0IsRUFBUXZDLEVBQUduRCxPQUNYbkIsRUFBTzZHLEdBQ0EsQ0FBQyxFQUFhLEdBQ3pCLEtBQUssRUFBRyxNQUFPLENBQUMsRUFBYSxHQUM3QixLQUFLLEVBQ0RwQyxFQUFRM0UsUUFBUWdGLElBQUk4QixFQUFNN0IsSUFBSW9CLElBQzlCTSxFQUFRdEUsS0FBS3NDLEdBRWJpQyxJQUNBcEMsRUFBR3BELE1BQVEsRUFDZixLQUFLLEVBQUcsTUFBTyxDQUFDLFNBR3JCLFNBQVVtRixHQUNickcsRUFBT3FHLEtBR2ZLLDRCQ3RKUkksVUFBZSxTQUFTL0YsR0FBRyxTQUFTYSxFQUFFdkIsR0FBRyxHQUFHa0MsRUFBRWxDLEdBQUcsT0FBT2tDLEVBQUVsQyxHQUFHMEcsUUFBUSxJQUFJMUUsRUFBRUUsRUFBRWxDLEdBQUcsQ0FBQ21DLEVBQUVuQyxFQUFFMkcsR0FBRSxFQUFHRCxRQUFRLElBQUksT0FBT2hHLEVBQUVWLEdBQUcyQixLQUFLSyxFQUFFMEUsUUFBUTFFLEVBQUVBLEVBQUUwRSxRQUFRbkYsR0FBR1MsRUFBRTJFLEdBQUUsRUFBRzNFLEVBQUUwRSxRQUFRLElBQUl4RSxFQUFFLEdBQUcsT0FBT1gsRUFBRVUsRUFBRXZCLEVBQUVhLEVBQUVxRixFQUFFMUUsRUFBRVgsRUFBRXNGLEVBQUUsU0FBU25HLEVBQUV3QixFQUFFbEMsR0FBR3VCLEVBQUVTLEVBQUV0QixFQUFFd0IsSUFBSW1CLE9BQU9DLGVBQWU1QyxFQUFFd0IsRUFBRSxDQUFDc0IsY0FBYSxFQUFHQyxZQUFXLEVBQUdMLElBQUlwRCxLQUFLdUIsRUFBRUEsRUFBRSxTQUFTYixHQUFHLElBQUl3QixFQUFFeEIsR0FBR0EsRUFBRW9HLFdBQVcsV0FBVyxPQUFPcEcsRUFBRXFHLFNBQVMsV0FBVyxPQUFPckcsR0FBRyxPQUFPYSxFQUFFc0YsRUFBRTNFLEVBQUUsSUFBSUEsR0FBR0EsR0FBR1gsRUFBRVMsRUFBRSxTQUFTdEIsRUFBRWEsR0FBRyxPQUFPOEIsT0FBTzJELFVBQVVDLGVBQWV0RixLQUFLakIsRUFBRWEsSUFBSUEsRUFBRTJGLEVBQUUsR0FBRzNGLEVBQUVBLEVBQUU0RixFQUFFLElBQTljLENBQW1kLENBQUMsU0FBU3pHLEVBQUVhLEdBQUcsSUFBSVcsRUFBRXhCLEVBQUVnRyxRQUFRLG9CQUFvQlUsUUFBUUEsT0FBT0MsTUFBTUEsS0FBS0QsT0FBTyxvQkFBb0JFLE1BQU1BLEtBQUtELE1BQU1BLEtBQUtDLEtBQUtDLFNBQVMsY0FBVEEsR0FBMEIsaUJBQWlCQyxNQUFNQSxJQUFJdEYsSUFBSSxTQUFTeEIsRUFBRWEsR0FBR2IsRUFBRWdHLFFBQVEsU0FBU2hHLEdBQUcsTUFBTSxpQkFBaUJBLEVBQUUsT0FBT0EsRUFBRSxtQkFBbUJBLElBQUksU0FBU0EsRUFBRWEsR0FBRyxJQUFJVyxFQUFFeEIsRUFBRWdHLFFBQVEsQ0FBQ2UsUUFBUSxTQUFTLGlCQUFpQkMsTUFBTUEsSUFBSXhGLElBQUksU0FBU3hCLEVBQUVhLEVBQUVXLEdBQUd4QixFQUFFZ0csU0FBU3hFLEVBQUUsRUFBRkEsQ0FBSyxXQUFXLE9BQU8sR0FBR21CLE9BQU9DLGVBQWUsR0FBRyxJQUFJLENBQUNGLElBQUksV0FBVyxPQUFPLEtBQUt1RSxLQUFLLFNBQVNqSCxFQUFFYSxHQUFHYixFQUFFZ0csUUFBUSxTQUFTaEcsR0FBRyxJQUFJLFFBQVFBLElBQUksTUFBTUEsR0FBRyxPQUFNLEtBQU0sU0FBU0EsRUFBRWEsR0FBRyxJQUFJVyxFQUFFLEdBQUcwRixTQUFTbEgsRUFBRWdHLFFBQVEsU0FBU2hHLEdBQUcsT0FBT3dCLEVBQUVQLEtBQUtqQixHQUFHbUgsTUFBTSxHQUFHLEtBQUssU0FBU25ILEVBQUVhLEVBQUVXLEdBQUcsSUFBSWxDLEVBQUVrQyxFQUFFLEdBQUZBLENBQU0sT0FBT0YsRUFBRUUsRUFBRSxHQUFHQyxFQUFFRCxFQUFFLEdBQUdkLE9BQU8wRyxFQUFFLG1CQUFtQjNGLEdBQUd6QixFQUFFZ0csUUFBUSxTQUFTaEcsR0FBRyxPQUFPVixFQUFFVSxLQUFLVixFQUFFVSxHQUFHb0gsR0FBRzNGLEVBQUV6QixLQUFLb0gsRUFBRTNGLEVBQUVILEdBQUcsVUFBVXRCLE1BQU1xSCxNQUFNL0gsR0FBRyxTQUFTVSxFQUFFYSxFQUFFVyxHQUFHLElBQUlsQyxFQUFFa0MsRUFBRSxHQUFHRixFQUFFRSxFQUFFLEdBQUdDLEVBQUVELEVBQUUsR0FBRzRGLEVBQUU1RixFQUFFLElBQUkwRSxFQUFFMUUsRUFBRSxJQUFJMUIsRUFBRSxTQUFTRSxFQUFFYSxFQUFFVyxHQUFHLElBQUl5RixFQUFFUixFQUFFRCxFQUFFUCxFQUFFbkYsRUFBRWQsRUFBRUYsRUFBRXdILEVBQUV2SCxFQUFFQyxFQUFFRixFQUFFeUgsRUFBRUMsRUFBRXhILEVBQUVGLEVBQUUySCxFQUFFdEIsRUFBRW5HLEVBQUVGLEVBQUVqQixFQUFFNkksRUFBRTFILEVBQUVGLEVBQUU2SCxFQUFFMUgsRUFBRUYsRUFBRVQsRUFBRWtJLEVBQUVsSSxFQUFFdUIsS0FBS3ZCLEVBQUV1QixHQUFHLEtBQUt2QixFQUFFdUIsSUFBSSxJQUFJeUYsVUFBVS9FLEVBQUV4QixFQUFFdUIsRUFBRUEsRUFBRVQsS0FBS1MsRUFBRVQsR0FBRyxJQUFJK0csRUFBRXJHLEVBQUUrRSxZQUFZL0UsRUFBRStFLFVBQVUsSUFBYSxJQUFJVyxLQUFibEgsSUFBSXlCLEVBQUVYLEdBQVlXLEVBQXlCZ0YsSUFBdkJDLEdBQUczRixHQUFHYixRQUFHLElBQVNBLEVBQUVnSCxJQUFRaEgsRUFBRXVCLEdBQUd5RixHQUFHaEIsRUFBRXlCLEdBQUdqQixFQUFFUCxFQUFFTSxFQUFFbEgsR0FBRzZHLEdBQUcsbUJBQW1CSyxFQUFFTixFQUFFVyxTQUFTNUYsS0FBS3VGLEdBQUdBLEVBQUV2RyxHQUFHbUgsRUFBRW5ILEVBQUVnSCxFQUFFVCxFQUFFeEcsRUFBRUYsRUFBRStILEdBQUd0RyxFQUFFMEYsSUFBSVQsR0FBRy9FLEVBQUVGLEVBQUUwRixFQUFFaEIsR0FBR0UsR0FBR3lCLEVBQUVYLElBQUlULElBQUlvQixFQUFFWCxHQUFHVCxJQUFJbEgsRUFBRXdJLEtBQUt4RyxFQUFFeEIsRUFBRXdILEVBQUUsRUFBRXhILEVBQUV5SCxFQUFFLEVBQUV6SCxFQUFFMkgsRUFBRSxFQUFFM0gsRUFBRWpCLEVBQUUsRUFBRWlCLEVBQUU2SCxFQUFFLEdBQUc3SCxFQUFFaUksRUFBRSxHQUFHakksRUFBRStILEVBQUUsR0FBRy9ILEVBQUVrSSxFQUFFLElBQUloSSxFQUFFZ0csUUFBUWxHLEdBQUcsU0FBU0UsRUFBRWEsRUFBRVcsR0FBRyxJQUFJbEMsRUFBRWtDLEVBQUUsSUFBSUYsRUFBRUUsRUFBRSxJQUFJeEIsRUFBRWdHLFFBQVF4RSxFQUFFLEdBQUcsU0FBU3hCLEVBQUVhLEVBQUVXLEdBQUcsT0FBT2xDLEVBQUVRLEVBQUVFLEVBQUVhLEVBQUVTLEVBQUUsRUFBRUUsS0FBSyxTQUFTeEIsRUFBRWEsRUFBRVcsR0FBRyxPQUFPeEIsRUFBRWEsR0FBR1csRUFBRXhCLElBQUksU0FBU0EsRUFBRWEsR0FBRyxJQUFJVyxFQUFFLEVBQUVsQyxFQUFFcUgsS0FBS3NCLFNBQVNqSSxFQUFFZ0csUUFBUSxTQUFTaEcsR0FBRyxNQUFNLFVBQVU4QixZQUFPLElBQVM5QixFQUFFLEdBQUdBLEVBQUUsUUFBUXdCLEVBQUVsQyxHQUFHNEgsU0FBUyxPQUFPLFNBQVNsSCxFQUFFYSxFQUFFVyxHQUFHLElBQUlsQyxFQUFFa0MsRUFBRSxJQUFJeEIsRUFBRWdHLFFBQVEsU0FBU2hHLEVBQUVhLEVBQUVXLEdBQUcsR0FBR2xDLEVBQUVVLFFBQUcsSUFBU2EsRUFBRSxPQUFPYixFQUFFLE9BQU93QixHQUFHLEtBQUssRUFBRSxPQUFPLFNBQVNBLEdBQUcsT0FBT3hCLEVBQUVpQixLQUFLSixFQUFFVyxJQUFJLEtBQUssRUFBRSxPQUFPLFNBQVNBLEVBQUVsQyxHQUFHLE9BQU9VLEVBQUVpQixLQUFLSixFQUFFVyxFQUFFbEMsSUFBSSxLQUFLLEVBQUUsT0FBTyxTQUFTa0MsRUFBRWxDLEVBQUVnQyxHQUFHLE9BQU90QixFQUFFaUIsS0FBS0osRUFBRVcsRUFBRWxDLEVBQUVnQyxJQUFJLE9BQU8sV0FBVyxPQUFPdEIsRUFBRUwsTUFBTWtCLEVBQUVnQixjQUFjLFNBQVM3QixFQUFFYSxHQUFHYixFQUFFZ0csUUFBUSxTQUFTaEcsR0FBRyxHQUFHLE1BQVFBLEVBQUUsTUFBTWdCLFVBQVUseUJBQXlCaEIsR0FBRyxPQUFPQSxJQUFJLFNBQVNBLEVBQUVhLEVBQUVXLEdBQUcsSUFBSWxDLEVBQUVrQyxFQUFFLElBQUlGLEVBQUVxRixLQUFLdUIsSUFBSWxJLEVBQUVnRyxRQUFRLFNBQVNoRyxHQUFHLE9BQVMsRUFBRkEsRUFBSXNCLEVBQUVoQyxFQUFFVSxHQUFHLGtCQUFrQixJQUFJLFNBQVNBLEVBQUVhLEVBQUVXLEdBQUdYLEVBQWV1RixZQUFXLEVBQUd2RixFQUFFd0YsUUFBUSxTQUFTckcsRUFBRWEsR0FBRyxHQUFHYixHQUFHYSxFQUFFLENBQUMsSUFBSVcsRUFBRWdELE1BQU1DLFFBQVE1RCxHQUFHQSxFQUFFQSxFQUFFMkIsTUFBTSxLQUFLbEQsRUFBRVUsRUFBRW9DLE1BQU0sR0FBR2QsRUFBRXRCLEVBQUVzQyxNQUFNLEdBQUdiLEVBQUVILEVBQUU2RyxRQUFRLFFBQVEsSUFBSSxPQUFPM0csRUFBRTRHLEtBQUssU0FBU3BJLEdBQUcsSUFBSWEsRUFBRWIsRUFBRXFJLE9BQU8sTUFBTSxNQUFNeEgsRUFBRXlILE9BQU8sR0FBR2hKLEVBQUVtRCxjQUFjOEYsU0FBUzFILEVBQUU0QixlQUFlNUIsRUFBRTBILFNBQVMsTUFBTTlHLElBQUlaLEVBQUVzSCxRQUFRLFFBQVEsSUFBSTdHLElBQUlULElBQUksT0FBTSxHQUFJVyxFQUFFLElBQUlBLEVBQUUsS0FBSyxTQUFTeEIsRUFBRWEsRUFBRVcsR0FBR0EsRUFBRSxJQUFJeEIsRUFBRWdHLFFBQVF4RSxFQUFFLEdBQUdnRCxNQUFNNEQsTUFBTSxTQUFTcEksRUFBRWEsRUFBRVcsR0FBZ0IsSUFBSWxDLEVBQUVrQyxFQUFFLEdBQUdGLEVBQUVFLEVBQUUsR0FBRkEsQ0FBTSxHQUFHbEMsRUFBRUEsRUFBRVQsRUFBRVMsRUFBRWdJLEdBQUc5RixFQUFFLEdBQUZBLENBQU0sR0FBRzRHLE1BQUssR0FBSSxRQUFRLENBQUNBLEtBQUssU0FBU3BJLEdBQUcsT0FBT3NCLEVBQUVWLEtBQUtaLEVBQUU2QixVQUFVLFFBQVEsU0FBUzdCLEVBQUVhLEVBQUVXLEdBQUcsSUFBSWxDLEVBQUVrQyxFQUFFLElBQUlGLEVBQUVFLEVBQUUsSUFBSUMsRUFBRUQsRUFBRSxJQUFJNEYsRUFBRXpFLE9BQU9DLGVBQWUvQixFQUFFZixFQUFFMEIsRUFBRSxHQUFHbUIsT0FBT0MsZUFBZSxTQUFTNUMsRUFBRWEsRUFBRVcsR0FBRyxHQUFHbEMsRUFBRVUsR0FBR2EsRUFBRVksRUFBRVosR0FBRSxHQUFJdkIsRUFBRWtDLEdBQUdGLEVBQUUsSUFBSSxPQUFPOEYsRUFBRXBILEVBQUVhLEVBQUVXLEdBQUcsTUFBTXhCLElBQUksR0FBRyxRQUFRd0IsR0FBRyxRQUFRQSxFQUFFLE1BQU1SLFVBQVUsNEJBQTRCLE1BQU0sVUFBVVEsSUFBSXhCLEVBQUVhLEdBQUdXLEVBQUVyQyxPQUFPYSxJQUFJLFNBQVNBLEVBQUVhLEVBQUVXLEdBQUcsSUFBSWxDLEVBQUVrQyxFQUFFLEdBQUd4QixFQUFFZ0csUUFBUSxTQUFTaEcsR0FBRyxJQUFJVixFQUFFVSxHQUFHLE1BQU1nQixVQUFVaEIsRUFBRSxzQkFBc0IsT0FBT0EsSUFBSSxTQUFTQSxFQUFFYSxFQUFFVyxHQUFHeEIsRUFBRWdHLFNBQVN4RSxFQUFFLEtBQUtBLEVBQUUsRUFBRkEsQ0FBSyxXQUFXLE9BQU8sR0FBR21CLE9BQU9DLGVBQWVwQixFQUFFLEdBQUZBLENBQU0sT0FBTyxJQUFJLENBQUNrQixJQUFJLFdBQVcsT0FBTyxLQUFLdUUsS0FBSyxTQUFTakgsRUFBRWEsRUFBRVcsR0FBRyxJQUFJbEMsRUFBRWtDLEVBQUUsR0FBR0YsRUFBRUUsRUFBRSxHQUFHZ0gsU0FBUy9HLEVBQUVuQyxFQUFFZ0MsSUFBSWhDLEVBQUVnQyxFQUFFbUgsZUFBZXpJLEVBQUVnRyxRQUFRLFNBQVNoRyxHQUFHLE9BQU95QixFQUFFSCxFQUFFbUgsY0FBY3pJLEdBQUcsS0FBSyxTQUFTQSxFQUFFYSxFQUFFVyxHQUFHLElBQUlsQyxFQUFFa0MsRUFBRSxHQUFHeEIsRUFBRWdHLFFBQVEsU0FBU2hHLEVBQUVhLEdBQUcsSUFBSXZCLEVBQUVVLEdBQUcsT0FBT0EsRUFBRSxJQUFJd0IsRUFBRUYsRUFBRSxHQUFHVCxHQUFHLG1CQUFtQlcsRUFBRXhCLEVBQUVrSCxZQUFZNUgsRUFBRWdDLEVBQUVFLEVBQUVQLEtBQUtqQixJQUFJLE9BQU9zQixFQUFFLEdBQUcsbUJBQW1CRSxFQUFFeEIsRUFBRTBJLFdBQVdwSixFQUFFZ0MsRUFBRUUsRUFBRVAsS0FBS2pCLElBQUksT0FBT3NCLEVBQUUsSUFBSVQsR0FBRyxtQkFBbUJXLEVBQUV4QixFQUFFa0gsWUFBWTVILEVBQUVnQyxFQUFFRSxFQUFFUCxLQUFLakIsSUFBSSxPQUFPc0IsRUFBRSxNQUFNTixVQUFVLDZDQUE2QyxTQUFTaEIsRUFBRWEsR0FBR2IsRUFBRWdHLFFBQVEsU0FBU2hHLEVBQUVhLEdBQUcsTUFBTSxDQUFDa0MsYUFBYSxFQUFFL0MsR0FBRzhDLGVBQWUsRUFBRTlDLEdBQUc2QyxXQUFXLEVBQUU3QyxHQUFHYixNQUFNMEIsS0FBSyxTQUFTYixFQUFFYSxFQUFFVyxHQUFHLElBQUlsQyxFQUFFa0MsRUFBRSxHQUFHRixFQUFFRSxFQUFFLEdBQUdDLEVBQUVELEVBQUUsSUFBSTRGLEVBQUU1RixFQUFFLEVBQUZBLENBQUssT0FBTzBFLEVBQUVXLFNBQVNLLFNBQVNwSCxHQUFHLEdBQUdvRyxHQUFHMUQsTUFBTSxZQUFZaEIsRUFBRSxHQUFHbUgsY0FBYyxTQUFTM0ksR0FBRyxPQUFPa0csRUFBRWpGLEtBQUtqQixLQUFLQSxFQUFFZ0csUUFBUSxTQUFTaEcsRUFBRWEsRUFBRVcsRUFBRTBFLEdBQUcsSUFBSWUsRUFBRSxtQkFBbUJ6RixFQUFFeUYsSUFBSXhGLEVBQUVELEVBQUUsU0FBU0YsRUFBRUUsRUFBRSxPQUFPWCxJQUFJYixFQUFFYSxLQUFLVyxJQUFJeUYsSUFBSXhGLEVBQUVELEVBQUU0RixJQUFJOUYsRUFBRUUsRUFBRTRGLEVBQUVwSCxFQUFFYSxHQUFHLEdBQUdiLEVBQUVhLEdBQUdmLEVBQUU4SSxLQUFLQyxPQUFPaEksTUFBTWIsSUFBSVYsRUFBRVUsRUFBRWEsR0FBR1csRUFBRTBFLEVBQUVsRyxFQUFFYSxHQUFHYixFQUFFYSxHQUFHVyxFQUFFRixFQUFFdEIsRUFBRWEsRUFBRVcsV0FBV3hCLEVBQUVhLEdBQUdTLEVBQUV0QixFQUFFYSxFQUFFVyxPQUFPcUYsU0FBU1AsVUFBVSxXQUFXLFdBQVcsTUFBTSxtQkFBbUIxRixNQUFNQSxLQUFLd0csSUFBSWxCLEVBQUVqRixLQUFLTCxTQUFTLFNBQVNaLEVBQUVhLEdBQUcsSUFBSVcsRUFBRSxHQUFHK0UsZUFBZXZHLEVBQUVnRyxRQUFRLFNBQVNoRyxFQUFFYSxHQUFHLE9BQU9XLEVBQUVQLEtBQUtqQixFQUFFYSxLQUFLLFNBQVNiLEVBQUVhLEdBQUdiLEVBQUVnRyxRQUFRLFNBQVNoRyxHQUFHLEdBQUcsbUJBQW1CQSxFQUFFLE1BQU1nQixVQUFVaEIsRUFBRSx1QkFBdUIsT0FBT0EsSUFBSSxTQUFTQSxFQUFFYSxFQUFFVyxHQUFHLElBQUlsQyxFQUFFa0MsRUFBRSxJQUFJRixFQUFFRSxFQUFFLElBQUlDLEVBQUVELEVBQUUsSUFBSTRGLEVBQUU1RixFQUFFLElBQUkwRSxFQUFFMUUsRUFBRSxJQUFJeEIsRUFBRWdHLFFBQVEsU0FBU2hHLEVBQUVhLEdBQUcsSUFBSVcsRUFBRSxHQUFHeEIsRUFBRUYsRUFBRSxHQUFHRSxFQUFFaUgsRUFBRSxHQUFHakgsRUFBRXlHLEVBQUUsR0FBR3pHLEVBQUV3RyxFQUFFLEdBQUd4RyxFQUFFaUcsRUFBRSxHQUFHakcsR0FBR3dHLEVBQUUxRixFQUFFRCxHQUFHcUYsRUFBRSxPQUFPLFNBQVNyRixFQUFFcUYsRUFBRW5HLEdBQUcsSUFBSSxJQUFJeUgsRUFBRXJCLEVBQUV1QixFQUFFakcsRUFBRVosR0FBR1osRUFBRXFCLEVBQUVvRyxHQUFHbkcsRUFBRWpDLEVBQUU0RyxFQUFFbkcsRUFBRSxHQUFHNkgsRUFBRVIsRUFBRW5ILEVBQUVrQixRQUFRakIsRUFBRSxFQUFFNEksRUFBRXRILEVBQUVWLEVBQUVELEVBQUUrRyxHQUFHOUgsRUFBRWdCLEVBQUVELEVBQUUsUUFBRyxFQUFTWCxFQUFGMEgsRUFBSTFILElBQUksSUFBSStGLEdBQUcvRixLQUFLRCxLQUFZa0csRUFBRTVFLEVBQVRpRyxFQUFFdkgsRUFBRUMsR0FBU0EsRUFBRXdILEdBQUcxSCxHQUFHLEdBQUd3QixFQUFFc0gsRUFBRTVJLEdBQUdpRyxPQUFPLEdBQUdBLEVBQUUsT0FBT25HLEdBQUcsS0FBSyxFQUFFLE9BQU0sRUFBRyxLQUFLLEVBQUUsT0FBT3dILEVBQUUsS0FBSyxFQUFFLE9BQU90SCxFQUFFLEtBQUssRUFBRTRJLEVBQUUxSCxLQUFLb0csUUFBUSxHQUFHZixFQUFFLE9BQU0sRUFBRyxPQUFPRCxHQUFHLEVBQUVTLEdBQUdSLEVBQUVBLEVBQUVxQyxLQUFLLFNBQVM5SSxFQUFFYSxFQUFFVyxHQUFHLElBQUlsQyxFQUFFa0MsRUFBRSxHQUFHeEIsRUFBRWdHLFFBQVFyRCxPQUFPLEtBQUtvRyxxQkFBcUIsR0FBR3BHLE9BQU8sU0FBUzNDLEdBQUcsTUFBTSxVQUFVVixFQUFFVSxHQUFHQSxFQUFFd0MsTUFBTSxJQUFJRyxPQUFPM0MsS0FBSyxTQUFTQSxFQUFFYSxFQUFFVyxHQUFHLElBQUlsQyxFQUFFa0MsRUFBRSxJQUFJeEIsRUFBRWdHLFFBQVEsU0FBU2hHLEdBQUcsT0FBTzJDLE9BQU9yRCxFQUFFVSxNQUFNLFNBQVNBLEVBQUVhLEdBQUcsSUFBSVcsRUFBRW1GLEtBQUtxQyxLQUFLMUosRUFBRXFILEtBQUtzQyxNQUFNakosRUFBRWdHLFFBQVEsU0FBU2hHLEdBQUcsT0FBT2tKLE1BQU1sSixHQUFHQSxHQUFHLEdBQUssRUFBRkEsRUFBSVYsRUFBRWtDLEdBQUd4QixLQUFLLFNBQVNBLEVBQUVhLEVBQUVXLEdBQUcsSUFBSWxDLEVBQUVrQyxFQUFFLElBQUl4QixFQUFFZ0csUUFBUSxTQUFTaEcsRUFBRWEsR0FBRyxPQUFPLElBQUl2QixFQUFFVSxHQUFOLENBQVVhLEtBQUssU0FBU2IsRUFBRWEsRUFBRVcsR0FBRyxJQUFJbEMsRUFBRWtDLEVBQUUsR0FBR0YsRUFBRUUsRUFBRSxJQUFJQyxFQUFFRCxFQUFFLEVBQUZBLENBQUssV0FBV3hCLEVBQUVnRyxRQUFRLFNBQVNoRyxHQUFHLElBQUlhLEVBQUUsT0FBT1MsRUFBRXRCLEtBQXFCLG1CQUFoQmEsRUFBRWIsRUFBRW1KLGNBQWtDdEksSUFBSTJELFFBQVFsRCxFQUFFVCxFQUFFeUYsYUFBYXpGLE9BQUUsR0FBUXZCLEVBQUV1QixJQUFJLFFBQVFBLEVBQUVBLEVBQUVZLE1BQU1aLE9BQUUsU0FBUyxJQUFTQSxFQUFFMkQsTUFBTTNELElBQUksU0FBU2IsRUFBRWEsRUFBRVcsR0FBRyxJQUFJbEMsRUFBRWtDLEVBQUUsR0FBR3hCLEVBQUVnRyxRQUFReEIsTUFBTUMsU0FBUyxTQUFTekUsR0FBRyxNQUFNLFNBQVNWLEVBQUVVLEtBQUssU0FBU0EsRUFBRWEsRUFBRVcsR0FBRyxJQUFJbEMsRUFBRWtDLEVBQUUsR0FBR0YsRUFBRWhDLEVBQUUsd0JBQXdCQSxFQUFFLHNCQUFzQixJQUFJVSxFQUFFZ0csUUFBUSxTQUFTaEcsR0FBRyxPQUFPc0IsRUFBRXRCLEtBQUtzQixFQUFFdEIsR0FBRyxNQUFNLFNBQVNBLEVBQUVhLEVBQUVXLEdBQWdCLElBQUlsQyxFQUFFa0MsRUFBRSxHQUFHeEIsRUFBRWdHLFFBQVEsU0FBU2hHLEVBQUVhLEdBQUcsUUFBUWIsR0FBR1YsRUFBRSxXQUFXdUIsRUFBRWIsRUFBRWlCLEtBQUssS0FBSyxhQUFhLEdBQUdqQixFQUFFaUIsS0FBSyxVQUFVLFNBQVNqQixFQUFFYSxFQUFFVyxHQUFHQSxFQUFFLElBQUl4QixFQUFFZ0csUUFBUXhFLEVBQUUsR0FBR3FILE9BQU9OLFVBQVUsU0FBU3ZJLEVBQUVhLEVBQUVXLEdBQUcsSUFBaUJsQyxFQUFFa0MsRUFBRSxHQUFHRixFQUFFRSxFQUFFLElBQUlDLEVBQUVELEVBQUUsSUFBSTRGLEVBQUUsR0FBR21CLFNBQVNqSixFQUFFQSxFQUFFVCxFQUFFUyxFQUFFZ0ksRUFBRTlGLEVBQUUsR0FBRkEsQ0FBTSxZQUFZLFNBQVMsQ0FBQytHLFNBQVMsU0FBU3ZJLEdBQUcsSUFBSWEsRUFBRVksRUFBRWIsS0FBS1osRUFBRSxZQUFZd0IsRUFBbUIsRUFBakJLLFVBQVVWLE9BQVNVLFVBQVUsUUFBRyxFQUFPdkMsRUFBRWdDLEVBQUVULEVBQUVNLFFBQVErRSxPQUFFLElBQVMxRSxFQUFFbEMsRUFBRXFILEtBQUt1QixJQUFJNUcsRUFBRUUsR0FBR2xDLEdBQUdRLEVBQUUrSSxPQUFPN0ksR0FBRyxPQUFPb0gsRUFBRUEsRUFBRW5HLEtBQUtKLEVBQUVmLEVBQUVvRyxHQUFHckYsRUFBRXNHLE1BQU1qQixFQUFFcEcsRUFBRXFCLE9BQU8rRSxLQUFLcEcsTUFBTSxTQUFTRSxFQUFFYSxFQUFFVyxHQUFHLElBQUlsQyxFQUFFa0MsRUFBRSxJQUFJRixFQUFFRSxFQUFFLElBQUl4QixFQUFFZ0csUUFBUSxTQUFTaEcsRUFBRWEsRUFBRVcsR0FBRyxHQUFHbEMsRUFBRXVCLEdBQUcsTUFBTUcsVUFBVSxVQUFVUSxFQUFFLDBCQUEwQixPQUFPcUgsT0FBT3ZILEVBQUV0QixNQUFNLFNBQVNBLEVBQUVhLEVBQUVXLEdBQUcsSUFBSWxDLEVBQUVrQyxFQUFFLEdBQUdGLEVBQUVFLEVBQUUsR0FBR0MsRUFBRUQsRUFBRSxFQUFGQSxDQUFLLFNBQVN4QixFQUFFZ0csUUFBUSxTQUFTaEcsR0FBRyxJQUFJYSxFQUFFLE9BQU92QixFQUFFVSxVQUFLLEtBQVVhLEVBQUViLEVBQUV5QixNQUFNWixFQUFFLFVBQVVTLEVBQUV0QixNQUFNLFNBQVNBLEVBQUVhLEVBQUVXLEdBQUcsSUFBSWxDLEVBQUVrQyxFQUFFLEVBQUZBLENBQUssU0FBU3hCLEVBQUVnRyxRQUFRLFNBQVNoRyxHQUFHLElBQUlhLEVBQUUsSUFBSSxJQUFJLE1BQU1iLEdBQUdhLEdBQUcsTUFBTVcsR0FBRyxJQUFJLE9BQU9YLEVBQUV2QixJQUFHLEdBQUksTUFBTVUsR0FBR2EsR0FBRyxNQUFNYixLQUFLLE9BQU0saUlDSWh5TixTQUFTb0osR0FBYWxILEVBQU1tSCxTQUNaLDJCQUFkbkgsRUFBS0ksTUFBcUNnSCxFQUFRcEgsRUFBTW1ILEdBYzFELFNBQVNFLEdBQXFCQyxTQUNPLG1CQUEvQkEsRUFBTUQscUJBQ1JDLEVBQU1ELDRCQUMwQixJQUF2QkMsRUFBTUMsY0FDZkQsRUFBTUMsYUFLVixTQUFTQyxHQUFlRixVQUN4QkEsRUFBTWhHLGFBS0pnQixNQUFNOEIsVUFBVThCLEtBQUtuSCxLQUMxQnVJLEVBQU1oRyxhQUFhbUcsTUFDbkIsU0FBQXJILFNBQWlCLFVBQVRBLEdBQTZCLDJCQUFUQSxNQU5uQmtILEVBQU03RSxVQUFZNkUsRUFBTTdFLE9BQU9MLE1BZXJDLFNBQVNzRixHQUFtQkosR0FDakNBLEVBQU1LLGlCQXlCRCxTQUFTQyxnQ0FBd0JDLDJCQUFBQSx5QkFDL0IsU0FBQ1AsOEJBQVVRLG1DQUFBQSwyQkFDaEJELEVBQUkzQixLQUFLLFNBQUE2QixVQUNGVixHQUFxQkMsSUFBVVMsR0FDbENBLGdCQUFHVCxVQUFVUSxJQUVSVCxHQUFxQkMsTUN4Q2xDLElBQU1VLEVBQVdDLGNBQVcsV0FBMEJDLE9BQXZCQyxJQUFBQSxXQUNGQyxzQkFBbkJDLElBQUFBLEtBQVNDLHdCQUVqQkMsYUFBVSxpQkFDVyxtQkFBUkwsRUFDVEEsRUFBSSxDQUFFRyxLQUFBQSxJQUNrQixXQUFmRyxFQUFPTixJQUE0QixPQUFSQSxJQUNwQ0EsRUFBSU8sUUFBVSxDQUFFSixLQUFBQSxJQUdYLFdBQ2MsbUJBQVJILEVBQ1RBLEVBQUksTUFDb0IsV0FBZk0sRUFBT04sSUFBNEIsT0FBUkEsSUFDcENBLEVBQUlPLFFBQVUsUUFHakIsQ0FBQ1AsSUFHR1EsZ0JBQUNDLGlCQUFVUixRQUFjRyxHQUFPRCxLQUFBQSxRQUd6Q0wsRUFBU1ksWUFBYyxXQWtPdkIsSUFBTUMsR0FBZSxDQUNuQkMsWUFsT0ZkLEVBQVNlLFVBQVksQ0FpQm5CWixTQUFVYSxFQUFVQyxLQVVwQjlCLE9BQVE2QixFQUFVRSxVQUFVLENBQUNGLEVBQVVHLE9BQVFILEVBQVVJLFFBQVFKLEVBQVVHLFVBSzNFRSxTQUFVTCxFQUFVTSxLQUtwQkMsc0JBQXVCUCxFQUFVTSxLQUtqQ0UsUUFBU1IsRUFBVU0sS0FNbkJHLFdBQVlULEVBQVVNLEtBS3RCSSxPQUFRVixFQUFVTSxLQUtsQksscUJBQXNCWCxFQUFVTSxLQUtoQ00sUUFBU1osRUFBVWEsT0FLbkJDLFFBQVNkLEVBQVVhLE9BS25CRSxTQUFVZixFQUFVTSxLQU9wQlUsa0JBQW1CaEIsRUFBVUMsS0FLN0JnQixtQkFBb0JqQixFQUFVQyxLQU85QmlCLFlBQWFsQixFQUFVQyxLQU92QmtCLFlBQWFuQixFQUFVQyxLQU92Qm1CLFdBQVlwQixFQUFVQyxLQWdDdEJvQixPQUFRckIsRUFBVUMsS0FTbEJxQixlQUFnQnRCLEVBQVVDLEtBUzFCc0IsZUFBZ0J2QixFQUFVQyxPQXVFMUJ1QixvQkFBb0IsRUFDcEJDLGNBQWMsRUFDZEMsY0FBYyxFQUNkQyxjQUFjLEVBQ2RDLGFBQWMsR0FDZEMsY0FBZSxHQUNmQyxjQUFlLElBMkVWLFNBQVMxQyxpRUFtQlosR0FsQkZqQixJQUFBQSxXQUNBNEMsU0FBQUEsb0JBQ0FDLGtCQUFBQSxhQUFvQi9JLFNBQ3BCNkksUUFBQUEsYUFBVWlCLEVBQUFBLFFBQ1ZuQixRQUFBQSxhQUFVLFFBQ1ZQLFNBQUFBLGdCQUNBYSxJQUFBQSxZQUNBQyxJQUFBQSxZQUNBQyxJQUFBQSxXQUNBQyxJQUFBQSxPQUNBQyxJQUFBQSxlQUNBQyxJQUFBQSxlQUNBTixJQUFBQSx1QkFDQVYsc0JBQUFBLG9CQUNBQyxRQUFBQSxvQkFDQUMsV0FBQUEsb0JBQ0FDLE9BQUFBLG9CQUNBQyxxQkFBQUEsZ0JBRU1xQixFQUFVQyxVQUFPLE1BQ2pCQyxFQUFXRCxVQUFPLFdBRUVFLGNBQVdDLEdBQVN2QyxPQUF2Q3dDLE9BQU9DLE9BQ054QyxFQUFnRHVDLEVBQWhEdkMsVUFBVzBCLEVBQXFDYSxFQUFyQ2IsbUJBQW9CSSxFQUFpQlMsRUFBakJULGFBR2pDVyxFQUFpQixXQUNqQkwsRUFBU3pDLFVBQ1g2QyxFQUFTLENBQUVsTCxLQUFNLGVBQ2pCOEssRUFBU3pDLFFBQVF4TCxNQUFRLEtBQ3pCaU8sRUFBU3pDLFFBQVErQyxVQUtmQyxFQUFnQixXQUVoQmpCLEdBQ0ZrQixXQUFXLFdBQ0xSLEVBQVN6QyxVQUNPeUMsRUFBU3pDLFFBQW5CckcsTUFFR25ELFNBQ1RxTSxFQUFTLENBQUVsTCxLQUFNLGdCQUVpQixtQkFBdkI2SixHQUNUQSxPQUlMLE1BR1AxQixhQUFVLGtCQUNSL0QsT0FBT21ILGlCQUFpQixRQUFTRixHQUFlLEdBQ3pDLFdBQ0xqSCxPQUFPb0gsb0JBQW9CLFFBQVNILEdBQWUsS0FFcEQsQ0FBQ1AsRUFBVVYsRUFBb0JQLFFBRzVCNEIsRUFBY0MsZUFDbEIsU0FBQXhFLEdBRU8wRCxFQUFRdkMsU0FBWXVDLEVBQVF2QyxRQUFRc0QsWUFBWXpFLEVBQU03RSxVQUlyQyxLQUFsQjZFLEVBQU0wRSxTQUFvQyxLQUFsQjFFLEVBQU0wRSxVQUNoQzFFLEVBQU1LLGlCQUNONEQsT0FHSixDQUFDUCxFQUFTRSxJQUlOZSxFQUFZSCxlQUFZLFdBQzVCUixFQUFTLENBQUVsTCxLQUFNLFdBQ2hCLElBQ0c4TCxFQUFXSixlQUFZLFdBQzNCUixFQUFTLENBQUVsTCxLQUFNLFVBQ2hCLElBR0crTCxFQUFZTCxlQUFZLFdBQ3hCdEMsS0QvWUQsZUFSTzRDLEVBUWFBLHlEQUFZNUgsT0FBTzZILFVBQVVELGlCQVBoQixLQUQxQkEsRUFTQUEsR0FSSzFKLFFBQVEsVUFBcUQsSUFBbkMwSixFQUFVMUosUUFBUSxjQUl0QixJQUlOMEosRUFKaEIxSixRQUFRLFNDeVpuQjRKLEdBR0ZmLElBRkFHLFdBQVdILEVBQWdCLEtBSTVCLENBQUNMLEVBQVUxQixJQUVSK0MsRUFBaUJ0QixVQUFPLElBQ3hCdUIsRUFBaUIsU0FBQWxGLEdBQ2pCMEQsRUFBUXZDLFNBQVd1QyxFQUFRdkMsUUFBUWdFLFNBQVNuRixFQUFNN0UsVUFJdEQ2RSxFQUFNSyxpQkFDTjRFLEVBQWU5RCxRQUFVLEtBRzNCRixhQUFVLGtCQUNKZ0IsSUFDRmpELFNBQVNxRixpQkFBaUIsV0FBWWpFLElBQW9CLEdBQzFEcEIsU0FBU3FGLGlCQUFpQixPQUFRYSxHQUFnQixJQUc3QyxXQUNEakQsSUFDRmpELFNBQVNzRixvQkFBb0IsV0FBWWxFLElBQ3pDcEIsU0FBU3NGLG9CQUFvQixPQUFRWSxNQUd4QyxDQUFDeEIsRUFBU3pCLFFEaGV5QnBDLEVDa2VoQ3VGLEVBQWdCWixlQUNwQixTQUFBeEUsR0FDRUEsRUFBTUssaUJBRU5MLEVBQU1xRixVQUNOQyxFQUFnQnRGLElBR3NDLElBQWxEaUYsRUFBZTlELFFBQVEvRixRQUFRNEUsRUFBTTdFLFVBQ3ZDOEosRUFBZTlELHFCQUFjOEQsRUFBZTlELFVBQVNuQixFQUFNN0UsVUFHekQrRSxHQUFlRixJQUNqQnpLLFFBQVFDLFFBQVFrTixFQUFrQjFDLElBQVE5SixLQUFLLFNBQUFvTixHQUN6Q3ZELEdBQXFCQyxLQUFXcUMsSUFJcEMyQixFQUFTLENBQ1BWLGFBQUFBLEVBQ0FILGNBQWMsRUFDZHJLLEtBQU0sb0JBR0o4SixHQUNGQSxFQUFZNUMsT0FLcEIsQ0FBQzBDLEVBQW1CRSxFQUFhUCxJQUc3QmtELEVBQWVmLGVBQ25CLFNBQUF4RSxNQUNFQSxFQUFNSyxpQkFDTkwsRUFBTXFGLFVBQ05DLEVBQWdCdEYsR0FFWkEsRUFBTWhHLGlCQUVOZ0csRUFBTWhHLGFBQWF3TCxXQUFhLE9BQ2hDLGlCQUdBdEYsR0FBZUYsSUFBVThDLEdBQzNCQSxFQUFXOUMsSUFHTixHQUVULENBQUM4QyxFQUFZVCxJQUdUb0QsRUFBZ0JqQixlQUNwQixTQUFBeEUsR0FDRUEsRUFBTUssaUJBQ05MLEVBQU1xRixVQUNOQyxFQUFnQnRGLE9BR1YwRixFQUFVVCxFQUFlOUQsUUFBUS9HLE9BQ3JDLFNBQUFlLFVBQVVBLElBQVc2RSxFQUFNN0UsUUFBVXVJLEVBQVF2QyxTQUFXdUMsRUFBUXZDLFFBQVFnRSxTQUFTaEssS0FHOUQsR0FEckI4SixFQUFlOUQsUUFBVXVFLEdBQ2IvTixTQUlacU0sRUFBUyxDQUNQYixjQUFjLEVBQ2RySyxLQUFNLGtCQUNOd0ssYUFBYyxLQUdacEQsR0FBZUYsSUFBVTZDLEdBQzNCQSxFQUFZN0MsS0FHaEIsQ0FBQzBELEVBQVNiLEVBQWFSLElBR25Cc0QsRUFBV25CLGVBQ2YsU0FBQXhFLEdBQ0VBLEVBQU1LLGlCQUVOTCxFQUFNcUYsVUFDTkMsRUFBZ0J0RixHQUVoQmlGLEVBQWU5RCxRQUFVLEdBQ3pCNkMsRUFBUyxDQUFFbEwsS0FBTSxVQUVib0gsR0FBZUYsSUFDakJ6SyxRQUFRQyxRQUFRa04sRUFBa0IxQyxJQUFROUosS0FBSyxTQUFBNEUsT0FDekNpRixHQUFxQkMsSUFBV3FDLE9BSTlCa0IsRUFBZ0IsR0FDaEJDLEVBQWdCLEdBRXRCMUksRUFBTThLLFFBQVEsU0FBQWxOLEdEM2tCakIsSUFBdUJBLEVBQU04SixFQUFTRixFQzRrQjdCMUMsR0FBYWxILEVBQU1tSCxLRDVrQkMyQyxFQzRrQjhCQSxFRDVrQnJCRixFQzRrQjhCQSxHRDVrQjdDNUosRUM0a0I4QkEsR0Qza0I5Q21OLE1BQVFyRCxHQUFXOUosRUFBS21OLE1BQVF2RCxHQzRrQmhDaUIsRUFBYzNMLEtBQUtjLEdBRW5COEssRUFBYzVMLEtBQUtjLE1BSWxCcUosR0FBbUMsRUFBdkJ3QixFQUFjNUwsUUFDN0I2TCxFQUFjNUwsV0FBZDRMLEtBQXNCRCxFQUFjdUMsT0FBTyxLQUc3QzlCLEVBQVMsQ0FDUFQsY0FBQUEsRUFDQUMsY0FBQUEsRUFDQTFLLEtBQU0sYUFHSmlLLEdBQ0ZBLEVBQU9RLEVBQWVDLEVBQWV4RCxHQUdaLEVBQXZCd0QsRUFBYzdMLFFBQWNzTCxHQUM5QkEsRUFBZU8sRUFBZXhELEdBR0wsRUFBdkJ1RCxFQUFjNUwsUUFBY3FMLEdBQzlCQSxFQUFlTyxFQUFldkQsT0FLdEMsQ0FDRStCLEVBQ0FsQyxFQUNBeUMsRUFDQUUsRUFDQUUsRUFDQUssRUFDQUMsRUFDQUMsRUFDQVosSUFJRTBELEVBQWlCLFNBQUF0RixVQUNkZ0MsRUFBVyxLQUFPaEMsR0FHckJ1RixFQUF5QixTQUFBdkYsVUFDdEIwQixFQUFhLEtBQU80RCxFQUFldEYsSUFHdEN3RixFQUFxQixTQUFBeEYsVUFDbEIyQixFQUFTLEtBQU8yRCxFQUFldEYsSUFHbEM2RSxFQUFrQixTQUFBdEYsR0FDbEJxQyxHQUNGckMsRUFBTXNGLG1CQUlKWSxHQUFlQyxXQUNuQixrQkFBTSx3RUFXRixPQVZGQyxPQUFBQSxhQUFTLFFBQ1RDLElBQUFBLFVBQ0FDLElBQUFBLFFBQ0FDLElBQUFBLE9BQ0FDLElBQUFBLFFBQ0E1RCxJQUFBQSxZQUNBRSxJQUFBQSxXQUNBRCxJQUFBQSxZQUNBRSxJQUFBQSxPQUNHMEQsNEhBRUhKLFVBQVdMLEVBQXVCMUYsR0FBcUIrRixFQUFXOUIsSUFDbEUrQixRQUFTTixFQUF1QjFGLEdBQXFCZ0csRUFBUzNCLElBQzlENEIsT0FBUVAsRUFBdUIxRixHQUFxQmlHLEVBQVEzQixJQUM1RDRCLFFBQVNULEVBQWV6RixHQUFxQmtHLEVBQVMzQixJQUN0RGpDLFlBQWFxRCxFQUFtQjNGLEdBQXFCc0MsRUFBYXdDLElBQ2xFdEMsV0FBWW1ELEVBQW1CM0YsR0FBcUJ3QyxFQUFZeUMsSUFDaEUxQyxZQUFhb0QsRUFBbUIzRixHQUFxQnVDLEVBQWE0QyxJQUNsRTFDLE9BQVFrRCxFQUFtQjNGLEdBQXFCeUMsRUFBUTRDLEtBQ3ZEUyxFQUFTMUMsR0FDTGpCLEdBQWFOLEVBQStCLEdBQWxCLENBQUV1RSxTQUFVLEdBQ3hDRCxLQUVMLENBQ0UvQyxFQUNBYSxFQUNBSSxFQUNBQyxFQUNBQyxFQUNBTyxFQUNBRyxFQUNBRSxFQUNBRSxFQUNBeEQsRUFDQUMsRUFDQUssSUFJRWtFLEdBQXNCbkMsZUFBWSxTQUFBeEUsR0FDdENBLEVBQU1zRixtQkFDTCxJQUVHc0IsR0FBZ0JULFdBQ3BCLGtCQUFNLHdFQUFrRCxPQUEvQ0MsT0FBQUEsYUFBUyxRQUFPUyxJQUFBQSxTQUFVTCxJQUFBQSxRQUFZQyx5REFFM0M1RyxPQUFBQSxFQUNBa0MsU0FBQUEsRUFDQWpKLEtBQU0sT0FDTmdPLE1BQU8sQ0FBRUMsUUFBUyxRQUNsQkYsU0FBVWQsRUFBZXpGLEdBQXFCdUcsRUFBVWxCLElBQ3hEYSxRQUFTVCxFQUFlekYsR0FBcUJrRyxFQUFTRyxLQUN0REssYUFBYyxNQUNkTixVQUFXLEdBQ1ZOLEVBQVN4QyxHQUtQNkMsS0FHUCxDQUFDN0MsRUFBVS9ELEVBQVFrQyxFQUFVNEQsRUFBVWxELElBR25Dd0UsR0FBWTNELEVBQWEzTCxPQUN6QnVQLEdBQW9CbkYsR0FBWWtGLElBQWEsRUFDN0M3RCxHQUEyQixFQUFaNkQsS0Qzc0JpQnBILEVDMnNCK0JBLEVBQWR5RCxFRDFzQjFDNkQsTUFBTSxTQUFBek8sVUFBUWtILEdBQWFsSCxFQUFNbUgsbUJDOHNCekNrRSxHQUNIWCxhQUFBQSxHQUNBQyxhQUwrQixFQUFaNEQsTUFBbUI3RCxLQUFpQjhELElBTXZEMUYsVUFBV0EsSUFBY2lCLEVBQ3pCeUQsYUFBQUEsR0FDQVUsY0FBQUEsR0FDQWxELFFBQUFBLEVBQ0FFLFNBQUFBLEVBQ0E3QyxLQUFNZ0YsRUFBZTlCLEtBSXpCLFNBQVNILEdBQVFDLEVBQU9xRCxVQUVkQSxFQUFPdE8sVUFDUixxQkFFRWlMLEdBQ0h2QyxXQUFXLFFBRVYsb0JBRUV1QyxHQUNIdkMsV0FBVyxRQUVWLDBCQUVFdUMsR0FDSGIsb0JBQW9CLFFBRW5CLDJCQUVFYSxHQUNIYixvQkFBb0IsUUFFbkIsc0JBRUtDLEVBQStCaUUsRUFBL0JqRSwwQkFFSFksR0FDSFQsYUFIcUM4RCxFQUFqQjlELGFBSXBCSCxhQUFBQSxRQUVDLHdCQUVFWSxHQUNIUixjQUFlNkQsRUFBTzdELGNBQ3RCQyxjQUFlNEQsRUFBTzVELG9CQUVyQixxQkFFRU8sR0FDSGIsb0JBQW9CLEVBQ3BCQyxjQUFjLEVBQ2RHLGFBQWMsb0JBR1RTIn0=
|
|
1
|
+
!function(e,n){"object"==typeof exports&&"undefined"!=typeof module?n(exports,require("react"),require("prop-types")):"function"==typeof define&&define.amd?define(["exports","react","prop-types"],n):n((e=e||self).reactDropzone={},e.React,e.PropTypes)}(this,function(e,oe,n){"use strict";var u="default"in oe?oe.default:oe;function ie(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function r(n,e){var t=Object.keys(n);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(n);e&&(r=r.filter(function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})),t.push.apply(t,r)}return t}function ue(n){for(var e=1;e<arguments.length;e++){var t=null!=arguments[e]?arguments[e]:{};e%2?r(t,!0).forEach(function(e){ie(n,e,t[e])}):Object.getOwnPropertyDescriptors?Object.defineProperties(n,Object.getOwnPropertyDescriptors(t)):r(t).forEach(function(e){Object.defineProperty(n,e,Object.getOwnPropertyDescriptor(t,e))})}return n}function ae(e,n){if(null==e)return{};var t,r,o=function(e,n){if(null==e)return{};var t,r,o={},i=Object.keys(e);for(r=0;r<i.length;r++)t=i[r],0<=n.indexOf(t)||(o[t]=e[t]);return o}(e,n);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r<i.length;r++)t=i[r],0<=n.indexOf(t)||Object.prototype.propertyIsEnumerable.call(e,t)&&(o[t]=e[t])}return o}function ce(e,n){return function(e){if(Array.isArray(e))return e}(e)||function(e,n){if(!(Symbol.iterator in Object(e)||"[object Arguments]"===Object.prototype.toString.call(e)))return;var t=[],r=!0,o=!1,i=void 0;try{for(var u,a=e[Symbol.iterator]();!(r=(u=a.next()).done)&&(t.push(u.value),!n||t.length!==n);r=!0);}catch(e){o=!0,i=e}finally{try{r||null==a.return||a.return()}finally{if(o)throw i}}return t}(e,n)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance")}()}function le(e){return function(e){if(Array.isArray(e)){for(var n=0,t=new Array(e.length);n<e.length;n++)t[n]=e[n];return t}}(e)||function(e){if(Symbol.iterator in Object(e)||"[object Arguments]"===Object.prototype.toString.call(e))return Array.from(e)}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance")}()}function l(i,u,a,c){return new(a=a||Promise)(function(e,n){function t(e){try{o(c.next(e))}catch(e){n(e)}}function r(e){try{o(c.throw(e))}catch(e){n(e)}}function o(n){n.done?e(n.value):new a(function(e){e(n.value)}).then(t,r)}o((c=c.apply(i,u||[])).next())})}function f(t,r){var o,i,u,e,a={label:0,sent:function(){if(1&u[0])throw u[1];return u[1]},trys:[],ops:[]};return e={next:n(0),throw:n(1),return:n(2)},"function"==typeof Symbol&&(e[Symbol.iterator]=function(){return this}),e;function n(n){return function(e){return function(n){if(o)throw new TypeError("Generator is already executing.");for(;a;)try{if(o=1,i&&(u=2&n[0]?i.return:n[0]?i.throw||((u=i.return)&&u.call(i),0):i.next)&&!(u=u.call(i,n[1])).done)return u;switch(i=0,u&&(n=[2&n[0],u.value]),n[0]){case 0:case 1:u=n;break;case 4:return a.label++,{value:n[1],done:!1};case 5:a.label++,i=n[1],n=[0];continue;case 7:n=a.ops.pop(),a.trys.pop();continue;default:if(!(u=0<(u=a.trys).length&&u[u.length-1])&&(6===n[0]||2===n[0])){a=0;continue}if(3===n[0]&&(!u||n[1]>u[0]&&n[1]<u[3])){a.label=n[1];break}if(6===n[0]&&a.label<u[1]){a.label=u[1],u=n;break}if(u&&a.label<u[2]){a.label=u[2],a.ops.push(n);break}u[2]&&a.ops.pop(),a.trys.pop();continue}n=r.call(t,a)}catch(e){n=[6,e],i=0}finally{o=u=0}if(5&n[0])throw n[1];return{value:n[0]?n[1]:void 0,done:!0}}([n,e])}}}function t(e,n){var t="function"==typeof Symbol&&e[Symbol.iterator];if(!t)return e;var r,o,i=t.call(e),u=[];try{for(;(void 0===n||0<n--)&&!(r=i.next()).done;)u.push(r.value)}catch(e){o={error:e}}finally{try{r&&!r.done&&(t=i.return)&&t.call(i)}finally{if(o)throw o.error}}return u}function o(){for(var e=[],n=0;n<arguments.length;n++)e=e.concat(t(arguments[n]));return e}n=n&&n.hasOwnProperty("default")?n.default:n;var i=new Map([["avi","video/avi"],["gif","image/gif"],["ico","image/x-icon"],["jpeg","image/jpeg"],["jpg","image/jpeg"],["mkv","video/x-matroska"],["mov","video/quicktime"],["mp4","video/mp4"],["pdf","application/pdf"],["png","image/png"],["zip","application/zip"],["doc","application/msword"],["docx","application/vnd.openxmlformats-officedocument.wordprocessingml.document"]]);function a(e,n){var t=function(e){var n=e.name;if(n&&-1!==n.lastIndexOf(".")&&!e.type){var t=n.split(".").pop().toLowerCase(),r=i.get(t);r&&Object.defineProperty(e,"type",{value:r,writable:!1,configurable:!1,enumerable:!0})}return e}(e);if("string"!=typeof t.path){var r=e.webkitRelativePath;Object.defineProperty(t,"path",{value:"string"==typeof n?n:"string"==typeof r&&0<r.length?r:e.name,writable:!1,configurable:!1,enumerable:!0})}return t}var c=[".DS_Store","Thumbs.db"];function fe(n){return l(this,void 0,void 0,function(){return f(this,function(e){return[2,function(e){return!!e.dataTransfer}(n)&&n.dataTransfer?function(t,r){return l(this,void 0,void 0,function(){var n;return f(this,function(e){switch(e.label){case 0:return t.items?(n=p(t.items).filter(function(e){return"file"===e.kind}),"drop"!==r?[2,n]:[4,Promise.all(n.map(d))]):[3,2];case 1:return[2,s(function t(e){return e.reduce(function(e,n){return o(e,Array.isArray(n)?t(n):[n])},[])}(e.sent()))];case 2:return[2,s(p(t.files).map(function(e){return a(e)}))]}})})}(n.dataTransfer,n.type):function(e){return(function(e){return null!==e}(e.target)&&e.target.files?p(e.target.files):[]).map(function(e){return a(e)})}(n)]})})}function s(e){return e.filter(function(e){return-1===c.indexOf(e.name)})}function p(e){for(var n=[],t=0;t<e.length;t++){var r=e[t];n.push(r)}return n}function d(e){if("function"!=typeof e.webkitGetAsEntry)return v(e);var n=e.webkitGetAsEntry();return n&&n.isDirectory?y(n):v(e)}function v(e){var n=e.getAsFile();if(!n)return Promise.reject(e+" is not a File");var t=a(n);return Promise.resolve(t)}function g(n){return l(this,void 0,void 0,function(){return f(this,function(e){return[2,n.isDirectory?y(n):function(r){return l(this,void 0,void 0,function(){return f(this,function(e){return[2,new Promise(function(t,n){r.file(function(e){var n=a(e,r.fullPath);t(n)},function(e){n(e)})})]})})}(n)]})})}function y(e){var n=e.createReader();return new Promise(function(u,a){var c=[];!function i(){var e=this;n.readEntries(function(o){return l(e,void 0,void 0,function(){var n,t,r;return f(this,function(e){switch(e.label){case 0:if(o.length)return[3,5];e.label=1;case 1:return e.trys.push([1,3,,4]),[4,Promise.all(c)];case 2:return n=e.sent(),u(n),[3,4];case 3:return t=e.sent(),a(t),[3,4];case 4:return[3,6];case 5:r=Promise.all(o.map(g)),c.push(r),i(),e.label=6;case 6:return[2]}})})},function(e){a(e)})}()})}var b,m,h=(function(e){function r(e){if(o[e])return o[e].exports;var n=o[e]={i:e,l:!1,exports:{}};return t[e].call(n.exports,n,n.exports,r),n.l=!0,n.exports}var t,o;e.exports=(o={},r.m=t=[function(e,n,t){n.__esModule=!0,n.default=function(e,n){if(e&&n){var t=Array.isArray(n)?n:n.split(","),r=e.name||"",o=e.type||"",i=o.replace(/\/.*$/,"");return t.some(function(e){var n=e.trim();return"."===n.charAt(0)?r.toLowerCase().endsWith(n.toLowerCase()):n.endsWith("/*")?i===n.replace(/\/.*$/,""):o===n})}return!0}}],r.c=o,r.d=function(e,n,t){r.o(e,n)||Object.defineProperty(e,n,{configurable:!1,enumerable:!0,get:t})},r.n=function(e){var n=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(n,"a",n),n},r.o=function(e,n){return Object.prototype.hasOwnProperty.call(e,n)},r.p="",r(r.s=0))}(b={exports:{}},b.exports),b.exports),D=(m=h)&&m.__esModule&&Object.prototype.hasOwnProperty.call(m,"default")?m.default:m;function se(e,n){return"application/x-moz-file"===e.type||D(e,n)}function pe(e,n,t){if(w(e.size)){if(w(n)&&w(t))return e.size>=n&&e.size<=t;if(w(n))return e.size>=n;if(w(t))return e.size<=t}return!0}function w(e){return null!=e}function de(e){return"function"==typeof e.isPropagationStopped?e.isPropagationStopped():void 0!==e.cancelBubble&&e.cancelBubble}function ve(e){return e.dataTransfer?Array.prototype.some.call(e.dataTransfer.types,function(e){return"Files"===e||"application/x-moz-file"===e}):!!e.target&&!!e.target.files}function ge(e){e.preventDefault()}function ye(e){var n=0<arguments.length&&void 0!==e?e:window.navigator.userAgent;return function(e){return-1!==e.indexOf("MSIE")||-1!==e.indexOf("Trident/")}(n)||function(e){return-1!==e.indexOf("Edge/")}(n)}function be(){for(var e=arguments.length,o=new Array(e),n=0;n<e;n++)o[n]=arguments[n];return function(n){for(var e=arguments.length,t=new Array(1<e?e-1:0),r=1;r<e;r++)t[r-1]=arguments[r];return o.some(function(e){return!de(n)&&e&&e.apply(void 0,[n].concat(t)),de(n)})}}var O=oe.forwardRef(function(e,n){var t=e.children,r=F(ae(e,["children"])),o=r.open,i=ae(r,["open"]);return oe.useImperativeHandle(n,function(){return{open:o}},[o]),u.createElement(oe.Fragment,null,t(ue({},i,{open:o})))});O.displayName="Dropzone";var me={isFocused:!(O.propTypes={children:n.func,accept:n.oneOfType([n.string,n.arrayOf(n.string)]),multiple:n.bool,preventDropOnDocument:n.bool,noClick:n.bool,noKeyboard:n.bool,noDrag:n.bool,noDragEventsBubbling:n.bool,minSize:n.number,maxSize:n.number,disabled:n.bool,getFilesFromEvent:n.func,onFileDialogCancel:n.func,onDragEnter:n.func,onDragLeave:n.func,onDragOver:n.func,onDrop:n.func,onDropAccepted:n.func,onDropRejected:n.func}),isFileDialogActive:!1,isDragActive:!1,isDragAccept:!1,isDragReject:!1,draggedFiles:[],acceptedFiles:[],rejectedFiles:[]};function F(){function e(){I&&setTimeout(function(){S.current&&(S.current.files.length||(R({type:"closeDialog"}),"function"==typeof h&&h()))},300)}var n=0<arguments.length&&void 0!==arguments[0]?arguments[0]:{},u=n.accept,t=n.disabled,p=void 0!==t&&t,r=n.getFilesFromEvent,o=void 0===r?fe:r,i=n.maxSize,a=void 0===i?1/0:i,c=n.minSize,l=void 0===c?0:c,f=n.multiple,s=void 0===f||f,d=n.onDragEnter,v=n.onDragLeave,g=n.onDragOver,y=n.onDrop,b=n.onDropAccepted,m=n.onDropRejected,h=n.onFileDialogCancel,D=n.preventDropOnDocument,w=void 0===D||D,O=n.noClick,F=void 0!==O&&O,j=n.noKeyboard,x=void 0!==j&&j,P=n.noDrag,A=void 0!==P&&P,k=n.noDragEventsBubbling,E=void 0!==k&&k,C=oe.useRef(null),S=oe.useRef(null),z=ce(oe.useReducer(he,me),2),T=z[0],R=z[1],L=T.isFocused,I=T.isFileDialogActive,K=T.draggedFiles,_=oe.useCallback(function(){S.current&&(R({type:"openDialog"}),S.current.value=null,S.current.click())},[R]);oe.useEffect(function(){return window.addEventListener("focus",e,!1),function(){window.removeEventListener("focus",e,!1)}},[S,I,h]);function M(e){C.current&&C.current.contains(e.target)||(e.preventDefault(),W.current=[])}var B=oe.useCallback(function(e){C.current&&C.current.isEqualNode(e.target)&&(32!==e.keyCode&&13!==e.keyCode||(e.preventDefault(),_()))},[C,S]),q=oe.useCallback(function(){R({type:"focus"})},[]),G=oe.useCallback(function(){R({type:"blur"})},[]),N=oe.useCallback(function(){F||(ye()?setTimeout(_,0):_())},[S,F]),W=oe.useRef([]);oe.useEffect(function(){return w&&(document.addEventListener("dragover",ge,!1),document.addEventListener("drop",M,!1)),function(){w&&(document.removeEventListener("dragover",ge),document.removeEventListener("drop",M))}},[C,w]);function $(e){return p?null:e}function H(e){return x?null:$(e)}function J(e){return A?null:$(e)}var Q=oe.useCallback(function(n){n.preventDefault(),n.persist(),Y(n),-1===W.current.indexOf(n.target)&&(W.current=[].concat(le(W.current),[n.target])),ve(n)&&Promise.resolve(o(n)).then(function(e){de(n)&&!E||(R({draggedFiles:e,isDragActive:!0,type:"setDraggedFiles"}),d&&d(n))})},[o,d,E]),U=oe.useCallback(function(e){if(e.preventDefault(),e.persist(),Y(e),e.dataTransfer)try{e.dataTransfer.dropEffect="copy"}catch(e){}return ve(e)&&g&&g(e),!1},[g,E]),V=oe.useCallback(function(n){n.preventDefault(),n.persist(),Y(n);var e=W.current.filter(function(e){return e!==n.target&&C.current&&C.current.contains(e)});0<(W.current=e).length||(R({isDragActive:!1,type:"setDraggedFiles",draggedFiles:[]}),ve(n)&&v&&v(n))},[C,v,E]),X=oe.useCallback(function(r){r.preventDefault(),r.persist(),Y(r),W.current=[],ve(r)&&Promise.resolve(o(r)).then(function(e){if(!de(r)||E){var n=[],t=[];e.forEach(function(e){se(e,u)&&pe(e,l,a)?n.push(e):t.push(e)}),!s&&1<n.length&&t.push.apply(t,le(n.splice(0))),R({acceptedFiles:n,rejectedFiles:t,type:"setFiles"}),y&&y(n,t,r),0<t.length&&m&&m(t,r),0<n.length&&b&&b(n,r)}}),R({type:"reset"})},[s,u,l,a,o,y,b,m,E]),Y=function(e){E&&e.stopPropagation()},Z=oe.useMemo(function(){return function(){var e=0<arguments.length&&void 0!==arguments[0]?arguments[0]:{},n=e.refKey,t=void 0===n?"ref":n,r=e.onKeyDown,o=e.onFocus,i=e.onBlur,u=e.onClick,a=e.onDragEnter,c=e.onDragOver,l=e.onDragLeave,f=e.onDrop,s=ae(e,["refKey","onKeyDown","onFocus","onBlur","onClick","onDragEnter","onDragOver","onDragLeave","onDrop"]);return ue(ie({onKeyDown:H(be(r,B)),onFocus:H(be(o,q)),onBlur:H(be(i,G)),onClick:$(be(u,N)),onDragEnter:J(be(a,Q)),onDragOver:J(be(c,U)),onDragLeave:J(be(l,V)),onDrop:J(be(f,X))},t,C),p||x?{}:{tabIndex:0},{},s)}},[C,B,q,G,N,Q,U,V,X,x,A,p]),ee=oe.useCallback(function(e){e.stopPropagation()},[]),ne=oe.useMemo(function(){return function(){var e=0<arguments.length&&void 0!==arguments[0]?arguments[0]:{},n=e.refKey,t=void 0===n?"ref":n,r=e.onChange,o=e.onClick,i=ae(e,["refKey","onChange","onClick"]);return ue({},ie({accept:u,multiple:s,type:"file",style:{display:"none"},onChange:$(be(r,X)),onClick:$(be(o,ee)),autoComplete:"off",tabIndex:-1},t,S),{},i)}},[S,u,s,X,p]),te=K.length,re=0<te&&function(e){var n=e.files,t=e.accept,r=e.minSize,o=e.maxSize;return!(!e.multiple&&1<n.length)&&n.every(function(e){return se(e,t)&&pe(e,r,o)})}({files:K,accept:u,minSize:l,maxSize:a,multiple:s});return ue({},T,{isDragAccept:re,isDragReject:0<te&&!re,isFocused:L&&!p,getRootProps:Z,getInputProps:ne,rootRef:C,inputRef:S,open:$(_)})}function he(e,n){switch(n.type){case"focus":return ue({},e,{isFocused:!0});case"blur":return ue({},e,{isFocused:!1});case"openDialog":return ue({},e,{isFileDialogActive:!0});case"closeDialog":return ue({},e,{isFileDialogActive:!1});case"setDraggedFiles":var t=n.isDragActive;return ue({},e,{draggedFiles:n.draggedFiles,isDragActive:t});case"setFiles":return ue({},e,{acceptedFiles:n.acceptedFiles,rejectedFiles:n.rejectedFiles});case"reset":return ue({},e,{isFileDialogActive:!1,isDragActive:!1,draggedFiles:[],acceptedFiles:[],rejectedFiles:[]});default:return e}}e.default=O,e.useDropzone=F,Object.defineProperty(e,"__esModule",{value:!0})});
|
|
2
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VzIjpbIi4uL25vZGVfbW9kdWxlcy90c2xpYi90c2xpYi5lczYuanMiLCIuLi9ub2RlX21vZHVsZXMvZmlsZS1zZWxlY3Rvci9kaXN0L2VzNS9maWxlLmpzIiwiLi4vbm9kZV9tb2R1bGVzL2ZpbGUtc2VsZWN0b3IvZGlzdC9lczUvZmlsZS1zZWxlY3Rvci5qcyIsIi4uL25vZGVfbW9kdWxlcy9hdHRyLWFjY2VwdC9kaXN0L2luZGV4LmpzIiwiLi4vc3JjL3V0aWxzL2luZGV4LmpzIiwiLi4vc3JjL2luZGV4LmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qISAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxyXG5Db3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTsgeW91IG1heSBub3QgdXNlXHJcbnRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlXHJcbkxpY2Vuc2UgYXQgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXHJcblxyXG5USElTIENPREUgSVMgUFJPVklERUQgT04gQU4gKkFTIElTKiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZXHJcbktJTkQsIEVJVEhFUiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBXSVRIT1VUIExJTUlUQVRJT04gQU5ZIElNUExJRURcclxuV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIFRJVExFLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSxcclxuTUVSQ0hBTlRBQkxJVFkgT1IgTk9OLUlORlJJTkdFTUVOVC5cclxuXHJcblNlZSB0aGUgQXBhY2hlIFZlcnNpb24gMi4wIExpY2Vuc2UgZm9yIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9uc1xyXG5hbmQgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXHJcbioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovXHJcbi8qIGdsb2JhbCBSZWZsZWN0LCBQcm9taXNlICovXHJcblxyXG52YXIgZXh0ZW5kU3RhdGljcyA9IGZ1bmN0aW9uKGQsIGIpIHtcclxuICAgIGV4dGVuZFN0YXRpY3MgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHxcclxuICAgICAgICAoeyBfX3Byb3RvX186IFtdIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikgeyBkLl9fcHJvdG9fXyA9IGI7IH0pIHx8XHJcbiAgICAgICAgZnVuY3Rpb24gKGQsIGIpIHsgZm9yICh2YXIgcCBpbiBiKSBpZiAoYi5oYXNPd25Qcm9wZXJ0eShwKSkgZFtwXSA9IGJbcF07IH07XHJcbiAgICByZXR1cm4gZXh0ZW5kU3RhdGljcyhkLCBiKTtcclxufTtcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2V4dGVuZHMoZCwgYikge1xyXG4gICAgZXh0ZW5kU3RhdGljcyhkLCBiKTtcclxuICAgIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxyXG4gICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xyXG59XHJcblxyXG5leHBvcnQgdmFyIF9fYXNzaWduID0gZnVuY3Rpb24oKSB7XHJcbiAgICBfX2Fzc2lnbiA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gX19hc3NpZ24odCkge1xyXG4gICAgICAgIGZvciAodmFyIHMsIGkgPSAxLCBuID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IG47IGkrKykge1xyXG4gICAgICAgICAgICBzID0gYXJndW1lbnRzW2ldO1xyXG4gICAgICAgICAgICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkpIHRbcF0gPSBzW3BdO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdDtcclxuICAgIH1cclxuICAgIHJldHVybiBfX2Fzc2lnbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19yZXN0KHMsIGUpIHtcclxuICAgIHZhciB0ID0ge307XHJcbiAgICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkgJiYgZS5pbmRleE9mKHApIDwgMClcclxuICAgICAgICB0W3BdID0gc1twXTtcclxuICAgIGlmIChzICE9IG51bGwgJiYgdHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPT09IFwiZnVuY3Rpb25cIilcclxuICAgICAgICBmb3IgKHZhciBpID0gMCwgcCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMocyk7IGkgPCBwLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmIChlLmluZGV4T2YocFtpXSkgPCAwICYmIE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzLCBwW2ldKSlcclxuICAgICAgICAgICAgICAgIHRbcFtpXV0gPSBzW3BbaV1dO1xyXG4gICAgICAgIH1cclxuICAgIHJldHVybiB0O1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19kZWNvcmF0ZShkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYykge1xyXG4gICAgdmFyIGMgPSBhcmd1bWVudHMubGVuZ3RoLCByID0gYyA8IDMgPyB0YXJnZXQgOiBkZXNjID09PSBudWxsID8gZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBrZXkpIDogZGVzYywgZDtcclxuICAgIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgUmVmbGVjdC5kZWNvcmF0ZSA9PT0gXCJmdW5jdGlvblwiKSByID0gUmVmbGVjdC5kZWNvcmF0ZShkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYyk7XHJcbiAgICBlbHNlIGZvciAodmFyIGkgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSBpZiAoZCA9IGRlY29yYXRvcnNbaV0pIHIgPSAoYyA8IDMgPyBkKHIpIDogYyA+IDMgPyBkKHRhcmdldCwga2V5LCByKSA6IGQodGFyZ2V0LCBrZXkpKSB8fCByO1xyXG4gICAgcmV0dXJuIGMgPiAzICYmIHIgJiYgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCByKSwgcjtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fcGFyYW0ocGFyYW1JbmRleCwgZGVjb3JhdG9yKSB7XHJcbiAgICByZXR1cm4gZnVuY3Rpb24gKHRhcmdldCwga2V5KSB7IGRlY29yYXRvcih0YXJnZXQsIGtleSwgcGFyYW1JbmRleCk7IH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fbWV0YWRhdGEobWV0YWRhdGFLZXksIG1ldGFkYXRhVmFsdWUpIHtcclxuICAgIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgUmVmbGVjdC5tZXRhZGF0YSA9PT0gXCJmdW5jdGlvblwiKSByZXR1cm4gUmVmbGVjdC5tZXRhZGF0YShtZXRhZGF0YUtleSwgbWV0YWRhdGFWYWx1ZSk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2F3YWl0ZXIodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XHJcbiAgICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcclxuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XHJcbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XHJcbiAgICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHJlc3VsdC52YWx1ZSk7IH0pLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cclxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XHJcbiAgICB9KTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fZ2VuZXJhdG9yKHRoaXNBcmcsIGJvZHkpIHtcclxuICAgIHZhciBfID0geyBsYWJlbDogMCwgc2VudDogZnVuY3Rpb24oKSB7IGlmICh0WzBdICYgMSkgdGhyb3cgdFsxXTsgcmV0dXJuIHRbMV07IH0sIHRyeXM6IFtdLCBvcHM6IFtdIH0sIGYsIHksIHQsIGc7XHJcbiAgICByZXR1cm4gZyA9IHsgbmV4dDogdmVyYigwKSwgXCJ0aHJvd1wiOiB2ZXJiKDEpLCBcInJldHVyblwiOiB2ZXJiKDIpIH0sIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiAoZ1tTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24oKSB7IHJldHVybiB0aGlzOyB9KSwgZztcclxuICAgIGZ1bmN0aW9uIHZlcmIobikgeyByZXR1cm4gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIHN0ZXAoW24sIHZdKTsgfTsgfVxyXG4gICAgZnVuY3Rpb24gc3RlcChvcCkge1xyXG4gICAgICAgIGlmIChmKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiR2VuZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0aW5nLlwiKTtcclxuICAgICAgICB3aGlsZSAoXykgdHJ5IHtcclxuICAgICAgICAgICAgaWYgKGYgPSAxLCB5ICYmICh0ID0gb3BbMF0gJiAyID8geVtcInJldHVyblwiXSA6IG9wWzBdID8geVtcInRocm93XCJdIHx8ICgodCA9IHlbXCJyZXR1cm5cIl0pICYmIHQuY2FsbCh5KSwgMCkgOiB5Lm5leHQpICYmICEodCA9IHQuY2FsbCh5LCBvcFsxXSkpLmRvbmUpIHJldHVybiB0O1xyXG4gICAgICAgICAgICBpZiAoeSA9IDAsIHQpIG9wID0gW29wWzBdICYgMiwgdC52YWx1ZV07XHJcbiAgICAgICAgICAgIHN3aXRjaCAob3BbMF0pIHtcclxuICAgICAgICAgICAgICAgIGNhc2UgMDogY2FzZSAxOiB0ID0gb3A7IGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSA0OiBfLmxhYmVsKys7IHJldHVybiB7IHZhbHVlOiBvcFsxXSwgZG9uZTogZmFsc2UgfTtcclxuICAgICAgICAgICAgICAgIGNhc2UgNTogXy5sYWJlbCsrOyB5ID0gb3BbMV07IG9wID0gWzBdOyBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIGNhc2UgNzogb3AgPSBfLm9wcy5wb3AoKTsgXy50cnlzLnBvcCgpOyBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCEodCA9IF8udHJ5cywgdCA9IHQubGVuZ3RoID4gMCAmJiB0W3QubGVuZ3RoIC0gMV0pICYmIChvcFswXSA9PT0gNiB8fCBvcFswXSA9PT0gMikpIHsgXyA9IDA7IGNvbnRpbnVlOyB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wWzBdID09PSAzICYmICghdCB8fCAob3BbMV0gPiB0WzBdICYmIG9wWzFdIDwgdFszXSkpKSB7IF8ubGFiZWwgPSBvcFsxXTsgYnJlYWs7IH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAob3BbMF0gPT09IDYgJiYgXy5sYWJlbCA8IHRbMV0pIHsgXy5sYWJlbCA9IHRbMV07IHQgPSBvcDsgYnJlYWs7IH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAodCAmJiBfLmxhYmVsIDwgdFsyXSkgeyBfLmxhYmVsID0gdFsyXTsgXy5vcHMucHVzaChvcCk7IGJyZWFrOyB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRbMl0pIF8ub3BzLnBvcCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIF8udHJ5cy5wb3AoKTsgY29udGludWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgb3AgPSBib2R5LmNhbGwodGhpc0FyZywgXyk7XHJcbiAgICAgICAgfSBjYXRjaCAoZSkgeyBvcCA9IFs2LCBlXTsgeSA9IDA7IH0gZmluYWxseSB7IGYgPSB0ID0gMDsgfVxyXG4gICAgICAgIGlmIChvcFswXSAmIDUpIHRocm93IG9wWzFdOyByZXR1cm4geyB2YWx1ZTogb3BbMF0gPyBvcFsxXSA6IHZvaWQgMCwgZG9uZTogdHJ1ZSB9O1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19leHBvcnRTdGFyKG0sIGV4cG9ydHMpIHtcclxuICAgIGZvciAodmFyIHAgaW4gbSkgaWYgKCFleHBvcnRzLmhhc093blByb3BlcnR5KHApKSBleHBvcnRzW3BdID0gbVtwXTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fdmFsdWVzKG8pIHtcclxuICAgIHZhciBtID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9bU3ltYm9sLml0ZXJhdG9yXSwgaSA9IDA7XHJcbiAgICBpZiAobSkgcmV0dXJuIG0uY2FsbChvKTtcclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgbmV4dDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBpZiAobyAmJiBpID49IG8ubGVuZ3RoKSBvID0gdm9pZCAwO1xyXG4gICAgICAgICAgICByZXR1cm4geyB2YWx1ZTogbyAmJiBvW2krK10sIGRvbmU6ICFvIH07XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fcmVhZChvLCBuKSB7XHJcbiAgICB2YXIgbSA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvW1N5bWJvbC5pdGVyYXRvcl07XHJcbiAgICBpZiAoIW0pIHJldHVybiBvO1xyXG4gICAgdmFyIGkgPSBtLmNhbGwobyksIHIsIGFyID0gW10sIGU7XHJcbiAgICB0cnkge1xyXG4gICAgICAgIHdoaWxlICgobiA9PT0gdm9pZCAwIHx8IG4tLSA+IDApICYmICEociA9IGkubmV4dCgpKS5kb25lKSBhci5wdXNoKHIudmFsdWUpO1xyXG4gICAgfVxyXG4gICAgY2F0Y2ggKGVycm9yKSB7IGUgPSB7IGVycm9yOiBlcnJvciB9OyB9XHJcbiAgICBmaW5hbGx5IHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBpZiAociAmJiAhci5kb25lICYmIChtID0gaVtcInJldHVyblwiXSkpIG0uY2FsbChpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZmluYWxseSB7IGlmIChlKSB0aHJvdyBlLmVycm9yOyB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gYXI7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3NwcmVhZCgpIHtcclxuICAgIGZvciAodmFyIGFyID0gW10sIGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKVxyXG4gICAgICAgIGFyID0gYXIuY29uY2F0KF9fcmVhZChhcmd1bWVudHNbaV0pKTtcclxuICAgIHJldHVybiBhcjtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fc3ByZWFkQXJyYXlzKCkge1xyXG4gICAgZm9yICh2YXIgcyA9IDAsIGkgPSAwLCBpbCA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBpbDsgaSsrKSBzICs9IGFyZ3VtZW50c1tpXS5sZW5ndGg7XHJcbiAgICBmb3IgKHZhciByID0gQXJyYXkocyksIGsgPSAwLCBpID0gMDsgaSA8IGlsOyBpKyspXHJcbiAgICAgICAgZm9yICh2YXIgYSA9IGFyZ3VtZW50c1tpXSwgaiA9IDAsIGpsID0gYS5sZW5ndGg7IGogPCBqbDsgaisrLCBrKyspXHJcbiAgICAgICAgICAgIHJba10gPSBhW2pdO1xyXG4gICAgcmV0dXJuIHI7XHJcbn07XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19hd2FpdCh2KSB7XHJcbiAgICByZXR1cm4gdGhpcyBpbnN0YW5jZW9mIF9fYXdhaXQgPyAodGhpcy52ID0gdiwgdGhpcykgOiBuZXcgX19hd2FpdCh2KTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fYXN5bmNHZW5lcmF0b3IodGhpc0FyZywgX2FyZ3VtZW50cywgZ2VuZXJhdG9yKSB7XHJcbiAgICBpZiAoIVN5bWJvbC5hc3luY0l0ZXJhdG9yKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3ltYm9sLmFzeW5jSXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xyXG4gICAgdmFyIGcgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSksIGksIHEgPSBbXTtcclxuICAgIHJldHVybiBpID0ge30sIHZlcmIoXCJuZXh0XCIpLCB2ZXJiKFwidGhyb3dcIiksIHZlcmIoXCJyZXR1cm5cIiksIGlbU3ltYm9sLmFzeW5jSXRlcmF0b3JdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSwgaTtcclxuICAgIGZ1bmN0aW9uIHZlcmIobikgeyBpZiAoZ1tuXSkgaVtuXSA9IGZ1bmN0aW9uICh2KSB7IHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAoYSwgYikgeyBxLnB1c2goW24sIHYsIGEsIGJdKSA+IDEgfHwgcmVzdW1lKG4sIHYpOyB9KTsgfTsgfVxyXG4gICAgZnVuY3Rpb24gcmVzdW1lKG4sIHYpIHsgdHJ5IHsgc3RlcChnW25dKHYpKTsgfSBjYXRjaCAoZSkgeyBzZXR0bGUocVswXVszXSwgZSk7IH0gfVxyXG4gICAgZnVuY3Rpb24gc3RlcChyKSB7IHIudmFsdWUgaW5zdGFuY2VvZiBfX2F3YWl0ID8gUHJvbWlzZS5yZXNvbHZlKHIudmFsdWUudikudGhlbihmdWxmaWxsLCByZWplY3QpIDogc2V0dGxlKHFbMF1bMl0sIHIpOyB9XHJcbiAgICBmdW5jdGlvbiBmdWxmaWxsKHZhbHVlKSB7IHJlc3VtZShcIm5leHRcIiwgdmFsdWUpOyB9XHJcbiAgICBmdW5jdGlvbiByZWplY3QodmFsdWUpIHsgcmVzdW1lKFwidGhyb3dcIiwgdmFsdWUpOyB9XHJcbiAgICBmdW5jdGlvbiBzZXR0bGUoZiwgdikgeyBpZiAoZih2KSwgcS5zaGlmdCgpLCBxLmxlbmd0aCkgcmVzdW1lKHFbMF1bMF0sIHFbMF1bMV0pOyB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2FzeW5jRGVsZWdhdG9yKG8pIHtcclxuICAgIHZhciBpLCBwO1xyXG4gICAgcmV0dXJuIGkgPSB7fSwgdmVyYihcIm5leHRcIiksIHZlcmIoXCJ0aHJvd1wiLCBmdW5jdGlvbiAoZSkgeyB0aHJvdyBlOyB9KSwgdmVyYihcInJldHVyblwiKSwgaVtTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSwgaTtcclxuICAgIGZ1bmN0aW9uIHZlcmIobiwgZikgeyBpW25dID0gb1tuXSA/IGZ1bmN0aW9uICh2KSB7IHJldHVybiAocCA9ICFwKSA/IHsgdmFsdWU6IF9fYXdhaXQob1tuXSh2KSksIGRvbmU6IG4gPT09IFwicmV0dXJuXCIgfSA6IGYgPyBmKHYpIDogdjsgfSA6IGY7IH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fYXN5bmNWYWx1ZXMobykge1xyXG4gICAgaWYgKCFTeW1ib2wuYXN5bmNJdGVyYXRvcikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN5bWJvbC5hc3luY0l0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcclxuICAgIHZhciBtID0gb1tTeW1ib2wuYXN5bmNJdGVyYXRvcl0sIGk7XHJcbiAgICByZXR1cm4gbSA/IG0uY2FsbChvKSA6IChvID0gdHlwZW9mIF9fdmFsdWVzID09PSBcImZ1bmN0aW9uXCIgPyBfX3ZhbHVlcyhvKSA6IG9bU3ltYm9sLml0ZXJhdG9yXSgpLCBpID0ge30sIHZlcmIoXCJuZXh0XCIpLCB2ZXJiKFwidGhyb3dcIiksIHZlcmIoXCJyZXR1cm5cIiksIGlbU3ltYm9sLmFzeW5jSXRlcmF0b3JdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSwgaSk7XHJcbiAgICBmdW5jdGlvbiB2ZXJiKG4pIHsgaVtuXSA9IG9bbl0gJiYgZnVuY3Rpb24gKHYpIHsgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHsgdiA9IG9bbl0odiksIHNldHRsZShyZXNvbHZlLCByZWplY3QsIHYuZG9uZSwgdi52YWx1ZSk7IH0pOyB9OyB9XHJcbiAgICBmdW5jdGlvbiBzZXR0bGUocmVzb2x2ZSwgcmVqZWN0LCBkLCB2KSB7IFByb21pc2UucmVzb2x2ZSh2KS50aGVuKGZ1bmN0aW9uKHYpIHsgcmVzb2x2ZSh7IHZhbHVlOiB2LCBkb25lOiBkIH0pOyB9LCByZWplY3QpOyB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX21ha2VUZW1wbGF0ZU9iamVjdChjb29rZWQsIHJhdykge1xyXG4gICAgaWYgKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSkgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkoY29va2VkLCBcInJhd1wiLCB7IHZhbHVlOiByYXcgfSk7IH0gZWxzZSB7IGNvb2tlZC5yYXcgPSByYXc7IH1cclxuICAgIHJldHVybiBjb29rZWQ7XHJcbn07XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19pbXBvcnRTdGFyKG1vZCkge1xyXG4gICAgaWYgKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgcmV0dXJuIG1vZDtcclxuICAgIHZhciByZXN1bHQgPSB7fTtcclxuICAgIGlmIChtb2QgIT0gbnVsbCkgZm9yICh2YXIgayBpbiBtb2QpIGlmIChPYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbChtb2QsIGspKSByZXN1bHRba10gPSBtb2Rba107XHJcbiAgICByZXN1bHQuZGVmYXVsdCA9IG1vZDtcclxuICAgIHJldHVybiByZXN1bHQ7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2ltcG9ydERlZmF1bHQobW9kKSB7XHJcbiAgICByZXR1cm4gKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgPyBtb2QgOiB7IGRlZmF1bHQ6IG1vZCB9O1xyXG59XHJcbiIsImV4cG9ydCB2YXIgQ09NTU9OX01JTUVfVFlQRVMgPSBuZXcgTWFwKFtcbiAgICBbJ2F2aScsICd2aWRlby9hdmknXSxcbiAgICBbJ2dpZicsICdpbWFnZS9naWYnXSxcbiAgICBbJ2ljbycsICdpbWFnZS94LWljb24nXSxcbiAgICBbJ2pwZWcnLCAnaW1hZ2UvanBlZyddLFxuICAgIFsnanBnJywgJ2ltYWdlL2pwZWcnXSxcbiAgICBbJ21rdicsICd2aWRlby94LW1hdHJvc2thJ10sXG4gICAgWydtb3YnLCAndmlkZW8vcXVpY2t0aW1lJ10sXG4gICAgWydtcDQnLCAndmlkZW8vbXA0J10sXG4gICAgWydwZGYnLCAnYXBwbGljYXRpb24vcGRmJ10sXG4gICAgWydwbmcnLCAnaW1hZ2UvcG5nJ10sXG4gICAgWyd6aXAnLCAnYXBwbGljYXRpb24vemlwJ10sXG4gICAgWydkb2MnLCAnYXBwbGljYXRpb24vbXN3b3JkJ10sXG4gICAgWydkb2N4JywgJ2FwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC53b3JkcHJvY2Vzc2luZ21sLmRvY3VtZW50J11cbl0pO1xuZXhwb3J0IGZ1bmN0aW9uIHRvRmlsZVdpdGhQYXRoKGZpbGUsIHBhdGgpIHtcbiAgICB2YXIgZiA9IHdpdGhNaW1lVHlwZShmaWxlKTtcbiAgICBpZiAodHlwZW9mIGYucGF0aCAhPT0gJ3N0cmluZycpIHsgLy8gb24gZWxlY3Ryb24sIHBhdGggaXMgYWxyZWFkeSBzZXQgdG8gdGhlIGFic29sdXRlIHBhdGhcbiAgICAgICAgdmFyIHdlYmtpdFJlbGF0aXZlUGF0aCA9IGZpbGUud2Via2l0UmVsYXRpdmVQYXRoO1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZiwgJ3BhdGgnLCB7XG4gICAgICAgICAgICB2YWx1ZTogdHlwZW9mIHBhdGggPT09ICdzdHJpbmcnXG4gICAgICAgICAgICAgICAgPyBwYXRoXG4gICAgICAgICAgICAgICAgLy8gSWYgPGlucHV0IHdlYmtpdGRpcmVjdG9yeT4gaXMgc2V0LFxuICAgICAgICAgICAgICAgIC8vIHRoZSBGaWxlIHdpbGwgaGF2ZSBhIHt3ZWJraXRSZWxhdGl2ZVBhdGh9IHByb3BlcnR5XG4gICAgICAgICAgICAgICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0hUTUxJbnB1dEVsZW1lbnQvd2Via2l0ZGlyZWN0b3J5XG4gICAgICAgICAgICAgICAgOiB0eXBlb2Ygd2Via2l0UmVsYXRpdmVQYXRoID09PSAnc3RyaW5nJyAmJiB3ZWJraXRSZWxhdGl2ZVBhdGgubGVuZ3RoID4gMFxuICAgICAgICAgICAgICAgICAgICA/IHdlYmtpdFJlbGF0aXZlUGF0aFxuICAgICAgICAgICAgICAgICAgICA6IGZpbGUubmFtZSxcbiAgICAgICAgICAgIHdyaXRhYmxlOiBmYWxzZSxcbiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogZmFsc2UsXG4gICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gZjtcbn1cbmZ1bmN0aW9uIHdpdGhNaW1lVHlwZShmaWxlKSB7XG4gICAgdmFyIG5hbWUgPSBmaWxlLm5hbWU7XG4gICAgdmFyIGhhc0V4dGVuc2lvbiA9IG5hbWUgJiYgbmFtZS5sYXN0SW5kZXhPZignLicpICE9PSAtMTtcbiAgICBpZiAoaGFzRXh0ZW5zaW9uICYmICFmaWxlLnR5cGUpIHtcbiAgICAgICAgdmFyIGV4dCA9IG5hbWUuc3BsaXQoJy4nKVxuICAgICAgICAgICAgLnBvcCgpLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIHZhciB0eXBlID0gQ09NTU9OX01JTUVfVFlQRVMuZ2V0KGV4dCk7XG4gICAgICAgIGlmICh0eXBlKSB7XG4gICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZmlsZSwgJ3R5cGUnLCB7XG4gICAgICAgICAgICAgICAgdmFsdWU6IHR5cGUsXG4gICAgICAgICAgICAgICAgd3JpdGFibGU6IGZhbHNlLFxuICAgICAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogZmFsc2UsXG4gICAgICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZpbGU7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1maWxlLmpzLm1hcCIsImltcG9ydCAqIGFzIHRzbGliXzEgZnJvbSBcInRzbGliXCI7XG5pbXBvcnQgeyB0b0ZpbGVXaXRoUGF0aCB9IGZyb20gJy4vZmlsZSc7XG52YXIgRklMRVNfVE9fSUdOT1JFID0gW1xuICAgIC8vIFRodW1ibmFpbCBjYWNoZSBmaWxlcyBmb3IgbWFjT1MgYW5kIFdpbmRvd3NcbiAgICAnLkRTX1N0b3JlJyxcbiAgICAnVGh1bWJzLmRiJyAvLyBXaW5kb3dzXG5dO1xuLyoqXG4gKiBDb252ZXJ0IGEgRHJhZ0V2ZW50J3MgRGF0YVRyYXNmZXIgb2JqZWN0IHRvIGEgbGlzdCBvZiBGaWxlIG9iamVjdHNcbiAqIE5PVEU6IElmIHNvbWUgb2YgdGhlIGl0ZW1zIGFyZSBmb2xkZXJzLFxuICogZXZlcnl0aGluZyB3aWxsIGJlIGZsYXR0ZW5lZCBhbmQgcGxhY2VkIGluIHRoZSBzYW1lIGxpc3QgYnV0IHRoZSBwYXRocyB3aWxsIGJlIGtlcHQgYXMgYSB7cGF0aH0gcHJvcGVydHkuXG4gKiBAcGFyYW0gZXZ0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmcm9tRXZlbnQoZXZ0KSB7XG4gICAgcmV0dXJuIHRzbGliXzEuX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0c2xpYl8xLl9fZ2VuZXJhdG9yKHRoaXMsIGZ1bmN0aW9uIChfYSkge1xuICAgICAgICAgICAgcmV0dXJuIFsyIC8qcmV0dXJuKi8sIGlzRHJhZ0V2dChldnQpICYmIGV2dC5kYXRhVHJhbnNmZXJcbiAgICAgICAgICAgICAgICAgICAgPyBnZXREYXRhVHJhbnNmZXJGaWxlcyhldnQuZGF0YVRyYW5zZmVyLCBldnQudHlwZSlcbiAgICAgICAgICAgICAgICAgICAgOiBnZXRJbnB1dEZpbGVzKGV2dCldO1xuICAgICAgICB9KTtcbiAgICB9KTtcbn1cbmZ1bmN0aW9uIGlzRHJhZ0V2dCh2YWx1ZSkge1xuICAgIHJldHVybiAhIXZhbHVlLmRhdGFUcmFuc2Zlcjtcbn1cbmZ1bmN0aW9uIGdldElucHV0RmlsZXMoZXZ0KSB7XG4gICAgdmFyIGZpbGVzID0gaXNJbnB1dChldnQudGFyZ2V0KVxuICAgICAgICA/IGV2dC50YXJnZXQuZmlsZXNcbiAgICAgICAgICAgID8gZnJvbUxpc3QoZXZ0LnRhcmdldC5maWxlcylcbiAgICAgICAgICAgIDogW11cbiAgICAgICAgOiBbXTtcbiAgICByZXR1cm4gZmlsZXMubWFwKGZ1bmN0aW9uIChmaWxlKSB7IHJldHVybiB0b0ZpbGVXaXRoUGF0aChmaWxlKTsgfSk7XG59XG5mdW5jdGlvbiBpc0lucHV0KHZhbHVlKSB7XG4gICAgcmV0dXJuIHZhbHVlICE9PSBudWxsO1xufVxuZnVuY3Rpb24gZ2V0RGF0YVRyYW5zZmVyRmlsZXMoZHQsIHR5cGUpIHtcbiAgICByZXR1cm4gdHNsaWJfMS5fX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGl0ZW1zLCBmaWxlcztcbiAgICAgICAgcmV0dXJuIHRzbGliXzEuX19nZW5lcmF0b3IodGhpcywgZnVuY3Rpb24gKF9hKSB7XG4gICAgICAgICAgICBzd2l0Y2ggKF9hLmxhYmVsKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgICAgICBpZiAoIWR0Lml0ZW1zKSByZXR1cm4gWzMgLypicmVhayovLCAyXTtcbiAgICAgICAgICAgICAgICAgICAgaXRlbXMgPSBmcm9tTGlzdChkdC5pdGVtcylcbiAgICAgICAgICAgICAgICAgICAgICAgIC5maWx0ZXIoZnVuY3Rpb24gKGl0ZW0pIHsgcmV0dXJuIGl0ZW0ua2luZCA9PT0gJ2ZpbGUnOyB9KTtcbiAgICAgICAgICAgICAgICAgICAgLy8gQWNjb3JkaW5nIHRvIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL2RuZC5odG1sI2RuZGV2ZW50cyxcbiAgICAgICAgICAgICAgICAgICAgLy8gb25seSAnZHJhZ3N0YXJ0JyBhbmQgJ2Ryb3AnIGhhcyBhY2Nlc3MgdG8gdGhlIGRhdGEgKHNvdXJjZSBub2RlKVxuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZSAhPT0gJ2Ryb3AnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzIgLypyZXR1cm4qLywgaXRlbXNdO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbNCAvKnlpZWxkKi8sIFByb21pc2UuYWxsKGl0ZW1zLm1hcCh0b0ZpbGVQcm9taXNlcykpXTtcbiAgICAgICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgICAgIGZpbGVzID0gX2Euc2VudCgpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzIgLypyZXR1cm4qLywgbm9JZ25vcmVkRmlsZXMoZmxhdHRlbihmaWxlcykpXTtcbiAgICAgICAgICAgICAgICBjYXNlIDI6IHJldHVybiBbMiAvKnJldHVybiovLCBub0lnbm9yZWRGaWxlcyhmcm9tTGlzdChkdC5maWxlcylcbiAgICAgICAgICAgICAgICAgICAgICAgIC5tYXAoZnVuY3Rpb24gKGZpbGUpIHsgcmV0dXJuIHRvRmlsZVdpdGhQYXRoKGZpbGUpOyB9KSldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9KTtcbn1cbmZ1bmN0aW9uIG5vSWdub3JlZEZpbGVzKGZpbGVzKSB7XG4gICAgcmV0dXJuIGZpbGVzLmZpbHRlcihmdW5jdGlvbiAoZmlsZSkgeyByZXR1cm4gRklMRVNfVE9fSUdOT1JFLmluZGV4T2YoZmlsZS5uYW1lKSA9PT0gLTE7IH0pO1xufVxuLy8gSUUxMSBkb2VzIG5vdCBzdXBwb3J0IEFycmF5LmZyb20oKVxuLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvQXJyYXkvZnJvbSNCcm93c2VyX2NvbXBhdGliaWxpdHlcbi8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9GaWxlTGlzdFxuLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0RhdGFUcmFuc2Zlckl0ZW1MaXN0XG5mdW5jdGlvbiBmcm9tTGlzdChpdGVtcykge1xuICAgIHZhciBmaWxlcyA9IFtdO1xuICAgIC8vIHRzbGludDpkaXNhYmxlOiBwcmVmZXItZm9yLW9mXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBpdGVtcy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgZmlsZSA9IGl0ZW1zW2ldO1xuICAgICAgICBmaWxlcy5wdXNoKGZpbGUpO1xuICAgIH1cbiAgICByZXR1cm4gZmlsZXM7XG59XG4vLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvRGF0YVRyYW5zZmVySXRlbVxuZnVuY3Rpb24gdG9GaWxlUHJvbWlzZXMoaXRlbSkge1xuICAgIGlmICh0eXBlb2YgaXRlbS53ZWJraXRHZXRBc0VudHJ5ICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHJldHVybiBmcm9tRGF0YVRyYW5zZmVySXRlbShpdGVtKTtcbiAgICB9XG4gICAgdmFyIGVudHJ5ID0gaXRlbS53ZWJraXRHZXRBc0VudHJ5KCk7XG4gICAgLy8gU2FmYXJpIHN1cHBvcnRzIGRyb3BwaW5nIGFuIGltYWdlIG5vZGUgZnJvbSBhIGRpZmZlcmVudCB3aW5kb3cgYW5kIGNhbiBiZSByZXRyaWV2ZWQgdXNpbmdcbiAgICAvLyB0aGUgRGF0YVRyYW5zZmVySXRlbS5nZXRBc0ZpbGUoKSBBUElcbiAgICAvLyBOT1RFOiBGaWxlU3lzdGVtRW50cnkuZmlsZSgpIHRocm93cyBpZiB0cnlpbmcgdG8gZ2V0IHRoZSBmaWxlXG4gICAgaWYgKGVudHJ5ICYmIGVudHJ5LmlzRGlyZWN0b3J5KSB7XG4gICAgICAgIHJldHVybiBmcm9tRGlyRW50cnkoZW50cnkpO1xuICAgIH1cbiAgICByZXR1cm4gZnJvbURhdGFUcmFuc2Zlckl0ZW0oaXRlbSk7XG59XG5mdW5jdGlvbiBmbGF0dGVuKGl0ZW1zKSB7XG4gICAgcmV0dXJuIGl0ZW1zLnJlZHVjZShmdW5jdGlvbiAoYWNjLCBmaWxlcykgeyByZXR1cm4gdHNsaWJfMS5fX3NwcmVhZChhY2MsIChBcnJheS5pc0FycmF5KGZpbGVzKSA/IGZsYXR0ZW4oZmlsZXMpIDogW2ZpbGVzXSkpOyB9LCBbXSk7XG59XG5mdW5jdGlvbiBmcm9tRGF0YVRyYW5zZmVySXRlbShpdGVtKSB7XG4gICAgdmFyIGZpbGUgPSBpdGVtLmdldEFzRmlsZSgpO1xuICAgIGlmICghZmlsZSkge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoaXRlbSArIFwiIGlzIG5vdCBhIEZpbGVcIik7XG4gICAgfVxuICAgIHZhciBmd3AgPSB0b0ZpbGVXaXRoUGF0aChmaWxlKTtcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGZ3cCk7XG59XG4vLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvRmlsZVN5c3RlbUVudHJ5XG5mdW5jdGlvbiBmcm9tRW50cnkoZW50cnkpIHtcbiAgICByZXR1cm4gdHNsaWJfMS5fX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRzbGliXzEuX19nZW5lcmF0b3IodGhpcywgZnVuY3Rpb24gKF9hKSB7XG4gICAgICAgICAgICByZXR1cm4gWzIgLypyZXR1cm4qLywgZW50cnkuaXNEaXJlY3RvcnkgPyBmcm9tRGlyRW50cnkoZW50cnkpIDogZnJvbUZpbGVFbnRyeShlbnRyeSldO1xuICAgICAgICB9KTtcbiAgICB9KTtcbn1cbi8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9GaWxlU3lzdGVtRGlyZWN0b3J5RW50cnlcbmZ1bmN0aW9uIGZyb21EaXJFbnRyeShlbnRyeSkge1xuICAgIHZhciByZWFkZXIgPSBlbnRyeS5jcmVhdGVSZWFkZXIoKTtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICB2YXIgZW50cmllcyA9IFtdO1xuICAgICAgICBmdW5jdGlvbiByZWFkRW50cmllcygpIHtcbiAgICAgICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgICAgICAvLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvRmlsZVN5c3RlbURpcmVjdG9yeUVudHJ5L2NyZWF0ZVJlYWRlclxuICAgICAgICAgICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0ZpbGVTeXN0ZW1EaXJlY3RvcnlSZWFkZXIvcmVhZEVudHJpZXNcbiAgICAgICAgICAgIHJlYWRlci5yZWFkRW50cmllcyhmdW5jdGlvbiAoYmF0Y2gpIHsgcmV0dXJuIHRzbGliXzEuX19hd2FpdGVyKF90aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHZhciBmaWxlcywgZXJyXzEsIGl0ZW1zO1xuICAgICAgICAgICAgICAgIHJldHVybiB0c2xpYl8xLl9fZ2VuZXJhdG9yKHRoaXMsIGZ1bmN0aW9uIChfYSkge1xuICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKF9hLmxhYmVsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEhYmF0Y2gubGVuZ3RoKSByZXR1cm4gWzMgLypicmVhayovLCA1XTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfYS5sYWJlbCA9IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX2EudHJ5cy5wdXNoKFsxLCAzLCAsIDRdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzQgLyp5aWVsZCovLCBQcm9taXNlLmFsbChlbnRyaWVzKV07XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZXMgPSBfYS5zZW50KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShmaWxlcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFszIC8qYnJlYWsqLywgNF07XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyXzEgPSBfYS5zZW50KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGVycl8xKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzMgLypicmVhayovLCA0XTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgNDogcmV0dXJuIFszIC8qYnJlYWsqLywgNl07XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbXMgPSBQcm9taXNlLmFsbChiYXRjaC5tYXAoZnJvbUVudHJ5KSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZW50cmllcy5wdXNoKGl0ZW1zKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBDb250aW51ZSByZWFkaW5nXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZEVudHJpZXMoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfYS5sYWJlbCA9IDY7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDY6IHJldHVybiBbMiAvKnJldHVybiovXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7IH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJlYWRFbnRyaWVzKCk7XG4gICAgfSk7XG59XG4vLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvRmlsZVN5c3RlbUZpbGVFbnRyeVxuZnVuY3Rpb24gZnJvbUZpbGVFbnRyeShlbnRyeSkge1xuICAgIHJldHVybiB0c2xpYl8xLl9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdHNsaWJfMS5fX2dlbmVyYXRvcih0aGlzLCBmdW5jdGlvbiAoX2EpIHtcbiAgICAgICAgICAgIHJldHVybiBbMiAvKnJldHVybiovLCBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgICAgICAgICAgICAgIGVudHJ5LmZpbGUoZnVuY3Rpb24gKGZpbGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmd3AgPSB0b0ZpbGVXaXRoUGF0aChmaWxlLCBlbnRyeS5mdWxsUGF0aCk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKGZ3cCk7XG4gICAgICAgICAgICAgICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9KV07XG4gICAgICAgIH0pO1xuICAgIH0pO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZmlsZS1zZWxlY3Rvci5qcy5tYXAiLCJtb2R1bGUuZXhwb3J0cz1mdW5jdGlvbihlKXtmdW5jdGlvbiByKG4pe2lmKHRbbl0pcmV0dXJuIHRbbl0uZXhwb3J0czt2YXIgbz10W25dPXtpOm4sbDohMSxleHBvcnRzOnt9fTtyZXR1cm4gZVtuXS5jYWxsKG8uZXhwb3J0cyxvLG8uZXhwb3J0cyxyKSxvLmw9ITAsby5leHBvcnRzfXZhciB0PXt9O3JldHVybiByLm09ZSxyLmM9dCxyLmQ9ZnVuY3Rpb24oZSx0LG4pe3IubyhlLHQpfHxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LHtjb25maWd1cmFibGU6ITEsZW51bWVyYWJsZTohMCxnZXQ6bn0pfSxyLm49ZnVuY3Rpb24oZSl7dmFyIHQ9ZSYmZS5fX2VzTW9kdWxlP2Z1bmN0aW9uKCl7cmV0dXJuIGUuZGVmYXVsdH06ZnVuY3Rpb24oKXtyZXR1cm4gZX07cmV0dXJuIHIuZCh0LFwiYVwiLHQpLHR9LHIubz1mdW5jdGlvbihlLHIpe3JldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxyKX0sci5wPVwiXCIscihyLnM9MCl9KFtmdW5jdGlvbihlLHIsdCl7XCJ1c2Ugc3RyaWN0XCI7ci5fX2VzTW9kdWxlPSEwLHIuZGVmYXVsdD1mdW5jdGlvbihlLHIpe2lmKGUmJnIpe3ZhciB0PUFycmF5LmlzQXJyYXkocik/cjpyLnNwbGl0KFwiLFwiKSxuPWUubmFtZXx8XCJcIixvPWUudHlwZXx8XCJcIix1PW8ucmVwbGFjZSgvXFwvLiokLyxcIlwiKTtyZXR1cm4gdC5zb21lKGZ1bmN0aW9uKGUpe3ZhciByPWUudHJpbSgpO3JldHVyblwiLlwiPT09ci5jaGFyQXQoMCk/bi50b0xvd2VyQ2FzZSgpLmVuZHNXaXRoKHIudG9Mb3dlckNhc2UoKSk6ci5lbmRzV2l0aChcIi8qXCIpP3U9PT1yLnJlcGxhY2UoL1xcLy4qJC8sXCJcIik6bz09PXJ9KX1yZXR1cm4hMH19XSk7IiwiaW1wb3J0IGFjY2VwdHMgZnJvbSAnYXR0ci1hY2NlcHQnXG5cbi8vIEZpcmVmb3ggdmVyc2lvbnMgcHJpb3IgdG8gNTMgcmV0dXJuIGEgYm9ndXMgTUlNRSB0eXBlIGZvciBldmVyeSBmaWxlIGRyYWcsIHNvIGRyYWdvdmVycyB3aXRoXG4vLyB0aGF0IE1JTUUgdHlwZSB3aWxsIGFsd2F5cyBiZSBhY2NlcHRlZFxuZXhwb3J0IGZ1bmN0aW9uIGZpbGVBY2NlcHRlZChmaWxlLCBhY2NlcHQpIHtcbiAgcmV0dXJuIGZpbGUudHlwZSA9PT0gJ2FwcGxpY2F0aW9uL3gtbW96LWZpbGUnIHx8IGFjY2VwdHMoZmlsZSwgYWNjZXB0KVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZmlsZU1hdGNoU2l6ZShmaWxlLCBtaW5TaXplLCBtYXhTaXplKSB7XG4gIGlmIChpc0RlZmluZWQoZmlsZS5zaXplKSkge1xuICAgIGlmIChpc0RlZmluZWQobWluU2l6ZSkgJiYgaXNEZWZpbmVkKG1heFNpemUpKVxuICAgICAgcmV0dXJuIGZpbGUuc2l6ZSA+PSBtaW5TaXplICYmIGZpbGUuc2l6ZSA8PSBtYXhTaXplXG4gICAgZWxzZSBpZiAoaXNEZWZpbmVkKG1pblNpemUpKVxuICAgICAgcmV0dXJuIGZpbGUuc2l6ZSA+PSBtaW5TaXplXG4gICAgZWxzZSBpZiAoaXNEZWZpbmVkKG1heFNpemUpKVxuICAgICAgcmV0dXJuIGZpbGUuc2l6ZSA8PSBtYXhTaXplXG4gIH1cbiAgcmV0dXJuIHRydWVcbn1cblxuZnVuY3Rpb24gaXNEZWZpbmVkKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSAhPT0gdW5kZWZpbmVkICYmIHZhbHVlICE9PSBudWxsXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhbGxGaWxlc0FjY2VwdGVkKHsgZmlsZXMsIGFjY2VwdCwgbWluU2l6ZSwgbWF4U2l6ZSwgbXVsdGlwbGUgfSkge1xuICBpZiAoIW11bHRpcGxlICYmIGZpbGVzLmxlbmd0aCA+IDEpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gZmlsZXMuZXZlcnkoZmlsZSA9PiB7XG4gICAgcmV0dXJuIGZpbGVBY2NlcHRlZChmaWxlLCBhY2NlcHQpICYmIGZpbGVNYXRjaFNpemUoZmlsZSwgbWluU2l6ZSwgbWF4U2l6ZSlcbiAgfSlcbn1cblxuLy8gUmVhY3QncyBzeW50aGV0aWMgZXZlbnRzIGhhcyBldmVudC5pc1Byb3BhZ2F0aW9uU3RvcHBlZCxcbi8vIGJ1dCB0byByZW1haW4gY29tcGF0aWJpbGl0eSB3aXRoIG90aGVyIGxpYnMgKFByZWFjdCkgZmFsbCBiYWNrXG4vLyB0byBjaGVjayBldmVudC5jYW5jZWxCdWJibGVcbmV4cG9ydCBmdW5jdGlvbiBpc1Byb3BhZ2F0aW9uU3RvcHBlZChldmVudCkge1xuICBpZiAodHlwZW9mIGV2ZW50LmlzUHJvcGFnYXRpb25TdG9wcGVkID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIGV2ZW50LmlzUHJvcGFnYXRpb25TdG9wcGVkKClcbiAgfSBlbHNlIGlmICh0eXBlb2YgZXZlbnQuY2FuY2VsQnViYmxlICE9PSAndW5kZWZpbmVkJykge1xuICAgIHJldHVybiBldmVudC5jYW5jZWxCdWJibGVcbiAgfVxuICByZXR1cm4gZmFsc2Vcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzRXZ0V2l0aEZpbGVzKGV2ZW50KSB7XG4gIGlmICghZXZlbnQuZGF0YVRyYW5zZmVyKSB7XG4gICAgcmV0dXJuICEhZXZlbnQudGFyZ2V0ICYmICEhZXZlbnQudGFyZ2V0LmZpbGVzXG4gIH1cbiAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0RhdGFUcmFuc2Zlci90eXBlc1xuICAvLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvSFRNTF9EcmFnX2FuZF9Ecm9wX0FQSS9SZWNvbW1lbmRlZF9kcmFnX3R5cGVzI2ZpbGVcbiAgcmV0dXJuIEFycmF5LnByb3RvdHlwZS5zb21lLmNhbGwoXG4gICAgZXZlbnQuZGF0YVRyYW5zZmVyLnR5cGVzLFxuICAgIHR5cGUgPT4gdHlwZSA9PT0gJ0ZpbGVzJyB8fCB0eXBlID09PSAnYXBwbGljYXRpb24veC1tb3otZmlsZSdcbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNLaW5kRmlsZShpdGVtKSB7XG4gIHJldHVybiB0eXBlb2YgaXRlbSA9PT0gJ29iamVjdCcgJiYgaXRlbSAhPT0gbnVsbCAmJiBpdGVtLmtpbmQgPT09ICdmaWxlJ1xufVxuXG4vLyBhbGxvdyB0aGUgZW50aXJlIGRvY3VtZW50IHRvIGJlIGEgZHJhZyB0YXJnZXRcbmV4cG9ydCBmdW5jdGlvbiBvbkRvY3VtZW50RHJhZ092ZXIoZXZlbnQpIHtcbiAgZXZlbnQucHJldmVudERlZmF1bHQoKVxufVxuXG5mdW5jdGlvbiBpc0llKHVzZXJBZ2VudCkge1xuICByZXR1cm4gdXNlckFnZW50LmluZGV4T2YoJ01TSUUnKSAhPT0gLTEgfHwgdXNlckFnZW50LmluZGV4T2YoJ1RyaWRlbnQvJykgIT09IC0xXG59XG5cbmZ1bmN0aW9uIGlzRWRnZSh1c2VyQWdlbnQpIHtcbiAgcmV0dXJuIHVzZXJBZ2VudC5pbmRleE9mKCdFZGdlLycpICE9PSAtMVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNJZU9yRWRnZSh1c2VyQWdlbnQgPSB3aW5kb3cubmF2aWdhdG9yLnVzZXJBZ2VudCkge1xuICByZXR1cm4gaXNJZSh1c2VyQWdlbnQpIHx8IGlzRWRnZSh1c2VyQWdlbnQpXG59XG5cbi8qKlxuICogVGhpcyBpcyBpbnRlbmRlZCB0byBiZSB1c2VkIHRvIGNvbXBvc2UgZXZlbnQgaGFuZGxlcnNcbiAqIFRoZXkgYXJlIGV4ZWN1dGVkIGluIG9yZGVyIHVudGlsIG9uZSBvZiB0aGVtIGNhbGxzIGBldmVudC5pc1Byb3BhZ2F0aW9uU3RvcHBlZCgpYC5cbiAqIE5vdGUgdGhhdCB0aGUgY2hlY2sgaXMgZG9uZSBvbiB0aGUgZmlyc3QgaW52b2tlIHRvbyxcbiAqIG1lYW5pbmcgdGhhdCBpZiBwcm9wYWdhdGlvbiB3YXMgc3RvcHBlZCBiZWZvcmUgaW52b2tpbmcgdGhlIGZucyxcbiAqIG5vIGhhbmRsZXJzIHdpbGwgYmUgZXhlY3V0ZWQuXG4gKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm5zIHRoZSBldmVudCBoYW5sZGVyIGZ1bmN0aW9uc1xuICogQHJldHVybiB7RnVuY3Rpb259IHRoZSBldmVudCBoYW5kbGVyIHRvIGFkZCB0byBhbiBlbGVtZW50XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb21wb3NlRXZlbnRIYW5kbGVycyguLi5mbnMpIHtcbiAgcmV0dXJuIChldmVudCwgLi4uYXJncykgPT5cbiAgICBmbnMuc29tZShmbiA9PiB7XG4gICAgICBpZiAoIWlzUHJvcGFnYXRpb25TdG9wcGVkKGV2ZW50KSAmJiBmbikge1xuICAgICAgICBmbihldmVudCwgLi4uYXJncylcbiAgICAgIH1cbiAgICAgIHJldHVybiBpc1Byb3BhZ2F0aW9uU3RvcHBlZChldmVudClcbiAgICB9KVxufVxuIiwiLyogZXNsaW50IHByZWZlci10ZW1wbGF0ZTogMCAqL1xuaW1wb3J0IFJlYWN0LCB7XG4gIGZvcndhcmRSZWYsXG4gIEZyYWdtZW50LFxuICB1c2VDYWxsYmFjayxcbiAgdXNlRWZmZWN0LFxuICB1c2VJbXBlcmF0aXZlSGFuZGxlLFxuICB1c2VNZW1vLFxuICB1c2VSZWR1Y2VyLFxuICB1c2VSZWZcbn0gZnJvbSAncmVhY3QnXG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnXG5pbXBvcnQgeyBmcm9tRXZlbnQgfSBmcm9tICdmaWxlLXNlbGVjdG9yJ1xuaW1wb3J0IHtcbiAgYWxsRmlsZXNBY2NlcHRlZCxcbiAgY29tcG9zZUV2ZW50SGFuZGxlcnMsXG4gIGZpbGVBY2NlcHRlZCxcbiAgZmlsZU1hdGNoU2l6ZSxcbiAgaXNFdnRXaXRoRmlsZXMsXG4gIGlzSWVPckVkZ2UsXG4gIGlzUHJvcGFnYXRpb25TdG9wcGVkLFxuICBvbkRvY3VtZW50RHJhZ092ZXJcbn0gZnJvbSAnLi91dGlscy9pbmRleCdcblxuLyoqXG4gKiBDb252ZW5pZW5jZSB3cmFwcGVyIGNvbXBvbmVudCBmb3IgdGhlIGB1c2VEcm9wem9uZWAgaG9va1xuICpcbiAqIGBgYGpzeFxuICogPERyb3B6b25lPlxuICogICB7KHtnZXRSb290UHJvcHMsIGdldElucHV0UHJvcHN9KSA9PiAoXG4gKiAgICAgPGRpdiB7Li4uZ2V0Um9vdFByb3BzKCl9PlxuICogICAgICAgPGlucHV0IHsuLi5nZXRJbnB1dFByb3BzKCl9IC8+XG4gKiAgICAgICA8cD5EcmFnICduJyBkcm9wIHNvbWUgZmlsZXMgaGVyZSwgb3IgY2xpY2sgdG8gc2VsZWN0IGZpbGVzPC9wPlxuICogICAgIDwvZGl2PlxuICogICApfVxuICogPC9Ecm9wem9uZT5cbiAqIGBgYFxuICovXG5jb25zdCBEcm9wem9uZSA9IGZvcndhcmRSZWYoKHsgY2hpbGRyZW4sIC4uLnBhcmFtcyB9LCByZWYpID0+IHtcbiAgY29uc3QgeyBvcGVuLCAuLi5wcm9wcyB9ID0gdXNlRHJvcHpvbmUocGFyYW1zKVxuXG4gIHVzZUltcGVyYXRpdmVIYW5kbGUocmVmLCAoKSA9PiAoeyBvcGVuIH0pLCBbb3Blbl0pXG5cbiAgLy8gVE9ETzogRmlndXJlIG91dCB3aHkgcmVhY3Qtc3R5bGVndWlkaXN0IGNhbm5vdCBjcmVhdGUgZG9jcyBpZiB3ZSBkb24ndCByZXR1cm4gYSBqc3ggZWxlbWVudFxuICByZXR1cm4gPEZyYWdtZW50PntjaGlsZHJlbih7IC4uLnByb3BzLCBvcGVuIH0pfTwvRnJhZ21lbnQ+XG59KVxuXG5Ecm9wem9uZS5kaXNwbGF5TmFtZSA9ICdEcm9wem9uZSdcbkRyb3B6b25lLnByb3BUeXBlcyA9IHtcbiAgLyoqXG4gICAqIFJlbmRlciBmdW5jdGlvbiB0aGF0IGV4cG9zZXMgdGhlIGRyb3B6b25lIHN0YXRlIGFuZCBwcm9wIGdldHRlciBmbnNcbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IHBhcmFtc1xuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBwYXJhbXMuZ2V0Um9vdFByb3BzIFJldHVybnMgdGhlIHByb3BzIHlvdSBzaG91bGQgYXBwbHkgdG8gdGhlIHJvb3QgZHJvcCBjb250YWluZXIgeW91IHJlbmRlclxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBwYXJhbXMuZ2V0SW5wdXRQcm9wcyBSZXR1cm5zIHRoZSBwcm9wcyB5b3Ugc2hvdWxkIGFwcGx5IHRvIGhpZGRlbiBmaWxlIGlucHV0IHlvdSByZW5kZXJcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gcGFyYW1zLm9wZW4gT3BlbiB0aGUgbmF0aXZlIGZpbGUgc2VsZWN0aW9uIGRpYWxvZ1xuICAgKiBAcGFyYW0ge2Jvb2xlYW59IHBhcmFtcy5pc0ZvY3VzZWQgRHJvcHpvbmUgYXJlYSBpcyBpbiBmb2N1c1xuICAgKiBAcGFyYW0ge2Jvb2xlYW59IHBhcmFtcy5pc0ZpbGVEaWFsb2dBY3RpdmUgRmlsZSBkaWFsb2cgaXMgb3BlbmVkXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gcGFyYW1zLmlzRHJhZ0FjdGl2ZSBBY3RpdmUgZHJhZyBpcyBpbiBwcm9ncmVzc1xuICAgKiBAcGFyYW0ge2Jvb2xlYW59IHBhcmFtcy5pc0RyYWdBY2NlcHQgRHJhZ2dlZCBmaWxlcyBhcmUgYWNjZXB0ZWRcbiAgICogQHBhcmFtIHtib29sZWFufSBwYXJhbXMuaXNEcmFnUmVqZWN0IFNvbWUgZHJhZ2dlZCBmaWxlcyBhcmUgcmVqZWN0ZWRcbiAgICogQHBhcmFtIHtGaWxlW119IHBhcmFtcy5kcmFnZ2VkRmlsZXMgRmlsZXMgaW4gYWN0aXZlIGRyYWdcbiAgICogQHBhcmFtIHtGaWxlW119IHBhcmFtcy5hY2NlcHRlZEZpbGVzIEFjY2VwdGVkIGZpbGVzXG4gICAqIEBwYXJhbSB7RmlsZVtdfSBwYXJhbXMucmVqZWN0ZWRGaWxlcyBSZWplY3RlZCBmaWxlc1xuICAgKi9cbiAgY2hpbGRyZW46IFByb3BUeXBlcy5mdW5jLFxuXG4gIC8qKlxuICAgKiBTZXQgYWNjZXB0ZWQgZmlsZSB0eXBlcy5cbiAgICogU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9va29uZXQvYXR0ci1hY2NlcHQgZm9yIG1vcmUgaW5mb3JtYXRpb24uXG4gICAqIEtlZXAgaW4gbWluZCB0aGF0IG1pbWUgdHlwZSBkZXRlcm1pbmF0aW9uIGlzIG5vdCByZWxpYWJsZSBhY3Jvc3MgcGxhdGZvcm1zLiBDU1YgZmlsZXMsXG4gICAqIGZvciBleGFtcGxlLCBhcmUgcmVwb3J0ZWQgYXMgdGV4dC9wbGFpbiB1bmRlciBtYWNPUyBidXQgYXMgYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsIHVuZGVyXG4gICAqIFdpbmRvd3MuIEluIHNvbWUgY2FzZXMgdGhlcmUgbWlnaHQgbm90IGJlIGEgbWltZSB0eXBlIHNldCBhdCBhbGwuXG4gICAqIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL3JlYWN0LWRyb3B6b25lL3JlYWN0LWRyb3B6b25lL2lzc3Vlcy8yNzZcbiAgICovXG4gIGFjY2VwdDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLnN0cmluZyldKSxcblxuICAvKipcbiAgICogQWxsb3cgZHJhZyAnbicgZHJvcCAob3Igc2VsZWN0aW9uIGZyb20gdGhlIGZpbGUgZGlhbG9nKSBvZiBtdWx0aXBsZSBmaWxlc1xuICAgKi9cbiAgbXVsdGlwbGU6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgKiBJZiBmYWxzZSwgYWxsb3cgZHJvcHBlZCBpdGVtcyB0byB0YWtlIG92ZXIgdGhlIGN1cnJlbnQgYnJvd3NlciB3aW5kb3dcbiAgICovXG4gIHByZXZlbnREcm9wT25Eb2N1bWVudDogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAqIElmIHRydWUsIGRpc2FibGVzIGNsaWNrIHRvIG9wZW4gdGhlIG5hdGl2ZSBmaWxlIHNlbGVjdGlvbiBkaWFsb2dcbiAgICovXG4gIG5vQ2xpY2s6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgKiBJZiB0cnVlLCBkaXNhYmxlcyBTUEFDRS9FTlRFUiB0byBvcGVuIHRoZSBuYXRpdmUgZmlsZSBzZWxlY3Rpb24gZGlhbG9nLlxuICAgKiBOb3RlIHRoYXQgaXQgYWxzbyBzdG9wcyB0cmFja2luZyB0aGUgZm9jdXMgc3RhdGUuXG4gICAqL1xuICBub0tleWJvYXJkOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICogSWYgdHJ1ZSwgZGlzYWJsZXMgZHJhZyAnbicgZHJvcFxuICAgKi9cbiAgbm9EcmFnOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICogSWYgdHJ1ZSwgc3RvcHMgZHJhZyBldmVudCBwcm9wYWdhdGlvbiB0byBwYXJlbnRzXG4gICAqL1xuICBub0RyYWdFdmVudHNCdWJibGluZzogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAqIE1pbmltdW0gZmlsZSBzaXplIChpbiBieXRlcylcbiAgICovXG4gIG1pblNpemU6IFByb3BUeXBlcy5udW1iZXIsXG5cbiAgLyoqXG4gICAqIE1heGltdW0gZmlsZSBzaXplIChpbiBieXRlcylcbiAgICovXG4gIG1heFNpemU6IFByb3BUeXBlcy5udW1iZXIsXG5cbiAgLyoqXG4gICAqIEVuYWJsZS9kaXNhYmxlIHRoZSBkcm9wem9uZVxuICAgKi9cbiAgZGlzYWJsZWQ6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgKiBVc2UgdGhpcyB0byBwcm92aWRlIGEgY3VzdG9tIGZpbGUgYWdncmVnYXRvclxuICAgKlxuICAgKiBAcGFyYW0geyhEcmFnRXZlbnR8RXZlbnQpfSBldmVudCBBIGRyYWcgZXZlbnQgb3IgaW5wdXQgY2hhbmdlIGV2ZW50IChpZiBmaWxlcyB3ZXJlIHNlbGVjdGVkIHZpYSB0aGUgZmlsZSBkaWFsb2cpXG4gICAqL1xuICBnZXRGaWxlc0Zyb21FdmVudDogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgLyoqXG4gICAqIENiIGZvciB3aGVuIGNsb3NpbmcgdGhlIGZpbGUgZGlhbG9nIHdpdGggbm8gc2VsZWN0aW9uXG4gICAqL1xuICBvbkZpbGVEaWFsb2dDYW5jZWw6IFByb3BUeXBlcy5mdW5jLFxuXG4gIC8qKlxuICAgKiBDYiBmb3Igd2hlbiB0aGUgYGRyYWdlbnRlcmAgZXZlbnQgb2NjdXJzLlxuICAgKlxuICAgKiBAcGFyYW0ge0RyYWdFdmVudH0gZXZlbnRcbiAgICovXG4gIG9uRHJhZ0VudGVyOiBQcm9wVHlwZXMuZnVuYyxcblxuICAvKipcbiAgICogQ2IgZm9yIHdoZW4gdGhlIGBkcmFnbGVhdmVgIGV2ZW50IG9jY3Vyc1xuICAgKlxuICAgKiBAcGFyYW0ge0RyYWdFdmVudH0gZXZlbnRcbiAgICovXG4gIG9uRHJhZ0xlYXZlOiBQcm9wVHlwZXMuZnVuYyxcblxuICAvKipcbiAgICogQ2IgZm9yIHdoZW4gdGhlIGBkcmFnb3ZlcmAgZXZlbnQgb2NjdXJzXG4gICAqXG4gICAqIEBwYXJhbSB7RHJhZ0V2ZW50fSBldmVudFxuICAgKi9cbiAgb25EcmFnT3ZlcjogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgLyoqXG4gICAqIENiIGZvciB3aGVuIHRoZSBgZHJvcGAgZXZlbnQgb2NjdXJzLlxuICAgKiBOb3RlIHRoYXQgdGhpcyBjYWxsYmFjayBpcyBpbnZva2VkIGFmdGVyIHRoZSBgZ2V0RmlsZXNGcm9tRXZlbnRgIGNhbGxiYWNrIGlzIGRvbmUuXG4gICAqXG4gICAqIEZpbGVzIGFyZSBhY2NlcHRlZCBvciByZWplY3RlZCBiYXNlZCBvbiB0aGUgYGFjY2VwdGAsIGBtdWx0aXBsZWAsIGBtaW5TaXplYCBhbmQgYG1heFNpemVgIHByb3BzLlxuICAgKiBgYWNjZXB0YCBtdXN0IGJlIGEgdmFsaWQgW01JTUUgdHlwZV0oaHR0cDovL3d3dy5pYW5hLm9yZy9hc3NpZ25tZW50cy9tZWRpYS10eXBlcy9tZWRpYS10eXBlcy54aHRtbCkgYWNjb3JkaW5nIHRvIFtpbnB1dCBlbGVtZW50IHNwZWNpZmljYXRpb25dKGh0dHBzOi8vd3d3LnczLm9yZy93aWtpL0hUTUwvRWxlbWVudHMvaW5wdXQvZmlsZSkgb3IgYSB2YWxpZCBmaWxlIGV4dGVuc2lvbi5cbiAgICogSWYgYG11bHRpcGxlYCBpcyBzZXQgdG8gZmFsc2UgYW5kIGFkZGl0aW9uYWwgZmlsZXMgYXJlIGRyb3BwcGVkLFxuICAgKiBhbGwgZmlsZXMgYmVzaWRlcyB0aGUgZmlyc3Qgd2lsbCBiZSByZWplY3RlZC5cbiAgICogQW55IGZpbGUgd2hpY2ggZG9lcyBub3QgaGF2ZSBhIHNpemUgaW4gdGhlIFtgbWluU2l6ZWAsIGBtYXhTaXplYF0gcmFuZ2UsIHdpbGwgYmUgcmVqZWN0ZWQgYXMgd2VsbC5cbiAgICpcbiAgICogTm90ZSB0aGF0IHRoZSBgb25Ecm9wYCBjYWxsYmFjayB3aWxsIGFsd2F5cyBiZSBpbnZva2VkIHJlZ2FyZGxlc3MgaWYgdGhlIGRyb3BwZWQgZmlsZXMgd2VyZSBhY2NlcHRlZCBvciByZWplY3RlZC5cbiAgICogSWYgeW91J2QgbGlrZSB0byByZWFjdCB0byBhIHNwZWNpZmljIHNjZW5hcmlvLCB1c2UgdGhlIGBvbkRyb3BBY2NlcHRlZGAvYG9uRHJvcFJlamVjdGVkYCBwcm9wcy5cbiAgICpcbiAgICogYG9uRHJvcGAgd2lsbCBwcm92aWRlIHlvdSB3aXRoIGFuIGFycmF5IG9mIFtGaWxlXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvRmlsZSkgb2JqZWN0cyB3aGljaCB5b3UgY2FuIHRoZW4gcHJvY2VzcyBhbmQgc2VuZCB0byBhIHNlcnZlci5cbiAgICogRm9yIGV4YW1wbGUsIHdpdGggW1N1cGVyQWdlbnRdKGh0dHBzOi8vZ2l0aHViLmNvbS92aXNpb25tZWRpYS9zdXBlcmFnZW50KSBhcyBhIGh0dHAvYWpheCBsaWJyYXJ5OlxuICAgKlxuICAgKiBgYGBqc1xuICAgKiBmdW5jdGlvbiBvbkRyb3AoYWNjZXB0ZWRGaWxlcykge1xuICAgKiAgIGNvbnN0IHJlcSA9IHJlcXVlc3QucG9zdCgnL3VwbG9hZCcpXG4gICAqICAgYWNjZXB0ZWRGaWxlcy5mb3JFYWNoKGZpbGUgPT4ge1xuICAgKiAgICAgcmVxLmF0dGFjaChmaWxlLm5hbWUsIGZpbGUpXG4gICAqICAgfSlcbiAgICogICByZXEuZW5kKGNhbGxiYWNrKVxuICAgKiB9XG4gICAqIGBgYFxuICAgKlxuICAgKiBAcGFyYW0ge0ZpbGVbXX0gYWNjZXB0ZWRGaWxlc1xuICAgKiBAcGFyYW0ge0ZpbGVbXX0gcmVqZWN0ZWRGaWxlc1xuICAgKiBAcGFyYW0geyhEcmFnRXZlbnR8RXZlbnQpfSBldmVudCBBIGRyYWcgZXZlbnQgb3IgaW5wdXQgY2hhbmdlIGV2ZW50IChpZiBmaWxlcyB3ZXJlIHNlbGVjdGVkIHZpYSB0aGUgZmlsZSBkaWFsb2cpXG4gICAqL1xuICBvbkRyb3A6IFByb3BUeXBlcy5mdW5jLFxuXG4gIC8qKlxuICAgKiBDYiBmb3Igd2hlbiB0aGUgYGRyb3BgIGV2ZW50IG9jY3Vycy5cbiAgICogTm90ZSB0aGF0IGlmIG5vIGZpbGVzIGFyZSBhY2NlcHRlZCwgdGhpcyBjYWxsYmFjayBpcyBub3QgaW52b2tlZC5cbiAgICpcbiAgICogQHBhcmFtIHtGaWxlW119IGZpbGVzXG4gICAqIEBwYXJhbSB7KERyYWdFdmVudHxFdmVudCl9IGV2ZW50XG4gICAqL1xuICBvbkRyb3BBY2NlcHRlZDogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgLyoqXG4gICAqIENiIGZvciB3aGVuIHRoZSBgZHJvcGAgZXZlbnQgb2NjdXJzLlxuICAgKiBOb3RlIHRoYXQgaWYgbm8gZmlsZXMgYXJlIHJlamVjdGVkLCB0aGlzIGNhbGxiYWNrIGlzIG5vdCBpbnZva2VkLlxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdFtdfSBmaWxlc1xuICAgKiBAcGFyYW0geyhEcmFnRXZlbnR8RXZlbnQpfSBldmVudFxuICAgKi9cbiAgb25Ecm9wUmVqZWN0ZWQ6IFByb3BUeXBlcy5mdW5jXG59XG5cbmV4cG9ydCBkZWZhdWx0IERyb3B6b25lXG5cbi8qKlxuICogQSBmdW5jdGlvbiB0aGF0IGlzIGludm9rZWQgZm9yIHRoZSBgZHJhZ2VudGVyYCxcbiAqIGBkcmFnb3ZlcmAgYW5kIGBkcmFnbGVhdmVgIGV2ZW50cy5cbiAqIEl0IGlzIG5vdCBpbnZva2VkIGlmIHRoZSBpdGVtcyBhcmUgbm90IGZpbGVzIChzdWNoIGFzIGxpbmssIHRleHQsIGV0Yy4pLlxuICpcbiAqIEBjYWxsYmFjayBkcmFnQ2JcbiAqIEBwYXJhbSB7RHJhZ0V2ZW50fSBldmVudFxuICovXG5cbi8qKlxuICogQSBmdW5jdGlvbiB0aGF0IGlzIGludm9rZWQgZm9yIHRoZSBgZHJvcGAgb3IgaW5wdXQgY2hhbmdlIGV2ZW50LlxuICogSXQgaXMgbm90IGludm9rZWQgaWYgdGhlIGl0ZW1zIGFyZSBub3QgZmlsZXMgKHN1Y2ggYXMgbGluaywgdGV4dCwgZXRjLikuXG4gKlxuICogQGNhbGxiYWNrIGRyb3BDYlxuICogQHBhcmFtIHtGaWxlW119IGFjY2VwdGVkRmlsZXMgTGlzdCBvZiBhY2NlcHRlZCBmaWxlc1xuICogQHBhcmFtIHtGaWxlW119IHJlamVjdGVkRmlsZXMgTGlzdCBvZiByZWplY3RlZCBmaWxlc1xuICogQHBhcmFtIHsoRHJhZ0V2ZW50fEV2ZW50KX0gZXZlbnQgQSBkcmFnIGV2ZW50IG9yIGlucHV0IGNoYW5nZSBldmVudCAoaWYgZmlsZXMgd2VyZSBzZWxlY3RlZCB2aWEgdGhlIGZpbGUgZGlhbG9nKVxuICovXG5cbi8qKlxuICogQSBmdW5jdGlvbiB0aGF0IGlzIGludm9rZWQgZm9yIHRoZSBgZHJvcGAgb3IgaW5wdXQgY2hhbmdlIGV2ZW50LlxuICogSXQgaXMgbm90IGludm9rZWQgaWYgdGhlIGl0ZW1zIGFyZSBmaWxlcyAoc3VjaCBhcyBsaW5rLCB0ZXh0LCBldGMuKS5cbiAqXG4gKiBAY2FsbGJhY2sgZHJvcEFjY2VwdGVkQ2JcbiAqIEBwYXJhbSB7RmlsZVtdfSBmaWxlcyBMaXN0IG9mIGFjY2VwdGVkIGZpbGVzIHRoYXQgbWVldCB0aGUgZ2l2ZW4gY3JpdGVyaWFcbiAqIChgYWNjZXB0YCwgYG11bHRpcGxlYCwgYG1pblNpemVgLCBgbWF4U2l6ZWApXG4gKiBAcGFyYW0geyhEcmFnRXZlbnR8RXZlbnQpfSBldmVudCBBIGRyYWcgZXZlbnQgb3IgaW5wdXQgY2hhbmdlIGV2ZW50IChpZiBmaWxlcyB3ZXJlIHNlbGVjdGVkIHZpYSB0aGUgZmlsZSBkaWFsb2cpXG4gKi9cblxuLyoqXG4gKiBBIGZ1bmN0aW9uIHRoYXQgaXMgaW52b2tlZCBmb3IgdGhlIGBkcm9wYCBvciBpbnB1dCBjaGFuZ2UgZXZlbnQuXG4gKlxuICogQGNhbGxiYWNrIGRyb3BSZWplY3RlZENiXG4gKiBAcGFyYW0ge0ZpbGVbXX0gZmlsZXMgTGlzdCBvZiByZWplY3RlZCBmaWxlcyB0aGF0IGRvIG5vdCBtZWV0IHRoZSBnaXZlbiBjcml0ZXJpYVxuICogKGBhY2NlcHRgLCBgbXVsdGlwbGVgLCBgbWluU2l6ZWAsIGBtYXhTaXplYClcbiAqIEBwYXJhbSB7KERyYWdFdmVudHxFdmVudCl9IGV2ZW50IEEgZHJhZyBldmVudCBvciBpbnB1dCBjaGFuZ2UgZXZlbnQgKGlmIGZpbGVzIHdlcmUgc2VsZWN0ZWQgdmlhIHRoZSBmaWxlIGRpYWxvZylcbiAqL1xuXG4vKipcbiAqIEEgZnVuY3Rpb24gdGhhdCBpcyB1c2VkIGFnZ3JlZ2F0ZSBmaWxlcyxcbiAqIGluIGEgYXN5bmNocm9ub3VzIGZhc2hpb24sIGZyb20gZHJhZyBvciBpbnB1dCBjaGFuZ2UgZXZlbnRzLlxuICpcbiAqIEBjYWxsYmFjayBnZXRGaWxlc0Zyb21FdmVudFxuICogQHBhcmFtIHsoRHJhZ0V2ZW50fEV2ZW50KX0gZXZlbnQgQSBkcmFnIGV2ZW50IG9yIGlucHV0IGNoYW5nZSBldmVudCAoaWYgZmlsZXMgd2VyZSBzZWxlY3RlZCB2aWEgdGhlIGZpbGUgZGlhbG9nKVxuICogQHJldHVybnMgeyhGaWxlW118UHJvbWlzZTxGaWxlW10+KX1cbiAqL1xuXG4vKipcbiAqIEFuIG9iamVjdCB3aXRoIHRoZSBjdXJyZW50IGRyb3B6b25lIHN0YXRlIGFuZCBzb21lIGhlbHBlciBmdW5jdGlvbnMuXG4gKlxuICogQHR5cGVkZWYge29iamVjdH0gRHJvcHpvbmVTdGF0ZVxuICogQHByb3BlcnR5IHtGdW5jdGlvbn0gZ2V0Um9vdFByb3BzIFJldHVybnMgdGhlIHByb3BzIHlvdSBzaG91bGQgYXBwbHkgdG8gdGhlIHJvb3QgZHJvcCBjb250YWluZXIgeW91IHJlbmRlclxuICogQHByb3BlcnR5IHtGdW5jdGlvbn0gZ2V0SW5wdXRQcm9wcyBSZXR1cm5zIHRoZSBwcm9wcyB5b3Ugc2hvdWxkIGFwcGx5IHRvIGhpZGRlbiBmaWxlIGlucHV0IHlvdSByZW5kZXJcbiAqIEBwcm9wZXJ0eSB7RnVuY3Rpb259IG9wZW4gT3BlbiB0aGUgbmF0aXZlIGZpbGUgc2VsZWN0aW9uIGRpYWxvZ1xuICogQHByb3BlcnR5IHtib29sZWFufSBpc0ZvY3VzZWQgRHJvcHpvbmUgYXJlYSBpcyBpbiBmb2N1c1xuICogQHByb3BlcnR5IHtib29sZWFufSBpc0ZpbGVEaWFsb2dBY3RpdmUgRmlsZSBkaWFsb2cgaXMgb3BlbmVkXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IGlzRHJhZ0FjdGl2ZSBBY3RpdmUgZHJhZyBpcyBpbiBwcm9ncmVzc1xuICogQHByb3BlcnR5IHtib29sZWFufSBpc0RyYWdBY2NlcHQgRHJhZ2dlZCBmaWxlcyBhcmUgYWNjZXB0ZWRcbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gaXNEcmFnUmVqZWN0IFNvbWUgZHJhZ2dlZCBmaWxlcyBhcmUgcmVqZWN0ZWRcbiAqIEBwcm9wZXJ0eSB7RmlsZVtdfSBkcmFnZ2VkRmlsZXMgRmlsZXMgaW4gYWN0aXZlIGRyYWdcbiAqIEBwcm9wZXJ0eSB7RmlsZVtdfSBhY2NlcHRlZEZpbGVzIEFjY2VwdGVkIGZpbGVzXG4gKiBAcHJvcGVydHkge0ZpbGVbXX0gcmVqZWN0ZWRGaWxlcyBSZWplY3RlZCBmaWxlc1xuICovXG5cbmNvbnN0IGluaXRpYWxTdGF0ZSA9IHtcbiAgaXNGb2N1c2VkOiBmYWxzZSxcbiAgaXNGaWxlRGlhbG9nQWN0aXZlOiBmYWxzZSxcbiAgaXNEcmFnQWN0aXZlOiBmYWxzZSxcbiAgaXNEcmFnQWNjZXB0OiBmYWxzZSxcbiAgaXNEcmFnUmVqZWN0OiBmYWxzZSxcbiAgZHJhZ2dlZEZpbGVzOiBbXSxcbiAgYWNjZXB0ZWRGaWxlczogW10sXG4gIHJlamVjdGVkRmlsZXM6IFtdXG59XG5cbi8qKlxuICogQSBSZWFjdCBob29rIHRoYXQgY3JlYXRlcyBhIGRyYWcgJ24nIGRyb3AgYXJlYS5cbiAqXG4gKiBgYGBqc3hcbiAqIGZ1bmN0aW9uIE15RHJvcHpvbmUocHJvcHMpIHtcbiAqICAgY29uc3Qge2dldFJvb3RQcm9wcywgZ2V0SW5wdXRQcm9wc30gPSB1c2VEcm9wem9uZSh7XG4gKiAgICAgb25Ecm9wOiBhY2NlcHRlZEZpbGVzID0+IHtcbiAqICAgICAgIC8vIGRvIHNvbWV0aGluZyB3aXRoIHRoZSBGaWxlIG9iamVjdHMsIGUuZy4gdXBsb2FkIHRvIHNvbWUgc2VydmVyXG4gKiAgICAgfVxuICogICB9KTtcbiAqICAgcmV0dXJuIChcbiAqICAgICA8ZGl2IHsuLi5nZXRSb290UHJvcHMoKX0+XG4gKiAgICAgICA8aW5wdXQgey4uLmdldElucHV0UHJvcHMoKX0gLz5cbiAqICAgICAgIDxwPkRyYWcgYW5kIGRyb3Agc29tZSBmaWxlcyBoZXJlLCBvciBjbGljayB0byBzZWxlY3QgZmlsZXM8L3A+XG4gKiAgICAgPC9kaXY+XG4gKiAgIClcbiAqIH1cbiAqIGBgYFxuICpcbiAqIEBmdW5jdGlvbiB1c2VEcm9wem9uZVxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBwcm9wc1xuICogQHBhcmFtIHtzdHJpbmd8c3RyaW5nW119IFtwcm9wcy5hY2NlcHRdIFNldCBhY2NlcHRlZCBmaWxlIHR5cGVzLlxuICogU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9va29uZXQvYXR0ci1hY2NlcHQgZm9yIG1vcmUgaW5mb3JtYXRpb24uXG4gKiBLZWVwIGluIG1pbmQgdGhhdCBtaW1lIHR5cGUgZGV0ZXJtaW5hdGlvbiBpcyBub3QgcmVsaWFibGUgYWNyb3NzIHBsYXRmb3Jtcy4gQ1NWIGZpbGVzLFxuICogZm9yIGV4YW1wbGUsIGFyZSByZXBvcnRlZCBhcyB0ZXh0L3BsYWluIHVuZGVyIG1hY09TIGJ1dCBhcyBhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwgdW5kZXJcbiAqIFdpbmRvd3MuIEluIHNvbWUgY2FzZXMgdGhlcmUgbWlnaHQgbm90IGJlIGEgbWltZSB0eXBlIHNldCBhdCBhbGwuXG4gKiBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9yZWFjdC1kcm9wem9uZS9yZWFjdC1kcm9wem9uZS9pc3N1ZXMvMjc2XG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtwcm9wcy5tdWx0aXBsZT10cnVlXSBBbGxvdyBkcmFnICduJyBkcm9wIChvciBzZWxlY3Rpb24gZnJvbSB0aGUgZmlsZSBkaWFsb2cpIG9mIG11bHRpcGxlIGZpbGVzXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtwcm9wcy5wcmV2ZW50RHJvcE9uRG9jdW1lbnQ9dHJ1ZV0gSWYgZmFsc2UsIGFsbG93IGRyb3BwZWQgaXRlbXMgdG8gdGFrZSBvdmVyIHRoZSBjdXJyZW50IGJyb3dzZXIgd2luZG93XG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtwcm9wcy5ub0NsaWNrPWZhbHNlXSBJZiB0cnVlLCBkaXNhYmxlcyBjbGljayB0byBvcGVuIHRoZSBuYXRpdmUgZmlsZSBzZWxlY3Rpb24gZGlhbG9nXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtwcm9wcy5ub0tleWJvYXJkPWZhbHNlXSBJZiB0cnVlLCBkaXNhYmxlcyBTUEFDRS9FTlRFUiB0byBvcGVuIHRoZSBuYXRpdmUgZmlsZSBzZWxlY3Rpb24gZGlhbG9nLlxuICogTm90ZSB0aGF0IGl0IGFsc28gc3RvcHMgdHJhY2tpbmcgdGhlIGZvY3VzIHN0YXRlLlxuICogQHBhcmFtIHtib29sZWFufSBbcHJvcHMubm9EcmFnPWZhbHNlXSBJZiB0cnVlLCBkaXNhYmxlcyBkcmFnICduJyBkcm9wXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtwcm9wcy5ub0RyYWdFdmVudHNCdWJibGluZz1mYWxzZV0gSWYgdHJ1ZSwgc3RvcHMgZHJhZyBldmVudCBwcm9wYWdhdGlvbiB0byBwYXJlbnRzXG4gKiBAcGFyYW0ge251bWJlcn0gW3Byb3BzLm1pblNpemU9MF0gTWluaW11bSBmaWxlIHNpemUgKGluIGJ5dGVzKVxuICogQHBhcmFtIHtudW1iZXJ9IFtwcm9wcy5tYXhTaXplPUluZmluaXR5XSBNYXhpbXVtIGZpbGUgc2l6ZSAoaW4gYnl0ZXMpXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtwcm9wcy5kaXNhYmxlZD1mYWxzZV0gRW5hYmxlL2Rpc2FibGUgdGhlIGRyb3B6b25lXG4gKiBAcGFyYW0ge2dldEZpbGVzRnJvbUV2ZW50fSBbcHJvcHMuZ2V0RmlsZXNGcm9tRXZlbnRdIFVzZSB0aGlzIHRvIHByb3ZpZGUgYSBjdXN0b20gZmlsZSBhZ2dyZWdhdG9yXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbcHJvcHMub25GaWxlRGlhbG9nQ2FuY2VsXSBDYiBmb3Igd2hlbiBjbG9zaW5nIHRoZSBmaWxlIGRpYWxvZyB3aXRoIG5vIHNlbGVjdGlvblxuICogQHBhcmFtIHtkcmFnQ2J9IFtwcm9wcy5vbkRyYWdFbnRlcl0gQ2IgZm9yIHdoZW4gdGhlIGBkcmFnZW50ZXJgIGV2ZW50IG9jY3Vycy5cbiAqIEBwYXJhbSB7ZHJhZ0NifSBbcHJvcHMub25EcmFnTGVhdmVdIENiIGZvciB3aGVuIHRoZSBgZHJhZ2xlYXZlYCBldmVudCBvY2N1cnNcbiAqIEBwYXJhbSB7ZHJhZ0NifSBbcHJvcHMub25EcmFnT3Zlcl0gQ2IgZm9yIHdoZW4gdGhlIGBkcmFnb3ZlcmAgZXZlbnQgb2NjdXJzXG4gKiBAcGFyYW0ge2Ryb3BDYn0gW3Byb3BzLm9uRHJvcF0gQ2IgZm9yIHdoZW4gdGhlIGBkcm9wYCBldmVudCBvY2N1cnMuXG4gKiBOb3RlIHRoYXQgdGhpcyBjYWxsYmFjayBpcyBpbnZva2VkIGFmdGVyIHRoZSBgZ2V0RmlsZXNGcm9tRXZlbnRgIGNhbGxiYWNrIGlzIGRvbmUuXG4gKlxuICogRmlsZXMgYXJlIGFjY2VwdGVkIG9yIHJlamVjdGVkIGJhc2VkIG9uIHRoZSBgYWNjZXB0YCwgYG11bHRpcGxlYCwgYG1pblNpemVgIGFuZCBgbWF4U2l6ZWAgcHJvcHMuXG4gKiBgYWNjZXB0YCBtdXN0IGJlIGEgdmFsaWQgW01JTUUgdHlwZV0oaHR0cDovL3d3dy5pYW5hLm9yZy9hc3NpZ25tZW50cy9tZWRpYS10eXBlcy9tZWRpYS10eXBlcy54aHRtbCkgYWNjb3JkaW5nIHRvIFtpbnB1dCBlbGVtZW50IHNwZWNpZmljYXRpb25dKGh0dHBzOi8vd3d3LnczLm9yZy93aWtpL0hUTUwvRWxlbWVudHMvaW5wdXQvZmlsZSkgb3IgYSB2YWxpZCBmaWxlIGV4dGVuc2lvbi5cbiAqIElmIGBtdWx0aXBsZWAgaXMgc2V0IHRvIGZhbHNlIGFuZCBhZGRpdGlvbmFsIGZpbGVzIGFyZSBkcm9wcHBlZCxcbiAqIGFsbCBmaWxlcyBiZXNpZGVzIHRoZSBmaXJzdCB3aWxsIGJlIHJlamVjdGVkLlxuICogQW55IGZpbGUgd2hpY2ggZG9lcyBub3QgaGF2ZSBhIHNpemUgaW4gdGhlIFtgbWluU2l6ZWAsIGBtYXhTaXplYF0gcmFuZ2UsIHdpbGwgYmUgcmVqZWN0ZWQgYXMgd2VsbC5cbiAqXG4gKiBOb3RlIHRoYXQgdGhlIGBvbkRyb3BgIGNhbGxiYWNrIHdpbGwgYWx3YXlzIGJlIGludm9rZWQgcmVnYXJkbGVzcyBpZiB0aGUgZHJvcHBlZCBmaWxlcyB3ZXJlIGFjY2VwdGVkIG9yIHJlamVjdGVkLlxuICogSWYgeW91J2QgbGlrZSB0byByZWFjdCB0byBhIHNwZWNpZmljIHNjZW5hcmlvLCB1c2UgdGhlIGBvbkRyb3BBY2NlcHRlZGAvYG9uRHJvcFJlamVjdGVkYCBwcm9wcy5cbiAqXG4gKiBgb25Ecm9wYCB3aWxsIHByb3ZpZGUgeW91IHdpdGggYW4gYXJyYXkgb2YgW0ZpbGVdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9GaWxlKSBvYmplY3RzIHdoaWNoIHlvdSBjYW4gdGhlbiBwcm9jZXNzIGFuZCBzZW5kIHRvIGEgc2VydmVyLlxuICogRm9yIGV4YW1wbGUsIHdpdGggW1N1cGVyQWdlbnRdKGh0dHBzOi8vZ2l0aHViLmNvbS92aXNpb25tZWRpYS9zdXBlcmFnZW50KSBhcyBhIGh0dHAvYWpheCBsaWJyYXJ5OlxuICpcbiAqIGBgYGpzXG4gKiBmdW5jdGlvbiBvbkRyb3AoYWNjZXB0ZWRGaWxlcykge1xuICogICBjb25zdCByZXEgPSByZXF1ZXN0LnBvc3QoJy91cGxvYWQnKVxuICogICBhY2NlcHRlZEZpbGVzLmZvckVhY2goZmlsZSA9PiB7XG4gKiAgICAgcmVxLmF0dGFjaChmaWxlLm5hbWUsIGZpbGUpXG4gKiAgIH0pXG4gKiAgIHJlcS5lbmQoY2FsbGJhY2spXG4gKiB9XG4gKiBgYGBcbiAqIEBwYXJhbSB7ZHJvcEFjY2VwdGVkQ2J9IFtwcm9wcy5vbkRyb3BBY2NlcHRlZF1cbiAqIEBwYXJhbSB7ZHJvcFJlamVjdGVkQ2J9IFtwcm9wcy5vbkRyb3BSZWplY3RlZF1cbiAqXG4gKiBAcmV0dXJucyB7RHJvcHpvbmVTdGF0ZX1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZURyb3B6b25lKHtcbiAgYWNjZXB0LFxuICBkaXNhYmxlZCA9IGZhbHNlLFxuICBnZXRGaWxlc0Zyb21FdmVudCA9IGZyb21FdmVudCxcbiAgbWF4U2l6ZSA9IEluZmluaXR5LFxuICBtaW5TaXplID0gMCxcbiAgbXVsdGlwbGUgPSB0cnVlLFxuICBvbkRyYWdFbnRlcixcbiAgb25EcmFnTGVhdmUsXG4gIG9uRHJhZ092ZXIsXG4gIG9uRHJvcCxcbiAgb25Ecm9wQWNjZXB0ZWQsXG4gIG9uRHJvcFJlamVjdGVkLFxuICBvbkZpbGVEaWFsb2dDYW5jZWwsXG4gIHByZXZlbnREcm9wT25Eb2N1bWVudCA9IHRydWUsXG4gIG5vQ2xpY2sgPSBmYWxzZSxcbiAgbm9LZXlib2FyZCA9IGZhbHNlLFxuICBub0RyYWcgPSBmYWxzZSxcbiAgbm9EcmFnRXZlbnRzQnViYmxpbmcgPSBmYWxzZVxufSA9IHt9KSB7XG4gIGNvbnN0IHJvb3RSZWYgPSB1c2VSZWYobnVsbClcbiAgY29uc3QgaW5wdXRSZWYgPSB1c2VSZWYobnVsbClcblxuICBjb25zdCBbc3RhdGUsIGRpc3BhdGNoXSA9IHVzZVJlZHVjZXIocmVkdWNlciwgaW5pdGlhbFN0YXRlKVxuICBjb25zdCB7IGlzRm9jdXNlZCwgaXNGaWxlRGlhbG9nQWN0aXZlLCBkcmFnZ2VkRmlsZXMgfSA9IHN0YXRlXG5cbiAgLy8gRm4gZm9yIG9wZW5pbmcgdGhlIGZpbGUgZGlhbG9nIHByb2dyYW1tYXRpY2FsbHlcbiAgY29uc3Qgb3BlbkZpbGVEaWFsb2cgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgaWYgKGlucHV0UmVmLmN1cnJlbnQpIHtcbiAgICAgIGRpc3BhdGNoKHsgdHlwZTogJ29wZW5EaWFsb2cnIH0pXG4gICAgICBpbnB1dFJlZi5jdXJyZW50LnZhbHVlID0gbnVsbFxuICAgICAgaW5wdXRSZWYuY3VycmVudC5jbGljaygpXG4gICAgfVxuICB9LCBbZGlzcGF0Y2hdKVxuXG4gIC8vIFVwZGF0ZSBmaWxlIGRpYWxvZyBhY3RpdmUgc3RhdGUgd2hlbiB0aGUgd2luZG93IGlzIGZvY3VzZWQgb25cbiAgY29uc3Qgb25XaW5kb3dGb2N1cyA9ICgpID0+IHtcbiAgICAvLyBFeGVjdXRlIHRoZSB0aW1lb3V0IG9ubHkgaWYgdGhlIGZpbGUgZGlhbG9nIGlzIG9wZW5lZCBpbiB0aGUgYnJvd3NlclxuICAgIGlmIChpc0ZpbGVEaWFsb2dBY3RpdmUpIHtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBpZiAoaW5wdXRSZWYuY3VycmVudCkge1xuICAgICAgICAgIGNvbnN0IHsgZmlsZXMgfSA9IGlucHV0UmVmLmN1cnJlbnRcblxuICAgICAgICAgIGlmICghZmlsZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICBkaXNwYXRjaCh7IHR5cGU6ICdjbG9zZURpYWxvZycgfSlcblxuICAgICAgICAgICAgaWYgKHR5cGVvZiBvbkZpbGVEaWFsb2dDYW5jZWwgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgb25GaWxlRGlhbG9nQ2FuY2VsKClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0sIDMwMClcbiAgICB9XG4gIH1cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignZm9jdXMnLCBvbldpbmRvd0ZvY3VzLCBmYWxzZSlcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2ZvY3VzJywgb25XaW5kb3dGb2N1cywgZmFsc2UpXG4gICAgfVxuICB9LCBbaW5wdXRSZWYsIGlzRmlsZURpYWxvZ0FjdGl2ZSwgb25GaWxlRGlhbG9nQ2FuY2VsXSlcblxuICAvLyBDYiB0byBvcGVuIHRoZSBmaWxlIGRpYWxvZyB3aGVuIFNQQUNFL0VOVEVSIG9jY3VycyBvbiB0aGUgZHJvcHpvbmVcbiAgY29uc3Qgb25LZXlEb3duQ2IgPSB1c2VDYWxsYmFjayhcbiAgICBldmVudCA9PiB7XG4gICAgICAvLyBJZ25vcmUga2V5Ym9hcmQgZXZlbnRzIGJ1YmJsaW5nIHVwIHRoZSBET00gdHJlZVxuICAgICAgaWYgKCFyb290UmVmLmN1cnJlbnQgfHwgIXJvb3RSZWYuY3VycmVudC5pc0VxdWFsTm9kZShldmVudC50YXJnZXQpKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBpZiAoZXZlbnQua2V5Q29kZSA9PT0gMzIgfHwgZXZlbnQua2V5Q29kZSA9PT0gMTMpIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKVxuICAgICAgICBvcGVuRmlsZURpYWxvZygpXG4gICAgICB9XG4gICAgfSxcbiAgICBbcm9vdFJlZiwgaW5wdXRSZWZdXG4gIClcblxuICAvLyBVcGRhdGUgZm9jdXMgc3RhdGUgZm9yIHRoZSBkcm9wem9uZVxuICBjb25zdCBvbkZvY3VzQ2IgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgZGlzcGF0Y2goeyB0eXBlOiAnZm9jdXMnIH0pXG4gIH0sIFtdKVxuICBjb25zdCBvbkJsdXJDYiA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBkaXNwYXRjaCh7IHR5cGU6ICdibHVyJyB9KVxuICB9LCBbXSlcblxuICAvLyBDYiB0byBvcGVuIHRoZSBmaWxlIGRpYWxvZyB3aGVuIGNsaWNrIG9jY3VycyBvbiB0aGUgZHJvcHpvbmVcbiAgY29uc3Qgb25DbGlja0NiID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGlmIChub0NsaWNrKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICAvLyBJbiBJRTExL0VkZ2UgdGhlIGZpbGUtYnJvd3NlciBkaWFsb2cgaXMgYmxvY2tpbmcsIHRoZXJlZm9yZSwgdXNlIHNldFRpbWVvdXQoKVxuICAgIC8vIHRvIGVuc3VyZSBSZWFjdCBjYW4gaGFuZGxlIHN0YXRlIGNoYW5nZXNcbiAgICAvLyBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9yZWFjdC1kcm9wem9uZS9yZWFjdC1kcm9wem9uZS9pc3N1ZXMvNDUwXG4gICAgaWYgKGlzSWVPckVkZ2UoKSkge1xuICAgICAgc2V0VGltZW91dChvcGVuRmlsZURpYWxvZywgMClcbiAgICB9IGVsc2Uge1xuICAgICAgb3BlbkZpbGVEaWFsb2coKVxuICAgIH1cbiAgfSwgW2lucHV0UmVmLCBub0NsaWNrXSlcblxuICBjb25zdCBkcmFnVGFyZ2V0c1JlZiA9IHVzZVJlZihbXSlcbiAgY29uc3Qgb25Eb2N1bWVudERyb3AgPSBldmVudCA9PiB7XG4gICAgaWYgKHJvb3RSZWYuY3VycmVudCAmJiByb290UmVmLmN1cnJlbnQuY29udGFpbnMoZXZlbnQudGFyZ2V0KSkge1xuICAgICAgLy8gSWYgd2UgaW50ZXJjZXB0ZWQgYW4gZXZlbnQgZm9yIG91ciBpbnN0YW5jZSwgbGV0IGl0IHByb3BhZ2F0ZSBkb3duIHRvIHRoZSBpbnN0YW5jZSdzIG9uRHJvcCBoYW5kbGVyXG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKVxuICAgIGRyYWdUYXJnZXRzUmVmLmN1cnJlbnQgPSBbXVxuICB9XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAocHJldmVudERyb3BPbkRvY3VtZW50KSB7XG4gICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdkcmFnb3ZlcicsIG9uRG9jdW1lbnREcmFnT3ZlciwgZmFsc2UpXG4gICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdkcm9wJywgb25Eb2N1bWVudERyb3AsIGZhbHNlKVxuICAgIH1cblxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBpZiAocHJldmVudERyb3BPbkRvY3VtZW50KSB7XG4gICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2RyYWdvdmVyJywgb25Eb2N1bWVudERyYWdPdmVyKVxuICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdkcm9wJywgb25Eb2N1bWVudERyb3ApXG4gICAgICB9XG4gICAgfVxuICB9LCBbcm9vdFJlZiwgcHJldmVudERyb3BPbkRvY3VtZW50XSlcblxuICBjb25zdCBvbkRyYWdFbnRlckNiID0gdXNlQ2FsbGJhY2soXG4gICAgZXZlbnQgPT4ge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKVxuICAgICAgLy8gUGVyc2lzdCBoZXJlIGJlY2F1c2Ugd2UgbmVlZCB0aGUgZXZlbnQgbGF0ZXIgYWZ0ZXIgZ2V0RmlsZXNGcm9tRXZlbnQoKSBpcyBkb25lXG4gICAgICBldmVudC5wZXJzaXN0KClcbiAgICAgIHN0b3BQcm9wYWdhdGlvbihldmVudClcblxuICAgICAgLy8gQ291bnQgdGhlIGRyb3B6b25lIGFuZCBhbnkgY2hpbGRyZW4gdGhhdCBhcmUgZW50ZXJlZC5cbiAgICAgIGlmIChkcmFnVGFyZ2V0c1JlZi5jdXJyZW50LmluZGV4T2YoZXZlbnQudGFyZ2V0KSA9PT0gLTEpIHtcbiAgICAgICAgZHJhZ1RhcmdldHNSZWYuY3VycmVudCA9IFsuLi5kcmFnVGFyZ2V0c1JlZi5jdXJyZW50LCBldmVudC50YXJnZXRdXG4gICAgICB9XG5cbiAgICAgIGlmIChpc0V2dFdpdGhGaWxlcyhldmVudCkpIHtcbiAgICAgICAgUHJvbWlzZS5yZXNvbHZlKGdldEZpbGVzRnJvbUV2ZW50KGV2ZW50KSkudGhlbihkcmFnZ2VkRmlsZXMgPT4ge1xuICAgICAgICAgIGlmIChpc1Byb3BhZ2F0aW9uU3RvcHBlZChldmVudCkgJiYgIW5vRHJhZ0V2ZW50c0J1YmJsaW5nKSB7XG4gICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBkaXNwYXRjaCh7XG4gICAgICAgICAgICBkcmFnZ2VkRmlsZXMsXG4gICAgICAgICAgICBpc0RyYWdBY3RpdmU6IHRydWUsXG4gICAgICAgICAgICB0eXBlOiAnc2V0RHJhZ2dlZEZpbGVzJ1xuICAgICAgICAgIH0pXG5cbiAgICAgICAgICBpZiAob25EcmFnRW50ZXIpIHtcbiAgICAgICAgICAgIG9uRHJhZ0VudGVyKGV2ZW50KVxuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9LFxuICAgIFtnZXRGaWxlc0Zyb21FdmVudCwgb25EcmFnRW50ZXIsIG5vRHJhZ0V2ZW50c0J1YmJsaW5nXVxuICApXG5cbiAgY29uc3Qgb25EcmFnT3ZlckNiID0gdXNlQ2FsbGJhY2soXG4gICAgZXZlbnQgPT4ge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKVxuICAgICAgZXZlbnQucGVyc2lzdCgpXG4gICAgICBzdG9wUHJvcGFnYXRpb24oZXZlbnQpXG5cbiAgICAgIGlmIChldmVudC5kYXRhVHJhbnNmZXIpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBldmVudC5kYXRhVHJhbnNmZXIuZHJvcEVmZmVjdCA9ICdjb3B5J1xuICAgICAgICB9IGNhdGNoIHt9IC8qIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tZW1wdHkgKi9cbiAgICAgIH1cblxuICAgICAgaWYgKGlzRXZ0V2l0aEZpbGVzKGV2ZW50KSAmJiBvbkRyYWdPdmVyKSB7XG4gICAgICAgIG9uRHJhZ092ZXIoZXZlbnQpXG4gICAgICB9XG5cbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH0sXG4gICAgW29uRHJhZ092ZXIsIG5vRHJhZ0V2ZW50c0J1YmJsaW5nXVxuICApXG5cbiAgY29uc3Qgb25EcmFnTGVhdmVDYiA9IHVzZUNhbGxiYWNrKFxuICAgIGV2ZW50ID0+IHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KClcbiAgICAgIGV2ZW50LnBlcnNpc3QoKVxuICAgICAgc3RvcFByb3BhZ2F0aW9uKGV2ZW50KVxuXG4gICAgICAvLyBPbmx5IGRlYWN0aXZhdGUgb25jZSB0aGUgZHJvcHpvbmUgYW5kIGFsbCBjaGlsZHJlbiBoYXZlIGJlZW4gbGVmdFxuICAgICAgY29uc3QgdGFyZ2V0cyA9IGRyYWdUYXJnZXRzUmVmLmN1cnJlbnQuZmlsdGVyKFxuICAgICAgICB0YXJnZXQgPT4gdGFyZ2V0ICE9PSBldmVudC50YXJnZXQgJiYgcm9vdFJlZi5jdXJyZW50ICYmIHJvb3RSZWYuY3VycmVudC5jb250YWlucyh0YXJnZXQpXG4gICAgICApXG4gICAgICBkcmFnVGFyZ2V0c1JlZi5jdXJyZW50ID0gdGFyZ2V0c1xuICAgICAgaWYgKHRhcmdldHMubGVuZ3RoID4gMCkge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgZGlzcGF0Y2goe1xuICAgICAgICBpc0RyYWdBY3RpdmU6IGZhbHNlLFxuICAgICAgICB0eXBlOiAnc2V0RHJhZ2dlZEZpbGVzJyxcbiAgICAgICAgZHJhZ2dlZEZpbGVzOiBbXVxuICAgICAgfSlcblxuICAgICAgaWYgKGlzRXZ0V2l0aEZpbGVzKGV2ZW50KSAmJiBvbkRyYWdMZWF2ZSkge1xuICAgICAgICBvbkRyYWdMZWF2ZShldmVudClcbiAgICAgIH1cbiAgICB9LFxuICAgIFtyb290UmVmLCBvbkRyYWdMZWF2ZSwgbm9EcmFnRXZlbnRzQnViYmxpbmddXG4gIClcblxuICBjb25zdCBvbkRyb3BDYiA9IHVzZUNhbGxiYWNrKFxuICAgIGV2ZW50ID0+IHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KClcbiAgICAgIC8vIFBlcnNpc3QgaGVyZSBiZWNhdXNlIHdlIG5lZWQgdGhlIGV2ZW50IGxhdGVyIGFmdGVyIGdldEZpbGVzRnJvbUV2ZW50KCkgaXMgZG9uZVxuICAgICAgZXZlbnQucGVyc2lzdCgpXG4gICAgICBzdG9wUHJvcGFnYXRpb24oZXZlbnQpXG5cbiAgICAgIGRyYWdUYXJnZXRzUmVmLmN1cnJlbnQgPSBbXVxuXG4gICAgICBpZiAoaXNFdnRXaXRoRmlsZXMoZXZlbnQpKSB7XG4gICAgICAgIFByb21pc2UucmVzb2x2ZShnZXRGaWxlc0Zyb21FdmVudChldmVudCkpLnRoZW4oZmlsZXMgPT4ge1xuICAgICAgICAgIGlmIChpc1Byb3BhZ2F0aW9uU3RvcHBlZChldmVudCkgJiYgIW5vRHJhZ0V2ZW50c0J1YmJsaW5nKSB7XG4gICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCBhY2NlcHRlZEZpbGVzID0gW11cbiAgICAgICAgICBjb25zdCByZWplY3RlZEZpbGVzID0gW11cblxuICAgICAgICAgIGZpbGVzLmZvckVhY2goZmlsZSA9PiB7XG4gICAgICAgICAgICBpZiAoZmlsZUFjY2VwdGVkKGZpbGUsIGFjY2VwdCkgJiYgZmlsZU1hdGNoU2l6ZShmaWxlLCBtaW5TaXplLCBtYXhTaXplKSkge1xuICAgICAgICAgICAgICBhY2NlcHRlZEZpbGVzLnB1c2goZmlsZSlcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHJlamVjdGVkRmlsZXMucHVzaChmaWxlKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG5cbiAgICAgICAgICBpZiAoIW11bHRpcGxlICYmIGFjY2VwdGVkRmlsZXMubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgcmVqZWN0ZWRGaWxlcy5wdXNoKC4uLmFjY2VwdGVkRmlsZXMuc3BsaWNlKDApKSAvLyBSZWplY3QgZXZlcnl0aGluZyBhbmQgZW1wdHkgYWNjZXB0ZWQgZmlsZXNcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBkaXNwYXRjaCh7XG4gICAgICAgICAgICBhY2NlcHRlZEZpbGVzLFxuICAgICAgICAgICAgcmVqZWN0ZWRGaWxlcyxcbiAgICAgICAgICAgIHR5cGU6ICdzZXRGaWxlcydcbiAgICAgICAgICB9KVxuXG4gICAgICAgICAgaWYgKG9uRHJvcCkge1xuICAgICAgICAgICAgb25Ecm9wKGFjY2VwdGVkRmlsZXMsIHJlamVjdGVkRmlsZXMsIGV2ZW50KVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChyZWplY3RlZEZpbGVzLmxlbmd0aCA+IDAgJiYgb25Ecm9wUmVqZWN0ZWQpIHtcbiAgICAgICAgICAgIG9uRHJvcFJlamVjdGVkKHJlamVjdGVkRmlsZXMsIGV2ZW50KVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChhY2NlcHRlZEZpbGVzLmxlbmd0aCA+IDAgJiYgb25Ecm9wQWNjZXB0ZWQpIHtcbiAgICAgICAgICAgIG9uRHJvcEFjY2VwdGVkKGFjY2VwdGVkRmlsZXMsIGV2ZW50KVxuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICAgIGRpc3BhdGNoKHsgdHlwZTogJ3Jlc2V0JyB9KVxuICAgIH0sXG4gICAgW1xuICAgICAgbXVsdGlwbGUsXG4gICAgICBhY2NlcHQsXG4gICAgICBtaW5TaXplLFxuICAgICAgbWF4U2l6ZSxcbiAgICAgIGdldEZpbGVzRnJvbUV2ZW50LFxuICAgICAgb25Ecm9wLFxuICAgICAgb25Ecm9wQWNjZXB0ZWQsXG4gICAgICBvbkRyb3BSZWplY3RlZCxcbiAgICAgIG5vRHJhZ0V2ZW50c0J1YmJsaW5nXG4gICAgXVxuICApXG5cbiAgY29uc3QgY29tcG9zZUhhbmRsZXIgPSBmbiA9PiB7XG4gICAgcmV0dXJuIGRpc2FibGVkID8gbnVsbCA6IGZuXG4gIH1cblxuICBjb25zdCBjb21wb3NlS2V5Ym9hcmRIYW5kbGVyID0gZm4gPT4ge1xuICAgIHJldHVybiBub0tleWJvYXJkID8gbnVsbCA6IGNvbXBvc2VIYW5kbGVyKGZuKVxuICB9XG5cbiAgY29uc3QgY29tcG9zZURyYWdIYW5kbGVyID0gZm4gPT4ge1xuICAgIHJldHVybiBub0RyYWcgPyBudWxsIDogY29tcG9zZUhhbmRsZXIoZm4pXG4gIH1cblxuICBjb25zdCBzdG9wUHJvcGFnYXRpb24gPSBldmVudCA9PiB7XG4gICAgaWYgKG5vRHJhZ0V2ZW50c0J1YmJsaW5nKSB7XG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGdldFJvb3RQcm9wcyA9IHVzZU1lbW8oXG4gICAgKCkgPT4gKHtcbiAgICAgIHJlZktleSA9ICdyZWYnLFxuICAgICAgb25LZXlEb3duLFxuICAgICAgb25Gb2N1cyxcbiAgICAgIG9uQmx1cixcbiAgICAgIG9uQ2xpY2ssXG4gICAgICBvbkRyYWdFbnRlcixcbiAgICAgIG9uRHJhZ092ZXIsXG4gICAgICBvbkRyYWdMZWF2ZSxcbiAgICAgIG9uRHJvcCxcbiAgICAgIC4uLnJlc3RcbiAgICB9ID0ge30pID0+ICh7XG4gICAgICBvbktleURvd246IGNvbXBvc2VLZXlib2FyZEhhbmRsZXIoY29tcG9zZUV2ZW50SGFuZGxlcnMob25LZXlEb3duLCBvbktleURvd25DYikpLFxuICAgICAgb25Gb2N1czogY29tcG9zZUtleWJvYXJkSGFuZGxlcihjb21wb3NlRXZlbnRIYW5kbGVycyhvbkZvY3VzLCBvbkZvY3VzQ2IpKSxcbiAgICAgIG9uQmx1cjogY29tcG9zZUtleWJvYXJkSGFuZGxlcihjb21wb3NlRXZlbnRIYW5kbGVycyhvbkJsdXIsIG9uQmx1ckNiKSksXG4gICAgICBvbkNsaWNrOiBjb21wb3NlSGFuZGxlcihjb21wb3NlRXZlbnRIYW5kbGVycyhvbkNsaWNrLCBvbkNsaWNrQ2IpKSxcbiAgICAgIG9uRHJhZ0VudGVyOiBjb21wb3NlRHJhZ0hhbmRsZXIoY29tcG9zZUV2ZW50SGFuZGxlcnMob25EcmFnRW50ZXIsIG9uRHJhZ0VudGVyQ2IpKSxcbiAgICAgIG9uRHJhZ092ZXI6IGNvbXBvc2VEcmFnSGFuZGxlcihjb21wb3NlRXZlbnRIYW5kbGVycyhvbkRyYWdPdmVyLCBvbkRyYWdPdmVyQ2IpKSxcbiAgICAgIG9uRHJhZ0xlYXZlOiBjb21wb3NlRHJhZ0hhbmRsZXIoY29tcG9zZUV2ZW50SGFuZGxlcnMob25EcmFnTGVhdmUsIG9uRHJhZ0xlYXZlQ2IpKSxcbiAgICAgIG9uRHJvcDogY29tcG9zZURyYWdIYW5kbGVyKGNvbXBvc2VFdmVudEhhbmRsZXJzKG9uRHJvcCwgb25Ecm9wQ2IpKSxcbiAgICAgIFtyZWZLZXldOiByb290UmVmLFxuICAgICAgLi4uKCFkaXNhYmxlZCAmJiAhbm9LZXlib2FyZCA/IHsgdGFiSW5kZXg6IDAgfSA6IHt9KSxcbiAgICAgIC4uLnJlc3RcbiAgICB9KSxcbiAgICBbXG4gICAgICByb290UmVmLFxuICAgICAgb25LZXlEb3duQ2IsXG4gICAgICBvbkZvY3VzQ2IsXG4gICAgICBvbkJsdXJDYixcbiAgICAgIG9uQ2xpY2tDYixcbiAgICAgIG9uRHJhZ0VudGVyQ2IsXG4gICAgICBvbkRyYWdPdmVyQ2IsXG4gICAgICBvbkRyYWdMZWF2ZUNiLFxuICAgICAgb25Ecm9wQ2IsXG4gICAgICBub0tleWJvYXJkLFxuICAgICAgbm9EcmFnLFxuICAgICAgZGlzYWJsZWRcbiAgICBdXG4gIClcblxuICBjb25zdCBvbklucHV0RWxlbWVudENsaWNrID0gdXNlQ2FsbGJhY2soZXZlbnQgPT4ge1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gIH0sIFtdKVxuXG4gIGNvbnN0IGdldElucHV0UHJvcHMgPSB1c2VNZW1vKFxuICAgICgpID0+ICh7IHJlZktleSA9ICdyZWYnLCBvbkNoYW5nZSwgb25DbGljaywgLi4ucmVzdCB9ID0ge30pID0+IHtcbiAgICAgIGNvbnN0IGlucHV0UHJvcHMgPSB7XG4gICAgICAgIGFjY2VwdCxcbiAgICAgICAgbXVsdGlwbGUsXG4gICAgICAgIHR5cGU6ICdmaWxlJyxcbiAgICAgICAgc3R5bGU6IHsgZGlzcGxheTogJ25vbmUnIH0sXG4gICAgICAgIG9uQ2hhbmdlOiBjb21wb3NlSGFuZGxlcihjb21wb3NlRXZlbnRIYW5kbGVycyhvbkNoYW5nZSwgb25Ecm9wQ2IpKSxcbiAgICAgICAgb25DbGljazogY29tcG9zZUhhbmRsZXIoY29tcG9zZUV2ZW50SGFuZGxlcnMob25DbGljaywgb25JbnB1dEVsZW1lbnRDbGljaykpLFxuICAgICAgICBhdXRvQ29tcGxldGU6ICdvZmYnLFxuICAgICAgICB0YWJJbmRleDogLTEsXG4gICAgICAgIFtyZWZLZXldOiBpbnB1dFJlZlxuICAgICAgfVxuXG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5pbnB1dFByb3BzLFxuICAgICAgICAuLi5yZXN0XG4gICAgICB9XG4gICAgfSxcbiAgICBbaW5wdXRSZWYsIGFjY2VwdCwgbXVsdGlwbGUsIG9uRHJvcENiLCBkaXNhYmxlZF1cbiAgKVxuXG4gIGNvbnN0IGZpbGVDb3VudCA9IGRyYWdnZWRGaWxlcy5sZW5ndGhcbiAgY29uc3QgaXNEcmFnQWNjZXB0ID0gZmlsZUNvdW50ID4gMCAmJiBhbGxGaWxlc0FjY2VwdGVkKHsgZmlsZXM6IGRyYWdnZWRGaWxlcywgYWNjZXB0LCBtaW5TaXplLCBtYXhTaXplLCBtdWx0aXBsZSB9KVxuICBjb25zdCBpc0RyYWdSZWplY3QgPSBmaWxlQ291bnQgPiAwICYmICFpc0RyYWdBY2NlcHRcblxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGlzRHJhZ0FjY2VwdCxcbiAgICBpc0RyYWdSZWplY3QsXG4gICAgaXNGb2N1c2VkOiBpc0ZvY3VzZWQgJiYgIWRpc2FibGVkLFxuICAgIGdldFJvb3RQcm9wcyxcbiAgICBnZXRJbnB1dFByb3BzLFxuICAgIHJvb3RSZWYsXG4gICAgaW5wdXRSZWYsXG4gICAgb3BlbjogY29tcG9zZUhhbmRsZXIob3BlbkZpbGVEaWFsb2cpXG4gIH1cbn1cblxuZnVuY3Rpb24gcmVkdWNlcihzdGF0ZSwgYWN0aW9uKSB7XG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gIHN3aXRjaCAoYWN0aW9uLnR5cGUpIHtcbiAgICBjYXNlICdmb2N1cyc6XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgaXNGb2N1c2VkOiB0cnVlXG4gICAgICB9XG4gICAgY2FzZSAnYmx1cic6XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgaXNGb2N1c2VkOiBmYWxzZVxuICAgICAgfVxuICAgIGNhc2UgJ29wZW5EaWFsb2cnOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIGlzRmlsZURpYWxvZ0FjdGl2ZTogdHJ1ZVxuICAgICAgfVxuICAgIGNhc2UgJ2Nsb3NlRGlhbG9nJzpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICBpc0ZpbGVEaWFsb2dBY3RpdmU6IGZhbHNlXG4gICAgICB9XG4gICAgY2FzZSAnc2V0RHJhZ2dlZEZpbGVzJzpcbiAgICAgIC8qIGVzbGludCBuby1jYXNlLWRlY2xhcmF0aW9uczogMCAqL1xuICAgICAgY29uc3QgeyBpc0RyYWdBY3RpdmUsIGRyYWdnZWRGaWxlcyB9ID0gYWN0aW9uXG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgZHJhZ2dlZEZpbGVzLFxuICAgICAgICBpc0RyYWdBY3RpdmVcbiAgICAgIH1cbiAgICBjYXNlICdzZXRGaWxlcyc6XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgYWNjZXB0ZWRGaWxlczogYWN0aW9uLmFjY2VwdGVkRmlsZXMsXG4gICAgICAgIHJlamVjdGVkRmlsZXM6IGFjdGlvbi5yZWplY3RlZEZpbGVzXG4gICAgICB9XG4gICAgY2FzZSAncmVzZXQnOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIGlzRmlsZURpYWxvZ0FjdGl2ZTogZmFsc2UsXG4gICAgICAgIGlzRHJhZ0FjdGl2ZTogZmFsc2UsXG4gICAgICAgIGRyYWdnZWRGaWxlczogW10sXG4gICAgICAgIGFjY2VwdGVkRmlsZXM6IFtdLFxuICAgICAgICByZWplY3RlZEZpbGVzOiBbXSxcbiAgICAgIH1cbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIHN0YXRlXG4gIH1cbn1cbiJdLCJuYW1lcyI6WyJfX2F3YWl0ZXIiLCJ0aGlzQXJnIiwiX2FyZ3VtZW50cyIsIlAiLCJnZW5lcmF0b3IiLCJQcm9taXNlIiwicmVzb2x2ZSIsInJlamVjdCIsImZ1bGZpbGxlZCIsInZhbHVlIiwic3RlcCIsIm5leHQiLCJlIiwicmVqZWN0ZWQiLCJyZXN1bHQiLCJkb25lIiwidGhlbiIsImFwcGx5IiwiX19nZW5lcmF0b3IiLCJib2R5IiwiZiIsInkiLCJ0IiwiZyIsIl8iLCJsYWJlbCIsInNlbnQiLCJ0cnlzIiwib3BzIiwidmVyYiIsInRocm93IiwicmV0dXJuIiwiU3ltYm9sIiwiaXRlcmF0b3IiLCJ0aGlzIiwibiIsInYiLCJvcCIsIlR5cGVFcnJvciIsImNhbGwiLCJwb3AiLCJsZW5ndGgiLCJwdXNoIiwiX19yZWFkIiwibyIsIm0iLCJyIiwiaSIsImFyIiwiZXJyb3IiLCJfX3NwcmVhZCIsImFyZ3VtZW50cyIsImNvbmNhdCIsIkNPTU1PTl9NSU1FX1RZUEVTIiwiTWFwIiwidG9GaWxlV2l0aFBhdGgiLCJmaWxlIiwicGF0aCIsIm5hbWUiLCJsYXN0SW5kZXhPZiIsInR5cGUiLCJleHQiLCJzcGxpdCIsInRvTG93ZXJDYXNlIiwiZ2V0IiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJ3cml0YWJsZSIsImNvbmZpZ3VyYWJsZSIsImVudW1lcmFibGUiLCJ3aXRoTWltZVR5cGUiLCJ3ZWJraXRSZWxhdGl2ZVBhdGgiLCJGSUxFU19UT19JR05PUkUiLCJmcm9tRXZlbnQiLCJldnQiLCJ0c2xpYl8xLl9fYXdhaXRlciIsInRzbGliXzEuX19nZW5lcmF0b3IiLCJfYSIsImRhdGFUcmFuc2ZlciIsImlzRHJhZ0V2dCIsImR0IiwiaXRlbXMiLCJmcm9tTGlzdCIsImZpbHRlciIsIml0ZW0iLCJraW5kIiwiYWxsIiwibWFwIiwidG9GaWxlUHJvbWlzZXMiLCJub0lnbm9yZWRGaWxlcyIsImZsYXR0ZW4iLCJyZWR1Y2UiLCJhY2MiLCJmaWxlcyIsInRzbGliXzEuX19zcHJlYWQiLCJBcnJheSIsImlzQXJyYXkiLCJnZXREYXRhVHJhbnNmZXJGaWxlcyIsImlzSW5wdXQiLCJ0YXJnZXQiLCJnZXRJbnB1dEZpbGVzIiwiaW5kZXhPZiIsIndlYmtpdEdldEFzRW50cnkiLCJmcm9tRGF0YVRyYW5zZmVySXRlbSIsImVudHJ5IiwiaXNEaXJlY3RvcnkiLCJmcm9tRGlyRW50cnkiLCJnZXRBc0ZpbGUiLCJmd3AiLCJmcm9tRW50cnkiLCJmdWxsUGF0aCIsImVyciIsImZyb21GaWxlRW50cnkiLCJyZWFkZXIiLCJjcmVhdGVSZWFkZXIiLCJlbnRyaWVzIiwicmVhZEVudHJpZXMiLCJfdGhpcyIsImJhdGNoIiwiZXJyXzEiLCJleHBvcnRzIiwibCIsIm1vZHVsZSIsIl9fZXNNb2R1bGUiLCJkZWZhdWx0IiwidSIsInJlcGxhY2UiLCJzb21lIiwidHJpbSIsImNoYXJBdCIsImVuZHNXaXRoIiwiYyIsImQiLCJwcm90b3R5cGUiLCJoYXNPd25Qcm9wZXJ0eSIsInAiLCJzIiwiZmlsZUFjY2VwdGVkIiwiYWNjZXB0IiwiYWNjZXB0cyIsImZpbGVNYXRjaFNpemUiLCJtaW5TaXplIiwibWF4U2l6ZSIsImlzRGVmaW5lZCIsInNpemUiLCJpc1Byb3BhZ2F0aW9uU3RvcHBlZCIsImV2ZW50IiwiY2FuY2VsQnViYmxlIiwiaXNFdnRXaXRoRmlsZXMiLCJ0eXBlcyIsIm9uRG9jdW1lbnREcmFnT3ZlciIsInByZXZlbnREZWZhdWx0IiwiaXNJZU9yRWRnZSIsInVzZXJBZ2VudCIsIndpbmRvdyIsIm5hdmlnYXRvciIsImlzSWUiLCJpc0VkZ2UiLCJjb21wb3NlRXZlbnRIYW5kbGVycyIsImZucyIsImFyZ3MiLCJmbiIsIkRyb3B6b25lIiwiZm9yd2FyZFJlZiIsInJlZiIsImNoaWxkcmVuIiwidXNlRHJvcHpvbmUiLCJvcGVuIiwicHJvcHMiLCJ1c2VJbXBlcmF0aXZlSGFuZGxlIiwiUmVhY3QiLCJGcmFnbWVudCIsImRpc3BsYXlOYW1lIiwiaW5pdGlhbFN0YXRlIiwiaXNGb2N1c2VkIiwicHJvcFR5cGVzIiwiUHJvcFR5cGVzIiwiZnVuYyIsIm9uZU9mVHlwZSIsInN0cmluZyIsImFycmF5T2YiLCJtdWx0aXBsZSIsImJvb2wiLCJwcmV2ZW50RHJvcE9uRG9jdW1lbnQiLCJub0NsaWNrIiwibm9LZXlib2FyZCIsIm5vRHJhZyIsIm5vRHJhZ0V2ZW50c0J1YmJsaW5nIiwibnVtYmVyIiwiZGlzYWJsZWQiLCJnZXRGaWxlc0Zyb21FdmVudCIsIm9uRmlsZURpYWxvZ0NhbmNlbCIsIm9uRHJhZ0VudGVyIiwib25EcmFnTGVhdmUiLCJvbkRyYWdPdmVyIiwib25Ecm9wIiwib25Ecm9wQWNjZXB0ZWQiLCJvbkRyb3BSZWplY3RlZCIsImlzRmlsZURpYWxvZ0FjdGl2ZSIsImlzRHJhZ0FjdGl2ZSIsImlzRHJhZ0FjY2VwdCIsImlzRHJhZ1JlamVjdCIsImRyYWdnZWRGaWxlcyIsImFjY2VwdGVkRmlsZXMiLCJyZWplY3RlZEZpbGVzIiwib25XaW5kb3dGb2N1cyIsInNldFRpbWVvdXQiLCJpbnB1dFJlZiIsImN1cnJlbnQiLCJkaXNwYXRjaCIsIkluZmluaXR5Iiwicm9vdFJlZiIsInVzZVJlZiIsInVzZVJlZHVjZXIiLCJyZWR1Y2VyIiwic3RhdGUiLCJvcGVuRmlsZURpYWxvZyIsInVzZUNhbGxiYWNrIiwiY2xpY2siLCJ1c2VFZmZlY3QiLCJhZGRFdmVudExpc3RlbmVyIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsIm9uRG9jdW1lbnREcm9wIiwiY29udGFpbnMiLCJkcmFnVGFyZ2V0c1JlZiIsIm9uS2V5RG93bkNiIiwiaXNFcXVhbE5vZGUiLCJrZXlDb2RlIiwib25Gb2N1c0NiIiwib25CbHVyQ2IiLCJvbkNsaWNrQ2IiLCJkb2N1bWVudCIsImNvbXBvc2VIYW5kbGVyIiwiY29tcG9zZUtleWJvYXJkSGFuZGxlciIsImNvbXBvc2VEcmFnSGFuZGxlciIsIm9uRHJhZ0VudGVyQ2IiLCJwZXJzaXN0Iiwic3RvcFByb3BhZ2F0aW9uIiwib25EcmFnT3ZlckNiIiwiZHJvcEVmZmVjdCIsIm9uRHJhZ0xlYXZlQ2IiLCJ0YXJnZXRzIiwib25Ecm9wQ2IiLCJmb3JFYWNoIiwic3BsaWNlIiwiZ2V0Um9vdFByb3BzIiwidXNlTWVtbyIsInJlZktleSIsIm9uS2V5RG93biIsIm9uRm9jdXMiLCJvbkJsdXIiLCJvbkNsaWNrIiwicmVzdCIsInRhYkluZGV4Iiwib25JbnB1dEVsZW1lbnRDbGljayIsImdldElucHV0UHJvcHMiLCJvbkNoYW5nZSIsInN0eWxlIiwiZGlzcGxheSIsImF1dG9Db21wbGV0ZSIsImZpbGVDb3VudCIsImV2ZXJ5IiwiYWxsRmlsZXNBY2NlcHRlZCIsImFjdGlvbiJdLCJtYXBwaW5ncyI6IndxRUFtRU8sU0FBU0EsRUFBVUMsRUFBU0MsRUFBWUMsRUFBR0MsR0FDOUMsT0FBTyxJQUFXRCxFQUFOQSxHQUFVRSxTQUFVLFNBQVVDLEVBQVNDLEdBQy9DLFNBQVNDLEVBQVVDLEdBQVMsSUFBTUMsRUFBS04sRUFBVU8sS0FBS0YsSUFBVyxNQUFPRyxHQUFLTCxFQUFPSyxJQUNwRixTQUFTQyxFQUFTSixHQUFTLElBQU1DLEVBQUtOLEVBQWlCLE1BQUVLLElBQVcsTUFBT0csR0FBS0wsRUFBT0ssSUFDdkYsU0FBU0YsRUFBS0ksR0FBVUEsRUFBT0MsS0FBT1QsRUFBUVEsRUFBT0wsT0FBUyxJQUFJTixFQUFFLFNBQVVHLEdBQVdBLEVBQVFRLEVBQU9MLFNBQVdPLEtBQUtSLEVBQVdLLEdBQ25J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
|