dmencu 0.1.43 → 0.1.44

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.
@@ -502,7 +502,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
502
502
  var diff = (today - nacimiento) / 1000 / 60 / 60 / 24 / 365; //años
503
503
  var edadEntera = Math.floor(diff);
504
504
  return (edadEntera == edad ||
505
- edadEntera > edad && (diff - edadEntera) < 1 / 12 //mes de tolerancia
505
+ edadEntera > edad && today.getMonth() == nacimiento.getMonth() //mes de tolerancia
506
506
  );
507
507
  },
508
508
  //copiar_campo_ua_rama(respuestasOrigen:Respuestas[], posicion:number, variableOrigen: IdVariable, camino:string, condicion:boolean){
@@ -1143,4 +1143,4 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
1143
1143
  }
1144
1144
  exports.calcularResumenVivienda = calcularResumenVivienda;
1145
1145
  });
1146
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnlwYXNzLWZvcm11bGFyaW8uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdW5sb2dnZWQvYnlwYXNzLWZvcm11bGFyaW8udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0lBQUEscUNBQXVEO0lBRXZELGlEQUFvRztJQUVwRywrQ0FBK0Q7SUFFL0QsbUNBZWlCO0lBRWpCLElBQUksVUFBVSxHQUFHLEVBR2hCLENBQUE7SUFDRCxTQUFnQixvQkFBb0IsQ0FBQyxpQkFBbUU7UUFDcEcsVUFBVSxDQUFDLGlCQUFpQixHQUFHLGlCQUFpQixDQUFBO0lBQ3BELENBQUM7SUFGRCxvREFFQztJQUVELFNBQWdCLHdDQUF3QyxDQUFDLHFDQUF1RjtRQUM1SSxVQUFVLENBQUMscUNBQXFDLEdBQUcscUNBQXFDLENBQUE7SUFDNUYsQ0FBQztJQUZELDRGQUVDO0lBU0QsSUFBSSxXQUFXLEdBQUcsRUFBaUIsQ0FBQTtJQUVuQyw4QkFBOEI7SUFDOUIsSUFBSSxVQUFVLEdBQWMsSUFBa0IsQ0FBQztJQUUvQyxJQUFJLDJCQUEyQixHQUFnRCxHQUFFLEVBQUU7UUFDL0UsTUFBTSxJQUFJLEtBQUssQ0FBQyxrQ0FBa0MsQ0FBQyxDQUFBO0lBQ3ZELENBQUMsQ0FBQTtJQUVELFNBQWdCLHVCQUF1QixDQUFDLHVCQUFtRDtRQUN2RiwyQkFBMkIsR0FBRyx1QkFBdUIsQ0FBQztJQUMxRCxDQUFDO0lBRkQsMERBRUM7SUFFRCxTQUFlLG9CQUFvQixDQUFDLElBQTRCOztZQUM1RCxNQUFNLDJCQUEyQixDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3hDLFdBQVcsQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFBO1lBQ3pCLG1CQUFtQixFQUFFLENBQUM7UUFDMUIsQ0FBQztLQUFBO0lBRUQsU0FBZ0IsZ0JBQWdCLENBQzVCLGdCQUErRjtRQUUvRixhQUFhLEdBQUcsZ0JBQWdCLENBQUE7SUFDcEMsQ0FBQztJQUpELDRDQUlD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QUFHLGdCQUFnQixDQUFBO1NBQ25DO2FBQUk7WUFDRCxhQUFhLEdBQUcsT0FBTyxDQUFBLENBQUMsQ0FBQSxRQUFRLENBQUEsQ0FBQyxDQUFBLFVBQVUsQ0FBQTtTQUM5QztRQUNELElBQUksU0FBUyxHQUFvQjtZQUM3QixhQUFhO1lBQ2IsZ0JBQWdCO1lBQ2hCLE1BQU07WUFDTixRQUFRO1lBQ1IsU0FBUztZQUNULFdBQVc7U0FDZCxDQUFBO1FBQ0QsT0FBTyxTQUFTLENBQUE7SUFDcEIsQ0FBQztJQTFFRCwwREEwRUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBzdHJpY3QgYXMgbGlrZUFyLCBiZWluZ0FycmF5IH0gZnJvbSBcImxpa2UtYXJcIjtcclxuXHJcbmltcG9ydCB7IGdldFJvd1ZhbGlkYXRvciwgRm9ybVN0cnVjdHVyZVN0YXRlLCBPcGNpb25lc1Jvd1ZhbGlkYXRvciwgRmVlZGJhY2sgfSBmcm9tIFwicm93LXZhbGlkYXRvclwiO1xyXG5cclxuaW1wb3J0IHsgZGF0ZSwgY29tcGFyZUZvck9yZGVyLCBjb2FsZXNjZSB9IGZyb20gXCJiZXN0LWdsb2JhbHNcIjtcclxuXHJcbmltcG9ydCB7XHJcbiAgICBFc3RydWN0dXJhLCBcclxuICAgIEZvclBrLCBGb3JQa1JhaXosXHJcbiAgICBJZEZpbiwgSWRGb3JtdWxhcmlvLCBJZFByZWd1bnRhLCBJZFRhcmVhLCBJZFZhcmlhYmxlLCBcclxuICAgIElkVW5pZGFkQW5hbGlzaXMsXHJcbiAgICBJbmZvRm9ybXVsYXJpbywgXHJcbiAgICBQbGFpbkZvclBrLCBSZXNwdWVzdGFzLCBSZXNwdWVzdGFzUmFpeiwgUmVzdW1lbkVzdGFkbyxcclxuICAgIFZhbG9yLCBWaXNpdGEsIFxyXG4gICAgdG9QbGFpbkZvclBrLFxyXG4gICAgVW5pZGFkQW5hbGlzaXMsXHJcbiAgICBGb3JtdWxhcmlvLFxyXG4gICAgQ29uZmlndXJhY2lvblNvcnRlb0Zvcm11bGFyaW8sXHJcbiAgICBEYXRvc0J5UGFzc1BlcnNpc3RpYmxlcyxcclxuICAgIElkRW5jLFxyXG4gICAgRGVmT3BlcmF0aXZvXHJcbn0gZnJvbSBcIi4vdGlwb3NcIjtcclxuXHJcbnZhciBlc3BlY2lhbGVzID0ge30gYXMge1xyXG4gICAgY2FsY3VsYXJWYXJpYWJsZXM/OihyZXNwdWVzdGFzUmFpejpSZXNwdWVzdGFzUmFpeiwgZm9yUGs6Rm9yUGspPT52b2lkXHJcbiAgICBjYWxjdWxhclZhcmlhYmxlc0VzcGVjaWZpY2FzT3BlcmF0aXZvPzoocmVzcHVlc3Rhc1JhaXo6UmVzcHVlc3Rhc1JhaXosIGZvclBrOkZvclBrKT0+dm9pZFxyXG59XHJcbmV4cG9ydCBmdW5jdGlvbiBzZXRDYWxjdWxhclZhcmlhYmxlcyhjYWxjdWxhclZhcmlhYmxlczoocmVzcHVlc3Rhc1JhaXo6UmVzcHVlc3Rhc1JhaXosZm9yUGs6Rm9yUGspPT52b2lkKXtcclxuICAgIGVzcGVjaWFsZXMuY2FsY3VsYXJWYXJpYWJsZXMgPSBjYWxjdWxhclZhcmlhYmxlc1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gc2V0Q2FsY3VsYXJWYXJpYWJsZXNFc3BlY2lmaWNhc09wZXJhdGl2byhjYWxjdWxhclZhcmlhYmxlc0VzcGVjaWZpY2FzT3BlcmF0aXZvOihyZXNwdWVzdGFzUmFpejpSZXNwdWVzdGFzUmFpeixmb3JQazpGb3JQayk9PnZvaWQpe1xyXG4gICAgZXNwZWNpYWxlcy5jYWxjdWxhclZhcmlhYmxlc0VzcGVjaWZpY2FzT3BlcmF0aXZvID0gY2FsY3VsYXJWYXJpYWJsZXNFc3BlY2lmaWNhc09wZXJhdGl2b1xyXG59XHJcblxyXG50eXBlIERhdG9zQnlQYXNzID0gRGF0b3NCeVBhc3NQZXJzaXN0aWJsZXMgJiB7XHJcbiAgICBmZWVkYmFja1Jvd1ZhbGlkYXRvcjp7ICAvLyBubyBzZSBwZXJzaXN0ZVxyXG4gICAgICAgIFtmb3JtdWxhcmlvIGluIFBsYWluRm9yUGtdOkZvcm1TdHJ1Y3R1cmVTdGF0ZTxJZFZhcmlhYmxlLCBWYWxvciwgSWRGaW4+IC8vIHJlc3VsdGFkbyBkZWwgcm93VmFsaWRhdG9yIHBhcmEgZXN0YWRvLmZvclBrXHJcbiAgICB9XHJcbiAgICBkaXJ0eTpib29sZWFuXHJcbn07XHJcblxyXG52YXIgZGF0b3NCeVBhc3MgPSB7fSBhcyBEYXRvc0J5UGFzc1xyXG5cclxuLy9AdHMtaWdub3JlIGFycmFuY2EgZW4gYmxhbmNvXHJcbnZhciBlc3RydWN0dXJhOkVzdHJ1Y3R1cmEgPSBudWxsIGFzIEVzdHJ1Y3R1cmE7XHJcblxyXG5sZXQgcGVyc2lzdGlyRGF0b3NCeVBhc3NJbnRlcm5vOihkYnBwOkRhdG9zQnlQYXNzUGVyc2lzdGlibGVzKT0+UHJvbWlzZTxhbnk+ID0gKCk9PntcclxuICAgIHRocm93IG5ldyBFcnJvcigncGVyc2lzdGlyRGF0b3NCeVBhc3MgU0lOIERFRklOSVInKVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gc2V0UGVyc2lzdGlyRGF0b3NCeVBhc3MocGVyc2lzdGlyRGF0b3NCeVBhc3NGdW46dHlwZW9mIHBlcnNpc3RpckRhdG9zQnlQYXNzKXtcclxuICAgIHBlcnNpc3RpckRhdG9zQnlQYXNzSW50ZXJubyA9IHBlcnNpc3RpckRhdG9zQnlQYXNzRnVuO1xyXG59XHJcblxyXG5hc3luYyBmdW5jdGlvbiBwZXJzaXN0aXJEYXRvc0J5UGFzcyhkYnBwOkRhdG9zQnlQYXNzUGVyc2lzdGlibGVzKXtcclxuICAgIGF3YWl0IHBlcnNpc3RpckRhdG9zQnlQYXNzSW50ZXJubyhkYnBwKTtcclxuICAgIGRhdG9zQnlQYXNzLmRpcnR5ID0gZmFsc2VcclxuICAgIHJlZnJlc2Nhck1hcmNhRGlydHkoKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHNldEVuY29sYXJCYWNrdXAoXHJcbiAgICBlbmNvbGFyQmFja3VwRnVuOih0b2tlbjpzdHJpbmd8dW5kZWZpbmVkLCBmb3JQa1JhaXo6Rm9yUGtSYWl6LCByZXNwdWVzdGFzUmFpejpSZXNwdWVzdGFzKT0+dm9pZFxyXG4pe1xyXG4gICAgZW5jb2xhckJhY2t1cCA9IGVuY29sYXJCYWNrdXBGdW5cclxufVxyXG5cclxubGV0IGVuY29sYXJCYWNrdXA6KHRva2VuOnN0cmluZ3x1bmRlZmluZWQsIGZvclBrUmFpejpGb3JQa1JhaXosIHJlc3B1ZXN0YXNSYWl6OlJlc3B1ZXN0YXMpPT52b2lkID0gKCk9PntcclxuICAgIHRocm93IG5ldyBFcnJvcihcIlNJTiBFU1BFQ0lGSUNBUiBlbmNvbGFyQmFja3VwXCIpXHJcbn1cclxuXHJcbmV4cG9ydCB2YXIgaW50ZW50YXJCYWNrdXAgPSAoZm9yUGs6Rm9yUGspPT57XHJcbiAgICB2YXIge3Jlc3B1ZXN0YXNSYWl6LCBmb3JQa1JhaXp9ID0gcmVzcHVlc3Rhc0ZvclBrKGZvclBrLCB0cnVlKVxyXG4gICAgdmFyIHRva2VuID0gZGF0b3NCeVBhc3MudG9rZW47XHJcbiAgICBpZih0b2tlbil7XHJcbiAgICAgICAgZW5jb2xhckJhY2t1cCh0b2tlbiwgZm9yUGtSYWl6LCByZXNwdWVzdGFzUmFpeilcclxuICAgIH1lbHNle1xyXG4gICAgICAgIGNvbnNvbGUubG9nKFwibm8gaGF5IHRva2VuLCBubyBzZSBwdWRvIGhhY2VyIGVsIGJhY2t1cFwiKVxyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gc2V0RXN0cnVjdHVyYShlc3RydWN0dXJhQUNhcmdhcjpFc3RydWN0dXJhKXtcclxuICAgIGVzdHJ1Y3R1cmEgPSBlc3RydWN0dXJhQUNhcmdhcjtcclxuICAgIGRlZk9wZXJhdGl2by5VQXByaW5jaXBhbCA9IGxpa2VBcihlc3RydWN0dXJhLnVuaWRhZGVzX2FuYWxpc2lzKS5maW5kKHVhPT4hIXVhLnByaW5jaXBhbCk/LnVuaWRhZF9hbmFsaXNpcyFcclxuICAgIGRlZk9wZXJhdGl2by5kZWZGb3IgPSBsaWtlQXIoZXN0cnVjdHVyYS5mb3JtdWxhcmlvcykubWFwKGY9Pih7aGVybWFubzogZi5jYXNpbGxlcm9zLmhlcm1hbm99KSkucGxhaW4oKVxyXG4gICAgZGVmT3BlcmF0aXZvLmRlZlVBID0gbGlrZUFyKGVzdHJ1Y3R1cmEudW5pZGFkZXNfYW5hbGlzaXMpLm1hcCgodWFEZWYsIHVhKT0+KHtcclxuICAgICAgICBwazp1YURlZi5wa19hZ3JlZ2FkYSBhcyBJZFZhcmlhYmxlLCBcclxuICAgICAgICBpbmNsdWlkYXM6IGxpa2VBcih1YURlZi5oaWphcykua2V5cygpLFxyXG4gICAgICAgIGlkc0ZvcjogbGlrZUFyKGVzdHJ1Y3R1cmEuZm9ybXVsYXJpb3MpLmZpbHRlcihmPT5mLmNhc2lsbGVyb3MudW5pZGFkX2FuYWxpc2lzID09IHVhKS5rZXlzKClcclxuICAgIH0pKS5wbGFpbigpXHJcbiAgICByZXR1cm4gZXN0cnVjdHVyYTsgXHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBzZXREYXRvc0J5UGFzcyhkYnBwOkRhdG9zQnlQYXNzUGVyc2lzdGlibGVzICYge2RpcnR5Pzpib29sZWFufSl7XHJcbiAgICBkYXRvc0J5UGFzcyA9IHtcclxuICAgICAgICBkaXJ0eTpmYWxzZSxcclxuICAgICAgICAuLi5kYnBwLFxyXG4gICAgICAgIGZlZWRiYWNrUm93VmFsaWRhdG9yOnt9IGFzIERhdG9zQnlQYXNzW1wiZmVlZGJhY2tSb3dWYWxpZGF0b3JcIl1cclxuICAgIH1cclxuICAgIGNhbGN1bGFyRmVlZGJhY2tIb2phRGVSdXRhKCk7XHJcbn1cclxuXHJcbmV4cG9ydCB2YXIgZ2V0RGF0b3NCeVBhc3MgPSAoKT0+IGRhdG9zQnlQYXNzXHJcblxyXG5mdW5jdGlvbiBvYmpldG9WYWNpbyhvOm9iamVjdCl7XHJcbiAgICBmb3IodmFyIGsgaW4gbyl7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRydWU7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRGZWVkYmFja1Jvd1ZhbGlkYXRvcigpe1xyXG4gICAgaWYoIWRhdG9zQnlQYXNzLmZlZWRiYWNrUm93VmFsaWRhdG9yIHx8IG9iamV0b1ZhY2lvKGRhdG9zQnlQYXNzLmZlZWRiYWNrUm93VmFsaWRhdG9yKSl7XHJcbiAgICAgICAgY2FsY3VsYXJGZWVkYmFja0hvamFEZVJ1dGEoKTtcclxuICAgIH1cclxuICAgIHJldHVybiBkYXRvc0J5UGFzcy5mZWVkYmFja1Jvd1ZhbGlkYXRvcjtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdldERpcnR5KCl7XHJcbiAgICByZXR1cm4gZGF0b3NCeVBhc3MuZGlydHlcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdldEVzdHJ1Y3R1cmEoKXtcclxuICAgIHJldHVybiBlc3RydWN0dXJhO1xyXG59XHJcblxyXG50eXBlIEVsZW1lbnRvc1JlZ2lzdHJhYmxlcyA9IEhUTUxEaXZFbGVtZW50fEhUTUxCdXR0b25FbGVtZW50fEhUTUxJbnB1dEVsZW1lbnQ7XHJcblxyXG50eXBlIERpcmVjdEZ1bmN0aW9uPFQsIFJlc3VsdD4gPSAocmVzcHVlc3Rhc0F1bWVudGFkYXM6UmVzcHVlc3RhcywgZmVlZGJhY2tGb3JtOiBGb3JtU3RydWN0dXJlU3RhdGU8SWRWYXJpYWJsZSxWYWxvcixJZEZpbj4sIGVsZW1lbnRvOlQsXHJcbiAgICBmZWVkYmFja0FsbDp7XHJcbiAgICAgICAgW2Zvcm11bGFyaW8gaW4gUGxhaW5Gb3JQa106Rm9ybVN0cnVjdHVyZVN0YXRlPElkVmFyaWFibGUsVmFsb3IsSWRGaW4+IC8vIHJlc3VsdGFkbyBkZWwgcm93VmFsaWRhdG9yIHBhcmEgZXN0YWRvLmZvclBrXHJcbiAgICB9LFxyXG4gICAgZXN0cnVjdHVyYTpFc3RydWN0dXJhXHJcbikgPT4gUmVzdWx0XHJcblxyXG50eXBlIFJlZ2lzdHJvRWxlbWVudG88VCBleHRlbmRzIEVsZW1lbnRvc1JlZ2lzdHJhYmxlcz4gPSB7XHJcbiAgICBpZDogc3RyaW5nLCBcclxuICAgIGZ1bjogRGlyZWN0RnVuY3Rpb248VCwgYW55PlxyXG59ICYgKHtcclxuICAgIHByb3A6a2V5b2YgVFxyXG4gICAgZnVuOiBEaXJlY3RGdW5jdGlvbjxULCBUW2tleW9mIFRdPlxyXG59fHtcclxuICAgIGF0dHI6c3RyaW5nXHJcbiAgICBmdW46IERpcmVjdEZ1bmN0aW9uPFQsIHN0cmluZz5cclxufXx7XHJcbiAgICBzdHlsZTprZXlvZiBDU1NTdHlsZURlY2xhcmF0aW9uXHJcbiAgICBmdW46IERpcmVjdEZ1bmN0aW9uPFQsIHN0cmluZz5cclxufXx7XHJcbiAgICBkaXJlY3Q6dHJ1ZVxyXG4gICAgZnVuOiBEaXJlY3RGdW5jdGlvbjxULCB2b2lkPlxyXG59KVxyXG5cclxudHlwZSBSZWdpc3Ryb0VsZW1lbnRvczxUIGV4dGVuZHMgRWxlbWVudG9zUmVnaXN0cmFibGVzPiA9IHsgW2lkOnN0cmluZ106IFJlZ2lzdHJvRWxlbWVudG88VD4gJiB7ZWxlbWVudG8/OlR9IH07XHJcblxyXG52YXIgcmVnaXN0cm9FbGVtZW50b3NHbG9iYWwgPSB7fSBhcyBSZWdpc3Ryb0VsZW1lbnRvczxFbGVtZW50b3NSZWdpc3RyYWJsZXM+O1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHJlZ2lzdHJhckVsZW1lbnRvPFQgZXh0ZW5kcyBFbGVtZW50b3NSZWdpc3RyYWJsZXM+KGRlZjpSZWdpc3Ryb0VsZW1lbnRvPFQ+KXtcclxuICAgIC8vIEB0cy1pZ25vcmUgU8OtLCBwb2Ryw61hIHNlciBxdWUgbG9zIHRpcG9zIGRlIFQgc2VhbiBkaXN0aW50b3MsIHBlcm8gdmFuIGEgc2VyIGNvaGVyZW50ZXNcclxuICAgIHZhciByZWdpc3Ryb0VsZW1lbnRvczpSZWdpc3Ryb0VsZW1lbnRvczxUPiA9IHJlZ2lzdHJvRWxlbWVudG9zR2xvYmFsO1xyXG4gICAgcmVnaXN0cm9FbGVtZW50b3NbZGVmLmlkXSA9IGRlZjtcclxufVxyXG5cclxudHlwZSBSZXNwdWVzdGFzRm9yUGtDb211biA9IHtyZXNwdWVzdGFzOlJlc3B1ZXN0YXMsIHJlc3B1ZXN0YXNSYWl6OlJlc3B1ZXN0YXNSYWl6LCBmb3JQa1JhaXo6Rm9yUGtSYWl6LCB1bmlkYWRBbmFsaXNpczpVbmlkYWRBbmFsaXNpc31cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiByZXNwdWVzdGFzRm9yUGsoZm9yUGs6Rm9yUGspOlJlc3B1ZXN0YXNGb3JQa0NvbXVuXHJcbmV4cG9ydCBmdW5jdGlvbiByZXNwdWVzdGFzRm9yUGsoZm9yUGs6Rm9yUGssIGNvbkF1bWVudGFkYXM6dHJ1ZSwgYWdyZWdhclNpRmFsdGE/OmJvb2xlYW4pOlJlc3B1ZXN0YXNGb3JQa0NvbXVuICYge3Jlc3B1ZXN0YXNBdW1lbnRhZGFzOlJlc3B1ZXN0YXN9XHJcbmV4cG9ydCBmdW5jdGlvbiByZXNwdWVzdGFzRm9yUGsoZm9yUGs6Rm9yUGssIGNvbkF1bWVudGFkYXM/OmJvb2xlYW4sIGFncmVnYXJTaUZhbHRhPzpib29sZWFuKTpSZXNwdWVzdGFzRm9yUGtDb211biAmIHtyZXNwdWVzdGFzQXVtZW50YWRhcz86UmVzcHVlc3Rhc30ge1xyXG4gICAgdmFyIHJlc3B1ZXN0YXNBdW1lbnRhZGFzID0ge30gYXMgUmVzcHVlc3RhcztcclxuICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgbG8gcXVlIHNvYnJhciBkZSByZXNwdWVzdGFzIG5vIG1lIGltcG9ydGEuLi5cclxuICAgIHZhciByZXNwdWVzdGFzID0gZGF0b3NCeVBhc3MucmVzcHVlc3RhcyBhcyBSZXNwdWVzdGFzO1xyXG4gICAgdmFyIHJlc3B1ZXN0YXNSYWl6OiBSZXNwdWVzdGFzUmFpejsgXHJcbiAgICB2YXIgZm9yUGtSYWl6OiBGb3JQazsgXHJcbiAgICB2YXIgdW5pZGFkX2FuYWxpc2lzOklkVW5pZGFkQW5hbGlzaXN8dW5kZWZpbmVkID0gZXN0cnVjdHVyYS5mb3JtdWxhcmlvc1tmb3JQay5mb3JtdWxhcmlvXS5jYXNpbGxlcm9zLnVuaWRhZF9hbmFsaXNpc1xyXG4gICAgdmFyIGZvclBrQXBpbGFkYSA9IGZvclBrO1xyXG4gICAgdmFyIHBpbGE6W3VuaWRhZF9hbmFsaXNpczpJZFVuaWRhZEFuYWxpc2lzLCB1YURlZjpVbmlkYWRBbmFsaXNpcywgZm9yUGs6Rm9yUGtdW10gPSBbXTtcclxuICAgIHdoaWxlKHVuaWRhZF9hbmFsaXNpcyl7XHJcbiAgICAgICAgdmFyIHVhRGVmOlVuaWRhZEFuYWxpc2lzID0gZXN0cnVjdHVyYS51bmlkYWRlc19hbmFsaXNpc1t1bmlkYWRfYW5hbGlzaXNdO1xyXG4gICAgICAgIHBpbGEucHVzaChbdW5pZGFkX2FuYWxpc2lzLCB1YURlZiwgZm9yUGtBcGlsYWRhXSk7XHJcbiAgICAgICAgZm9yUGtBcGlsYWRhPXsuLi5mb3JQa0FwaWxhZGF9O1xyXG4gICAgICAgIGRlbGV0ZSBmb3JQa0FwaWxhZGFbdWFEZWYucGtfYWdyZWdhZGFdXHJcbiAgICAgICAgdW5pZGFkX2FuYWxpc2lzPXVhRGVmLnBhZHJlXHJcbiAgICB9XHJcbiAgICB3aGlsZShwaWxhLmxlbmd0aCl7XHJcbiAgICAgICAgW3VuaWRhZF9hbmFsaXNpcywgdWFEZWYsIGZvclBrQXBpbGFkYV0gPSBwaWxhLnBvcCgpIVxyXG4gICAgICAgIHZhciB2YWxvclBrT1Bvc2ljaW9uID0gZm9yUGtBcGlsYWRhW3VhRGVmLnBrX2FncmVnYWRhXTtcclxuICAgICAgICBpZih2YWxvclBrT1Bvc2ljaW9uID09IHVuZGVmaW5lZCl7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgZmFsdGEgdW4gdmFsb3IgcGFyYSAke0pTT04uc3RyaW5naWZ5KHVhRGVmLnBrX2FncmVnYWRhKX1gKVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZihyZXNwdWVzdGFzW3VuaWRhZF9hbmFsaXNpc10gPT0gbnVsbCl7XHJcbiAgICAgICAgICAgIHJlc3B1ZXN0YXNbdW5pZGFkX2FuYWxpc2lzXSA9IFtdO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgcmVzcHVlc3Rhc0FudGVyaW9yPXJlc3B1ZXN0YXM7XHJcbiAgICAgICAgbGV0IHBvc2ljaW9uID0gcmVzcHVlc3Rhc1t1bmlkYWRfYW5hbGlzaXNdIGluc3RhbmNlb2YgQXJyYXk/dmFsb3JQa09Qb3NpY2lvbiAtIDE6dmFsb3JQa09Qb3NpY2lvblxyXG4gICAgICAgIHJlc3B1ZXN0YXMgPSByZXNwdWVzdGFzW3VuaWRhZF9hbmFsaXNpc11bcG9zaWNpb25dO1xyXG4gICAgICAgIGlmKHJlc3B1ZXN0YXMgPT0gbnVsbCl7XHJcbiAgICAgICAgICAgIGlmKGFncmVnYXJTaUZhbHRhKXtcclxuICAgICAgICAgICAgICAgIHJlc3B1ZXN0YXMgPSB7fSBhcyBSZXNwdWVzdGFzXHJcbiAgICAgICAgICAgICAgICByZXNwdWVzdGFzQW50ZXJpb3JbdW5pZGFkX2FuYWxpc2lzXVtwb3NpY2lvbl0gPSByZXNwdWVzdGFzXHJcbiAgICAgICAgICAgICAgICBwZXJzaXN0aXJEYXRvc0J5UGFzcyhkYXRvc0J5UGFzcyk7IC8vIE9KTyBBU1lOQyBERVNDT05UUk9MQURBXHJcbiAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBObyBleGlzdGUgZWwgZWxlbWVudG8gJyR7cG9zaWNpb259JyBlbiBsYSB1bmlkYWRfYW5hbGlzaXMgJyR7dW5pZGFkX2FuYWxpc2lzfSdgKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBmb3JQa1JhaXogfHw9IGZvclBrQXBpbGFkYTtcclxuICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIFPDqSBxdWUgZXMgcmHDrXogcG9yIGPDs21vIGVzdG95IHJldm9sdmllbmRvIGxhIHBpbGFcclxuICAgICAgICByZXNwdWVzdGFzUmFpeiB8fD0gcmVzcHVlc3RhcztcclxuICAgICAgICBpZihjb25BdW1lbnRhZGFzKXtcclxuICAgICAgICAgICAgcmVzcHVlc3Rhc0F1bWVudGFkYXMgPSB7Li4ucmVzcHVlc3Rhc0F1bWVudGFkYXMsIC4uLnJlc3B1ZXN0YXMsIFt1YURlZi5wa19hZ3JlZ2FkYV06dmFsb3JQa09Qb3NpY2lvbn1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIHJlc3B1ZXN0YXMsIHJlc3B1ZXN0YXNBdW1lbnRhZGFzLCBcclxuICAgICAgICAvLyBAdHMtaWdub3JlIFPDqSBxdWUgbGEgcGlsYSB0aWVuZSBhbCBtZW5vcyB1biBlbGVtZW50byBwb3IgbG8gdGFudG8gZXN0byBlc3TDoSBsbGVubyBzZWd1cm8uIFxyXG4gICAgICAgIHJlc3B1ZXN0YXNSYWl6LCBmb3JQa1JhaXosIHVuaWRhZEFuYWxpc2lzOiB1YURlZlxyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gdm9sY2Fkb0luaWNpYWxFbGVtZW50b3NSZWdpc3RyYWRvcyhmb3JQa1JhaXo6Rm9yUGtSYWl6KXtcclxuICAgIHZhciB7cmVzcHVlc3Rhc0F1bWVudGFkYXN9ID0gcmVzcHVlc3Rhc0ZvclBrKGZvclBrUmFpeiwgdHJ1ZSlcclxuICAgIHZhciByZWdpc3Ryb0VsZW1lbnRvcyA9IHJlZ2lzdHJvRWxlbWVudG9zR2xvYmFsO1xyXG4gICAgdmFyIHBsYWluRm9yUGsgPSB0b1BsYWluRm9yUGsoZm9yUGtSYWl6KVxyXG4gICAgdmFyIHJvd1ZhbGlkYXRvciA9ICBkYXRvc0J5UGFzcy5mZWVkYmFja1Jvd1ZhbGlkYXRvcltwbGFpbkZvclBrXTtcclxuICAgIGZvcih2YXIgaWQgaW4gcmVnaXN0cm9FbGVtZW50b3Mpe1xyXG4gICAgICAgIHZhciBkZWYgPSByZWdpc3Ryb0VsZW1lbnRvc1tpZF07XHJcbiAgICAgICAgaWYoZGVmLmVsZW1lbnRvKXtcclxuICAgICAgICAgICAgaWYoIWRvY3VtZW50LmJvZHkuY29udGFpbnMoZGVmLmVsZW1lbnRvKSl7XHJcbiAgICAgICAgICAgICAgICBkZWYuZWxlbWVudG8gPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYoIWRlZi5lbGVtZW50byl7XHJcbiAgICAgICAgICAgIGRlZi5lbGVtZW50byA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGRlZi5pZCkgYXMgRWxlbWVudG9zUmVnaXN0cmFibGVzO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZighZGVmLmVsZW1lbnRvKXtcclxuICAgICAgICAgICAgLy8gY29uc29sZS5sb2coJ0JVU0NBTkRPIGVsIGVsZW1lbnRvIHJlZ2lzdHJhZG8gJyxpZCwnbm8gZXN0w6EgZW4gZWwgRE9NJylcclxuICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciB2YWx1ZSA9IGRlZi5mdW4ocmVzcHVlc3Rhc0F1bWVudGFkYXMsIHJvd1ZhbGlkYXRvciwgZGVmLmVsZW1lbnRvLCBkYXRvc0J5UGFzcy5mZWVkYmFja1Jvd1ZhbGlkYXRvciwgZXN0cnVjdHVyYSk7XHJcbiAgICAgICAgaWYoJ3Byb3AnIGluIGRlZil7XHJcbiAgICAgICAgICAgIHNldFZhbG9yRGlzdGludG8oZGVmLmVsZW1lbnRvLCBkZWYucHJvcCwgdmFsdWUpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmKCdhdHRyJyBpbiBkZWYpe1xyXG4gICAgICAgICAgICBzZXRBdHRyRGlzdGludG8oZGVmLmVsZW1lbnRvLCBkZWYuYXR0ciwgdmFsdWUpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmKCdzdHlsZScgaW4gZGVmKXtcclxuICAgICAgICAgICAgc2V0VmFsb3JEaXN0aW50byhkZWYuZWxlbWVudG8uc3R5bGUsIGRlZi5zdHlsZSwgdmFsdWUpXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYocm93VmFsaWRhdG9yLmFjdHVhbCl7XHJcbiAgICAgICAgdmFyIHt0b3AsIGJvdHRvbX0gPSBjYWxjdWxhckVsZW1lbnRvRW5mb2NhZG8ocm93VmFsaWRhdG9yLmFjdHVhbCk7XHJcbiAgICAgICAgaWYodG9wICE9IG51bGwgJiYgYm90dG9tICE9bnVsbCl7XHJcbiAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcclxuICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ZhYi1hY3Rpdm8tYXJyaWJhJykuZWxUb3BWaXNpYmlsaXphciA9IHRvcDtcclxuICAgICAgICAgICAgLy8gQHRzLWlnbm9yZVxyXG4gICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZmFiLWFjdGl2by1hYmFqbycpLmVsQm90dG9tVmlzaWJpbGl6YXIgPSBib3R0b207XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gY2FsY3VsYXJFbGVtZW50b0VuZm9jYWRvKGlkVmFyaWFibGU6SWRWYXJpYWJsZXxJZEZpbil7XHJcbiAgICB2YXIgZWxlbWVudG9WYXJpYWJsZUFFbmZvY2FyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWRWYXJpYWJsZT09J2Zpbic/YGJvdG9uLXZvbHZlci0yYDpgdmFyLSR7aWRWYXJpYWJsZX1gKVxyXG4gICAgICAgIHx8ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYHNlY2Npb24tYm90b24tZm9ybXVsYXJpby0ke2lkVmFyaWFibGV9YCk7XHJcbiAgICB2YXIgZWxlbWVudG8gPSBlbGVtZW50b1ZhcmlhYmxlQUVuZm9jYXI7XHJcbiAgICB2YXIgTUFSR0VOX1NDUk9MTCA9IDY0O1xyXG4gICAgdmFyIGFsdG9QYW50YWxsYSA9IHdpbmRvdy5pbm5lckhlaWdodCowLjcgLSBNQVJHRU5fU0NST0xMO1xyXG4gICAgdmFyIGVsZW1lbnRvRW50ZXJvOkhUTUxFbGVtZW50fG51bGwgPSBlbGVtZW50bzsgLy8gZXMgZWwgZWxlbWVudG8gcXVlIHZhIGEgZW50YXIgZW50ZXJvIGVuIHBhbnRhbGxhLCBkZWZpbmUgZWwgYm90dG9tXHJcbiAgICB2YXIgcmVjdEVsZW1lbnRvRW50ZXJvOlJldHVyblR5cGU8dHlwZW9mIG15T3duLmdldFJlY3Q+fG51bGwgPSBudWxsO1xyXG4gICAgdmFyIGVsZW1lbnRvU3VwZXJpb3I6SFRNTEVsZW1lbnR8bnVsbCA9IG51bGw7IC8vIGVzIGVsIGVsZW1lbnRvIHF1ZSB2YSBhIG1vc3RyYXJzZSBkZXNkZSBhcnJpYmEgYXVucXVlIG5vIGVudHJlIGVudGVybywgZGVmaW5lIGVsIHRvcFxyXG4gICAgdmFyIHJlY3RFbGVtZW50b1N1cGVyaW9yOlJldHVyblR5cGU8dHlwZW9mIG15T3duLmdldFJlY3Q+fG51bGwgPSBudWxsO1xyXG4gICAgd2hpbGUoZWxlbWVudG8gIT0gbnVsbCl7XHJcbiAgICAgICAgaWYoZWxlbWVudG8uY2xhc3NMaXN0LmNvbnRhaW5zKCd2YXJpYWJsZScpIFxyXG4gICAgICAgIHx8IGVsZW1lbnRvLmNsYXNzTGlzdC5jb250YWlucygnbXVsdGlwbGUnKSBcclxuICAgICAgICB8fCBlbGVtZW50by5jbGFzc0xpc3QuY29udGFpbnMoJ3ByZWd1bnRhJykgXHJcbiAgICAgICAgfHwgZWxlbWVudG8uY2xhc3NMaXN0LmNvbnRhaW5zKCdjb25qdW50b3ByZWd1bnRhcycpIFxyXG4gICAgICAgIHx8IGVsZW1lbnRvLmNsYXNzTGlzdC5jb250YWlucygnc2VjY2lvbi1ib3Rvbi1mb3JtdWxhcmlvJykgXHJcbiAgICAgICAgfHwgZWxlbWVudG8uY2xhc3NMaXN0LmNvbnRhaW5zKCdib3RvbmZvcm11bGFyaW8nKSBcclxuICAgICAgICApe1xyXG4gICAgICAgICAgICBpZihlbGVtZW50b1N1cGVyaW9yID09IG51bGwgJiYgZWxlbWVudG8uY2xpZW50SGVpZ2h0IDwgYWx0b1BhbnRhbGxhKXtcclxuICAgICAgICAgICAgICAgIGVsZW1lbnRvRW50ZXJvID0gZWxlbWVudG87XHJcbiAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgaWYocmVjdEVsZW1lbnRvRW50ZXJvID09IG51bGwpe1xyXG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnRvU3VwZXJpb3IgPSBlbGVtZW50b0VudGVyb1xyXG4gICAgICAgICAgICAgICAgICAgIHJlY3RFbGVtZW50b0VudGVybyA9IG15T3duLmdldFJlY3QoZWxlbWVudG9FbnRlcm8hKVxyXG4gICAgICAgICAgICAgICAgICAgIHJlY3RFbGVtZW50b1N1cGVyaW9yID0gcmVjdEVsZW1lbnRvRW50ZXJvO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdmFyIHJlY3QgPSBteU93bi5nZXRSZWN0KGVsZW1lbnRvKTtcclxuICAgICAgICAgICAgICAgIGlmKHJlY3RFbGVtZW50b0VudGVyby50b3AgKyByZWN0RWxlbWVudG9FbnRlcm8uaGVpZ2h0IC0gcmVjdC50b3AgPCBhbHRvUGFudGFsbGEpe1xyXG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnRvU3VwZXJpb3IgPSBlbGVtZW50bztcclxuICAgICAgICAgICAgICAgICAgICByZWN0RWxlbWVudG9TdXBlcmlvciA9IHJlY3Q7XHJcbiAgICAgICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgICAgICBlbGVtZW50byA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxlbWVudG8gPSBlbGVtZW50bz8ucGFyZW50RWxlbWVudCA/PyBudWxsO1xyXG4gICAgfVxyXG4gICAgaWYoZWxlbWVudG9TdXBlcmlvciA9PSBudWxsKXtcclxuICAgICAgICBlbGVtZW50b1N1cGVyaW9yID0gZWxlbWVudG9FbnRlcm87XHJcbiAgICB9XHJcbiAgICB2YXIgcmVzdWx0OntcclxuICAgICAgICBlbGVtZW50b0lucHV0VmFyaWFibGU/OkhUTUxFbGVtZW50fG51bGxcclxuICAgICAgICB0b3A/Om51bWJlcnxudWxsXHJcbiAgICAgICAgYm90dG9tPzpudW1iZXJ8bnVsbFxyXG4gICAgICAgIGVuZm9jYWRvPzpib29sZWFufG51bGxcclxuICAgICAgICBkZXNlbmZvcXVlPzpzdHJpbmd8bnVsbFxyXG4gICAgfSA9IHt9O1xyXG4gICAgaWYoZWxlbWVudG9FbnRlcm8gIT0gbnVsbCl7XHJcbiAgICAgICAgaWYocmVjdEVsZW1lbnRvRW50ZXJvID09IG51bGwpe1xyXG4gICAgICAgICAgICByZWN0RWxlbWVudG9FbnRlcm8gPSBteU93bi5nZXRSZWN0KGVsZW1lbnRvRW50ZXJvKVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXN1bHQuZWxlbWVudG9JbnB1dFZhcmlhYmxlID0gZWxlbWVudG9WYXJpYWJsZUFFbmZvY2FyO1xyXG4gICAgICAgIHZhciB0b3AgPSAocmVjdEVsZW1lbnRvU3VwZXJpb3I/P3JlY3RFbGVtZW50b0VudGVybykudG9wIC0gTUFSR0VOX1NDUk9MTDtcclxuICAgICAgICByZXN1bHQudG9wID0gdG9wO1xyXG4gICAgICAgIHJlc3VsdC5ib3R0b20gPSByZWN0RWxlbWVudG9FbnRlcm8udG9wK3JlY3RFbGVtZW50b0VudGVyby5oZWlnaHQ7XHJcbiAgICAgICAgaWYodG9wPGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxUb3Ape1xyXG4gICAgICAgICAgICByZXN1bHQuZGVzZW5mb3F1ZT0nYXJyaWJhJztcclxuICAgICAgICB9ZWxzZSBpZihyZWN0RWxlbWVudG9FbnRlcm8udG9wK3JlY3RFbGVtZW50b0VudGVyby5oZWlnaHQgPiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsVG9wICsgYWx0b1BhbnRhbGxhKXtcclxuICAgICAgICAgICAgcmVzdWx0LmRlc2VuZm9xdWU9J2FiYWpvJztcclxuICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgcmVzdWx0LmVuZm9jYWRvPXRydWVcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gc2V0QXR0ckRpc3RpbnRvPE4gZXh0ZW5kcyBzdHJpbmc+KFxyXG4gICAgb2JqZXRvOntzZXRBdHRyaWJ1dGU6KG5hbWU6TiwgdmFsb3I6c3RyaW5nKT0+dm9pZCwgZ2V0QXR0cmlidXRlOihuYW1lOk4pPT5zdHJpbmd8bnVsbH0sXHJcbiAgICBuYW1lOk4sXHJcbiAgICB2YWxvcjpzdHJpbmdcclxuKXtcclxuICAgIGlmKG9iamV0byAmJiBvYmpldG8uZ2V0QXR0cmlidXRlKG5hbWUpICE9IHZhbG9yKXtcclxuICAgICAgICBvYmpldG8uc2V0QXR0cmlidXRlKG5hbWUsIHZhbG9yKTtcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHNldFZhbG9yRGlzdGludG88VCBleHRlbmRzIHt9LCBOIGV4dGVuZHMga2V5b2YgVD4oXHJcbiAgICBvYmpldG86VCxcclxuICAgIG5hbWU6TixcclxuICAgIHZhbG9yOlRbTl1cclxuKXtcclxuICAgIGlmKG9iamV0b1tuYW1lXSAhPSB2YWxvcil7XHJcbiAgICAgICAgb2JqZXRvW25hbWVdID0gdmFsb3I7XHJcbiAgICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGNhbGN1bGFyVmFyaWFibGVzQm90b25Gb3JtdWxhcmlvKF9mb3JQazpGb3JQayl7XHJcbiAgICBcclxufTtcclxuXHJcblxyXG5leHBvcnQgZnVuY3Rpb24gYWNjaW9uX2lkX3ByZWd1bnRhKF9wYXlsb2FkOntwcmVndW50YTogSWRQcmVndW50YSwgZm9yUGs6IEZvclBrfSwgX2RhdG9zQnlQYXNzOkRhdG9zQnlQYXNzKXtcclxufVxyXG5cclxuZXhwb3J0IGNvbnN0IE5PX0NBTUJJQVJfX1NPTE9fVFJBRVJfU1RBVFVTID0gU3ltYm9sKCdOT19DQU1CSUFSX1NPTE9fVFJBRVJfU1RBVFVTJylcclxuZXhwb3J0IGNvbnN0IE5PX0NBTUJJQVJfX1ZFUklGSUNBUl9TSV9FU19ORUNFU0FSSU8gPSBTeW1ib2woJ05PX0NBTUJJQVJfVkVSSUZJQ0FSX1NJX0VTX05FQ0VTQVJJTycpXHJcblxyXG5mdW5jdGlvbiByZWZyZXNjYXJNYXJjYURpcnR5KCl7XHJcbiAgICB2YXIgYm90b25HcmFiYXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInNhdmUtYnV0dG9uXCIpIGFzIEhUTUxCdXR0b25FbGVtZW50O1xyXG4gICAgaWYoYm90b25HcmFiYXIpe1xyXG4gICAgICAgIGlmKGJvdG9uR3JhYmFyLmRpc2FibGVkICE9PSAhZGF0b3NCeVBhc3MuZGlydHkpe1xyXG4gICAgICAgICAgICBib3RvbkdyYWJhci5kaXNhYmxlZCA9ICFkYXRvc0J5UGFzcy5kaXJ0eTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBhY2Npb25fcmVnaXN0cmFyX3Jlc3B1ZXN0YShwYXlsb2FkOntcclxuICAgIGZvclBrOkZvclBrLCBcclxuICAgIHZhcmlhYmxlOklkVmFyaWFibGV8dHlwZW9mIE5PX0NBTUJJQVJfX1NPTE9fVFJBRVJfU1RBVFVTLCBcclxuICAgIHJlc3B1ZXN0YTpWYWxvcnx0eXBlb2YgTk9fQ0FNQklBUl9fVkVSSUZJQ0FSX1NJX0VTX05FQ0VTQVJJT1xyXG59LCBfZGF0b3NCeVBhc3M6RGF0b3NCeVBhc3Mpe1xyXG4gICAgbGV0IHRva2VuID0gJ0FWRVJJR1VBUiBUT0RPJ1xyXG4gICAgbGV0IHsgZm9yUGssIHJlc3B1ZXN0YSwgdmFyaWFibGUgfSA9IHBheWxvYWQ7XHJcbiAgICB2YXIge3Jlc3B1ZXN0YXMsIHJlc3B1ZXN0YXNSYWl6LCBmb3JQa1JhaXp9ICA9IHJlc3B1ZXN0YXNGb3JQayhmb3JQayk7XHJcbiAgICB2YXIgdW5pZGFkX2FuYWxpc2lzID0gZXN0cnVjdHVyYS5mb3JtdWxhcmlvc1tmb3JQay5mb3JtdWxhcmlvXTtcclxuICAgIHZhciByZWNlbnRNb2RpZmllZCA9IGZhbHNlO1xyXG4gICAgdmFyIHZhbG9yQW50ZXJpb3IgPSB2YXJpYWJsZSAhPSBOT19DQU1CSUFSX19TT0xPX1RSQUVSX1NUQVRVUyA/IHJlc3B1ZXN0YXNbdmFyaWFibGVdIDogbnVsbDtcclxuICAgIGlmKHJlc3B1ZXN0YSAhPT0gTk9fQ0FNQklBUl9fVkVSSUZJQ0FSX1NJX0VTX05FQ0VTQVJJTyAmJiB2YXJpYWJsZSAhPSBOT19DQU1CSUFSX19TT0xPX1RSQUVSX1NUQVRVUyl7XHJcbiAgICAgICAgaWYocmVzcHVlc3RhID09PSAnJyl7XHJcbiAgICAgICAgICAgIHJlc3B1ZXN0YSA9IG51bGw7XHJcbiAgICAgICAgfWVsc2UgaWYoZXN0cnVjdHVyYS5mb3JtdWxhcmlvc1tmb3JQay5mb3JtdWxhcmlvXS5lc3RydWN0dXJhUm93VmFsaWRhdG9yLnZhcmlhYmxlc1t2YXJpYWJsZV0udGlwbz09J251bWVybycpe1xyXG4gICAgICAgICAgICBpZihyZXNwdWVzdGEgIT0gbnVsbCl7XHJcbiAgICAgICAgICAgICAgICByZXNwdWVzdGEgPSBOdW1iZXIocmVzcHVlc3RhKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBzaSBlcyB1biBmYWxzeSAoMCA9PSBmYWxzZSkgdGVuZ28gcXVlIGNvbXBhcmFyIGNvbiAhPT1cclxuICAgICAgICByZWNlbnRNb2RpZmllZCA9IHJlc3B1ZXN0YSA/IHZhbG9yQW50ZXJpb3IgIT0gcmVzcHVlc3RhIDogdmFsb3JBbnRlcmlvciAhPT0gcmVzcHVlc3RhXHJcbiAgICAgICAgaWYocmVjZW50TW9kaWZpZWQpe1xyXG4gICAgICAgICAgICByZXNwdWVzdGFzW3ZhcmlhYmxlXSA9IHJlc3B1ZXN0YSA/PyBudWxsOyAvLyBjYW1iaW8gdW5kZWZpbmVkIHBvciBudWxsXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgdmFyIGZlZWRiYWNrUm93ID0gZGF0b3NCeVBhc3MuZmVlZGJhY2tSb3dWYWxpZGF0b3JbdG9QbGFpbkZvclBrKGZvclBrKV07XHJcbiAgICB2YXIgc2lndWllbnRlVmFyaWFibGU6SWRWYXJpYWJsZXxJZEZpbnxudWxsfHVuZGVmaW5lZDtcclxuICAgIGlmKHZhcmlhYmxlICE9IE5PX0NBTUJJQVJfX1NPTE9fVFJBRVJfU1RBVFVTICYmIChyZWNlbnRNb2RpZmllZCB8fCBOT19DQU1CSUFSX19WRVJJRklDQVJfU0lfRVNfTkVDRVNBUklPICYmIGZlZWRiYWNrUm93LmF1dG9JbmdyZXNhZGFzPy5bdmFyaWFibGVdKSl7XHJcbiAgICAgICAgdmFyaWFibGVzQ2FsY3VsYWRhcyhyZXNwdWVzdGFzUmFpeiwgZm9yUGspO1xyXG4gICAgICAgIGlmKGVzdHJ1Y3R1cmEuY29uZmlnU29ydGVvICYmICFkYXRvc0J5UGFzcz8uc29sb0xlY3R1cmEpe1xyXG4gICAgICAgICAgICB2ZXJpZmljYXJTb3J0ZW8oe1xyXG4gICAgICAgICAgICAgICAgY29uZmlndXJhY2lvblNvcnRlbzogZXN0cnVjdHVyYS5jb25maWdTb3J0ZW9bZ2V0TWFpbkZvcm1Gb3JWaXZpZW5kYShmb3JQay52aXZpZW5kYSEpXSwgXHJcbiAgICAgICAgICAgICAgICByZXNwdWVzdGFzLFxyXG4gICAgICAgICAgICAgICAgcmVzcHVlc3Rhc1JhaXosXHJcbiAgICAgICAgICAgICAgICB2YXJpYWJsZUFjdHVhbDogdmFyaWFibGUsIFxyXG4gICAgICAgICAgICAgICAgZm9yUGs6IGZvclBrXHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGRhdG9zQnlQYXNzLmRpcnR5ID0gZGF0b3NCeVBhc3MuZGlydHkgfHwgcmVjZW50TW9kaWZpZWQ7XHJcbiAgICAgICAgcmVzcHVlc3Rhc1JhaXouJGRpcnR5ID0gcmVzcHVlc3Rhc1JhaXouJGRpcnR5IHx8IHJlY2VudE1vZGlmaWVkO1xyXG4gICAgICAgIHJlZnJlc2Nhck1hcmNhRGlydHkoKTtcclxuICAgICAgICBjYWxjdWxhckZlZWRiYWNrKHJlc3B1ZXN0YXNSYWl6LCBmb3JQa1JhaXosIHthdXRvSW5ncmVzbzogdHJ1ZX0pO1xyXG4gICAgICAgIGZlZWRiYWNrUm93ID0gZGF0b3NCeVBhc3MuZmVlZGJhY2tSb3dWYWxpZGF0b3JbdG9QbGFpbkZvclBrKGZvclBrKV07XHJcbiAgICAgICAgY2FsY3VsYXJWYXJpYWJsZXNCb3RvbkZvcm11bGFyaW8oZm9yUGspO1xyXG4gICAgICAgIHZvbGNhZG9JbmljaWFsRWxlbWVudG9zUmVnaXN0cmFkb3MoZm9yUGspO1xyXG4gICAgICAgIHBlcnNpc3RpckRhdG9zQnlQYXNzKGRhdG9zQnlQYXNzKTsgLy8gT0pPIEFTWU5DIERFU0NPTlRST0xBREFcclxuICAgICAgICBzaWd1aWVudGVWYXJpYWJsZSA9IHZhcmlhYmxlO1xyXG4gICAgICAgIGRve1xyXG4gICAgICAgICAgICBzaWd1aWVudGVWYXJpYWJsZSA9IGZlZWRiYWNrUm93LmZlZWRiYWNrW3NpZ3VpZW50ZVZhcmlhYmxlXS5zaWd1aWVudGU7XHJcbiAgICAgICAgfXdoaWxlKHZhbG9yQW50ZXJpb3IgPT0gbnVsbCAmJiByZWNlbnRNb2RpZmllZCAmJiBzaWd1aWVudGVWYXJpYWJsZSAhPSBudWxsICYmIHNpZ3VpZW50ZVZhcmlhYmxlICE9ICdmaW4nICYmIGVzdHJ1Y3R1cmEuZm9ybXVsYXJpb3NbZm9yUGsuZm9ybXVsYXJpb10uZXN0cnVjdHVyYVJvd1ZhbGlkYXRvci52YXJpYWJsZXNbc2lndWllbnRlVmFyaWFibGVdLmZ1bmNpb25BdXRvSW5ncmVzYXIpXHJcbiAgICAgICAgaWYoc2lndWllbnRlVmFyaWFibGUgPT0gbnVsbCAmJiBmZWVkYmFja1Jvdy5mZWVkYmFja1t2YXJpYWJsZV0uZXN0YWRvID09ICd2YWxpZGEnKXtcclxuICAgICAgICAgICAgc2lndWllbnRlVmFyaWFibGUgPSAnZmluJztcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4ge3JlY2VudE1vZGlmaWVkLCBzaWd1aWVudGVWYXJpYWJsZSwgdmFyaWFibGVBY3R1YWw6IGZlZWRiYWNrUm93LmFjdHVhbH07XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBhY2Npb25fcmVnaXN0cmFyX25vdGEocGF5bG9hZDp7Zm9yUGtSYWl6OkZvclBrUmFpeiwgdGFyZWE6SWRUYXJlYSwgbm90YTpzdHJpbmd8bnVsbH0sIF9kYXRvc0J5UGFzczpEYXRvc0J5UGFzcyl7XHJcbiAgICBsZXQgeyBmb3JQa1JhaXosIHRhcmVhLCBub3RhIH0gPSBwYXlsb2FkO1xyXG4gICAgY29uc29sZS5sb2coXCJGQUxUQSAvLyBUT0RPXCIpXHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBhY2Npb25fYWdyZWdhcl92aXNpdGEocGF5bG9hZDp7Zm9yUGtSYWl6OkZvclBrUmFpeiwgb2JzZXJ2YWNpb25lczpzdHJpbmd8bnVsbH0sIF9kYXRvc0J5UGFzczpEYXRvc0J5UGFzcyl7XHJcbiAgICBsZXQgeyBmb3JQa1JhaXosIG9ic2VydmFjaW9uZXMgfSA9IHBheWxvYWQ7XHJcbiAgICAvKlxyXG4gICAgaWYoIWRhdG9zQnlQYXNzLmhvamFEZVJ1dGFbdml2aWVuZGFdLnZpc2l0YXMpe1xyXG4gICAgICAgIGRhdG9zQnlQYXNzLmhvamFEZVJ1dGFbdml2aWVuZGFdLnZpc2l0YXMgPSBbXTtcclxuICAgIH1cclxuICAgIHZhciB2aXNpdGFzID0gZGF0b3NCeVBhc3MuaG9qYURlUnV0YVt2aXZpZW5kYV0udmlzaXRhcztcclxuICAgIHZpc2l0YXMucHVzaCh7XHJcbiAgICAgICAgZmVjaGE6IGRhdGV0aW1lLm5vdygpLnRvWW1kKCksXHJcbiAgICAgICAgaG9yYTogZGF0ZXRpbWUubm93KCkudG9IbSgpLFxyXG4gICAgICAgIGlkcGVyOiBudWxsLCAvLyBUT0RPOiBWRVIgREUgRE9OREUgU0UgU0FDQSBFTCBJRFBFUiBzdGF0ZS5kYXRvcy5pZHBlcixcclxuICAgICAgICBvYnNlcnZhY2lvbmVzOm9ic2VydmFjaW9uZXNcclxuICAgIH0pXHJcbiAgICAqL1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gYWNjaW9uX21vZGlmaWNhcl92aXNpdGEocGF5bG9hZDoge2ZvclBrUmFpejpGb3JQa1JhaXosIGluZGV4Om51bWJlciwgb3BjaW9uOmtleW9mIFZpc2l0YSAsIHZhbG9yOnN0cmluZ3xudWxsfSwgX2RhdG9zQnlQYXNzOkRhdG9zQnlQYXNzKXtcclxuICAgIGxldCB7IGZvclBrUmFpeiwgaW5kZXgsIG9wY2lvbiwgdmFsb3J9ID0gcGF5bG9hZDtcclxuICAgIC8vIHZhciB2aXNpdGFzID0gZGF0b3NCeVBhc3MuaG9qYURlUnV0YVt2aXZpZW5kYV0udmlzaXRhcztcclxuICAgIC8vIHZpc2l0YXNbaW5kZXhdW29wY2lvbl0gPSB2YWxvcjtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGFjY2lvbl9ib3JyYXJfdmlzaXRhKHBheWxvYWQ6IHtmb3JQa1JhaXo6Rm9yUGtSYWl6LCBpbmRleDpudW1iZXJ9LCBfZGF0b3NCeVBhc3M6RGF0b3NCeVBhc3Mpe1xyXG4gICAgbGV0IHsgZm9yUGtSYWl6LCBpbmRleH0gPSBwYXlsb2FkO1xyXG4gICAgLy8gdmFyIHZpc2l0YXMgPSBkYXRvc0J5UGFzcy5ob2phRGVSdXRhW3ZpdmllbmRhXS52aXNpdGFzO1xyXG4gICAgLy8gdmlzaXRhcy5zcGxpY2UoaW5kZXgsIDEpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gYWNjaW9uX2FncmVnYXJfZm9ybXVsYXJpbyh7Zm9yUGt9OiB7Zm9yUGs6Rm9yUGt9LCBfZGF0b3NCeVBhc3M6RGF0b3NCeVBhc3Mpe1xyXG4gICAgdmFyIHtyZXNwdWVzdGFzLCB1bmlkYWRBbmFsaXNpcywgcmVzcHVlc3Rhc0F1bWVudGFkYXMsIHJlc3B1ZXN0YXNSYWl6fSA9IHJlc3B1ZXN0YXNGb3JQayhmb3JQaywgdHJ1ZSwgdHJ1ZSk7XHJcbiAgICB2YXJpYWJsZXNDYWxjdWxhZGFzKHJlc3B1ZXN0YXNSYWl6LCBmb3JQayk7XHJcbiAgICBjYWxjdWxhckZlZWRiYWNrVW5pZGFkQW5hbGlzaXMoZGF0b3NCeVBhc3MuZmVlZGJhY2tSb3dWYWxpZGF0b3IsIGVzdHJ1Y3R1cmEuZm9ybXVsYXJpb3MsIHJlc3B1ZXN0YXMsIHVuaWRhZEFuYWxpc2lzLnVuaWRhZF9hbmFsaXNpcywgZm9yUGssIHJlc3B1ZXN0YXNBdW1lbnRhZGFzLCBudWxsLCB7fSlcclxuICAgIGNhbGN1bGFyVmFyaWFibGVzQm90b25Gb3JtdWxhcmlvKGZvclBrKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGFjY2lvbl9hYnJpcl9mb3JtdWxhcmlvKHtmb3JQa306IHtmb3JQazpGb3JQa30sIF9kYXRvc0J5UGFzczpEYXRvc0J5UGFzcyl7XHJcbiAgICB2YXIge3Jlc3B1ZXN0YXMsIHVuaWRhZEFuYWxpc2lzLCByZXNwdWVzdGFzQXVtZW50YWRhcywgcmVzcHVlc3Rhc1JhaXp9ID0gcmVzcHVlc3Rhc0ZvclBrKGZvclBrLCB0cnVlLCB0cnVlKTtcclxuICAgIHZhcmlhYmxlc0NhbGN1bGFkYXMocmVzcHVlc3Rhc1JhaXosIGZvclBrKTtcclxuICAgIGNhbGN1bGFyRmVlZGJhY2tVbmlkYWRBbmFsaXNpcyhkYXRvc0J5UGFzcy5mZWVkYmFja1Jvd1ZhbGlkYXRvciwgZXN0cnVjdHVyYS5mb3JtdWxhcmlvcywgcmVzcHVlc3RhcywgdW5pZGFkQW5hbGlzaXMudW5pZGFkX2FuYWxpc2lzLCBmb3JQaywgcmVzcHVlc3Rhc0F1bWVudGFkYXMsIG51bGwsIHt9KVxyXG4gICAgY2FsY3VsYXJWYXJpYWJsZXNCb3RvbkZvcm11bGFyaW8oZm9yUGspO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gYWNjaW9uX2JvcnJhcl9mb3JtdWxhcmlvKHtmb3JQaywgZm9yUGtQYWRyZX06IHtmb3JQazpGb3JQaywgZm9yUGtQYWRyZTpGb3JQa30pe1xyXG4gICAgdmFyIHtyZXNwdWVzdGFzLCB1bmlkYWRBbmFsaXNpcywgcmVzcHVlc3Rhc0F1bWVudGFkYXMsIHJlc3B1ZXN0YXNSYWl6LCBmb3JQa1JhaXp9ID0gcmVzcHVlc3Rhc0ZvclBrKGZvclBrLCB0cnVlLCB0cnVlKTtcclxuICAgIHZhciB1bmlkYWRfYW5hbGlzaXM6SWRVbmlkYWRBbmFsaXNpc3x1bmRlZmluZWQgPSBlc3RydWN0dXJhLmZvcm11bGFyaW9zW2ZvclBrLmZvcm11bGFyaW9dLmNhc2lsbGVyb3MudW5pZGFkX2FuYWxpc2lzXHJcbiAgICB2YXIgdWFEZWY6VW5pZGFkQW5hbGlzaXMgPSBlc3RydWN0dXJhLnVuaWRhZGVzX2FuYWxpc2lzW3VuaWRhZF9hbmFsaXNpc107XHJcbiAgICB2YXIgaW5kZXggPSBmb3JQa1t1YURlZi5wa19hZ3JlZ2FkYV07XHJcbiAgICByZXNwdWVzdGFzQXVtZW50YWRhc1t1bmlkYWRfYW5hbGlzaXNdLnBvcCgpO1xyXG4gICAgdmFyaWFibGVzQ2FsY3VsYWRhcyhyZXNwdWVzdGFzUmFpeiwgZm9yUGtQYWRyZSk7XHJcbiAgICBkYXRvc0J5UGFzcy5kaXJ0eSA9IGRhdG9zQnlQYXNzLmRpcnR5IHx8IHRydWU7XHJcbiAgICByZXNwdWVzdGFzUmFpei4kZGlydHkgPSByZXNwdWVzdGFzUmFpei4kZGlydHkgfHwgdHJ1ZTtcclxuICAgIHJlZnJlc2Nhck1hcmNhRGlydHkoKTtcclxuICAgIGNhbGN1bGFyRmVlZGJhY2socmVzcHVlc3Rhc1JhaXosIGZvclBrUmFpeiwge2F1dG9JbmdyZXNvOiB0cnVlfSk7XHJcbiAgICBjYWxjdWxhclZhcmlhYmxlc0JvdG9uRm9ybXVsYXJpbyhmb3JQa1BhZHJlKTtcclxuICAgIHZvbGNhZG9JbmljaWFsRWxlbWVudG9zUmVnaXN0cmFkb3MoZm9yUGtQYWRyZSk7XHJcbiAgICBwZXJzaXN0aXJEYXRvc0J5UGFzcyhkYXRvc0J5UGFzcyk7IC8vIE9KTyBBU1lOQyBERVNDT05UUk9MQURBXHJcbn1cclxuXHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZGlzcGF0Y2hCeVBhc3M8VCwgUj4oXHJcbiAgICBmdW46KHBheWxvYWQ6VCwgZGF0b3M6dHlwZW9mIGRhdG9zQnlQYXNzKT0+UixcclxuICAgIHBheWxvYWQ6VFxyXG4pe1xyXG4gICAgcmV0dXJuIGZ1bihwYXlsb2FkLCBkYXRvc0J5UGFzcyk7XHJcbn1cclxuXHJcbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXHJcblxyXG5cclxuZXhwb3J0IGNvbnN0IHVsdGltYVZhcmlibGVWaXZpZW5kYSA9ICdOT19FU1RBX0RFRklOSURBX0FVTi8vVE9ETycgYXMgSWRWYXJpYWJsZTtcclxuXHJcbmV4cG9ydCBjb25zdCBNQVhDUD0yMDtcclxuXHJcbi8qIFJFRFVDRVJTICovXHJcblxyXG52YXIgcmVlbXBsYXpvc0hhYmlsaXRhcjp7W2tleTpzdHJpbmddOnN0cmluZ309e1xyXG4gICAgZmFsc2U6ICdmYWxzZScsXHJcbiAgICB0cnVlOiAndHJ1ZScsXHJcbiAgICBcIj1cIjogJz09JyxcclxuICAgIFwiPD5cIjogJyE9JyxcclxuICAgIFwiJlwiOiAnJiYnLFxyXG4gICAgXCJ8XCI6ICd8fCcsXHJcbiAgICBcIk9SXCI6ICd8fCcsXHJcbiAgICBcIkFORFwiOiAnJiYnLFxyXG4gICAgXCJvclwiOiAnfHwnLFxyXG4gICAgXCJhbmRcIjogJyYmJyxcclxuICAgIFwibm90XCI6ICchJyxcclxuICAgIFwiTk9UXCI6ICchJyxcclxufTtcclxuXHJcbmV4cG9ydCBjb25zdCBoZWxwZXJzQ2FzaWxsZXJvcz17XHJcbiAgICBudWxsMnplcm8ocG9zaWJsZU51bGw6YW55KXtcclxuICAgICAgICBpZihwb3NpYmxlTnVsbD09bnVsbCl7XHJcbiAgICAgICAgICAgIHJldHVybiAwO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcG9zaWJsZU51bGw7XHJcbiAgICB9LFxyXG4gICAgZGl2MGVycihudW1lcmFkb3I6bnVtYmVyLCBkZW5vbWluYWRvcjpudW1iZXIsIHBrOnN0cmluZyl7XHJcbiAgICAgICAgaWYoZGVub21pbmFkb3I9PTApe1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJFcnJvciBlbiBcIitwaytcIiBkaXZpc2lvbiBwb3IgY2VybyBkZSBcIitudW1lcmFkb3IpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbnVtZXJhZG9yL2Rlbm9taW5hZG9yO1xyXG4gICAgfSxcclxuICAgIGZ1bnM6e1xyXG4gICAgICAgIGJsYW5jbyh4OmFueSl7XHJcbiAgICAgICAgICAgIHJldHVybiB4IT09MCAmJiAheFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgaG95KCl7XHJcbiAgICAgICAgICAgIHJldHVybiBkYXRlLnRvZGF5KCkudG9EbXkoKVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZmVjaGFfdmFsaWRhKHg6c3RyaW5nKXtcclxuICAgICAgICAgICAgdmFyIGZvcm1hdG9fdmFsaWRvPS9eKFsxLTldfDBbMS05XXxbMTJdXFxkfDNbMDFdKVxcLyhbMS05XXwwWzEtOV18MVswMTJdKVxcLzIwXFxkXFxkJC8udGVzdCh4KVxyXG4gICAgICAgICAgICB2YXIgeERhdGU6IERhdGU7XHJcbiAgICAgICAgICAgIHZhciBjb252ZXJzaW9uT2s6IGJvb2xlYW47XHJcbiAgICAgICAgICAgIGNvbnZlcnNpb25PayA9IHRydWU7XHJcbiAgICAgICAgICAgIGlmIChmb3JtYXRvX3ZhbGlkbyl7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBbZCwgbSwgeV0gPSB4LnNwbGl0KCcvJyk7XHJcbiAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgIHhEYXRlID0gbmV3IERhdGUoYCR7eX0vJHttfS8ke2R9YCk7XHJcbiAgICAgICAgICAgICAgICB9IGNhdGNoKGVycil7XHJcbiAgICAgICAgICAgICAgICAgICAgY29udmVyc2lvbk9rID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIC8vZmFsdGFyaWEgdmFsaWRhciBxdWUgbm8gc2VhIHVuYSBmZWNoYSBmdXR1cmEgeSBxdWUgc2VhIHVuYSBmZWNoYSBlbiBlbCByYW5nbyBkZWwgb3BlcmF0aXZvXHJcbiAgICAgICAgICAgIHJldHVybiBmb3JtYXRvX3ZhbGlkbyAmJiBjb252ZXJzaW9uT2tcclxuICAgICAgICB9LFxyXG4gICAgICAgIG1lc2FuaW9fdmFsaWRvKHg6c3RyaW5nKXtcclxuICAgICAgICAgICAgdmFyIGZvcm1hdG9fdmFsaWRvPS9eKFsxLTldfDBbMS05XXwxWzAxMl0pXFwvKDE5fDIwKVxcZFxcZCQvLnRlc3QoeClcclxuICAgICAgICAgICAgcmV0dXJuIGZvcm1hdG9fdmFsaWRvIFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgaW5mb3JtYWRvKHg6YW55KXtcclxuICAgICAgICAgICAgcmV0dXJuIHghPT11bmRlZmluZWQgJiYgeCE9PW51bGwgJiYgKCEoeCBpbnN0YW5jZW9mIEFycmF5KXx8IHgubGVuZ3RoIT09MCApXHJcbiAgICAgICAgICAgICYmICghKHggaW5zdGFuY2VvZiBPYmplY3QpfHwgT2JqZWN0LmtleXMoeCkubGVuZ3RoICE9PSAwIClcclxuICAgICAgICB9LFxyXG4gICAgICAgIG5zbmMoeDphbnkpe1xyXG4gICAgICAgICAgICByZXR1cm4geCA9PSAtOVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgcGFyKHg6bnVtYmVyKXtcclxuICAgICAgICAgICAgcmV0dXJuIHggJSAyPT0wXHJcbiAgICAgICAgfSxcclxuICAgICAgICBlZGFkX21lc19hbm5pb192YWxpZG8oZWRhZDpudW1iZXIsbWVzQW5uaW86c3RyaW5nKXtcclxuICAgICAgICAgICAgLy9lZGFkIHkgbWVzQW5uaW8geWEgc29uIHbDoWxpZG9zXHJcbiAgICAgICAgICAgIHZhciB0b2RheSA9IGRhdGUudG9kYXkoKTtcclxuICAgICAgICAgICAgdmFyIHBhcnRlcyA9ICBtZXNBbm5pby5zcGxpdCgnLycpO1xyXG4gICAgICAgICAgICAvL0B0cy1pZ25vcmUgbGFzIHBhcnRlcyBjb3JyZXNwb25kZW4gYSB1bmEgZmVjaGEgdsOhbGlkYVxyXG4gICAgICAgICAgICB2YXIgbmFjaW1pZW50byA9IGRhdGUueW1kKE51bWJlcihwYXJ0ZXNbMV0pLCBOdW1iZXIocGFydGVzWzBdKSwxKVxyXG4gICAgICAgICAgICAvL0B0cy1pZ25vcmUgUmVhbERhdGUgZXMgRGF0ZSB5IHNlIHB1ZWRlIHJlc3RhclxyXG4gICAgICAgICAgICB2YXIgZGlmZiA9ICh0b2RheSAtIG5hY2ltaWVudG8pLzEwMDAvNjAvNjAvMjQvMzY1OyAvL2HDsW9zXHJcbiAgICAgICAgICAgIHZhciBlZGFkRW50ZXJhID0gTWF0aC5mbG9vcihkaWZmKTtcclxuICAgICAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgICAgIGVkYWRFbnRlcmEgPT0gZWRhZCB8fCBcclxuICAgICAgICAgICAgICAgIGVkYWRFbnRlcmEgPiBlZGFkICYmIChkaWZmIC0gZWRhZEVudGVyYSkgPCAxLzEyIC8vbWVzIGRlIHRvbGVyYW5jaWFcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgLy9jb3BpYXJfY2FtcG9fdWFfcmFtYShyZXNwdWVzdGFzT3JpZ2VuOlJlc3B1ZXN0YXNbXSwgcG9zaWNpb246bnVtYmVyLCB2YXJpYWJsZU9yaWdlbjogSWRWYXJpYWJsZSwgY2FtaW5vOnN0cmluZywgY29uZGljaW9uOmJvb2xlYW4pe1xyXG4gICAgICAgIC8vICAgIHJldHVybiBjb25kaWNpb24/KHJlc3B1ZXN0YXNPcmlnZW4gJiYgcmVzcHVlc3Rhc09yaWdlbltwb3NpY2lvbi0xXSAmJiByZXNwdWVzdGFzT3JpZ2VuW3Bvc2ljaW9uLTFdW2Ake2NhbWlub31gXVt2YXJpYWJsZU9yaWdlbl0pOm51bGxcclxuICAgICAgICAvLyAgICByZXR1cm4gY29uZGljaW9uP2V2YWwoYHJlc3B1ZXN0YXNPcmlnZW5bJHtwb3NpY2lvbi0xfV0uYCtjYW1pbm8rJy4nK3ZhcmlhYmxlT3JpZ2VuKTpudWxsO1xyXG4gICAgICAgIC8vfVxyXG4gICAgICAgIC8qXHJcbiAgICAgICAgZGJvOntcclxuICAgICAgICAgICAgZGF0b0ZhbWlsaWFyKGVuY3U6c3RyaW5nLGhvZzpudW1iZXIscGVyOm51bWJlciwgZGF0bzpzdHJpbmcpe1xyXG4gICAgICAgICAgICAgICAgdmFyIHhwZXJzb25hcz1wZXJzb25hcztcclxuICAgICAgICAgICAgICAgIHJldHVybiBlbmN1PT1lbmMgJiYgaG9nPT1ob2dhciAmJiBpbmZvcm1hZG8oeHBlcnNvbmFzKSAmJiBwZXI8PSB4cGVyc29uYXMubGVuZ3RoICYmIHBlcj49MSAmJiAhIXhwZXJzb25hc1twZXItMV1bZGF0b10/IHhwZXJzb25hc1twZXItMV1bZGF0b106bnVsbFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBlZGFkZmFtaWxpYXIoZW5jdTpzdHJpbmcsaG9nOm51bWJlcixwZXI6bnVtYmVyKXtcclxuICAgICAgICAgICAgICAgIHZhciB4cGVyc29uYXM9cGVyc29uYXM7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZGF0b0ZhbWlsaWFyKGVuY3U6c3RyaW5nLGhvZzpudW1iZXIscGVyOm51bWJlciwnZWRhZCcpXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGV4aXN0ZWluZGl2aWR1YWwoZW5jdTpzdHJpbmcsaG9nOm51bWJlcixwZXI6bnVtYmVyKXtcclxuICAgICAgICAgICAgICAgIHZhciB4cGVyc29uYXM9cGVyc29uYXM7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZW5jdT09ZW5jICYmIGhvZz09aG9nYXIgJiYgISFwZXJzb25hcyAmJiBwZXI8PSBwZXJzb25hcy5sZW5ndGggJiYgcGVyPj0xICYmICEhcGVyc29uYXNbcGVyLTFdWydlbnRyZWFpbmQnXVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBleGlzdGVtaWVtYnJvKGVuY3U6c3RyaW5nLGhvZzpudW1iZXIscGVyOm51bWJlcil7XHJcbiAgICAgICAgICAgICAgICB2YXIgeHBlcnNvbmFzPXBlcnNvbmFzO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGVuY3U9PWVuYyAmJiBob2c9PWhvZ2FyICYmICEhcGVyc29uYXMgJiYgcGVyPD0gcGVyc29uYXMubGVuZ3RoICYmIHBlcj49MVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBucm9jb255dWdlcyhlbmN1OnN0cmluZyxob2c6bnVtYmVyKXtcclxuICAgICAgICAgICAgICAgIHZhciB4cGVyc29uYXM9cGVyc29uYXNcclxuICAgICAgICAgICAgICAgIHJldHVybiB4cGVyc29uYXMuZmlsdGVyKCBwZXItPnBlci5wND09MikubGVuZ3RoXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIG5yb2plZmVzKGVuY3U6c3RyaW5nLGhvZzpudW1iZXIscGVyOm51bWJlcil7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcGVyc29uYXMuZmlsdGVyKCBwZXItPnBlci5wND09MSkubGVuZ3RoXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHBhcmVudGVzY29mYW1pbGlhcihlbmN1OnN0cmluZyxob2c6bnVtYmVyLHBlcjpudW1iZXIpe1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGRhdG9GYW1pbGlhcihlbmN1OnN0cmluZyxob2c6bnVtYmVyLHBlcjpudW1iZXIsJ3A0JylcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgc2V4b2ZhbWlsaWFyKGVuY3U6c3RyaW5nLGhvZzpudW1iZXIscGVyOm51bWJlcil7XHJcbiAgICAgICAgICAgICAgICB2YXIgeHBlcnNvbmFzPXBlcnNvbmFzO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGVuY3U9PWVuYyAmJiBob2c9PWhvZ2FyICYmICEheHBlcnNvbmFzICYmIHBlcjw9IHhwZXJzb25hcy5sZW5ndGggJiYgcGVyPj0xICYmICEheHBlcnNvbmFzW3Blci0xXS5zZXhvPyB4cGVyc29uYXNbcGVyLTFdWydzZXhvJ106bnVsbFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBzaXRjb255amVmZShlbmN1OnN0cmluZyxob2c6bnVtYmVyKXtcclxuICAgICAgICAgICAgICAgIHJldHVybiBkYXRvRmFtaWxpYXIoZW5jdTpzdHJpbmcsaG9nOm51bWJlciwxLCdwNScpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9ICovICAgICAgIFxyXG4gICAgfVxyXG59O1xyXG5cclxudHlwZSBGdW5jaW9uSGFiaWxpdGFyID0gKHZhbG9yZXM6e1trZXk6c3RyaW5nXTphbnl9KT0+Ym9vbGVhbjtcclxudHlwZSBGdW5jaW9uVmFsb3JhciA9ICh2YWxvcmVzOntba2V5OnN0cmluZ106YW55fSk9PmFueTtcclxudmFyIGZ1bmNpb25lc0hhYmlsaXRhcjp7W2tleTpzdHJpbmddOkZ1bmNpb25IYWJpbGl0YXJ9PXtcclxufVxyXG52YXIgZnVuY2lvbmVzVmFsb3Jhcjp7W2tleTpzdHJpbmddOkZ1bmNpb25WYWxvcmFyfT17XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBtaW5pQ29tcGlsYWRvclNRbEpzKGV4cHJlc2lvbkNhc2lTUUw6c3RyaW5nKXtcclxuICAgIHZhciBleHByZXNpb24gPSBleHByZXNpb25DYXNpU1FMLnJlcGxhY2UoL1xcdTAwQTAvZywnICcpO1xyXG4gICAgdmFyIGN1ZXJwbyA9IGV4cHJlc2lvbi5yZXBsYWNlKC9cXGJpcyBkaXN0aW5jdCBmcm9tXFxiL2dpLCchPScpLnJlcGxhY2UoL1xcYi4rP1xcYi9nLCBmdW5jdGlvbihlbFRva2VuKXtcclxuICAgICAgICB2YXIgZWxUb2tlblRyaW1lYWRvPWVsVG9rZW4udHJpbSgpO1xyXG4gICAgICAgIGlmKGVsVG9rZW5UcmltZWFkbyBpbiByZWVtcGxhem9zSGFiaWxpdGFyKXtcclxuICAgICAgICAgICAgcmV0dXJuIHJlZW1wbGF6b3NIYWJpbGl0YXJbZWxUb2tlblRyaW1lYWRvXTtcclxuICAgICAgICB9ZWxzZSBpZigvXlxcZCtcXC4/XFxkKiQvLnRlc3QoZWxUb2tlblRyaW1lYWRvKSl7XHJcbiAgICAgICAgICAgIHJldHVybiBlbFRva2VuXHJcbiAgICAgICAgfWVsc2UgaWYoL15cXFcrJC8udGVzdChlbFRva2VuVHJpbWVhZG8pKXtcclxuICAgICAgICAgICAgcmV0dXJuIGVsVG9rZW5cclxuICAgICAgICB9ZWxzZSBpZigvXlxccyskLy50ZXN0KGVsVG9rZW4pKXtcclxuICAgICAgICAgICAgcmV0dXJuIGVsVG9rZW5cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuICdoZWxwZXJzLm51bGwyemVybyh2YWxvcmVzLicrZWxUb2tlbisnKSc7XHJcbiAgICB9KTtcclxuICAgIHJldHVybiBjdWVycG87XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRGdW5jaW9uQ29tcGlsYWRhPFQ+KGNvbmp1bnRvRGVGdW5jaW9uZXM6e1trZXk6c3RyaW5nXToodmFsb3Jlczp7W2tleTpzdHJpbmddOmFueX0pPT5UfSl7XHJcbiAgICByZXR1cm4gZnVuY3Rpb24obm9tYnJlRnVuY2lvbkNvbW9FeHByZXNpb25KczpzdHJpbmcpe1xyXG4gICAgICAgIGlmKCFjb25qdW50b0RlRnVuY2lvbmVzW25vbWJyZUZ1bmNpb25Db21vRXhwcmVzaW9uSnNdKXtcclxuICAgICAgICAgICAgdmFyIGN1ZXJwbyA9IG5vbWJyZUZ1bmNpb25Db21vRXhwcmVzaW9uSnM7XHJcbiAgICAgICAgICAgIHRyeXtcclxuICAgICAgICAgICAgICAgIC8vIHZhciBjdWVycG8gPSBtaW5pQ29tcGlsYWRvclNRbEpzKG5vbWJyZUZ1bmNpb25Db21vRXhwcmVzaW9uSnMpO1xyXG4gICAgICAgICAgICAgICAgdmFyIGludGVybmFsRnVuID0gIG5ldyBGdW5jdGlvbigndmFsb3JlcycsICdoZWxwZXJzJywgJ3JldHVybiAnK2N1ZXJwbyk7XHJcbiAgICAgICAgICAgICAgICBjb25qdW50b0RlRnVuY2lvbmVzW25vbWJyZUZ1bmNpb25Db21vRXhwcmVzaW9uSnNdID0gZnVuY3Rpb24odmFsb3Jlcyl7XHJcbiAgICAgICAgICAgICAgICAgICAgdHJ5e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVzdWx0ID0gaW50ZXJuYWxGdW4odmFsb3JlcywgaGVscGVyc0Nhc2lsbGVyb3MpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1jYXRjaChlcnIpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnRVJST1IgRUpFQ1VDQ0lPTiBFWFBSRVNJT04gRVhURVJOQSAnLG5vbWJyZUZ1bmNpb25Db21vRXhwcmVzaW9uSnMpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGN1ZXJwbyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKHZhbG9yZXMpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBlcnI7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1jYXRjaChlcnIpe1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ0VSUk9SIENPTVBJTEFDSU9OIEVYUFJFU0lPTiBFWFRFUk5BICcsbm9tYnJlRnVuY2lvbkNvbW9FeHByZXNpb25KcylcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGN1ZXJwbyk7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBlcnI7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGNvbmp1bnRvRGVGdW5jaW9uZXNbbm9tYnJlRnVuY2lvbkNvbW9FeHByZXNpb25Kc107XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBjb25zdCBnZXRGdW5jaW9uSGFiaWxpdGFyID0gZ2V0RnVuY2lvbkNvbXBpbGFkYShmdW5jaW9uZXNIYWJpbGl0YXIpO1xyXG5leHBvcnQgY29uc3QgZ2V0RnVuY2lvblZhbG9yYXIgICA9IGdldEZ1bmNpb25Db21waWxhZGEoZnVuY2lvbmVzVmFsb3Jhcik7XHJcblxyXG5cclxudmFyIHJvd1ZhbGlkYXRvciA9IGdldFJvd1ZhbGlkYXRvcjxJZFZhcmlhYmxlLCBWYWxvciwgSWRGaW4+KHtnZXRGdW5jaW9uSGFiaWxpdGFyLCBnZXRGdW5jaW9uVmFsb3Jhcn0pXHJcbmV4cG9ydCB2YXIgYnVzY2FyTm9SZWFFblJlc3B1ZXN0YXMgPSAodW5pZGFkZXNBUmVjb3JyZXJQcm06SWRVbmlkYWRBbmFsaXNpc1tdLHVuaWRhZEFuYWxpc2lzOlVuaWRhZEFuYWxpc2lzLCByZXNwdWVzdGFzOlJlc3B1ZXN0YXMsbm9SZWFzVGFyZWE6e31bXSxub21iTm9SZWE6c3RyaW5nKVxyXG46e25yb2NvZGlnbzpzdHJpbmd8bnVsbCwgZXNWYWxvcjpib29sZWFufT0+e1xyXG4gICAgdmFyIG5yY29kaWdvOnN0cmluZ3xudWxsPSBudWxsO1xyXG4gICAgdmFyIGVzdmFsb3I9ZmFsc2U7XHJcbiAgICB2YXIgcnZhbG9yOnN0cmluZ3xudWxsPW51bGw7XHJcbiAgICB2YXIgcnZhcmlhYmxlOnN0cmluZztcclxuICAgIHZhciBybm9yZWE6c3RyaW5nfG51bGw9bnVsbDtcclxuICAgLy8gdmFyIHJlc3VsdD17bnJjb2Q6U3RyaW5nLCBlc3ZhbDpCb29sZWFufTtcclxuICAgIGlmKHVuaWRhZGVzQVJlY29ycmVyUHJtLmluY2x1ZGVzKHVuaWRhZEFuYWxpc2lzLnVuaWRhZF9hbmFsaXNpcykpe1xyXG4gICAgICAgIGZvcihsZXQgbm9SZWEgb2Ygbm9SZWFzVGFyZWEpeyAvL2VzdHJ1Y3R1cmEubm9SZWFzLCBlc3RydWN0dXJhLm5vUmVhc1N1cFxyXG4gICAgICAgICAgICBpZiAobm9tYk5vUmVhPT0nbm9fcmVhJyl7XHJcbiAgICAgICAgICAgICAgICB2YXIge3ZhcmlhYmxlICwgdmFsb3IsIG5vX3JlYX0gPSBub1JlYTtcclxuICAgICAgICAgICAgICAgIHJub3JlYT1ub19yZWE7XHJcbiAgICAgICAgICAgICAgICBydmFsb3I9dmFsb3I7XHJcbiAgICAgICAgICAgICAgICBydmFyaWFibGU9dmFyaWFibGU7XHJcbiAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgdmFyIHt2YXJpYWJsZV9zdXAgLCB2YWxvcl9zdXAsIG5vX3JlYV9zdXB9ID0gbm9SZWE7XHJcbiAgICAgICAgICAgICAgICBybm9yZWE9bm9fcmVhX3N1cDtcclxuICAgICAgICAgICAgICAgIHJ2YWxvcj12YWxvcl9zdXA7XHJcbiAgICAgICAgICAgICAgICBydmFyaWFibGU9dmFyaWFibGVfc3VwO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmKHJlc3B1ZXN0YXNbcnZhcmlhYmxlIGFzIElkVmFyaWFibGVdPT1ydmFsb3Ipe1xyXG4gICAgICAgICAgICAgICAgbnJjb2RpZ28gPXJub3JlYTsgIC8vbm9fcmVhLCBub19yZWFfc3VwXHJcbiAgICAgICAgICAgICAgICBlc3ZhbG9yID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIHJldHVybiB7bnJjb2RpZ28sZXN2YWxvcn1cclxuICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICBucmNvZGlnbz1udWxsO1xyXG4gICAgICAgICAgICAgICAgZXN2YWxvcj1mYWxzZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGZvcihsZXQgdWEgb2YgKGxpa2VBcih1bmlkYWRBbmFsaXNpcz8uaGlqYXMpLmFycmF5KCkpKXtcclxuICAgICAgICBpZih1YT8udW5pZGFkX2FuYWxpc2lzICYmIHJlc3B1ZXN0YXNbdWEudW5pZGFkX2FuYWxpc2lzXSBpbnN0YW5jZW9mIEFycmF5KXtcclxuICAgICAgICAgICAgZm9yKGxldCByZXNwdWVzdGFzSGlqYXMgb2YgcmVzcHVlc3Rhc1t1YT8udW5pZGFkX2FuYWxpc2lzXSl7XHJcbiAgICAgICAgICAgICAgIGxldCByZXN1bHQ9IGJ1c2Nhck5vUmVhRW5SZXNwdWVzdGFzKHVuaWRhZGVzQVJlY29ycmVyUHJtLHVhLHJlc3B1ZXN0YXNIaWphcyxub1JlYXNUYXJlYSxub21iTm9SZWEpO1xyXG4gICAgICAgICAgICAgICAgaWYocmVzdWx0LmVzdmFsb3IgKXtcclxuICAgICAgICAgICAgICAgICAgICBucmNvZGlnbz1yZXN1bHQubnJjb2RpZ287XHJcbiAgICAgICAgICAgICAgICAgICAgZXN2YWxvcj1yZXN1bHQuZXN2YWxvcjtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4ge25yY29kaWdvLGVzdmFsb3J9XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICB9ZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbnJjb2RpZ289bnVsbDtcclxuICAgICAgICAgICAgICAgICAgICBlc3ZhbG9yPWZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgLy8gcmV0dXJuIHtucmNvZGlnbywgZXN2YWxvcn1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICByZXR1cm4ge25yY29kaWdvLCBlc3ZhbG9yfVxyXG4gfVxyXG5cclxuXHJcblxyXG5leHBvcnQgdmFyIGRlZk9wZXJhdGl2bzpEZWZPcGVyYXRpdm8gPSB7XHJcbiAgICBlc05vUmVhOihfcmVzcHVlc3RhczpSZXNwdWVzdGFzKT0+e1xyXG4gICAgICAgIC8vSU1QTEVNRU5UQVIgRU4gT1BFUkFUSVZPXHJcbiAgICAgICAgdmFyIGVzTm9SZWEgPSBmYWxzZTtcclxuICAgICAgICB2YXIgY29kTm9SZWE6c3RyaW5nfG51bGw9IG51bGw7XHJcbiAgICAgICAgcmV0dXJuIHtjb2ROb1JlYSwgZXNOb1JlYX07XHJcbiAgICAgICAgLy9FSkVNUExPIFBSRUpVXzIwMjJcclxuICAgICAgICAvL3ZhciB1bmlkYWRlc0FSZWNvcnJlciA9IFsndml2aWVuZGFzJywnaG9nYXJlcycsJ3BlcnNvbmFzJ10gYXMgSWRVbmlkYWRBbmFsaXNpc1tdO1xyXG4gICAgICAgIC8vdmFyIHVhUHJpbmNpcGFsID0gbGlrZUFyKGVzdHJ1Y3R1cmEudW5pZGFkZXNfYW5hbGlzaXMpLmZpbmQoKHVhKT0+IXVhLnBhZHJlKTtcclxuICAgICAgICAvL3ZhciBlc05vUmVhID0gZmFsc2U7XHJcbiAgICAgICAgLy92YXIgY29kTm9SZWE6c3RyaW5nfG51bGw9IG51bGw7XHJcbiAgICAgICAgLy8gIGxldCByZXNub3JlYSA9IGJ1c2Nhck5vUmVhRW5SZXNwdWVzdGFzKCB1bmlkYWRlc0FSZWNvcnJlcix1YVByaW5jaXBhbCEscmVzcHVlc3Rhcyxlc3RydWN0dXJhLm5vUmVhcywnbm9fcmVhJyk7XHJcbiAgICAgICAgLy9jb2ROb1JlYT1yZXNub3JlYS5ucmNvZGlnbztcclxuICAgICAgICAvL2VzTm9SZWE9cmVzbm9yZWEuZXN2YWxvcjtcclxuICAgICAgICAvL3JldHVybiB7Y29kTm9SZWEsIGVzTm9SZWF9O1xyXG4gICAgfSxcclxuICAgZXNOb1JlYVN1cDooX3Jlc3B1ZXN0YXM6UmVzcHVlc3Rhcyk9PntcclxuICAgICAgICAvL0lNUExFTUVOVEFSIEVOIE9QRVJBVElWT1xyXG4gICAgICAgIHZhciBlc05vUmVhU3VwID0gZmFsc2U7XHJcbiAgICAgICAgdmFyIGNvZE5vUmVhU3VwOnN0cmluZ3xudWxsPSBudWxsO1xyXG4gICAgICAgIHJldHVybiB7Y29kTm9SZWFTdXAsZXNOb1JlYVN1cH1cclxuICAgICAgICAvL0VKRU1QTE8gUFJFSlVfMjAyMlxyXG4gICAgICAgIC8vVE9ETyBHRU5FUkFMSVpBUiBidXNjYXJOb3JlYVJlc3B1ZXN0YXNcclxuICAgICAgIC8vdmFyIHVuaWRhZGVzQVJlY29ycmVyU3VwID0gWyd2aXZpZW5kYXMnLCdob2dhcmVzX3N1cCcsJ3BlcnNvbmFzX3N1cCddIGFzIElkVW5pZGFkQW5hbGlzaXNbXTtcclxuICAgICAgIC8vdmFyIHVhUHJpbmNpcGFsID0gbGlrZUFyKGVzdHJ1Y3R1cmEudW5pZGFkZXNfYW5hbGlzaXMpLmZpbmQoKHVhKT0+IXVhLnBhZHJlKTtcclxuICAgICAgIC8vdmFyIGVzTm9SZWFTdXAgPSBmYWxzZTtcclxuICAgICAgIC8vdmFyIGNvZE5vUmVhU3VwOnN0cmluZ3xudWxsPSBudWxsO1xyXG4gICAgICAgLy9sZXQgcmVzbm9yZWEgPWJ1c2Nhck5vUmVhRW5SZXNwdWVzdGFzKCB1bmlkYWRlc0FSZWNvcnJlclN1cCx1YVByaW5jaXBhbCEscmVzcHVlc3Rhcyxlc3RydWN0dXJhLm5vUmVhc1N1cCwnbm9fcmVhX3N1cCcpOy8vY29uIGxvcyBwYXJhbWV0cm9zIHF1ZSBuZWNlc2l0YXJpYW1vcyBwYXJhIGdlbmVyYWxpemFyXHJcbiAgICAgICAvLyAgY29kTm9SZWFTdXA9cmVzbm9yZWEubnJjb2RpZ287XHJcbiAgICAgICAvLyAgZXNOb1JlYVN1cD1yZXNub3JlYS5lc3ZhbG9yO1xyXG4gICAgICAgLy9yZXR1cm4ge2NvZE5vUmVhU3VwLGVzTm9SZWFTdXB9XHJcbiAgICB9LFxyXG4gICAgZXNSZWFsaXphZGE6KF9yZXNwdWVzdGFzOlJlc3B1ZXN0YXMpPT57XHJcbiAgICAgICAgLy9JTVBMRU1FTlRBUiBFTiBPUEVSQVRJVk9cclxuICAgICAgICB2YXIgZXNSZWEgPSBmYWxzZTtcclxuICAgICAgICB2YXIgY29kUmVhOnN0cmluZ3xudWxsPSBudWxsO1xyXG4gICAgICAgIHJldHVybiB7Y29kUmVhLGVzUmVhfVxyXG4gICAgICAgIC8vRUpFTVBMTyBQUkVKVV8yMDIyXHJcbiAgICAgICAgLy92YXIgZXNSZWEgPSBmYWxzZTtcclxuICAgICAgICAvL3ZhciBjb2RSZWE6bnVtYmVyfG51bGw9IG51bGw7XHJcbiAgICAgICAgLy9pZighcmVzcHVlc3Rhc1snaWRlbnRpZicgYXMgSWRWYXJpYWJsZV0pe1xyXG4gICAgICAgIC8vICAgIHJldHVybiB7Y29kUmVhLCBlc1JlYX1cclxuICAgICAgICAvL31lbHNlIGlmKHJlc3B1ZXN0YXNbJ2lkZW50aWYnIGFzIElkVmFyaWFibGVdPT0yIHx8cmVzcHVlc3Rhc1sncmVzaWRfaG9nJyBhcyBJZFZhcmlhYmxlXT09Mnx8cmVzcHVlc3Rhc1snY29udGFjdCcgYXMgSWRWYXJpYWJsZV09PTIpe1xyXG4gICAgICAgIC8vICAgIGNvZFJlYSA9IDI7XHJcbiAgICAgICAgLy8gICAgZXNSZWEgPSBmYWxzZTtcclxuICAgICAgICAvL31lbHNle1xyXG4gICAgICAgIC8vICAgIHZhciByZWFoczogbnVtYmVyW109W10gO1xyXG4gICAgICAgIC8vICAgIHZhciByZXNwdWVzdGFzSHMgPSByZXNwdWVzdGFzWydob2dhcmVzJ107XHJcbiAgICAgICAgLy8gICAgaWYocmVzcHVlc3Rhc0hzKXtcclxuICAgICAgICAvLyAgICAgICAgZm9yKGxldCByZXNwdWVzdGFzSCBvZiByZXNwdWVzdGFzSHMpe1xyXG4gICAgICAgIC8vICAgICAgICAgICAgdmFyIHJlYWg6bnVtYmVyO1xyXG4gICAgICAgIC8vICAgICAgICAgICAgdmFyIHNlbGVjOm51bWJlcjtcclxuICAgICAgICAvLyAgICAgICAgICAgIGlmKHJlc3B1ZXN0YXNIWydlbnRyZWEnIF0gIT0gMXx8cmVzcHVlc3Rhc0hbJ3ByZWp1ZTEnXT09Mnx8cmVzcHVlc3Rhc0hbJ3RwJ109PTApe1xyXG4gICAgICAgIC8vICAgICAgICAgICAgICAgIHJlYWg9MjtcclxuICAgICAgICAvLyAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgIC8vICAgICAgICAgICAgICAgIHNlbGVjPXJlc3B1ZXN0YXNIWydjcl9udW1fbWllbWJybyddXHJcbiAgICAgICAgLy8gICAgICAgICAgICAgICAgaWYocmVzcHVlc3Rhc0hbJ3BlcnNvbmFzJ10gJiYgcmVzcHVlc3Rhc0gucGVyc29uYXNbc2VsZWMtMV0gKXtcclxuICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgdmFyIHJlc3B1ZXN0YXNQID0gcmVzcHVlc3Rhc0gucGVyc29uYXNbc2VsZWMtMV07XHJcbiAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgIHZhciByZXNwX2VudHJlYV9pbmQgPSByZXNwdWVzdGFzUFsnZW50cmVhaW5kJyBhcyBJZFZhcmlhYmxlIF07XHJcbiAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgIGlmKHJlc3BfZW50cmVhX2luZD09bnVsbCl7IC8vcXVlcmVtb3MgY29udGVtcGxhciBlbCB1bmRlZmluZWRcclxuICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgIHJlYWggPSAzO1xyXG4gICAgICAgIC8vICAgICAgICAgICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgIHJlYWggPSBOdW1iZXIocmVzcF9lbnRyZWFfaW5kKTtcclxuICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgIC8vICAgICAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgIC8vICAgICAgICAgICAgICAgICAgICByZWFoID0gMztcclxuICAgICAgICAvLyAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgLy8gICAgICAgICAgICB9XHJcbiAgICAgICAgLy8gICAgICAgICAgICByZWFocy5wdXNoKHJlYWgpO1xyXG4gICAgICAgIC8vICAgICAgICB9XHJcbiAgICAgICAgLy8gICAgICAgIGlmIChyZWFocy5ldmVyeShyaD0+cmg9PTEpKXtcclxuICAgICAgICAvLyAgICAgICAgICAgIGNvZFJlYSA9IDE7XHJcbiAgICAgICAgLy8gICAgICAgICAgICBlc1JlYSA9IHRydWU7XHJcbiAgICAgICAgLy8gICAgICAgIH1lbHNlIGlmKHJlYWhzLmV2ZXJ5KHJoPT5yaD09Mikpe1xyXG4gICAgICAgIC8vICAgICAgICAgICAgY29kUmVhID0gMjtcclxuICAgICAgICAvLyAgICAgICAgICAgIGVzUmVhID0gZmFsc2U7XHJcbiAgICAgICAgLy8gICAgICAgIH1lbHNlIGlmKHJlYWhzLmV2ZXJ5KHJoPT5yaD09MXx8cmg9PTMpKXtcclxuICAgICAgICAvLyAgICAgICAgICAgIGNvZFJlYSA9IDM7XHJcbiAgICAgICAgLy8gICAgICAgICAgICBlc1JlYSA9IGZhbHNlO1xyXG4gICAgICAgIC8vICAgICAgICB9ZWxzZXtcclxuICAgICAgICAvLyAgICAgICAgICAgIGNvZFJlYSA9IDQ7XHJcbiAgICAgICAgLy8gICAgICAgICAgICBlc1JlYSA9IGZhbHNlO1xyXG4gICAgICAgIC8vICAgICAgICB9XHJcbiAgICAgICAgLy8gICAgfSBlbHNle1xyXG4gICAgICAgIC8vICAgICAgICBjb2RSZWEgPSAzO1xyXG4gICAgICAgIC8vICAgICAgICBlc1JlYSA9IGZhbHNlO1xyXG4gICAgICAgIC8vICAgIH1cclxuICAgICAgICAvL31cclxuICAgICAgICAvL3JldHVybiB7Y29kUmVhLGVzUmVhfVxyXG4gICAgfSxcclxuICAgIGVzUmVhbGl6YWRhU3VwOihfcmVzcHVlc3RhczpSZXNwdWVzdGFzKT0+e1xyXG4gICAgICAgIC8vSU1QTEVNRU5UQVIgRU4gT1BFUkFUSVZPXHJcbiAgICAgICAgdmFyIGVzUmVhU3VwID0gZmFsc2U7XHJcbiAgICAgICAgdmFyIGNvZFJlYVN1cDpudW1iZXJ8bnVsbD0gbnVsbDtcclxuICAgICAgICByZXR1cm4ge2NvZFJlYVN1cCxlc1JlYVN1cH1cclxuICAgICAgICAvL0VKRU1QTE8gUFJFSlVfMjAyMlxyXG4gICAgICAgIC8vVE9ETyBHRU5FUkFMSVpBUiBcclxuICAgICAgICAvL3ZhciBlc1JlYVN1cCA9IGZhbHNlO1xyXG4gICAgICAgIC8vdmFyIGNvZFJlYVN1cDpudW1iZXJ8bnVsbD0gbnVsbDtcclxuICAgICAgICAvL2lmKCFyZXNwdWVzdGFzWydjb25maXJfdGVsX3N1cCcgYXMgSWRWYXJpYWJsZV0gJiYgIXJlc3B1ZXN0YXNbJ3NwMWEnIGFzIElkVmFyaWFibGVdKXtcclxuICAgICAgICAvLyAgICByZXR1cm4ge2NvZFJlYVN1cCwgZXNSZWFTdXB9XHJcbiAgICAgICAgLy99ZWxzZSBpZiggcmVzcHVlc3Rhc1snY29uZmlyX3RlbF9zdXAnIGFzIElkVmFyaWFibGVdPT0yIHx8IHJlc3B1ZXN0YXNbJ2NvbmZpcl9kb21fc3VwJyBhcyBJZFZhcmlhYmxlXT09Mnx8cmVzcHVlc3Rhc1snc3AxYScgYXMgSWRWYXJpYWJsZV09PTIgfHxyZXNwdWVzdGFzWydzcDFiJyBhcyBJZFZhcmlhYmxlXT09Mnx8cmVzcHVlc3Rhc1snc3AxYycgYXMgSWRWYXJpYWJsZV09PTIpe1xyXG4gICAgICAgIC8vICAgIGNvZFJlYVN1cCA9IDI7XHJcbiAgICAgICAgLy8gICAgZXNSZWFTdXAgPSBmYWxzZTtcclxuICAgICAgICAvL31lbHNle1xyXG4gICAgICAgIC8vICAgIHZhciByZWFoczogbnVtYmVyW109W10gO1xyXG4gICAgICAgIC8vICAgIHZhciByZXNwdWVzdGFzSHMgPSByZXNwdWVzdGFzWydob2dhcmVzX3N1cCddO1xyXG4gICAgICAgIC8vICAgIGlmKHJlc3B1ZXN0YXNIcyl7XHJcbiAgICAgICAgLy8gICAgICAgIGZvcihsZXQgcmVzcHVlc3Rhc0ggb2YgcmVzcHVlc3Rhc0hzKXtcclxuICAgICAgICAvLyAgICAgICAgICAgIHZhciByZWFoOm51bWJlcjtcclxuICAgICAgICAvLyAgICAgICAgICAgIHZhciBzZWxlYzpudW1iZXI7XHJcbiAgICAgICAgLy8gICAgICAgICAgICBpZihyZXNwdWVzdGFzSFsnZW50cmVhX3N1cCcgXSA9PSAyfHxyZXNwdWVzdGFzSFsnc3ByMV9zdXAnXT09Mnx8cmVzcHVlc3Rhc0hbJ3NwNCddPT0zfHxyZXNwdWVzdGFzSFsndG90YWxfcmFuZ29fc3VwJ109PTApe1xyXG4gICAgICAgIC8vICAgICAgICAgICAgICAgIHJlYWg9MjtcclxuICAgICAgICAvLyAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgIC8vICAgICAgICAgICAgICAgIGlmKHJlc3B1ZXN0YXNIWydlbnRyZWFfc3VwJyBdKXtcclxuICAgICAgICAvLyAgICAgICAgICAgICAgICAgICByZWFoID0gMTtcclxuICAgICAgICAvLyAgICAgICAgICAgICAgICB9ZWxzZSB7XHJcbiAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgcmVhaD0zO1xyXG4gICAgICAgIC8vICAgICAgICAgICAgICAgIH0gICAgIFxyXG4gICAgICAgIC8vICAgICAgICAgICAgfVxyXG4gICAgICAgIC8vICAgICAgICAgICAgcmVhaHMucHVzaChyZWFoKTtcclxuICAgICAgICAvLyAgICAgICAgfVxyXG4gICAgICAgIC8vICAgICAgICBpZiAocmVhaHMuZXZlcnkocmg9PnJoPT0xKSl7XHJcbiAgICAgICAgLy8gICAgICAgICAgICBjb2RSZWFTdXAgPSAxO1xyXG4gICAgICAgIC8vICAgICAgICAgICAgZXNSZWFTdXAgPSB0cnVlO1xyXG4gICAgICAgIC8vICAgICAgICB9ZWxzZSBpZihyZWFocy5ldmVyeShyaD0+cmg9PTIpKXtcclxuICAgICAgICAvLyAgICAgICAgICAgIGNvZFJlYVN1cCA9IDI7XHJcbiAgICAgICAgLy8gICAgICAgICAgICBlc1JlYVN1cCA9IGZhbHNlO1xyXG4gICAgICAgIC8vICAgICAgICB9ZWxzZSBpZihyZWFocy5ldmVyeShyaD0+cmg9PTF8fHJoPT0zKSl7XHJcbiAgICAgICAgLy8gICAgICAgICAgICBjb2RSZWFTdXAgPSAzO1xyXG4gICAgICAgIC8vICAgICAgICAgICAgZXNSZWFTdXAgPSBmYWxzZTtcclxuICAgICAgICAvLyAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgLy8gICAgICAgICAgICBjb2RSZWFTdXAgPSA0O1xyXG4gICAgICAgIC8vICAgICAgICAgICAgZXNSZWFTdXAgPSBmYWxzZTtcclxuICAgICAgICAvLyAgICAgICAgfVxyXG4gICAgICAgIC8vICAgIH0gZWxzZXtcclxuICAgICAgICAvLyAgICAgICAgY29kUmVhU3VwID0gMztcclxuICAgICAgICAvLyAgICAgICAgZXNSZWFTdXAgPSBmYWxzZTtcclxuICAgICAgICAvLyAgICB9XHJcbiAgICAgICAgLy99XHJcbiAgICAgICAgLy9yZXR1cm4ge2NvZFJlYVN1cCxlc1JlYVN1cH1cclxuICAgIH0sXHJcbiAgICBVQXByaW5jaXBhbDonJyBhcyBJZFVuaWRhZEFuYWxpc2lzLFxyXG4gICAgZGVmVUE6e30gYXMge1tpIGluIElkVW5pZGFkQW5hbGlzaXNdOntwazpJZFZhcmlhYmxlLCBpbmNsdWlkYXM6SWRVbmlkYWRBbmFsaXNpc1tdLCBpZHNGb3I6SWRGb3JtdWxhcmlvW119fSxcclxuICAgIGRlZkZvcjp7fSBhcyB7W2YgaW4gSWRGb3JtdWxhcmlvXTp7LyphcmJvbFVBOklkVW5pZGFkQW5hbGlzaXNbXSwgKi8gaGVybWFubz86dHJ1ZX19XHJcbn1cclxuLy8vLy8gQUJBSk8gZGUgZXN0YSBsw61uZWEgbm8gcHVlZGUgaGFiZXIgb3Ryb3Mgbm9tYnJlcyBkZSB2YXJpYWJsZXMgbyBmb3JtdWxhcmlvcyBvIGNhc2lsbGVyb3MgZW4gZ2VuZXJhbFxyXG5cclxuXHJcbmV4cG9ydCB2YXIgc2V0Q2FsY3Vsb1JlYU5vUmVhID0gKFxyXG4gICAgZXNOb1JlYToocmVzcHVlc3RhczpSZXNwdWVzdGFzKT0+IHtjb2ROb1JlYTpzdHJpbmd8bnVsbCwgZXNOb1JlYTpib29sZWFufSxcclxuICAgIGVzTm9SZWFTdXA6KHJlc3B1ZXN0YXM6UmVzcHVlc3Rhcyk9PiB7Y29kTm9SZWFTdXA6c3RyaW5nfG51bGwsIGVzTm9SZWFTdXA6Ym9vbGVhbn0sXHJcbiAgICBlc1JlYWxpemFkYToocmVzcHVlc3RhczpSZXNwdWVzdGFzKT0+IHtjb2RSZWE6bnVtYmVyfG51bGwsIGVzUmVhOmJvb2xlYW59LFxyXG4gICAgZXNSZWFsaXphZGFTdXA6KHJlc3B1ZXN0YXM6UmVzcHVlc3Rhcyk9PiB7Y29kUmVhU3VwOm51bWJlcnxudWxsLCBlc1JlYVN1cDpib29sZWFufVxyXG4pPT57XHJcbiAgICBkZWZPcGVyYXRpdm8gPSB7XHJcbiAgICAgICAgLi4uZGVmT3BlcmF0aXZvLFxyXG4gICAgICAgIGVzTm9SZWEsXHJcbiAgICAgICAgZXNOb1JlYVN1cCxcclxuICAgICAgICBlc1JlYWxpemFkYSxcclxuICAgICAgICBlc1JlYWxpemFkYVN1cFxyXG4gICAgfVxyXG59XHJcblxyXG4vLyBUT0RPOiBHRU5FUkFMSVpBUlxyXG50eXBlIFBlcnNvbmE9e3AxOnN0cmluZywgcDI6bnVtYmVyLCBwMzpudW1iZXIsIHA0Om51bWJlcnxudWxsLCBwNToxfG51bGwsIHA2OjF8bnVsbH1cclxuXHJcbmZ1bmN0aW9uIG51bShudW06bnVtYmVyfHN0cmluZ3xudWxsKTpudW1iZXJ7XHJcbiAgICAvL0B0cy1pZ25vcmUgbGEgZ3JhY2lhIGVzIG1ldGVyIG51bSBjdWFuZG8gZXMgc3RyaW5nXHJcbiAgICBpZihpc05hTihudW0tMCkpIHJldHVybiAwO1xyXG4gICAgLy9AdHMtaWdub3JlIGxhIGdyYWNpYSBlcyBtZXRlciBudW0gY3VhbmRvIGVzIHN0cmluZ1xyXG4gICAgcmV0dXJuIG51bS0wO1xyXG59XHJcblxyXG52YXIgZnVuY2lvbmVzQ29ub2NpZGFzOntbayBpbiBzdHJpbmddOmJvb2xlYW59ID0ge31cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiB2ZXJpZmljYXJTb3J0ZW8ob3B0czp7XHJcbiAgICBjb25maWd1cmFjaW9uU29ydGVvOkNvbmZpZ3VyYWNpb25Tb3J0ZW9Gb3JtdWxhcmlvLCBcclxuICAgIHJlc3B1ZXN0YXM6UmVzcHVlc3RhcyxcclxuICAgIHJlc3B1ZXN0YXNSYWl6OiBSZXNwdWVzdGFzUmFpelxyXG4gICAgZm9yUGs6Rm9yUGssXHJcbiAgICB2YXJpYWJsZUFjdHVhbDpJZFZhcmlhYmxlXHJcblxyXG59KXtcclxuICAgIGNvbnN0IHJlc2V0ZWFyU29ydGVvID0gKG9wdHM6e3Jlc3B1ZXN0YXM6UmVzcHVlc3Rhc30pPT57XHJcbiAgICAgICAgdmFyIHtyZXNwdWVzdGFzfSA9IG9wdHM7XHJcbiAgICAgICAgcmVzcHVlc3Rhc1tjb25maWd1cmFjaW9uU29ydGVvLnJlc3VsdGFkb109bnVsbDtcclxuICAgICAgICByZXNwdWVzdGFzW2NvbmZpZ3VyYWNpb25Tb3J0ZW8uY2FudGlkYWRfc29ydGVhYmxlc109bnVsbDtcclxuICAgICAgICByZXNwdWVzdGFzW2NvbmZpZ3VyYWNpb25Tb3J0ZW8uZGlzcGFyYWRvcl0gPSBudWxsO1xyXG4gICAgICAgIGNvbmZpZ3VyYWNpb25Tb3J0ZW8uc29ydGVhZG9fbW9zdHJhcj8uZm9yRWFjaCgobW9zdHJhcik9PnJlc3B1ZXN0YXNbbW9zdHJhci50YXJnZXRdPW51bGwpO1xyXG4gICAgICAgIGlmKCd2YXJfbGV0cmEnIGluIGNvbmZpZ3VyYWNpb25Tb3J0ZW8ucGFyYW1fbWV0b2RvKXtcclxuICAgICAgICAgICAgaWYocmVzcHVlc3Rhc1t1bmlkYWRBbmFsaXNpc10gJiYgcmVzcHVlc3Rhc1t1bmlkYWRBbmFsaXNpc10gaW5zdGFuY2VvZiBBcnJheSl7XHJcbiAgICAgICAgICAgICAgICBmb3IodmFyIHBlciBvZiByZXNwdWVzdGFzW3VuaWRhZEFuYWxpc2lzXSl7XHJcbiAgICAgICAgICAgICAgICAgICAgcGVyW2NvbmZpZ3VyYWNpb25Tb3J0ZW8ucGFyYW1fbWV0b2RvLnZhcl9sZXRyYV0gPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHZhciB7Y29uZmlndXJhY2lvblNvcnRlbywgdmFyaWFibGVBY3R1YWwsIHJlc3B1ZXN0YXMsIGZvclBrLCByZXNwdWVzdGFzUmFpen0gPSBvcHRzO1xyXG4gICAgdmFyIGlkRW5jID0gZm9yUGsudml2aWVuZGEhO1xyXG4gICAgdmFyIHtyZXNwdWVzdGFzQXVtZW50YWRhc30gPSByZXNwdWVzdGFzRm9yUGsoZm9yUGssIHRydWUpO1xyXG4gICAgdmFyIGV4cHJfaW5jb21wbGV0aXR1ZF9mdW4gPSBnZXRGdW5jaW9uSGFiaWxpdGFyKGNvbmZpZ3VyYWNpb25Tb3J0ZW8uZXhwcl9pbmNvbXBsZXRpdHVkX2pzW3Jlc3B1ZXN0YXNBdW1lbnRhZGFzLnZkb21pbmlvXS5leHByKTtcclxuICAgIHZhciBmaWx0cm9fZnVuID0gIGdldEZ1bmNpb25IYWJpbGl0YXIoY29uZmlndXJhY2lvblNvcnRlby5maWx0cm9fanNbcmVzcHVlc3Rhc0F1bWVudGFkYXMudmRvbWluaW9dLmV4cHIpO1xyXG4gICAgdmFyIHVuaWRhZEFuYWxpc2lzID0gY29uZmlndXJhY2lvblNvcnRlby51bmlkYWRfYW5hbGlzaXM7XHJcblxyXG4gICAgaWYoY29uZmlndXJhY2lvblNvcnRlby5wYXJhbWV0cm9zLmluY2x1ZGVzKHZhcmlhYmxlQWN0dWFsKSl7XHJcbiAgICAgICAgdmFyIHVhUGFkcmUgPSBsaWtlQXIoZXN0cnVjdHVyYS51bmlkYWRlc19hbmFsaXNpcykuZmluZCgodWEpPT51YS51bmlkYWRfYW5hbGlzaXM9PXVuaWRhZEFuYWxpc2lzKT8ucGFkcmU7XHJcbiAgICAgICAgdmFyIHBrQWdyZWdhZGFQYWRyZSA9IGxpa2VBcihlc3RydWN0dXJhLnVuaWRhZGVzX2FuYWxpc2lzKS5maW5kKCh1YSk9PnVhLnVuaWRhZF9hbmFsaXNpcz09dWFQYWRyZSk/LnBrX2FncmVnYWRhXHJcbiAgICAgICAgaWYodWFQYWRyZSAmJiByZXNwdWVzdGFzQXVtZW50YWRhc1t1YVBhZHJlXSl7XHJcbiAgICAgICAgICAgIC8vQHRzLWlnbm9yZSBwa0FncmVnYWRhUGFkcmUgZXhpc3RlIGUgaW5kaWNhIGxhIHBvc2ljaW9uIGRlbCBwYWRyZVxyXG4gICAgICAgICAgICB2YXIgcGFkcmUgPSByZXNwdWVzdGFzQXVtZW50YWRhc1t1YVBhZHJlXVtOdW1iZXIocmVzcHVlc3Rhc0F1bWVudGFkYXNbcGtBZ3JlZ2FkYVBhZHJlXSktMV07XHJcbiAgICAgICAgICAgIGlmKHZhcmlhYmxlQWN0dWFsICE9IGNvbmZpZ3VyYWNpb25Tb3J0ZW8uY2FudGlkYWRfdG90YWwpe1xyXG4gICAgICAgICAgICAgICAgcGFkcmVbY29uZmlndXJhY2lvblNvcnRlby5jYW50aWRhZF90b3RhbF09cGFkcmVbdW5pZGFkQW5hbGlzaXNdLmxlbmd0aDsgLy9zaSBhZ3JlZ2EgZGVzZGUgYm90b24gYWdyZWdhclxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJlc2V0ZWFyU29ydGVvKHtyZXNwdWVzdGFzOnBhZHJlfSk7XHJcbiAgICAgICAgICAgIHJlc3B1ZXN0YXMgPSBwYWRyZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBpZihyZXNwdWVzdGFzW3VuaWRhZEFuYWxpc2lzXSAhPSBudWxsKXtcclxuICAgICAgICBpZihyZXNwdWVzdGFzW3VuaWRhZEFuYWxpc2lzXSBpbnN0YW5jZW9mIEFycmF5KXtcclxuICAgICAgICAgICAgdmFyIHJlc3B1ZXN0YXNVQSA9IHJlc3B1ZXN0YXNbdW5pZGFkQW5hbGlzaXNdIGFzIFJlc3B1ZXN0YXNbXVxyXG4gICAgICAgICAgICBpZihyZXNwdWVzdGFzW2NvbmZpZ3VyYWNpb25Tb3J0ZW8uZGlzcGFyYWRvcl0hPTEpe1xyXG4gICAgICAgICAgICAgICAgaWYocmVzcHVlc3Rhc1tjb25maWd1cmFjaW9uU29ydGVvLmRpc3BhcmFkb3JdPT0yKXtcclxuICAgICAgICAgICAgICAgICAgICByZXNwdWVzdGFzW2NvbmZpZ3VyYWNpb25Tb3J0ZW8uY2FudGlkYWRfdG90YWxdPXJlc3B1ZXN0YXNVQS5sZW5ndGggKyAxXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXNldGVhclNvcnRlbyh7cmVzcHVlc3Rhc30pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGxldCBjYW50aWRhZFRvdGFsID0gTnVtYmVyKHJlc3B1ZXN0YXNbY29uZmlndXJhY2lvblNvcnRlby5jYW50aWRhZF90b3RhbF0pO1xyXG4gICAgICAgICAgICBpZihjYW50aWRhZFRvdGFsPHJlc3B1ZXN0YXNVQS5sZW5ndGgpe1xyXG4gICAgICAgICAgICAgICAgLy8gZG9ibGUgYXNpZ25hY2nDs24gcGFyYSBxdWUgbG8gY2FyZ3VlIGVuIHJlc3B1ZXN0YXNcclxuICAgICAgICAgICAgICAgIHJlc3B1ZXN0YXNVQSA9IHJlc3B1ZXN0YXNVQS5maWx0ZXIoKHAsaSk9PlxyXG4gICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYWNpb25Tb3J0ZW8ucGFyYW1ldHJvcy5zb21lKChwYXJhbSk9PnBbcGFyYW1dIHx8IGkgPD0gY2FudGlkYWRUb3RhbC0xKVxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgIHJlc3B1ZXN0YXNbdW5pZGFkQW5hbGlzaXNdID0gcmVzcHVlc3Rhc1VBXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgd2hpbGUoY2FudGlkYWRUb3RhbD5yZXNwdWVzdGFzVUEubGVuZ3RoKXtcclxuICAgICAgICAgICAgICAgIHJlc3B1ZXN0YXNVQS5wdXNoKHt9IGFzIFJlc3B1ZXN0YXMpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIHJlc3B1ZXN0YXNbY29uZmlndXJhY2lvblNvcnRlby5pbmNvbXBsZXRhc10gPSByZXNwdWVzdGFzVUEuZmlsdGVyKHA9PmV4cHJfaW5jb21wbGV0aXR1ZF9mdW4ocCkpLmxlbmd0aDtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGlmKHJlc3B1ZXN0YXNbY29uZmlndXJhY2lvblNvcnRlby5kaXNwYXJhZG9yXT09MSAmJlxyXG4gICAgICAgICAgICAgICAgIXJlc3B1ZXN0YXNbY29uZmlndXJhY2lvblNvcnRlby5yZXN1bHRhZG9dICYmXHJcbiAgICAgICAgICAgICAgICByZXNwdWVzdGFzW2NvbmZpZ3VyYWNpb25Tb3J0ZW8uaW5jb21wbGV0YXNdPT0wXHJcbiAgICAgICAgICAgICl7XHJcbiAgICAgICAgICAgICAgICB2YXIgc29ydGVhcj1yZXNwdWVzdGFzVUEuZmlsdGVyKHA9PmZpbHRyb19mdW4ocCkpO1xyXG4gICAgICAgICAgICAgICAgaWYoc29ydGVhci5sZW5ndGgpe1xyXG4gICAgICAgICAgICAgICAgICAgIHJlc3B1ZXN0YXNVQS5mb3JFYWNoKChwZXIsIGkpPT5wZXIuJHAwPWkrMSk7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uZmlndXJhY2lvblNvcnRlby5vcmRlbi5wdXNoKHt2YXJpYWJsZTpcIiRwMFwiIGFzIElkVmFyaWFibGUsIG9yZGVuOjF9KTtcclxuICAgICAgICAgICAgICAgICAgICBzb3J0ZWFyLnNvcnQoY29tcGFyZUZvck9yZGVyKGNvbmZpZ3VyYWNpb25Tb3J0ZW8ub3JkZW4ubWFwKGVsZW0gPT4gKHtjb2x1bW46ZWxlbS52YXJpYWJsZSwgb3JkZXI6ZWxlbS5vcmRlbn0pKSkpO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBwb3NpY2lvblNvcnRlYWRhID0gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICBpZihjb25maWd1cmFjaW9uU29ydGVvLm1ldG9kbz09J2hhc2gnKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdOTyBJTVBMRU1FTlRBRE8nKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLypwb3NpY2lvblNvcnRlYWRhPShcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYWNpb25Tb3J0ZW8ucGFyYW1fbWV0b2RvLnZhcl9jb2VmLnJlZHVjZShcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKHN1bSwgcGFpcik9PnN1bSArIGRhdG9zVml2aWVuZGEudGVtW3BhaXIudmFyXSAqIHBhaXIuY29lZiksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKSAlIGNvbmZpZ3VyYWNpb25Tb3J0ZW8ucGFyYW1fbWV0b2RvLmRpdmlzb3JcclxuICAgICAgICAgICAgICAgICAgICAgICAgKSAlIHNvcnRlYXIubGVuZ3RoKi9cclxuICAgICAgICAgICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGxldHJhID0gJ0EnO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2YXJMZXRyYTpJZFZhcmlhYmxlID0gY29uZmlndXJhY2lvblNvcnRlby5wYXJhbV9tZXRvZG8udmFyX2xldHJhO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IodmFyIHBlcnNvbmEgb2Ygc29ydGVhcil7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNwdWVzdGFzVUEuZmluZCgoX3BlcixpKT0+aT09cGVyc29uYS4kcDAtMSkhW3ZhckxldHJhXSA9IGxldHJhO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVyc29uYVt2YXJMZXRyYV09bGV0cmE7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXRyYSA9IFN0cmluZy5mcm9tQ2hhckNvZGUobGV0cmEuY2hhckNvZGVBdCgwKSsxKTsgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgdGFibGFBbGVhdG9yaWFNaWVtYnJvcyA9IGNvbmZpZ3VyYWNpb25Tb3J0ZW8ucGFyYW1fbWV0b2RvLnRhYmxhLm1hcCgobGlzdGEpPT5saXN0YS5zcGxpdCgnJykpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVzdG8gPSBpZEVuYyAlIDEwO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgY29sdW1uYVRhYmxhQWxlYXRvcmlhID0gcmVzdG8/cmVzdG8gLSAxOjk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKHNvcnRlYXIubGVuZ3RoID4gdGFibGFBbGVhdG9yaWFNaWVtYnJvcy5sZW5ndGgpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc29ydGVhci5zcGxpY2UodGFibGFBbGVhdG9yaWFNaWVtYnJvcy5sZW5ndGgpIC8vZGVzY2FydG8gY2FuZGlkYXRvcyBzaSBzb24gbcOhcyBxdWUgbG8gcXVlIHBlcm1pdGUgbGEgdGFibGFcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZmlsYVRhYmxhQWxlYXRvcmlhID0gc29ydGVhci5sZW5ndGggLSAxIDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGxldHJhU2VsZWNjaW9uYWRhID0gdGFibGFBbGVhdG9yaWFNaWVtYnJvc1tmaWxhVGFibGFBbGVhdG9yaWFdW2NvbHVtbmFUYWJsYUFsZWF0b3JpYV07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBvc2ljaW9uU29ydGVhZGEgPSByZXNwdWVzdGFzVUEuZmluZEluZGV4KChwOlJlc3B1ZXN0YXMpPT5wW3ZhckxldHJhXT09bGV0cmFTZWxlY2Npb25hZGEpICsgMTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzcHVlc3Rhc1tjb25maWd1cmFjaW9uU29ydGVvLnJlc3VsdGFkb109cG9zaWNpb25Tb3J0ZWFkYTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzcHVlc3Rhc1tjb25maWd1cmFjaW9uU29ydGVvLmNhbnRpZGFkX3NvcnRlYWJsZXNdPXNvcnRlYXIubGVuZ3RoO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25maWd1cmFjaW9uU29ydGVvLnNvcnRlYWRvX21vc3RyYXI/LmZvckVhY2goKG1vc3RyYXIpPT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3B1ZXN0YXNbbW9zdHJhci50YXJnZXRdPXJlc3B1ZXN0YXNVQVtyZXNwdWVzdGFzW2NvbmZpZ3VyYWNpb25Tb3J0ZW8ucmVzdWx0YWRvXSBhcyBudW1iZXIgLTFdW21vc3RyYXIuc291cmNlXVxyXG4gICAgICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVzcHVlc3Rhc1tjb25maWd1cmFjaW9uU29ydGVvLmNhbnRpZGFkX3NvcnRlYWJsZXNdPTA7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmVzcHVlc3Rhc1tjb25maWd1cmFjaW9uU29ydGVvLmNhbnRpZGFkX3RvdGFsXT0gcmVzcHVlc3Rhc1VBLmxlbmd0aCB8fCBudWxsOyAvL25vIHF1ZXJlbW9zIGVsIHZhbG9yIDBcclxuICAgICAgICAgICAgcmVzcHVlc3Rhc1tjb25maWd1cmFjaW9uU29ydGVvLnZhcmlhYmxlQm90b25Gb3JtdWxhcmlvVUFdPSdvayc7XHJcbiAgICAgICAgICAgIGlmKGNvbmZpZ3VyYWNpb25Tb3J0ZW8udmFyaWFibGVCb3RvbkZvcm11bGFyaW9VQUluZGl2aWR1YWwpe1xyXG4gICAgICAgICAgICAgICAgcmVzcHVlc3Rhc1tjb25maWd1cmFjaW9uU29ydGVvLnZhcmlhYmxlQm90b25Gb3JtdWxhcmlvVUFJbmRpdmlkdWFsXT0nb2snO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiB2YXJpYWJsZXNDYWxjdWxhZGFzKHJlc3B1ZXN0YXNSYWl6OiBSZXNwdWVzdGFzUmFpeiwgZm9yUGs6Rm9yUGspe1xyXG4gICAgaWYoZXNwZWNpYWxlcy5jYWxjdWxhclZhcmlhYmxlcyl7XHJcbiAgICAgICAgZXNwZWNpYWxlcy5jYWxjdWxhclZhcmlhYmxlcyhyZXNwdWVzdGFzUmFpeiwgZm9yUGspO1xyXG4gICAgfVxyXG4gICAgaWYoZXNwZWNpYWxlcy5jYWxjdWxhclZhcmlhYmxlc0VzcGVjaWZpY2FzT3BlcmF0aXZvKXtcclxuICAgICAgICBlc3BlY2lhbGVzLmNhbGN1bGFyVmFyaWFibGVzRXNwZWNpZmljYXNPcGVyYXRpdm8ocmVzcHVlc3Rhc1JhaXosIGZvclBrKTtcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGNhbGN1bGFyRmVlZGJhY2tVbmlkYWRBbmFsaXNpcyhcclxuICAgIGZlZWRiYWNrUm93VmFsaWRhdG9yOnsgW2Zvcm11bGFyaW8gaW4gUGxhaW5Gb3JQa106Rm9ybVN0cnVjdHVyZVN0YXRlPElkVmFyaWFibGUsIFZhbG9yLCBJZEZpbj4gfSxcclxuICAgIGZvcm11bGFyaW9zOnsgW25vbWJyZUZvcm11bGFyaW8gaW4gSWRGb3JtdWxhcmlvXTpJbmZvRm9ybXVsYXJpbyB9LCBcclxuICAgIHJlc3B1ZXN0YXM6UmVzcHVlc3RhcywgXHJcbiAgICBVQTpJZFVuaWRhZEFuYWxpc2lzLCBcclxuICAgIGZvclBrOkZvclBrLFxyXG4gICAgcmVzcHVlc3Rhc0F1bWVudGFkYXM6UmVzcHVlc3RhcywgLy8gaW5jbHV5ZW4gbGEgZGUgdG9kb3MgbG9zIHBhZHJlcyB5IGFuc2VzdHJvcyxcclxuICAgIHJlc3B1ZXN0YXNQYWRyZTpSZXNwdWVzdGFzfG51bGwsIFxyXG4gICAgb3B0czpPcGNpb25lc1Jvd1ZhbGlkYXRvcixcclxuKXtcclxuICAgIC8vIHJlY29ycmllbmQgVUEgcGVyc29uYXMgeSBtYXNjb3Rhc1xyXG4gICAgZm9yKHZhciBVQWluY2x1aWRhIG9mIGRlZk9wZXJhdGl2by5kZWZVQVtVQV0uaW5jbHVpZGFzKXtcclxuICAgICAgICB2YXIgcGtOdWV2YSA9IGRlZk9wZXJhdGl2by5kZWZVQVtVQWluY2x1aWRhXS5waztcclxuICAgICAgICB2YXIgY29uanVudG9SZXNwdWVzdGFzVUEgPSByZXNwdWVzdGFzW1VBaW5jbHVpZGFdO1xyXG4gICAgICAgIGxpa2VBcihjb25qdW50b1Jlc3B1ZXN0YXNVQSkuZm9yRWFjaCgocmVzcHVlc3Rhc0hpam8sIHZhbG9yUGtPUG9zaWNpb24pPT57XHJcbiAgICAgICAgICAgIHZhciB2YWxvclBrID0gbnVtYmVyT3JTdHJpbmdJbmNJZkFycmF5KHZhbG9yUGtPUG9zaWNpb24sIGNvbmp1bnRvUmVzcHVlc3Rhc1VBKTtcclxuICAgICAgICAgICAgY2FsY3VsYXJGZWVkYmFja1VuaWRhZEFuYWxpc2lzKFxyXG4gICAgICAgICAgICAgICAgZmVlZGJhY2tSb3dWYWxpZGF0b3IsIFxyXG4gICAgICAgICAgICAgICAgZm9ybXVsYXJpb3MsIFxyXG4gICAgICAgICAgICAgICAgcmVzcHVlc3Rhc0hpam8sIFxyXG4gICAgICAgICAgICAgICAgVUFpbmNsdWlkYSwgXHJcbiAgICAgICAgICAgICAgICB7Li4uZm9yUGssIFtwa051ZXZhXTp2YWxvclBrfSxcclxuICAgICAgICAgICAgICAgIHsuLi5yZXNwdWVzdGFzQXVtZW50YWRhcywgLi4ucmVzcHVlc3Rhc0hpam8sIFtwa051ZXZhXTp2YWxvclBrfSxcclxuICAgICAgICAgICAgICAgIHJlc3B1ZXN0YXMsXHJcbiAgICAgICAgICAgICAgICBvcHRzXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgfSlcclxuICAgIH1cclxuICAgIC8vIFMxICwgQTFcclxuICAgIGZvcih2YXIgZXNIZXJtYW5vIG9mIFt0cnVlLCBmYWxzZV0pe1xyXG4gICAgICAgIGZvcih2YXIgZm9ybXVsYXJpbyBvZiBkZWZPcGVyYXRpdm8uZGVmVUFbVUFdLmlkc0ZvcikgaWYoISFlc0hlcm1hbm8gPT0gISFkZWZPcGVyYXRpdm8uZGVmRm9yW2Zvcm11bGFyaW9dLmhlcm1hbm8pe1xyXG4gICAgICAgICAgICB2YXIgcGxhaW5Gb3JQazpQbGFpbkZvclBrID0gdG9QbGFpbkZvclBrKHsuLi5mb3JQaywgZm9ybXVsYXJpb30pXHJcbiAgICAgICAgICAgIHZhciBtYXhQYXNvc0F1dG9pbmdyZXNhZGFzID0gMTA7XHJcbiAgICAgICAgICAgIHZhciB2YXJBdXRvSW5ncmVzYWRhcyA9IFtdO1xyXG4gICAgICAgICAgICBkb3tcclxuICAgICAgICAgICAgICAgIHZhciBodWJvQXV0b2luZ3Jlc29zID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICBmZWVkYmFja1Jvd1ZhbGlkYXRvcltwbGFpbkZvclBrXT1cclxuICAgICAgICAgICAgICAgICAgICByb3dWYWxpZGF0b3IoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHttYXJjYUZpbjonZmluJywgLi4uZm9ybXVsYXJpb3NbZm9ybXVsYXJpb10uZXN0cnVjdHVyYVJvd1ZhbGlkYXRvcn0sIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXNwdWVzdGFzQXVtZW50YWRhcyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgb3B0c1xyXG4gICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgIHZhciB7cmVzdW1lbiwgYXV0b0luZ3Jlc2FkYXN9ID0gZmVlZGJhY2tSb3dWYWxpZGF0b3JbcGxhaW5Gb3JQa107XHJcbiAgICAgICAgICAgICAgICB2YXIgdmFyTmFtZTpJZFZhcmlhYmxlO1xyXG4gICAgICAgICAgICAgICAgaWYoYXV0b0luZ3Jlc2FkYXMhPW51bGwpe1xyXG4gICAgICAgICAgICAgICAgICAgIGZvcih2YXJOYW1lIGluIGF1dG9JbmdyZXNhZGFzKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNhbWJpbyA9IHJlc3B1ZXN0YXNbdmFyTmFtZV0gIT09IGF1dG9JbmdyZXNhZGFzW3Zhck5hbWVdIGFzIFZhbG9yO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZihjYW1iaW8pe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcHVlc3Rhc1t2YXJOYW1lXSA9IGF1dG9JbmdyZXNhZGFzW3Zhck5hbWVdIGFzIFZhbG9yO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcHVlc3Rhc0F1bWVudGFkYXNbdmFyTmFtZV0gPSBhdXRvSW5ncmVzYWRhc1t2YXJOYW1lXSBhcyBWYWxvcjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhckF1dG9JbmdyZXNhZGFzLnB1c2godmFyTmFtZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBodWJvQXV0b2luZ3Jlc29zID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSB3aGlsZShodWJvQXV0b2luZ3Jlc29zICYmIG1heFBhc29zQXV0b2luZ3Jlc2FkYXMtLT4wKTtcclxuICAgICAgICAgICAgdmFyQXV0b0luZ3Jlc2FkYXMuZm9yRWFjaCh2YXJuYW1lPT57XHJcbiAgICAgICAgICAgICAgICAvLyBmZWVkYmFja1Jvd1ZhbGlkYXRvcltwbGFpbkZvclBrXS5lc3RhZG9zW3Zhcm5hbWUgYXMgSWRWYXJpYWJsZV0gPSAnYWN0dWFsJztcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgdmFyIEJGX3Zhcm5hbWUgPSAnJEIuJytmb3JtdWxhcmlvIGFzIElkVmFyaWFibGVcclxuICAgICAgICAgICAgdmFyIGZvcm1QcmluY2lwYWxGb3JWaXZpZW5kYSA9IGdldE1haW5Gb3JtRm9yVml2aWVuZGEoZm9yUGsudml2aWVuZGEhKTtcclxuICAgICAgICAgICAgaWYoZXN0cnVjdHVyYS5jb25maWdTb3J0ZW8gJiYgIWVzdHJ1Y3R1cmEuY29uZmlnU29ydGVvW2Zvcm1QcmluY2lwYWxGb3JWaXZpZW5kYV0pe1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBubyBoYXkgY29uZmlndXJhY2lvbiBkZSBzb3J0ZW8gcGFyYSBlbCBmb3JtdWxhcmlvICR7Zm9ybVByaW5jaXBhbEZvclZpdmllbmRhfWApXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdmFyIGNvbmZpZ1NvcnRlb0Zvcm11bGFyaW8gPSBlc3RydWN0dXJhLmNvbmZpZ1NvcnRlbyAmJiBlc3RydWN0dXJhLmNvbmZpZ1NvcnRlb1tmb3JtUHJpbmNpcGFsRm9yVml2aWVuZGFdO1xyXG4gICAgICAgICAgICB2YXIgcmVzdW1lbk9yTnVsbCA9IFxyXG4gICAgICAgICAgICAgICAgY29uZmlnU29ydGVvRm9ybXVsYXJpbyAmJlxyXG4gICAgICAgICAgICAgICAgY29uZmlnU29ydGVvRm9ybXVsYXJpby52YXJpYWJsZUJvdG9uRm9ybXVsYXJpb1VBSW5kaXZpZHVhbCAmJiBcclxuICAgICAgICAgICAgICAgIGNvbmZpZ1NvcnRlb0Zvcm11bGFyaW8udmFyaWFibGVCb3RvbkZvcm11bGFyaW9VQUluZGl2aWR1YWwgPT0gQkZfdmFybmFtZT9cclxuICAgICAgICAgICAgICAgICAgICAnb2snXHJcbiAgICAgICAgICAgICAgICA6cmVzdW1lbiA9PSAndmFjaW8nID8gXHJcbiAgICAgICAgICAgICAgICAgICAgbnVsbFxyXG4gICAgICAgICAgICAgICAgOnJlc3VtZW5cclxuICAgICAgICAgICAgaWYoZXNIZXJtYW5vKXtcclxuICAgICAgICAgICAgICAgIHJlc3B1ZXN0YXNbQkZfdmFybmFtZV0gPSByZXN1bWVuT3JOdWxsO1xyXG4gICAgICAgICAgICB9ZWxzZSBpZihyZXNwdWVzdGFzUGFkcmUgIT0gbnVsbCl7XHJcbiAgICAgICAgICAgICAgICByZXNwdWVzdGFzUGFkcmVbQkZfdmFybmFtZV0gPSByZXN1bWVuT3JOdWxsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gbnVtYmVyT3JTdHJpbmdJbmNJZkFycmF5KG51bWJlck9yU3RyaW5nOm51bWJlcnxzdHJpbmcsIG9iamVjdDpvYmplY3R8YW55W10pOihudW1iZXJ8c3RyaW5nKXtcclxuICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgZXN0b3kgdXNhbmRvIGlzTmFOIHBhcmEgdmVyIHNpIGVzIG8gbm8gdW4gbsO6bWVybyBzdW1hYmxlXHJcbiAgICBpZihpc05hTihudW1iZXJPclN0cmluZykpe1xyXG4gICAgICAgIHJldHVybiBudW1iZXJPclN0cmluZztcclxuICAgIH1cclxuICAgIHJldHVybiBOdW1iZXIobnVtYmVyT3JTdHJpbmcpKyhvYmplY3QgaW5zdGFuY2VvZiBBcnJheT8xOjApO1xyXG59XHJcblxyXG5leHBvcnQgdmFyIGdldE1haW5Gb3JtRm9yVml2aWVuZGEgPSAodml2aWVuZGE6bnVtYmVyKTpJZEZvcm11bGFyaW89PntcclxuICAgIC8vQHRzLWlnbm9yZSBsYSB2aXZpZW5kYSBlcyBlbCBwYXJhbWV0cm8gY29ycmVjdG9cclxuICAgIHJldHVybiBkYXRvc0J5UGFzcy5pbmZvcm1hY2lvbkhkclt2aXZpZW5kYV0udGFyZWEubWFpbl9mb3JtXHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBjYWxjdWxhckZlZWRiYWNrSG9qYURlUnV0YSgpe1xyXG4gICAgbGlrZUFyKGVzdHJ1Y3R1cmEudW5pZGFkZXNfYW5hbGlzaXMpLmZpbHRlcih1YURlZj0+IXVhRGVmLnBhZHJlKS5mb3JFYWNoKHVhRGVmPT57XHJcbiAgICAgICAgdmFyIGVzUHJpbmNpcGFsID0gKGY6Rm9ybXVsYXJpbywgZW5jOmFueSk9PiB7XHJcbiAgICAgICAgICAgIGxldCBmb3JtdWxhcmlvUHJpbmNpcGFsID0gZ2V0TWFpbkZvcm1Gb3JWaXZpZW5kYShlbmMpO1xyXG4gICAgICAgICAgICByZXR1cm4gZm9ybXVsYXJpb1ByaW5jaXBhbD9mb3JtdWxhcmlvUHJpbmNpcGFsPT1mLmlkX2Nhc2lsbGVybzpmLmZvcm11bGFyaW9fcHJpbmNpcGFsXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBjb25qdW50b1Jlc3B1ZXN0YXNVQSA9IGRhdG9zQnlQYXNzLnJlc3B1ZXN0YXNbdWFEZWYudW5pZGFkX2FuYWxpc2lzXVxyXG4gICAgICAgIGJlaW5nQXJyYXkoY29uanVudG9SZXNwdWVzdGFzVUEpLmZvckVhY2goKHJlc3B1ZXN0YXMsIHZhbG9yUGtPUG9zaWNpb24pPT57XHJcbiAgICAgICAgICAgIHZhciB2YWxvclBrID0gbnVtYmVyT3JTdHJpbmdJbmNJZkFycmF5KHZhbG9yUGtPUG9zaWNpb24sIGNvbmp1bnRvUmVzcHVlc3Rhc1VBKTtcclxuICAgICAgICAgICAgbGlrZUFyKGVzdHJ1Y3R1cmEuZm9ybXVsYXJpb3MpLmZpbHRlcihmPT5mLmNhc2lsbGVyb3MudW5pZGFkX2FuYWxpc2lzID09IHVhRGVmLnVuaWRhZF9hbmFsaXNpcyAmJiBlc1ByaW5jaXBhbChmLmNhc2lsbGVyb3MsIHZhbG9yUGsgYXMgbnVtYmVyKSkuZm9yRWFjaCgoX2RlZkYsIGZvcm11bGFyaW8pPT57XHJcbiAgICAgICAgICAgICAgICB2YXIgZm9yUGtSYWl6ID0ge2Zvcm11bGFyaW8sIFt1YURlZi5wa19hZ3JlZ2FkYV06dmFsb3JQa31cclxuICAgICAgICAgICAgICAgIGNhbGN1bGFyRmVlZGJhY2socmVzcHVlc3RhcywgZm9yUGtSYWl6LCB7fSk7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgfSlcclxuICAgIH0pO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gY2FsY3VsYXJGZWVkYmFja0VuY3Vlc3RhKFxyXG4gICAgZmVlZGJhY2tSb3dWYWxpZGF0b3I6eyBbZm9ybXVsYXJpbyBpbiBQbGFpbkZvclBrXTpGb3JtU3RydWN0dXJlU3RhdGU8SWRWYXJpYWJsZSwgVmFsb3IsIElkRmluPiB9LFxyXG4gICAgZm9ybXVsYXJpb3M6eyBbbm9tYnJlRm9ybXVsYXJpbyBpbiBJZEZvcm11bGFyaW9dOkluZm9Gb3JtdWxhcmlvIH0sIFxyXG4gICAgZm9yUGtSYWl6OiBGb3JQa1JhaXosIFxyXG4gICAgcmVzcHVlc3RhczpSZXNwdWVzdGFzLCBcclxuICAgIG9wdHM6T3BjaW9uZXNSb3dWYWxpZGF0b3JcclxuKXtcclxuICAgIHZhciBmb3JQazpGb3JQayA9ey4uLmZvclBrUmFpen07XHJcbiAgICBjYWxjdWxhckZlZWRiYWNrVW5pZGFkQW5hbGlzaXMoZmVlZGJhY2tSb3dWYWxpZGF0b3IsIGZvcm11bGFyaW9zLCByZXNwdWVzdGFzLCBkZWZPcGVyYXRpdm8uVUFwcmluY2lwYWwsIGZvclBrLCByZXNwdWVzdGFzLCBudWxsLCBvcHRzKTtcclxufVxyXG5cclxuZnVuY3Rpb24gY2FsY3VsYXJGZWVkYmFjayhyZXNwdWVzdGFzOiBSZXNwdWVzdGFzLCBmb3JQa1JhaXo6Rm9yUGtSYWl6LCBvcHRzOk9wY2lvbmVzUm93VmFsaWRhdG9yKXtcclxuICAgIHZhciByZXN1bWVuRXN0YWRvOlJlc3VtZW5Fc3RhZG87XHJcbiAgICAvLyBAdHMtaWdub3JlIFBhcnRpYWxcclxuICAgIHZhciBudWV2b3NSb3dzIDoge1t4IGluIFBsYWluRm9yUGtdOkZvcm1TdHJ1Y3R1cmVTdGF0ZTxJZFZhcmlhYmxlLElkRmluPn09e31cclxuICAgIGNhbGN1bGFyRmVlZGJhY2tFbmN1ZXN0YShudWV2b3NSb3dzLCBlc3RydWN0dXJhLmZvcm11bGFyaW9zLCBmb3JQa1JhaXosIHJlc3B1ZXN0YXMsIG9wdHMpO1xyXG4gICAgZGF0b3NCeVBhc3MuZmVlZGJhY2tSb3dWYWxpZGF0b3IgPSBsaWtlQXIoZGF0b3NCeVBhc3MuZmVlZGJhY2tSb3dWYWxpZGF0b3IpLmZpbHRlcigoX2ZlZWRiYWNrOmFueSwgcGxhaW5QazpQbGFpbkZvclBrKT0+SlNPTi5wYXJzZShwbGFpblBrKS52aXZpZW5kYSAhPSBmb3JQa1JhaXoudml2aWVuZGEpLnBsYWluKCk7XHJcbiAgICBkYXRvc0J5UGFzcy5mZWVkYmFja1Jvd1ZhbGlkYXRvciA9IHsuLi5kYXRvc0J5UGFzcy5mZWVkYmFja1Jvd1ZhbGlkYXRvciwgLi4ubnVldm9zUm93c307XHJcbiAgICBkYXRvc0J5UGFzcy5yZXNwdWVzdGFzLnZpdmllbmRhc1tmb3JQa1JhaXoudml2aWVuZGEhXSA9IHtcclxuICAgICAgICAuLi5kYXRvc0J5UGFzcy5yZXNwdWVzdGFzLnZpdmllbmRhc1tmb3JQa1JhaXoudml2aWVuZGEhXSxcclxuICAgICAgICAuLi5jYWxjdWxhclJlc3VtZW5WaXZpZW5kYShcclxuICAgICAgICAgICAgZm9yUGtSYWl6LCBcclxuICAgICAgICAgICAgbnVldm9zUm93cyxcclxuICAgICAgICAgICAgcmVzcHVlc3Rhc1xyXG4gICAgICAgIClcclxuICAgIH07XHJcbn1cclxuXHJcbmV4cG9ydCB2YXIgZ2V0Rm9ybXVsYXJpb3NGb3JJZFZpdmllbmRhID0gKGlkVml2aWVuZGE6bnVtYmVyKT0+e1xyXG4gICAgdmFyIG1haW5Gb3JtRm9yVml2aWVuZGEgPSBnZXRNYWluRm9ybUZvclZpdmllbmRhKGlkVml2aWVuZGEpO1xyXG4gICAgdmFyIGZvcm1zRmVlZGJhY2sgPSBbbWFpbkZvcm1Gb3JWaXZpZW5kYV07XHJcbiAgICB2YXIgYnVzY2FyRm9ybXVsYXJpb3NIaWpvcyA9IChpZEZvcm11bGFyaW86SWRGb3JtdWxhcmlvKT0+e1xyXG4gICAgICAgIGVzdHJ1Y3R1cmEuZm9ybXVsYXJpb3NbaWRGb3JtdWxhcmlvXS5jYXNpbGxlcm9zLmNhc2lsbGVyb3MuZm9yRWFjaCgoY2FzaWxsZXJvKT0+e1xyXG4gICAgICAgICAgICBpZihjYXNpbGxlcm8udGlwb2MgPT0gJ0JGJyl7XHJcbiAgICAgICAgICAgICAgICB2YXIgZm9ybUhpam8gPSAoY2FzaWxsZXJvLnNhbHRvPy5zdGFydHNXaXRoKCdGOicpP2Nhc2lsbGVyby5zYWx0bzonRjonICsgY2FzaWxsZXJvLnNhbHRvKSBhcyBJZEZvcm11bGFyaW87XHJcbiAgICAgICAgICAgICAgICBpZihmb3JtSGlqbyl7XHJcbiAgICAgICAgICAgICAgICAgICAgZm9ybXNGZWVkYmFjay5wdXNoKGZvcm1IaWpvKTtcclxuICAgICAgICAgICAgICAgICAgICBidXNjYXJGb3JtdWxhcmlvc0hpam9zKGZvcm1IaWpvKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcbiAgICBidXNjYXJGb3JtdWxhcmlvc0hpam9zKG1haW5Gb3JtRm9yVml2aWVuZGEpO1xyXG4gICAgcmV0dXJuIGZvcm1zRmVlZGJhY2s7XHJcbn1cclxuXHJcbmV4cG9ydCB2YXIgY2FsY3VsYXJBY3R1YWxCRiA9IChjb25maWdTb3J0ZW9Gb3JtdWxhcmlvOkNvbmZpZ3VyYWNpb25Tb3J0ZW9Gb3JtdWxhcmlvfG51bGwsIG51bUVsZW1lbnRvVUE6IG51bWJlciwgbnVtQWN0dWFsOm51bWJlcnxudWxsLCBmb3JtdWxhcmlvOklkRm9ybXVsYXJpbywgcjpSZXNwdWVzdGFzKT0+XHJcbiAgICAhIShjb25maWdTb3J0ZW9Gb3JtdWxhcmlvICYmIFxyXG4gICAgY29uZmlnU29ydGVvRm9ybXVsYXJpby5pZF9mb3JtdWxhcmlvX2luZGl2aWR1YWwgJiZcclxuICAgIGNvbmZpZ1NvcnRlb0Zvcm11bGFyaW8uaWRfZm9ybXVsYXJpb19pbmRpdmlkdWFsID09IGZvcm11bGFyaW9cclxuICAgID8gXHJcbiAgICAgICAgbnVtRWxlbWVudG9VQSA9PSBjb2FsZXNjZShcclxuICAgICAgICAgICAgcltjb25maWdTb3J0ZW9Gb3JtdWxhcmlvLnJlc3VsdGFkb19tYW51YWxdLFxyXG4gICAgICAgICAgICByW2NvbmZpZ1NvcnRlb0Zvcm11bGFyaW8ucmVzdWx0YWRvXVxyXG4gICAgICAgIClcclxuICAgIDpcclxuICAgICAgICBudW1BY3R1YWwgPT0gbnVtRWxlbWVudG9VQVxyXG4gICAgKVxyXG5cclxuZXhwb3J0IHZhciBjYWxjdWxhckRpc2FibGVkQkYgPSAoY29uZmlnU29ydGVvRm9ybXVsYXJpbzpDb25maWd1cmFjaW9uU29ydGVvRm9ybXVsYXJpb3xudWxsLCBudW1FbGVtZW50b1VBOiBudW1iZXIsIGZvcm11bGFyaW86SWRGb3JtdWxhcmlvLCByOlJlc3B1ZXN0YXMpPT5cclxuICAgICEhKGNvbmZpZ1NvcnRlb0Zvcm11bGFyaW8gJiYgXHJcbiAgICBjb25maWdTb3J0ZW9Gb3JtdWxhcmlvLmlkX2Zvcm11bGFyaW9faW5kaXZpZHVhbCA9PSBmb3JtdWxhcmlvICYmXHJcbiAgICBudW1FbGVtZW50b1VBICE9IGNvYWxlc2NlKFxyXG4gICAgICAgIHJbY29uZmlnU29ydGVvRm9ybXVsYXJpby5yZXN1bHRhZG9fbWFudWFsXSxcclxuICAgICAgICByW2NvbmZpZ1NvcnRlb0Zvcm11bGFyaW8ucmVzdWx0YWRvXVxyXG4gICAgKSlcclxuXHJcbmV4cG9ydCB2YXIgY2FsY3VsYXJQZXJtaXRlQm9ycmFyQkYgPSAoY29uZmlnU29ydGVvRm9ybXVsYXJpbzpDb25maWd1cmFjaW9uU29ydGVvRm9ybXVsYXJpb3xudWxsLCBmb3JtdWxhcmlvOklkRm9ybXVsYXJpbyk9PlxyXG4gICAgIShjb25maWdTb3J0ZW9Gb3JtdWxhcmlvICYmIFxyXG4gICAgY29uZmlnU29ydGVvRm9ybXVsYXJpby5pZF9mb3JtdWxhcmlvX2luZGl2aWR1YWwgPT0gZm9ybXVsYXJpbylcclxuXHJcbnR5cGUgUmVzdWx0YWRvUmVzdW1lbiA9IHtcclxuICAgIHJlc3VtZW5Fc3RhZG86UmVzdW1lbkVzdGFkbyxcclxuICAgIHJlc3VtZW5Fc3RhZG9TdXA6UmVzdW1lbkVzdGFkbyxcclxuICAgIGNvZFJlYTpudW1iZXJ8bnVsbCxcclxuICAgIGNvZE5vUmVhOnN0cmluZ3xudWxsLFxyXG4gICAgY29kUmVhU3VwOm51bWJlcnxudWxsXHJcbiAgICBjb2ROb1JlYVN1cDpzdHJpbmd8bnVsbCxcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGNhbGN1bGFyUmVzdW1lblZpdmllbmRhKFxyXG4gICAgZm9yUGtSYWl6OkZvclBrUmFpeiwgXHJcbiAgICBmZWVkYmFja1Jvd1ZhbGlkYXRvcjp7W2Zvcm11bGFyaW8gaW4gUGxhaW5Gb3JQa106Rm9ybVN0cnVjdHVyZVN0YXRlPElkVmFyaWFibGUsIFZhbG9yLCBJZEZpbj59LCBcclxuICAgIHJlc3B1ZXN0YXM6UmVzcHVlc3Rhc1xyXG4pOlJlc3VsdGFkb1Jlc3VtZW57XHJcbiAgICB2YXIge2NvZFJlYSwgZXNSZWF9ID0gZGVmT3BlcmF0aXZvLmVzUmVhbGl6YWRhKHJlc3B1ZXN0YXMpXHJcbiAgICB2YXIge2NvZE5vUmVhLCBlc05vUmVhfSA9IGRlZk9wZXJhdGl2by5lc05vUmVhKHJlc3B1ZXN0YXMpXHJcbiAgICB2YXIge2NvZFJlYVN1cCxlc1JlYVN1cH0gPSBkZWZPcGVyYXRpdm8uZXNSZWFsaXphZGFTdXAocmVzcHVlc3RhcylcclxuICAgIHZhciB7Y29kTm9SZWFTdXAsIGVzTm9SZWFTdXB9ID0gZGVmT3BlcmF0aXZvLmVzTm9SZWFTdXAocmVzcHVlc3RhcylcclxuICAgIHZhciBmb3Jtc0ZlZWRiYWNrID0gZ2V0Rm9ybXVsYXJpb3NGb3JJZFZpdmllbmRhKGZvclBrUmFpei52aXZpZW5kYSEpO1xyXG4gICAgdmFyIGNvbmZpZ3VyYWNpb25Tb3J0ZW9Gb3JtdWxhcmlvID0gZXN0cnVjdHVyYS5jb25maWdTb3J0ZW8gJiYgZXN0cnVjdHVyYS5jb25maWdTb3J0ZW9bZ2V0TWFpbkZvcm1Gb3JWaXZpZW5kYShmb3JQa1JhaXoudml2aWVuZGEhKV1cclxuICAgIHZhciBmZWVkQmFja1ZpdmllbmRhID0gbGlrZUFyKGZlZWRiYWNrUm93VmFsaWRhdG9yKS5maWx0ZXIoKF9yb3csIHBsYWluUGspPT57XHJcbiAgICAgICAgdmFyIHRpZW5lSW5kaXZpZHVhbCA9IGNvbmZpZ3VyYWNpb25Tb3J0ZW9Gb3JtdWxhcmlvICYmICEhKGNvbmZpZ3VyYWNpb25Tb3J0ZW9Gb3JtdWxhcmlvLmlkX2Zvcm11bGFyaW9faW5kaXZpZHVhbCAmJiBjb25maWd1cmFjaW9uU29ydGVvRm9ybXVsYXJpby5pZF9mb3JtdWxhcmlvX3BhZHJlKVxyXG4gICAgICAgIHJldHVybiBKU09OLnBhcnNlKHBsYWluUGspLnZpdmllbmRhPT1mb3JQa1JhaXoudml2aWVuZGEgJiYgXHJcbiAgICAgICAgICAgIGZvcm1zRmVlZGJhY2suaW5jbHVkZXMoSlNPTi5wYXJzZShwbGFpblBrKS5mb3JtdWxhcmlvKSAmJlxyXG4gICAgICAgICAgICAodGllbmVJbmRpdmlkdWFsP1xyXG4gICAgICAgICAgICAgICAgIWNhbGN1bGFyRGlzYWJsZWRCRihcclxuICAgICAgICAgICAgICAgICAgICBjb25maWd1cmFjaW9uU29ydGVvRm9ybXVsYXJpbywgXHJcbiAgICAgICAgICAgICAgICAgICAgSlNPTi5wYXJzZShwbGFpblBrKS5wZXJzb25hLCBcclxuICAgICAgICAgICAgICAgICAgICBKU09OLnBhcnNlKHBsYWluUGspLmZvcm11bGFyaW8sIFxyXG4gICAgICAgICAgICAgICAgICAgIEpTT04ucGFyc2UocGxhaW5QaykuaG9nYXI/cmVzcHVlc3Rhc0ZvclBrKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdml2aWVuZGE6Zm9yUGtSYWl6LnZpdmllbmRhLCBcclxuICAgICAgICAgICAgICAgICAgICAgICAgZm9ybXVsYXJpbzpjb25maWd1cmFjaW9uU29ydGVvRm9ybXVsYXJpby5pZF9mb3JtdWxhcmlvX3BhZHJlISxcclxuICAgICAgICAgICAgICAgICAgICAgICAgaG9nYXI6SlNPTi5wYXJzZShwbGFpblBrKS5ob2dhciBcclxuICAgICAgICAgICAgICAgICAgICB9KS5yZXNwdWVzdGFzOnt9IGFzIFJlc3B1ZXN0YXNcclxuICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgOnRydWUpXHJcbiAgICB9KS5hcnJheSgpO1xyXG4gICAgdmFyIHByaW9yaWRhZGVzOntba2V5IGluIFJlc3VtZW5Fc3RhZG9dOiB7cHJpb3JpZGFkOm51bWJlciwgY2FudGlkYWQ6bnVtYmVyfX0gPSB7XHJcbiAgICAgICAgJ25vIHJlYSc6e3ByaW9yaWRhZDogMSwgY2FudGlkYWQ6MH0sXHJcbiAgICAgICAgJ2NvbiBwcm9ibGVtYXMnOntwcmlvcmlkYWQ6IDIsIGNhbnRpZGFkOjB9LFxyXG4gICAgICAgICdpbmNvbXBsZXRvJzp7cHJpb3JpZGFkOiAzLCBjYW50aWRhZDowfSxcclxuICAgICAgICAndmFjaW8nOntwcmlvcmlkYWQ6IDQsIGNhbnRpZGFkOjB9LFxyXG4gICAgICAgICdjaXRhIHBhY3RhZGEnOntwcmlvcmlkYWQ6IDUsIGNhbnRpZGFkOjB9LFxyXG4gICAgICAgICdvayc6e3ByaW9yaWRhZDogNiwgY2FudGlkYWQ6MH1cclxuICAgIH1cclxuICAgIHZhciBtaW4gPSA2O1xyXG4gICAgdmFyIG1pblJlc3VtZW46IFJlc3VtZW5Fc3RhZG8gPSAnb2snO1xyXG4gICAgZm9yKHZhciBmZWVkYmFjayBvZiBmZWVkQmFja1ZpdmllbmRhKXtcclxuICAgICAgICB2YXIgcmVzdW1lbiA9IGZlZWRiYWNrLnJlc3VtZW47XHJcbiAgICAgICAgcHJpb3JpZGFkZXNbcmVzdW1lbl0uY2FudGlkYWQrKztcclxuICAgICAgICBpZihwcmlvcmlkYWRlc1tyZXN1bWVuXS5wcmlvcmlkYWQ8bWluKXtcclxuICAgICAgICAgICAgbWluPXByaW9yaWRhZGVzW3Jlc3VtZW5dLnByaW9yaWRhZDtcclxuICAgICAgICAgICAgbWluUmVzdW1lbj1yZXN1bWVuO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGlmKG1pblJlc3VtZW49PSd2YWNpbycmJiBwcmlvcmlkYWRlc1snb2snXS5jYW50aWRhZCB8fCBtaW5SZXN1bWVuPT0naW5jb21wbGV0bycpe1xyXG4gICAgICAgIGlmKGZhbHNlIC8qcmVzcHVlc3Rhc1tzcDFdPT0yICYmIHJlc3B1ZXN0YXNbc3A2XT09bnVsbCovKXtcclxuICAgICAgICAgICAgbWluUmVzdW1lbj0nY2l0YSBwYWN0YWRhJztcclxuICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgbWluUmVzdW1lbj0naW5jb21wbGV0byc7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgXHJcbiAgICAvL1RPRE8gQVJSRUdMQVIgRVNURSBIT1JST1IsIEdFTkVSQUxJWkFSXHJcbiAgICB2YXIgdGFyZWEgPSBkYXRvc0J5UGFzcy5pbmZvcm1hY2lvbkhkcltmb3JQa1JhaXoudml2aWVuZGEgYXMgdW5rbm93biBhcyBJZEVuY10udGFyZWEudGFyZWE7XHJcbiAgICB2YXIgcmVzdW1lbkVzdGFkbzpSZXN1bWVuRXN0YWRvO1xyXG4gICAgdmFyIHJlc3VtZW5Fc3RhZG9TdXA6UmVzdW1lbkVzdGFkbztcclxuICAgIGlmKHRhcmVhPT0nc3VwZScpe1xyXG4gICAgICAgIHJlc3VtZW5Fc3RhZG9TdXAgPSBlc05vUmVhU3VwPydubyByZWEnOm1pblJlc3VtZW5cclxuICAgICAgICAvL3BhcmEgcXVlIGNvbG9yZWUgYmllbiBlbiBsYSBoZHIgZGVsIERNIChsdWVnbyBlbiBiYmRkIG5vIHNlIGd1YXJkYSlcclxuICAgICAgICByZXN1bWVuRXN0YWRvID0gcmVzdW1lbkVzdGFkb1N1cFxyXG4gICAgfWVsc2V7XHJcbiAgICAgICAgcmVzdW1lbkVzdGFkbyA9IGVzTm9SZWE/J25vIHJlYSc6bWluUmVzdW1lblxyXG4gICAgfVxyXG4gICAgdmFyIHJlc3VsdGFkbzpSZXN1bHRhZG9SZXN1bWVuID0ge1xyXG4gICAgICAgIHJlc3VtZW5Fc3RhZG8sXHJcbiAgICAgICAgcmVzdW1lbkVzdGFkb1N1cCxcclxuICAgICAgICBjb2RSZWEsXHJcbiAgICAgICAgY29kTm9SZWEsXHJcbiAgICAgICAgY29kUmVhU3VwLFxyXG4gICAgICAgIGNvZE5vUmVhU3VwXHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmVzdWx0YWRvXHJcbn1cclxuIl19
1146
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnlwYXNzLWZvcm11bGFyaW8uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdW5sb2dnZWQvYnlwYXNzLWZvcm11bGFyaW8udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0lBQUEscUNBQXVEO0lBRXZELGlEQUFvRztJQUVwRywrQ0FBK0Q7SUFFL0QsbUNBZWlCO0lBRWpCLElBQUksVUFBVSxHQUFHLEVBR2hCLENBQUE7SUFDRCxTQUFnQixvQkFBb0IsQ0FBQyxpQkFBbUU7UUFDcEcsVUFBVSxDQUFDLGlCQUFpQixHQUFHLGlCQUFpQixDQUFBO0lBQ3BELENBQUM7SUFGRCxvREFFQztJQUVELFNBQWdCLHdDQUF3QyxDQUFDLHFDQUF1RjtRQUM1SSxVQUFVLENBQUMscUNBQXFDLEdBQUcscUNBQXFDLENBQUE7SUFDNUYsQ0FBQztJQUZELDRGQUVDO0lBU0QsSUFBSSxXQUFXLEdBQUcsRUFBaUIsQ0FBQTtJQUVuQyw4QkFBOEI7SUFDOUIsSUFBSSxVQUFVLEdBQWMsSUFBa0IsQ0FBQztJQUUvQyxJQUFJLDJCQUEyQixHQUFnRCxHQUFFLEVBQUU7UUFDL0UsTUFBTSxJQUFJLEtBQUssQ0FBQyxrQ0FBa0MsQ0FBQyxDQUFBO0lBQ3ZELENBQUMsQ0FBQTtJQUVELFNBQWdCLHVCQUF1QixDQUFDLHVCQUFtRDtRQUN2RiwyQkFBMkIsR0FBRyx1QkFBdUIsQ0FBQztJQUMxRCxDQUFDO0lBRkQsMERBRUM7SUFFRCxTQUFlLG9CQUFvQixDQUFDLElBQTRCOztZQUM1RCxNQUFNLDJCQUEyQixDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3hDLFdBQVcsQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFBO1lBQ3pCLG1CQUFtQixFQUFFLENBQUM7UUFDMUIsQ0FBQztLQUFBO0lBRUQsU0FBZ0IsZ0JBQWdCLENBQzVCLGdCQUErRjtRQUUvRixhQUFhLEdBQUcsZ0JBQWdCLENBQUE7SUFDcEMsQ0FBQztJQUpELDRDQUlD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QUFHLGdCQUFnQixDQUFBO1NBQ25DO2FBQUk7WUFDRCxhQUFhLEdBQUcsT0FBTyxDQUFBLENBQUMsQ0FBQSxRQUFRLENBQUEsQ0FBQyxDQUFBLFVBQVUsQ0FBQTtTQUM5QztRQUNELElBQUksU0FBUyxHQUFvQjtZQUM3QixhQUFhO1lBQ2IsZ0JBQWdCO1lBQ2hCLE1BQU07WUFDTixRQUFRO1lBQ1IsU0FBUztZQUNULFdBQVc7U0FDZCxDQUFBO1FBQ0QsT0FBTyxTQUFTLENBQUE7SUFDcEIsQ0FBQztJQTFFRCwwREEwRUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBzdHJpY3QgYXMgbGlrZUFyLCBiZWluZ0FycmF5IH0gZnJvbSBcImxpa2UtYXJcIjtcclxuXHJcbmltcG9ydCB7IGdldFJvd1ZhbGlkYXRvciwgRm9ybVN0cnVjdHVyZVN0YXRlLCBPcGNpb25lc1Jvd1ZhbGlkYXRvciwgRmVlZGJhY2sgfSBmcm9tIFwicm93LXZhbGlkYXRvclwiO1xyXG5cclxuaW1wb3J0IHsgZGF0ZSwgY29tcGFyZUZvck9yZGVyLCBjb2FsZXNjZSB9IGZyb20gXCJiZXN0LWdsb2JhbHNcIjtcclxuXHJcbmltcG9ydCB7XHJcbiAgICBFc3RydWN0dXJhLCBcclxuICAgIEZvclBrLCBGb3JQa1JhaXosXHJcbiAgICBJZEZpbiwgSWRGb3JtdWxhcmlvLCBJZFByZWd1bnRhLCBJZFRhcmVhLCBJZFZhcmlhYmxlLCBcclxuICAgIElkVW5pZGFkQW5hbGlzaXMsXHJcbiAgICBJbmZvRm9ybXVsYXJpbywgXHJcbiAgICBQbGFpbkZvclBrLCBSZXNwdWVzdGFzLCBSZXNwdWVzdGFzUmFpeiwgUmVzdW1lbkVzdGFkbyxcclxuICAgIFZhbG9yLCBWaXNpdGEsIFxyXG4gICAgdG9QbGFpbkZvclBrLFxyXG4gICAgVW5pZGFkQW5hbGlzaXMsXHJcbiAgICBGb3JtdWxhcmlvLFxyXG4gICAgQ29uZmlndXJhY2lvblNvcnRlb0Zvcm11bGFyaW8sXHJcbiAgICBEYXRvc0J5UGFzc1BlcnNpc3RpYmxlcyxcclxuICAgIElkRW5jLFxyXG4gICAgRGVmT3BlcmF0aXZvXHJcbn0gZnJvbSBcIi4vdGlwb3NcIjtcclxuXHJcbnZhciBlc3BlY2lhbGVzID0ge30gYXMge1xyXG4gICAgY2FsY3VsYXJWYXJpYWJsZXM/OihyZXNwdWVzdGFzUmFpejpSZXNwdWVzdGFzUmFpeiwgZm9yUGs6Rm9yUGspPT52b2lkXHJcbiAgICBjYWxjdWxhclZhcmlhYmxlc0VzcGVjaWZpY2FzT3BlcmF0aXZvPzoocmVzcHVlc3Rhc1JhaXo6UmVzcHVlc3Rhc1JhaXosIGZvclBrOkZvclBrKT0+dm9pZFxyXG59XHJcbmV4cG9ydCBmdW5jdGlvbiBzZXRDYWxjdWxhclZhcmlhYmxlcyhjYWxjdWxhclZhcmlhYmxlczoocmVzcHVlc3Rhc1JhaXo6UmVzcHVlc3Rhc1JhaXosZm9yUGs6Rm9yUGspPT52b2lkKXtcclxuICAgIGVzcGVjaWFsZXMuY2FsY3VsYXJWYXJpYWJsZXMgPSBjYWxjdWxhclZhcmlhYmxlc1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gc2V0Q2FsY3VsYXJWYXJpYWJsZXNFc3BlY2lmaWNhc09wZXJhdGl2byhjYWxjdWxhclZhcmlhYmxlc0VzcGVjaWZpY2FzT3BlcmF0aXZvOihyZXNwdWVzdGFzUmFpejpSZXNwdWVzdGFzUmFpeixmb3JQazpGb3JQayk9PnZvaWQpe1xyXG4gICAgZXNwZWNpYWxlcy5jYWxjdWxhclZhcmlhYmxlc0VzcGVjaWZpY2FzT3BlcmF0aXZvID0gY2FsY3VsYXJWYXJpYWJsZXNFc3BlY2lmaWNhc09wZXJhdGl2b1xyXG59XHJcblxyXG50eXBlIERhdG9zQnlQYXNzID0gRGF0b3NCeVBhc3NQZXJzaXN0aWJsZXMgJiB7XHJcbiAgICBmZWVkYmFja1Jvd1ZhbGlkYXRvcjp7ICAvLyBubyBzZSBwZXJzaXN0ZVxyXG4gICAgICAgIFtmb3JtdWxhcmlvIGluIFBsYWluRm9yUGtdOkZvcm1TdHJ1Y3R1cmVTdGF0ZTxJZFZhcmlhYmxlLCBWYWxvciwgSWRGaW4+IC8vIHJlc3VsdGFkbyBkZWwgcm93VmFsaWRhdG9yIHBhcmEgZXN0YWRvLmZvclBrXHJcbiAgICB9XHJcbiAgICBkaXJ0eTpib29sZWFuXHJcbn07XHJcblxyXG52YXIgZGF0b3NCeVBhc3MgPSB7fSBhcyBEYXRvc0J5UGFzc1xyXG5cclxuLy9AdHMtaWdub3JlIGFycmFuY2EgZW4gYmxhbmNvXHJcbnZhciBlc3RydWN0dXJhOkVzdHJ1Y3R1cmEgPSBudWxsIGFzIEVzdHJ1Y3R1cmE7XHJcblxyXG5sZXQgcGVyc2lzdGlyRGF0b3NCeVBhc3NJbnRlcm5vOihkYnBwOkRhdG9zQnlQYXNzUGVyc2lzdGlibGVzKT0+UHJvbWlzZTxhbnk+ID0gKCk9PntcclxuICAgIHRocm93IG5ldyBFcnJvcigncGVyc2lzdGlyRGF0b3NCeVBhc3MgU0lOIERFRklOSVInKVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gc2V0UGVyc2lzdGlyRGF0b3NCeVBhc3MocGVyc2lzdGlyRGF0b3NCeVBhc3NGdW46dHlwZW9mIHBlcnNpc3RpckRhdG9zQnlQYXNzKXtcclxuICAgIHBlcnNpc3RpckRhdG9zQnlQYXNzSW50ZXJubyA9IHBlcnNpc3RpckRhdG9zQnlQYXNzRnVuO1xyXG59XHJcblxyXG5hc3luYyBmdW5jdGlvbiBwZXJzaXN0aXJEYXRvc0J5UGFzcyhkYnBwOkRhdG9zQnlQYXNzUGVyc2lzdGlibGVzKXtcclxuICAgIGF3YWl0IHBlcnNpc3RpckRhdG9zQnlQYXNzSW50ZXJubyhkYnBwKTtcclxuICAgIGRhdG9zQnlQYXNzLmRpcnR5ID0gZmFsc2VcclxuICAgIHJlZnJlc2Nhck1hcmNhRGlydHkoKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHNldEVuY29sYXJCYWNrdXAoXHJcbiAgICBlbmNvbGFyQmFja3VwRnVuOih0b2tlbjpzdHJpbmd8dW5kZWZpbmVkLCBmb3JQa1JhaXo6Rm9yUGtSYWl6LCByZXNwdWVzdGFzUmFpejpSZXNwdWVzdGFzKT0+dm9pZFxyXG4pe1xyXG4gICAgZW5jb2xhckJhY2t1cCA9IGVuY29sYXJCYWNrdXBGdW5cclxufVxyXG5cclxubGV0IGVuY29sYXJCYWNrdXA6KHRva2VuOnN0cmluZ3x1bmRlZmluZWQsIGZvclBrUmFpejpGb3JQa1JhaXosIHJlc3B1ZXN0YXNSYWl6OlJlc3B1ZXN0YXMpPT52b2lkID0gKCk9PntcclxuICAgIHRocm93IG5ldyBFcnJvcihcIlNJTiBFU1BFQ0lGSUNBUiBlbmNvbGFyQmFja3VwXCIpXHJcbn1cclxuXHJcbmV4cG9ydCB2YXIgaW50ZW50YXJCYWNrdXAgPSAoZm9yUGs6Rm9yUGspPT57XHJcbiAgICB2YXIge3Jlc3B1ZXN0YXNSYWl6LCBmb3JQa1JhaXp9ID0gcmVzcHVlc3Rhc0ZvclBrKGZvclBrLCB0cnVlKVxyXG4gICAgdmFyIHRva2VuID0gZGF0b3NCeVBhc3MudG9rZW47XHJcbiAgICBpZih0b2tlbil7XHJcbiAgICAgICAgZW5jb2xhckJhY2t1cCh0b2tlbiwgZm9yUGtSYWl6LCByZXNwdWVzdGFzUmFpeilcclxuICAgIH1lbHNle1xyXG4gICAgICAgIGNvbnNvbGUubG9nKFwibm8gaGF5IHRva2VuLCBubyBzZSBwdWRvIGhhY2VyIGVsIGJhY2t1cFwiKVxyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gc2V0RXN0cnVjdHVyYShlc3RydWN0dXJhQUNhcmdhcjpFc3RydWN0dXJhKXtcclxuICAgIGVzdHJ1Y3R1cmEgPSBlc3RydWN0dXJhQUNhcmdhcjtcclxuICAgIGRlZk9wZXJhdGl2by5VQXByaW5jaXBhbCA9IGxpa2VBcihlc3RydWN0dXJhLnVuaWRhZGVzX2FuYWxpc2lzKS5maW5kKHVhPT4hIXVhLnByaW5jaXBhbCk/LnVuaWRhZF9hbmFsaXNpcyFcclxuICAgIGRlZk9wZXJhdGl2by5kZWZGb3IgPSBsaWtlQXIoZXN0cnVjdHVyYS5mb3JtdWxhcmlvcykubWFwKGY9Pih7aGVybWFubzogZi5jYXNpbGxlcm9zLmhlcm1hbm99KSkucGxhaW4oKVxyXG4gICAgZGVmT3BlcmF0aXZvLmRlZlVBID0gbGlrZUFyKGVzdHJ1Y3R1cmEudW5pZGFkZXNfYW5hbGlzaXMpLm1hcCgodWFEZWYsIHVhKT0+KHtcclxuICAgICAgICBwazp1YURlZi5wa19hZ3JlZ2FkYSBhcyBJZFZhcmlhYmxlLCBcclxuICAgICAgICBpbmNsdWlkYXM6IGxpa2VBcih1YURlZi5oaWphcykua2V5cygpLFxyXG4gICAgICAgIGlkc0ZvcjogbGlrZUFyKGVzdHJ1Y3R1cmEuZm9ybXVsYXJpb3MpLmZpbHRlcihmPT5mLmNhc2lsbGVyb3MudW5pZGFkX2FuYWxpc2lzID09IHVhKS5rZXlzKClcclxuICAgIH0pKS5wbGFpbigpXHJcbiAgICByZXR1cm4gZXN0cnVjdHVyYTsgXHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBzZXREYXRvc0J5UGFzcyhkYnBwOkRhdG9zQnlQYXNzUGVyc2lzdGlibGVzICYge2RpcnR5Pzpib29sZWFufSl7XHJcbiAgICBkYXRvc0J5UGFzcyA9IHtcclxuICAgICAgICBkaXJ0eTpmYWxzZSxcclxuICAgICAgICAuLi5kYnBwLFxyXG4gICAgICAgIGZlZWRiYWNrUm93VmFsaWRhdG9yOnt9IGFzIERhdG9zQnlQYXNzW1wiZmVlZGJhY2tSb3dWYWxpZGF0b3JcIl1cclxuICAgIH1cclxuICAgIGNhbGN1bGFyRmVlZGJhY2tIb2phRGVSdXRhKCk7XHJcbn1cclxuXHJcbmV4cG9ydCB2YXIgZ2V0RGF0b3NCeVBhc3MgPSAoKT0+IGRhdG9zQnlQYXNzXHJcblxyXG5mdW5jdGlvbiBvYmpldG9WYWNpbyhvOm9iamVjdCl7XHJcbiAgICBmb3IodmFyIGsgaW4gbyl7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRydWU7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRGZWVkYmFja1Jvd1ZhbGlkYXRvcigpe1xyXG4gICAgaWYoIWRhdG9zQnlQYXNzLmZlZWRiYWNrUm93VmFsaWRhdG9yIHx8IG9iamV0b1ZhY2lvKGRhdG9zQnlQYXNzLmZlZWRiYWNrUm93VmFsaWRhdG9yKSl7XHJcbiAgICAgICAgY2FsY3VsYXJGZWVkYmFja0hvamFEZVJ1dGEoKTtcclxuICAgIH1cclxuICAgIHJldHVybiBkYXRvc0J5UGFzcy5mZWVkYmFja1Jvd1ZhbGlkYXRvcjtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdldERpcnR5KCl7XHJcbiAgICByZXR1cm4gZGF0b3NCeVBhc3MuZGlydHlcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdldEVzdHJ1Y3R1cmEoKXtcclxuICAgIHJldHVybiBlc3RydWN0dXJhO1xyXG59XHJcblxyXG50eXBlIEVsZW1lbnRvc1JlZ2lzdHJhYmxlcyA9IEhUTUxEaXZFbGVtZW50fEhUTUxCdXR0b25FbGVtZW50fEhUTUxJbnB1dEVsZW1lbnQ7XHJcblxyXG50eXBlIERpcmVjdEZ1bmN0aW9uPFQsIFJlc3VsdD4gPSAocmVzcHVlc3Rhc0F1bWVudGFkYXM6UmVzcHVlc3RhcywgZmVlZGJhY2tGb3JtOiBGb3JtU3RydWN0dXJlU3RhdGU8SWRWYXJpYWJsZSxWYWxvcixJZEZpbj4sIGVsZW1lbnRvOlQsXHJcbiAgICBmZWVkYmFja0FsbDp7XHJcbiAgICAgICAgW2Zvcm11bGFyaW8gaW4gUGxhaW5Gb3JQa106Rm9ybVN0cnVjdHVyZVN0YXRlPElkVmFyaWFibGUsVmFsb3IsSWRGaW4+IC8vIHJlc3VsdGFkbyBkZWwgcm93VmFsaWRhdG9yIHBhcmEgZXN0YWRvLmZvclBrXHJcbiAgICB9LFxyXG4gICAgZXN0cnVjdHVyYTpFc3RydWN0dXJhXHJcbikgPT4gUmVzdWx0XHJcblxyXG50eXBlIFJlZ2lzdHJvRWxlbWVudG88VCBleHRlbmRzIEVsZW1lbnRvc1JlZ2lzdHJhYmxlcz4gPSB7XHJcbiAgICBpZDogc3RyaW5nLCBcclxuICAgIGZ1bjogRGlyZWN0RnVuY3Rpb248VCwgYW55PlxyXG59ICYgKHtcclxuICAgIHByb3A6a2V5b2YgVFxyXG4gICAgZnVuOiBEaXJlY3RGdW5jdGlvbjxULCBUW2tleW9mIFRdPlxyXG59fHtcclxuICAgIGF0dHI6c3RyaW5nXHJcbiAgICBmdW46IERpcmVjdEZ1bmN0aW9uPFQsIHN0cmluZz5cclxufXx7XHJcbiAgICBzdHlsZTprZXlvZiBDU1NTdHlsZURlY2xhcmF0aW9uXHJcbiAgICBmdW46IERpcmVjdEZ1bmN0aW9uPFQsIHN0cmluZz5cclxufXx7XHJcbiAgICBkaXJlY3Q6dHJ1ZVxyXG4gICAgZnVuOiBEaXJlY3RGdW5jdGlvbjxULCB2b2lkPlxyXG59KVxyXG5cclxudHlwZSBSZWdpc3Ryb0VsZW1lbnRvczxUIGV4dGVuZHMgRWxlbWVudG9zUmVnaXN0cmFibGVzPiA9IHsgW2lkOnN0cmluZ106IFJlZ2lzdHJvRWxlbWVudG88VD4gJiB7ZWxlbWVudG8/OlR9IH07XHJcblxyXG52YXIgcmVnaXN0cm9FbGVtZW50b3NHbG9iYWwgPSB7fSBhcyBSZWdpc3Ryb0VsZW1lbnRvczxFbGVtZW50b3NSZWdpc3RyYWJsZXM+O1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHJlZ2lzdHJhckVsZW1lbnRvPFQgZXh0ZW5kcyBFbGVtZW50b3NSZWdpc3RyYWJsZXM+KGRlZjpSZWdpc3Ryb0VsZW1lbnRvPFQ+KXtcclxuICAgIC8vIEB0cy1pZ25vcmUgU8OtLCBwb2Ryw61hIHNlciBxdWUgbG9zIHRpcG9zIGRlIFQgc2VhbiBkaXN0aW50b3MsIHBlcm8gdmFuIGEgc2VyIGNvaGVyZW50ZXNcclxuICAgIHZhciByZWdpc3Ryb0VsZW1lbnRvczpSZWdpc3Ryb0VsZW1lbnRvczxUPiA9IHJlZ2lzdHJvRWxlbWVudG9zR2xvYmFsO1xyXG4gICAgcmVnaXN0cm9FbGVtZW50b3NbZGVmLmlkXSA9IGRlZjtcclxufVxyXG5cclxudHlwZSBSZXNwdWVzdGFzRm9yUGtDb211biA9IHtyZXNwdWVzdGFzOlJlc3B1ZXN0YXMsIHJlc3B1ZXN0YXNSYWl6OlJlc3B1ZXN0YXNSYWl6LCBmb3JQa1JhaXo6Rm9yUGtSYWl6LCB1bmlkYWRBbmFsaXNpczpVbmlkYWRBbmFsaXNpc31cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiByZXNwdWVzdGFzRm9yUGsoZm9yUGs6Rm9yUGspOlJlc3B1ZXN0YXNGb3JQa0NvbXVuXHJcbmV4cG9ydCBmdW5jdGlvbiByZXNwdWVzdGFzRm9yUGsoZm9yUGs6Rm9yUGssIGNvbkF1bWVudGFkYXM6dHJ1ZSwgYWdyZWdhclNpRmFsdGE/OmJvb2xlYW4pOlJlc3B1ZXN0YXNGb3JQa0NvbXVuICYge3Jlc3B1ZXN0YXNBdW1lbnRhZGFzOlJlc3B1ZXN0YXN9XHJcbmV4cG9ydCBmdW5jdGlvbiByZXNwdWVzdGFzRm9yUGsoZm9yUGs6Rm9yUGssIGNvbkF1bWVudGFkYXM/OmJvb2xlYW4sIGFncmVnYXJTaUZhbHRhPzpib29sZWFuKTpSZXNwdWVzdGFzRm9yUGtDb211biAmIHtyZXNwdWVzdGFzQXVtZW50YWRhcz86UmVzcHVlc3Rhc30ge1xyXG4gICAgdmFyIHJlc3B1ZXN0YXNBdW1lbnRhZGFzID0ge30gYXMgUmVzcHVlc3RhcztcclxuICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgbG8gcXVlIHNvYnJhciBkZSByZXNwdWVzdGFzIG5vIG1lIGltcG9ydGEuLi5cclxuICAgIHZhciByZXNwdWVzdGFzID0gZGF0b3NCeVBhc3MucmVzcHVlc3RhcyBhcyBSZXNwdWVzdGFzO1xyXG4gICAgdmFyIHJlc3B1ZXN0YXNSYWl6OiBSZXNwdWVzdGFzUmFpejsgXHJcbiAgICB2YXIgZm9yUGtSYWl6OiBGb3JQazsgXHJcbiAgICB2YXIgdW5pZGFkX2FuYWxpc2lzOklkVW5pZGFkQW5hbGlzaXN8dW5kZWZpbmVkID0gZXN0cnVjdHVyYS5mb3JtdWxhcmlvc1tmb3JQay5mb3JtdWxhcmlvXS5jYXNpbGxlcm9zLnVuaWRhZF9hbmFsaXNpc1xyXG4gICAgdmFyIGZvclBrQXBpbGFkYSA9IGZvclBrO1xyXG4gICAgdmFyIHBpbGE6W3VuaWRhZF9hbmFsaXNpczpJZFVuaWRhZEFuYWxpc2lzLCB1YURlZjpVbmlkYWRBbmFsaXNpcywgZm9yUGs6Rm9yUGtdW10gPSBbXTtcclxuICAgIHdoaWxlKHVuaWRhZF9hbmFsaXNpcyl7XHJcbiAgICAgICAgdmFyIHVhRGVmOlVuaWRhZEFuYWxpc2lzID0gZXN0cnVjdHVyYS51bmlkYWRlc19hbmFsaXNpc1t1bmlkYWRfYW5hbGlzaXNdO1xyXG4gICAgICAgIHBpbGEucHVzaChbdW5pZGFkX2FuYWxpc2lzLCB1YURlZiwgZm9yUGtBcGlsYWRhXSk7XHJcbiAgICAgICAgZm9yUGtBcGlsYWRhPXsuLi5mb3JQa0FwaWxhZGF9O1xyXG4gICAgICAgIGRlbGV0ZSBmb3JQa0FwaWxhZGFbdWFEZWYucGtfYWdyZWdhZGFdXHJcbiAgICAgICAgdW5pZGFkX2FuYWxpc2lzPXVhRGVmLnBhZHJlXHJcbiAgICB9XHJcbiAgICB3aGlsZShwaWxhLmxlbmd0aCl7XHJcbiAgICAgICAgW3VuaWRhZF9hbmFsaXNpcywgdWFEZWYsIGZvclBrQXBpbGFkYV0gPSBwaWxhLnBvcCgpIVxyXG4gICAgICAgIHZhciB2YWxvclBrT1Bvc2ljaW9uID0gZm9yUGtBcGlsYWRhW3VhRGVmLnBrX2FncmVnYWRhXTtcclxuICAgICAgICBpZih2YWxvclBrT1Bvc2ljaW9uID09IHVuZGVmaW5lZCl7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgZmFsdGEgdW4gdmFsb3IgcGFyYSAke0pTT04uc3RyaW5naWZ5KHVhRGVmLnBrX2FncmVnYWRhKX1gKVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZihyZXNwdWVzdGFzW3VuaWRhZF9hbmFsaXNpc10gPT0gbnVsbCl7XHJcbiAgICAgICAgICAgIHJlc3B1ZXN0YXNbdW5pZGFkX2FuYWxpc2lzXSA9IFtdO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgcmVzcHVlc3Rhc0FudGVyaW9yPXJlc3B1ZXN0YXM7XHJcbiAgICAgICAgbGV0IHBvc2ljaW9uID0gcmVzcHVlc3Rhc1t1bmlkYWRfYW5hbGlzaXNdIGluc3RhbmNlb2YgQXJyYXk/dmFsb3JQa09Qb3NpY2lvbiAtIDE6dmFsb3JQa09Qb3NpY2lvblxyXG4gICAgICAgIHJlc3B1ZXN0YXMgPSByZXNwdWVzdGFzW3VuaWRhZF9hbmFsaXNpc11bcG9zaWNpb25dO1xyXG4gICAgICAgIGlmKHJlc3B1ZXN0YXMgPT0gbnVsbCl7XHJcbiAgICAgICAgICAgIGlmKGFncmVnYXJTaUZhbHRhKXtcclxuICAgICAgICAgICAgICAgIHJlc3B1ZXN0YXMgPSB7fSBhcyBSZXNwdWVzdGFzXHJcbiAgICAgICAgICAgICAgICByZXNwdWVzdGFzQW50ZXJpb3JbdW5pZGFkX2FuYWxpc2lzXVtwb3NpY2lvbl0gPSByZXNwdWVzdGFzXHJcbiAgICAgICAgICAgICAgICBwZXJzaXN0aXJEYXRvc0J5UGFzcyhkYXRvc0J5UGFzcyk7IC8vIE9KTyBBU1lOQyBERVNDT05UUk9MQURBXHJcbiAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBObyBleGlzdGUgZWwgZWxlbWVudG8gJyR7cG9zaWNpb259JyBlbiBsYSB1bmlkYWRfYW5hbGlzaXMgJyR7dW5pZGFkX2FuYWxpc2lzfSdgKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBmb3JQa1JhaXogfHw9IGZvclBrQXBpbGFkYTtcclxuICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIFPDqSBxdWUgZXMgcmHDrXogcG9yIGPDs21vIGVzdG95IHJldm9sdmllbmRvIGxhIHBpbGFcclxuICAgICAgICByZXNwdWVzdGFzUmFpeiB8fD0gcmVzcHVlc3RhcztcclxuICAgICAgICBpZihjb25BdW1lbnRhZGFzKXtcclxuICAgICAgICAgICAgcmVzcHVlc3Rhc0F1bWVudGFkYXMgPSB7Li4ucmVzcHVlc3Rhc0F1bWVudGFkYXMsIC4uLnJlc3B1ZXN0YXMsIFt1YURlZi5wa19hZ3JlZ2FkYV06dmFsb3JQa09Qb3NpY2lvbn1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIHJlc3B1ZXN0YXMsIHJlc3B1ZXN0YXNBdW1lbnRhZGFzLCBcclxuICAgICAgICAvLyBAdHMtaWdub3JlIFPDqSBxdWUgbGEgcGlsYSB0aWVuZSBhbCBtZW5vcyB1biBlbGVtZW50byBwb3IgbG8gdGFudG8gZXN0byBlc3TDoSBsbGVubyBzZWd1cm8uIFxyXG4gICAgICAgIHJlc3B1ZXN0YXNSYWl6LCBmb3JQa1JhaXosIHVuaWRhZEFuYWxpc2lzOiB1YURlZlxyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gdm9sY2Fkb0luaWNpYWxFbGVtZW50b3NSZWdpc3RyYWRvcyhmb3JQa1JhaXo6Rm9yUGtSYWl6KXtcclxuICAgIHZhciB7cmVzcHVlc3Rhc0F1bWVudGFkYXN9ID0gcmVzcHVlc3Rhc0ZvclBrKGZvclBrUmFpeiwgdHJ1ZSlcclxuICAgIHZhciByZWdpc3Ryb0VsZW1lbnRvcyA9IHJlZ2lzdHJvRWxlbWVudG9zR2xvYmFsO1xyXG4gICAgdmFyIHBsYWluRm9yUGsgPSB0b1BsYWluRm9yUGsoZm9yUGtSYWl6KVxyXG4gICAgdmFyIHJvd1ZhbGlkYXRvciA9ICBkYXRvc0J5UGFzcy5mZWVkYmFja1Jvd1ZhbGlkYXRvcltwbGFpbkZvclBrXTtcclxuICAgIGZvcih2YXIgaWQgaW4gcmVnaXN0cm9FbGVtZW50b3Mpe1xyXG4gICAgICAgIHZhciBkZWYgPSByZWdpc3Ryb0VsZW1lbnRvc1tpZF07XHJcbiAgICAgICAgaWYoZGVmLmVsZW1lbnRvKXtcclxuICAgICAgICAgICAgaWYoIWRvY3VtZW50LmJvZHkuY29udGFpbnMoZGVmLmVsZW1lbnRvKSl7XHJcbiAgICAgICAgICAgICAgICBkZWYuZWxlbWVudG8gPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYoIWRlZi5lbGVtZW50byl7XHJcbiAgICAgICAgICAgIGRlZi5lbGVtZW50byA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGRlZi5pZCkgYXMgRWxlbWVudG9zUmVnaXN0cmFibGVzO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZighZGVmLmVsZW1lbnRvKXtcclxuICAgICAgICAgICAgLy8gY29uc29sZS5sb2coJ0JVU0NBTkRPIGVsIGVsZW1lbnRvIHJlZ2lzdHJhZG8gJyxpZCwnbm8gZXN0w6EgZW4gZWwgRE9NJylcclxuICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciB2YWx1ZSA9IGRlZi5mdW4ocmVzcHVlc3Rhc0F1bWVudGFkYXMsIHJvd1ZhbGlkYXRvciwgZGVmLmVsZW1lbnRvLCBkYXRvc0J5UGFzcy5mZWVkYmFja1Jvd1ZhbGlkYXRvciwgZXN0cnVjdHVyYSk7XHJcbiAgICAgICAgaWYoJ3Byb3AnIGluIGRlZil7XHJcbiAgICAgICAgICAgIHNldFZhbG9yRGlzdGludG8oZGVmLmVsZW1lbnRvLCBkZWYucHJvcCwgdmFsdWUpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmKCdhdHRyJyBpbiBkZWYpe1xyXG4gICAgICAgICAgICBzZXRBdHRyRGlzdGludG8oZGVmLmVsZW1lbnRvLCBkZWYuYXR0ciwgdmFsdWUpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmKCdzdHlsZScgaW4gZGVmKXtcclxuICAgICAgICAgICAgc2V0VmFsb3JEaXN0aW50byhkZWYuZWxlbWVudG8uc3R5bGUsIGRlZi5zdHlsZSwgdmFsdWUpXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYocm93VmFsaWRhdG9yLmFjdHVhbCl7XHJcbiAgICAgICAgdmFyIHt0b3AsIGJvdHRvbX0gPSBjYWxjdWxhckVsZW1lbnRvRW5mb2NhZG8ocm93VmFsaWRhdG9yLmFjdHVhbCk7XHJcbiAgICAgICAgaWYodG9wICE9IG51bGwgJiYgYm90dG9tICE9bnVsbCl7XHJcbiAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcclxuICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ZhYi1hY3Rpdm8tYXJyaWJhJykuZWxUb3BWaXNpYmlsaXphciA9IHRvcDtcclxuICAgICAgICAgICAgLy8gQHRzLWlnbm9yZVxyXG4gICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZmFiLWFjdGl2by1hYmFqbycpLmVsQm90dG9tVmlzaWJpbGl6YXIgPSBib3R0b207XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gY2FsY3VsYXJFbGVtZW50b0VuZm9jYWRvKGlkVmFyaWFibGU6SWRWYXJpYWJsZXxJZEZpbil7XHJcbiAgICB2YXIgZWxlbWVudG9WYXJpYWJsZUFFbmZvY2FyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWRWYXJpYWJsZT09J2Zpbic/YGJvdG9uLXZvbHZlci0yYDpgdmFyLSR7aWRWYXJpYWJsZX1gKVxyXG4gICAgICAgIHx8ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYHNlY2Npb24tYm90b24tZm9ybXVsYXJpby0ke2lkVmFyaWFibGV9YCk7XHJcbiAgICB2YXIgZWxlbWVudG8gPSBlbGVtZW50b1ZhcmlhYmxlQUVuZm9jYXI7XHJcbiAgICB2YXIgTUFSR0VOX1NDUk9MTCA9IDY0O1xyXG4gICAgdmFyIGFsdG9QYW50YWxsYSA9IHdpbmRvdy5pbm5lckhlaWdodCowLjcgLSBNQVJHRU5fU0NST0xMO1xyXG4gICAgdmFyIGVsZW1lbnRvRW50ZXJvOkhUTUxFbGVtZW50fG51bGwgPSBlbGVtZW50bzsgLy8gZXMgZWwgZWxlbWVudG8gcXVlIHZhIGEgZW50YXIgZW50ZXJvIGVuIHBhbnRhbGxhLCBkZWZpbmUgZWwgYm90dG9tXHJcbiAgICB2YXIgcmVjdEVsZW1lbnRvRW50ZXJvOlJldHVyblR5cGU8dHlwZW9mIG15T3duLmdldFJlY3Q+fG51bGwgPSBudWxsO1xyXG4gICAgdmFyIGVsZW1lbnRvU3VwZXJpb3I6SFRNTEVsZW1lbnR8bnVsbCA9IG51bGw7IC8vIGVzIGVsIGVsZW1lbnRvIHF1ZSB2YSBhIG1vc3RyYXJzZSBkZXNkZSBhcnJpYmEgYXVucXVlIG5vIGVudHJlIGVudGVybywgZGVmaW5lIGVsIHRvcFxyXG4gICAgdmFyIHJlY3RFbGVtZW50b1N1cGVyaW9yOlJldHVyblR5cGU8dHlwZW9mIG15T3duLmdldFJlY3Q+fG51bGwgPSBudWxsO1xyXG4gICAgd2hpbGUoZWxlbWVudG8gIT0gbnVsbCl7XHJcbiAgICAgICAgaWYoZWxlbWVudG8uY2xhc3NMaXN0LmNvbnRhaW5zKCd2YXJpYWJsZScpIFxyXG4gICAgICAgIHx8IGVsZW1lbnRvLmNsYXNzTGlzdC5jb250YWlucygnbXVsdGlwbGUnKSBcclxuICAgICAgICB8fCBlbGVtZW50by5jbGFzc0xpc3QuY29udGFpbnMoJ3ByZWd1bnRhJykgXHJcbiAgICAgICAgfHwgZWxlbWVudG8uY2xhc3NMaXN0LmNvbnRhaW5zKCdjb25qdW50b3ByZWd1bnRhcycpIFxyXG4gICAgICAgIHx8IGVsZW1lbnRvLmNsYXNzTGlzdC5jb250YWlucygnc2VjY2lvbi1ib3Rvbi1mb3JtdWxhcmlvJykgXHJcbiAgICAgICAgfHwgZWxlbWVudG8uY2xhc3NMaXN0LmNvbnRhaW5zKCdib3RvbmZvcm11bGFyaW8nKSBcclxuICAgICAgICApe1xyXG4gICAgICAgICAgICBpZihlbGVtZW50b1N1cGVyaW9yID09IG51bGwgJiYgZWxlbWVudG8uY2xpZW50SGVpZ2h0IDwgYWx0b1BhbnRhbGxhKXtcclxuICAgICAgICAgICAgICAgIGVsZW1lbnRvRW50ZXJvID0gZWxlbWVudG87XHJcbiAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgaWYocmVjdEVsZW1lbnRvRW50ZXJvID09IG51bGwpe1xyXG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnRvU3VwZXJpb3IgPSBlbGVtZW50b0VudGVyb1xyXG4gICAgICAgICAgICAgICAgICAgIHJlY3RFbGVtZW50b0VudGVybyA9IG15T3duLmdldFJlY3QoZWxlbWVudG9FbnRlcm8hKVxyXG4gICAgICAgICAgICAgICAgICAgIHJlY3RFbGVtZW50b1N1cGVyaW9yID0gcmVjdEVsZW1lbnRvRW50ZXJvO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdmFyIHJlY3QgPSBteU93bi5nZXRSZWN0KGVsZW1lbnRvKTtcclxuICAgICAgICAgICAgICAgIGlmKHJlY3RFbGVtZW50b0VudGVyby50b3AgKyByZWN0RWxlbWVudG9FbnRlcm8uaGVpZ2h0IC0gcmVjdC50b3AgPCBhbHRvUGFudGFsbGEpe1xyXG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnRvU3VwZXJpb3IgPSBlbGVtZW50bztcclxuICAgICAgICAgICAgICAgICAgICByZWN0RWxlbWVudG9TdXBlcmlvciA9IHJlY3Q7XHJcbiAgICAgICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgICAgICBlbGVtZW50byA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxlbWVudG8gPSBlbGVtZW50bz8ucGFyZW50RWxlbWVudCA/PyBudWxsO1xyXG4gICAgfVxyXG4gICAgaWYoZWxlbWVudG9TdXBlcmlvciA9PSBudWxsKXtcclxuICAgICAgICBlbGVtZW50b1N1cGVyaW9yID0gZWxlbWVudG9FbnRlcm87XHJcbiAgICB9XHJcbiAgICB2YXIgcmVzdWx0OntcclxuICAgICAgICBlbGVtZW50b0lucHV0VmFyaWFibGU/OkhUTUxFbGVtZW50fG51bGxcclxuICAgICAgICB0b3A/Om51bWJlcnxudWxsXHJcbiAgICAgICAgYm90dG9tPzpudW1iZXJ8bnVsbFxyXG4gICAgICAgIGVuZm9jYWRvPzpib29sZWFufG51bGxcclxuICAgICAgICBkZXNlbmZvcXVlPzpzdHJpbmd8bnVsbFxyXG4gICAgfSA9IHt9O1xyXG4gICAgaWYoZWxlbWVudG9FbnRlcm8gIT0gbnVsbCl7XHJcbiAgICAgICAgaWYocmVjdEVsZW1lbnRvRW50ZXJvID09IG51bGwpe1xyXG4gICAgICAgICAgICByZWN0RWxlbWVudG9FbnRlcm8gPSBteU93bi5nZXRSZWN0KGVsZW1lbnRvRW50ZXJvKVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXN1bHQuZWxlbWVudG9JbnB1dFZhcmlhYmxlID0gZWxlbWVudG9WYXJpYWJsZUFFbmZvY2FyO1xyXG4gICAgICAgIHZhciB0b3AgPSAocmVjdEVsZW1lbnRvU3VwZXJpb3I/P3JlY3RFbGVtZW50b0VudGVybykudG9wIC0gTUFSR0VOX1NDUk9MTDtcclxuICAgICAgICByZXN1bHQudG9wID0gdG9wO1xyXG4gICAgICAgIHJlc3VsdC5ib3R0b20gPSByZWN0RWxlbWVudG9FbnRlcm8udG9wK3JlY3RFbGVtZW50b0VudGVyby5oZWlnaHQ7XHJcbiAgICAgICAgaWYodG9wPGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxUb3Ape1xyXG4gICAgICAgICAgICByZXN1bHQuZGVzZW5mb3F1ZT0nYXJyaWJhJztcclxuICAgICAgICB9ZWxzZSBpZihyZWN0RWxlbWVudG9FbnRlcm8udG9wK3JlY3RFbGVtZW50b0VudGVyby5oZWlnaHQgPiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsVG9wICsgYWx0b1BhbnRhbGxhKXtcclxuICAgICAgICAgICAgcmVzdWx0LmRlc2VuZm9xdWU9J2FiYWpvJztcclxuICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgcmVzdWx0LmVuZm9jYWRvPXRydWVcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gc2V0QXR0ckRpc3RpbnRvPE4gZXh0ZW5kcyBzdHJpbmc+KFxyXG4gICAgb2JqZXRvOntzZXRBdHRyaWJ1dGU6KG5hbWU6TiwgdmFsb3I6c3RyaW5nKT0+dm9pZCwgZ2V0QXR0cmlidXRlOihuYW1lOk4pPT5zdHJpbmd8bnVsbH0sXHJcbiAgICBuYW1lOk4sXHJcbiAgICB2YWxvcjpzdHJpbmdcclxuKXtcclxuICAgIGlmKG9iamV0byAmJiBvYmpldG8uZ2V0QXR0cmlidXRlKG5hbWUpICE9IHZhbG9yKXtcclxuICAgICAgICBvYmpldG8uc2V0QXR0cmlidXRlKG5hbWUsIHZhbG9yKTtcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHNldFZhbG9yRGlzdGludG88VCBleHRlbmRzIHt9LCBOIGV4dGVuZHMga2V5b2YgVD4oXHJcbiAgICBvYmpldG86VCxcclxuICAgIG5hbWU6TixcclxuICAgIHZhbG9yOlRbTl1cclxuKXtcclxuICAgIGlmKG9iamV0b1tuYW1lXSAhPSB2YWxvcil7XHJcbiAgICAgICAgb2JqZXRvW25hbWVdID0gdmFsb3I7XHJcbiAgICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGNhbGN1bGFyVmFyaWFibGVzQm90b25Gb3JtdWxhcmlvKF9mb3JQazpGb3JQayl7XHJcbiAgICBcclxufTtcclxuXHJcblxyXG5leHBvcnQgZnVuY3Rpb24gYWNjaW9uX2lkX3ByZWd1bnRhKF9wYXlsb2FkOntwcmVndW50YTogSWRQcmVndW50YSwgZm9yUGs6IEZvclBrfSwgX2RhdG9zQnlQYXNzOkRhdG9zQnlQYXNzKXtcclxufVxyXG5cclxuZXhwb3J0IGNvbnN0IE5PX0NBTUJJQVJfX1NPTE9fVFJBRVJfU1RBVFVTID0gU3ltYm9sKCdOT19DQU1CSUFSX1NPTE9fVFJBRVJfU1RBVFVTJylcclxuZXhwb3J0IGNvbnN0IE5PX0NBTUJJQVJfX1ZFUklGSUNBUl9TSV9FU19ORUNFU0FSSU8gPSBTeW1ib2woJ05PX0NBTUJJQVJfVkVSSUZJQ0FSX1NJX0VTX05FQ0VTQVJJTycpXHJcblxyXG5mdW5jdGlvbiByZWZyZXNjYXJNYXJjYURpcnR5KCl7XHJcbiAgICB2YXIgYm90b25HcmFiYXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInNhdmUtYnV0dG9uXCIpIGFzIEhUTUxCdXR0b25FbGVtZW50O1xyXG4gICAgaWYoYm90b25HcmFiYXIpe1xyXG4gICAgICAgIGlmKGJvdG9uR3JhYmFyLmRpc2FibGVkICE9PSAhZGF0b3NCeVBhc3MuZGlydHkpe1xyXG4gICAgICAgICAgICBib3RvbkdyYWJhci5kaXNhYmxlZCA9ICFkYXRvc0J5UGFzcy5kaXJ0eTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBhY2Npb25fcmVnaXN0cmFyX3Jlc3B1ZXN0YShwYXlsb2FkOntcclxuICAgIGZvclBrOkZvclBrLCBcclxuICAgIHZhcmlhYmxlOklkVmFyaWFibGV8dHlwZW9mIE5PX0NBTUJJQVJfX1NPTE9fVFJBRVJfU1RBVFVTLCBcclxuICAgIHJlc3B1ZXN0YTpWYWxvcnx0eXBlb2YgTk9fQ0FNQklBUl9fVkVSSUZJQ0FSX1NJX0VTX05FQ0VTQVJJT1xyXG59LCBfZGF0b3NCeVBhc3M6RGF0b3NCeVBhc3Mpe1xyXG4gICAgbGV0IHRva2VuID0gJ0FWRVJJR1VBUiBUT0RPJ1xyXG4gICAgbGV0IHsgZm9yUGssIHJlc3B1ZXN0YSwgdmFyaWFibGUgfSA9IHBheWxvYWQ7XHJcbiAgICB2YXIge3Jlc3B1ZXN0YXMsIHJlc3B1ZXN0YXNSYWl6LCBmb3JQa1JhaXp9ICA9IHJlc3B1ZXN0YXNGb3JQayhmb3JQayk7XHJcbiAgICB2YXIgdW5pZGFkX2FuYWxpc2lzID0gZXN0cnVjdHVyYS5mb3JtdWxhcmlvc1tmb3JQay5mb3JtdWxhcmlvXTtcclxuICAgIHZhciByZWNlbnRNb2RpZmllZCA9IGZhbHNlO1xyXG4gICAgdmFyIHZhbG9yQW50ZXJpb3IgPSB2YXJpYWJsZSAhPSBOT19DQU1CSUFSX19TT0xPX1RSQUVSX1NUQVRVUyA/IHJlc3B1ZXN0YXNbdmFyaWFibGVdIDogbnVsbDtcclxuICAgIGlmKHJlc3B1ZXN0YSAhPT0gTk9fQ0FNQklBUl9fVkVSSUZJQ0FSX1NJX0VTX05FQ0VTQVJJTyAmJiB2YXJpYWJsZSAhPSBOT19DQU1CSUFSX19TT0xPX1RSQUVSX1NUQVRVUyl7XHJcbiAgICAgICAgaWYocmVzcHVlc3RhID09PSAnJyl7XHJcbiAgICAgICAgICAgIHJlc3B1ZXN0YSA9IG51bGw7XHJcbiAgICAgICAgfWVsc2UgaWYoZXN0cnVjdHVyYS5mb3JtdWxhcmlvc1tmb3JQay5mb3JtdWxhcmlvXS5lc3RydWN0dXJhUm93VmFsaWRhdG9yLnZhcmlhYmxlc1t2YXJpYWJsZV0udGlwbz09J251bWVybycpe1xyXG4gICAgICAgICAgICBpZihyZXNwdWVzdGEgIT0gbnVsbCl7XHJcbiAgICAgICAgICAgICAgICByZXNwdWVzdGEgPSBOdW1iZXIocmVzcHVlc3RhKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBzaSBlcyB1biBmYWxzeSAoMCA9PSBmYWxzZSkgdGVuZ28gcXVlIGNvbXBhcmFyIGNvbiAhPT1cclxuICAgICAgICByZWNlbnRNb2RpZmllZCA9IHJlc3B1ZXN0YSA/IHZhbG9yQW50ZXJpb3IgIT0gcmVzcHVlc3RhIDogdmFsb3JBbnRlcmlvciAhPT0gcmVzcHVlc3RhXHJcbiAgICAgICAgaWYocmVjZW50TW9kaWZpZWQpe1xyXG4gICAgICAgICAgICByZXNwdWVzdGFzW3ZhcmlhYmxlXSA9IHJlc3B1ZXN0YSA/PyBudWxsOyAvLyBjYW1iaW8gdW5kZWZpbmVkIHBvciBudWxsXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgdmFyIGZlZWRiYWNrUm93ID0gZGF0b3NCeVBhc3MuZmVlZGJhY2tSb3dWYWxpZGF0b3JbdG9QbGFpbkZvclBrKGZvclBrKV07XHJcbiAgICB2YXIgc2lndWllbnRlVmFyaWFibGU6SWRWYXJpYWJsZXxJZEZpbnxudWxsfHVuZGVmaW5lZDtcclxuICAgIGlmKHZhcmlhYmxlICE9IE5PX0NBTUJJQVJfX1NPTE9fVFJBRVJfU1RBVFVTICYmIChyZWNlbnRNb2RpZmllZCB8fCBOT19DQU1CSUFSX19WRVJJRklDQVJfU0lfRVNfTkVDRVNBUklPICYmIGZlZWRiYWNrUm93LmF1dG9JbmdyZXNhZGFzPy5bdmFyaWFibGVdKSl7XHJcbiAgICAgICAgdmFyaWFibGVzQ2FsY3VsYWRhcyhyZXNwdWVzdGFzUmFpeiwgZm9yUGspO1xyXG4gICAgICAgIGlmKGVzdHJ1Y3R1cmEuY29uZmlnU29ydGVvICYmICFkYXRvc0J5UGFzcz8uc29sb0xlY3R1cmEpe1xyXG4gICAgICAgICAgICB2ZXJpZmljYXJTb3J0ZW8oe1xyXG4gICAgICAgICAgICAgICAgY29uZmlndXJhY2lvblNvcnRlbzogZXN0cnVjdHVyYS5jb25maWdTb3J0ZW9bZ2V0TWFpbkZvcm1Gb3JWaXZpZW5kYShmb3JQay52aXZpZW5kYSEpXSwgXHJcbiAgICAgICAgICAgICAgICByZXNwdWVzdGFzLFxyXG4gICAgICAgICAgICAgICAgcmVzcHVlc3Rhc1JhaXosXHJcbiAgICAgICAgICAgICAgICB2YXJpYWJsZUFjdHVhbDogdmFyaWFibGUsIFxyXG4gICAgICAgICAgICAgICAgZm9yUGs6IGZvclBrXHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGRhdG9zQnlQYXNzLmRpcnR5ID0gZGF0b3NCeVBhc3MuZGlydHkgfHwgcmVjZW50TW9kaWZpZWQ7XHJcbiAgICAgICAgcmVzcHVlc3Rhc1JhaXouJGRpcnR5ID0gcmVzcHVlc3Rhc1JhaXouJGRpcnR5IHx8IHJlY2VudE1vZGlmaWVkO1xyXG4gICAgICAgIHJlZnJlc2Nhck1hcmNhRGlydHkoKTtcclxuICAgICAgICBjYWxjdWxhckZlZWRiYWNrKHJlc3B1ZXN0YXNSYWl6LCBmb3JQa1JhaXosIHthdXRvSW5ncmVzbzogdHJ1ZX0pO1xyXG4gICAgICAgIGZlZWRiYWNrUm93ID0gZGF0b3NCeVBhc3MuZmVlZGJhY2tSb3dWYWxpZGF0b3JbdG9QbGFpbkZvclBrKGZvclBrKV07XHJcbiAgICAgICAgY2FsY3VsYXJWYXJpYWJsZXNCb3RvbkZvcm11bGFyaW8oZm9yUGspO1xyXG4gICAgICAgIHZvbGNhZG9JbmljaWFsRWxlbWVudG9zUmVnaXN0cmFkb3MoZm9yUGspO1xyXG4gICAgICAgIHBlcnNpc3RpckRhdG9zQnlQYXNzKGRhdG9zQnlQYXNzKTsgLy8gT0pPIEFTWU5DIERFU0NPTlRST0xBREFcclxuICAgICAgICBzaWd1aWVudGVWYXJpYWJsZSA9IHZhcmlhYmxlO1xyXG4gICAgICAgIGRve1xyXG4gICAgICAgICAgICBzaWd1aWVudGVWYXJpYWJsZSA9IGZlZWRiYWNrUm93LmZlZWRiYWNrW3NpZ3VpZW50ZVZhcmlhYmxlXS5zaWd1aWVudGU7XHJcbiAgICAgICAgfXdoaWxlKHZhbG9yQW50ZXJpb3IgPT0gbnVsbCAmJiByZWNlbnRNb2RpZmllZCAmJiBzaWd1aWVudGVWYXJpYWJsZSAhPSBudWxsICYmIHNpZ3VpZW50ZVZhcmlhYmxlICE9ICdmaW4nICYmIGVzdHJ1Y3R1cmEuZm9ybXVsYXJpb3NbZm9yUGsuZm9ybXVsYXJpb10uZXN0cnVjdHVyYVJvd1ZhbGlkYXRvci52YXJpYWJsZXNbc2lndWllbnRlVmFyaWFibGVdLmZ1bmNpb25BdXRvSW5ncmVzYXIpXHJcbiAgICAgICAgaWYoc2lndWllbnRlVmFyaWFibGUgPT0gbnVsbCAmJiBmZWVkYmFja1Jvdy5mZWVkYmFja1t2YXJpYWJsZV0uZXN0YWRvID09ICd2YWxpZGEnKXtcclxuICAgICAgICAgICAgc2lndWllbnRlVmFyaWFibGUgPSAnZmluJztcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4ge3JlY2VudE1vZGlmaWVkLCBzaWd1aWVudGVWYXJpYWJsZSwgdmFyaWFibGVBY3R1YWw6IGZlZWRiYWNrUm93LmFjdHVhbH07XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBhY2Npb25fcmVnaXN0cmFyX25vdGEocGF5bG9hZDp7Zm9yUGtSYWl6OkZvclBrUmFpeiwgdGFyZWE6SWRUYXJlYSwgbm90YTpzdHJpbmd8bnVsbH0sIF9kYXRvc0J5UGFzczpEYXRvc0J5UGFzcyl7XHJcbiAgICBsZXQgeyBmb3JQa1JhaXosIHRhcmVhLCBub3RhIH0gPSBwYXlsb2FkO1xyXG4gICAgY29uc29sZS5sb2coXCJGQUxUQSAvLyBUT0RPXCIpXHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBhY2Npb25fYWdyZWdhcl92aXNpdGEocGF5bG9hZDp7Zm9yUGtSYWl6OkZvclBrUmFpeiwgb2JzZXJ2YWNpb25lczpzdHJpbmd8bnVsbH0sIF9kYXRvc0J5UGFzczpEYXRvc0J5UGFzcyl7XHJcbiAgICBsZXQgeyBmb3JQa1JhaXosIG9ic2VydmFjaW9uZXMgfSA9IHBheWxvYWQ7XHJcbiAgICAvKlxyXG4gICAgaWYoIWRhdG9zQnlQYXNzLmhvamFEZVJ1dGFbdml2aWVuZGFdLnZpc2l0YXMpe1xyXG4gICAgICAgIGRhdG9zQnlQYXNzLmhvamFEZVJ1dGFbdml2aWVuZGFdLnZpc2l0YXMgPSBbXTtcclxuICAgIH1cclxuICAgIHZhciB2aXNpdGFzID0gZGF0b3NCeVBhc3MuaG9qYURlUnV0YVt2aXZpZW5kYV0udmlzaXRhcztcclxuICAgIHZpc2l0YXMucHVzaCh7XHJcbiAgICAgICAgZmVjaGE6IGRhdGV0aW1lLm5vdygpLnRvWW1kKCksXHJcbiAgICAgICAgaG9yYTogZGF0ZXRpbWUubm93KCkudG9IbSgpLFxyXG4gICAgICAgIGlkcGVyOiBudWxsLCAvLyBUT0RPOiBWRVIgREUgRE9OREUgU0UgU0FDQSBFTCBJRFBFUiBzdGF0ZS5kYXRvcy5pZHBlcixcclxuICAgICAgICBvYnNlcnZhY2lvbmVzOm9ic2VydmFjaW9uZXNcclxuICAgIH0pXHJcbiAgICAqL1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gYWNjaW9uX21vZGlmaWNhcl92aXNpdGEocGF5bG9hZDoge2ZvclBrUmFpejpGb3JQa1JhaXosIGluZGV4Om51bWJlciwgb3BjaW9uOmtleW9mIFZpc2l0YSAsIHZhbG9yOnN0cmluZ3xudWxsfSwgX2RhdG9zQnlQYXNzOkRhdG9zQnlQYXNzKXtcclxuICAgIGxldCB7IGZvclBrUmFpeiwgaW5kZXgsIG9wY2lvbiwgdmFsb3J9ID0gcGF5bG9hZDtcclxuICAgIC8vIHZhciB2aXNpdGFzID0gZGF0b3NCeVBhc3MuaG9qYURlUnV0YVt2aXZpZW5kYV0udmlzaXRhcztcclxuICAgIC8vIHZpc2l0YXNbaW5kZXhdW29wY2lvbl0gPSB2YWxvcjtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGFjY2lvbl9ib3JyYXJfdmlzaXRhKHBheWxvYWQ6IHtmb3JQa1JhaXo6Rm9yUGtSYWl6LCBpbmRleDpudW1iZXJ9LCBfZGF0b3NCeVBhc3M6RGF0b3NCeVBhc3Mpe1xyXG4gICAgbGV0IHsgZm9yUGtSYWl6LCBpbmRleH0gPSBwYXlsb2FkO1xyXG4gICAgLy8gdmFyIHZpc2l0YXMgPSBkYXRvc0J5UGFzcy5ob2phRGVSdXRhW3ZpdmllbmRhXS52aXNpdGFzO1xyXG4gICAgLy8gdmlzaXRhcy5zcGxpY2UoaW5kZXgsIDEpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gYWNjaW9uX2FncmVnYXJfZm9ybXVsYXJpbyh7Zm9yUGt9OiB7Zm9yUGs6Rm9yUGt9LCBfZGF0b3NCeVBhc3M6RGF0b3NCeVBhc3Mpe1xyXG4gICAgdmFyIHtyZXNwdWVzdGFzLCB1bmlkYWRBbmFsaXNpcywgcmVzcHVlc3Rhc0F1bWVudGFkYXMsIHJlc3B1ZXN0YXNSYWl6fSA9IHJlc3B1ZXN0YXNGb3JQayhmb3JQaywgdHJ1ZSwgdHJ1ZSk7XHJcbiAgICB2YXJpYWJsZXNDYWxjdWxhZGFzKHJlc3B1ZXN0YXNSYWl6LCBmb3JQayk7XHJcbiAgICBjYWxjdWxhckZlZWRiYWNrVW5pZGFkQW5hbGlzaXMoZGF0b3NCeVBhc3MuZmVlZGJhY2tSb3dWYWxpZGF0b3IsIGVzdHJ1Y3R1cmEuZm9ybXVsYXJpb3MsIHJlc3B1ZXN0YXMsIHVuaWRhZEFuYWxpc2lzLnVuaWRhZF9hbmFsaXNpcywgZm9yUGssIHJlc3B1ZXN0YXNBdW1lbnRhZGFzLCBudWxsLCB7fSlcclxuICAgIGNhbGN1bGFyVmFyaWFibGVzQm90b25Gb3JtdWxhcmlvKGZvclBrKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGFjY2lvbl9hYnJpcl9mb3JtdWxhcmlvKHtmb3JQa306IHtmb3JQazpGb3JQa30sIF9kYXRvc0J5UGFzczpEYXRvc0J5UGFzcyl7XHJcbiAgICB2YXIge3Jlc3B1ZXN0YXMsIHVuaWRhZEFuYWxpc2lzLCByZXNwdWVzdGFzQXVtZW50YWRhcywgcmVzcHVlc3Rhc1JhaXp9ID0gcmVzcHVlc3Rhc0ZvclBrKGZvclBrLCB0cnVlLCB0cnVlKTtcclxuICAgIHZhcmlhYmxlc0NhbGN1bGFkYXMocmVzcHVlc3Rhc1JhaXosIGZvclBrKTtcclxuICAgIGNhbGN1bGFyRmVlZGJhY2tVbmlkYWRBbmFsaXNpcyhkYXRvc0J5UGFzcy5mZWVkYmFja1Jvd1ZhbGlkYXRvciwgZXN0cnVjdHVyYS5mb3JtdWxhcmlvcywgcmVzcHVlc3RhcywgdW5pZGFkQW5hbGlzaXMudW5pZGFkX2FuYWxpc2lzLCBmb3JQaywgcmVzcHVlc3Rhc0F1bWVudGFkYXMsIG51bGwsIHt9KVxyXG4gICAgY2FsY3VsYXJWYXJpYWJsZXNCb3RvbkZvcm11bGFyaW8oZm9yUGspO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gYWNjaW9uX2JvcnJhcl9mb3JtdWxhcmlvKHtmb3JQaywgZm9yUGtQYWRyZX06IHtmb3JQazpGb3JQaywgZm9yUGtQYWRyZTpGb3JQa30pe1xyXG4gICAgdmFyIHtyZXNwdWVzdGFzLCB1bmlkYWRBbmFsaXNpcywgcmVzcHVlc3Rhc0F1bWVudGFkYXMsIHJlc3B1ZXN0YXNSYWl6LCBmb3JQa1JhaXp9ID0gcmVzcHVlc3Rhc0ZvclBrKGZvclBrLCB0cnVlLCB0cnVlKTtcclxuICAgIHZhciB1bmlkYWRfYW5hbGlzaXM6SWRVbmlkYWRBbmFsaXNpc3x1bmRlZmluZWQgPSBlc3RydWN0dXJhLmZvcm11bGFyaW9zW2ZvclBrLmZvcm11bGFyaW9dLmNhc2lsbGVyb3MudW5pZGFkX2FuYWxpc2lzXHJcbiAgICB2YXIgdWFEZWY6VW5pZGFkQW5hbGlzaXMgPSBlc3RydWN0dXJhLnVuaWRhZGVzX2FuYWxpc2lzW3VuaWRhZF9hbmFsaXNpc107XHJcbiAgICB2YXIgaW5kZXggPSBmb3JQa1t1YURlZi5wa19hZ3JlZ2FkYV07XHJcbiAgICByZXNwdWVzdGFzQXVtZW50YWRhc1t1bmlkYWRfYW5hbGlzaXNdLnBvcCgpO1xyXG4gICAgdmFyaWFibGVzQ2FsY3VsYWRhcyhyZXNwdWVzdGFzUmFpeiwgZm9yUGtQYWRyZSk7XHJcbiAgICBkYXRvc0J5UGFzcy5kaXJ0eSA9IGRhdG9zQnlQYXNzLmRpcnR5IHx8IHRydWU7XHJcbiAgICByZXNwdWVzdGFzUmFpei4kZGlydHkgPSByZXNwdWVzdGFzUmFpei4kZGlydHkgfHwgdHJ1ZTtcclxuICAgIHJlZnJlc2Nhck1hcmNhRGlydHkoKTtcclxuICAgIGNhbGN1bGFyRmVlZGJhY2socmVzcHVlc3Rhc1JhaXosIGZvclBrUmFpeiwge2F1dG9JbmdyZXNvOiB0cnVlfSk7XHJcbiAgICBjYWxjdWxhclZhcmlhYmxlc0JvdG9uRm9ybXVsYXJpbyhmb3JQa1BhZHJlKTtcclxuICAgIHZvbGNhZG9JbmljaWFsRWxlbWVudG9zUmVnaXN0cmFkb3MoZm9yUGtQYWRyZSk7XHJcbiAgICBwZXJzaXN0aXJEYXRvc0J5UGFzcyhkYXRvc0J5UGFzcyk7IC8vIE9KTyBBU1lOQyBERVNDT05UUk9MQURBXHJcbn1cclxuXHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZGlzcGF0Y2hCeVBhc3M8VCwgUj4oXHJcbiAgICBmdW46KHBheWxvYWQ6VCwgZGF0b3M6dHlwZW9mIGRhdG9zQnlQYXNzKT0+UixcclxuICAgIHBheWxvYWQ6VFxyXG4pe1xyXG4gICAgcmV0dXJuIGZ1bihwYXlsb2FkLCBkYXRvc0J5UGFzcyk7XHJcbn1cclxuXHJcbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXHJcblxyXG5cclxuZXhwb3J0IGNvbnN0IHVsdGltYVZhcmlibGVWaXZpZW5kYSA9ICdOT19FU1RBX0RFRklOSURBX0FVTi8vVE9ETycgYXMgSWRWYXJpYWJsZTtcclxuXHJcbmV4cG9ydCBjb25zdCBNQVhDUD0yMDtcclxuXHJcbi8qIFJFRFVDRVJTICovXHJcblxyXG52YXIgcmVlbXBsYXpvc0hhYmlsaXRhcjp7W2tleTpzdHJpbmddOnN0cmluZ309e1xyXG4gICAgZmFsc2U6ICdmYWxzZScsXHJcbiAgICB0cnVlOiAndHJ1ZScsXHJcbiAgICBcIj1cIjogJz09JyxcclxuICAgIFwiPD5cIjogJyE9JyxcclxuICAgIFwiJlwiOiAnJiYnLFxyXG4gICAgXCJ8XCI6ICd8fCcsXHJcbiAgICBcIk9SXCI6ICd8fCcsXHJcbiAgICBcIkFORFwiOiAnJiYnLFxyXG4gICAgXCJvclwiOiAnfHwnLFxyXG4gICAgXCJhbmRcIjogJyYmJyxcclxuICAgIFwibm90XCI6ICchJyxcclxuICAgIFwiTk9UXCI6ICchJyxcclxufTtcclxuXHJcbmV4cG9ydCBjb25zdCBoZWxwZXJzQ2FzaWxsZXJvcz17XHJcbiAgICBudWxsMnplcm8ocG9zaWJsZU51bGw6YW55KXtcclxuICAgICAgICBpZihwb3NpYmxlTnVsbD09bnVsbCl7XHJcbiAgICAgICAgICAgIHJldHVybiAwO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcG9zaWJsZU51bGw7XHJcbiAgICB9LFxyXG4gICAgZGl2MGVycihudW1lcmFkb3I6bnVtYmVyLCBkZW5vbWluYWRvcjpudW1iZXIsIHBrOnN0cmluZyl7XHJcbiAgICAgICAgaWYoZGVub21pbmFkb3I9PTApe1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJFcnJvciBlbiBcIitwaytcIiBkaXZpc2lvbiBwb3IgY2VybyBkZSBcIitudW1lcmFkb3IpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbnVtZXJhZG9yL2Rlbm9taW5hZG9yO1xyXG4gICAgfSxcclxuICAgIGZ1bnM6e1xyXG4gICAgICAgIGJsYW5jbyh4OmFueSl7XHJcbiAgICAgICAgICAgIHJldHVybiB4IT09MCAmJiAheFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgaG95KCl7XHJcbiAgICAgICAgICAgIHJldHVybiBkYXRlLnRvZGF5KCkudG9EbXkoKVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZmVjaGFfdmFsaWRhKHg6c3RyaW5nKXtcclxuICAgICAgICAgICAgdmFyIGZvcm1hdG9fdmFsaWRvPS9eKFsxLTldfDBbMS05XXxbMTJdXFxkfDNbMDFdKVxcLyhbMS05XXwwWzEtOV18MVswMTJdKVxcLzIwXFxkXFxkJC8udGVzdCh4KVxyXG4gICAgICAgICAgICB2YXIgeERhdGU6IERhdGU7XHJcbiAgICAgICAgICAgIHZhciBjb252ZXJzaW9uT2s6IGJvb2xlYW47XHJcbiAgICAgICAgICAgIGNvbnZlcnNpb25PayA9IHRydWU7XHJcbiAgICAgICAgICAgIGlmIChmb3JtYXRvX3ZhbGlkbyl7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBbZCwgbSwgeV0gPSB4LnNwbGl0KCcvJyk7XHJcbiAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgIHhEYXRlID0gbmV3IERhdGUoYCR7eX0vJHttfS8ke2R9YCk7XHJcbiAgICAgICAgICAgICAgICB9IGNhdGNoKGVycil7XHJcbiAgICAgICAgICAgICAgICAgICAgY29udmVyc2lvbk9rID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIC8vZmFsdGFyaWEgdmFsaWRhciBxdWUgbm8gc2VhIHVuYSBmZWNoYSBmdXR1cmEgeSBxdWUgc2VhIHVuYSBmZWNoYSBlbiBlbCByYW5nbyBkZWwgb3BlcmF0aXZvXHJcbiAgICAgICAgICAgIHJldHVybiBmb3JtYXRvX3ZhbGlkbyAmJiBjb252ZXJzaW9uT2tcclxuICAgICAgICB9LFxyXG4gICAgICAgIG1lc2FuaW9fdmFsaWRvKHg6c3RyaW5nKXtcclxuICAgICAgICAgICAgdmFyIGZvcm1hdG9fdmFsaWRvPS9eKFsxLTldfDBbMS05XXwxWzAxMl0pXFwvKDE5fDIwKVxcZFxcZCQvLnRlc3QoeClcclxuICAgICAgICAgICAgcmV0dXJuIGZvcm1hdG9fdmFsaWRvIFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgaW5mb3JtYWRvKHg6YW55KXtcclxuICAgICAgICAgICAgcmV0dXJuIHghPT11bmRlZmluZWQgJiYgeCE9PW51bGwgJiYgKCEoeCBpbnN0YW5jZW9mIEFycmF5KXx8IHgubGVuZ3RoIT09MCApXHJcbiAgICAgICAgICAgICYmICghKHggaW5zdGFuY2VvZiBPYmplY3QpfHwgT2JqZWN0LmtleXMoeCkubGVuZ3RoICE9PSAwIClcclxuICAgICAgICB9LFxyXG4gICAgICAgIG5zbmMoeDphbnkpe1xyXG4gICAgICAgICAgICByZXR1cm4geCA9PSAtOVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgcGFyKHg6bnVtYmVyKXtcclxuICAgICAgICAgICAgcmV0dXJuIHggJSAyPT0wXHJcbiAgICAgICAgfSxcclxuICAgICAgICBlZGFkX21lc19hbm5pb192YWxpZG8oZWRhZDpudW1iZXIsbWVzQW5uaW86c3RyaW5nKXtcclxuICAgICAgICAgICAgLy9lZGFkIHkgbWVzQW5uaW8geWEgc29uIHbDoWxpZG9zXHJcbiAgICAgICAgICAgIHZhciB0b2RheSA9IGRhdGUudG9kYXkoKTtcclxuICAgICAgICAgICAgdmFyIHBhcnRlcyA9ICBtZXNBbm5pby5zcGxpdCgnLycpO1xyXG4gICAgICAgICAgICAvL0B0cy1pZ25vcmUgbGFzIHBhcnRlcyBjb3JyZXNwb25kZW4gYSB1bmEgZmVjaGEgdsOhbGlkYVxyXG4gICAgICAgICAgICB2YXIgbmFjaW1pZW50byA9IGRhdGUueW1kKE51bWJlcihwYXJ0ZXNbMV0pLCBOdW1iZXIocGFydGVzWzBdKSwxKVxyXG4gICAgICAgICAgICAvL0B0cy1pZ25vcmUgUmVhbERhdGUgZXMgRGF0ZSB5IHNlIHB1ZWRlIHJlc3RhclxyXG4gICAgICAgICAgICB2YXIgZGlmZiA9ICh0b2RheSAtIG5hY2ltaWVudG8pLzEwMDAvNjAvNjAvMjQvMzY1OyAvL2HDsW9zXHJcbiAgICAgICAgICAgIHZhciBlZGFkRW50ZXJhID0gTWF0aC5mbG9vcihkaWZmKTtcclxuICAgICAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgICAgIGVkYWRFbnRlcmEgPT0gZWRhZCB8fCBcclxuICAgICAgICAgICAgICAgIGVkYWRFbnRlcmEgPiBlZGFkICYmIHRvZGF5LmdldE1vbnRoKCkgPT0gbmFjaW1pZW50by5nZXRNb250aCgpIC8vbWVzIGRlIHRvbGVyYW5jaWFcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgLy9jb3BpYXJfY2FtcG9fdWFfcmFtYShyZXNwdWVzdGFzT3JpZ2VuOlJlc3B1ZXN0YXNbXSwgcG9zaWNpb246bnVtYmVyLCB2YXJpYWJsZU9yaWdlbjogSWRWYXJpYWJsZSwgY2FtaW5vOnN0cmluZywgY29uZGljaW9uOmJvb2xlYW4pe1xyXG4gICAgICAgIC8vICAgIHJldHVybiBjb25kaWNpb24/KHJlc3B1ZXN0YXNPcmlnZW4gJiYgcmVzcHVlc3Rhc09yaWdlbltwb3NpY2lvbi0xXSAmJiByZXNwdWVzdGFzT3JpZ2VuW3Bvc2ljaW9uLTFdW2Ake2NhbWlub31gXVt2YXJpYWJsZU9yaWdlbl0pOm51bGxcclxuICAgICAgICAvLyAgICByZXR1cm4gY29uZGljaW9uP2V2YWwoYHJlc3B1ZXN0YXNPcmlnZW5bJHtwb3NpY2lvbi0xfV0uYCtjYW1pbm8rJy4nK3ZhcmlhYmxlT3JpZ2VuKTpudWxsO1xyXG4gICAgICAgIC8vfVxyXG4gICAgICAgIC8qXHJcbiAgICAgICAgZGJvOntcclxuICAgICAgICAgICAgZGF0b0ZhbWlsaWFyKGVuY3U6c3RyaW5nLGhvZzpudW1iZXIscGVyOm51bWJlciwgZGF0bzpzdHJpbmcpe1xyXG4gICAgICAgICAgICAgICAgdmFyIHhwZXJzb25hcz1wZXJzb25hcztcclxuICAgICAgICAgICAgICAgIHJldHVybiBlbmN1PT1lbmMgJiYgaG9nPT1ob2dhciAmJiBpbmZvcm1hZG8oeHBlcnNvbmFzKSAmJiBwZXI8PSB4cGVyc29uYXMubGVuZ3RoICYmIHBlcj49MSAmJiAhIXhwZXJzb25hc1twZXItMV1bZGF0b10/IHhwZXJzb25hc1twZXItMV1bZGF0b106bnVsbFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBlZGFkZmFtaWxpYXIoZW5jdTpzdHJpbmcsaG9nOm51bWJlcixwZXI6bnVtYmVyKXtcclxuICAgICAgICAgICAgICAgIHZhciB4cGVyc29uYXM9cGVyc29uYXM7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZGF0b0ZhbWlsaWFyKGVuY3U6c3RyaW5nLGhvZzpudW1iZXIscGVyOm51bWJlciwnZWRhZCcpXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGV4aXN0ZWluZGl2aWR1YWwoZW5jdTpzdHJpbmcsaG9nOm51bWJlcixwZXI6bnVtYmVyKXtcclxuICAgICAgICAgICAgICAgIHZhciB4cGVyc29uYXM9cGVyc29uYXM7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZW5jdT09ZW5jICYmIGhvZz09aG9nYXIgJiYgISFwZXJzb25hcyAmJiBwZXI8PSBwZXJzb25hcy5sZW5ndGggJiYgcGVyPj0xICYmICEhcGVyc29uYXNbcGVyLTFdWydlbnRyZWFpbmQnXVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBleGlzdGVtaWVtYnJvKGVuY3U6c3RyaW5nLGhvZzpudW1iZXIscGVyOm51bWJlcil7XHJcbiAgICAgICAgICAgICAgICB2YXIgeHBlcnNvbmFzPXBlcnNvbmFzO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGVuY3U9PWVuYyAmJiBob2c9PWhvZ2FyICYmICEhcGVyc29uYXMgJiYgcGVyPD0gcGVyc29uYXMubGVuZ3RoICYmIHBlcj49MVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBucm9jb255dWdlcyhlbmN1OnN0cmluZyxob2c6bnVtYmVyKXtcclxuICAgICAgICAgICAgICAgIHZhciB4cGVyc29uYXM9cGVyc29uYXNcclxuICAgICAgICAgICAgICAgIHJldHVybiB4cGVyc29uYXMuZmlsdGVyKCBwZXItPnBlci5wND09MikubGVuZ3RoXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIG5yb2plZmVzKGVuY3U6c3RyaW5nLGhvZzpudW1iZXIscGVyOm51bWJlcil7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcGVyc29uYXMuZmlsdGVyKCBwZXItPnBlci5wND09MSkubGVuZ3RoXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHBhcmVudGVzY29mYW1pbGlhcihlbmN1OnN0cmluZyxob2c6bnVtYmVyLHBlcjpudW1iZXIpe1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGRhdG9GYW1pbGlhcihlbmN1OnN0cmluZyxob2c6bnVtYmVyLHBlcjpudW1iZXIsJ3A0JylcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgc2V4b2ZhbWlsaWFyKGVuY3U6c3RyaW5nLGhvZzpudW1iZXIscGVyOm51bWJlcil7XHJcbiAgICAgICAgICAgICAgICB2YXIgeHBlcnNvbmFzPXBlcnNvbmFzO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGVuY3U9PWVuYyAmJiBob2c9PWhvZ2FyICYmICEheHBlcnNvbmFzICYmIHBlcjw9IHhwZXJzb25hcy5sZW5ndGggJiYgcGVyPj0xICYmICEheHBlcnNvbmFzW3Blci0xXS5zZXhvPyB4cGVyc29uYXNbcGVyLTFdWydzZXhvJ106bnVsbFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBzaXRjb255amVmZShlbmN1OnN0cmluZyxob2c6bnVtYmVyKXtcclxuICAgICAgICAgICAgICAgIHJldHVybiBkYXRvRmFtaWxpYXIoZW5jdTpzdHJpbmcsaG9nOm51bWJlciwxLCdwNScpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9ICovICAgICAgIFxyXG4gICAgfVxyXG59O1xyXG5cclxudHlwZSBGdW5jaW9uSGFiaWxpdGFyID0gKHZhbG9yZXM6e1trZXk6c3RyaW5nXTphbnl9KT0+Ym9vbGVhbjtcclxudHlwZSBGdW5jaW9uVmFsb3JhciA9ICh2YWxvcmVzOntba2V5OnN0cmluZ106YW55fSk9PmFueTtcclxudmFyIGZ1bmNpb25lc0hhYmlsaXRhcjp7W2tleTpzdHJpbmddOkZ1bmNpb25IYWJpbGl0YXJ9PXtcclxufVxyXG52YXIgZnVuY2lvbmVzVmFsb3Jhcjp7W2tleTpzdHJpbmddOkZ1bmNpb25WYWxvcmFyfT17XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBtaW5pQ29tcGlsYWRvclNRbEpzKGV4cHJlc2lvbkNhc2lTUUw6c3RyaW5nKXtcclxuICAgIHZhciBleHByZXNpb24gPSBleHByZXNpb25DYXNpU1FMLnJlcGxhY2UoL1xcdTAwQTAvZywnICcpO1xyXG4gICAgdmFyIGN1ZXJwbyA9IGV4cHJlc2lvbi5yZXBsYWNlKC9cXGJpcyBkaXN0aW5jdCBmcm9tXFxiL2dpLCchPScpLnJlcGxhY2UoL1xcYi4rP1xcYi9nLCBmdW5jdGlvbihlbFRva2VuKXtcclxuICAgICAgICB2YXIgZWxUb2tlblRyaW1lYWRvPWVsVG9rZW4udHJpbSgpO1xyXG4gICAgICAgIGlmKGVsVG9rZW5UcmltZWFkbyBpbiByZWVtcGxhem9zSGFiaWxpdGFyKXtcclxuICAgICAgICAgICAgcmV0dXJuIHJlZW1wbGF6b3NIYWJpbGl0YXJbZWxUb2tlblRyaW1lYWRvXTtcclxuICAgICAgICB9ZWxzZSBpZigvXlxcZCtcXC4/XFxkKiQvLnRlc3QoZWxUb2tlblRyaW1lYWRvKSl7XHJcbiAgICAgICAgICAgIHJldHVybiBlbFRva2VuXHJcbiAgICAgICAgfWVsc2UgaWYoL15cXFcrJC8udGVzdChlbFRva2VuVHJpbWVhZG8pKXtcclxuICAgICAgICAgICAgcmV0dXJuIGVsVG9rZW5cclxuICAgICAgICB9ZWxzZSBpZigvXlxccyskLy50ZXN0KGVsVG9rZW4pKXtcclxuICAgICAgICAgICAgcmV0dXJuIGVsVG9rZW5cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuICdoZWxwZXJzLm51bGwyemVybyh2YWxvcmVzLicrZWxUb2tlbisnKSc7XHJcbiAgICB9KTtcclxuICAgIHJldHVybiBjdWVycG87XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRGdW5jaW9uQ29tcGlsYWRhPFQ+KGNvbmp1bnRvRGVGdW5jaW9uZXM6e1trZXk6c3RyaW5nXToodmFsb3Jlczp7W2tleTpzdHJpbmddOmFueX0pPT5UfSl7XHJcbiAgICByZXR1cm4gZnVuY3Rpb24obm9tYnJlRnVuY2lvbkNvbW9FeHByZXNpb25KczpzdHJpbmcpe1xyXG4gICAgICAgIGlmKCFjb25qdW50b0RlRnVuY2lvbmVzW25vbWJyZUZ1bmNpb25Db21vRXhwcmVzaW9uSnNdKXtcclxuICAgICAgICAgICAgdmFyIGN1ZXJwbyA9IG5vbWJyZUZ1bmNpb25Db21vRXhwcmVzaW9uSnM7XHJcbiAgICAgICAgICAgIHRyeXtcclxuICAgICAgICAgICAgICAgIC8vIHZhciBjdWVycG8gPSBtaW5pQ29tcGlsYWRvclNRbEpzKG5vbWJyZUZ1bmNpb25Db21vRXhwcmVzaW9uSnMpO1xyXG4gICAgICAgICAgICAgICAgdmFyIGludGVybmFsRnVuID0gIG5ldyBGdW5jdGlvbigndmFsb3JlcycsICdoZWxwZXJzJywgJ3JldHVybiAnK2N1ZXJwbyk7XHJcbiAgICAgICAgICAgICAgICBjb25qdW50b0RlRnVuY2lvbmVzW25vbWJyZUZ1bmNpb25Db21vRXhwcmVzaW9uSnNdID0gZnVuY3Rpb24odmFsb3Jlcyl7XHJcbiAgICAgICAgICAgICAgICAgICAgdHJ5e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVzdWx0ID0gaW50ZXJuYWxGdW4odmFsb3JlcywgaGVscGVyc0Nhc2lsbGVyb3MpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1jYXRjaChlcnIpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnRVJST1IgRUpFQ1VDQ0lPTiBFWFBSRVNJT04gRVhURVJOQSAnLG5vbWJyZUZ1bmNpb25Db21vRXhwcmVzaW9uSnMpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGN1ZXJwbyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKHZhbG9yZXMpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBlcnI7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1jYXRjaChlcnIpe1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ0VSUk9SIENPTVBJTEFDSU9OIEVYUFJFU0lPTiBFWFRFUk5BICcsbm9tYnJlRnVuY2lvbkNvbW9FeHByZXNpb25KcylcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGN1ZXJwbyk7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBlcnI7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGNvbmp1bnRvRGVGdW5jaW9uZXNbbm9tYnJlRnVuY2lvbkNvbW9FeHByZXNpb25Kc107XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBjb25zdCBnZXRGdW5jaW9uSGFiaWxpdGFyID0gZ2V0RnVuY2lvbkNvbXBpbGFkYShmdW5jaW9uZXNIYWJpbGl0YXIpO1xyXG5leHBvcnQgY29uc3QgZ2V0RnVuY2lvblZhbG9yYXIgICA9IGdldEZ1bmNpb25Db21waWxhZGEoZnVuY2lvbmVzVmFsb3Jhcik7XHJcblxyXG5cclxudmFyIHJvd1ZhbGlkYXRvciA9IGdldFJvd1ZhbGlkYXRvcjxJZFZhcmlhYmxlLCBWYWxvciwgSWRGaW4+KHtnZXRGdW5jaW9uSGFiaWxpdGFyLCBnZXRGdW5jaW9uVmFsb3Jhcn0pXHJcbmV4cG9ydCB2YXIgYnVzY2FyTm9SZWFFblJlc3B1ZXN0YXMgPSAodW5pZGFkZXNBUmVjb3JyZXJQcm06SWRVbmlkYWRBbmFsaXNpc1tdLHVuaWRhZEFuYWxpc2lzOlVuaWRhZEFuYWxpc2lzLCByZXNwdWVzdGFzOlJlc3B1ZXN0YXMsbm9SZWFzVGFyZWE6e31bXSxub21iTm9SZWE6c3RyaW5nKVxyXG46e25yb2NvZGlnbzpzdHJpbmd8bnVsbCwgZXNWYWxvcjpib29sZWFufT0+e1xyXG4gICAgdmFyIG5yY29kaWdvOnN0cmluZ3xudWxsPSBudWxsO1xyXG4gICAgdmFyIGVzdmFsb3I9ZmFsc2U7XHJcbiAgICB2YXIgcnZhbG9yOnN0cmluZ3xudWxsPW51bGw7XHJcbiAgICB2YXIgcnZhcmlhYmxlOnN0cmluZztcclxuICAgIHZhciBybm9yZWE6c3RyaW5nfG51bGw9bnVsbDtcclxuICAgLy8gdmFyIHJlc3VsdD17bnJjb2Q6U3RyaW5nLCBlc3ZhbDpCb29sZWFufTtcclxuICAgIGlmKHVuaWRhZGVzQVJlY29ycmVyUHJtLmluY2x1ZGVzKHVuaWRhZEFuYWxpc2lzLnVuaWRhZF9hbmFsaXNpcykpe1xyXG4gICAgICAgIGZvcihsZXQgbm9SZWEgb2Ygbm9SZWFzVGFyZWEpeyAvL2VzdHJ1Y3R1cmEubm9SZWFzLCBlc3RydWN0dXJhLm5vUmVhc1N1cFxyXG4gICAgICAgICAgICBpZiAobm9tYk5vUmVhPT0nbm9fcmVhJyl7XHJcbiAgICAgICAgICAgICAgICB2YXIge3ZhcmlhYmxlICwgdmFsb3IsIG5vX3JlYX0gPSBub1JlYTtcclxuICAgICAgICAgICAgICAgIHJub3JlYT1ub19yZWE7XHJcbiAgICAgICAgICAgICAgICBydmFsb3I9dmFsb3I7XHJcbiAgICAgICAgICAgICAgICBydmFyaWFibGU9dmFyaWFibGU7XHJcbiAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgdmFyIHt2YXJpYWJsZV9zdXAgLCB2YWxvcl9zdXAsIG5vX3JlYV9zdXB9ID0gbm9SZWE7XHJcbiAgICAgICAgICAgICAgICBybm9yZWE9bm9fcmVhX3N1cDtcclxuICAgICAgICAgICAgICAgIHJ2YWxvcj12YWxvcl9zdXA7XHJcbiAgICAgICAgICAgICAgICBydmFyaWFibGU9dmFyaWFibGVfc3VwO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmKHJlc3B1ZXN0YXNbcnZhcmlhYmxlIGFzIElkVmFyaWFibGVdPT1ydmFsb3Ipe1xyXG4gICAgICAgICAgICAgICAgbnJjb2RpZ28gPXJub3JlYTsgIC8vbm9fcmVhLCBub19yZWFfc3VwXHJcbiAgICAgICAgICAgICAgICBlc3ZhbG9yID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIHJldHVybiB7bnJjb2RpZ28sZXN2YWxvcn1cclxuICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICBucmNvZGlnbz1udWxsO1xyXG4gICAgICAgICAgICAgICAgZXN2YWxvcj1mYWxzZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGZvcihsZXQgdWEgb2YgKGxpa2VBcih1bmlkYWRBbmFsaXNpcz8uaGlqYXMpLmFycmF5KCkpKXtcclxuICAgICAgICBpZih1YT8udW5pZGFkX2FuYWxpc2lzICYmIHJlc3B1ZXN0YXNbdWEudW5pZGFkX2FuYWxpc2lzXSBpbnN0YW5jZW9mIEFycmF5KXtcclxuICAgICAgICAgICAgZm9yKGxldCByZXNwdWVzdGFzSGlqYXMgb2YgcmVzcHVlc3Rhc1t1YT8udW5pZGFkX2FuYWxpc2lzXSl7XHJcbiAgICAgICAgICAgICAgIGxldCByZXN1bHQ9IGJ1c2Nhck5vUmVhRW5SZXNwdWVzdGFzKHVuaWRhZGVzQVJlY29ycmVyUHJtLHVhLHJlc3B1ZXN0YXNIaWphcyxub1JlYXNUYXJlYSxub21iTm9SZWEpO1xyXG4gICAgICAgICAgICAgICAgaWYocmVzdWx0LmVzdmFsb3IgKXtcclxuICAgICAgICAgICAgICAgICAgICBucmNvZGlnbz1yZXN1bHQubnJjb2RpZ287XHJcbiAgICAgICAgICAgICAgICAgICAgZXN2YWxvcj1yZXN1bHQuZXN2YWxvcjtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4ge25yY29kaWdvLGVzdmFsb3J9XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICB9ZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbnJjb2RpZ289bnVsbDtcclxuICAgICAgICAgICAgICAgICAgICBlc3ZhbG9yPWZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgLy8gcmV0dXJuIHtucmNvZGlnbywgZXN2YWxvcn1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICByZXR1cm4ge25yY29kaWdvLCBlc3ZhbG9yfVxyXG4gfVxyXG5cclxuXHJcblxyXG5leHBvcnQgdmFyIGRlZk9wZXJhdGl2bzpEZWZPcGVyYXRpdm8gPSB7XHJcbiAgICBlc05vUmVhOihfcmVzcHVlc3RhczpSZXNwdWVzdGFzKT0+e1xyXG4gICAgICAgIC8vSU1QTEVNRU5UQVIgRU4gT1BFUkFUSVZPXHJcbiAgICAgICAgdmFyIGVzTm9SZWEgPSBmYWxzZTtcclxuICAgICAgICB2YXIgY29kTm9SZWE6c3RyaW5nfG51bGw9IG51bGw7XHJcbiAgICAgICAgcmV0dXJuIHtjb2ROb1JlYSwgZXNOb1JlYX07XHJcbiAgICAgICAgLy9FSkVNUExPIFBSRUpVXzIwMjJcclxuICAgICAgICAvL3ZhciB1bmlkYWRlc0FSZWNvcnJlciA9IFsndml2aWVuZGFzJywnaG9nYXJlcycsJ3BlcnNvbmFzJ10gYXMgSWRVbmlkYWRBbmFsaXNpc1tdO1xyXG4gICAgICAgIC8vdmFyIHVhUHJpbmNpcGFsID0gbGlrZUFyKGVzdHJ1Y3R1cmEudW5pZGFkZXNfYW5hbGlzaXMpLmZpbmQoKHVhKT0+IXVhLnBhZHJlKTtcclxuICAgICAgICAvL3ZhciBlc05vUmVhID0gZmFsc2U7XHJcbiAgICAgICAgLy92YXIgY29kTm9SZWE6c3RyaW5nfG51bGw9IG51bGw7XHJcbiAgICAgICAgLy8gIGxldCByZXNub3JlYSA9IGJ1c2Nhck5vUmVhRW5SZXNwdWVzdGFzKCB1bmlkYWRlc0FSZWNvcnJlcix1YVByaW5jaXBhbCEscmVzcHVlc3Rhcyxlc3RydWN0dXJhLm5vUmVhcywnbm9fcmVhJyk7XHJcbiAgICAgICAgLy9jb2ROb1JlYT1yZXNub3JlYS5ucmNvZGlnbztcclxuICAgICAgICAvL2VzTm9SZWE9cmVzbm9yZWEuZXN2YWxvcjtcclxuICAgICAgICAvL3JldHVybiB7Y29kTm9SZWEsIGVzTm9SZWF9O1xyXG4gICAgfSxcclxuICAgZXNOb1JlYVN1cDooX3Jlc3B1ZXN0YXM6UmVzcHVlc3Rhcyk9PntcclxuICAgICAgICAvL0lNUExFTUVOVEFSIEVOIE9QRVJBVElWT1xyXG4gICAgICAgIHZhciBlc05vUmVhU3VwID0gZmFsc2U7XHJcbiAgICAgICAgdmFyIGNvZE5vUmVhU3VwOnN0cmluZ3xudWxsPSBudWxsO1xyXG4gICAgICAgIHJldHVybiB7Y29kTm9SZWFTdXAsZXNOb1JlYVN1cH1cclxuICAgICAgICAvL0VKRU1QTE8gUFJFSlVfMjAyMlxyXG4gICAgICAgIC8vVE9ETyBHRU5FUkFMSVpBUiBidXNjYXJOb3JlYVJlc3B1ZXN0YXNcclxuICAgICAgIC8vdmFyIHVuaWRhZGVzQVJlY29ycmVyU3VwID0gWyd2aXZpZW5kYXMnLCdob2dhcmVzX3N1cCcsJ3BlcnNvbmFzX3N1cCddIGFzIElkVW5pZGFkQW5hbGlzaXNbXTtcclxuICAgICAgIC8vdmFyIHVhUHJpbmNpcGFsID0gbGlrZUFyKGVzdHJ1Y3R1cmEudW5pZGFkZXNfYW5hbGlzaXMpLmZpbmQoKHVhKT0+IXVhLnBhZHJlKTtcclxuICAgICAgIC8vdmFyIGVzTm9SZWFTdXAgPSBmYWxzZTtcclxuICAgICAgIC8vdmFyIGNvZE5vUmVhU3VwOnN0cmluZ3xudWxsPSBudWxsO1xyXG4gICAgICAgLy9sZXQgcmVzbm9yZWEgPWJ1c2Nhck5vUmVhRW5SZXNwdWVzdGFzKCB1bmlkYWRlc0FSZWNvcnJlclN1cCx1YVByaW5jaXBhbCEscmVzcHVlc3Rhcyxlc3RydWN0dXJhLm5vUmVhc1N1cCwnbm9fcmVhX3N1cCcpOy8vY29uIGxvcyBwYXJhbWV0cm9zIHF1ZSBuZWNlc2l0YXJpYW1vcyBwYXJhIGdlbmVyYWxpemFyXHJcbiAgICAgICAvLyAgY29kTm9SZWFTdXA9cmVzbm9yZWEubnJjb2RpZ287XHJcbiAgICAgICAvLyAgZXNOb1JlYVN1cD1yZXNub3JlYS5lc3ZhbG9yO1xyXG4gICAgICAgLy9yZXR1cm4ge2NvZE5vUmVhU3VwLGVzTm9SZWFTdXB9XHJcbiAgICB9LFxyXG4gICAgZXNSZWFsaXphZGE6KF9yZXNwdWVzdGFzOlJlc3B1ZXN0YXMpPT57XHJcbiAgICAgICAgLy9JTVBMRU1FTlRBUiBFTiBPUEVSQVRJVk9cclxuICAgICAgICB2YXIgZXNSZWEgPSBmYWxzZTtcclxuICAgICAgICB2YXIgY29kUmVhOnN0cmluZ3xudWxsPSBudWxsO1xyXG4gICAgICAgIHJldHVybiB7Y29kUmVhLGVzUmVhfVxyXG4gICAgICAgIC8vRUpFTVBMTyBQUkVKVV8yMDIyXHJcbiAgICAgICAgLy92YXIgZXNSZWEgPSBmYWxzZTtcclxuICAgICAgICAvL3ZhciBjb2RSZWE6bnVtYmVyfG51bGw9IG51bGw7XHJcbiAgICAgICAgLy9pZighcmVzcHVlc3Rhc1snaWRlbnRpZicgYXMgSWRWYXJpYWJsZV0pe1xyXG4gICAgICAgIC8vICAgIHJldHVybiB7Y29kUmVhLCBlc1JlYX1cclxuICAgICAgICAvL31lbHNlIGlmKHJlc3B1ZXN0YXNbJ2lkZW50aWYnIGFzIElkVmFyaWFibGVdPT0yIHx8cmVzcHVlc3Rhc1sncmVzaWRfaG9nJyBhcyBJZFZhcmlhYmxlXT09Mnx8cmVzcHVlc3Rhc1snY29udGFjdCcgYXMgSWRWYXJpYWJsZV09PTIpe1xyXG4gICAgICAgIC8vICAgIGNvZFJlYSA9IDI7XHJcbiAgICAgICAgLy8gICAgZXNSZWEgPSBmYWxzZTtcclxuICAgICAgICAvL31lbHNle1xyXG4gICAgICAgIC8vICAgIHZhciByZWFoczogbnVtYmVyW109W10gO1xyXG4gICAgICAgIC8vICAgIHZhciByZXNwdWVzdGFzSHMgPSByZXNwdWVzdGFzWydob2dhcmVzJ107XHJcbiAgICAgICAgLy8gICAgaWYocmVzcHVlc3Rhc0hzKXtcclxuICAgICAgICAvLyAgICAgICAgZm9yKGxldCByZXNwdWVzdGFzSCBvZiByZXNwdWVzdGFzSHMpe1xyXG4gICAgICAgIC8vICAgICAgICAgICAgdmFyIHJlYWg6bnVtYmVyO1xyXG4gICAgICAgIC8vICAgICAgICAgICAgdmFyIHNlbGVjOm51bWJlcjtcclxuICAgICAgICAvLyAgICAgICAgICAgIGlmKHJlc3B1ZXN0YXNIWydlbnRyZWEnIF0gIT0gMXx8cmVzcHVlc3Rhc0hbJ3ByZWp1ZTEnXT09Mnx8cmVzcHVlc3Rhc0hbJ3RwJ109PTApe1xyXG4gICAgICAgIC8vICAgICAgICAgICAgICAgIHJlYWg9MjtcclxuICAgICAgICAvLyAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgIC8vICAgICAgICAgICAgICAgIHNlbGVjPXJlc3B1ZXN0YXNIWydjcl9udW1fbWllbWJybyddXHJcbiAgICAgICAgLy8gICAgICAgICAgICAgICAgaWYocmVzcHVlc3Rhc0hbJ3BlcnNvbmFzJ10gJiYgcmVzcHVlc3Rhc0gucGVyc29uYXNbc2VsZWMtMV0gKXtcclxuICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgdmFyIHJlc3B1ZXN0YXNQID0gcmVzcHVlc3Rhc0gucGVyc29uYXNbc2VsZWMtMV07XHJcbiAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgIHZhciByZXNwX2VudHJlYV9pbmQgPSByZXNwdWVzdGFzUFsnZW50cmVhaW5kJyBhcyBJZFZhcmlhYmxlIF07XHJcbiAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgIGlmKHJlc3BfZW50cmVhX2luZD09bnVsbCl7IC8vcXVlcmVtb3MgY29udGVtcGxhciBlbCB1bmRlZmluZWRcclxuICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgIHJlYWggPSAzO1xyXG4gICAgICAgIC8vICAgICAgICAgICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgIHJlYWggPSBOdW1iZXIocmVzcF9lbnRyZWFfaW5kKTtcclxuICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgIC8vICAgICAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgIC8vICAgICAgICAgICAgICAgICAgICByZWFoID0gMztcclxuICAgICAgICAvLyAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgLy8gICAgICAgICAgICB9XHJcbiAgICAgICAgLy8gICAgICAgICAgICByZWFocy5wdXNoKHJlYWgpO1xyXG4gICAgICAgIC8vICAgICAgICB9XHJcbiAgICAgICAgLy8gICAgICAgIGlmIChyZWFocy5ldmVyeShyaD0+cmg9PTEpKXtcclxuICAgICAgICAvLyAgICAgICAgICAgIGNvZFJlYSA9IDE7XHJcbiAgICAgICAgLy8gICAgICAgICAgICBlc1JlYSA9IHRydWU7XHJcbiAgICAgICAgLy8gICAgICAgIH1lbHNlIGlmKHJlYWhzLmV2ZXJ5KHJoPT5yaD09Mikpe1xyXG4gICAgICAgIC8vICAgICAgICAgICAgY29kUmVhID0gMjtcclxuICAgICAgICAvLyAgICAgICAgICAgIGVzUmVhID0gZmFsc2U7XHJcbiAgICAgICAgLy8gICAgICAgIH1lbHNlIGlmKHJlYWhzLmV2ZXJ5KHJoPT5yaD09MXx8cmg9PTMpKXtcclxuICAgICAgICAvLyAgICAgICAgICAgIGNvZFJlYSA9IDM7XHJcbiAgICAgICAgLy8gICAgICAgICAgICBlc1JlYSA9IGZhbHNlO1xyXG4gICAgICAgIC8vICAgICAgICB9ZWxzZXtcclxuICAgICAgICAvLyAgICAgICAgICAgIGNvZFJlYSA9IDQ7XHJcbiAgICAgICAgLy8gICAgICAgICAgICBlc1JlYSA9IGZhbHNlO1xyXG4gICAgICAgIC8vICAgICAgICB9XHJcbiAgICAgICAgLy8gICAgfSBlbHNle1xyXG4gICAgICAgIC8vICAgICAgICBjb2RSZWEgPSAzO1xyXG4gICAgICAgIC8vICAgICAgICBlc1JlYSA9IGZhbHNlO1xyXG4gICAgICAgIC8vICAgIH1cclxuICAgICAgICAvL31cclxuICAgICAgICAvL3JldHVybiB7Y29kUmVhLGVzUmVhfVxyXG4gICAgfSxcclxuICAgIGVzUmVhbGl6YWRhU3VwOihfcmVzcHVlc3RhczpSZXNwdWVzdGFzKT0+e1xyXG4gICAgICAgIC8vSU1QTEVNRU5UQVIgRU4gT1BFUkFUSVZPXHJcbiAgICAgICAgdmFyIGVzUmVhU3VwID0gZmFsc2U7XHJcbiAgICAgICAgdmFyIGNvZFJlYVN1cDpudW1iZXJ8bnVsbD0gbnVsbDtcclxuICAgICAgICByZXR1cm4ge2NvZFJlYVN1cCxlc1JlYVN1cH1cclxuICAgICAgICAvL0VKRU1QTE8gUFJFSlVfMjAyMlxyXG4gICAgICAgIC8vVE9ETyBHRU5FUkFMSVpBUiBcclxuICAgICAgICAvL3ZhciBlc1JlYVN1cCA9IGZhbHNlO1xyXG4gICAgICAgIC8vdmFyIGNvZFJlYVN1cDpudW1iZXJ8bnVsbD0gbnVsbDtcclxuICAgICAgICAvL2lmKCFyZXNwdWVzdGFzWydjb25maXJfdGVsX3N1cCcgYXMgSWRWYXJpYWJsZV0gJiYgIXJlc3B1ZXN0YXNbJ3NwMWEnIGFzIElkVmFyaWFibGVdKXtcclxuICAgICAgICAvLyAgICByZXR1cm4ge2NvZFJlYVN1cCwgZXNSZWFTdXB9XHJcbiAgICAgICAgLy99ZWxzZSBpZiggcmVzcHVlc3Rhc1snY29uZmlyX3RlbF9zdXAnIGFzIElkVmFyaWFibGVdPT0yIHx8IHJlc3B1ZXN0YXNbJ2NvbmZpcl9kb21fc3VwJyBhcyBJZFZhcmlhYmxlXT09Mnx8cmVzcHVlc3Rhc1snc3AxYScgYXMgSWRWYXJpYWJsZV09PTIgfHxyZXNwdWVzdGFzWydzcDFiJyBhcyBJZFZhcmlhYmxlXT09Mnx8cmVzcHVlc3Rhc1snc3AxYycgYXMgSWRWYXJpYWJsZV09PTIpe1xyXG4gICAgICAgIC8vICAgIGNvZFJlYVN1cCA9IDI7XHJcbiAgICAgICAgLy8gICAgZXNSZWFTdXAgPSBmYWxzZTtcclxuICAgICAgICAvL31lbHNle1xyXG4gICAgICAgIC8vICAgIHZhciByZWFoczogbnVtYmVyW109W10gO1xyXG4gICAgICAgIC8vICAgIHZhciByZXNwdWVzdGFzSHMgPSByZXNwdWVzdGFzWydob2dhcmVzX3N1cCddO1xyXG4gICAgICAgIC8vICAgIGlmKHJlc3B1ZXN0YXNIcyl7XHJcbiAgICAgICAgLy8gICAgICAgIGZvcihsZXQgcmVzcHVlc3Rhc0ggb2YgcmVzcHVlc3Rhc0hzKXtcclxuICAgICAgICAvLyAgICAgICAgICAgIHZhciByZWFoOm51bWJlcjtcclxuICAgICAgICAvLyAgICAgICAgICAgIHZhciBzZWxlYzpudW1iZXI7XHJcbiAgICAgICAgLy8gICAgICAgICAgICBpZihyZXNwdWVzdGFzSFsnZW50cmVhX3N1cCcgXSA9PSAyfHxyZXNwdWVzdGFzSFsnc3ByMV9zdXAnXT09Mnx8cmVzcHVlc3Rhc0hbJ3NwNCddPT0zfHxyZXNwdWVzdGFzSFsndG90YWxfcmFuZ29fc3VwJ109PTApe1xyXG4gICAgICAgIC8vICAgICAgICAgICAgICAgIHJlYWg9MjtcclxuICAgICAgICAvLyAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgIC8vICAgICAgICAgICAgICAgIGlmKHJlc3B1ZXN0YXNIWydlbnRyZWFfc3VwJyBdKXtcclxuICAgICAgICAvLyAgICAgICAgICAgICAgICAgICByZWFoID0gMTtcclxuICAgICAgICAvLyAgICAgICAgICAgICAgICB9ZWxzZSB7XHJcbiAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgcmVhaD0zO1xyXG4gICAgICAgIC8vICAgICAgICAgICAgICAgIH0gICAgIFxyXG4gICAgICAgIC8vICAgICAgICAgICAgfVxyXG4gICAgICAgIC8vICAgICAgICAgICAgcmVhaHMucHVzaChyZWFoKTtcclxuICAgICAgICAvLyAgICAgICAgfVxyXG4gICAgICAgIC8vICAgICAgICBpZiAocmVhaHMuZXZlcnkocmg9PnJoPT0xKSl7XHJcbiAgICAgICAgLy8gICAgICAgICAgICBjb2RSZWFTdXAgPSAxO1xyXG4gICAgICAgIC8vICAgICAgICAgICAgZXNSZWFTdXAgPSB0cnVlO1xyXG4gICAgICAgIC8vICAgICAgICB9ZWxzZSBpZihyZWFocy5ldmVyeShyaD0+cmg9PTIpKXtcclxuICAgICAgICAvLyAgICAgICAgICAgIGNvZFJlYVN1cCA9IDI7XHJcbiAgICAgICAgLy8gICAgICAgICAgICBlc1JlYVN1cCA9IGZhbHNlO1xyXG4gICAgICAgIC8vICAgICAgICB9ZWxzZSBpZihyZWFocy5ldmVyeShyaD0+cmg9PTF8fHJoPT0zKSl7XHJcbiAgICAgICAgLy8gICAgICAgICAgICBjb2RSZWFTdXAgPSAzO1xyXG4gICAgICAgIC8vICAgICAgICAgICAgZXNSZWFTdXAgPSBmYWxzZTtcclxuICAgICAgICAvLyAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgLy8gICAgICAgICAgICBjb2RSZWFTdXAgPSA0O1xyXG4gICAgICAgIC8vICAgICAgICAgICAgZXNSZWFTdXAgPSBmYWxzZTtcclxuICAgICAgICAvLyAgICAgICAgfVxyXG4gICAgICAgIC8vICAgIH0gZWxzZXtcclxuICAgICAgICAvLyAgICAgICAgY29kUmVhU3VwID0gMztcclxuICAgICAgICAvLyAgICAgICAgZXNSZWFTdXAgPSBmYWxzZTtcclxuICAgICAgICAvLyAgICB9XHJcbiAgICAgICAgLy99XHJcbiAgICAgICAgLy9yZXR1cm4ge2NvZFJlYVN1cCxlc1JlYVN1cH1cclxuICAgIH0sXHJcbiAgICBVQXByaW5jaXBhbDonJyBhcyBJZFVuaWRhZEFuYWxpc2lzLFxyXG4gICAgZGVmVUE6e30gYXMge1tpIGluIElkVW5pZGFkQW5hbGlzaXNdOntwazpJZFZhcmlhYmxlLCBpbmNsdWlkYXM6SWRVbmlkYWRBbmFsaXNpc1tdLCBpZHNGb3I6SWRGb3JtdWxhcmlvW119fSxcclxuICAgIGRlZkZvcjp7fSBhcyB7W2YgaW4gSWRGb3JtdWxhcmlvXTp7LyphcmJvbFVBOklkVW5pZGFkQW5hbGlzaXNbXSwgKi8gaGVybWFubz86dHJ1ZX19XHJcbn1cclxuLy8vLy8gQUJBSk8gZGUgZXN0YSBsw61uZWEgbm8gcHVlZGUgaGFiZXIgb3Ryb3Mgbm9tYnJlcyBkZSB2YXJpYWJsZXMgbyBmb3JtdWxhcmlvcyBvIGNhc2lsbGVyb3MgZW4gZ2VuZXJhbFxyXG5cclxuXHJcbmV4cG9ydCB2YXIgc2V0Q2FsY3Vsb1JlYU5vUmVhID0gKFxyXG4gICAgZXNOb1JlYToocmVzcHVlc3RhczpSZXNwdWVzdGFzKT0+IHtjb2ROb1JlYTpzdHJpbmd8bnVsbCwgZXNOb1JlYTpib29sZWFufSxcclxuICAgIGVzTm9SZWFTdXA6KHJlc3B1ZXN0YXM6UmVzcHVlc3Rhcyk9PiB7Y29kTm9SZWFTdXA6c3RyaW5nfG51bGwsIGVzTm9SZWFTdXA6Ym9vbGVhbn0sXHJcbiAgICBlc1JlYWxpemFkYToocmVzcHVlc3RhczpSZXNwdWVzdGFzKT0+IHtjb2RSZWE6bnVtYmVyfG51bGwsIGVzUmVhOmJvb2xlYW59LFxyXG4gICAgZXNSZWFsaXphZGFTdXA6KHJlc3B1ZXN0YXM6UmVzcHVlc3Rhcyk9PiB7Y29kUmVhU3VwOm51bWJlcnxudWxsLCBlc1JlYVN1cDpib29sZWFufVxyXG4pPT57XHJcbiAgICBkZWZPcGVyYXRpdm8gPSB7XHJcbiAgICAgICAgLi4uZGVmT3BlcmF0aXZvLFxyXG4gICAgICAgIGVzTm9SZWEsXHJcbiAgICAgICAgZXNOb1JlYVN1cCxcclxuICAgICAgICBlc1JlYWxpemFkYSxcclxuICAgICAgICBlc1JlYWxpemFkYVN1cFxyXG4gICAgfVxyXG59XHJcblxyXG4vLyBUT0RPOiBHRU5FUkFMSVpBUlxyXG50eXBlIFBlcnNvbmE9e3AxOnN0cmluZywgcDI6bnVtYmVyLCBwMzpudW1iZXIsIHA0Om51bWJlcnxudWxsLCBwNToxfG51bGwsIHA2OjF8bnVsbH1cclxuXHJcbmZ1bmN0aW9uIG51bShudW06bnVtYmVyfHN0cmluZ3xudWxsKTpudW1iZXJ7XHJcbiAgICAvL0B0cy1pZ25vcmUgbGEgZ3JhY2lhIGVzIG1ldGVyIG51bSBjdWFuZG8gZXMgc3RyaW5nXHJcbiAgICBpZihpc05hTihudW0tMCkpIHJldHVybiAwO1xyXG4gICAgLy9AdHMtaWdub3JlIGxhIGdyYWNpYSBlcyBtZXRlciBudW0gY3VhbmRvIGVzIHN0cmluZ1xyXG4gICAgcmV0dXJuIG51bS0wO1xyXG59XHJcblxyXG52YXIgZnVuY2lvbmVzQ29ub2NpZGFzOntbayBpbiBzdHJpbmddOmJvb2xlYW59ID0ge31cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiB2ZXJpZmljYXJTb3J0ZW8ob3B0czp7XHJcbiAgICBjb25maWd1cmFjaW9uU29ydGVvOkNvbmZpZ3VyYWNpb25Tb3J0ZW9Gb3JtdWxhcmlvLCBcclxuICAgIHJlc3B1ZXN0YXM6UmVzcHVlc3RhcyxcclxuICAgIHJlc3B1ZXN0YXNSYWl6OiBSZXNwdWVzdGFzUmFpelxyXG4gICAgZm9yUGs6Rm9yUGssXHJcbiAgICB2YXJpYWJsZUFjdHVhbDpJZFZhcmlhYmxlXHJcblxyXG59KXtcclxuICAgIGNvbnN0IHJlc2V0ZWFyU29ydGVvID0gKG9wdHM6e3Jlc3B1ZXN0YXM6UmVzcHVlc3Rhc30pPT57XHJcbiAgICAgICAgdmFyIHtyZXNwdWVzdGFzfSA9IG9wdHM7XHJcbiAgICAgICAgcmVzcHVlc3Rhc1tjb25maWd1cmFjaW9uU29ydGVvLnJlc3VsdGFkb109bnVsbDtcclxuICAgICAgICByZXNwdWVzdGFzW2NvbmZpZ3VyYWNpb25Tb3J0ZW8uY2FudGlkYWRfc29ydGVhYmxlc109bnVsbDtcclxuICAgICAgICByZXNwdWVzdGFzW2NvbmZpZ3VyYWNpb25Tb3J0ZW8uZGlzcGFyYWRvcl0gPSBudWxsO1xyXG4gICAgICAgIGNvbmZpZ3VyYWNpb25Tb3J0ZW8uc29ydGVhZG9fbW9zdHJhcj8uZm9yRWFjaCgobW9zdHJhcik9PnJlc3B1ZXN0YXNbbW9zdHJhci50YXJnZXRdPW51bGwpO1xyXG4gICAgICAgIGlmKCd2YXJfbGV0cmEnIGluIGNvbmZpZ3VyYWNpb25Tb3J0ZW8ucGFyYW1fbWV0b2RvKXtcclxuICAgICAgICAgICAgaWYocmVzcHVlc3Rhc1t1bmlkYWRBbmFsaXNpc10gJiYgcmVzcHVlc3Rhc1t1bmlkYWRBbmFsaXNpc10gaW5zdGFuY2VvZiBBcnJheSl7XHJcbiAgICAgICAgICAgICAgICBmb3IodmFyIHBlciBvZiByZXNwdWVzdGFzW3VuaWRhZEFuYWxpc2lzXSl7XHJcbiAgICAgICAgICAgICAgICAgICAgcGVyW2NvbmZpZ3VyYWNpb25Tb3J0ZW8ucGFyYW1fbWV0b2RvLnZhcl9sZXRyYV0gPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHZhciB7Y29uZmlndXJhY2lvblNvcnRlbywgdmFyaWFibGVBY3R1YWwsIHJlc3B1ZXN0YXMsIGZvclBrLCByZXNwdWVzdGFzUmFpen0gPSBvcHRzO1xyXG4gICAgdmFyIGlkRW5jID0gZm9yUGsudml2aWVuZGEhO1xyXG4gICAgdmFyIHtyZXNwdWVzdGFzQXVtZW50YWRhc30gPSByZXNwdWVzdGFzRm9yUGsoZm9yUGssIHRydWUpO1xyXG4gICAgdmFyIGV4cHJfaW5jb21wbGV0aXR1ZF9mdW4gPSBnZXRGdW5jaW9uSGFiaWxpdGFyKGNvbmZpZ3VyYWNpb25Tb3J0ZW8uZXhwcl9pbmNvbXBsZXRpdHVkX2pzW3Jlc3B1ZXN0YXNBdW1lbnRhZGFzLnZkb21pbmlvXS5leHByKTtcclxuICAgIHZhciBmaWx0cm9fZnVuID0gIGdldEZ1bmNpb25IYWJpbGl0YXIoY29uZmlndXJhY2lvblNvcnRlby5maWx0cm9fanNbcmVzcHVlc3Rhc0F1bWVudGFkYXMudmRvbWluaW9dLmV4cHIpO1xyXG4gICAgdmFyIHVuaWRhZEFuYWxpc2lzID0gY29uZmlndXJhY2lvblNvcnRlby51bmlkYWRfYW5hbGlzaXM7XHJcblxyXG4gICAgaWYoY29uZmlndXJhY2lvblNvcnRlby5wYXJhbWV0cm9zLmluY2x1ZGVzKHZhcmlhYmxlQWN0dWFsKSl7XHJcbiAgICAgICAgdmFyIHVhUGFkcmUgPSBsaWtlQXIoZXN0cnVjdHVyYS51bmlkYWRlc19hbmFsaXNpcykuZmluZCgodWEpPT51YS51bmlkYWRfYW5hbGlzaXM9PXVuaWRhZEFuYWxpc2lzKT8ucGFkcmU7XHJcbiAgICAgICAgdmFyIHBrQWdyZWdhZGFQYWRyZSA9IGxpa2VBcihlc3RydWN0dXJhLnVuaWRhZGVzX2FuYWxpc2lzKS5maW5kKCh1YSk9PnVhLnVuaWRhZF9hbmFsaXNpcz09dWFQYWRyZSk/LnBrX2FncmVnYWRhXHJcbiAgICAgICAgaWYodWFQYWRyZSAmJiByZXNwdWVzdGFzQXVtZW50YWRhc1t1YVBhZHJlXSl7XHJcbiAgICAgICAgICAgIC8vQHRzLWlnbm9yZSBwa0FncmVnYWRhUGFkcmUgZXhpc3RlIGUgaW5kaWNhIGxhIHBvc2ljaW9uIGRlbCBwYWRyZVxyXG4gICAgICAgICAgICB2YXIgcGFkcmUgPSByZXNwdWVzdGFzQXVtZW50YWRhc1t1YVBhZHJlXVtOdW1iZXIocmVzcHVlc3Rhc0F1bWVudGFkYXNbcGtBZ3JlZ2FkYVBhZHJlXSktMV07XHJcbiAgICAgICAgICAgIGlmKHZhcmlhYmxlQWN0dWFsICE9IGNvbmZpZ3VyYWNpb25Tb3J0ZW8uY2FudGlkYWRfdG90YWwpe1xyXG4gICAgICAgICAgICAgICAgcGFkcmVbY29uZmlndXJhY2lvblNvcnRlby5jYW50aWRhZF90b3RhbF09cGFkcmVbdW5pZGFkQW5hbGlzaXNdLmxlbmd0aDsgLy9zaSBhZ3JlZ2EgZGVzZGUgYm90b24gYWdyZWdhclxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJlc2V0ZWFyU29ydGVvKHtyZXNwdWVzdGFzOnBhZHJlfSk7XHJcbiAgICAgICAgICAgIHJlc3B1ZXN0YXMgPSBwYWRyZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBpZihyZXNwdWVzdGFzW3VuaWRhZEFuYWxpc2lzXSAhPSBudWxsKXtcclxuICAgICAgICBpZihyZXNwdWVzdGFzW3VuaWRhZEFuYWxpc2lzXSBpbnN0YW5jZW9mIEFycmF5KXtcclxuICAgICAgICAgICAgdmFyIHJlc3B1ZXN0YXNVQSA9IHJlc3B1ZXN0YXNbdW5pZGFkQW5hbGlzaXNdIGFzIFJlc3B1ZXN0YXNbXVxyXG4gICAgICAgICAgICBpZihyZXNwdWVzdGFzW2NvbmZpZ3VyYWNpb25Tb3J0ZW8uZGlzcGFyYWRvcl0hPTEpe1xyXG4gICAgICAgICAgICAgICAgaWYocmVzcHVlc3Rhc1tjb25maWd1cmFjaW9uU29ydGVvLmRpc3BhcmFkb3JdPT0yKXtcclxuICAgICAgICAgICAgICAgICAgICByZXNwdWVzdGFzW2NvbmZpZ3VyYWNpb25Tb3J0ZW8uY2FudGlkYWRfdG90YWxdPXJlc3B1ZXN0YXNVQS5sZW5ndGggKyAxXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXNldGVhclNvcnRlbyh7cmVzcHVlc3Rhc30pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGxldCBjYW50aWRhZFRvdGFsID0gTnVtYmVyKHJlc3B1ZXN0YXNbY29uZmlndXJhY2lvblNvcnRlby5jYW50aWRhZF90b3RhbF0pO1xyXG4gICAgICAgICAgICBpZihjYW50aWRhZFRvdGFsPHJlc3B1ZXN0YXNVQS5sZW5ndGgpe1xyXG4gICAgICAgICAgICAgICAgLy8gZG9ibGUgYXNpZ25hY2nDs24gcGFyYSBxdWUgbG8gY2FyZ3VlIGVuIHJlc3B1ZXN0YXNcclxuICAgICAgICAgICAgICAgIHJlc3B1ZXN0YXNVQSA9IHJlc3B1ZXN0YXNVQS5maWx0ZXIoKHAsaSk9PlxyXG4gICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYWNpb25Tb3J0ZW8ucGFyYW1ldHJvcy5zb21lKChwYXJhbSk9PnBbcGFyYW1dIHx8IGkgPD0gY2FudGlkYWRUb3RhbC0xKVxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgIHJlc3B1ZXN0YXNbdW5pZGFkQW5hbGlzaXNdID0gcmVzcHVlc3Rhc1VBXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgd2hpbGUoY2FudGlkYWRUb3RhbD5yZXNwdWVzdGFzVUEubGVuZ3RoKXtcclxuICAgICAgICAgICAgICAgIHJlc3B1ZXN0YXNVQS5wdXNoKHt9IGFzIFJlc3B1ZXN0YXMpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIHJlc3B1ZXN0YXNbY29uZmlndXJhY2lvblNvcnRlby5pbmNvbXBsZXRhc10gPSByZXNwdWVzdGFzVUEuZmlsdGVyKHA9PmV4cHJfaW5jb21wbGV0aXR1ZF9mdW4ocCkpLmxlbmd0aDtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGlmKHJlc3B1ZXN0YXNbY29uZmlndXJhY2lvblNvcnRlby5kaXNwYXJhZG9yXT09MSAmJlxyXG4gICAgICAgICAgICAgICAgIXJlc3B1ZXN0YXNbY29uZmlndXJhY2lvblNvcnRlby5yZXN1bHRhZG9dICYmXHJcbiAgICAgICAgICAgICAgICByZXNwdWVzdGFzW2NvbmZpZ3VyYWNpb25Tb3J0ZW8uaW5jb21wbGV0YXNdPT0wXHJcbiAgICAgICAgICAgICl7XHJcbiAgICAgICAgICAgICAgICB2YXIgc29ydGVhcj1yZXNwdWVzdGFzVUEuZmlsdGVyKHA9PmZpbHRyb19mdW4ocCkpO1xyXG4gICAgICAgICAgICAgICAgaWYoc29ydGVhci5sZW5ndGgpe1xyXG4gICAgICAgICAgICAgICAgICAgIHJlc3B1ZXN0YXNVQS5mb3JFYWNoKChwZXIsIGkpPT5wZXIuJHAwPWkrMSk7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uZmlndXJhY2lvblNvcnRlby5vcmRlbi5wdXNoKHt2YXJpYWJsZTpcIiRwMFwiIGFzIElkVmFyaWFibGUsIG9yZGVuOjF9KTtcclxuICAgICAgICAgICAgICAgICAgICBzb3J0ZWFyLnNvcnQoY29tcGFyZUZvck9yZGVyKGNvbmZpZ3VyYWNpb25Tb3J0ZW8ub3JkZW4ubWFwKGVsZW0gPT4gKHtjb2x1bW46ZWxlbS52YXJpYWJsZSwgb3JkZXI6ZWxlbS5vcmRlbn0pKSkpO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBwb3NpY2lvblNvcnRlYWRhID0gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICBpZihjb25maWd1cmFjaW9uU29ydGVvLm1ldG9kbz09J2hhc2gnKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdOTyBJTVBMRU1FTlRBRE8nKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLypwb3NpY2lvblNvcnRlYWRhPShcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYWNpb25Tb3J0ZW8ucGFyYW1fbWV0b2RvLnZhcl9jb2VmLnJlZHVjZShcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKHN1bSwgcGFpcik9PnN1bSArIGRhdG9zVml2aWVuZGEudGVtW3BhaXIudmFyXSAqIHBhaXIuY29lZiksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKSAlIGNvbmZpZ3VyYWNpb25Tb3J0ZW8ucGFyYW1fbWV0b2RvLmRpdmlzb3JcclxuICAgICAgICAgICAgICAgICAgICAgICAgKSAlIHNvcnRlYXIubGVuZ3RoKi9cclxuICAgICAgICAgICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGxldHJhID0gJ0EnO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2YXJMZXRyYTpJZFZhcmlhYmxlID0gY29uZmlndXJhY2lvblNvcnRlby5wYXJhbV9tZXRvZG8udmFyX2xldHJhO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IodmFyIHBlcnNvbmEgb2Ygc29ydGVhcil7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNwdWVzdGFzVUEuZmluZCgoX3BlcixpKT0+aT09cGVyc29uYS4kcDAtMSkhW3ZhckxldHJhXSA9IGxldHJhO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVyc29uYVt2YXJMZXRyYV09bGV0cmE7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXRyYSA9IFN0cmluZy5mcm9tQ2hhckNvZGUobGV0cmEuY2hhckNvZGVBdCgwKSsxKTsgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgdGFibGFBbGVhdG9yaWFNaWVtYnJvcyA9IGNvbmZpZ3VyYWNpb25Tb3J0ZW8ucGFyYW1fbWV0b2RvLnRhYmxhLm1hcCgobGlzdGEpPT5saXN0YS5zcGxpdCgnJykpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVzdG8gPSBpZEVuYyAlIDEwO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgY29sdW1uYVRhYmxhQWxlYXRvcmlhID0gcmVzdG8/cmVzdG8gLSAxOjk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKHNvcnRlYXIubGVuZ3RoID4gdGFibGFBbGVhdG9yaWFNaWVtYnJvcy5sZW5ndGgpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc29ydGVhci5zcGxpY2UodGFibGFBbGVhdG9yaWFNaWVtYnJvcy5sZW5ndGgpIC8vZGVzY2FydG8gY2FuZGlkYXRvcyBzaSBzb24gbcOhcyBxdWUgbG8gcXVlIHBlcm1pdGUgbGEgdGFibGFcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZmlsYVRhYmxhQWxlYXRvcmlhID0gc29ydGVhci5sZW5ndGggLSAxIDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGxldHJhU2VsZWNjaW9uYWRhID0gdGFibGFBbGVhdG9yaWFNaWVtYnJvc1tmaWxhVGFibGFBbGVhdG9yaWFdW2NvbHVtbmFUYWJsYUFsZWF0b3JpYV07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBvc2ljaW9uU29ydGVhZGEgPSByZXNwdWVzdGFzVUEuZmluZEluZGV4KChwOlJlc3B1ZXN0YXMpPT5wW3ZhckxldHJhXT09bGV0cmFTZWxlY2Npb25hZGEpICsgMTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzcHVlc3Rhc1tjb25maWd1cmFjaW9uU29ydGVvLnJlc3VsdGFkb109cG9zaWNpb25Tb3J0ZWFkYTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzcHVlc3Rhc1tjb25maWd1cmFjaW9uU29ydGVvLmNhbnRpZGFkX3NvcnRlYWJsZXNdPXNvcnRlYXIubGVuZ3RoO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25maWd1cmFjaW9uU29ydGVvLnNvcnRlYWRvX21vc3RyYXI/LmZvckVhY2goKG1vc3RyYXIpPT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3B1ZXN0YXNbbW9zdHJhci50YXJnZXRdPXJlc3B1ZXN0YXNVQVtyZXNwdWVzdGFzW2NvbmZpZ3VyYWNpb25Tb3J0ZW8ucmVzdWx0YWRvXSBhcyBudW1iZXIgLTFdW21vc3RyYXIuc291cmNlXVxyXG4gICAgICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVzcHVlc3Rhc1tjb25maWd1cmFjaW9uU29ydGVvLmNhbnRpZGFkX3NvcnRlYWJsZXNdPTA7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmVzcHVlc3Rhc1tjb25maWd1cmFjaW9uU29ydGVvLmNhbnRpZGFkX3RvdGFsXT0gcmVzcHVlc3Rhc1VBLmxlbmd0aCB8fCBudWxsOyAvL25vIHF1ZXJlbW9zIGVsIHZhbG9yIDBcclxuICAgICAgICAgICAgcmVzcHVlc3Rhc1tjb25maWd1cmFjaW9uU29ydGVvLnZhcmlhYmxlQm90b25Gb3JtdWxhcmlvVUFdPSdvayc7XHJcbiAgICAgICAgICAgIGlmKGNvbmZpZ3VyYWNpb25Tb3J0ZW8udmFyaWFibGVCb3RvbkZvcm11bGFyaW9VQUluZGl2aWR1YWwpe1xyXG4gICAgICAgICAgICAgICAgcmVzcHVlc3Rhc1tjb25maWd1cmFjaW9uU29ydGVvLnZhcmlhYmxlQm90b25Gb3JtdWxhcmlvVUFJbmRpdmlkdWFsXT0nb2snO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiB2YXJpYWJsZXNDYWxjdWxhZGFzKHJlc3B1ZXN0YXNSYWl6OiBSZXNwdWVzdGFzUmFpeiwgZm9yUGs6Rm9yUGspe1xyXG4gICAgaWYoZXNwZWNpYWxlcy5jYWxjdWxhclZhcmlhYmxlcyl7XHJcbiAgICAgICAgZXNwZWNpYWxlcy5jYWxjdWxhclZhcmlhYmxlcyhyZXNwdWVzdGFzUmFpeiwgZm9yUGspO1xyXG4gICAgfVxyXG4gICAgaWYoZXNwZWNpYWxlcy5jYWxjdWxhclZhcmlhYmxlc0VzcGVjaWZpY2FzT3BlcmF0aXZvKXtcclxuICAgICAgICBlc3BlY2lhbGVzLmNhbGN1bGFyVmFyaWFibGVzRXNwZWNpZmljYXNPcGVyYXRpdm8ocmVzcHVlc3Rhc1JhaXosIGZvclBrKTtcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGNhbGN1bGFyRmVlZGJhY2tVbmlkYWRBbmFsaXNpcyhcclxuICAgIGZlZWRiYWNrUm93VmFsaWRhdG9yOnsgW2Zvcm11bGFyaW8gaW4gUGxhaW5Gb3JQa106Rm9ybVN0cnVjdHVyZVN0YXRlPElkVmFyaWFibGUsIFZhbG9yLCBJZEZpbj4gfSxcclxuICAgIGZvcm11bGFyaW9zOnsgW25vbWJyZUZvcm11bGFyaW8gaW4gSWRGb3JtdWxhcmlvXTpJbmZvRm9ybXVsYXJpbyB9LCBcclxuICAgIHJlc3B1ZXN0YXM6UmVzcHVlc3RhcywgXHJcbiAgICBVQTpJZFVuaWRhZEFuYWxpc2lzLCBcclxuICAgIGZvclBrOkZvclBrLFxyXG4gICAgcmVzcHVlc3Rhc0F1bWVudGFkYXM6UmVzcHVlc3RhcywgLy8gaW5jbHV5ZW4gbGEgZGUgdG9kb3MgbG9zIHBhZHJlcyB5IGFuc2VzdHJvcyxcclxuICAgIHJlc3B1ZXN0YXNQYWRyZTpSZXNwdWVzdGFzfG51bGwsIFxyXG4gICAgb3B0czpPcGNpb25lc1Jvd1ZhbGlkYXRvcixcclxuKXtcclxuICAgIC8vIHJlY29ycmllbmQgVUEgcGVyc29uYXMgeSBtYXNjb3Rhc1xyXG4gICAgZm9yKHZhciBVQWluY2x1aWRhIG9mIGRlZk9wZXJhdGl2by5kZWZVQVtVQV0uaW5jbHVpZGFzKXtcclxuICAgICAgICB2YXIgcGtOdWV2YSA9IGRlZk9wZXJhdGl2by5kZWZVQVtVQWluY2x1aWRhXS5waztcclxuICAgICAgICB2YXIgY29uanVudG9SZXNwdWVzdGFzVUEgPSByZXNwdWVzdGFzW1VBaW5jbHVpZGFdO1xyXG4gICAgICAgIGxpa2VBcihjb25qdW50b1Jlc3B1ZXN0YXNVQSkuZm9yRWFjaCgocmVzcHVlc3Rhc0hpam8sIHZhbG9yUGtPUG9zaWNpb24pPT57XHJcbiAgICAgICAgICAgIHZhciB2YWxvclBrID0gbnVtYmVyT3JTdHJpbmdJbmNJZkFycmF5KHZhbG9yUGtPUG9zaWNpb24sIGNvbmp1bnRvUmVzcHVlc3Rhc1VBKTtcclxuICAgICAgICAgICAgY2FsY3VsYXJGZWVkYmFja1VuaWRhZEFuYWxpc2lzKFxyXG4gICAgICAgICAgICAgICAgZmVlZGJhY2tSb3dWYWxpZGF0b3IsIFxyXG4gICAgICAgICAgICAgICAgZm9ybXVsYXJpb3MsIFxyXG4gICAgICAgICAgICAgICAgcmVzcHVlc3Rhc0hpam8sIFxyXG4gICAgICAgICAgICAgICAgVUFpbmNsdWlkYSwgXHJcbiAgICAgICAgICAgICAgICB7Li4uZm9yUGssIFtwa051ZXZhXTp2YWxvclBrfSxcclxuICAgICAgICAgICAgICAgIHsuLi5yZXNwdWVzdGFzQXVtZW50YWRhcywgLi4ucmVzcHVlc3Rhc0hpam8sIFtwa051ZXZhXTp2YWxvclBrfSxcclxuICAgICAgICAgICAgICAgIHJlc3B1ZXN0YXMsXHJcbiAgICAgICAgICAgICAgICBvcHRzXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgfSlcclxuICAgIH1cclxuICAgIC8vIFMxICwgQTFcclxuICAgIGZvcih2YXIgZXNIZXJtYW5vIG9mIFt0cnVlLCBmYWxzZV0pe1xyXG4gICAgICAgIGZvcih2YXIgZm9ybXVsYXJpbyBvZiBkZWZPcGVyYXRpdm8uZGVmVUFbVUFdLmlkc0ZvcikgaWYoISFlc0hlcm1hbm8gPT0gISFkZWZPcGVyYXRpdm8uZGVmRm9yW2Zvcm11bGFyaW9dLmhlcm1hbm8pe1xyXG4gICAgICAgICAgICB2YXIgcGxhaW5Gb3JQazpQbGFpbkZvclBrID0gdG9QbGFpbkZvclBrKHsuLi5mb3JQaywgZm9ybXVsYXJpb30pXHJcbiAgICAgICAgICAgIHZhciBtYXhQYXNvc0F1dG9pbmdyZXNhZGFzID0gMTA7XHJcbiAgICAgICAgICAgIHZhciB2YXJBdXRvSW5ncmVzYWRhcyA9IFtdO1xyXG4gICAgICAgICAgICBkb3tcclxuICAgICAgICAgICAgICAgIHZhciBodWJvQXV0b2luZ3Jlc29zID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICBmZWVkYmFja1Jvd1ZhbGlkYXRvcltwbGFpbkZvclBrXT1cclxuICAgICAgICAgICAgICAgICAgICByb3dWYWxpZGF0b3IoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHttYXJjYUZpbjonZmluJywgLi4uZm9ybXVsYXJpb3NbZm9ybXVsYXJpb10uZXN0cnVjdHVyYVJvd1ZhbGlkYXRvcn0sIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXNwdWVzdGFzQXVtZW50YWRhcyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgb3B0c1xyXG4gICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgIHZhciB7cmVzdW1lbiwgYXV0b0luZ3Jlc2FkYXN9ID0gZmVlZGJhY2tSb3dWYWxpZGF0b3JbcGxhaW5Gb3JQa107XHJcbiAgICAgICAgICAgICAgICB2YXIgdmFyTmFtZTpJZFZhcmlhYmxlO1xyXG4gICAgICAgICAgICAgICAgaWYoYXV0b0luZ3Jlc2FkYXMhPW51bGwpe1xyXG4gICAgICAgICAgICAgICAgICAgIGZvcih2YXJOYW1lIGluIGF1dG9JbmdyZXNhZGFzKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNhbWJpbyA9IHJlc3B1ZXN0YXNbdmFyTmFtZV0gIT09IGF1dG9JbmdyZXNhZGFzW3Zhck5hbWVdIGFzIFZhbG9yO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZihjYW1iaW8pe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcHVlc3Rhc1t2YXJOYW1lXSA9IGF1dG9JbmdyZXNhZGFzW3Zhck5hbWVdIGFzIFZhbG9yO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcHVlc3Rhc0F1bWVudGFkYXNbdmFyTmFtZV0gPSBhdXRvSW5ncmVzYWRhc1t2YXJOYW1lXSBhcyBWYWxvcjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhckF1dG9JbmdyZXNhZGFzLnB1c2godmFyTmFtZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBodWJvQXV0b2luZ3Jlc29zID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSB3aGlsZShodWJvQXV0b2luZ3Jlc29zICYmIG1heFBhc29zQXV0b2luZ3Jlc2FkYXMtLT4wKTtcclxuICAgICAgICAgICAgdmFyQXV0b0luZ3Jlc2FkYXMuZm9yRWFjaCh2YXJuYW1lPT57XHJcbiAgICAgICAgICAgICAgICAvLyBmZWVkYmFja1Jvd1ZhbGlkYXRvcltwbGFpbkZvclBrXS5lc3RhZG9zW3Zhcm5hbWUgYXMgSWRWYXJpYWJsZV0gPSAnYWN0dWFsJztcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgdmFyIEJGX3Zhcm5hbWUgPSAnJEIuJytmb3JtdWxhcmlvIGFzIElkVmFyaWFibGVcclxuICAgICAgICAgICAgdmFyIGZvcm1QcmluY2lwYWxGb3JWaXZpZW5kYSA9IGdldE1haW5Gb3JtRm9yVml2aWVuZGEoZm9yUGsudml2aWVuZGEhKTtcclxuICAgICAgICAgICAgaWYoZXN0cnVjdHVyYS5jb25maWdTb3J0ZW8gJiYgIWVzdHJ1Y3R1cmEuY29uZmlnU29ydGVvW2Zvcm1QcmluY2lwYWxGb3JWaXZpZW5kYV0pe1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBubyBoYXkgY29uZmlndXJhY2lvbiBkZSBzb3J0ZW8gcGFyYSBlbCBmb3JtdWxhcmlvICR7Zm9ybVByaW5jaXBhbEZvclZpdmllbmRhfWApXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdmFyIGNvbmZpZ1NvcnRlb0Zvcm11bGFyaW8gPSBlc3RydWN0dXJhLmNvbmZpZ1NvcnRlbyAmJiBlc3RydWN0dXJhLmNvbmZpZ1NvcnRlb1tmb3JtUHJpbmNpcGFsRm9yVml2aWVuZGFdO1xyXG4gICAgICAgICAgICB2YXIgcmVzdW1lbk9yTnVsbCA9IFxyXG4gICAgICAgICAgICAgICAgY29uZmlnU29ydGVvRm9ybXVsYXJpbyAmJlxyXG4gICAgICAgICAgICAgICAgY29uZmlnU29ydGVvRm9ybXVsYXJpby52YXJpYWJsZUJvdG9uRm9ybXVsYXJpb1VBSW5kaXZpZHVhbCAmJiBcclxuICAgICAgICAgICAgICAgIGNvbmZpZ1NvcnRlb0Zvcm11bGFyaW8udmFyaWFibGVCb3RvbkZvcm11bGFyaW9VQUluZGl2aWR1YWwgPT0gQkZfdmFybmFtZT9cclxuICAgICAgICAgICAgICAgICAgICAnb2snXHJcbiAgICAgICAgICAgICAgICA6cmVzdW1lbiA9PSAndmFjaW8nID8gXHJcbiAgICAgICAgICAgICAgICAgICAgbnVsbFxyXG4gICAgICAgICAgICAgICAgOnJlc3VtZW5cclxuICAgICAgICAgICAgaWYoZXNIZXJtYW5vKXtcclxuICAgICAgICAgICAgICAgIHJlc3B1ZXN0YXNbQkZfdmFybmFtZV0gPSByZXN1bWVuT3JOdWxsO1xyXG4gICAgICAgICAgICB9ZWxzZSBpZihyZXNwdWVzdGFzUGFkcmUgIT0gbnVsbCl7XHJcbiAgICAgICAgICAgICAgICByZXNwdWVzdGFzUGFkcmVbQkZfdmFybmFtZV0gPSByZXN1bWVuT3JOdWxsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gbnVtYmVyT3JTdHJpbmdJbmNJZkFycmF5KG51bWJlck9yU3RyaW5nOm51bWJlcnxzdHJpbmcsIG9iamVjdDpvYmplY3R8YW55W10pOihudW1iZXJ8c3RyaW5nKXtcclxuICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgZXN0b3kgdXNhbmRvIGlzTmFOIHBhcmEgdmVyIHNpIGVzIG8gbm8gdW4gbsO6bWVybyBzdW1hYmxlXHJcbiAgICBpZihpc05hTihudW1iZXJPclN0cmluZykpe1xyXG4gICAgICAgIHJldHVybiBudW1iZXJPclN0cmluZztcclxuICAgIH1cclxuICAgIHJldHVybiBOdW1iZXIobnVtYmVyT3JTdHJpbmcpKyhvYmplY3QgaW5zdGFuY2VvZiBBcnJheT8xOjApO1xyXG59XHJcblxyXG5leHBvcnQgdmFyIGdldE1haW5Gb3JtRm9yVml2aWVuZGEgPSAodml2aWVuZGE6bnVtYmVyKTpJZEZvcm11bGFyaW89PntcclxuICAgIC8vQHRzLWlnbm9yZSBsYSB2aXZpZW5kYSBlcyBlbCBwYXJhbWV0cm8gY29ycmVjdG9cclxuICAgIHJldHVybiBkYXRvc0J5UGFzcy5pbmZvcm1hY2lvbkhkclt2aXZpZW5kYV0udGFyZWEubWFpbl9mb3JtXHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBjYWxjdWxhckZlZWRiYWNrSG9qYURlUnV0YSgpe1xyXG4gICAgbGlrZUFyKGVzdHJ1Y3R1cmEudW5pZGFkZXNfYW5hbGlzaXMpLmZpbHRlcih1YURlZj0+IXVhRGVmLnBhZHJlKS5mb3JFYWNoKHVhRGVmPT57XHJcbiAgICAgICAgdmFyIGVzUHJpbmNpcGFsID0gKGY6Rm9ybXVsYXJpbywgZW5jOmFueSk9PiB7XHJcbiAgICAgICAgICAgIGxldCBmb3JtdWxhcmlvUHJpbmNpcGFsID0gZ2V0TWFpbkZvcm1Gb3JWaXZpZW5kYShlbmMpO1xyXG4gICAgICAgICAgICByZXR1cm4gZm9ybXVsYXJpb1ByaW5jaXBhbD9mb3JtdWxhcmlvUHJpbmNpcGFsPT1mLmlkX2Nhc2lsbGVybzpmLmZvcm11bGFyaW9fcHJpbmNpcGFsXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBjb25qdW50b1Jlc3B1ZXN0YXNVQSA9IGRhdG9zQnlQYXNzLnJlc3B1ZXN0YXNbdWFEZWYudW5pZGFkX2FuYWxpc2lzXVxyXG4gICAgICAgIGJlaW5nQXJyYXkoY29uanVudG9SZXNwdWVzdGFzVUEpLmZvckVhY2goKHJlc3B1ZXN0YXMsIHZhbG9yUGtPUG9zaWNpb24pPT57XHJcbiAgICAgICAgICAgIHZhciB2YWxvclBrID0gbnVtYmVyT3JTdHJpbmdJbmNJZkFycmF5KHZhbG9yUGtPUG9zaWNpb24sIGNvbmp1bnRvUmVzcHVlc3Rhc1VBKTtcclxuICAgICAgICAgICAgbGlrZUFyKGVzdHJ1Y3R1cmEuZm9ybXVsYXJpb3MpLmZpbHRlcihmPT5mLmNhc2lsbGVyb3MudW5pZGFkX2FuYWxpc2lzID09IHVhRGVmLnVuaWRhZF9hbmFsaXNpcyAmJiBlc1ByaW5jaXBhbChmLmNhc2lsbGVyb3MsIHZhbG9yUGsgYXMgbnVtYmVyKSkuZm9yRWFjaCgoX2RlZkYsIGZvcm11bGFyaW8pPT57XHJcbiAgICAgICAgICAgICAgICB2YXIgZm9yUGtSYWl6ID0ge2Zvcm11bGFyaW8sIFt1YURlZi5wa19hZ3JlZ2FkYV06dmFsb3JQa31cclxuICAgICAgICAgICAgICAgIGNhbGN1bGFyRmVlZGJhY2socmVzcHVlc3RhcywgZm9yUGtSYWl6LCB7fSk7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgfSlcclxuICAgIH0pO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gY2FsY3VsYXJGZWVkYmFja0VuY3Vlc3RhKFxyXG4gICAgZmVlZGJhY2tSb3dWYWxpZGF0b3I6eyBbZm9ybXVsYXJpbyBpbiBQbGFpbkZvclBrXTpGb3JtU3RydWN0dXJlU3RhdGU8SWRWYXJpYWJsZSwgVmFsb3IsIElkRmluPiB9LFxyXG4gICAgZm9ybXVsYXJpb3M6eyBbbm9tYnJlRm9ybXVsYXJpbyBpbiBJZEZvcm11bGFyaW9dOkluZm9Gb3JtdWxhcmlvIH0sIFxyXG4gICAgZm9yUGtSYWl6OiBGb3JQa1JhaXosIFxyXG4gICAgcmVzcHVlc3RhczpSZXNwdWVzdGFzLCBcclxuICAgIG9wdHM6T3BjaW9uZXNSb3dWYWxpZGF0b3JcclxuKXtcclxuICAgIHZhciBmb3JQazpGb3JQayA9ey4uLmZvclBrUmFpen07XHJcbiAgICBjYWxjdWxhckZlZWRiYWNrVW5pZGFkQW5hbGlzaXMoZmVlZGJhY2tSb3dWYWxpZGF0b3IsIGZvcm11bGFyaW9zLCByZXNwdWVzdGFzLCBkZWZPcGVyYXRpdm8uVUFwcmluY2lwYWwsIGZvclBrLCByZXNwdWVzdGFzLCBudWxsLCBvcHRzKTtcclxufVxyXG5cclxuZnVuY3Rpb24gY2FsY3VsYXJGZWVkYmFjayhyZXNwdWVzdGFzOiBSZXNwdWVzdGFzLCBmb3JQa1JhaXo6Rm9yUGtSYWl6LCBvcHRzOk9wY2lvbmVzUm93VmFsaWRhdG9yKXtcclxuICAgIHZhciByZXN1bWVuRXN0YWRvOlJlc3VtZW5Fc3RhZG87XHJcbiAgICAvLyBAdHMtaWdub3JlIFBhcnRpYWxcclxuICAgIHZhciBudWV2b3NSb3dzIDoge1t4IGluIFBsYWluRm9yUGtdOkZvcm1TdHJ1Y3R1cmVTdGF0ZTxJZFZhcmlhYmxlLElkRmluPn09e31cclxuICAgIGNhbGN1bGFyRmVlZGJhY2tFbmN1ZXN0YShudWV2b3NSb3dzLCBlc3RydWN0dXJhLmZvcm11bGFyaW9zLCBmb3JQa1JhaXosIHJlc3B1ZXN0YXMsIG9wdHMpO1xyXG4gICAgZGF0b3NCeVBhc3MuZmVlZGJhY2tSb3dWYWxpZGF0b3IgPSBsaWtlQXIoZGF0b3NCeVBhc3MuZmVlZGJhY2tSb3dWYWxpZGF0b3IpLmZpbHRlcigoX2ZlZWRiYWNrOmFueSwgcGxhaW5QazpQbGFpbkZvclBrKT0+SlNPTi5wYXJzZShwbGFpblBrKS52aXZpZW5kYSAhPSBmb3JQa1JhaXoudml2aWVuZGEpLnBsYWluKCk7XHJcbiAgICBkYXRvc0J5UGFzcy5mZWVkYmFja1Jvd1ZhbGlkYXRvciA9IHsuLi5kYXRvc0J5UGFzcy5mZWVkYmFja1Jvd1ZhbGlkYXRvciwgLi4ubnVldm9zUm93c307XHJcbiAgICBkYXRvc0J5UGFzcy5yZXNwdWVzdGFzLnZpdmllbmRhc1tmb3JQa1JhaXoudml2aWVuZGEhXSA9IHtcclxuICAgICAgICAuLi5kYXRvc0J5UGFzcy5yZXNwdWVzdGFzLnZpdmllbmRhc1tmb3JQa1JhaXoudml2aWVuZGEhXSxcclxuICAgICAgICAuLi5jYWxjdWxhclJlc3VtZW5WaXZpZW5kYShcclxuICAgICAgICAgICAgZm9yUGtSYWl6LCBcclxuICAgICAgICAgICAgbnVldm9zUm93cyxcclxuICAgICAgICAgICAgcmVzcHVlc3Rhc1xyXG4gICAgICAgIClcclxuICAgIH07XHJcbn1cclxuXHJcbmV4cG9ydCB2YXIgZ2V0Rm9ybXVsYXJpb3NGb3JJZFZpdmllbmRhID0gKGlkVml2aWVuZGE6bnVtYmVyKT0+e1xyXG4gICAgdmFyIG1haW5Gb3JtRm9yVml2aWVuZGEgPSBnZXRNYWluRm9ybUZvclZpdmllbmRhKGlkVml2aWVuZGEpO1xyXG4gICAgdmFyIGZvcm1zRmVlZGJhY2sgPSBbbWFpbkZvcm1Gb3JWaXZpZW5kYV07XHJcbiAgICB2YXIgYnVzY2FyRm9ybXVsYXJpb3NIaWpvcyA9IChpZEZvcm11bGFyaW86SWRGb3JtdWxhcmlvKT0+e1xyXG4gICAgICAgIGVzdHJ1Y3R1cmEuZm9ybXVsYXJpb3NbaWRGb3JtdWxhcmlvXS5jYXNpbGxlcm9zLmNhc2lsbGVyb3MuZm9yRWFjaCgoY2FzaWxsZXJvKT0+e1xyXG4gICAgICAgICAgICBpZihjYXNpbGxlcm8udGlwb2MgPT0gJ0JGJyl7XHJcbiAgICAgICAgICAgICAgICB2YXIgZm9ybUhpam8gPSAoY2FzaWxsZXJvLnNhbHRvPy5zdGFydHNXaXRoKCdGOicpP2Nhc2lsbGVyby5zYWx0bzonRjonICsgY2FzaWxsZXJvLnNhbHRvKSBhcyBJZEZvcm11bGFyaW87XHJcbiAgICAgICAgICAgICAgICBpZihmb3JtSGlqbyl7XHJcbiAgICAgICAgICAgICAgICAgICAgZm9ybXNGZWVkYmFjay5wdXNoKGZvcm1IaWpvKTtcclxuICAgICAgICAgICAgICAgICAgICBidXNjYXJGb3JtdWxhcmlvc0hpam9zKGZvcm1IaWpvKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcbiAgICBidXNjYXJGb3JtdWxhcmlvc0hpam9zKG1haW5Gb3JtRm9yVml2aWVuZGEpO1xyXG4gICAgcmV0dXJuIGZvcm1zRmVlZGJhY2s7XHJcbn1cclxuXHJcbmV4cG9ydCB2YXIgY2FsY3VsYXJBY3R1YWxCRiA9IChjb25maWdTb3J0ZW9Gb3JtdWxhcmlvOkNvbmZpZ3VyYWNpb25Tb3J0ZW9Gb3JtdWxhcmlvfG51bGwsIG51bUVsZW1lbnRvVUE6IG51bWJlciwgbnVtQWN0dWFsOm51bWJlcnxudWxsLCBmb3JtdWxhcmlvOklkRm9ybXVsYXJpbywgcjpSZXNwdWVzdGFzKT0+XHJcbiAgICAhIShjb25maWdTb3J0ZW9Gb3JtdWxhcmlvICYmIFxyXG4gICAgY29uZmlnU29ydGVvRm9ybXVsYXJpby5pZF9mb3JtdWxhcmlvX2luZGl2aWR1YWwgJiZcclxuICAgIGNvbmZpZ1NvcnRlb0Zvcm11bGFyaW8uaWRfZm9ybXVsYXJpb19pbmRpdmlkdWFsID09IGZvcm11bGFyaW9cclxuICAgID8gXHJcbiAgICAgICAgbnVtRWxlbWVudG9VQSA9PSBjb2FsZXNjZShcclxuICAgICAgICAgICAgcltjb25maWdTb3J0ZW9Gb3JtdWxhcmlvLnJlc3VsdGFkb19tYW51YWxdLFxyXG4gICAgICAgICAgICByW2NvbmZpZ1NvcnRlb0Zvcm11bGFyaW8ucmVzdWx0YWRvXVxyXG4gICAgICAgIClcclxuICAgIDpcclxuICAgICAgICBudW1BY3R1YWwgPT0gbnVtRWxlbWVudG9VQVxyXG4gICAgKVxyXG5cclxuZXhwb3J0IHZhciBjYWxjdWxhckRpc2FibGVkQkYgPSAoY29uZmlnU29ydGVvRm9ybXVsYXJpbzpDb25maWd1cmFjaW9uU29ydGVvRm9ybXVsYXJpb3xudWxsLCBudW1FbGVtZW50b1VBOiBudW1iZXIsIGZvcm11bGFyaW86SWRGb3JtdWxhcmlvLCByOlJlc3B1ZXN0YXMpPT5cclxuICAgICEhKGNvbmZpZ1NvcnRlb0Zvcm11bGFyaW8gJiYgXHJcbiAgICBjb25maWdTb3J0ZW9Gb3JtdWxhcmlvLmlkX2Zvcm11bGFyaW9faW5kaXZpZHVhbCA9PSBmb3JtdWxhcmlvICYmXHJcbiAgICBudW1FbGVtZW50b1VBICE9IGNvYWxlc2NlKFxyXG4gICAgICAgIHJbY29uZmlnU29ydGVvRm9ybXVsYXJpby5yZXN1bHRhZG9fbWFudWFsXSxcclxuICAgICAgICByW2NvbmZpZ1NvcnRlb0Zvcm11bGFyaW8ucmVzdWx0YWRvXVxyXG4gICAgKSlcclxuXHJcbmV4cG9ydCB2YXIgY2FsY3VsYXJQZXJtaXRlQm9ycmFyQkYgPSAoY29uZmlnU29ydGVvRm9ybXVsYXJpbzpDb25maWd1cmFjaW9uU29ydGVvRm9ybXVsYXJpb3xudWxsLCBmb3JtdWxhcmlvOklkRm9ybXVsYXJpbyk9PlxyXG4gICAgIShjb25maWdTb3J0ZW9Gb3JtdWxhcmlvICYmIFxyXG4gICAgY29uZmlnU29ydGVvRm9ybXVsYXJpby5pZF9mb3JtdWxhcmlvX2luZGl2aWR1YWwgPT0gZm9ybXVsYXJpbylcclxuXHJcbnR5cGUgUmVzdWx0YWRvUmVzdW1lbiA9IHtcclxuICAgIHJlc3VtZW5Fc3RhZG86UmVzdW1lbkVzdGFkbyxcclxuICAgIHJlc3VtZW5Fc3RhZG9TdXA6UmVzdW1lbkVzdGFkbyxcclxuICAgIGNvZFJlYTpudW1iZXJ8bnVsbCxcclxuICAgIGNvZE5vUmVhOnN0cmluZ3xudWxsLFxyXG4gICAgY29kUmVhU3VwOm51bWJlcnxudWxsXHJcbiAgICBjb2ROb1JlYVN1cDpzdHJpbmd8bnVsbCxcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGNhbGN1bGFyUmVzdW1lblZpdmllbmRhKFxyXG4gICAgZm9yUGtSYWl6OkZvclBrUmFpeiwgXHJcbiAgICBmZWVkYmFja1Jvd1ZhbGlkYXRvcjp7W2Zvcm11bGFyaW8gaW4gUGxhaW5Gb3JQa106Rm9ybVN0cnVjdHVyZVN0YXRlPElkVmFyaWFibGUsIFZhbG9yLCBJZEZpbj59LCBcclxuICAgIHJlc3B1ZXN0YXM6UmVzcHVlc3Rhc1xyXG4pOlJlc3VsdGFkb1Jlc3VtZW57XHJcbiAgICB2YXIge2NvZFJlYSwgZXNSZWF9ID0gZGVmT3BlcmF0aXZvLmVzUmVhbGl6YWRhKHJlc3B1ZXN0YXMpXHJcbiAgICB2YXIge2NvZE5vUmVhLCBlc05vUmVhfSA9IGRlZk9wZXJhdGl2by5lc05vUmVhKHJlc3B1ZXN0YXMpXHJcbiAgICB2YXIge2NvZFJlYVN1cCxlc1JlYVN1cH0gPSBkZWZPcGVyYXRpdm8uZXNSZWFsaXphZGFTdXAocmVzcHVlc3RhcylcclxuICAgIHZhciB7Y29kTm9SZWFTdXAsIGVzTm9SZWFTdXB9ID0gZGVmT3BlcmF0aXZvLmVzTm9SZWFTdXAocmVzcHVlc3RhcylcclxuICAgIHZhciBmb3Jtc0ZlZWRiYWNrID0gZ2V0Rm9ybXVsYXJpb3NGb3JJZFZpdmllbmRhKGZvclBrUmFpei52aXZpZW5kYSEpO1xyXG4gICAgdmFyIGNvbmZpZ3VyYWNpb25Tb3J0ZW9Gb3JtdWxhcmlvID0gZXN0cnVjdHVyYS5jb25maWdTb3J0ZW8gJiYgZXN0cnVjdHVyYS5jb25maWdTb3J0ZW9bZ2V0TWFpbkZvcm1Gb3JWaXZpZW5kYShmb3JQa1JhaXoudml2aWVuZGEhKV1cclxuICAgIHZhciBmZWVkQmFja1ZpdmllbmRhID0gbGlrZUFyKGZlZWRiYWNrUm93VmFsaWRhdG9yKS5maWx0ZXIoKF9yb3csIHBsYWluUGspPT57XHJcbiAgICAgICAgdmFyIHRpZW5lSW5kaXZpZHVhbCA9IGNvbmZpZ3VyYWNpb25Tb3J0ZW9Gb3JtdWxhcmlvICYmICEhKGNvbmZpZ3VyYWNpb25Tb3J0ZW9Gb3JtdWxhcmlvLmlkX2Zvcm11bGFyaW9faW5kaXZpZHVhbCAmJiBjb25maWd1cmFjaW9uU29ydGVvRm9ybXVsYXJpby5pZF9mb3JtdWxhcmlvX3BhZHJlKVxyXG4gICAgICAgIHJldHVybiBKU09OLnBhcnNlKHBsYWluUGspLnZpdmllbmRhPT1mb3JQa1JhaXoudml2aWVuZGEgJiYgXHJcbiAgICAgICAgICAgIGZvcm1zRmVlZGJhY2suaW5jbHVkZXMoSlNPTi5wYXJzZShwbGFpblBrKS5mb3JtdWxhcmlvKSAmJlxyXG4gICAgICAgICAgICAodGllbmVJbmRpdmlkdWFsP1xyXG4gICAgICAgICAgICAgICAgIWNhbGN1bGFyRGlzYWJsZWRCRihcclxuICAgICAgICAgICAgICAgICAgICBjb25maWd1cmFjaW9uU29ydGVvRm9ybXVsYXJpbywgXHJcbiAgICAgICAgICAgICAgICAgICAgSlNPTi5wYXJzZShwbGFpblBrKS5wZXJzb25hLCBcclxuICAgICAgICAgICAgICAgICAgICBKU09OLnBhcnNlKHBsYWluUGspLmZvcm11bGFyaW8sIFxyXG4gICAgICAgICAgICAgICAgICAgIEpTT04ucGFyc2UocGxhaW5QaykuaG9nYXI/cmVzcHVlc3Rhc0ZvclBrKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdml2aWVuZGE6Zm9yUGtSYWl6LnZpdmllbmRhLCBcclxuICAgICAgICAgICAgICAgICAgICAgICAgZm9ybXVsYXJpbzpjb25maWd1cmFjaW9uU29ydGVvRm9ybXVsYXJpby5pZF9mb3JtdWxhcmlvX3BhZHJlISxcclxuICAgICAgICAgICAgICAgICAgICAgICAgaG9nYXI6SlNPTi5wYXJzZShwbGFpblBrKS5ob2dhciBcclxuICAgICAgICAgICAgICAgICAgICB9KS5yZXNwdWVzdGFzOnt9IGFzIFJlc3B1ZXN0YXNcclxuICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgOnRydWUpXHJcbiAgICB9KS5hcnJheSgpO1xyXG4gICAgdmFyIHByaW9yaWRhZGVzOntba2V5IGluIFJlc3VtZW5Fc3RhZG9dOiB7cHJpb3JpZGFkOm51bWJlciwgY2FudGlkYWQ6bnVtYmVyfX0gPSB7XHJcbiAgICAgICAgJ25vIHJlYSc6e3ByaW9yaWRhZDogMSwgY2FudGlkYWQ6MH0sXHJcbiAgICAgICAgJ2NvbiBwcm9ibGVtYXMnOntwcmlvcmlkYWQ6IDIsIGNhbnRpZGFkOjB9LFxyXG4gICAgICAgICdpbmNvbXBsZXRvJzp7cHJpb3JpZGFkOiAzLCBjYW50aWRhZDowfSxcclxuICAgICAgICAndmFjaW8nOntwcmlvcmlkYWQ6IDQsIGNhbnRpZGFkOjB9LFxyXG4gICAgICAgICdjaXRhIHBhY3RhZGEnOntwcmlvcmlkYWQ6IDUsIGNhbnRpZGFkOjB9LFxyXG4gICAgICAgICdvayc6e3ByaW9yaWRhZDogNiwgY2FudGlkYWQ6MH1cclxuICAgIH1cclxuICAgIHZhciBtaW4gPSA2O1xyXG4gICAgdmFyIG1pblJlc3VtZW46IFJlc3VtZW5Fc3RhZG8gPSAnb2snO1xyXG4gICAgZm9yKHZhciBmZWVkYmFjayBvZiBmZWVkQmFja1ZpdmllbmRhKXtcclxuICAgICAgICB2YXIgcmVzdW1lbiA9IGZlZWRiYWNrLnJlc3VtZW47XHJcbiAgICAgICAgcHJpb3JpZGFkZXNbcmVzdW1lbl0uY2FudGlkYWQrKztcclxuICAgICAgICBpZihwcmlvcmlkYWRlc1tyZXN1bWVuXS5wcmlvcmlkYWQ8bWluKXtcclxuICAgICAgICAgICAgbWluPXByaW9yaWRhZGVzW3Jlc3VtZW5dLnByaW9yaWRhZDtcclxuICAgICAgICAgICAgbWluUmVzdW1lbj1yZXN1bWVuO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGlmKG1pblJlc3VtZW49PSd2YWNpbycmJiBwcmlvcmlkYWRlc1snb2snXS5jYW50aWRhZCB8fCBtaW5SZXN1bWVuPT0naW5jb21wbGV0bycpe1xyXG4gICAgICAgIGlmKGZhbHNlIC8qcmVzcHVlc3Rhc1tzcDFdPT0yICYmIHJlc3B1ZXN0YXNbc3A2XT09bnVsbCovKXtcclxuICAgICAgICAgICAgbWluUmVzdW1lbj0nY2l0YSBwYWN0YWRhJztcclxuICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgbWluUmVzdW1lbj0naW5jb21wbGV0byc7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgXHJcbiAgICAvL1RPRE8gQVJSRUdMQVIgRVNURSBIT1JST1IsIEdFTkVSQUxJWkFSXHJcbiAgICB2YXIgdGFyZWEgPSBkYXRvc0J5UGFzcy5pbmZvcm1hY2lvbkhkcltmb3JQa1JhaXoudml2aWVuZGEgYXMgdW5rbm93biBhcyBJZEVuY10udGFyZWEudGFyZWE7XHJcbiAgICB2YXIgcmVzdW1lbkVzdGFkbzpSZXN1bWVuRXN0YWRvO1xyXG4gICAgdmFyIHJlc3VtZW5Fc3RhZG9TdXA6UmVzdW1lbkVzdGFkbztcclxuICAgIGlmKHRhcmVhPT0nc3VwZScpe1xyXG4gICAgICAgIHJlc3VtZW5Fc3RhZG9TdXAgPSBlc05vUmVhU3VwPydubyByZWEnOm1pblJlc3VtZW5cclxuICAgICAgICAvL3BhcmEgcXVlIGNvbG9yZWUgYmllbiBlbiBsYSBoZHIgZGVsIERNIChsdWVnbyBlbiBiYmRkIG5vIHNlIGd1YXJkYSlcclxuICAgICAgICByZXN1bWVuRXN0YWRvID0gcmVzdW1lbkVzdGFkb1N1cFxyXG4gICAgfWVsc2V7XHJcbiAgICAgICAgcmVzdW1lbkVzdGFkbyA9IGVzTm9SZWE/J25vIHJlYSc6bWluUmVzdW1lblxyXG4gICAgfVxyXG4gICAgdmFyIHJlc3VsdGFkbzpSZXN1bHRhZG9SZXN1bWVuID0ge1xyXG4gICAgICAgIHJlc3VtZW5Fc3RhZG8sXHJcbiAgICAgICAgcmVzdW1lbkVzdGFkb1N1cCxcclxuICAgICAgICBjb2RSZWEsXHJcbiAgICAgICAgY29kTm9SZWEsXHJcbiAgICAgICAgY29kUmVhU3VwLFxyXG4gICAgICAgIGNvZE5vUmVhU3VwXHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmVzdWx0YWRvXHJcbn1cclxuIl19