@borgar/fx 4.12.0 → 5.0.0

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.
Files changed (139) hide show
  1. package/dist/index-BMr6cTgc.d.cts +1444 -0
  2. package/dist/index-BMr6cTgc.d.ts +1444 -0
  3. package/dist/index.cjs +3054 -0
  4. package/dist/index.cjs.map +1 -0
  5. package/dist/index.d.cts +1 -0
  6. package/dist/index.d.ts +1 -0
  7. package/dist/index.js +2984 -0
  8. package/dist/index.js.map +1 -0
  9. package/dist/xlsx/index.cjs +3120 -0
  10. package/dist/xlsx/index.cjs.map +1 -0
  11. package/dist/xlsx/index.d.cts +55 -0
  12. package/dist/xlsx/index.d.ts +55 -0
  13. package/dist/xlsx/index.js +3049 -0
  14. package/dist/xlsx/index.js.map +1 -0
  15. package/docs/API.md +2959 -718
  16. package/docs/AST_format.md +2 -2
  17. package/eslint.config.mjs +40 -0
  18. package/lib/a1.spec.ts +32 -0
  19. package/lib/a1.ts +26 -0
  20. package/lib/addA1RangeBounds.ts +50 -0
  21. package/lib/addTokenMeta.spec.ts +166 -0
  22. package/lib/{addTokenMeta.js → addTokenMeta.ts} +53 -33
  23. package/lib/astTypes.ts +211 -0
  24. package/lib/cloneToken.ts +29 -0
  25. package/lib/{constants.js → constants.ts} +6 -3
  26. package/lib/fixRanges.spec.ts +220 -0
  27. package/lib/fixRanges.ts +260 -0
  28. package/lib/fromCol.spec.ts +15 -0
  29. package/lib/{fromCol.js → fromCol.ts} +1 -1
  30. package/lib/index.spec.ts +119 -0
  31. package/lib/index.ts +76 -0
  32. package/lib/isNodeType.ts +151 -0
  33. package/lib/isType.spec.ts +208 -0
  34. package/lib/{isType.js → isType.ts} +26 -25
  35. package/lib/lexers/advRangeOp.ts +18 -0
  36. package/lib/lexers/canEndRange.ts +25 -0
  37. package/lib/lexers/lexBoolean.ts +55 -0
  38. package/lib/lexers/lexContext.ts +104 -0
  39. package/lib/lexers/lexError.ts +15 -0
  40. package/lib/lexers/lexFunction.ts +37 -0
  41. package/lib/lexers/lexNameFuncCntx.ts +112 -0
  42. package/lib/lexers/lexNamed.ts +60 -0
  43. package/lib/lexers/lexNewLine.ts +12 -0
  44. package/lib/lexers/lexNumber.ts +48 -0
  45. package/lib/lexers/lexOperator.ts +26 -0
  46. package/lib/lexers/lexRange.ts +15 -0
  47. package/lib/lexers/lexRangeA1.ts +134 -0
  48. package/lib/lexers/lexRangeR1C1.ts +146 -0
  49. package/lib/lexers/lexRangeTrim.ts +26 -0
  50. package/lib/lexers/lexRefOp.ts +19 -0
  51. package/lib/lexers/lexString.ts +22 -0
  52. package/lib/lexers/lexStructured.ts +25 -0
  53. package/lib/lexers/lexWhitespace.ts +31 -0
  54. package/lib/lexers/sets.ts +51 -0
  55. package/lib/mergeRefTokens.spec.ts +141 -0
  56. package/lib/{mergeRefTokens.js → mergeRefTokens.ts} +47 -32
  57. package/lib/nodeTypes.ts +54 -0
  58. package/lib/parse.spec.ts +1410 -0
  59. package/lib/{parser.js → parse.ts} +81 -63
  60. package/lib/parseA1Range.spec.ts +233 -0
  61. package/lib/parseA1Range.ts +206 -0
  62. package/lib/parseA1Ref.spec.ts +337 -0
  63. package/lib/parseA1Ref.ts +115 -0
  64. package/lib/parseR1C1Range.ts +191 -0
  65. package/lib/parseR1C1Ref.spec.ts +323 -0
  66. package/lib/parseR1C1Ref.ts +127 -0
  67. package/lib/parseRef.spec.ts +90 -0
  68. package/lib/parseRef.ts +240 -0
  69. package/lib/parseSRange.ts +240 -0
  70. package/lib/parseStructRef.spec.ts +168 -0
  71. package/lib/parseStructRef.ts +76 -0
  72. package/lib/stringifyA1Range.spec.ts +72 -0
  73. package/lib/stringifyA1Range.ts +72 -0
  74. package/lib/stringifyA1Ref.spec.ts +64 -0
  75. package/lib/stringifyA1Ref.ts +59 -0
  76. package/lib/{stringifyPrefix.js → stringifyPrefix.ts} +17 -2
  77. package/lib/stringifyR1C1Range.spec.ts +92 -0
  78. package/lib/stringifyR1C1Range.ts +73 -0
  79. package/lib/stringifyR1C1Ref.spec.ts +63 -0
  80. package/lib/stringifyR1C1Ref.ts +67 -0
  81. package/lib/stringifyStructRef.spec.ts +124 -0
  82. package/lib/stringifyStructRef.ts +113 -0
  83. package/lib/stringifyTokens.ts +15 -0
  84. package/lib/toCol.spec.ts +11 -0
  85. package/lib/{toCol.js → toCol.ts} +4 -4
  86. package/lib/tokenTypes.ts +76 -0
  87. package/lib/tokenize-srefs.spec.ts +429 -0
  88. package/lib/tokenize.spec.ts +2103 -0
  89. package/lib/tokenize.ts +346 -0
  90. package/lib/translate.spec.ts +35 -0
  91. package/lib/translateToA1.spec.ts +247 -0
  92. package/lib/translateToA1.ts +231 -0
  93. package/lib/translateToR1C1.spec.ts +227 -0
  94. package/lib/translateToR1C1.ts +145 -0
  95. package/lib/types.ts +179 -0
  96. package/lib/xlsx/index.spec.ts +27 -0
  97. package/lib/xlsx/index.ts +32 -0
  98. package/package.json +46 -30
  99. package/tsconfig.json +28 -0
  100. package/typedoc-ignore-links.ts +17 -0
  101. package/typedoc.json +41 -0
  102. package/.eslintrc +0 -22
  103. package/dist/fx.d.ts +0 -823
  104. package/dist/fx.js +0 -2
  105. package/dist/package.json +0 -1
  106. package/lib/a1.js +0 -348
  107. package/lib/a1.spec.js +0 -458
  108. package/lib/addTokenMeta.spec.js +0 -153
  109. package/lib/astTypes.js +0 -96
  110. package/lib/extraTypes.js +0 -74
  111. package/lib/fixRanges.js +0 -104
  112. package/lib/fixRanges.spec.js +0 -170
  113. package/lib/fromCol.spec.js +0 -11
  114. package/lib/index.js +0 -134
  115. package/lib/index.spec.js +0 -67
  116. package/lib/isType.spec.js +0 -168
  117. package/lib/lexer-srefs.spec.js +0 -324
  118. package/lib/lexer.js +0 -283
  119. package/lib/lexer.spec.js +0 -1953
  120. package/lib/lexerParts.js +0 -228
  121. package/lib/mergeRefTokens.spec.js +0 -121
  122. package/lib/package.json +0 -1
  123. package/lib/parseRef.js +0 -157
  124. package/lib/parseRef.spec.js +0 -71
  125. package/lib/parseSRange.js +0 -167
  126. package/lib/parseStructRef.js +0 -48
  127. package/lib/parseStructRef.spec.js +0 -164
  128. package/lib/parser.spec.js +0 -1208
  129. package/lib/rc.js +0 -341
  130. package/lib/rc.spec.js +0 -403
  131. package/lib/stringifyStructRef.js +0 -80
  132. package/lib/stringifyStructRef.spec.js +0 -182
  133. package/lib/toCol.spec.js +0 -11
  134. package/lib/translate-toA1.spec.js +0 -214
  135. package/lib/translate-toRC.spec.js +0 -197
  136. package/lib/translate.js +0 -239
  137. package/lib/translate.spec.js +0 -21
  138. package/rollup.config.mjs +0 -22
  139. package/tsd.json +0 -12
package/dist/fx.js DELETED
@@ -1,2 +0,0 @@
1
- "use strict";const e="operator",t="operator-trim",n="bool",l="error",o="number",r="func",s="newline",u="whitespace",i="string",a="context_quote",c="context",f="range",p="range_beam",h="range_ternary",g="range_named",d="structured",m="fx_prefix",x="unknown",y="UnaryExpression",v="BinaryExpression",$="ReferenceIdentifier",w="Literal",R="ErrorLiteral",N="CallExpression",E="LambdaExpression",b="LetExpression",A="ArrayExpression",C="Identifier",k=16383,T=1048575;function L(e){const t=e||"",n=t.length;let l=0;if(n>2){const e=t.charCodeAt(n-3);l+=676*(1+e-(e>95?32:0)-65)}if(n>1){const e=t.charCodeAt(n-2);l+=26*(1+e-(e>95?32:0)-65)}if(n){const e=t.charCodeAt(n-1);l+=e-(e>95?32:0)-65}return l}const I=/^\[('['#@[\]]|[^'#@[\]])*\]/i,O=/^([^#@[\]:]+)/i,U={headers:1,data:2,totals:4,all:8,"this row":16,"@":16},F=function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return Object.freeze(t)},_={0:F(),1:F("headers"),2:F("data"),4:F("totals"),8:F("all"),16:F("this row"),3:F("headers","data"),6:F("data","totals")},S=function(e){let t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],n=I.exec(e);if(n){const e=n[0].slice(1,-1).replace(/'(['#@[\]])/g,"$1");return[n[0],e]}return t&&(n=O.exec(e),n)?[n[0],n[0]]:null};function M(e){const t=[];let n,l,o=0,r=e,s=0;if(!(n=/^(\[\s*)/.exec(r)))return null;if(l=/^\[#([a-z ]+)\]/i.exec(r)){const e=l[1].toLowerCase();if(o+=l[0].length,!U[e])return null;s|=U[e]}else if(l=S(r,!1))o+=l[0].length,l[1]&&t.push(l[1]);else{let l=!0;for(r=r.slice(n[1].length),o+=n[1].length;l&&(n=/^\[#([a-z ]+)\](\s*,\s*)?/i.exec(r));){const e=n[1].toLowerCase();if(!U[e])return null;s|=U[e],r=r.slice(n[0].length),o+=n[0].length,l=!!n[2]}if(l&&(n=/^@/.exec(r))&&(s|=U["@"],r=r.slice(1),o+=1,l="]"!==r[0]),!(s in _))return null;const u=l?S(e.slice(o)):null;if(u){if(o+=u[0].length,t.push(u[1]),r=e.slice(o),":"===r[0]){r=r.slice(1),o++;const e=S(r);if(!e)return null;o+=e[0].length,t.push(e[1])}l=!1}for(;" "===e[o];)o++;if(l||"]"!==e[o])return null;o++}const u=_[s];return{columns:t,sections:u?u.concat():u,length:o,token:e.slice(0,o)}}const D=/^(?!!)(\[(?:[^\]])+\])?([0-9A-Za-z._¡¤§¨ª\u00ad¯-\uffff]+)?(?=!)/,z=/^'(?:''|[^'])*('|$)(?=!)/,j="\\$?[A-Z]{1,3}\\$?[1-9][0-9]{0,6}",B="\\$?[A-Z]{1,3}",Z="\\$?[1-9][0-9]{0,6}",X="\\.?:\\.?",P="(?![a-z0-9_\\u00a1-\\uffff])",W=new RegExp(`^${B}${X}${B}${P}`,"i"),G=new RegExp(`^${Z}${X}${Z}${P}`,"i"),Y=new RegExp(`^${j}${P}`,"i"),H=new RegExp(`^((${B}|${Z})${X}${j}|${j}${X}(${B}|${Z}))(?![\\w($.])`,"i"),K="(?:R(?:\\[[+-]?\\d+\\]|[1-9][0-9]{0,6})?)",q="(?:C(?:\\[[+-]?\\d+\\]|[1-9][0-9]{0,4})?)",V=new RegExp(`^${q}(${X}${q})?${P}`,"i"),Q=new RegExp(`^${K}(${X}${K})?${P}`,"i"),J=new RegExp(`^(?:(?=[RC])${K}${q})${P}`,"i"),ee=new RegExp(`^(${K}${q}(${X}${q}|${X}${K})(?![[\\d])|(${K}|${q})(${X}${K}${q}))${P}`,"i"),te=/^[a-zA-Z\\_\u00a1-\uffff][a-zA-Z0-9\\_.?\u00a1-\uffff]{0,254}/i;function ne(e,t){return n=>{const l=t.exec(n);if(l)return{type:e,value:l[0]}}}function le(e){const t=te.exec(e);if(t){const e=t[0].toLowerCase();return"\\"===e[0]&&t[0].length<3||("r"===e||"c"===e)?null:{type:g,value:t[0]}}}const oe=/^'(?:[^[\]]+?)?(?:\[(.+?)\])?(?:[^[\]]+?)'$/,re=/^'\[(.+?)\]'$/;function se(e,t){const n=z.exec(e);if(n){const e=n[0];if(t.xlsx&&re.test(e)||oe.test(e))return{type:a,value:e}}const l=D.exec(e);if(l){const[,e,n]=l;if(e&&n||n||e&&!n&&t.xlsx)return{type:c,value:l[0]}}}function ue(e){const t=M(e);if(t){let n=t.length;for(;" "===e[n];)n++;if("!"!==e[n])return{type:d,value:t.token}}return null}const ie=/([RC])(\[?)(-?\d+)/gi,ae=/(\d+|[a-zA-Z]+)/gi;function ce(e,t){let n,l;if(t.r1c1){if(t.allowTernary&&(n=ee.exec(e))?l={type:h,value:n[0]}:(n=J.exec(e))?l={type:f,value:n[0]}:((n=Q.exec(e))||(n=V.exec(e)))&&(l={type:p,value:n[0]}),l){for(ie.lastIndex=0;null!==(n=ie.exec(l.value));){const e=("R"===n[1]?T:k)+(n[2]?0:1),t=parseInt(n[3],10);if(t>e||t<-e)return null}return l}}else if(t.allowTernary&&(n=H.exec(e))?l={type:h,value:n[0]}:(n=W.exec(e))||(n=G.exec(e))?l={type:p,value:n[0]}:(n=Y.exec(e))&&(l={type:f,value:n[0]}),l){for(ae.lastIndex=0;null!==(n=ae.exec(l.value));)if(/^\d/.test(n[1])){if(parseInt(n[1],10)-1>T)return null}else if(L(n[1])>k)return null;return l}}const fe=[ne(l,/^#(NAME\?|FIELD!|CALC!|VALUE!|REF!|DIV\/0!|NULL!|NUM!|N\/A|GETTING_DATA\b|SPILL!|UNKNOWN!|FIELD\b|CALC\b|SYNTAX\?|ERROR!|CONNECT!|BLOCKED!|EXTERNAL!)/i),ne(t,/^(\.:\.|\.:|:\.)/),ne(e,/^(<=|>=|<>|[-+/*^%&<>=]|[{},;]|[()]|@|:|!|#)/),ne(r,/^[A-Z_]+[A-Z\d_.]*(?=\()/i),ne(n,/^(TRUE|FALSE)\b/i),ne(s,/^\n+/),ne(u,/^[ \f\r\t\v\u00a0\u1680\u2000-\u200a\u2028\u2029\u202f\u205f\u3000\ufeff]+/),ne(i,/^"(?:""|[^"])*("|$)/),se,ce,ue,ne(o,/^(?:\d+(\.\d+)?(?:[eE][+-]?\d+)?|\d+)/),le],pe=[function(t,n){if(n.r1c1)return"!"===t[0]?{type:e,value:t[0]}:null;const l=/^(!|\.?:\.?)/.exec(t);return l?{type:e,value:l[1]}:null},se,ce,ue,le],he={};function ge(e,t){if(e.length){const n=e[0];t[n]=t[n]||{},ge(e.slice(1),t[n])}else t.$=!0}[[f,":",f],[f,".:",f],[f,":.",f],[f,".:.",f],[f],[p],[h],[c,"!",f,":",f],[c,"!",f,".:",f],[c,"!",f,":.",f],[c,"!",f,".:.",f],[c,"!",f],[c,"!",p],[c,"!",h],[a,"!",f,":",f],[a,"!",f,".:",f],[a,"!",f,":.",f],[a,"!",f,".:.",f],[a,"!",f],[a,"!",p],[a,"!",h],[g],[c,"!",g],[a,"!",g],[d],[g,d],[c,"!",g,d],[a,"!",g,d]].forEach((e=>ge(e.concat().reverse(),he)));const de=function(t,n,l){let o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:0;const r=t[l-o];if(r){const s=r.type===e?r.value:r.type;if(s in n)return de(t,n[s],l,o+1)}return n.$?o:0};function me(e){const t=[];for(let n=e.length-1;n>=0;n--){let l=e[n];const o=de(e,he,n);if(o){const t=e.slice(n-o+1,n+1);l={...l},l.value=t.map((e=>e.value)).join(""),l.loc&&t[0].loc&&(l.loc[0]=t[0].loc[0]),n-=o-1}t.unshift(l)}return t}const xe=(e,t)=>e&&e.type===t,ye={withLocation:!1,mergeRefs:!0,allowTernary:!1,negativeNumbers:!0,r1c1:!1},ve=e=>e.type===g||e.type===r,$e=t=>!xe(t,e)||"%"===t.value||"}"===t.value||")"===t.value||"#"===t.value;function we(n,l){let a=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};const c=Object.assign({},ye,a),{withLocation:p,mergeRefs:h,negativeNumbers:d}=c,y=[];let v=0,$=0,w=0;const R=[];let N=null,E=null,b=null;const A=e=>{const n=e.type===x,l=b&&b.type===x;b&&(n&&l||n&&ve(b)||l&&ve(e))?(b.value+=e.value,b.type=x,p&&(b.loc[1]=e.loc[1])):(e.type===t&&(R.push(y.length),e.type=x),y.push(e),b=e,e.type!==u&&e.type!==s&&(E=N,N=e))};if("="===n[0]){v++,A({type:m,value:"=",...p?{loc:[0,1]}:{}})}for(;v<n.length;){const t=v,s=n.slice(v);let u="",a="";for(let e=0;e<l.length;e++){const t=l[e](s,c);if(t){u=t.type,a=t.value,v+=a.length;break}}u||(u=x,a=n[v],v++);const f={type:u,value:a,...p?{loc:[t,v]}:{}};if(b&&b.type===r&&"("===a){const e=b.value.toLowerCase();"lambda"!==e&&"let"!==e||$++}if(u===x){const e=a.toLowerCase();w+="r"===e||"c"===e?1:0}if(u===i){const e=a.length;if('""'===a);else if('"'===a||'"'!==a[e-1])f.unterminated=!0;else if('""'!==a&&'"'===a[e-2]){let t=e-1;for(;'"'===a[t];)t--;!(t+1)^(e-t+1)%2==0&&(f.unterminated=!0)}}if(d&&u===o){const t=b;if(t&&xe(t,e)&&"-"===t.value&&(!E||xe(E,m)||!$e(E))){const e=y.pop();f.value="-"+a,p&&(f.loc[0]=e.loc[0]),N=E,b=y[y.length-1]}}A(f)}w&&$&&function(t){let n,l=0,o=0;for(const s of t){if(s.type===e)if("("===s.value){if(o++,n.type===r){const e=n.value.toLowerCase();"lambda"!==e&&"let"!==e||(l=o)}}else")"===s.value&&(o--,o<l&&(l=0));else l&&s.type===x&&/^[rc]$/.test(s.value)&&(s.type=g);n=s}}(y);for(const t of R){const n=y[t-1],l=y[t-1];n&&n.type===f&&l&&l.type===f?y[t].type=e:y[t].type=x}return h?me(y):y}function Re(e){return we(e,fe,arguments.length>1&&void 0!==arguments[1]?arguments[1]:{})}function Ne(e){return!!e&&(e.type===f||e.type===p||e.type===h)}function Ee(e){return!!e&&(e.type===f||e.type===p||e.type===h||e.type===d||e.type===g)}function be(e){return!!e&&(e.type===n||e.type===l||e.type===o||e.type===i)}function Ae(e){return!!e&&e.type===l}function Ce(e){return!!e&&(e.type===u||e.type===s)}function ke(e){return!!e&&e.type===r}function Te(e){return!!e&&e.type===m}function Le(t){return!!t&&t.type===e}const Ie="(END)",Oe="(FUNCTION)",Ue="(WHITESPACE)",Fe=["ANCHORARRAY","CHOOSE","DROP","IF","IFS","INDEX","INDIRECT","LAMBDA","LET","OFFSET","REDUCE","SINGLE","SWITCH","TAKE","TRIMRANGE","XLOOKUP"],_e={};let Se,Me,De,ze=!1,je=!1,Be=!1;const Ze=e=>Be||Fe.includes(e.toUpperCase()),Xe=e=>!!e&&(e.type===$||(e.type===R||e.type===l)&&"#REF!"===e.value||e.type===v&&(":"===e.operator||" "===e.operator||","===e.operator)||Ee(e)||e.type===N&&Ze(e.callee.name));function Pe(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;const n=new Error(e);throw n.source=Me.map((e=>e.value)).join(""),n.sourceOffset=Me.slice(0,t??De).reduce(((e,t)=>e+t.value.length),0),n}function We(){let e,t=arguments.length>0&&void 0!==arguments[0]&&arguments[0],n=De;do{e=Me[++n]}while(e&&(Ce(e)||Le(e)&&"("===e.value));return function(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];const n=(e&&e.value)+"";return!(!Ee(e)&&(!t||!Le(e)||":"!==n&&","!==n&&n.trim())&&(!ke(e)||!Ze(n))&&(!Ae(e)||"#REF!"!==n))}(e,t)}function Ge(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;if(e&&e!==Se.id&&Pe(`Expected ${e} but got ${Se.id}`),Ce(Me[De])){const e=Xe(t),n=e&&We(!1),l=e&&Me[De+1]&&"("===Me[De+1].value;if(!n&&!l)for(;Ce(Me[De]);)De++}if(De>=Me.length)return void(Se=_e[Ie]);const n=Me[De];let l;return De+=1,n.unterminated&&Pe("Encountered an unterminated token"),Le(n)?(l=_e[n.value],l||Pe(`Unknown operator ${n.value}`)):Ce(n)?l=_e[Ue]:be(n)?l=_e[w]:Ee(n)?l=_e[$]:ke(n)?l=_e[Oe]:Pe(`Unexpected ${n.type} token: ${n.value}`),Se=Object.create(l),Se.type=n.type,Se.value=n.value,n.loc&&(Se.loc=[...n.loc]),Se}function Ye(e){let t=Se;Ge(null,t);let n=t.nud();for(;e<Se.lbp;)t=Se,Ge(null,t),n=t.led(n);return n}const He={nud:()=>Pe("Invalid syntax"),led:()=>Pe("Missing operator")};function Ke(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,n=_e[e];return n?t>=n.lbp&&(n.lbp=t):(n={...He},n.id=e,n.value=e,n.lbp=t,_e[e]=n),n}function qe(e,t,n){const l=Ke(e,t);return l.led=n||function(e){this.type=v,this.operator=this.value,delete this.value;const n=Ye(t);return this.arguments=[e,n],this.loc&&(this.loc=[e.loc[0],n.loc[1]]),this},l}function Ve(e,t){const n=Ke(e,0);return n.lbp=70,n.led=t||function(e){return this.type=y,this.operator=this.value,delete this.value,this.arguments=[e],this.loc&&(this.loc[0]=e.loc[0]),this},n}function Qe(e,t){const n=Ke(e);return n.nud=t||function(){this.type=y,this.operator=this.value,delete this.value;const e=Ye(70);return this.arguments=[e],this.loc&&(this.loc[1]=e.loc[1]),this},n}function Je(e,t){return qe(e,t,(function(n){Xe(n)||Pe(`Unexpected ${e} operator`);const l=Ye(t);return Xe(l)||Pe(`Unexpected ${Se.type} following ${this.id}`),this.type=v,this.operator=this.value.trim()?this.value:" ",delete this.value,this.arguments=[n,l],this.loc&&(this.loc=[n.loc[0],l.loc[1]]),this}))}Ke(Ie),Je(":",80);const et=Je(",",80);Je(Ue,80);const tt=e=>{const t=et.lbp>0;return null!=e&&(et.lbp=e?80:0),t};function nt(e){const t=[],n={};let l,o=!1;const r=tt(!1);if(")"!==Se.id)for(;!o;){Ce(Se)&&Ge();const e=De,r=Ye(0);if(","===Se.id){if(r.type===$&&"name"===r.kind){const e=r.value.toLowerCase();e in n&&Pe("Duplicate name: "+r.value),n[e]=1;const l={type:C,name:r.value};r.loc&&(l.loc=r.loc),t.push(l)}else De=e,Pe("LAMBDA argument is not a name");Ge(",")}else l=r,o=!0}return tt(r),delete this.value,this.type=E,this.params=t,this.body=l||null,e.loc&&(this.loc=[e.loc[0],Se.loc[1]]),Ge(")",this),this}function lt(e){const t=[],n=[],l={};let o,r=0;const s=(e,s)=>{if(o&&Pe("Unexpected argument following calculation"),s&&r>=2)o=e;else{if(!(r%2))if(e&&e.type===$&&"name"===e.kind){const n=e.value.toLowerCase();n in l&&Pe("Duplicate name: "+e.value),l[n]=1,t.push({type:C,name:e.value,loc:e.loc})}else r>=2?o=e:Pe("Argument is not a name");else n.push(e)}r++},u=tt(!1);let i=!1;if(")"!==Se.id){for(;")"!==Se.id;)if(Ce(Se)&&Ge(),","===Se.id)s(null),i=!0,Ge();else{s(Ye(0),","!==Se.id),i=!1,","===Se.id&&(Ge(","),i=!0)}tt(u)}i&&s(null,!0),void 0===o&&Pe("Unexpected end of arguments"),tt(u),delete this.value,this.type=b,this.declarations=[],t.length||Pe("Unexpected end of arguments");for(let e=0;e<t.length;e++){const l={type:"LetDeclarator",id:t[e],init:n[e],loc:t[e].loc&&[t[e].loc[0],n[e].loc[1]]};this.declarations.push(l)}return this.body=o,e.loc&&(this.loc=[e.loc[0],Se.loc[1]]),Ge(")",this),this}function ot(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=!1,l="";const o=[],r=()=>{l&&o.push(t?l:{value:l,braced:n}),l=""};for(let t=0;t<e.length;t++){const o=e[t];"["===o?(r(),n=!0):"]"===o?(r(),n=!1):l+=o}return r(),o}function rt(e){return{context:ot(e,!0)}}function st(e){const t={},n=ot(e);if(n.length>1)t.workbookName=n[n.length-2].value,t.sheetName=n[n.length-1].value;else if(1===n.length){const e=n[0];e.braced?t.workbookName=e.value:t.sheetName=e.value}return t}Ve("%"),Ve("#",(function(e){return Xe(e)||Pe("# expects a reference"),this.type=y,this.operator=this.value,delete this.value,this.arguments=[e],this})),Qe("+"),Qe("-"),Qe("@"),qe("^",50),qe("*",40),qe("/",40),qe("+",30),qe("-",30),qe("&",20),qe("=",10),qe("<",10),qe(">",10),qe("<=",10),qe(">=",10),qe("<>",10),Ke(w).nud=function(){const{type:e,value:t}=this;if(this.type=w,this.raw=t,e===o)this.value=+t;else if(e===n)this.value="TRUE"===t.toUpperCase();else if(e===l)this.type=R,this.value=t.toUpperCase();else{if(e!==i)throw new Error("Unsupported literal type: "+e);this.value=t.slice(1,-1).replace(/""/g,'"')}return this},Ke($).nud=function(){return this.type===g?this.kind="name":this.type===d?this.kind="table":this.type===p?this.kind="beam":this.kind="range",this.type=$,this},Ke(")"),Qe("(",(function(){const e=tt(!0),t=Ye(0);return Ge(")",t),tt(e),t})),Ke(Oe).nud=function(){return this},qe("(",90,(function(e){let t={type:C,name:e.value};e.id!==Oe&&(e.type===E||e.type===N||e.type===b||e.type===$||e.type===y&&"#"===e.value||e.type===R&&"#REF!"===e.value?t=e:Pe("Unexpected call",De-1));const n=e.value.toLowerCase();if("lambda"===n)return nt.call(this,e);if("let"===n)return lt.call(this,e);const l=[];let o=!1;if(")"!==Se.id){const e=tt(!1);for(;")"!==Se.id;)if(Ce(Se)&&Ge(),","===Se.id)l.push(null),o=!0,Ge();else{const e=Ye(0);l.push(e),o=!1,","===Se.id&&(Ge(","),o=!0)}tt(e)}o&&l.push(null);const r=Se;return delete this.value,this.type=N,this.callee=t,e.loc&&(this.callee.loc=[...e.loc]),this.arguments=l,e.loc&&(this.loc=[e.loc[0],r.loc[1]]),Ge(")",this),this})),Ke("}"),Ke(";"),Qe("{",(function(){"}"===Se.id&&Pe("Unexpected empty array");let e=[],t=!1;const n=[e],l=tt(!1);for(;!t;){if(Ce(Se)&&Ge(),be(Se))e.push(_e[w].nud.call(Se)),Ge();else if(ze&&Xe(Se))e.push(_e[$].nud.call(Se)),Ge();else if(je&&ke(Se)){const t=Ye(0);e.push(t)}else Pe(`Unexpected ${Se.type} in array: ${Se.value}`);","===Se.id?Ge(","):";"===Se.id?(Ge(";"),e=[],n.push(e)):t=!0}const o=Se;return Ge("}"),tt(l),this.type=A,this.elements=n,this.loc&&(this.loc[1]=o.loc[1]),delete this.value,this}));const ut=e=>e&&(":"===e.value||".:"===e.value||":."===e.value||".:."===e.value)&&{operator:e.value},it=e=>e&&e.type===f&&{r0:e.value},at=e=>e&&e.type===h&&{r0:e.value},ct=e=>e&&e.type===f&&{r1:e.value},ft=t=>t&&t.type===e&&"!"===t.value&&{},pt=e=>e&&e.type===p&&{r0:e.value},ht=e=>e&&e.type===d&&{struct:e.value},gt=(e,t)=>{const n=t.xlsx?st:rt;return e&&e.type===c?n(e.value):e&&e.type===a?n(e.value.slice(1,-1).replace(/''/g,"'")):void 0},dt=e=>e&&e.type===g&&{name:e.value},mt=[[at],[it,ut,ct],[it],[pt],[gt,ft,at],[gt,ft,it,ut,ct],[gt,ft,it],[gt,ft,pt]],xt=mt.concat([[dt],[gt,ft,dt],[ht],[dt,ht],[gt,ft,dt,ht]]);function yt(e,t){const n={withLocation:!1,mergeRefs:!1,allowTernary:!1,allowNamed:!0,r1c1:!1,xlsx:!1,...t},l=we(e,pe,n),o=n.xlsx?{workbookName:"",sheetName:"",r0:"",r1:"",name:"",operator:""}:{context:[],r0:"",r1:"",name:"",operator:""};l.length&&l[0].type===m&&l.shift();const r=n.allowNamed?xt:mt;for(let e=0;e<r.length;e++){const t={...o};if(r[e].length===l.length){const o=r[e].every(((e,o)=>{const r=e(l[o],n);return Object.assign(t,r),r}));if(o)return t}}return null}const vt=String.fromCharCode;function $t(e){return(e>=702?vt(((e-702)/676-0)%26+65):"")+(e>=26?vt((e/26-1)%26+65):"")+vt(e%26+65)}const wt=/[^0-9A-Za-z._¡¤§¨ª\u00ad¯-\uffff]/;function Rt(e){let t="",n=0,l=0;const o=e.context||[];for(let e=o.length;e>-1;e--){const r=o[e];if(r){t=(l%2?"["+r+"]":r)+t,n+=+wt.test(r),l++}}return n&&(t="'"+t.replace(/'/g,"''")+"'"),t?t+"!":t}function Nt(e){let t="",n=0;const{workbookName:l,sheetName:o}=e;return l&&(t+="["+l+"]",n+=+wt.test(l)),o&&(t+=o,n+=+wt.test(o)),n&&(t="'"+t.replace(/'/g,"''")+"'"),t?t+"!":t}const Et=(e,t,n)=>Math.min(Math.max(t,e),n),bt=(e,t)=>(t?"$":"")+$t(e),At=(e,t)=>(t?"$":"")+String(e+1);function Ct(e){return"both"===e?".:.":"head"===e?".:":"tail"===e?":.":":"}function kt(e,t){return e&&t?"both":e?"head":t?"tail":void 0}function Tt(e){const t=/^(?=.)(\$(?=\D))?([A-Za-z]{0,3})?(\$)?([1-9][0-9]{0,6})?$/.exec(e);return t&&(t[2]||t[4])?[t[4]?(n=t[4],+n-1):null,t[2]?L(t[2]):null,!!t[3],!!t[1]]:null;var n}function Lt(e){let t=null,n=null,l=null,o=null,r=!1,s=!1,u=!1,i=!1;const[a,c,f,p,h]=e.split(/(\.?:\.?)/);if(p||h)return null;const g=kt(!!c&&"."===c[0],!!c&&"."===c[c.length-1]),d=Tt(a),m=f?Tt(f):null;if(!d||f&&!m)return null;if(null!=d[0]&&null!=d[1]?[t,n,r,s]=d:null==d[0]&&null!=d[1]?[,n,,s]=d:null!=d[0]&&null==d[1]&&([t,,r]=d),f)null!=m[0]&&null!=m[1]?[l,o,u,i]=m:null==m[0]&&null!=m[1]?[,o,,i]=m:null!=m[0]&&null==m[1]&&([l,,u]=m);else{if(null==t||null==n)return null;l=t,o=n,u=r,i=s}null!=o&&(null==n||null!=n&&o<n)&&([n,o,s,i]=[o,n,i,s]),null!=l&&(null==t||null!=t&&l<t)&&([t,l,r,u]=[l,t,u,r]);const x={top:t,left:n,bottom:l,right:o,$top:r,$left:s,$bottom:u,$right:i};return g&&(x.trim=g),x}function It(e){let{allowNamed:t=!0,allowTernary:n=!1,xlsx:l=!1}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const o=yt(e,{allowNamed:t,allowTernary:n,xlsx:l,r1c1:!1});if(o&&(o.r0||o.name)){let e=null;return o.r0&&(e=Lt(o.r1?o.r0+o.operator+o.r1:o.r0)),e?l?{workbookName:o.workbookName,sheetName:o.sheetName,range:e}:{context:o.context,range:e}:o.name?l?{workbookName:o.workbookName,sheetName:o.sheetName,name:o.name}:{context:o.context,name:o.name}:null}return null}function Ot(e){let{xlsx:t=!1}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return(t?Nt(e):Rt(e))+(e.name?e.name:function(e){let{top:t,left:n,bottom:l,right:o,trim:r}=e;const{$left:s,$right:u,$top:i,$bottom:a}=e,c=null==n,f=null==o,p=null==t,h=null==l;t=Et(0,0|t,T),n=Et(0,0|n,k),!c&&!p&&f&&h?(l=t,o=n):(l=Et(0,0|l,T),o=Et(0,0|o,k));const g=Ct(r);return 0===t&&l>=T&&!c&&!f&&(!(s&&!c||u&&!f)||n===o)||p&&h?bt(n,s)+g+bt(o,u):0===n&&o>=k&&!p&&!h&&(!(i&&!p||a&&!h)||t===l)||c&&f?At(t,i)+g+At(l,a):c||p||f||!h?c||!p||f||h?c||p||!f||h?!c||p||f||h?o!==n||l!==t||u!==s||a!==i?bt(n,s)+At(t,i)+g+bt(o,u)+At(l,a):bt(n,s)+At(t,i):bt(o,u)+At(t,i)+g+At(l,a):bt(n,s)+At(t,i)+g+At(l,a):bt(n,s)+At(l,a)+g+bt(o,u):bt(n,s)+At(t,i)+g+bt(o,u)}(e.range))}function Ut(e){return null==e.top&&(e.top=0,e.$top=!1),null==e.bottom&&(e.bottom=T,e.$bottom=!1),null==e.left&&(e.left=0,e.$left=!1),null==e.right&&(e.right=k,e.$right=!1),e}function Ft(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{xlsx:!1};const n=yt(e,t);if(n&&n.struct){const e=M(n.struct);if(e&&e.length===n.struct.length)return t.xlsx?{workbookName:n.workbookName,sheetName:n.sheetName,table:n.name,columns:e.columns,sections:e.sections}:{context:n.context,table:n.name,columns:e.columns,sections:e.sections}}return null}function _t(e,t){return null==e&&null==t||e===t}function St(e,t){if(Array.isArray(e)!==Array.isArray(t)||e.length!==t.length)return!1;for(let n=0;n<e.length;n++)if(!_t(e[n],t[n]))return!1;return!0}function Mt(e,t){return!e&&!t||String(e).toLowerCase()===String(t).toLowerCase()}const Dt=(e,t,n)=>Math.min(Math.max(t,e),n);function zt(e,t){return t?String(e+1):e?"["+e+"]":""}function jt(e){let t=null,n=null,l=null,o=null;const r=/^R(?:\[([+-]?\d+)\]|(\d+))?/.exec(e);r&&(r[1]?(t=parseInt(r[1],10),l=!1):r[2]?(t=parseInt(r[2],10)-1,l=!0):(t=0,l=!1),e=e.slice(r[0].length));const s=/^C(?:\[([+-]?\d+)\]|(\d+))?/.exec(e);return s&&(s[1]?(n=parseInt(s[1],10),o=!1):s[2]?(n=parseInt(s[2],10)-1,o=!0):(n=0,o=!1),e=e.slice(s[0].length)),!r&&!s||e.length?null:[t,n,l,o]}function Bt(e){let t=null;const[n,l,o,r]=e.split(/(\.?:\.?)/);if(r)return null;const s=jt(n),u=kt(!!l&&"."===l[0],!!l&&"."===l[l.length-1]);if(s){const[e,n,l,r]=s;if(o){const s=jt(o);if(!s)return null;{t={};const[o,u,i,a]=s;null!=e&&null!=o?(t.r0=l===i?Math.min(e,o):e,t.$r0=l,t.r1=l===i?Math.max(e,o):o,t.$r1=i):null!=e&&null==o?(t.r0=e,t.$r0=l,t.r1=null,t.$r1=l):null==e&&null!=o?(t.r0=o,t.$r0=i,t.r1=null,t.$r1=i):null==e&&null==o&&(t.r0=null,t.$r0=!1,t.r1=null,t.$r1=!1),null!=n&&null!=u?(t.c0=r===a?Math.min(n,u):n,t.$c0=r,t.c1=r===a?Math.max(n,u):u,t.$c1=a):null!=n&&null==u?(t.c0=n,t.$c0=r,t.c1=null,t.$c1=r):null==n&&null!=u?(t.c0=u,t.$c0=a,t.c1=null,t.$c1=a):null==n&&null==u&&(t.c0=null,t.$c0=!1,t.c1=null,t.$c1=!1)}}else t=null!=e&&null==n?{r0:e,c0:null,r1:e,c1:null,$r0:l,$c0:!1,$r1:l,$c1:!1}:null==e&&null!=n?{r0:null,c0:n,r1:null,c1:n,$r0:!1,$c0:r,$r1:!1,$c1:r}:{r0:e||0,c0:n||0,r1:e||0,c1:n||0,$r0:l||!1,$c0:r||!1,$r1:l||!1,$c1:r||!1}}return t&&u&&(t.trim=u),t}function Zt(e){let{allowNamed:t=!0,allowTernary:n=!1,xlsx:l=!1}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const o=yt(e,{allowNamed:t,allowTernary:n,xlsx:l,r1c1:!0});if(o&&(o.r0||o.name)){const e=o.r1?Bt(o.r0+o.operator+o.r1):Bt(o.r0);return e?l?{workbookName:o.workbookName,sheetName:o.sheetName,range:e}:{context:o.context,range:e}:o.name?l?{workbookName:o.workbookName,sheetName:o.sheetName,name:o.name}:{context:o.context,name:o.name}:null}return null}function Xt(e){let{xlsx:t=!1}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return(t?Nt(e):Rt(e))+(e.name?e.name:function(e){let{r0:t,c0:n,r1:l,c1:o}=e;const{$c0:r,$c1:s,$r0:u,$r1:i}=e,a=null==t,c=null==n;let f=null==l,p=null==o;const h=Ct(e.trim),g=!!e.trim;if(t=Dt(u?0:-1048575,0|t,T),n=Dt(r?0:-16383,0|n,k),!a&&f&&!c&&p?(l=t,f=!1,o=n,p=!1):(l=Dt(i?0:-1048575,0|l,T),o=Dt(s?0:-16383,0|o,k)),0===t&&l>=T&&!c&&!p||a&&f){const e=zt(n,r),t=zt(o,s);return"C"+(e!==t||g?e+h+"C"+t:e)}if(0===n&&o>=k&&!a&&!f||c&&p){const e=zt(t,u),n=zt(l,i);return"R"+(e!==n||g?e+h+"R"+n:e)}const d=zt(t,u),m=zt(l,i),x=zt(n,r),y=zt(o,s);return a||f||c||p?(a?"":"R"+d)+(c?"":"C"+x)+h+(f?"":"R"+m)+(p?"":"C"+y):d!==m||x!==y?"R"+d+"C"+x+h+"R"+m+"C"+y:"R"+d+"C"+x}(e.range))}const Pt=(e,t,n)=>null==t?null:e?t:t-n,Wt={withLocation:!1,mergeRefs:!1,allowTernary:!0,r1c1:!1};function Gt(e,t,n,l){let o=!(arguments.length>4&&void 0!==arguments[4])||arguments[4],r=e;if(null!=r&&!t){if(r=n+e,r<0){if(!o)return NaN;r=l+r+1}if(r>l){if(!o)return NaN;r-=l+1}}return r}const Yt={wrapEdges:!0,mergeRefs:!0,allowTernary:!0,xlsx:!1};function Ht(e){return e.replace(/([[\]#'@])/g,"'$1")}function Kt(e){return e[0].toUpperCase()+e.slice(1).toLowerCase()}function qt(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const{xlsx:n,thisRow:l}=t;let o=n?Nt(e):Rt(e);e.table&&(o+=e.table);const r=e.columns?.length??0,s=e.sections?.length??0;if(1!==s||r)if(s||1!==r){o+="[";const t=!l&&1===s&&"this row"===e.sections[0].toLowerCase();t?o+="@":s&&(o+=e.sections.map((e=>`[#${Kt(e)}]`)).join(","),r&&(o+=",")),t&&1===e.columns.length&&(u=e.columns[0],/^[a-zA-Z0-9\u00a1-\uffff]+$/.test(u))?o+=Ht(e.columns[0]):r&&(o+=e.columns.slice(0,2).map((e=>`[${Ht(e)}]`)).join(":")),o+="]"}else o+=`[${Ht(e.columns[0])}]`;else o+=`[#${Kt(e.sections[0])}]`;var u;return o}const Vt=Object.freeze({OPERATOR:e,BOOLEAN:n,ERROR:l,NUMBER:o,FUNCTION:r,NEWLINE:s,WHITESPACE:u,STRING:i,CONTEXT:c,CONTEXT_QUOTE:a,REF_RANGE:f,REF_BEAM:p,REF_TERNARY:h,REF_NAMED:g,REF_STRUCT:d,FX_PREFIX:m,UNKNOWN:x}),Qt=Object.freeze({UNARY:y,BINARY:v,REFERENCE:$,LITERAL:w,ERROR:R,CALL:N,ARRAY:A,IDENTIFIER:C});exports.MAX_COLS=k,exports.MAX_ROWS=T,exports.addA1RangeBounds=Ut,exports.addTokenMeta=function(e){let{sheetName:t="",workbookName:n=""}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const l=[];let o=null;const r=function(){let e=1;return()=>"fxg"+e++}(),s=[],u=()=>l.length+(o?1:0);return e.forEach(((e,i)=>{if(e.index=i,e.depth=u(),"("===e.value)l.push(e),e.depth=u();else if(")"===e.value){const t=l.pop();if(t){const n=r();e.groupId=n,e.depth=t.depth,t.groupId=n}else e.error=!0}else if("{"===e.value)o?e.error=!0:(o=e,e.depth=u());else if("}"===e.value){if(o){const t=r();e.groupId=t,e.depth=o.depth,o.groupId=t}else e.error=!0;o=null}else if(e.type===f||e.type===p||e.type===h||e.type===d){const l=e.type===d?Ft(e.value,{xlsx:!0}):It(e.value,{allowTernary:!0,xlsx:!0});if(l&&(l.range||l.columns)){l.source=e.value,function(e,t,n){e.sheetName||(e.sheetName=t),e.workbookName||(e.workbookName=n)}(l,t,n);const o=s.find((e=>function(e,t){if((e.name||t.name)&&e.name!==t.name)return!1;if(e.columns||t.columns){if(e.table!==t.table)return!1;if(!St(e.columns,t.columns))return!1;if(!St(e.sections,t.sections))return!1}return!!(!e.range&&!t.range||_t(e.range.top,t.range.top)&&_t(e.range.bottom,t.range.bottom)&&_t(e.range.left,t.range.left)&&_t(e.range.right,t.range.right))&&!(!Mt(e.workbookName,t.workbookName)||!Mt(e.sheetName,t.sheetName))}(e,l)));o?e.groupId=o.groupId:(l.groupId=r(),e.groupId=l.groupId,s.push(l))}}else e.type===x&&(e.error=!0)})),e},exports.fixRanges=function e(t){let n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{addBounds:!1};if("string"==typeof t)return e(Re(t,n),n).map((e=>e.value)).join("");if(!Array.isArray(t))throw new Error("fixRanges expects an array of tokens");const{addBounds:l,r1c1:o,xlsx:r,thisRow:s}=n;if(o)throw new Error("fixRanges does not have an R1C1 mode");let u=0;return t.map((e=>{const t={...e};e.loc&&(t.loc=[...e.loc]);let n=0;if(t.type===d){const e=qt(Ft(t.value,{xlsx:r}),{xlsx:r,thisRow:s});n=e.length-t.value.length,t.value=e}else if(Ne(t)){const e=It(t.value,{xlsx:r,allowTernary:!0}),o=e.range;l&&Ut(o);const s=Ot(e,{xlsx:r});n=s.length-t.value.length,t.value=s}return u||n?(t.loc&&(t.loc[0]+=u),u+=n,t.loc&&(t.loc[1]+=u)):u+=n,t}))},exports.fromCol=L,exports.isError=Ae,exports.isFunction=ke,exports.isFxPrefix=Te,exports.isLiteral=be,exports.isOperator=Le,exports.isRange=Ne,exports.isReference=Ee,exports.isWhitespace=Ce,exports.mergeRefTokens=me,exports.nodeTypes=Qt,exports.parse=function(e,t){if("string"==typeof e)Me=Re(e,{withLocation:!1,...t,mergeRefs:!0});else{if(!Array.isArray(e))throw new Error("Parse requires a string or array of tokens.");Me=e}for(ze=t?.permitArrayRanges,je=t?.permitArrayCalls,Be=t?.looseRefCalls,De=0;Ce(Me[De])||Te(Me[De]);)De++;Ge(),tt(!0);const n=Ye(0);return Ge(Ie),n},exports.parseA1Ref=It,exports.parseR1C1Ref=Zt,exports.parseStructRef=Ft,exports.stringifyA1Ref=Ot,exports.stringifyR1C1Ref=Xt,exports.stringifyStructRef=qt,exports.toCol=$t,exports.tokenTypes=Vt,exports.tokenize=Re,exports.translateToA1=function(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:Yt;const o=Lt(t),r="string"==typeof e,s={...Yt,...n},u=r?Re(e,{withLocation:!1,mergeRefs:s.mergeRefs,xlsx:s.xlsx,allowTernary:s.allowTernary,r1c1:!0}):e;let i=0;const a={xlsx:s.xlsx,allowTernary:s.allowTernary};return u.forEach((e=>{if(Ne(e)){const t=e.value,n=Zt(t,a),r=n.range,u={},c=Gt(r.r0,r.$r0,o.top,T,s.wrapEdges),f=Gt(r.r1,r.$r1,o.top,T,s.wrapEdges);c>f?(u.top=f,u.$top=r.$r1,u.bottom=c,u.$bottom=r.$r0):(u.top=c,u.$top=r.$r0,u.bottom=f,u.$bottom=r.$r1);const p=Gt(r.c0,r.$c0,o.left,k,s.wrapEdges),h=Gt(r.c1,r.$c1,o.left,k,s.wrapEdges);p>h?(u.left=h,u.$left=r.$c1,u.right=p,u.$right=r.$c0):(u.left=p,u.$left=r.$c0,u.right=h,u.$right=r.$c1),r.trim&&(u.trim=r.trim),isNaN(c)||isNaN(f)||isNaN(p)||isNaN(h)?(e.type=l,e.value="#REF!",delete e.groupId):(n.range=u,e.value=Ot(n,a)),e.loc&&(e.loc[0]+=i,i+=e.value.length-t.length,e.loc[1]+=i)}else i&&e.loc&&(e.loc[0]+=i,e.loc[1]+=i)})),r?u.map((e=>e.value)).join(""):u},exports.translateToR1C1=function(e,t){let{xlsx:n=!1,allowTernary:l=!0}=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};const{top:o,left:r}=Lt(t),s="string"==typeof e,u=s?Re(e,{...Wt,xlsx:n,allowTernary:l}):e;let i=0;const a={xlsx:n,allowTernary:l};return u.forEach((e=>{if(Ne(e)){const t=e.value,n=It(t,a),l=n.range,s={};s.r0=Pt(l.$top,l.top,o),s.r1=Pt(l.$bottom,l.bottom,o),s.c0=Pt(l.$left,l.left,r),s.c1=Pt(l.$right,l.right,r),s.$r0=l.$top,s.$r1=l.$bottom,s.$c0=l.$left,s.$c1=l.$right,l.trim&&(s.trim=l.trim),n.range=s,e.value=Xt(n,a),e.loc&&(e.loc[0]+=i,i+=e.value.length-t.length,e.loc[1]+=i)}else i&&e.loc&&(e.loc[0]+=i,e.loc[1]+=i)})),s?u.map((e=>e.value)).join(""):u};
2
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnguanMiLCJzb3VyY2VzIjpbIi4uL2xpYi9jb25zdGFudHMuanMiLCIuLi9saWIvZnJvbUNvbC5qcyIsIi4uL2xpYi9wYXJzZVNSYW5nZS5qcyIsIi4uL2xpYi9sZXhlclBhcnRzLmpzIiwiLi4vbGliL21lcmdlUmVmVG9rZW5zLmpzIiwiLi4vbGliL2xleGVyLmpzIiwiLi4vbGliL2lzVHlwZS5qcyIsIi4uL2xpYi9wYXJzZXIuanMiLCIuLi9saWIvcGFyc2VSZWYuanMiLCIuLi9saWIvdG9Db2wuanMiLCIuLi9saWIvc3RyaW5naWZ5UHJlZml4LmpzIiwiLi4vbGliL2ExLmpzIiwiLi4vbGliL3BhcnNlU3RydWN0UmVmLmpzIiwiLi4vbGliL2FkZFRva2VuTWV0YS5qcyIsIi4uL2xpYi9yYy5qcyIsIi4uL2xpYi90cmFuc2xhdGUuanMiLCIuLi9saWIvc3RyaW5naWZ5U3RydWN0UmVmLmpzIiwiLi4vbGliL2luZGV4LmpzIiwiLi4vbGliL2ZpeFJhbmdlcy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY29uc3QgT1BFUkFUT1IgPSAnb3BlcmF0b3InO1xuZXhwb3J0IGNvbnN0IE9QRVJBVE9SX1RSSU0gPSAnb3BlcmF0b3ItdHJpbSc7XG5leHBvcnQgY29uc3QgQk9PTEVBTiA9ICdib29sJztcbmV4cG9ydCBjb25zdCBFUlJPUiA9ICdlcnJvcic7XG5leHBvcnQgY29uc3QgTlVNQkVSID0gJ251bWJlcic7XG5leHBvcnQgY29uc3QgRlVOQ1RJT04gPSAnZnVuYyc7XG5leHBvcnQgY29uc3QgTkVXTElORSA9ICduZXdsaW5lJztcbmV4cG9ydCBjb25zdCBXSElURVNQQUNFID0gJ3doaXRlc3BhY2UnO1xuZXhwb3J0IGNvbnN0IFNUUklORyA9ICdzdHJpbmcnO1xuZXhwb3J0IGNvbnN0IENPTlRFWFRfUVVPVEUgPSAnY29udGV4dF9xdW90ZSc7XG5leHBvcnQgY29uc3QgQ09OVEVYVCA9ICdjb250ZXh0JztcbmV4cG9ydCBjb25zdCBSRUZfUkFOR0UgPSAncmFuZ2UnO1xuZXhwb3J0IGNvbnN0IFJFRl9CRUFNID0gJ3JhbmdlX2JlYW0nO1xuZXhwb3J0IGNvbnN0IFJFRl9URVJOQVJZID0gJ3JhbmdlX3Rlcm5hcnknO1xuZXhwb3J0IGNvbnN0IFJFRl9OQU1FRCA9ICdyYW5nZV9uYW1lZCc7XG5leHBvcnQgY29uc3QgUkVGX1NUUlVDVCA9ICdzdHJ1Y3R1cmVkJztcbmV4cG9ydCBjb25zdCBGWF9QUkVGSVggPSAnZnhfcHJlZml4JztcbmV4cG9ydCBjb25zdCBVTktOT1dOID0gJ3Vua25vd24nO1xuXG5leHBvcnQgY29uc3QgVU5BUlkgPSAnVW5hcnlFeHByZXNzaW9uJztcbmV4cG9ydCBjb25zdCBCSU5BUlkgPSAnQmluYXJ5RXhwcmVzc2lvbic7XG5leHBvcnQgY29uc3QgUkVGRVJFTkNFID0gJ1JlZmVyZW5jZUlkZW50aWZpZXInO1xuZXhwb3J0IGNvbnN0IExJVEVSQUwgPSAnTGl0ZXJhbCc7XG5leHBvcnQgY29uc3QgRVJST1JfTElURVJBTCA9ICdFcnJvckxpdGVyYWwnO1xuZXhwb3J0IGNvbnN0IENBTEwgPSAnQ2FsbEV4cHJlc3Npb24nO1xuZXhwb3J0IGNvbnN0IExBTUJEQSA9ICdMYW1iZGFFeHByZXNzaW9uJztcbmV4cG9ydCBjb25zdCBMRVQgPSAnTGV0RXhwcmVzc2lvbic7XG5leHBvcnQgY29uc3QgQVJSQVkgPSAnQXJyYXlFeHByZXNzaW9uJztcbmV4cG9ydCBjb25zdCBJREVOVElGSUVSID0gJ0lkZW50aWZpZXInO1xuZXhwb3J0IGNvbnN0IExFVF9ERUNMID0gJ0xldERlY2xhcmF0b3InO1xuXG5leHBvcnQgY29uc3QgTUFYX0NPTFMgPSAoMiAqKiAxNCkgLSAxOyAvLyAxNjM4M1xuZXhwb3J0IGNvbnN0IE1BWF9ST1dTID0gKDIgKiogMjApIC0gMTsgLy8gMTA0ODU3NVxuIiwiLyoqXG4gKiBDb252ZXJ0IGEgY29sdW1uIHN0cmluZyByZXByZXNlbnRhdGlvbiB0byBhIDAgYmFzZWRcbiAqIG9mZnNldCBudW1iZXIgKGBcIkNcImAgPSBgMmApLlxuICpcbiAqIFRoZSBtZXRob2QgZXhwZWN0cyBhIHZhbGlkIGNvbHVtbiBpZGVudGlmaWVyIG1hZGUgdXAgb2YgX29ubHlfXG4gKiBBLVogbGV0dGVycywgd2hpY2ggbWF5IGJlIGVpdGhlciB1cHBlciBvciBsb3dlciBjYXNlLiBPdGhlciBpbnB1dCB3aWxsXG4gKiByZXR1cm4gZ2FyYmFnZS5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gY29sdW1uU3RyaW5nICBUaGUgY29sdW1uIHN0cmluZyBpZGVudGlmaWVyXG4gKiBAcmV0dXJucyB7bnVtYmVyfSAgWmVybyBiYXNlZCBjb2x1bW4gaW5kZXggbnVtYmVyXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmcm9tQ29sIChjb2x1bW5TdHJpbmcpIHtcbiAgY29uc3QgeCA9IChjb2x1bW5TdHJpbmcgfHwgJycpO1xuICBjb25zdCBsID0geC5sZW5ndGg7XG4gIGxldCBuID0gMDtcbiAgaWYgKGwgPiAyKSB7XG4gICAgY29uc3QgYyA9IHguY2hhckNvZGVBdChsIC0gMyk7XG4gICAgY29uc3QgYSA9IGMgPiA5NSA/IDMyIDogMDtcbiAgICBuICs9ICgxICsgYyAtIGEgLSA2NSkgKiA2NzY7XG4gIH1cbiAgaWYgKGwgPiAxKSB7XG4gICAgY29uc3QgYyA9IHguY2hhckNvZGVBdChsIC0gMik7XG4gICAgY29uc3QgYSA9IGMgPiA5NSA/IDMyIDogMDtcbiAgICBuICs9ICgxICsgYyAtIGEgLSA2NSkgKiAyNjtcbiAgfVxuICBpZiAobCkge1xuICAgIGNvbnN0IGMgPSB4LmNoYXJDb2RlQXQobCAtIDEpO1xuICAgIGNvbnN0IGEgPSBjID4gOTUgPyAzMiA6IDA7XG4gICAgbiArPSAoYyAtIGEpIC0gNjU7XG4gIH1cbiAgcmV0dXJuIG47XG59XG4iLCJjb25zdCByZV9TUmNvbHVtbkIgPSAvXlxcWygnWycjQFtcXF1dfFteJyNAW1xcXV0pKlxcXS9pO1xuY29uc3QgcmVfU1Jjb2x1bW5OID0gL14oW14jQFtcXF06XSspL2k7XG5cbmNvbnN0IGtleVRlcm1zID0ge1xuICAnaGVhZGVycyc6IDEsXG4gICdkYXRhJzogMixcbiAgJ3RvdGFscyc6IDQsXG4gICdhbGwnOiA4LFxuICAndGhpcyByb3cnOiAxNixcbiAgJ0AnOiAxNlxufTtcblxuY29uc3QgZnogPSAoLi4uYSkgPT4gT2JqZWN0LmZyZWV6ZShhKTtcblxuLy8gb25seSBjb21iaW5hdGlvbnMgYWxsb3dlZCBhcmU6ICNkYXRhICsgKCNoZWFkZXJzIHwgI3RvdGFscyB8ICNkYXRhKVxuY29uc3Qgc2VjdGlvbk1hcCA9IHtcbiAgLy8gbm8gdGVybXNcbiAgMDogZnooKSxcbiAgLy8gc2luZ2xlIHRlcm1cbiAgMTogZnooJ2hlYWRlcnMnKSxcbiAgMjogZnooJ2RhdGEnKSxcbiAgNDogZnooJ3RvdGFscycpLFxuICA4OiBmeignYWxsJyksXG4gIDE2OiBmeigndGhpcyByb3cnKSxcbiAgLy8gaGVhZGVycytkYXRhXG4gIDM6IGZ6KCdoZWFkZXJzJywgJ2RhdGEnKSxcbiAgLy8gdG90YWxzK2RhdGFcbiAgNjogZnooJ2RhdGEnLCAndG90YWxzJylcbn07XG5cbmNvbnN0IG1hdGNoQ29sdW1uID0gKHMsIGFsbG93VW5icmFjZWQgPSB0cnVlKSA9PiB7XG4gIGxldCBtID0gcmVfU1Jjb2x1bW5CLmV4ZWMocyk7XG4gIGlmIChtKSB7XG4gICAgY29uc3QgdmFsdWUgPSBtWzBdLnNsaWNlKDEsIC0xKS5yZXBsYWNlKC8nKFsnI0BbXFxdXSkvZywgJyQxJyk7XG4gICAgcmV0dXJuIFsgbVswXSwgdmFsdWUgXTtcbiAgfVxuICBpZiAoYWxsb3dVbmJyYWNlZCkge1xuICAgIG0gPSByZV9TUmNvbHVtbk4uZXhlYyhzKTtcbiAgICBpZiAobSkge1xuICAgICAgcmV0dXJuIFsgbVswXSwgbVswXSBdO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbnVsbDtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVNSYW5nZSAocmF3KSB7XG4gIGNvbnN0IGNvbHVtbnMgPSBbXTtcbiAgbGV0IHBvcyA9IDA7XG4gIGxldCBzID0gcmF3O1xuICBsZXQgbTtcbiAgbGV0IG0xO1xuICBsZXQgdGVybXMgPSAwO1xuXG4gIC8vIHN0YXJ0IG9mIHN0cnVjdHVyZWQgcmVmP1xuICBpZiAoKG0gPSAvXihcXFtcXHMqKS8uZXhlYyhzKSkpIHtcbiAgICAvLyBxdWlja2x5IGRldGVybWluZSBpZiB0aGlzIGlzIGEgc2ltcGxlIGtleXdvcmQgb3IgY29sdW1uXG4gICAgLy8gWyNrZXl3b3JkXVxuICAgIGlmICgobTEgPSAvXlxcWyMoW2EteiBdKylcXF0vaS5leGVjKHMpKSkge1xuICAgICAgY29uc3QgayA9IG0xWzFdLnRvTG93ZXJDYXNlKCk7XG4gICAgICBwb3MgKz0gbTFbMF0ubGVuZ3RoO1xuICAgICAgaWYgKGtleVRlcm1zW2tdKSB7XG4gICAgICAgIHRlcm1zIHw9IGtleVRlcm1zW2tdO1xuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgIH1cbiAgICAvLyBbY29sdW1uXVxuICAgIGVsc2UgaWYgKChtMSA9IG1hdGNoQ29sdW1uKHMsIGZhbHNlKSkpIHtcbiAgICAgIHBvcyArPSBtMVswXS5sZW5ndGg7XG4gICAgICBpZiAobTFbMV0pIHtcbiAgICAgICAgY29sdW1ucy5wdXNoKG0xWzFdKTtcbiAgICAgIH1cbiAgICB9XG4gICAgLy8gdXNlIHRoZSBcIm5vcm1hbFwiIG1ldGhvZFxuICAgIC8vIFtbI2tleXdvcmRdXVxuICAgIC8vIFtbY29sdW1uXV1cbiAgICAvLyBbQF1cbiAgICAvLyBbQGNvbHVtbl1cbiAgICAvLyBbQFtjb2x1bW5dXVxuICAgIC8vIFtAY29sdW1uOmNvbHVtbl1cbiAgICAvLyBbQGNvbHVtbjpbY29sdW1uXV1cbiAgICAvLyBbQFtjb2x1bW5dOmNvbHVtbl1cbiAgICAvLyBbQFtjb2x1bW5dOltjb2x1bW5dXVxuICAgIC8vIFtjb2x1bW46Y29sdW1uXVxuICAgIC8vIFtjb2x1bW46W2NvbHVtbl1dXG4gICAgLy8gW1tjb2x1bW5dOmNvbHVtbl1cbiAgICAvLyBbW2NvbHVtbl06W2NvbHVtbl1dXG4gICAgLy8gW1sja2V5d29yZF0sY29sdW1uXVxuICAgIC8vIFtbI2tleXdvcmRdLGNvbHVtbjpjb2x1bW5dXG4gICAgLy8gW1sja2V5d29yZF0sWyNrZXl3b3JkXSxjb2x1bW46Y29sdW1uXVxuICAgIC8vIC4uLlxuICAgIGVsc2Uge1xuICAgICAgbGV0IGV4cGVjdF9tb3JlID0gdHJ1ZTtcbiAgICAgIHMgPSBzLnNsaWNlKG1bMV0ubGVuZ3RoKTtcbiAgICAgIHBvcyArPSBtWzFdLmxlbmd0aDtcbiAgICAgIC8vIG1hdGNoIGtleXdvcmRzIGFzIHdlIGZpbmQgdGhlbVxuICAgICAgd2hpbGUgKFxuICAgICAgICBleHBlY3RfbW9yZSAmJlxuICAgICAgICAobSA9IC9eXFxbIyhbYS16IF0rKVxcXShcXHMqLFxccyopPy9pLmV4ZWMocykpXG4gICAgICApIHtcbiAgICAgICAgY29uc3QgayA9IG1bMV0udG9Mb3dlckNhc2UoKTtcbiAgICAgICAgaWYgKGtleVRlcm1zW2tdKSB7XG4gICAgICAgICAgdGVybXMgfD0ga2V5VGVybXNba107XG4gICAgICAgICAgcyA9IHMuc2xpY2UobVswXS5sZW5ndGgpO1xuICAgICAgICAgIHBvcyArPSBtWzBdLmxlbmd0aDtcbiAgICAgICAgICBleHBlY3RfbW9yZSA9ICEhbVsyXTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgLy8gaXMgdGhlcmUgYW4gQCBzcGVjaWZpZXI/XG4gICAgICBpZiAoZXhwZWN0X21vcmUgJiYgKG0gPSAvXkAvLmV4ZWMocykpKSB7XG4gICAgICAgIHRlcm1zIHw9IGtleVRlcm1zWydAJ107XG4gICAgICAgIHMgPSBzLnNsaWNlKDEpO1xuICAgICAgICBwb3MgKz0gMTtcbiAgICAgICAgZXhwZWN0X21vcmUgPSBzWzBdICE9PSAnXSc7XG4gICAgICB9XG4gICAgICAvLyBub3QgYWxsIGtleXdvcmQgdGVybXMgbWF5IGJlIGNvbWJpbmVkXG4gICAgICBpZiAoISh0ZXJtcyBpbiBzZWN0aW9uTWFwKSkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIC8vIGNvbHVtbiBkZWZpbml0aW9uc1xuICAgICAgY29uc3QgbGVmdENvbCA9IGV4cGVjdF9tb3JlID8gbWF0Y2hDb2x1bW4ocmF3LnNsaWNlKHBvcykpIDogbnVsbDtcbiAgICAgIGlmIChsZWZ0Q29sKSB7XG4gICAgICAgIHBvcyArPSBsZWZ0Q29sWzBdLmxlbmd0aDtcbiAgICAgICAgY29sdW1ucy5wdXNoKGxlZnRDb2xbMV0pO1xuICAgICAgICBzID0gcmF3LnNsaWNlKHBvcyk7XG4gICAgICAgIGlmIChzWzBdID09PSAnOicpIHtcbiAgICAgICAgICBzID0gcy5zbGljZSgxKTtcbiAgICAgICAgICBwb3MrKztcbiAgICAgICAgICBjb25zdCByaWdodENvbCA9IG1hdGNoQ29sdW1uKHMpO1xuICAgICAgICAgIGlmIChyaWdodENvbCkge1xuICAgICAgICAgICAgcG9zICs9IHJpZ2h0Q29sWzBdLmxlbmd0aDtcbiAgICAgICAgICAgIGNvbHVtbnMucHVzaChyaWdodENvbFsxXSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGV4cGVjdF9tb3JlID0gZmFsc2U7XG4gICAgICB9XG4gICAgICAvLyBhZHZhbmNlIHdzXG4gICAgICB3aGlsZSAocmF3W3Bvc10gPT09ICcgJykge1xuICAgICAgICBwb3MrKztcbiAgICAgIH1cbiAgICAgIC8vIGNsb3NlIHRoZSByZWZcbiAgICAgIGlmIChleHBlY3RfbW9yZSB8fCByYXdbcG9zXSAhPT0gJ10nKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgLy8gc3RlcCBvdmVyIHRoZSBjbG9zaW5nIF1cbiAgICAgIHBvcysrO1xuICAgIH1cbiAgfVxuICBlbHNlIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGNvbnN0IHNlY3Rpb25zID0gc2VjdGlvbk1hcFt0ZXJtc107XG4gIHJldHVybiB7XG4gICAgY29sdW1ucyxcbiAgICBzZWN0aW9uczogc2VjdGlvbnMgPyBzZWN0aW9ucy5jb25jYXQoKSA6IHNlY3Rpb25zLFxuICAgIGxlbmd0aDogcG9zLFxuICAgIHRva2VuOiByYXcuc2xpY2UoMCwgcG9zKVxuICB9O1xufVxuIiwiaW1wb3J0IHtcbiAgT1BFUkFUT1IsXG4gIEJPT0xFQU4sXG4gIEVSUk9SLFxuICBOVU1CRVIsXG4gIEZVTkNUSU9OLFxuICBORVdMSU5FLFxuICBXSElURVNQQUNFLFxuICBTVFJJTkcsXG4gIENPTlRFWFQsXG4gIENPTlRFWFRfUVVPVEUsXG4gIFJFRl9SQU5HRSxcbiAgUkVGX0JFQU0sXG4gIFJFRl9OQU1FRCxcbiAgUkVGX1RFUk5BUlksXG4gIFJFRl9TVFJVQ1QsXG4gIE1BWF9DT0xTLFxuICBNQVhfUk9XUyxcbiAgT1BFUkFUT1JfVFJJTVxufSBmcm9tICcuL2NvbnN0YW50cy5qcyc7XG5pbXBvcnQgeyBmcm9tQ29sIH0gZnJvbSAnLi9mcm9tQ29sLmpzJztcbmltcG9ydCB7IHBhcnNlU1JhbmdlIH0gZnJvbSAnLi9wYXJzZVNSYW5nZS5qcyc7XG5cbmNvbnN0IHJlX0VSUk9SID0gL14jKE5BTUVcXD98RklFTEQhfENBTEMhfFZBTFVFIXxSRUYhfERJVlxcLzAhfE5VTEwhfE5VTSF8TlxcL0F8R0VUVElOR19EQVRBXFxifFNQSUxMIXxVTktOT1dOIXxGSUVMRFxcYnxDQUxDXFxifFNZTlRBWFxcP3xFUlJPUiF8Q09OTkVDVCF8QkxPQ0tFRCF8RVhURVJOQUwhKS9pO1xuY29uc3QgcmVfT1BFUkFUT1IgPSAvXig8PXw+PXw8PnxbLSsvKl4lJjw+PV18W3t9LDtdfFsoKV18QHw6fCF8IykvO1xuY29uc3QgcmVfQk9PTEVBTiA9IC9eKFRSVUV8RkFMU0UpXFxiL2k7XG5jb25zdCByZV9GVU5DVElPTiA9IC9eW0EtWl9dK1tBLVpcXGRfLl0qKD89XFwoKS9pO1xuY29uc3QgcmVfTkVXTElORSA9IC9eXFxuKy87XG5jb25zdCByZV9XSElURVNQQUNFID0gL15bIFxcZlxcclxcdFxcdlxcdTAwYTBcXHUxNjgwXFx1MjAwMC1cXHUyMDBhXFx1MjAyOFxcdTIwMjlcXHUyMDJmXFx1MjA1ZlxcdTMwMDBcXHVmZWZmXSsvO1xuY29uc3QgcmVfU1RSSU5HID0gL15cIig/OlwiXCJ8W15cIl0pKihcInwkKS87XG5jb25zdCByZV9OVU1CRVIgPSAvXig/OlxcZCsoXFwuXFxkKyk/KD86W2VFXVsrLV0/XFxkKyk/fFxcZCspLztcbmNvbnN0IHJlX0NPTlRFWFQgPSAvXig/ISEpKFxcWyg/OlteXFxdXSkrXFxdKT8oWzAtOUEtWmEtei5fwqHCpMKnwqjCqlxcdTAwYWTCry1cXHVmZmZmXSspPyg/PSEpLztcbmNvbnN0IHJlX0NPTlRFWFRfUVVPVEUgPSAvXicoPzonJ3xbXiddKSooJ3wkKSg/PSEpLztcbmNvbnN0IHJlX1JBTkdFX1RSSU0gPSAvXihcXC46XFwufFxcLjp8OlxcLikvO1xuXG5jb25zdCBybmdQYXJ0ID0gJ1xcXFwkP1tBLVpdezEsM31cXFxcJD9bMS05XVswLTldezAsNn0nO1xuY29uc3QgY29sUGFydCA9ICdcXFxcJD9bQS1aXXsxLDN9JztcbmNvbnN0IHJvd1BhcnQgPSAnXFxcXCQ/WzEtOV1bMC05XXswLDZ9JztcbmNvbnN0IHJhbmdlT3AgPSAnXFxcXC4/OlxcXFwuPyc7XG5jb25zdCBuZXh0Tm90Q2hhciA9ICcoPyFbYS16MC05X1xcXFx1MDBhMS1cXFxcdWZmZmZdKSc7XG5jb25zdCByZV9BMUNPTCA9IG5ldyBSZWdFeHAoYF4ke2NvbFBhcnR9JHtyYW5nZU9wfSR7Y29sUGFydH0ke25leHROb3RDaGFyfWAsICdpJyk7XG5jb25zdCByZV9BMVJPVyA9IG5ldyBSZWdFeHAoYF4ke3Jvd1BhcnR9JHtyYW5nZU9wfSR7cm93UGFydH0ke25leHROb3RDaGFyfWAsICdpJyk7XG5jb25zdCByZV9BMVJBTkdFID0gbmV3IFJlZ0V4cChgXiR7cm5nUGFydH0ke25leHROb3RDaGFyfWAsICdpJyk7XG5jb25zdCByZV9BMVBBUlRJQUwgPSBuZXcgUmVnRXhwKGBeKCgke2NvbFBhcnR9fCR7cm93UGFydH0pJHtyYW5nZU9wfSR7cm5nUGFydH18JHtybmdQYXJ0fSR7cmFuZ2VPcH0oJHtjb2xQYXJ0fXwke3Jvd1BhcnR9KSkoPyFbXFxcXHcoJC5dKWAsICdpJyk7XG5jb25zdCByUGFydCA9ICcoPzpSKD86XFxcXFtbKy1dP1xcXFxkK1xcXFxdfFsxLTldWzAtOV17MCw2fSk/KSc7XG5jb25zdCBjUGFydCA9ICcoPzpDKD86XFxcXFtbKy1dP1xcXFxkK1xcXFxdfFsxLTldWzAtOV17MCw0fSk/KSc7XG5jb25zdCByZV9SQ0NPTCA9IG5ldyBSZWdFeHAoYF4ke2NQYXJ0fSgke3JhbmdlT3B9JHtjUGFydH0pPyR7bmV4dE5vdENoYXJ9YCwgJ2knKTtcbmNvbnN0IHJlX1JDUk9XID0gbmV3IFJlZ0V4cChgXiR7clBhcnR9KCR7cmFuZ2VPcH0ke3JQYXJ0fSk/JHtuZXh0Tm90Q2hhcn1gLCAnaScpO1xuY29uc3QgcmVfUkNSQU5HRSA9IG5ldyBSZWdFeHAoYF4oPzooPz1bUkNdKSR7clBhcnR9JHtjUGFydH0pJHtuZXh0Tm90Q2hhcn1gLCAnaScpO1xuY29uc3QgcmVfUkNQQVJUSUFMID0gbmV3IFJlZ0V4cChgXigke3JQYXJ0fSR7Y1BhcnR9KCR7cmFuZ2VPcH0ke2NQYXJ0fXwke3JhbmdlT3B9JHtyUGFydH0pKD8hW1tcXFxcZF0pfCgke3JQYXJ0fXwke2NQYXJ0fSkoJHtyYW5nZU9wfSR7clBhcnR9JHtjUGFydH0pKSR7bmV4dE5vdENoYXJ9YCwgJ2knKTtcblxuLy8gVGhlIGFkdmVydGl6ZWQgbmFtZWQgcmFuZ2VzIHJ1bGVzIGFyZSBhIGJpdCBvZmYgZnJvbSB3aGF0IEV4Y2VsIHNlZW1zIHRvIGRvOlxuLy8gaW4gdGhlIFwiZXh0ZW5kZWQgcmFuZ2VcIiBvZiBjaGFycywgaXQgbG9va3MgbGlrZSBpdCBhbGxvd3MgbW9zdCB0aGluZ3MgYWJvdmVcbi8vIFUrMDBCMCB3aXRoIHRoZSByYW5nZSBiZXR3ZWVuIFUrMDBBMC1VKzAwQUYgcmF0aGVyIHJhbmRvbS5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZVxuLy8gY29uc3QgcmVfTkFNRUQgPSAvXlthLXpBLVpcXFxcX8KhwqTCp8KowqpcXHUwMGFkwq9cXHUwMGIwLVxcdWZmZmZdW2EtekEtWjAtOVxcXFxfLj/CocKkwqfCqMKqXFx1MDBhZMKvXFx1MDBiMC1cXHVmZmZmXXswLDI1NH0vaTtcbi8vIEkndmUgc2ltcGxpZmllZCB0byBhbGxvd2luZyBldmVyeXRoaW5nIGFib3ZlIFUrMDBBMTpcbmNvbnN0IHJlX05BTUVEID0gL15bYS16QS1aXFxcXF9cXHUwMGExLVxcdWZmZmZdW2EtekEtWjAtOVxcXFxfLj9cXHUwMGExLVxcdWZmZmZdezAsMjU0fS9pO1xuXG5mdW5jdGlvbiBtYWtlSGFuZGxlciAodHlwZSwgcmUpIHtcbiAgcmV0dXJuIHN0ciA9PiB7XG4gICAgY29uc3QgbSA9IHJlLmV4ZWMoc3RyKTtcbiAgICBpZiAobSkge1xuICAgICAgcmV0dXJuIHsgdHlwZTogdHlwZSwgdmFsdWU6IG1bMF0gfTtcbiAgICB9XG4gIH07XG59XG5cbmZ1bmN0aW9uIGxleE5hbWVkIChzdHIpIHtcbiAgY29uc3QgbSA9IHJlX05BTUVELmV4ZWMoc3RyKTtcbiAgaWYgKG0pIHtcbiAgICBjb25zdCBsYyA9IG1bMF0udG9Mb3dlckNhc2UoKTtcbiAgICAvLyBuYW1lcyBzdGFydGluZyB3aXRoIFxcIG11c3QgYmUgYXQgbGVhc3QgMyBjaGFyIGxvbmdcbiAgICBpZiAobGNbMF0gPT09ICdcXFxcJyAmJiBtWzBdLmxlbmd0aCA8IDMpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICAvLyBzaW5nbGUgY2hhcmFjdGVycyBSIGFuZCBDIGFyZSBmb3JiaWRkZW4gYXMgbmFtZXNcbiAgICBpZiAobGMgPT09ICdyJyB8fCBsYyA9PT0gJ2MnKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIHsgdHlwZTogUkVGX05BTUVELCB2YWx1ZTogbVswXSB9O1xuICB9XG59XG5cbmNvbnN0IHJlX1FVT1RFRF9WQUxVRSA9IC9eJyg/OlteW1xcXV0rPyk/KD86XFxbKC4rPylcXF0pPyg/OlteW1xcXV0rPyknJC87XG5jb25zdCByZV9RVU9URURfVkFMVUVfWExTWCA9IC9eJ1xcWyguKz8pXFxdJyQvO1xuZnVuY3Rpb24gbGV4Q29udGV4dCAoc3RyLCBvcHRpb25zKSB7XG4gIGNvbnN0IG1xID0gcmVfQ09OVEVYVF9RVU9URS5leGVjKHN0cik7XG4gIGlmIChtcSkge1xuICAgIGNvbnN0IHZhbHVlID0gbXFbMF07XG4gICAgY29uc3QgaXNWYWxpZCA9IG9wdGlvbnMueGxzeFxuICAgICAgPyByZV9RVU9URURfVkFMVUVfWExTWC50ZXN0KHZhbHVlKSB8fCByZV9RVU9URURfVkFMVUUudGVzdCh2YWx1ZSlcbiAgICAgIDogcmVfUVVPVEVEX1ZBTFVFLnRlc3QodmFsdWUpO1xuICAgIGlmIChpc1ZhbGlkKSB7XG4gICAgICByZXR1cm4geyB0eXBlOiBDT05URVhUX1FVT1RFLCB2YWx1ZTogdmFsdWUgfTtcbiAgICB9XG4gIH1cbiAgLy8geGxzeCB4bWwgdXNlcyBhIHZhcmlhbnQgb2YgdGhlIHN5bnRheCB0aGF0IGhhcyBleHRlcm5hbCByZWZlcmVuY2VzIGluXG4gIC8vIGJyYWNldHMuIEFueSBvZjogWzFdU2hlZXQxIUExLCAnWzFdU2hlZXQgb25lJyFBMSwgWzFdIW5hbWVkXG4gIC8vIFdlJ3JlIG9ubHkgY29uY2VybmVkIHdpdGggdGhlIG5vbiBxdW90ZWQgdmVyc2lvbiBoZXJlIGFzIHRoZSBxdW90ZWQgdmVyc2lvblxuICAvLyBkb2Vzbid0IGN1cnJlbnRseSBleGFtaW5lIHdoYXQgaXMgaW4gdGhlIHF1b3Rlcy5cbiAgY29uc3QgbSA9IHJlX0NPTlRFWFQuZXhlYyhzdHIpO1xuICBpZiAobSkge1xuICAgIGNvbnN0IFsgLCBhLCBiIF0gPSBtO1xuICAgIGNvbnN0IHZhbGlkID0gKFxuICAgICAgKChhICYmIGIpIHx8IGIpIHx8IC8vIFwiW2FdYiFcIiBvciBcImIhXCIgZm9ybXNcbiAgICAgIChhICYmICFiICYmIG9wdGlvbnMueGxzeCkgLy8gXCJbYV1cIiBmb3JtIChhbGxvd2VkIGluIHhsc3ggbW9kZSlcbiAgICApO1xuICAgIGlmICh2YWxpZCkge1xuICAgICAgcmV0dXJuIHsgdHlwZTogQ09OVEVYVCwgdmFsdWU6IG1bMF0gfTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gbGV4U3RydWN0dXJlZCAoc3RyKSB7XG4gIGNvbnN0IHN0cnVjdERhdGEgPSBwYXJzZVNSYW5nZShzdHIpO1xuICBpZiAoc3RydWN0RGF0YSkge1xuICAgIC8vIHdlIGhhdmUgYSBtYXRjaCBmb3IgYSB2YWxpZCBTUlxuICAgIGxldCBpID0gc3RydWN0RGF0YS5sZW5ndGg7XG4gICAgLy8gc2tpcCB0YWlsaW5nIHdoaXRlc3BhY2VcbiAgICB3aGlsZSAoc3RyW2ldID09PSAnICcpIHtcbiAgICAgIGkrKztcbiAgICB9XG4gICAgLy8gYW5kIGVuc3VyZSB0aGF0IGl0IGlzbid0IGZvbGxvd2VkIGJ5IGEgIVxuICAgIGlmIChzdHJbaV0gIT09ICchJykge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdHlwZTogUkVGX1NUUlVDVCxcbiAgICAgICAgdmFsdWU6IHN0cnVjdERhdGEudG9rZW5cbiAgICAgIH07XG4gICAgfVxuICB9XG4gIHJldHVybiBudWxsO1xufVxuXG5jb25zdCByZVJDTnVtcyA9IC8oW1JDXSkoXFxbPykoLT9cXGQrKS9naTtcbmNvbnN0IHJlQTFOdW1zID0gLyhcXGQrfFthLXpBLVpdKykvZ2k7XG5mdW5jdGlvbiBsZXhSYW5nZSAoc3RyLCBvcHRpb25zKSB7XG4gIGxldCBtLCB0O1xuICBpZiAob3B0aW9ucy5yMWMxKSB7XG4gICAgLy8gUkMgbm90YXRpb25cbiAgICBpZiAob3B0aW9ucy5hbGxvd1Rlcm5hcnkgJiYgKG0gPSByZV9SQ1BBUlRJQUwuZXhlYyhzdHIpKSkge1xuICAgICAgdCA9IHsgdHlwZTogUkVGX1RFUk5BUlksIHZhbHVlOiBtWzBdIH07XG4gICAgfVxuICAgIGVsc2UgaWYgKChtID0gcmVfUkNSQU5HRS5leGVjKHN0cikpKSB7XG4gICAgICB0ID0geyB0eXBlOiBSRUZfUkFOR0UsIHZhbHVlOiBtWzBdIH07XG4gICAgfVxuICAgIGVsc2UgaWYgKChtID0gcmVfUkNST1cuZXhlYyhzdHIpKSB8fCAobSA9IHJlX1JDQ09MLmV4ZWMoc3RyKSkpIHtcbiAgICAgIHQgPSB7IHR5cGU6IFJFRl9CRUFNLCB2YWx1ZTogbVswXSB9O1xuICAgIH1cbiAgICBpZiAodCkge1xuICAgICAgcmVSQ051bXMubGFzdEluZGV4ID0gMDtcbiAgICAgIHdoaWxlICgobSA9IHJlUkNOdW1zLmV4ZWModC52YWx1ZSkpICE9PSBudWxsKSB7XG4gICAgICAgIGNvbnN0IHggPSAobVsxXSA9PT0gJ1InID8gTUFYX1JPV1MgOiBNQVhfQ09MUykgKyAobVsyXSA/IDAgOiAxKTtcbiAgICAgICAgY29uc3QgdmFsID0gcGFyc2VJbnQobVszXSwgMTApO1xuICAgICAgICBpZiAodmFsID4geCB8fCB2YWwgPCAteCkge1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gdDtcbiAgICB9XG4gIH1cbiAgZWxzZSB7XG4gICAgLy8gQTEgbm90YXRpb25cbiAgICBpZiAob3B0aW9ucy5hbGxvd1Rlcm5hcnkgJiYgKG0gPSByZV9BMVBBUlRJQUwuZXhlYyhzdHIpKSkge1xuICAgICAgdCA9IHsgdHlwZTogUkVGX1RFUk5BUlksIHZhbHVlOiBtWzBdIH07XG4gICAgfVxuICAgIGVsc2UgaWYgKChtID0gcmVfQTFDT0wuZXhlYyhzdHIpKSB8fCAobSA9IHJlX0ExUk9XLmV4ZWMoc3RyKSkpIHtcbiAgICAgIHQgPSB7IHR5cGU6IFJFRl9CRUFNLCB2YWx1ZTogbVswXSB9O1xuICAgIH1cbiAgICBlbHNlIGlmICgobSA9IHJlX0ExUkFOR0UuZXhlYyhzdHIpKSkge1xuICAgICAgdCA9IHsgdHlwZTogUkVGX1JBTkdFLCB2YWx1ZTogbVswXSB9O1xuICAgIH1cbiAgICBpZiAodCkge1xuICAgICAgcmVBMU51bXMubGFzdEluZGV4ID0gMDtcbiAgICAgIC8vIFhYWDogY2FuIHByb2JhYmx5IG9wdGltaXplIHRoaXMgYXMgd2Uga25vdyBsZXR0ZXJzIGNhbiBvbmx5IGJlIDMgYXQgbWF4XG4gICAgICB3aGlsZSAoKG0gPSByZUExTnVtcy5leGVjKHQudmFsdWUpKSAhPT0gbnVsbCkge1xuICAgICAgICBpZiAoL15cXGQvLnRlc3QobVsxXSkpIHsgLy8gcm93XG4gICAgICAgICAgaWYgKChwYXJzZUludChtWzFdLCAxMCkgLSAxKSA+IE1BWF9ST1dTKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZnJvbUNvbChtWzFdKSA+IE1BWF9DT0xTKSB7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB0O1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBsZXhSZWZPcCAocywgb3B0cykge1xuICAvLyBpbiBSMUMxIG1vZGUgd2Ugb25seSBhbGxvdyAhXG4gIGlmIChvcHRzLnIxYzEpIHtcbiAgICByZXR1cm4gKHNbMF0gPT09ICchJylcbiAgICAgID8geyB0eXBlOiBPUEVSQVRPUiwgdmFsdWU6IHNbMF0gfVxuICAgICAgOiBudWxsO1xuICB9XG4gIC8vIGluIEExIG1vZGUgd2UgYWxsb3cgWyAnIScsICc6JywgJy46JywgJzouJywgJy46LiddXG4gIGNvbnN0IG0gPSAvXighfFxcLj86XFwuPykvLmV4ZWMocyk7XG4gIGlmIChtKSB7XG4gICAgcmV0dXJuIHsgdHlwZTogT1BFUkFUT1IsIHZhbHVlOiBtWzFdIH07XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59XG5cbmV4cG9ydCBjb25zdCBsZXhlcnMgPSBbXG4gIG1ha2VIYW5kbGVyKEVSUk9SLCByZV9FUlJPUiksXG4gIG1ha2VIYW5kbGVyKE9QRVJBVE9SX1RSSU0sIHJlX1JBTkdFX1RSSU0pLFxuICBtYWtlSGFuZGxlcihPUEVSQVRPUiwgcmVfT1BFUkFUT1IpLFxuICBtYWtlSGFuZGxlcihGVU5DVElPTiwgcmVfRlVOQ1RJT04pLFxuICBtYWtlSGFuZGxlcihCT09MRUFOLCByZV9CT09MRUFOKSxcbiAgbWFrZUhhbmRsZXIoTkVXTElORSwgcmVfTkVXTElORSksXG4gIG1ha2VIYW5kbGVyKFdISVRFU1BBQ0UsIHJlX1dISVRFU1BBQ0UpLFxuICBtYWtlSGFuZGxlcihTVFJJTkcsIHJlX1NUUklORyksXG4gIGxleENvbnRleHQsXG4gIGxleFJhbmdlLFxuICBsZXhTdHJ1Y3R1cmVkLFxuICBtYWtlSGFuZGxlcihOVU1CRVIsIHJlX05VTUJFUiksXG4gIGxleE5hbWVkXG5dO1xuXG5leHBvcnQgY29uc3QgbGV4ZXJzUmVmcyA9IFtcbiAgbGV4UmVmT3AsXG4gIGxleENvbnRleHQsXG4gIGxleFJhbmdlLFxuICBsZXhTdHJ1Y3R1cmVkLFxuICBsZXhOYW1lZFxuXTtcbiIsImltcG9ydCB7IENPTlRFWFQsIENPTlRFWFRfUVVPVEUsIFJFRl9SQU5HRSwgUkVGX05BTUVELCBSRUZfQkVBTSwgUkVGX1RFUk5BUlksIE9QRVJBVE9SLCBSRUZfU1RSVUNUIH0gZnJvbSAnLi9jb25zdGFudHMuanMnO1xuXG5jb25zdCBFTkQgPSAnJCc7XG5cbmNvbnN0IHZhbGlkUnVuc01lcmdlID0gW1xuICBbIFJFRl9SQU5HRSwgJzonLCBSRUZfUkFOR0UgXSxcbiAgWyBSRUZfUkFOR0UsICcuOicsIFJFRl9SQU5HRSBdLFxuICBbIFJFRl9SQU5HRSwgJzouJywgUkVGX1JBTkdFIF0sXG4gIFsgUkVGX1JBTkdFLCAnLjouJywgUkVGX1JBTkdFIF0sXG4gIFsgUkVGX1JBTkdFIF0sXG4gIFsgUkVGX0JFQU0gXSxcbiAgWyBSRUZfVEVSTkFSWSBdLFxuICBbIENPTlRFWFQsICchJywgUkVGX1JBTkdFLCAnOicsIFJFRl9SQU5HRSBdLFxuICBbIENPTlRFWFQsICchJywgUkVGX1JBTkdFLCAnLjonLCBSRUZfUkFOR0UgXSxcbiAgWyBDT05URVhULCAnIScsIFJFRl9SQU5HRSwgJzouJywgUkVGX1JBTkdFIF0sXG4gIFsgQ09OVEVYVCwgJyEnLCBSRUZfUkFOR0UsICcuOi4nLCBSRUZfUkFOR0UgXSxcbiAgWyBDT05URVhULCAnIScsIFJFRl9SQU5HRSBdLFxuICBbIENPTlRFWFQsICchJywgUkVGX0JFQU0gXSxcbiAgWyBDT05URVhULCAnIScsIFJFRl9URVJOQVJZIF0sXG4gIFsgQ09OVEVYVF9RVU9URSwgJyEnLCBSRUZfUkFOR0UsICc6JywgUkVGX1JBTkdFIF0sXG4gIFsgQ09OVEVYVF9RVU9URSwgJyEnLCBSRUZfUkFOR0UsICcuOicsIFJFRl9SQU5HRSBdLFxuICBbIENPTlRFWFRfUVVPVEUsICchJywgUkVGX1JBTkdFLCAnOi4nLCBSRUZfUkFOR0UgXSxcbiAgWyBDT05URVhUX1FVT1RFLCAnIScsIFJFRl9SQU5HRSwgJy46LicsIFJFRl9SQU5HRSBdLFxuICBbIENPTlRFWFRfUVVPVEUsICchJywgUkVGX1JBTkdFIF0sXG4gIFsgQ09OVEVYVF9RVU9URSwgJyEnLCBSRUZfQkVBTSBdLFxuICBbIENPTlRFWFRfUVVPVEUsICchJywgUkVGX1RFUk5BUlkgXSxcbiAgWyBSRUZfTkFNRUQgXSxcbiAgWyBDT05URVhULCAnIScsIFJFRl9OQU1FRCBdLFxuICBbIENPTlRFWFRfUVVPVEUsICchJywgUkVGX05BTUVEIF0sXG4gIFsgUkVGX1NUUlVDVCBdLFxuICBbIFJFRl9OQU1FRCwgUkVGX1NUUlVDVCBdLFxuICBbIENPTlRFWFQsICchJywgUkVGX05BTUVELCBSRUZfU1RSVUNUIF0sXG4gIFsgQ09OVEVYVF9RVU9URSwgJyEnLCBSRUZfTkFNRUQsIFJFRl9TVFJVQ1QgXVxuXTtcblxuLy8gdmFsaWQgdG9rZW4gcnVucyBhcmUgY29udmVydGVkIHRvIGEgdHJlZSBzdHJ1Y3R1cmVcbmNvbnN0IHJlZlBhcnRzVHJlZSA9IHt9O1xuZnVuY3Rpb24gcGFja0xpc3QgKGYsIG5vZGUpIHtcbiAgaWYgKGYubGVuZ3RoKSB7XG4gICAgY29uc3Qga2V5ID0gZlswXTtcbiAgICBub2RlW2tleV0gPSBub2RlW2tleV0gfHwge307XG4gICAgcGFja0xpc3QoZi5zbGljZSgxKSwgbm9kZVtrZXldKTtcbiAgfVxuICBlbHNlIHtcbiAgICBub2RlW0VORF0gPSB0cnVlO1xuICB9XG59XG52YWxpZFJ1bnNNZXJnZS5mb3JFYWNoKHJ1biA9PiBwYWNrTGlzdChydW4uY29uY2F0KCkucmV2ZXJzZSgpLCByZWZQYXJ0c1RyZWUpKTtcblxuLy8gYXR0ZW1wdCB0byBtYXRjaCBhIGJhY2t3YXJkcyBydW4gb2YgdG9rZW5zIGZyb20gYSBnaXZlbiBwb2ludFxuLy8gdG8gYSBwYXRoIGluIHRoZSB0cmVlXG5jb25zdCBtYXRjaGVyID0gKHRva2VucywgY3Vyck5vZGUsIGFuY2hvckluZGV4LCBpbmRleCA9IDApID0+IHtcbiAgY29uc3QgdG9rZW4gPSB0b2tlbnNbYW5jaG9ySW5kZXggLSBpbmRleF07XG4gIGlmICh0b2tlbikge1xuICAgIGNvbnN0IGtleSA9ICh0b2tlbi50eXBlID09PSBPUEVSQVRPUikgPyB0b2tlbi52YWx1ZSA6IHRva2VuLnR5cGU7XG4gICAgaWYgKGtleSBpbiBjdXJyTm9kZSkge1xuICAgICAgcmV0dXJuIG1hdGNoZXIodG9rZW5zLCBjdXJyTm9kZVtrZXldLCBhbmNob3JJbmRleCwgaW5kZXggKyAxKTtcbiAgICB9XG4gIH1cbiAgaWYgKGN1cnJOb2RlW0VORF0pIHtcbiAgICAvLyB3ZSBtYXkgZW5kIGhlcmUgc28gdGhpcyBpcyBhIG1hdGNoXG4gICAgcmV0dXJuIGluZGV4O1xuICB9XG4gIC8vIG5vIG1hdGNoXG4gIHJldHVybiAwO1xufTtcblxuLyoqXG4gKiBNZXJnZXMgY29udGV4dCB3aXRoIHJlZmVyZW5jZSB0b2tlbnMgYXMgcG9zc2libGUgaW4gYSBsaXN0IG9mIHRva2Vucy5cbiAqXG4gKiBXaGVuIGdpdmVuIGEgdG9rZW5saXN0LCB0aGlzIGZ1bmN0aW9uIHJldHVybnMgYSBuZXcgbGlzdCB3aXRoIHJhbmdlcyByZXR1cm5lZFxuICogYXMgd2hvbGUgcmVmZXJlbmNlcyAoYFNoZWV0MSFBMTpCMmApIHJhdGhlciB0aGFuIHNlcGFyYXRlIHRva2VucyBmb3IgZWFjaFxuICogcGFydDogKGBTaGVldDFgLGAhYCxgQTFgLGA6YCxgQjJgKS5cbiAqXG4gKiBAcGFyYW0ge0FycmF5PFRva2VuPn0gdG9rZW5saXN0IEFuIGFycmF5IG9mIHRva2VucyAoZnJvbSBgdG9rZW5pemUoKWApXG4gKiBAcmV0dXJucyB7QXJyYXk8VG9rZW4+fSBBIG5ldyBsaXN0IG9mIHRva2VucyB3aXRoIHJhbmdlIHBhcnRzIG1lcmdlZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1lcmdlUmVmVG9rZW5zICh0b2tlbmxpc3QpIHtcbiAgY29uc3QgZmluYWxUb2tlbnMgPSBbXTtcbiAgLy8gdGhpcyBzZWVrcyBiYWNrd2FyZHMgYmVjYXVzZSBpdCdzIHJlYWxseSB0aGUgcmFuZ2UgcGFydFxuICAvLyB0aGF0IGNvbnRyb2xzIHdoYXQgY2FuIGJlIGpvaW5lZC5cbiAgZm9yIChsZXQgaSA9IHRva2VubGlzdC5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgIGxldCB0b2tlbiA9IHRva2VubGlzdFtpXTtcbiAgICBjb25zdCB2YWxpZCA9IG1hdGNoZXIodG9rZW5saXN0LCByZWZQYXJ0c1RyZWUsIGkpO1xuICAgIGlmICh2YWxpZCkge1xuICAgICAgY29uc3QgdG9NZXJnZSA9IHRva2VubGlzdC5zbGljZShpIC0gdmFsaWQgKyAxLCBpICsgMSk7XG4gICAgICAvLyB1c2UgdGhlIG1ldGEgcHJvcGVydGllcyBmcm9tIHRoZSBcImZpcnN0XCIgdG9rZW4gKHJpZ2h0LW1vc3QgdG9rZW4pXG4gICAgICB0b2tlbiA9IHsgLi4udG9rZW4gfTtcbiAgICAgIHRva2VuLnZhbHVlID0gdG9NZXJnZS5tYXAoZCA9PiBkLnZhbHVlKS5qb2luKCcnKTtcbiAgICAgIC8vIGFkanVzdCB0aGUgb2Zmc2V0cyB0byBpbmNsdWRlIGFsbCB0aGUgdGV4dFxuICAgICAgaWYgKHRva2VuLmxvYyAmJiB0b01lcmdlWzBdLmxvYykge1xuICAgICAgICB0b2tlbi5sb2NbMF0gPSB0b01lcmdlWzBdLmxvY1swXTtcbiAgICAgIH1cbiAgICAgIGkgLT0gdmFsaWQgLSAxO1xuICAgIH1cbiAgICBmaW5hbFRva2Vucy51bnNoaWZ0KHRva2VuKTtcbiAgfVxuICByZXR1cm4gZmluYWxUb2tlbnM7XG59XG4iLCJpbXBvcnQge1xuICBGWF9QUkVGSVgsXG4gIE5FV0xJTkUsXG4gIE5VTUJFUixcbiAgT1BFUkFUT1IsXG4gIFJFRl9OQU1FRCxcbiAgU1RSSU5HLFxuICBVTktOT1dOLFxuICBXSElURVNQQUNFLFxuICBGVU5DVElPTixcbiAgT1BFUkFUT1JfVFJJTSxcbiAgUkVGX1JBTkdFXG59IGZyb20gJy4vY29uc3RhbnRzLmpzJztcbmltcG9ydCB7IGxleGVycyB9IGZyb20gJy4vbGV4ZXJQYXJ0cy5qcyc7XG5pbXBvcnQgeyBtZXJnZVJlZlRva2VucyB9IGZyb20gJy4vbWVyZ2VSZWZUb2tlbnMuanMnO1xuXG5jb25zdCBpc1R5cGUgPSAodCwgdHlwZSkgPT4gdCAmJiB0LnR5cGUgPT09IHR5cGU7XG5cbmNvbnN0IGRlZmF1bHRPcHRpb25zID0ge1xuICB3aXRoTG9jYXRpb246IGZhbHNlLFxuICBtZXJnZVJlZnM6IHRydWUsXG4gIGFsbG93VGVybmFyeTogZmFsc2UsXG4gIG5lZ2F0aXZlTnVtYmVyczogdHJ1ZSxcbiAgcjFjMTogZmFsc2Vcbn07XG5cbmNvbnN0IGlzVGV4dFRva2VuID0gdG9rZW4gPT4ge1xuICByZXR1cm4gKFxuICAgIHRva2VuLnR5cGUgPT09IFJFRl9OQU1FRCB8fFxuICAgIHRva2VuLnR5cGUgPT09IEZVTkNUSU9OXG4gICk7XG59O1xuXG5jb25zdCBjYXVzZXNCaW5hcnlNaW51cyA9IHRva2VuID0+IHtcbiAgcmV0dXJuICFpc1R5cGUodG9rZW4sIE9QRVJBVE9SKSB8fCAoXG4gICAgdG9rZW4udmFsdWUgPT09ICclJyB8fFxuICAgIHRva2VuLnZhbHVlID09PSAnfScgfHxcbiAgICB0b2tlbi52YWx1ZSA9PT0gJyknIHx8XG4gICAgdG9rZW4udmFsdWUgPT09ICcjJ1xuICApO1xufTtcblxuZnVuY3Rpb24gZml4UkNOYW1lcyAodG9rZW5zKSB7XG4gIGxldCB3aXRoaW5DYWxsID0gMDtcbiAgbGV0IHBhcmVuRGVwdGggPSAwO1xuICBsZXQgbGFzdFRva2VuO1xuICBmb3IgKGNvbnN0IHRva2VuIG9mIHRva2Vucykge1xuICAgIGlmICh0b2tlbi50eXBlID09PSBPUEVSQVRPUikge1xuICAgICAgaWYgKHRva2VuLnZhbHVlID09PSAnKCcpIHtcbiAgICAgICAgcGFyZW5EZXB0aCsrO1xuICAgICAgICBpZiAobGFzdFRva2VuLnR5cGUgPT09IEZVTkNUSU9OKSB7XG4gICAgICAgICAgY29uc3QgdiA9IGxhc3RUb2tlbi52YWx1ZS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgIGlmICh2ID09PSAnbGFtYmRhJyB8fCB2ID09PSAnbGV0Jykge1xuICAgICAgICAgICAgd2l0aGluQ2FsbCA9IHBhcmVuRGVwdGg7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBlbHNlIGlmICh0b2tlbi52YWx1ZSA9PT0gJyknKSB7XG4gICAgICAgIHBhcmVuRGVwdGgtLTtcbiAgICAgICAgaWYgKHBhcmVuRGVwdGggPCB3aXRoaW5DYWxsKSB7XG4gICAgICAgICAgd2l0aGluQ2FsbCA9IDA7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgZWxzZSBpZiAod2l0aGluQ2FsbCAmJiB0b2tlbi50eXBlID09PSBVTktOT1dOICYmIC9eW3JjXSQvLnRlc3QodG9rZW4udmFsdWUpKSB7XG4gICAgICB0b2tlbi50eXBlID0gUkVGX05BTUVEO1xuICAgIH1cbiAgICBsYXN0VG9rZW4gPSB0b2tlbjtcbiAgfVxuICByZXR1cm4gdG9rZW5zO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0VG9rZW5zIChmeCwgdG9rZW5IYW5kbGVycywgb3B0aW9ucyA9IHt9KSB7XG4gIGNvbnN0IG9wdHMgPSBPYmplY3QuYXNzaWduKHt9LCBkZWZhdWx0T3B0aW9ucywgb3B0aW9ucyk7XG4gIGNvbnN0IHsgd2l0aExvY2F0aW9uLCBtZXJnZVJlZnMsIG5lZ2F0aXZlTnVtYmVycyB9ID0gb3B0cztcbiAgY29uc3QgdG9rZW5zID0gW107XG4gIGxldCBwb3MgPSAwO1xuICBsZXQgbGV0T3JMYW1iZGEgPSAwO1xuICBsZXQgdW5rbm93blJDID0gMDtcbiAgY29uc3QgdHJpbU9wcyA9IFtdO1xuXG4gIGxldCB0YWlsMCA9IG51bGw7IC8vIGxhc3Qgbm9uLXdoaXRlc3BhY2UgdG9rZW5cbiAgbGV0IHRhaWwxID0gbnVsbDsgLy8gcGVudWx0aW1hdGUgbm9uLXdoaXRlc3BhY2UgdG9rZW5cbiAgbGV0IGxhc3RUb2tlbiA9IG51bGw7IC8vIGxhc3QgdG9rZW5cbiAgY29uc3QgcHVzaFRva2VuID0gdG9rZW4gPT4ge1xuICAgIGNvbnN0IGlzQ3VyclVua25vd24gPSB0b2tlbi50eXBlID09PSBVTktOT1dOO1xuICAgIGNvbnN0IGlzTGFzdFVua25vd24gPSBsYXN0VG9rZW4gJiYgbGFzdFRva2VuLnR5cGUgPT09IFVOS05PV047XG4gICAgaWYgKGxhc3RUb2tlbiAmJiAoXG4gICAgICAoaXNDdXJyVW5rbm93biAmJiBpc0xhc3RVbmtub3duKSB8fFxuICAgICAgKGlzQ3VyclVua25vd24gJiYgaXNUZXh0VG9rZW4obGFzdFRva2VuKSkgfHxcbiAgICAgIChpc0xhc3RVbmtub3duICYmIGlzVGV4dFRva2VuKHRva2VuKSlcbiAgICApKSB7XG4gICAgICAvLyBVTktOT1dOIHRva2VucyBcImNvbnRhbWluYXRlXCIgc2libGluZyB0ZXh0IHRva2Vuc1xuICAgICAgbGFzdFRva2VuLnZhbHVlICs9IHRva2VuLnZhbHVlO1xuICAgICAgbGFzdFRva2VuLnR5cGUgPSBVTktOT1dOO1xuICAgICAgaWYgKHdpdGhMb2NhdGlvbikge1xuICAgICAgICBsYXN0VG9rZW4ubG9jWzFdID0gdG9rZW4ubG9jWzFdO1xuICAgICAgfVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIGlmICh0b2tlbi50eXBlID09PSBPUEVSQVRPUl9UUklNKSB7XG4gICAgICAgIHRyaW1PcHMucHVzaCh0b2tlbnMubGVuZ3RoKTtcbiAgICAgICAgdG9rZW4udHlwZSA9IFVOS05PV047XG4gICAgICB9XG4gICAgICAvLyBwdXNoIHRva2VuIGFzIG5vcm1hbGx5XG4gICAgICB0b2tlbnMucHVzaCh0b2tlbik7XG4gICAgICBsYXN0VG9rZW4gPSB0b2tlbjtcbiAgICAgIGlmICh0b2tlbi50eXBlICE9PSBXSElURVNQQUNFICYmIHRva2VuLnR5cGUgIT09IE5FV0xJTkUpIHtcbiAgICAgICAgdGFpbDEgPSB0YWlsMDtcbiAgICAgICAgdGFpbDAgPSB0b2tlbjtcbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgaWYgKGZ4WzBdID09PSAnPScpIHtcbiAgICBjb25zdCB0b2tlbiA9IHtcbiAgICAgIHR5cGU6IEZYX1BSRUZJWCxcbiAgICAgIHZhbHVlOiAnPScsXG4gICAgICAuLi4od2l0aExvY2F0aW9uID8geyBsb2M6IFsgMCwgMSBdIH0gOiB7fSlcbiAgICB9O1xuICAgIHBvcysrO1xuICAgIHB1c2hUb2tlbih0b2tlbik7XG4gIH1cblxuICB3aGlsZSAocG9zIDwgZngubGVuZ3RoKSB7XG4gICAgY29uc3Qgc3RhcnRQb3MgPSBwb3M7XG4gICAgY29uc3QgcyA9IGZ4LnNsaWNlKHBvcyk7XG4gICAgbGV0IHRva2VuVHlwZSA9ICcnO1xuICAgIGxldCB0b2tlblZhbHVlID0gJyc7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0b2tlbkhhbmRsZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCB0ID0gdG9rZW5IYW5kbGVyc1tpXShzLCBvcHRzKTtcbiAgICAgIGlmICh0KSB7XG4gICAgICAgIHRva2VuVHlwZSA9IHQudHlwZTtcbiAgICAgICAgdG9rZW5WYWx1ZSA9IHQudmFsdWU7XG4gICAgICAgIHBvcyArPSB0b2tlblZhbHVlLmxlbmd0aDtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCF0b2tlblR5cGUpIHtcbiAgICAgIHRva2VuVHlwZSA9IFVOS05PV047XG4gICAgICB0b2tlblZhbHVlID0gZnhbcG9zXTtcbiAgICAgIHBvcysrO1xuICAgIH1cblxuICAgIGNvbnN0IHRva2VuID0ge1xuICAgICAgdHlwZTogdG9rZW5UeXBlLFxuICAgICAgdmFsdWU6IHRva2VuVmFsdWUsXG4gICAgICAuLi4od2l0aExvY2F0aW9uID8geyBsb2M6IFsgc3RhcnRQb3MsIHBvcyBdIH0gOiB7fSlcbiAgICB9O1xuXG4gICAgLy8gbWFrZSBhIG5vdGUgaWYgd2UgZm91bmQgYSBsZXQvbGFtYmRhIGNhbGxcbiAgICBpZiAobGFzdFRva2VuICYmIGxhc3RUb2tlbi50eXBlID09PSBGVU5DVElPTiAmJiB0b2tlblZhbHVlID09PSAnKCcpIHtcbiAgICAgIGNvbnN0IGxhc3RMQyA9IGxhc3RUb2tlbi52YWx1ZS50b0xvd2VyQ2FzZSgpO1xuICAgICAgaWYgKGxhc3RMQyA9PT0gJ2xhbWJkYScgfHwgbGFzdExDID09PSAnbGV0Jykge1xuICAgICAgICBsZXRPckxhbWJkYSsrO1xuICAgICAgfVxuICAgIH1cbiAgICAvLyBtYWtlIGEgbm90ZSBpZiB3ZSBmb3VuZCBhIFIgb3IgQyB1bmtub3duXG4gICAgaWYgKHRva2VuVHlwZSA9PT0gVU5LTk9XTikge1xuICAgICAgY29uc3QgdmFsTEMgPSB0b2tlblZhbHVlLnRvTG93ZXJDYXNlKCk7XG4gICAgICB1bmtub3duUkMgKz0gKHZhbExDID09PSAncicgfHwgdmFsTEMgPT09ICdjJykgPyAxIDogMDtcbiAgICB9XG5cbiAgICAvLyBjaGVjayBmb3IgdGVybWluYXRpb25cbiAgICBpZiAodG9rZW5UeXBlID09PSBTVFJJTkcpIHtcbiAgICAgIGNvbnN0IGwgPSB0b2tlblZhbHVlLmxlbmd0aDtcbiAgICAgIGlmICh0b2tlblZhbHVlID09PSAnXCJcIicpIHtcbiAgICAgICAgLy8gY29tbW9uIGNhc2UgdGhhdCBJUyB0ZXJtaW5hdGVkXG4gICAgICB9XG4gICAgICBlbHNlIGlmICh0b2tlblZhbHVlID09PSAnXCInIHx8IHRva2VuVmFsdWVbbCAtIDFdICE9PSAnXCInKSB7XG4gICAgICAgIHRva2VuLnVudGVybWluYXRlZCA9IHRydWU7XG4gICAgICB9XG4gICAgICBlbHNlIGlmICh0b2tlblZhbHVlICE9PSAnXCJcIicgJiYgdG9rZW5WYWx1ZVtsIC0gMl0gPT09ICdcIicpIHtcbiAgICAgICAgbGV0IHAgPSBsIC0gMTtcbiAgICAgICAgd2hpbGUgKHRva2VuVmFsdWVbcF0gPT09ICdcIicpIHsgcC0tOyB9XG4gICAgICAgIGNvbnN0IGF0U3RhcnQgPSAocCArIDEpO1xuICAgICAgICBjb25zdCBvZGROdW0gPSAoKGwgLSBwICsgMSkgJSAyID09PSAwKTtcbiAgICAgICAgaWYgKCFhdFN0YXJ0IF4gb2RkTnVtKSB7XG4gICAgICAgICAgdG9rZW4udW50ZXJtaW5hdGVkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChuZWdhdGl2ZU51bWJlcnMgJiYgdG9rZW5UeXBlID09PSBOVU1CRVIpIHtcbiAgICAgIGNvbnN0IGxhc3QxID0gbGFzdFRva2VuO1xuICAgICAgLy8gZG8gd2UgaGF2ZSBhIG51bWJlciBwcmVjZWRlZCBieSBhIG1pbnVzP1xuICAgICAgaWYgKGxhc3QxICYmIGlzVHlwZShsYXN0MSwgT1BFUkFUT1IpICYmIGxhc3QxLnZhbHVlID09PSAnLScpIHtcbiAgICAgICAgLy8gbWlzc2luZyB0YWlsMSBtZWFucyB3ZSBhcmUgYXQgdGhlIHN0YXJ0IG9mIHRoZSBzdHJlYW1cbiAgICAgICAgaWYgKFxuICAgICAgICAgICF0YWlsMSB8fFxuICAgICAgICAgIGlzVHlwZSh0YWlsMSwgRlhfUFJFRklYKSB8fFxuICAgICAgICAgICFjYXVzZXNCaW5hcnlNaW51cyh0YWlsMSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgY29uc3QgbWludXMgPSB0b2tlbnMucG9wKCk7XG4gICAgICAgICAgdG9rZW4udmFsdWUgPSAnLScgKyB0b2tlblZhbHVlO1xuICAgICAgICAgIGlmICh3aXRoTG9jYXRpb24pIHtcbiAgICAgICAgICAgIC8vIGVuc3VyZSBvZmZzZXRzIGFyZSB1cCB0byBkYXRlXG4gICAgICAgICAgICB0b2tlbi5sb2NbMF0gPSBtaW51cy5sb2NbMF07XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIG5leHQgc3RlcCB0cmllcyB0byBjb3VudGVyIHRoZSBzY3Jld2luZyBhcm91bmQgd2l0aCB0aGUgdGFpbGluZ1xuICAgICAgICAgIC8vIGl0IHNob3VsZCBiZSBjb3JyZWN0IGFnYWluIG9uY2Ugd2UgcHVzaFRva2VuKClcbiAgICAgICAgICB0YWlsMCA9IHRhaWwxO1xuICAgICAgICAgIGxhc3RUb2tlbiA9IHRva2Vuc1t0b2tlbnMubGVuZ3RoIC0gMV07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBwdXNoVG9rZW4odG9rZW4pO1xuICB9XG5cbiAgLy8gaWYgd2UgZW5jb3VudGVyZWQgYm90aCBhIExBTUJEQS9MRVQgY2FsbCwgYW5kIHVua25vd24gJ3InIG9yICdjJyB0b2tlbnNcbiAgLy8gd2UnbGwgdHVybiB0aGUgdW5rbm93biB0b2tlbnMgaW50byBuYW1lcyB3aXRoaW4gdGhlIGNhbGwuXG4gIGlmICh1bmtub3duUkMgJiYgbGV0T3JMYW1iZGEpIHtcbiAgICBmaXhSQ05hbWVzKHRva2Vucyk7XG4gIH1cblxuICAvLyBBbnkgT1BFUkFUT1JfVFJJTSB0b2tlbnMgaGF2ZSBiZWVuIGluZGV4ZWQgYWxyZWFkeSwgdGhleSBub3cgbmVlZCB0byBiZVxuICAvLyBlaXRoZXIgdHVybmVkIGludG8gT1BFUkFUT1JzIG9yIFVOS05PV05zLiBUcmltIG9wZXJhdG9ycyBhcmUgb25seSBhbGxvd2VkXG4gIC8vIGJldHdlZW4gdHdvIFJFRl9SQU5HRSB0b2tlbnMgYXMgdGhleSBhcmUgbm90IHZhbGlkIGluIGV4cHJlc3Npb25zIGFzIGZ1bGxcbiAgLy8gb3BlcmF0b3JzLlxuICBmb3IgKGNvbnN0IGluZGV4IG9mIHRyaW1PcHMpIHtcbiAgICBjb25zdCBiZWZvcmUgPSB0b2tlbnNbaW5kZXggLSAxXTtcbiAgICBjb25zdCBhZnRlciA9IHRva2Vuc1tpbmRleCAtIDFdO1xuICAgIGlmIChiZWZvcmUgJiYgYmVmb3JlLnR5cGUgPT09IFJFRl9SQU5HRSAmJiBhZnRlciAmJiBhZnRlci50eXBlID09PSBSRUZfUkFOR0UpIHtcbiAgICAgIHRva2Vuc1tpbmRleF0udHlwZSA9IE9QRVJBVE9SO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIHRva2Vuc1tpbmRleF0udHlwZSA9IFVOS05PV047XG4gICAgfVxuICB9XG5cbiAgaWYgKG1lcmdlUmVmcykge1xuICAgIHJldHVybiBtZXJnZVJlZlRva2Vucyh0b2tlbnMpO1xuICB9XG5cbiAgcmV0dXJuIHRva2Vucztcbn1cblxuLyoqXG4gKiBCcmVha3MgYSBzdHJpbmcgZm9ybXVsYSBpbnRvIGEgbGlzdCBvZiB0b2tlbnMuXG4gKlxuICogVGhlIHJldHVybmVkIG91dHB1dCB3aWxsIGJlIGFuIGFycmF5IG9mIG9iamVjdHMgcmVwcmVzZW50aW5nIHRoZSB0b2tlbnM6XG4gKlxuICogYGBganNcbiAqIFtcbiAqICAgeyB0eXBlOiBGWF9QUkVGSVgsIHZhbHVlOiAnPScgfSxcbiAqICAgeyB0eXBlOiBGVU5DVElPTiwgdmFsdWU6ICdTVU0nIH0sXG4gKiAgIHsgdHlwZTogT1BFUkFUT1IsIHZhbHVlOiAnKCcgfSxcbiAqICAgeyB0eXBlOiBSRUZfUkFOR0UsIHZhbHVlOiAnQTE6QjInIH0sXG4gKiAgIHsgdHlwZTogT1BFUkFUT1IsIHZhbHVlOiAnKScgfVxuICogXVxuICogYGBgXG4gKlxuICogVG9rZW4gdHlwZXMgbWF5IGJlIGZvdW5kIGFzIGFuIE9iamVjdCBhcyB0aGVcbiAqIFtgdG9rZW5UeXBlc2AgZXhwb3J0XXtAbGluayB0b2tlblR5cGVzfSBvbiB0aGUgcGFja2FnZVxuICogKGBpbXBvcnQge3Rva2VuVHlwZXN9IGZyb20gJ0Bib3JnYXIvZngnO2ApLlxuICpcbiAqIFRvIHN1cHBvcnQgc3ludGF4IGhpZ2hsaWdodGluZyBhcyB5b3UgdHlwZSwgYFNUUklOR2AgdG9rZW5zIGFyZSBhbGxvd2VkIHRvIGJlXG4gKiBcInVudGVybWluYXRlZFwiLiBGb3IgZXhhbXBsZSwgdGhlIGluY29tcGxldGUgZm9ybXVsYSBgPVwiSGVsbG8gd29ybGRgIHdvdWxkIGJlXG4gKiB0b2tlbml6ZWQgYXM6XG4gKlxuICogYGBganNcbiAqIFtcbiAqICAgeyB0eXBlOiBGWF9QUkVGSVgsIHZhbHVlOiAnPScgfSxcbiAqICAgeyB0eXBlOiBTVFJJTkcsIHZhbHVlOiAnXCJIZWxsbyB3b3JsZCcsIHVudGVybWluYXRlZDogdHJ1ZSB9LFxuICogXVxuICogYGBgXG4gKlxuICogQHNlZSB0b2tlblR5cGVzXG4gKiBAcGFyYW0ge3N0cmluZ30gZm9ybXVsYSBBbiBFeGNlbCBmb3JtdWxhIHN0cmluZyAoYW4gRXhjZWwgZXhwcmVzc2lvbikgb3IgYW4gYXJyYXkgb2YgdG9rZW5zLlxuICogQHBhcmFtIHtvYmplY3R9IFtvcHRpb25zPXt9XSAgT3B0aW9uc1xuICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy5hbGxvd1Rlcm5hcnk9ZmFsc2VdICBFbmFibGVzIHRoZSByZWNvZ25pdGlvbiBvZiB0ZXJuYXJ5IHJhbmdlcyBpbiB0aGUgc3R5bGUgb2YgYEExOkFgIG9yIGBBMToxYC4gVGhlc2UgYXJlIHN1cHBvcnRlZCBieSBHb29nbGUgU2hlZXRzIGJ1dCBub3QgRXhjZWwuIFNlZTogUmVmZXJlbmNlcy5tZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMubmVnYXRpdmVOdW1iZXJzPXRydWVdICBNZXJnZXMgdW5hcnkgbWludXNlcyB3aXRoIHRoZWlyIGltbWVkaWF0ZWx5IGZvbGxvd2luZyBudW1iZXIgdG9rZW5zIChgLWAsYDFgKSA9PiBgLTFgIChhbHRlcm5hdGl2ZWx5IHRoZXNlIHdpbGwgYmUgdW5hcnkgb3BlcmF0aW9ucyBpbiB0aGUgdHJlZSkuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLnIxYzE9ZmFsc2VdICBSYW5nZXMgYXJlIGV4cGVjdGVkIHRvIGJlIGluIHRoZSBSMUMxIHN0eWxlIGZvcm1hdCByYXRoZXIgdGhhbiB0aGUgbW9yZSBwb3B1bGFyIEExIHN0eWxlLlxuICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy53aXRoTG9jYXRpb249dHJ1ZV0gIE5vZGVzIHdpbGwgaW5jbHVkZSBzb3VyY2UgcG9zaXRpb24gb2Zmc2V0cyB0byB0aGUgdG9rZW5zOiBgeyBsb2M6IFsgc3RhcnQsIGVuZCBdIH1gXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLm1lcmdlUmVmcz10cnVlXSAgU2hvdWxkIHJhbmdlcyBiZSByZXR1cm5lZCBhcyB3aG9sZSByZWZlcmVuY2VzIChgU2hlZXQxIUExOkIyYCkgb3IgYXMgc2VwYXJhdGUgdG9rZW5zIGZvciBlYWNoIHBhcnQ6IChgU2hlZXQxYCxgIWAsYEExYCxgOmAsYEIyYCkuIFRoaXMgaXMgdGhlIHNhbWUgYXMgY2FsbGluZyBbYG1lcmdlUmVmVG9rZW5zYF0oI21lcmdlUmVmVG9rZW5zKVxuICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy54bHN4PWZhbHNlXSAgRW5hYmxlcyBhIGBbMV1TaGVldDEhQTFgIG9yIGBbMV0hbmFtZWAgc3ludGF4IGZvcm0gZm9yIGV4dGVybmFsIHdvcmtib29rcyBmb3VuZCBvbmx5IGluIFhMU1ggZmlsZXMuXG4gKiBAcmV0dXJucyB7QXJyYXk8VG9rZW4+fSBBbiBBU1Qgb2Ygbm9kZXNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRva2VuaXplIChmb3JtdWxhLCBvcHRpb25zID0ge30pIHtcbiAgcmV0dXJuIGdldFRva2Vucyhmb3JtdWxhLCBsZXhlcnMsIG9wdGlvbnMpO1xufVxuIiwiaW1wb3J0IHtcbiAgUkVGX1JBTkdFLCBSRUZfQkVBTSwgUkVGX05BTUVELCBSRUZfVEVSTkFSWSwgUkVGX1NUUlVDVCxcbiAgRlhfUFJFRklYLCBXSElURVNQQUNFLCBORVdMSU5FLFxuICBGVU5DVElPTiwgT1BFUkFUT1IsXG4gIEVSUk9SLCBTVFJJTkcsIE5VTUJFUiwgQk9PTEVBTlxufSBmcm9tICcuL2NvbnN0YW50cy5qcyc7XG5cbi8qKlxuICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBzcGVjaWZpZWQgdG9rZW4gaXMgYSByYW5nZS5cbiAqXG4gKiBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgaW5wdXQgaXMgYSB0b2tlbiB0aGF0IGhhcyBhIHR5cGUgb2YgZWl0aGVyIFJFRl9SQU5HRVxuICogKGBBMWAgb3IgYEExOkIyYCksIFJFRl9URVJOQVJZIChgQTE6QWAsIGBBMToxYCwgYDE6QTFgLCBvciBgQTpBMWApLCBvclxuICogUkVGX0JFQU0gKGBBOkFgIG9yIGAxOjFgKS4gSW4gYWxsIG90aGVyIGNhc2VzIGBmYWxzZWAgaXMgcmV0dXJuZWQuXG4gKlxuICogQHBhcmFtIHthbnl9IHRva2VuIEEgdG9rZW5cbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHRoZSBzcGVjaWZpZWQgdG9rZW4gaXMgcmFuZ2UsIEZhbHNlIG90aGVyd2lzZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzUmFuZ2UgKHRva2VuKSB7XG4gIHJldHVybiAhIXRva2VuICYmIChcbiAgICB0b2tlbi50eXBlID09PSBSRUZfUkFOR0UgfHxcbiAgICB0b2tlbi50eXBlID09PSBSRUZfQkVBTSB8fFxuICAgIHRva2VuLnR5cGUgPT09IFJFRl9URVJOQVJZXG4gICk7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBzcGVjaWZpZWQgdG9rZW4gaXMgYSByZWZlcmVuY2UuXG4gKlxuICogUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGlucHV0IGlzIGEgdG9rZW4gb2YgdHlwZSBSRUZfUkFOR0UgKGBBMWAgb3IgYEExOkIyYCksXG4gKiBSRUZfVEVSTkFSWSAoYEExOkFgLCBgQTE6MWAsIGAxOkExYCwgb3IgYEE6QTFgKSwgUkVGX0JFQU0gKGBBOkFgIG9yIGAxOjFgKSxcbiAqIG9yIFJFRl9OQU1FRCAoYG15cmFuZ2VgKS4gSW4gYWxsIG90aGVyIGNhc2VzIGBmYWxzZWAgaXMgcmV0dXJuZWQuXG4gKlxuICogQHBhcmFtIHthbnl9IHRva2VuIFRoZSB0b2tlblxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdGhlIHNwZWNpZmllZCB0b2tlbiBpcyByZWZlcmVuY2UsIEZhbHNlIG90aGVyd2lzZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzUmVmZXJlbmNlICh0b2tlbikge1xuICByZXR1cm4gISF0b2tlbiAmJiAoXG4gICAgdG9rZW4udHlwZSA9PT0gUkVGX1JBTkdFIHx8XG4gICAgdG9rZW4udHlwZSA9PT0gUkVGX0JFQU0gfHxcbiAgICB0b2tlbi50eXBlID09PSBSRUZfVEVSTkFSWSB8fFxuICAgIHRva2VuLnR5cGUgPT09IFJFRl9TVFJVQ1QgfHxcbiAgICB0b2tlbi50eXBlID09PSBSRUZfTkFNRURcbiAgKTtcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIHNwZWNpZmllZCB0b2tlbiBpcyBhIGxpdGVyYWwuXG4gKlxuICogUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGlucHV0IGlzIGEgdG9rZW4gb2YgdHlwZSBCT09MRUFOIChgVFJVRWAgb3IgYEZBTFNFYCksXG4gKiBFUlJPUiAoYCNWQUxVRSFgKSwgTlVNQkVSICgxMjMuNCksIG9yIFNUUklORyAoYFwibG9yZW0gaXBzdW1cImApLiBJbiBhbGwgb3RoZXJcbiAqIGNhc2VzIGBmYWxzZWAgaXMgcmV0dXJuZWQuXG4gKlxuICogQHBhcmFtIHthbnl9IHRva2VuIFRoZSB0b2tlblxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdGhlIHNwZWNpZmllZCB0b2tlbiBpcyBsaXRlcmFsLCBGYWxzZSBvdGhlcndpc2UuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0xpdGVyYWwgKHRva2VuKSB7XG4gIHJldHVybiAhIXRva2VuICYmIChcbiAgICB0b2tlbi50eXBlID09PSBCT09MRUFOIHx8XG4gICAgdG9rZW4udHlwZSA9PT0gRVJST1IgfHxcbiAgICB0b2tlbi50eXBlID09PSBOVU1CRVIgfHxcbiAgICB0b2tlbi50eXBlID09PSBTVFJJTkdcbiAgKTtcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIHNwZWNpZmllZCB0b2tlbiBpcyBhbiBlcnJvci5cbiAqXG4gKiBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgaW5wdXQgaXMgYSB0b2tlbiBvZiB0eXBlIEVSUk9SIChgI1ZBTFVFIWApLiBJbiBhbGxcbiAqIG90aGVyIGNhc2VzIGBmYWxzZWAgaXMgcmV0dXJuZWQuXG4gKlxuICogQHBhcmFtIHthbnl9IHRva2VuIFRoZSB0b2tlblxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdGhlIHNwZWNpZmllZCB0b2tlbiBpcyBlcnJvciwgRmFsc2Ugb3RoZXJ3aXNlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNFcnJvciAodG9rZW4pIHtcbiAgcmV0dXJuICEhdG9rZW4gJiYgdG9rZW4udHlwZSA9PT0gRVJST1I7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBzcGVjaWZpZWQgdG9rZW4gaXMgd2hpdGVzcGFjZS5cbiAqXG4gKiBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgaW5wdXQgaXMgYSB0b2tlbiBvZiB0eXBlIFdISVRFU1BBQ0UgKGAgYCkgb3JcbiAqIE5FV0xJTkUgKGBcXG5gKS4gSW4gYWxsIG90aGVyIGNhc2VzIGBmYWxzZWAgaXMgcmV0dXJuZWQuXG4gKlxuICogQHBhcmFtIHthbnl9IHRva2VuIFRoZSB0b2tlblxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdGhlIHNwZWNpZmllZCB0b2tlbiBpcyB3aGl0ZXNwYWNlLCBGYWxzZSBvdGhlcndpc2UuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1doaXRlc3BhY2UgKHRva2VuKSB7XG4gIHJldHVybiAhIXRva2VuICYmIChcbiAgICB0b2tlbi50eXBlID09PSBXSElURVNQQUNFIHx8XG4gICAgdG9rZW4udHlwZSA9PT0gTkVXTElORVxuICApO1xufVxuXG4vKipcbiAqIERldGVybWluZXMgd2hldGhlciB0aGUgc3BlY2lmaWVkIHRva2VuIGlzIGEgZnVuY3Rpb24uXG4gKlxuICogUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGlucHV0IGlzIGEgdG9rZW4gb2YgdHlwZSBGVU5DVElPTi5cbiAqIEluIGFsbCBvdGhlciBjYXNlcyBgZmFsc2VgIGlzIHJldHVybmVkLlxuICpcbiAqIEBwYXJhbSB7YW55fSB0b2tlbiBUaGUgdG9rZW5cbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHRoZSBzcGVjaWZpZWQgdG9rZW4gaXMgZnVuY3Rpb24sIEZhbHNlIG90aGVyd2lzZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzRnVuY3Rpb24gKHRva2VuKSB7XG4gIHJldHVybiAhIXRva2VuICYmIHRva2VuLnR5cGUgPT09IEZVTkNUSU9OO1xufVxuXG4vKipcbiAqIFJldHVybnMgYHRydWVgIGlmIHRoZSBpbnB1dCBpcyBhIHRva2VuIG9mIHR5cGUgRlhfUFJFRklYIChsZWFkaW5nIGA9YCBpblxuICogZm9ybXVsYSkuIEluIGFsbCBvdGhlciBjYXNlcyBgZmFsc2VgIGlzIHJldHVybmVkLlxuICpcbiAqIEBwYXJhbSB7YW55fSB0b2tlbiBUaGUgdG9rZW5cbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHRoZSBzcGVjaWZpZWQgdG9rZW4gaXMgZWZmZWN0cyBwcmVmaXgsIEZhbHNlIG90aGVyd2lzZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzRnhQcmVmaXggKHRva2VuKSB7XG4gIHJldHVybiAhIXRva2VuICYmIHRva2VuLnR5cGUgPT09IEZYX1BSRUZJWDtcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIHNwZWNpZmllZCB0b2tlbiBpcyBhbiBvcGVyYXRvci5cbiAqXG4gKiBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgaW5wdXQgaXMgYSB0b2tlbiBvZiB0eXBlIE9QRVJBVE9SIChgK2Agb3IgYDpgKS4gSW4gYWxsXG4gKiBvdGhlciBjYXNlcyBgZmFsc2VgIGlzIHJldHVybmVkLlxuICpcbiAqIEBwYXJhbSB7YW55fSB0b2tlbiBUaGUgdG9rZW5cbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHRoZSBzcGVjaWZpZWQgdG9rZW4gaXMgb3BlcmF0b3IsIEZhbHNlIG90aGVyd2lzZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzT3BlcmF0b3IgKHRva2VuKSB7XG4gIHJldHVybiAhIXRva2VuICYmIHRva2VuLnR5cGUgPT09IE9QRVJBVE9SO1xufVxuIiwiLypcbiAqIEV4Y2VsIGZvcm11bGEgbGFuZ3VhZ2UgcGFyc2VyXG4gKlxuICogVGhpcyBwYXJzZXIgaXMgYSBUb3AtRG93biBPcGVyYXRvciBQcmVjZWRlbmNlIChQcmF0dCkgcGFyc2VyLiBJdCdzIGJhc2VkIG9uXG4gKiB0aGUgb25lIHRoYXQgRG91Z2xhcyBDcm9ja2ZvcmQgZGVzY3JpYmVzIGluIENoYXB0ZXIgOSBvZiB0aGUgTydSZWlsbHkgYm9va1xuICogQmV1dGlmdWwgQ29kZSAoaHR0cDovL2Nyb2NrZm9yZC5jb20vamF2YXNjcmlwdC90ZG9wL3Rkb3AuaHRtbCkuXG4gKlxuICogVGhlIHBhcnNlciBoYW5kbGVzIG1vc3QgYmFzaWMgdGhpbmdzIEV4Y2VsL1NoZWV0cyBkbyBleGNlcHQ6XG4gKiBgU2hlZXQxOlNoZWV0MiFBMWAgcmVmZXJlbmNlcyBjcm9zcyBjb250ZXh0cyAoM0QgcmVmZXJlbmNlcylcbiAqL1xuaW1wb3J0IHtcbiAgaXNSZWZlcmVuY2UsXG4gIGlzTGl0ZXJhbCxcbiAgaXNGdW5jdGlvbixcbiAgaXNXaGl0ZXNwYWNlLFxuICBpc0Z4UHJlZml4LFxuICBpc09wZXJhdG9yLFxuICBpc0Vycm9yXG59IGZyb20gJy4vaXNUeXBlLmpzJztcbmltcG9ydCB7XG4gIFVOQVJZLFxuICBCSU5BUlksXG4gIFJFRkVSRU5DRSxcbiAgTElURVJBTCxcbiAgRVJST1JfTElURVJBTCxcbiAgQ0FMTCxcbiAgTEFNQkRBLFxuICBBUlJBWSxcbiAgSURFTlRJRklFUixcbiAgTlVNQkVSLFxuICBCT09MRUFOLFxuICBFUlJPUixcbiAgU1RSSU5HLFxuICBMRVQsXG4gIExFVF9ERUNMLFxuICBSRUZfTkFNRUQsXG4gIFJFRl9TVFJVQ1QsXG4gIFJFRl9CRUFNXG59IGZyb20gJy4vY29uc3RhbnRzLmpzJztcblxuaW1wb3J0IHsgdG9rZW5pemUgfSBmcm9tICcuL2xleGVyLmpzJztcblxuY29uc3QgRU5EID0gJyhFTkQpJztcbmNvbnN0IEZVTkNUSU9OID0gJyhGVU5DVElPTiknO1xuY29uc3QgV0hJVEVTUEFDRSA9ICcoV0hJVEVTUEFDRSknO1xuXG5jb25zdCByZWZGdW5jdGlvbnMgPSBbXG4gICdBTkNIT1JBUlJBWScsXG4gICdDSE9PU0UnLFxuICAnRFJPUCcsXG4gICdJRicsXG4gICdJRlMnLFxuICAnSU5ERVgnLFxuICAnSU5ESVJFQ1QnLFxuICAnTEFNQkRBJyxcbiAgJ0xFVCcsXG4gICdPRkZTRVQnLFxuICAnUkVEVUNFJyxcbiAgJ1NJTkdMRScsXG4gICdTV0lUQ0gnLFxuICAnVEFLRScsXG4gICdUUklNUkFOR0UnLFxuICAnWExPT0tVUCdcbl07XG5cbmNvbnN0IHN5bWJvbFRhYmxlID0ge307XG5sZXQgY3VycmVudE5vZGU7XG5sZXQgdG9rZW5zO1xubGV0IHRva2VuSW5kZXg7XG5sZXQgcGVybWl0QXJyYXlSYW5nZXMgPSBmYWxzZTtcbmxldCBwZXJtaXRBcnJheUNhbGxzID0gZmFsc2U7XG5sZXQgbG9vc2VSZWZDYWxscyA9IGZhbHNlO1xuXG5jb25zdCBpc1JlZmVyZW5jZUZ1bmN0aW9uTmFtZSA9IGZuTmFtZSA9PiB7XG4gIHJldHVybiBsb29zZVJlZkNhbGxzIHx8IHJlZkZ1bmN0aW9ucy5pbmNsdWRlcyhmbk5hbWUudG9VcHBlckNhc2UoKSk7XG59O1xuXG5jb25zdCBpc1JlZmVyZW5jZVRva2VuID0gKHRva2VuLCBhbGxvd09wZXJhdG9ycyA9IGZhbHNlKSA9PiB7XG4gIGNvbnN0IHZhbHVlID0gKHRva2VuICYmIHRva2VuLnZhbHVlKSArICcnO1xuICBpZiAoaXNSZWZlcmVuY2UodG9rZW4pKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgaWYgKGFsbG93T3BlcmF0b3JzICYmIGlzT3BlcmF0b3IodG9rZW4pICYmICh2YWx1ZSA9PT0gJzonIHx8IHZhbHVlID09PSAnLCcgfHwgIXZhbHVlLnRyaW0oKSkpIHtcbiAgICByZXR1cm4gdHJ1ZTsgLy8gam9pbiwgdW5pb24sIGludGVyc2VjdGlvblxuICB9XG4gIGlmIChpc0Z1bmN0aW9uKHRva2VuKSAmJiBpc1JlZmVyZW5jZUZ1bmN0aW9uTmFtZSh2YWx1ZSkpIHtcbiAgICByZXR1cm4gdHJ1ZTsgLy8gZnVuY3Rpb24gdGhhdCB5aWVsZHMgcmVmZXJlbmNlXG4gIH1cbiAgaWYgKGlzRXJyb3IodG9rZW4pICYmIHZhbHVlID09PSAnI1JFRiEnKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufTtcblxuY29uc3QgaXNSZWZlcmVuY2VOb2RlID0gbm9kZSA9PiB7XG4gIHJldHVybiAoISFub2RlKSAmJiAoXG4gICAgKG5vZGUudHlwZSA9PT0gUkVGRVJFTkNFKSB8fFxuICAgICgobm9kZS50eXBlID09PSBFUlJPUl9MSVRFUkFMIHx8IG5vZGUudHlwZSA9PT0gRVJST1IpICYmIG5vZGUudmFsdWUgPT09ICcjUkVGIScpIHx8XG4gICAgKG5vZGUudHlwZSA9PT0gQklOQVJZICYmIChcbiAgICAgIG5vZGUub3BlcmF0b3IgPT09ICc6JyB8fFxuICAgICAgbm9kZS5vcGVyYXRvciA9PT0gJyAnIHx8XG4gICAgICBub2RlLm9wZXJhdG9yID09PSAnLCcpXG4gICAgKSB8fFxuICAgIGlzUmVmZXJlbmNlKG5vZGUpIHx8XG4gICAgKG5vZGUudHlwZSA9PT0gQ0FMTCAmJiBpc1JlZmVyZW5jZUZ1bmN0aW9uTmFtZShub2RlLmNhbGxlZS5uYW1lKSlcbiAgKTtcbn07XG5cbmZ1bmN0aW9uIGhhbHQgKG1lc3NhZ2UsIGF0SW5kZXggPSBudWxsKSB7XG4gIGNvbnN0IGVyciA9IG5ldyBFcnJvcihtZXNzYWdlKTtcbiAgZXJyLnNvdXJjZSA9IHRva2Vucy5tYXAoZCA9PiBkLnZhbHVlKS5qb2luKCcnKTtcbiAgZXJyLnNvdXJjZU9mZnNldCA9IHRva2Vuc1xuICAgIC5zbGljZSgwLCBhdEluZGV4ID8/IHRva2VuSW5kZXgpXG4gICAgLnJlZHVjZSgoYSwgZCkgPT4gYSArIGQudmFsdWUubGVuZ3RoLCAwKTtcbiAgdGhyb3cgZXJyO1xufVxuXG4vLyBBMSBBMSB8IEExIChBMSkgfCBBMSAoKEExKSkgfCBBMSAoIChBMSkgKSB8IC4uLlxuZnVuY3Rpb24gcmVmSXNVcGNvbWluZyAoYWxsb3dPcGVyYXRvcnMgPSBmYWxzZSkge1xuICBsZXQgaSA9IHRva2VuSW5kZXg7XG4gIGxldCBuZXh0O1xuICBkbyB7XG4gICAgbmV4dCA9IHRva2Vuc1srK2ldO1xuICB9XG4gIHdoaWxlIChcbiAgICBuZXh0ICYmIChcbiAgICAgIGlzV2hpdGVzcGFjZShuZXh0KSB8fFxuICAgICAgKGlzT3BlcmF0b3IobmV4dCkgJiYgbmV4dC52YWx1ZSA9PT0gJygnKVxuICAgIClcbiAgKTtcbiAgcmV0dXJuIGlzUmVmZXJlbmNlVG9rZW4obmV4dCwgYWxsb3dPcGVyYXRvcnMpO1xufVxuXG5mdW5jdGlvbiBhZHZhbmNlIChleHBlY3ROZXh0ID0gbnVsbCwgbGVmdE5vZGUgPSBudWxsKSB7XG4gIGlmIChleHBlY3ROZXh0ICYmIGV4cGVjdE5leHQgIT09IGN1cnJlbnROb2RlLmlkKSB7XG4gICAgaGFsdChgRXhwZWN0ZWQgJHtleHBlY3ROZXh0fSBidXQgZ290ICR7Y3VycmVudE5vZGUuaWR9YCk7XG4gIH1cbiAgLy8gbG9vayBhaGVhZCB0byBzZWUgaWYgd2UgaGF2ZSAoICggXCIgXCIsIFwiKFwiICkrIFJFRiApXG4gIGlmIChpc1doaXRlc3BhY2UodG9rZW5zW3Rva2VuSW5kZXhdKSkge1xuICAgIC8vIHBvdGVudGlhbCBpbnRlcnNlY3Rpb24gb3BlcmF0aW9uIChzbyBkb24ndCBhbGxvdyBvcGVyYXRvcnMgYXMgdXBjb21pbmcpXG4gICAgY29uc3QgaGF2ZVJlZiA9IGlzUmVmZXJlbmNlTm9kZShsZWZ0Tm9kZSk7XG4gICAgY29uc3QgcG9zc2libGVXU09wID0gaGF2ZVJlZiAmJiByZWZJc1VwY29taW5nKGZhbHNlKTtcbiAgICBjb25zdCBuZXh0SXNDYWxsID0gaGF2ZVJlZiAmJiB0b2tlbnNbdG9rZW5JbmRleCArIDFdICYmIHRva2Vuc1t0b2tlbkluZGV4ICsgMV0udmFsdWUgPT09ICcoJztcbiAgICBpZiAoIXBvc3NpYmxlV1NPcCAmJiAhbmV4dElzQ2FsbCkge1xuICAgICAgLy8gaWdub3JlIHdoaXRlc3BhY2VcbiAgICAgIHdoaWxlIChpc1doaXRlc3BhY2UodG9rZW5zW3Rva2VuSW5kZXhdKSkge1xuICAgICAgICB0b2tlbkluZGV4Kys7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIC8vIEVPVFxuICBpZiAodG9rZW5JbmRleCA+PSB0b2tlbnMubGVuZ3RoKSB7XG4gICAgY3VycmVudE5vZGUgPSBzeW1ib2xUYWJsZVtFTkRdO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IHRva2VuID0gdG9rZW5zW3Rva2VuSW5kZXhdO1xuICB0b2tlbkluZGV4ICs9IDE7XG5cbiAgaWYgKHRva2VuLnVudGVybWluYXRlZCkge1xuICAgIGhhbHQoJ0VuY291bnRlcmVkIGFuIHVudGVybWluYXRlZCB0b2tlbicpO1xuICB9XG5cbiAgbGV0IG5vZGU7XG4gIGlmIChpc09wZXJhdG9yKHRva2VuKSkge1xuICAgIG5vZGUgPSBzeW1ib2xUYWJsZVt0b2tlbi52YWx1ZV07XG4gICAgaWYgKCFub2RlKSB7XG4gICAgICBoYWx0KGBVbmtub3duIG9wZXJhdG9yICR7dG9rZW4udmFsdWV9YCk7XG4gICAgfVxuICB9XG4gIGVsc2UgaWYgKGlzV2hpdGVzcGFjZSh0b2tlbikpIHtcbiAgICBub2RlID0gc3ltYm9sVGFibGVbV0hJVEVTUEFDRV07XG4gIH1cbiAgZWxzZSBpZiAoaXNMaXRlcmFsKHRva2VuKSkge1xuICAgIG5vZGUgPSBzeW1ib2xUYWJsZVtMSVRFUkFMXTtcbiAgfVxuICBlbHNlIGlmIChpc1JlZmVyZW5jZSh0b2tlbikpIHtcbiAgICBub2RlID0gc3ltYm9sVGFibGVbUkVGRVJFTkNFXTtcbiAgfVxuICBlbHNlIGlmIChpc0Z1bmN0aW9uKHRva2VuKSkge1xuICAgIG5vZGUgPSBzeW1ib2xUYWJsZVtGVU5DVElPTl07XG4gIH1cbiAgZWxzZSB7XG4gICAgaGFsdChgVW5leHBlY3RlZCAke3Rva2VuLnR5cGV9IHRva2VuOiAke3Rva2VuLnZhbHVlfWApO1xuICB9XG5cbiAgY3VycmVudE5vZGUgPSBPYmplY3QuY3JlYXRlKG5vZGUpO1xuICBjdXJyZW50Tm9kZS50eXBlID0gdG9rZW4udHlwZTtcbiAgY3VycmVudE5vZGUudmFsdWUgPSB0b2tlbi52YWx1ZTtcbiAgaWYgKHRva2VuLmxvYykge1xuICAgIGN1cnJlbnROb2RlLmxvYyA9IFsgLi4udG9rZW4ubG9jIF07XG4gIH1cbiAgcmV0dXJuIGN1cnJlbnROb2RlO1xufVxuXG5mdW5jdGlvbiBleHByZXNzaW9uIChyYnApIHtcbiAgbGV0IHQgPSBjdXJyZW50Tm9kZTtcbiAgYWR2YW5jZShudWxsLCB0KTtcbiAgbGV0IGxlZnQgPSB0Lm51ZCgpO1xuICB3aGlsZSAocmJwIDwgY3VycmVudE5vZGUubGJwKSB7XG4gICAgdCA9IGN1cnJlbnROb2RlO1xuICAgIGFkdmFuY2UobnVsbCwgdCk7XG4gICAgbGVmdCA9IHQubGVkKGxlZnQpO1xuICB9XG4gIHJldHVybiBsZWZ0O1xufVxuXG5jb25zdCBvcmlnaW5hbF9zeW1ib2wgPSB7XG4gIC8vIG51bGwgZGVub3RhdGlvblxuICBudWQ6ICgpID0+IGhhbHQoJ0ludmFsaWQgc3ludGF4JyksIC8vIFVuZGVmaW5lZFxuICAvLyBsZWZ0IGRlbm90YXRpb25cbiAgbGVkOiAoKSA9PiBoYWx0KCdNaXNzaW5nIG9wZXJhdG9yJylcbn07XG5cbi8vIGJwID0gYmluZGluZyBwb3dlclxuZnVuY3Rpb24gc3ltYm9sIChpZCwgYnAgPSAwKSB7XG4gIGxldCBzID0gc3ltYm9sVGFibGVbaWRdO1xuICBpZiAocykge1xuICAgIGlmIChicCA+PSBzLmxicCkge1xuICAgICAgcy5sYnAgPSBicDtcbiAgICB9XG4gIH1cbiAgZWxzZSB7XG4gICAgcyA9IHsgLi4ub3JpZ2luYWxfc3ltYm9sIH07XG4gICAgcy5pZCA9IGlkO1xuICAgIHMudmFsdWUgPSBpZDtcbiAgICBzLmxicCA9IGJwO1xuICAgIHN5bWJvbFRhYmxlW2lkXSA9IHM7XG4gIH1cbiAgcmV0dXJuIHM7XG59XG5cbmZ1bmN0aW9uIGluZml4IChpZCwgYnAsIGxlZCkge1xuICBjb25zdCBzID0gc3ltYm9sKGlkLCBicCk7XG4gIHMubGVkID0gbGVkIHx8IGZ1bmN0aW9uIChsZWZ0KSB7XG4gICAgdGhpcy50eXBlID0gQklOQVJZO1xuICAgIHRoaXMub3BlcmF0b3IgPSB0aGlzLnZhbHVlO1xuICAgIGRlbGV0ZSB0aGlzLnZhbHVlO1xuICAgIGNvbnN0IHJpZ2h0ID0gZXhwcmVzc2lvbihicCk7XG4gICAgdGhpcy5hcmd1bWVudHMgPSBbIGxlZnQsIHJpZ2h0IF07XG4gICAgaWYgKHRoaXMubG9jKSB7XG4gICAgICB0aGlzLmxvYyA9IFsgbGVmdC5sb2NbMF0sIHJpZ2h0LmxvY1sxXSBdO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfTtcbiAgcmV0dXJuIHM7XG59XG5cbmZ1bmN0aW9uIHBvc3RmaXggKGlkLCBsZWQpIHtcbiAgY29uc3QgcyA9IHN5bWJvbChpZCwgMCk7XG4gIHMubGJwID0gNzA7XG4gIHMubGVkID0gbGVkIHx8IGZ1bmN0aW9uIChsZWZ0KSB7XG4gICAgdGhpcy50eXBlID0gVU5BUlk7XG4gICAgdGhpcy5vcGVyYXRvciA9IHRoaXMudmFsdWU7XG4gICAgZGVsZXRlIHRoaXMudmFsdWU7XG4gICAgdGhpcy5hcmd1bWVudHMgPSBbIGxlZnQgXTtcbiAgICBpZiAodGhpcy5sb2MpIHtcbiAgICAgIHRoaXMubG9jWzBdID0gbGVmdC5sb2NbMF07XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9O1xuICByZXR1cm4gcztcbn1cblxuZnVuY3Rpb24gcHJlZml4IChpZCwgbnVkKSB7XG4gIGNvbnN0IHMgPSBzeW1ib2woaWQpO1xuICBzLm51ZCA9IG51ZCB8fCBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy50eXBlID0gVU5BUlk7XG4gICAgdGhpcy5vcGVyYXRvciA9IHRoaXMudmFsdWU7XG4gICAgZGVsZXRlIHRoaXMudmFsdWU7XG4gICAgY29uc3Qgc3ViZXhwciA9IGV4cHJlc3Npb24oNzApO1xuICAgIHRoaXMuYXJndW1lbnRzID0gWyBzdWJleHByIF07XG4gICAgaWYgKHRoaXMubG9jKSB7XG4gICAgICB0aGlzLmxvY1sxXSA9IHN1YmV4cHIubG9jWzFdO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfTtcbiAgcmV0dXJuIHM7XG59XG5cbmZ1bmN0aW9uIHJhbmdlSW5maXggKGlkLCBicCkge1xuICByZXR1cm4gaW5maXgoaWQsIGJwLCBmdW5jdGlvbiAobGVmdCkge1xuICAgIGlmICghaXNSZWZlcmVuY2VOb2RlKGxlZnQpKSB7XG4gICAgICBoYWx0KGBVbmV4cGVjdGVkICR7aWR9IG9wZXJhdG9yYCk7XG4gICAgfVxuICAgIGNvbnN0IHJpZ2h0ID0gZXhwcmVzc2lvbihicCk7XG4gICAgaWYgKCFpc1JlZmVyZW5jZU5vZGUocmlnaHQsIHRydWUpKSB7XG4gICAgICBoYWx0KGBVbmV4cGVjdGVkICR7Y3VycmVudE5vZGUudHlwZX0gZm9sbG93aW5nICR7dGhpcy5pZH1gKTtcbiAgICB9XG4gICAgdGhpcy50eXBlID0gQklOQVJZO1xuICAgIHRoaXMub3BlcmF0b3IgPSB0aGlzLnZhbHVlLnRyaW0oKSA/IHRoaXMudmFsdWUgOiAnICc7IC8vIGhhY2sgYXJvdW5kIHdoaXRlc3BhY2Ugb3BcbiAgICBkZWxldGUgdGhpcy52YWx1ZTtcbiAgICB0aGlzLmFyZ3VtZW50cyA9IFsgbGVmdCwgcmlnaHQgXTtcbiAgICBpZiAodGhpcy5sb2MpIHtcbiAgICAgIHRoaXMubG9jID0gWyBsZWZ0LmxvY1swXSwgcmlnaHQubG9jWzFdIF07XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9KTtcbn1cblxuc3ltYm9sKEVORCk7XG5cbi8vIHJlZmVyZW5jZSBvcGVyYXRvcnNcbnJhbmdlSW5maXgoJzonLCA4MCk7IC8vIHJhbmdlIGpvaW4vZXh0ZW5kID1CNzpPRkZTRVQoQTEsMTAsMTApXG5jb25zdCBjb21tYSA9IHJhbmdlSW5maXgoJywnLCA4MCk7IC8vIHVuaW9uID1CNzpENyxDNjpDOFxucmFuZ2VJbmZpeChXSElURVNQQUNFLCA4MCk7IC8vIGludGVyc2VjdDogPUI3OkQ3IEM2OkM4XG5cbi8vIEV4Y2VsJ3MgZ3JhbW1hciBpcyBhbWJpZ3VvdXMuIFRoaXMgdHVybnMgdGhlICwgb3BlcmF0b3IncyBsZWZ0IGJpbmRpbmdcbi8vIHBvd2VyIG9uL29mZiB3aGljaCBhbGxvd3MgdXMgdG8gdHJlYXQgLCBhcyBhIHN5bWJvbCB3aGVyZSB3ZSBuZWVkLlxuY29uc3QgdW5pb25SZWZzID0gZW5hYmxlID0+IHtcbiAgY29uc3QgY3VyclN0YXRlID0gY29tbWEubGJwID4gMDtcbiAgaWYgKGVuYWJsZSAhPSBudWxsKSB7IGNvbW1hLmxicCA9IGVuYWJsZSA/IDgwIDogMDsgfVxuICByZXR1cm4gY3VyclN0YXRlO1xufTtcblxuLy8gYXJpdGhtZXRpYyBhbmQgc3RyaW5nIG9wZXJhdGlvbnNcbnBvc3RmaXgoJyUnKTsgLy8gcGVyY2VudFxucG9zdGZpeCgnIycsIGZ1bmN0aW9uIChsZWZ0KSB7IC8vIHNwaWxsZWQgcmFuZ2UgKF94bGZuLkFOQ0hPUkFSUkFZKVxuICBpZiAoIWlzUmVmZXJlbmNlTm9kZShsZWZ0KSkge1xuICAgIGhhbHQoJyMgZXhwZWN0cyBhIHJlZmVyZW5jZScpO1xuICB9XG4gIHRoaXMudHlwZSA9IFVOQVJZO1xuICB0aGlzLm9wZXJhdG9yID0gdGhpcy52YWx1ZTtcbiAgZGVsZXRlIHRoaXMudmFsdWU7XG4gIHRoaXMuYXJndW1lbnRzID0gWyBsZWZ0IF07XG4gIHJldHVybiB0aGlzO1xufSk7IC8vIHJhbmdlXG5wcmVmaXgoJysnKTsgLy8gdW5hcnkgcGx1c1xucHJlZml4KCctJyk7IC8vIHVuYXJ5IG1pbnVzXG5wcmVmaXgoJ0AnKTsgLy8gaW1wbGljaXQgaW50ZXJzZWN0aW9uIChfeGxmbi5TSU5HTEUpXG5pbmZpeCgnXicsIDUwKTsgLy8gcG93ZXJcbmluZml4KCcqJywgNDApOyAvLyBtdWx0aXBseVxuaW5maXgoJy8nLCA0MCk7IC8vIGRpdmlkZVxuaW5maXgoJysnLCAzMCk7IC8vIGFkZFxuaW5maXgoJy0nLCAzMCk7IC8vIHN1YnRyYWN0XG5pbmZpeCgnJicsIDIwKTsgLy8gdGV4dCBjb25jYXRcblxuLy8gY29tcGFyaXNvblxuaW5maXgoJz0nLCAxMCk7XG5pbmZpeCgnPCcsIDEwKTtcbmluZml4KCc+JywgMTApO1xuaW5maXgoJzw9JywgMTApO1xuaW5maXgoJz49JywgMTApO1xuaW5maXgoJzw+JywgMTApO1xuc3ltYm9sKExJVEVSQUwpLm51ZCA9IGZ1bmN0aW9uICgpIHtcbiAgY29uc3QgeyB0eXBlLCB2YWx1ZSB9ID0gdGhpcztcbiAgdGhpcy50eXBlID0gTElURVJBTDtcbiAgdGhpcy5yYXcgPSB2YWx1ZTtcbiAgaWYgKHR5cGUgPT09IE5VTUJFUikge1xuICAgIHRoaXMudmFsdWUgPSArdmFsdWU7XG4gIH1cbiAgZWxzZSBpZiAodHlwZSA9PT0gQk9PTEVBTikge1xuICAgIHRoaXMudmFsdWUgPSB2YWx1ZS50b1VwcGVyQ2FzZSgpID09PSAnVFJVRSc7XG4gIH1cbiAgZWxzZSBpZiAodHlwZSA9PT0gRVJST1IpIHtcbiAgICB0aGlzLnR5cGUgPSBFUlJPUl9MSVRFUkFMO1xuICAgIHRoaXMudmFsdWUgPSB2YWx1ZS50b1VwcGVyQ2FzZSgpO1xuICB9XG4gIGVsc2UgaWYgKHR5cGUgPT09IFNUUklORykge1xuICAgIC8vIEZJWE1FOiB0aHJvdyBhbiBlcnJvciBpZiB0aGUgc3RyaW5nIGlzIHVudGVybWluYXRlZFxuICAgIHRoaXMudmFsdWUgPSB2YWx1ZS5zbGljZSgxLCAtMSkucmVwbGFjZSgvXCJcIi9nLCAnXCInKTtcbiAgfVxuICBlbHNlIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1Vuc3VwcG9ydGVkIGxpdGVyYWwgdHlwZTogJyArIHR5cGUpO1xuICB9XG4gIHJldHVybiB0aGlzO1xufTtcbnN5bWJvbChSRUZFUkVOQ0UpLm51ZCA9IGZ1bmN0aW9uICgpIHtcbiAgaWYgKHRoaXMudHlwZSA9PT0gUkVGX05BTUVEKSB7XG4gICAgdGhpcy5raW5kID0gJ25hbWUnO1xuICB9XG4gIGVsc2UgaWYgKHRoaXMudHlwZSA9PT0gUkVGX1NUUlVDVCkge1xuICAgIHRoaXMua2luZCA9ICd0YWJsZSc7IC8vIHN0cnVjdHVyZWQgP1xuICB9XG4gIGVsc2UgaWYgKHRoaXMudHlwZSA9PT0gUkVGX0JFQU0pIHtcbiAgICB0aGlzLmtpbmQgPSAnYmVhbSc7XG4gIH1cbiAgZWxzZSB7XG4gICAgdGhpcy5raW5kID0gJ3JhbmdlJztcbiAgfVxuICB0aGlzLnR5cGUgPSBSRUZFUkVOQ0U7XG4gIHJldHVybiB0aGlzO1xufTtcblxuLy8gcGFyZW5zXG5zeW1ib2woJyknKTtcbnByZWZpeCgnKCcsIGZ1bmN0aW9uICgpIHtcbiAgY29uc3QgcHJldlN0YXRlID0gdW5pb25SZWZzKHRydWUpO1xuICBjb25zdCBlID0gZXhwcmVzc2lvbigwKTtcbiAgYWR2YW5jZSgnKScsIGUpO1xuICB1bmlvblJlZnMocHJldlN0YXRlKTtcbiAgcmV0dXJuIGU7XG59KTtcblxuLy8gZnVuY3Rpb24gY2FsbFxuc3ltYm9sKEZVTkNUSU9OKS5udWQgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzO1xufTtcbmluZml4KCcoJywgOTAsIGZ1bmN0aW9uIChsZWZ0KSB7XG4gIGxldCBjYWxsZWUgPSB7XG4gICAgdHlwZTogSURFTlRJRklFUixcbiAgICBuYW1lOiBsZWZ0LnZhbHVlXG4gIH07XG4gIGlmIChsZWZ0LmlkICE9PSBGVU5DVElPTikge1xuICAgIGlmIChcbiAgICAgIGxlZnQudHlwZSA9PT0gTEFNQkRBIHx8XG4gICAgICAvLyBFeGNlbCBvbmx5IGFsbG93cyBjYWxscyB0byBcIm5hbWVzXCIgYW5kIHJlZiBmdW5jdGlvbnMuIFNpbmNlIHdlIGRvbid0XG4gICAgICAvLyBkaWZmZXJlbnRpYXRlIGJldHdlZW4gdGhlIHR3byAodGhpcyByZXF1aXJlcyBhIHRhYmxlIG9mIGZ1bmN0aW9uIG5hbWVzKVxuICAgICAgLy8gd2UncmUgb3Zlcmx5IHBlcm1pc3NpdmUgaGVyZTpcbiAgICAgIGxlZnQudHlwZSA9PT0gQ0FMTCB8fFxuICAgICAgbGVmdC50eXBlID09PSBMRVQgfHxcbiAgICAgIGxlZnQudHlwZSA9PT0gUkVGRVJFTkNFIHx8XG4gICAgICAobGVmdC50eXBlID09PSBVTkFSWSAmJiBsZWZ0LnZhbHVlID09PSAnIycpIHx8IC8vIEJlY2F1c2UgaXQncyByZWFsbHkgU0lOR0xFKC4uLikoKVxuICAgICAgKGxlZnQudHlwZSA9PT0gRVJST1JfTElURVJBTCAmJiBsZWZ0LnZhbHVlID09PSAnI1JFRiEnKVxuICAgICkge1xuICAgICAgLy8gaW4gdGhlIGNhc2Ugb2YgUkVGRVJFTkNFLCBkbyB3ZSB3YW50IHRvIHNldCB0aGUgbm9kZSB0byBJZGVudGlmaWVyP1xuICAgICAgY2FsbGVlID0gbGVmdDtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBoYWx0KCdVbmV4cGVjdGVkIGNhbGwnLCB0b2tlbkluZGV4IC0gMSk7XG4gICAgfVxuICB9XG4gIGNvbnN0IGxjRm4gPSBsZWZ0LnZhbHVlLnRvTG93ZXJDYXNlKCk7XG4gIGlmIChsY0ZuID09PSAnbGFtYmRhJykge1xuICAgIHJldHVybiBwYXJzZUxhbWJkYS5jYWxsKHRoaXMsIGxlZnQpO1xuICB9XG4gIGlmIChsY0ZuID09PSAnbGV0Jykge1xuICAgIHJldHVybiBwYXJzZUxldC5jYWxsKHRoaXMsIGxlZnQpO1xuICB9XG4gIGNvbnN0IGFyZ3MgPSBbXTtcbiAgbGV0IGxhc3RXYXNDb21tYSA9IGZhbHNlO1xuICBpZiAoY3VycmVudE5vZGUuaWQgIT09ICcpJykge1xuICAgIGNvbnN0IHByZXZTdGF0ZSA9IHVuaW9uUmVmcyhmYWxzZSk7XG4gICAgd2hpbGUgKGN1cnJlbnROb2RlLmlkICE9PSAnKScpIHtcbiAgICAgIGlmIChpc1doaXRlc3BhY2UoY3VycmVudE5vZGUpKSB7XG4gICAgICAgIGFkdmFuY2UoKTtcbiAgICAgIH1cbiAgICAgIGlmIChjdXJyZW50Tm9kZS5pZCA9PT0gJywnKSB7XG4gICAgICAgIGFyZ3MucHVzaChudWxsKTtcbiAgICAgICAgbGFzdFdhc0NvbW1hID0gdHJ1ZTtcbiAgICAgICAgYWR2YW5jZSgpO1xuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgIGNvbnN0IGFyZyA9IGV4cHJlc3Npb24oMCk7XG4gICAgICAgIGFyZ3MucHVzaChhcmcpO1xuICAgICAgICBsYXN0V2FzQ29tbWEgPSBmYWxzZTtcbiAgICAgICAgaWYgKGN1cnJlbnROb2RlLmlkID09PSAnLCcpIHtcbiAgICAgICAgICBhZHZhbmNlKCcsJyk7XG4gICAgICAgICAgbGFzdFdhc0NvbW1hID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICB1bmlvblJlZnMocHJldlN0YXRlKTtcbiAgfVxuICBpZiAobGFzdFdhc0NvbW1hKSB7XG4gICAgYXJncy5wdXNoKG51bGwpO1xuICB9XG4gIGNvbnN0IGNsb3NlUGFyZW4gPSBjdXJyZW50Tm9kZTtcbiAgZGVsZXRlIHRoaXMudmFsdWU7XG4gIHRoaXMudHlwZSA9IENBTEw7XG4gIHRoaXMuY2FsbGVlID0gY2FsbGVlO1xuICBpZiAobGVmdC5sb2MpIHtcbiAgICB0aGlzLmNhbGxlZS5sb2MgPSBbIC4uLmxlZnQubG9jIF07XG4gIH1cbiAgdGhpcy5hcmd1bWVudHMgPSBhcmdzO1xuICBpZiAobGVmdC5sb2MpIHtcbiAgICB0aGlzLmxvYyA9IFsgbGVmdC5sb2NbMF0sIGNsb3NlUGFyZW4ubG9jWzFdIF07XG4gIH1cbiAgYWR2YW5jZSgnKScsIHRoaXMpO1xuICByZXR1cm4gdGhpcztcbn0pO1xuXG5mdW5jdGlvbiBwYXJzZUxhbWJkYSAobGVmdCkge1xuICBjb25zdCBhcmdzID0gW107XG4gIGNvbnN0IGFyZ05hbWVzID0ge307XG4gIGxldCBib2R5O1xuICBsZXQgZG9uZSA9IGZhbHNlO1xuICBjb25zdCBwcmV2U3RhdGUgPSB1bmlvblJlZnMoZmFsc2UpO1xuICBpZiAoY3VycmVudE5vZGUuaWQgIT09ICcpJykge1xuICAgIHdoaWxlICghZG9uZSkge1xuICAgICAgaWYgKGlzV2hpdGVzcGFjZShjdXJyZW50Tm9kZSkpIHtcbiAgICAgICAgYWR2YW5jZSgpO1xuICAgICAgfVxuICAgICAgY29uc3QgYXJnVG9rZW5JbmRleCA9IHRva2VuSW5kZXg7XG4gICAgICBjb25zdCBhcmcgPSBleHByZXNzaW9uKDApO1xuICAgICAgaWYgKGN1cnJlbnROb2RlLmlkID09PSAnLCcpIHtcbiAgICAgICAgLy8gYWxsIGJ1dCBsYXN0IGFyZ3MgbXVzdCBiZSBuYW1lc1xuICAgICAgICBpZiAoYXJnLnR5cGUgPT09IFJFRkVSRU5DRSAmJiBhcmcua2luZCA9PT0gJ25hbWUnKSB7XG4gICAgICAgICAgLy8gbmFtZXMgbWF5IG5vdCBiZSBkdXBsaWNhdGVzXG4gICAgICAgICAgY29uc3QgY3Vyck5hbWUgPSBhcmcudmFsdWUudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICBpZiAoY3Vyck5hbWUgaW4gYXJnTmFtZXMpIHtcbiAgICAgICAgICAgIGhhbHQoJ0R1cGxpY2F0ZSBuYW1lOiAnICsgYXJnLnZhbHVlKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYXJnTmFtZXNbY3Vyck5hbWVdID0gMTtcbiAgICAgICAgICBjb25zdCBhID0geyB0eXBlOiBJREVOVElGSUVSLCBuYW1lOiBhcmcudmFsdWUgfTtcbiAgICAgICAgICBpZiAoYXJnLmxvYykgeyBhLmxvYyA9IGFyZy5sb2M7IH1cbiAgICAgICAgICBhcmdzLnB1c2goYSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgdG9rZW5JbmRleCA9IGFyZ1Rva2VuSW5kZXg7XG4gICAgICAgICAgaGFsdCgnTEFNQkRBIGFyZ3VtZW50IGlzIG5vdCBhIG5hbWUnKTtcbiAgICAgICAgfVxuICAgICAgICBhZHZhbmNlKCcsJyk7XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgYm9keSA9IGFyZztcbiAgICAgICAgZG9uZSA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHVuaW9uUmVmcyhwcmV2U3RhdGUpO1xuICBkZWxldGUgdGhpcy52YWx1ZTtcbiAgdGhpcy50eXBlID0gTEFNQkRBO1xuICB0aGlzLnBhcmFtcyA9IGFyZ3M7XG4gIHRoaXMuYm9keSA9IGJvZHkgfHwgbnVsbDtcbiAgaWYgKGxlZnQubG9jKSB7XG4gICAgdGhpcy5sb2MgPSBbIGxlZnQubG9jWzBdLCBjdXJyZW50Tm9kZS5sb2NbMV0gXTtcbiAgfVxuICBhZHZhbmNlKCcpJywgdGhpcyk7XG4gIHJldHVybiB0aGlzO1xufVxuXG5mdW5jdGlvbiBwYXJzZUxldCAobGVmdCkge1xuICBjb25zdCBhcmdzID0gW107XG4gIGNvbnN0IHZhbHMgPSBbXTtcbiAgY29uc3QgYXJnTmFtZXMgPSB7fTtcbiAgbGV0IGJvZHk7XG4gIGxldCBhcmdDb3VudGVyID0gMDtcbiAgY29uc3QgYWRkQXJndW1lbnQgPSAoYXJnLCBsYXN0QXJnKSA9PiB7XG4gICAgaWYgKGJvZHkpIHtcbiAgICAgIGhhbHQoJ1VuZXhwZWN0ZWQgYXJndW1lbnQgZm9sbG93aW5nIGNhbGN1bGF0aW9uJyk7XG4gICAgfVxuICAgIGlmIChsYXN0QXJnICYmIGFyZ0NvdW50ZXIgPj0gMikge1xuICAgICAgYm9keSA9IGFyZztcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBjb25zdCB3YW50TmFtZSA9ICEoYXJnQ291bnRlciAlIDIpO1xuICAgICAgaWYgKHdhbnROYW1lKSB7XG4gICAgICAgIGlmIChhcmcgJiYgKGFyZy50eXBlID09PSBSRUZFUkVOQ0UgJiYgYXJnLmtpbmQgPT09ICduYW1lJykpIHtcbiAgICAgICAgICAvLyBuYW1lcyBtYXkgbm90IGJlIGR1cGxpY2F0ZXNcbiAgICAgICAgICBjb25zdCBjdXJyTmFtZSA9IGFyZy52YWx1ZS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgIGlmIChjdXJyTmFtZSBpbiBhcmdOYW1lcykge1xuICAgICAgICAgICAgaGFsdCgnRHVwbGljYXRlIG5hbWU6ICcgKyBhcmcudmFsdWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBhcmdOYW1lc1tjdXJyTmFtZV0gPSAxO1xuICAgICAgICAgIGFyZ3MucHVzaCh7IHR5cGU6IElERU5USUZJRVIsIG5hbWU6IGFyZy52YWx1ZSwgbG9jOiBhcmcubG9jIH0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGFyZ0NvdW50ZXIgPj0gMikge1xuICAgICAgICAgIGJvZHkgPSBhcmc7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgaGFsdCgnQXJndW1lbnQgaXMgbm90IGEgbmFtZScpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgdmFscy5wdXNoKGFyZyk7XG4gICAgICB9XG4gICAgfVxuICAgIGFyZ0NvdW50ZXIrKztcbiAgfTtcbiAgY29uc3QgcHJldlN0YXRlID0gdW5pb25SZWZzKGZhbHNlKTtcbiAgbGV0IGxhc3RXYXNDb21tYSA9IGZhbHNlO1xuICBpZiAoY3VycmVudE5vZGUuaWQgIT09ICcpJykge1xuICAgIHdoaWxlIChjdXJyZW50Tm9kZS5pZCAhPT0gJyknKSB7XG4gICAgICBpZiAoaXNXaGl0ZXNwYWNlKGN1cnJlbnROb2RlKSkge1xuICAgICAgICBhZHZhbmNlKCk7XG4gICAgICB9XG4gICAgICBpZiAoY3VycmVudE5vZGUuaWQgPT09ICcsJykge1xuICAgICAgICBhZGRBcmd1bWVudChudWxsKTtcbiAgICAgICAgbGFzdFdhc0NvbW1hID0gdHJ1ZTtcbiAgICAgICAgYWR2YW5jZSgpO1xuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgIGNvbnN0IGFyZyA9IGV4cHJlc3Npb24oMCk7XG4gICAgICAgIGFkZEFyZ3VtZW50KGFyZywgY3VycmVudE5vZGUuaWQgIT09ICcsJyk7XG4gICAgICAgIGxhc3RXYXNDb21tYSA9IGZhbHNlO1xuICAgICAgICBpZiAoY3VycmVudE5vZGUuaWQgPT09ICcsJykge1xuICAgICAgICAgIGFkdmFuY2UoJywnKTtcbiAgICAgICAgICBsYXN0V2FzQ29tbWEgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHVuaW9uUmVmcyhwcmV2U3RhdGUpO1xuICB9XG4gIGlmIChsYXN0V2FzQ29tbWEpIHtcbiAgICBhZGRBcmd1bWVudChudWxsLCB0cnVlKTtcbiAgfVxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW5kZWZpbmVkXG4gIGlmIChib2R5ID09PSB1bmRlZmluZWQpIHtcbiAgICBoYWx0KCdVbmV4cGVjdGVkIGVuZCBvZiBhcmd1bWVudHMnKTtcbiAgfVxuICB1bmlvblJlZnMocHJldlN0YXRlKTtcbiAgZGVsZXRlIHRoaXMudmFsdWU7XG4gIHRoaXMudHlwZSA9IExFVDtcbiAgdGhpcy5kZWNsYXJhdGlvbnMgPSBbXTtcbiAgaWYgKCFhcmdzLmxlbmd0aCkge1xuICAgIGhhbHQoJ1VuZXhwZWN0ZWQgZW5kIG9mIGFyZ3VtZW50cycpO1xuICB9XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgYXJncy5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IHMgPSB7XG4gICAgICB0eXBlOiBMRVRfREVDTCxcbiAgICAgIGlkOiBhcmdzW2ldLFxuICAgICAgaW5pdDogdmFsc1tpXSxcbiAgICAgIGxvYzogYXJnc1tpXS5sb2MgJiYgWyBhcmdzW2ldLmxvY1swXSwgdmFsc1tpXS5sb2NbMV0gXVxuICAgIH07XG4gICAgdGhpcy5kZWNsYXJhdGlvbnMucHVzaChzKTtcbiAgfVxuICB0aGlzLmJvZHkgPSBib2R5O1xuICBpZiAobGVmdC5sb2MpIHtcbiAgICB0aGlzLmxvYyA9IFsgbGVmdC5sb2NbMF0sIGN1cnJlbnROb2RlLmxvY1sxXSBdO1xuICB9XG4gIGFkdmFuY2UoJyknLCB0aGlzKTtcbiAgcmV0dXJuIHRoaXM7XG59XG5cbi8vIGFycmF5IGxpdGVyYWxcbnN5bWJvbCgnfScpO1xuc3ltYm9sKCc7Jyk7XG5wcmVmaXgoJ3snLCBmdW5jdGlvbiAoKSB7XG4gIGlmIChjdXJyZW50Tm9kZS5pZCA9PT0gJ30nKSB7IC8vIGFycmF5cyBtdXN0IG5vdCBiZSBlbXB0eVxuICAgIGhhbHQoJ1VuZXhwZWN0ZWQgZW1wdHkgYXJyYXknKTtcbiAgfVxuICBsZXQgcm93ID0gW107XG4gIGxldCBkb25lID0gZmFsc2U7XG4gIGNvbnN0IHJvd3MgPSBbIHJvdyBdO1xuICBjb25zdCBwcmV2U3RhdGUgPSB1bmlvblJlZnMoZmFsc2UpO1xuICB3aGlsZSAoIWRvbmUpIHtcbiAgICBpZiAoaXNXaGl0ZXNwYWNlKGN1cnJlbnROb2RlKSkge1xuICAgICAgYWR2YW5jZSgpO1xuICAgIH1cbiAgICAvLyBhcnJheXMgYWxsb3cgb25seSBsaXRlcmFscywgcmFuZ2VzIChpbiBHU2hlZXRzKSBhbmQgLDs6IG9wZXJhdG9ycy5cbiAgICAvLyBGSVhNRTogaWYgeyBuZWdhdGl2ZU51bWJlcnM6IGZhbHNlIH0gd2UgbXVzdCBjb25zdW1lIG1pbnVzZXMgYXMgd2VsbC5cbiAgICAvLyBFeGNlbCBhbGxvd3MgPXstMX0gYnV0IG5vdCA9eygtMSl9IGFuZCA9ezElfVxuICAgIGlmIChpc0xpdGVyYWwoY3VycmVudE5vZGUpKSB7XG4gICAgICByb3cucHVzaChzeW1ib2xUYWJsZVtMSVRFUkFMXS5udWQuY2FsbChjdXJyZW50Tm9kZSkpO1xuICAgICAgYWR2YW5jZSgpO1xuICAgIH1cbiAgICBlbHNlIGlmIChwZXJtaXRBcnJheVJhbmdlcyAmJiBpc1JlZmVyZW5jZU5vZGUoY3VycmVudE5vZGUpKSB7XG4gICAgICByb3cucHVzaChzeW1ib2xUYWJsZVtSRUZFUkVOQ0VdLm51ZC5jYWxsKGN1cnJlbnROb2RlKSk7XG4gICAgICBhZHZhbmNlKCk7XG4gICAgfVxuICAgIGVsc2UgaWYgKHBlcm1pdEFycmF5Q2FsbHMgJiYgaXNGdW5jdGlvbihjdXJyZW50Tm9kZSkpIHtcbiAgICAgIGNvbnN0IGFyZyA9IGV4cHJlc3Npb24oMCk7XG4gICAgICByb3cucHVzaChhcmcpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIGhhbHQoYFVuZXhwZWN0ZWQgJHtjdXJyZW50Tm9kZS50eXBlfSBpbiBhcnJheTogJHtjdXJyZW50Tm9kZS52YWx1ZX1gKTtcbiAgICB9XG4gICAgaWYgKGN1cnJlbnROb2RlLmlkID09PSAnLCcpIHtcbiAgICAgIC8vIG5leHQgaXRlbVxuICAgICAgYWR2YW5jZSgnLCcpO1xuICAgIH1cbiAgICBlbHNlIGlmIChjdXJyZW50Tm9kZS5pZCA9PT0gJzsnKSB7XG4gICAgICAvLyBuZXh0IHJvd1xuICAgICAgYWR2YW5jZSgnOycpO1xuICAgICAgcm93ID0gW107XG4gICAgICByb3dzLnB1c2gocm93KTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBkb25lID0gdHJ1ZTtcbiAgICB9XG4gIH1cbiAgY29uc3QgY2xvc2luZ0JyYWNlID0gY3VycmVudE5vZGU7XG4gIGFkdmFuY2UoJ30nKTtcbiAgdW5pb25SZWZzKHByZXZTdGF0ZSk7XG4gIHRoaXMudHlwZSA9IEFSUkFZO1xuICB0aGlzLmVsZW1lbnRzID0gcm93cztcbiAgaWYgKHRoaXMubG9jKSB7XG4gICAgdGhpcy5sb2NbMV0gPSBjbG9zaW5nQnJhY2UubG9jWzFdO1xuICB9XG4gIGRlbGV0ZSB0aGlzLnZhbHVlO1xuICByZXR1cm4gdGhpcztcbn0pO1xuXG4vKipcbiAqIFBhcnNlcyBhIHN0cmluZyBmb3JtdWxhIG9yIGxpc3Qgb2YgdG9rZW5zIGludG8gYW4gQVNULlxuICpcbiAqIFRoZSBwYXJzZXIgcmVxdWlyZXMgYG1lcmdlUmVmc2AgdG8gaGF2ZSBiZWVuIGB0cnVlYCBpbiB0b2tlbmxpc3Qgb3B0aW9ucyxcbiAqIGJlY2F1c2UgaXQgZG9lcyBub3QgcmVjb2duaXplIHJlZmVyZW5jZSBjb250ZXh0IHRva2Vucy5cbiAqXG4gKiBUaGUgQVNUIEFic3RyYWN0IFN5bnRheCBUcmVlJ3MgZm9ybWF0IGlzIGRvY3VtZW50ZWQgaW5cbiAqIFtBU1RfZm9ybWF0Lm1kXSguL0FTVF9mb3JtYXQubWQpXG4gKlxuICogQHNlZSBub2RlVHlwZXNcbiAqIEBwYXJhbSB7KHN0cmluZyB8IFRva2VuW10pfSBmb3JtdWxhIEFuIEV4Y2VsIGZvcm11bGEgc3RyaW5nIChhbiBFeGNlbCBleHByZXNzaW9uKSBvciBhbiBhcnJheSBvZiB0b2tlbnMuXG4gKiBAcGFyYW0ge29iamVjdH0gW29wdGlvbnM9e31dICBPcHRpb25zXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLmFsbG93TmFtZWQ9dHJ1ZV0gIEVuYWJsZSBwYXJzaW5nIG5hbWVzIGFzIHdlbGwgYXMgcmFuZ2VzLlxuICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy5hbGxvd1Rlcm5hcnk9ZmFsc2VdICBFbmFibGVzIHRoZSByZWNvZ25pdGlvbiBvZiB0ZXJuYXJ5IHJhbmdlcyBpbiB0aGUgc3R5bGUgb2YgYEExOkFgIG9yIGBBMToxYC4gVGhlc2UgYXJlIHN1cHBvcnRlZCBieSBHb29nbGUgU2hlZXRzIGJ1dCBub3QgRXhjZWwuIFNlZTogUmVmZXJlbmNlcy5tZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMubmVnYXRpdmVOdW1iZXJzPXRydWVdICBNZXJnZXMgdW5hcnkgbWludXNlcyB3aXRoIHRoZWlyIGltbWVkaWF0ZWx5IGZvbGxvd2luZyBudW1iZXIgdG9rZW5zIChgLWAsYDFgKSA9PiBgLTFgIChhbHRlcm5hdGl2ZWx5IHRoZXNlIHdpbGwgYmUgdW5hcnkgb3BlcmF0aW9ucyBpbiB0aGUgdHJlZSkuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLnBlcm1pdEFycmF5UmFuZ2VzPWZhbHNlXSAgUmFuZ2VzIGFyZSBhbGxvd2VkIGFzIGVsZW1lbnRzIG9mIGFycmF5cy4gVGhpcyBpcyBhIGZlYXR1cmUgaW4gR29vZ2xlIFNoZWV0cyB3aGlsZSBFeGNlbCBkb2VzIG5vdCBhbGxvdyBpdC5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMucGVybWl0QXJyYXlDYWxscz1mYWxzZV0gIEZ1bmN0aW9uIGNhbGxzIGFyZSBhbGxvd2VkIGFzIGVsZW1lbnRzIG9mIGFycmF5cy4gVGhpcyBpcyBhIGZlYXR1cmUgaW4gR29vZ2xlIFNoZWV0cyB3aGlsZSBFeGNlbCBkb2VzIG5vdCBhbGxvdyBpdC5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMubG9vc2VSZWZDYWxscz1mYWxzZV0gIFBlcm1pdHMgYW55IGZ1bmN0aW9uIGNhbGwgd2hlcmUgb3RoZXJ3aXNlIG9ubHkgZnVuY3Rpb25zIHRoYXQgcmV0dXJuIHJlZmVyZW5jZXMgd291bGQgYmUgcGVybWl0dGVkLlxuICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy5yMWMxPWZhbHNlXSAgUmFuZ2VzIGFyZSBleHBlY3RlZCB0byBiZSBpbiB0aGUgUjFDMSBzdHlsZSBmb3JtYXQgcmF0aGVyIHRoYW4gdGhlIG1vcmUgcG9wdWxhciBBMSBzdHlsZS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMud2l0aExvY2F0aW9uPWZhbHNlXSAgTm9kZXMgd2lsbCBpbmNsdWRlIHNvdXJjZSBwb3NpdGlvbiBvZmZzZXRzIHRvIHRoZSB0b2tlbnM6IGB7IGxvYzogWyBzdGFydCwgZW5kIF0gfWBcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMueGxzeD1mYWxzZV0gIFN3aXRjaGVzIHRvIHRoZSBgWzFdU2hlZXQxIUExYCBvciBgWzFdIW5hbWVgIHByZWZpeCBzeW50YXggZm9ybSBmb3IgZXh0ZXJuYWwgd29ya2Jvb2tzLiBTZWU6IFtQcmVmaXhlcy5tZF0oLi9QcmVmaXhlcy5tZClcbiAqIEByZXR1cm5zIHtBc3RFeHByZXNzaW9ufSBBbiBBU1Qgb2Ygbm9kZXNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlIChmb3JtdWxhLCBvcHRpb25zKSB7XG4gIGlmICh0eXBlb2YgZm9ybXVsYSA9PT0gJ3N0cmluZycpIHtcbiAgICB0b2tlbnMgPSB0b2tlbml6ZShmb3JtdWxhLCB7XG4gICAgICB3aXRoTG9jYXRpb246IGZhbHNlLFxuICAgICAgLi4ub3B0aW9ucyxcbiAgICAgIG1lcmdlUmVmczogdHJ1ZVxuICAgIH0pO1xuICB9XG4gIGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoZm9ybXVsYSkpIHtcbiAgICB0b2tlbnMgPSBmb3JtdWxhO1xuICB9XG4gIGVsc2Uge1xuICAgIHRocm93IG5ldyBFcnJvcignUGFyc2UgcmVxdWlyZXMgYSBzdHJpbmcgb3IgYXJyYXkgb2YgdG9rZW5zLicpO1xuICB9XG4gIC8vIGFsbG93IHJhbmdlcyBpbiBhcnJheSBcImxpdGVyYWxzXCI/XG4gIHBlcm1pdEFycmF5UmFuZ2VzID0gb3B0aW9ucz8ucGVybWl0QXJyYXlSYW5nZXM7XG4gIC8vIGFsbG93IGNhbGxzIGluIGFycmF5cyBcImxpdGVyYWxzXCI/XG4gIHBlcm1pdEFycmF5Q2FsbHMgPSBvcHRpb25zPy5wZXJtaXRBcnJheUNhbGxzO1xuICAvLyBhbGxvdyBhbnkgZnVuY3Rpb24gY2FsbCBpbiByYW5nZSBvcGVyYXRpb25zP1xuICBsb29zZVJlZkNhbGxzID0gb3B0aW9ucz8ubG9vc2VSZWZDYWxscztcbiAgLy8gc2V0IGluZGV4IHRvIHN0YXJ0XG4gIHRva2VuSW5kZXggPSAwO1xuICAvLyBkaXNjYXJkIHJlZHVuZGFudCB3aGl0ZXNwYWNlIGFuZCA9IHByZWZpeFxuICB3aGlsZSAoaXNXaGl0ZXNwYWNlKHRva2Vuc1t0b2tlbkluZGV4XSkgfHwgaXNGeFByZWZpeCh0b2tlbnNbdG9rZW5JbmRleF0pKSB7XG4gICAgdG9rZW5JbmRleCsrO1xuICB9XG4gIGFkdmFuY2UoKTtcbiAgdW5pb25SZWZzKHRydWUpO1xuICBjb25zdCByb290ID0gZXhwcmVzc2lvbigwKTtcbiAgYWR2YW5jZShFTkQpO1xuICByZXR1cm4gcm9vdDtcbn1cbiIsImltcG9ydCB7XG4gIEZYX1BSRUZJWCxcbiAgQ09OVEVYVCxcbiAgQ09OVEVYVF9RVU9URSxcbiAgUkVGX1JBTkdFLFxuICBSRUZfVEVSTkFSWSxcbiAgUkVGX05BTUVELFxuICBSRUZfQkVBTSxcbiAgUkVGX1NUUlVDVCxcbiAgT1BFUkFUT1Jcbn0gZnJvbSAnLi9jb25zdGFudHMuanMnO1xuaW1wb3J0IHsgbGV4ZXJzUmVmcyB9IGZyb20gJy4vbGV4ZXJQYXJ0cy5qcyc7XG5pbXBvcnQgeyBnZXRUb2tlbnMgfSBmcm9tICcuL2xleGVyLmpzJztcblxuLy8gTGliZXJhbGx5IHNwbGl0IGEgY29udGV4dCBzdHJpbmcgdXAgaW50byBwYXJ0cy5cbi8vIFBlcm1pdHMgYW55IGNvbWJpbmF0aW9uIG9mIGJyYWNlZCBhbmQgdW5icmFjZWQgaXRlbXMuXG5leHBvcnQgZnVuY3Rpb24gc3BsaXRQcmVmaXggKHN0ciwgc3RyaW5nc09ubHkgPSBmYWxzZSkge1xuICBsZXQgaW5CcmFjZSA9IGZhbHNlO1xuICBsZXQgY3VyclN0ciA9ICcnO1xuICBjb25zdCBwYXJ0cyA9IFtdO1xuICBjb25zdCBmbHVzaCA9ICgpID0+IHtcbiAgICBpZiAoY3VyclN0cikge1xuICAgICAgcGFydHMucHVzaChcbiAgICAgICAgc3RyaW5nc09ubHlcbiAgICAgICAgICA/IGN1cnJTdHJcbiAgICAgICAgICA6IHsgdmFsdWU6IGN1cnJTdHIsIGJyYWNlZDogaW5CcmFjZSB9XG4gICAgICApO1xuICAgIH1cbiAgICBjdXJyU3RyID0gJyc7XG4gIH07XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgc3RyLmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3QgY2hhciA9IHN0cltpXTtcbiAgICBpZiAoY2hhciA9PT0gJ1snKSB7XG4gICAgICBmbHVzaCgpO1xuICAgICAgaW5CcmFjZSA9IHRydWU7XG4gICAgfVxuICAgIGVsc2UgaWYgKGNoYXIgPT09ICddJykge1xuICAgICAgZmx1c2goKTtcbiAgICAgIGluQnJhY2UgPSBmYWxzZTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBjdXJyU3RyICs9IGNoYXI7XG4gICAgfVxuICB9XG4gIGZsdXNoKCk7XG4gIHJldHVybiBwYXJ0cztcbn1cblxuZnVuY3Rpb24gc3BsaXRDb250ZXh0IChjb250ZXh0U3RyaW5nKSB7XG4gIHJldHVybiB7IGNvbnRleHQ6IHNwbGl0UHJlZml4KGNvbnRleHRTdHJpbmcsIHRydWUpIH07XG59XG5cbmZ1bmN0aW9uIHNwbGl0Q29udGV4dFhsc3ggKGNvbnRleHRTdHJpbmcpIHtcbiAgY29uc3QgY29udGV4dCA9IHt9O1xuICBjb25zdCBjdHggPSBzcGxpdFByZWZpeChjb250ZXh0U3RyaW5nKTtcbiAgaWYgKGN0eC5sZW5ndGggPiAxKSB7XG4gICAgY29udGV4dC53b3JrYm9va05hbWUgPSBjdHhbY3R4Lmxlbmd0aCAtIDJdLnZhbHVlO1xuICAgIGNvbnRleHQuc2hlZXROYW1lID0gY3R4W2N0eC5sZW5ndGggLSAxXS52YWx1ZTtcbiAgfVxuICBlbHNlIGlmIChjdHgubGVuZ3RoID09PSAxKSB7XG4gICAgY29uc3QgaXRlbSA9IGN0eFswXTtcbiAgICBpZiAoaXRlbS5icmFjZWQpIHtcbiAgICAgIGNvbnRleHQud29ya2Jvb2tOYW1lID0gaXRlbS52YWx1ZTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBjb250ZXh0LnNoZWV0TmFtZSA9IGl0ZW0udmFsdWU7XG4gICAgfVxuICB9XG4gIHJldHVybiBjb250ZXh0O1xufVxuXG5jb25zdCB1bnF1b3RlID0gZCA9PiBkLnNsaWNlKDEsIC0xKS5yZXBsYWNlKC8nJy9nLCBcIidcIik7XG5cbmNvbnN0IHBSYW5nZU9wID0gdCA9PiB0ICYmICh0LnZhbHVlID09PSAnOicgfHwgdC52YWx1ZSA9PT0gJy46JyB8fCB0LnZhbHVlID09PSAnOi4nIHx8IHQudmFsdWUgPT09ICcuOi4nKSAmJiB7IG9wZXJhdG9yOiB0LnZhbHVlIH07XG5jb25zdCBwUmFuZ2UgPSB0ID0+IHQgJiYgdC50eXBlID09PSBSRUZfUkFOR0UgJiYgeyByMDogdC52YWx1ZSB9O1xuY29uc3QgcFBhcnRpYWwgPSB0ID0+IHQgJiYgdC50eXBlID09PSBSRUZfVEVSTkFSWSAmJiB7IHIwOiB0LnZhbHVlIH07XG5jb25zdCBwUmFuZ2UyID0gdCA9PiB0ICYmIHQudHlwZSA9PT0gUkVGX1JBTkdFICYmIHsgcjE6IHQudmFsdWUgfTtcbmNvbnN0IHBCYW5nID0gdCA9PiB0ICYmIHQudHlwZSA9PT0gT1BFUkFUT1IgJiYgdC52YWx1ZSA9PT0gJyEnICYmIHt9O1xuY29uc3QgcEJlYW0gPSB0ID0+IHQgJiYgdC50eXBlID09PSBSRUZfQkVBTSAmJiB7IHIwOiB0LnZhbHVlIH07XG5jb25zdCBwU3RydWN1cmVkID0gdCA9PiB0ICYmIHQudHlwZSA9PT0gUkVGX1NUUlVDVCAmJiB7IHN0cnVjdDogdC52YWx1ZSB9O1xuY29uc3QgcENvbnRleHQgPSAodCwgb3B0cykgPT4ge1xuICBjb25zdCBzcGxpdHRlciA9IG9wdHMueGxzeCA/IHNwbGl0Q29udGV4dFhsc3ggOiBzcGxpdENvbnRleHQ7XG4gIGlmICh0ICYmIHQudHlwZSA9PT0gQ09OVEVYVCkge1xuICAgIHJldHVybiBzcGxpdHRlcih0LnZhbHVlKTtcbiAgfVxuICBpZiAodCAmJiB0LnR5cGUgPT09IENPTlRFWFRfUVVPVEUpIHtcbiAgICByZXR1cm4gc3BsaXR0ZXIodW5xdW90ZSh0LnZhbHVlKSk7XG4gIH1cbn07XG5jb25zdCBwTmFtZWQgPSB0ID0+IHQgJiYgdC50eXBlID09PSBSRUZfTkFNRUQgJiYgeyBuYW1lOiB0LnZhbHVlIH07XG5cbmNvbnN0IHZhbGlkUnVucyA9IFtcbiAgWyBwUGFydGlhbCBdLFxuICBbIHBSYW5nZSwgcFJhbmdlT3AsIHBSYW5nZTIgXSxcbiAgWyBwUmFuZ2UgXSxcbiAgWyBwQmVhbSBdLFxuICBbIHBDb250ZXh0LCBwQmFuZywgcFBhcnRpYWwgXSxcbiAgWyBwQ29udGV4dCwgcEJhbmcsIHBSYW5nZSwgcFJhbmdlT3AsIHBSYW5nZTIgXSxcbiAgWyBwQ29udGV4dCwgcEJhbmcsIHBSYW5nZSBdLFxuICBbIHBDb250ZXh0LCBwQmFuZywgcEJlYW0gXVxuXTtcblxuY29uc3QgdmFsaWRSdW5zTmFtZWQgPSB2YWxpZFJ1bnMuY29uY2F0KFtcbiAgWyBwTmFtZWQgXSxcbiAgWyBwQ29udGV4dCwgcEJhbmcsIHBOYW1lZCBdLFxuICBbIHBTdHJ1Y3VyZWQgXSxcbiAgWyBwTmFtZWQsIHBTdHJ1Y3VyZWQgXSxcbiAgWyBwQ29udGV4dCwgcEJhbmcsIHBOYW1lZCwgcFN0cnVjdXJlZCBdXG5dKTtcblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlUmVmIChyZWYsIG9wdHMpIHtcbiAgY29uc3Qgb3B0aW9ucyA9IHtcbiAgICB3aXRoTG9jYXRpb246IGZhbHNlLFxuICAgIG1lcmdlUmVmczogZmFsc2UsXG4gICAgYWxsb3dUZXJuYXJ5OiBmYWxzZSxcbiAgICBhbGxvd05hbWVkOiB0cnVlLFxuICAgIHIxYzE6IGZhbHNlLFxuICAgIHhsc3g6IGZhbHNlLFxuICAgIC4uLm9wdHNcbiAgfTtcbiAgY29uc3QgdG9rZW5zID0gZ2V0VG9rZW5zKHJlZiwgbGV4ZXJzUmVmcywgb3B0aW9ucyk7XG4gIGNvbnN0IHJlZkRhdGEgPSBvcHRpb25zLnhsc3hcbiAgICA/IHtcbiAgICAgIHdvcmtib29rTmFtZTogJycsXG4gICAgICBzaGVldE5hbWU6ICcnLFxuICAgICAgcjA6ICcnLFxuICAgICAgcjE6ICcnLFxuICAgICAgbmFtZTogJycsXG4gICAgICBvcGVyYXRvcjogJydcbiAgICB9XG4gICAgOiB7XG4gICAgICBjb250ZXh0OiBbXSxcbiAgICAgIHIwOiAnJyxcbiAgICAgIHIxOiAnJyxcbiAgICAgIG5hbWU6ICcnLFxuICAgICAgb3BlcmF0b3I6ICcnXG4gICAgfTtcbiAgLy8gZGlzY2FyZCB0aGUgXCI9XCItcHJlZml4IGlmIGl0IGlzIHRoZXJlXG4gIGlmICh0b2tlbnMubGVuZ3RoICYmIHRva2Vuc1swXS50eXBlID09PSBGWF9QUkVGSVgpIHtcbiAgICB0b2tlbnMuc2hpZnQoKTtcbiAgfVxuICBjb25zdCBydW5zID0gb3B0aW9ucy5hbGxvd05hbWVkID8gdmFsaWRSdW5zTmFtZWQgOiB2YWxpZFJ1bnM7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgcnVucy5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IGRhdGEgPSB7IC4uLnJlZkRhdGEgfTtcbiAgICBpZiAocnVuc1tpXS5sZW5ndGggPT09IHRva2Vucy5sZW5ndGgpIHtcbiAgICAgIGNvbnN0IHZhbGlkID0gcnVuc1tpXS5ldmVyeSgocGFyc2UsIGopID0+IHtcbiAgICAgICAgY29uc3QgZCA9IHBhcnNlKHRva2Vuc1tqXSwgb3B0aW9ucyk7XG4gICAgICAgIE9iamVjdC5hc3NpZ24oZGF0YSwgZCk7XG4gICAgICAgIHJldHVybiBkO1xuICAgICAgfSk7XG4gICAgICBpZiAodmFsaWQpIHtcbiAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBudWxsO1xufVxuIiwiY29uc3QgY2hhckZyb20gPSBTdHJpbmcuZnJvbUNoYXJDb2RlO1xuXG4vKipcbiAqIENvbnZlcnQgYSAwIGJhc2VkIG9mZnNldCBudW1iZXIgdG8gYSBjb2x1bW4gc3RyaW5nXG4gKiByZXByZXNlbnRhdGlvbiAoYDJgID0gYFwiQ1wiYCkuXG4gKlxuICogVGhlIG1ldGhvZCBleHBlY3RzIGEgbnVtYmVyIGJldHdlZW4gMCBhbmQgMTYzODMuIE90aGVyIGlucHV0IHdpbGxcbiAqIHJldHVybiBnYXJiYWdlLlxuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSBjb2x1bW5JbmRleCBaZXJvIGJhc2VkIGNvbHVtbiBpbmRleCBudW1iZXJcbiAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBjb2x1bW4gc3RyaW5nIGlkZW50aWZpZXJcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvQ29sIChjb2x1bW5JbmRleCkge1xuICByZXR1cm4gKFxuICAgIChjb2x1bW5JbmRleCA+PSA3MDJcbiAgICAgID8gY2hhckZyb20oKCgoKGNvbHVtbkluZGV4IC0gNzAyKSAvIDY3NikgLSAwKSAlIDI2KSArIDY1KVxuICAgICAgOiAnJykgK1xuICAgIChjb2x1bW5JbmRleCA+PSAyNlxuICAgICAgPyBjaGFyRnJvbSgoKCgoY29sdW1uSW5kZXggLyAyNikgLSAxKSAlIDI2KSArIDY1KSlcbiAgICAgIDogJycpICtcbiAgICBjaGFyRnJvbSgoY29sdW1uSW5kZXggJSAyNikgKyA2NSlcbiAgKTtcbn1cbiIsImNvbnN0IHJlQmFubmVkQ2hhcnMgPSAvW14wLTlBLVphLXouX8KhwqTCp8KowqpcXHUwMGFkwq8tXFx1ZmZmZl0vO1xuXG5leHBvcnQgZnVuY3Rpb24gc3RyaW5naWZ5UHJlZml4IChyZWYpIHtcbiAgbGV0IHByZSA9ICcnO1xuICBsZXQgcXVvdGUgPSAwO1xuICBsZXQgbnRoID0gMDtcbiAgY29uc3QgY29udGV4dCA9IHJlZi5jb250ZXh0IHx8IFtdO1xuICBmb3IgKGxldCBpID0gY29udGV4dC5sZW5ndGg7IGkgPiAtMTsgaS0tKSB7XG4gICAgY29uc3Qgc2NvcGUgPSBjb250ZXh0W2ldO1xuICAgIGlmIChzY29wZSkge1xuICAgICAgY29uc3QgcGFydCA9IChudGggJSAyKSA/ICdbJyArIHNjb3BlICsgJ10nIDogc2NvcGU7XG4gICAgICBwcmUgPSBwYXJ0ICsgcHJlO1xuICAgICAgcXVvdGUgKz0gK3JlQmFubmVkQ2hhcnMudGVzdChzY29wZSk7XG4gICAgICBudGgrKztcbiAgICB9XG4gIH1cbiAgaWYgKHF1b3RlKSB7XG4gICAgcHJlID0gXCInXCIgKyBwcmUucmVwbGFjZSgvJy9nLCBcIicnXCIpICsgXCInXCI7XG4gIH1cbiAgcmV0dXJuIHByZSA/IHByZSArICchJyA6IHByZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0cmluZ2lmeVByZWZpeEFsdCAocmVmKSB7XG4gIGxldCBwcmUgPSAnJztcbiAgbGV0IHF1b3RlID0gMDtcbiAgY29uc3QgeyB3b3JrYm9va05hbWUsIHNoZWV0TmFtZSB9ID0gcmVmO1xuICBpZiAod29ya2Jvb2tOYW1lKSB7XG4gICAgcHJlICs9ICdbJyArIHdvcmtib29rTmFtZSArICddJztcbiAgICBxdW90ZSArPSArcmVCYW5uZWRDaGFycy50ZXN0KHdvcmtib29rTmFtZSk7XG4gIH1cbiAgaWYgKHNoZWV0TmFtZSkge1xuICAgIHByZSArPSBzaGVldE5hbWU7XG4gICAgcXVvdGUgKz0gK3JlQmFubmVkQ2hhcnMudGVzdChzaGVldE5hbWUpO1xuICB9XG4gIGlmIChxdW90ZSkge1xuICAgIHByZSA9IFwiJ1wiICsgcHJlLnJlcGxhY2UoLycvZywgXCInJ1wiKSArIFwiJ1wiO1xuICB9XG4gIHJldHVybiBwcmUgPyBwcmUgKyAnIScgOiBwcmU7XG59XG4iLCJpbXBvcnQgeyBNQVhfUk9XUywgTUFYX0NPTFMgfSBmcm9tICcuL2NvbnN0YW50cy5qcyc7XG5pbXBvcnQgeyBwYXJzZVJlZiB9IGZyb20gJy4vcGFyc2VSZWYuanMnO1xuaW1wb3J0IHsgdG9Db2wgfSBmcm9tICcuL3RvQ29sLmpzJztcbmltcG9ydCB7IGZyb21Db2wgfSBmcm9tICcuL2Zyb21Db2wuanMnO1xuaW1wb3J0IHsgc3RyaW5naWZ5UHJlZml4LCBzdHJpbmdpZnlQcmVmaXhBbHQgfSBmcm9tICcuL3N0cmluZ2lmeVByZWZpeC5qcyc7XG5cbmNvbnN0IGNsYW1wID0gKG1pbiwgdmFsLCBtYXgpID0+IE1hdGgubWluKE1hdGgubWF4KHZhbCwgbWluKSwgbWF4KTtcbmNvbnN0IHRvQ29sU3RyID0gKGMsIGEpID0+IChhID8gJyQnIDogJycpICsgdG9Db2woYyk7XG5jb25zdCB0b1Jvd1N0ciA9IChyLCBhKSA9PiAoYSA/ICckJyA6ICcnKSArIHRvUm93KHIpO1xuXG5leHBvcnQgZnVuY3Rpb24gZnJvbVJvdyAocm93U3RyKSB7XG4gIHJldHVybiArcm93U3RyIC0gMTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRvUm93ICh0b3ApIHtcbiAgcmV0dXJuIFN0cmluZyh0b3AgKyAxKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRvUmVsYXRpdmUgKHJhbmdlKSB7XG4gIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCByYW5nZSwgeyAkbGVmdDogZmFsc2UsICRyaWdodDogZmFsc2UsICR0b3A6IGZhbHNlLCAkYm90dG9tOiBmYWxzZSB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRvQWJzb2x1dGUgKHJhbmdlKSB7XG4gIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCByYW5nZSwgeyAkbGVmdDogdHJ1ZSwgJHJpZ2h0OiB0cnVlLCAkdG9wOiB0cnVlLCAkYm90dG9tOiB0cnVlIH0pO1xufVxuXG4vKipcbiAqIEBpZ25vcmVcbiAqIEBwYXJhbSB7J2hlYWQnIHwgJ3RhaWwnIHwgJ2JvdGgnIHwgbnVsbCB8IHVuZGVmaW5lZH0gdHJpbSBEb2VzIHRoZSByYW5nZSBoYXZlIHRyaW1taW5nP1xuICogQHJldHVybnMge3N0cmluZ30gVGhlIGFwcHJvcHJpYXRlIHJhbmdlIGpvaW4gb3BlcmF0b3JcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJhbmdlT3BlcmF0b3IgKHRyaW0pIHtcbiAgaWYgKHRyaW0gPT09ICdib3RoJykge1xuICAgIHJldHVybiAnLjouJztcbiAgfVxuICBlbHNlIGlmICh0cmltID09PSAnaGVhZCcpIHtcbiAgICByZXR1cm4gJy46JztcbiAgfVxuICBlbHNlIGlmICh0cmltID09PSAndGFpbCcpIHtcbiAgICByZXR1cm4gJzouJztcbiAgfVxuICByZXR1cm4gJzonO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHJpbURpcmVjdGlvbiAoaGVhZCwgdGFpbCkge1xuICBpZiAoaGVhZCAmJiB0YWlsKSB7XG4gICAgcmV0dXJuICdib3RoJztcbiAgfVxuICBpZiAoaGVhZCkge1xuICAgIHJldHVybiAnaGVhZCc7XG4gIH1cbiAgaWYgKHRhaWwpIHtcbiAgICByZXR1cm4gJ3RhaWwnO1xuICB9XG59XG5cbi8qKlxuICogU3RyaW5naWZ5IGEgcmFuZ2Ugb2JqZWN0IGludG8gQTEgc3ludGF4LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAaWdub3JlXG4gKiBAc2VlIHBhcnNlQTFSZWZcbiAqIEBwYXJhbSB7UmFuZ2VBMX0gcmFuZ2UgIEEgcmFuZ2Ugb2JqZWN0XG4gKiBAcmV0dXJucyB7c3RyaW5nfSAgQW4gQTEtc3R5bGUgc3RyaW5nIHJlcHJlc2VuYXRpb24gb2YgYSByYW5nZVxuICovXG5leHBvcnQgZnVuY3Rpb24gdG9BMSAocmFuZ2UpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHByZWZlci1jb25zdFxuICBsZXQgeyB0b3AsIGxlZnQsIGJvdHRvbSwgcmlnaHQsIHRyaW0gfSA9IHJhbmdlO1xuICBjb25zdCB7ICRsZWZ0LCAkcmlnaHQsICR0b3AsICRib3R0b20gfSA9IHJhbmdlO1xuICBjb25zdCBub0xlZnQgPSBsZWZ0ID09IG51bGw7XG4gIGNvbnN0IG5vUmlnaHQgPSByaWdodCA9PSBudWxsO1xuICBjb25zdCBub1RvcCA9IHRvcCA9PSBudWxsO1xuICBjb25zdCBub0JvdHRvbSA9IGJvdHRvbSA9PSBudWxsO1xuICAvLyBhbGxvdyBza2lwcGluZyByaWdodCBhbmQgYm90dG9tIHRvIGRlZmluZSBhIGNlbGxcbiAgdG9wID0gY2xhbXAoMCwgdG9wIHwgMCwgTUFYX1JPV1MpO1xuICBsZWZ0ID0gY2xhbXAoMCwgbGVmdCB8IDAsIE1BWF9DT0xTKTtcbiAgaWYgKCFub0xlZnQgJiYgIW5vVG9wICYmIG5vUmlnaHQgJiYgbm9Cb3R0b20pIHtcbiAgICBib3R0b20gPSB0b3A7XG4gICAgcmlnaHQgPSBsZWZ0O1xuICB9XG4gIGVsc2Uge1xuICAgIGJvdHRvbSA9IGNsYW1wKDAsIGJvdHRvbSB8IDAsIE1BWF9ST1dTKTtcbiAgICByaWdodCA9IGNsYW1wKDAsIHJpZ2h0IHwgMCwgTUFYX0NPTFMpO1xuICB9XG4gIGNvbnN0IG9wID0gcmFuZ2VPcGVyYXRvcih0cmltKTtcbiAgLy8gQTpBXG4gIGNvbnN0IGFsbFJvd3MgPSB0b3AgPT09IDAgJiYgYm90dG9tID49IE1BWF9ST1dTO1xuICBjb25zdCBoYXZlQWJzQ29sID0gKCRsZWZ0ICYmICFub0xlZnQpIHx8ICgkcmlnaHQgJiYgIW5vUmlnaHQpO1xuICBpZiAoKGFsbFJvd3MgJiYgIW5vTGVmdCAmJiAhbm9SaWdodCAmJiAoIWhhdmVBYnNDb2wgfHwgbGVmdCA9PT0gcmlnaHQpKSB8fCAobm9Ub3AgJiYgbm9Cb3R0b20pKSB7XG4gICAgcmV0dXJuIHRvQ29sU3RyKGxlZnQsICRsZWZ0KSArIG9wICsgdG9Db2xTdHIocmlnaHQsICRyaWdodCk7XG4gIH1cbiAgLy8gMToxXG4gIGNvbnN0IGFsbENvbHMgPSBsZWZ0ID09PSAwICYmIHJpZ2h0ID49IE1BWF9DT0xTO1xuICBjb25zdCBoYXZlQWJzUm93ID0gKCR0b3AgJiYgIW5vVG9wKSB8fCAoJGJvdHRvbSAmJiAhbm9Cb3R0b20pO1xuICBpZiAoKGFsbENvbHMgJiYgIW5vVG9wICYmICFub0JvdHRvbSAmJiAoIWhhdmVBYnNSb3cgfHwgdG9wID09PSBib3R0b20pKSB8fCAobm9MZWZ0ICYmIG5vUmlnaHQpKSB7XG4gICAgcmV0dXJuIHRvUm93U3RyKHRvcCwgJHRvcCkgKyBvcCArIHRvUm93U3RyKGJvdHRvbSwgJGJvdHRvbSk7XG4gIH1cbiAgLy8gQTE6MVxuICBpZiAoIW5vTGVmdCAmJiAhbm9Ub3AgJiYgIW5vUmlnaHQgJiYgbm9Cb3R0b20pIHtcbiAgICByZXR1cm4gdG9Db2xTdHIobGVmdCwgJGxlZnQpICsgdG9Sb3dTdHIodG9wLCAkdG9wKSArIG9wICsgdG9Db2xTdHIocmlnaHQsICRyaWdodCk7XG4gIH1cbiAgLy8gQTpBMSA9PiBBMToxXG4gIGlmICghbm9MZWZ0ICYmIG5vVG9wICYmICFub1JpZ2h0ICYmICFub0JvdHRvbSkge1xuICAgIHJldHVybiB0b0NvbFN0cihsZWZ0LCAkbGVmdCkgKyB0b1Jvd1N0cihib3R0b20sICRib3R0b20pICsgb3AgKyB0b0NvbFN0cihyaWdodCwgJHJpZ2h0KTtcbiAgfVxuICAvLyBBMTpBXG4gIGlmICghbm9MZWZ0ICYmICFub1RvcCAmJiBub1JpZ2h0ICYmICFub0JvdHRvbSkge1xuICAgIHJldHVybiB0b0NvbFN0cihsZWZ0LCAkbGVmdCkgKyB0b1Jvd1N0cih0b3AsICR0b3ApICsgb3AgKyB0b1Jvd1N0cihib3R0b20sICRib3R0b20pO1xuICB9XG4gIC8vIEE6QTEgPT4gQTE6QVxuICBpZiAobm9MZWZ0ICYmICFub1RvcCAmJiAhbm9SaWdodCAmJiAhbm9Cb3R0b20pIHtcbiAgICByZXR1cm4gdG9Db2xTdHIocmlnaHQsICRyaWdodCkgKyB0b1Jvd1N0cih0b3AsICR0b3ApICsgb3AgKyB0b1Jvd1N0cihib3R0b20sICRib3R0b20pO1xuICB9XG4gIC8vIEExOkExXG4gIGlmIChyaWdodCAhPT0gbGVmdCB8fCBib3R0b20gIT09IHRvcCB8fCAkcmlnaHQgIT09ICRsZWZ0IHx8ICRib3R0b20gIT09ICR0b3ApIHtcbiAgICByZXR1cm4gdG9Db2xTdHIobGVmdCwgJGxlZnQpICsgdG9Sb3dTdHIodG9wLCAkdG9wKSArIG9wICtcbiAgICAgICAgICAgdG9Db2xTdHIocmlnaHQsICRyaWdodCkgKyB0b1Jvd1N0cihib3R0b20sICRib3R0b20pO1xuICB9XG4gIC8vIEExXG4gIHJldHVybiB0b0NvbFN0cihsZWZ0LCAkbGVmdCkgKyB0b1Jvd1N0cih0b3AsICR0b3ApO1xufVxuXG5mdW5jdGlvbiBzcGxpdEExIChzdHIpIHtcbiAgY29uc3QgbSA9IC9eKD89LikoXFwkKD89XFxEKSk/KFtBLVphLXpdezAsM30pPyhcXCQpPyhbMS05XVswLTldezAsNn0pPyQvLmV4ZWMoc3RyKTtcbiAgaWYgKCFtIHx8ICghbVsyXSAmJiAhbVs0XSkpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICByZXR1cm4gW1xuICAgIG1bNF0gPyBmcm9tUm93KG1bNF0pIDogbnVsbCwgLy8gcm93IGluZGV4IG9yIG51bGxcbiAgICBtWzJdID8gZnJvbUNvbChtWzJdKSA6IG51bGwsIC8vIGNvbCBpbmRleCBvciBudWxsXG4gICAgISFtWzNdLCAvLyBpcyByb3cgYWJzb2x1dGU/XG4gICAgISFtWzFdICAvLyBpcyBjb2wgYWJzb2x1dGU/XG4gIF07XG59XG5cbi8qKlxuICogUGFyc2UgYSBzaW1wbGUgc3RyaW5nIHJlZmVyZW5jZSB0byBhbiBBMSByYW5nZSBpbnRvIGEgcmFuZ2Ugb2JqZWN0LlxuICogV2lsbCBhY2NlcHQgYEExYCwgYEEyYCwgYEE6QWAsIG9yIGAxOjFgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAaWdub3JlXG4gKiBAc2VlIHBhcnNlQTFSZWZcbiAqIEBwYXJhbSB7c3RyaW5nfSByYW5nZVN0cmluZyAgQSByYW5nZSBzdHJpbmdcbiAqIEByZXR1cm5zIHsoUmFuZ2VBMXxudWxsKX0gQW4gb2JqZWN0IHJlcHJlc2VudGluZyBhIHZhbGlkIHJhbmdlIG9yIG51bGwgaWYgaXQgaXMgaW52YWxpZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZyb21BMSAocmFuZ2VTdHJpbmcpIHtcbiAgbGV0IHRvcCA9IG51bGw7XG4gIGxldCBsZWZ0ID0gbnVsbDtcbiAgbGV0IGJvdHRvbSA9IG51bGw7XG4gIGxldCByaWdodCA9IG51bGw7XG4gIGxldCAkdG9wID0gZmFsc2U7XG4gIGxldCAkbGVmdCA9IGZhbHNlO1xuICBsZXQgJGJvdHRvbSA9IGZhbHNlO1xuICBsZXQgJHJpZ2h0ID0gZmFsc2U7XG4gIGNvbnN0IFsgcGFydDEsIG9wMSwgcGFydDIsIG9wMiwgcGFydDMgXSA9IHJhbmdlU3RyaW5nLnNwbGl0KC8oXFwuPzpcXC4/KS8pO1xuICBpZiAob3AyIHx8IHBhcnQzKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgY29uc3QgdHJpbSA9IHRyaW1EaXJlY3Rpb24oISFvcDEgJiYgb3AxWzBdID09PSAnLicsICEhb3AxICYmIG9wMVtvcDEubGVuZ3RoIC0gMV0gPT09ICcuJyk7XG4gIGNvbnN0IHAxID0gc3BsaXRBMShwYXJ0MSk7XG4gIGNvbnN0IHAyID0gcGFydDIgPyBzcGxpdEExKHBhcnQyKSA6IG51bGw7XG4gIGlmICghcDEgfHwgKHBhcnQyICYmICFwMikpIHtcbiAgICAvLyBpbnZhbGlkIHNlY3Rpb25cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICAvLyBwYXJ0IDEgYml0c1xuICBpZiAocDFbMF0gIT0gbnVsbCAmJiBwMVsxXSAhPSBudWxsKSB7XG4gICAgWyB0b3AsIGxlZnQsICR0b3AsICRsZWZ0IF0gPSBwMTtcbiAgfVxuICBlbHNlIGlmIChwMVswXSA9PSBudWxsICYmIHAxWzFdICE9IG51bGwpIHtcbiAgICBbICwgbGVmdCwgLCAkbGVmdCBdID0gcDE7XG4gIH1cbiAgZWxzZSBpZiAocDFbMF0gIT0gbnVsbCAmJiBwMVsxXSA9PSBudWxsKSB7XG4gICAgWyB0b3AsICwgJHRvcCBdID0gcDE7XG4gIH1cbiAgLy8gcGFydCAyIGJpdHNcbiAgaWYgKCFwYXJ0Mikge1xuICAgIC8vIHBhcnQgMiBtdXN0IGV4aXN0IGlmIGVpdGhlciB0b3Agb3IgbGVmdCBpcyBudWxsOlxuICAgIC8vIHRoaXMgZGlzYWxsb3dzIGEgc2luZ2xlIG51bSBvciBjb2wgcGF0dGVybnNcbiAgICBpZiAodG9wID09IG51bGwgfHwgbGVmdCA9PSBudWxsKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgYm90dG9tID0gdG9wO1xuICAgIHJpZ2h0ID0gbGVmdDtcbiAgICAkYm90dG9tID0gJHRvcDtcbiAgICAkcmlnaHQgPSAkbGVmdDtcbiAgfVxuICBlbHNlIGlmIChwMlswXSAhPSBudWxsICYmIHAyWzFdICE9IG51bGwpIHtcbiAgICBbIGJvdHRvbSwgcmlnaHQsICRib3R0b20sICRyaWdodCBdID0gcDI7XG4gIH1cbiAgZWxzZSBpZiAocDJbMF0gPT0gbnVsbCAmJiBwMlsxXSAhPSBudWxsKSB7XG4gICAgWyAsIHJpZ2h0LCAsICRyaWdodCBdID0gcDI7XG4gIH1cbiAgZWxzZSBpZiAocDJbMF0gIT0gbnVsbCAmJiBwMlsxXSA9PSBudWxsKSB7XG4gICAgWyBib3R0b20sICwgJGJvdHRvbSBdID0gcDI7XG4gIH1cbiAgLy8gZmxpcCBsZWZ0L3JpZ2h0IGFuZCB0b3AvYm90dG9tIGFzIG5lZWRlZFxuICAvLyBmb3IgcGFydGlhbCByYW5nZXMgd2UgcGVyZmVyIHRoZSBjb29yZCBvbiB0aGUgbGVmdC1zaWRlIG9mIHRoZSA6XG4gIGlmIChyaWdodCAhPSBudWxsICYmIChsZWZ0ID09IG51bGwgfHwgKGxlZnQgIT0gbnVsbCAmJiByaWdodCA8IGxlZnQpKSkge1xuICAgIFsgbGVmdCwgcmlnaHQsICRsZWZ0LCAkcmlnaHQgXSA9IFsgcmlnaHQsIGxlZnQsICRyaWdodCwgJGxlZnQgXTtcbiAgfVxuICBpZiAoYm90dG9tICE9IG51bGwgJiYgKHRvcCA9PSBudWxsIHx8ICh0b3AgIT0gbnVsbCAmJiBib3R0b20gPCB0b3ApKSkge1xuICAgIFsgdG9wLCBib3R0b20sICR0b3AsICRib3R0b20gXSA9IFsgYm90dG9tLCB0b3AsICRib3R0b20sICR0b3AgXTtcbiAgfVxuICBjb25zdCByID0geyB0b3AsIGxlZnQsIGJvdHRvbSwgcmlnaHQsICR0b3AsICRsZWZ0LCAkYm90dG9tLCAkcmlnaHQgfTtcbiAgaWYgKHRyaW0pIHsgci50cmltID0gdHJpbTsgfVxuICByZXR1cm4gcjtcbn1cblxuLyoqXG4gKiBQYXJzZSBhIHN0cmluZyByZWZlcmVuY2UgaW50byBhbiBvYmplY3QgcmVwcmVzZW50aW5nIGl0LlxuICpcbiAqIGBgYGpzXG4gKiBwYXJzZUExUmVmKCdTaGVldDEhQSQxOiRCMicpO1xuICogLy8gPT4ge1xuICogLy8gICBjb250ZXh0OiBbICdTaGVldDEnIF0sXG4gKiAvLyAgIHJhbmdlOiB7XG4gKiAvLyAgICAgdG9wOiAwLFxuICogLy8gICAgIGxlZnQ6IDAsXG4gKiAvLyAgICAgYm90dG9tOiAxLFxuICogLy8gICAgIHJpZ2h0OiAxXG4gKiAvLyAgICAgJHRvcDogdHJ1ZSxcbiAqIC8vICAgICAkbGVmdDogZmFsc2UsXG4gKiAvLyAgICAgJGJvdHRvbTogZmFsc2UsXG4gKiAvLyAgICAgJHJpZ2h0OiB0cnVlXG4gKiAvLyAgIH1cbiAqIC8vIH1cbiAqIGBgYFxuICpcbiAqIEZvciBBOkEgb3IgQTE6QSBzdHlsZSByYW5nZXMsIGBudWxsYCB3aWxsIGJlIHVzZWQgZm9yIGFueSBkaW1lbnNpb25zIHRoYXQgdGhlXG4gKiBzeW50YXggZG9lcyBub3Qgc3BlY2lmeTpcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gcmVmU3RyaW5nICBBbiBBMS1zdHlsZSByZWZlcmVuY2Ugc3RyaW5nXG4gKiBAcGFyYW0ge29iamVjdH0gW29wdGlvbnM9e31dICBPcHRpb25zXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLmFsbG93TmFtZWQ9dHJ1ZV0gIEVuYWJsZSBwYXJzaW5nIG5hbWVzIGFzIHdlbGwgYXMgcmFuZ2VzLlxuICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy5hbGxvd1Rlcm5hcnk9ZmFsc2VdICBFbmFibGVzIHRoZSByZWNvZ25pdGlvbiBvZiB0ZXJuYXJ5IHJhbmdlcyBpbiB0aGUgc3R5bGUgb2YgYEExOkFgIG9yIGBBMToxYC4gVGhlc2UgYXJlIHN1cHBvcnRlZCBieSBHb29nbGUgU2hlZXRzIGJ1dCBub3QgRXhjZWwuIFNlZTogUmVmZXJlbmNlcy5tZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMueGxzeD1mYWxzZV0gIFN3aXRjaGVzIHRvIHRoZSBgWzFdU2hlZXQxIUExYCBvciBgWzFdIW5hbWVgIHByZWZpeCBzeW50YXggZm9ybSBmb3IgZXh0ZXJuYWwgd29ya2Jvb2tzLiBTZWU6IFtQcmVmaXhlcy5tZF0oLi9QcmVmaXhlcy5tZClcbiAqIEByZXR1cm5zIHsoUmVmZXJlbmNlQTF8bnVsbCl9IEFuIG9iamVjdCByZXByZXNlbnRpbmcgYSB2YWxpZCByZWZlcmVuY2Ugb3IgbnVsbCBpZiBpdCBpcyBpbnZhbGlkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VBMVJlZiAocmVmU3RyaW5nLCB7IGFsbG93TmFtZWQgPSB0cnVlLCBhbGxvd1Rlcm5hcnkgPSBmYWxzZSwgeGxzeCA9IGZhbHNlIH0gPSB7fSkge1xuICBjb25zdCBkID0gcGFyc2VSZWYocmVmU3RyaW5nLCB7IGFsbG93TmFtZWQsIGFsbG93VGVybmFyeSwgeGxzeCwgcjFjMTogZmFsc2UgfSk7XG4gIGlmIChkICYmIChkLnIwIHx8IGQubmFtZSkpIHtcbiAgICBsZXQgcmFuZ2UgPSBudWxsO1xuICAgIGlmIChkLnIwKSB7XG4gICAgICByYW5nZSA9IGZyb21BMShkLnIxID8gZC5yMCArIGQub3BlcmF0b3IgKyBkLnIxIDogZC5yMCk7XG4gICAgfVxuICAgIGlmIChyYW5nZSkge1xuICAgICAgcmV0dXJuIHhsc3hcbiAgICAgICAgPyB7IHdvcmtib29rTmFtZTogZC53b3JrYm9va05hbWUsIHNoZWV0TmFtZTogZC5zaGVldE5hbWUsIHJhbmdlIH1cbiAgICAgICAgOiB7IGNvbnRleHQ6IGQuY29udGV4dCwgcmFuZ2UgfTtcbiAgICB9XG4gICAgaWYgKGQubmFtZSkge1xuICAgICAgcmV0dXJuIHhsc3hcbiAgICAgICAgPyB7IHdvcmtib29rTmFtZTogZC53b3JrYm9va05hbWUsIHNoZWV0TmFtZTogZC5zaGVldE5hbWUsIG5hbWU6IGQubmFtZSB9XG4gICAgICAgIDogeyBjb250ZXh0OiBkLmNvbnRleHQsIG5hbWU6IGQubmFtZSB9O1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICByZXR1cm4gbnVsbDtcbn1cblxuLyoqXG4gKiBHZXQgYW4gQTEtc3R5bGUgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGEgcmVmZXJlbmNlIG9iamVjdC5cbiAqXG4gKiBgYGBqc1xuICogc3RyaW5naWZ5QTFSZWYoe1xuICogICBjb250ZXh0OiBbICdTaGVldDEnIF0sXG4gKiAgIHJhbmdlOiB7XG4gKiAgICAgdG9wOiAwLFxuICogICAgIGxlZnQ6IDAsXG4gKiAgICAgYm90dG9tOiAxLFxuICogICAgIHJpZ2h0OiAxLFxuICogICAgICR0b3A6IHRydWUsXG4gKiAgICAgJGxlZnQ6IGZhbHNlLFxuICogICAgICRib3R0b206IGZhbHNlLFxuICogICAgICRyaWdodDogdHJ1ZVxuICogICB9XG4gKiB9KTtcbiAqIC8vID0+ICdTaGVldDEhQSQxOiRCMidcbiAqIGBgYFxuICpcbiAqIEBwYXJhbSB7UmVmZXJlbmNlQTF9IHJlZk9iamVjdCBBIHJlZmVyZW5jZSBvYmplY3RcbiAqIEBwYXJhbSB7b2JqZWN0fSBbb3B0aW9ucz17fV0gIE9wdGlvbnNcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMueGxzeD1mYWxzZV0gIFN3aXRjaGVzIHRvIHRoZSBgWzFdU2hlZXQxIUExYCBvciBgWzFdIW5hbWVgIHByZWZpeCBzeW50YXggZm9ybSBmb3IgZXh0ZXJuYWwgd29ya2Jvb2tzLiBTZWU6IFtQcmVmaXhlcy5tZF0oLi9QcmVmaXhlcy5tZClcbiAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSByZWZlcmVuY2UgaW4gQTEtc3R5bGUgc3RyaW5nIGZvcm1hdFxuICovXG5leHBvcnQgZnVuY3Rpb24gc3RyaW5naWZ5QTFSZWYgKHJlZk9iamVjdCwgeyB4bHN4ID0gZmFsc2UgfSA9IHt9KSB7XG4gIGNvbnN0IHByZWZpeCA9IHhsc3hcbiAgICA/IHN0cmluZ2lmeVByZWZpeEFsdChyZWZPYmplY3QpXG4gICAgOiBzdHJpbmdpZnlQcmVmaXgocmVmT2JqZWN0KTtcbiAgcmV0dXJuIHByZWZpeCArIChcbiAgICByZWZPYmplY3QubmFtZSA/IHJlZk9iamVjdC5uYW1lIDogdG9BMShyZWZPYmplY3QucmFuZ2UpXG4gICk7XG59XG5cbi8qKlxuICogRmlsbCB0aGUgYW55IG1pc3NpbmcgYm91bmRzIGluIHJhbmdlIG9iamVjdHMuIFRvcCB3aWxsIGJlIHNldCB0byAwLCBib3R0b20gdG9cbiAqIDEwNDg1NzUsIGxlZnQgdG8gMCwgYW5kIHJpZ2h0IHRvIDE2MzgzLCBpZiB0aGV5IGFyZSBgbnVsbGAgb3IgYHVuZGVmaW5lZGAuXG4gKlxuICogYGBganNcbiAqIGFkZEExUmFuZ2VCb3VuZHMoe1xuICogICBjb250ZXh0OiBbICdTaGVldDEnIF0sXG4gKiAgIHJhbmdlOiB7XG4gKiAgICAgdG9wOiAwLFxuICogICAgIGxlZnQ6IDAsXG4gKiAgICAgYm90dG9tOiAxLFxuICogICAgICR0b3A6IHRydWUsXG4gKiAgICAgJGxlZnQ6IGZhbHNlLFxuICogICAgICRib3R0b206IGZhbHNlLFxuICogICB9XG4gKiB9KTtcbiAqIC8vID0+IHtcbiAqIC8vICAgY29udGV4dDogWyAnU2hlZXQxJyBdLFxuICogLy8gICByYW5nZToge1xuICogLy8gICAgIHRvcDogMCxcbiAqIC8vICAgICBsZWZ0OiAwLFxuICogLy8gICAgIGJvdHRvbTogMSxcbiAqIC8vICAgICByaWdodDogMTYzODMsXG4gKiAvLyAgICAgJHRvcDogdHJ1ZSxcbiAqIC8vICAgICAkbGVmdDogZmFsc2UsXG4gKiAvLyAgICAgJGJvdHRvbTogZmFsc2UsXG4gKiAvLyAgICAgJHJpZ2h0OiBmYWxzZVxuICogLy8gICB9XG4gKiAvLyB9XG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0ge1JhbmdlQTF9IHJhbmdlIFRoZSByYW5nZSBwYXJ0IG9mIGEgcmVmZXJlbmNlIG9iamVjdC5cbiAqIEByZXR1cm5zIHtSYW5nZUExfSBzYW1lIHJhbmdlIHdpdGggbWlzc2luZyBib3VuZHMgZmlsbGVkIGluLlxuICovXG5leHBvcnQgZnVuY3Rpb24gYWRkQTFSYW5nZUJvdW5kcyAocmFuZ2UpIHtcbiAgaWYgKHJhbmdlLnRvcCA9PSBudWxsKSB7XG4gICAgcmFuZ2UudG9wID0gMDtcbiAgICByYW5nZS4kdG9wID0gZmFsc2U7XG4gIH1cbiAgaWYgKHJhbmdlLmJvdHRvbSA9PSBudWxsKSB7XG4gICAgcmFuZ2UuYm90dG9tID0gTUFYX1JPV1M7XG4gICAgcmFuZ2UuJGJvdHRvbSA9IGZhbHNlO1xuICB9XG4gIGlmIChyYW5nZS5sZWZ0ID09IG51bGwpIHtcbiAgICByYW5nZS5sZWZ0ID0gMDtcbiAgICByYW5nZS4kbGVmdCA9IGZhbHNlO1xuICB9XG4gIGlmIChyYW5nZS5yaWdodCA9PSBudWxsKSB7XG4gICAgcmFuZ2UucmlnaHQgPSBNQVhfQ09MUztcbiAgICByYW5nZS4kcmlnaHQgPSBmYWxzZTtcbiAgfVxuICByZXR1cm4gcmFuZ2U7XG59XG4iLCJpbXBvcnQgeyBwYXJzZVJlZiB9IGZyb20gJy4vcGFyc2VSZWYuanMnO1xuaW1wb3J0IHsgcGFyc2VTUmFuZ2UgfSBmcm9tICcuL3BhcnNlU1JhbmdlLmpzJztcblxuLyoqXG4gKiBQYXJzZSBhIHN0cnVjdHVyZWQgcmVmZXJlbmNlIHN0cmluZyBpbnRvIGFuIG9iamVjdCByZXByZXNlbnRpbmcgaXQuXG4gKlxuICogYGBganNcbiAqIHBhcnNlU3RydWN0UmVmKCd3b3JrYm9vay54bHN4IXRhYmxlTmFtZVtbI0RhdGFdLFtDb2x1bW4xXTpbQ29sdW1uMl1dJyk7XG4gKiAvLyA9PiB7XG4gKiAvLyAgIGNvbnRleHQ6IFsgJ3dvcmtib29rLnhsc3gnIF0sXG4gKiAvLyAgIHNlY3Rpb25zOiBbICdkYXRhJyBdLFxuICogLy8gICBjb2x1bW5zOiBbICdteSBjb2x1bW4nLCAnQGZvbycgXSxcbiAqIC8vICAgdGFibGU6ICd0YWJsZU5hbWUnLFxuICogLy8gfVxuICogYGBgXG4gKlxuICogRm9yIEE6QSBvciBBMTpBIHN0eWxlIHJhbmdlcywgYG51bGxgIHdpbGwgYmUgdXNlZCBmb3IgYW55IGRpbWVuc2lvbnMgdGhhdCB0aGVcbiAqIHN5bnRheCBkb2VzIG5vdCBzcGVjaWZ5OlxuICpcbiAqIEB0dXRvcmlhbCBSZWZlcmVuY2VzLm1kXG4gKiBAcGFyYW0ge3N0cmluZ30gcmVmICBBIHN0cnVjdHVyZWQgcmVmZXJlbmNlIHN0cmluZ1xuICogQHBhcmFtIHtvYmplY3R9IFtvcHRpb25zPXt9XSAgT3B0aW9uc1xuICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy54bHN4PWZhbHNlXSAgU3dpdGNoZXMgdG8gdGhlIGBbMV1TaGVldDEhQTFgIG9yIGBbMV0hbmFtZWAgcHJlZml4IHN5bnRheCBmb3JtIGZvciBleHRlcm5hbCB3b3JrYm9va3MuIFNlZTogW1ByZWZpeGVzLm1kXSguL1ByZWZpeGVzLm1kKVxuICogQHJldHVybnMgeyhSZWZlcmVuY2VTdHJ1Y3R8bnVsbCl9IEFuIG9iamVjdCByZXByZXNlbnRpbmcgYSB2YWxpZCByZWZlcmVuY2Ugb3IgbnVsbCBpZiBpdCBpcyBpbnZhbGlkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VTdHJ1Y3RSZWYgKHJlZiwgb3B0aW9ucyA9IHsgeGxzeDogZmFsc2UgfSkge1xuICBjb25zdCByID0gcGFyc2VSZWYocmVmLCBvcHRpb25zKTtcbiAgaWYgKHIgJiYgci5zdHJ1Y3QpIHtcbiAgICBjb25zdCBzdHJ1Y3REYXRhID0gcGFyc2VTUmFuZ2Uoci5zdHJ1Y3QpO1xuICAgIGlmIChzdHJ1Y3REYXRhICYmIHN0cnVjdERhdGEubGVuZ3RoID09PSByLnN0cnVjdC5sZW5ndGgpIHtcbiAgICAgIHJldHVybiBvcHRpb25zLnhsc3hcbiAgICAgICAgPyB7XG4gICAgICAgICAgd29ya2Jvb2tOYW1lOiByLndvcmtib29rTmFtZSxcbiAgICAgICAgICBzaGVldE5hbWU6IHIuc2hlZXROYW1lLFxuICAgICAgICAgIHRhYmxlOiByLm5hbWUsXG4gICAgICAgICAgY29sdW1uczogc3RydWN0RGF0YS5jb2x1bW5zLFxuICAgICAgICAgIHNlY3Rpb25zOiBzdHJ1Y3REYXRhLnNlY3Rpb25zXG4gICAgICAgIH1cbiAgICAgICAgOiB7XG4gICAgICAgICAgY29udGV4dDogci5jb250ZXh0LFxuICAgICAgICAgIHRhYmxlOiByLm5hbWUsXG4gICAgICAgICAgY29sdW1uczogc3RydWN0RGF0YS5jb2x1bW5zLFxuICAgICAgICAgIHNlY3Rpb25zOiBzdHJ1Y3REYXRhLnNlY3Rpb25zXG4gICAgICAgIH07XG4gICAgfVxuICB9XG4gIHJldHVybiBudWxsO1xufVxuIiwiaW1wb3J0IHsgUkVGX1JBTkdFLCBSRUZfQkVBTSwgUkVGX1RFUk5BUlksIFVOS05PV04sIFJFRl9TVFJVQ1QgfSBmcm9tICcuL2NvbnN0YW50cy5qcyc7XG5pbXBvcnQgeyBwYXJzZUExUmVmIH0gZnJvbSAnLi9hMS5qcyc7XG5pbXBvcnQgeyBwYXJzZVN0cnVjdFJlZiB9IGZyb20gJy4vcGFyc2VTdHJ1Y3RSZWYuanMnO1xuXG5mdW5jdGlvbiBnZXRJRGVyICgpIHtcbiAgbGV0IGkgPSAxO1xuICByZXR1cm4gKCkgPT4gJ2Z4ZycgKyAoaSsrKTtcbn1cblxuZnVuY3Rpb24gc2FtZVZhbHVlIChhLCBiKSB7XG4gIGlmIChhID09IG51bGwgJiYgYiA9PSBudWxsKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgcmV0dXJuIGEgPT09IGI7XG59XG5cbmZ1bmN0aW9uIHNhbWVBcnJheSAoYSwgYikge1xuICBpZiAoKEFycmF5LmlzQXJyYXkoYSkgIT09IEFycmF5LmlzQXJyYXkoYikpIHx8IGEubGVuZ3RoICE9PSBiLmxlbmd0aCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBmb3IgKGxldCBpID0gMDsgaSA8IGEubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoIXNhbWVWYWx1ZShhW2ldLCBiW2ldKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gc2FtZVN0ciAoYSwgYikge1xuICBpZiAoIWEgJiYgIWIpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICByZXR1cm4gU3RyaW5nKGEpLnRvTG93ZXJDYXNlKCkgPT09IFN0cmluZyhiKS50b0xvd2VyQ2FzZSgpO1xufVxuXG5mdW5jdGlvbiBpc0VxdWl2YWxlbnQgKHJlZkEsIHJlZkIpIHtcbiAgLy8gaWYgbmFtZWQsIG5hbWUgbXVzdCBtYXRjaFxuICBpZiAoKHJlZkEubmFtZSB8fCByZWZCLm5hbWUpICYmIHJlZkEubmFtZSAhPT0gcmVmQi5uYW1lKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIC8vIGlmIHN0cnVjdHVyZWRcbiAgaWYgKChyZWZBLmNvbHVtbnMgfHwgcmVmQi5jb2x1bW5zKSkge1xuICAgIGlmIChyZWZBLnRhYmxlICE9PSByZWZCLnRhYmxlKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGlmICghc2FtZUFycmF5KHJlZkEuY29sdW1ucywgcmVmQi5jb2x1bW5zKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBpZiAoIXNhbWVBcnJheShyZWZBLnNlY3Rpb25zLCByZWZCLnNlY3Rpb25zKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuICAvLyBpZiByYW5nZWQsIHJhbmdlIG11c3QgaGF2ZSB0aGUgc2FtZSBkaW1lbnNpb25zICh3ZSBkb24ndCBjYXJlIGFib3V0ICQpXG4gIGlmIChyZWZBLnJhbmdlIHx8IHJlZkIucmFuZ2UpIHtcbiAgICBpZiAoXG4gICAgICAhc2FtZVZhbHVlKHJlZkEucmFuZ2UudG9wLCByZWZCLnJhbmdlLnRvcCkgfHxcbiAgICAgICFzYW1lVmFsdWUocmVmQS5yYW5nZS5ib3R0b20sIHJlZkIucmFuZ2UuYm90dG9tKSB8fFxuICAgICAgIXNhbWVWYWx1ZShyZWZBLnJhbmdlLmxlZnQsIHJlZkIucmFuZ2UubGVmdCkgfHxcbiAgICAgICFzYW1lVmFsdWUocmVmQS5yYW5nZS5yaWdodCwgcmVmQi5yYW5nZS5yaWdodClcbiAgICApIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cbiAgLy8gbXVzdCBoYXZlIHNhbWUgY29udGV4dFxuICBpZiAoXG4gICAgIXNhbWVTdHIocmVmQS53b3JrYm9va05hbWUsIHJlZkIud29ya2Jvb2tOYW1lKSB8fFxuICAgICFzYW1lU3RyKHJlZkEuc2hlZXROYW1lLCByZWZCLnNoZWV0TmFtZSlcbiAgKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiBhZGRDb250ZXh0IChyZWYsIHNoZWV0TmFtZSwgd29ya2Jvb2tOYW1lKSB7XG4gIGlmICghcmVmLnNoZWV0TmFtZSkge1xuICAgIHJlZi5zaGVldE5hbWUgPSBzaGVldE5hbWU7XG4gIH1cbiAgaWYgKCFyZWYud29ya2Jvb2tOYW1lKSB7XG4gICAgcmVmLndvcmtib29rTmFtZSA9IHdvcmtib29rTmFtZTtcbiAgfVxuICByZXR1cm4gcmVmO1xufVxuXG4vKipcbiAqIFJ1bnMgdGhyb3VnaCBhIGxpc3Qgb2YgdG9rZW5zIGFuZCBhZGRzIGV4dHJhIGF0dHJpYnV0ZXMgc3VjaCBhcyBtYXRjaGluZ1xuICogcGFyZW5zIGFuZCByYW5nZXMuXG4gKlxuICogVGhlIGBjb250ZXh0YCBwYXJhbWV0ZXIgZGVmaW5lcyBkZWZhdWx0IHJlZmVyZW5jZSBhdHRyaWJ1dGVzOlxuICogYHsgd29ya2Jvb2tOYW1lOiAncmVwb3J0Lnhsc3gnLCBzaGVldE5hbWU6ICdTaGVldDEnIH1gLlxuICogSWYgc3VwcGxpZWQsIHRoZXNlIGFyZSB1c2VkIHRvIG1hdGNoIGBBMWAgdG8gYFNoZWV0MSFBMWAuXG4gKlxuICogQWxsIHRva2VucyB3aWxsIGJlIHRhZ2dlZCB3aXRoIGEgYC5kZXB0aGAgbnVtYmVyIHZhbHVlIHRvIGluZGljYXRpbmcgdGhlXG4gKiBsZXZlbCBvZiBuZXN0aW5nIGluIHBhcmVudGhlc2VzIGFzIHdlbGwgYXMgYW4gYC5pbmRleGAgbnVtYmVyIGluZGljYXRpbmdcbiAqIHRoZWlyIHplcm8gYmFzZWQgcG9zaXRpb24gaW4gdGhlIGxpc3QuXG4gKlxuICogVGhlIHJldHVybmVkIG91dHB1dCB3aWxsIGJlIHRoZSBzYW1lIGFycmF5IG9mIHRva2VucyBidXQgdGhlIGZvbGxvd2luZ1xuICogcHJvcGVydGllcyB3aWxsIGFkZGVkIHRvIHRva2VucyAoYXMgYXBwbGljYWJsZSk6XG4gKlxuICogIyMjIyBQYXJlbnRoZXNlcyAoIClcbiAqXG4gKiBNYXRjaGluZyBwYXJlbnMgd2lsbCBiZSB0YWdnZWQgd2l0aCBgLmdyb3VwSWRgIHN0cmluZyBpZGVudGlmaWVyIGFzIHdlbGwgYXNcbiAqIGEgYC5kZXB0aGAgbnVtYmVyIHZhbHVlIChpbmRpY2F0aW5nIHRoZSBsZXZlbCBvZiBuZXN0aW5nKS5cbiAqXG4gKiBDbG9zaW5nIHBhcmVucyB3aXRob3V0IGEgY291bnRlcnBhcnQgd2lsbCBiZSB0YWdnZWQgd2l0aCBgLmVycm9yYFxuICogKGJvb2xlYW4gdHJ1ZSkuXG4gKlxuICogIyMjIyBDdXJseSBicmFja2V0cyB7IH1cbiAqXG4gKiBNYXRjaGluZyBjdXJseSBicmFja2V0cyB3aWxsIGJlIHRhZ2dlZCB3aXRoIGAuZ3JvdXBJZGAgc3RyaW5nIGlkZW50aWZpZXIuXG4gKiBUaGVzZSBtYXkgbm90IGJlIG5lc3RlZCBpbiBFeGNlbC5cbiAqXG4gKiBDbG9zaW5nIGN1cmx5IGJyYWNrZXRzIHdpdGhvdXQgYSBjb3VudGVycGFydCB3aWxsIGJlIHRhZ2dlZCB3aXRoIGAuZXJyb3JgXG4gKiAoYm9vbGVhbiBgdHJ1ZWApLlxuICpcbiAqICMjIyMgUmFuZ2VzIChgUkVGX1JBTkdFYCBvciBgUkVGX0JFQU1gIHR5cGUgdG9rZW5zKVxuICpcbiAqIEFsbCByYW5nZXMgd2lsbCBiZSB0YWdnZWQgd2l0aCBgLmdyb3VwSWRgIHN0cmluZyBpZGVudGlmaWVyIHJlZ2FyZGxlc3Mgb2ZcbiAqIHRoZSBudW1iZXIgb2YgdGltZXMgdGhleSBvY2N1ci5cbiAqXG4gKiAjIyMjIFRva2VucyBvZiB0eXBlIGBVTktOT1dOYFxuICpcbiAqIEFsbCB3aWxsIGJlIHRhZ2dlZCB3aXRoIGAuZXJyb3JgIChib29sZWFuIGB0cnVlYCkuXG4gKlxuICogQHBhcmFtIHtBcnJheTxUb2tlbj59IHRva2VubGlzdCBBbiBhcnJheSBvZiB0b2tlbnMgKGZyb20gYHRva2VuaXplKClgKVxuICogQHBhcmFtIHtvYmplY3R9IFtjb250ZXh0PXt9XSBBIGNvbnRlc3QgdXNlZCB0byBtYXRjaCBgQTFgIHRvIGBTaGVldDEhQTFgLlxuICogQHBhcmFtIHtzdHJpbmd9IFtjb250ZXh0LnNoZWV0TmFtZT0nJ10gQW4gaW1wbGllZCBzaGVldCBuYW1lICgnU2hlZXQxJylcbiAqIEBwYXJhbSB7c3RyaW5nfSBbY29udGV4dC53b3JrYm9va05hbWU9JyddIEFuIGltcGxpZWQgd29ya2Jvb2sgbmFtZSAoJ3JlcG9ydC54bHN4JylcbiAqIEByZXR1cm5zIHtBcnJheTxUb2tlbkVuaGFuY2VkPn0gVGhlIGlucHV0IGFycmF5IHdpdGggdGhlIGVuY2hhbmNlZCB0b2tlbnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFkZFRva2VuTWV0YSAodG9rZW5saXN0LCB7IHNoZWV0TmFtZSA9ICcnLCB3b3JrYm9va05hbWUgPSAnJyB9ID0ge30pIHtcbiAgY29uc3QgcGFyZW5TdGFjayA9IFtdO1xuICBsZXQgYXJyYXlTdGFydCA9IG51bGw7XG4gIGNvbnN0IHVpZCA9IGdldElEZXIoKTtcbiAgY29uc3Qga25vd25SZWZzID0gW107XG5cbiAgY29uc3QgZ2V0Q3VyckRlcHRoID0gKCkgPT4gcGFyZW5TdGFjay5sZW5ndGggKyAoYXJyYXlTdGFydCA/IDEgOiAwKTtcblxuICB0b2tlbmxpc3QuZm9yRWFjaCgodG9rZW4sIGkpID0+IHtcbiAgICB0b2tlbi5pbmRleCA9IGk7XG4gICAgdG9rZW4uZGVwdGggPSBnZXRDdXJyRGVwdGgoKTtcbiAgICBpZiAodG9rZW4udmFsdWUgPT09ICcoJykge1xuICAgICAgcGFyZW5TdGFjay5wdXNoKHRva2VuKTtcbiAgICAgIHRva2VuLmRlcHRoID0gZ2V0Q3VyckRlcHRoKCk7XG4gICAgfVxuICAgIGVsc2UgaWYgKHRva2VuLnZhbHVlID09PSAnKScpIHtcbiAgICAgIGNvbnN0IGNvdW50ZXIgPSBwYXJlblN0YWNrLnBvcCgpO1xuICAgICAgaWYgKGNvdW50ZXIpIHtcbiAgICAgICAgY29uc3QgcGFpcklkID0gdWlkKCk7XG4gICAgICAgIHRva2VuLmdyb3VwSWQgPSBwYWlySWQ7XG4gICAgICAgIHRva2VuLmRlcHRoID0gY291bnRlci5kZXB0aDtcbiAgICAgICAgY291bnRlci5ncm91cElkID0gcGFpcklkO1xuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgIHRva2VuLmVycm9yID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgZWxzZSBpZiAodG9rZW4udmFsdWUgPT09ICd7Jykge1xuICAgICAgaWYgKCFhcnJheVN0YXJ0KSB7XG4gICAgICAgIGFycmF5U3RhcnQgPSB0b2tlbjtcbiAgICAgICAgdG9rZW4uZGVwdGggPSBnZXRDdXJyRGVwdGgoKTtcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICB0b2tlbi5lcnJvciA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuICAgIGVsc2UgaWYgKHRva2VuLnZhbHVlID09PSAnfScpIHtcbiAgICAgIGlmIChhcnJheVN0YXJ0KSB7XG4gICAgICAgIGNvbnN0IHBhaXJJZCA9IHVpZCgpO1xuICAgICAgICB0b2tlbi5ncm91cElkID0gcGFpcklkO1xuICAgICAgICB0b2tlbi5kZXB0aCA9IGFycmF5U3RhcnQuZGVwdGg7XG4gICAgICAgIGFycmF5U3RhcnQuZ3JvdXBJZCA9IHBhaXJJZDtcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICB0b2tlbi5lcnJvciA9IHRydWU7XG4gICAgICB9XG4gICAgICBhcnJheVN0YXJ0ID0gbnVsbDtcbiAgICB9XG4gICAgZWxzZSBpZiAoXG4gICAgICB0b2tlbi50eXBlID09PSBSRUZfUkFOR0UgfHxcbiAgICAgIHRva2VuLnR5cGUgPT09IFJFRl9CRUFNIHx8XG4gICAgICB0b2tlbi50eXBlID09PSBSRUZfVEVSTkFSWSB8fFxuICAgICAgdG9rZW4udHlwZSA9PT0gUkVGX1NUUlVDVFxuICAgICkge1xuICAgICAgY29uc3QgcmVmID0gKHRva2VuLnR5cGUgPT09IFJFRl9TVFJVQ1QpXG4gICAgICAgID8gcGFyc2VTdHJ1Y3RSZWYodG9rZW4udmFsdWUsIHsgeGxzeDogdHJ1ZSB9KVxuICAgICAgICA6IHBhcnNlQTFSZWYodG9rZW4udmFsdWUsIHsgYWxsb3dUZXJuYXJ5OiB0cnVlLCB4bHN4OiB0cnVlIH0pO1xuICAgICAgaWYgKHJlZiAmJiAocmVmLnJhbmdlIHx8IHJlZi5jb2x1bW5zKSkge1xuICAgICAgICByZWYuc291cmNlID0gdG9rZW4udmFsdWU7XG4gICAgICAgIGFkZENvbnRleHQocmVmLCBzaGVldE5hbWUsIHdvcmtib29rTmFtZSk7XG4gICAgICAgIGNvbnN0IGtub3duID0ga25vd25SZWZzLmZpbmQoZCA9PiBpc0VxdWl2YWxlbnQoZCwgcmVmKSk7XG4gICAgICAgIGlmIChrbm93bikge1xuICAgICAgICAgIHRva2VuLmdyb3VwSWQgPSBrbm93bi5ncm91cElkO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIHJlZi5ncm91cElkID0gdWlkKCk7XG4gICAgICAgICAgdG9rZW4uZ3JvdXBJZCA9IHJlZi5ncm91cElkO1xuICAgICAgICAgIGtub3duUmVmcy5wdXNoKHJlZik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgZWxzZSBpZiAodG9rZW4udHlwZSA9PT0gVU5LTk9XTikge1xuICAgICAgdG9rZW4uZXJyb3IgPSB0cnVlO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiB0b2tlbmxpc3Q7XG59XG4iLCIvKlxuKiogUkMgbm90YXRpb24gd29ya3MgZGlmZmVyZW50bHkgZnJvbSBBMSBpbiB0aGF0IHdlIGNhbid0IG1lcmdlIHN0YXRpY1xuKiogcmVmZXJlbmNlcyBqb2luZWQgYnkgYDpgLiBNZXJnaW5nIGNhbiBvbmx5IHdvcmsgYmV0d2VlbiByZWZlcmVuY2VzXG4qKiB0aGF0IGFyZSByZWxhdGl2ZS9hYnNvbHV0ZSBvbiB0aGUgc2FtZSBheGVzLCBzbzpcbioqIC0gUjFDMTpSMkMyIHdpbGwgd29yayxcbioqIC0gUlsxXUMxOlJbMl1DMiB3aWxsIGFsc28gd29yaywgYnV0XG4qKiAtIFJbMV1DWzFdOlIyQzIgZG9lc24ndCBoYXZlIGEgZGlyZWN0IHJlY3RhbmdsZSByZXByZXNlbnRpb24gd2l0aG91dCBjb250ZXh0LlxuKi9cbmltcG9ydCB7IHJhbmdlT3BlcmF0b3IsIHRyaW1EaXJlY3Rpb24gfSBmcm9tICcuL2ExLmpzJztcbmltcG9ydCB7IE1BWF9ST1dTLCBNQVhfQ09MUyB9IGZyb20gJy4vY29uc3RhbnRzLmpzJztcbmltcG9ydCB7IHBhcnNlUmVmIH0gZnJvbSAnLi9wYXJzZVJlZi5qcyc7XG5pbXBvcnQgeyBzdHJpbmdpZnlQcmVmaXgsIHN0cmluZ2lmeVByZWZpeEFsdCB9IGZyb20gJy4vc3RyaW5naWZ5UHJlZml4LmpzJztcblxuY29uc3QgY2xhbXAgPSAobWluLCB2YWwsIG1heCkgPT4gTWF0aC5taW4oTWF0aC5tYXgodmFsLCBtaW4pLCBtYXgpO1xuXG5mdW5jdGlvbiB0b0Nvb3JkICh2YWx1ZSwgaXNBYnMpIHtcbiAgaWYgKGlzQWJzKSB7XG4gICAgcmV0dXJuIFN0cmluZyh2YWx1ZSArIDEpO1xuICB9XG4gIHJldHVybiB2YWx1ZSA/ICdbJyArIHZhbHVlICsgJ10nIDogJyc7XG59XG5cbi8qKlxuICogU3RyaW5naWZ5IGEgcmFuZ2Ugb2JqZWN0IGludG8gUjFDMSBzeW50YXguXG4gKlxuICogQGlnbm9yZVxuICogQHByaXZhdGVcbiAqIEBzZWUgcGFyc2VSMUMxUmVmXG4gKiBAcGFyYW0ge1JhbmdlUjFDMX0gcmFuZ2UgIEEgcmFuZ2Ugb2JqZWN0XG4gKiBAcmV0dXJucyB7c3RyaW5nfSAgQW4gUjFDMS1zdHlsZSBzdHJpbmcgcmVwcmVzZW5hdGlvbiBvZiBhIHJhbmdlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b1IxQzEgKHJhbmdlKSB7XG4gIGxldCB7IHIwLCBjMCwgcjEsIGMxIH0gPSByYW5nZTtcbiAgY29uc3QgeyAkYzAsICRjMSwgJHIwLCAkcjEgfSA9IHJhbmdlO1xuICBjb25zdCBudWxsUjAgPSByMCA9PSBudWxsO1xuICBjb25zdCBudWxsQzAgPSBjMCA9PSBudWxsO1xuICBsZXQgbnVsbFIxID0gcjEgPT0gbnVsbDtcbiAgbGV0IG51bGxDMSA9IGMxID09IG51bGw7XG4gIGNvbnN0IG9wID0gcmFuZ2VPcGVyYXRvcihyYW5nZS50cmltKTtcbiAgY29uc3QgaGFzVHJpbSA9ICEhcmFuZ2UudHJpbTtcbiAgcjAgPSBjbGFtcCgkcjAgPyAwIDogLU1BWF9ST1dTLCByMCB8IDAsIE1BWF9ST1dTKTtcbiAgYzAgPSBjbGFtcCgkYzAgPyAwIDogLU1BWF9DT0xTLCBjMCB8IDAsIE1BWF9DT0xTKTtcbiAgaWYgKCFudWxsUjAgJiYgbnVsbFIxICYmICFudWxsQzAgJiYgbnVsbEMxKSB7XG4gICAgcjEgPSByMDtcbiAgICBudWxsUjEgPSBmYWxzZTtcbiAgICBjMSA9IGMwO1xuICAgIG51bGxDMSA9IGZhbHNlO1xuICB9XG4gIGVsc2Uge1xuICAgIHIxID0gY2xhbXAoJHIxID8gMCA6IC1NQVhfUk9XUywgcjEgfCAwLCBNQVhfUk9XUyk7XG4gICAgYzEgPSBjbGFtcCgkYzEgPyAwIDogLU1BWF9DT0xTLCBjMSB8IDAsIE1BWF9DT0xTKTtcbiAgfVxuICAvLyBDOkNcbiAgY29uc3QgYWxsUm93cyA9IHIwID09PSAwICYmIHIxID49IE1BWF9ST1dTO1xuICBpZiAoKGFsbFJvd3MgJiYgIW51bGxDMCAmJiAhbnVsbEMxKSB8fCAobnVsbFIwICYmIG51bGxSMSkpIHtcbiAgICBjb25zdCBhID0gdG9Db29yZChjMCwgJGMwKTtcbiAgICBjb25zdCBiID0gdG9Db29yZChjMSwgJGMxKTtcbiAgICByZXR1cm4gJ0MnICsgKGEgPT09IGIgJiYgIWhhc1RyaW0gPyBhIDogYSArIG9wICsgJ0MnICsgYik7XG4gIH1cbiAgLy8gUjpSXG4gIGNvbnN0IGFsbENvbHMgPSBjMCA9PT0gMCAmJiBjMSA+PSBNQVhfQ09MUztcbiAgaWYgKChhbGxDb2xzICYmICFudWxsUjAgJiYgIW51bGxSMSkgfHwgKG51bGxDMCAmJiBudWxsQzEpKSB7XG4gICAgY29uc3QgYSA9IHRvQ29vcmQocjAsICRyMCk7XG4gICAgY29uc3QgYiA9IHRvQ29vcmQocjEsICRyMSk7XG4gICAgcmV0dXJuICdSJyArIChhID09PSBiICYmICFoYXNUcmltID8gYSA6IGEgKyBvcCArICdSJyArIGIpO1xuICB9XG4gIGNvbnN0IHNfcjAgPSB0b0Nvb3JkKHIwLCAkcjApO1xuICBjb25zdCBzX3IxID0gdG9Db29yZChyMSwgJHIxKTtcbiAgY29uc3Qgc19jMCA9IHRvQ29vcmQoYzAsICRjMCk7XG4gIGNvbnN0IHNfYzEgPSB0b0Nvb3JkKGMxLCAkYzEpO1xuICAvLyBSQzpSLCBSQzpDXG4gIGlmIChudWxsUjAgfHwgbnVsbFIxIHx8IG51bGxDMCB8fCBudWxsQzEpIHtcbiAgICByZXR1cm4gKFxuICAgICAgKG51bGxSMCA/ICcnIDogJ1InICsgc19yMCkgK1xuICAgICAgKG51bGxDMCA/ICcnIDogJ0MnICsgc19jMCkgK1xuICAgICAgb3AgK1xuICAgICAgKG51bGxSMSA/ICcnIDogJ1InICsgc19yMSkgK1xuICAgICAgKG51bGxDMSA/ICcnIDogJ0MnICsgc19jMSlcbiAgICApO1xuICB9XG4gIC8vIFJDOlJDXG4gIGlmIChzX3IwICE9PSBzX3IxIHx8IHNfYzAgIT09IHNfYzEpIHtcbiAgICByZXR1cm4gJ1InICsgc19yMCArICdDJyArIHNfYzAgKyBvcCArICdSJyArIHNfcjEgKyAnQycgKyBzX2MxO1xuICB9XG4gIC8vIFJDXG4gIHJldHVybiAnUicgKyBzX3IwICsgJ0MnICsgc19jMDtcbn1cblxuZnVuY3Rpb24gcGFyc2VSMUMxUGFydCAocmVmKSB7XG4gIGxldCByMCA9IG51bGw7XG4gIGxldCBjMCA9IG51bGw7XG4gIGxldCAkcjAgPSBudWxsO1xuICBsZXQgJGMwID0gbnVsbDtcbiAgLy8gUiBwYXJ0XG4gIGNvbnN0IHJtID0gL15SKD86XFxbKFsrLV0/XFxkKylcXF18KFxcZCspKT8vLmV4ZWMocmVmKTtcbiAgaWYgKHJtKSB7XG4gICAgaWYgKHJtWzFdKSB7XG4gICAgICByMCA9IHBhcnNlSW50KHJtWzFdLCAxMCk7XG4gICAgICAkcjAgPSBmYWxzZTtcbiAgICB9XG4gICAgZWxzZSBpZiAocm1bMl0pIHtcbiAgICAgIHIwID0gcGFyc2VJbnQocm1bMl0sIDEwKSAtIDE7XG4gICAgICAkcjAgPSB0cnVlO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIHIwID0gMDtcbiAgICAgICRyMCA9IGZhbHNlO1xuICAgIH1cbiAgICByZWYgPSByZWYuc2xpY2Uocm1bMF0ubGVuZ3RoKTtcbiAgfVxuICAvLyBDIHBhcnRcbiAgY29uc3QgY20gPSAvXkMoPzpcXFsoWystXT9cXGQrKVxcXXwoXFxkKykpPy8uZXhlYyhyZWYpO1xuICBpZiAoY20pIHtcbiAgICBpZiAoY21bMV0pIHtcbiAgICAgIGMwID0gcGFyc2VJbnQoY21bMV0sIDEwKTtcbiAgICAgICRjMCA9IGZhbHNlO1xuICAgIH1cbiAgICBlbHNlIGlmIChjbVsyXSkge1xuICAgICAgYzAgPSBwYXJzZUludChjbVsyXSwgMTApIC0gMTtcbiAgICAgICRjMCA9IHRydWU7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgYzAgPSAwO1xuICAgICAgJGMwID0gZmFsc2U7XG4gICAgfVxuICAgIHJlZiA9IHJlZi5zbGljZShjbVswXS5sZW5ndGgpO1xuICB9XG4gIC8vIG11c3QgaGF2ZSBhdCBsZWFzdCBvbmUgcGFydCAoYW5kIG5vdGhpbmcgbW9yZSlcbiAgaWYgKCghcm0gJiYgIWNtKSB8fCByZWYubGVuZ3RoKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgcmV0dXJuIFsgcjAsIGMwLCAkcjAsICRjMCBdO1xufVxuXG4vKipcbiAqIFBhcnNlIGEgc2ltcGxlIHN0cmluZyByZWZlcmVuY2UgdG8gYW4gUjFDMSByYW5nZSBpbnRvIGEgcmFuZ2Ugb2JqZWN0LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAaWdub3JlXG4gKiBAc2VlIHBhcnNlQTFSZWZcbiAqIEBwYXJhbSB7c3RyaW5nfSByYW5nZVN0cmluZyAgQSByYW5nZSBzdHJpbmdcbiAqIEByZXR1cm5zIHsoUmFuZ2VSMUMxfG51bGwpfSBBbiBvYmplY3QgcmVwcmVzZW50aW5nIGEgdmFsaWQgcmVmZXJlbmNlIG9yIG51bGwgaWYgaXQgaXMgaW52YWxpZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZyb21SMUMxIChyYW5nZVN0cmluZykge1xuICBsZXQgZmluYWwgPSBudWxsO1xuICBjb25zdCBbIHBhcnQxLCBvcCwgcGFydDIsIG92ZXJmbG93IF0gPSByYW5nZVN0cmluZy5zcGxpdCgvKFxcLj86XFwuPykvKTtcbiAgaWYgKG92ZXJmbG93KSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgY29uc3QgcmFuZ2UgPSBwYXJzZVIxQzFQYXJ0KHBhcnQxKTtcbiAgY29uc3QgdHJpbSA9IHRyaW1EaXJlY3Rpb24oISFvcCAmJiBvcFswXSA9PT0gJy4nLCAhIW9wICYmIG9wW29wLmxlbmd0aCAtIDFdID09PSAnLicpO1xuICBpZiAocmFuZ2UpIHtcbiAgICBjb25zdCBbIHIwLCBjMCwgJHIwLCAkYzAgXSA9IHJhbmdlO1xuICAgIGlmIChwYXJ0Mikge1xuICAgICAgY29uc3QgZXh0ZW5kVG8gPSBwYXJzZVIxQzFQYXJ0KHBhcnQyKTtcbiAgICAgIGlmIChleHRlbmRUbykge1xuICAgICAgICBmaW5hbCA9IHt9O1xuICAgICAgICBjb25zdCBbIHIxLCBjMSwgJHIxLCAkYzEgXSA9IGV4dGVuZFRvO1xuICAgICAgICAvLyByb3dzXG4gICAgICAgIGlmIChyMCAhPSBudWxsICYmIHIxICE9IG51bGwpIHtcbiAgICAgICAgICBmaW5hbC5yMCA9ICRyMCA9PT0gJHIxID8gTWF0aC5taW4ocjAsIHIxKSA6IHIwO1xuICAgICAgICAgIGZpbmFsLiRyMCA9ICRyMDtcbiAgICAgICAgICBmaW5hbC5yMSA9ICRyMCA9PT0gJHIxID8gTWF0aC5tYXgocjAsIHIxKSA6IHIxO1xuICAgICAgICAgIGZpbmFsLiRyMSA9ICRyMTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChyMCAhPSBudWxsICYmIHIxID09IG51bGwpIHtcbiAgICAgICAgICAvLyBwYXJ0aWFsIFJDOkNcbiAgICAgICAgICBmaW5hbC5yMCA9IHIwO1xuICAgICAgICAgIGZpbmFsLiRyMCA9ICRyMDtcbiAgICAgICAgICBmaW5hbC5yMSA9IG51bGw7XG4gICAgICAgICAgZmluYWwuJHIxID0gJHIwO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHIwID09IG51bGwgJiYgcjEgIT0gbnVsbCkge1xuICAgICAgICAgIC8vIHBhcnRpYWwgQzpSQ1xuICAgICAgICAgIGZpbmFsLnIwID0gcjE7XG4gICAgICAgICAgZmluYWwuJHIwID0gJHIxO1xuICAgICAgICAgIGZpbmFsLnIxID0gbnVsbDtcbiAgICAgICAgICBmaW5hbC4kcjEgPSAkcjE7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAocjAgPT0gbnVsbCAmJiByMSA9PSBudWxsKSB7XG4gICAgICAgICAgLy8gQzpDXG4gICAgICAgICAgZmluYWwucjAgPSBudWxsO1xuICAgICAgICAgIGZpbmFsLiRyMCA9IGZhbHNlO1xuICAgICAgICAgIGZpbmFsLnIxID0gbnVsbDtcbiAgICAgICAgICBmaW5hbC4kcjEgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICAvLyBjb2x1bW5zXG4gICAgICAgIGlmIChjMCAhPSBudWxsICYmIGMxICE9IG51bGwpIHtcbiAgICAgICAgICBmaW5hbC5jMCA9ICRjMCA9PT0gJGMxID8gTWF0aC5taW4oYzAsIGMxKSA6IGMwO1xuICAgICAgICAgIGZpbmFsLiRjMCA9ICRjMDtcbiAgICAgICAgICBmaW5hbC5jMSA9ICRjMCA9PT0gJGMxID8gTWF0aC5tYXgoYzAsIGMxKSA6IGMxO1xuICAgICAgICAgIGZpbmFsLiRjMSA9ICRjMTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChjMCAhPSBudWxsICYmIGMxID09IG51bGwpIHtcbiAgICAgICAgICBmaW5hbC5jMCA9IGMwO1xuICAgICAgICAgIGZpbmFsLiRjMCA9ICRjMDtcbiAgICAgICAgICBmaW5hbC5jMSA9IG51bGw7XG4gICAgICAgICAgZmluYWwuJGMxID0gJGMwO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGMwID09IG51bGwgJiYgYzEgIT0gbnVsbCkge1xuICAgICAgICAgIGZpbmFsLmMwID0gYzE7XG4gICAgICAgICAgZmluYWwuJGMwID0gJGMxO1xuICAgICAgICAgIGZpbmFsLmMxID0gbnVsbDtcbiAgICAgICAgICBmaW5hbC4kYzEgPSAkYzE7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoYzAgPT0gbnVsbCAmJiBjMSA9PSBudWxsKSB7XG4gICAgICAgICAgZmluYWwuYzAgPSBudWxsO1xuICAgICAgICAgIGZpbmFsLiRjMCA9IGZhbHNlO1xuICAgICAgICAgIGZpbmFsLmMxID0gbnVsbDtcbiAgICAgICAgICBmaW5hbC4kYzEgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgIH1cbiAgICAvLyByYW5nZSBvbmx5IC0gbm8gc2Vjb25kIHBhcnRcbiAgICBlbHNlIGlmIChyMCAhPSBudWxsICYmIGMwID09IG51bGwpIHtcbiAgICAgIGZpbmFsID0ge1xuICAgICAgICByMDogcjAsXG4gICAgICAgIGMwOiBudWxsLFxuICAgICAgICByMTogcjAsXG4gICAgICAgIGMxOiBudWxsLFxuICAgICAgICAkcjA6ICRyMCxcbiAgICAgICAgJGMwOiBmYWxzZSxcbiAgICAgICAgJHIxOiAkcjAsXG4gICAgICAgICRjMTogZmFsc2VcbiAgICAgIH07XG4gICAgfVxuICAgIGVsc2UgaWYgKHIwID09IG51bGwgJiYgYzAgIT0gbnVsbCkge1xuICAgICAgZmluYWwgPSB7XG4gICAgICAgIHIwOiBudWxsLFxuICAgICAgICBjMDogYzAsXG4gICAgICAgIHIxOiBudWxsLFxuICAgICAgICBjMTogYzAsXG4gICAgICAgICRyMDogZmFsc2UsXG4gICAgICAgICRjMDogJGMwLFxuICAgICAgICAkcjE6IGZhbHNlLFxuICAgICAgICAkYzE6ICRjMFxuICAgICAgfTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBmaW5hbCA9IHtcbiAgICAgICAgcjA6IHIwIHx8IDAsXG4gICAgICAgIGMwOiBjMCB8fCAwLFxuICAgICAgICByMTogcjAgfHwgMCxcbiAgICAgICAgYzE6IGMwIHx8IDAsXG4gICAgICAgICRyMDogJHIwIHx8IGZhbHNlLFxuICAgICAgICAkYzA6ICRjMCB8fCBmYWxzZSxcbiAgICAgICAgJHIxOiAkcjAgfHwgZmFsc2UsXG4gICAgICAgICRjMTogJGMwIHx8IGZhbHNlXG4gICAgICB9O1xuICAgIH1cbiAgfVxuICBpZiAoZmluYWwgJiYgdHJpbSkge1xuICAgIGZpbmFsLnRyaW0gPSB0cmltO1xuICB9XG4gIHJldHVybiBmaW5hbDtcbn1cblxuLyoqXG4gKiBQYXJzZSBhIHN0cmluZyByZWZlcmVuY2UgaW50byBhbiBvYmplY3QgcmVwcmVzZW50aW5nIGl0LlxuICpcbiAqIGBgYGpzXG4gKiBwYXJzZVIxQzFSZWYoJ1NoZWV0MSFSWzldQzk6Uls5XUM5Jyk7XG4gKiAvLyA9PiB7XG4gKiAvLyAgIGNvbnRleHQ6IFsgJ1NoZWV0MScgXSxcbiAqIC8vICAgcmFuZ2U6IHtcbiAqIC8vICAgICByMDogOSxcbiAqIC8vICAgICBjMDogOCxcbiAqIC8vICAgICByMTogOSxcbiAqIC8vICAgICBjMTogOCxcbiAqIC8vICAgICAkYzA6IHRydWUsXG4gKiAvLyAgICAgJGMxOiB0cnVlXG4gKiAvLyAgICAgJHIwOiBmYWxzZSxcbiAqIC8vICAgICAkcjE6IGZhbHNlXG4gKiAvLyAgIH1cbiAqIC8vIH1cbiAqIGBgYFxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSByZWZTdHJpbmcgQW4gUjFDMS1zdHlsZSByZWZlcmVuY2Ugc3RyaW5nXG4gKiBAcGFyYW0ge29iamVjdH0gW29wdGlvbnM9e31dICBPcHRpb25zXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLmFsbG93TmFtZWQ9dHJ1ZV0gIEVuYWJsZSBwYXJzaW5nIG5hbWVzIGFzIHdlbGwgYXMgcmFuZ2VzLlxuICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy5hbGxvd1Rlcm5hcnk9ZmFsc2VdICBFbmFibGVzIHRoZSByZWNvZ25pdGlvbiBvZiB0ZXJuYXJ5IHJhbmdlcyBpbiB0aGUgc3R5bGUgb2YgYEExOkFgIG9yIGBBMToxYC4gVGhlc2UgYXJlIHN1cHBvcnRlZCBieSBHb29nbGUgU2hlZXRzIGJ1dCBub3QgRXhjZWwuIFNlZTogUmVmZXJlbmNlcy5tZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMueGxzeD1mYWxzZV0gIFN3aXRjaGVzIHRvIHRoZSBgWzFdU2hlZXQxIUExYCBvciBgWzFdIW5hbWVgIHByZWZpeCBzeW50YXggZm9ybSBmb3IgZXh0ZXJuYWwgd29ya2Jvb2tzLiBTZWU6IFtQcmVmaXhlcy5tZF0oLi9QcmVmaXhlcy5tZClcbiAqIEByZXR1cm5zIHsoUmVmZXJlbmNlUjFDMXxudWxsKX0gQW4gb2JqZWN0IHJlcHJlc2VudGluZyBhIHZhbGlkIHJlZmVyZW5jZSBvciBudWxsIGlmIGl0IGlzIGludmFsaWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVIxQzFSZWYgKHJlZlN0cmluZywgeyBhbGxvd05hbWVkID0gdHJ1ZSwgYWxsb3dUZXJuYXJ5ID0gZmFsc2UsIHhsc3ggPSBmYWxzZSB9ID0ge30pIHtcbiAgY29uc3QgZCA9IHBhcnNlUmVmKHJlZlN0cmluZywgeyBhbGxvd05hbWVkLCBhbGxvd1Rlcm5hcnksIHhsc3gsIHIxYzE6IHRydWUgfSk7XG4gIGlmIChkICYmIChkLnIwIHx8IGQubmFtZSkpIHtcbiAgICBjb25zdCByYW5nZSA9IGQucjFcbiAgICAgID8gZnJvbVIxQzEoZC5yMCArIGQub3BlcmF0b3IgKyBkLnIxKVxuICAgICAgOiBmcm9tUjFDMShkLnIwKTtcbiAgICBpZiAocmFuZ2UpIHtcbiAgICAgIHJldHVybiB4bHN4XG4gICAgICAgID8geyB3b3JrYm9va05hbWU6IGQud29ya2Jvb2tOYW1lLCBzaGVldE5hbWU6IGQuc2hlZXROYW1lLCByYW5nZSB9XG4gICAgICAgIDogeyBjb250ZXh0OiBkLmNvbnRleHQsIHJhbmdlIH07XG4gICAgfVxuICAgIGlmIChkLm5hbWUpIHtcbiAgICAgIHJldHVybiB4bHN4XG4gICAgICAgID8geyB3b3JrYm9va05hbWU6IGQud29ya2Jvb2tOYW1lLCBzaGVldE5hbWU6IGQuc2hlZXROYW1lLCBuYW1lOiBkLm5hbWUgfVxuICAgICAgICA6IHsgY29udGV4dDogZC5jb250ZXh0LCBuYW1lOiBkLm5hbWUgfTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59XG5cbi8qKlxuICogR2V0IGFuIFIxQzEtc3R5bGUgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGEgcmVmZXJlbmNlIG9iamVjdC5cbiAqXG4gKiBgYGBqc1xuICogc3RyaW5naWZ5UjFDMVJlZih7XG4gKiAgIGNvbnRleHQ6IFsgJ1NoZWV0MScgXSxcbiAqICAgcmFuZ2U6IHtcbiAqICAgICByMDogOSxcbiAqICAgICBjMDogOCxcbiAqICAgICByMTogOSxcbiAqICAgICBjMTogOCxcbiAqICAgICAkYzA6IHRydWUsXG4gKiAgICAgJGMxOiB0cnVlXG4gKiAgICAgJHIwOiBmYWxzZSxcbiAqICAgICAkcjE6IGZhbHNlXG4gKiAgIH1cbiAqIH0pO1xuICogLy8gPT4gJ1NoZWV0MSFSWzldQzk6Uls5XUM5J1xuICogYGBgXG4gKlxuICogQHBhcmFtIHtSZWZlcmVuY2VSMUMxfSByZWZPYmplY3QgQSByZWZlcmVuY2Ugb2JqZWN0XG4gKiBAcGFyYW0ge29iamVjdH0gW29wdGlvbnM9e31dICBPcHRpb25zXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLnhsc3g9ZmFsc2VdICBTd2l0Y2hlcyB0byB0aGUgYFsxXVNoZWV0MSFBMWAgb3IgYFsxXSFuYW1lYCBwcmVmaXggc3ludGF4IGZvcm0gZm9yIGV4dGVybmFsIHdvcmtib29rcy4gU2VlOiBbUHJlZml4ZXMubWRdKC4vUHJlZml4ZXMubWQpXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgcmVmZXJlbmNlIGluIFIxQzEtc3R5bGUgc3RyaW5nIGZvcm1hdFxuICovXG5leHBvcnQgZnVuY3Rpb24gc3RyaW5naWZ5UjFDMVJlZiAocmVmT2JqZWN0LCB7IHhsc3ggPSBmYWxzZSB9ID0ge30pIHtcbiAgY29uc3QgcHJlZml4ID0geGxzeFxuICAgID8gc3RyaW5naWZ5UHJlZml4QWx0KHJlZk9iamVjdClcbiAgICA6IHN0cmluZ2lmeVByZWZpeChyZWZPYmplY3QpO1xuICByZXR1cm4gcHJlZml4ICsgKFxuICAgIHJlZk9iamVjdC5uYW1lID8gcmVmT2JqZWN0Lm5hbWUgOiB0b1IxQzEocmVmT2JqZWN0LnJhbmdlKVxuICApO1xufVxuIiwiaW1wb3J0IHsgTUFYX1JPV1MsIE1BWF9DT0xTLCBFUlJPUiB9IGZyb20gJy4vY29uc3RhbnRzLmpzJztcbmltcG9ydCB7IGZyb21BMSwgcGFyc2VBMVJlZiwgc3RyaW5naWZ5QTFSZWYgfSBmcm9tICcuL2ExLmpzJztcbmltcG9ydCB7IHBhcnNlUjFDMVJlZiwgc3RyaW5naWZ5UjFDMVJlZiB9IGZyb20gJy4vcmMuanMnO1xuaW1wb3J0IHsgdG9rZW5pemUgfSBmcm9tICcuL2xleGVyLmpzJztcbmltcG9ydCB7IGlzUmFuZ2UgfSBmcm9tICcuL2lzVHlwZS5qcyc7XG5cbmNvbnN0IGNhbGMgPSAoYWJzLCB2WCwgYVgpID0+IHtcbiAgaWYgKHZYID09IG51bGwpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICByZXR1cm4gYWJzID8gdlggOiB2WCAtIGFYO1xufTtcblxuY29uc3Qgc2V0dGluZ3MgPSB7XG4gIHdpdGhMb2NhdGlvbjogZmFsc2UsXG4gIG1lcmdlUmVmczogZmFsc2UsXG4gIGFsbG93VGVybmFyeTogdHJ1ZSxcbiAgcjFjMTogZmFsc2Vcbn07XG5cbi8qKlxuICogVHJhbnNsYXRlcyByYW5nZXMgaW4gYSBmb3JtdWxhIG9yIGxpc3Qgb2YgdG9rZW5zIGZyb20gYWJzb2x1dGUgQTEgc3ludGF4IHRvXG4gKiByZWxhdGl2ZSBSMUMxIHN5bnRheC5cbiAqXG4gKiBSZXR1cm5zIHRoZSBzYW1lIGZvcm11bGEgd2l0aCB0aGUgcmFuZ2VzIHRyYW5zbGF0ZWQuIElmIGFuIGFycmF5IG9mIHRva2Vuc1xuICogd2FzIHN1cHBsaWVkLCB0aGVuIHRoZSBzYW1lIGFycmF5IGlzIHJldHVybmVkLlxuICpcbiAqIGBgYGpzXG4gKiB0cmFuc2xhdGVUb1IxQzEoXCI9U1VNKEUxMCwkRSQyLFNoZWV0ISRFJDMpXCIsIFwiRDEwXCIpO1xuICogLy8gPT4gXCI9U1VNKFJDWzFdLFIyQzUsU2hlZXQhUjNDNSlcIik7XG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0geyhzdHJpbmcgfCBBcnJheTxUb2tlbj4pfSBmb3JtdWxhIEEgc3RyaW5nIChhbiBFeGNlbCBmb3JtdWxhKSBvciBhIHRva2VuIGxpc3QgdGhhdCBzaG91bGQgYmUgYWRqdXN0ZWQuXG4gKiBAcGFyYW0ge3N0cmluZ30gYW5jaG9yQ2VsbCBBIHNpbXBsZSBzdHJpbmcgcmVmZXJlbmNlIHRvIGFuIEExIGNlbGwgSUQgKGBBRjEyM2Agb3JgJEMkNWApLlxuICogQHBhcmFtIHtvYmplY3R9IFtvcHRpb25zPXt9XSBUaGUgb3B0aW9uc1xuICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy54bHN4PWZhbHNlXSAgU3dpdGNoZXMgdG8gdGhlIGBbMV1TaGVldDEhQTFgIG9yIGBbMV0hbmFtZWAgcHJlZml4IHN5bnRheCBmb3JtIGZvciBleHRlcm5hbCB3b3JrYm9va3MuIFNlZTogW1ByZWZpeGVzLm1kXSguL1ByZWZpeGVzLm1kKVxuICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy5hbGxvd1Rlcm5hcnk9dHJ1ZV0gIEVuYWJsZXMgdGhlIHJlY29nbml0aW9uIG9mIHRlcm5hcnkgcmFuZ2VzIGluIHRoZSBzdHlsZSBvZiBgQTE6QWAgb3IgYEExOjFgLiBUaGVzZSBhcmUgc3VwcG9ydGVkIGJ5IEdvb2dsZSBTaGVldHMgYnV0IG5vdCBFeGNlbC4gU2VlOiBSZWZlcmVuY2VzLm1kLlxuICogQHJldHVybnMgeyhzdHJpbmcgfCBBcnJheTxUb2tlbj4pfSBBIGZvcm11bGEgc3RyaW5nIG9yIHRva2VuIGxpc3QgKGRlcGVuZGluZyBvbiB3aGljaCB3YXMgaW5wdXQpXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0cmFuc2xhdGVUb1IxQzEgKGZvcm11bGEsIGFuY2hvckNlbGwsIHsgeGxzeCA9IGZhbHNlLCBhbGxvd1Rlcm5hcnkgPSB0cnVlIH0gPSB7fSkge1xuICBjb25zdCB7IHRvcCwgbGVmdCB9ID0gZnJvbUExKGFuY2hvckNlbGwpO1xuICBjb25zdCBpc1N0cmluZyA9IHR5cGVvZiBmb3JtdWxhID09PSAnc3RyaW5nJztcblxuICBjb25zdCB0b2tlbnMgPSBpc1N0cmluZ1xuICAgID8gdG9rZW5pemUoZm9ybXVsYSwgeyAuLi5zZXR0aW5ncywgeGxzeCwgYWxsb3dUZXJuYXJ5IH0pXG4gICAgOiBmb3JtdWxhO1xuXG4gIGxldCBvZmZzZXRTa2V3ID0gMDtcbiAgY29uc3QgcmVmT3B0cyA9IHsgeGxzeCwgYWxsb3dUZXJuYXJ5IH07XG4gIHRva2Vucy5mb3JFYWNoKHRva2VuID0+IHtcbiAgICBpZiAoaXNSYW5nZSh0b2tlbikpIHtcbiAgICAgIGNvbnN0IHRva2VuVmFsdWUgPSB0b2tlbi52YWx1ZTtcbiAgICAgIGNvbnN0IHJlZiA9IHBhcnNlQTFSZWYodG9rZW5WYWx1ZSwgcmVmT3B0cyk7XG4gICAgICBjb25zdCBkID0gcmVmLnJhbmdlO1xuICAgICAgY29uc3QgcmFuZ2UgPSB7fTtcbiAgICAgIHJhbmdlLnIwID0gY2FsYyhkLiR0b3AsIGQudG9wLCB0b3ApO1xuICAgICAgcmFuZ2UucjEgPSBjYWxjKGQuJGJvdHRvbSwgZC5ib3R0b20sIHRvcCk7XG4gICAgICByYW5nZS5jMCA9IGNhbGMoZC4kbGVmdCwgZC5sZWZ0LCBsZWZ0KTtcbiAgICAgIHJhbmdlLmMxID0gY2FsYyhkLiRyaWdodCwgZC5yaWdodCwgbGVmdCk7XG4gICAgICByYW5nZS4kcjAgPSBkLiR0b3A7XG4gICAgICByYW5nZS4kcjEgPSBkLiRib3R0b207XG4gICAgICByYW5nZS4kYzAgPSBkLiRsZWZ0O1xuICAgICAgcmFuZ2UuJGMxID0gZC4kcmlnaHQ7XG4gICAgICBpZiAoZC50cmltKSB7XG4gICAgICAgIHJhbmdlLnRyaW0gPSBkLnRyaW07XG4gICAgICB9XG4gICAgICByZWYucmFuZ2UgPSByYW5nZTtcbiAgICAgIHRva2VuLnZhbHVlID0gc3RyaW5naWZ5UjFDMVJlZihyZWYsIHJlZk9wdHMpO1xuICAgICAgLy8gaWYgdG9rZW4gaW5jbHVkZXMgb2Zmc2V0cywgdGhvc2Ugb2Zmc2V0cyBhcmUgbm93IGxpa2VseSB3cm9uZyFcbiAgICAgIGlmICh0b2tlbi5sb2MpIHtcbiAgICAgICAgdG9rZW4ubG9jWzBdICs9IG9mZnNldFNrZXc7XG4gICAgICAgIG9mZnNldFNrZXcgKz0gdG9rZW4udmFsdWUubGVuZ3RoIC0gdG9rZW5WYWx1ZS5sZW5ndGg7XG4gICAgICAgIHRva2VuLmxvY1sxXSArPSBvZmZzZXRTa2V3O1xuICAgICAgfVxuICAgIH1cbiAgICBlbHNlIGlmIChvZmZzZXRTa2V3ICYmIHRva2VuLmxvYykge1xuICAgICAgdG9rZW4ubG9jWzBdICs9IG9mZnNldFNrZXc7XG4gICAgICB0b2tlbi5sb2NbMV0gKz0gb2Zmc2V0U2tldztcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiBpc1N0cmluZ1xuICAgID8gdG9rZW5zLm1hcChkID0+IGQudmFsdWUpLmpvaW4oJycpXG4gICAgOiB0b2tlbnM7XG59XG5cbmZ1bmN0aW9uIHRvRml4ZWQgKHZhbCwgYWJzLCBiYXNlLCBtYXgsIHdyYXBFZGdlcyA9IHRydWUpIHtcbiAgbGV0IHYgPSB2YWw7XG4gIGlmICh2ICE9IG51bGwgJiYgIWFicykge1xuICAgIHYgPSBiYXNlICsgdmFsO1xuICAgIC8vIEV4Y2VsIFwid3JhcHMgYXJvdW5kXCIgd2hlbiB2YWx1ZSBnb2VzIG91dCBvZiBsb3dlciBib3VuZHMuXG4gICAgLy8gSXQncyBhIGJpdCBxdWlya3kgb24gZW50cnkgYXMgRXhjZWwgX3JlYWxseSB3YW50c18gdG8gcmUtcmV3aXRlIHRoZVxuICAgIC8vIHJlZmVyZW5jZXMgYnV0IHRoZSBiZWhhdmlvdXIgaXMgY29uc2lzdGVudCB3aXRoIElORElSRUNUOlxuICAgIC8vIC4uLiBJbiBBMTogUkNbLTFdID0+IFIxQ1sxNjM4M10uXG4gICAgaWYgKHYgPCAwKSB7XG4gICAgICBpZiAoIXdyYXBFZGdlcykge1xuICAgICAgICByZXR1cm4gTmFOO1xuICAgICAgfVxuICAgICAgdiA9IG1heCArIHYgKyAxO1xuICAgIH1cbiAgICAvLyAuLi4gSW4gQjE6ID1SQ1sxNjM4M10gPT4gPVJDWy0xXVxuICAgIGlmICh2ID4gbWF4KSB7XG4gICAgICBpZiAoIXdyYXBFZGdlcykge1xuICAgICAgICByZXR1cm4gTmFOO1xuICAgICAgfVxuICAgICAgdiAtPSBtYXggKyAxO1xuICAgIH1cbiAgfVxuICByZXR1cm4gdjtcbn1cblxuY29uc3QgZGVmYXVsdE9wdGlvbnMgPSB7XG4gIHdyYXBFZGdlczogdHJ1ZSxcbiAgbWVyZ2VSZWZzOiB0cnVlLFxuICBhbGxvd1Rlcm5hcnk6IHRydWUsXG4gIHhsc3g6IGZhbHNlXG59O1xuXG4vKipcbiAqIFRyYW5zbGF0ZXMgcmFuZ2VzIGluIGEgZm9ybXVsYSBvciBsaXN0IG9mIHRva2VucyBmcm9tIHJlbGF0aXZlIFIxQzEgc3ludGF4IHRvXG4gKiBhYnNvbHV0ZSBBMSBzeW50YXguXG4gKlxuICogUmV0dXJucyB0aGUgc2FtZSBmb3JtdWxhIHdpdGggdGhlIHJhbmdlcyB0cmFuc2xhdGVkLiBJZiBhbiBhcnJheSBvZiB0b2tlbnNcbiAqIHdhcyBzdXBwbGllZCwgdGhlbiB0aGUgc2FtZSBhcnJheSBpcyByZXR1cm5lZC5cbiAqXG4gKiBgYGBqc1xuICogdHJhbnNsYXRlVG9BMShcIj1TVU0oUkNbMV0sUjJDNSxTaGVldCFSM0M1KVwiLCBcIkQxMFwiKTtcbiAqIC8vID0+IFwiPVNVTShFMTAsJEUkMixTaGVldCEkRSQzKVwiKTtcbiAqIGBgYFxuICpcbiAqIElmIGFuIGlucHV0IHJhbmdlIGlzIC0xLC0xIHJlbGF0aXZlIHJvd3MvY29sdW1ucyBhbmQgdGhlIGFuY2hvciBpcyBBMSwgdGhlXG4gKiByZXN1bHRpbmcgcmFuZ2Ugd2lsbCAoYnkgZGVmYXVsdCkgd3JhcCBhcm91bmQgdG8gdGhlIGJvdHRvbSBvZiB0aGUgc2hlZXRcbiAqIHJlc3VsdGluZyBpbiB0aGUgcmFuZ2UgWEZEMTA0ODU3Ni4gVGhpcyBtYXkgbm90IGJlIHdoYXQgeW91IHdhbnQgc28gbWF5IHNldFxuICogYHdyYXBFZGdlc2AgdG8gZmFsc2Ugd2hpY2ggd2lsbCBpbnN0ZWFkIHR1cm4gdGhlIHJhbmdlIGludG8gYSBgI1JFRiFgIGVycm9yLlxuICpcbiAqIGBgYGpzXG4gKiB0cmFuc2xhdGVUb0ExKFwiPVJbLTFdQ1stMV1cIiwgXCJBMVwiKTtcbiAqIC8vID0+IFwiPVhGRDEwNDg1NzZcIik7XG4gKlxuICogdHJhbnNsYXRlVG9BMShcIj1SWy0xXUNbLTFdXCIsIFwiQTFcIiwgeyB3cmFwRWRnZXM6IGZhbHNlIH0pO1xuICogLy8gPT4gXCI9I1JFRiFcIik7XG4gKiBgYGBcbiAqXG4gKiBOb3RlIHRoYXQgaWYgeW91IGFyZSBwYXNzaW5nIGluIGEgbGlzdCBvZiB0b2tlbnMgdGhhdCB3YXMgbm90IGNyZWF0ZWQgdXNpbmdcbiAqIGBtZXJnZVJlZnNgIGFuZCB5b3UgZGlzYWJsZSBlZGdlIHdyYXBwaW5nIChvciB5b3Ugc2ltcGx5IHNldCBib3RoIG9wdGlvbnNcbiAqIHRvIGZhbHNlKSwgeW91IGNhbiBlbmQgdXAgd2l0aCBhIGZvcm11bGEgc3VjaCBhcyBgPSNSRUYhOkIyYCBvclxuICogYD1TaGVldDMhI1JFRiE6RjNgLiBUaGVzZSBhcmUgdmFsaWQgZm9ybXVsYXMgaW4gdGhlIEV4Y2VsIGZvcm11bGEgbGFuZ3VhZ2VcbiAqIGFuZCBFeGNlbCB3aWxsIGFjY2VwdCB0aGVtLCBidXQgdGhleSBhcmUgbm90IHN1cHBvcnRlZCBpbiBHb29nbGUgU2hlZXRzLlxuICpcbiAqIEBwYXJhbSB7KHN0cmluZyB8IEFycmF5PFRva2VuPil9IGZvcm11bGEgQSBzdHJpbmcgKGFuIEV4Y2VsIGZvcm11bGEpIG9yIGEgdG9rZW4gbGlzdCB0aGF0IHNob3VsZCBiZSBhZGp1c3RlZC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBhbmNob3JDZWxsIEEgc2ltcGxlIHN0cmluZyByZWZlcmVuY2UgdG8gYW4gQTEgY2VsbCBJRCAoYEFGMTIzYCBvcmAkQyQ1YCkuXG4gKiBAcGFyYW0ge29iamVjdH0gW29wdGlvbnM9e31dIFRoZSBvcHRpb25zXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLndyYXBFZGdlcz10cnVlXSAgV3JhcCBvdXQtb2YtYm91bmRzIHJhbmdlcyBhcm91bmQgc2hlZXQgZWRnZXMgcmF0aGVyIHRoYW4gdHVybmluZyB0aGVtIHRvICNSRUYhIGVycm9yc1xuICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy5tZXJnZVJlZnM9dHJ1ZV0gICBTaG91bGQgcmFuZ2VzIGJlIHRyZWF0ZWQgYXMgd2hvbGUgcmVmZXJlbmNlcyAoYFNoZWV0MSFBMTpCMmApIG9yIGFzIHNlcGFyYXRlIHRva2VucyBmb3IgZWFjaCBwYXJ0OiAoYFNoZWV0MWAsYCFgLGBBMWAsYDpgLGBCMmApLlxuICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy54bHN4PWZhbHNlXSAgU3dpdGNoZXMgdG8gdGhlIGBbMV1TaGVldDEhQTFgIG9yIGBbMV0hbmFtZWAgcHJlZml4IHN5bnRheCBmb3JtIGZvciBleHRlcm5hbCB3b3JrYm9va3MuIFNlZTogW1ByZWZpeGVzLm1kXSguL1ByZWZpeGVzLm1kKVxuICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy5hbGxvd1Rlcm5hcnk9dHJ1ZV0gIEVuYWJsZXMgdGhlIHJlY29nbml0aW9uIG9mIHRlcm5hcnkgcmFuZ2VzIGluIHRoZSBzdHlsZSBvZiBgQTE6QWAgb3IgYEExOjFgLiBUaGVzZSBhcmUgc3VwcG9ydGVkIGJ5IEdvb2dsZSBTaGVldHMgYnV0IG5vdCBFeGNlbC4gU2VlOiBSZWZlcmVuY2VzLm1kLlxuICogQHJldHVybnMgeyhzdHJpbmcgfCBBcnJheTxUb2tlbj4pfSBBIGZvcm11bGEgc3RyaW5nIG9yIHRva2VuIGxpc3QgKGRlcGVuZGluZyBvbiB3aGljaCB3YXMgaW5wdXQpXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0cmFuc2xhdGVUb0ExIChmb3JtdWxhLCBhbmNob3JDZWxsLCBvcHRpb25zID0gZGVmYXVsdE9wdGlvbnMpIHtcbiAgY29uc3QgYW5jaG9yID0gZnJvbUExKGFuY2hvckNlbGwpO1xuICBjb25zdCBpc1N0cmluZyA9IHR5cGVvZiBmb3JtdWxhID09PSAnc3RyaW5nJztcbiAgY29uc3Qgb3B0cyA9IHsgLi4uZGVmYXVsdE9wdGlvbnMsIC4uLm9wdGlvbnMgfTtcblxuICBjb25zdCB0b2tlbnMgPSBpc1N0cmluZ1xuICAgID8gdG9rZW5pemUoZm9ybXVsYSwge1xuICAgICAgd2l0aExvY2F0aW9uOiBmYWxzZSxcbiAgICAgIG1lcmdlUmVmczogb3B0cy5tZXJnZVJlZnMsXG4gICAgICB4bHN4OiBvcHRzLnhsc3gsXG4gICAgICBhbGxvd1Rlcm5hcnk6IG9wdHMuYWxsb3dUZXJuYXJ5LFxuICAgICAgcjFjMTogdHJ1ZVxuICAgIH0pXG4gICAgOiBmb3JtdWxhO1xuXG4gIGxldCBvZmZzZXRTa2V3ID0gMDtcbiAgY29uc3QgcmVmT3B0cyA9IHsgeGxzeDogb3B0cy54bHN4LCBhbGxvd1Rlcm5hcnk6IG9wdHMuYWxsb3dUZXJuYXJ5IH07XG4gIHRva2Vucy5mb3JFYWNoKHRva2VuID0+IHtcbiAgICBpZiAoaXNSYW5nZSh0b2tlbikpIHtcbiAgICAgIGNvbnN0IHRva2VuVmFsdWUgPSB0b2tlbi52YWx1ZTtcbiAgICAgIGNvbnN0IHJlZiA9IHBhcnNlUjFDMVJlZih0b2tlblZhbHVlLCByZWZPcHRzKTtcbiAgICAgIGNvbnN0IGQgPSByZWYucmFuZ2U7XG4gICAgICBjb25zdCByYW5nZSA9IHt9O1xuICAgICAgY29uc3QgcjAgPSB0b0ZpeGVkKGQucjAsIGQuJHIwLCBhbmNob3IudG9wLCBNQVhfUk9XUywgb3B0cy53cmFwRWRnZXMpO1xuICAgICAgY29uc3QgcjEgPSB0b0ZpeGVkKGQucjEsIGQuJHIxLCBhbmNob3IudG9wLCBNQVhfUk9XUywgb3B0cy53cmFwRWRnZXMpO1xuICAgICAgaWYgKHIwID4gcjEpIHtcbiAgICAgICAgcmFuZ2UudG9wID0gcjE7XG4gICAgICAgIHJhbmdlLiR0b3AgPSBkLiRyMTtcbiAgICAgICAgcmFuZ2UuYm90dG9tID0gcjA7XG4gICAgICAgIHJhbmdlLiRib3R0b20gPSBkLiRyMDtcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICByYW5nZS50b3AgPSByMDtcbiAgICAgICAgcmFuZ2UuJHRvcCA9IGQuJHIwO1xuICAgICAgICByYW5nZS5ib3R0b20gPSByMTtcbiAgICAgICAgcmFuZ2UuJGJvdHRvbSA9IGQuJHIxO1xuICAgICAgfVxuICAgICAgY29uc3QgYzAgPSB0b0ZpeGVkKGQuYzAsIGQuJGMwLCBhbmNob3IubGVmdCwgTUFYX0NPTFMsIG9wdHMud3JhcEVkZ2VzKTtcbiAgICAgIGNvbnN0IGMxID0gdG9GaXhlZChkLmMxLCBkLiRjMSwgYW5jaG9yLmxlZnQsIE1BWF9DT0xTLCBvcHRzLndyYXBFZGdlcyk7XG4gICAgICBpZiAoYzAgPiBjMSkge1xuICAgICAgICByYW5nZS5sZWZ0ID0gYzE7XG4gICAgICAgIHJhbmdlLiRsZWZ0ID0gZC4kYzE7XG4gICAgICAgIHJhbmdlLnJpZ2h0ID0gYzA7XG4gICAgICAgIHJhbmdlLiRyaWdodCA9IGQuJGMwO1xuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgIHJhbmdlLmxlZnQgPSBjMDtcbiAgICAgICAgcmFuZ2UuJGxlZnQgPSBkLiRjMDtcbiAgICAgICAgcmFuZ2UucmlnaHQgPSBjMTtcbiAgICAgICAgcmFuZ2UuJHJpZ2h0ID0gZC4kYzE7XG4gICAgICB9XG4gICAgICBpZiAoZC50cmltKSB7XG4gICAgICAgIHJhbmdlLnRyaW0gPSBkLnRyaW07XG4gICAgICB9XG4gICAgICBpZiAoaXNOYU4ocjApIHx8IGlzTmFOKHIxKSB8fCBpc05hTihjMCkgfHwgaXNOYU4oYzEpKSB7XG4gICAgICAgIC8vIGNvbnZlcnQgdG8gcmVmIGVycm9yXG4gICAgICAgIHRva2VuLnR5cGUgPSBFUlJPUjtcbiAgICAgICAgdG9rZW4udmFsdWUgPSAnI1JFRiEnO1xuICAgICAgICBkZWxldGUgdG9rZW4uZ3JvdXBJZDtcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICByZWYucmFuZ2UgPSByYW5nZTtcbiAgICAgICAgdG9rZW4udmFsdWUgPSBzdHJpbmdpZnlBMVJlZihyZWYsIHJlZk9wdHMpO1xuICAgICAgfVxuICAgICAgLy8gaWYgdG9rZW4gaW5jbHVkZXMgb2Zmc2V0cywgdGhvc2Ugb2Zmc2V0cyBhcmUgbm93IGxpa2VseSB3cm9uZyFcbiAgICAgIGlmICh0b2tlbi5sb2MpIHtcbiAgICAgICAgdG9rZW4ubG9jWzBdICs9IG9mZnNldFNrZXc7XG4gICAgICAgIG9mZnNldFNrZXcgKz0gdG9rZW4udmFsdWUubGVuZ3RoIC0gdG9rZW5WYWx1ZS5sZW5ndGg7XG4gICAgICAgIHRva2VuLmxvY1sxXSArPSBvZmZzZXRTa2V3O1xuICAgICAgfVxuICAgIH1cbiAgICBlbHNlIGlmIChvZmZzZXRTa2V3ICYmIHRva2VuLmxvYykge1xuICAgICAgdG9rZW4ubG9jWzBdICs9IG9mZnNldFNrZXc7XG4gICAgICB0b2tlbi5sb2NbMV0gKz0gb2Zmc2V0U2tldztcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiBpc1N0cmluZ1xuICAgID8gdG9rZW5zLm1hcChkID0+IGQudmFsdWUpLmpvaW4oJycpXG4gICAgOiB0b2tlbnM7XG59XG4iLCJpbXBvcnQgeyBzdHJpbmdpZnlQcmVmaXgsIHN0cmluZ2lmeVByZWZpeEFsdCB9IGZyb20gJy4vc3RyaW5naWZ5UHJlZml4LmpzJztcblxuZnVuY3Rpb24gcXVvdGVDb2xuYW1lIChzdHIpIHtcbiAgcmV0dXJuIHN0ci5yZXBsYWNlKC8oW1tcXF0jJ0BdKS9nLCAnXFwnJDEnKTtcbn1cblxuZnVuY3Rpb24gbmVlZHNCcmFjZXMgKHN0cikge1xuICByZXR1cm4gIS9eW2EtekEtWjAtOVxcdTAwYTEtXFx1ZmZmZl0rJC8udGVzdChzdHIpO1xufVxuXG5mdW5jdGlvbiB0b1NlbnRlbmNlQ2FzZSAoc3RyKSB7XG4gIHJldHVybiBzdHJbMF0udG9VcHBlckNhc2UoKSArIHN0ci5zbGljZSgxKS50b0xvd2VyQ2FzZSgpO1xufVxuXG4vKipcbiAqIEdldCBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBhIHN0cnVjdHVyZWQgcmVmZXJlbmNlIG9iamVjdC5cbiAqXG4gKiBgYGBqc1xuICogc3RyaW5naWZ5U3RydWN0UmVmKHtcbiAqICAgY29udGV4dDogWyAnd29ya2Jvb2sueGxzeCcgXSxcbiAqICAgc2VjdGlvbnM6IFsgJ2RhdGEnIF0sXG4gKiAgIGNvbHVtbnM6IFsgJ215IGNvbHVtbicsICdAZm9vJyBdLFxuICogICB0YWJsZTogJ3RhYmxlTmFtZScsXG4gKiB9KTtcbiAqIC8vID0+ICd3b3JrYm9vay54bHN4IXRhYmxlTmFtZVtbI0RhdGFdLFtDb2x1bW4xXTpbQ29sdW1uMl1dJ1xuICogYGBgXG4gKlxuICogQHBhcmFtIHtSZWZlcmVuY2VTdHJ1Y3R9IHJlZk9iamVjdCBBIHN0cnVjdHVyZWQgcmVmZXJlbmNlIG9iamVjdFxuICogQHBhcmFtIHtvYmplY3R9IFtvcHRpb25zPXt9XSAgT3B0aW9uc1xuICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy54bHN4PWZhbHNlXSAgU3dpdGNoZXMgdG8gdGhlIGBbMV1TaGVldDEhQTFgIG9yIGBbMV0hbmFtZWAgcHJlZml4IHN5bnRheCBmb3JtIGZvciBleHRlcm5hbCB3b3JrYm9va3MuIFNlZTogW1ByZWZpeGVzLm1kXSguL1ByZWZpeGVzLm1kKVxuICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy50aGlzUm93PWZhbHNlXSAgRW5mb3JjZXMgdXNpbmcgdGhlIGBbI1RoaXMgUm93XWAgaW5zdGVhZCBvZiB0aGUgYEBgIHNob3J0aGFuZCB3aGVuIHNlcmlhbGl6aW5nIHN0cnVjdHVyZWQgcmFuZ2VzLlxuICogQHJldHVybnMge3N0cmluZ30gVGhlIHN0cnVjdHVyZWQgcmVmZXJlbmNlIGluIHN0cmluZyBmb3JtYXRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHN0cmluZ2lmeVN0cnVjdFJlZiAocmVmT2JqZWN0LCBvcHRpb25zID0ge30pIHtcbiAgY29uc3QgeyB4bHN4LCB0aGlzUm93IH0gPSBvcHRpb25zO1xuICBsZXQgcyA9IHhsc3hcbiAgICA/IHN0cmluZ2lmeVByZWZpeEFsdChyZWZPYmplY3QpXG4gICAgOiBzdHJpbmdpZnlQcmVmaXgocmVmT2JqZWN0KTtcblxuICBpZiAocmVmT2JqZWN0LnRhYmxlKSB7XG4gICAgcyArPSByZWZPYmplY3QudGFibGU7XG4gIH1cbiAgY29uc3QgbnVtQ29sdW1ucyA9IHJlZk9iamVjdC5jb2x1bW5zPy5sZW5ndGggPz8gMDtcbiAgY29uc3QgbnVtU2VjdGlvbnMgPSByZWZPYmplY3Quc2VjdGlvbnM/Lmxlbmd0aCA/PyAwO1xuICAvLyBzaW5nbGUgc2VjdGlvblxuICBpZiAobnVtU2VjdGlvbnMgPT09IDEgJiYgIW51bUNvbHVtbnMpIHtcbiAgICBzICs9IGBbIyR7dG9TZW50ZW5jZUNhc2UocmVmT2JqZWN0LnNlY3Rpb25zWzBdKX1dYDtcbiAgfVxuICAvLyBzaW5nbGUgY29sdW1uXG4gIGVsc2UgaWYgKCFudW1TZWN0aW9ucyAmJiBudW1Db2x1bW5zID09PSAxKSB7XG4gICAgcyArPSBgWyR7cXVvdGVDb2xuYW1lKHJlZk9iamVjdC5jb2x1bW5zWzBdKX1dYDtcbiAgfVxuICBlbHNlIHtcbiAgICBzICs9ICdbJztcbiAgICAvLyBzaW5nbGUgWyN0aGlzIHJvd10gc2VjdGlvbnMgZ2V0IG5vcm1hbGl6ZWQgdG8gYW4gQCBieSBkZWZhdWx0XG4gICAgY29uc3Qgc2luZ2xlQXQgPSAhdGhpc1JvdyAmJiBudW1TZWN0aW9ucyA9PT0gMSAmJiByZWZPYmplY3Quc2VjdGlvbnNbMF0udG9Mb3dlckNhc2UoKSA9PT0gJ3RoaXMgcm93JztcbiAgICBpZiAoc2luZ2xlQXQpIHtcbiAgICAgIHMgKz0gJ0AnO1xuICAgIH1cbiAgICBlbHNlIGlmIChudW1TZWN0aW9ucykge1xuICAgICAgcyArPSByZWZPYmplY3Quc2VjdGlvbnNcbiAgICAgICAgLm1hcChkID0+IGBbIyR7dG9TZW50ZW5jZUNhc2UoZCl9XWApXG4gICAgICAgIC5qb2luKCcsJyk7XG4gICAgICBpZiAobnVtQ29sdW1ucykge1xuICAgICAgICBzICs9ICcsJztcbiAgICAgIH1cbiAgICB9XG4gICAgLy8gYSBjYXNlIG9mIGEgc2luZ2xlIGFscGhhbnVtYmVyaWMgY29sdW1uIHdpdGggYSBbI3RoaXMgcm93XSBiZWNvbWVzIFtAY29sXVxuICAgIGlmIChzaW5nbGVBdCAmJiByZWZPYmplY3QuY29sdW1ucy5sZW5ndGggPT09IDEgJiYgIW5lZWRzQnJhY2VzKHJlZk9iamVjdC5jb2x1bW5zWzBdKSkge1xuICAgICAgcyArPSBxdW90ZUNvbG5hbWUocmVmT2JqZWN0LmNvbHVtbnNbMF0pO1xuICAgIH1cbiAgICBlbHNlIGlmIChudW1Db2x1bW5zKSB7XG4gICAgICBzICs9IHJlZk9iamVjdC5jb2x1bW5zLnNsaWNlKDAsIDIpXG4gICAgICAgIC5tYXAoZCA9PiAoYFske3F1b3RlQ29sbmFtZShkKX1dYCkpXG4gICAgICAgIC5qb2luKCc6Jyk7XG4gICAgfVxuICAgIHMgKz0gJ10nO1xuICB9XG4gIHJldHVybiBzO1xufVxuIiwiZXhwb3J0IHsgdG9rZW5pemUgfSBmcm9tICcuL2xleGVyLmpzJztcbmV4cG9ydCB7IHBhcnNlIH0gZnJvbSAnLi9wYXJzZXIuanMnO1xuZXhwb3J0IHsgYWRkVG9rZW5NZXRhIH0gZnJvbSAnLi9hZGRUb2tlbk1ldGEuanMnO1xuZXhwb3J0IHsgdHJhbnNsYXRlVG9SMUMxLCB0cmFuc2xhdGVUb0ExIH0gZnJvbSAnLi90cmFuc2xhdGUuanMnO1xuZXhwb3J0IHsgTUFYX0NPTFMsIE1BWF9ST1dTIH0gZnJvbSAnLi9jb25zdGFudHMuanMnO1xuZXhwb3J0IHsgbWVyZ2VSZWZUb2tlbnMgfSBmcm9tICcuL21lcmdlUmVmVG9rZW5zLmpzJztcbmV4cG9ydCB7IGZpeFJhbmdlcyB9IGZyb20gJy4vZml4UmFuZ2VzLmpzJztcbmV4cG9ydCB7XG4gIGlzRXJyb3IsXG4gIGlzRnVuY3Rpb24sXG4gIGlzRnhQcmVmaXgsXG4gIGlzTGl0ZXJhbCxcbiAgaXNPcGVyYXRvcixcbiAgaXNSYW5nZSxcbiAgaXNSZWZlcmVuY2UsXG4gIGlzV2hpdGVzcGFjZVxufSBmcm9tICcuL2lzVHlwZS5qcyc7XG5cbmV4cG9ydCB7IGZyb21Db2wgfSBmcm9tICcuL2Zyb21Db2wuanMnO1xuZXhwb3J0IHsgdG9Db2wgfSBmcm9tICcuL3RvQ29sLmpzJztcblxuZXhwb3J0IHtcbiAgcGFyc2VBMVJlZixcbiAgc3RyaW5naWZ5QTFSZWYsXG4gIGFkZEExUmFuZ2VCb3VuZHNcbn0gZnJvbSAnLi9hMS5qcyc7XG5cbmV4cG9ydCB7XG4gIHBhcnNlUjFDMVJlZixcbiAgc3RyaW5naWZ5UjFDMVJlZlxufSBmcm9tICcuL3JjLmpzJztcblxuZXhwb3J0IHsgc3RyaW5naWZ5U3RydWN0UmVmIH0gZnJvbSAnLi9zdHJpbmdpZnlTdHJ1Y3RSZWYuanMnO1xuZXhwb3J0IHsgcGFyc2VTdHJ1Y3RSZWYgfSBmcm9tICcuL3BhcnNlU3RydWN0UmVmLmpzJztcblxuaW1wb3J0IHtcbiAgLy8gdG9rZW4gdHlwZXNcbiAgT1BFUkFUT1IsXG4gIEJPT0xFQU4sXG4gIEVSUk9SLFxuICBOVU1CRVIsXG4gIEZVTkNUSU9OLFxuICBORVdMSU5FLFxuICBXSElURVNQQUNFLFxuICBTVFJJTkcsXG4gIENPTlRFWFQsXG4gIENPTlRFWFRfUVVPVEUsXG4gIFJFRl9SQU5HRSxcbiAgUkVGX0JFQU0sXG4gIFJFRl9URVJOQVJZLFxuICBSRUZfTkFNRUQsXG4gIFJFRl9TVFJVQ1QsXG4gIEZYX1BSRUZJWCxcbiAgVU5LTk9XTixcbiAgLy8gQVNUIHR5cGVzXG4gIFVOQVJZLFxuICBCSU5BUlksXG4gIFJFRkVSRU5DRSxcbiAgTElURVJBTCxcbiAgRVJST1JfTElURVJBTCxcbiAgQ0FMTCxcbiAgQVJSQVksXG4gIElERU5USUZJRVJcbn0gZnJvbSAnLi9jb25zdGFudHMuanMnO1xuXG4vKipcbiAqIEEgZGljdGlvbmFyeSBvZiB0aGUgdHlwZXMgdXNlZCB0byBpZGVudGlmeSB0b2tlbiB2YXJpYW50cy5cbiAqXG4gKiBAcmVhZG9ubHlcbiAqIEBjb25zdGFudCB7T2JqZWN0PHN0cmluZz59IHRva2VuVHlwZXNcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBPUEVSQVRPUiAtIE5ld2xpbmUgKGBcXG5gKVxuICogQHByb3BlcnR5IHtzdHJpbmd9IEJPT0xFQU4gLSBCb29sZWFuIGxpdGVyYWwgKGBUUlVFYClcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBFUlJPUiAtIEVycm9yIGxpdGVyYWwgKGAjVkFMVUUhYClcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBOVU1CRVIgLSBOdW1iZXIgbGl0ZXJhbCAoYDEyMy40YCwgYC0xLjVlKzJgKVxuICogQHByb3BlcnR5IHtzdHJpbmd9IEZVTkNUSU9OIC0gRnVuY3Rpb24gbmFtZSAoYFNVTWApXG4gKiBAcHJvcGVydHkge3N0cmluZ30gTkVXTElORSAtIE5ld2xpbmUgY2hhcmFjdGVyIChgXFxuYClcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBXSElURVNQQUNFIC0gV2hpdGVzcGFjZSBjaGFyYWN0ZXIgc2VxdWVuY2UgKGAgYClcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBTVFJJTkcgLSBTdHJpbmcgbGl0ZXJhbCAoYFwiTG9yZW0gaXBzdW1cImApXG4gKiBAcHJvcGVydHkge3N0cmluZ30gQ09OVEVYVCAtIFJlZmVyZW5jZSBjb250ZXh0IChbV29ya2Jvb2sueGxzeF1TaGVldDEpXG4gKiBAcHJvcGVydHkge3N0cmluZ30gQ09OVEVYVF9RVU9URSAtIFF1b3RlZCByZWZlcmVuY2UgY29udGV4dCAoYCdbTXkgd29ya2Jvb2sueGxzeF1TaGVldDEnYClcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBSRUZfUkFOR0UgLSBBIHJhbmdlIGlkZW50aWZpZXIgKGBBMWApXG4gKiBAcHJvcGVydHkge3N0cmluZ30gUkVGX0JFQU0gLSBBIHJhbmdlIFwiYmVhbVwiIGlkZW50aWZpZXIgKGBBOkFgIG9yIGAxOjFgKVxuICogQHByb3BlcnR5IHtzdHJpbmd9IFJFRl9URVJOQVJZIC0gQSB0ZXJuYXJ5IHJhbmdlIGlkZW50aWZpZXIgKGBCMjpCYClcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBSRUZfTkFNRUQgLSBBIG5hbWUgLyBuYW1lZCByYW5nZSBpZGVudGlmaWVyIChgaW5jb21lYClcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBSRUZfU1RSVUNUIC0gQSBzdHJ1Y3R1cmVkIHJlZmVyZW5jZSBpZGVudGlmaWVyIChgdGFibGVbW0NvbHVtbjFdOltDb2x1bW4yXV1gKVxuICogQHByb3BlcnR5IHtzdHJpbmd9IEZYX1BSRUZJWCAtIEEgbGVhZGluZyBlcXVhbHMgc2lnbiBhdCB0aGUgc3RhcnQgb2YgYSBmb3JtdWxhIChgPWApXG4gKiBAcHJvcGVydHkge3N0cmluZ30gVU5LTk9XTiAtIEFueSB1bmlkZW50aWZpYWJsZSByYW5nZSBvZiBjaGFyYWN0ZXJzLlxuICogQHNlZSB0b2tlbml6ZVxuICovXG5leHBvcnQgY29uc3QgdG9rZW5UeXBlcyA9IE9iamVjdC5mcmVlemUoe1xuICBPUEVSQVRPUixcbiAgQk9PTEVBTixcbiAgRVJST1IsXG4gIE5VTUJFUixcbiAgRlVOQ1RJT04sXG4gIE5FV0xJTkUsXG4gIFdISVRFU1BBQ0UsXG4gIFNUUklORyxcbiAgQ09OVEVYVCxcbiAgQ09OVEVYVF9RVU9URSxcbiAgUkVGX1JBTkdFLFxuICBSRUZfQkVBTSxcbiAgUkVGX1RFUk5BUlksXG4gIFJFRl9OQU1FRCxcbiAgUkVGX1NUUlVDVCxcbiAgRlhfUFJFRklYLFxuICBVTktOT1dOXG59KTtcblxuLyoqXG4gKiBBIGRpY3Rpb25hcnkgb2YgdGhlIHR5cGVzIHVzZWQgdG8gaWRlbnRpZnkgQVNUIG5vZGUgdmFyaWFudHMuXG4gKlxuICogQHJlYWRvbmx5XG4gKiBAY29uc3RhbnQge09iamVjdDxzdHJpbmc+fSBub2RlVHlwZXNcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBVTkFSWSAtIEEgdW5hcnkgb3BlcmF0aW9uIChgMTAlYClcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBCSU5BUlkgLSBBIGJpbmFyeSBvcGVyYXRpb24gKGAxMCsxMGApXG4gKiBAcHJvcGVydHkge3N0cmluZ30gUkVGRVJFTkNFIC0gQSByYW5nZSBpZGVudGlmaWVyIChgQTFgKVxuICogQHByb3BlcnR5IHtzdHJpbmd9IExJVEVSQUwgLSBBIGxpdGVyYWwgKG51bWJlciwgc3RyaW5nLCBvciBib29sZWFuKSAoYDEyM2AsIGBcImZvb1wiYCwgYGZhbHNlYClcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBFUlJPUiAtIEFuIGVycm9yIGxpdGVyYWwgKGAjVkFMVUUhYClcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBDQUxMIC0gQSBmdW5jdGlvbiBjYWxsIGV4cHJlc3Npb24gKGBTVU0oMSwyKWApXG4gKiBAcHJvcGVydHkge3N0cmluZ30gQVJSQVkgLSBBbiBhcnJheSBleHByZXNzaW9uIChgezEsMjszLDR9YClcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBJREVOVElGSUVSIC0gQSBmdW5jdGlvbiBuYW1lIGlkZW50aWZpZXIgKGBTVU1gKVxuICogQHNlZSBwYXJzZVxuICovXG5leHBvcnQgY29uc3Qgbm9kZVR5cGVzID0gT2JqZWN0LmZyZWV6ZSh7XG4gIFVOQVJZLFxuICBCSU5BUlksXG4gIFJFRkVSRU5DRSxcbiAgTElURVJBTCxcbiAgRVJST1I6IEVSUk9SX0xJVEVSQUwsXG4gIENBTEwsXG4gIEFSUkFZLFxuICBJREVOVElGSUVSXG59KTtcbiIsImltcG9ydCB7IGlzUmFuZ2UgfSBmcm9tICcuL2lzVHlwZS5qcyc7XG5pbXBvcnQgeyBwYXJzZUExUmVmLCBzdHJpbmdpZnlBMVJlZiwgYWRkQTFSYW5nZUJvdW5kcyB9IGZyb20gJy4vYTEuanMnO1xuaW1wb3J0IHsgcGFyc2VTdHJ1Y3RSZWYgfSBmcm9tICcuL3BhcnNlU3RydWN0UmVmLmpzJztcbmltcG9ydCB7IHN0cmluZ2lmeVN0cnVjdFJlZiB9IGZyb20gJy4vc3RyaW5naWZ5U3RydWN0UmVmLmpzJztcbmltcG9ydCB7IHRva2VuaXplIH0gZnJvbSAnLi9sZXhlci5qcyc7XG5pbXBvcnQgeyBSRUZfU1RSVUNUIH0gZnJvbSAnLi9jb25zdGFudHMuanMnO1xuXG4vLyBUaGVyZSBpcyBubyBSMUMxIGNvdW50ZXJwYXJ0IHRvIHRoaXMuIFRoaXMgaXMgYmVjYXVzZSB3aXRob3V0IGFuIGFuY2hvciBjZWxsXG4vLyBpdCBpcyBpbXBvc3NpYmxlIHRvIGRldGVybWluZSBpZiBhIHJlbGF0aXZlK2Fic29sdXRlIHJhbmdlIChSWzFdQ1sxXTpSNUM1KVxuLy8gbmVlZHMgdG8gYmUgZmxpcHBlZCBvciBub3QuIFRoZSBzb2x1dGlvbiBpcyB0byBjb252ZXJ0IHRvIEExIGZpcnN0OlxuLy8gdHJhbnNsYXRlVG9SQyhmaXhSYW5nZXModHJhbnNsYXRlVG9BMSguLi4pKSlcblxuLyoqXG4gKiBOb3JtYWxpemVzIEExIHN0eWxlIHJhbmdlcyBhbmQgc3RydWN0dXJlZCByZWZlcmVuY2VzIGluIGEgZm9ybXVsYSBvciBsaXN0IG9mXG4gKiB0b2tlbnMuXG4gKiBcbiAqIEl0IGVuc3VyZXMgdGhhdCB0aGF0IHRoZSB0b3AgYW5kIGxlZnQgY29vcmRpbmF0ZXMgb2YgYW4gQTEgcmFuZ2UgYXJlIG9uIHRoZVxuICogbGVmdC1oYW5kIHNpZGUgb2YgYSBjb2xvbiBvcGVyYXRvcjpcbiAqXG4gKiBgQjI6QTFgIOKGkiBgQTE6QjJgICBcbiAqIGAxOkExYCDihpIgYEExOjFgICBcbiAqIGBBOkExYCDihpIgYEExOkFgICBcbiAqIGBCOkFgIOKGkiBgQTpCYCAgXG4gKiBgMjoxYCDihpIgYDE6MmAgIFxuICogYEExOkExYCDihpIgYEExYCAgXG4gKlxuICogV2hlbiBgeyBhZGRCb3VuZHM6IHRydWUgfWAgaXMgcGFzc2VkIGFzIGFuIG9wdGlvbiwgdGhlIG1pc3NpbmcgYm91bmRzIGFyZVxuICogYWxzbyBhZGRlZC4gVGhpcyBjYW4gYmUgZG9uZSB0byBlbnN1cmUgRXhjZWwgY29tcGF0aWJsZSByYW5nZXMuIFRoZSBmaXhlc1xuICogdGhlbiBhZGRpdGlvbmFsbHkgaW5jbHVkZTpcbiAqXG4gKiBgMTpBMWAg4oaSIGBBMToxYCDihpIgYDE6MWAgIFxuICogYEE6QTFgIOKGkiBgQTE6QWAg4oaSIGBBOkFgICBcbiAqIGBBMTpBYCDihpIgYEE6QWAgIFxuICogYEExOjFgIOKGkiBgQToxYCAgXG4gKiBgQjI6QmAg4oaSIGBCMjoxMDQ4NTc2YCAgXG4gKiBgQjI6MmAg4oaSIGBCMjpYRkQyYCAgXG4gKlxuICogU3RydWN0dXJlZCByYW5nZXMgYXJlIG5vcm1hbGl6ZWQgY2xlYW5lZCB1cCB0byBoYXZlIGNvbnNpc3RlbnQgb3JkZXIgYW5kXG4gKiBjYXBpdGFsaXphdGlvbiBvZiBzZWN0aW9ucyBhcyB3ZWxsIGFzIHJlbW92aW5nIHJlZHVuZGFudCBvbmVzLlxuICpcbiAqIFJldHVybnMgdGhlIHNhbWUgZm9ybXVsYSB3aXRoIHRoZSByYW5nZXMgdXBkYXRlZC4gSWYgYW4gYXJyYXkgb2YgdG9rZW5zIHdhc1xuICogc3VwcGxpZWQsIHRoZW4gYSBuZXcgYXJyYXkgaXMgcmV0dXJuZWQuXG4gKlxuICogQHBhcmFtIHsoc3RyaW5nIHwgQXJyYXk8VG9rZW4+KX0gZm9ybXVsYSBBIHN0cmluZyAoYW4gRXhjZWwgZm9ybXVsYSkgb3IgYSB0b2tlbiBsaXN0IHRoYXQgc2hvdWxkIGJlIGFkanVzdGVkLlxuICogQHBhcmFtIHtvYmplY3R9IFtvcHRpb25zPXt9XSAgT3B0aW9uc1xuICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy5hZGRCb3VuZHM9ZmFsc2VdICBGaWxsIGluIGFueSB1bmRlZmluZWQgYm91bmRzIG9mIHJhbmdlIG9iamVjdHMuIFRvcCB0byAwLCBib3R0b20gdG8gMTA0ODU3NSwgbGVmdCB0byAwLCBhbmQgcmlnaHQgdG8gMTYzODMuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLnhsc3g9ZmFsc2VdICBTd2l0Y2hlcyB0byB0aGUgYFsxXVNoZWV0MSFBMWAgb3IgYFsxXSFuYW1lYCBwcmVmaXggc3ludGF4IGZvcm0gZm9yIGV4dGVybmFsIHdvcmtib29rcy4gU2VlOiBbUHJlZml4ZXMubWRdKC4vUHJlZml4ZXMubWQpXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLnRoaXNSb3c9ZmFsc2VdICBFbmZvcmNlcyB1c2luZyB0aGUgYFsjVGhpcyBSb3ddYCBpbnN0ZWFkIG9mIHRoZSBgQGAgc2hvcnRoYW5kIHdoZW4gc2VyaWFsaXppbmcgc3RydWN0dXJlZCByYW5nZXMuXG4gKiBAcmV0dXJucyB7KHN0cmluZyB8IEFycmF5PFRva2VuPil9IEEgZm9ybXVsYSBzdHJpbmcgb3IgdG9rZW4gbGlzdCAoZGVwZW5kaW5nIG9uIHdoaWNoIHdhcyBpbnB1dClcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZpeFJhbmdlcyAoZm9ybXVsYSwgb3B0aW9ucyA9IHsgYWRkQm91bmRzOiBmYWxzZSB9KSB7XG4gIGlmICh0eXBlb2YgZm9ybXVsYSA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gZml4UmFuZ2VzKHRva2VuaXplKGZvcm11bGEsIG9wdGlvbnMpLCBvcHRpb25zKVxuICAgICAgLm1hcChkID0+IGQudmFsdWUpXG4gICAgICAuam9pbignJyk7XG4gIH1cbiAgaWYgKCFBcnJheS5pc0FycmF5KGZvcm11bGEpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdmaXhSYW5nZXMgZXhwZWN0cyBhbiBhcnJheSBvZiB0b2tlbnMnKTtcbiAgfVxuICBjb25zdCB7IGFkZEJvdW5kcywgcjFjMSwgeGxzeCwgdGhpc1JvdyB9ID0gb3B0aW9ucztcbiAgaWYgKHIxYzEpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2ZpeFJhbmdlcyBkb2VzIG5vdCBoYXZlIGFuIFIxQzEgbW9kZScpO1xuICB9XG4gIGxldCBvZmZzZXRTa2V3ID0gMDtcbiAgcmV0dXJuIGZvcm11bGEubWFwKHQgPT4ge1xuICAgIGNvbnN0IHRva2VuID0geyAuLi50IH07XG4gICAgaWYgKHQubG9jKSB7XG4gICAgICB0b2tlbi5sb2MgPSBbIC4uLnQubG9jIF07XG4gICAgfVxuICAgIGxldCBvZmZzZXREZWx0YSA9IDA7XG4gICAgaWYgKHRva2VuLnR5cGUgPT09IFJFRl9TVFJVQ1QpIHtcbiAgICAgIGNvbnN0IHNyZWYgPSBwYXJzZVN0cnVjdFJlZih0b2tlbi52YWx1ZSwgeyB4bHN4IH0pO1xuICAgICAgY29uc3QgbmV3VmFsdWUgPSBzdHJpbmdpZnlTdHJ1Y3RSZWYoc3JlZiwgeyB4bHN4LCB0aGlzUm93IH0pO1xuICAgICAgb2Zmc2V0RGVsdGEgPSBuZXdWYWx1ZS5sZW5ndGggLSB0b2tlbi52YWx1ZS5sZW5ndGg7XG4gICAgICB0b2tlbi52YWx1ZSA9IG5ld1ZhbHVlO1xuICAgIH1cbiAgICBlbHNlIGlmIChpc1JhbmdlKHRva2VuKSkge1xuICAgICAgY29uc3QgcmVmID0gcGFyc2VBMVJlZih0b2tlbi52YWx1ZSwgeyB4bHN4LCBhbGxvd1Rlcm5hcnk6IHRydWUgfSk7XG4gICAgICBjb25zdCByYW5nZSA9IHJlZi5yYW5nZTtcbiAgICAgIC8vIGZpbGwgbWlzc2luZyBkaW1lbnNpb25zP1xuICAgICAgaWYgKGFkZEJvdW5kcykge1xuICAgICAgICBhZGRBMVJhbmdlQm91bmRzKHJhbmdlKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IG5ld1ZhbHVlID0gc3RyaW5naWZ5QTFSZWYocmVmLCB7IHhsc3ggfSk7XG4gICAgICBvZmZzZXREZWx0YSA9IG5ld1ZhbHVlLmxlbmd0aCAtIHRva2VuLnZhbHVlLmxlbmd0aDtcbiAgICAgIHRva2VuLnZhbHVlID0gbmV3VmFsdWU7XG4gICAgfVxuICAgIC8vIGVuc3VyZSB0aGF0IHBvc2l0aW9uaW5nIGlzIHN0aWxsIGNvcnJlY3RcbiAgICBpZiAob2Zmc2V0U2tldyB8fCBvZmZzZXREZWx0YSkge1xuICAgICAgaWYgKHRva2VuLmxvYykge1xuICAgICAgICB0b2tlbi5sb2NbMF0gKz0gb2Zmc2V0U2tldztcbiAgICAgIH1cbiAgICAgIG9mZnNldFNrZXcgKz0gb2Zmc2V0RGVsdGE7XG4gICAgICBpZiAodG9rZW4ubG9jKSB7XG4gICAgICAgIHRva2VuLmxvY1sxXSArPSBvZmZzZXRTa2V3O1xuICAgICAgfVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIG9mZnNldFNrZXcgKz0gb2Zmc2V0RGVsdGE7XG4gICAgfVxuICAgIHJldHVybiB0b2tlbjtcbiAgfSk7XG59XG5cbiJdLCJuYW1lcyI6WyJPUEVSQVRPUiIsIk9QRVJBVE9SX1RSSU0iLCJCT09MRUFOIiwiRVJST1IiLCJOVU1CRVIiLCJGVU5DVElPTiIsIk5FV0xJTkUiLCJXSElURVNQQUNFIiwiU1RSSU5HIiwiQ09OVEVYVF9RVU9URSIsIkNPTlRFWFQiLCJSRUZfUkFOR0UiLCJSRUZfQkVBTSIsIlJFRl9URVJOQVJZIiwiUkVGX05BTUVEIiwiUkVGX1NUUlVDVCIsIkZYX1BSRUZJWCIsIlVOS05PV04iLCJVTkFSWSIsIkJJTkFSWSIsIlJFRkVSRU5DRSIsIkxJVEVSQUwiLCJFUlJPUl9MSVRFUkFMIiwiQ0FMTCIsIkxBTUJEQSIsIkxFVCIsIkFSUkFZIiwiSURFTlRJRklFUiIsIk1BWF9DT0xTIiwiTUFYX1JPV1MiLCJmcm9tQ29sIiwiY29sdW1uU3RyaW5nIiwieCIsImwiLCJsZW5ndGgiLCJuIiwiYyIsImNoYXJDb2RlQXQiLCJyZV9TUmNvbHVtbkIiLCJyZV9TUmNvbHVtbk4iLCJrZXlUZXJtcyIsImhlYWRlcnMiLCJkYXRhIiwidG90YWxzIiwiYWxsIiwiZnoiLCJfbGVuIiwiYXJndW1lbnRzIiwiYSIsIkFycmF5IiwiX2tleSIsIk9iamVjdCIsImZyZWV6ZSIsInNlY3Rpb25NYXAiLCJtYXRjaENvbHVtbiIsInMiLCJhbGxvd1VuYnJhY2VkIiwidW5kZWZpbmVkIiwibSIsImV4ZWMiLCJ2YWx1ZSIsInNsaWNlIiwicmVwbGFjZSIsInBhcnNlU1JhbmdlIiwicmF3IiwiY29sdW1ucyIsIm0xIiwicG9zIiwidGVybXMiLCJrIiwidG9Mb3dlckNhc2UiLCJwdXNoIiwiZXhwZWN0X21vcmUiLCJsZWZ0Q29sIiwicmlnaHRDb2wiLCJzZWN0aW9ucyIsImNvbmNhdCIsInRva2VuIiwicmVfQ09OVEVYVCIsInJlX0NPTlRFWFRfUVVPVEUiLCJybmdQYXJ0IiwiY29sUGFydCIsInJvd1BhcnQiLCJyYW5nZU9wIiwibmV4dE5vdENoYXIiLCJyZV9BMUNPTCIsIlJlZ0V4cCIsInJlX0ExUk9XIiwicmVfQTFSQU5HRSIsInJlX0ExUEFSVElBTCIsInJQYXJ0IiwiY1BhcnQiLCJyZV9SQ0NPTCIsInJlX1JDUk9XIiwicmVfUkNSQU5HRSIsInJlX1JDUEFSVElBTCIsInJlX05BTUVEIiwibWFrZUhhbmRsZXIiLCJ0eXBlIiwicmUiLCJzdHIiLCJsZXhOYW1lZCIsImxjIiwicmVfUVVPVEVEX1ZBTFVFIiwicmVfUVVPVEVEX1ZBTFVFX1hMU1giLCJsZXhDb250ZXh0Iiwib3B0aW9ucyIsIm1xIiwieGxzeCIsInRlc3QiLCJiIiwibGV4U3RydWN0dXJlZCIsInN0cnVjdERhdGEiLCJpIiwicmVSQ051bXMiLCJyZUExTnVtcyIsImxleFJhbmdlIiwidCIsInIxYzEiLCJhbGxvd1Rlcm5hcnkiLCJsYXN0SW5kZXgiLCJ2YWwiLCJwYXJzZUludCIsImxleGVycyIsImxleGVyc1JlZnMiLCJvcHRzIiwicmVmUGFydHNUcmVlIiwicGFja0xpc3QiLCJmIiwibm9kZSIsImtleSIsImZvckVhY2giLCJydW4iLCJyZXZlcnNlIiwibWF0Y2hlciIsInRva2VucyIsImN1cnJOb2RlIiwiYW5jaG9ySW5kZXgiLCJpbmRleCIsIm1lcmdlUmVmVG9rZW5zIiwidG9rZW5saXN0IiwiZmluYWxUb2tlbnMiLCJ2YWxpZCIsInRvTWVyZ2UiLCJtYXAiLCJkIiwiam9pbiIsImxvYyIsInVuc2hpZnQiLCJpc1R5cGUiLCJkZWZhdWx0T3B0aW9ucyIsIndpdGhMb2NhdGlvbiIsIm1lcmdlUmVmcyIsIm5lZ2F0aXZlTnVtYmVycyIsImlzVGV4dFRva2VuIiwiY2F1c2VzQmluYXJ5TWludXMiLCJnZXRUb2tlbnMiLCJmeCIsInRva2VuSGFuZGxlcnMiLCJhc3NpZ24iLCJsZXRPckxhbWJkYSIsInVua25vd25SQyIsInRyaW1PcHMiLCJ0YWlsMCIsInRhaWwxIiwibGFzdFRva2VuIiwicHVzaFRva2VuIiwiaXNDdXJyVW5rbm93biIsImlzTGFzdFVua25vd24iLCJzdGFydFBvcyIsInRva2VuVHlwZSIsInRva2VuVmFsdWUiLCJsYXN0TEMiLCJ2YWxMQyIsInVudGVybWluYXRlZCIsInAiLCJsYXN0MSIsIm1pbnVzIiwicG9wIiwid2l0aGluQ2FsbCIsInBhcmVuRGVwdGgiLCJ2IiwiZml4UkNOYW1lcyIsImJlZm9yZSIsImFmdGVyIiwidG9rZW5pemUiLCJmb3JtdWxhIiwiaXNSYW5nZSIsImlzUmVmZXJlbmNlIiwiaXNMaXRlcmFsIiwiaXNFcnJvciIsImlzV2hpdGVzcGFjZSIsImlzRnVuY3Rpb24iLCJpc0Z4UHJlZml4IiwiaXNPcGVyYXRvciIsIkVORCIsInJlZkZ1bmN0aW9ucyIsInN5bWJvbFRhYmxlIiwiY3VycmVudE5vZGUiLCJ0b2tlbkluZGV4IiwicGVybWl0QXJyYXlSYW5nZXMiLCJwZXJtaXRBcnJheUNhbGxzIiwibG9vc2VSZWZDYWxscyIsImlzUmVmZXJlbmNlRnVuY3Rpb25OYW1lIiwiZm5OYW1lIiwiaW5jbHVkZXMiLCJ0b1VwcGVyQ2FzZSIsImlzUmVmZXJlbmNlTm9kZSIsIm9wZXJhdG9yIiwiY2FsbGVlIiwibmFtZSIsImhhbHQiLCJtZXNzYWdlIiwiYXRJbmRleCIsImVyciIsIkVycm9yIiwic291cmNlIiwic291cmNlT2Zmc2V0IiwicmVkdWNlIiwicmVmSXNVcGNvbWluZyIsIm5leHQiLCJhbGxvd09wZXJhdG9ycyIsInRyaW0iLCJpc1JlZmVyZW5jZVRva2VuIiwiYWR2YW5jZSIsImV4cGVjdE5leHQiLCJsZWZ0Tm9kZSIsImlkIiwiaGF2ZVJlZiIsInBvc3NpYmxlV1NPcCIsIm5leHRJc0NhbGwiLCJjcmVhdGUiLCJleHByZXNzaW9uIiwicmJwIiwibGVmdCIsIm51ZCIsImxicCIsImxlZCIsIm9yaWdpbmFsX3N5bWJvbCIsInN5bWJvbCIsImJwIiwiaW5maXgiLCJ0aGlzIiwicmlnaHQiLCJwb3N0Zml4IiwicHJlZml4Iiwic3ViZXhwciIsInJhbmdlSW5maXgiLCJjb21tYSIsInVuaW9uUmVmcyIsImVuYWJsZSIsImN1cnJTdGF0ZSIsInBhcnNlTGFtYmRhIiwiYXJncyIsImFyZ05hbWVzIiwiYm9keSIsImRvbmUiLCJwcmV2U3RhdGUiLCJhcmdUb2tlbkluZGV4IiwiYXJnIiwia2luZCIsImN1cnJOYW1lIiwicGFyYW1zIiwicGFyc2VMZXQiLCJ2YWxzIiwiYXJnQ291bnRlciIsImFkZEFyZ3VtZW50IiwibGFzdEFyZyIsImxhc3RXYXNDb21tYSIsImRlY2xhcmF0aW9ucyIsImluaXQiLCJzcGxpdFByZWZpeCIsInN0cmluZ3NPbmx5IiwiaW5CcmFjZSIsImN1cnJTdHIiLCJwYXJ0cyIsImZsdXNoIiwiYnJhY2VkIiwiY2hhciIsInNwbGl0Q29udGV4dCIsImNvbnRleHRTdHJpbmciLCJjb250ZXh0Iiwic3BsaXRDb250ZXh0WGxzeCIsImN0eCIsIndvcmtib29rTmFtZSIsInNoZWV0TmFtZSIsIml0ZW0iLCJlIiwibGNGbiIsImNhbGwiLCJjbG9zZVBhcmVuIiwicm93Iiwicm93cyIsImNsb3NpbmdCcmFjZSIsImVsZW1lbnRzIiwicFJhbmdlT3AiLCJwUmFuZ2UiLCJyMCIsInBQYXJ0aWFsIiwicFJhbmdlMiIsInIxIiwicEJhbmciLCJwQmVhbSIsInBTdHJ1Y3VyZWQiLCJzdHJ1Y3QiLCJwQ29udGV4dCIsInNwbGl0dGVyIiwicE5hbWVkIiwidmFsaWRSdW5zIiwidmFsaWRSdW5zTmFtZWQiLCJwYXJzZVJlZiIsInJlZiIsImFsbG93TmFtZWQiLCJyZWZEYXRhIiwic2hpZnQiLCJydW5zIiwiZXZlcnkiLCJwYXJzZSIsImoiLCJjaGFyRnJvbSIsIlN0cmluZyIsImZyb21DaGFyQ29kZSIsInRvQ29sIiwiY29sdW1uSW5kZXgiLCJyZUJhbm5lZENoYXJzIiwic3RyaW5naWZ5UHJlZml4IiwicHJlIiwicXVvdGUiLCJudGgiLCJzY29wZSIsInN0cmluZ2lmeVByZWZpeEFsdCIsImNsYW1wIiwibWluIiwibWF4IiwiTWF0aCIsInRvQ29sU3RyIiwidG9Sb3dTdHIiLCJyIiwicmFuZ2VPcGVyYXRvciIsInRyaW1EaXJlY3Rpb24iLCJoZWFkIiwidGFpbCIsInNwbGl0QTEiLCJyb3dTdHIiLCJmcm9tQTEiLCJyYW5nZVN0cmluZyIsInRvcCIsImJvdHRvbSIsIiR0b3AiLCIkbGVmdCIsIiRib3R0b20iLCIkcmlnaHQiLCJwYXJ0MSIsIm9wMSIsInBhcnQyIiwib3AyIiwicGFydDMiLCJzcGxpdCIsInAxIiwicDIiLCJwYXJzZUExUmVmIiwicmVmU3RyaW5nIiwicmFuZ2UiLCJzdHJpbmdpZnlBMVJlZiIsInJlZk9iamVjdCIsIm5vTGVmdCIsIm5vUmlnaHQiLCJub1RvcCIsIm5vQm90dG9tIiwib3AiLCJ0b0ExIiwiYWRkQTFSYW5nZUJvdW5kcyIsInBhcnNlU3RydWN0UmVmIiwidGFibGUiLCJzYW1lVmFsdWUiLCJzYW1lQXJyYXkiLCJpc0FycmF5Iiwic2FtZVN0ciIsInRvQ29vcmQiLCJpc0FicyIsInBhcnNlUjFDMVBhcnQiLCJjMCIsIiRyMCIsIiRjMCIsInJtIiwiY20iLCJmcm9tUjFDMSIsImZpbmFsIiwib3ZlcmZsb3ciLCJleHRlbmRUbyIsImMxIiwiJHIxIiwiJGMxIiwicGFyc2VSMUMxUmVmIiwic3RyaW5naWZ5UjFDMVJlZiIsIm51bGxSMCIsIm51bGxDMCIsIm51bGxSMSIsIm51bGxDMSIsImhhc1RyaW0iLCJzX3IwIiwic19yMSIsInNfYzAiLCJzX2MxIiwidG9SMUMxIiwiY2FsYyIsImFicyIsInZYIiwiYVgiLCJzZXR0aW5ncyIsInRvRml4ZWQiLCJiYXNlIiwid3JhcEVkZ2VzIiwiTmFOIiwicXVvdGVDb2xuYW1lIiwidG9TZW50ZW5jZUNhc2UiLCJzdHJpbmdpZnlTdHJ1Y3RSZWYiLCJ0aGlzUm93IiwibnVtQ29sdW1ucyIsIm51bVNlY3Rpb25zIiwic2luZ2xlQXQiLCJ0b2tlblR5cGVzIiwibm9kZVR5cGVzIiwicGFyZW5TdGFjayIsImFycmF5U3RhcnQiLCJ1aWQiLCJnZXRJRGVyIiwia25vd25SZWZzIiwiZ2V0Q3VyckRlcHRoIiwiZGVwdGgiLCJjb3VudGVyIiwicGFpcklkIiwiZ3JvdXBJZCIsImVycm9yIiwiYWRkQ29udGV4dCIsImtub3duIiwiZmluZCIsInJlZkEiLCJyZWZCIiwiaXNFcXVpdmFsZW50IiwiZml4UmFuZ2VzIiwiYWRkQm91bmRzIiwib2Zmc2V0U2tldyIsIm9mZnNldERlbHRhIiwibmV3VmFsdWUiLCJyb290IiwiYW5jaG9yQ2VsbCIsImFuY2hvciIsImlzU3RyaW5nIiwicmVmT3B0cyIsImlzTmFOIl0sIm1hcHBpbmdzIjoiYUFBTyxNQUFNQSxFQUFXLFdBQ1hDLEVBQWdCLGdCQUNoQkMsRUFBVSxPQUNWQyxFQUFRLFFBQ1JDLEVBQVMsU0FDVEMsRUFBVyxPQUNYQyxFQUFVLFVBQ1ZDLEVBQWEsYUFDYkMsRUFBUyxTQUNUQyxFQUFnQixnQkFDaEJDLEVBQVUsVUFDVkMsRUFBWSxRQUNaQyxFQUFXLGFBQ1hDLEVBQWMsZ0JBQ2RDLEVBQVksY0FDWkMsRUFBYSxhQUNiQyxFQUFZLFlBQ1pDLEVBQVUsVUFFVkMsRUFBUSxrQkFDUkMsRUFBUyxtQkFDVEMsRUFBWSxzQkFDWkMsRUFBVSxVQUNWQyxFQUFnQixlQUNoQkMsRUFBTyxpQkFDUEMsRUFBUyxtQkFDVEMsRUFBTSxnQkFDTkMsRUFBUSxrQkFDUkMsRUFBYSxhQUdiQyxFQUFZLE1BQ1pDLEVBQVksUUNyQmxCLFNBQVNDLEVBQVNDLEdBQ3ZCLE1BQU1DLEVBQUtELEdBQWdCLEdBQ3JCRSxFQUFJRCxFQUFFRSxPQUNaLElBQUlDLEVBQUksRUFDUixHQUFJRixFQUFJ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
package/dist/package.json DELETED
@@ -1 +0,0 @@
1
- { "type": "commonjs" }