@magic-xpa/gui 4.901.0-dev491.337 → 4.901.0-dev491.339
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.
|
@@ -328,37 +328,7 @@ export class DisplayConvertor {
|
|
|
328
328
|
breakParams.month = breakParams.month - 1;
|
|
329
329
|
if (breakParams.year == 0 && breakParams.month == 0 && breakParams.day == 0)
|
|
330
330
|
return null;
|
|
331
|
-
|
|
332
|
-
let outVal = NString.ToCharArray(maskStr);
|
|
333
|
-
let len = pic.getMaskSize();
|
|
334
|
-
let year = breakParams.year;
|
|
335
|
-
let outIdx = 0;
|
|
336
|
-
while (len > 0) {
|
|
337
|
-
switch (outVal[outIdx].charCodeAt(0)) {
|
|
338
|
-
case PICInterface.PIC_YY:
|
|
339
|
-
{
|
|
340
|
-
this.int_2_a(outVal, outIdx, 2, breakParams.year, '0');
|
|
341
|
-
let yearStr = NString.FromChars(outVal, outIdx, 2);
|
|
342
|
-
year = +yearStr;
|
|
343
|
-
outIdx += 2;
|
|
344
|
-
len -= 2;
|
|
345
|
-
}
|
|
346
|
-
break;
|
|
347
|
-
case PICInterface.PIC_YYYY:
|
|
348
|
-
this.int_2_a(outVal, outIdx, 4, breakParams.year, '0');
|
|
349
|
-
let yearStr = NString.FromChars(outVal, outIdx, 4);
|
|
350
|
-
year = +yearStr;
|
|
351
|
-
outIdx += 4;
|
|
352
|
-
len -= 4;
|
|
353
|
-
break;
|
|
354
|
-
default:
|
|
355
|
-
outIdx++;
|
|
356
|
-
len--;
|
|
357
|
-
break;
|
|
358
|
-
}
|
|
359
|
-
}
|
|
360
|
-
let nativeDt = new Date(year, breakParams.month, breakParams.day);
|
|
361
|
-
return nativeDt;
|
|
331
|
+
return new Date(breakParams.year, breakParams.month, breakParams.day);
|
|
362
332
|
}
|
|
363
333
|
fromNativeDateToMgDateNumber(nativeDate, pic) {
|
|
364
334
|
let numVal;
|
|
@@ -1653,4 +1623,4 @@ export class DateBreakParams {
|
|
|
1653
1623
|
this.dow = dow_;
|
|
1654
1624
|
}
|
|
1655
1625
|
}
|
|
1656
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRGlzcGxheUNvbnZlcnRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2d1aS9zcmMvbWFuYWdlbWVudC9ndWkvRGlzcGxheUNvbnZlcnRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUMsR0FBRyxFQUFDLE1BQU0sT0FBTyxDQUFDO0FBQzFCLE9BQU8sRUFBQyxRQUFRLEVBQVEsT0FBTyxFQUFFLFFBQVEsRUFBRSxhQUFhLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUN0RixPQUFPLEVBQ0wsUUFBUSxFQUNSLFVBQVUsRUFDVixZQUFZLEVBQ1osWUFBWSxFQUNaLFVBQVUsRUFDVixnQkFBZ0IsRUFDaEIsT0FBTyxFQUNQLFdBQVcsRUFDWCxlQUFlLEVBQ2hCLE1BQU0sa0JBQWtCLENBQUM7QUFDMUIsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLGtCQUFrQixDQUFDO0FBQzFDLE9BQU8sRUFBQyxxQkFBcUIsRUFBQyxNQUFNLHlCQUF5QixDQUFDO0FBQzlELE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSxrQkFBa0IsQ0FBQztBQUMxQyxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sY0FBYyxDQUFDO0FBQ3hDLE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxjQUFjLENBQUM7QUFDcEMsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBQ3BELE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUdqRCxNQUFNLE9BQU8sZ0JBQWdCO0lBWTNCO1FBWFEsaUJBQVksR0FBaUIsSUFBSSxDQUFDO1FBQ2xDLGFBQVEsR0FBVyxDQUFDLENBQUM7UUFXM0IsSUFBSSxDQUFDLFlBQVksR0FBRyxjQUFjLENBQUMsV0FBVyxDQUFDO0lBQ2pELENBQUM7SUFURCxNQUFNLEtBQUssUUFBUTtRQUNqQixJQUFJLGdCQUFnQixDQUFDLFNBQVMsS0FBSyxJ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QUFNLEdBQUcsSUFBSSxDQUFDO1FBQ25CLElBQUksQ0FBQyxNQUFNLEdBQUcsT0FBTyxDQUFDO1FBQ3RCLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDO0lBQ2xCLENBQUM7Q0FDRjtBQU1ELE1BQU0sT0FBTyxlQUFlO0lBUzFCLFlBQVksS0FBYyxFQUFFLE1BQWUsRUFBRSxJQUFhLEVBQUUsSUFBYSxFQUFFLElBQWE7UUFSeEYsUUFBRyxHQUFXLENBQUMsQ0FBQztRQUNoQixRQUFHLEdBQVcsQ0FBQyxDQUFDO1FBQ2hCLFFBQUcsR0FBVyxDQUFDLENBQUM7UUFDaEIsVUFBSyxHQUFXLENBQUMsQ0FBQztRQUNsQixTQUFJLEdBQVcsQ0FBQyxDQUFDO1FBS2YsSUFBSSxTQUFTLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtZQUMxQixJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDckIsT0FBTztTQUNSO1FBQ0QsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDdEQsQ0FBQztJQUVPLGFBQWE7SUFDckIsQ0FBQztJQUVPLGFBQWEsQ0FBQyxLQUFhLEVBQUUsTUFBYyxFQUFFLElBQVksRUFBRSxJQUFZLEVBQUUsSUFBWTtRQUMzRixJQUFJLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQztRQUNsQixJQUFJLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQztRQUNwQixJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQztRQUNoQixJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQztRQUNoQixJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQztJQUNsQixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0lFbnZpcm9ubWVudH0gZnJvbSAnLi4vLi4vZW52L0lFbnZpcm9ubWVudCc7XHJcbmltcG9ydCB7UElDfSBmcm9tICcuL1BJQyc7XHJcbmltcG9ydCB7RGF0ZVRpbWUsIExpc3QsIE5TdHJpbmcsIFJlZlBhcmFtLCBTdHJpbmdCdWlsZGVyfSBmcm9tICdAbWFnaWMteHBhL21zY29yZWxpYic7XHJcbmltcG9ydCB7XHJcbiAgRGF0ZVV0aWwsXHJcbiAgSFRNTF8yX1NUUixcclxuICBNc2dJbnRlcmZhY2UsXHJcbiAgUElDSW50ZXJmYWNlLFxyXG4gIFNFUV8yX0hUTUwsXHJcbiAgU3RvcmFnZUF0dHJpYnV0ZSxcclxuICBTdHJVdGlsLFxyXG4gIFV0aWxEYXRlSnBuLFxyXG4gIFV0aWxTdHJCeXRlTW9kZVxyXG59IGZyb20gJ0BtYWdpYy14cGEvdXRpbHMnO1xyXG5pbXBvcnQge0Jsb2JUeXBlfSBmcm9tICcuLi9kYXRhL0Jsb2JUeXBlJztcclxuaW1wb3J0IHtWYWxpZGF0aW9uRGV0YWlsc0Jhc2V9IGZyb20gJy4vVmFsaWRhdGlvbkRldGFpbHNCYXNlJztcclxuaW1wb3J0IHtOVU1fVFlQRX0gZnJvbSAnLi4vZGF0YS9OVU1fVFlQRSc7XHJcbmltcG9ydCB7SGVicmV3RGF0ZX0gZnJvbSAnLi9IZWJyZXdEYXRlJztcclxuaW1wb3J0IHtFdmVudHN9IGZyb20gJy4uLy4uL0V2ZW50cyc7XHJcbmltcG9ydCB7R3VpRW52aXJvbm1lbnR9IGZyb20gJy4uLy4uL0d1aUVudmlyb25tZW50JztcclxuaW1wb3J0IHtNZW1vcnlVdGlsfSBmcm9tICcuLi8uLi91dGlsL01lbW9yeVV0aWwnO1xyXG5cclxuLy8gQGR5bmFtaWNcclxuZXhwb3J0IGNsYXNzIERpc3BsYXlDb252ZXJ0b3Ige1xyXG4gIHByaXZhdGUgX2Vudmlyb25tZW50OiBJRW52aXJvbm1lbnQgPSBudWxsO1xyXG4gIHByaXZhdGUgREFURUNIQVI6IG51bWJlciA9IDA7XHJcbiAgcHJpdmF0ZSBzdGF0aWMgX2luc3RhbmNlOiBEaXNwbGF5Q29udmVydG9yID0gbnVsbDtcclxuXHJcbiAgc3RhdGljIGdldCBJbnN0YW5jZSgpOiBEaXNwbGF5Q29udmVydG9yIHtcclxuICAgIGlmIChEaXNwbGF5Q29udmVydG9yLl9pbnN0YW5jZSA9PT0gbnVsbCkge1xyXG4gICAgICBEaXNwbGF5Q29udmVydG9yLl9pbnN0YW5jZSA9IG5ldyBEaXNwbGF5Q29udmVydG9yKCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gRGlzcGxheUNvbnZlcnRvci5faW5zdGFuY2U7XHJcbiAgfVxyXG5cclxuICBjb25zdHJ1Y3RvcigpIHtcclxuICAgIHRoaXMuX2Vudmlyb25tZW50ID0gR3VpRW52aXJvbm1lbnQuRW52aXJvbm1lbnQ7XHJcbiAgfVxyXG5cclxuICBnZXROZXdEYXRlQnJlYWtQYXJhbXMoKTogRGF0ZUJyZWFrUGFyYW1zIHtcclxuICAgIHJldHVybiBuZXcgRGF0ZUJyZWFrUGFyYW1zKCk7XHJcbiAgfVxyXG5cclxuICBnZXROZXdUaW1lQnJlYWtQYXJhbXMoKTogVGltZUJyZWFrUGFyYW1zIHtcclxuICAgIHJldHVybiBuZXcgVGltZUJyZWFrUGFyYW1zKCk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgQnVpbGQgYSBkaXNwbGF5IHN0cmluZyBvZiBhIHZhbHVlIGZyb20gaXRzIHBpY3R1cmUgZm9ybWF0XHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcIm1nVmFsdWVcIj4gIHRoZSBpbnRlcm5hbCB2YWx1ZSAoYXMgc2VudCBpbiB0aGUgWE1MKVxyXG4gIC8vLyA8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwicmFuZ2VTdHJcIj4gdmFsdWUgcmFuZ2VcclxuICAvLy8gPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInBpY1wiPiAgICAgIHRoZSBwaWN0dXJlIGZvcm1hdFxyXG4gIC8vLyA8L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz4gc3RyaW5nIHRvIGRpc3BsYXlcclxuICAvLy8gPC9yZXR1cm5zPlxyXG4gIG1nMmRpc3AobWdWYWx1ZTogc3RyaW5nLCByYW5nZVN0cjogc3RyaW5nLCBwaWM6IFBJQywgdXNlTmF0aXZlOiBib29sZWFuLCBjb21wSWR4OiBudW1iZXIsIHRpbWVfZGF0ZV9waWNfWl9lZHQ6IGJvb2xlYW4pOiBhbnk7XHJcbiAgbWcyZGlzcChtZ1ZhbHVlOiBzdHJpbmcsIHJhbmdlU3RyOiBzdHJpbmcsIHBpYzogUElDLCB1c2VOYXRpdmU6IGJvb2xlYW4sIGFsd2F5c0ZpbGw6IGJvb2xlYW4sIGNvbXBJZHg6IG51bWJlciwgdGltZV9kYXRlX3BpY19aX2VkdDogYm9vbGVhbik6IGFueTtcclxuICBtZzJkaXNwKG1nVmFsdWU6IHN0cmluZywgcmFuZ2VTdHI6IHN0cmluZywgcGljOiBQSUMsIHVzZU5hdGl2ZTogYm9vbGVhbiwgYWx3YXlzRmlsbDogYm9vbGVhbiwgY29tcElkeDogbnVtYmVyLCBjb252ZXJ0Q2FzZTogYm9vbGVhbiwgdGltZV9kYXRlX251bV9waWNfWl9lZHQ6IGJvb2xlYW4pOiBhbnk7XHJcbiAgbWcyZGlzcChtZ1ZhbHVlOiBzdHJpbmcsIHJhbmdlU3RyOiBzdHJpbmcsIHBpYzogUElDLCB1c2VOYXRpdmU6IGJvb2xlYW4sIGNvbXBJZHhPckFsd2F5c0ZpbGw6IGFueSwgdGltZV9kYXRlX3BpY19aX2VkdE9yQ29tcElkeDogYW55LCB0aW1lX2RhdGVfcGljX1pfZWR0T3JDb252ZXJ0Q2FzZT86IGJvb2xlYW4sIHRpbWVfZGF0ZV9udW1fcGljX1pfZWR0PzogYm9vbGVhbik6IGFueSB7XHJcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gNilcclxuICAgICAgcmV0dXJuIHRoaXMubWcyZGlzcF8wKG1nVmFsdWUsIHJhbmdlU3RyLCBwaWMsIHVzZU5hdGl2ZSwgY29tcElkeE9yQWx3YXlzRmlsbCwgdGltZV9kYXRlX3BpY19aX2VkdE9yQ29tcElkeCk7XHJcblxyXG4gICAgZWxzZSBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gNylcclxuICAgICAgcmV0dXJuIHRoaXMubWcyZGlzcF8xKG1nVmFsdWUsIHJhbmdlU3RyLCBwaWMsIHVzZU5hdGl2ZSwgY29tcElkeE9yQWx3YXlzRmlsbCwgdGltZV9kYXRlX3BpY19aX2VkdE9yQ29tcElkeCwgdGltZV9kYXRlX3BpY19aX2VkdE9yQ29udmVydENhc2UpO1xyXG5cclxuICAgIGVsc2VcclxuICAgICAgcmV0dXJuIHRoaXMubWcyZGlzcF8yKG1nVmFsdWUsIHJhbmdlU3RyLCBwaWMsIHVzZU5hdGl2ZSwgY29tcElkeE9yQWx3YXlzRmlsbCwgdGltZV9kYXRlX3BpY19aX2VkdE9yQ29tcElkeCwgdGltZV9kYXRlX3BpY19aX2VkdE9yQ29udmVydENhc2UsIHRpbWVfZGF0ZV9udW1fcGljX1pfZWR0KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgbWcyZGlzcF8wKG1nVmFsdWU6IHN0cmluZywgcmFuZ2VTdHI6IHN0cmluZywgcGljOiBQSUMsIHVzZU5hdGl2ZTogYm9vbGVhbiwgY29tcElkeDogbnVtYmVyLCB0aW1lX2RhdGVfcGljX1pfZWR0OiBib29sZWFuKTogYW55IHtcclxuICAgIHJldHVybiB0aGlzLm1nMmRpc3AobWdWYWx1ZSwgcmFuZ2VTdHIsIHBpYywgdXNlTmF0aXZlLCBmYWxzZSwgY29tcElkeCwgdGltZV9kYXRlX3BpY19aX2VkdCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIG1nMmRpc3BfMShtZ1ZhbHVlOiBzdHJpbmcsIHJhbmdlU3RyOiBzdHJpbmcsIHBpYzogUElDLCB1c2VOYXRpdmU6IGJvb2xlYW4sIGFsd2F5c0ZpbGw6IGJvb2xlYW4sIGNvbXBJZHg6IG51bWJlciwgdGltZV9kYXRlX3BpY19aX2VkdDogYm9vbGVhbik6IGFueSB7XHJcbiAgICByZXR1cm4gdGhpcy5tZzJkaXNwKG1nVmFsdWUsIHJhbmdlU3RyLCBwaWMsIHVzZU5hdGl2ZSwgYWx3YXlzRmlsbCwgY29tcElkeCwgZmFsc2UsIHRpbWVfZGF0ZV9waWNfWl9lZHQpO1xyXG5cclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBCdWlsZCBhIGRpc3BsYXkgc3RyaW5nIG9mIGEgdmFsdWUgZnJvbSBpdHMgcGljdHVyZSBmb3JtYXRcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwibWdWYWx1ZVwiPnRoZSBpbnRlcm5hbCB2YWx1ZSAoYXMgc2VudCBpbiB0aGUgWE1MKVxyXG4gIC8vLyA8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwicmFuZ2VTdHJcIj52YWx1ZSByYW5nZVxyXG4gIC8vLyA8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwicGljXCI+dGhlIHBpY3R1cmUgZm9ybWF0XHJcbiAgLy8vIDwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJhbHdheXNGaWxsXCI+QWx3YXlzIGF1dG8gZmlsbCBhbHBoYSBvdmVyIGl0cyBwaWN0dXJlICh1c2VkIGZvciBzZWxlY3QgY29udHJvbHMpXHJcbiAgLy8vIDwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPiBzdHJpbmcgdG8gZGlzcGxheVxyXG4gIC8vLyA8L3JldHVybnM+XHJcbiAgcHVibGljIG1nMmRpc3BfMihtZ1ZhbHVlOiBzdHJpbmcsIHJhbmdlU3RyOiBzdHJpbmcsIHBpYzogUElDLCB1c2VOYXRpdmU6IGJvb2xlYW4sIGFsd2F5c0ZpbGw6IGJvb2xlYW4sIGNvbXBJZHg6IG51bWJlciwgY29udmVydENhc2U6IGJvb2xlYW4sIHRpbWVfZGF0ZV9udW1fcGljX1pfZWR0OiBib29sZWFuKTogYW55IHtcclxuICAgIGxldCBzdHI6IHN0cmluZyA9IFwiXCI7XHJcbiAgICBsZXQgdG1wUmFuZ2U6IHN0cmluZyA9IChyYW5nZVN0ciA9PT0gbnVsbCkgPyBcIlwiIDogcmFuZ2VTdHI7XHJcblxyXG4gICAgc3dpdGNoIChwaWMuZ2V0QXR0cigpKSB7XHJcblxyXG4gICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuQUxQSEE6XHJcbiAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5VTklDT0RFOlxyXG4gICAgICAgIHN0ciA9IHRoaXMuZnJvbUFscGhhKG1nVmFsdWUsIHBpYywgdG1wUmFuZ2UsIGFsd2F5c0ZpbGwsIGNvbnZlcnRDYXNlKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5OVU1FUklDOiB7XHJcblxyXG4gICAgICAgIC8vIE5vdywgY3VycmVjeSBkaXJlY3RpdmUgc3VwcG9ydGVkLCBidXQgdGhpcyB3aWxsIGJlIGhhbmRsZWQgYnkgYW5ndWxhciBwYWNrYWdlcyBsaWtlIG5nLWN1cnJlbmN5XHJcbiAgICAgICAgLy8gaGVyZSBpdCBzaG91bGQgc2ltcGx5IHBhc3MgdGhlIGFjdHVhbCBuYXRpdmUgdmFsdWUgb2YgbnVtYmVyIGFuZCBtYXNrcyBzaG91bGQgbm90IGJlIGFwcGxpZWRcclxuICAgICAgICAvLyBTbywgcHJlcGFyZSB0ZW1wb3JhcnkgcGljdHVyZSB0byBnZW5lcmF0ZSBuYXRpdmUgdmFsdWUuXHJcbiAgICAgICAgbGV0ICBuZXdQaWMgPSBwaWMuZ2V0VW5mb3JtYXR0ZWROdW1lcmljUGljKCk7XHJcblxyXG4gICAgICAgIC8vc3RvcmUgYW5kIHJlc3RvcmUgZGVjaW1hbCBzZXAgYW5kIHRob3UuIHNlcFxyXG4gICAgICAgIGxldCAgZGVjOiBzdHJpbmcgPSBHdWlFbnZpcm9ubWVudC5FbnZpcm9ubWVudC5HZXREZWNpbWFsKCk7XHJcbiAgICAgICAgbGV0IHRob3U6c3RyaW5nICA9IEd1aUVudmlyb25tZW50LkVudmlyb25tZW50LkdldFRob3VzYW5kcygpO1xyXG5cclxuICAgICAgICAvL3NldCBkZWZhdWx0IHZhbHVlc1xyXG4gICAgICAgIEd1aUVudmlyb25tZW50LkVudmlyb25tZW50LnNldERlY2ltYWxTZXBhcmF0b3IoJy4nKTtcclxuICAgICAgICBHdWlFbnZpcm9ubWVudC5FbnZpcm9ubWVudC5zZXRUaG91c2FuZHNTZXBhcmF0b3IoJywnKTtcclxuXHJcbiAgICAgICAgc3RyID0gdGhpcy5mcm9tTnVtKG1nVmFsdWUsIG5ld1BpYyk7XHJcbiAgICAgICAgR3VpRW52aXJvbm1lbnQuRW52aXJvbm1lbnQuc2V0RGVjaW1hbFNlcGFyYXRvcihkZWMpO1xyXG4gICAgICAgIEd1aUVudmlyb25tZW50LkVudmlyb25tZW50LnNldFRob3VzYW5kc1NlcGFyYXRvcih0aG91KTtcclxuICAgICAgICAvLyBWYWx1ZSBzaG91bGQgYmUgdHJpbW1lZCB3aGVuIHdlIGFyZSBkaXNwbGF5aW5nIGNvbnRyb2wgaW4gb3JkZXIgdG8gZGlzcGxheSBhbGlnbm1lbnQgcHJvcGVybHkuIEJ1dCB3aGlsZSBlbnRlcmluZyBjb250cm9sLCBpdCBzaG91bGQgbm90IGJlIHRyaW1tZWRcclxuICAgICAgICAvLyBpbiBvcmRlciB0byByZWFkIGl0IHByb3Blcmx5LlxyXG4gICAgICAgIGlmIChuZXdQaWMuZ2V0TWFza0NoYXJzKCkgPT09IDAgfHwgIXRpbWVfZGF0ZV9udW1fcGljX1pfZWR0KVxyXG4gICAgICAgICAgc3RyID0gU3RyVXRpbC5sdHJpbShzdHIpO1xyXG5cclxuICAgICAgICBpZiAodXNlTmF0aXZlKSB7XHJcbiAgICAgICAgICBpZiAoc3RyID09IFwiXCIpXHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG5cclxuICAgICAgICAgIGxldCBkYmw6IG51bWJlciA9IE51bWJlcihzdHIpO1xyXG4gICAgICAgICAgcmV0dXJuIGRibDtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgICAgcmV0dXJuIHN0cjtcclxuICAgICAgfVxyXG4gICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuREFURToge1xyXG4gICAgICAgIGlmICh1c2VOYXRpdmUpIHtcclxuICAgICAgICAgIGxldCBkdDogRGF0ZTtcclxuICAgICAgICAgIGR0ID0gdGhpcy5mcm9tTWdEYXRlVG9OYXRpdmVEYXRlKG1nVmFsdWUsIHBpYywgY29tcElkeCk7XHJcbiAgICAgICAgICByZXR1cm4gZHQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgc3RyID0gdGhpcy5mcm9tRGF0ZShtZ1ZhbHVlLCBwaWMsIGNvbXBJZHgsIHRpbWVfZGF0ZV9udW1fcGljX1pfZWR0KTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuVElNRToge1xyXG4gICAgICAgIGlmICh1c2VOYXRpdmUpIHtcclxuICAgICAgICAgIGxldCBkdDogRGF0ZTtcclxuICAgICAgICAgIGR0ID0gdGhpcy5mcm9tTWdUaW1lVG9OYXRpdmVUaW1lKG1nVmFsdWUsIHBpYyk7XHJcbiAgICAgICAgICByZXR1cm4gZHQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgc3RyID0gdGhpcy5mcm9tVGltZShtZ1ZhbHVlLCBwaWMsIHRpbWVfZGF0ZV9udW1fcGljX1pfZWR0KTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuQk9PTEVBTjoge1xyXG4gICAgICAgIGxldCBsb2dWYWw6IGJvb2xlYW47XHJcbiAgICAgICAgbG9nVmFsID0gdGhpcy5mcm9tTWdMb2dpY2FsVG9OYXRpdmVMb2dpY2FsKG1nVmFsdWUpO1xyXG4gICAgICAgIHJldHVybiBsb2dWYWw7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5CTE9COlxyXG4gICAgICAgIHN0ciA9IEJsb2JUeXBlLmdldFN0cmluZyhtZ1ZhbHVlKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLkJMT0JfVkVDVE9SOlxyXG4gICAgICAgIHN0ciA9IG1nVmFsdWU7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gc3RyO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIEJ1aWxkIGFuIGludGVybmFsIHJlcHJlc2VudGF0aW9uIG9mIGEgZGlzcGxheSB2YWx1ZSBmcm9tIGl0cyBwaWN0dXJlIGZvcm1hdFxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJkaXNwVmFsdWVcIj50aGUgdmFsdWUgYXMgZW50ZXJlZCBieSB1c2VyXHJcbiAgLy8vIDwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJyYW5nZVN0clwiPnZhbHVlIHJhbmdlXHJcbiAgLy8vIDwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJwaWNcIj50aGUgcGljdHVyZSBmb3JtYXRcclxuICAvLy8gPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImJsb2JDb250ZW50VHlwZVwiPmlmIHRoZSBhdHRyaWJ1dGUgaXMgYmxvYiwgaXRzIGNvbnRlbnQgdHlwZVxyXG4gIC8vLyA8L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz4gaW50ZXJuYWwgZm9ybSBvZiBkYXRhIChhcyB1c2VkIGluIHRoZSBYTUwpXHJcbiAgLy8vIDwvcmV0dXJucz5cclxuICBkaXNwMm1nKGRpc3BWYWx1ZTogYW55LCBwaWM6IFBJQywgY29tcElkeDogbnVtYmVyLCBibG9iQ29udGVudFR5cGU6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBsZXQgc3RyOiBzdHJpbmcgPSBcIlwiO1xyXG5cclxuICAgIHN3aXRjaCAocGljLmdldEF0dHIoKSkge1xyXG4gICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuQUxQSEE6XHJcbiAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5VTklDT0RFOlxyXG4gICAgICAgIHN0ciA9IHRoaXMudG9BbHBoYShkaXNwVmFsdWUsIHBpYyk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG5cclxuICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLk5VTUVSSUM6IHtcclxuICAgICAgICBkaXNwVmFsdWUgPSBTdHJpbmcoZGlzcFZhbHVlKTtcclxuICAgICAgICAvLyBSZW1vdmUgdGhlIG1hc2sgZnJvbSBkaXNwbGF5IHZhbHVlLlxyXG4gICAgICAgIGxldCBsZW46IG51bWJlciA9IGRpc3BWYWx1ZS5sZW5ndGg7XHJcbiAgICAgICAgd2hpbGUgKGxlbiA+IDApIHtcclxuICAgICAgICAgIGlmICghcGljLnBpY0lzTWFzayhsZW4gLSAxKSAmJiBkaXNwVmFsdWVbbGVuIC0gMV0gIT09ICgnICcpKVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIGxlbi0tO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoZGlzcFZhbHVlLmxlbmd0aCA+IGxlbilcclxuICAgICAgICAgIGRpc3BWYWx1ZSA9IE5TdHJpbmcuUmVtb3ZlKGRpc3BWYWx1ZSwgbGVuLCAoZGlzcFZhbHVlLmxlbmd0aCAtIGxlbikpO1xyXG5cclxuICAgICAgICBpZiAocGljLmlzTmVnYXRpdmUoKSAmJiBkaXNwVmFsdWUudHJpbSgpLnN0YXJ0c1dpdGgoXCItXCIpKVxyXG4gICAgICAgICAgZGlzcFZhbHVlID0gU3RyVXRpbC5sdHJpbShkaXNwVmFsdWUpO1xyXG5cclxuICAgICAgICAvL3N0b3JlIGFuZCByZXN0b3JlIGRlY2ltYWwgc2VwIGFuZCB0aG91LiBzZXBcclxuICAgICAgICBsZXQgIGRlYzogc3RyaW5nID0gR3VpRW52aXJvbm1lbnQuRW52aXJvbm1lbnQuR2V0RGVjaW1hbCgpO1xyXG4gICAgICAgIGxldCB0aG91OnN0cmluZyAgPSBHdWlFbnZpcm9ubWVudC5FbnZpcm9ubWVudC5HZXRUaG91c2FuZHMoKTtcclxuXHJcbiAgICAgICAgLy9zZXQgZGVmYXVsdCB2YWx1ZXNcclxuICAgICAgICBHdWlFbnZpcm9ubWVudC5FbnZpcm9ubWVudC5zZXREZWNpbWFsU2VwYXJhdG9yKCcuJyk7XHJcbiAgICAgICAgR3VpRW52aXJvbm1lbnQuRW52aXJvbm1lbnQuc2V0VGhvdXNhbmRzU2VwYXJhdG9yKCcsJyk7XHJcblxyXG4gICAgICAgIC8vIE5vdywgY3VycmVjeSBkaXJlY3RpdmUgc3VwcG9ydGVkLCBidXQgdGhpcyB3aWxsIGJlIGhhbmRsZWQgYnkgYW5ndWxhciBwYWNrYWdlcyBsaWtlIG5nLWN1cnJlbmN5XHJcbiAgICAgICAgLy8gaGVyZSBpdCBzaG91bGQgc2ltcGx5IHBhc3MgdGhlIGFjdHVhbCBuYXRpdmUgdmFsdWUgb2YgbnVtYmVyIGFuZCBtYXNrcyBzaG91bGQgbm90IGJlIGFwcGxpZWRcclxuICAgICAgICAvLyBTbywgcHJlcGFyZSB0ZW1wb3JhcnkgcGljdHVyZSB0byBnZW5lcmF0ZSBuYXRpdmUgdmFsdWUuXHJcbiAgICAgICAgbGV0ICBuZXdQaWMgPSBwaWMuZ2V0VW5mb3JtYXR0ZWROdW1lcmljUGljKCk7XHJcblxyXG4gICAgICAgIHN0ciA9IHRoaXMudG9OdW0oZGlzcFZhbHVlLCBuZXdQaWMsIGNvbXBJZHgpO1xyXG5cclxuICAgICAgICBHdWlFbnZpcm9ubWVudC5FbnZpcm9ubWVudC5zZXREZWNpbWFsU2VwYXJhdG9yKGRlYyk7XHJcbiAgICAgICAgR3VpRW52aXJvbm1lbnQuRW52aXJvbm1lbnQuc2V0VGhvdXNhbmRzU2VwYXJhdG9yKHRob3UpO1xyXG4gICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG5cclxuICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLkRBVEU6XHJcbiAgICAgIHtcclxuICAgICAgICBsZXQgZHQ6IERhdGU7XHJcbiAgICAgICAgLy93aGVuIGRhdGUgaXMgaW4gaXRlbSBsaXN0IGZvciBjaG9pY2UgY3RybCwgaXQgd2lsbCBjb21lIGhlcmUgYXMgc3RyaW5nLiBzbyBjb252ZXJ0IGl0IHRvIERhdGUuXHJcbiAgICAgICAgaWYgKHR5cGVvZiBkaXNwVmFsdWUgPT09ICdzdHJpbmcnKVxyXG4gICAgICAgICAgZHQgPSBuZXcgRGF0ZSAoZGlzcFZhbHVlKTtcclxuICAgICAgICBlbHNlXHJcbiAgICAgICAgICBkdCA9IGRpc3BWYWx1ZTtcclxuICAgICAgICBzdHIgPSB0aGlzLmZyb21OYXRpdmVEYXRlVG9NZ0RhdGUoZHQsIHBpYyk7XHJcbiAgICAgIH1cclxuICAgICAgYnJlYWs7XHJcblxyXG5cclxuICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLlRJTUU6IHtcclxuICAgICAgICBsZXQgZHQ6IERhdGU7XHJcblxyXG4gICAgICAgIC8vd2hlbiBkYXRlIGlzIGluIGl0ZW0gbGlzdCBmb3IgY2hvaWNlIGN0cmwsIGl0IHdpbGwgY29tZSBoZXJlIGFzIHN0cmluZy4gc28gY29udmVydCBpdCB0byBEYXRlLlxyXG4gICAgICAgIGlmICh0eXBlb2YgZGlzcFZhbHVlID09PSAnc3RyaW5nJylcclxuICAgICAgICB7XHJcbiAgICAgICAgICBkdCA9IG5ldyBEYXRlKCk7XHJcbiAgICAgICAgICBpZiAoZGlzcFZhbHVlICE9PSBudWxsKSB7XHJcbiAgICAgICAgICAgIGR0LnNldEhvdXJzKCtTdHJpbmcoZGlzcFZhbHVlKS5zdWJzdHIoMCwgMikpO1xyXG4gICAgICAgICAgICBkdC5zZXRNaW51dGVzKCtTdHJpbmcoZGlzcFZhbHVlKS5zdWJzdHIoMCwgMikpO1xyXG4gICAgICAgICAgICBpZiAoU3RyaW5nKGRpc3BWYWx1ZSkubGVuZ3RoID4gNSlcclxuICAgICAgICAgICAgICBkdC5zZXRTZWNvbmRzKCtTdHJpbmcoZGlzcFZhbHVlKS5zdWJzdHIoMCwgMikpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgICAgZHQgPSBkaXNwVmFsdWU7XHJcblxyXG4gICAgICAgIHN0ciA9IHRoaXMuZnJvbU5hdGl2ZVRpbWVUb01nVGltZShkdCk7XHJcbiAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuXHJcblxyXG4gICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuQk9PTEVBTjpcclxuICAgICAgICBzdHIgPSB0aGlzLmZyb21OYXRpdmVMb2dpY2FsVG9NZ0xvZ2ljYWwoZGlzcFZhbHVlKTtcclxuICAgICAgICBicmVhaztcclxuXHJcblxyXG4gICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuQkxPQjpcclxuICAgICAgICBzdHIgPSBCbG9iVHlwZS5jcmVhdGVGcm9tU3RyaW5nKGRpc3BWYWx1ZSwgYmxvYkNvbnRlbnRUeXBlKTtcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuICAgIHJldHVybiBzdHI7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICBNZXRob2RzIGZvciBjb3ZlcnRpbmcgSU5URVJOQUwgLS0tPiBESVBMQVlcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgSGFuZGxlcyBtYWdpYyBudW1iZXIgdmFsdWVcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwibWdOdW1cIj4gICBBIE1hZ2ljIE51bWJlcjwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJwaWNTdHJcIj4gIFRoZSBwaWN0dXJlIHRvIHVzZTwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPiB0aGUgc3RyaW5nIHRvIGJlIGRpc3BsYXllZDwvcmV0dXJucz5cclxuICBwdWJsaWMgZnJvbU51bShtZ1ZhbHVlOiBzdHJpbmcsIHBpYzogUElDKTogc3RyaW5nIHtcclxuICAgIGxldCBtZ051bTogTlVNX1RZUEUgPSBuZXcgTlVNX1RZUEUobWdWYWx1ZSk7XHJcbiAgICByZXR1cm4gbWdOdW0udG9EaXNwbGF5VmFsdWUocGljKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBCdWlsZCBhIGRpc3BsYXkgc3RyaW5nIGZvciBhbiBhbHBoYSB2YWx1ZSBhY2NvcmRpbmcgdG8gdGhlIHBpY3R1cmVcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiZGF0YVN0clwiPiAgIFRoZSBzb3VyY2UgZGF0YVxyXG4gIC8vLyA8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwicGljU3RyXCI+ICAgIFRoZSBwaWN0dXJlIHRvIHVzZSBmb3IgdGhlIHZhbHVlIHRvIGRpc3BsYXlcclxuICAvLy8gPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInJhbmdlU3RyXCI+ICBUaGUgcmFuZ2Ugb2YgdmFsdWVzIHRvIGNoZWNrXHJcbiAgLy8vIDwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJhbHdheXNGaWxsXCI+QWx3YXlzIGF1dG8gZmlsbCBhbHBoYSBvdmVyIGl0cyBwaWN0dXJlICh1c2VkIGZvciBzZWxlY3QgY29udHJvbHMpXHJcbiAgLy8vIDwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPiB0aGUgc3RyaW5nIHRvIGJlIGRpc3BsYXllZFxyXG4gIC8vLyA8L3JldHVybnM+XHJcbiAgcHJpdmF0ZSBmcm9tQWxwaGEoZGF0YVN0cjogc3RyaW5nLCBwaWM6IFBJQywgcmFuZ2VTdHI6IHN0cmluZywgYWx3YXlzRmlsbDogYm9vbGVhbiwgY29udmVydENhc2U6IGJvb2xlYW4pOiBzdHJpbmcge1xyXG4gICAgbGV0IGxlbjogbnVtYmVyID0gcGljLmdldE1hc2tTaXplKCk7XHJcbiAgICBsZXQgbWluX2xlbjogbnVtYmVyID0gbGVuO1xyXG4gICAgbGV0IG1hc2tTdHI6IHN0cmluZyA9IHBpYy5nZXRNYXNrKCk7XHJcbiAgICBsZXQgcmVzU3RyOiBzdHJpbmc7XHJcblxyXG4gICAgaWYgKHBpYy5nZXRNYXNrQ2hhcnMoKSA+IDApIHtcclxuICAgICAgcmVzU3RyID0gdGhpcy53aW5fZGF0YV9jcHkoTlN0cmluZy5Ub0NoYXJBcnJheShtYXNrU3RyKSwgbGVuLCBOU3RyaW5nLlRvQ2hhckFycmF5KGRhdGFTdHIpLCBwaWMuaXNBdHRyQWxwaGEoKSwgY29udmVydENhc2UpO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIGlmIChVdGlsU3RyQnl0ZU1vZGUuaXNMb2NhbGVEZWZMYW5nREJDUygpICYmIHBpYy5pc0F0dHJBbHBoYSgpKVxyXG4gICAgICAvLyBKUE46IERCQ1Mgc3VwcG9ydFxyXG4gICAgICB7XHJcbiAgICAgICAgLy8gc3Vic3RyaW5nIGJ5IHRoZSBudW1iZXIgb2YgYnl0ZXNcclxuICAgICAgICBsZXQgaW50RGF0YVN0ckxlbkI6IG51bWJlciA9IFV0aWxTdHJCeXRlTW9kZS5sZW5CKGRhdGFTdHIpO1xyXG4gICAgICAgIGlmIChtaW5fbGVuID4gaW50RGF0YVN0ckxlbkIpIHtcclxuICAgICAgICAgIG1pbl9sZW4gPSBpbnREYXRhU3RyTGVuQjtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmVzU3RyID0gVXRpbFN0ckJ5dGVNb2RlLmxlZnRCKGRhdGFTdHIsIG1pbl9sZW4pO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2UgaWYgKGRhdGFTdHIgIT09IG51bGwpIHtcclxuICAgICAgICBpZiAobWluX2xlbiA+IGRhdGFTdHIubGVuZ3RoKSB7XHJcbiAgICAgICAgICBtaW5fbGVuID0gZGF0YVN0ci5sZW5ndGg7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChjb252ZXJ0Q2FzZSkge1xyXG4gICAgICAgICAgcmVzU3RyID0gdGhpcy53aW5fZGF0YV9jcHkoTlN0cmluZy5Ub0NoYXJBcnJheShtYXNrU3RyKSwgbGVuLCBOU3RyaW5nLlRvQ2hhckFycmF5KGRhdGFTdHIpLCBwaWMuaXNBdHRyQWxwaGEoKSwgY29udmVydENhc2UpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgIHJlc1N0ciA9IGRhdGFTdHIuc3Vic3RyKDAsIG1pbl9sZW4pO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIFdlIGRvIG5vdCBmaWxsIEFscGhhIGZpbGVkIG92ZXIgY29udHJvbCdzIHBpY3R1cmUgbGVuZ3RoIFFDUiAjIDI5NTQwOFxyXG4gICAgaWYgKGFsd2F5c0ZpbGwgfHwgKHJhbmdlU3RyICE9PSBudWxsICYmIHJhbmdlU3RyLmxlbmd0aCA+IDAgJiYgcmVzU3RyLmxlbmd0aCA8IGxlbikpIHtcclxuICAgICAgbGV0IHZkOiBWYWxpZGF0aW9uRGV0YWlsc0Jhc2UgPSBuZXcgVmFsaWRhdGlvbkRldGFpbHNCYXNlKHJhbmdlU3RyKTtcclxuICAgICAgbGV0IGNvbnRpbnVvdXNSYW5nZVZhbHVlczogTGlzdDxzdHJpbmc+ID0gdmQuZ2V0Q29udGludW91c1JhbmdlVmFsdWVzKCk7XHJcbiAgICAgIGxldCBkaXNjcmV0ZVJhbmdlVmFsdWVzOiBMaXN0PHN0cmluZz4gPSB2ZC5nZXREaXNjcmV0ZVJhbmdlVmFsdWVzKCk7XHJcbiAgICAgIGlmIChjb250aW51b3VzUmFuZ2VWYWx1ZXMgIT09IG51bGwgfHwgZGlzY3JldGVSYW5nZVZhbHVlcyAhPT0gbnVsbCkge1xyXG4gICAgICAgIHJlc1N0ciA9IHRoaXMuZmlsbEFscGhhQnlSYW5nZShjb250aW51b3VzUmFuZ2VWYWx1ZXMsIGRpc2NyZXRlUmFuZ2VWYWx1ZXMsIHJlc1N0cik7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiByZXNTdHI7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNhc2VDb252ZXJ0ZWRDaGFyKGRhdGE6IHN0cmluZywgbWFzazogc3RyaW5nKTogc3RyaW5nIHtcclxuXHJcbiAgICBsZXQgY2g6IHN0cmluZztcclxuICAgIGlmIChtYXNrLmNoYXJDb2RlQXQoMCkgPT09IFBJQ0ludGVyZmFjZS5QSUNfVSkge1xyXG4gICAgICBjaCA9IGRhdGEudG9VcHBlckNhc2UoKTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICBpZiAobWFzay5jaGFyQ29kZUF0KDApID09PSBQSUNJbnRlcmZhY2UuUElDX0wpIHtcclxuICAgICAgICBjaCA9IGRhdGEudG9Mb3dlckNhc2UoKTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICBjaCA9IGRhdGE7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBjaDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgd2luX2RhdGFfY3B5KG1hc2tTdHI6IHN0cmluZ1tdLCBtYXNrTGVuOiBudW1iZXIsIGRhdGFTdHI6IHN0cmluZ1tdLCBpc0F0dHJBbHBoYTogYm9vbGVhbik6IHN0cmluZztcclxuICBwcml2YXRlIHdpbl9kYXRhX2NweShtYXNrU3RyOiBzdHJpbmdbXSwgbWFza0xlbjogbnVtYmVyLCBkYXRhU3RyOiBzdHJpbmdbXSwgaXNBdHRyQWxwaGE6IGJvb2xlYW4sIGNvbnZlcnRDYXNlOiBib29sZWFuKTogc3RyaW5nO1xyXG4gIHByaXZhdGUgd2luX2RhdGFfY3B5KG1hc2tTdHI6IGFueSwgbWFza0xlbjogbnVtYmVyLCBkYXRhU3RyOiBhbnksIGlzQXR0ckFscGhhOiBib29sZWFuLCBjb252ZXJ0Q2FzZT86IGJvb2xlYW4pOiBzdHJpbmcge1xyXG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDQpXHJcbiAgICAgIHJldHVybiB0aGlzLndpbl9kYXRhX2NweV8wKG1hc2tTdHIsIG1hc2tMZW4sIGRhdGFTdHIsIGlzQXR0ckFscGhhKTtcclxuXHJcbiAgICByZXR1cm4gdGhpcy53aW5fZGF0YV9jcHlfMShtYXNrU3RyLCBtYXNrTGVuLCBkYXRhU3RyLCBpc0F0dHJBbHBoYSwgY29udmVydENhc2UpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB3aW5fZGF0YV9jcHlfMChtYXNrU3RyOiBzdHJpbmdbXSwgbWFza0xlbjogbnVtYmVyLCBkYXRhU3RyOiBzdHJpbmdbXSwgaXNBdHRyQWxwaGE6IGJvb2xlYW4pOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMud2luX2RhdGFfY3B5KG1hc2tTdHIsIG1hc2tMZW4sIGRhdGFTdHIsIGlzQXR0ckFscGhhLCBmYWxzZSk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgSGFuZGxlcyBhbHBoYSB2YWx1ZVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJtYXNrU3RyXCI+ICAgVGhlIG1hc2sgdG8gYmUgdXNlZCBpbiBvcmRlciB0byBidWlsZCB0aGUgc3RyaW5nXHJcbiAgLy8vIDwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJwaWNTdHJcIj4gICAgVGhlIHBpY3R1cmUgdG8gdXNlXHJcbiAgLy8vIDwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPiB0aGUgc3RyaW5nIHRvIGJlIGRpc3BsYXllZFxyXG4gIC8vLyA8L3JldHVybnM+XHJcbiAgcHJpdmF0ZSB3aW5fZGF0YV9jcHlfMShtYXNrU3RyOiBzdHJpbmdbXSwgbWFza0xlbjogbnVtYmVyLCBkYXRhU3RyOiBzdHJpbmdbXSwgaXNBdHRyQWxwaGE6IGJvb2xlYW4sIGNvbnZlcnRDYXNlOiBib29sZWFuKTogc3RyaW5nIHtcclxuICAgIGxldCBtYXNrSWR4OiBudW1iZXIgPSAwO1xyXG4gICAgbGV0IGRhdGFJZHg6IG51bWJlciA9IDA7XHJcbiAgICBsZXQgcmVzU3RyOiBzdHJpbmdbXSA9IG5ldyBBcnJheTxzdHJpbmc+KG1hc2tMZW4pO1xyXG5cclxuICAgIGlmIChpc0F0dHJBbHBoYSAmJiBVdGlsU3RyQnl0ZU1vZGUuaXNMb2NhbGVEZWZMYW5nREJDUygpKSB7XHJcbiAgICAgIGxldCBudW0yOiBudW1iZXIgPSAwO1xyXG4gICAgICB3aGlsZSAobWFza0lkeCA8IG1hc2tMZW4gJiYgbnVtMiA8IG1hc2tMZW4pIHtcclxuICAgICAgICBpZiAobWFza1N0clttYXNrSWR4XS5jaGFyQ29kZUF0KDApIDw9IFBJQ0ludGVyZmFjZS5QSUNfTUFYX09QKSB7XHJcbiAgICAgICAgICBpZiAoZGF0YUlkeCA8IGRhdGFTdHIubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIGxldCBzdHJWYWw6IHN0cmluZyA9IE5TdHJpbmcuRnJvbUNoYXJzKGRhdGFTdHIsIGRhdGFJZHgsIDEpO1xyXG4gICAgICAgICAgICBpZiAoVXRpbFN0ckJ5dGVNb2RlLmxlbkIoc3RyVmFsKSA9PT0gMikge1xyXG4gICAgICAgICAgICAgIGlmIChtYXNrSWR4ICsgMSA8IG1hc2tMZW4pIHtcclxuICAgICAgICAgICAgICAgIGlmIChtYXNrU3RyW21hc2tJZHggKyAxXS5jaGFyQ29kZUF0KDApIDw9IFBJQ0ludGVyZmFjZS5QSUNfTUFYX09QKSB7XHJcbiAgICAgICAgICAgICAgICAgIGlmIChjb252ZXJ0Q2FzZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlc1N0cltudW0yKytdID0gdGhpcy5jYXNlQ29udmVydGVkQ2hhcihkYXRhU3RyW2RhdGFJZHgrK10sIG1hc2tTdHJbbWFza0lkeCArIDFdKTtcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICByZXNTdHJbbnVtMisrXSA9IGRhdGFTdHJbZGF0YUlkeCsrXTtcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICBtYXNrSWR4ID0gbWFza0lkeCArIDE7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgcmVzU3RyW251bTIrK10gPSAnICc7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgcmVzU3RyW251bTIrK10gPSAnICc7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgIGlmIChjb252ZXJ0Q2FzZSkge1xyXG4gICAgICAgICAgICAgICAgcmVzU3RyW251bTIrK10gPSB0aGlzLmNhc2VDb252ZXJ0ZWRDaGFyKGRhdGFTdHJbZGF0YUlkeCsrXSwgbWFza1N0clttYXNrSWR4ICsgMV0pO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHJlc1N0cltudW0yKytdID0gZGF0YVN0cltkYXRhSWR4KytdO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHJlc1N0cltudW0yKytdID0gJyAnLyonICcqLztcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICByZXNTdHJbbnVtMisrXSA9IG1hc2tTdHJbbWFza0lkeF07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIG1hc2tJZHggPSBtYXNrSWR4ICsgMTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gTlN0cmluZy5Gcm9tQ2hhcnMocmVzU3RyKS5zdWJzdHIoMCwgbnVtMik7XHJcbiAgICB9XHJcblxyXG4gICAgd2hpbGUgKG1hc2tJZHggPCBtYXNrTGVuKSB7XHJcbiAgICAgIGlmIChtYXNrU3RyW21hc2tJZHhdLmNoYXJDb2RlQXQoMCkgPD0gUElDSW50ZXJmYWNlLlBJQ19NQVhfT1ApIHtcclxuICAgICAgICBpZiAoZGF0YUlkeCA8IGRhdGFTdHIubGVuZ3RoKSB7XHJcbiAgICAgICAgICByZXNTdHJbbWFza0lkeF0gPSBkYXRhU3RyW2RhdGFJZHhdO1xyXG4gICAgICAgICAgaWYgKGNvbnZlcnRDYXNlKSB7XHJcbiAgICAgICAgICAgIHJlc1N0clttYXNrSWR4XSA9IHRoaXMuY2FzZUNvbnZlcnRlZENoYXIoZGF0YVN0cltkYXRhSWR4XSwgbWFza1N0clttYXNrSWR4XSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgcmVzU3RyW21hc2tJZHhdID0gZGF0YVN0cltkYXRhSWR4XTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGRhdGFJZHggPSBkYXRhSWR4ICsgMTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICByZXNTdHJbbWFza0lkeF0gPSAnICcvKicgJyovO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICByZXNTdHJbbWFza0lkeF0gPSBtYXNrU3RyW21hc2tJZHhdO1xyXG4gICAgICB9XHJcbiAgICAgIG1hc2tJZHggPSBtYXNrSWR4ICsgMTtcclxuICAgIH1cclxuICAgIHJldHVybiBOU3RyaW5nLkZyb21DaGFycyhyZXNTdHIpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIEJ1aWxkIGEgZGlzcGxheSBzdHJpbmcgZm9yIGFuIGRhdGUgdmFsdWUgYWNjb3JkaW5nIHRvIHRoZSBwaWN0dXJlXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImRhdGFTdHJcIj4gICBUaGUgc291cmNlIGRhdGE8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwicGljU3RyXCI+ICAgIFRoZSBwaWN0dXJlIHRvIHVzZSBmb3IgdGhlIHZhbHVlIHRvIGRpc3BsYXk8L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz4gdGhlIHN0cmluZyB0byBiZSBkaXNwbGF5ZWQ8L3JldHVybnM+XHJcbiAgZnJvbURhdGUoZGF0YVN0cjogc3RyaW5nLCBwaWM6IFBJQywgY29tcElkeDogbnVtYmVyLCB0aW1lX2RhdGVfcGljX1pfZWR0OiBib29sZWFuKTogc3RyaW5nIHtcclxuICAgIGxldCBtYXNrOiBzdHJpbmcgPSBwaWMuZ2V0TWFzaygpO1xyXG4gICAgbGV0IG1hc2tTaXplOiBudW1iZXIgPSBwaWMuZ2V0TWFza1NpemUoKTtcclxuICAgIGxldCBkYXRlOiBudW1iZXIgPSBuZXcgTlVNX1RZUEUoZGF0YVN0cikuTlVNXzJfVUxPTkcoKTtcclxuICAgIHJldHVybiB0aGlzLnRvX2FfcGljX2RhdGVtb2RlKG1hc2ssIG1hc2tTaXplLCBkYXRlLCBwaWMsIHRpbWVfZGF0ZV9waWNfWl9lZHQsIGZhbHNlLCBjb21wSWR4KTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBCdWlsZCBhIGRpc3BsYXkgc3RyaW5nIGZvciBhbiB0aW1lIHZhbHVlIGFjY29yZGluZyB0byB0aGUgcGljdHVyZVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJkYXRhU3RyXCI+ICAgVGhlIHNvdXJjZSBkYXRhPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInBpY1N0clwiPiAgICBUaGUgcGljdHVyZSB0byB1c2UgZm9yIHRoZSB2YWx1ZSB0byBkaXNwbGF5PC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+IHRoZSBzdHJpbmcgdG8gYmUgZGlzcGxheWVkPC9yZXR1cm5zPlxyXG4gIGZyb21UaW1lKGRhdGFTdHI6IHN0cmluZywgcGljOiBQSUMsIHRpbWVfZGF0ZV9waWNfWl9lZHQ6IGJvb2xlYW4pOiBzdHJpbmcge1xyXG4gICAgbGV0IG1hc2s6IHN0cmluZyA9IHBpYy5nZXRNYXNrKCk7XHJcbiAgICBsZXQgbWFza1NpemU6IG51bWJlciA9IHBpYy5nZXRNYXNrU2l6ZSgpO1xyXG4gICAgbGV0IHRpbWU6IG51bWJlciA9IG5ldyBOVU1fVFlQRShkYXRhU3RyKS5OVU1fMl9VTE9ORygpO1xyXG4gICAgcmV0dXJuIHRoaXMudGltZV8yX2FfcGljKG1hc2ssIG1hc2tTaXplLCB0aW1lLCBwaWMsIHRpbWVfZGF0ZV9waWNfWl9lZHQsIGZhbHNlKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBCdWlsZCBhIGRpc3BsYXkgc3RyaW5nIGZvciBhbiBkYXRlIHZhbHVlIGFjY29yZGluZyB0byB0aGUgcGljdHVyZVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJkYXRhU3RyXCI+ICAgVGhlIHNvdXJjZSBkYXRhPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInBpY1N0clwiPiAgICBUaGUgcGljdHVyZSB0byB1c2UgZm9yIHRoZSB2YWx1ZSB0byBkaXNwbGF5PC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+IHRoZSBzdHJpbmcgdG8gYmUgZGlzcGxheWVkPC9yZXR1cm5zPlxyXG4gIGZyb21NZ0RhdGVUb05hdGl2ZURhdGUoZGF0YVN0cjogc3RyaW5nLCBwaWM6IFBJQywgY29tcElkeDogbnVtYmVyKTogRGF0ZSB7XHJcblxyXG4gICAgbGV0IGRhdGU6IG51bWJlciA9IG5ldyBOVU1fVFlQRShkYXRhU3RyKS5OVU1fMl9VTE9ORygpO1xyXG4gICAgbGV0IGJyZWFrUGFyYW1zOiBEYXRlQnJlYWtQYXJhbXM7XHJcbi8vIEJyZWFrIGRhdGEgaW50byBpdHMgY29tcG9uZW50c1xyXG4gICAgYnJlYWtQYXJhbXMgPSBuZXcgRGF0ZUJyZWFrUGFyYW1zKCk7XHJcbiAgICB0aGlzLmRhdGVfYnJlYWtfZGF0ZW1vZGUoYnJlYWtQYXJhbXMsIGRhdGUsIGZhbHNlLCBjb21wSWR4KTtcclxuICAgIGlmIChicmVha1BhcmFtcy5tb250aCA+IDApXHJcbiAgICAgIGJyZWFrUGFyYW1zLm1vbnRoID0gYnJlYWtQYXJhbXMubW9udGggLSAxOyAvL21vbnRoIGlzIDAgYmFzZWQgaW4gRGF0ZSBjbGFzc1xyXG5cclxuICAgIGlmIChicmVha1BhcmFtcy55ZWFyID09IDAgJiYgYnJlYWtQYXJhbXMubW9udGggPT0gMCAmJiBicmVha1BhcmFtcy5kYXkgPT0gMClcclxuICAgICAgcmV0dXJuIG51bGw7XHJcblxyXG4gICAgbGV0IG1hc2tTdHIgPSBwaWMuZ2V0TWFzaygpO1xyXG4gICAgbGV0IG91dFZhbDogc3RyaW5nW10gPSBOU3RyaW5nLlRvQ2hhckFycmF5KG1hc2tTdHIpO1xyXG5cclxuICAgIGxldCBsZW4gPSBwaWMuZ2V0TWFza1NpemUoKTtcclxuXHJcbiAgICBsZXQgeWVhciA9IGJyZWFrUGFyYW1zLnllYXI7XHJcbiAgICBsZXQgIG91dElkeCA9IDA7XHJcbiAgICB3aGlsZSAobGVuID4gMCkge1xyXG5cclxuICAgICAgc3dpdGNoIChvdXRWYWxbb3V0SWR4XS5jaGFyQ29kZUF0KDApKSB7XHJcbiAgICAgICAgY2FzZSBQSUNJbnRlcmZhY2UuUElDX1lZOiB7XHJcbiAgICAgICAgICB0aGlzLmludF8yX2Eob3V0VmFsLCBvdXRJZHgsIDIsIGJyZWFrUGFyYW1zLnllYXIsICcwJyk7XHJcbiAgICAgICAgICBsZXQgeWVhclN0ciA9IE5TdHJpbmcuRnJvbUNoYXJzKG91dFZhbCwgb3V0SWR4LCAyKTtcclxuICAgICAgICAgIHllYXIgPSAreWVhclN0cjtcclxuICAgICAgICAgIG91dElkeCArPSAyO1xyXG4gICAgICAgICAgbGVuIC09IDI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgUElDSW50ZXJmYWNlLlBJQ19ZWVlZOlxyXG4gICAgICAgICAgdGhpcy5pbnRfMl9hKG91dFZhbCwgb3V0SWR4LCA0LCBicmVha1BhcmFtcy55ZWFyLCAnMCcpO1xyXG4gICAgICAgICAgbGV0IHllYXJTdHIgPSBOU3RyaW5nLkZyb21DaGFycyhvdXRWYWwsIG91dElkeCwgNCk7XHJcbiAgICAgICAgICB5ZWFyID0gK3llYXJTdHI7XHJcbiAgICAgICAgICBvdXRJZHggKz0gNDtcclxuICAgICAgICAgIGxlbiAtPSA0O1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgIG91dElkeCsrO1xyXG4gICAgICAgICAgbGVuLS07XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgbGV0IG5hdGl2ZUR0OiBEYXRlID0gbmV3IERhdGUoeWVhciwgYnJlYWtQYXJhbXMubW9udGgsIGJyZWFrUGFyYW1zLmRheSk7XHJcblxyXG4gICAgcmV0dXJuIG5hdGl2ZUR0O1xyXG4gIH1cclxuXHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBCdWlsZCBhIGRpc3BsYXkgc3RyaW5nIGZvciBhbiBkYXRlIHZhbHVlIGFjY29yZGluZyB0byB0aGUgcGljdHVyZVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJkYXRhU3RyXCI+ICAgVGhlIHNvdXJjZSBkYXRhPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInBpY1N0clwiPiAgICBUaGUgcGljdHVyZSB0byB1c2UgZm9yIHRoZSB2YWx1ZSB0byBkaXNwbGF5PC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+IHRoZSBzdHJpbmcgdG8gYmUgZGlzcGxheWVkPC9yZXR1cm5zPlxyXG4gIGZyb21OYXRpdmVEYXRlVG9NZ0RhdGVOdW1iZXIobmF0aXZlRGF0ZTogRGF0ZSwgcGljOiBQSUMpOiBudW1iZXIge1xyXG4gICAgbGV0IG51bVZhbDogbnVtYmVyO1xyXG4gICAgbGV0IGRhdGVQYXJhbXM6IERhdGVCcmVha1BhcmFtcztcclxuICAgIGxldCBtaWxsZW5pdW06IG51bWJlciA9IDA7XHJcbiAgICBsZXQgeWVhcjogbnVtYmVyID0gbmF0aXZlRGF0ZS5nZXRGdWxsWWVhcigpO1xyXG4gICAgbGV0IGRheTogbnVtYmVyID0gbmF0aXZlRGF0ZS5nZXREYXRlKCk7XHJcbiAgICBsZXQgbW9udGg6IG51bWJlciA9IG5hdGl2ZURhdGUuZ2V0TW9udGgoKSArIDE7XHJcblxyXG4gICAgLy8gSGVicmV3IFllYXJcclxuICAgIGlmIChwaWMuaXNIZWJyZXcoKSkge1xyXG4gICAgICBpZiAoeWVhciA+IDApIHtcclxuICAgICAgICBpZiAobWlsbGVuaXVtID09PSAwKVxyXG4gICAgICAgICAgbWlsbGVuaXVtID0gNTtcclxuICAgICAgICB5ZWFyICs9IG1pbGxlbml1bSAqIDEwMDA7XHJcbiAgICAgIH1cclxuICAgICAgbnVtVmFsID0gKEhlYnJld0RhdGUuZGF0ZWhlYl8yX2QoeWVhciwgbW9udGgsIGRheSkpO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIC8vIHRoZSBuZXh0IDIgbGluZXMgc3VwcG9ydCA0Lnh4IEREL01NIHBpY3R1cmVzXHJcbiAgICAgIGlmICh5ZWFyID09PSAwKSB7XHJcbiAgICAgICAgZGF0ZVBhcmFtcyA9IHRoaXMuZGF0ZV9zeXMoKTtcclxuICAgICAgICB5ZWFyID0gZGF0ZVBhcmFtcy55ZWFyO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBudW1WYWwgPSB0aGlzLmRhdGVfNF9jYWxlbmRlcih5ZWFyLCBtb250aCwgZGF5LCAwLCBmYWxzZSk7ICAgIC8vIHdlIGFyZSBhZGRpbmcgYSBsaXR0bGUgZW1wdHkgc3BhY2UgdG8gdGhlIHZhcmlhYmxlLCBiZWNhdXNlIHdlIG1pZ2h0IGxhdGVyXHJcbiAgICB9XHJcbiAgICByZXR1cm4gbnVtVmFsO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIEJ1aWxkIGEgZGlzcGxheSBzdHJpbmcgZm9yIGFuIGRhdGUgdmFsdWUgYWNjb3JkaW5nIHRvIHRoZSBwaWN0dXJlXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImRhdGFTdHJcIj4gICBUaGUgc291cmNlIGRhdGE8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwicGljU3RyXCI+ICAgIFRoZSBwaWN0dXJlIHRvIHVzZSBmb3IgdGhlIHZhbHVlIHRvIGRpc3BsYXk8L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz4gdGhlIHN0cmluZyB0byBiZSBkaXNwbGF5ZWQ8L3JldHVybnM+XHJcbiAgZnJvbU5hdGl2ZURhdGVUb01nRGF0ZShuYXRpdmVEYXRlOiBEYXRlLCBwaWM6IFBJQyk6IHN0cmluZyB7XHJcblxyXG4gICAgbGV0IG1nTnVtOiBOVU1fVFlQRSA9IG5ldyBOVU1fVFlQRSgpO1xyXG4gICAgbGV0IG51bVZhbDogbnVtYmVyID0gbmF0aXZlRGF0ZSA9PSBudWxsID8gMCA6IHRoaXMuZnJvbU5hdGl2ZURhdGVUb01nRGF0ZU51bWJlcihuYXRpdmVEYXRlLCBwaWMpO1xyXG4gICAgbWdOdW0uTlVNXzRfTE9ORyhudW1WYWwpO1xyXG5cclxuICAgIHJldHVybiBtZ051bS50b1hNTHJlY29yZCgpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIEhhbmRsZSBkYXRlIHZhbHVlXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcIm91dFN0clwiPiAgICAgICAgICBUaGUgbWFzayB0byBiZSB1c2VkXHJcbiAgLy8vIDwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJvdXRfbGVuXCI+ICAgICAgICAgTWFzayBsZW5ndGhcclxuICAvLy8gPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInBpY1wiPiAgICAgICAgICAgICBUaGUgcGljdXJlIGluZm9ybWF0aW9uXHJcbiAgLy8vIDwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJkYXRlX3BpY19aX2VkdFwiPlxyXG4gIC8vLyA8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiaWdub3JlX2R0X2ZtdFwiPlxyXG4gIC8vLyA8L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz4gdGhlIHN0cmluZyB0byBiZSBkaXNwbGF5ZWRcclxuICAvLy8gPC9yZXR1cm5zPlxyXG4gIHRvX2FfcGljX2RhdGVtb2RlKG91dFN0cjogc3RyaW5nLCBvdXRfbGVuOiBudW1iZXIsIGRhdGU6IG51bWJlciwgcGljOiBQSUMsIGRhdGVfcGljX1pfZWR0OiBib29sZWFuLCBpZ25vcmVfZHRfZm10OiBib29sZWFuLCBjb21wSWR4OiBudW1iZXIpOiBzdHJpbmcge1xyXG4gICAgbGV0IGxlbjogbnVtYmVyO1xyXG4gICAgbGV0IGRheTogbnVtYmVyID0gMDtcclxuICAgIGxldCBkb3k6IG51bWJlciA9IDA7XHJcbiAgICBsZXQgZG93OiBudW1iZXIgPSAwO1xyXG4gICAgbGV0IHllYXI6IG51bWJlciA9IDA7XHJcbiAgICBsZXQgbW9udGg6IG51bWJlciA9IDA7XHJcbiAgICBsZXQgaGRheTogbnVtYmVyID0gMDtcclxuICAgIGxldCBoeWVhcjogbnVtYmVyID0gMDtcclxuICAgIGxldCBobW9udGg6IG51bWJlciA9IDA7XHJcbiAgICBsZXQgbGVhcDogQm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgbGV0IGk6IG51bWJlcjtcclxuICAgIGxldCBwOiBzdHJpbmdbXTtcclxuICAgIGxldCBvdXRWYWw6IHN0cmluZ1tdID0gTlN0cmluZy5Ub0NoYXJBcnJheShvdXRTdHIpO1xyXG4gICAgbGV0IGJyZWFrUGFyYW1zOiBEYXRlQnJlYWtQYXJhbXM7XHJcbiAgICBsZXQgZGF0ZU5hbWVQYXJhbXM6IERhdGVOYW1lUGFyYW1zO1xyXG4gICAgbGV0IG91dElkeDogbnVtYmVyID0gMDtcclxuICAgIGxldCBzdHJPdXQ6IHN0cmluZyA9IG51bGw7XHJcblxyXG4gICAgLy8gSWYgcmVzdWx0IG92ZXJmbG93cyByZXR1cm4gYnVmZmVyLCBmaWxsIHdpdGggYXN0ZXJpeHMgYW5kIGJhaWwgb3V0XHJcbiAgICBpZiAocGljLmdldE1hc2tTaXplKCkgPiBvdXRfbGVuKSB7XHJcbiAgICAgIGZvciAoOyBpIDwgb3V0X2xlbjsgaSsrKVxyXG4gICAgICAgIG91dFZhbFtpXSA9ICcqJztcclxuICAgICAgcmV0dXJuIE5TdHJpbmcuRnJvbUNoYXJzKG91dFZhbCk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gSWYgemVybyBmaWxsIHJlcXVlc3RlZCBhbmQgZGF0ZSB2YWx1ZSBpcyB6ZXJvLCBmaWxsIGl0IGFuZCBiYWlsIG91dFxyXG4gICAgb3V0X2xlbiA9IGxlbiA9IHBpYy5nZXRNYXNrU2l6ZSgpO1xyXG4gICAgaWYgKHBpYy56ZXJvRmlsbCgpICYmIGRhdGUgPT09IDAgJiYgIWRhdGVfcGljX1pfZWR0KSB7XHJcbiAgICAgIGZvciAoOyBpIDwgb3V0X2xlbjsgaSsrKVxyXG4gICAgICAgIG91dFZhbFtpXSA9IHBpYy5nZXRaZXJvUGFkKCk7XHJcbiAgICAgIHJldHVybiBOU3RyaW5nLkZyb21DaGFycyhvdXRWYWwpO1xyXG4gICAgfVxyXG4gICAgaWYgKHBpYy5pc0hlYnJldygpICYmIChkYXRlID09PSAwIHx8IGRhdGUgPT09IDEwMDAwMDAwMDApKSB7XHJcbiAgICAgIGZvciAoOyBpIDwgb3V0X2xlbjsgaSsrKVxyXG4gICAgICAgIG91dFZhbFtpXSA9ICcgJztcclxuICAgICAgcmV0dXJuIE5TdHJpbmcuRnJvbUNoYXJzKG91dFZhbCk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gQnJlYWsgZGF0YSBpbnRvIGl0cyBjb21wb25lbnRzXHJcbiAgICBicmVha1BhcmFtcyA9IG5ldyBEYXRlQnJlYWtQYXJhbXMoeWVhciwgbW9udGgsIGRheSwgZG95LCBkb3cpO1xyXG4gICAgdGhpcy5kYXRlX2JyZWFrX2RhdGVtb2RlKGJyZWFrUGFyYW1zLCBkYXRlLCBpZ25vcmVfZHRfZm10LCBjb21wSWR4KTtcclxuICAgIGlmIChwaWMuaXNIZWJyZXcoKSkge1xyXG4gICAgICBsZXQgcmVmaGRheTogUmVmUGFyYW08bnVtYmVyPiA9IG5ldyBSZWZQYXJhbTxudW1iZXI+KGhkYXkpO1xyXG4gICAgICBsZXQgcmVmaG1vbnRoOiBSZWZQYXJhbTxudW1iZXI+ID0gbmV3IFJlZlBhcmFtPG51bWJlcj4oaG1vbnRoKTtcclxuICAgICAgbGV0IHJlZmh5ZWFyOiBSZWZQYXJhbTxudW1iZXI+ID0gbmV3IFJlZlBhcmFtPG51bWJlcj4oaHllYXIpO1xyXG4gICAgICBsZWFwID0gSGVicmV3RGF0ZS5kYXRlaGViXzRfZChkYXRlLCByZWZoZGF5LCByZWZobW9udGgsIHJlZmh5ZWFyKTtcclxuXHJcbiAgICAgIGhkYXkgPSByZWZoZGF5LnZhbHVlO1xyXG4gICAgICBobW9udGggPSByZWZobW9udGgudmFsdWU7XHJcbiAgICAgIGh5ZWFyID0gcmVmaHllYXIudmFsdWU7XHJcbiAgICB9XHJcblxyXG4gICAgeWVhciA9IGJyZWFrUGFyYW1zLnllYXI7XHJcbiAgICBtb250aCA9IGJyZWFrUGFyYW1zLm1vbnRoO1xyXG4gICAgZGF5ID0gYnJlYWtQYXJhbXMuZGF5O1xyXG4gICAgZG95ID0gYnJlYWtQYXJhbXMuZG95O1xyXG4gICAgZG93ID0gYnJlYWtQYXJhbXMuZG93O1xyXG4gICAgYnJlYWtQYXJhbXMgPSBudWxsO1xyXG4gICAgd2hpbGUgKGxlbiA+IDApIHtcclxuICAgICAgbGV0IHJlZk91dExlbjogUmVmUGFyYW08bnVtYmVyPiA9IG5ldyBSZWZQYXJhbTxudW1iZXI+KG91dF9sZW4pO1xyXG4gICAgICBzd2l0Y2ggKG91dFZhbFtvdXRJZHhdLmNoYXJDb2RlQXQoMCkpIHtcclxuICAgICAgICBjYXNlIFBJQ0ludGVyZmFjZS5QSUNfWVk6XHJcbiAgICAgICAgICBpZiAocGljLnplcm9GaWxsKCkgJiYgZGF0ZSA9PT0gMCAmJiBkYXRlX3BpY19aX2VkdClcclxuICAgICAgICAgICAgTWVtb3J5VXRpbC5jaGFyX21lbXNldChvdXRWYWwsIG91dElkeCwgcGljLmdldFplcm9QYWQoKSwgMik7XHJcbiAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgIHRoaXMuaW50XzJfYShvdXRWYWwsIG91dElkeCwgMiwgeWVhciwgJzAnKTtcclxuICAgICAgICAgIG91dElkeCArPSAyO1xyXG4gICAgICAgICAgbGVuIC09IDI7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIFBJQ0ludGVyZmFjZS5QSUNfSFlZWVlZOlxyXG4gICAgICAgICAgaSA9IEhlYnJld0RhdGUuZGF0ZWhlYl8yX3N0cihvdXRWYWwsIG91dElkeCwgbGVuLCByZWZPdXRMZW4sIDUsIGh5ZWFyLCBwaWMuaXNUcmltZWQoKSwgdHJ1ZSk7XHJcbiAgICAgICAgICBvdXRfbGVuID0gcmVmT3V0TGVuLnZhbHVlO1xyXG4gICAgICAgICAgb3V0SWR4ICs9IGk7XHJcbiAgICAgICAgICBsZW4gLT0gaTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgUElDSW50ZXJmYWNlLlBJQ19ITDpcclxuICAgICAgICAgIGkgPSBIZWJyZXdEYXRlLmRhdGVoZWJfaV8yX2goKGh5ZWFyIC8gMTAwMCkgJSAxMCwgb3V0VmFsLCBvdXRJZHgsIGZhbHNlLCBmYWxzZSk7XHJcbiAgICAgICAgICBvdXRJZHgrKztcclxuICAgICAgICAgIGxlbi0tO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBQSUNJbnRlcmZhY2UuUElDX0hERDpcclxuICAgICAgICAgIGkgPSBIZWJyZXdEYXRlLmRhdGVoZWJfMl9zdHIob3V0VmFsLCBvdXRJZHgsIGxlbiwgcmVmT3V0TGVuLCAyLCBoZGF5LCBwaWMuaXNUcmltZWQoKSwgZmFsc2UpO1xyXG4gICAgICAgICAgb3V0X2xlbiA9IHJlZk91dExlbi52YWx1ZTtcclxuICAgICAgICAgIG91dElkeCArPSBpO1xyXG4gICAgICAgICAgbGVuIC09IGk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIFBJQ0ludGVyZmFjZS5QSUNfWVlZWTpcclxuICAgICAgICAgIGlmIChwaWMuemVyb0ZpbGwoKSAmJiBkYXRlID09PSAwICYmIGRhdGVfcGljX1pfZWR0KVxyXG4gICAgICAgICAgICBNZW1vcnlVdGlsLmNoYXJfbWVtc2V0KG91dFZhbCwgb3V0SWR4LCBwaWMuZ2V0WmVyb1BhZCgpLCA0KTtcclxuICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgdGhpcy5pbnRfMl9hKG91dFZhbCwgb3V0SWR4LCA0LCB5ZWFyLCAnMCcpO1xyXG4gICAgICAgICAgb3V0SWR4ICs9IDQ7XHJcbiAgICAgICAgICBsZW4gLT0gNDtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgUElDSW50ZXJmYWNlLlBJQ19NTUQ6XHJcbiAgICAgICAgICBpZiAocGljLnplcm9GaWxsKCkgJiYgZGF0ZSA9PT0gMCAmJiBkYXRlX3BpY19aX2VkdClcclxuICAgICAgICAgICAgTWVtb3J5VXRpbC5jaGFyX21lbXNldChvdXRWYWwsIG91dElkeCwgcGljLmdldFplcm9QYWQoKSwgMik7XHJcbiAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgIHRoaXMuaW50XzJfYShvdXRWYWwsIG91dElkeCwgMiwgbW9udGgsICcwJyk7XHJcbiAgICAgICAgICBvdXRJZHggKz0gMjtcclxuICAgICAgICAgIGxlbiAtPSAyO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBQSUNJbnRlcmZhY2UuUElDX01NTTpcclxuICAgICAgICAgIGlmIChwaWMuaXNIZWJyZXcoKSkge1xyXG4gICAgICAgICAgICBpZiAobGVhcCAmJiBobW9udGggPT09IDYpXHJcbiAgICAgICAgICAgICAgaG1vbnRoID0gMTQ7XHJcbiAgICAgICAgICAgIGxldCBtb250aE5hbWVzOiBzdHJpbmdbXSA9IEhlYnJld0RhdGUuR2V0TG9jYWxNb250aHMoKTtcclxuICAgICAgICAgICAgcCA9IE5TdHJpbmcuVG9DaGFyQXJyYXkobW9udGhOYW1lc1tobW9udGhdKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBsZXQgbW9udGhTdHI6IHN0cmluZyA9IEV2ZW50cy5HZXRNZXNzYWdlU3RyaW5nKE1zZ0ludGVyZmFjZS5NT05USFNfUFRSKTtcclxuICAgICAgICAgICAgbGV0IG1vbnRoTmFtZXM6IHN0cmluZ1tdID0gRGF0ZVV0aWwuZ2V0TG9jYWxNb250aHMobW9udGhTdHIpO1xyXG4gICAgICAgICAgICBwID0gTlN0cmluZy5Ub0NoYXJBcnJheShtb250aE5hbWVzW21vbnRoXSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBkYXRlTmFtZVBhcmFtcyA9IG5ldyBEYXRlTmFtZVBhcmFtcyhvdXRWYWwsIG91dElkeCwgbGVuKTtcclxuICAgICAgICAgIG91dF9sZW4gLT0gdGhpcy5kYXRlX2lfMl9ubShkYXRlTmFtZVBhcmFtcywgcCwgcGljLmlzVHJpbWVkKCkpO1xyXG4gICAgICAgICAgb3V0SWR4ID0gZGF0ZU5hbWVQYXJhbXMub3V0SWR4O1xyXG4gICAgICAgICAgbGVuID0gZGF0ZU5hbWVQYXJhbXMubGVuO1xyXG4gICAgICAgICAgZGF0ZU5hbWVQYXJhbXMgPSBudWxsO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBQSUNJbnRlcmZhY2UuUElDX0REOlxyXG4gICAgICAgICAgbGV0IGlzWmVybzogYm9vbGVhbiA9IHBpYy56ZXJvRmlsbCgpO1xyXG4gICAgICAgICAgaWYgKGlzWmVybyAmJiBkYXRlID09PSAwICYmIGRhdGVfcGljX1pfZWR0KVxyXG4gICAgICAgICAgICBNZW1vcnlVdGlsLmNoYXJfbWVtc2V0KG91dFZhbCwgb3V0SWR4LCBwaWMuZ2V0WmVyb1BhZCgpLCAyKTtcclxuICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgdGhpcy5pbnRfMl9hKG91dFZhbCwgb3V0SWR4LCAyLCBkYXksICcwJyk7XHJcbiAgICAgICAgICBvdXRJZHggKz0gMjtcclxuICAgICAgICAgIGxlbiAtPSAyO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBQSUNJbnRlcmZhY2UuUElDX0RERDpcclxuICAgICAgICAgIGlmIChwaWMuemVyb0ZpbGwoKSAmJiBkYXRlID09PSAwICYmIGRhdGVfcGljX1pfZWR0KVxyXG4gICAgICAgICAgICBNZW1vcnlVdGlsLmNoYXJfbWVtc2V0KG91dFZhbCwgb3V0SWR4LCBwaWMuZ2V0WmVyb1BhZCgpLCAzKTtcclxuICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgdGhpcy5pbnRfMl9hKG91dFZhbCwgb3V0SWR4LCAzLCBkb3ksICcwJyk7XHJcbiAgICAgICAgICBsZW4gLT0gMztcclxuICAgICAgICAgIG91dElkeCArPSAzO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBQSUNJbnRlcmZhY2UuUElDX0REREQ6XHJcbiAgICAgICAgICBpID0gdGhpcy5kYXRlXzJfRERERChkYXksIG91dFZhbCwgb3V0SWR4LCBsZW4sIHBpYy5pc1RyaW1lZCgpKTtcclxuICAgICAgICAgIG91dElkeCArPSBpO1xyXG4gICAgICAgICAgb3V0X2xlbiArPSBpIC0gNDtcclxuICAgICAgICAgIGxlbiAtPSA0O1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBQSUNJbnRlcmZhY2UuUElDX1c6XHJcbiAgICAgICAgICBpZiAocGljLnplcm9GaWxsKCkgJiYgZGF0ZSA9PT0gMCAmJiBkYXRlX3BpY19aX2VkdClcclxuICAgICAgICAgICAgTWVtb3J5VXRpbC5jaGFyX21lbXNldChvdXRWYWwsIG91dElkeCwgcGljLmdldFplcm9QYWQoKSwgMSk7XHJcbiAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgIHRoaXMuaW50XzJfYShvdXRWYWwsIG91dElkeCwgMSwgZG93LCAnMCcpO1xyXG4gICAgICAgICAgbGVuLS07XHJcbiAgICAgICAgICBvdXRJZHgrKztcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgUElDSW50ZXJmYWNlLlBJQ19XV1c6XHJcbiAgICAgICAgICBpZiAocGljLmlzSGVicmV3KCkpIHtcclxuICAgICAgICAgICAgbGV0IGRvd3NOYW1lczogc3RyaW5nW10gPSBIZWJyZXdEYXRlLkdldExvY2FsRG93cygpO1xyXG4gICAgICAgICAgICBwID0gTlN0cmluZy5Ub0NoYXJBcnJheShkb3dzTmFtZXNbZG93XSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgbGV0IGRheVN0cjogc3RyaW5nID0gRXZlbnRzLkdldE1lc3NhZ2VTdHJpbmcoTXNnSW50ZXJmYWNlLkRBWVNfUFRSKTtcclxuICAgICAgICAgICAgbGV0IGRheU5hbWVzOiBzdHJpbmdbXSA9IERhdGVVdGlsLmdldExvY2FsRGF5cyhkYXlTdHIpO1xyXG4gICAgICAgICAgICBwID0gTlN0cmluZy5Ub0NoYXJBcnJheShkYXlOYW1lc1tkb3ddKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGRhdGVOYW1lUGFyYW1zID0gbmV3IERhdGVOYW1lUGFyYW1zKG91dFZhbCwgb3V0SWR4LCBsZW4pO1xyXG4gICAgICAgICAgb3V0X2xlbiAtPSB0aGlzLmRhdGVfaV8yX25tKGRhdGVOYW1lUGFyYW1zLCBwLCBwaWMuaXNUcmltZWQoKSk7XHJcbiAgICAgICAgICBvdXRJZHggPSBkYXRlTmFtZVBhcmFtcy5vdXRJZHg7XHJcbiAgICAgICAgICBsZW4gPSBkYXRlTmFtZVBhcmFtcy5sZW47XHJcbiAgICAgICAgICBkYXRlTmFtZVBhcmFtcyA9IG51bGw7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIFBJQ0ludGVyZmFjZS5QSUNfQkI6IC8vIEpQTjogSmFwYW5lc2UgZGF0ZSBwaWN0dXJlIHN1cHBvcnRcclxuICAgICAgICAgIC8vIEphcGFuZXNlIGRheSBvZiB0aGUgd2Vla1xyXG4gICAgICAgICAgcCA9IE5TdHJpbmcuVG9DaGFyQXJyYXkoVXRpbERhdGVKcG4uZ2V0U3RyRG93KGRvdykpO1xyXG4gICAgICAgICAgc3RyT3V0ID0gbnVsbDtcclxuICAgICAgICAgIGRhdGVOYW1lUGFyYW1zID0gbmV3IERhdGVOYW1lUGFyYW1zKG91dFZhbCwgb3V0SWR4LCBsZW4pO1xyXG4gICAgICAgICAgc3RyT3V0ID0gdGhpcy5kYXRlX2lfMl9ubV9ieXRlbW9kZShzdHJPdXQsIGRhdGVOYW1lUGFyYW1zLCBOU3RyaW5nLkZyb21DaGFycyhwKSwgb3V0X2xlbik7XHJcbiAgICAgICAgICBvdXRWYWwgPSBuZXcgQXJyYXkoc3RyT3V0Lmxlbmd0aCk7XHJcbiAgICAgICAgICBOU3RyaW5nLkNvcHlUbyhzdHJPdXQsIDAsIG91dFZhbCwgMCwgc3RyT3V0Lmxlbmd0aCk7XHJcblxyXG4gICAgICAgICAgb3V0SWR4ID0gZGF0ZU5hbWVQYXJhbXMub3V0SWR4O1xyXG4gICAgICAgICAgbGVuID0gZGF0ZU5hbWVQYXJhbXMubGVuO1xyXG4gICAgICAgICAgc3RyT3V0ID0gbnVsbDtcclxuICAgICAgICAgIGRhdGVOYW1lUGFyYW1zID0gbnVsbDtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgUElDSW50ZXJmYWNlLlBJQ19KWTE6XHJcbiAgICAgICAgY2FzZSBQSUNJbnRlcmZhY2UuUElDX0pZMjpcclxuICAgICAgICBjYXNlIFBJQ0ludGVyZmFjZS5QSUNfSlk0OlxyXG4gICAgICAgICAgLy8gSmFwYW5lc2UgdGhlIG5hbWUgb2YgYW4gZXJhXHJcbiAgICAgICAgICBsZXQgc3RyTnVtOiBzdHJpbmcgPSBudWxsO1xyXG4gICAgICAgICAgaWYgKG91dFZhbFtvdXRJZHhdLmNoYXJDb2RlQXQoMCkgPT09IFBJQ0ludGVyZmFjZS5QSUNfSlkxKVxyXG4gICAgICAgICAgICBzdHJOdW0gPSBVdGlsRGF0ZUpwbi5nZXRJbnN0YW5jZSgpLmRhdGVfanBuX3lyXzJfYSh5ZWFyLCBkb3ksIGZhbHNlKTtcclxuICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgc3RyTnVtID0gVXRpbERhdGVKcG4uZ2V0SW5zdGFuY2UoKS5kYXRlX2pwbl95cl8yX2EoeWVhciwgZG95LCB0cnVlKTtcclxuICAgICAgICAgIHN0ck91dCA9IG51bGw7XHJcbiAgICAgICAgICBkYXRlTmFtZVBhcmFtcyA9IG5ldyBEYXRlTmFtZVBhcmFtcyhvdXRWYWwsIG91dElkeCwgbGVuKTtcclxuICAgICAgICAgIHN0ck91dCA9IHRoaXMuZGF0ZV9pXzJfbm1fYnl0ZW1vZGUoc3RyT3V0LCBkYXRlTmFtZVBhcmFtcywgc3RyTnVtLCBvdXRfbGVuKTtcclxuICAgICAgICAgIG91dFZhbCA9IG51bGw7XHJcbiAgICAgICAgICBvdXRWYWwgPSBuZXcgQXJyYXkoc3RyT3V0Lmxlbmd0aCk7XHJcbiAgICAgICAgICBOU3RyaW5nLkNvcHlUbyhzdHJPdXQsIDAsIG91dFZhbCwgMCwgc3RyT3V0Lmxlbmd0aCk7XHJcbiAgICAgICAgICBvdXRJZHggPSBkYXRlTmFtZVBhcmFtcy5vdXRJZHg7XHJcbiAgICAgICAgICBsZW4gPSBkYXRlTmFtZVBhcmFtcy5sZW47XHJcbiAgICAgICAgICBzdHJPdXQgPSBudWxsO1xyXG4gICAgICAgICAgZGF0ZU5hbWVQYXJhbXMgPSBudWxsO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBQSUNJbnRlcmZhY2UuUElDX1lKOlxyXG4gICAgICAgICAgaWYgKHBpYy56ZXJvRmlsbCgpICYmIGRhdGUgPT09IDAgJiYgZGF0ZV9waWNfWl9lZHQpXHJcbiAgICAgICAgICAgIE1lbW9yeVV0aWwuY2hhcl9tZW1zZXQob3V0VmFsLCBvdXRJZHgsIHBpYy5nZXRaZXJvUGFkKCksIDIpO1xyXG4gICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICB0aGlzLmludF8yX2Eob3V0VmFsLCBvdXRJZHgsIDIsIFV0aWxEYXRlSnBuLmdldEluc3RhbmNlKCkuZGF0ZV9qcG5feWVhcl9vZnMoeWVhciwgZG95KSwgJzAnKTtcclxuICAgICAgICAgIG91dElkeCArPSAyO1xyXG4gICAgICAgICAgbGVuIC09IDI7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgb3V0SWR4Kys7XHJcbiAgICAgICAgICBsZW4tLTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAob3V0X2xlbiA8IG91dFZhbC5sZW5ndGgpXHJcbiAgICAgIE1lbW9yeVV0aWwuY2hhcl9tZW1zZXQob3V0VmFsLCBvdXRfbGVuLCAnICcsIG91dFZhbC5sZW5ndGggLSBvdXRfbGVuKTtcclxuXHJcbiAgICByZXR1cm4gTlN0cmluZy5Gcm9tQ2hhcnMob3V0VmFsKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBCcmVhayBhIGRhdGUgaW50byBZZWFyLCBNb250aCwgRGF5IGluIG1vbnRoLCBEYXkgaW4geWVhciBhbmQgRGF5IGluIHdlZWtcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIGRhdGVfYnJlYWtfZGF0ZW1vZGUoYnJlYWtQYXJhbXM6IERhdGVCcmVha1BhcmFtcywgZGF0ZTogbnVtYmVyLCBpZ25vcmVfZHRfZm10OiBib29sZWFuLCBjb21wSWR4OiBudW1iZXIpOiB2b2lkIHtcclxuXHJcbiAgICBsZXQgeWVhcjogbnVtYmVyID0gYnJlYWtQYXJhbXMueWVhcjtcclxuICAgIGxldCBtb250aDogbnVtYmVyID0gYnJlYWtQYXJhbXMubW9udGg7XHJcbiAgICBsZXQgZGF5OiBudW1iZXIgPSBicmVha1BhcmFtcy5kYXk7XHJcbiAgICBsZXQgZG95OiBudW1iZXIgPSBicmVha1BhcmFtcy5kb3k7XHJcbiAgICBsZXQgZG93OiBudW1iZXIgPSBicmVha1BhcmFtcy5kb3c7XHJcblxyXG4gICAgaWYgKGRhdGUgPD0gMCkge1xyXG4gICAgICBicmVha1BhcmFtcy5kYXkgPSAwO1xyXG4gICAgICBicmVha1BhcmFtcy5kb3kgPSAwO1xyXG4gICAgICBicmVha1BhcmFtcy5kb3cgPSAwO1xyXG4gICAgICBicmVha1BhcmFtcy55ZWFyID0gMDtcclxuICAgICAgYnJlYWtQYXJhbXMubW9udGggPSAwO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIGRvdyA9IGRhdGUgJSA3ICsgMTtcclxuICAgICAgZGF0ZSA9IGRhdGUgLSAxO1xyXG4gICAgICBsZXQgY2VudDQ6IG51bWJlciA9IE1hdGguZmxvb3IoZGF0ZSAvIFBJQ0ludGVyZmFjZS5EQVlTSU5GT1VSQ0VOVCk7XHJcbiAgICAgIGRhdGUgPSBkYXRlIC0gY2VudDQgKiBQSUNJbnRlcmZhY2UuREFZU0lORk9VUkNFTlQ7XHJcbiAgICAgIGxldCBjZW50OiBudW1iZXIgPSBNYXRoLmZsb29yKGRhdGUgLyBQSUNJbnRlcmZhY2UuREFZU0lOQ0VOVFVSWSk7XHJcbiAgICAgIGlmIChjZW50ID4gMykge1xyXG4gICAgICAgIGNlbnQgPSAzO1xyXG4gICAgICB9XHJcbiAgICAgIGRhdGUgPSBkYXRlIC0gY2VudCAqIFBJQ0ludGVyZmFjZS5EQVlTSU5DRU5UVVJZO1xyXG4gICAgICBsZXQgeWVhcjQ6IG51bWJlciA9IE1hdGguZmxvb3IoZGF0ZSAvIFBJQ0ludGVyZmFjZS5EQVlTSU5GT1VSWUVBUik7XHJcbiAgICAgIGRhdGUgPSBkYXRlIC0geWVhcjQgKiBQSUNJbnRlcmZhY2UuREFZU0lORk9VUllFQVI7XHJcbiAgICAgIHllYXIgPSBNYXRoLmZsb29yKGRhdGUgLyBQSUNJbnRlcmZhY2UuREFZU0lOWUVBUik7XHJcbiAgICAgIGlmICh5ZWFyID4gMykge1xyXG4gICAgICAgIHllYXIgPSAzO1xyXG4gICAgICB9XHJcbiAgICAgIGRhdGUgPSBkYXRlIC0geWVhciAqIFBJQ0ludGVyZmFjZS5EQVlTSU5ZRUFSO1xyXG4gICAgICB5ZWFyID0gY2VudDQgKiA0MDAgKyBjZW50ICogMTAwICsgeWVhcjQgKiA0ICsgeWVhciArIDE7XHJcbiAgICAgIGxldCBsZWFweWVhcjogbnVtYmVyID0gMDtcclxuICAgICAgaWYgKHllYXIgJSA0ID09PSAwKSB7XHJcbiAgICAgICAgaWYgKHllYXIgJSAxMDAgIT09IDAgfHwgeWVhciAlIDQwMCA9PT0gMCkge1xyXG4gICAgICAgICAgbGVhcHllYXIgPSAxO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKCFpZ25vcmVfZHRfZm10ICYmIHRoaXMuX2Vudmlyb25tZW50LkdldERhdGVNb2RlKGNvbXBJZHgpID09PSAnQicpIHtcclxuICAgICAgICB5ZWFyID0geWVhciArIFBJQ0ludGVyZmFjZS5EQVRFX0JVRERISVNUX0dBUDtcclxuICAgICAgfVxyXG4gICAgICBtb250aCA9IChNYXRoLmZsb29yKGRhdGUgLyBQSUNJbnRlcmZhY2UuREFZU0lOTU9OVEgpICsgMSk7XHJcbiAgICAgIGRheSA9IFBJQ0ludGVyZmFjZS5kYXRlX2RheV90YWJbbW9udGhdO1xyXG4gICAgICBpZiAobGVhcHllYXIgPiAwKSB7XHJcbiAgICAgICAgaWYgKG1vbnRoID4gMSkge1xyXG4gICAgICAgICAgZGF5ID0gZGF5ICsgMTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChkYXRlID49IGRheSkge1xyXG4gICAgICAgIG1vbnRoID0gbW9udGggKyAxO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIGRheSA9IFBJQ0ludGVyZmFjZS5kYXRlX2RheV90YWJbbW9udGggLSAxXTtcclxuICAgICAgICBpZiAobGVhcHllYXIgPiAwKSB7XHJcbiAgICAgICAgICBpZiAobW9udGggPiAyKSB7XHJcbiAgICAgICAgICAgIGRheSA9IGRheSArIDE7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGRheSA9IGRhdGUgLSBkYXkgKyAxO1xyXG4gICAgICBkb3kgPSBkYXRlICsgMTtcclxuICAgICAgYnJlYWtQYXJhbXMueWVhciA9IHllYXI7XHJcbiAgICAgIGJyZWFrUGFyYW1zLm1vbnRoID0gbW9udGg7XHJcbiAgICAgIGJyZWFrUGFyYW1zLmRheSA9IGRheTtcclxuICAgICAgYnJlYWtQYXJhbXMuZG95ID0gZG95O1xyXG4gICAgICBicmVha1BhcmFtcy5kb3cgPSBkb3c7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgZ2V0IGFscGhhIHN0cmluZyBmcm9tIGludCB2YWx1ZVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJzdHJcIj4gICAgIHRoZSBvdXRwdXQgc3RyaW5nIChhcyBhbiBjaGFyIGFycmF5KVxyXG4gIC8vLyA8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwic3RyUG9zXCI+ICBzdGFydGluZyBwb3NpdGlvblxyXG4gIC8vLyA8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwibGVuXCI+ICAgICBzdHJpbmcgbGVuZ3RoXHJcbiAgLy8vIDwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJuXCI+ICAgICAgIHRoZSBudW1iZXIgdG8gY29udmVydFxyXG4gIC8vLyA8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwibGVhZFwiPiAgICBsZWFkaW5nIGNoYXJhY3RlclxyXG4gIC8vLyA8L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz4gdGhlIHJlc3VsdCBzdHJpbmcgbGVuZ3RoXHJcbiAgLy8vIDwvcmV0dXJucz5cclxuICBwcml2YXRlIGludF8yX2Eoc3RyOiBzdHJpbmdbXSwgc3RyUG9zOiBudW1iZXIsIGxlbjogbnVtYmVyLCBuOiBudW1iZXIsIGxlYWQ6IHN0cmluZyk6IG51bWJlciB7XHJcbiAgICBsZXQgbmVnOiBib29sZWFuID0gbiA8IDA7XHJcblxyXG4gICAgaWYgKGxlbiA8PSAwKVxyXG4gICAgICByZXR1cm47XHJcblxyXG4gICAgbiA9IE1hdGguYWJzKG4pO1xyXG4gICAgbGV0IHBvczogbnVtYmVyID0gbGVuO1xyXG5cclxuICAgIGRvIHtcclxuICAgICAgc3RyW3N0clBvcyArIChwb3MgPSBwb3MgLSAxKV0gPSBTdHJpbmcuZnJvbUNoYXJDb2RlKDQ4ICsgbiAlIDEwKTtcclxuICAgICAgbiA9IE1hdGguZmxvb3IobiAvIDEwKTtcclxuICAgIH1cclxuICAgIHdoaWxlIChwb3MgPiAwICYmIG4gPiAwKTtcclxuXHJcbiAgICBpZiAobmVnICYmIHBvcyA+IDApIHtcclxuICAgICAgc3RyW3N0clBvcyArIChwb3MgPSBwb3MgLSAxKV0gPSAnLScvKictJyovO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRoaXMubGliX2FfZmlsbChzdHIsIHN0clBvcywgbGVuLCBwb3MsIGxlYWQuY2hhckNvZGVBdCgwKSk7XHJcblxyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIEZpbGwgdGhlIGNoYXIgYXJyYXkgZm9yIHRoZSBjb252ZXJ0aW5nIG9mIGludC0+c3RyaW5nXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInN0clwiPiAgICAgdGhlIG91dHB1dCBzdHJpbmcgKGFzIGFuIGNoYXIgYXJyYXkpXHJcbiAgLy8vIDwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJzdHJQb3NcIj4gIHN0YXJ0aW5nIHBvc2l0aW9uXHJcbiAgLy8vIDwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJsZW5cIj4gICAgIHN0cmluZyBsZW5ndGhcclxuICAvLy8gPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImxlYWRcIj4gICAgbGVhZGluZyBjaGFyYWN0ZXJcclxuICAvLy8gPC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+IHRoZSByZXN1bHQgc3RyaW5nIGxlbmd0aFxyXG4gIC8vLyA8L3JldHVybnM+XHJcbiAgcHJpdmF0ZSBsaWJfYV9maWxsKHN0cjogc3RyaW5nW10sIHN0clBvczogbnVtYmVyLCBsZW46IG51bWJlciwgcG9zOiBudW1iZXIsIGxlYWQ6IG51bWJlcik6IG51bWJlciB7XHJcblxyXG4gICAgaWYgKGxlYWQgPT09IDApIHtcclxuICAgICAgbGVuID0gbGVuIC0gcG9zO1xyXG5cclxuICAgICAgaWYgKGxlbiA+IDAgJiYgcG9zID4gMCkge1xyXG4gICAgICAgIE1lbW9yeVV0aWwuY2hhcl9tZW1jcHkoc3RyLCBzdHJQb3MsIHN0ciwgcG9zLCBsZW4pO1xyXG4gICAgICAgIE1lbW9yeVV0aWwuY2hhcl9tZW1zZXQoc3RyLCBzdHJQb3MgKyBsZW4sICcgJywgLyonICcqL3Bvcyk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICBpZiAocG9zID4gMCkge1xyXG4gICAgICAgIE1lbW9yeVV0aWwuY2hhcl9tZW1zZXQoc3RyLCBzdHJQb3MsIFN0cmluZy5mcm9tQ2hhckNvZGUobGVhZCksIHBvcyk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBsZW47XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgQ29udmVydCBpbmRleCB0byBOYW1lXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImRhdGVOYW1lUGFyYW1zXCI+ICBvdXRwdXQgc3RpbmcgZGV0YWlsc1xyXG4gIC8vLyA8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwibm1cIj4gICAgICAgICAgICAgIG5hbWVcclxuICAvLy8gPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInRyaW1cIj4gICAgICAgICAgICBvdXRwdXQgc3RyaW5nIHNob3VsZCBiZSB0cmltZWRcclxuICAvLy8gPC9wYXJhbT5cclxuICAvLy8gPC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+IHRoZSBsZW5ndGggb2YgdGhlIHN0cmluZ1xyXG4gIC8vLyA8L3JldHVybnM+XHJcbiAgcHJpdmF0ZSBkYXRlX2lfMl9ubShkYXRlTmFtZVBhcmFtczogRGF0ZU5hbWVQYXJhbXMsIG5tOiBzdHJpbmdbXSwgdHJpbTogYm9vbGVhbik6IG51bWJlciB7XHJcblxyXG4gICAgbGV0IG46IG51bWJlciA9IHRoaXMuZGF0ZV9tc2tfY250KGRhdGVOYW1lUGFyYW1zLm91dFZhbCwgZGF0ZU5hbWVQYXJhbXMub3V0SWR4LCA8bnVtYmVyPmRhdGVOYW1lUGFyYW1zLmxlbik7XHJcbiAgICBsZXQgbDogbnVtYmVyO1xyXG4gICAgaWYgKHRyaW0pIHtcclxuICAgICAgbCA9IE1lbW9yeVV0aWwubWVtX3RyaW0obm0sIDAsIG4pO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIGwgPSBuO1xyXG4gICAgfVxyXG4gICAgbCA9IE1hdGgubWluKGwsIGRhdGVOYW1lUGFyYW1zLmxlbik7XHJcbiAgICBNZW1vcnlVdGlsLmNoYXJfbWVtY3B5KGRhdGVOYW1lUGFyYW1zLm91dFZhbCwgZGF0ZU5hbWVQYXJhbXMub3V0SWR4LCBubSwgMCwgbCk7XHJcbiAgICBkYXRlTmFtZVBhcmFtcy5vdXRJZHggPSBkYXRlTmFtZVBhcmFtcy5vdXRJZHggKyBsO1xyXG4gICAgZGF0ZU5hbWVQYXJhbXMubGVuID0gZGF0ZU5hbWVQYXJhbXMubGVuIC0gbjtcclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gVHJpbWVkID8gSnVtcCBvdGhlciB0cmltZWQgbWFzayA6IG5vdGhpbmdcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgbiA9IG4gLSBsO1xyXG5cclxuICAgIGlmIChuID4gMCkge1xyXG4gICAgICBNZW1vcnlVdGlsLmNoYXJfbWVtY3B5KGRhdGVOYW1lUGFyYW1zLm91dFZhbCwgZGF0ZU5hbWVQYXJhbXMub3V0SWR4LCBkYXRlTmFtZVBhcmFtcy5vdXRWYWwsIGRhdGVOYW1lUGFyYW1zLm91dElkeCArIG4sIGRhdGVOYW1lUGFyYW1zLmxlbik7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gPG51bWJlcj5uO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIEpQTjogSmFwYW5lc2UgZGF0ZSBwaWN0dXJlIHN1cHBvcnRcclxuICAvLy8gICBDb252ZXJ0IGluZGV4IHRvIE5hbWVcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwic3RyT3V0XCI+ICAgICAgICAgIG91dHB1dCBzdGluZyAob3JpZ2luYWwpXHJcbiAgLy8vIDwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJkYXRlTmFtZVBhcmFtc1wiPiAgb3V0cHV0IHN0aW5nIGRldGFpbHNcclxuICAvLy8gPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInN0ck5tXCI+ICAgICAgICAgICBuYW1lIHdoaWNoIHdpbGwgYmUgZW1iZWRkZWQgaW4gb3V0cHV0IHN0cmluZ1xyXG4gIC8vLyA8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiaW50T3V0TGVuXCI+ICAgICAgIHRoZSByZW1haW5pbmcgbGVuZ3RoIG9mIHRoZSBvdXRwdXQgc3RyaW5nXHJcbiAgLy8vIDwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPiAgICAgICAgICAgICAgICAgb3V0cHV0IHN0aW5nIChwcm9jZXNzZWQpXHJcbiAgLy8vIDwvcmV0dXJucz5cclxuICBwcml2YXRlIGRhdGVfaV8yX25tX2J5dGVtb2RlKHN0ck91dDogc3RyaW5nLCBkYXRlTmFtZVBhcmFtczogRGF0ZU5hbWVQYXJhbXMsIHN0ck5tOiBzdHJpbmcsIGludE91dExlbjogbnVtYmVyKTogc3RyaW5nIHtcclxuICAgIGxldCBpbnRNc2tDbnQ6IG51bWJlciA9IHRoaXMuZGF0ZV9tc2tfY250KGRhdGVOYW1lUGFyYW1zLm91dFZhbCwgZGF0ZU5hbWVQYXJhbXMub3V0SWR4LCA8bnVtYmVyPmRhdGVOYW1lUGFyYW1zLmxlbik7XHJcbiAgICBsZXQgc3RyV29yazogc3RyaW5nID0gTlN0cmluZy5Gcm9tQ2hhcnMoZGF0ZU5hbWVQYXJhbXMub3V0VmFsKTtcclxuXHJcbiAgICBzdHJXb3JrID0gc3RyV29yay5zdWJzdHIoMCwgZGF0ZU5hbWVQYXJhbXMub3V0SWR4KTtcclxuXHJcbiAgICBsZXQgaW50T2ZzOiBudW1iZXIgPSBVdGlsU3RyQnl0ZU1vZGUubGVuQihzdHJXb3JrKTtcclxuICAgIHN0ck5tID0gVXRpbFN0ckJ5dGVNb2RlLmxlZnRCKHN0ck5tLCBpbnRNc2tDbnQpO1xyXG4gICAgc3RyT3V0ID0gVXRpbFN0ckJ5dGVNb2RlLnJlcEIoTlN0cmluZy5Gcm9tQ2hhcnMoZGF0ZU5hbWVQYXJhbXMub3V0VmFsKSwgc3RyTm0sIGludE9mcyArIDEsIGludE1za0NudCk7XHJcblxyXG4gICAgZGF0ZU5hbWVQYXJhbXMub3V0SWR4ID0gZGF0ZU5hbWVQYXJhbXMub3V0SWR4ICsgc3RyTm0ubGVuZ3RoO1xyXG4gICAgZGF0ZU5hbWVQYXJhbXMubGVuID0gZGF0ZU5hbWVQYXJhbXMubGVuIC0gaW50TXNrQ250O1xyXG4gICAgaW50T3V0TGVuID0gaW50T3V0TGVuIC0gaW50TXNrQ250O1xyXG4gICAgcmV0dXJuIHN0ck91dDtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBSZXR1cm4gTiBvZiBjb25zZWN1dGl2ZSBNYXNrIGNoYXJhY3RlcnNcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwibXNrXCI+ICAgICB0aGUgbWFzayB0byBjaGVja1xyXG4gIC8vLyA8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwibXNrUG9zXCI+ICBpbmRleCBvZiBmaXJzdCBjaGFyIHRvIGNoZWNrXHJcbiAgLy8vIDwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJsZW5cIj4gICAgIGxlbmd0aCBvZiB0aGUgbWFza1xyXG4gIC8vLyA8L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz4gbnVtYmVyIG9mIGNvbnNlY3V0aXZlIE1hc2sgY2hhcmFjdGVyc1xyXG4gIC8vLyA8L3JldHVybnM+XHJcbiAgcHJpdmF0ZSBkYXRlX21za19jbnQobXNrOiBzdHJpbmdbXSwgbXNrUG9zOiBudW1iZXIsIGxlbjogbnVtYmVyKTogbnVtYmVyIHtcclxuICAgIGxldCBjOiBzdHJpbmcgPSBtc2tbbXNrUG9zKytdO1xyXG4gICAgbGV0IGk6IG51bWJlciA9IDE7XHJcbiAgICB3aGlsZSAoPG51bWJlcj5pIDwgbGVuKSB7XHJcbiAgICAgIGlmIChtc2tbbXNrUG9zXSAhPT0gYykge1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICAgIG1za1BvcyA9IG1za1BvcyArIDE7XHJcbiAgICAgIGkgPSBpICsgMTtcclxuICAgIH1cclxuICAgIHJldHVybiBpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIENvbXB1dGUgRGF5IG5hbWVcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIHByaXZhdGUgZGF0ZV8yX0REREQoZGF5OiBudW1iZXIsIG91dFZhbDogc3RyaW5nW10sIG91dElkeDogbnVtYmVyLCBsZW46IG51bWJlciwgdHJpbTogYm9vbGVhbik6IG51bWJlciB7XHJcblxyXG5cclxuICAgIGxldCByZXQ6IG51bWJlciA9IDQ7XHJcbiAgICBsZXQgZXh0OiBzdHJpbmdbXTtcclxuXHJcbiAgICBpZiAoZGF5ID4gOSkge1xyXG4gICAgICB0aGlzLmludF8yX2Eob3V0VmFsLCBvdXRJZHgsIDIsIGRheSwgKDxudW1iZXI+MCkudG9TdHJpbmcoKSk7XHJcbiAgICAgIG91dElkeCArPSAyO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIGlmICh0cmltKSB7XHJcbiAgICAgICAgTWVtb3J5VXRpbC5jaGFyX21lbWNweShvdXRWYWwsIG91dElkeCwgb3V0VmFsLCBvdXRJZHggKyAxLCBsZW4gLSAxKTtcclxuICAgICAgICAvKjE3LU1heS05MCovXHJcbiAgICAgICAgcmV0LS07XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgLy8gKihvdXQrKykgPSAnICc7IC8vIE9yaWdpbmFsIExpbmVcclxuICAgICAgICBvdXRWYWxbb3V0SWR4KytdID0gJyAnO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuaW50XzJfYShvdXRWYWwsIG91dElkeCwgMSwgZGF5LCAoPG51bWJlcj4wKS50b1N0cmluZygpKTtcclxuICAgICAgb3V0SWR4Kys7XHJcbiAgICB9XHJcbiAgICBzd2l0Y2ggKGRheSkge1xyXG4gICAgICBjYXNlIDE6XHJcbiAgICAgIGNhc2UgMjE6XHJcbiAgICAgIGNhc2UgMzE6XHJcbiAgICAgICAgZXh0ID0gTlN0cmluZy5Ub0NoYXJBcnJheShcInN0XCIpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSAyOlxyXG4gICAgICBjYXNlIDIyOlxyXG4gICAgICAgIGV4dCA9IE5TdHJpbmcuVG9DaGFyQXJyYXkoXCJuZFwiKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgMzpcclxuICAgICAgY2FzZSAyMzpcclxuICAgICAgICBleHQgPSBOU3RyaW5nLlRvQ2hhckFycmF5KFwicmRcIik7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIGV4dCA9IE5TdHJpbmcuVG9DaGFyQXJyYXkoXCJ0aFwiKTtcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuICAgIG91dFZhbFtvdXRJZHgrK10gPSBleHRbMF07XHJcbiAgICBvdXRWYWxbb3V0SWR4XSA9IGV4dFsxXTtcclxuXHJcbiAgICByZXR1cm4gKHJldCk7XHJcblxyXG4gIH1cclxuXHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBCdWlsZCBhIGRpc3BsYXkgc3RyaW5nIGZvciBhbiB0aW1lIHZhbHVlIGFjY29yZGluZyB0byB0aGUgcGljdHVyZVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJkYXRhU3RyXCI+ICAgVGhlIHNvdXJjZSBkYXRhPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInBpY1N0clwiPiAgICBUaGUgcGljdHVyZSB0byB1c2UgZm9yIHRoZSB2YWx1ZSB0byBkaXNwbGF5PC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+IHRoZSBzdHJpbmcgdG8gYmUgZGlzcGxheWVkPC9yZXR1cm5zPlxyXG4gIGZyb21NZ1RpbWVUb05hdGl2ZVRpbWUoZGF0YVN0cjogc3RyaW5nLCBwaWM6IFBJQyk6IERhdGUge1xyXG4gICAgbGV0IHRpbWU6IG51bWJlciA9IG5ldyBOVU1fVFlQRShkYXRhU3RyKS5OVU1fMl9VTE9ORygpO1xyXG5cclxuXHJcbiAgICAgIGxldCBicmVha1BhcmFtczogVGltZUJyZWFrUGFyYW1zID0gbmV3IFRpbWVCcmVha1BhcmFtcygpO1xyXG5cclxuICAgICAgRGlzcGxheUNvbnZlcnRvci50aW1lX2JyZWFrKGJyZWFrUGFyYW1zLCB0aW1lKTtcclxuXHJcbiAgICAgIGxldCBuYXRpdmVEdDogRGF0ZSA9IG5ldyBEYXRlKCk7XHJcblxyXG4gICAgICBuYXRpdmVEdC5zZXRIb3VycyhicmVha1BhcmFtcy5ob3VyKTtcclxuICAgICAgbmF0aXZlRHQuc2V0TWludXRlcyhicmVha1BhcmFtcy5taW51dGUpO1xyXG4gICAgICBuYXRpdmVEdC5zZXRTZWNvbmRzKGJyZWFrUGFyYW1zLnNlY29uZCk7XHJcbiAgICAgIHJldHVybiBuYXRpdmVEdDtcclxuXHJcblxyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIEhhbmRsZSB0aW1lIHZhbHVlXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcIkFzY2lpU3RyXCI+ICAgICAgICBUaGUgbWFzayB0byBiZSB1c2VkPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcIkFzY2lpTFwiPiAgICAgICAgICBNYXNrIGxlbmd0aDwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJwaWNcIj4gICAgICAgICAgICAgVGhlIHBpY3VyZSBpbmZvcm1hdGlvbjwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJ0aW1lX3BpY19aX2VkdFwiPjwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJzZWNvbmRzXCI+LyBtaWxsaVNlY29uZHMgZmxhZzwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPiB0aGUgc3RyaW5nIHRvIGJlIGRpc3BsYXllZFxyXG4gIC8vLyA8L3JldHVybnM+XHJcbiAgcHJpdmF0ZSB0aW1lXzJfYV9waWMoQXNjaWlTdHI6IHN0cmluZywgQXNjaWlMOiBudW1iZXIsIHRpbWU6IG51bWJlciwgcGljOiBQSUMsIHRpbWVfcGljX1pfZWR0OiBib29sZWFuLCBtaWxsaVNlY29uZHM6IGJvb2xlYW4pOiBzdHJpbmcge1xyXG5cclxuICAgIC8vIE9yaWdpbmFsIHZhcnNcclxuICAgIGxldCBob3VyOiBudW1iZXIgPSAwO1xyXG4gICAgbGV0IG1pbnV0ZTogbnVtYmVyID0gMDtcclxuICAgIGxldCBzZWNvbmQ6IG51bWJlciA9IDA7XHJcbiAgICBsZXQgbWlsbGlzZWM6IG51bWJlciA9IDA7XHJcblxyXG4gICAgbGV0IEFzY2lpOiBzdHJpbmdbXSA9IE5TdHJpbmcuVG9DaGFyQXJyYXkoQXNjaWlTdHIpO1xyXG4gICAgbGV0IGJyZWFrUGFyYW1zOiBUaW1lQnJlYWtQYXJhbXMgPSBuZXcgVGltZUJyZWFrUGFyYW1zKGhvdXIsIG1pbnV0ZSwgc2Vjb25kKTtcclxuICAgIGxldCB0aW1lU2VjOiBudW1iZXI7XHJcbiAgICBpZiAobWlsbGlTZWNvbmRzKSB7XHJcbiAgICAgIHRpbWVTZWMgPSBNYXRoLmZsb29yKHRpbWUgLyAxMDAwKTtcclxuICAgICAgbWlsbGlzZWMgPSB0aW1lIC0gdGltZVNlYyAqIDEwMDA7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgdGltZVNlYyA9IHRpbWU7XHJcbiAgICB9XHJcblxyXG4gICAgRGlzcGxheUNvbnZlcnRvci50aW1lX2JyZWFrKGJyZWFrUGFyYW1zLCB0aW1lU2VjKTtcclxuICAgIGhvdXIgPSBicmVha1BhcmFtcy5ob3VyO1xyXG4gICAgbWludXRlID0gYnJlYWtQYXJhbXMubWludXRlO1xyXG4gICAgc2Vjb25kID0gYnJlYWtQYXJhbXMuc2Vjb25kO1xyXG5cclxuICAgIC8vIElmIGFzY2lpIHJlcHJlc2VudGF0aW9uIG92ZXJmbG93cyBvdXRwdXQgYnVmZmVyXHJcbiAgICAvLyBmaWxsIHdpdGggJyonIGFuZCBiYWlsIG91dFxyXG5cclxuICAgIGxldCByZXN1bHQ6IHN0cmluZztcclxuICAgIGlmIChwaWMuZ2V0TWFza1NpemUoKSA+IEFzY2lpTCkge1xyXG4gICAgICBNZW1vcnlVdGlsLmNoYXJfbWVtc2V0KEFzY2lpLCAwLCAnKicsIC8qJyonKi9Bc2NpaUwpO1xyXG4gICAgICByZXN1bHQgPSBOU3RyaW5nLkZyb21DaGFycyhBc2NpaSk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgaWYgKHBpYy56ZXJvRmlsbCgpKSB7XHJcbiAgICAgICAgaWYgKHRpbWVTZWMgPT09IDAgJiYgKCFtaWxsaVNlY29uZHMgfHwgbWlsbGlzZWMgPT09IDApKSB7XHJcbiAgICAgICAgICBpZiAodGltZV9waWNfWl9lZHQpIHtcclxuICAgICAgICAgICAgZm9yIChsZXQgaW50eDogbnVtYmVyID0gMDsgaW50eCA8IHBpYy5nZXRNYXNrU2l6ZSgpOyBpbnR4ID0gaW50eCArIDEpIHtcclxuICAgICAgICAgICAgICBpZiAoQXNjaWlbaW50eF0gPD0gJ1xcdTAwMWYnKSB7XHJcbiAgICAgICAgICAgICAgICBBc2NpaVtpbnR4XSA9IHBpYy5nZXRaZXJvUGFkKCk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJlc3VsdCA9IE5TdHJpbmcuRnJvbUNoYXJzKEFzY2lpKTtcclxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIE1lbW9yeVV0aWwuY2hhcl9tZW1zZXQoQXNjaWksIDAsIHBpYy5nZXRaZXJvUGFkKCksIHBpYy5nZXRNYXNrU2l6ZSgpKTtcclxuICAgICAgICAgIHJlc3VsdCA9IE5TdHJpbmcuRnJvbUNoYXJzKEFzY2lpKTtcclxuICAgICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGxldCBJOiBudW1iZXIgPSAwO1xyXG4gICAgICBsZXQgYW06IG51bWJlciA9IDA7XHJcbiAgICAgIGxldCBsZW46IG51bWJlciA9IHBpYy5nZXRNYXNrU2l6ZSgpO1xyXG4gICAgICBsZXQgSG91ckk6IG51bWJlciA9IC0xO1xyXG5cclxuICAgICAgd2hpbGUgKEkgPCBsZW4pIHtcclxuICAgICAgICBzd2l0Y2ggKEFzY2lpW0ldLmNoYXJDb2RlQXQoMCkpIHtcclxuICAgICAgICAgIGNhc2UgKFBJQ0ludGVyZmFjZS5QSUNfSEgpOlxyXG4gICAgICAgICAgICBIb3VySSA9IEk7XHJcbiAgICAgICAgICAgIEkgKz0gMjtcclxuICAgICAgICAgICAgYnJlYWs7XHJcblxyXG5cclxuICAgICAgICAgIGNhc2UgKFBJQ0ludGVyZmFjZS5QSUNfTU1UKTpcclxuICAgICAgICAgICAgdGhpcy5pbnRfMl9hKEFzY2lpLCBJLCAyLCBtaW51dGUsICcwJyk7XHJcbiAgICAgICAgICAgIEkgKz0gMjtcclxuICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgY2FzZSAoUElDSW50ZXJmYWNlLlBJQ19TUyk6XHJcbiAgICAgICAgICAgIHRoaXMuaW50XzJfYShBc2NpaSwgSSwgMiwgc2Vjb25kLCAnMCcpO1xyXG4gICAgICAgICAgICBJICs9IDI7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgIGNhc2UgKFBJQ0ludGVyZmFjZS5QSUNfTVMpOlxyXG4gICAgICAgICAgICB0aGlzLmludF8yX2EoQXNjaWksIEksIDMsIG1pbGxpc2VjLCAnMCcpO1xyXG4gICAgICAgICAgICBJICs9IDM7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgIGNhc2UgKFBJQ0ludGVyZmFjZS5QSUNfUE0pOlxyXG4gICAgICAgICAgICBhbSA9IDE7XHJcbiAgICAgICAgICAgIGxldCB0bXBIb3VyOiBudW1iZXIgPSBob3VyICUgMjQ7XHJcbiAgICAgICAgICAgIGlmICh0bXBIb3VyIDwgMTIgfHwgdG1wSG91ciA9PT0gMClcclxuICAgICAgICAgICAgICBNZW1vcnlVdGlsLmNoYXJfbWVtY3B5KEFzY2lpLCBJLCBOU3RyaW5nLlRvQ2hhckFycmF5KFwiYW1cIiksIDAsIDIpO1xyXG4gICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgTWVtb3J5VXRpbC5jaGFyX21lbWNweShBc2NpaSwgSSwgTlN0cmluZy5Ub0NoYXJBcnJheShcInBtXCIpLCAwLCAyKTtcclxuICAgICAgICAgICAgSSArPSAyO1xyXG4gICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICBJKys7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBpZiAoSG91ckkgPj0gMCkge1xyXG4gICAgICAgIGlmIChhbSA+IDApIHtcclxuICAgICAgICAgIGhvdXIgPSBob3VyICUgMjQ7XHJcbiAgICAgICAgICBpZiAoaG91ciA9PT0gMCkge1xyXG4gICAgICAgICAgICBob3VyID0gMTI7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgaG91ciA9IGhvdXIgJSAxMjtcclxuICAgICAgICAgICAgaWYgKGhvdXIgPT09IDApIHtcclxuICAgICAgICAgICAgICBob3VyID0gMTI7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5pbnRfMl9hKEFzY2lpLCBIb3VySSwgMiwgaG91ciwgKGFtICE9PSAwICYmIGhvdXIgPCAxMCkgPyAnICcgOiAvKicgJyovJzAnLyonMCcqLyk7XHJcbiAgICAgIH1cclxuICAgICAgcmVzdWx0ID0gTlN0cmluZy5Gcm9tQ2hhcnMoQXNjaWkpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJlc3VsdDtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBCcmVhayB0aW1lIGludG8gaXRzIGNvbXBvbmVudHNcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIHN0YXRpYyB0aW1lX2JyZWFrKGJyZWFrUGFyYW1zOiBUaW1lQnJlYWtQYXJhbXMsIHRpbWU6IG51bWJlcik6IHZvaWQge1xyXG5cclxuICAgIGlmICh0aW1lIDw9IDApIHtcclxuICAgICAgYnJlYWtQYXJhbXMuc2Vjb25kID0gMDtcclxuICAgICAgYnJlYWtQYXJhbXMubWludXRlID0gMDtcclxuICAgICAgYnJlYWtQYXJhbXMuaG91ciA9IDA7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgYnJlYWtQYXJhbXMuaG91ciA9IE1hdGguZmxvb3IodGltZSAvIDM2MDApO1xyXG4gICAgICB0aW1lID0gdGltZSAtIGJyZWFrUGFyYW1zLmhvdXIgKiAzNjAwO1xyXG4gICAgICBicmVha1BhcmFtcy5taW51dGUgPSBNYXRoLmZsb29yKHRpbWUgLyA2MCk7XHJcbiAgICAgIGJyZWFrUGFyYW1zLnNlY29uZCA9IHRpbWUgLSBicmVha1BhcmFtcy5taW51dGUgKiA2MDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBCdWlsZCBhIGRpc3BsYXkgc3RyaW5nIGZvciBhIGxvZ2ljYWwgdmFsdWUgYWNjb3JkaW5nIHRvIHRoZSBwaWN0dXJlXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImRhdGFTdHJcIj4gICBcIjBcIiBmb3IgZmFsc2Ugb3IgXCIxXCIgZm9yIHRydWVcclxuICAvLy8gPC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+IGJvb2xlYW5cclxuICAvLy8gPC9yZXR1cm5zPlxyXG4gIHByaXZhdGUgZnJvbU1nTG9naWNhbFRvTmF0aXZlTG9naWNhbChkYXRhU3RyOiBzdHJpbmcpOiBib29sZWFuIHtcclxuXHJcbiAgICBsZXQgbmF0aXZlVmFsOiBib29sZWFuO1xyXG4gICAgbmF0aXZlVmFsID0gKGRhdGFTdHIuY2hhckF0KDApID09PSAnMScpID8gdHJ1ZSA6IGZhbHNlO1xyXG4gICAgcmV0dXJuIG5hdGl2ZVZhbDtcclxuICB9XHJcblxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgQnVpbGQgYSBtZyBzdHJpbmcgZm9yIGEgbG9naWNhbCB2YWx1ZSBhY2NvcmRpbmcgdG8gdGhlIGJvb2xlYW4gdmFsdWVcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiZGlzcFZhbFwiPiAgYm9vbGVhblxyXG4gIC8vLyA8L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz4gc3RyaW5nXHJcbiAgLy8vIDwvcmV0dXJucz5cclxuICBwcml2YXRlIGZyb21OYXRpdmVMb2dpY2FsVG9NZ0xvZ2ljYWwoZGlzcFZhbDogYm9vbGVhbik6IHN0cmluZyB7XHJcblxyXG4gICAgbGV0IG1nVmFsOiBzdHJpbmc7XHJcbiAgICBtZ1ZhbCA9IChkaXNwVmFsID09PSB0cnVlKSA/IFwiMVwiIDogXCIwXCI7XHJcblxyXG4gICAgcmV0dXJuIG1nVmFsO1xyXG4gIH1cclxuXHJcblxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgR2V0IHRoZSBkZWZhdWx0IHJhbmdlIGZvciBsb2dpY2FsIHZhbHVlc1xyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJybmdcIj4gIGN1cnJlbnQgcmFuZ2U8L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz4gdGhlIGRlZmF1bHQgcmFuZ2UgaWYgdGhlIGlucHV0IHJhbmdlIGlzIGVtcHR5PC9yZXR1cm5zPlxyXG4gIHByaXZhdGUgd2luX3JuZ19ib29sKHJuZzogc3RyaW5nKTogc3RyaW5nIHtcclxuXHJcbiAgICBpZiAocm5nID09PSBudWxsIHx8IHJuZy5sZW5ndGggPT09IDApIHtcclxuICAgICAgcm5nID0gXCJUcnVlLCBGYWxzZVwiO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJuZztcclxuICB9XHJcblxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vIE1ldGhvZHMgZm9yIGNvdmVydGluZyBESVBMQVkgLS0tPiBJTlRFUk5BTFxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBUcmFuc2xhdGVzIGEgc3RyaW5nIG51bWJlciB0byBtYWdpYyBudW1iZXJcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiZGlzcFZhbHVlXCI+ICAgQSBzdHJpbmcgbnVtYmVyPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInBpY1N0clwiPiAgICAgIFRoZSBwaWN0dXJlIHRvIHVzZTwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPiB0aGUgbWFnaWMgbnVtYmVyPC9yZXR1cm5zPlxyXG4gIHRvTnVtKGRpc3BWYWx1ZTogc3RyaW5nLCBwaWM6IFBJQywgY29tcElkeDogbnVtYmVyKTogc3RyaW5nIHtcclxuICAgIGxldCBtZ051bTogTlVNX1RZUEUgPSBuZXcgTlVNX1RZUEUoZGlzcFZhbHVlLCBwaWMsIGNvbXBJZHgpO1xyXG4gICAgcmV0dXJuIG1nTnVtLnRvWE1McmVjb3JkKCk7XHJcbiAgfVxyXG5cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIGJ1aWxkcyB0aGUgZGF0ZSBtYWdpYyBudW1iZXIgZnJvbSB0aGUgc3RyaW5nIHZhbHVlXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInN0clwiPiAgICAgICAgICAgIHRoZSBkYXRlIHN0cmluZzwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJzdHJfbGVuXCI+ICAgICAgICBsZW5ndGggb2Ygc3RyaW5nPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInBpY1wiPiAgICAgICAgICAgIHRoZSBwaWN0dXJlIGluZm88L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwibWFza1wiPiAgICAgICAgICAgdGhlIG1hc2sgb2YgdGhlIHN0cmluZzwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJpZ25vcmVfZHRfZm10XCI+PC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+IHRoZSBtYWdpYyBudW1iZXI8L3JldHVybnM+XHJcbiAgYV8yX2RhdGVfcGljX2RhdGVtb2RlKHN0cjogc3RyaW5nW10sIHN0cl9sZW46IG51bWJlciwgcGljOiBQSUMsIG1hc2s6IHN0cmluZ1tdLCBjb21wSWR4OiBudW1iZXIpOiBudW1iZXIge1xyXG4gICAgbGV0IHBvczogbnVtYmVyID0gMDtcclxuICAgIGxldCB5ZWFyX2luX3BpYzogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgbGV0IG1vbnRoX2luX3BpYzogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgbGV0IGRheV9pbl9waWM6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIGxldCBpbnA6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIGxldCBiWWVhcklzWmVybzogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgbGV0IGVyYV95ZWFyOiBudW1iZXIgPSAwO1xyXG4gICAgbGV0IGludFJlZjogSW50UmVmID0gbmV3IEludFJlZigwKTtcclxuICAgIGxldCBpbnRQaWNJZHhPZnM6IG51bWJlciA9IDA7XHJcbiAgICBsZXQgbWlsbGVuaXVtOiBudW1iZXIgPSAwO1xyXG4gICAgbGV0IGRhdGVQYXJhbXM6IERhdGVCcmVha1BhcmFtcztcclxuXHJcbiAgICBsZXQgbGVuOiBudW1iZXIgPSBNYXRoLm1pbihzdHIubGVuZ3RoLCBwaWMuZ2V0TWFza1NpemUoKSk7XHJcblxyXG4gICAgaWYgKHN0ci5sZW5ndGggPCBtYXNrLmxlbmd0aClcclxuICAgICAgc3RyLmxlbmd0aCA9IG1hc2subGVuZ3RoO1xyXG5cclxuICAgIGxldCB5ZWFyOiBudW1iZXIgPSAwO1xyXG4gICAgbGV0IG1vbnRoOiBudW1iZXIgPSAxO1xyXG4gICAgbGV0IGRheTogbnVtYmVyID0gMTtcclxuICAgIGxldCBkb3k6IG51bWJlciA9IDE7XHJcbiAgICBsZXQgdXNlZG95OiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gICAgbGV0IGk6IG51bWJlcjtcclxuICAgIGZvciAoaSA9IDA7IGkgPCBzdHJfbGVuOyBpID0gaSArIDEpIHtcclxuICAgICAgaWYgKHN0cltpXSAhPT0gJzAnICYmIHN0cltpXSAhPT0gJyAnKSB7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAoaSA9PT0gc3RyX2xlbilcclxuICAgICAgcmV0dXJuIDA7XHJcblxyXG4gICAgd2hpbGUgKHBvcyA8IHN0cl9sZW4gJiYgcG9zICsgaW50UGljSWR4T2ZzIDwgbGVuKSB7XHJcblxyXG4gICAgICBzd2l0Y2ggKG1hc2tbcG9zICsgaW50UGljSWR4T2ZzXS5jaGFyQ29kZUF0KDApKSB7XHJcbiAgICAgICAgY2FzZSBQSUNJbnRlcmZhY2UuUElDX1lZOlxyXG4gICAgICAgICAgeWVhcl9pbl9waWMgPSB0cnVlO1xyXG4gICAgICAgICAgaW5wID0gdHJ1ZTtcclxuICAgICAgICAgIHllYXIgPSB0aGlzLmRhdGVfYV8yX2koc3RyLCAyLCBwb3MpO1xyXG4gICAgICAgICAgcG9zICs9IDI7XHJcbiAgICAgICAgICAvLyBIZW4gMTYvMTEvOTcgOiBGaXggIzc2ODQ0MlxyXG4gICAgICAgICAgaWYgKHllYXIgPT09IDApXHJcbiAgICAgICAgICAgIGJZZWFySXNaZXJvID0gdHJ1ZTtcclxuICAgICAgICAgIGxldCBjZW50dXJ5X3llYXI6IG51bWJlciA9IHRoaXMuX2Vudmlyb25tZW50LkdldENlbnR1cnkoY29tcElkeCkgJSAxMDA7IC8vIERFRl9jZW50dXJ5XHJcbiAgICAgICAgICBpZiAoeWVhciA8IGNlbnR1cnlfeWVhcilcclxuICAgICAgICAgICAgeWVhciArPSAxMDA7XHJcbiAgICAgICAgICB5ZWFyICs9IHRoaXMuX2Vudmlyb25tZW50LkdldENlbnR1cnkoY29tcElkeCkgLSBjZW50dXJ5X3llYXI7IC8vIERFRl9jZW50dXJ5XHJcbiAgICAgICAgICBpZiAodGhpcy5fZW52aXJvbm1lbnQuR2V0RGF0ZU1vZGUoY29tcElkeCkgPT09ICdCJylcclxuICAgICAgICAgIC8vIERFRl9kYXRlX21vZGVcclxuICAgICAgICAgICAgeWVhciAtPSBQSUNJbnRlcmZhY2UuREFURV9CVURESElTVF9HQVA7XHJcbiAgICAgICAgICBicmVhaztcclxuXHJcblxyXG4gICAgICAgIGNhc2UgKFBJQ0ludGVyZmFjZS5QSUNfWVlZWSk6XHJcbiAgICAgICAgICB5ZWFyX2luX3BpYyA9IHRydWU7XHJcbiAgICAgICAgICBpbnAgPSB0cnVlO1xyXG4gICAgICAgICAgbGV0IFllYXJEaWdpdHNObzogbnVtYmVyO1xyXG4gICAgICAgICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgICAgICAgIC8vIE1ha2Ugc3VyZSB3ZSBoYXZlIDQgeWVhciBkaWdpdC4gSWYgbm90LCBhZGp1c3QgaXRcclxuICAgICAgICAgIC8vIGFjY29yZGluZyB0byB0aGUgJ2NlbnR1cnkgeWVhcidcclxuICAgICAgICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAgICAgICBpZiAoVXRpbFN0ckJ5dGVNb2RlLmlzTG9jYWxlRGVmTGFuZ0pQTigpKSB7XHJcbiAgICAgICAgICAgIGZvciAoWWVhckRpZ2l0c05vID0gMDsgWWVhckRpZ2l0c05vIDwgNCAmJiBwb3MgKyBZZWFyRGlnaXRzTm8gPCBzdHIubGVuZ3RoICYmIFV0aWxTdHJCeXRlTW9kZS5pc0RpZ2l0KHN0cltwb3MgKyBZZWFyRGlnaXRzTm9dKTsgWWVhckRpZ2l0c05vKyspIHtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpID0gWWVhckRpZ2l0c05vO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGZvciAoaSA9IDA7IHBvcyArIGkgPCBzdHIubGVuZ3RoICYmIHN0cltwb3MgKyBpXSAhPT0gdGhpcy5EQVRFQ0hBUi50b1N0cmluZygpICYmIGkgPCA0OyBpKyspIHtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgZm9yIChZZWFyRGlnaXRzTm8gPSAwO1xyXG4gICAgICAgICAgICAgICAgIHBvcyArIFllYXJEaWdpdHNObyA8IHN0ci5sZW5ndGggJiYgVXRpbFN0ckJ5dGVNb2RlLmlzRGlnaXQoc3RyW3BvcyArIFllYXJEaWdpdHNOb10pICYmXHJcbiAgICAgICAgICAgICAgICAgWWVhckRpZ2l0c05vIDwgNDtcclxuICAgICAgICAgICAgICAgICBZZWFyRGlnaXRzTm8rKykge1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgaWYgKFV0aWxTdHJCeXRlTW9kZS5pc0xvY2FsZURlZkxhbmdKUE4oKSkge1xyXG4gICAgICAgICAgICBpZiAoaSA8IDQgJiYgc3RyLmxlbmd0aCA8IG1hc2subGVuZ3RoKVxyXG4gICAgICAgICAgICAgIHRoaXMubW92ZV9kYXRlKHN0ciwgcG9zLCA0IC0gaSwgc3RyLmxlbmd0aCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKGkgPCA0ICYmIGxlbiA8IG1hc2subGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5tb3ZlX2RhdGUoc3RyLCBwb3MsIDQgLSBpLCBsZW4pO1xyXG4gICAgICAgICAgICAgIGxlbiA9IGxlbiArIDQgLSBpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgeWVhciA9IHRoaXMuZGF0ZV9hXzJfaShzdHIsIDQsIHBvcyk7XHJcbiAgICAgICAgICBwb3MgKz0gNDtcclxuXHJcbiAgICAgICAgICAvLyBIZW4gMTYvMTEvOTcgOiBGaXggIzc2ODQ0MlxyXG4gICAgICAgICAgaWYgKHllYXIgPT09IDApXHJcbiAgICAgICAgICAgIGJZZWFySXNaZXJvID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgICBpZiAoWWVhckRpZ2l0c05vIDw9IDIpIHtcclxuICAgICAgICAgICAgY2VudHVyeV95ZWFyID0gdGhpcy5fZW52aXJvbm1lbnQuR2V0Q2VudHVyeShjb21wSWR4KSAlIDEwMDsgLy8gREVGX2NlbnR1cnlcclxuICAgICAgICAgICAgaWYgKHllYXIgPCBjZW50dXJ5X3llYXIpXHJcbiAgICAgICAgICAgICAgeWVhciArPSAxMDA7XHJcbiAgICAgICAgICAgIHllYXIgKz0gdGhpcy5fZW52aXJvbm1lbnQuR2V0Q2VudHVyeShjb21wSWR4KSAtIGNlbnR1cnlfeWVhcjsgLy8gREVGX2NlbnR1cnlcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBpZiAodGhpcy5fZW52aXJvbm1lbnQuR2V0RGF0ZU1vZGUoY29tcElkeCkgPT09ICdCJylcclxuICAgICAgICAgIC8vIERFRl9kYXRlX21vZGVcclxuICAgICAgICAgICAgeWVhciAtPSBQSUNJbnRlcmZhY2UuREFURV9CVURESElTVF9HQVA7XHJcbiAgICAgICAgICBicmVhaztcclxuXHJcblxyXG4gICAgICAgIGNhc2UgUElDSW50ZXJmYWNlLlBJQ19IWVlZWVk6XHJcbiAgICAgICAgICBpbnAgPSB0cnVlO1xyXG4gICAgICAgICAgbGV0IHF1b3RlczogbnVtYmVyID0gMDtcclxuICAgICAgICAgIGlmIChsZW4gPiBwb3MgKyA1ICYmIG1hc2tbcG9zICsgNV0uY2hhckNvZGVBdCgwKSA9PT0gKFBJQ0ludGVyZmFjZS5QSUNfSFlZWVlZKSlcclxuICAgICAgICAgICAgcXVvdGVzID0gMTtcclxuICAgICAgICAgIHllYXIgPSBIZWJyZXdEYXRlLmRhdGVoZWJfaF8yX2koc3RyLCA1ICsgcXVvdGVzLCBwb3MpO1xyXG4gICAgICAgICAgcG9zICs9IDUgKyBxdW90ZXM7XHJcbiAgICAgICAgICBpZiAoeWVhciA9PT0gMClcclxuICAgICAgICAgICAgYlllYXJJc1plcm8gPSB0cnVlO1xyXG4gICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIGNhc2UgUElDSW50ZXJmYWNlLlBJQ19ITDpcclxuICAgICAgICAgIGludFBpY0lkeE9mcyA9IEhlYnJld0RhdGUuZGF0ZWhlYl9oXzJfaShzdHIsIDEsIHBvcyk7XHJcbiAgICAgICAgICBwb3MrKztcclxuICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICBjYXNlIFBJQ0ludGVyZmFjZS5QSUNfSEREOlxyXG4gICAgICAgICAgaW5wID0gdHJ1ZTtcclxuICAgICAgICAgIHF1b3RlcyA9IDA7XHJcbiAgICAgICAgICBpZiAobGVuID4gcG9zICsgMiAmJiBtYXNrW3BvcyArIDJdLmNoYXJDb2RlQXQoMCkgPT09IFBJQ0ludGVyZmFjZS5QSUNfSEREKVxyXG4gICAgICAgICAgICBxdW90ZXMgPSAxO1xyXG4gICAgICAgICAgZGF5ID0gSGVicmV3RGF0ZS5kYXRlaGViX2hfMl9pKHN0ciwgMiArIHF1b3RlcywgcG9zKTtcclxuICAgICAgICAgIHBvcyArPSAyICsgcXVvdGVzO1xyXG4gICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIGNhc2UgUElDSW50ZXJmYWNlLlBJQ19NTUQ6XHJcbiAgICAgICAgICBpbnAgPSB0cnVlO1xyXG4gICAgICAgICAgbW9udGhfaW5fcGljID0gdHJ1ZTtcclxuICAgICAgICAgIGlmIChVdGlsU3RyQnl0ZU1vZGUuaXNMb2NhbGVEZWZMYW5nSlBOKCkpIHtcclxuICAgICAgICAgICAgaWYgKChzdHIubGVuZ3RoID09PSBwb3MgKyAxIHx8IHN0cltwb3MgKyAxXS5jaGFyQ29kZUF0KDApID09PSB0aGlzLkRBVEVDSEFSIHx8ICFVdGlsU3RyQnl0ZU1vZGUuaXNEaWdpdChzdHJbcG9zICsgMV0pKSAmJiBzdHIubGVuZ3RoIDwgbWFzay5sZW5ndGgpXHJcbiAgICAgICAgICAgICAgdGhpcy5tb3ZlX2RhdGUoc3RyLCBwb3MsIDEsIHN0ci5sZW5ndGgpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGlmIChzdHJbcG9zICsgMV0uY2hhckNvZGVBdCgwKSA9PT0gdGhpcy5EQVRFQ0hBUiAmJiBsZW4gPCBtYXNrLmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgIHRoaXMubW92ZV9kYXRlKHN0ciwgcG9zLCAxLCBsZW4pO1xyXG4gICAgICAgICAgICAgIGxlbiArPSAxO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBtb250aCA9IHRoaXMuZGF0ZV9hXzJfaShzdHIsIDIsIHBvcyk7XHJcbiAgICAgICAgICBwb3MgKz0gMjtcclxuICAgICAgICAgIGJyZWFrO1xyXG5cclxuXHJcbiAgICAgICAgY2FzZSBQSUNJbnRlcmZhY2UuUElDX01NTTpcclxuICAgICAgICAgIGlucCA9IHRydWU7XHJcbiAgICAgICAgICBtb250aF9pbl9waWMgPSB0cnVlO1xyXG4gICAgICAgICAgaW50UmVmLnZhbCA9IHBvcztcclxuICAgICAgICAgIG1vbnRoID0gdGhpcy5kYXRlX01NTV8yX20oc3RyLCBtYXNrLCBpbnRSZWYsIGxlbiwgcGljLmlzSGVicmV3KCkpO1xyXG4gICAgICAgICAgcG9zID0gaW50UmVmLnZhbDtcclxuICAgICAgICAgIGlmIChwaWMuaXNIZWJyZXcoKSAmJiBtb250aCA9PT0gMTQpXHJcbiAgICAgICAgICAgIG1vbnRoID0gNjtcclxuICAgICAgICAgIGJyZWFrO1xyXG5cclxuXHJcbiAgICAgICAgY2FzZSAoUElDSW50ZXJmYWNlLlBJQ19ERCk6XHJcbiAgICAgICAgICBpbnAgPSB0cnVlO1xyXG4gICAgICAgICAgZGF5X2luX3BpYyA9IHRydWU7XHJcbiAgICAgICAgICBpZiAoVXRpbFN0ckJ5dGVNb2RlLmlzTG9jYWxlRGVmTGFuZ0pQTigpKSB7XHJcbiAgICAgICAgICAgIGlmICgoc3RyLmxlbmd0aCA9PT0gcG9zICsgMSB8fCBzdHJbcG9zICsgMV0uY2hhckNvZGVBdCgwKSA9PT0gdGhpcy5EQVRFQ0hBUiB8fCAhVXRpbFN0ckJ5dGVNb2RlLmlzRGlnaXQoc3RyW3BvcyArIDFdKSkgJiYgc3RyLmxlbmd0aCA8IG1hc2subGVuZ3RoKVxyXG4gICAgICAgICAgICAgIHRoaXMubW92ZV9kYXRlKHN0ciwgcG9zLCAxLCBzdHIubGVuZ3RoKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAoc3RyW3BvcyArIDFdLmNoYXJDb2RlQXQoMCkgPT09IHRoaXMuREFURUNIQVIgJiYgbGVuIDwgbWFzay5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICB0aGlzLm1vdmVfZGF0ZShzdHIsIHBvcywgMSwgbGVuKTtcclxuICAgICAgICAgICAgICBsZW4gKz0gMTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZGF5ID0gdGhpcy5kYXRlX2FfMl9pKHN0ciwgMiwgcG9zKTtcclxuICAgICAgICAgIHBvcyArPSAyO1xyXG4gICAgICAgICAgYnJlYWs7XHJcblxyXG5cclxuICAgICAgICBjYXNlIChQSUNJbnRlcmZhY2UuUElDX0RERCk6XHJcbiAgICAgICAgICBpbnAgPSB0cnVlO1xyXG4gICAgICAgICAgdXNlZG95ID0gdHJ1ZTtcclxuICAgICAgICAgIGRheV9pbl9waWMgPSB0cnVlO1xyXG4gICAgICAgICAgZG95ID0gdGhpcy5kYXRlX2FfMl9pKHN0ciwgMywgcG9zKTtcclxuICAgICAgICAgIHBvcyArPSAzO1xyXG4gICAgICAgICAgYnJlYWs7XHJcblxyXG5cclxuICAgICAgICBjYXNlIChQSUNJbnRlcmZhY2UuUElDX0REREQpOlxyXG4gICAgICAgICAgaW5wID0gdHJ1ZTtcclxuICAgICAgICAgIGRheV9pbl9waWMgPSB0cnVlO1xyXG4gICAgICAgICAgZGF5ID0gdGhpcy5kYXRlX2FfMl9pKHN0ciwgMiwgcG9zKTtcclxuICAgICAgICAgIHBvcyArPSAyICsgMjtcclxuICAgICAgICAgIGJyZWFrO1xyXG5cclxuXHJcbiAgICAgICAgY2FzZSAoUElDSW50ZXJmYWNlLlBJQ19ZSik6IC8vIEpQTjogSmFwYW5lc2UgZGF0ZSBwaWN0dXJlIHN1cHBvcnRcclxuICAgICAgICAgIHllYXJfaW5fcGljID0gdHJ1ZTtcclxuICAgICAgICAgIGlucCA9IHRydWU7XHJcbiAgICAgICAgICBpZiAoVXRpbFN0ckJ5dGVNb2RlLmlzTG9jYWxlRGVmTGFuZ0pQTigpKSB7XHJcbiAgICAgICAgICAgIGlmICgoc3RyLmxlbmd0aCA9PT0gcG9zICsgMSB8fCBzdHJbcG9zICsgMV0uY2hhckNvZGVBdCgwKSA9PT0gdGhpcy5EQVRFQ0hBUiB8fCAhVXRpbFN0ckJ5dGVNb2RlLmlzRGlnaXQoc3RyW3BvcyArIDFdKSkgJiYgc3RyLmxlbmd0aCA8IG1hc2subGVuZ3RoKVxyXG4gICAgICAgICAgICAgIHRoaXMubW92ZV9kYXRlKHN0ciwgcG9zLCAxLCBzdHIubGVuZ3RoKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHllYXIgPSB0aGlzLmRhdGVfYV8yX2koc3RyLCAyLCBwb3MpO1xyXG4gICAgICAgICAgcG9zICs9IDI7XHJcblxyXG4gICAgICAgICAgbGV0IHN0cjE6IHN0cmluZyA9IE5TdHJpbmcuRnJvbUNoYXJzKHN0cik7XHJcbiAgICAgICAgICBlcmFfeWVhciA9IFV0aWxEYXRlSnBuLmdldEluc3RhbmNlKCkuZ2V0U3RhcnRZZWFyT2ZFcmEoc3RyMSwgcGljLmdldE1hc2soKSk7XHJcblxyXG4gICAgICAgICAgaWYgKGVyYV95ZWFyID09PSAwKVxyXG4gICAgICAgICAgICByZXR1cm4gMDtcclxuICAgICAgICAgIHllYXIgKz0gZXJhX3llYXIgLSAxO1xyXG5cclxuICAgICAgICAgIGlmICh5ZWFyID09PSAwKVxyXG4gICAgICAgICAgICBiWWVhcklzWmVybyA9IHRydWU7XHJcbiAgICAgICAgICBicmVhaztcclxuXHJcblxyXG4gICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICBpZiAoVXRpbFN0ckJ5dGVNb2RlLmlzTG9jYWxlRGVmTGFuZ0RCQ1MoKSkge1xyXG4gICAgICAgICAgICAvLyBpZiBcInN0cltwb3NdXCIgY29udGFpbnMgREJDUywgdGhlIG5leHQgaW5kZXggb2YgXCJtYXNrXCIgaGFzIHRvIGJlIHNraXBwZWQuXHJcbiAgICAgICAgICAgIGlmIChVdGlsU3RyQnl0ZU1vZGUuaXNIYWxmV2lkdGgoc3RyW3Bvc10pID09PSBmYWxzZSAmJlxyXG4gICAgICAgICAgICAgIFV0aWxTdHJCeXRlTW9kZS5pc0hhbGZXaWR0aChtYXNrW3BvcyArIGludFBpY0lkeE9mc10pKVxyXG4gICAgICAgICAgICAgIGludFBpY0lkeE9mcysrO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIHBvcyArPSAxO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAoYlllYXJJc1plcm8pIHtcclxuICAgICAgaWYgKCFtb250aF9pbl9waWMpXHJcbiAgICAgICAgbW9udGggPSAwO1xyXG4gICAgICBpZiAoIWRheV9pbl9waWMgJiYgbW9udGggPT09IDApXHJcbiAgICAgICAgZGF5ID0gMDtcclxuICAgIH1cclxuXHJcbiAgICAvLyBIZW4gMTYvMTEvOTcgOiBGaXggIzc2ODQ0MlxyXG4gICAgLy8gWmVybyBkYXRlIGlzIHZhbGlkIGFuZCBzaG91bGQgcmV0dXJuIDBMLiBUaGlzIGNoZWNrIG11c3QgYmUgaGVyZVxyXG4gICAgLy8gYmVjYXVzZSB0aGUgeWVhciB2YWx1ZSBtYXkgYmUgY2hhbmdlZCBiZWNhdXNlIG9mIGNlbnR1cnkgeWVhci5cclxuICAgIGlmIChkYXkgPT09IDAgJiYgbW9udGggPT09IDAgJiYgKGJZZWFySXNaZXJvIHx8IHllYXIgPT09IDApKVxyXG4gICAgICByZXR1cm4gKDApO1xyXG5cclxuICAgIGlmICghaW5wKVxyXG4gICAgICByZXR1cm4gKDApO1xyXG5cclxuICAgIC8vIEhlYnJldyBZZWFyXHJcbiAgICBpZiAocGljLmlzSGVicmV3KCkpIHtcclxuICAgICAgaWYgKHllYXIgPiAwKSB7XHJcbiAgICAgICAgaWYgKG1pbGxlbml1bSA9PT0gMClcclxuICAgICAgICAgIG1pbGxlbml1bSA9IDU7XHJcbiAgICAgICAgeWVhciArPSBtaWxsZW5pdW0gKiAxMDAwO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiAoSGVicmV3RGF0ZS5kYXRlaGViXzJfZCh5ZWFyLCBtb250aCwgZGF5KSk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gdGhlIG5leHQgMiBsaW5lcyBzdXBwb3J0IDQueHggREQvTU0gcGljdHVyZXNcclxuICAgIGlmICgoeWVhciA9PT0gMCkgJiYgIXllYXJfaW5fcGljKSB7XHJcbiAgICAgIGRhdGVQYXJhbXMgPSB0aGlzLmRhdGVfc3lzKCk7XHJcbiAgICAgIHllYXIgPSBkYXRlUGFyYW1zLnllYXI7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gKHRoaXMuZGF0ZV80X2NhbGVuZGVyKHllYXIsIG1vbnRoLCBkYXksIGRveSwgdXNlZG95KSk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgRGVjb2RlIGRpZ2l0cyBmcm9tIGEgZGF0ZSBzdHJpbmdcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIHByaXZhdGUgZGF0ZV9hXzJfaShzOiBzdHJpbmdbXSwgbGVuOiBudW1iZXIsIHBvczogbnVtYmVyKTogbnVtYmVyO1xyXG4gIHByaXZhdGUgZGF0ZV9hXzJfaShzOiBzdHJpbmcsIGxlbjogbnVtYmVyLCBwb3M6IG51bWJlcik6IG51bWJlcjtcclxuICBwcml2YXRlIGRhdGVfYV8yX2koczogYW55LCBsZW46IG51bWJlciwgcG9zOiBudW1iZXIpOiBudW1iZXIge1xyXG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDMgJiYgKHMgPT09IG51bGwgfHwgcyBpbnN0YW5jZW9mIEFycmF5KSAmJiAobGVuID09PSBudWxsIHx8IGxlbi5jb25zdHJ1Y3RvciA9PT0gTnVtYmVyKSAmJiAocG9zID09PSBudWxsIHx8IHBvcy5jb25zdHJ1Y3RvciA9PT0gTnVtYmVyKSkge1xyXG4gICAgICByZXR1cm4gdGhpcy5kYXRlX2FfMl9pXzAocywgbGVuLCBwb3MpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRoaXMuZGF0ZV9hXzJfaV8xKHMsIGxlbiwgcG9zKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBEZWNvZGUgZGlnaXRzIGZyb20gYSBkYXRlIHN0cmluZ1xyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgcHJpdmF0ZSBkYXRlX2FfMl9pXzAoczogc3RyaW5nW10sIGxlbjogbnVtYmVyLCBwb3M6IG51bWJlcik6IG51bWJlciB7XHJcbiAgICBsZXQgYXJyYXk6IHN0cmluZ1tdID0gbmV3IEFycmF5PHN0cmluZz4obGVuKTtcclxuICAgIGxldCBtZ051bTogTlVNX1RZUEUgPSBuZXcgTlVNX1RZUEUoKTtcclxuICAgIGZvciAobGV0IGk6IG51bWJlciA9IDA7IGkgPCBsZW47IGkgPSBpICsgMSkge1xyXG4gICAgICBhcnJheVtpXSA9IHNbcG9zICsgaV07XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbWdOdW0uYV8yX2xvbmcoTlN0cmluZy5Gcm9tQ2hhcnMoYXJyYXkpKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBtb3ZpbmcgcGFydCBvZiB0aGUgZGF0ZSBzdHJpbmdcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIHByaXZhdGUgbW92ZV9kYXRlKHN0cjogc3RyaW5nW10sIHBvczogbnVtYmVyLCBtb3ZlYnk6IG51bWJlciwgbGVuOiBudW1iZXIpOiB2b2lkO1xyXG4gIHByaXZhdGUgbW92ZV9kYXRlKHN0cjogc3RyaW5nLCBwb3M6IG51bWJlciwgbW92ZWJ5OiBudW1iZXIsIGxlbjogbnVtYmVyKTogdm9pZDtcclxuICBwcml2YXRlIG1vdmVfZGF0ZShzdHI6IGFueSwgcG9zOiBudW1iZXIsIG1vdmVieTogbnVtYmVyLCBsZW46IG51bWJlcik6IHZvaWQge1xyXG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDQgJiYgKHN0ciA9PT0gbnVsbCB8fCBzdHIgaW5zdGFuY2VvZiBBcnJheSkgJiYgKHBvcyA9PT0gbnVsbCB8fCBwb3MuY29uc3RydWN0b3IgPT09IE51bWJlcikgJiYgKG1vdmVieSA9PT0gbnVsbCB8fCBtb3ZlYnkuY29uc3RydWN0b3IgPT09IE51bWJlcikgJiYgKGxlbiA9PT0gbnVsbCB8fCBsZW4uY29uc3RydWN0b3IgPT09IE51bWJlcikpIHtcclxuICAgICAgdGhpcy5tb3ZlX2RhdGVfMChzdHIsIHBvcywgbW92ZWJ5LCBsZW4pO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0aGlzLm1vdmVfZGF0ZV8xKHN0ciwgcG9zLCBtb3ZlYnksIGxlbik7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgbW92aW5nIHBhcnQgb2YgdGhlIGRhdGUgc3RyaW5nXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBwcml2YXRlIG1vdmVfZGF0ZV8wKHN0cjogc3RyaW5nW10sIHBvczogbnVtYmVyLCBtb3ZlYnk6IG51bWJlciwgbGVuOiBudW1iZXIpOiB2b2lkIHtcclxuICAgIE1lbW9yeVV0aWwuY2hhcl9tZW1tb3ZlKHN0ciwgcG9zICsgbW92ZWJ5LCBzdHIsIHBvcywgbGVuIC0gKHBvcyArIG1vdmVieSkgKyAxKTtcclxuICAgIE1lbW9yeVV0aWwuY2hhcl9tZW1zZXQoc3RyLCBwb3MsICcwJywgLyonMCcqL21vdmVieSk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgVHJhbnNsYXRlIGEgbW9udGggbmFtZSAtPiBtb250aCBpbmRleFxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJzdHJpbmdcIj50byBldmFsdWF0ZVxyXG4gIC8vLyA8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwicGljdHVyZVwiPm1hc2tcclxuICAvLy8gPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInBvc1wiPmN1cnJlbnQgcG9zaXRpb24gaW4gdGhlIHN0cmluZyB0aGUgaW50UmVmIG5vdCBleGFjdGx5IHRoZSBzYW1lIHJlZmVyZW5jZSB0byBpbnRlZ2VyICwgbGlrZSBpbiBDKyssXHJcbiAgLy8vICAgc28gdGhlIGdsb2JhbCBwb3MgTVVTVCBiZSB1cGRhdGVkIGJ5IHRoZSBwb3MudmFsdWUgYWZ0ZXIgdGhlIGZ1bmN0aW9uIHJldHVybnMuXHJcbiAgLy8vIDwvcGFyYW0+XHJcbiAgcHJpdmF0ZSBkYXRlX01NTV8yX20oc3RyOiBzdHJpbmdbXSwgbWFzazogc3RyaW5nW10sIHBvczogSW50UmVmLCBsZW46IG51bWJlciwgaXNIZWJyZXc6IGJvb2xlYW4pOiBudW1iZXIge1xyXG4gICAgbGV0IGw6IG51bWJlcjtcclxuXHJcbiAgICBpZiAoVXRpbFN0ckJ5dGVNb2RlLmlzTG9jYWxlRGVmTGFuZ0pQTigpKSB7XHJcbiAgICAgIGxldCBtYXNrUG9zOiBudW1iZXIgPSBVdGlsU3RyQnl0ZU1vZGUuY29udlBvcyhOU3RyaW5nLkZyb21DaGFycyhzdHIpLCBOU3RyaW5nLkZyb21DaGFycyhtYXNrKSwgcG9zLnZhbCwgZmFsc2UpO1xyXG4gICAgICBsID0gdGhpcy5kYXRlX21za19jbnQobWFzaywgbWFza1BvcywgPG51bWJlcj4obGVuIC0gbWFza1BvcykpO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIGwgPSB0aGlzLmRhdGVfbXNrX2NudChtYXNrLCBwb3MudmFsLCA8bnVtYmVyPihsZW4gLSBwb3MudmFsKSk7XHJcbiAgICB9XHJcbiAgICBsZXQgc3RyUG9zOiBudW1iZXIgPSBwb3MudmFsO1xyXG4gICAgcG9zLnZhbCA9IHBvcy52YWwgKyBsO1xyXG4gICAgbGVuID0gTWVtb3J5VXRpbC5tZW1fdHJpbShzdHIsIHN0clBvcywgbCk7XHJcblxyXG4gICAgaWYgKGxlbiA9PT0gMCkge1xyXG4gICAgICByZXR1cm4gMDtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICBsZXQgc3RyQjogc3RyaW5nID0gTlN0cmluZy5Gcm9tQ2hhcnMoc3RyLCBzdHJQb3MsIGxlbik7XHJcbiAgICAgIGxldCBtb250aE5hbWVzOiBzdHJpbmdbXTtcclxuICAgICAgaWYgKGlzSGVicmV3KSB7XHJcbiAgICAgICAgbW9udGhOYW1lcyA9IEhlYnJld0RhdGUuR2V0TG9jYWxNb250aHMoKTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICBsZXQgbW9udGhzOiBzdHJpbmcgPSBFdmVudHMuR2V0TWVzc2FnZVN0cmluZyhNc2dJbnRlcmZhY2UuTU9OVEhTX1BUUik7XHJcbiAgICAgICAgbW9udGhOYW1lcyA9IERhdGVVdGlsLmdldExvY2FsTW9udGhzKG1vbnRocyk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGZvciAobGV0IGk6IG51bWJlciA9IDE7IGkgPCBtb250aE5hbWVzLmxlbmd0aDsgaSA9IGkgKyAxKSB7XHJcbiAgICAgICAgaWYgKE5TdHJpbmcuQ29tcGFyZShtb250aE5hbWVzW2ldLnN1YnN0cigwLCBsZW4pLCBzdHJCLCB0cnVlKSA9PT0gMClcclxuICAgICAgICAgIHJldHVybiBpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gMDtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBHZXQgdGhlIGN1cnJldCBkYXllIHNlcGVyYXRlZCB0byB5ZWFyLCBtb250aCwgZGF5XHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBkYXRlX3N5cygpOiBEYXRlQnJlYWtQYXJhbXMge1xyXG4gICAgbGV0IGRhdGU6IERhdGVCcmVha1BhcmFtcyA9IG5ldyBEYXRlQnJlYWtQYXJhbXMoKTtcclxuICAgIGxldCBDdXJyRGF0ZTogRGF0ZVRpbWUgPSBEYXRlVGltZS5Ob3c7XHJcblxyXG4gICAgZGF0ZS55ZWFyID0gQ3VyckRhdGUuWWVhcjtcclxuICAgIGRhdGUubW9udGggPSBDdXJyRGF0ZS5Nb250aDtcclxuICAgIGRhdGUuZGF5ID0gQ3VyckRhdGUuRGF5O1xyXG5cclxuICAgIHJldHVybiBkYXRlO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHRvIGdldCBjdXJyZW50IGRhdGUgaW4gbWFnaWMgcmVwcmVzZW50YXRpb24gUXVlcnkgTWFnaWMncyBEYXRlXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHJldHVybnM+IHRoZSAnTWFnaWMnIGN1cnJlbnQgZGF0ZVxyXG4gIC8vLyA8L3JldHVybnM+XHJcbiAgZGF0ZV9tYWdpYyh1dGNEYXRlOiBib29sZWFuKTogbnVtYmVyIHtcclxuICAgIGxldCBkYXRlVGltZTogRGF0ZVRpbWU7XHJcbiAgICBpZiAodXRjRGF0ZSkge1xyXG4gICAgICBkYXRlVGltZSA9IERhdGVUaW1lLlV0Y05vdztcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICBkYXRlVGltZSA9IERhdGVUaW1lLk5vdztcclxuICAgIH1cclxuXHJcbiAgICBsZXQgeWVhcjogbnVtYmVyID0gZGF0ZVRpbWUuWWVhcjtcclxuICAgIGxldCBtb250aDogbnVtYmVyID0gZGF0ZVRpbWUuTW9udGg7XHJcbiAgICBsZXQgZGF5OiBudW1iZXIgPSBkYXRlVGltZS5EYXk7XHJcblxyXG4gICAgcmV0dXJuIHRoaXMuZGF0ZV80X2NhbGVuZGVyKHllYXIsIG1vbnRoLCBkYXksIDEsIGZhbHNlKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICB0byBnZXQgIHRoZSBzeXN0ZW0gdGltZVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxyZXR1cm5zPiB0aGUgJ01hZ2ljJyBjdXJyZW50IHRpbWVcclxuICAvLy8gPC9yZXR1cm5zPlxyXG4gIHRpbWVfbWFnaWModXRjVGltZTogYm9vbGVhbik6IG51bWJlciB7XHJcbiAgICByZXR1cm4gRGF0ZVRpbWUuR2V0VG90YWxTZWNvbmRzRnJvbU1pZG5pZ2h0KHV0Y1RpbWUsIG5ldyBEYXRlKCkpO1xyXG4gIH1cclxuXHJcbiAgbXRpbWVfbWFnaWModXRjVGltZTogYm9vbGVhbik6IG51bWJlciB7XHJcbiAgICByZXR1cm4gRGF0ZVRpbWUuR2V0VG90YWxNaWxsaVNlY29uZHNGcm9tTWlkbmlnaHQodXRjVGltZSwgbmV3IERhdGUoKSkgO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIENvbXB1dGUgTUFHSUMgZGF0ZVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgZGF0ZV80X2NhbGVuZGVyKHllYXI6IG51bWJlciwgbW9udGg6IG51bWJlciwgZGF5OiBudW1iZXIsIGRveTogbnVtYmVyLCB1c2Vkb3k6IGJvb2xlYW4pOiBudW1iZXIge1xyXG5cclxuICAgIGxldCBMZWFwWWVhcjogYm9vbGVhbiA9IHllYXIgJSA0ID09PSAwICYmICh5ZWFyICUgMTAwICE9PSAwIHx8IHllYXIgJSA0MDAgPT09IDApO1xyXG5cclxuICAgIC8vIDMuMTEuOTcgLSBIZW4gKEZpeGVkIGJ1ZyAjNzY0MjY1IGFuZCAjODE4NikgOlxyXG4gICAgLy8gSWYgdGhlIGRhdGUgaXMgMCB0aGVuIHJldHVybiAwTCAoemVybyB2YWx1ZSBpcyB2YWxpZCksIGVsc2UgaWYgdGhlIGRhdGVcclxuICAgIC8vIGlzIGlsbGVnYWwgdGhlbiByZXR1cm4gMTAwMDAwMDAwMEwgKHdyb25nIGRhdGUpLlxyXG4gICAgaWYgKHVzZWRveSkge1xyXG4gICAgICBpZiAoZG95ID09PSAwKSB7XHJcbiAgICAgICAgcmV0dXJuIDA7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGRveSA+IDM2NiB8fCAoIUxlYXBZZWFyICYmIGRveSA+IDM2NSkpIHtcclxuICAgICAgICByZXR1cm4gKDEwMDAwMDAwMDApO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgaWYgKGRheSA9PT0gMCAmJiBtb250aCA9PT0gMCAmJiB5ZWFyID09PSAwKSB7XHJcbiAgICAgICAgcmV0dXJuIDA7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGRheSA9PT0gMCB8fCBtb250aCA9PT0gMCB8fCB5ZWFyID09PSAwIHx8IG1vbnRoID4gMTIpIHtcclxuICAgICAgICByZXR1cm4gMTAwMDAwMDAwMDtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgeWVhciA9IHllYXIgLSAxO1xyXG4gICAgbGV0IG51bTogbnVtYmVyID0gTWF0aC5mbG9vcih5ZWFyIC8gNDAwKTtcclxuICAgIHllYXIgPSB5ZWFyIC0gbnVtICogNDAwO1xyXG4gICAgbGV0IG51bTI6IG51bWJlciA9IE1hdGguZmxvb3IoeWVhciAvIDEwMCk7XHJcbiAgICB5ZWFyID0geWVhciAtIG51bTIgKiAxMDA7XHJcbiAgICBsZXQgbnVtMzogbnVtYmVyID0gTWF0aC5mbG9vcih5ZWFyIC8gNCk7XHJcbiAgICB5ZWFyID0geWVhciAtIG51bTMgKiA0O1xyXG5cclxuICAgIGlmICghdXNlZG95KSB7XHJcbiAgICAgIGxldCBudW00OiBudW1iZXIgPSBQSUNJbnRlcmZhY2UuZGF0ZV9kYXlfdGFiW21vbnRoIC0gMV07XHJcbiAgICAgIGxldCBudW01OiBudW1iZXIgPSBQSUNJbnRlcmZhY2UuZGF0ZV9kYXlfdGFiW21vbnRoXTtcclxuXHJcbiAgICAgIGlmIChMZWFwWWVhcikge1xyXG4gICAgICAgIGlmIChtb250aCA+IDEpIHtcclxuICAgICAgICAgIG51bTUgPSBudW01ICsgMTtcclxuICAgICAgICAgIGlmIChtb250aCA+IDIpIHtcclxuICAgICAgICAgICAgbnVtNCA9IG51bTQgKyAxO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKGRheSA+IG51bTUgLSBudW00KSB7XHJcbiAgICAgICAgcmV0dXJuIDEwMDAwMDAwMDA7XHJcbiAgICAgIH1cclxuICAgICAgZG95ID0gbnVtNCArIGRheTtcclxuICAgIH1cclxuICAgIHJldHVybiBudW0gKiAxNDYwOTcgKyBudW0yICogMzY1MjQgKyBudW0zICogMTQ2MSArIHllYXIgKiAzNjUgKyBkb3k7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgVHJhbnNsYXRlcyBhIHN0cmluZyB0aW1lIHRvIG1hZ2ljIG51bWJlclxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJkaXNwVmFsdWVcIj4gICBBIHN0cmluZyB2YWx1ZTwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJwaWNTdHJcIj4gICAgICBUaGUgcGljdHVyZSB0byB1c2U8L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz4gdGhlIG1hZ2ljIG51bWJlcjwvcmV0dXJucz5cclxuICBmcm9tTmF0aXZlVGltZVRvTWdUaW1lKGRpc3BWYWx1ZTogRGF0ZSk6IHN0cmluZyB7XHJcbiAgICBsZXQgbWdOdW06IE5VTV9UWVBFID0gbmV3IE5VTV9UWVBFKCk7XHJcbiAgICBsZXQgbnVtVmFsOiBudW1iZXIgPSB0aGlzLmZyb21OYXRpdmVUaW1lVG9NZ1RpbWVOdW1iZXIoZGlzcFZhbHVlKTtcclxuICAgIG1nTnVtLk5VTV80X0xPTkcobnVtVmFsKTtcclxuICAgIHJldHVybiBtZ051bS50b1hNTHJlY29yZCgpO1xyXG4gIH1cclxuXHJcbiAgZnJvbU5hdGl2ZVRpbWVUb01nVGltZU51bWJlcihkaXNwVmFsdWU6IERhdGUpOiBudW1iZXIge1xyXG4gICAgbGV0IG51bVZhbDogbnVtYmVyID0gdGhpcy50aW1lXzJfaW50KGRpc3BWYWx1ZS5nZXRIb3VycygpLCBkaXNwVmFsdWUuZ2V0TWludXRlcygpLCBkaXNwVmFsdWUuZ2V0U2Vjb25kcygpKTtcclxuICAgIHJldHVybiBudW1WYWw7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgQ29udmVydCBBbHBoYSBpbnRvIGEgVGltZSBhY2NvcmRpbmcgdG8gYSBnaXZlbiBwaWN0dXJlXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBhXzJfdGltZShBc2NpaTogc3RyaW5nLCBwaWM6IFBJQywgbWlsbGlTZWNvbmRzOiBib29sZWFuKTogbnVtYmVyO1xyXG4gIGFfMl90aW1lKEFzY2lpOiBzdHJpbmcsIEFzY2lpTDogbnVtYmVyLCBtYXNrOiBzdHJpbmdbXSwgbWlsbGlTZWNvbmRzOiBib29sZWFuKTogbnVtYmVyO1xyXG4gIGFfMl90aW1lKEFzY2lpOiBhbnksIHBpY09yQXNjaWlMOiBhbnksIG1pbGxpU2Vjb25kc09yTWFzazogYW55LCBtaWxsaVNlY29uZHM/OiBib29sZWFuKTogbnVtYmVyIHtcclxuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAzKVxyXG4gICAgICByZXR1cm4gdGhpcy5hXzJfdGltZV8wKEFzY2lpLCBwaWNPckFzY2lpTCwgbWlsbGlTZWNvbmRzT3JNYXNrKTtcclxuXHJcbiAgICByZXR1cm4gdGhpcy5hXzJfdGltZV8xKEFzY2lpLCBwaWNPckFzY2lpTCwgbWlsbGlTZWNvbmRzT3JNYXNrLCBtaWxsaVNlY29uZHMpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIENvbnZlcnQgQWxwaGEgaW50byBhIFRpbWUgYWNjb3JkaW5nIHRvIGEgZ2l2ZW4gcGljdHVyZVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgcHJpdmF0ZSBhXzJfdGltZV8wKEFzY2lpOiBzdHJpbmcsIHBpYzogUElDLCBtaWxsaVNlY29uZHM6IGJvb2xlYW4pOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIHRoaXMuYV8yX3RpbWUoQXNjaWksIEFzY2lpLmxlbmd0aCwgTlN0cmluZy5Ub0NoYXJBcnJheShwaWMuZ2V0TWFzaygpKSwgbWlsbGlTZWNvbmRzKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBDb252ZXJ0IEFscGhhIGludG8gYSBUaW1lIGFjY29yZGluZyB0byBhIGdpdmVuIHBpY3R1cmVcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIHByaXZhdGUgYV8yX3RpbWVfMShBc2NpaTogc3RyaW5nLCBBc2NpaUw6IG51bWJlciwgbWFzazogc3RyaW5nW10sIG1pbGxpU2Vjb25kczogYm9vbGVhbik6IG51bWJlciB7XHJcbiAgICBsZXQgbWdOdW06IE5VTV9UWVBFID0gbmV3IE5VTV9UWVBFKCk7XHJcbiAgICBsZXQgSTogbnVtYmVyID0gMDtcclxuICAgIGxldCBsZW46IG51bWJlciA9IG1hc2subGVuZ3RoOyAvLyBMZW5ndGggb2YgbWFzayBvciBzdHJpbmcgdG8gc2NhblxyXG5cclxuICAgIC8vIEluaXRpYWxpemUgY291bnRlcnMgYW5kIGZsYWdzXHJcbiAgICBpZiAobGVuID4gQXNjaWlMKSB7XHJcbiAgICAgIGxlbiA9IEFzY2lpTDtcclxuICAgIH1cclxuICAgIGxldCBhbXBtOiBudW1iZXIgPSAwOyAvLyBBTS9QTSBpbmRpY2F0b3JcclxuICAgIGxldCBob3VyOiBudW1iZXIgPSAwO1xyXG4gICAgbGV0IG1pbnV0ZTogbnVtYmVyID0gMDtcclxuICAgIGxldCBzZWNvbmQ6IG51bWJlciA9IDA7XHJcbiAgICBsZXQgbWlsbGlzZWNvbmQ6IG51bWJlciA9IDA7XHJcblxyXG4gICAgd2hpbGUgKEkgPCBsZW4pIHtcclxuICAgICAgbGV0IG1hc2tMZW5ndGg6IG51bWJlcjtcclxuICAgICAgbGV0IG1heE1hc2tMZW46IG51bWJlcjtcclxuXHJcbiAgICAgIC8vIFRvIGdldCB0aGUgbWF4aW11bSBwb3NzaWJsZSBsZW5ndGggb2YgdGhlIGNvbnN0YW50cyBpbiB0aGUgbWFza1xyXG4gICAgICBzd2l0Y2ggKG1hc2tbSV0uY2hhckNvZGVBdCgwKSkge1xyXG4gICAgICAgIGNhc2UgKFBJQ0ludGVyZmFjZS5QSUNfSEgpOlxyXG4gICAgICAgIGNhc2UgKFBJQ0ludGVyZmFjZS5QSUNfTU1UKTpcclxuICAgICAgICBjYXNlIChQSUNJbnRlcmZhY2UuUElDX1NTKTpcclxuICAgICAgICBjYXNlIChQSUNJbnRlcmZhY2UuUElDX1BNKTpcclxuICAgICAgICAgIG1heE1hc2tMZW4gPSAyO1xyXG4gICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIGNhc2UgKFBJQ0ludGVyZmFjZS5QSUNfTVMpOlxyXG4gICAgICAgICAgbWF4TWFza0xlbiA9IDM7XHJcbiAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgIG1heE1hc2tMZW4gPSAxO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8qIFRvIGdldCB0aGUgbWluaW11bSBvZiBtYXhNYXNrTGVuICYgbnVtYmVyIG9mIGNoYXJhY3RlcnMgcmVtYWluZWQgaW4gc3RyaW5nXHJcbiAgICAgIGJlY2F1c2UgaWYgdGhlIEFzY2lpIGlzIHNob3J0ZXIoaGFzIGxlc3MgY2hhcmFjdGVycyl0aGVuIGNyZWF0ZSBTdHJpbmcgb25seVxyXG4gICAgICBvZiB0aGF0IG5vLiBvZiBjaGFyYWN0ZXJzIChtYXNrTGVuZ3RoKSwgbm90IG9mIG1heE1hc2tMZW5ndGggKi9cclxuICAgICAgbWFza0xlbmd0aCA9IE1hdGgubWluKG1heE1hc2tMZW4sIGxlbiAtIEkpO1xyXG5cclxuICAgICAgc3dpdGNoIChtYXNrW0ldLmNoYXJDb2RlQXQoMCkpIHtcclxuICAgICAgICBjYXNlIChQSUNJbnRlcmZhY2UuUElDX0hIKToge1xyXG4gICAgICAgICAgaG91ciA9IG1nTnVtLmFfMl9sb25nKEFzY2lpLnN1YnN0cihJLCBtYXNrTGVuZ3RoKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIGNhc2UgKFBJQ0ludGVyZmFjZS5QSUNfTU1UKToge1xyXG4gICAgICAgICAgbWludXRlID0gbWdOdW0uYV8yX2xvbmcoQXNjaWkuc3Vic3RyKEksIG1hc2tMZW5ndGgpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgY2FzZSAoUElDSW50ZXJmYWNlLlBJQ19TUyk6IHtcclxuICAgICAgICAgIHNlY29uZCA9IG1nTnVtLmFfMl9sb25nKEFzY2lpLnN1YnN0cihJLCBtYXNrTGVuZ3RoKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIGNhc2UgKFBJQ0ludGVyZmFjZS5QSUNfTVMpOiB7XHJcbiAgICAgICAgICBtaWxsaXNlY29uZCA9IG1nTnVtLmFfMl9sb25nKEFzY2lpLnN1YnN0cihJLCBtYXNrTGVuZ3RoKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIGNhc2UgKFBJQ0ludGVyZmFjZS5QSUNfUE0pOlxyXG4gICAgICAgICAgYW1wbSA9IDA7XHJcbiAgICAgICAgICBsZXQgYzA6IHN0cmluZyA9IEFzY2lpW0ldO1xyXG4gICAgICAgICAgbGV0IGMxOiBzdHJpbmc7XHJcbiAgICAgICAgICBjMCA9IGMwLnRvVXBwZXJDYXNlKCk7XHJcbiAgICAgICAgICBpZiAoSSArIDEgPCBsZW4pIHtcclxuICAgICAgICAgICAgYzEgPSBBc2NpaVtJICsgMV07XHJcbiAgICAgICAgICAgIGMxID0gYzEudG9VcHBlckNhc2UoKTtcclxuXHJcbiAgICAgICAgICAgIGlmIChjMSA9PT0gJ00nKSB7XHJcbiAgICAgICAgICAgICAgaWYgKGMwID09PSAnQScpXHJcbiAgICAgICAgICAgICAgICBhbXBtID0gLTE7XHJcbiAgICAgICAgICAgICAgaWYgKGMwID09PSAnUCcpXHJcbiAgICAgICAgICAgICAgICBhbXBtID0gMTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgICBJICs9IG1hc2tMZW5ndGg7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gQ2hlY2sgdmFsaWRpdHkgb2YgbWludXRlcyBhbmQgc2Vjb25kc1xyXG4gICAgaWYgKHNlY29uZCA+IDU5IHx8IG1pbnV0ZSA+IDU5KVxyXG4gICAgICByZXR1cm4gKDApO1xyXG5cclxuICAgIC8vIENvbnZlcnQgaG91ciB0byBQTSBpZiBzcGVjaWZpZWQgYXMgQU1cclxuICAgIGlmIChhbXBtICE9PSAwKVxyXG4gICAgICBpZiAoYW1wbSA9PT0gLTEpXHJcbiAgICAgIC8vIEFNXHJcbiAgICAgIHtcclxuICAgICAgICBpZiAoaG91ciA9PT0gMTIpXHJcbiAgICAgICAgICBob3VyID0gMDtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIGlmIChob3VyIDwgMTIpXHJcbiAgICAgIC8vIFBNXHJcbiAgICAgICAgaG91ciArPSAxMjtcclxuICAgIGlmIChtaWxsaVNlY29uZHMpXHJcbiAgICAgIHJldHVybiB0aGlzLnRpbWVfMl9pbnQoaG91ciwgbWludXRlLCBzZWNvbmQpICogMTAwMCArIG1pbGxpc2Vjb25kO1xyXG4gICAgZWxzZVxyXG4gICAgICByZXR1cm4gdGhpcy50aW1lXzJfaW50KGhvdXIsIG1pbnV0ZSwgc2Vjb25kKTtcclxuICB9XHJcblxyXG4gIHRpbWVfMl9pbnQoaG91cjogbnVtYmVyLCBtaW51dGU6IG51bWJlciwgc2Vjb25kOiBudW1iZXIpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIGhvdXIgKiAzNjAwICsgbWludXRlICogNjAgKyBzZWNvbmQ7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgQ29udmVydCBcIjBcIi9cIjFcIiB0byBmYWxzZS90cnVlXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImJvb2xTdHJcIj4gIFwiMFwiL1wiMVwiXHJcbiAgLy8vIDwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPiB0cnVlIGlmIFwiMVwiIG9yIGZhbHNlIGlmIG90aGVyc1xyXG4gIC8vLyA8L3JldHVybnM+XHJcbiAgc3RhdGljIHRvQm9vbGVhbihib29sU3RyOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgIHJldHVybiBib29sU3RyICE9PSBudWxsICYmIGJvb2xTdHIgPT09IFwiMVwiO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIFN0cmluZyB0byBEYXRlIGZ1bmN0aW9uXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBhXzJfZGF0ZShzdHI6IHN0cmluZywgRm9ybWF0OiBzdHJpbmcsIGNvbXBJZHg6IG51bWJlcik6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy5hXzJfZGF0ZV9kYXRlbW9kZShzdHIsIEZvcm1hdCwgY29tcElkeCk7XHJcbiAgfVxyXG5cclxuICBhXzJfZGF0ZV9waWMoc3RyOiBzdHJpbmcsIHBpYzogUElDLCBtYXNrOiBzdHJpbmcsIGNvbXBJZHg6IG51bWJlcik6IG51bWJlciB7XHJcbiAgICBpZiAoc3RyID09PSBudWxsKSB7XHJcbiAgICAgIHN0ciA9IFwiXCI7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpcy5hXzJfZGF0ZV9waWNfZGF0ZW1vZGUoTlN0cmluZy5Ub0NoYXJBcnJheShzdHIpLCBzdHIubGVuZ3RoLCBwaWMsIE5TdHJpbmcuVG9DaGFyQXJyYXkobWFzayksIGNvbXBJZHgpO1xyXG4gIH1cclxuXHJcbiAgdG9fYShvdXRWYWw6IHN0cmluZywgb3V0X2xlbjogbnVtYmVyLCBkYXRlOiBudW1iZXIsIEZvcm1hdDogc3RyaW5nLCBjb21wSWR4OiBudW1iZXIpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMudG9fYV9kYXRlbW9kZShvdXRWYWwsIG91dF9sZW4sIGRhdGUsIEZvcm1hdCwgZmFsc2UsIGNvbXBJZHgpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIENvbnZlcnQgc3RyaW5nIC0+IGRhdGUgdXNpbmcgYSBmb3JtYXQgc3RyaW5nXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBwcml2YXRlIGFfMl9kYXRlX2RhdGVtb2RlKHN0cjogc3RyaW5nLCBGb3JtYXQ6IHN0cmluZywgY29tcElkeDogbnVtYmVyKTogbnVtYmVyIHtcclxuICAgIGxldCBwSUM6IFBJQyA9IG5ldyBQSUMoRm9ybWF0LCBTdG9yYWdlQXR0cmlidXRlLkRBVEUsIGNvbXBJZHgpO1xyXG4gICAgaWYgKHN0ciA9PT0gbnVsbCkge1xyXG4gICAgICBzdHIgPSBcIlwiO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRoaXMuYV8yX2RhdGVfcGljX2RhdGVtb2RlKE5TdHJpbmcuVG9DaGFyQXJyYXkoc3RyKSwgc3RyLmxlbmd0aCwgcElDLCBOU3RyaW5nLlRvQ2hhckFycmF5KHBJQy5nZXRNYXNrKCkpLCBjb21wSWR4KTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBTdHJpbmcgdG8gYSBkYXRlbW9kZVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgcHJpdmF0ZSB0b19hX2RhdGVtb2RlKG91dFZhbDogc3RyaW5nLCBvdXRfbGVuOiBudW1iZXIsIGRhdGU6IG51bWJlciwgRm9ybWF0OiBzdHJpbmcsIGlnbm9yZV9kdF9mbXQ6IGJvb2xlYW4sIGNvbXBJZHg6IG51bWJlcik6IHN0cmluZyB7XHJcblxyXG4gICAgLy8gUGFyc2UgdGhlIHBpY3R1cmVcclxuICAgIGxldCBwaWM6IFBJQyA9IG5ldyBQSUMoRm9ybWF0LCBTdG9yYWdlQXR0cmlidXRlLkRBVEUsIGNvbXBJZHgpO1xyXG5cclxuICAgIC8vIENvbnZlcnQgdGhlICBkYXRlIC0+IHN0cmluZ1xyXG4gICAgaWYgKG91dFZhbCA9PT0gbnVsbCkge1xyXG4gICAgICBvdXRWYWwgPSBwaWMuZ2V0TWFzaygpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRoaXMudG9fYV9waWNfZGF0ZW1vZGUob3V0VmFsLCBvdXRfbGVuLCBkYXRlLCBwaWMsIHRydWUsIGlnbm9yZV9kdF9mbXQsIGNvbXBJZHgpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIERlY29kZSBkaWdpdHMgZnJvbSBhIGRhdGUgc3RyaW5nXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBwcml2YXRlIGRhdGVfYV8yX2lfMShzOiBzdHJpbmcsIGxlbjogbnVtYmVyLCBwb3M6IG51bWJlcik6IG51bWJlciB7XHJcblxyXG4gICAgLy8gZG9uJ3QgZm9yZ2V0IHRvIGluY2x1ZGUgJ3Bvcys9bGVuJyBhZnRlciB0aGUgdXNpbmcgb2YgdGhlIGZ1bmN0aW9uXHJcbiAgICBsZXQgbWdOdW06IE5VTV9UWVBFID0gbmV3IE5VTV9UWVBFKCk7XHJcbiAgICBsZXQgc3RyOiBzdHJpbmc7XHJcblxyXG4gICAgc3RyID0gcy5zdWJzdHIocG9zLCBsZW4pO1xyXG4gICAgcmV0dXJuIG1nTnVtLmFfMl9sb25nKHN0cik7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIG1vdmVfZGF0ZV8xKHN0cjogc3RyaW5nLCBwb3M6IG51bWJlciwgbW92ZWJ5OiBudW1iZXIsIGxlbjogbnVtYmVyKTogc3RyaW5nIHtcclxuICAgIHN0ciA9IFN0clV0aWwubWVtbW92ZShzdHIsIHBvcyArIG1vdmVieSwgc3RyLCBwb3MsIGxlbiAtIHBvcyk7XHJcblxyXG4gICAgc3RyID0gU3RyVXRpbC5tZW1zZXQoc3RyLCBwb3MsICcwJywgbW92ZWJ5KTtcclxuICAgIHJldHVybiBzdHI7XHJcbiAgfVxyXG5cclxuICB0aW1lXzJfYShBc2NpaTogc3RyaW5nLCBBc2NpaUw6IG51bWJlciwgdGltZTogbnVtYmVyLCBGb3JtYXQ6IHN0cmluZywgY29tcElkeDogbnVtYmVyLCBtaWxsaVNlY29uZHM6IGJvb2xlYW4pOiBzdHJpbmcge1xyXG5cclxuICAgIGlmIChTdHJVdGlsLnJ0cmltKEZvcm1hdCkubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgIEZvcm1hdCA9IFwiSEg6TU06U1NcIjtcclxuICAgIH1cclxuICAgIGxldCBwaWM6IFBJQyA9IG5ldyBQSUMoRm9ybWF0LCBTdG9yYWdlQXR0cmlidXRlLlRJTUUsIGNvbXBJZHgpO1xyXG4gICAgaWYgKEFzY2lpID09PSBudWxsKSB7XHJcbiAgICAgIEFzY2lpID0gcGljLmdldE1hc2soKTtcclxuICAgIH1cclxuICAgIHJldHVybiB0aGlzLnRpbWVfMl9hX3BpYyhBc2NpaSwgQXNjaWlMLCB0aW1lLCBwaWMsIGZhbHNlLCBtaWxsaVNlY29uZHMpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIFRyYW5zbGF0ZXMgYSBzdHJpbmcgdG8gbWFnaWMgbG9naWNhbFxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJkaXNwVmFsdWVcIj4gICBBIHN0cmluZyB2YWx1ZVxyXG4gIC8vLyA8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwicGljXCI+ICAgICAgICAgVGhlIHBpY3R1cmUgdG8gdXNlXHJcbiAgLy8vIDwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJyYW5nZVN0clwiPiAgICBUaGUgcmFuZ2VcclxuICAvLy8gPC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+IHRoZSBsb2dpY2FsIHZhbHVlXHJcbiAgLy8vIDwvcmV0dXJucz5cclxuICB0b0xvZ2ljYWwoZGlzcFZhbHVlOiBzdHJpbmcsIHBpYzogUElDLCByYW5nZVN0cjogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIGRpc3BWYWx1ZSA9IGRpc3BWYWx1ZS50cmltKCk7XHJcbiAgICBpZiAoZGlzcFZhbHVlID09PSBudWxsIHx8IGRpc3BWYWx1ZS5sZW5ndGggPT09IDApIHtcclxuICAgICAgZGlzcFZhbHVlID0gXCJGYWxzZVwiO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRoaXMuZGlzcF8yX2xvZ2ljYWwoZGlzcFZhbHVlLCBwaWMuZ2V0TWFzaygpLCByYW5nZVN0cik7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgdHJhbnNsYXRlIHRoZSBkaXNwbGF5ZWQgdmFsdWUgdG8gYSBtYWdpYyBsb2dpY2FsIHZhbHVlXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImRpc3BWYWx1ZVwiPnRoZSBkaXNwbGF5ZWQgdmFsdWUgPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcIm1hc2tcIj50aGUgbWFzayBvZiB0aGUgZGlzcGxheWVkIHZhbHVlIDwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJyYW5nZVN0clwiPnRoZSByYW5nZSBzdHJpbmcgPC9wYXJhbT5cclxuICBwcml2YXRlIGRpc3BfMl9sb2dpY2FsKGRpc3BWYWx1ZTogc3RyaW5nLCBtYXNrOiBzdHJpbmcsIHJhbmdlU3RyOiBzdHJpbmcpOiBzdHJpbmcge1xyXG5cclxuICAgIGxldCBzdHJpcHBlZFZhbHVlOiBTdHJpbmdCdWlsZGVyID0gbmV3IFN0cmluZ0J1aWxkZXIoZGlzcFZhbHVlLmxlbmd0aCk7XHJcblxyXG4gICAgcmFuZ2VTdHIgPSB0aGlzLndpbl9ybmdfYm9vbChyYW5nZVN0cik7XHJcbiAgICByYW5nZVN0ciA9IFN0clV0aWwubWFrZVByaW50YWJsZVRva2VucyhyYW5nZVN0ciwgU0VRXzJfSFRNTCk7XHJcbiAgICBsZXQgaTogbnVtYmVyID0gcmFuZ2VTdHIuaW5kZXhPZignLCcpO1xyXG4gICAgbGV0IHRydWVTdHI6IHN0cmluZyA9IHJhbmdlU3RyLnN1YnN0cigwLCBpKTtcclxuICAgIHRydWVTdHIgPSBTdHJVdGlsLm1ha2VQcmludGFibGVUb2tlbnModHJ1ZVN0ciwgSFRNTF8yX1NUUik7XHJcbiAgICBpID0gMDtcclxuXHJcbiAgICBmb3IgKGkgPSAwOyBpIDwgZGlzcFZhbHVlLmxlbmd0aCAmJiBpIDwgbWFzay5sZW5ndGg7IGkrKykge1xyXG4gICAgICBpZiAobWFzay5jaGFyQ29kZUF0KGkpID09PSBQSUNJbnRlcmZhY2UuUElDX1gpIHtcclxuICAgICAgICBzdHJpcHBlZFZhbHVlLkFwcGVuZChkaXNwVmFsdWUuY2hhckF0KGkpKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgbGV0IHZhbDogc3RyaW5nID0gc3RyaXBwZWRWYWx1ZS5Ub1N0cmluZygpO1xyXG4gICAgaWYgKHRydWVTdHIubGVuZ3RoIDwgdmFsLmxlbmd0aCkge1xyXG4gICAgICB2YWwgPSB2YWwuc3Vic3RyKDAsIHRydWVTdHIubGVuZ3RoKTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICBpZiAodmFsLmxlbmd0aCA8IHRydWVTdHIubGVuZ3RoKSB7XHJcbiAgICAgICAgdHJ1ZVN0ciA9IHRydWVTdHIuc3Vic3RyKDAsIHZhbC5sZW5ndGgpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gKHZhbC50b1VwcGVyQ2FzZSgpID09PSB0cnVlU3RyLnRvVXBwZXJDYXNlKCkpID8gXCIxXCIgOiBcIjBcIjtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBjb252ZXJ0aW5nIHRoZSBkaXNwbGF5ZWQgdmFsdWUgb2YgYSBzdHJpbmcgdG8gaW50ZXJuYWxcclxuICAvLy8gICByZXByZXNlbnRhdGlvbiBtdXN0IHJlbW92ZSB0aGUgbWFza2luZyBjaGFyYWN0ZXJzIGZyb20gaXRcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIHByaXZhdGUgdG9BbHBoYShkaXNwVmFsdWU6IHN0cmluZywgcGljOiBQSUMpOiBzdHJpbmcge1xyXG5cclxuICAgIGxldCBwaWN0dXJlOiBzdHJpbmcgPSBwaWMuZ2V0TWFzaygpO1xyXG4gICAgbGV0IGJ1ZmZlcjogU3RyaW5nQnVpbGRlciA9IG5ldyBTdHJpbmdCdWlsZGVyKHBpYy5nZXRNYXNrU2l6ZSgpKTtcclxuICAgIGxldCBJc0FscGhhREJDUzogYm9vbGVhbiA9IFV0aWxTdHJCeXRlTW9kZS5pc0xvY2FsZURlZkxhbmdEQkNTKCkgJiYgcGljLmlzQXR0ckFscGhhKCk7XHJcbiAgICBsZXQgY3VyclBpY3R1cmU6IG51bWJlcjtcclxuICAgIGxldCBpOiBudW1iZXIgPSBjdXJyUGljdHVyZSA9IDA7XHJcblxyXG4gICAgZm9yIChjdXJyUGljdHVyZSA9IGkgPSAwOyBpIDwgZGlzcFZhbHVlLmxlbmd0aCAmJiBjdXJyUGljdHVyZSA8IHBpY3R1cmUubGVuZ3RoOyBpKyssIGN1cnJQaWN0dXJlKyspIHtcclxuICAgICAgaWYgKERpc3BsYXlDb252ZXJ0b3IuaXNBbHBoYVBvc2l0aW9uYWxEaXJlY3RpdmUocGljdHVyZS5jaGFyQXQoY3VyclBpY3R1cmUpKSkge1xyXG4gICAgICAgIGJ1ZmZlci5BcHBlbmQoZGlzcFZhbHVlLmNoYXJBdChpKSk7XHJcblxyXG4gICAgICAgIGlmIChJc0FscGhhREJDUykge1xyXG4gICAgICAgICAgLy8gYSBEQkNTIGNoYXJhY3RlciBpbiBcImRpc3BWYWx1ZVwiIGNvbnN1bWVzIHR3byBjaGFyYWN0ZXJzIGluIFwicGljdHVyZVwiXHJcbiAgICAgICAgICBsZXQgc3RyRHNwVmFsT25lQ2hhcjogc3RyaW5nID0gZGlzcFZhbHVlLnN1YnN0cihpLCAxKTtcclxuICAgICAgICAgIGlmIChVdGlsU3RyQnl0ZU1vZGUubGVuQihzdHJEc3BWYWxPbmVDaGFyKSA9PT0gMikge1xyXG4gICAgICAgICAgICBjdXJyUGljdHVyZSA9IGN1cnJQaWN0dXJlICsgMTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBidWZmZXIuVG9TdHJpbmcoKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5pcyBjaGVja2VkIGNoYXIgQWxwaGEgUG9zaXRpb25hbCBEaXJlY3RpdmU8L3N1bW1hcnk+XHJcbiAgc3RhdGljIGlzQWxwaGFQb3NpdGlvbmFsRGlyZWN0aXZlKHRvQ2hlY2s6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgbGV0IGFzY2lpOiBudW1iZXIgPSB0b0NoZWNrLmNoYXJDb2RlQXQoMCk7XHJcbiAgICByZXR1cm4gKGFzY2lpID09PSBQSUNJbnRlcmZhY2UuUElDX1ggfHwgYXNjaWkgPT09IFBJQ0ludGVyZmFjZS5QSUNfVSB8fCBhc2NpaSA9PT0gUElDSW50ZXJmYWNlLlBJQ19MIHx8XHJcbiAgICAgIGFzY2lpID09PSBQSUNJbnRlcmZhY2UuUElDX04gfHwgYXNjaWkgPT09IFBJQ0ludGVyZmFjZS5QSUNfSiB8fCBhc2NpaSA9PT0gUElDSW50ZXJmYWNlLlBJQ19HIHx8IGFzY2lpID09PSBQSUNJbnRlcmZhY2UuUElDX1MgfHwgYXNjaWkgPT09IFBJQ0ludGVyZmFjZS5QSUNfVCk7XHJcblxyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIENvbXBhcmF0aXZlIG5ld1ZhbHVlIHdpdGggcG9zc2libGUgUmFuZ2UgaW4gQ29udGludW91c1JhbmdlVmFsdWVzL2Rpc2NyZXRlUmFuZ2VWYWx1ZXNcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cmV0dXJucz4gbmV3VmFsdWUgaWYgaXQgcG9zc2libGUsIG9sZCB2YWx1ZSBvd2VydmlzZVxyXG4gIC8vLyA8L3JldHVybnM+XHJcbiAgcHJpdmF0ZSBmaWxsQWxwaGFCeVJhbmdlKENvbnRpbnVvdXNSYW5nZVZhbHVlczogTGlzdDxzdHJpbmc+LCBkaXNjcmV0ZVJhbmdlVmFsdWVzOiBMaXN0PHN0cmluZz4sIG5ld1ZhbHVlOiBzdHJpbmcpOiBzdHJpbmcge1xyXG5cclxuICAgIGxldCB0bXBCdWZmZXI6IHN0cmluZyA9IHRoaXMuZmlsbEFscGhhQnlEaXNjcmV0ZVJhbmdlVmFsdWVzKGRpc2NyZXRlUmFuZ2VWYWx1ZXMsIG5ld1ZhbHVlKTtcclxuICAgIGlmICh0bXBCdWZmZXIgIT09IG51bGwpIHtcclxuICAgICAgcmV0dXJuIHRtcEJ1ZmZlcjtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICB0bXBCdWZmZXIgPSB0aGlzLmZpbGxBbHBoYUJ5Q29udGludW91c1JhbmdlVmFsdWVzKENvbnRpbnVvdXNSYW5nZVZhbHVlcywgbmV3VmFsdWUpO1xyXG4gICAgICBpZiAodG1wQnVmZmVyICE9PSBudWxsKSB7XHJcbiAgICAgICAgcmV0dXJuIHRtcEJ1ZmZlcjtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICBpZiAoZGlzY3JldGVSYW5nZVZhbHVlcyAhPT0gbnVsbCkge1xyXG4gICAgICAgICAgdG1wQnVmZmVyID0gdGhpcy5jb21wbGV0ZUFscGhhQnlSYW5nZShkaXNjcmV0ZVJhbmdlVmFsdWVzLCBuZXdWYWx1ZSk7XHJcbiAgICAgICAgICBpZiAodG1wQnVmZmVyICE9PSBudWxsKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0bXBCdWZmZXI7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICAvLyB1bnBvc3NpYmxlIHRvIGZpbmQgaXQgaW4gdGhlIHJhbmdlIHJldHVybiBub3QgY2hhbmdlZCBvbGR2YWx1ZVxyXG4gICAgcmV0dXJuIG5ld1ZhbHVlO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIGZpbGwgQWxwaGEgc3RyaW5nIGJ5IGRpc2NyZXRlIHJhbmdlXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImRpc2NyZXRlUmFuZ2VWYWx1ZXNcIj52ZWN0b3Igb2YgZGlzY3JldGUgcmFuZ2UgdmFsdWVzXHJcbiAgLy8vIDwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJuZXdWYWx1ZVwiPnZhbHVlLCB0cnkgZm91bmQgaW4gdGhlIHZlY3RvciBvZiBkaXNjcmV0ZSByYW5nZXNcclxuICAvLy8gPC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+IGZvdW5kIHZhbHVlIG9yIG51bGwobm90IGZvdW5kKVxyXG4gIC8vLyA8L3JldHVybnM+XHJcbiAgZmlsbEFscGhhQnlEaXNjcmV0ZVJhbmdlVmFsdWVzKGRpc2NyZXRlUmFuZ2VWYWx1ZXM6IExpc3Q8c3RyaW5nPiwgbmV3VmFsdWU6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBpZiAoZGlzY3JldGVSYW5nZVZhbHVlcyAhPT0gbnVsbCkge1xyXG4gICAgICBmb3IgKGxldCBpOiBudW1iZXIgPSAwOyBpIDwgZGlzY3JldGVSYW5nZVZhbHVlcy5sZW5ndGg7IGkgPSBpICsgMSkge1xyXG4gICAgICAgIGxldCBkaXNjcmV0ZVZhbHVlOiBzdHJpbmcgPSBkaXNjcmV0ZVJhbmdlVmFsdWVzLmdldF9JdGVtKGkpO1xyXG4gICAgICAgIGxldCB0cnVuY2F0ZWRWYWx1ZTogc3RyaW5nID0gZGlzY3JldGVWYWx1ZS5zdWJzdHIoMCwgTWF0aC5taW4obmV3VmFsdWUubGVuZ3RoLCBkaXNjcmV0ZVZhbHVlLmxlbmd0aCkpO1xyXG4gICAgICAgIGlmIChuZXdWYWx1ZS50b1VwcGVyQ2FzZSgpID09PSB0cnVuY2F0ZWRWYWx1ZS50b1VwcGVyQ2FzZSgpKSB7XHJcbiAgICAgICAgICByZXR1cm4gZGlzY3JldGVWYWx1ZTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBudWxsO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIGZpbGwgQWxwaGEgc3RyaW5nIGJ5IGNvbnRpbnVvdXMgcmFuZ2VcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiQ29udGludW91c1JhbmdlVmFsdWVzXCI+dmVjdG9yIG9mIGNvbnRpbnVvdXMgcmFuZ2UgdmFsdWVzXHJcbiAgLy8vIDwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJuZXdWYWx1ZVwiPnZhbHVlLCB0cnkgZm91bmQgaW4gdGhlIHZlY3RvciBvZiBjb250aW51b3VzIHJhbmdlc1xyXG4gIC8vLyA8L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz4gZm91bmQgdmFsdWUgb3IgbnVsbChub3QgZm91bmQpXHJcbiAgLy8vIDwvcmV0dXJucz5cclxuICBmaWxsQWxwaGFCeUNvbnRpbnVvdXNSYW5nZVZhbHVlcyhDb250aW51b3VzUmFuZ2VWYWx1ZXM6IExpc3Q8c3RyaW5nPiwgbmV3VmFsdWU6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBuZXdWYWx1ZSA9IFN0clV0aWwucnRyaW0obmV3VmFsdWUpO1xyXG5cclxuXHJcbiAgICBpZiAoQ29udGludW91c1JhbmdlVmFsdWVzICE9PSBudWxsKSB7XHJcbiAgICAgIGZvciAobGV0IGk6IG51bWJlciA9IDA7IGkgPCBDb250aW51b3VzUmFuZ2VWYWx1ZXMubGVuZ3RoOyBpID0gaSArIDEpIHtcclxuICAgICAgICBsZXQgZnJvbTogc3RyaW5nID0gQ29udGludW91c1JhbmdlVmFsdWVzLmdldF9JdGVtKGkpO1xyXG4gICAgICAgIGxldCB0bzogc3RyaW5nID0gQ29udGludW91c1JhbmdlVmFsdWVzLmdldF9JdGVtKGkgPSBpICsgMSk7XHJcbiAgICAgICAgaWYgKE5TdHJpbmcuQ29tcGFyZU9yZGluYWwobmV3VmFsdWUsIGZyb20pID49IDAgJiYgTlN0cmluZy5Db21wYXJlT3JkaW5hbChuZXdWYWx1ZSwgdG8pIDw9IDApIHtcclxuICAgICAgICAgIHJldHVybiBuZXdWYWx1ZTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gbnVsbDtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBUcnkgdG8gY29tcGxldGUgdGhlIG5ld1ZhbHVlIHVzaW5nIHRoZSBSYW5nZVxyXG4gIC8vLyAgIGZpcnN0IHRyeSB0byBjb21sZXRlIHRoZSB2YWx1ZSBmb3IgY2FzZSBtZWFuaW5nIGFuZCBhZnRlciB0aGF0IGZvciBpZ25vcmUgY2FzZVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJ2ZWN0b3JcIj5vZiByYW5nZXNcclxuICAvLy8gPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImNoZWNrZWRcIj52YWx1ZVxyXG4gIC8vLyA8L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz4gdmFsdWUgY29tcGxldGVkIGJ5IHJhbmdlXHJcbiAgLy8vIDwvcmV0dXJucz5cclxuICBjb21wbGV0ZUFscGhhQnlSYW5nZShkaXNjcmV0ZVJhbmdlVmFsdWVzOiBMaXN0PHN0cmluZz4sIG5ld1ZhbHVlOiBzdHJpbmcpOiBzdHJpbmcge1xyXG5cclxuICAgIGxldCBtYXhDb2luY2lkZTogbnVtYmVyW10gPSBuZXcgQXJyYXk8bnVtYmVyPigyKTtcclxuICAgIGZvciAobGV0IF9haTogbnVtYmVyID0gMDsgX2FpIDwgbWF4Q29pbmNpZGUubGVuZ3RoOyArK19haSlcclxuICAgICAgbWF4Q29pbmNpZGVbX2FpXSA9IDA7XHJcblxyXG4gICAgbGV0IGJlc3RJdGVtOiBzdHJpbmdbXSA9IG5ldyBBcnJheTxzdHJpbmc+KDIpO1xyXG4gICAgZm9yIChsZXQgX2FpOiBudW1iZXIgPSAwOyBfYWkgPCBiZXN0SXRlbS5sZW5ndGg7ICsrX2FpKVxyXG4gICAgICBiZXN0SXRlbVtfYWldID0gbnVsbDtcclxuXHJcbiAgICBsZXQgQ0hFQ0tfQ0FTRTogbnVtYmVyID0gMDtcclxuICAgIGxldCBJR05PUkVfQ0FTRTogbnVtYmVyID0gMTtcclxuXHJcbiAgICBsZXQgY2FzZUxldHRlcnM6IG51bWJlciA9IENIRUNLX0NBU0U7XHJcblxyXG4gICAgd2hpbGUgKGNhc2VMZXR0ZXJzID09PSBDSEVDS19DQVNFIHx8IGNhc2VMZXR0ZXJzID09PSBJR05PUkVfQ0FTRSkge1xyXG4gICAgICBsZXQgbG93ZXJWYWx1ZTogc3RyaW5nO1xyXG4gICAgICBpZiAoY2FzZUxldHRlcnMgPT09IENIRUNLX0NBU0UpIHtcclxuICAgICAgICBsb3dlclZhbHVlID0gbmV3VmFsdWU7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgbG93ZXJWYWx1ZSA9IG5ld1ZhbHVlLnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgIH1cclxuICAgICAgbG93ZXJWYWx1ZSA9IFN0clV0aWwucnRyaW0obG93ZXJWYWx1ZSk7XHJcbiAgICAgIGZvciAobGV0IGk6IG51bWJlciA9IDA7IGkgPCBkaXNjcmV0ZVJhbmdlVmFsdWVzLmxlbmd0aDsgaSA9IGkgKyAxKSB7XHJcbiAgICAgICAgbGV0IHdyb25nTGV0dGVyOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICAgICAgbGV0IGN1cnJDb2luY2lkZTogbnVtYmVyID0gMDtcclxuICAgICAgICBsZXQgcmFuZ2VJdGVtOiBzdHJpbmc7XHJcbiAgICAgICAgaWYgKGNhc2VMZXR0ZXJzID09PSBDSEVDS19DQVNFKSB7XHJcbiAgICAgICAgICByYW5nZUl0ZW0gPSBkaXNjcmV0ZVJhbmdlVmFsdWVzLmdldF9JdGVtKGkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgIHJhbmdlSXRlbSA9IGRpc2NyZXRlUmFuZ2VWYWx1ZXMuZ2V0X0l0ZW0oaSkudG9Mb3dlckNhc2UoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgbGV0IGxvd0xlbmd0aDogbnVtYmVyID0gbG93ZXJWYWx1ZS5sZW5ndGg7XHJcbiAgICAgICAgbGV0IHJhbmdlTGVuZ3RoOiBudW1iZXIgPSByYW5nZUl0ZW0ubGVuZ3RoO1xyXG4gICAgICAgIGlmIChsb3dMZW5ndGggPCByYW5nZUxlbmd0aCkge1xyXG4gICAgICAgICAgZm9yIChsZXQgajogbnVtYmVyID0gMDsgaiA8IGxvd0xlbmd0aDsgaiA9IGogKyAxKSB7XHJcbiAgICAgICAgICAgIGlmICghKGxvd2VyVmFsdWUuY2hhckF0KGopID09PSByYW5nZUl0ZW0uY2hhckF0KGopKSkge1xyXG4gICAgICAgICAgICAgIHdyb25nTGV0dGVyID0gdHJ1ZTtcclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjdXJyQ29pbmNpZGUgPSBjdXJyQ29pbmNpZGUgKyAxO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgIHdyb25nTGV0dGVyID0gdHJ1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChjdXJyQ29pbmNpZGUgPiBtYXhDb2luY2lkZVtjYXNlTGV0dGVyc10gJiYgIXdyb25nTGV0dGVyKSB7XHJcbiAgICAgICAgICBiZXN0SXRlbVtjYXNlTGV0dGVyc10gPSBkaXNjcmV0ZVJhbmdlVmFsdWVzLmdldF9JdGVtKGkpO1xyXG4gICAgICAgICAgbWF4Q29pbmNpZGVbY2FzZUxldHRlcnNdID0gY3VyckNvaW5jaWRlO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBjYXNlTGV0dGVycyA9IGNhc2VMZXR0ZXJzICsgMTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgaWYgKGJlc3RJdGVtW0NIRUNLX0NBU0VdICE9PSBudWxsKVxyXG4gICAgICByZXR1cm4gYmVzdEl0ZW1bQ0hFQ0tfQ0FTRV07XHJcbiAgICBlbHNlIHtcclxuICAgICAgaWYgKGJlc3RJdGVtW0lHTk9SRV9DQVNFXSAhPT0gbnVsbClcclxuICAgICAgICByZXR1cm4gYmVzdEl0ZW1bSUdOT1JFX0NBU0VdO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBudWxsO1xyXG4gIH1cclxuXHJcbiAgc2V0RGF0ZUNoYXIoZGF0ZUNoYXI6IG51bWJlcik6IHZvaWQge1xyXG4gICAgdGhpcy5EQVRFQ0hBUiA9IGRhdGVDaGFyO1xyXG4gIH1cclxuXHJcbiAgZ2V0RGF0ZUNoYXIoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLkRBVEVDSEFSO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vL1xyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwidmFsdWVcIj48L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cInN0b3JhZ2VBdHRyaWJ1dGVcIj48L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz48L3JldHVybnM+XHJcbiAgc3RhdGljIFN0cmluZ1ZhbHVlVG9NZ1ZhbHVlKHZhbHVlOiBzdHJpbmcsIHN0b3JhZ2VBdHRyaWJ1dGU6IFN0b3JhZ2VBdHRyaWJ1dGUsIGZpbGxlcjogc3RyaW5nLCBsZW5ndGg6IG51bWJlcik6IGFueSB7XHJcbiAgICBzd2l0Y2ggKHN0b3JhZ2VBdHRyaWJ1dGUpIHtcclxuICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLkFMUEhBOlxyXG4gICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuVU5JQ09ERToge1xyXG4gICAgICAgIGxldCBuZXdWYWw6IHN0cmluZyA9IHZhbHVlO1xyXG4gICAgICAgIG5ld1ZhbCA9IE5TdHJpbmcuUGFkUmlnaHQobmV3VmFsLCBsZW5ndGgsIGZpbGxlcik7XHJcbiAgICAgICAgcmV0dXJuIG5ld1ZhbDtcclxuICAgICAgfVxyXG4gICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuTlVNRVJJQzpcclxuICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLkRBVEU6XHJcbiAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5USU1FOlxyXG4gICAgICAgIHJldHVybiBuZXcgTlVNX1RZUEUodmFsdWUpO1xyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIHJldHVybiB2YWx1ZTtcclxuICAgIH1cclxuICB9XHJcbn1cclxuXHJcbi8vLyA8c3VtbWFyeT5cclxuLy8vICAgQmVpbmcgdXNlZCB0byBzZW5kIHBhcmFtZXRlcnMgdG8gdGhlICd0aW1lX2JyZWFrJyBtZXRob2RcclxuLy8vIDwvc3VtbWFyeT5cclxuZXhwb3J0IGNsYXNzIFRpbWVCcmVha1BhcmFtcyB7XHJcbiAgaG91cjogbnVtYmVyID0gMDtcclxuICBtaW51dGU6IG51bWJlciA9IDA7XHJcbiAgc2Vjb25kOiBudW1iZXIgPSAwO1xyXG5cclxuICBjb25zdHJ1Y3RvcigpO1xyXG4gIGNvbnN0cnVjdG9yKGhvdXJfOiBudW1iZXIsIG1pbnV0ZV86IG51bWJlciwgc2Vjb25kXzogbnVtYmVyKTtcclxuICBjb25zdHJ1Y3Rvcihob3VyXz86IG51bWJlciwgbWludXRlXz86IG51bWJlciwgc2Vjb25kXz86IG51bWJlcikge1xyXG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDApIHtcclxuICAgICAgdGhpcy5jb25zdHJ1Y3Rvcl8wKCk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHRoaXMuY29uc3RydWN0b3JfMShob3VyXywgbWludXRlXywgc2Vjb25kXyk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNvbnN0cnVjdG9yXzAoKTogdm9pZCB7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNvbnN0cnVjdG9yXzEoaG91cl86IG51bWJlciwgbWludXRlXzogbnVtYmVyLCBzZWNvbmRfOiBudW1iZXIpOiB2b2lkIHtcclxuICAgIHRoaXMuaG91ciA9IGhvdXJfO1xyXG4gICAgdGhpcy5taW51dGUgPSBtaW51dGVfO1xyXG4gICAgdGhpcy5zZWNvbmQgPSBzZWNvbmRfO1xyXG4gIH1cclxufVxyXG5cclxuLy8vIDxzdW1tYXJ5PlxyXG4vLy8gICBCZWluZyB1c2VkIHRvIHNlbmQgaW50IGJ5IFJlZlxyXG4vLy8gPC9zdW1tYXJ5PlxyXG5jbGFzcyBJbnRSZWYge1xyXG4gIHZhbDogbnVtYmVyID0gMDtcclxuXHJcbiAgY29uc3RydWN0b3IodmFsXzogbnVtYmVyKSB7XHJcbiAgICB0aGlzLnZhbCA9IHZhbF87XHJcbiAgfVxyXG59XHJcblxyXG4vLy8gPHN1bW1hcnk+XHJcbi8vLyAgIEJlaW5nIHVzZWQgdG8gc2VuZCBwYXJhbWV0ZXJzIHRvIHRoZSAnZGF0ZV9pXzJfbm0nIG1ldGhvZFxyXG4vLy8gPC9zdW1tYXJ5PlxyXG5jbGFzcyBEYXRlTmFtZVBhcmFtcyB7XHJcbiAgb3V0VmFsOiBzdHJpbmdbXSA9IG51bGw7XHJcbiAgbGVuOiBudW1iZXIgPSAwO1xyXG4gIG91dElkeDogbnVtYmVyID0gMDtcclxuXHJcbiAgY29uc3RydWN0b3Iob3V0Xzogc3RyaW5nW10sIG91dElkeF86IG51bWJlciwgbGVuXzogbnVtYmVyKSB7XHJcbiAgICB0aGlzLm91dFZhbCA9IG91dF87XHJcbiAgICB0aGlzLm91dElkeCA9IG91dElkeF87XHJcbiAgICB0aGlzLmxlbiA9IGxlbl87XHJcbiAgfVxyXG59XHJcblxyXG4vLy8gPHN1bW1hcnk+XHJcbi8vLyAgIEJlaW5nIHVzZWQgdG8gc2VuZCBwYXJhbWV0ZXJzIHRvIHRoZSAnZGF0ZV9icmVha19kYXRlbW9kZScgbWV0aG9kXHJcbi8vLyAgIGl0J3Mgc3RydWN0XHJcbi8vLyA8L3N1bW1hcnk+XHJcbmV4cG9ydCBjbGFzcyBEYXRlQnJlYWtQYXJhbXMge1xyXG4gIGRheTogbnVtYmVyID0gMDtcclxuICBkb3c6IG51bWJlciA9IDA7XHJcbiAgZG95OiBudW1iZXIgPSAwO1xyXG4gIG1vbnRoOiBudW1iZXIgPSAwO1xyXG4gIHllYXI6IG51bWJlciA9IDA7XHJcblxyXG4gIGNvbnN0cnVjdG9yKCk7XHJcbiAgY29uc3RydWN0b3IoeWVhcl86IG51bWJlciwgbW9udGhfOiBudW1iZXIsIGRheV86IG51bWJlciwgZG95XzogbnVtYmVyLCBkb3dfOiBudW1iZXIpO1xyXG4gIGNvbnN0cnVjdG9yKHllYXJfPzogbnVtYmVyLCBtb250aF8/OiBudW1iZXIsIGRheV8/OiBudW1iZXIsIGRveV8/OiBudW1iZXIsIGRvd18/OiBudW1iZXIpIHtcclxuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgIHRoaXMuY29uc3RydWN0b3JfMCgpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0aGlzLmNvbnN0cnVjdG9yXzEoeWVhcl8sIG1vbnRoXywgZGF5XywgZG95XywgZG93Xyk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNvbnN0cnVjdG9yXzAoKTogdm9pZCB7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNvbnN0cnVjdG9yXzEoeWVhcl86IG51bWJlciwgbW9udGhfOiBudW1iZXIsIGRheV86IG51bWJlciwgZG95XzogbnVtYmVyLCBkb3dfOiBudW1iZXIpOiB2b2lkIHtcclxuICAgIHRoaXMueWVhciA9IHllYXJfO1xyXG4gICAgdGhpcy5tb250aCA9IG1vbnRoXztcclxuICAgIHRoaXMuZGF5ID0gZGF5XztcclxuICAgIHRoaXMuZG95ID0gZG95XztcclxuICAgIHRoaXMuZG93ID0gZG93XztcclxuICB9XHJcbn1cclxuIl19
|
|
1626
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRGlzcGxheUNvbnZlcnRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2d1aS9zcmMvbWFuYWdlbWVudC9ndWkvRGlzcGxheUNvbnZlcnRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUMsR0FBRyxFQUFDLE1BQU0sT0FBTyxDQUFDO0FBQzFCLE9BQU8sRUFBQyxRQUFRLEVBQVEsT0FBTyxFQUFFLFFBQVEsRUFBRSxhQUFhLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUN0RixPQUFPLEVBQ0wsUUFBUSxFQUNSLFVBQVUsRUFDVixZQUFZLEVBQ1osWUFBWSxFQUNaLFVBQVUsRUFDVixnQkFBZ0IsRUFDaEIsT0FBTyxFQUNQLFdBQVcsRUFDWCxlQUFlLEVBQ2hCLE1BQU0sa0JBQWtCLENBQUM7QUFDMUIsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLGtCQUFrQixDQUFDO0FBQzFDLE9BQU8sRUFBQyxxQkFBcUIsRUFBQyxNQUFNLHlCQUF5QixDQUFDO0FBQzlELE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSxrQkFBa0IsQ0FBQztBQUMxQyxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sY0FBYyxDQUFDO0FBQ3hDLE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxjQUFjLENBQUM7QUFDcEMsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBQ3BELE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUdqRCxNQUFNLE9BQU8sZ0JBQWdCO0lBWTNCO1FBWFEsaUJBQVksR0FBaUIsSUFBSSxDQUFDO1FBQ2xDLGFBQVEsR0FBVyxDQUFDLENBQUM7UUFXM0IsSUFBSSxDQUFDLFlBQVksR0FBRyxjQUFjLENBQUMsV0FBVyxDQUFDO0lBQ2pELENBQUM7SUFURCxNQUFNLEtBQUssUUFBUTtRQUNqQixJQUFJLGdCQUFnQixDQUFDLFNBQVMsS0FBSyxJ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QixDQUFDO0NBQ0Y7QUFNRCxNQUFNLE9BQU8sZUFBZTtJQVMxQixZQUFZLEtBQWMsRUFBRSxNQUFlLEVBQUUsSUFBYSxFQUFFLElBQWEsRUFBRSxJQUFhO1FBUnhGLFFBQUcsR0FBVyxDQUFDLENBQUM7UUFDaEIsUUFBRyxHQUFXLENBQUMsQ0FBQztRQUNoQixRQUFHLEdBQVcsQ0FBQyxDQUFDO1FBQ2hCLFVBQUssR0FBVyxDQUFDLENBQUM7UUFDbEIsU0FBSSxHQUFXLENBQUMsQ0FBQztRQUtmLElBQUksU0FBUyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7WUFDMUIsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQ3JCLE9BQU87U0FDUjtRQUNELElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ3RELENBQUM7SUFFTyxhQUFhO0lBQ3JCLENBQUM7SUFFTyxhQUFhLENBQUMsS0FBYSxFQUFFLE1BQWMsRUFBRSxJQUFZLEVBQUUsSUFBWSxFQUFFLElBQVk7UUFDM0YsSUFBSSxDQUFDLElBQUksR0FBRyxLQUFLLENBQUM7UUFDbEIsSUFBSSxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUM7UUFDcEIsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUM7UUFDaEIsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUM7UUFDaEIsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUM7SUFDbEIsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtJRW52aXJvbm1lbnR9IGZyb20gJy4uLy4uL2Vudi9JRW52aXJvbm1lbnQnO1xyXG5pbXBvcnQge1BJQ30gZnJvbSAnLi9QSUMnO1xyXG5pbXBvcnQge0RhdGVUaW1lLCBMaXN0LCBOU3RyaW5nLCBSZWZQYXJhbSwgU3RyaW5nQnVpbGRlcn0gZnJvbSAnQG1hZ2ljLXhwYS9tc2NvcmVsaWInO1xyXG5pbXBvcnQge1xyXG4gIERhdGVVdGlsLFxyXG4gIEhUTUxfMl9TVFIsXHJcbiAgTXNnSW50ZXJmYWNlLFxyXG4gIFBJQ0ludGVyZmFjZSxcclxuICBTRVFfMl9IVE1MLFxyXG4gIFN0b3JhZ2VBdHRyaWJ1dGUsXHJcbiAgU3RyVXRpbCxcclxuICBVdGlsRGF0ZUpwbixcclxuICBVdGlsU3RyQnl0ZU1vZGVcclxufSBmcm9tICdAbWFnaWMteHBhL3V0aWxzJztcclxuaW1wb3J0IHtCbG9iVHlwZX0gZnJvbSAnLi4vZGF0YS9CbG9iVHlwZSc7XHJcbmltcG9ydCB7VmFsaWRhdGlvbkRldGFpbHNCYXNlfSBmcm9tICcuL1ZhbGlkYXRpb25EZXRhaWxzQmFzZSc7XHJcbmltcG9ydCB7TlVNX1RZUEV9IGZyb20gJy4uL2RhdGEvTlVNX1RZUEUnO1xyXG5pbXBvcnQge0hlYnJld0RhdGV9IGZyb20gJy4vSGVicmV3RGF0ZSc7XHJcbmltcG9ydCB7RXZlbnRzfSBmcm9tICcuLi8uLi9FdmVudHMnO1xyXG5pbXBvcnQge0d1aUVudmlyb25tZW50fSBmcm9tICcuLi8uLi9HdWlFbnZpcm9ubWVudCc7XHJcbmltcG9ydCB7TWVtb3J5VXRpbH0gZnJvbSAnLi4vLi4vdXRpbC9NZW1vcnlVdGlsJztcclxuXHJcbi8vIEBkeW5hbWljXHJcbmV4cG9ydCBjbGFzcyBEaXNwbGF5Q29udmVydG9yIHtcclxuICBwcml2YXRlIF9lbnZpcm9ubWVudDogSUVudmlyb25tZW50ID0gbnVsbDtcclxuICBwcml2YXRlIERBVEVDSEFSOiBudW1iZXIgPSAwO1xyXG4gIHByaXZhdGUgc3RhdGljIF9pbnN0YW5jZTogRGlzcGxheUNvbnZlcnRvciA9IG51bGw7XHJcblxyXG4gIHN0YXRpYyBnZXQgSW5zdGFuY2UoKTogRGlzcGxheUNvbnZlcnRvciB7XHJcbiAgICBpZiAoRGlzcGxheUNvbnZlcnRvci5faW5zdGFuY2UgPT09IG51bGwpIHtcclxuICAgICAgRGlzcGxheUNvbnZlcnRvci5faW5zdGFuY2UgPSBuZXcgRGlzcGxheUNvbnZlcnRvcigpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIERpc3BsYXlDb252ZXJ0b3IuX2luc3RhbmNlO1xyXG4gIH1cclxuXHJcbiAgY29uc3RydWN0b3IoKSB7XHJcbiAgICB0aGlzLl9lbnZpcm9ubWVudCA9IEd1aUVudmlyb25tZW50LkVudmlyb25tZW50O1xyXG4gIH1cclxuXHJcbiAgZ2V0TmV3RGF0ZUJyZWFrUGFyYW1zKCk6IERhdGVCcmVha1BhcmFtcyB7XHJcbiAgICByZXR1cm4gbmV3IERhdGVCcmVha1BhcmFtcygpO1xyXG4gIH1cclxuXHJcbiAgZ2V0TmV3VGltZUJyZWFrUGFyYW1zKCk6IFRpbWVCcmVha1BhcmFtcyB7XHJcbiAgICByZXR1cm4gbmV3IFRpbWVCcmVha1BhcmFtcygpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIEJ1aWxkIGEgZGlzcGxheSBzdHJpbmcgb2YgYSB2YWx1ZSBmcm9tIGl0cyBwaWN0dXJlIGZvcm1hdFxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJtZ1ZhbHVlXCI+ICB0aGUgaW50ZXJuYWwgdmFsdWUgKGFzIHNlbnQgaW4gdGhlIFhNTClcclxuICAvLy8gPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInJhbmdlU3RyXCI+IHZhbHVlIHJhbmdlXHJcbiAgLy8vIDwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJwaWNcIj4gICAgICB0aGUgcGljdHVyZSBmb3JtYXRcclxuICAvLy8gPC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+IHN0cmluZyB0byBkaXNwbGF5XHJcbiAgLy8vIDwvcmV0dXJucz5cclxuICBtZzJkaXNwKG1nVmFsdWU6IHN0cmluZywgcmFuZ2VTdHI6IHN0cmluZywgcGljOiBQSUMsIHVzZU5hdGl2ZTogYm9vbGVhbiwgY29tcElkeDogbnVtYmVyLCB0aW1lX2RhdGVfcGljX1pfZWR0OiBib29sZWFuKTogYW55O1xyXG4gIG1nMmRpc3AobWdWYWx1ZTogc3RyaW5nLCByYW5nZVN0cjogc3RyaW5nLCBwaWM6IFBJQywgdXNlTmF0aXZlOiBib29sZWFuLCBhbHdheXNGaWxsOiBib29sZWFuLCBjb21wSWR4OiBudW1iZXIsIHRpbWVfZGF0ZV9waWNfWl9lZHQ6IGJvb2xlYW4pOiBhbnk7XHJcbiAgbWcyZGlzcChtZ1ZhbHVlOiBzdHJpbmcsIHJhbmdlU3RyOiBzdHJpbmcsIHBpYzogUElDLCB1c2VOYXRpdmU6IGJvb2xlYW4sIGFsd2F5c0ZpbGw6IGJvb2xlYW4sIGNvbXBJZHg6IG51bWJlciwgY29udmVydENhc2U6IGJvb2xlYW4sIHRpbWVfZGF0ZV9udW1fcGljX1pfZWR0OiBib29sZWFuKTogYW55O1xyXG4gIG1nMmRpc3AobWdWYWx1ZTogc3RyaW5nLCByYW5nZVN0cjogc3RyaW5nLCBwaWM6IFBJQywgdXNlTmF0aXZlOiBib29sZWFuLCBjb21wSWR4T3JBbHdheXNGaWxsOiBhbnksIHRpbWVfZGF0ZV9waWNfWl9lZHRPckNvbXBJZHg6IGFueSwgdGltZV9kYXRlX3BpY19aX2VkdE9yQ29udmVydENhc2U/OiBib29sZWFuLCB0aW1lX2RhdGVfbnVtX3BpY19aX2VkdD86IGJvb2xlYW4pOiBhbnkge1xyXG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDYpXHJcbiAgICAgIHJldHVybiB0aGlzLm1nMmRpc3BfMChtZ1ZhbHVlLCByYW5nZVN0ciwgcGljLCB1c2VOYXRpdmUsIGNvbXBJZHhPckFsd2F5c0ZpbGwsIHRpbWVfZGF0ZV9waWNfWl9lZHRPckNvbXBJZHgpO1xyXG5cclxuICAgIGVsc2UgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDcpXHJcbiAgICAgIHJldHVybiB0aGlzLm1nMmRpc3BfMShtZ1ZhbHVlLCByYW5nZVN0ciwgcGljLCB1c2VOYXRpdmUsIGNvbXBJZHhPckFsd2F5c0ZpbGwsIHRpbWVfZGF0ZV9waWNfWl9lZHRPckNvbXBJZHgsIHRpbWVfZGF0ZV9waWNfWl9lZHRPckNvbnZlcnRDYXNlKTtcclxuXHJcbiAgICBlbHNlXHJcbiAgICAgIHJldHVybiB0aGlzLm1nMmRpc3BfMihtZ1ZhbHVlLCByYW5nZVN0ciwgcGljLCB1c2VOYXRpdmUsIGNvbXBJZHhPckFsd2F5c0ZpbGwsIHRpbWVfZGF0ZV9waWNfWl9lZHRPckNvbXBJZHgsIHRpbWVfZGF0ZV9waWNfWl9lZHRPckNvbnZlcnRDYXNlLCB0aW1lX2RhdGVfbnVtX3BpY19aX2VkdCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIG1nMmRpc3BfMChtZ1ZhbHVlOiBzdHJpbmcsIHJhbmdlU3RyOiBzdHJpbmcsIHBpYzogUElDLCB1c2VOYXRpdmU6IGJvb2xlYW4sIGNvbXBJZHg6IG51bWJlciwgdGltZV9kYXRlX3BpY19aX2VkdDogYm9vbGVhbik6IGFueSB7XHJcbiAgICByZXR1cm4gdGhpcy5tZzJkaXNwKG1nVmFsdWUsIHJhbmdlU3RyLCBwaWMsIHVzZU5hdGl2ZSwgZmFsc2UsIGNvbXBJZHgsIHRpbWVfZGF0ZV9waWNfWl9lZHQpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBtZzJkaXNwXzEobWdWYWx1ZTogc3RyaW5nLCByYW5nZVN0cjogc3RyaW5nLCBwaWM6IFBJQywgdXNlTmF0aXZlOiBib29sZWFuLCBhbHdheXNGaWxsOiBib29sZWFuLCBjb21wSWR4OiBudW1iZXIsIHRpbWVfZGF0ZV9waWNfWl9lZHQ6IGJvb2xlYW4pOiBhbnkge1xyXG4gICAgcmV0dXJuIHRoaXMubWcyZGlzcChtZ1ZhbHVlLCByYW5nZVN0ciwgcGljLCB1c2VOYXRpdmUsIGFsd2F5c0ZpbGwsIGNvbXBJZHgsIGZhbHNlLCB0aW1lX2RhdGVfcGljX1pfZWR0KTtcclxuXHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgQnVpbGQgYSBkaXNwbGF5IHN0cmluZyBvZiBhIHZhbHVlIGZyb20gaXRzIHBpY3R1cmUgZm9ybWF0XHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcIm1nVmFsdWVcIj50aGUgaW50ZXJuYWwgdmFsdWUgKGFzIHNlbnQgaW4gdGhlIFhNTClcclxuICAvLy8gPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInJhbmdlU3RyXCI+dmFsdWUgcmFuZ2VcclxuICAvLy8gPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInBpY1wiPnRoZSBwaWN0dXJlIGZvcm1hdFxyXG4gIC8vLyA8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiYWx3YXlzRmlsbFwiPkFsd2F5cyBhdXRvIGZpbGwgYWxwaGEgb3ZlciBpdHMgcGljdHVyZSAodXNlZCBmb3Igc2VsZWN0IGNvbnRyb2xzKVxyXG4gIC8vLyA8L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz4gc3RyaW5nIHRvIGRpc3BsYXlcclxuICAvLy8gPC9yZXR1cm5zPlxyXG4gIHB1YmxpYyBtZzJkaXNwXzIobWdWYWx1ZTogc3RyaW5nLCByYW5nZVN0cjogc3RyaW5nLCBwaWM6IFBJQywgdXNlTmF0aXZlOiBib29sZWFuLCBhbHdheXNGaWxsOiBib29sZWFuLCBjb21wSWR4OiBudW1iZXIsIGNvbnZlcnRDYXNlOiBib29sZWFuLCB0aW1lX2RhdGVfbnVtX3BpY19aX2VkdDogYm9vbGVhbik6IGFueSB7XHJcbiAgICBsZXQgc3RyOiBzdHJpbmcgPSBcIlwiO1xyXG4gICAgbGV0IHRtcFJhbmdlOiBzdHJpbmcgPSAocmFuZ2VTdHIgPT09IG51bGwpID8gXCJcIiA6IHJhbmdlU3RyO1xyXG5cclxuICAgIHN3aXRjaCAocGljLmdldEF0dHIoKSkge1xyXG5cclxuICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLkFMUEhBOlxyXG4gICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuVU5JQ09ERTpcclxuICAgICAgICBzdHIgPSB0aGlzLmZyb21BbHBoYShtZ1ZhbHVlLCBwaWMsIHRtcFJhbmdlLCBhbHdheXNGaWxsLCBjb252ZXJ0Q2FzZSk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuTlVNRVJJQzoge1xyXG5cclxuICAgICAgICAvLyBOb3csIGN1cnJlY3kgZGlyZWN0aXZlIHN1cHBvcnRlZCwgYnV0IHRoaXMgd2lsbCBiZSBoYW5kbGVkIGJ5IGFuZ3VsYXIgcGFja2FnZXMgbGlrZSBuZy1jdXJyZW5jeVxyXG4gICAgICAgIC8vIGhlcmUgaXQgc2hvdWxkIHNpbXBseSBwYXNzIHRoZSBhY3R1YWwgbmF0aXZlIHZhbHVlIG9mIG51bWJlciBhbmQgbWFza3Mgc2hvdWxkIG5vdCBiZSBhcHBsaWVkXHJcbiAgICAgICAgLy8gU28sIHByZXBhcmUgdGVtcG9yYXJ5IHBpY3R1cmUgdG8gZ2VuZXJhdGUgbmF0aXZlIHZhbHVlLlxyXG4gICAgICAgIGxldCAgbmV3UGljID0gcGljLmdldFVuZm9ybWF0dGVkTnVtZXJpY1BpYygpO1xyXG5cclxuICAgICAgICAvL3N0b3JlIGFuZCByZXN0b3JlIGRlY2ltYWwgc2VwIGFuZCB0aG91LiBzZXBcclxuICAgICAgICBsZXQgIGRlYzogc3RyaW5nID0gR3VpRW52aXJvbm1lbnQuRW52aXJvbm1lbnQuR2V0RGVjaW1hbCgpO1xyXG4gICAgICAgIGxldCB0aG91OnN0cmluZyAgPSBHdWlFbnZpcm9ubWVudC5FbnZpcm9ubWVudC5HZXRUaG91c2FuZHMoKTtcclxuXHJcbiAgICAgICAgLy9zZXQgZGVmYXVsdCB2YWx1ZXNcclxuICAgICAgICBHdWlFbnZpcm9ubWVudC5FbnZpcm9ubWVudC5zZXREZWNpbWFsU2VwYXJhdG9yKCcuJyk7XHJcbiAgICAgICAgR3VpRW52aXJvbm1lbnQuRW52aXJvbm1lbnQuc2V0VGhvdXNhbmRzU2VwYXJhdG9yKCcsJyk7XHJcblxyXG4gICAgICAgIHN0ciA9IHRoaXMuZnJvbU51bShtZ1ZhbHVlLCBuZXdQaWMpO1xyXG4gICAgICAgIEd1aUVudmlyb25tZW50LkVudmlyb25tZW50LnNldERlY2ltYWxTZXBhcmF0b3IoZGVjKTtcclxuICAgICAgICBHdWlFbnZpcm9ubWVudC5FbnZpcm9ubWVudC5zZXRUaG91c2FuZHNTZXBhcmF0b3IodGhvdSk7XHJcbiAgICAgICAgLy8gVmFsdWUgc2hvdWxkIGJlIHRyaW1tZWQgd2hlbiB3ZSBhcmUgZGlzcGxheWluZyBjb250cm9sIGluIG9yZGVyIHRvIGRpc3BsYXkgYWxpZ25tZW50IHByb3Blcmx5LiBCdXQgd2hpbGUgZW50ZXJpbmcgY29udHJvbCwgaXQgc2hvdWxkIG5vdCBiZSB0cmltbWVkXHJcbiAgICAgICAgLy8gaW4gb3JkZXIgdG8gcmVhZCBpdCBwcm9wZXJseS5cclxuICAgICAgICBpZiAobmV3UGljLmdldE1hc2tDaGFycygpID09PSAwIHx8ICF0aW1lX2RhdGVfbnVtX3BpY19aX2VkdClcclxuICAgICAgICAgIHN0ciA9IFN0clV0aWwubHRyaW0oc3RyKTtcclxuXHJcbiAgICAgICAgaWYgKHVzZU5hdGl2ZSkge1xyXG4gICAgICAgICAgaWYgKHN0ciA9PSBcIlwiKVxyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuXHJcbiAgICAgICAgICBsZXQgZGJsOiBudW1iZXIgPSBOdW1iZXIoc3RyKTtcclxuICAgICAgICAgIHJldHVybiBkYmw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2VcclxuICAgICAgICAgIHJldHVybiBzdHI7XHJcbiAgICAgIH1cclxuICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLkRBVEU6IHtcclxuICAgICAgICBpZiAodXNlTmF0aXZlKSB7XHJcbiAgICAgICAgICBsZXQgZHQ6IERhdGU7XHJcbiAgICAgICAgICBkdCA9IHRoaXMuZnJvbU1nRGF0ZVRvTmF0aXZlRGF0ZShtZ1ZhbHVlLCBwaWMsIGNvbXBJZHgpO1xyXG4gICAgICAgICAgcmV0dXJuIGR0O1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgIHN0ciA9IHRoaXMuZnJvbURhdGUobWdWYWx1ZSwgcGljLCBjb21wSWR4LCB0aW1lX2RhdGVfbnVtX3BpY19aX2VkdCk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLlRJTUU6IHtcclxuICAgICAgICBpZiAodXNlTmF0aXZlKSB7XHJcbiAgICAgICAgICBsZXQgZHQ6IERhdGU7XHJcbiAgICAgICAgICBkdCA9IHRoaXMuZnJvbU1nVGltZVRvTmF0aXZlVGltZShtZ1ZhbHVlLCBwaWMpO1xyXG4gICAgICAgICAgcmV0dXJuIGR0O1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgIHN0ciA9IHRoaXMuZnJvbVRpbWUobWdWYWx1ZSwgcGljLCB0aW1lX2RhdGVfbnVtX3BpY19aX2VkdCk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLkJPT0xFQU46IHtcclxuICAgICAgICBsZXQgbG9nVmFsOiBib29sZWFuO1xyXG4gICAgICAgIGxvZ1ZhbCA9IHRoaXMuZnJvbU1nTG9naWNhbFRvTmF0aXZlTG9naWNhbChtZ1ZhbHVlKTtcclxuICAgICAgICByZXR1cm4gbG9nVmFsO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuQkxPQjpcclxuICAgICAgICBzdHIgPSBCbG9iVHlwZS5nZXRTdHJpbmcobWdWYWx1ZSk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5CTE9CX1ZFQ1RPUjpcclxuICAgICAgICBzdHIgPSBtZ1ZhbHVlO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHN0cjtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBCdWlsZCBhbiBpbnRlcm5hbCByZXByZXNlbnRhdGlvbiBvZiBhIGRpc3BsYXkgdmFsdWUgZnJvbSBpdHMgcGljdHVyZSBmb3JtYXRcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiZGlzcFZhbHVlXCI+dGhlIHZhbHVlIGFzIGVudGVyZWQgYnkgdXNlclxyXG4gIC8vLyA8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwicmFuZ2VTdHJcIj52YWx1ZSByYW5nZVxyXG4gIC8vLyA8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwicGljXCI+dGhlIHBpY3R1cmUgZm9ybWF0XHJcbiAgLy8vIDwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJibG9iQ29udGVudFR5cGVcIj5pZiB0aGUgYXR0cmlidXRlIGlzIGJsb2IsIGl0cyBjb250ZW50IHR5cGVcclxuICAvLy8gPC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+IGludGVybmFsIGZvcm0gb2YgZGF0YSAoYXMgdXNlZCBpbiB0aGUgWE1MKVxyXG4gIC8vLyA8L3JldHVybnM+XHJcbiAgZGlzcDJtZyhkaXNwVmFsdWU6IGFueSwgcGljOiBQSUMsIGNvbXBJZHg6IG51bWJlciwgYmxvYkNvbnRlbnRUeXBlOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgbGV0IHN0cjogc3RyaW5nID0gXCJcIjtcclxuXHJcbiAgICBzd2l0Y2ggKHBpYy5nZXRBdHRyKCkpIHtcclxuICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLkFMUEhBOlxyXG4gICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuVU5JQ09ERTpcclxuICAgICAgICBzdHIgPSB0aGlzLnRvQWxwaGEoZGlzcFZhbHVlLCBwaWMpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuXHJcbiAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5OVU1FUklDOiB7XHJcbiAgICAgICAgZGlzcFZhbHVlID0gU3RyaW5nKGRpc3BWYWx1ZSk7XHJcbiAgICAgICAgLy8gUmVtb3ZlIHRoZSBtYXNrIGZyb20gZGlzcGxheSB2YWx1ZS5cclxuICAgICAgICBsZXQgbGVuOiBudW1iZXIgPSBkaXNwVmFsdWUubGVuZ3RoO1xyXG4gICAgICAgIHdoaWxlIChsZW4gPiAwKSB7XHJcbiAgICAgICAgICBpZiAoIXBpYy5waWNJc01hc2sobGVuIC0gMSkgJiYgZGlzcFZhbHVlW2xlbiAtIDFdICE9PSAoJyAnKSlcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICBsZW4tLTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGRpc3BWYWx1ZS5sZW5ndGggPiBsZW4pXHJcbiAgICAgICAgICBkaXNwVmFsdWUgPSBOU3RyaW5nLlJlbW92ZShkaXNwVmFsdWUsIGxlbiwgKGRpc3BWYWx1ZS5sZW5ndGggLSBsZW4pKTtcclxuXHJcbiAgICAgICAgaWYgKHBpYy5pc05lZ2F0aXZlKCkgJiYgZGlzcFZhbHVlLnRyaW0oKS5zdGFydHNXaXRoKFwiLVwiKSlcclxuICAgICAgICAgIGRpc3BWYWx1ZSA9IFN0clV0aWwubHRyaW0oZGlzcFZhbHVlKTtcclxuXHJcbiAgICAgICAgLy9zdG9yZSBhbmQgcmVzdG9yZSBkZWNpbWFsIHNlcCBhbmQgdGhvdS4gc2VwXHJcbiAgICAgICAgbGV0ICBkZWM6IHN0cmluZyA9IEd1aUVudmlyb25tZW50LkVudmlyb25tZW50LkdldERlY2ltYWwoKTtcclxuICAgICAgICBsZXQgdGhvdTpzdHJpbmcgID0gR3VpRW52aXJvbm1lbnQuRW52aXJvbm1lbnQuR2V0VGhvdXNhbmRzKCk7XHJcblxyXG4gICAgICAgIC8vc2V0IGRlZmF1bHQgdmFsdWVzXHJcbiAgICAgICAgR3VpRW52aXJvbm1lbnQuRW52aXJvbm1lbnQuc2V0RGVjaW1hbFNlcGFyYXRvcignLicpO1xyXG4gICAgICAgIEd1aUVudmlyb25tZW50LkVudmlyb25tZW50LnNldFRob3VzYW5kc1NlcGFyYXRvcignLCcpO1xyXG5cclxuICAgICAgICAvLyBOb3csIGN1cnJlY3kgZGlyZWN0aXZlIHN1cHBvcnRlZCwgYnV0IHRoaXMgd2lsbCBiZSBoYW5kbGVkIGJ5IGFuZ3VsYXIgcGFja2FnZXMgbGlrZSBuZy1jdXJyZW5jeVxyXG4gICAgICAgIC8vIGhlcmUgaXQgc2hvdWxkIHNpbXBseSBwYXNzIHRoZSBhY3R1YWwgbmF0aXZlIHZhbHVlIG9mIG51bWJlciBhbmQgbWFza3Mgc2hvdWxkIG5vdCBiZSBhcHBsaWVkXHJcbiAgICAgICAgLy8gU28sIHByZXBhcmUgdGVtcG9yYXJ5IHBpY3R1cmUgdG8gZ2VuZXJhdGUgbmF0aXZlIHZhbHVlLlxyXG4gICAgICAgIGxldCAgbmV3UGljID0gcGljLmdldFVuZm9ybWF0dGVkTnVtZXJpY1BpYygpO1xyXG5cclxuICAgICAgICBzdHIgPSB0aGlzLnRvTnVtKGRpc3BWYWx1ZSwgbmV3UGljLCBjb21wSWR4KTtcclxuXHJcbiAgICAgICAgR3VpRW52aXJvbm1lbnQuRW52aXJvbm1lbnQuc2V0RGVjaW1hbFNlcGFyYXRvcihkZWMpO1xyXG4gICAgICAgIEd1aUVudmlyb25tZW50LkVudmlyb25tZW50LnNldFRob3VzYW5kc1NlcGFyYXRvcih0aG91KTtcclxuICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuXHJcbiAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5EQVRFOlxyXG4gICAgICB7XHJcbiAgICAgICAgbGV0IGR0OiBEYXRlO1xyXG4gICAgICAgIC8vd2hlbiBkYXRlIGlzIGluIGl0ZW0gbGlzdCBmb3IgY2hvaWNlIGN0cmwsIGl0IHdpbGwgY29tZSBoZXJlIGFzIHN0cmluZy4gc28gY29udmVydCBpdCB0byBEYXRlLlxyXG4gICAgICAgIGlmICh0eXBlb2YgZGlzcFZhbHVlID09PSAnc3RyaW5nJylcclxuICAgICAgICAgIGR0ID0gbmV3IERhdGUgKGRpc3BWYWx1ZSk7XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgICAgZHQgPSBkaXNwVmFsdWU7XHJcbiAgICAgICAgc3RyID0gdGhpcy5mcm9tTmF0aXZlRGF0ZVRvTWdEYXRlKGR0LCBwaWMpO1xyXG4gICAgICB9XHJcbiAgICAgIGJyZWFrO1xyXG5cclxuXHJcbiAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5USU1FOiB7XHJcbiAgICAgICAgbGV0IGR0OiBEYXRlO1xyXG5cclxuICAgICAgICAvL3doZW4gZGF0ZSBpcyBpbiBpdGVtIGxpc3QgZm9yIGNob2ljZSBjdHJsLCBpdCB3aWxsIGNvbWUgaGVyZSBhcyBzdHJpbmcuIHNvIGNvbnZlcnQgaXQgdG8gRGF0ZS5cclxuICAgICAgICBpZiAodHlwZW9mIGRpc3BWYWx1ZSA9PT0gJ3N0cmluZycpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgZHQgPSBuZXcgRGF0ZSgpO1xyXG4gICAgICAgICAgaWYgKGRpc3BWYWx1ZSAhPT0gbnVsbCkge1xyXG4gICAgICAgICAgICBkdC5zZXRIb3VycygrU3RyaW5nKGRpc3BWYWx1ZSkuc3Vic3RyKDAsIDIpKTtcclxuICAgICAgICAgICAgZHQuc2V0TWludXRlcygrU3RyaW5nKGRpc3BWYWx1ZSkuc3Vic3RyKDAsIDIpKTtcclxuICAgICAgICAgICAgaWYgKFN0cmluZyhkaXNwVmFsdWUpLmxlbmd0aCA+IDUpXHJcbiAgICAgICAgICAgICAgZHQuc2V0U2Vjb25kcygrU3RyaW5nKGRpc3BWYWx1ZSkuc3Vic3RyKDAsIDIpKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGVsc2VcclxuICAgICAgICAgIGR0ID0gZGlzcFZhbHVlO1xyXG5cclxuICAgICAgICBzdHIgPSB0aGlzLmZyb21OYXRpdmVUaW1lVG9NZ1RpbWUoZHQpO1xyXG4gICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG5cclxuICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLkJPT0xFQU46XHJcbiAgICAgICAgc3RyID0gdGhpcy5mcm9tTmF0aXZlTG9naWNhbFRvTWdMb2dpY2FsKGRpc3BWYWx1ZSk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG5cclxuICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLkJMT0I6XHJcbiAgICAgICAgc3RyID0gQmxvYlR5cGUuY3JlYXRlRnJvbVN0cmluZyhkaXNwVmFsdWUsIGJsb2JDb250ZW50VHlwZSk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gc3RyO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAgTWV0aG9kcyBmb3IgY292ZXJ0aW5nIElOVEVSTkFMIC0tLT4gRElQTEFZXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIEhhbmRsZXMgbWFnaWMgbnVtYmVyIHZhbHVlXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcIm1nTnVtXCI+ICAgQSBNYWdpYyBOdW1iZXI8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwicGljU3RyXCI+ICBUaGUgcGljdHVyZSB0byB1c2U8L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz4gdGhlIHN0cmluZyB0byBiZSBkaXNwbGF5ZWQ8L3JldHVybnM+XHJcbiAgcHVibGljIGZyb21OdW0obWdWYWx1ZTogc3RyaW5nLCBwaWM6IFBJQyk6IHN0cmluZyB7XHJcbiAgICBsZXQgbWdOdW06IE5VTV9UWVBFID0gbmV3IE5VTV9UWVBFKG1nVmFsdWUpO1xyXG4gICAgcmV0dXJuIG1nTnVtLnRvRGlzcGxheVZhbHVlKHBpYyk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgQnVpbGQgYSBkaXNwbGF5IHN0cmluZyBmb3IgYW4gYWxwaGEgdmFsdWUgYWNjb3JkaW5nIHRvIHRoZSBwaWN0dXJlXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImRhdGFTdHJcIj4gICBUaGUgc291cmNlIGRhdGFcclxuICAvLy8gPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInBpY1N0clwiPiAgICBUaGUgcGljdHVyZSB0byB1c2UgZm9yIHRoZSB2YWx1ZSB0byBkaXNwbGF5XHJcbiAgLy8vIDwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJyYW5nZVN0clwiPiAgVGhlIHJhbmdlIG9mIHZhbHVlcyB0byBjaGVja1xyXG4gIC8vLyA8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiYWx3YXlzRmlsbFwiPkFsd2F5cyBhdXRvIGZpbGwgYWxwaGEgb3ZlciBpdHMgcGljdHVyZSAodXNlZCBmb3Igc2VsZWN0IGNvbnRyb2xzKVxyXG4gIC8vLyA8L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz4gdGhlIHN0cmluZyB0byBiZSBkaXNwbGF5ZWRcclxuICAvLy8gPC9yZXR1cm5zPlxyXG4gIHByaXZhdGUgZnJvbUFscGhhKGRhdGFTdHI6IHN0cmluZywgcGljOiBQSUMsIHJhbmdlU3RyOiBzdHJpbmcsIGFsd2F5c0ZpbGw6IGJvb2xlYW4sIGNvbnZlcnRDYXNlOiBib29sZWFuKTogc3RyaW5nIHtcclxuICAgIGxldCBsZW46IG51bWJlciA9IHBpYy5nZXRNYXNrU2l6ZSgpO1xyXG4gICAgbGV0IG1pbl9sZW46IG51bWJlciA9IGxlbjtcclxuICAgIGxldCBtYXNrU3RyOiBzdHJpbmcgPSBwaWMuZ2V0TWFzaygpO1xyXG4gICAgbGV0IHJlc1N0cjogc3RyaW5nO1xyXG5cclxuICAgIGlmIChwaWMuZ2V0TWFza0NoYXJzKCkgPiAwKSB7XHJcbiAgICAgIHJlc1N0ciA9IHRoaXMud2luX2RhdGFfY3B5KE5TdHJpbmcuVG9DaGFyQXJyYXkobWFza1N0ciksIGxlbiwgTlN0cmluZy5Ub0NoYXJBcnJheShkYXRhU3RyKSwgcGljLmlzQXR0ckFscGhhKCksIGNvbnZlcnRDYXNlKTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICBpZiAoVXRpbFN0ckJ5dGVNb2RlLmlzTG9jYWxlRGVmTGFuZ0RCQ1MoKSAmJiBwaWMuaXNBdHRyQWxwaGEoKSlcclxuICAgICAgLy8gSlBOOiBEQkNTIHN1cHBvcnRcclxuICAgICAge1xyXG4gICAgICAgIC8vIHN1YnN0cmluZyBieSB0aGUgbnVtYmVyIG9mIGJ5dGVzXHJcbiAgICAgICAgbGV0IGludERhdGFTdHJMZW5COiBudW1iZXIgPSBVdGlsU3RyQnl0ZU1vZGUubGVuQihkYXRhU3RyKTtcclxuICAgICAgICBpZiAobWluX2xlbiA+IGludERhdGFTdHJMZW5CKSB7XHJcbiAgICAgICAgICBtaW5fbGVuID0gaW50RGF0YVN0ckxlbkI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJlc1N0ciA9IFV0aWxTdHJCeXRlTW9kZS5sZWZ0QihkYXRhU3RyLCBtaW5fbGVuKTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIGlmIChkYXRhU3RyICE9PSBudWxsKSB7XHJcbiAgICAgICAgaWYgKG1pbl9sZW4gPiBkYXRhU3RyLmxlbmd0aCkge1xyXG4gICAgICAgICAgbWluX2xlbiA9IGRhdGFTdHIubGVuZ3RoO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoY29udmVydENhc2UpIHtcclxuICAgICAgICAgIHJlc1N0ciA9IHRoaXMud2luX2RhdGFfY3B5KE5TdHJpbmcuVG9DaGFyQXJyYXkobWFza1N0ciksIGxlbiwgTlN0cmluZy5Ub0NoYXJBcnJheShkYXRhU3RyKSwgcGljLmlzQXR0ckFscGhhKCksIGNvbnZlcnRDYXNlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICByZXNTdHIgPSBkYXRhU3RyLnN1YnN0cigwLCBtaW5fbGVuKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyBXZSBkbyBub3QgZmlsbCBBbHBoYSBmaWxlZCBvdmVyIGNvbnRyb2wncyBwaWN0dXJlIGxlbmd0aCBRQ1IgIyAyOTU0MDhcclxuICAgIGlmIChhbHdheXNGaWxsIHx8IChyYW5nZVN0ciAhPT0gbnVsbCAmJiByYW5nZVN0ci5sZW5ndGggPiAwICYmIHJlc1N0ci5sZW5ndGggPCBsZW4pKSB7XHJcbiAgICAgIGxldCB2ZDogVmFsaWRhdGlvbkRldGFpbHNCYXNlID0gbmV3IFZhbGlkYXRpb25EZXRhaWxzQmFzZShyYW5nZVN0cik7XHJcbiAgICAgIGxldCBjb250aW51b3VzUmFuZ2VWYWx1ZXM6IExpc3Q8c3RyaW5nPiA9IHZkLmdldENvbnRpbnVvdXNSYW5nZVZhbHVlcygpO1xyXG4gICAgICBsZXQgZGlzY3JldGVSYW5nZVZhbHVlczogTGlzdDxzdHJpbmc+ID0gdmQuZ2V0RGlzY3JldGVSYW5nZVZhbHVlcygpO1xyXG4gICAgICBpZiAoY29udGludW91c1JhbmdlVmFsdWVzICE9PSBudWxsIHx8IGRpc2NyZXRlUmFuZ2VWYWx1ZXMgIT09IG51bGwpIHtcclxuICAgICAgICByZXNTdHIgPSB0aGlzLmZpbGxBbHBoYUJ5UmFuZ2UoY29udGludW91c1JhbmdlVmFsdWVzLCBkaXNjcmV0ZVJhbmdlVmFsdWVzLCByZXNTdHIpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmVzU3RyO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjYXNlQ29udmVydGVkQ2hhcihkYXRhOiBzdHJpbmcsIG1hc2s6IHN0cmluZyk6IHN0cmluZyB7XHJcblxyXG4gICAgbGV0IGNoOiBzdHJpbmc7XHJcbiAgICBpZiAobWFzay5jaGFyQ29kZUF0KDApID09PSBQSUNJbnRlcmZhY2UuUElDX1UpIHtcclxuICAgICAgY2ggPSBkYXRhLnRvVXBwZXJDYXNlKCk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgaWYgKG1hc2suY2hhckNvZGVBdCgwKSA9PT0gUElDSW50ZXJmYWNlLlBJQ19MKSB7XHJcbiAgICAgICAgY2ggPSBkYXRhLnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgY2ggPSBkYXRhO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gY2g7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHdpbl9kYXRhX2NweShtYXNrU3RyOiBzdHJpbmdbXSwgbWFza0xlbjogbnVtYmVyLCBkYXRhU3RyOiBzdHJpbmdbXSwgaXNBdHRyQWxwaGE6IGJvb2xlYW4pOiBzdHJpbmc7XHJcbiAgcHJpdmF0ZSB3aW5fZGF0YV9jcHkobWFza1N0cjogc3RyaW5nW10sIG1hc2tMZW46IG51bWJlciwgZGF0YVN0cjogc3RyaW5nW10sIGlzQXR0ckFscGhhOiBib29sZWFuLCBjb252ZXJ0Q2FzZTogYm9vbGVhbik6IHN0cmluZztcclxuICBwcml2YXRlIHdpbl9kYXRhX2NweShtYXNrU3RyOiBhbnksIG1hc2tMZW46IG51bWJlciwgZGF0YVN0cjogYW55LCBpc0F0dHJBbHBoYTogYm9vbGVhbiwgY29udmVydENhc2U/OiBib29sZWFuKTogc3RyaW5nIHtcclxuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSA0KVxyXG4gICAgICByZXR1cm4gdGhpcy53aW5fZGF0YV9jcHlfMChtYXNrU3RyLCBtYXNrTGVuLCBkYXRhU3RyLCBpc0F0dHJBbHBoYSk7XHJcblxyXG4gICAgcmV0dXJuIHRoaXMud2luX2RhdGFfY3B5XzEobWFza1N0ciwgbWFza0xlbiwgZGF0YVN0ciwgaXNBdHRyQWxwaGEsIGNvbnZlcnRDYXNlKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgd2luX2RhdGFfY3B5XzAobWFza1N0cjogc3RyaW5nW10sIG1hc2tMZW46IG51bWJlciwgZGF0YVN0cjogc3RyaW5nW10sIGlzQXR0ckFscGhhOiBib29sZWFuKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLndpbl9kYXRhX2NweShtYXNrU3RyLCBtYXNrTGVuLCBkYXRhU3RyLCBpc0F0dHJBbHBoYSwgZmFsc2UpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIEhhbmRsZXMgYWxwaGEgdmFsdWVcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwibWFza1N0clwiPiAgIFRoZSBtYXNrIHRvIGJlIHVzZWQgaW4gb3JkZXIgdG8gYnVpbGQgdGhlIHN0cmluZ1xyXG4gIC8vLyA8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwicGljU3RyXCI+ICAgIFRoZSBwaWN0dXJlIHRvIHVzZVxyXG4gIC8vLyA8L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz4gdGhlIHN0cmluZyB0byBiZSBkaXNwbGF5ZWRcclxuICAvLy8gPC9yZXR1cm5zPlxyXG4gIHByaXZhdGUgd2luX2RhdGFfY3B5XzEobWFza1N0cjogc3RyaW5nW10sIG1hc2tMZW46IG51bWJlciwgZGF0YVN0cjogc3RyaW5nW10sIGlzQXR0ckFscGhhOiBib29sZWFuLCBjb252ZXJ0Q2FzZTogYm9vbGVhbik6IHN0cmluZyB7XHJcbiAgICBsZXQgbWFza0lkeDogbnVtYmVyID0gMDtcclxuICAgIGxldCBkYXRhSWR4OiBudW1iZXIgPSAwO1xyXG4gICAgbGV0IHJlc1N0cjogc3RyaW5nW10gPSBuZXcgQXJyYXk8c3RyaW5nPihtYXNrTGVuKTtcclxuXHJcbiAgICBpZiAoaXNBdHRyQWxwaGEgJiYgVXRpbFN0ckJ5dGVNb2RlLmlzTG9jYWxlRGVmTGFuZ0RCQ1MoKSkge1xyXG4gICAgICBsZXQgbnVtMjogbnVtYmVyID0gMDtcclxuICAgICAgd2hpbGUgKG1hc2tJZHggPCBtYXNrTGVuICYmIG51bTIgPCBtYXNrTGVuKSB7XHJcbiAgICAgICAgaWYgKG1hc2tTdHJbbWFza0lkeF0uY2hhckNvZGVBdCgwKSA8PSBQSUNJbnRlcmZhY2UuUElDX01BWF9PUCkge1xyXG4gICAgICAgICAgaWYgKGRhdGFJZHggPCBkYXRhU3RyLmxlbmd0aCkge1xyXG4gICAgICAgICAgICBsZXQgc3RyVmFsOiBzdHJpbmcgPSBOU3RyaW5nLkZyb21DaGFycyhkYXRhU3RyLCBkYXRhSWR4LCAxKTtcclxuICAgICAgICAgICAgaWYgKFV0aWxTdHJCeXRlTW9kZS5sZW5CKHN0clZhbCkgPT09IDIpIHtcclxuICAgICAgICAgICAgICBpZiAobWFza0lkeCArIDEgPCBtYXNrTGVuKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAobWFza1N0clttYXNrSWR4ICsgMV0uY2hhckNvZGVBdCgwKSA8PSBQSUNJbnRlcmZhY2UuUElDX01BWF9PUCkge1xyXG4gICAgICAgICAgICAgICAgICBpZiAoY29udmVydENhc2UpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXNTdHJbbnVtMisrXSA9IHRoaXMuY2FzZUNvbnZlcnRlZENoYXIoZGF0YVN0cltkYXRhSWR4KytdLCBtYXNrU3RyW21hc2tJZHggKyAxXSk7XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVzU3RyW251bTIrK10gPSBkYXRhU3RyW2RhdGFJZHgrK107XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgbWFza0lkeCA9IG1hc2tJZHggKyAxO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgIHJlc1N0cltudW0yKytdID0gJyAnO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHJlc1N0cltudW0yKytdID0gJyAnO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICBpZiAoY29udmVydENhc2UpIHtcclxuICAgICAgICAgICAgICAgIHJlc1N0cltudW0yKytdID0gdGhpcy5jYXNlQ29udmVydGVkQ2hhcihkYXRhU3RyW2RhdGFJZHgrK10sIG1hc2tTdHJbbWFza0lkeCArIDFdKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICByZXNTdHJbbnVtMisrXSA9IGRhdGFTdHJbZGF0YUlkeCsrXTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICByZXNTdHJbbnVtMisrXSA9ICcgJy8qJyAnKi87XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgcmVzU3RyW251bTIrK10gPSBtYXNrU3RyW21hc2tJZHhdO1xyXG4gICAgICAgIH1cclxuICAgICAgICBtYXNrSWR4ID0gbWFza0lkeCArIDE7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIE5TdHJpbmcuRnJvbUNoYXJzKHJlc1N0cikuc3Vic3RyKDAsIG51bTIpO1xyXG4gICAgfVxyXG5cclxuICAgIHdoaWxlIChtYXNrSWR4IDwgbWFza0xlbikge1xyXG4gICAgICBpZiAobWFza1N0clttYXNrSWR4XS5jaGFyQ29kZUF0KDApIDw9IFBJQ0ludGVyZmFjZS5QSUNfTUFYX09QKSB7XHJcbiAgICAgICAgaWYgKGRhdGFJZHggPCBkYXRhU3RyLmxlbmd0aCkge1xyXG4gICAgICAgICAgcmVzU3RyW21hc2tJZHhdID0gZGF0YVN0cltkYXRhSWR4XTtcclxuICAgICAgICAgIGlmIChjb252ZXJ0Q2FzZSkge1xyXG4gICAgICAgICAgICByZXNTdHJbbWFza0lkeF0gPSB0aGlzLmNhc2VDb252ZXJ0ZWRDaGFyKGRhdGFTdHJbZGF0YUlkeF0sIG1hc2tTdHJbbWFza0lkeF0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHJlc1N0clttYXNrSWR4XSA9IGRhdGFTdHJbZGF0YUlkeF07XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBkYXRhSWR4ID0gZGF0YUlkeCArIDE7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgcmVzU3RyW21hc2tJZHhdID0gJyAnLyonICcqLztcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgcmVzU3RyW21hc2tJZHhdID0gbWFza1N0clttYXNrSWR4XTtcclxuICAgICAgfVxyXG4gICAgICBtYXNrSWR4ID0gbWFza0lkeCArIDE7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gTlN0cmluZy5Gcm9tQ2hhcnMocmVzU3RyKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBCdWlsZCBhIGRpc3BsYXkgc3RyaW5nIGZvciBhbiBkYXRlIHZhbHVlIGFjY29yZGluZyB0byB0aGUgcGljdHVyZVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJkYXRhU3RyXCI+ICAgVGhlIHNvdXJjZSBkYXRhPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInBpY1N0clwiPiAgICBUaGUgcGljdHVyZSB0byB1c2UgZm9yIHRoZSB2YWx1ZSB0byBkaXNwbGF5PC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+IHRoZSBzdHJpbmcgdG8gYmUgZGlzcGxheWVkPC9yZXR1cm5zPlxyXG4gIGZyb21EYXRlKGRhdGFTdHI6IHN0cmluZywgcGljOiBQSUMsIGNvbXBJZHg6IG51bWJlciwgdGltZV9kYXRlX3BpY19aX2VkdDogYm9vbGVhbik6IHN0cmluZyB7XHJcbiAgICBsZXQgbWFzazogc3RyaW5nID0gcGljLmdldE1hc2soKTtcclxuICAgIGxldCBtYXNrU2l6ZTogbnVtYmVyID0gcGljLmdldE1hc2tTaXplKCk7XHJcbiAgICBsZXQgZGF0ZTogbnVtYmVyID0gbmV3IE5VTV9UWVBFKGRhdGFTdHIpLk5VTV8yX1VMT05HKCk7XHJcbiAgICByZXR1cm4gdGhpcy50b19hX3BpY19kYXRlbW9kZShtYXNrLCBtYXNrU2l6ZSwgZGF0ZSwgcGljLCB0aW1lX2RhdGVfcGljX1pfZWR0LCBmYWxzZSwgY29tcElkeCk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgQnVpbGQgYSBkaXNwbGF5IHN0cmluZyBmb3IgYW4gdGltZSB2YWx1ZSBhY2NvcmRpbmcgdG8gdGhlIHBpY3R1cmVcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiZGF0YVN0clwiPiAgIFRoZSBzb3VyY2UgZGF0YTwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJwaWNTdHJcIj4gICAgVGhlIHBpY3R1cmUgdG8gdXNlIGZvciB0aGUgdmFsdWUgdG8gZGlzcGxheTwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPiB0aGUgc3RyaW5nIHRvIGJlIGRpc3BsYXllZDwvcmV0dXJucz5cclxuICBmcm9tVGltZShkYXRhU3RyOiBzdHJpbmcsIHBpYzogUElDLCB0aW1lX2RhdGVfcGljX1pfZWR0OiBib29sZWFuKTogc3RyaW5nIHtcclxuICAgIGxldCBtYXNrOiBzdHJpbmcgPSBwaWMuZ2V0TWFzaygpO1xyXG4gICAgbGV0IG1hc2tTaXplOiBudW1iZXIgPSBwaWMuZ2V0TWFza1NpemUoKTtcclxuICAgIGxldCB0aW1lOiBudW1iZXIgPSBuZXcgTlVNX1RZUEUoZGF0YVN0cikuTlVNXzJfVUxPTkcoKTtcclxuICAgIHJldHVybiB0aGlzLnRpbWVfMl9hX3BpYyhtYXNrLCBtYXNrU2l6ZSwgdGltZSwgcGljLCB0aW1lX2RhdGVfcGljX1pfZWR0LCBmYWxzZSk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgQnVpbGQgYSBkaXNwbGF5IHN0cmluZyBmb3IgdGhlIGRhdGUgdmFsdWUgYWNjb3JkaW5nIHRvIHRoZSBwaWN0dXJlXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImRhdGFTdHJcIj4gICBUaGUgc291cmNlIGRhdGE8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwicGljU3RyXCI+ICAgIFRoZSBwaWN0dXJlIHRvIHVzZSBmb3IgdGhlIHZhbHVlIHRvIGRpc3BsYXk8L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz4gdGhlIHN0cmluZyB0byBiZSBkaXNwbGF5ZWQ8L3JldHVybnM+XHJcbiAgZnJvbU1nRGF0ZVRvTmF0aXZlRGF0ZShkYXRhU3RyOiBzdHJpbmcsIHBpYzogUElDLCBjb21wSWR4OiBudW1iZXIpOiBEYXRlIHtcclxuXHJcbiAgICBsZXQgZGF0ZTogbnVtYmVyID0gbmV3IE5VTV9UWVBFKGRhdGFTdHIpLk5VTV8yX1VMT05HKCk7XHJcbiAgICBsZXQgYnJlYWtQYXJhbXM6IERhdGVCcmVha1BhcmFtcztcclxuLy8gQnJlYWsgZGF0YSBpbnRvIGl0cyBjb21wb25lbnRzXHJcbiAgICBicmVha1BhcmFtcyA9IG5ldyBEYXRlQnJlYWtQYXJhbXMoKTtcclxuICAgIHRoaXMuZGF0ZV9icmVha19kYXRlbW9kZShicmVha1BhcmFtcywgZGF0ZSwgZmFsc2UsIGNvbXBJZHgpO1xyXG4gICAgaWYgKGJyZWFrUGFyYW1zLm1vbnRoID4gMClcclxuICAgICAgYnJlYWtQYXJhbXMubW9udGggPSBicmVha1BhcmFtcy5tb250aCAtIDE7IC8vbW9udGggaXMgMCBiYXNlZCBpbiBEYXRlIGNsYXNzXHJcblxyXG4gICAgaWYgKGJyZWFrUGFyYW1zLnllYXIgPT0gMCAmJiBicmVha1BhcmFtcy5tb250aCA9PSAwICYmIGJyZWFrUGFyYW1zLmRheSA9PSAwKVxyXG4gICAgICByZXR1cm4gbnVsbDtcclxuXHJcbiAgICByZXR1cm4gbmV3IERhdGUoYnJlYWtQYXJhbXMueWVhciwgYnJlYWtQYXJhbXMubW9udGgsIGJyZWFrUGFyYW1zLmRheSk7XHJcbiAgfVxyXG5cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIEJ1aWxkIGEgZGlzcGxheSBzdHJpbmcgZm9yIGFuIGRhdGUgdmFsdWUgYWNjb3JkaW5nIHRvIHRoZSBwaWN0dXJlXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImRhdGFTdHJcIj4gICBUaGUgc291cmNlIGRhdGE8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwicGljU3RyXCI+ICAgIFRoZSBwaWN0dXJlIHRvIHVzZSBmb3IgdGhlIHZhbHVlIHRvIGRpc3BsYXk8L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz4gdGhlIHN0cmluZyB0byBiZSBkaXNwbGF5ZWQ8L3JldHVybnM+XHJcbiAgZnJvbU5hdGl2ZURhdGVUb01nRGF0ZU51bWJlcihuYXRpdmVEYXRlOiBEYXRlLCBwaWM6IFBJQyk6IG51bWJlciB7XHJcbiAgICBsZXQgbnVtVmFsOiBudW1iZXI7XHJcbiAgICBsZXQgZGF0ZVBhcmFtczogRGF0ZUJyZWFrUGFyYW1zO1xyXG4gICAgbGV0IG1pbGxlbml1bTogbnVtYmVyID0gMDtcclxuICAgIGxldCB5ZWFyOiBudW1iZXIgPSBuYXRpdmVEYXRlLmdldEZ1bGxZZWFyKCk7XHJcbiAgICBsZXQgZGF5OiBudW1iZXIgPSBuYXRpdmVEYXRlLmdldERhdGUoKTtcclxuICAgIGxldCBtb250aDogbnVtYmVyID0gbmF0aXZlRGF0ZS5nZXRNb250aCgpICsgMTtcclxuXHJcbiAgICAvLyBIZWJyZXcgWWVhclxyXG4gICAgaWYgKHBpYy5pc0hlYnJldygpKSB7XHJcbiAgICAgIGlmICh5ZWFyID4gMCkge1xyXG4gICAgICAgIGlmIChtaWxsZW5pdW0gPT09IDApXHJcbiAgICAgICAgICBtaWxsZW5pdW0gPSA1O1xyXG4gICAgICAgIHllYXIgKz0gbWlsbGVuaXVtICogMTAwMDtcclxuICAgICAgfVxyXG4gICAgICBudW1WYWwgPSAoSGVicmV3RGF0ZS5kYXRlaGViXzJfZCh5ZWFyLCBtb250aCwgZGF5KSk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgLy8gdGhlIG5leHQgMiBsaW5lcyBzdXBwb3J0IDQueHggREQvTU0gcGljdHVyZXNcclxuICAgICAgaWYgKHllYXIgPT09IDApIHtcclxuICAgICAgICBkYXRlUGFyYW1zID0gdGhpcy5kYXRlX3N5cygpO1xyXG4gICAgICAgIHllYXIgPSBkYXRlUGFyYW1zLnllYXI7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIG51bVZhbCA9IHRoaXMuZGF0ZV80X2NhbGVuZGVyKHllYXIsIG1vbnRoLCBkYXksIDAsIGZhbHNlKTsgICAgLy8gd2UgYXJlIGFkZGluZyBhIGxpdHRsZSBlbXB0eSBzcGFjZSB0byB0aGUgdmFyaWFibGUsIGJlY2F1c2Ugd2UgbWlnaHQgbGF0ZXJcclxuICAgIH1cclxuICAgIHJldHVybiBudW1WYWw7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgQnVpbGQgYSBkaXNwbGF5IHN0cmluZyBmb3IgYW4gZGF0ZSB2YWx1ZSBhY2NvcmRpbmcgdG8gdGhlIHBpY3R1cmVcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiZGF0YVN0clwiPiAgIFRoZSBzb3VyY2UgZGF0YTwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJwaWNTdHJcIj4gICAgVGhlIHBpY3R1cmUgdG8gdXNlIGZvciB0aGUgdmFsdWUgdG8gZGlzcGxheTwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPiB0aGUgc3RyaW5nIHRvIGJlIGRpc3BsYXllZDwvcmV0dXJucz5cclxuICBmcm9tTmF0aXZlRGF0ZVRvTWdEYXRlKG5hdGl2ZURhdGU6IERhdGUsIHBpYzogUElDKTogc3RyaW5nIHtcclxuXHJcbiAgICBsZXQgbWdOdW06IE5VTV9UWVBFID0gbmV3IE5VTV9UWVBFKCk7XHJcbiAgICBsZXQgbnVtVmFsOiBudW1iZXIgPSBuYXRpdmVEYXRlID09IG51bGwgPyAwIDogdGhpcy5mcm9tTmF0aXZlRGF0ZVRvTWdEYXRlTnVtYmVyKG5hdGl2ZURhdGUsIHBpYyk7XHJcbiAgICBtZ051bS5OVU1fNF9MT05HKG51bVZhbCk7XHJcblxyXG4gICAgcmV0dXJuIG1nTnVtLnRvWE1McmVjb3JkKCk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgSGFuZGxlIGRhdGUgdmFsdWVcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwib3V0U3RyXCI+ICAgICAgICAgIFRoZSBtYXNrIHRvIGJlIHVzZWRcclxuICAvLy8gPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcIm91dF9sZW5cIj4gICAgICAgICBNYXNrIGxlbmd0aFxyXG4gIC8vLyA8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwicGljXCI+ICAgICAgICAgICAgIFRoZSBwaWN1cmUgaW5mb3JtYXRpb25cclxuICAvLy8gPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImRhdGVfcGljX1pfZWR0XCI+XHJcbiAgLy8vIDwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJpZ25vcmVfZHRfZm10XCI+XHJcbiAgLy8vIDwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPiB0aGUgc3RyaW5nIHRvIGJlIGRpc3BsYXllZFxyXG4gIC8vLyA8L3JldHVybnM+XHJcbiAgdG9fYV9waWNfZGF0ZW1vZGUob3V0U3RyOiBzdHJpbmcsIG91dF9sZW46IG51bWJlciwgZGF0ZTogbnVtYmVyLCBwaWM6IFBJQywgZGF0ZV9waWNfWl9lZHQ6IGJvb2xlYW4sIGlnbm9yZV9kdF9mbXQ6IGJvb2xlYW4sIGNvbXBJZHg6IG51bWJlcik6IHN0cmluZyB7XHJcbiAgICBsZXQgbGVuOiBudW1iZXI7XHJcbiAgICBsZXQgZGF5OiBudW1iZXIgPSAwO1xyXG4gICAgbGV0IGRveTogbnVtYmVyID0gMDtcclxuICAgIGxldCBkb3c6IG51bWJlciA9IDA7XHJcbiAgICBsZXQgeWVhcjogbnVtYmVyID0gMDtcclxuICAgIGxldCBtb250aDogbnVtYmVyID0gMDtcclxuICAgIGxldCBoZGF5OiBudW1iZXIgPSAwO1xyXG4gICAgbGV0IGh5ZWFyOiBudW1iZXIgPSAwO1xyXG4gICAgbGV0IGhtb250aDogbnVtYmVyID0gMDtcclxuICAgIGxldCBsZWFwOiBCb29sZWFuID0gZmFsc2U7XHJcbiAgICBsZXQgaTogbnVtYmVyO1xyXG4gICAgbGV0IHA6IHN0cmluZ1tdO1xyXG4gICAgbGV0IG91dFZhbDogc3RyaW5nW10gPSBOU3RyaW5nLlRvQ2hhckFycmF5KG91dFN0cik7XHJcbiAgICBsZXQgYnJlYWtQYXJhbXM6IERhdGVCcmVha1BhcmFtcztcclxuICAgIGxldCBkYXRlTmFtZVBhcmFtczogRGF0ZU5hbWVQYXJhbXM7XHJcbiAgICBsZXQgb3V0SWR4OiBudW1iZXIgPSAwO1xyXG4gICAgbGV0IHN0ck91dDogc3RyaW5nID0gbnVsbDtcclxuXHJcbiAgICAvLyBJZiByZXN1bHQgb3ZlcmZsb3dzIHJldHVybiBidWZmZXIsIGZpbGwgd2l0aCBhc3Rlcml4cyBhbmQgYmFpbCBvdXRcclxuICAgIGlmIChwaWMuZ2V0TWFza1NpemUoKSA+IG91dF9sZW4pIHtcclxuICAgICAgZm9yICg7IGkgPCBvdXRfbGVuOyBpKyspXHJcbiAgICAgICAgb3V0VmFsW2ldID0gJyonO1xyXG4gICAgICByZXR1cm4gTlN0cmluZy5Gcm9tQ2hhcnMob3V0VmFsKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBJZiB6ZXJvIGZpbGwgcmVxdWVzdGVkIGFuZCBkYXRlIHZhbHVlIGlzIHplcm8sIGZpbGwgaXQgYW5kIGJhaWwgb3V0XHJcbiAgICBvdXRfbGVuID0gbGVuID0gcGljLmdldE1hc2tTaXplKCk7XHJcbiAgICBpZiAocGljLnplcm9GaWxsKCkgJiYgZGF0ZSA9PT0gMCAmJiAhZGF0ZV9waWNfWl9lZHQpIHtcclxuICAgICAgZm9yICg7IGkgPCBvdXRfbGVuOyBpKyspXHJcbiAgICAgICAgb3V0VmFsW2ldID0gcGljLmdldFplcm9QYWQoKTtcclxuICAgICAgcmV0dXJuIE5TdHJpbmcuRnJvbUNoYXJzKG91dFZhbCk7XHJcbiAgICB9XHJcbiAgICBpZiAocGljLmlzSGVicmV3KCkgJiYgKGRhdGUgPT09IDAgfHwgZGF0ZSA9PT0gMTAwMDAwMDAwMCkpIHtcclxuICAgICAgZm9yICg7IGkgPCBvdXRfbGVuOyBpKyspXHJcbiAgICAgICAgb3V0VmFsW2ldID0gJyAnO1xyXG4gICAgICByZXR1cm4gTlN0cmluZy5Gcm9tQ2hhcnMob3V0VmFsKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBCcmVhayBkYXRhIGludG8gaXRzIGNvbXBvbmVudHNcclxuICAgIGJyZWFrUGFyYW1zID0gbmV3IERhdGVCcmVha1BhcmFtcyh5ZWFyLCBtb250aCwgZGF5LCBkb3ksIGRvdyk7XHJcbiAgICB0aGlzLmRhdGVfYnJlYWtfZGF0ZW1vZGUoYnJlYWtQYXJhbXMsIGRhdGUsIGlnbm9yZV9kdF9mbXQsIGNvbXBJZHgpO1xyXG4gICAgaWYgKHBpYy5pc0hlYnJldygpKSB7XHJcbiAgICAgIGxldCByZWZoZGF5OiBSZWZQYXJhbTxudW1iZXI+ID0gbmV3IFJlZlBhcmFtPG51bWJlcj4oaGRheSk7XHJcbiAgICAgIGxldCByZWZobW9udGg6IFJlZlBhcmFtPG51bWJlcj4gPSBuZXcgUmVmUGFyYW08bnVtYmVyPihobW9udGgpO1xyXG4gICAgICBsZXQgcmVmaHllYXI6IFJlZlBhcmFtPG51bWJlcj4gPSBuZXcgUmVmUGFyYW08bnVtYmVyPihoeWVhcik7XHJcbiAgICAgIGxlYXAgPSBIZWJyZXdEYXRlLmRhdGVoZWJfNF9kKGRhdGUsIHJlZmhkYXksIHJlZmhtb250aCwgcmVmaHllYXIpO1xyXG5cclxuICAgICAgaGRheSA9IHJlZmhkYXkudmFsdWU7XHJcbiAgICAgIGhtb250aCA9IHJlZmhtb250aC52YWx1ZTtcclxuICAgICAgaHllYXIgPSByZWZoeWVhci52YWx1ZTtcclxuICAgIH1cclxuXHJcbiAgICB5ZWFyID0gYnJlYWtQYXJhbXMueWVhcjtcclxuICAgIG1vbnRoID0gYnJlYWtQYXJhbXMubW9udGg7XHJcbiAgICBkYXkgPSBicmVha1BhcmFtcy5kYXk7XHJcbiAgICBkb3kgPSBicmVha1BhcmFtcy5kb3k7XHJcbiAgICBkb3cgPSBicmVha1BhcmFtcy5kb3c7XHJcbiAgICBicmVha1BhcmFtcyA9IG51bGw7XHJcbiAgICB3aGlsZSAobGVuID4gMCkge1xyXG4gICAgICBsZXQgcmVmT3V0TGVuOiBSZWZQYXJhbTxudW1iZXI+ID0gbmV3IFJlZlBhcmFtPG51bWJlcj4ob3V0X2xlbik7XHJcbiAgICAgIHN3aXRjaCAob3V0VmFsW291dElkeF0uY2hhckNvZGVBdCgwKSkge1xyXG4gICAgICAgIGNhc2UgUElDSW50ZXJmYWNlLlBJQ19ZWTpcclxuICAgICAgICAgIGlmIChwaWMuemVyb0ZpbGwoKSAmJiBkYXRlID09PSAwICYmIGRhdGVfcGljX1pfZWR0KVxyXG4gICAgICAgICAgICBNZW1vcnlVdGlsLmNoYXJfbWVtc2V0KG91dFZhbCwgb3V0SWR4LCBwaWMuZ2V0WmVyb1BhZCgpLCAyKTtcclxuICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgdGhpcy5pbnRfMl9hKG91dFZhbCwgb3V0SWR4LCAyLCB5ZWFyLCAnMCcpO1xyXG4gICAgICAgICAgb3V0SWR4ICs9IDI7XHJcbiAgICAgICAgICBsZW4gLT0gMjtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgUElDSW50ZXJmYWNlLlBJQ19IWVlZWVk6XHJcbiAgICAgICAgICBpID0gSGVicmV3RGF0ZS5kYXRlaGViXzJfc3RyKG91dFZhbCwgb3V0SWR4LCBsZW4sIHJlZk91dExlbiwgNSwgaHllYXIsIHBpYy5pc1RyaW1lZCgpLCB0cnVlKTtcclxuICAgICAgICAgIG91dF9sZW4gPSByZWZPdXRMZW4udmFsdWU7XHJcbiAgICAgICAgICBvdXRJZHggKz0gaTtcclxuICAgICAgICAgIGxlbiAtPSBpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBQSUNJbnRlcmZhY2UuUElDX0hMOlxyXG4gICAgICAgICAgaSA9IEhlYnJld0RhdGUuZGF0ZWhlYl9pXzJfaCgoaHllYXIgLyAxMDAwKSAlIDEwLCBvdXRWYWwsIG91dElkeCwgZmFsc2UsIGZhbHNlKTtcclxuICAgICAgICAgIG91dElkeCsrO1xyXG4gICAgICAgICAgbGVuLS07XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIFBJQ0ludGVyZmFjZS5QSUNfSEREOlxyXG4gICAgICAgICAgaSA9IEhlYnJld0RhdGUuZGF0ZWhlYl8yX3N0cihvdXRWYWwsIG91dElkeCwgbGVuLCByZWZPdXRMZW4sIDIsIGhkYXksIHBpYy5pc1RyaW1lZCgpLCBmYWxzZSk7XHJcbiAgICAgICAgICBvdXRfbGVuID0gcmVmT3V0TGVuLnZhbHVlO1xyXG4gICAgICAgICAgb3V0SWR4ICs9IGk7XHJcbiAgICAgICAgICBsZW4gLT0gaTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgUElDSW50ZXJmYWNlLlBJQ19ZWVlZOlxyXG4gICAgICAgICAgaWYgKHBpYy56ZXJvRmlsbCgpICYmIGRhdGUgPT09IDAgJiYgZGF0ZV9waWNfWl9lZHQpXHJcbiAgICAgICAgICAgIE1lbW9yeVV0aWwuY2hhcl9tZW1zZXQob3V0VmFsLCBvdXRJZHgsIHBpYy5nZXRaZXJvUGFkKCksIDQpO1xyXG4gICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICB0aGlzLmludF8yX2Eob3V0VmFsLCBvdXRJZHgsIDQsIHllYXIsICcwJyk7XHJcbiAgICAgICAgICBvdXRJZHggKz0gNDtcclxuICAgICAgICAgIGxlbiAtPSA0O1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBQSUNJbnRlcmZhY2UuUElDX01NRDpcclxuICAgICAgICAgIGlmIChwaWMuemVyb0ZpbGwoKSAmJiBkYXRlID09PSAwICYmIGRhdGVfcGljX1pfZWR0KVxyXG4gICAgICAgICAgICBNZW1vcnlVdGlsLmNoYXJfbWVtc2V0KG91dFZhbCwgb3V0SWR4LCBwaWMuZ2V0WmVyb1BhZCgpLCAyKTtcclxuICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgdGhpcy5pbnRfMl9hKG91dFZhbCwgb3V0SWR4LCAyLCBtb250aCwgJzAnKTtcclxuICAgICAgICAgIG91dElkeCArPSAyO1xyXG4gICAgICAgICAgbGVuIC09IDI7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIFBJQ0ludGVyZmFjZS5QSUNfTU1NOlxyXG4gICAgICAgICAgaWYgKHBpYy5pc0hlYnJldygpKSB7XHJcbiAgICAgICAgICAgIGlmIChsZWFwICYmIGhtb250aCA9PT0gNilcclxuICAgICAgICAgICAgICBobW9udGggPSAxNDtcclxuICAgICAgICAgICAgbGV0IG1vbnRoTmFtZXM6IHN0cmluZ1tdID0gSGVicmV3RGF0ZS5HZXRMb2NhbE1vbnRocygpO1xyXG4gICAgICAgICAgICBwID0gTlN0cmluZy5Ub0NoYXJBcnJheShtb250aE5hbWVzW2htb250aF0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGxldCBtb250aFN0cjogc3RyaW5nID0gRXZlbnRzLkdldE1lc3NhZ2VTdHJpbmcoTXNnSW50ZXJmYWNlLk1PTlRIU19QVFIpO1xyXG4gICAgICAgICAgICBsZXQgbW9udGhOYW1lczogc3RyaW5nW10gPSBEYXRlVXRpbC5nZXRMb2NhbE1vbnRocyhtb250aFN0cik7XHJcbiAgICAgICAgICAgIHAgPSBOU3RyaW5nLlRvQ2hhckFycmF5KG1vbnRoTmFtZXNbbW9udGhdKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGRhdGVOYW1lUGFyYW1zID0gbmV3IERhdGVOYW1lUGFyYW1zKG91dFZhbCwgb3V0SWR4LCBsZW4pO1xyXG4gICAgICAgICAgb3V0X2xlbiAtPSB0aGlzLmRhdGVfaV8yX25tKGRhdGVOYW1lUGFyYW1zLCBwLCBwaWMuaXNUcmltZWQoKSk7XHJcbiAgICAgICAgICBvdXRJZHggPSBkYXRlTmFtZVBhcmFtcy5vdXRJZHg7XHJcbiAgICAgICAgICBsZW4gPSBkYXRlTmFtZVBhcmFtcy5sZW47XHJcbiAgICAgICAgICBkYXRlTmFtZVBhcmFtcyA9IG51bGw7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIFBJQ0ludGVyZmFjZS5QSUNfREQ6XHJcbiAgICAgICAgICBsZXQgaXNaZXJvOiBib29sZWFuID0gcGljLnplcm9GaWxsKCk7XHJcbiAgICAgICAgICBpZiAoaXNaZXJvICYmIGRhdGUgPT09IDAgJiYgZGF0ZV9waWNfWl9lZHQpXHJcbiAgICAgICAgICAgIE1lbW9yeVV0aWwuY2hhcl9tZW1zZXQob3V0VmFsLCBvdXRJZHgsIHBpYy5nZXRaZXJvUGFkKCksIDIpO1xyXG4gICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICB0aGlzLmludF8yX2Eob3V0VmFsLCBvdXRJZHgsIDIsIGRheSwgJzAnKTtcclxuICAgICAgICAgIG91dElkeCArPSAyO1xyXG4gICAgICAgICAgbGVuIC09IDI7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIFBJQ0ludGVyZmFjZS5QSUNfREREOlxyXG4gICAgICAgICAgaWYgKHBpYy56ZXJvRmlsbCgpICYmIGRhdGUgPT09IDAgJiYgZGF0ZV9waWNfWl9lZHQpXHJcbiAgICAgICAgICAgIE1lbW9yeVV0aWwuY2hhcl9tZW1zZXQob3V0VmFsLCBvdXRJZHgsIHBpYy5nZXRaZXJvUGFkKCksIDMpO1xyXG4gICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICB0aGlzLmludF8yX2Eob3V0VmFsLCBvdXRJZHgsIDMsIGRveSwgJzAnKTtcclxuICAgICAgICAgIGxlbiAtPSAzO1xyXG4gICAgICAgICAgb3V0SWR4ICs9IDM7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIFBJQ0ludGVyZmFjZS5QSUNfRERERDpcclxuICAgICAgICAgIGkgPSB0aGlzLmRhdGVfMl9EREREKGRheSwgb3V0VmFsLCBvdXRJZHgsIGxlbiwgcGljLmlzVHJpbWVkKCkpO1xyXG4gICAgICAgICAgb3V0SWR4ICs9IGk7XHJcbiAgICAgICAgICBvdXRfbGVuICs9IGkgLSA0O1xyXG4gICAgICAgICAgbGVuIC09IDQ7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIFBJQ0ludGVyZmFjZS5QSUNfVzpcclxuICAgICAgICAgIGlmIChwaWMuemVyb0ZpbGwoKSAmJiBkYXRlID09PSAwICYmIGRhdGVfcGljX1pfZWR0KVxyXG4gICAgICAgICAgICBNZW1vcnlVdGlsLmNoYXJfbWVtc2V0KG91dFZhbCwgb3V0SWR4LCBwaWMuZ2V0WmVyb1BhZCgpLCAxKTtcclxuICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgdGhpcy5pbnRfMl9hKG91dFZhbCwgb3V0SWR4LCAxLCBkb3csICcwJyk7XHJcbiAgICAgICAgICBsZW4tLTtcclxuICAgICAgICAgIG91dElkeCsrO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBQSUNJbnRlcmZhY2UuUElDX1dXVzpcclxuICAgICAgICAgIGlmIChwaWMuaXNIZWJyZXcoKSkge1xyXG4gICAgICAgICAgICBsZXQgZG93c05hbWVzOiBzdHJpbmdbXSA9IEhlYnJld0RhdGUuR2V0TG9jYWxEb3dzKCk7XHJcbiAgICAgICAgICAgIHAgPSBOU3RyaW5nLlRvQ2hhckFycmF5KGRvd3NOYW1lc1tkb3ddKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBsZXQgZGF5U3RyOiBzdHJpbmcgPSBFdmVudHMuR2V0TWVzc2FnZVN0cmluZyhNc2dJbnRlcmZhY2UuREFZU19QVFIpO1xyXG4gICAgICAgICAgICBsZXQgZGF5TmFtZXM6IHN0cmluZ1tdID0gRGF0ZVV0aWwuZ2V0TG9jYWxEYXlzKGRheVN0cik7XHJcbiAgICAgICAgICAgIHAgPSBOU3RyaW5nLlRvQ2hhckFycmF5KGRheU5hbWVzW2Rvd10pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZGF0ZU5hbWVQYXJhbXMgPSBuZXcgRGF0ZU5hbWVQYXJhbXMob3V0VmFsLCBvdXRJZHgsIGxlbik7XHJcbiAgICAgICAgICBvdXRfbGVuIC09IHRoaXMuZGF0ZV9pXzJfbm0oZGF0ZU5hbWVQYXJhbXMsIHAsIHBpYy5pc1RyaW1lZCgpKTtcclxuICAgICAgICAgIG91dElkeCA9IGRhdGVOYW1lUGFyYW1zLm91dElkeDtcclxuICAgICAgICAgIGxlbiA9IGRhdGVOYW1lUGFyYW1zLmxlbjtcclxuICAgICAgICAgIGRhdGVOYW1lUGFyYW1zID0gbnVsbDtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgUElDSW50ZXJmYWNlLlBJQ19CQjogLy8gSlBOOiBKYXBhbmVzZSBkYXRlIHBpY3R1cmUgc3VwcG9ydFxyXG4gICAgICAgICAgLy8gSmFwYW5lc2UgZGF5IG9mIHRoZSB3ZWVrXHJcbiAgICAgICAgICBwID0gTlN0cmluZy5Ub0NoYXJBcnJheShVdGlsRGF0ZUpwbi5nZXRTdHJEb3coZG93KSk7XHJcbiAgICAgICAgICBzdHJPdXQgPSBudWxsO1xyXG4gICAgICAgICAgZGF0ZU5hbWVQYXJhbXMgPSBuZXcgRGF0ZU5hbWVQYXJhbXMob3V0VmFsLCBvdXRJZHgsIGxlbik7XHJcbiAgICAgICAgICBzdHJPdXQgPSB0aGlzLmRhdGVfaV8yX25tX2J5dGVtb2RlKHN0ck91dCwgZGF0ZU5hbWVQYXJhbXMsIE5TdHJpbmcuRnJvbUNoYXJzKHApLCBvdXRfbGVuKTtcclxuICAgICAgICAgIG91dFZhbCA9IG5ldyBBcnJheShzdHJPdXQubGVuZ3RoKTtcclxuICAgICAgICAgIE5TdHJpbmcuQ29weVRvKHN0ck91dCwgMCwgb3V0VmFsLCAwLCBzdHJPdXQubGVuZ3RoKTtcclxuXHJcbiAgICAgICAgICBvdXRJZHggPSBkYXRlTmFtZVBhcmFtcy5vdXRJZHg7XHJcbiAgICAgICAgICBsZW4gPSBkYXRlTmFtZVBhcmFtcy5sZW47XHJcbiAgICAgICAgICBzdHJPdXQgPSBudWxsO1xyXG4gICAgICAgICAgZGF0ZU5hbWVQYXJhbXMgPSBudWxsO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBQSUNJbnRlcmZhY2UuUElDX0pZMTpcclxuICAgICAgICBjYXNlIFBJQ0ludGVyZmFjZS5QSUNfSlkyOlxyXG4gICAgICAgIGNhc2UgUElDSW50ZXJmYWNlLlBJQ19KWTQ6XHJcbiAgICAgICAgICAvLyBKYXBhbmVzZSB0aGUgbmFtZSBvZiBhbiBlcmFcclxuICAgICAgICAgIGxldCBzdHJOdW06IHN0cmluZyA9IG51bGw7XHJcbiAgICAgICAgICBpZiAob3V0VmFsW291dElkeF0uY2hhckNvZGVBdCgwKSA9PT0gUElDSW50ZXJmYWNlLlBJQ19KWTEpXHJcbiAgICAgICAgICAgIHN0ck51bSA9IFV0aWxEYXRlSnBuLmdldEluc3RhbmNlKCkuZGF0ZV9qcG5feXJfMl9hKHllYXIsIGRveSwgZmFsc2UpO1xyXG4gICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICBzdHJOdW0gPSBVdGlsRGF0ZUpwbi5nZXRJbnN0YW5jZSgpLmRhdGVfanBuX3lyXzJfYSh5ZWFyLCBkb3ksIHRydWUpO1xyXG4gICAgICAgICAgc3RyT3V0ID0gbnVsbDtcclxuICAgICAgICAgIGRhdGVOYW1lUGFyYW1zID0gbmV3IERhdGVOYW1lUGFyYW1zKG91dFZhbCwgb3V0SWR4LCBsZW4pO1xyXG4gICAgICAgICAgc3RyT3V0ID0gdGhpcy5kYXRlX2lfMl9ubV9ieXRlbW9kZShzdHJPdXQsIGRhdGVOYW1lUGFyYW1zLCBzdHJOdW0sIG91dF9sZW4pO1xyXG4gICAgICAgICAgb3V0VmFsID0gbnVsbDtcclxuICAgICAgICAgIG91dFZhbCA9IG5ldyBBcnJheShzdHJPdXQubGVuZ3RoKTtcclxuICAgICAgICAgIE5TdHJpbmcuQ29weVRvKHN0ck91dCwgMCwgb3V0VmFsLCAwLCBzdHJPdXQubGVuZ3RoKTtcclxuICAgICAgICAgIG91dElkeCA9IGRhdGVOYW1lUGFyYW1zLm91dElkeDtcclxuICAgICAgICAgIGxlbiA9IGRhdGVOYW1lUGFyYW1zLmxlbjtcclxuICAgICAgICAgIHN0ck91dCA9IG51bGw7XHJcbiAgICAgICAgICBkYXRlTmFtZVBhcmFtcyA9IG51bGw7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIFBJQ0ludGVyZmFjZS5QSUNfWUo6XHJcbiAgICAgICAgICBpZiAocGljLnplcm9GaWxsKCkgJiYgZGF0ZSA9PT0gMCAmJiBkYXRlX3BpY19aX2VkdClcclxuICAgICAgICAgICAgTWVtb3J5VXRpbC5jaGFyX21lbXNldChvdXRWYWwsIG91dElkeCwgcGljLmdldFplcm9QYWQoKSwgMik7XHJcbiAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgIHRoaXMuaW50XzJfYShvdXRWYWwsIG91dElkeCwgMiwgVXRpbERhdGVKcG4uZ2V0SW5zdGFuY2UoKS5kYXRlX2pwbl95ZWFyX29mcyh5ZWFyLCBkb3kpLCAnMCcpO1xyXG4gICAgICAgICAgb3V0SWR4ICs9IDI7XHJcbiAgICAgICAgICBsZW4gLT0gMjtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICBvdXRJZHgrKztcclxuICAgICAgICAgIGxlbi0tO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGlmIChvdXRfbGVuIDwgb3V0VmFsLmxlbmd0aClcclxuICAgICAgTWVtb3J5VXRpbC5jaGFyX21lbXNldChvdXRWYWwsIG91dF9sZW4sICcgJywgb3V0VmFsLmxlbmd0aCAtIG91dF9sZW4pO1xyXG5cclxuICAgIHJldHVybiBOU3RyaW5nLkZyb21DaGFycyhvdXRWYWwpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIEJyZWFrIGEgZGF0ZSBpbnRvIFllYXIsIE1vbnRoLCBEYXkgaW4gbW9udGgsIERheSBpbiB5ZWFyIGFuZCBEYXkgaW4gd2Vla1xyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgZGF0ZV9icmVha19kYXRlbW9kZShicmVha1BhcmFtczogRGF0ZUJyZWFrUGFyYW1zLCBkYXRlOiBudW1iZXIsIGlnbm9yZV9kdF9mbXQ6IGJvb2xlYW4sIGNvbXBJZHg6IG51bWJlcik6IHZvaWQge1xyXG5cclxuICAgIGxldCB5ZWFyOiBudW1iZXIgPSBicmVha1BhcmFtcy55ZWFyO1xyXG4gICAgbGV0IG1vbnRoOiBudW1iZXIgPSBicmVha1BhcmFtcy5tb250aDtcclxuICAgIGxldCBkYXk6IG51bWJlciA9IGJyZWFrUGFyYW1zLmRheTtcclxuICAgIGxldCBkb3k6IG51bWJlciA9IGJyZWFrUGFyYW1zLmRveTtcclxuICAgIGxldCBkb3c6IG51bWJlciA9IGJyZWFrUGFyYW1zLmRvdztcclxuXHJcbiAgICBpZiAoZGF0ZSA8PSAwKSB7XHJcbiAgICAgIGJyZWFrUGFyYW1zLmRheSA9IDA7XHJcbiAgICAgIGJyZWFrUGFyYW1zLmRveSA9IDA7XHJcbiAgICAgIGJyZWFrUGFyYW1zLmRvdyA9IDA7XHJcbiAgICAgIGJyZWFrUGFyYW1zLnllYXIgPSAwO1xyXG4gICAgICBicmVha1BhcmFtcy5tb250aCA9IDA7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgZG93ID0gZGF0ZSAlIDcgKyAxO1xyXG4gICAgICBkYXRlID0gZGF0ZSAtIDE7XHJcbiAgICAgIGxldCBjZW50NDogbnVtYmVyID0gTWF0aC5mbG9vcihkYXRlIC8gUElDSW50ZXJmYWNlLkRBWVNJTkZPVVJDRU5UKTtcclxuICAgICAgZGF0ZSA9IGRhdGUgLSBjZW50NCAqIFBJQ0ludGVyZmFjZS5EQVlTSU5GT1VSQ0VOVDtcclxuICAgICAgbGV0IGNlbnQ6IG51bWJlciA9IE1hdGguZmxvb3IoZGF0ZSAvIFBJQ0ludGVyZmFjZS5EQVlTSU5DRU5UVVJZKTtcclxuICAgICAgaWYgKGNlbnQgPiAzKSB7XHJcbiAgICAgICAgY2VudCA9IDM7XHJcbiAgICAgIH1cclxuICAgICAgZGF0ZSA9IGRhdGUgLSBjZW50ICogUElDSW50ZXJmYWNlLkRBWVNJTkNFTlRVUlk7XHJcbiAgICAgIGxldCB5ZWFyNDogbnVtYmVyID0gTWF0aC5mbG9vcihkYXRlIC8gUElDSW50ZXJmYWNlLkRBWVNJTkZPVVJZRUFSKTtcclxuICAgICAgZGF0ZSA9IGRhdGUgLSB5ZWFyNCAqIFBJQ0ludGVyZmFjZS5EQVlTSU5GT1VSWUVBUjtcclxuICAgICAgeWVhciA9IE1hdGguZmxvb3IoZGF0ZSAvIFBJQ0ludGVyZmFjZS5EQVlTSU5ZRUFSKTtcclxuICAgICAgaWYgKHllYXIgPiAzKSB7XHJcbiAgICAgICAgeWVhciA9IDM7XHJcbiAgICAgIH1cclxuICAgICAgZGF0ZSA9IGRhdGUgLSB5ZWFyICogUElDSW50ZXJmYWNlLkRBWVNJTllFQVI7XHJcbiAgICAgIHllYXIgPSBjZW50NCAqIDQwMCArIGNlbnQgKiAxMDAgKyB5ZWFyNCAqIDQgKyB5ZWFyICsgMTtcclxuICAgICAgbGV0IGxlYXB5ZWFyOiBudW1iZXIgPSAwO1xyXG4gICAgICBpZiAoeWVhciAlIDQgPT09IDApIHtcclxuICAgICAgICBpZiAoeWVhciAlIDEwMCAhPT0gMCB8fCB5ZWFyICUgNDAwID09PSAwKSB7XHJcbiAgICAgICAgICBsZWFweWVhciA9IDE7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoIWlnbm9yZV9kdF9mbXQgJiYgdGhpcy5fZW52aXJvbm1lbnQuR2V0RGF0ZU1vZGUoY29tcElkeCkgPT09ICdCJykge1xyXG4gICAgICAgIHllYXIgPSB5ZWFyICsgUElDSW50ZXJmYWNlLkRBVEVfQlVEREhJU1RfR0FQO1xyXG4gICAgICB9XHJcbiAgICAgIG1vbnRoID0gKE1hdGguZmxvb3IoZGF0ZSAvIFBJQ0ludGVyZmFjZS5EQVlTSU5NT05USCkgKyAxKTtcclxuICAgICAgZGF5ID0gUElDSW50ZXJmYWNlLmRhdGVfZGF5X3RhYlttb250aF07XHJcbiAgICAgIGlmIChsZWFweWVhciA+IDApIHtcclxuICAgICAgICBpZiAobW9udGggPiAxKSB7XHJcbiAgICAgICAgICBkYXkgPSBkYXkgKyAxO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKGRhdGUgPj0gZGF5KSB7XHJcbiAgICAgICAgbW9udGggPSBtb250aCArIDE7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgZGF5ID0gUElDSW50ZXJmYWNlLmRhdGVfZGF5X3RhYlttb250aCAtIDFdO1xyXG4gICAgICAgIGlmIChsZWFweWVhciA+IDApIHtcclxuICAgICAgICAgIGlmIChtb250aCA+IDIpIHtcclxuICAgICAgICAgICAgZGF5ID0gZGF5ICsgMTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgZGF5ID0gZGF0ZSAtIGRheSArIDE7XHJcbiAgICAgIGRveSA9IGRhdGUgKyAxO1xyXG4gICAgICBicmVha1BhcmFtcy55ZWFyID0geWVhcjtcclxuICAgICAgYnJlYWtQYXJhbXMubW9udGggPSBtb250aDtcclxuICAgICAgYnJlYWtQYXJhbXMuZGF5ID0gZGF5O1xyXG4gICAgICBicmVha1BhcmFtcy5kb3kgPSBkb3k7XHJcbiAgICAgIGJyZWFrUGFyYW1zLmRvdyA9IGRvdztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBnZXQgYWxwaGEgc3RyaW5nIGZyb20gaW50IHZhbHVlXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInN0clwiPiAgICAgdGhlIG91dHB1dCBzdHJpbmcgKGFzIGFuIGNoYXIgYXJyYXkpXHJcbiAgLy8vIDwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJzdHJQb3NcIj4gIHN0YXJ0aW5nIHBvc2l0aW9uXHJcbiAgLy8vIDwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJsZW5cIj4gICAgIHN0cmluZyBsZW5ndGhcclxuICAvLy8gPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcIm5cIj4gICAgICAgdGhlIG51bWJlciB0byBjb252ZXJ0XHJcbiAgLy8vIDwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJsZWFkXCI+ICAgIGxlYWRpbmcgY2hhcmFjdGVyXHJcbiAgLy8vIDwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPiB0aGUgcmVzdWx0IHN0cmluZyBsZW5ndGhcclxuICAvLy8gPC9yZXR1cm5zPlxyXG4gIHByaXZhdGUgaW50XzJfYShzdHI6IHN0cmluZ1tdLCBzdHJQb3M6IG51bWJlciwgbGVuOiBudW1iZXIsIG46IG51bWJlciwgbGVhZDogc3RyaW5nKTogbnVtYmVyIHtcclxuICAgIGxldCBuZWc6IGJvb2xlYW4gPSBuIDwgMDtcclxuXHJcbiAgICBpZiAobGVuIDw9IDApXHJcbiAgICAgIHJldHVybjtcclxuXHJcbiAgICBuID0gTWF0aC5hYnMobik7XHJcbiAgICBsZXQgcG9zOiBudW1iZXIgPSBsZW47XHJcblxyXG4gICAgZG8ge1xyXG4gICAgICBzdHJbc3RyUG9zICsgKHBvcyA9IHBvcyAtIDEpXSA9IFN0cmluZy5mcm9tQ2hhckNvZGUoNDggKyBuICUgMTApO1xyXG4gICAgICBuID0gTWF0aC5mbG9vcihuIC8gMTApO1xyXG4gICAgfVxyXG4gICAgd2hpbGUgKHBvcyA+IDAgJiYgbiA+IDApO1xyXG5cclxuICAgIGlmIChuZWcgJiYgcG9zID4gMCkge1xyXG4gICAgICBzdHJbc3RyUG9zICsgKHBvcyA9IHBvcyAtIDEpXSA9ICctJy8qJy0nKi87XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpcy5saWJfYV9maWxsKHN0ciwgc3RyUG9zLCBsZW4sIHBvcywgbGVhZC5jaGFyQ29kZUF0KDApKTtcclxuXHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgRmlsbCB0aGUgY2hhciBhcnJheSBmb3IgdGhlIGNvbnZlcnRpbmcgb2YgaW50LT5zdHJpbmdcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwic3RyXCI+ICAgICB0aGUgb3V0cHV0IHN0cmluZyAoYXMgYW4gY2hhciBhcnJheSlcclxuICAvLy8gPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInN0clBvc1wiPiAgc3RhcnRpbmcgcG9zaXRpb25cclxuICAvLy8gPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImxlblwiPiAgICAgc3RyaW5nIGxlbmd0aFxyXG4gIC8vLyA8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwibGVhZFwiPiAgICBsZWFkaW5nIGNoYXJhY3RlclxyXG4gIC8vLyA8L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz4gdGhlIHJlc3VsdCBzdHJpbmcgbGVuZ3RoXHJcbiAgLy8vIDwvcmV0dXJucz5cclxuICBwcml2YXRlIGxpYl9hX2ZpbGwoc3RyOiBzdHJpbmdbXSwgc3RyUG9zOiBudW1iZXIsIGxlbjogbnVtYmVyLCBwb3M6IG51bWJlciwgbGVhZDogbnVtYmVyKTogbnVtYmVyIHtcclxuXHJcbiAgICBpZiAobGVhZCA9PT0gMCkge1xyXG4gICAgICBsZW4gPSBsZW4gLSBwb3M7XHJcblxyXG4gICAgICBpZiAobGVuID4gMCAmJiBwb3MgPiAwKSB7XHJcbiAgICAgICAgTWVtb3J5VXRpbC5jaGFyX21lbWNweShzdHIsIHN0clBvcywgc3RyLCBwb3MsIGxlbik7XHJcbiAgICAgICAgTWVtb3J5VXRpbC5jaGFyX21lbXNldChzdHIsIHN0clBvcyArIGxlbiwgJyAnLCAvKicgJyovcG9zKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIGlmIChwb3MgPiAwKSB7XHJcbiAgICAgICAgTWVtb3J5VXRpbC5jaGFyX21lbXNldChzdHIsIHN0clBvcywgU3RyaW5nLmZyb21DaGFyQ29kZShsZWFkKSwgcG9zKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGxlbjtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBDb252ZXJ0IGluZGV4IHRvIE5hbWVcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiZGF0ZU5hbWVQYXJhbXNcIj4gIG91dHB1dCBzdGluZyBkZXRhaWxzXHJcbiAgLy8vIDwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJubVwiPiAgICAgICAgICAgICAgbmFtZVxyXG4gIC8vLyA8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwidHJpbVwiPiAgICAgICAgICAgIG91dHB1dCBzdHJpbmcgc2hvdWxkIGJlIHRyaW1lZFxyXG4gIC8vLyA8L3BhcmFtPlxyXG4gIC8vLyA8L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz4gdGhlIGxlbmd0aCBvZiB0aGUgc3RyaW5nXHJcbiAgLy8vIDwvcmV0dXJucz5cclxuICBwcml2YXRlIGRhdGVfaV8yX25tKGRhdGVOYW1lUGFyYW1zOiBEYXRlTmFtZVBhcmFtcywgbm06IHN0cmluZ1tdLCB0cmltOiBib29sZWFuKTogbnVtYmVyIHtcclxuXHJcbiAgICBsZXQgbjogbnVtYmVyID0gdGhpcy5kYXRlX21za19jbnQoZGF0ZU5hbWVQYXJhbXMub3V0VmFsLCBkYXRlTmFtZVBhcmFtcy5vdXRJZHgsIDxudW1iZXI+ZGF0ZU5hbWVQYXJhbXMubGVuKTtcclxuICAgIGxldCBsOiBudW1iZXI7XHJcbiAgICBpZiAodHJpbSkge1xyXG4gICAgICBsID0gTWVtb3J5VXRpbC5tZW1fdHJpbShubSwgMCwgbik7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgbCA9IG47XHJcbiAgICB9XHJcbiAgICBsID0gTWF0aC5taW4obCwgZGF0ZU5hbWVQYXJhbXMubGVuKTtcclxuICAgIE1lbW9yeVV0aWwuY2hhcl9tZW1jcHkoZGF0ZU5hbWVQYXJhbXMub3V0VmFsLCBkYXRlTmFtZVBhcmFtcy5vdXRJZHgsIG5tLCAwLCBsKTtcclxuICAgIGRhdGVOYW1lUGFyYW1zLm91dElkeCA9IGRhdGVOYW1lUGFyYW1zLm91dElkeCArIGw7XHJcbiAgICBkYXRlTmFtZVBhcmFtcy5sZW4gPSBkYXRlTmFtZVBhcmFtcy5sZW4gLSBuO1xyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyBUcmltZWQgPyBKdW1wIG90aGVyIHRyaW1lZCBtYXNrIDogbm90aGluZ1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBuID0gbiAtIGw7XHJcblxyXG4gICAgaWYgKG4gPiAwKSB7XHJcbiAgICAgIE1lbW9yeVV0aWwuY2hhcl9tZW1jcHkoZGF0ZU5hbWVQYXJhbXMub3V0VmFsLCBkYXRlTmFtZVBhcmFtcy5vdXRJZHgsIGRhdGVOYW1lUGFyYW1zLm91dFZhbCwgZGF0ZU5hbWVQYXJhbXMub3V0SWR4ICsgbiwgZGF0ZU5hbWVQYXJhbXMubGVuKTtcclxuICAgIH1cclxuICAgIHJldHVybiA8bnVtYmVyPm47XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgSlBOOiBKYXBhbmVzZSBkYXRlIHBpY3R1cmUgc3VwcG9ydFxyXG4gIC8vLyAgIENvbnZlcnQgaW5kZXggdG8gTmFtZVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJzdHJPdXRcIj4gICAgICAgICAgb3V0cHV0IHN0aW5nIChvcmlnaW5hbClcclxuICAvLy8gPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImRhdGVOYW1lUGFyYW1zXCI+ICBvdXRwdXQgc3RpbmcgZGV0YWlsc1xyXG4gIC8vLyA8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwic3RyTm1cIj4gICAgICAgICAgIG5hbWUgd2hpY2ggd2lsbCBiZSBlbWJlZGRlZCBpbiBvdXRwdXQgc3RyaW5nXHJcbiAgLy8vIDwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJpbnRPdXRMZW5cIj4gICAgICAgdGhlIHJlbWFpbmluZyBsZW5ndGggb2YgdGhlIG91dHB1dCBzdHJpbmdcclxuICAvLy8gPC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+ICAgICAgICAgICAgICAgICBvdXRwdXQgc3RpbmcgKHByb2Nlc3NlZClcclxuICAvLy8gPC9yZXR1cm5zPlxyXG4gIHByaXZhdGUgZGF0ZV9pXzJfbm1fYnl0ZW1vZGUoc3RyT3V0OiBzdHJpbmcsIGRhdGVOYW1lUGFyYW1zOiBEYXRlTmFtZVBhcmFtcywgc3RyTm06IHN0cmluZywgaW50T3V0TGVuOiBudW1iZXIpOiBzdHJpbmcge1xyXG4gICAgbGV0IGludE1za0NudDogbnVtYmVyID0gdGhpcy5kYXRlX21za19jbnQoZGF0ZU5hbWVQYXJhbXMub3V0VmFsLCBkYXRlTmFtZVBhcmFtcy5vdXRJZHgsIDxudW1iZXI+ZGF0ZU5hbWVQYXJhbXMubGVuKTtcclxuICAgIGxldCBzdHJXb3JrOiBzdHJpbmcgPSBOU3RyaW5nLkZyb21DaGFycyhkYXRlTmFtZVBhcmFtcy5vdXRWYWwpO1xyXG5cclxuICAgIHN0cldvcmsgPSBzdHJXb3JrLnN1YnN0cigwLCBkYXRlTmFtZVBhcmFtcy5vdXRJZHgpO1xyXG5cclxuICAgIGxldCBpbnRPZnM6IG51bWJlciA9IFV0aWxTdHJCeXRlTW9kZS5sZW5CKHN0cldvcmspO1xyXG4gICAgc3RyTm0gPSBVdGlsU3RyQnl0ZU1vZGUubGVmdEIoc3RyTm0sIGludE1za0NudCk7XHJcbiAgICBzdHJPdXQgPSBVdGlsU3RyQnl0ZU1vZGUucmVwQihOU3RyaW5nLkZyb21DaGFycyhkYXRlTmFtZVBhcmFtcy5vdXRWYWwpLCBzdHJObSwgaW50T2ZzICsgMSwgaW50TXNrQ250KTtcclxuXHJcbiAgICBkYXRlTmFtZVBhcmFtcy5vdXRJZHggPSBkYXRlTmFtZVBhcmFtcy5vdXRJZHggKyBzdHJObS5sZW5ndGg7XHJcbiAgICBkYXRlTmFtZVBhcmFtcy5sZW4gPSBkYXRlTmFtZVBhcmFtcy5sZW4gLSBpbnRNc2tDbnQ7XHJcbiAgICBpbnRPdXRMZW4gPSBpbnRPdXRMZW4gLSBpbnRNc2tDbnQ7XHJcbiAgICByZXR1cm4gc3RyT3V0O1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIFJldHVybiBOIG9mIGNvbnNlY3V0aXZlIE1hc2sgY2hhcmFjdGVyc1xyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJtc2tcIj4gICAgIHRoZSBtYXNrIHRvIGNoZWNrXHJcbiAgLy8vIDwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJtc2tQb3NcIj4gIGluZGV4IG9mIGZpcnN0IGNoYXIgdG8gY2hlY2tcclxuICAvLy8gPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImxlblwiPiAgICAgbGVuZ3RoIG9mIHRoZSBtYXNrXHJcbiAgLy8vIDwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPiBudW1iZXIgb2YgY29uc2VjdXRpdmUgTWFzayBjaGFyYWN0ZXJzXHJcbiAgLy8vIDwvcmV0dXJucz5cclxuICBwcml2YXRlIGRhdGVfbXNrX2NudChtc2s6IHN0cmluZ1tdLCBtc2tQb3M6IG51bWJlciwgbGVuOiBudW1iZXIpOiBudW1iZXIge1xyXG4gICAgbGV0IGM6IHN0cmluZyA9IG1za1ttc2tQb3MrK107XHJcbiAgICBsZXQgaTogbnVtYmVyID0gMTtcclxuICAgIHdoaWxlICg8bnVtYmVyPmkgPCBsZW4pIHtcclxuICAgICAgaWYgKG1za1ttc2tQb3NdICE9PSBjKSB7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgICAgbXNrUG9zID0gbXNrUG9zICsgMTtcclxuICAgICAgaSA9IGkgKyAxO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgQ29tcHV0ZSBEYXkgbmFtZVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgcHJpdmF0ZSBkYXRlXzJfRERERChkYXk6IG51bWJlciwgb3V0VmFsOiBzdHJpbmdbXSwgb3V0SWR4OiBudW1iZXIsIGxlbjogbnVtYmVyLCB0cmltOiBib29sZWFuKTogbnVtYmVyIHtcclxuXHJcblxyXG4gICAgbGV0IHJldDogbnVtYmVyID0gNDtcclxuICAgIGxldCBleHQ6IHN0cmluZ1tdO1xyXG5cclxuICAgIGlmIChkYXkgPiA5KSB7XHJcbiAgICAgIHRoaXMuaW50XzJfYShvdXRWYWwsIG91dElkeCwgMiwgZGF5LCAoPG51bWJlcj4wKS50b1N0cmluZygpKTtcclxuICAgICAgb3V0SWR4ICs9IDI7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgaWYgKHRyaW0pIHtcclxuICAgICAgICBNZW1vcnlVdGlsLmNoYXJfbWVtY3B5KG91dFZhbCwgb3V0SWR4LCBvdXRWYWwsIG91dElkeCArIDEsIGxlbiAtIDEpO1xyXG4gICAgICAgIC8qMTctTWF5LTkwKi9cclxuICAgICAgICByZXQtLTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICAvLyAqKG91dCsrKSA9ICcgJzsgLy8gT3JpZ2luYWwgTGluZVxyXG4gICAgICAgIG91dFZhbFtvdXRJZHgrK10gPSAnICc7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5pbnRfMl9hKG91dFZhbCwgb3V0SWR4LCAxLCBkYXksICg8bnVtYmVyPjApLnRvU3RyaW5nKCkpO1xyXG4gICAgICBvdXRJZHgrKztcclxuICAgIH1cclxuICAgIHN3aXRjaCAoZGF5KSB7XHJcbiAgICAgIGNhc2UgMTpcclxuICAgICAgY2FzZSAyMTpcclxuICAgICAgY2FzZSAzMTpcclxuICAgICAgICBleHQgPSBOU3RyaW5nLlRvQ2hhckFycmF5KFwic3RcIik7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIDI6XHJcbiAgICAgIGNhc2UgMjI6XHJcbiAgICAgICAgZXh0ID0gTlN0cmluZy5Ub0NoYXJBcnJheShcIm5kXCIpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSAzOlxyXG4gICAgICBjYXNlIDIzOlxyXG4gICAgICAgIGV4dCA9IE5TdHJpbmcuVG9DaGFyQXJyYXkoXCJyZFwiKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgZXh0ID0gTlN0cmluZy5Ub0NoYXJBcnJheShcInRoXCIpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gICAgb3V0VmFsW291dElkeCsrXSA9IGV4dFswXTtcclxuICAgIG91dFZhbFtvdXRJZHhdID0gZXh0WzFdO1xyXG5cclxuICAgIHJldHVybiAocmV0KTtcclxuXHJcbiAgfVxyXG5cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIEJ1aWxkIGEgZGlzcGxheSBzdHJpbmcgZm9yIGFuIHRpbWUgdmFsdWUgYWNjb3JkaW5nIHRvIHRoZSBwaWN0dXJlXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImRhdGFTdHJcIj4gICBUaGUgc291cmNlIGRhdGE8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwicGljU3RyXCI+ICAgIFRoZSBwaWN0dXJlIHRvIHVzZSBmb3IgdGhlIHZhbHVlIHRvIGRpc3BsYXk8L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz4gdGhlIHN0cmluZyB0byBiZSBkaXNwbGF5ZWQ8L3JldHVybnM+XHJcbiAgZnJvbU1nVGltZVRvTmF0aXZlVGltZShkYXRhU3RyOiBzdHJpbmcsIHBpYzogUElDKTogRGF0ZSB7XHJcbiAgICBsZXQgdGltZTogbnVtYmVyID0gbmV3IE5VTV9UWVBFKGRhdGFTdHIpLk5VTV8yX1VMT05HKCk7XHJcblxyXG5cclxuICAgICAgbGV0IGJyZWFrUGFyYW1zOiBUaW1lQnJlYWtQYXJhbXMgPSBuZXcgVGltZUJyZWFrUGFyYW1zKCk7XHJcblxyXG4gICAgICBEaXNwbGF5Q29udmVydG9yLnRpbWVfYnJlYWsoYnJlYWtQYXJhbXMsIHRpbWUpO1xyXG5cclxuICAgICAgbGV0IG5hdGl2ZUR0OiBEYXRlID0gbmV3IERhdGUoKTtcclxuXHJcbiAgICAgIG5hdGl2ZUR0LnNldEhvdXJzKGJyZWFrUGFyYW1zLmhvdXIpO1xyXG4gICAgICBuYXRpdmVEdC5zZXRNaW51dGVzKGJyZWFrUGFyYW1zLm1pbnV0ZSk7XHJcbiAgICAgIG5hdGl2ZUR0LnNldFNlY29uZHMoYnJlYWtQYXJhbXMuc2Vjb25kKTtcclxuICAgICAgcmV0dXJuIG5hdGl2ZUR0O1xyXG5cclxuXHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgSGFuZGxlIHRpbWUgdmFsdWVcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiQXNjaWlTdHJcIj4gICAgICAgIFRoZSBtYXNrIHRvIGJlIHVzZWQ8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiQXNjaWlMXCI+ICAgICAgICAgIE1hc2sgbGVuZ3RoPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInBpY1wiPiAgICAgICAgICAgICBUaGUgcGljdXJlIGluZm9ybWF0aW9uPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInRpbWVfcGljX1pfZWR0XCI+PC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInNlY29uZHNcIj4vIG1pbGxpU2Vjb25kcyBmbGFnPC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+IHRoZSBzdHJpbmcgdG8gYmUgZGlzcGxheWVkXHJcbiAgLy8vIDwvcmV0dXJucz5cclxuICBwcml2YXRlIHRpbWVfMl9hX3BpYyhBc2NpaVN0cjogc3RyaW5nLCBBc2NpaUw6IG51bWJlciwgdGltZTogbnVtYmVyLCBwaWM6IFBJQywgdGltZV9waWNfWl9lZHQ6IGJvb2xlYW4sIG1pbGxpU2Vjb25kczogYm9vbGVhbik6IHN0cmluZyB7XHJcblxyXG4gICAgLy8gT3JpZ2luYWwgdmFyc1xyXG4gICAgbGV0IGhvdXI6IG51bWJlciA9IDA7XHJcbiAgICBsZXQgbWludXRlOiBudW1iZXIgPSAwO1xyXG4gICAgbGV0IHNlY29uZDogbnVtYmVyID0gMDtcclxuICAgIGxldCBtaWxsaXNlYzogbnVtYmVyID0gMDtcclxuXHJcbiAgICBsZXQgQXNjaWk6IHN0cmluZ1tdID0gTlN0cmluZy5Ub0NoYXJBcnJheShBc2NpaVN0cik7XHJcbiAgICBsZXQgYnJlYWtQYXJhbXM6IFRpbWVCcmVha1BhcmFtcyA9IG5ldyBUaW1lQnJlYWtQYXJhbXMoaG91ciwgbWludXRlLCBzZWNvbmQpO1xyXG4gICAgbGV0IHRpbWVTZWM6IG51bWJlcjtcclxuICAgIGlmIChtaWxsaVNlY29uZHMpIHtcclxuICAgICAgdGltZVNlYyA9IE1hdGguZmxvb3IodGltZSAvIDEwMDApO1xyXG4gICAgICBtaWxsaXNlYyA9IHRpbWUgLSB0aW1lU2VjICogMTAwMDtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICB0aW1lU2VjID0gdGltZTtcclxuICAgIH1cclxuXHJcbiAgICBEaXNwbGF5Q29udmVydG9yLnRpbWVfYnJlYWsoYnJlYWtQYXJhbXMsIHRpbWVTZWMpO1xyXG4gICAgaG91ciA9IGJyZWFrUGFyYW1zLmhvdXI7XHJcbiAgICBtaW51dGUgPSBicmVha1BhcmFtcy5taW51dGU7XHJcbiAgICBzZWNvbmQgPSBicmVha1BhcmFtcy5zZWNvbmQ7XHJcblxyXG4gICAgLy8gSWYgYXNjaWkgcmVwcmVzZW50YXRpb24gb3ZlcmZsb3dzIG91dHB1dCBidWZmZXJcclxuICAgIC8vIGZpbGwgd2l0aCAnKicgYW5kIGJhaWwgb3V0XHJcblxyXG4gICAgbGV0IHJlc3VsdDogc3RyaW5nO1xyXG4gICAgaWYgKHBpYy5nZXRNYXNrU2l6ZSgpID4gQXNjaWlMKSB7XHJcbiAgICAgIE1lbW9yeVV0aWwuY2hhcl9tZW1zZXQoQXNjaWksIDAsICcqJywgLyonKicqL0FzY2lpTCk7XHJcbiAgICAgIHJlc3VsdCA9IE5TdHJpbmcuRnJvbUNoYXJzKEFzY2lpKTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICBpZiAocGljLnplcm9GaWxsKCkpIHtcclxuICAgICAgICBpZiAodGltZVNlYyA9PT0gMCAmJiAoIW1pbGxpU2Vjb25kcyB8fCBtaWxsaXNlYyA9PT0gMCkpIHtcclxuICAgICAgICAgIGlmICh0aW1lX3BpY19aX2VkdCkge1xyXG4gICAgICAgICAgICBmb3IgKGxldCBpbnR4OiBudW1iZXIgPSAwOyBpbnR4IDwgcGljLmdldE1hc2tTaXplKCk7IGludHggPSBpbnR4ICsgMSkge1xyXG4gICAgICAgICAgICAgIGlmIChBc2NpaVtpbnR4XSA8PSAnXFx1MDAxZicpIHtcclxuICAgICAgICAgICAgICAgIEFzY2lpW2ludHhdID0gcGljLmdldFplcm9QYWQoKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmVzdWx0ID0gTlN0cmluZy5Gcm9tQ2hhcnMoQXNjaWkpO1xyXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgTWVtb3J5VXRpbC5jaGFyX21lbXNldChBc2NpaSwgMCwgcGljLmdldFplcm9QYWQoKSwgcGljLmdldE1hc2tTaXplKCkpO1xyXG4gICAgICAgICAgcmVzdWx0ID0gTlN0cmluZy5Gcm9tQ2hhcnMoQXNjaWkpO1xyXG4gICAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgbGV0IEk6IG51bWJlciA9IDA7XHJcbiAgICAgIGxldCBhbTogbnVtYmVyID0gMDtcclxuICAgICAgbGV0IGxlbjogbnVtYmVyID0gcGljLmdldE1hc2tTaXplKCk7XHJcbiAgICAgIGxldCBIb3VySTogbnVtYmVyID0gLTE7XHJcblxyXG4gICAgICB3aGlsZSAoSSA8IGxlbikge1xyXG4gICAgICAgIHN3aXRjaCAoQXNjaWlbSV0uY2hhckNvZGVBdCgwKSkge1xyXG4gICAgICAgICAgY2FzZSAoUElDSW50ZXJmYWNlLlBJQ19ISCk6XHJcbiAgICAgICAgICAgIEhvdXJJID0gSTtcclxuICAgICAgICAgICAgSSArPSAyO1xyXG4gICAgICAgICAgICBicmVhaztcclxuXHJcblxyXG4gICAgICAgICAgY2FzZSAoUElDSW50ZXJmYWNlLlBJQ19NTVQpOlxyXG4gICAgICAgICAgICB0aGlzLmludF8yX2EoQXNjaWksIEksIDIsIG1pbnV0ZSwgJzAnKTtcclxuICAgICAgICAgICAgSSArPSAyO1xyXG4gICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICBjYXNlIChQSUNJbnRlcmZhY2UuUElDX1NTKTpcclxuICAgICAgICAgICAgdGhpcy5pbnRfMl9hKEFzY2lpLCBJLCAyLCBzZWNvbmQsICcwJyk7XHJcbiAgICAgICAgICAgIEkgKz0gMjtcclxuICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgY2FzZSAoUElDSW50ZXJmYWNlLlBJQ19NUyk6XHJcbiAgICAgICAgICAgIHRoaXMuaW50XzJfYShBc2NpaSwgSSwgMywgbWlsbGlzZWMsICcwJyk7XHJcbiAgICAgICAgICAgIEkgKz0gMztcclxuICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgY2FzZSAoUElDSW50ZXJmYWNlLlBJQ19QTSk6XHJcbiAgICAgICAgICAgIGFtID0gMTtcclxuICAgICAgICAgICAgbGV0IHRtcEhvdXI6IG51bWJlciA9IGhvdXIgJSAyNDtcclxuICAgICAgICAgICAgaWYgKHRtcEhvdXIgPCAxMiB8fCB0bXBIb3VyID09PSAwKVxyXG4gICAgICAgICAgICAgIE1lbW9yeVV0aWwuY2hhcl9tZW1jcHkoQXNjaWksIEksIE5TdHJpbmcuVG9DaGFyQXJyYXkoXCJhbVwiKSwgMCwgMik7XHJcbiAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICBNZW1vcnlVdGlsLmNoYXJfbWVtY3B5KEFzY2lpLCBJLCBOU3RyaW5nLlRvQ2hhckFycmF5KFwicG1cIiksIDAsIDIpO1xyXG4gICAgICAgICAgICBJICs9IDI7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgIEkrKztcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGlmIChIb3VySSA+PSAwKSB7XHJcbiAgICAgICAgaWYgKGFtID4gMCkge1xyXG4gICAgICAgICAgaG91ciA9IGhvdXIgJSAyNDtcclxuICAgICAgICAgIGlmIChob3VyID09PSAwKSB7XHJcbiAgICAgICAgICAgIGhvdXIgPSAxMjtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBob3VyID0gaG91ciAlIDEyO1xyXG4gICAgICAgICAgICBpZiAoaG91ciA9PT0gMCkge1xyXG4gICAgICAgICAgICAgIGhvdXIgPSAxMjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmludF8yX2EoQXNjaWksIEhvdXJJLCAyLCBob3VyLCAoYW0gIT09IDAgJiYgaG91ciA8IDEwKSA/ICcgJyA6IC8qJyAnKi8nMCcvKicwJyovKTtcclxuICAgICAgfVxyXG4gICAgICByZXN1bHQgPSBOU3RyaW5nLkZyb21DaGFycyhBc2NpaSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIEJyZWFrIHRpbWUgaW50byBpdHMgY29tcG9uZW50c1xyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgc3RhdGljIHRpbWVfYnJlYWsoYnJlYWtQYXJhbXM6IFRpbWVCcmVha1BhcmFtcywgdGltZTogbnVtYmVyKTogdm9pZCB7XHJcblxyXG4gICAgaWYgKHRpbWUgPD0gMCkge1xyXG4gICAgICBicmVha1BhcmFtcy5zZWNvbmQgPSAwO1xyXG4gICAgICBicmVha1BhcmFtcy5taW51dGUgPSAwO1xyXG4gICAgICBicmVha1BhcmFtcy5ob3VyID0gMDtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICBicmVha1BhcmFtcy5ob3VyID0gTWF0aC5mbG9vcih0aW1lIC8gMzYwMCk7XHJcbiAgICAgIHRpbWUgPSB0aW1lIC0gYnJlYWtQYXJhbXMuaG91ciAqIDM2MDA7XHJcbiAgICAgIGJyZWFrUGFyYW1zLm1pbnV0ZSA9IE1hdGguZmxvb3IodGltZSAvIDYwKTtcclxuICAgICAgYnJlYWtQYXJhbXMuc2Vjb25kID0gdGltZSAtIGJyZWFrUGFyYW1zLm1pbnV0ZSAqIDYwO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIEJ1aWxkIGEgZGlzcGxheSBzdHJpbmcgZm9yIGEgbG9naWNhbCB2YWx1ZSBhY2NvcmRpbmcgdG8gdGhlIHBpY3R1cmVcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiZGF0YVN0clwiPiAgIFwiMFwiIGZvciBmYWxzZSBvciBcIjFcIiBmb3IgdHJ1ZVxyXG4gIC8vLyA8L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz4gYm9vbGVhblxyXG4gIC8vLyA8L3JldHVybnM+XHJcbiAgcHJpdmF0ZSBmcm9tTWdMb2dpY2FsVG9OYXRpdmVMb2dpY2FsKGRhdGFTdHI6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG5cclxuICAgIGxldCBuYXRpdmVWYWw6IGJvb2xlYW47XHJcbiAgICBuYXRpdmVWYWwgPSAoZGF0YVN0ci5jaGFyQXQoMCkgPT09ICcxJykgPyB0cnVlIDogZmFsc2U7XHJcbiAgICByZXR1cm4gbmF0aXZlVmFsO1xyXG4gIH1cclxuXHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBCdWlsZCBhIG1nIHN0cmluZyBmb3IgYSBsb2dpY2FsIHZhbHVlIGFjY29yZGluZyB0byB0aGUgYm9vbGVhbiB2YWx1ZVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJkaXNwVmFsXCI+ICBib29sZWFuXHJcbiAgLy8vIDwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPiBzdHJpbmdcclxuICAvLy8gPC9yZXR1cm5zPlxyXG4gIHByaXZhdGUgZnJvbU5hdGl2ZUxvZ2ljYWxUb01nTG9naWNhbChkaXNwVmFsOiBib29sZWFuKTogc3RyaW5nIHtcclxuXHJcbiAgICBsZXQgbWdWYWw6IHN0cmluZztcclxuICAgIG1nVmFsID0gKGRpc3BWYWwgPT09IHRydWUpID8gXCIxXCIgOiBcIjBcIjtcclxuXHJcbiAgICByZXR1cm4gbWdWYWw7XHJcbiAgfVxyXG5cclxuXHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBHZXQgdGhlIGRlZmF1bHQgcmFuZ2UgZm9yIGxvZ2ljYWwgdmFsdWVzXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInJuZ1wiPiAgY3VycmVudCByYW5nZTwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPiB0aGUgZGVmYXVsdCByYW5nZSBpZiB0aGUgaW5wdXQgcmFuZ2UgaXMgZW1wdHk8L3JldHVybnM+XHJcbiAgcHJpdmF0ZSB3aW5fcm5nX2Jvb2wocm5nOiBzdHJpbmcpOiBzdHJpbmcge1xyXG5cclxuICAgIGlmIChybmcgPT09IG51bGwgfHwgcm5nLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICBybmcgPSBcIlRydWUsIEZhbHNlXCI7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcm5nO1xyXG4gIH1cclxuXHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gTWV0aG9kcyBmb3IgY292ZXJ0aW5nIERJUExBWSAtLS0+IElOVEVSTkFMXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIFRyYW5zbGF0ZXMgYSBzdHJpbmcgbnVtYmVyIHRvIG1hZ2ljIG51bWJlclxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJkaXNwVmFsdWVcIj4gICBBIHN0cmluZyBudW1iZXI8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwicGljU3RyXCI+ICAgICAgVGhlIHBpY3R1cmUgdG8gdXNlPC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+IHRoZSBtYWdpYyBudW1iZXI8L3JldHVybnM+XHJcbiAgdG9OdW0oZGlzcFZhbHVlOiBzdHJpbmcsIHBpYzogUElDLCBjb21wSWR4OiBudW1iZXIpOiBzdHJpbmcge1xyXG4gICAgbGV0IG1nTnVtOiBOVU1fVFlQRSA9IG5ldyBOVU1fVFlQRShkaXNwVmFsdWUsIHBpYywgY29tcElkeCk7XHJcbiAgICByZXR1cm4gbWdOdW0udG9YTUxyZWNvcmQoKTtcclxuICB9XHJcblxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgYnVpbGRzIHRoZSBkYXRlIG1hZ2ljIG51bWJlciBmcm9tIHRoZSBzdHJpbmcgdmFsdWVcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwic3RyXCI+ICAgICAgICAgICAgdGhlIGRhdGUgc3RyaW5nPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInN0cl9sZW5cIj4gICAgICAgIGxlbmd0aCBvZiBzdHJpbmc8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwicGljXCI+ICAgICAgICAgICAgdGhlIHBpY3R1cmUgaW5mbzwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJtYXNrXCI+ICAgICAgICAgICB0aGUgbWFzayBvZiB0aGUgc3RyaW5nPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImlnbm9yZV9kdF9mbXRcIj48L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz4gdGhlIG1hZ2ljIG51bWJlcjwvcmV0dXJucz5cclxuICBhXzJfZGF0ZV9waWNfZGF0ZW1vZGUoc3RyOiBzdHJpbmdbXSwgc3RyX2xlbjogbnVtYmVyLCBwaWM6IFBJQywgbWFzazogc3RyaW5nW10sIGNvbXBJZHg6IG51bWJlcik6IG51bWJlciB7XHJcbiAgICBsZXQgcG9zOiBudW1iZXIgPSAwO1xyXG4gICAgbGV0IHllYXJfaW5fcGljOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBsZXQgbW9udGhfaW5fcGljOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBsZXQgZGF5X2luX3BpYzogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgbGV0IGlucDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgbGV0IGJZZWFySXNaZXJvOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBsZXQgZXJhX3llYXI6IG51bWJlciA9IDA7XHJcbiAgICBsZXQgaW50UmVmOiBJbnRSZWYgPSBuZXcgSW50UmVmKDApO1xyXG4gICAgbGV0IGludFBpY0lkeE9mczogbnVtYmVyID0gMDtcclxuICAgIGxldCBtaWxsZW5pdW06IG51bWJlciA9IDA7XHJcbiAgICBsZXQgZGF0ZVBhcmFtczogRGF0ZUJyZWFrUGFyYW1zO1xyXG5cclxuICAgIGxldCBsZW46IG51bWJlciA9IE1hdGgubWluKHN0ci5sZW5ndGgsIHBpYy5nZXRNYXNrU2l6ZSgpKTtcclxuXHJcbiAgICBpZiAoc3RyLmxlbmd0aCA8IG1hc2subGVuZ3RoKVxyXG4gICAgICBzdHIubGVuZ3RoID0gbWFzay5sZW5ndGg7XHJcblxyXG4gICAgbGV0IHllYXI6IG51bWJlciA9IDA7XHJcbiAgICBsZXQgbW9udGg6IG51bWJlciA9IDE7XHJcbiAgICBsZXQgZGF5OiBudW1iZXIgPSAxO1xyXG4gICAgbGV0IGRveTogbnVtYmVyID0gMTtcclxuICAgIGxldCB1c2Vkb3k6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgICBsZXQgaTogbnVtYmVyO1xyXG4gICAgZm9yIChpID0gMDsgaSA8IHN0cl9sZW47IGkgPSBpICsgMSkge1xyXG4gICAgICBpZiAoc3RyW2ldICE9PSAnMCcgJiYgc3RyW2ldICE9PSAnICcpIHtcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmIChpID09PSBzdHJfbGVuKVxyXG4gICAgICByZXR1cm4gMDtcclxuXHJcbiAgICB3aGlsZSAocG9zIDwgc3RyX2xlbiAmJiBwb3MgKyBpbnRQaWNJZHhPZnMgPCBsZW4pIHtcclxuXHJcbiAgICAgIHN3aXRjaCAobWFza1twb3MgKyBpbnRQaWNJZHhPZnNdLmNoYXJDb2RlQXQoMCkpIHtcclxuICAgICAgICBjYXNlIFBJQ0ludGVyZmFjZS5QSUNfWVk6XHJcbiAgICAgICAgICB5ZWFyX2luX3BpYyA9IHRydWU7XHJcbiAgICAgICAgICBpbnAgPSB0cnVlO1xyXG4gICAgICAgICAgeWVhciA9IHRoaXMuZGF0ZV9hXzJfaShzdHIsIDIsIHBvcyk7XHJcbiAgICAgICAgICBwb3MgKz0gMjtcclxuICAgICAgICAgIC8vIEhlbiAxNi8xMS85NyA6IEZpeCAjNzY4NDQyXHJcbiAgICAgICAgICBpZiAoeWVhciA9PT0gMClcclxuICAgICAgICAgICAgYlllYXJJc1plcm8gPSB0cnVlO1xyXG4gICAgICAgICAgbGV0IGNlbnR1cnlfeWVhcjogbnVtYmVyID0gdGhpcy5fZW52aXJvbm1lbnQuR2V0Q2VudHVyeShjb21wSWR4KSAlIDEwMDsgLy8gREVGX2NlbnR1cnlcclxuICAgICAgICAgIGlmICh5ZWFyIDwgY2VudHVyeV95ZWFyKVxyXG4gICAgICAgICAgICB5ZWFyICs9IDEwMDtcclxuICAgICAgICAgIHllYXIgKz0gdGhpcy5fZW52aXJvbm1lbnQuR2V0Q2VudHVyeShjb21wSWR4KSAtIGNlbnR1cnlfeWVhcjsgLy8gREVGX2NlbnR1cnlcclxuICAgICAgICAgIGlmICh0aGlzLl9lbnZpcm9ubWVudC5HZXREYXRlTW9kZShjb21wSWR4KSA9PT0gJ0InKVxyXG4gICAgICAgICAgLy8gREVGX2RhdGVfbW9kZVxyXG4gICAgICAgICAgICB5ZWFyIC09IFBJQ0ludGVyZmFjZS5EQVRFX0JVRERISVNUX0dBUDtcclxuICAgICAgICAgIGJyZWFrO1xyXG5cclxuXHJcbiAgICAgICAgY2FzZSAoUElDSW50ZXJmYWNlLlBJQ19ZWVlZKTpcclxuICAgICAgICAgIHllYXJfaW5fcGljID0gdHJ1ZTtcclxuICAgICAgICAgIGlucCA9IHRydWU7XHJcbiAgICAgICAgICBsZXQgWWVhckRpZ2l0c05vOiBudW1iZXI7XHJcbiAgICAgICAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgICAgICAgLy8gTWFrZSBzdXJlIHdlIGhhdmUgNCB5ZWFyIGRpZ2l0LiBJZiBub3QsIGFkanVzdCBpdFxyXG4gICAgICAgICAgLy8gYWNjb3JkaW5nIHRvIHRoZSAnY2VudHVyeSB5ZWFyJ1xyXG4gICAgICAgICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgICAgICAgIGlmIChVdGlsU3RyQnl0ZU1vZGUuaXNMb2NhbGVEZWZMYW5nSlBOKCkpIHtcclxuICAgICAgICAgICAgZm9yIChZZWFyRGlnaXRzTm8gPSAwOyBZZWFyRGlnaXRzTm8gPCA0ICYmIHBvcyArIFllYXJEaWdpdHNObyA8IHN0ci5sZW5ndGggJiYgVXRpbFN0ckJ5dGVNb2RlLmlzRGlnaXQoc3RyW3BvcyArIFllYXJEaWdpdHNOb10pOyBZZWFyRGlnaXRzTm8rKykge1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGkgPSBZZWFyRGlnaXRzTm87XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgZm9yIChpID0gMDsgcG9zICsgaSA8IHN0ci5sZW5ndGggJiYgc3RyW3BvcyArIGldICE9PSB0aGlzLkRBVEVDSEFSLnRvU3RyaW5nKCkgJiYgaSA8IDQ7IGkrKykge1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBmb3IgKFllYXJEaWdpdHNObyA9IDA7XHJcbiAgICAgICAgICAgICAgICAgcG9zICsgWWVhckRpZ2l0c05vIDwgc3RyLmxlbmd0aCAmJiBVdGlsU3RyQnl0ZU1vZGUuaXNEaWdpdChzdHJbcG9zICsgWWVhckRpZ2l0c05vXSkgJiZcclxuICAgICAgICAgICAgICAgICBZZWFyRGlnaXRzTm8gPCA0O1xyXG4gICAgICAgICAgICAgICAgIFllYXJEaWdpdHNObysrKSB7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBpZiAoVXRpbFN0ckJ5dGVNb2RlLmlzTG9jYWxlRGVmTGFuZ0pQTigpKSB7XHJcbiAgICAgICAgICAgIGlmIChpIDwgNCAmJiBzdHIubGVuZ3RoIDwgbWFzay5sZW5ndGgpXHJcbiAgICAgICAgICAgICAgdGhpcy5tb3ZlX2RhdGUoc3RyLCBwb3MsIDQgLSBpLCBzdHIubGVuZ3RoKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAoaSA8IDQgJiYgbGVuIDwgbWFzay5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICB0aGlzLm1vdmVfZGF0ZShzdHIsIHBvcywgNCAtIGksIGxlbik7XHJcbiAgICAgICAgICAgICAgbGVuID0gbGVuICsgNCAtIGk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICB5ZWFyID0gdGhpcy5kYXRlX2FfMl9pKHN0ciwgNCwgcG9zKTtcclxuICAgICAgICAgIHBvcyArPSA0O1xyXG5cclxuICAgICAgICAgIC8vIEhlbiAxNi8xMS85NyA6IEZpeCAjNzY4NDQyXHJcbiAgICAgICAgICBpZiAoeWVhciA9PT0gMClcclxuICAgICAgICAgICAgYlllYXJJc1plcm8gPSB0cnVlO1xyXG5cclxuICAgICAgICAgIGlmIChZZWFyRGlnaXRzTm8gPD0gMikge1xyXG4gICAgICAgICAgICBjZW50dXJ5X3llYXIgPSB0aGlzLl9lbnZpcm9ubWVudC5HZXRDZW50dXJ5KGNvbXBJZHgpICUgMTAwOyAvLyBERUZfY2VudHVyeVxyXG4gICAgICAgICAgICBpZiAoeWVhciA8IGNlbnR1cnlfeWVhcilcclxuICAgICAgICAgICAgICB5ZWFyICs9IDEwMDtcclxuICAgICAgICAgICAgeWVhciArPSB0aGlzLl9lbnZpcm9ubWVudC5HZXRDZW50dXJ5KGNvbXBJZHgpIC0gY2VudHVyeV95ZWFyOyAvLyBERUZfY2VudHVyeVxyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIGlmICh0aGlzLl9lbnZpcm9ubWVudC5HZXREYXRlTW9kZShjb21wSWR4KSA9PT0gJ0InKVxyXG4gICAgICAgICAgLy8gREVGX2RhdGVfbW9kZVxyXG4gICAgICAgICAgICB5ZWFyIC09IFBJQ0ludGVyZmFjZS5EQVRFX0JVRERISVNUX0dBUDtcclxuICAgICAgICAgIGJyZWFrO1xyXG5cclxuXHJcbiAgICAgICAgY2FzZSBQSUNJbnRlcmZhY2UuUElDX0hZWVlZWTpcclxuICAgICAgICAgIGlucCA9IHRydWU7XHJcbiAgICAgICAgICBsZXQgcXVvdGVzOiBudW1iZXIgPSAwO1xyXG4gICAgICAgICAgaWYgKGxlbiA+IHBvcyArIDUgJiYgbWFza1twb3MgKyA1XS5jaGFyQ29kZUF0KDApID09PSAoUElDSW50ZXJmYWNlLlBJQ19IWVlZWVkpKVxyXG4gICAgICAgICAgICBxdW90ZXMgPSAxO1xyXG4gICAgICAgICAgeWVhciA9IEhlYnJld0RhdGUuZGF0ZWhlYl9oXzJfaShzdHIsIDUgKyBxdW90ZXMsIHBvcyk7XHJcbiAgICAgICAgICBwb3MgKz0gNSArIHF1b3RlcztcclxuICAgICAgICAgIGlmICh5ZWFyID09PSAwKVxyXG4gICAgICAgICAgICBiWWVhcklzWmVybyA9IHRydWU7XHJcbiAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgY2FzZSBQSUNJbnRlcmZhY2UuUElDX0hMOlxyXG4gICAgICAgICAgaW50UGljSWR4T2ZzID0gSGVicmV3RGF0ZS5kYXRlaGViX2hfMl9pKHN0ciwgMSwgcG9zKTtcclxuICAgICAgICAgIHBvcysrO1xyXG4gICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIGNhc2UgUElDSW50ZXJmYWNlLlBJQ19IREQ6XHJcbiAgICAgICAgICBpbnAgPSB0cnVlO1xyXG4gICAgICAgICAgcXVvdGVzID0gMDtcclxuICAgICAgICAgIGlmIChsZW4gPiBwb3MgKyAyICYmIG1hc2tbcG9zICsgMl0uY2hhckNvZGVBdCgwKSA9PT0gUElDSW50ZXJmYWNlLlBJQ19IREQpXHJcbiAgICAgICAgICAgIHF1b3RlcyA9IDE7XHJcbiAgICAgICAgICBkYXkgPSBIZWJyZXdEYXRlLmRhdGVoZWJfaF8yX2koc3RyLCAyICsgcXVvdGVzLCBwb3MpO1xyXG4gICAgICAgICAgcG9zICs9IDIgKyBxdW90ZXM7XHJcbiAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgY2FzZSBQSUNJbnRlcmZhY2UuUElDX01NRDpcclxuICAgICAgICAgIGlucCA9IHRydWU7XHJcbiAgICAgICAgICBtb250aF9pbl9waWMgPSB0cnVlO1xyXG4gICAgICAgICAgaWYgKFV0aWxTdHJCeXRlTW9kZS5pc0xvY2FsZURlZkxhbmdKUE4oKSkge1xyXG4gICAgICAgICAgICBpZiAoKHN0ci5sZW5ndGggPT09IHBvcyArIDEgfHwgc3RyW3BvcyArIDFdLmNoYXJDb2RlQXQoMCkgPT09IHRoaXMuREFURUNIQVIgfHwgIVV0aWxTdHJCeXRlTW9kZS5pc0RpZ2l0KHN0cltwb3MgKyAxXSkpICYmIHN0ci5sZW5ndGggPCBtYXNrLmxlbmd0aClcclxuICAgICAgICAgICAgICB0aGlzLm1vdmVfZGF0ZShzdHIsIHBvcywgMSwgc3RyLmxlbmd0aCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKHN0cltwb3MgKyAxXS5jaGFyQ29kZUF0KDApID09PSB0aGlzLkRBVEVDSEFSICYmIGxlbiA8IG1hc2subGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5tb3ZlX2RhdGUoc3RyLCBwb3MsIDEsIGxlbik7XHJcbiAgICAgICAgICAgICAgbGVuICs9IDE7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIG1vbnRoID0gdGhpcy5kYXRlX2FfMl9pKHN0ciwgMiwgcG9zKTtcclxuICAgICAgICAgIHBvcyArPSAyO1xyXG4gICAgICAgICAgYnJlYWs7XHJcblxyXG5cclxuICAgICAgICBjYXNlIFBJQ0ludGVyZmFjZS5QSUNfTU1NOlxyXG4gICAgICAgICAgaW5wID0gdHJ1ZTtcclxuICAgICAgICAgIG1vbnRoX2luX3BpYyA9IHRydWU7XHJcbiAgICAgICAgICBpbnRSZWYudmFsID0gcG9zO1xyXG4gICAgICAgICAgbW9udGggPSB0aGlzLmRhdGVfTU1NXzJfbShzdHIsIG1hc2ssIGludFJlZiwgbGVuLCBwaWMuaXNIZWJyZXcoKSk7XHJcbiAgICAgICAgICBwb3MgPSBpbnRSZWYudmFsO1xyXG4gICAgICAgICAgaWYgKHBpYy5pc0hlYnJldygpICYmIG1vbnRoID09PSAxNClcclxuICAgICAgICAgICAgbW9udGggPSA2O1xyXG4gICAgICAgICAgYnJlYWs7XHJcblxyXG5cclxuICAgICAgICBjYXNlIChQSUNJbnRlcmZhY2UuUElDX0REKTpcclxuICAgICAgICAgIGlucCA9IHRydWU7XHJcbiAgICAgICAgICBkYXlfaW5fcGljID0gdHJ1ZTtcclxuICAgICAgICAgIGlmIChVdGlsU3RyQnl0ZU1vZGUuaXNMb2NhbGVEZWZMYW5nSlBOKCkpIHtcclxuICAgICAgICAgICAgaWYgKChzdHIubGVuZ3RoID09PSBwb3MgKyAxIHx8IHN0cltwb3MgKyAxXS5jaGFyQ29kZUF0KDApID09PSB0aGlzLkRBVEVDSEFSIHx8ICFVdGlsU3RyQnl0ZU1vZGUuaXNEaWdpdChzdHJbcG9zICsgMV0pKSAmJiBzdHIubGVuZ3RoIDwgbWFzay5sZW5ndGgpXHJcbiAgICAgICAgICAgICAgdGhpcy5tb3ZlX2RhdGUoc3RyLCBwb3MsIDEsIHN0ci5sZW5ndGgpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGlmIChzdHJbcG9zICsgMV0uY2hhckNvZGVBdCgwKSA9PT0gdGhpcy5EQVRFQ0hBUiAmJiBsZW4gPCBtYXNrLmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgIHRoaXMubW92ZV9kYXRlKHN0ciwgcG9zLCAxLCBsZW4pO1xyXG4gICAgICAgICAgICAgIGxlbiArPSAxO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBkYXkgPSB0aGlzLmRhdGVfYV8yX2koc3RyLCAyLCBwb3MpO1xyXG4gICAgICAgICAgcG9zICs9IDI7XHJcbiAgICAgICAgICBicmVhaztcclxuXHJcblxyXG4gICAgICAgIGNhc2UgKFBJQ0ludGVyZmFjZS5QSUNfREREKTpcclxuICAgICAgICAgIGlucCA9IHRydWU7XHJcbiAgICAgICAgICB1c2Vkb3kgPSB0cnVlO1xyXG4gICAgICAgICAgZGF5X2luX3BpYyA9IHRydWU7XHJcbiAgICAgICAgICBkb3kgPSB0aGlzLmRhdGVfYV8yX2koc3RyLCAzLCBwb3MpO1xyXG4gICAgICAgICAgcG9zICs9IDM7XHJcbiAgICAgICAgICBicmVhaztcclxuXHJcblxyXG4gICAgICAgIGNhc2UgKFBJQ0ludGVyZmFjZS5QSUNfRERERCk6XHJcbiAgICAgICAgICBpbnAgPSB0cnVlO1xyXG4gICAgICAgICAgZGF5X2luX3BpYyA9IHRydWU7XHJcbiAgICAgICAgICBkYXkgPSB0aGlzLmRhdGVfYV8yX2koc3RyLCAyLCBwb3MpO1xyXG4gICAgICAgICAgcG9zICs9IDIgKyAyO1xyXG4gICAgICAgICAgYnJlYWs7XHJcblxyXG5cclxuICAgICAgICBjYXNlIChQSUNJbnRlcmZhY2UuUElDX1lKKTogLy8gSlBOOiBKYXBhbmVzZSBkYXRlIHBpY3R1cmUgc3VwcG9ydFxyXG4gICAgICAgICAgeWVhcl9pbl9waWMgPSB0cnVlO1xyXG4gICAgICAgICAgaW5wID0gdHJ1ZTtcclxuICAgICAgICAgIGlmIChVdGlsU3RyQnl0ZU1vZGUuaXNMb2NhbGVEZWZMYW5nSlBOKCkpIHtcclxuICAgICAgICAgICAgaWYgKChzdHIubGVuZ3RoID09PSBwb3MgKyAxIHx8IHN0cltwb3MgKyAxXS5jaGFyQ29kZUF0KDApID09PSB0aGlzLkRBVEVDSEFSIHx8ICFVdGlsU3RyQnl0ZU1vZGUuaXNEaWdpdChzdHJbcG9zICsgMV0pKSAmJiBzdHIubGVuZ3RoIDwgbWFzay5sZW5ndGgpXHJcbiAgICAgICAgICAgICAgdGhpcy5tb3ZlX2RhdGUoc3RyLCBwb3MsIDEsIHN0ci5sZW5ndGgpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgeWVhciA9IHRoaXMuZGF0ZV9hXzJfaShzdHIsIDIsIHBvcyk7XHJcbiAgICAgICAgICBwb3MgKz0gMjtcclxuXHJcbiAgICAgICAgICBsZXQgc3RyMTogc3RyaW5nID0gTlN0cmluZy5Gcm9tQ2hhcnMoc3RyKTtcclxuICAgICAgICAgIGVyYV95ZWFyID0gVXRpbERhdGVKcG4uZ2V0SW5zdGFuY2UoKS5nZXRTdGFydFllYXJPZkVyYShzdHIxLCBwaWMuZ2V0TWFzaygpKTtcclxuXHJcbiAgICAgICAgICBpZiAoZXJhX3llYXIgPT09IDApXHJcbiAgICAgICAgICAgIHJldHVybiAwO1xyXG4gICAgICAgICAgeWVhciArPSBlcmFfeWVhciAtIDE7XHJcblxyXG4gICAgICAgICAgaWYgKHllYXIgPT09IDApXHJcbiAgICAgICAgICAgIGJZZWFySXNaZXJvID0gdHJ1ZTtcclxuICAgICAgICAgIGJyZWFrO1xyXG5cclxuXHJcbiAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgIGlmIChVdGlsU3RyQnl0ZU1vZGUuaXNMb2NhbGVEZWZMYW5nREJDUygpKSB7XHJcbiAgICAgICAgICAgIC8vIGlmIFwic3RyW3Bvc11cIiBjb250YWlucyBEQkNTLCB0aGUgbmV4dCBpbmRleCBvZiBcIm1hc2tcIiBoYXMgdG8gYmUgc2tpcHBlZC5cclxuICAgICAgICAgICAgaWYgKFV0aWxTdHJCeXRlTW9kZS5pc0hhbGZXaWR0aChzdHJbcG9zXSkgPT09IGZhbHNlICYmXHJcbiAgICAgICAgICAgICAgVXRpbFN0ckJ5dGVNb2RlLmlzSGFsZldpZHRoKG1hc2tbcG9zICsgaW50UGljSWR4T2ZzXSkpXHJcbiAgICAgICAgICAgICAgaW50UGljSWR4T2ZzKys7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgcG9zICs9IDE7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmIChiWWVhcklzWmVybykge1xyXG4gICAgICBpZiAoIW1vbnRoX2luX3BpYylcclxuICAgICAgICBtb250aCA9IDA7XHJcbiAgICAgIGlmICghZGF5X2luX3BpYyAmJiBtb250aCA9PT0gMClcclxuICAgICAgICBkYXkgPSAwO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIEhlbiAxNi8xMS85NyA6IEZpeCAjNzY4NDQyXHJcbiAgICAvLyBaZXJvIGRhdGUgaXMgdmFsaWQgYW5kIHNob3VsZCByZXR1cm4gMEwuIFRoaXMgY2hlY2sgbXVzdCBiZSBoZXJlXHJcbiAgICAvLyBiZWNhdXNlIHRoZSB5ZWFyIHZhbHVlIG1heSBiZSBjaGFuZ2VkIGJlY2F1c2Ugb2YgY2VudHVyeSB5ZWFyLlxyXG4gICAgaWYgKGRheSA9PT0gMCAmJiBtb250aCA9PT0gMCAmJiAoYlllYXJJc1plcm8gfHwgeWVhciA9PT0gMCkpXHJcbiAgICAgIHJldHVybiAoMCk7XHJcblxyXG4gICAgaWYgKCFpbnApXHJcbiAgICAgIHJldHVybiAoMCk7XHJcblxyXG4gICAgLy8gSGVicmV3IFllYXJcclxuICAgIGlmIChwaWMuaXNIZWJyZXcoKSkge1xyXG4gICAgICBpZiAoeWVhciA+IDApIHtcclxuICAgICAgICBpZiAobWlsbGVuaXVtID09PSAwKVxyXG4gICAgICAgICAgbWlsbGVuaXVtID0gNTtcclxuICAgICAgICB5ZWFyICs9IG1pbGxlbml1bSAqIDEwMDA7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIChIZWJyZXdEYXRlLmRhdGVoZWJfMl9kKHllYXIsIG1vbnRoLCBkYXkpKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyB0aGUgbmV4dCAyIGxpbmVzIHN1cHBvcnQgNC54eCBERC9NTSBwaWN0dXJlc1xyXG4gICAgaWYgKCh5ZWFyID09PSAwKSAmJiAheWVhcl9pbl9waWMpIHtcclxuICAgICAgZGF0ZVBhcmFtcyA9IHRoaXMuZGF0ZV9zeXMoKTtcclxuICAgICAgeWVhciA9IGRhdGVQYXJhbXMueWVhcjtcclxuICAgIH1cclxuICAgIHJldHVybiAodGhpcy5kYXRlXzRfY2FsZW5kZXIoeWVhciwgbW9udGgsIGRheSwgZG95LCB1c2Vkb3kpKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBEZWNvZGUgZGlnaXRzIGZyb20gYSBkYXRlIHN0cmluZ1xyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgcHJpdmF0ZSBkYXRlX2FfMl9pKHM6IHN0cmluZ1tdLCBsZW46IG51bWJlciwgcG9zOiBudW1iZXIpOiBudW1iZXI7XHJcbiAgcHJpdmF0ZSBkYXRlX2FfMl9pKHM6IHN0cmluZywgbGVuOiBudW1iZXIsIHBvczogbnVtYmVyKTogbnVtYmVyO1xyXG4gIHByaXZhdGUgZGF0ZV9hXzJfaShzOiBhbnksIGxlbjogbnVtYmVyLCBwb3M6IG51bWJlcik6IG51bWJlciB7XHJcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMyAmJiAocyA9PT0gbnVsbCB8fCBzIGluc3RhbmNlb2YgQXJyYXkpICYmIChsZW4gPT09IG51bGwgfHwgbGVuLmNvbnN0cnVjdG9yID09PSBOdW1iZXIpICYmIChwb3MgPT09IG51bGwgfHwgcG9zLmNvbnN0cnVjdG9yID09PSBOdW1iZXIpKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLmRhdGVfYV8yX2lfMChzLCBsZW4sIHBvcyk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpcy5kYXRlX2FfMl9pXzEocywgbGVuLCBwb3MpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIERlY29kZSBkaWdpdHMgZnJvbSBhIGRhdGUgc3RyaW5nXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBwcml2YXRlIGRhdGVfYV8yX2lfMChzOiBzdHJpbmdbXSwgbGVuOiBudW1iZXIsIHBvczogbnVtYmVyKTogbnVtYmVyIHtcclxuICAgIGxldCBhcnJheTogc3RyaW5nW10gPSBuZXcgQXJyYXk8c3RyaW5nPihsZW4pO1xyXG4gICAgbGV0IG1nTnVtOiBOVU1fVFlQRSA9IG5ldyBOVU1fVFlQRSgpO1xyXG4gICAgZm9yIChsZXQgaTogbnVtYmVyID0gMDsgaSA8IGxlbjsgaSA9IGkgKyAxKSB7XHJcbiAgICAgIGFycmF5W2ldID0gc1twb3MgKyBpXTtcclxuICAgIH1cclxuICAgIHJldHVybiBtZ051bS5hXzJfbG9uZyhOU3RyaW5nLkZyb21DaGFycyhhcnJheSkpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIG1vdmluZyBwYXJ0IG9mIHRoZSBkYXRlIHN0cmluZ1xyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgcHJpdmF0ZSBtb3ZlX2RhdGUoc3RyOiBzdHJpbmdbXSwgcG9zOiBudW1iZXIsIG1vdmVieTogbnVtYmVyLCBsZW46IG51bWJlcik6IHZvaWQ7XHJcbiAgcHJpdmF0ZSBtb3ZlX2RhdGUoc3RyOiBzdHJpbmcsIHBvczogbnVtYmVyLCBtb3ZlYnk6IG51bWJlciwgbGVuOiBudW1iZXIpOiB2b2lkO1xyXG4gIHByaXZhdGUgbW92ZV9kYXRlKHN0cjogYW55LCBwb3M6IG51bWJlciwgbW92ZWJ5OiBudW1iZXIsIGxlbjogbnVtYmVyKTogdm9pZCB7XHJcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gNCAmJiAoc3RyID09PSBudWxsIHx8IHN0ciBpbnN0YW5jZW9mIEFycmF5KSAmJiAocG9zID09PSBudWxsIHx8IHBvcy5jb25zdHJ1Y3RvciA9PT0gTnVtYmVyKSAmJiAobW92ZWJ5ID09PSBudWxsIHx8IG1vdmVieS5jb25zdHJ1Y3RvciA9PT0gTnVtYmVyKSAmJiAobGVuID09PSBudWxsIHx8IGxlbi5jb25zdHJ1Y3RvciA9PT0gTnVtYmVyKSkge1xyXG4gICAgICB0aGlzLm1vdmVfZGF0ZV8wKHN0ciwgcG9zLCBtb3ZlYnksIGxlbik7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHRoaXMubW92ZV9kYXRlXzEoc3RyLCBwb3MsIG1vdmVieSwgbGVuKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBtb3ZpbmcgcGFydCBvZiB0aGUgZGF0ZSBzdHJpbmdcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIHByaXZhdGUgbW92ZV9kYXRlXzAoc3RyOiBzdHJpbmdbXSwgcG9zOiBudW1iZXIsIG1vdmVieTogbnVtYmVyLCBsZW46IG51bWJlcik6IHZvaWQge1xyXG4gICAgTWVtb3J5VXRpbC5jaGFyX21lbW1vdmUoc3RyLCBwb3MgKyBtb3ZlYnksIHN0ciwgcG9zLCBsZW4gLSAocG9zICsgbW92ZWJ5KSArIDEpO1xyXG4gICAgTWVtb3J5VXRpbC5jaGFyX21lbXNldChzdHIsIHBvcywgJzAnLCAvKicwJyovbW92ZWJ5KTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBUcmFuc2xhdGUgYSBtb250aCBuYW1lIC0+IG1vbnRoIGluZGV4XHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInN0cmluZ1wiPnRvIGV2YWx1YXRlXHJcbiAgLy8vIDwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJwaWN0dXJlXCI+bWFza1xyXG4gIC8vLyA8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwicG9zXCI+Y3VycmVudCBwb3NpdGlvbiBpbiB0aGUgc3RyaW5nIHRoZSBpbnRSZWYgbm90IGV4YWN0bHkgdGhlIHNhbWUgcmVmZXJlbmNlIHRvIGludGVnZXIgLCBsaWtlIGluIEMrKyxcclxuICAvLy8gICBzbyB0aGUgZ2xvYmFsIHBvcyBNVVNUIGJlIHVwZGF0ZWQgYnkgdGhlIHBvcy52YWx1ZSBhZnRlciB0aGUgZnVuY3Rpb24gcmV0dXJucy5cclxuICAvLy8gPC9wYXJhbT5cclxuICBwcml2YXRlIGRhdGVfTU1NXzJfbShzdHI6IHN0cmluZ1tdLCBtYXNrOiBzdHJpbmdbXSwgcG9zOiBJbnRSZWYsIGxlbjogbnVtYmVyLCBpc0hlYnJldzogYm9vbGVhbik6IG51bWJlciB7XHJcbiAgICBsZXQgbDogbnVtYmVyO1xyXG5cclxuICAgIGlmIChVdGlsU3RyQnl0ZU1vZGUuaXNMb2NhbGVEZWZMYW5nSlBOKCkpIHtcclxuICAgICAgbGV0IG1hc2tQb3M6IG51bWJlciA9IFV0aWxTdHJCeXRlTW9kZS5jb252UG9zKE5TdHJpbmcuRnJvbUNoYXJzKHN0ciksIE5TdHJpbmcuRnJvbUNoYXJzKG1hc2spLCBwb3MudmFsLCBmYWxzZSk7XHJcbiAgICAgIGwgPSB0aGlzLmRhdGVfbXNrX2NudChtYXNrLCBtYXNrUG9zLCA8bnVtYmVyPihsZW4gLSBtYXNrUG9zKSk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgbCA9IHRoaXMuZGF0ZV9tc2tfY250KG1hc2ssIHBvcy52YWwsIDxudW1iZXI+KGxlbiAtIHBvcy52YWwpKTtcclxuICAgIH1cclxuICAgIGxldCBzdHJQb3M6IG51bWJlciA9IHBvcy52YWw7XHJcbiAgICBwb3MudmFsID0gcG9zLnZhbCArIGw7XHJcbiAgICBsZW4gPSBNZW1vcnlVdGlsLm1lbV90cmltKHN0ciwgc3RyUG9zLCBsKTtcclxuXHJcbiAgICBpZiAobGVuID09PSAwKSB7XHJcbiAgICAgIHJldHVybiAwO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIGxldCBzdHJCOiBzdHJpbmcgPSBOU3RyaW5nLkZyb21DaGFycyhzdHIsIHN0clBvcywgbGVuKTtcclxuICAgICAgbGV0IG1vbnRoTmFtZXM6IHN0cmluZ1tdO1xyXG4gICAgICBpZiAoaXNIZWJyZXcpIHtcclxuICAgICAgICBtb250aE5hbWVzID0gSGVicmV3RGF0ZS5HZXRMb2NhbE1vbnRocygpO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIGxldCBtb250aHM6IHN0cmluZyA9IEV2ZW50cy5HZXRNZXNzYWdlU3RyaW5nKE1zZ0ludGVyZmFjZS5NT05USFNfUFRSKTtcclxuICAgICAgICBtb250aE5hbWVzID0gRGF0ZVV0aWwuZ2V0TG9jYWxNb250aHMobW9udGhzKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgZm9yIChsZXQgaTogbnVtYmVyID0gMTsgaSA8IG1vbnRoTmFtZXMubGVuZ3RoOyBpID0gaSArIDEpIHtcclxuICAgICAgICBpZiAoTlN0cmluZy5Db21wYXJlKG1vbnRoTmFtZXNbaV0uc3Vic3RyKDAsIGxlbiksIHN0ckIsIHRydWUpID09PSAwKVxyXG4gICAgICAgICAgcmV0dXJuIGk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiAwO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIEdldCB0aGUgY3VycmV0IGRheWUgc2VwZXJhdGVkIHRvIHllYXIsIG1vbnRoLCBkYXlcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIGRhdGVfc3lzKCk6IERhdGVCcmVha1BhcmFtcyB7XHJcbiAgICBsZXQgZGF0ZTogRGF0ZUJyZWFrUGFyYW1zID0gbmV3IERhdGVCcmVha1BhcmFtcygpO1xyXG4gICAgbGV0IEN1cnJEYXRlOiBEYXRlVGltZSA9IERhdGVUaW1lLk5vdztcclxuXHJcbiAgICBkYXRlLnllYXIgPSBDdXJyRGF0ZS5ZZWFyO1xyXG4gICAgZGF0ZS5tb250aCA9IEN1cnJEYXRlLk1vbnRoO1xyXG4gICAgZGF0ZS5kYXkgPSBDdXJyRGF0ZS5EYXk7XHJcblxyXG4gICAgcmV0dXJuIGRhdGU7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgdG8gZ2V0IGN1cnJlbnQgZGF0ZSBpbiBtYWdpYyByZXByZXNlbnRhdGlvbiBRdWVyeSBNYWdpYydzIERhdGVcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cmV0dXJucz4gdGhlICdNYWdpYycgY3VycmVudCBkYXRlXHJcbiAgLy8vIDwvcmV0dXJucz5cclxuICBkYXRlX21hZ2ljKHV0Y0RhdGU6IGJvb2xlYW4pOiBudW1iZXIge1xyXG4gICAgbGV0IGRhdGVUaW1lOiBEYXRlVGltZTtcclxuICAgIGlmICh1dGNEYXRlKSB7XHJcbiAgICAgIGRhdGVUaW1lID0gRGF0ZVRpbWUuVXRjTm93O1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIGRhdGVUaW1lID0gRGF0ZVRpbWUuTm93O1xyXG4gICAgfVxyXG5cclxuICAgIGxldCB5ZWFyOiBudW1iZXIgPSBkYXRlVGltZS5ZZWFyO1xyXG4gICAgbGV0IG1vbnRoOiBudW1iZXIgPSBkYXRlVGltZS5Nb250aDtcclxuICAgIGxldCBkYXk6IG51bWJlciA9IGRhdGVUaW1lLkRheTtcclxuXHJcbiAgICByZXR1cm4gdGhpcy5kYXRlXzRfY2FsZW5kZXIoeWVhciwgbW9udGgsIGRheSwgMSwgZmFsc2UpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHRvIGdldCAgdGhlIHN5c3RlbSB0aW1lXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHJldHVybnM+IHRoZSAnTWFnaWMnIGN1cnJlbnQgdGltZVxyXG4gIC8vLyA8L3JldHVybnM+XHJcbiAgdGltZV9tYWdpYyh1dGNUaW1lOiBib29sZWFuKTogbnVtYmVyIHtcclxuICAgIHJldHVybiBEYXRlVGltZS5HZXRUb3RhbFNlY29uZHNGcm9tTWlkbmlnaHQodXRjVGltZSwgbmV3IERhdGUoKSk7XHJcbiAgfVxyXG5cclxuICBtdGltZV9tYWdpYyh1dGNUaW1lOiBib29sZWFuKTogbnVtYmVyIHtcclxuICAgIHJldHVybiBEYXRlVGltZS5HZXRUb3RhbE1pbGxpU2Vjb25kc0Zyb21NaWRuaWdodCh1dGNUaW1lLCBuZXcgRGF0ZSgpKSA7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgQ29tcHV0ZSBNQUdJQyBkYXRlXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBkYXRlXzRfY2FsZW5kZXIoeWVhcjogbnVtYmVyLCBtb250aDogbnVtYmVyLCBkYXk6IG51bWJlciwgZG95OiBudW1iZXIsIHVzZWRveTogYm9vbGVhbik6IG51bWJlciB7XHJcblxyXG4gICAgbGV0IExlYXBZZWFyOiBib29sZWFuID0geWVhciAlIDQgPT09IDAgJiYgKHllYXIgJSAxMDAgIT09IDAgfHwgeWVhciAlIDQwMCA9PT0gMCk7XHJcblxyXG4gICAgLy8gMy4xMS45NyAtIEhlbiAoRml4ZWQgYnVnICM3NjQyNjUgYW5kICM4MTg2KSA6XHJcbiAgICAvLyBJZiB0aGUgZGF0ZSBpcyAwIHRoZW4gcmV0dXJuIDBMICh6ZXJvIHZhbHVlIGlzIHZhbGlkKSwgZWxzZSBpZiB0aGUgZGF0ZVxyXG4gICAgLy8gaXMgaWxsZWdhbCB0aGVuIHJldHVybiAxMDAwMDAwMDAwTCAod3JvbmcgZGF0ZSkuXHJcbiAgICBpZiAodXNlZG95KSB7XHJcbiAgICAgIGlmIChkb3kgPT09IDApIHtcclxuICAgICAgICByZXR1cm4gMDtcclxuICAgICAgfVxyXG4gICAgICBpZiAoZG95ID4gMzY2IHx8ICghTGVhcFllYXIgJiYgZG95ID4gMzY1KSkge1xyXG4gICAgICAgIHJldHVybiAoMTAwMDAwMDAwMCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICBpZiAoZGF5ID09PSAwICYmIG1vbnRoID09PSAwICYmIHllYXIgPT09IDApIHtcclxuICAgICAgICByZXR1cm4gMDtcclxuICAgICAgfVxyXG4gICAgICBpZiAoZGF5ID09PSAwIHx8IG1vbnRoID09PSAwIHx8IHllYXIgPT09IDAgfHwgbW9udGggPiAxMikge1xyXG4gICAgICAgIHJldHVybiAxMDAwMDAwMDAwO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICB5ZWFyID0geWVhciAtIDE7XHJcbiAgICBsZXQgbnVtOiBudW1iZXIgPSBNYXRoLmZsb29yKHllYXIgLyA0MDApO1xyXG4gICAgeWVhciA9IHllYXIgLSBudW0gKiA0MDA7XHJcbiAgICBsZXQgbnVtMjogbnVtYmVyID0gTWF0aC5mbG9vcih5ZWFyIC8gMTAwKTtcclxuICAgIHllYXIgPSB5ZWFyIC0gbnVtMiAqIDEwMDtcclxuICAgIGxldCBudW0zOiBudW1iZXIgPSBNYXRoLmZsb29yKHllYXIgLyA0KTtcclxuICAgIHllYXIgPSB5ZWFyIC0gbnVtMyAqIDQ7XHJcblxyXG4gICAgaWYgKCF1c2Vkb3kpIHtcclxuICAgICAgbGV0IG51bTQ6IG51bWJlciA9IFBJQ0ludGVyZmFjZS5kYXRlX2RheV90YWJbbW9udGggLSAxXTtcclxuICAgICAgbGV0IG51bTU6IG51bWJlciA9IFBJQ0ludGVyZmFjZS5kYXRlX2RheV90YWJbbW9udGhdO1xyXG5cclxuICAgICAgaWYgKExlYXBZZWFyKSB7XHJcbiAgICAgICAgaWYgKG1vbnRoID4gMSkge1xyXG4gICAgICAgICAgbnVtNSA9IG51bTUgKyAxO1xyXG4gICAgICAgICAgaWYgKG1vbnRoID4gMikge1xyXG4gICAgICAgICAgICBudW00ID0gbnVtNCArIDE7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoZGF5ID4gbnVtNSAtIG51bTQpIHtcclxuICAgICAgICByZXR1cm4gMTAwMDAwMDAwMDtcclxuICAgICAgfVxyXG4gICAgICBkb3kgPSBudW00ICsgZGF5O1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG51bSAqIDE0NjA5NyArIG51bTIgKiAzNjUyNCArIG51bTMgKiAxNDYxICsgeWVhciAqIDM2NSArIGRveTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBUcmFuc2xhdGVzIGEgc3RyaW5nIHRpbWUgdG8gbWFnaWMgbnVtYmVyXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImRpc3BWYWx1ZVwiPiAgIEEgc3RyaW5nIHZhbHVlPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInBpY1N0clwiPiAgICAgIFRoZSBwaWN0dXJlIHRvIHVzZTwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPiB0aGUgbWFnaWMgbnVtYmVyPC9yZXR1cm5zPlxyXG4gIGZyb21OYXRpdmVUaW1lVG9NZ1RpbWUoZGlzcFZhbHVlOiBEYXRlKTogc3RyaW5nIHtcclxuICAgIGxldCBtZ051bTogTlVNX1RZUEUgPSBuZXcgTlVNX1RZUEUoKTtcclxuICAgIGxldCBudW1WYWw6IG51bWJlciA9IHRoaXMuZnJvbU5hdGl2ZVRpbWVUb01nVGltZU51bWJlcihkaXNwVmFsdWUpO1xyXG4gICAgbWdOdW0uTlVNXzRfTE9ORyhudW1WYWwpO1xyXG4gICAgcmV0dXJuIG1nTnVtLnRvWE1McmVjb3JkKCk7XHJcbiAgfVxyXG5cclxuICBmcm9tTmF0aXZlVGltZVRvTWdUaW1lTnVtYmVyKGRpc3BWYWx1ZTogRGF0ZSk6IG51bWJlciB7XHJcbiAgICBsZXQgbnVtVmFsOiBudW1iZXIgPSB0aGlzLnRpbWVfMl9pbnQoZGlzcFZhbHVlLmdldEhvdXJzKCksIGRpc3BWYWx1ZS5nZXRNaW51dGVzKCksIGRpc3BWYWx1ZS5nZXRTZWNvbmRzKCkpO1xyXG4gICAgcmV0dXJuIG51bVZhbDtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBDb252ZXJ0IEFscGhhIGludG8gYSBUaW1lIGFjY29yZGluZyB0byBhIGdpdmVuIHBpY3R1cmVcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIGFfMl90aW1lKEFzY2lpOiBzdHJpbmcsIHBpYzogUElDLCBtaWxsaVNlY29uZHM6IGJvb2xlYW4pOiBudW1iZXI7XHJcbiAgYV8yX3RpbWUoQXNjaWk6IHN0cmluZywgQXNjaWlMOiBudW1iZXIsIG1hc2s6IHN0cmluZ1tdLCBtaWxsaVNlY29uZHM6IGJvb2xlYW4pOiBudW1iZXI7XHJcbiAgYV8yX3RpbWUoQXNjaWk6IGFueSwgcGljT3JBc2NpaUw6IGFueSwgbWlsbGlTZWNvbmRzT3JNYXNrOiBhbnksIG1pbGxpU2Vjb25kcz86IGJvb2xlYW4pOiBudW1iZXIge1xyXG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDMpXHJcbiAgICAgIHJldHVybiB0aGlzLmFfMl90aW1lXzAoQXNjaWksIHBpY09yQXNjaWlMLCBtaWxsaVNlY29uZHNPck1hc2spO1xyXG5cclxuICAgIHJldHVybiB0aGlzLmFfMl90aW1lXzEoQXNjaWksIHBpY09yQXNjaWlMLCBtaWxsaVNlY29uZHNPck1hc2ssIG1pbGxpU2Vjb25kcyk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgQ29udmVydCBBbHBoYSBpbnRvIGEgVGltZSBhY2NvcmRpbmcgdG8gYSBnaXZlbiBwaWN0dXJlXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBwcml2YXRlIGFfMl90aW1lXzAoQXNjaWk6IHN0cmluZywgcGljOiBQSUMsIG1pbGxpU2Vjb25kczogYm9vbGVhbik6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy5hXzJfdGltZShBc2NpaSwgQXNjaWkubGVuZ3RoLCBOU3RyaW5nLlRvQ2hhckFycmF5KHBpYy5nZXRNYXNrKCkpLCBtaWxsaVNlY29uZHMpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIENvbnZlcnQgQWxwaGEgaW50byBhIFRpbWUgYWNjb3JkaW5nIHRvIGEgZ2l2ZW4gcGljdHVyZVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgcHJpdmF0ZSBhXzJfdGltZV8xKEFzY2lpOiBzdHJpbmcsIEFzY2lpTDogbnVtYmVyLCBtYXNrOiBzdHJpbmdbXSwgbWlsbGlTZWNvbmRzOiBib29sZWFuKTogbnVtYmVyIHtcclxuICAgIGxldCBtZ051bTogTlVNX1RZUEUgPSBuZXcgTlVNX1RZUEUoKTtcclxuICAgIGxldCBJOiBudW1iZXIgPSAwO1xyXG4gICAgbGV0IGxlbjogbnVtYmVyID0gbWFzay5sZW5ndGg7IC8vIExlbmd0aCBvZiBtYXNrIG9yIHN0cmluZyB0byBzY2FuXHJcblxyXG4gICAgLy8gSW5pdGlhbGl6ZSBjb3VudGVycyBhbmQgZmxhZ3NcclxuICAgIGlmIChsZW4gPiBBc2NpaUwpIHtcclxuICAgICAgbGVuID0gQXNjaWlMO1xyXG4gICAgfVxyXG4gICAgbGV0IGFtcG06IG51bWJlciA9IDA7IC8vIEFNL1BNIGluZGljYXRvclxyXG4gICAgbGV0IGhvdXI6IG51bWJlciA9IDA7XHJcbiAgICBsZXQgbWludXRlOiBudW1iZXIgPSAwO1xyXG4gICAgbGV0IHNlY29uZDogbnVtYmVyID0gMDtcclxuICAgIGxldCBtaWxsaXNlY29uZDogbnVtYmVyID0gMDtcclxuXHJcbiAgICB3aGlsZSAoSSA8IGxlbikge1xyXG4gICAgICBsZXQgbWFza0xlbmd0aDogbnVtYmVyO1xyXG4gICAgICBsZXQgbWF4TWFza0xlbjogbnVtYmVyO1xyXG5cclxuICAgICAgLy8gVG8gZ2V0IHRoZSBtYXhpbXVtIHBvc3NpYmxlIGxlbmd0aCBvZiB0aGUgY29uc3RhbnRzIGluIHRoZSBtYXNrXHJcbiAgICAgIHN3aXRjaCAobWFza1tJXS5jaGFyQ29kZUF0KDApKSB7XHJcbiAgICAgICAgY2FzZSAoUElDSW50ZXJmYWNlLlBJQ19ISCk6XHJcbiAgICAgICAgY2FzZSAoUElDSW50ZXJmYWNlLlBJQ19NTVQpOlxyXG4gICAgICAgIGNhc2UgKFBJQ0ludGVyZmFjZS5QSUNfU1MpOlxyXG4gICAgICAgIGNhc2UgKFBJQ0ludGVyZmFjZS5QSUNfUE0pOlxyXG4gICAgICAgICAgbWF4TWFza0xlbiA9IDI7XHJcbiAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgY2FzZSAoUElDSW50ZXJmYWNlLlBJQ19NUyk6XHJcbiAgICAgICAgICBtYXhNYXNrTGVuID0gMztcclxuICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgbWF4TWFza0xlbiA9IDE7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG5cclxuICAgICAgLyogVG8gZ2V0IHRoZSBtaW5pbXVtIG9mIG1heE1hc2tMZW4gJiBudW1iZXIgb2YgY2hhcmFjdGVycyByZW1haW5lZCBpbiBzdHJpbmdcclxuICAgICAgYmVjYXVzZSBpZiB0aGUgQXNjaWkgaXMgc2hvcnRlcihoYXMgbGVzcyBjaGFyYWN0ZXJzKXRoZW4gY3JlYXRlIFN0cmluZyBvbmx5XHJcbiAgICAgIG9mIHRoYXQgbm8uIG9mIGNoYXJhY3RlcnMgKG1hc2tMZW5ndGgpLCBub3Qgb2YgbWF4TWFza0xlbmd0aCAqL1xyXG4gICAgICBtYXNrTGVuZ3RoID0gTWF0aC5taW4obWF4TWFza0xlbiwgbGVuIC0gSSk7XHJcblxyXG4gICAgICBzd2l0Y2ggKG1hc2tbSV0uY2hhckNvZGVBdCgwKSkge1xyXG4gICAgICAgIGNhc2UgKFBJQ0ludGVyZmFjZS5QSUNfSEgpOiB7XHJcbiAgICAgICAgICBob3VyID0gbWdOdW0uYV8yX2xvbmcoQXNjaWkuc3Vic3RyKEksIG1hc2tMZW5ndGgpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgY2FzZSAoUElDSW50ZXJmYWNlLlBJQ19NTVQpOiB7XHJcbiAgICAgICAgICBtaW51dGUgPSBtZ051bS5hXzJfbG9uZyhBc2NpaS5zdWJzdHIoSSwgbWFza0xlbmd0aCkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICBjYXNlIChQSUNJbnRlcmZhY2UuUElDX1NTKToge1xyXG4gICAgICAgICAgc2Vjb25kID0gbWdOdW0uYV8yX2xvbmcoQXNjaWkuc3Vic3RyKEksIG1hc2tMZW5ndGgpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgY2FzZSAoUElDSW50ZXJmYWNlLlBJQ19NUyk6IHtcclxuICAgICAgICAgIG1pbGxpc2Vjb25kID0gbWdOdW0uYV8yX2xvbmcoQXNjaWkuc3Vic3RyKEksIG1hc2tMZW5ndGgpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgY2FzZSAoUElDSW50ZXJmYWNlLlBJQ19QTSk6XHJcbiAgICAgICAgICBhbXBtID0gMDtcclxuICAgICAgICAgIGxldCBjMDogc3RyaW5nID0gQXNjaWlbSV07XHJcbiAgICAgICAgICBsZXQgYzE6IHN0cmluZztcclxuICAgICAgICAgIGMwID0gYzAudG9VcHBlckNhc2UoKTtcclxuICAgICAgICAgIGlmIChJICsgMSA8IGxlbikge1xyXG4gICAgICAgICAgICBjMSA9IEFzY2lpW0kgKyAxXTtcclxuICAgICAgICAgICAgYzEgPSBjMS50b1VwcGVyQ2FzZSgpO1xyXG5cclxuICAgICAgICAgICAgaWYgKGMxID09PSAnTScpIHtcclxuICAgICAgICAgICAgICBpZiAoYzAgPT09ICdBJylcclxuICAgICAgICAgICAgICAgIGFtcG0gPSAtMTtcclxuICAgICAgICAgICAgICBpZiAoYzAgPT09ICdQJylcclxuICAgICAgICAgICAgICAgIGFtcG0gPSAxO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICAgIEkgKz0gbWFza0xlbmd0aDtcclxuICAgIH1cclxuXHJcbiAgICAvLyBDaGVjayB2YWxpZGl0eSBvZiBtaW51dGVzIGFuZCBzZWNvbmRzXHJcbiAgICBpZiAoc2Vjb25kID4gNTkgfHwgbWludXRlID4gNTkpXHJcbiAgICAgIHJldHVybiAoMCk7XHJcblxyXG4gICAgLy8gQ29udmVydCBob3VyIHRvIFBNIGlmIHNwZWNpZmllZCBhcyBBTVxyXG4gICAgaWYgKGFtcG0gIT09IDApXHJcbiAgICAgIGlmIChhbXBtID09PSAtMSlcclxuICAgICAgLy8gQU1cclxuICAgICAge1xyXG4gICAgICAgIGlmIChob3VyID09PSAxMilcclxuICAgICAgICAgIGhvdXIgPSAwO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2UgaWYgKGhvdXIgPCAxMilcclxuICAgICAgLy8gUE1cclxuICAgICAgICBob3VyICs9IDEyO1xyXG4gICAgaWYgKG1pbGxpU2Vjb25kcylcclxuICAgICAgcmV0dXJuIHRoaXMudGltZV8yX2ludChob3VyLCBtaW51dGUsIHNlY29uZCkgKiAxMDAwICsgbWlsbGlzZWNvbmQ7XHJcbiAgICBlbHNlXHJcbiAgICAgIHJldHVybiB0aGlzLnRpbWVfMl9pbnQoaG91ciwgbWludXRlLCBzZWNvbmQpO1xyXG4gIH1cclxuXHJcbiAgdGltZV8yX2ludChob3VyOiBudW1iZXIsIG1pbnV0ZTogbnVtYmVyLCBzZWNvbmQ6IG51bWJlcik6IG51bWJlciB7XHJcbiAgICByZXR1cm4gaG91ciAqIDM2MDAgKyBtaW51dGUgKiA2MCArIHNlY29uZDtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBDb252ZXJ0IFwiMFwiL1wiMVwiIHRvIGZhbHNlL3RydWVcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiYm9vbFN0clwiPiAgXCIwXCIvXCIxXCJcclxuICAvLy8gPC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+IHRydWUgaWYgXCIxXCIgb3IgZmFsc2UgaWYgb3RoZXJzXHJcbiAgLy8vIDwvcmV0dXJucz5cclxuICBzdGF0aWMgdG9Cb29sZWFuKGJvb2xTdHI6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIGJvb2xTdHIgIT09IG51bGwgJiYgYm9vbFN0ciA9PT0gXCIxXCI7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgU3RyaW5nIHRvIERhdGUgZnVuY3Rpb25cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIGFfMl9kYXRlKHN0cjogc3RyaW5nLCBGb3JtYXQ6IHN0cmluZywgY29tcElkeDogbnVtYmVyKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLmFfMl9kYXRlX2RhdGVtb2RlKHN0ciwgRm9ybWF0LCBjb21wSWR4KTtcclxuICB9XHJcblxyXG4gIGFfMl9kYXRlX3BpYyhzdHI6IHN0cmluZywgcGljOiBQSUMsIG1hc2s6IHN0cmluZywgY29tcElkeDogbnVtYmVyKTogbnVtYmVyIHtcclxuICAgIGlmIChzdHIgPT09IG51bGwpIHtcclxuICAgICAgc3RyID0gXCJcIjtcclxuICAgIH1cclxuICAgIHJldHVybiB0aGlzLmFfMl9kYXRlX3BpY19kYXRlbW9kZShOU3RyaW5nLlRvQ2hhckFycmF5KHN0ciksIHN0ci5sZW5ndGgsIHBpYywgTlN0cmluZy5Ub0NoYXJBcnJheShtYXNrKSwgY29tcElkeCk7XHJcbiAgfVxyXG5cclxuICB0b19hKG91dFZhbDogc3RyaW5nLCBvdXRfbGVuOiBudW1iZXIsIGRhdGU6IG51bWJlciwgRm9ybWF0OiBzdHJpbmcsIGNvbXBJZHg6IG51bWJlcik6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy50b19hX2RhdGVtb2RlKG91dFZhbCwgb3V0X2xlbiwgZGF0ZSwgRm9ybWF0LCBmYWxzZSwgY29tcElkeCk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgQ29udmVydCBzdHJpbmcgLT4gZGF0ZSB1c2luZyBhIGZvcm1hdCBzdHJpbmdcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIHByaXZhdGUgYV8yX2RhdGVfZGF0ZW1vZGUoc3RyOiBzdHJpbmcsIEZvcm1hdDogc3RyaW5nLCBjb21wSWR4OiBudW1iZXIpOiBudW1iZXIge1xyXG4gICAgbGV0IHBJQzogUElDID0gbmV3IFBJQyhGb3JtYXQsIFN0b3JhZ2VBdHRyaWJ1dGUuREFURSwgY29tcElkeCk7XHJcbiAgICBpZiAoc3RyID09PSBudWxsKSB7XHJcbiAgICAgIHN0ciA9IFwiXCI7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpcy5hXzJfZGF0ZV9waWNfZGF0ZW1vZGUoTlN0cmluZy5Ub0NoYXJBcnJheShzdHIpLCBzdHIubGVuZ3RoLCBwSUMsIE5TdHJpbmcuVG9DaGFyQXJyYXkocElDLmdldE1hc2soKSksIGNvbXBJZHgpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIFN0cmluZyB0byBhIGRhdGVtb2RlXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBwcml2YXRlIHRvX2FfZGF0ZW1vZGUob3V0VmFsOiBzdHJpbmcsIG91dF9sZW46IG51bWJlciwgZGF0ZTogbnVtYmVyLCBGb3JtYXQ6IHN0cmluZywgaWdub3JlX2R0X2ZtdDogYm9vbGVhbiwgY29tcElkeDogbnVtYmVyKTogc3RyaW5nIHtcclxuXHJcbiAgICAvLyBQYXJzZSB0aGUgcGljdHVyZVxyXG4gICAgbGV0IHBpYzogUElDID0gbmV3IFBJQyhGb3JtYXQsIFN0b3JhZ2VBdHRyaWJ1dGUuREFURSwgY29tcElkeCk7XHJcblxyXG4gICAgLy8gQ29udmVydCB0aGUgIGRhdGUgLT4gc3RyaW5nXHJcbiAgICBpZiAob3V0VmFsID09PSBudWxsKSB7XHJcbiAgICAgIG91dFZhbCA9IHBpYy5nZXRNYXNrKCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpcy50b19hX3BpY19kYXRlbW9kZShvdXRWYWwsIG91dF9sZW4sIGRhdGUsIHBpYywgdHJ1ZSwgaWdub3JlX2R0X2ZtdCwgY29tcElkeCk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgRGVjb2RlIGRpZ2l0cyBmcm9tIGEgZGF0ZSBzdHJpbmdcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIHByaXZhdGUgZGF0ZV9hXzJfaV8xKHM6IHN0cmluZywgbGVuOiBudW1iZXIsIHBvczogbnVtYmVyKTogbnVtYmVyIHtcclxuXHJcbiAgICAvLyBkb24ndCBmb3JnZXQgdG8gaW5jbHVkZSAncG9zKz1sZW4nIGFmdGVyIHRoZSB1c2luZyBvZiB0aGUgZnVuY3Rpb25cclxuICAgIGxldCBtZ051bTogTlVNX1RZUEUgPSBuZXcgTlVNX1RZUEUoKTtcclxuICAgIGxldCBzdHI6IHN0cmluZztcclxuXHJcbiAgICBzdHIgPSBzLnN1YnN0cihwb3MsIGxlbik7XHJcbiAgICByZXR1cm4gbWdOdW0uYV8yX2xvbmcoc3RyKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgbW92ZV9kYXRlXzEoc3RyOiBzdHJpbmcsIHBvczogbnVtYmVyLCBtb3ZlYnk6IG51bWJlciwgbGVuOiBudW1iZXIpOiBzdHJpbmcge1xyXG4gICAgc3RyID0gU3RyVXRpbC5tZW1tb3ZlKHN0ciwgcG9zICsgbW92ZWJ5LCBzdHIsIHBvcywgbGVuIC0gcG9zKTtcclxuXHJcbiAgICBzdHIgPSBTdHJVdGlsLm1lbXNldChzdHIsIHBvcywgJzAnLCBtb3ZlYnkpO1xyXG4gICAgcmV0dXJuIHN0cjtcclxuICB9XHJcblxyXG4gIHRpbWVfMl9hKEFzY2lpOiBzdHJpbmcsIEFzY2lpTDogbnVtYmVyLCB0aW1lOiBudW1iZXIsIEZvcm1hdDogc3RyaW5nLCBjb21wSWR4OiBudW1iZXIsIG1pbGxpU2Vjb25kczogYm9vbGVhbik6IHN0cmluZyB7XHJcblxyXG4gICAgaWYgKFN0clV0aWwucnRyaW0oRm9ybWF0KS5sZW5ndGggPT09IDApIHtcclxuICAgICAgRm9ybWF0ID0gXCJISDpNTTpTU1wiO1xyXG4gICAgfVxyXG4gICAgbGV0IHBpYzogUElDID0gbmV3IFBJQyhGb3JtYXQsIFN0b3JhZ2VBdHRyaWJ1dGUuVElNRSwgY29tcElkeCk7XHJcbiAgICBpZiAoQXNjaWkgPT09IG51bGwpIHtcclxuICAgICAgQXNjaWkgPSBwaWMuZ2V0TWFzaygpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRoaXMudGltZV8yX2FfcGljKEFzY2lpLCBBc2NpaUwsIHRpbWUsIHBpYywgZmFsc2UsIG1pbGxpU2Vjb25kcyk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgVHJhbnNsYXRlcyBhIHN0cmluZyB0byBtYWdpYyBsb2dpY2FsXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImRpc3BWYWx1ZVwiPiAgIEEgc3RyaW5nIHZhbHVlXHJcbiAgLy8vIDwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJwaWNcIj4gICAgICAgICBUaGUgcGljdHVyZSB0byB1c2VcclxuICAvLy8gPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInJhbmdlU3RyXCI+ICAgIFRoZSByYW5nZVxyXG4gIC8vLyA8L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz4gdGhlIGxvZ2ljYWwgdmFsdWVcclxuICAvLy8gPC9yZXR1cm5zPlxyXG4gIHRvTG9naWNhbChkaXNwVmFsdWU6IHN0cmluZywgcGljOiBQSUMsIHJhbmdlU3RyOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgZGlzcFZhbHVlID0gZGlzcFZhbHVlLnRyaW0oKTtcclxuICAgIGlmIChkaXNwVmFsdWUgPT09IG51bGwgfHwgZGlzcFZhbHVlLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICBkaXNwVmFsdWUgPSBcIkZhbHNlXCI7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpcy5kaXNwXzJfbG9naWNhbChkaXNwVmFsdWUsIHBpYy5nZXRNYXNrKCksIHJhbmdlU3RyKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICB0cmFuc2xhdGUgdGhlIGRpc3BsYXllZCB2YWx1ZSB0byBhIG1hZ2ljIGxvZ2ljYWwgdmFsdWVcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiZGlzcFZhbHVlXCI+dGhlIGRpc3BsYXllZCB2YWx1ZSA8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwibWFza1wiPnRoZSBtYXNrIG9mIHRoZSBkaXNwbGF5ZWQgdmFsdWUgPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInJhbmdlU3RyXCI+dGhlIHJhbmdlIHN0cmluZyA8L3BhcmFtPlxyXG4gIHByaXZhdGUgZGlzcF8yX2xvZ2ljYWwoZGlzcFZhbHVlOiBzdHJpbmcsIG1hc2s6IHN0cmluZywgcmFuZ2VTdHI6IHN0cmluZyk6IHN0cmluZyB7XHJcblxyXG4gICAgbGV0IHN0cmlwcGVkVmFsdWU6IFN0cmluZ0J1aWxkZXIgPSBuZXcgU3RyaW5nQnVpbGRlcihkaXNwVmFsdWUubGVuZ3RoKTtcclxuXHJcbiAgICByYW5nZVN0ciA9IHRoaXMud2luX3JuZ19ib29sKHJhbmdlU3RyKTtcclxuICAgIHJhbmdlU3RyID0gU3RyVXRpbC5tYWtlUHJpbnRhYmxlVG9rZW5zKHJhbmdlU3RyLCBTRVFfMl9IVE1MKTtcclxuICAgIGxldCBpOiBudW1iZXIgPSByYW5nZVN0ci5pbmRleE9mKCcsJyk7XHJcbiAgICBsZXQgdHJ1ZVN0cjogc3RyaW5nID0gcmFuZ2VTdHIuc3Vic3RyKDAsIGkpO1xyXG4gICAgdHJ1ZVN0ciA9IFN0clV0aWwubWFrZVByaW50YWJsZVRva2Vucyh0cnVlU3RyLCBIVE1MXzJfU1RSKTtcclxuICAgIGkgPSAwO1xyXG5cclxuICAgIGZvciAoaSA9IDA7IGkgPCBkaXNwVmFsdWUubGVuZ3RoICYmIGkgPCBtYXNrLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGlmIChtYXNrLmNoYXJDb2RlQXQoaSkgPT09IFBJQ0ludGVyZmFjZS5QSUNfWCkge1xyXG4gICAgICAgIHN0cmlwcGVkVmFsdWUuQXBwZW5kKGRpc3BWYWx1ZS5jaGFyQXQoaSkpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBsZXQgdmFsOiBzdHJpbmcgPSBzdHJpcHBlZFZhbHVlLlRvU3RyaW5nKCk7XHJcbiAgICBpZiAodHJ1ZVN0ci5sZW5ndGggPCB2YWwubGVuZ3RoKSB7XHJcbiAgICAgIHZhbCA9IHZhbC5zdWJzdHIoMCwgdHJ1ZVN0ci5sZW5ndGgpO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIGlmICh2YWwubGVuZ3RoIDwgdHJ1ZVN0ci5sZW5ndGgpIHtcclxuICAgICAgICB0cnVlU3RyID0gdHJ1ZVN0ci5zdWJzdHIoMCwgdmFsLmxlbmd0aCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiAodmFsLnRvVXBwZXJDYXNlKCkgPT09IHRydWVTdHIudG9VcHBlckNhc2UoKSkgPyBcIjFcIiA6IFwiMFwiO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIGNvbnZlcnRpbmcgdGhlIGRpc3BsYXllZCB2YWx1ZSBvZiBhIHN0cmluZyB0byBpbnRlcm5hbFxyXG4gIC8vLyAgIHJlcHJlc2VudGF0aW9uIG11c3QgcmVtb3ZlIHRoZSBtYXNraW5nIGNoYXJhY3RlcnMgZnJvbSBpdFxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgcHJpdmF0ZSB0b0FscGhhKGRpc3BWYWx1ZTogc3RyaW5nLCBwaWM6IFBJQyk6IHN0cmluZyB7XHJcblxyXG4gICAgbGV0IHBpY3R1cmU6IHN0cmluZyA9IHBpYy5nZXRNYXNrKCk7XHJcbiAgICBsZXQgYnVmZmVyOiBTdHJpbmdCdWlsZGVyID0gbmV3IFN0cmluZ0J1aWxkZXIocGljLmdldE1hc2tTaXplKCkpO1xyXG4gICAgbGV0IElzQWxwaGFEQkNTOiBib29sZWFuID0gVXRpbFN0ckJ5dGVNb2RlLmlzTG9jYWxlRGVmTGFuZ0RCQ1MoKSAmJiBwaWMuaXNBdHRyQWxwaGEoKTtcclxuICAgIGxldCBjdXJyUGljdHVyZTogbnVtYmVyO1xyXG4gICAgbGV0IGk6IG51bWJlciA9IGN1cnJQaWN0dXJlID0gMDtcclxuXHJcbiAgICBmb3IgKGN1cnJQaWN0dXJlID0gaSA9IDA7IGkgPCBkaXNwVmFsdWUubGVuZ3RoICYmIGN1cnJQaWN0dXJlIDwgcGljdHVyZS5sZW5ndGg7IGkrKywgY3VyclBpY3R1cmUrKykge1xyXG4gICAgICBpZiAoRGlzcGxheUNvbnZlcnRvci5pc0FscGhhUG9zaXRpb25hbERpcmVjdGl2ZShwaWN0dXJlLmNoYXJBdChjdXJyUGljdHVyZSkpKSB7XHJcbiAgICAgICAgYnVmZmVyLkFwcGVuZChkaXNwVmFsdWUuY2hhckF0KGkpKTtcclxuXHJcbiAgICAgICAgaWYgKElzQWxwaGFEQkNTKSB7XHJcbiAgICAgICAgICAvLyBhIERCQ1MgY2hhcmFjdGVyIGluIFwiZGlzcFZhbHVlXCIgY29uc3VtZXMgdHdvIGNoYXJhY3RlcnMgaW4gXCJwaWN0dXJlXCJcclxuICAgICAgICAgIGxldCBzdHJEc3BWYWxPbmVDaGFyOiBzdHJpbmcgPSBkaXNwVmFsdWUuc3Vic3RyKGksIDEpO1xyXG4gICAgICAgICAgaWYgKFV0aWxTdHJCeXRlTW9kZS5sZW5CKHN0ckRzcFZhbE9uZUNoYXIpID09PSAyKSB7XHJcbiAgICAgICAgICAgIGN1cnJQaWN0dXJlID0gY3VyclBpY3R1cmUgKyAxO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGJ1ZmZlci5Ub1N0cmluZygpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PmlzIGNoZWNrZWQgY2hhciBBbHBoYSBQb3NpdGlvbmFsIERpcmVjdGl2ZTwvc3VtbWFyeT5cclxuICBzdGF0aWMgaXNBbHBoYVBvc2l0aW9uYWxEaXJlY3RpdmUodG9DaGVjazogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICBsZXQgYXNjaWk6IG51bWJlciA9IHRvQ2hlY2suY2hhckNvZGVBdCgwKTtcclxuICAgIHJldHVybiAoYXNjaWkgPT09IFBJQ0ludGVyZmFjZS5QSUNfWCB8fCBhc2NpaSA9PT0gUElDSW50ZXJmYWNlLlBJQ19VIHx8IGFzY2lpID09PSBQSUNJbnRlcmZhY2UuUElDX0wgfHxcclxuICAgICAgYXNjaWkgPT09IFBJQ0ludGVyZmFjZS5QSUNfTiB8fCBhc2NpaSA9PT0gUElDSW50ZXJmYWNlLlBJQ19KIHx8IGFzY2lpID09PSBQSUNJbnRlcmZhY2UuUElDX0cgfHwgYXNjaWkgPT09IFBJQ0ludGVyZmFjZS5QSUNfUyB8fCBhc2NpaSA9PT0gUElDSW50ZXJmYWNlLlBJQ19UKTtcclxuXHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgQ29tcGFyYXRpdmUgbmV3VmFsdWUgd2l0aCBwb3NzaWJsZSBSYW5nZSBpbiBDb250aW51b3VzUmFuZ2VWYWx1ZXMvZGlzY3JldGVSYW5nZVZhbHVlc1xyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxyZXR1cm5zPiBuZXdWYWx1ZSBpZiBpdCBwb3NzaWJsZSwgb2xkIHZhbHVlIG93ZXJ2aXNlXHJcbiAgLy8vIDwvcmV0dXJucz5cclxuICBwcml2YXRlIGZpbGxBbHBoYUJ5UmFuZ2UoQ29udGludW91c1JhbmdlVmFsdWVzOiBMaXN0PHN0cmluZz4sIGRpc2NyZXRlUmFuZ2VWYWx1ZXM6IExpc3Q8c3RyaW5nPiwgbmV3VmFsdWU6IHN0cmluZyk6IHN0cmluZyB7XHJcblxyXG4gICAgbGV0IHRtcEJ1ZmZlcjogc3RyaW5nID0gdGhpcy5maWxsQWxwaGFCeURpc2NyZXRlUmFuZ2VWYWx1ZXMoZGlzY3JldGVSYW5nZVZhbHVlcywgbmV3VmFsdWUpO1xyXG4gICAgaWYgKHRtcEJ1ZmZlciAhPT0gbnVsbCkge1xyXG4gICAgICByZXR1cm4gdG1wQnVmZmVyO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHRtcEJ1ZmZlciA9IHRoaXMuZmlsbEFscGhhQnlDb250aW51b3VzUmFuZ2VWYWx1ZXMoQ29udGludW91c1JhbmdlVmFsdWVzLCBuZXdWYWx1ZSk7XHJcbiAgICAgIGlmICh0bXBCdWZmZXIgIT09IG51bGwpIHtcclxuICAgICAgICByZXR1cm4gdG1wQnVmZmVyO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIGlmIChkaXNjcmV0ZVJhbmdlVmFsdWVzICE9PSBudWxsKSB7XHJcbiAgICAgICAgICB0bXBCdWZmZXIgPSB0aGlzLmNvbXBsZXRlQWxwaGFCeVJhbmdlKGRpc2NyZXRlUmFuZ2VWYWx1ZXMsIG5ld1ZhbHVlKTtcclxuICAgICAgICAgIGlmICh0bXBCdWZmZXIgIT09IG51bGwpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRtcEJ1ZmZlcjtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIC8vIHVucG9zc2libGUgdG8gZmluZCBpdCBpbiB0aGUgcmFuZ2UgcmV0dXJuIG5vdCBjaGFuZ2VkIG9sZHZhbHVlXHJcbiAgICByZXR1cm4gbmV3VmFsdWU7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgZmlsbCBBbHBoYSBzdHJpbmcgYnkgZGlzY3JldGUgcmFuZ2VcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiZGlzY3JldGVSYW5nZVZhbHVlc1wiPnZlY3RvciBvZiBkaXNjcmV0ZSByYW5nZSB2YWx1ZXNcclxuICAvLy8gPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcIm5ld1ZhbHVlXCI+dmFsdWUsIHRyeSBmb3VuZCBpbiB0aGUgdmVjdG9yIG9mIGRpc2NyZXRlIHJhbmdlc1xyXG4gIC8vLyA8L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz4gZm91bmQgdmFsdWUgb3IgbnVsbChub3QgZm91bmQpXHJcbiAgLy8vIDwvcmV0dXJucz5cclxuICBmaWxsQWxwaGFCeURpc2NyZXRlUmFuZ2VWYWx1ZXMoZGlzY3JldGVSYW5nZVZhbHVlczogTGlzdDxzdHJpbmc+LCBuZXdWYWx1ZTogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIGlmIChkaXNjcmV0ZVJhbmdlVmFsdWVzICE9PSBudWxsKSB7XHJcbiAgICAgIGZvciAobGV0IGk6IG51bWJlciA9IDA7IGkgPCBkaXNjcmV0ZVJhbmdlVmFsdWVzLmxlbmd0aDsgaSA9IGkgKyAxKSB7XHJcbiAgICAgICAgbGV0IGRpc2NyZXRlVmFsdWU6IHN0cmluZyA9IGRpc2NyZXRlUmFuZ2VWYWx1ZXMuZ2V0X0l0ZW0oaSk7XHJcbiAgICAgICAgbGV0IHRydW5jYXRlZFZhbHVlOiBzdHJpbmcgPSBkaXNjcmV0ZVZhbHVlLnN1YnN0cigwLCBNYXRoLm1pbihuZXdWYWx1ZS5sZW5ndGgsIGRpc2NyZXRlVmFsdWUubGVuZ3RoKSk7XHJcbiAgICAgICAgaWYgKG5ld1ZhbHVlLnRvVXBwZXJDYXNlKCkgPT09IHRydW5jYXRlZFZhbHVlLnRvVXBwZXJDYXNlKCkpIHtcclxuICAgICAgICAgIHJldHVybiBkaXNjcmV0ZVZhbHVlO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIG51bGw7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgZmlsbCBBbHBoYSBzdHJpbmcgYnkgY29udGludW91cyByYW5nZVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJDb250aW51b3VzUmFuZ2VWYWx1ZXNcIj52ZWN0b3Igb2YgY29udGludW91cyByYW5nZSB2YWx1ZXNcclxuICAvLy8gPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcIm5ld1ZhbHVlXCI+dmFsdWUsIHRyeSBmb3VuZCBpbiB0aGUgdmVjdG9yIG9mIGNvbnRpbnVvdXMgcmFuZ2VzXHJcbiAgLy8vIDwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPiBmb3VuZCB2YWx1ZSBvciBudWxsKG5vdCBmb3VuZClcclxuICAvLy8gPC9yZXR1cm5zPlxyXG4gIGZpbGxBbHBoYUJ5Q29udGludW91c1JhbmdlVmFsdWVzKENvbnRpbnVvdXNSYW5nZVZhbHVlczogTGlzdDxzdHJpbmc+LCBuZXdWYWx1ZTogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIG5ld1ZhbHVlID0gU3RyVXRpbC5ydHJpbShuZXdWYWx1ZSk7XHJcblxyXG5cclxuICAgIGlmIChDb250aW51b3VzUmFuZ2VWYWx1ZXMgIT09IG51bGwpIHtcclxuICAgICAgZm9yIChsZXQgaTogbnVtYmVyID0gMDsgaSA8IENvbnRpbnVvdXNSYW5nZVZhbHVlcy5sZW5ndGg7IGkgPSBpICsgMSkge1xyXG4gICAgICAgIGxldCBmcm9tOiBzdHJpbmcgPSBDb250aW51b3VzUmFuZ2VWYWx1ZXMuZ2V0X0l0ZW0oaSk7XHJcbiAgICAgICAgbGV0IHRvOiBzdHJpbmcgPSBDb250aW51b3VzUmFuZ2VWYWx1ZXMuZ2V0X0l0ZW0oaSA9IGkgKyAxKTtcclxuICAgICAgICBpZiAoTlN0cmluZy5Db21wYXJlT3JkaW5hbChuZXdWYWx1ZSwgZnJvbSkgPj0gMCAmJiBOU3RyaW5nLkNvbXBhcmVPcmRpbmFsKG5ld1ZhbHVlLCB0bykgPD0gMCkge1xyXG4gICAgICAgICAgcmV0dXJuIG5ld1ZhbHVlO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBudWxsO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIFRyeSB0byBjb21wbGV0ZSB0aGUgbmV3VmFsdWUgdXNpbmcgdGhlIFJhbmdlXHJcbiAgLy8vICAgZmlyc3QgdHJ5IHRvIGNvbWxldGUgdGhlIHZhbHVlIGZvciBjYXNlIG1lYW5pbmcgYW5kIGFmdGVyIHRoYXQgZm9yIGlnbm9yZSBjYXNlXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInZlY3RvclwiPm9mIHJhbmdlc1xyXG4gIC8vLyA8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiY2hlY2tlZFwiPnZhbHVlXHJcbiAgLy8vIDwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPiB2YWx1ZSBjb21wbGV0ZWQgYnkgcmFuZ2VcclxuICAvLy8gPC9yZXR1cm5zPlxyXG4gIGNvbXBsZXRlQWxwaGFCeVJhbmdlKGRpc2NyZXRlUmFuZ2VWYWx1ZXM6IExpc3Q8c3RyaW5nPiwgbmV3VmFsdWU6IHN0cmluZyk6IHN0cmluZyB7XHJcblxyXG4gICAgbGV0IG1heENvaW5jaWRlOiBudW1iZXJbXSA9IG5ldyBBcnJheTxudW1iZXI+KDIpO1xyXG4gICAgZm9yIChsZXQgX2FpOiBudW1iZXIgPSAwOyBfYWkgPCBtYXhDb2luY2lkZS5sZW5ndGg7ICsrX2FpKVxyXG4gICAgICBtYXhDb2luY2lkZVtfYWldID0gMDtcclxuXHJcbiAgICBsZXQgYmVzdEl0ZW06IHN0cmluZ1tdID0gbmV3IEFycmF5PHN0cmluZz4oMik7XHJcbiAgICBmb3IgKGxldCBfYWk6IG51bWJlciA9IDA7IF9haSA8IGJlc3RJdGVtLmxlbmd0aDsgKytfYWkpXHJcbiAgICAgIGJlc3RJdGVtW19haV0gPSBudWxsO1xyXG5cclxuICAgIGxldCBDSEVDS19DQVNFOiBudW1iZXIgPSAwO1xyXG4gICAgbGV0IElHTk9SRV9DQVNFOiBudW1iZXIgPSAxO1xyXG5cclxuICAgIGxldCBjYXNlTGV0dGVyczogbnVtYmVyID0gQ0hFQ0tfQ0FTRTtcclxuXHJcbiAgICB3aGlsZSAoY2FzZUxldHRlcnMgPT09IENIRUNLX0NBU0UgfHwgY2FzZUxldHRlcnMgPT09IElHTk9SRV9DQVNFKSB7XHJcbiAgICAgIGxldCBsb3dlclZhbHVlOiBzdHJpbmc7XHJcbiAgICAgIGlmIChjYXNlTGV0dGVycyA9PT0gQ0hFQ0tfQ0FTRSkge1xyXG4gICAgICAgIGxvd2VyVmFsdWUgPSBuZXdWYWx1ZTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICBsb3dlclZhbHVlID0gbmV3VmFsdWUudG9Mb3dlckNhc2UoKTtcclxuICAgICAgfVxyXG4gICAgICBsb3dlclZhbHVlID0gU3RyVXRpbC5ydHJpbShsb3dlclZhbHVlKTtcclxuICAgICAgZm9yIChsZXQgaTogbnVtYmVyID0gMDsgaSA8IGRpc2NyZXRlUmFuZ2VWYWx1ZXMubGVuZ3RoOyBpID0gaSArIDEpIHtcclxuICAgICAgICBsZXQgd3JvbmdMZXR0ZXI6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgICAgICBsZXQgY3VyckNvaW5jaWRlOiBudW1iZXIgPSAwO1xyXG4gICAgICAgIGxldCByYW5nZUl0ZW06IHN0cmluZztcclxuICAgICAgICBpZiAoY2FzZUxldHRlcnMgPT09IENIRUNLX0NBU0UpIHtcclxuICAgICAgICAgIHJhbmdlSXRlbSA9IGRpc2NyZXRlUmFuZ2VWYWx1ZXMuZ2V0X0l0ZW0oaSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgcmFuZ2VJdGVtID0gZGlzY3JldGVSYW5nZVZhbHVlcy5nZXRfSXRlbShpKS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBsZXQgbG93TGVuZ3RoOiBudW1iZXIgPSBsb3dlclZhbHVlLmxlbmd0aDtcclxuICAgICAgICBsZXQgcmFuZ2VMZW5ndGg6IG51bWJlciA9IHJhbmdlSXRlbS5sZW5ndGg7XHJcbiAgICAgICAgaWYgKGxvd0xlbmd0aCA8IHJhbmdlTGVuZ3RoKSB7XHJcbiAgICAgICAgICBmb3IgKGxldCBqOiBudW1iZXIgPSAwOyBqIDwgbG93TGVuZ3RoOyBqID0gaiArIDEpIHtcclxuICAgICAgICAgICAgaWYgKCEobG93ZXJWYWx1ZS5jaGFyQXQoaikgPT09IHJhbmdlSXRlbS5jaGFyQXQoaikpKSB7XHJcbiAgICAgICAgICAgICAgd3JvbmdMZXR0ZXIgPSB0cnVlO1xyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGN1cnJDb2luY2lkZSA9IGN1cnJDb2luY2lkZSArIDE7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgd3JvbmdMZXR0ZXIgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGN1cnJDb2luY2lkZSA+IG1heENvaW5jaWRlW2Nhc2VMZXR0ZXJzXSAmJiAhd3JvbmdMZXR0ZXIpIHtcclxuICAgICAgICAgIGJlc3RJdGVtW2Nhc2VMZXR0ZXJzXSA9IGRpc2NyZXRlUmFuZ2VWYWx1ZXMuZ2V0X0l0ZW0oaSk7XHJcbiAgICAgICAgICBtYXhDb2luY2lkZVtjYXNlTGV0dGVyc10gPSBjdXJyQ29pbmNpZGU7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGNhc2VMZXR0ZXJzID0gY2FzZUxldHRlcnMgKyAxO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICBpZiAoYmVzdEl0ZW1bQ0hFQ0tfQ0FTRV0gIT09IG51bGwpXHJcbiAgICAgIHJldHVybiBiZXN0SXRlbVtDSEVDS19DQVNFXTtcclxuICAgIGVsc2Uge1xyXG4gICAgICBpZiAoYmVzdEl0ZW1bSUdOT1JFX0NBU0VdICE9PSBudWxsKVxyXG4gICAgICAgIHJldHVybiBiZXN0SXRlbVtJR05PUkVfQ0FTRV07XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG51bGw7XHJcbiAgfVxyXG5cclxuICBzZXREYXRlQ2hhcihkYXRlQ2hhcjogbnVtYmVyKTogdm9pZCB7XHJcbiAgICB0aGlzLkRBVEVDSEFSID0gZGF0ZUNoYXI7XHJcbiAgfVxyXG5cclxuICBnZXREYXRlQ2hhcigpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIHRoaXMuREFURUNIQVI7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJ2YWx1ZVwiPjwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwic3RvcmFnZUF0dHJpYnV0ZVwiPjwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPjwvcmV0dXJucz5cclxuICBzdGF0aWMgU3RyaW5nVmFsdWVUb01nVmFsdWUodmFsdWU6IHN0cmluZywgc3RvcmFnZUF0dHJpYnV0ZTogU3RvcmFnZUF0dHJpYnV0ZSwgZmlsbGVyOiBzdHJpbmcsIGxlbmd0aDogbnVtYmVyKTogYW55IHtcclxuICAgIHN3aXRjaCAoc3RvcmFnZUF0dHJpYnV0ZSkge1xyXG4gICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuQUxQSEE6XHJcbiAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5VTklDT0RFOiB7XHJcbiAgICAgICAgbGV0IG5ld1ZhbDogc3RyaW5nID0gdmFsdWU7XHJcbiAgICAgICAgbmV3VmFsID0gTlN0cmluZy5QYWRSaWdodChuZXdWYWwsIGxlbmd0aCwgZmlsbGVyKTtcclxuICAgICAgICByZXR1cm4gbmV3VmFsO1xyXG4gICAgICB9XHJcbiAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5OVU1FUklDOlxyXG4gICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuREFURTpcclxuICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLlRJTUU6XHJcbiAgICAgICAgcmV0dXJuIG5ldyBOVU1fVFlQRSh2YWx1ZSk7XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG5cclxuLy8vIDxzdW1tYXJ5PlxyXG4vLy8gICBCZWluZyB1c2VkIHRvIHNlbmQgcGFyYW1ldGVycyB0byB0aGUgJ3RpbWVfYnJlYWsnIG1ldGhvZFxyXG4vLy8gPC9zdW1tYXJ5PlxyXG5leHBvcnQgY2xhc3MgVGltZUJyZWFrUGFyYW1zIHtcclxuICBob3VyOiBudW1iZXIgPSAwO1xyXG4gIG1pbnV0ZTogbnVtYmVyID0gMDtcclxuICBzZWNvbmQ6IG51bWJlciA9IDA7XHJcblxyXG4gIGNvbnN0cnVjdG9yKCk7XHJcbiAgY29uc3RydWN0b3IoaG91cl86IG51bWJlciwgbWludXRlXzogbnVtYmVyLCBzZWNvbmRfOiBudW1iZXIpO1xyXG4gIGNvbnN0cnVjdG9yKGhvdXJfPzogbnVtYmVyLCBtaW51dGVfPzogbnVtYmVyLCBzZWNvbmRfPzogbnVtYmVyKSB7XHJcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICB0aGlzLmNvbnN0cnVjdG9yXzAoKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdGhpcy5jb25zdHJ1Y3Rvcl8xKGhvdXJfLCBtaW51dGVfLCBzZWNvbmRfKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY29uc3RydWN0b3JfMCgpOiB2b2lkIHtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY29uc3RydWN0b3JfMShob3VyXzogbnVtYmVyLCBtaW51dGVfOiBudW1iZXIsIHNlY29uZF86IG51bWJlcik6IHZvaWQge1xyXG4gICAgdGhpcy5ob3VyID0gaG91cl87XHJcbiAgICB0aGlzLm1pbnV0ZSA9IG1pbnV0ZV87XHJcbiAgICB0aGlzLnNlY29uZCA9IHNlY29uZF87XHJcbiAgfVxyXG59XHJcblxyXG4vLy8gPHN1bW1hcnk+XHJcbi8vLyAgIEJlaW5nIHVzZWQgdG8gc2VuZCBpbnQgYnkgUmVmXHJcbi8vLyA8L3N1bW1hcnk+XHJcbmNsYXNzIEludFJlZiB7XHJcbiAgdmFsOiBudW1iZXIgPSAwO1xyXG5cclxuICBjb25zdHJ1Y3Rvcih2YWxfOiBudW1iZXIpIHtcclxuICAgIHRoaXMudmFsID0gdmFsXztcclxuICB9XHJcbn1cclxuXHJcbi8vLyA8c3VtbWFyeT5cclxuLy8vICAgQmVpbmcgdXNlZCB0byBzZW5kIHBhcmFtZXRlcnMgdG8gdGhlICdkYXRlX2lfMl9ubScgbWV0aG9kXHJcbi8vLyA8L3N1bW1hcnk+XHJcbmNsYXNzIERhdGVOYW1lUGFyYW1zIHtcclxuICBvdXRWYWw6IHN0cmluZ1tdID0gbnVsbDtcclxuICBsZW46IG51bWJlciA9IDA7XHJcbiAgb3V0SWR4OiBudW1iZXIgPSAwO1xyXG5cclxuICBjb25zdHJ1Y3RvcihvdXRfOiBzdHJpbmdbXSwgb3V0SWR4XzogbnVtYmVyLCBsZW5fOiBudW1iZXIpIHtcclxuICAgIHRoaXMub3V0VmFsID0gb3V0XztcclxuICAgIHRoaXMub3V0SWR4ID0gb3V0SWR4XztcclxuICAgIHRoaXMubGVuID0gbGVuXztcclxuICB9XHJcbn1cclxuXHJcbi8vLyA8c3VtbWFyeT5cclxuLy8vICAgQmVpbmcgdXNlZCB0byBzZW5kIHBhcmFtZXRlcnMgdG8gdGhlICdkYXRlX2JyZWFrX2RhdGVtb2RlJyBtZXRob2RcclxuLy8vICAgaXQncyBzdHJ1Y3RcclxuLy8vIDwvc3VtbWFyeT5cclxuZXhwb3J0IGNsYXNzIERhdGVCcmVha1BhcmFtcyB7XHJcbiAgZGF5OiBudW1iZXIgPSAwO1xyXG4gIGRvdzogbnVtYmVyID0gMDtcclxuICBkb3k6IG51bWJlciA9IDA7XHJcbiAgbW9udGg6IG51bWJlciA9IDA7XHJcbiAgeWVhcjogbnVtYmVyID0gMDtcclxuXHJcbiAgY29uc3RydWN0b3IoKTtcclxuICBjb25zdHJ1Y3Rvcih5ZWFyXzogbnVtYmVyLCBtb250aF86IG51bWJlciwgZGF5XzogbnVtYmVyLCBkb3lfOiBudW1iZXIsIGRvd186IG51bWJlcik7XHJcbiAgY29uc3RydWN0b3IoeWVhcl8/OiBudW1iZXIsIG1vbnRoXz86IG51bWJlciwgZGF5Xz86IG51bWJlciwgZG95Xz86IG51bWJlciwgZG93Xz86IG51bWJlcikge1xyXG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDApIHtcclxuICAgICAgdGhpcy5jb25zdHJ1Y3Rvcl8wKCk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHRoaXMuY29uc3RydWN0b3JfMSh5ZWFyXywgbW9udGhfLCBkYXlfLCBkb3lfLCBkb3dfKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY29uc3RydWN0b3JfMCgpOiB2b2lkIHtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY29uc3RydWN0b3JfMSh5ZWFyXzogbnVtYmVyLCBtb250aF86IG51bWJlciwgZGF5XzogbnVtYmVyLCBkb3lfOiBudW1iZXIsIGRvd186IG51bWJlcik6IHZvaWQge1xyXG4gICAgdGhpcy55ZWFyID0geWVhcl87XHJcbiAgICB0aGlzLm1vbnRoID0gbW9udGhfO1xyXG4gICAgdGhpcy5kYXkgPSBkYXlfO1xyXG4gICAgdGhpcy5kb3kgPSBkb3lfO1xyXG4gICAgdGhpcy5kb3cgPSBkb3dfO1xyXG4gIH1cclxufVxyXG4iXX0=
|