@magic-xpa/engine 4.800.0-dev480.95 → 4.800.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (49) hide show
  1. package/bundles/magic-xpa-engine.umd.js +1269 -1077
  2. package/bundles/magic-xpa-engine.umd.js.map +1 -1
  3. package/bundles/magic-xpa-engine.umd.min.js +3 -2
  4. package/bundles/magic-xpa-engine.umd.min.js.map +1 -1
  5. package/esm2015/index.js +2 -1
  6. package/esm2015/src/AccessHelper.js +7 -1
  7. package/esm2015/src/ClientManager.js +2 -2
  8. package/esm2015/src/ConstInterface.js +7 -3
  9. package/esm2015/src/CurrentClientVersion.js +2 -2
  10. package/esm2015/src/commands/ClientToServer/CommandFactory.js +15 -1
  11. package/esm2015/src/commands/ClientToServer/ExecOperCommand.js +4 -1
  12. package/esm2015/src/commands/ClientToServer/SelectProgramCommand.js +15 -0
  13. package/esm2015/src/commands/ServerToClient/EnhancedVerifyCommand.js +1 -7
  14. package/esm2015/src/communications/InteractiveCommunicationsFailureHandler.js +2 -2
  15. package/esm2015/src/data/DataView.js +3 -3
  16. package/esm2015/src/env/Environment.js +11 -1
  17. package/esm2015/src/event/ActionManager.js +3 -2
  18. package/esm2015/src/event/EventHandler.js +4 -4
  19. package/esm2015/src/event/EventsManager.js +127 -26
  20. package/esm2015/src/event/IEventsManager.js +1 -1
  21. package/esm2015/src/exp/ExpressionDict.js +3 -1
  22. package/esm2015/src/exp/ExpressionEvaluator.js +30 -19
  23. package/esm2015/src/gui/MgForm.js +16 -24
  24. package/esm2015/src/remote/RemoteCommandsProcessor.js +48 -21
  25. package/esm2015/src/rt/Operation.js +9 -32
  26. package/esm2015/src/tasks/MGData.js +11 -1
  27. package/esm2015/src/tasks/MGDataCollection.js +12 -2
  28. package/esm2015/src/tasks/Task.js +37 -45
  29. package/esm2015/src/util/PrmMap.js +11 -1
  30. package/fesm2015/magic-xpa-engine.js +347 -174
  31. package/fesm2015/magic-xpa-engine.js.map +1 -1
  32. package/index.d.ts +1 -0
  33. package/package.json +4 -4
  34. package/src/AccessHelper.d.ts +5 -0
  35. package/src/ConstInterface.d.ts +6 -2
  36. package/src/commands/ClientToServer/CommandFactory.d.ts +1 -0
  37. package/src/commands/ClientToServer/ExecOperCommand.d.ts +2 -1
  38. package/src/commands/ClientToServer/SelectProgramCommand.d.ts +6 -0
  39. package/src/commands/ServerToClient/EnhancedVerifyCommand.d.ts +0 -1
  40. package/src/env/Environment.d.ts +3 -0
  41. package/src/event/EventsManager.d.ts +13 -2
  42. package/src/event/IEventsManager.d.ts +3 -1
  43. package/src/exp/ExpressionEvaluator.d.ts +1 -0
  44. package/src/gui/MgForm.d.ts +1 -1
  45. package/src/rt/Operation.d.ts +0 -3
  46. package/src/tasks/MGData.d.ts +2 -0
  47. package/src/tasks/MGDataCollection.d.ts +1 -0
  48. package/src/tasks/Task.d.ts +0 -1
  49. package/src/util/PrmMap.d.ts +1 -0
@@ -1,5 +1,5 @@
1
1
  import { __awaiter } from "tslib";
2
- import { BlobType, Commands, DataModificationTypes, DateBreakParams, DisplayConvertor, ExpressionInterface, ExpVal, GuiExpressionEvaluator, NUM_TYPE, PIC, PropInterface, TimeBreakParams, VectorType } from '@magic-xpa/gui';
2
+ import { BlobType, Commands, DataModificationTypes, DisplayConvertor, ExpressionInterface, ExpVal, GuiExpressionEvaluator, NUM_TYPE, PIC, PropInterface, VectorType } from '@magic-xpa/gui';
3
3
  import { Constants, InternalInterface, Logger, Misc, MsgInterface, PICInterface, StorageAttribute, StorageAttributeCheck, StrUtil, UtilDateJpn, UtilStrByteMode } from '@magic-xpa/utils';
4
4
  import { ApplicationException, Array_Enumerator, Debug, Encoding, Exception, List, NChar, NNumber, NString, RefParam, Stack, StringBuilder } from '@magic-xpa/mscorelib';
5
5
  import { ExpressionLocalJpn } from './ExpressionLocalJpn';
@@ -1585,6 +1585,9 @@ export class ExpressionEvaluator extends GuiExpressionEvaluator {
1585
1585
  resVal.IsNull = false;
1586
1586
  this.eval_op_delete_cookie(valStack.pop().StrVal, resVal);
1587
1587
  break;
1588
+ case ExpressionInterface.EXP_OP_ROUTEGET:
1589
+ this.eval_op_route_get(resVal);
1590
+ break;
1588
1591
  default:
1589
1592
  return;
1590
1593
  }
@@ -4137,27 +4140,30 @@ export class ExpressionEvaluator extends GuiExpressionEvaluator {
4137
4140
  resVal.Attr = StorageAttribute.BOOLEAN;
4138
4141
  resVal.StrVal = '';
4139
4142
  let args = this.params2arguments(expVal, 0, expVal.length);
4140
- var expires, path, domain, secure, sameSite;
4141
- expires = args[1];
4143
+ var expiresDate, path, domain, secure, sameSite;
4144
+ expiresDate = args[1];
4145
+ let expiresTime = args[2];
4142
4146
  let nativeDt;
4143
- if (expires) {
4144
- let breakParams = new DateBreakParams();
4145
- DisplayConvertor.Instance.date_break_datemode(breakParams, expires, false, 0);
4146
- if (breakParams.month > 0)
4147
- breakParams.month = breakParams.month - 1;
4147
+ if (expiresDate) {
4148
+ let breakParams = DisplayConvertor.Instance.getNewDateBreakParams();
4149
+ DisplayConvertor.Instance.date_break_datemode(breakParams, expiresDate, false, this.ExpTask.getCompIdx());
4150
+ let year = breakParams.year;
4151
+ let month = breakParams.month;
4152
+ let day = breakParams.day;
4148
4153
  if (breakParams.year == 0 && breakParams.month == 0 && breakParams.day == 0)
4149
4154
  return null;
4150
- nativeDt = new Date(breakParams.year, breakParams.month, breakParams.day);
4151
- let timeBreakParams = new TimeBreakParams();
4152
- DisplayConvertor.time_break(timeBreakParams, expires);
4153
- nativeDt.setHours(timeBreakParams.hour);
4154
- nativeDt.setMinutes(timeBreakParams.minute);
4155
- nativeDt.setSeconds(timeBreakParams.second);
4156
- }
4157
- path = args[2];
4158
- domain = args[3];
4155
+ nativeDt = new Date(breakParams.year, breakParams.month - 1, breakParams.day);
4156
+ if (expiresTime) {
4157
+ let timeBreakParams = DisplayConvertor.Instance.getNewTimeBreakParams();
4158
+ DisplayConvertor.time_break(timeBreakParams, expiresTime);
4159
+ nativeDt.setHours(timeBreakParams.hour);
4160
+ nativeDt.setMinutes(timeBreakParams.minute);
4161
+ nativeDt.setSeconds(timeBreakParams.second);
4162
+ }
4163
+ }
4164
+ path = args[3];
4165
+ domain = args[4];
4159
4166
  resVal.BoolVal = CookieService.setCookie(cookieName, args[0], nativeDt, path, domain, secure, sameSite);
4160
- ;
4161
4167
  }
4162
4168
  eval_op_get_cookie(cookieName, resVal) {
4163
4169
  resVal.StrVal = CookieService.getCookie(cookieName);
@@ -4167,6 +4173,11 @@ export class ExpressionEvaluator extends GuiExpressionEvaluator {
4167
4173
  resVal.BoolVal = CookieService.deleteCookie(cookieName);
4168
4174
  ;
4169
4175
  }
4176
+ eval_op_route_get(resVal) {
4177
+ resVal.Attr = StorageAttribute.UNICODE;
4178
+ resVal.IsNull = false;
4179
+ resVal.StrVal = Commands.getLastRoute();
4180
+ }
4170
4181
  params2arguments(Exp_params, startAt, count) {
4171
4182
  let NULL_STR = '';
4172
4183
  let attr = new Array();
@@ -4427,4 +4438,4 @@ class DynamicOperation {
4427
4438
  this.opCode_ = ExpressionInterface.EXP_OP_NONE;
4428
4439
  }
4429
4440
  }
4430
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRXhwcmVzc2lvbkV2YWx1YXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2VuZ2luZS9zcmMvZXhwL0V4cHJlc3Npb25FdmFsdWF0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFDTCxRQUFRLEVBQ1IsUUFBUSxFQUNSLHFCQUFxQixFQUNyQixlQUFlLEVBQ2YsZ0JBQWdCLEVBQ2hCLG1CQUFtQixFQUNuQixNQUFNLEVBQ04sc0JBQXNCLEVBSXRCLFFBQVEsRUFDUixHQUFHLEVBRUgsYUFBYSxFQUNiLGVBQWUsRUFDZixVQUFVLEVBQ1gsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QixPQUFPLEVBQ0wsU0FBUyxFQUNULGlCQUFpQixFQUNqQixNQUFNLEVBQ04sSUFBSSxFQUNKLFlBQVksRUFDWixZQUFZLEVBQ1osZ0JBQWdCLEVBQ2hCLHFCQUFxQixFQUNyQixPQUFPLEVBQ1AsV0FBVyxFQUNYLGVBQWUsRUFDaEIsTUFBTSxrQkFBa0IsQ0FBQztBQUMxQixPQUFPLEVBQ0wsb0JBQW9CLEVBQ3BCLGdCQUFnQixFQUNoQixLQUFLLEVBQ0wsUUFBUSxFQUNSLFNBQVMsRUFDVCxJQUFJLEVBQ0osS0FBSyxFQUNMLE9BQU8sRUFDUCxPQUFPLEVBQ1AsUUFBUSxFQUNSLEtBQUssRUFDTCxhQUFhLEVBQ2QsTUFBTSxzQkFBc0IsQ0FBQztBQUM5QixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUUxRCxPQUFPLEVBQVcsY0FBYyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDM0QsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sNENBQTRDLENBQUM7QUFDakYsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3JELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBRXJFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFB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QVcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDO29CQUM5QixJQUFJLEdBQVcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDO29CQUM5QixJQUFJLEdBQVcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDO29CQUM5QixNQUFNLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO29CQUN2RixNQUFNO2dCQUVSLEtBQUssbUJBQW1CLENBQUMsWUFBWTtvQkFDbkMsSUFBSSxHQUFXLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQztvQkFDOUIsSUFBSSxHQUFXLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQztvQkFDOUIsSUFBSSxHQUFXLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQztvQkFDOUIsSUFBSSxHQUFXLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQztvQkFDOUIsSUFBSSxHQUFXLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQztvQkFDOUIsSUFBSSxHQUFXLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQztvQkFDOUIsTUFBTSxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO29CQUNyRSxNQUFNO2dCQUVSLEtBQUssbUJBQW1CLENBQUMsY0FBYztvQkFDckMsSUFBSSxHQUFXLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQztvQkFFOUIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO29CQUNyQyxNQUFNO2dCQUVSLEtBQUssbUJBQW1CLENBQUMsY0FBYztvQkFDckMsSUFBSSxHQUFXLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQztvQkFDOUIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEVB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QUMsSUFBSSxHQUFHLGdCQUFnQixDQUFDLE9BQU8sQ0FBQztvQkFDdkMsTUFBTTtnQkFFUixLQUFLLG1CQUFtQixDQUFDLFVBQVU7b0JBQ2pDLElBQUksR0FBVyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUM7b0JBQzlCLE1BQU0sQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7b0JBQ3RELE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxNQUFNLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxDQUFDO29CQUMxQyxNQUFNLENBQUMsSUFBSSxHQUFHLGdCQUFnQixDQUFDLE9BQU8sQ0FBQztvQkFDdkMsTUFBTTtnQkFFUixLQUFLLG1CQUFtQixDQUFDLFVBQVU7b0JBQ2pDLElBQUksR0FBVyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUM7b0JBQzlCLE1BQU0sQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7b0JBQ3RELE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxNQUFNLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxDQUFDO29CQUMxQyxNQUFNLENBQUMsSUFBSSxHQUFHLGdCQUFnQixDQUFDLE9BQU8sQ0FBQztvQkFDdkMsTUFBTTtnQkFFUixLQUFLLG1CQUFtQixDQUFDLFVBQVU7b0JBQ2pDLElBQUksR0FBVyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUM7b0JBQzlCLE1BQU0sQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7b0JBQ3RELE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxNQUFNLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxDQUFDO29CQUMxQyxNQUFNLENBQUMsSUFBSSxHQUFHLGdCQUFnQixDQUFDLE9BQU8sQ0FBQztvQkFFdkMsTUFBTTtnQkFFUixLQUFLLG1CQUFtQixDQUFDLFVBQVU7b0JBQ2pDLElBQUksR0FBVyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUM7b0JBQzlCLE1BQU0sQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7b0JBQ3RELE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxNQUFNLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxDQUFDO29CQUMxQyxNQUFNLENBQUMsSUFBSSxHQUFHLGdCQUFnQixDQUFDLE9BQU8sQ0FBQztvQkFDdkMsTUFBTTtnQkFFUixLQUFLLG1CQUFtQixDQUFDLFdBQVc7b0JBQ2xDLElBQUksR0FBVyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUM7b0JBQzlCLE1BQU0sQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7b0JBQ3ZELE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxNQUFNLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxDQUFDO29CQUMxQyxNQUFNLENBQUMsSUFBSSxHQUFHLGdCQUFnQixDQUFDLE9BQU8sQ0FBQztvQkFDdkMsTUFBTTtnQkFFUixLQUFLLG1CQUFtQixDQUFDLFdBQVc7b0JBQ2xDLElBQUksR0FBVyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUM7b0JBQzlCLE1BQU0sQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7b0JBQ3ZELE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxNQUFNLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxDQUFDO29CQUMxQyxNQUFNLENBQUMsSUFBSSxHQUFHLGdCQUFnQixDQUFDLE9BQU8sQ0FBQztvQkFDdkMsTUFBTTtnQkFFUixLQUFLLG1CQUFtQixDQUFDLFdBQVc7b0JBQ2xDLElBQUksR0FBVyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUM7b0JBQzlCLE1BQU0sQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsUUFBUSxD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SUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBVSxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQVcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztRQUM3SSxJQUFJLENBQUMsT0FBTyxJQUFJLENBQUMsQ0FBQztRQUVsQixJQUFJLEVBQUUsR0FBVyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBVSxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQVcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztRQUM3SSxJQUFJLENBQUMsT0FBTyxJQUFJLENBQUMsQ0FBQztRQUVsQixJQUFJLEVBQUUsR0FBVyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBVSxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQVcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztRQUM3SSxJQUFJLENBQUMsT0FBTyxJQUFJLENBQUMsQ0FBQztRQUVsQixJQUFJLEVBQUUsR0FBVyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBVSxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQVcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJ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LENBQUMsU0FBUyxHQUFHLENBQUM7d0JBQ3JCLFVBQVUsSUFBSSxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7O3dCQUVwQyxVQUFVLElBQUksT0FBTyxDQUFDLFNBQVMsQ0FBQztvQkFDcEMsTUFBTTthQUNiO1NBQ0o7SUFDTCxDQUFDO0NBQ0Y7QUFFRCxNQUFNLGdCQUFnQjtJQUF0QjtRQUNFLGNBQVMsR0FBVyxDQUFDLENBQUM7UUFDdEIsWUFBTyxHQUFXLG1CQUFtQixDQUFDLFdBQVcsQ0FBQztJQUNwRCxDQUFDO0NBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIEJsb2JUeXBlLFxyXG4gIENvbW1hbmRzLFxyXG4gIERhdGFNb2RpZmljYXRpb25UeXBlcyxcclxuICBEYXRlQnJlYWtQYXJhbXMsXHJcbiAgRGlzcGxheUNvbnZlcnRvcixcclxuICBFeHByZXNzaW9uSW50ZXJmYWNlLFxyXG4gIEV4cFZhbCxcclxuICBHdWlFeHByZXNzaW9uRXZhbHVhdG9yLFxyXG4gIElUYXNrLFxyXG4gIE1nQ29udHJvbEJhc2UsXHJcbiAgTWdGb3JtQmFzZSxcclxuICBOVU1fVFlQRSxcclxuICBQSUMsXHJcbiAgUHJvcGVydHksXHJcbiAgUHJvcEludGVyZmFjZSxcclxuICBUaW1lQnJlYWtQYXJhbXMsXHJcbiAgVmVjdG9yVHlwZVxyXG59IGZyb20gJ0BtYWdpYy14cGEvZ3VpJztcclxuaW1wb3J0IHtcclxuICBDb25zdGFudHMsXHJcbiAgSW50ZXJuYWxJbnRlcmZhY2UsXHJcbiAgTG9nZ2VyLFxyXG4gIE1pc2MsXHJcbiAgTXNnSW50ZXJmYWNlLFxyXG4gIFBJQ0ludGVyZmFjZSxcclxuICBTdG9yYWdlQXR0cmlidXRlLFxyXG4gIFN0b3JhZ2VBdHRyaWJ1dGVDaGVjayxcclxuICBTdHJVdGlsLFxyXG4gIFV0aWxEYXRlSnBuLFxyXG4gIFV0aWxTdHJCeXRlTW9kZVxyXG59IGZyb20gJ0BtYWdpYy14cGEvdXRpbHMnO1xyXG5pbXBvcnQge1xyXG4gIEFwcGxpY2F0aW9uRXhjZXB0aW9uLFxyXG4gIEFycmF5X0VudW1lcmF0b3IsXHJcbiAgRGVidWcsXHJcbiAgRW5jb2RpbmcsXHJcbiAgRXhjZXB0aW9uLFxyXG4gIExpc3QsXHJcbiAgTkNoYXIsXHJcbiAgTk51bWJlcixcclxuICBOU3RyaW5nLFxyXG4gIFJlZlBhcmFtLFxyXG4gIFN0YWNrLFxyXG4gIFN0cmluZ0J1aWxkZXJcclxufSBmcm9tICdAbWFnaWMteHBhL21zY29yZWxpYic7XHJcbmltcG9ydCB7IEV4cHJlc3Npb25Mb2NhbEpwbiB9IGZyb20gJy4vRXhwcmVzc2lvbkxvY2FsSnBuJztcclxuaW1wb3J0IHsgRmllbGQgfSBmcm9tICcuLi9kYXRhL0ZpZWxkJztcclxuaW1wb3J0IHsgRXhwRGVzYywgRXhwcmVzc2lvbkRpY3QgfSBmcm9tICcuL0V4cHJlc3Npb25EaWN0JztcclxuaW1wb3J0IHsgRGF0YVZpZXdDb21tYW5kVHlwZSB9IGZyb20gJy4uL2NvbW1hbmRzL0NsaWVudFRvU2VydmVyL0RhdGF2aWV3Q29tbWFuZCc7XHJcbmltcG9ydCB7IFJ1blRpbWVFdmVudCB9IGZyb20gJy4uL2V2ZW50L1J1blRpbWVFdmVudCc7XHJcbmltcG9ydCB7IEV2ZW50SGFuZGxlclBvc2l0aW9uIH0gZnJvbSAnLi4vZXZlbnQvRXZlbnRIYW5kbGVyUG9zaXRpb24nO1xyXG5pbXBvcnQgeyBFdmVudEhhbmRsZXIgfSBmcm9tICcuLi9ldmVudC9FdmVudEhhbmRsZXInO1xyXG5pbXBvcnQgeyBBcmd1bWVudHNMaXN0IH0gZnJvbSAnLi4vcnQvQXJndW1lbnRzTGlzdCc7XHJcbmltcG9ydCB7IEV4cHJlc3Npb24gfSBmcm9tICcuL0V4cHJlc3Npb24nO1xyXG5pbXBvcnQgeyBJQ2xpZW50Q29tbWFuZCB9IGZyb20gJy4uL2NvbW1hbmRzL0lDbGllbnRDb21tYW5kJztcclxuaW1wb3J0IHsgQ29tbWFuZEZhY3RvcnkgfSBmcm9tICcuLi9jb21tYW5kcy9DbGllbnRUb1NlcnZlci9Db21tYW5kRmFjdG9yeSc7XHJcbmltcG9ydCB7IFNvcnQgfSBmcm9tICcuLi90YXNrcy9zb3J0L1NvcnQnO1xyXG5pbXBvcnQgeyBUYXNrX1N1YmZvcm1FeGVjTW9kZUVudW0sIFRhc2tCYXNlLCBVc2VyUmFuZ2UgfSBmcm9tICcuLi90YXNrcy9UYXNrQmFzZSc7XHJcbmltcG9ydCB7IEdsb2JhbFBhcmFtcyB9IGZyb20gJy4vR2xvYmFsUGFyYW1zVGFibGUnO1xyXG5pbXBvcnQgeyBVc2VyRGV0YWlscyB9IGZyb20gJy4uL3NlY3VyaXR5L1VzZXJEZXRhaWxzJztcclxuaW1wb3J0IHsgT3BlcmF0aW9uIH0gZnJvbSAnLi4vcnQvT3BlcmF0aW9uJztcclxuaW1wb3J0IHsgQ29uc3RJbnRlcmZhY2UgfSBmcm9tICcuLi9Db25zdEludGVyZmFjZSc7XHJcbmltcG9ydCB7IE1nQ29udHJvbCB9IGZyb20gJy4uL2d1aS9NZ0NvbnRyb2wnO1xyXG5pbXBvcnQgeyBEYXRhVmlldyB9IGZyb20gJy4uL2RhdGEvRGF0YVZpZXcnO1xyXG5pbXBvcnQgeyBSZWNvcmQgfSBmcm9tICcuLi9kYXRhL1JlY29yZCc7XHJcbmltcG9ydCB7IE1nRm9ybSB9IGZyb20gJy4uL2d1aS9NZ0Zvcm0nO1xyXG5pbXBvcnQgeyBMYW5ndWFnZURhdGEgfSBmcm9tICcuLi9lbnYvTGFuZ3VhZ2VEYXRhJztcclxuaW1wb3J0IHsgRW52UGFyYW1zVGFibGUgfSBmcm9tICcuLi9lbnYvRW52VmFyaWFibGVzVGFibGUnO1xyXG5pbXBvcnQgeyBFbnZpcm9ubWVudCB9IGZyb20gJy4uL2Vudi9FbnZpcm9ubWVudCc7XHJcbmltcG9ydCB7IExhc3RGb2N1c2VkTWFuYWdlciB9IGZyb20gJy4uL3J0L0xhc3RGb2N1c2VkTWFuYWdlcic7XHJcbmltcG9ydCB7IFNlcnZlckNvbmZpZyB9IGZyb20gJy4uL1NlcnZlckNvbmZpZyc7XHJcbmltcG9ydCB7IEFjY2Vzc0hlbHBlciB9IGZyb20gJy4uL0FjY2Vzc0hlbHBlcic7XHJcbmltcG9ydCB7IGlzTnVsbE9yVW5kZWZpbmVkIH0gZnJvbSAndXRpbCc7XHJcbmltcG9ydCB7IENvb2tpZVNlcnZpY2UgfSBmcm9tICcuLi91dGlsL2Nvb2tpZS5zZXJ2aWNlJztcclxuXHJcbmV4cG9ydCBjbGFzcyBFeHByZXNzaW9uRXZhbHVhdG9yIGV4dGVuZHMgR3VpRXhwcmVzc2lvbkV2YWx1YXRvciB7XHJcblxyXG4gIHByaXZhdGUgc3RhdGljIEFTVEVSSVNLX0NIUjogc3RyaW5nID0gU3RyaW5nLmZyb21DaGFyQ29kZSgxKTtcclxuICBwcml2YXRlIHN0YXRpYyBRVUVTVElPTl9DSFI6IHN0cmluZyA9IFN0cmluZy5mcm9tQ2hhckNvZGUoMik7XHJcblxyXG4gIC8vIFNvbWUgaXRlbXMgaW4gcG9saXNoIGFyZSBzYXZlZCBhcyBzaG9ydCBvciBsb25nLlxyXG4gIC8vIEZvbGxvd2luZyBjb25zdGFudHMgYXJlIHVzZWQgd2hpbGUgcmVhZGluZyB0aGUgcG9saXNoZWQgZXhwcmVzc2lvbi5cclxuICBzdGF0aWMgUEFSRU5UX0xFTjogbnVtYmVyID0gMjsgLy8gMiBieXRlc1xyXG4gIHN0YXRpYyBTSE9SVF9PQkpFQ1RfTEVOOiBudW1iZXIgPSAyOyAvLyAyIGJ5dGVzXHJcbiAgc3RhdGljIExPTkdfT0JKRUNUX0xFTjogbnVtYmVyID0gNDsgLy8gNCBieXRlc1xyXG5cclxuICBwcml2YXRlIHN0YXRpYyBfcmVjdXJzaXZlRXhwQ2FsY0NvdW50OiBudW1iZXIgPSAwO1xyXG4gIHByaXZhdGUgX2NoYXJzVG9UcmltOiBzdHJpbmdbXSA9IFsnICcsICdcXDAnXTtcclxuICBwcml2YXRlIF9leHByZXNzaW9uTG9jYWxKcG46IEV4cHJlc3Npb25Mb2NhbEpwbiA9IG51bGw7XHJcbiAgc3RhdGljIEVycm9yVG9CZVdyaXR0ZW5JblNlcnZlckxvZzogc3RyaW5nID0gbnVsbDtcclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIENUT1JcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgc3VwZXIoKTtcclxuICAgIHRoaXMuX2V4cHJlc3Npb25Mb2NhbEpwbiA9IChVdGlsU3RyQnl0ZU1vZGUuaXNMb2NhbGVEZWZMYW5nSlBOKCkgPyBuZXcgRXhwcmVzc2lvbkxvY2FsSnBuKHRoaXMpIDogbnVsbCk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgR2V0IGEgYmFzaWMgdmFsdWUgZnJvbSB0aGUgZXhwcmVzc2lvbiBzdHJpbmdcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiZXhwU3RyVHJhY2tlclwiPnRoZSBleHByZXNzaW9uIHByb2Nlc3NlZDwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJvcENvZGVcIj50aGUgb3Bjb2RlIG9mIHRoZSBleHByZXNzaW9uPC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+IHRoZSBiYXNpYyBkYXRhIHZhbHVlIGFzIGFuIEV4cFZhbCBpbnN0YW5jZTwvcmV0dXJucz5cclxuICBwcml2YXRlIGdldEV4cEJhc2ljVmFsdWUoZXhwU3RyVHJhY2tlcjogRXhwU3RyVHJhY2tlciwgb3BDb2RlOiBudW1iZXIpOiBFeHBWYWwge1xyXG4gICAgbGV0IFZhbDogRXhwVmFsID0gbmV3IEV4cFZhbCgpO1xyXG4gICAgbGV0IGxlbjogbnVtYmVyO1xyXG4gICAgbGV0IHBhcmVudDogbnVtYmVyLCB2ZWU6IG51bWJlcjtcclxuICAgIGxldCBmaWVsZDogRmllbGQ7XHJcbiAgICBsZXQgZmxkVmFsOiBzdHJpbmc7XHJcblxyXG4gICAgc3dpdGNoIChvcENvZGUpIHtcclxuICAgICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgICAgLy8gU3RyaW5nIFZhbHVlXHJcbiAgICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfQTpcclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9IOlxyXG4gICAgICAgIFZhbC5BdHRyID0gU3RvcmFnZUF0dHJpYnV0ZS5VTklDT0RFO1xyXG4gICAgICAgIGxlbiA9IGV4cFN0clRyYWNrZXIuZ2V0NEJ5dGVOdW1iZXIoKTtcclxuICAgICAgICBWYWwuU3RyVmFsID0gZXhwU3RyVHJhY2tlci5nZXRTdHJpbmcobGVuLCB0cnVlLCB0cnVlKTsgLy8gZmlyc3QgdmFsdWUgaXMgdW5pY29kZVxyXG4gICAgICAgIC8vIHNpbmNlIHRoZSBzZXJ2ZXIgc2VuZHMgdXMgYm90aCBVbmljb2RlIHN0cmluZyBBbnNpIHN0cmluZyBmb3JcclxuICAgICAgICAvLyBlYWNoIHN0cmluZyBpbiB0aGUgZXhwcmVzc2lvbiwgYW5kIHRoZSBjbGllbnQgdXNlcyBvbmx5IHVuaWNvZGUsXHJcbiAgICAgICAgLy8gd2Ugd2lsbCBkaXJlZ2FyZCB0aGUgQW5zaSBzdHJpbmdcclxuICAgICAgICBsZW4gPSBleHBTdHJUcmFja2VyLmdldDRCeXRlTnVtYmVyKCk7XHJcbiAgICAgICAgZXhwU3RyVHJhY2tlci5nZXRTdHJpbmcobGVuLCB0cnVlLCBmYWxzZSk7IC8vIHNlY29uZCB2YWx1ZSBpcyBhbnNpXHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX0VYVF9BOlxyXG4gICAgICAgIFZhbC5BdHRyID0gU3RvcmFnZUF0dHJpYnV0ZS5BTFBIQTtcclxuICAgICAgICBsZW4gPSBleHBTdHJUcmFja2VyLmdldDRCeXRlTnVtYmVyKCk7XHJcbiAgICAgICAgZXhwU3RyVHJhY2tlci5nZXRTdHJpbmcobGVuLCB0cnVlLCB0cnVlKTsgLy8gZmlyc3QgdmFsdWUgaXMgdW5pY29kZVxyXG4gICAgICAgIC8vIHNpbmNlIHRoZSBzZXJ2ZXIgc2VuZHMgdXMgYm90aCBVbmljb2RlIHN0cmluZyBBbnNpIHN0cmluZyBmb3JcclxuICAgICAgICAvLyBlYWNoIHN0cmluZyBpbiB0aGUgZXhwcmVzc2lvbiwgYW5kIHRoZSBjbGllbnQgdXNlcyBvbmx5IHVuaWNvZGUsXHJcbiAgICAgICAgLy8gd2Ugd2lsbCBkaXJlZ2FyZCB0aGUgQW5zaSBzdHJpbmdcclxuICAgICAgICBsZW4gPSBleHBTdHJUcmFja2VyLmdldDRCeXRlTnVtYmVyKCk7XHJcbiAgICAgICAgVmFsLlN0clZhbCA9IGV4cFN0clRyYWNrZXIuZ2V0U3RyaW5nKGxlbiwgdHJ1ZSwgZmFsc2UpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgICAgLy8gTWFnaWMgTnVtYmVyIHZhbHVlXHJcbiAgICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfTjpcclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9UOlxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX0Q6XHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfRTpcclxuICAgICAgICBpZiAob3BDb2RlID09PSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9EKVxyXG4gICAgICAgICAgVmFsLkF0dHIgPSBTdG9yYWdlQXR0cmlidXRlLkRBVEU7XHJcbiAgICAgICAgZWxzZSBpZiAob3BDb2RlID09PSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9UKVxyXG4gICAgICAgICAgVmFsLkF0dHIgPSBTdG9yYWdlQXR0cmlidXRlLlRJTUU7XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgICAgVmFsLkF0dHIgPSBTdG9yYWdlQXR0cmlidXRlLk5VTUVSSUM7XHJcbiAgICAgICAgbGVuID0gZXhwU3RyVHJhY2tlci5nZXQyQnl0ZU51bWJlcigpO1xyXG4gICAgICAgIFZhbC5NZ051bVZhbCA9IGV4cFN0clRyYWNrZXIuZ2V0TWFnaWNOdW1iZXIobGVuLCB0cnVlKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAgIC8vIExvZ2ljYWwgVmFsdWVcclxuICAgICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9MOlxyXG4gICAgICAgIFZhbC5BdHRyID0gU3RvcmFnZUF0dHJpYnV0ZS5CT09MRUFOO1xyXG4gICAgICAgIFZhbC5Cb29sVmFsID0gKGV4cFN0clRyYWNrZXIuZ2V0MkJ5dGVOdW1iZXIoKSA9PT0gMSk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgICAvLyBWYXJpYWJsZSBWYWx1ZVxyXG4gICAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX1Y6XHJcbiAgICAgICAgcGFyZW50ID0gZXhwU3RyVHJhY2tlci5nZXRWYXJJZHgoKTtcclxuICAgICAgICB2ZWUgPSBleHBTdHJUcmFja2VyLmdldDRCeXRlTnVtYmVyKCk7XHJcbiAgICAgICAgZmllbGQgPSA8RmllbGQ+dGhpcy5FeHBUYXNrLmdldEZpZWxkRGVmKHBhcmVudCwgdmVlIC0gMSk7XHJcbiAgICAgICAgVmFsLkF0dHIgPSBmaWVsZC5nZXRUeXBlKCk7XHJcbiAgICAgICAgLyogRm9yIFZlY3RvciwgbnVsbCBhbGxvd2VkIGlzIGFsd2F5cyB0cnVlLiBJZiB0aGUgZmllbGQgaXMgYSB2ZWN0b3IsIHRoZSAgKi9cclxuICAgICAgICAvKiBmaWVsZC5udWxsQWxsb3dlZCgpIGFjdHVhbGx5IHJldHVybnMgdGhlIG51bGwgYWxsb3dlZCBmb3IgdGhlIHZlYyBjZWxsLiAqL1xyXG4gICAgICAgIGxldCBudWxsQWxsb3dlZDogYm9vbGVhbiA9IChmaWVsZC5nZXRUeXBlKCkgPT09IFN0b3JhZ2VBdHRyaWJ1dGUuQkxPQl9WRUNUT1IpXHJcbiAgICAgICAgICA/IHRydWVcclxuICAgICAgICAgIDogZmllbGQuTnVsbEFsbG93ZWQ7XHJcbiAgICAgICAgVmFsLklzTnVsbCA9IGZpZWxkLmlzTnVsbCgpICYmIG51bGxBbGxvd2VkO1xyXG4gICAgICAgIFZhbC5PcmlnaW5hbE51bGwgPSBWYWwuSXNOdWxsO1xyXG4gICAgICAgIGZsZFZhbCA9IGZpZWxkLmdldFZhbHVlKHRydWUpO1xyXG5cclxuICAgICAgICBpZiAoZmxkVmFsICE9IG51bGwgJiYgVmFsLklzTnVsbCAmJlxyXG4gICAgICAgICAgZmllbGQuZ2V0VGFzaygpLmdldE51bGxBcml0aG1ldGljKCkgPT09IENvbnN0YW50cy5OVUxMX0FSSVRIX1VTRV9ERUYpXHJcbiAgICAgICAgICBWYWwuSXNOdWxsID0gZmFsc2U7XHJcblxyXG4gICAgICAgIHN3aXRjaCAoVmFsLkF0dHIpIHtcclxuICAgICAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5BTFBIQTpcclxuICAgICAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5VTklDT0RFOlxyXG4gICAgICAgICAgICBWYWwuU3RyVmFsID0gZmxkVmFsO1xyXG4gICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuQkxPQl9WRUNUT1I6XHJcbiAgICAgICAgICAgIFZhbC5WZWN0b3JGaWVsZCA9IGZpZWxkO1xyXG4gICAgICAgICAgLy8gZmFsbHMgdGhyb3VnaFxyXG5cclxuICAgICAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5CTE9COlxyXG4gICAgICAgICAgICBWYWwuU3RyVmFsID0gZmxkVmFsO1xyXG5cclxuICAgICAgICAgICAgaWYgKFZhbC5TdHJWYWwgPT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgIFZhbC5Jc051bGwgPSB0cnVlO1xyXG4gICAgICAgICAgICAgIFZhbC5JbmNsdWRlQmxvYlByZWZpeCA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9IGVsc2VcclxuICAgICAgICAgICAgICBWYWwuSW5jbHVkZUJsb2JQcmVmaXggPSB0cnVlO1xyXG4gICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuTlVNRVJJQzpcclxuICAgICAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5EQVRFOlxyXG4gICAgICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLlRJTUU6XHJcbiAgICAgICAgICAgIFZhbC5NZ051bVZhbCA9IGZsZFZhbCAhPSBudWxsID8gbmV3IE5VTV9UWVBFKGZsZFZhbCkgOiBudWxsO1xyXG4gICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuQk9PTEVBTjpcclxuICAgICAgICAgICAgaWYgKGZsZFZhbCAhPSBudWxsKVxyXG4gICAgICAgICAgICAgIFZhbC5Cb29sVmFsID0gRGlzcGxheUNvbnZlcnRvci50b0Jvb2xlYW4oZmxkVmFsKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfRk9STTpcclxuICAgICAgICBwYXJlbnQgPSBleHBTdHJUcmFja2VyLmdldFZhcklkeCgpO1xyXG4gICAgICAgIGxldCBmb3JtRGlzcGxheUluZGV4SW5UYXNrOiBudW1iZXIgPSBleHBTdHJUcmFja2VyLmdldDRCeXRlTnVtYmVyKCk7XHJcbiAgICAgICAgZm9ybURpc3BsYXlJbmRleEluVGFzayA9ICg8VGFza0Jhc2U+dGhpcy5FeHBUYXNrKS5HZXRSZWFsTWFpbkRpc3BsYXlJbmRleE9uRGVwdGgoZm9ybURpc3BsYXlJbmRleEluVGFzayk7XHJcbiAgICAgICAgdGhpcy5Db25zdHJ1Y3RNYWdpY051bShWYWwsIGZvcm1EaXNwbGF5SW5kZXhJblRhc2ssIFN0b3JhZ2VBdHRyaWJ1dGUuTlVNRVJJQyk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX1ZBUjpcclxuICAgICAgICBwYXJlbnQgPSBleHBTdHJUcmFja2VyLmdldFZhcklkeCgpO1xyXG4gICAgICAgIHZlZSA9IGV4cFN0clRyYWNrZXIuZ2V0NEJ5dGVOdW1iZXIoKTtcclxuICAgICAgICBsZXQgaXRtOiBudW1iZXIgPSAoPFRhc2tCYXNlPnRoaXMuRXhwVGFzaykuY3RsX2l0bV80X3BhcmVudF92ZWUocGFyZW50LCB2ZWUpO1xyXG4gICAgICAgIHRoaXMuQ29uc3RydWN0TWFnaWNOdW0oVmFsLCBpdG0sIFN0b3JhZ2VBdHRyaWJ1dGUuTlVNRVJJQyk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX1JJR0hUX0xJVEVSQUw6XHJcbiAgICAgICAgbGVuID0gZXhwU3RyVHJhY2tlci5nZXQyQnl0ZU51bWJlcigpO1xyXG4gICAgICAgIFZhbC5NZ051bVZhbCA9IGV4cFN0clRyYWNrZXIuZ2V0TWFnaWNOdW1iZXIobGVuLCB0cnVlKTtcclxuICAgICAgICAvLyBTa2lwIGV4dHJhIHVudXNlZCBzdHJpbmcgc3RvcmVkIGFmdGVyIGxpdGVyYWxcclxuICAgICAgICBsZW4gPSBleHBTdHJUcmFja2VyLmdldDJCeXRlTnVtYmVyKCk7XHJcbiAgICAgICAgVmFsLkF0dHIgPSBTdG9yYWdlQXR0cmlidXRlLk5VTUVSSUM7XHJcbiAgICAgICAgZXhwU3RyVHJhY2tlci5nZXRTdHJpbmcobGVuLCB0cnVlLCBmYWxzZSk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIFZhbDtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBEb2VzIHRoZSBvcGVyYXRvciByZXByZXNlbnRzIGEgYmFzaWMgZGF0YSB2YWx1ZT9cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwib3BDb2RlXCI+ICB0aGUgY3VycmVudCBvcGVyYXRpb24gY29kZTwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPiB0cnVlIGlmIHRoZSBvcGVyYXRvciBpbmRpY2F0ZXMgYmFzaWMgZGF0YSBpdGVtLCBmYWxzZSBpZiBub3Q8L3JldHVybnM+XHJcbiAgc3RhdGljIGlzQmFzaWNJdGVtKG9wQ29kZTogbnVtYmVyKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gKG9wQ29kZSA8PSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9MIHx8XHJcbiAgICAgIG9wQ29kZSA9PT0gRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfRVhUX0EgfHxcclxuICAgICAgb3BDb2RlID09PSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9SSUdIVF9MSVRFUkFMIHx8XHJcbiAgICAgIG9wQ29kZSA9PT0gRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfRSB8fFxyXG4gICAgICBvcENvZGUgPT09IEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX0ZPUk0pO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIENoZWNrcyBpZiB0aGUgZnVuY3Rpb24gaGFzIHZhcmlhYmxlIGFyZ3VtZW50IGxpc3RcclxuICAvLy8gICBsaWtlIGluIG1hZ2ljIDogRVhQX09QX0lTX1ZBUkFSRyhvcHIpXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBwcml2YXRlIHN0YXRpYyBpc1ZhckFyZ0xpc3QoZXhwRGVzYzogRXhwRGVzYyk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKGV4cERlc2MuQXJnQ291bnRfIDwgMCB8fCBleHBEZXNjLkFyZ0F0dHJfLmxlbmd0aCA+IDxudW1iZXI+ZXhwRGVzYy5BcmdDb3VudF8pXHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIEV4ZWN1dGUgc2luZ2xlIG9wZXJhdGlvblxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJvcENvZGVcIj5vcGVyYXRpb24gY29kZSB0byBleGVjdXRlPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImV4cFN0clRyYWNrZXJcIj50aGUgZXhwcmVzc2lvbiBiZWluZyBwcm9jZXNzZWQ8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwidmFsU3RhY2tcIj5zdGFjayBvZiB2YWx1ZXMgdGhhdCBhcmUgdGhlIHJlc3VsdCBvZiB0aGUgb3BlcmF0aW9uPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImFkZGVkT3BlcnNcIj5zdGFjayBvZiBvcGVyYXRpb24gdG8gZXhlY3V0ZSBhcyBhIHJlc3VsdCBvZiB0aGlzIG9wZXJhdG9yPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImV4cGVjdGVkVHlwZVwiPjwvcGFyYW0+XHJcbiAgcHJpdmF0ZSBhc3luYyBleGVjT3BlcmF0aW9uKG9wQ29kZTogbnVtYmVyLCBleHBTdHJUcmFja2VyOiBFeHBTdHJUcmFja2VyLCB2YWxTdGFjazogU3RhY2s8YW55PiwgYWRkZWRPcGVyczogTGlzdDxEeW5hbWljT3BlcmF0aW9uPiwgZXhwZWN0ZWRUeXBlOiBTdG9yYWdlQXR0cmlidXRlKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBsZXQgdmFsMTogRXhwVmFsO1xyXG4gICAgbGV0IHZhbDI6IEV4cFZhbDtcclxuICAgIGxldCB2YWwzOiBFeHBWYWw7XHJcbiAgICBsZXQgdmFsNDogRXhwVmFsO1xyXG4gICAgbGV0IHZhbDU6IEV4cFZhbDtcclxuICAgIGxldCB2YWw2OiBFeHBWYWw7XHJcbiAgICBsZXQgdmFsNzogRXhwVmFsO1xyXG4gICAgbGV0IHZhbDg6IEV4cFZhbDtcclxuICAgIGxldCB2YWw5OiBFeHBWYWw7XHJcbiAgICBsZXQgZHluT3BlciA9IG5ldyBEeW5hbWljT3BlcmF0aW9uKCk7XHJcbiAgICBsZXQgd2hvbGU6IG51bWJlcjtcclxuICAgIGxldCBkZWM6IG51bWJlcjtcclxuXHJcbiAgICBsZXQgcmVzVmFsID0gbmV3IEV4cFZhbCgpO1xyXG4gICAgbGV0IEV4cF9wYXJhbXM6IEV4cFZhbFtdO1xyXG4gICAgbGV0IGFkZFJlc3VsdDogYm9vbGVhbiA9IHRydWU7XHJcbiAgICBsZXQgbkFyZ3M6IG51bWJlcjtcclxuICAgIGxldCBzcGVjaWFsQW5zaUV4cHJlc3Npb246IGJvb2xlYW4gPSBFbnZpcm9ubWVudC5JbnN0YW5jZS5nZXRTcGVjaWFsQW5zaUV4cHJlc3Npb24oKTtcclxuXHJcbiAgICAvLyB0ZW1wb3JhcnkgdmFsdWVzOlxyXG4gICAgbGV0IG9mczogbnVtYmVyLCBsZW46IG51bWJlciwgTGVuTWF4OiBudW1iZXIsIGo6IG51bWJlciA9IDA7XHJcbiAgICBsZXQgcGljOiBQSUM7XHJcblxyXG4gICAgLy8gdGhpcyBwYXJ0IHB1dHMgdGhlIG51bWJlciBvZiBhcmd1bWVudHMgaW4gdGhlIFRPUCBvZiB0aGUgc3RhY2tcclxuICAgIC8vIDQgdmFyaWFibGUgYXJndW1lbnQgbGlzdCBmdW5jdGlvbnMgT05MWVxyXG4gICAgLy8gZG9uJ3QgZm9yZ2V0IHBvcCB0aGlzIGFyZ3VtZW50IGluIHRoZSBzdGFydCBvZiB0aGUgY2FzZXMgb2YgdmFyaWFibGUgYXJndW1lbnQgbGlzdCBmdW5jdGlvbnNcclxuICAgIGxldCBleHBEZXNjOiBFeHBEZXNjID0gRXhwcmVzc2lvbkRpY3QuZXhwRGVzY1tvcENvZGVdO1xyXG5cclxuICAgIC8vIGZvciBmdW5jdGlvbiB3aXRoIE5PVCBjb25zdGFudCBudW1iZXIgb2YgYXJndW1lbnRzIE9OTFlcclxuICAgIC8vIGRvbid0IHVzZSB0aGlzIGJsb2NrIGZvciBhbm90aGVyIGNhc2VzLCBiZWNhdXNlIHRoZSB0cnktY2F0Y2ggcGFydCBpbnNlcnQgdW51c2FibGUgdmFsdWVzIHRvIHRoZSBleHByZXNzaW9uIHF1ZXVlXHJcbiAgICBpZiAoRXhwcmVzc2lvbkV2YWx1YXRvci5pc1ZhckFyZ0xpc3QoZXhwRGVzYykpIHtcclxuICAgICAgbkFyZ3MgPSBleHBTdHJUcmFja2VyLmdldDFCeXRlTnVtYmVyKCk7XHJcblxyXG4gICAgICBmb3IgKGogPSAwOyBqIDwgbkFyZ3M7IGorKykge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICBhd2FpdCB0aGlzLmV4ZWNFeHByZXNzaW9uKGV4cFN0clRyYWNrZXIsIHZhbFN0YWNrLCBTdG9yYWdlQXR0cmlidXRlLk5PTkUpO1xyXG4gICAgICAgIH0gY2F0Y2ggKGV4Y2VwdGlvbikge1xyXG4gICAgICAgICAgaWYgKGV4Y2VwdGlvbiBpbnN0YW5jZW9mIEV4Y2VwdGlvbikge1xyXG4gICAgICAgICAgICAvLyBnZXRPdXRMb29wXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgfSBlbHNlIHRocm93IGV4Y2VwdGlvbjtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgaWYgKEV4cHJlc3Npb25FdmFsdWF0b3IuaXNWYXJBcmdMaXN0KGV4cERlc2MpICYmIGogPT09IG5BcmdzKSAvLyB0aGUgZm9yX2xvb3AgZmluaXNoZWQgd2l0aG91dCBleGNlcHRpb25cclxuICAgICAge1xyXG4gICAgICAgIGxldCB0ZW1wX29iamVjdDogT2JqZWN0ID0gbkFyZ3M7XHJcbiAgICAgICAgdmFsU3RhY2sucHVzaCh0ZW1wX29iamVjdCk7XHJcbiAgICAgIH0gZWxzZVxyXG4gICAgICAgIExvZ2dlci5JbnN0YW5jZS5Xcml0ZUV4Y2VwdGlvblRvTG9nV2l0aE1zZygnRXhwcmVzc2lvbkV2YWx1YXRvci5leGVjT3BlcmF0aW9uKCkgdGhlcmUgaXMgcHJvYmxlbSB3aXRoIGFyZ3VtZW50cyBvZiAnICtcclxuICAgICAgICAgIG9wQ29kZSArICcoc2VlIEV4cHJlc3Npb25EaWN0IGZvciBuYW1lKScpO1xyXG4gICAgfVxyXG5cclxuICAgIHN3aXRjaCAob3BDb2RlKSB7XHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfQUREOlxyXG4gICAgICAgIHZhbDIgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpO1xyXG4gICAgICAgIHZhbDEgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpO1xyXG4gICAgICAgIHJlc1ZhbC5NZ051bVZhbCA9IE5VTV9UWVBFLmFkZCh2YWwxLk1nTnVtVmFsLCB2YWwyLk1nTnVtVmFsKTtcclxuICAgICAgICByZXNWYWwuQXR0ciA9IFN0b3JhZ2VBdHRyaWJ1dGUuTlVNRVJJQztcclxuICAgICAgICByZXNWYWwuSXNOdWxsID0gKHJlc1ZhbC5NZ051bVZhbCA9PSBudWxsKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfU1VCOlxyXG4gICAgICAgIHZhbDIgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpO1xyXG4gICAgICAgIHZhbDEgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpO1xyXG4gICAgICAgIHJlc1ZhbC5NZ051bVZhbCA9IE5VTV9UWVBFLnN1Yih2YWwxLk1nTnVtVmFsLCB2YWwyLk1nTnVtVmFsKTtcclxuICAgICAgICByZXNWYWwuQXR0ciA9IFN0b3JhZ2VBdHRyaWJ1dGUuTlVNRVJJQztcclxuICAgICAgICByZXNWYWwuSXNOdWxsID0gKHJlc1ZhbC5NZ051bVZhbCA9PSBudWxsKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfTVVMOlxyXG4gICAgICAgIHZhbDIgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpO1xyXG4gICAgICAgIHZhbDEgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpO1xyXG4gICAgICAgIHJlc1ZhbC5NZ051bVZhbCA9IE5VTV9UWVBFLm11bCh2YWwxLk1nTnVtVmFsLCB2YWwyLk1nTnVtVmFsKTtcclxuICAgICAgICByZXNWYWwuQXR0ciA9IFN0b3JhZ2VBdHRyaWJ1dGUuTlVNRVJJQztcclxuICAgICAgICByZXNWYWwuSXNOdWxsID0gKHJlc1ZhbC5NZ051bVZhbCA9PSBudWxsKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfRElWOlxyXG4gICAgICAgIHZhbDIgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpO1xyXG4gICAgICAgIHZhbDEgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpO1xyXG4gICAgICAgIHJlc1ZhbC5NZ051bVZhbCA9IE5VTV9UWVBFLmRpdih2YWwxLk1nTnVtVmFsLCB2YWwyLk1nTnVtVmFsKTtcclxuICAgICAgICByZXNWYWwuQXR0ciA9IFN0b3JhZ2VBdHRyaWJ1dGUuTlVNRVJJQztcclxuICAgICAgICByZXNWYWwuSXNOdWxsID0gKHJlc1ZhbC5NZ051bVZhbCA9PSBudWxsKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfTU9EOlxyXG4gICAgICAgIHZhbDIgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpO1xyXG4gICAgICAgIHZhbDEgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpO1xyXG4gICAgICAgIHJlc1ZhbC5NZ051bVZhbCA9IE5VTV9UWVBFLm1vZCh2YWwxLk1nTnVtVmFsLCB2YWwyLk1nTnVtVmFsKTtcclxuICAgICAgICByZXNWYWwuQXR0ciA9IFN0b3JhZ2VBdHRyaWJ1dGUuTlVNRVJJQztcclxuICAgICAgICByZXNWYWwuSXNOdWxsID0gKHJlc1ZhbC5NZ051bVZhbCA9PSBudWxsKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfTkVHOlxyXG4gICAgICAgIHZhbDEgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpO1xyXG4gICAgICAgIHJlc1ZhbC5BdHRyID0gU3RvcmFnZUF0dHJpYnV0ZS5OVU1FUklDO1xyXG4gICAgICAgIGlmICh2YWwxLk1nTnVtVmFsID09IG51bGwpIHtcclxuICAgICAgICAgIHN1cGVyLlNldE5VTEwocmVzVmFsLCBTdG9yYWdlQXR0cmlidXRlLk5VTUVSSUMpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YWwxLk1nTnVtVmFsLm51bV9uZWcoKTtcclxuICAgICAgICByZXNWYWwuTWdOdW1WYWwgPSBuZXcgTlVNX1RZUEUodmFsMS5NZ051bVZhbCk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX0ZJWDpcclxuICAgICAgICB2YWwzID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTsgLy8gZGVjXHJcbiAgICAgICAgdmFsMiA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7IC8vIHdob2xlXHJcbiAgICAgICAgdmFsMSA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7XHJcbiAgICAgICAgcmVzVmFsLkF0dHIgPSBTdG9yYWdlQXR0cmlidXRlLk5VTUVSSUM7XHJcbiAgICAgICAgaWYgKHZhbDEuTWdOdW1WYWwgPT0gbnVsbCB8fCB2YWwyLk1nTnVtVmFsID09IG51bGwgfHwgdmFsMy5NZ051bVZhbCA9PSBudWxsKSB7XHJcbiAgICAgICAgICBzdXBlci5TZXROVUxMKHJlc1ZhbCwgU3RvcmFnZUF0dHJpYnV0ZS5OVU1FUklDKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmVzVmFsLk1nTnVtVmFsID0gbmV3IE5VTV9UWVBFKHZhbDEuTWdOdW1WYWwpO1xyXG4gICAgICAgIHdob2xlID0gdmFsMi5NZ051bVZhbC5OVU1fMl9MT05HKCk7XHJcbiAgICAgICAgcmVzVmFsLk1nTnVtVmFsLm51bV9maXgod2hvbGUpO1xyXG4gICAgICAgIGRlYyA9IHZhbDMuTWdOdW1WYWwuTlVNXzJfTE9ORygpO1xyXG4gICAgICAgIHJlc1ZhbC5NZ051bVZhbC5udW1fdHJ1bmMoZGVjKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfUk9VTkQ6XHJcbiAgICAgICAgLy8gaW50IHdob2xlLCBkZWM7ICAgICAgICAgbmVlZG4ndCB0aGlzIHZhcmlhYmxlcywgdGhlbSBkZWZpbmVkIGluIEVYUF9PUF9GSVhcclxuICAgICAgICB2YWwzID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTsgLy8gZGVjXHJcbiAgICAgICAgdmFsMiA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7IC8vIHdob2xlXHJcbiAgICAgICAgdmFsMSA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7XHJcbiAgICAgICAgcmVzVmFsLkF0dHIgPSBTdG9yYWdlQXR0cmlidXRlLk5VTUVSSUM7XHJcbiAgICAgICAgaWYgKHZhbDEuTWdOdW1WYWwgPT0gbnVsbCB8fCB2YWwyLk1nTnVtVmFsID09IG51bGwgfHwgdmFsMy5NZ051bVZhbCA9PSBudWxsKSB7XHJcbiAgICAgICAgICBzdXBlci5TZXROVUxMKHJlc1ZhbCwgU3RvcmFnZUF0dHJpYnV0ZS5OVU1FUklDKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmVzVmFsLk1nTnVtVmFsID0gbmV3IE5VTV9UWVBFKHZhbDEuTWdOdW1WYWwpO1xyXG4gICAgICAgIHdob2xlID0gdmFsMi5NZ051bVZhbC5OVU1fMl9MT05HKCk7XHJcbiAgICAgICAgcmVzVmFsLk1nTnVtVmFsLm51bV9maXgod2hvbGUpO1xyXG4gICAgICAgIGRlYyA9IHZhbDMuTWdOdW1WYWwuTlVNXzJfTE9ORygpO1xyXG4gICAgICAgIHJlc1ZhbC5NZ051bVZhbC5yb3VuZChkZWMpO1xyXG5cclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfRVE6XHJcbiAgICAgICAgdmFsMiA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7XHJcbiAgICAgICAgdmFsMSA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7XHJcbiAgICAgICAgcmVzVmFsLkF0dHIgPSBTdG9yYWdlQXR0cmlidXRlLkJPT0xFQU47XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgIHJlc1ZhbC5Cb29sVmFsID0gKEV4cHJlc3Npb25FdmFsdWF0b3IudmFsX2NtcF9hbnkodmFsMSwgdmFsMiwgZmFsc2UpID09PSAwKTtcclxuICAgICAgICB9IGNhdGNoIChudWxsVmFsdWVFeGNlcHRpb24pIHtcclxuICAgICAgICAgIGlmIChudWxsVmFsdWVFeGNlcHRpb24gaW5zdGFuY2VvZiBOdWxsVmFsdWVFeGNlcHRpb24pIHtcclxuICAgICAgICAgICAgcmVzVmFsLkJvb2xWYWwgPSBmYWxzZTtcclxuICAgICAgICAgIH0gZWxzZSB0aHJvdyBudWxsVmFsdWVFeGNlcHRpb247XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGV4cFN0clRyYWNrZXIucmVzZXROdWxsUmVzdWx0KCk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX05FOlxyXG4gICAgICAgIHZhbDIgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpO1xyXG4gICAgICAgIHZhbDEgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpO1xyXG4gICAgICAgIHJlc1ZhbC5BdHRyID0gU3RvcmFnZUF0dHJpYnV0ZS5CT09MRUFOO1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICByZXNWYWwuQm9vbFZhbCA9IChFeHByZXNzaW9uRXZhbHVhdG9yLnZhbF9jbXBfYW55KHZhbDEsIHZhbDIsIGZhbHNlKSAhPT0gMCk7XHJcbiAgICAgICAgfSBjYXRjaCAobnVsbFZhbHVlRXhjZXB0aW9uKSB7XHJcbiAgICAgICAgICBpZiAobnVsbFZhbHVlRXhjZXB0aW9uIGluc3RhbmNlb2YgTnVsbFZhbHVlRXhjZXB0aW9uKSB7XHJcbiAgICAgICAgICAgIHN1cGVyLlNldE5VTEwocmVzVmFsLCBTdG9yYWdlQXR0cmlidXRlLkJPT0xFQU4pO1xyXG4gICAgICAgICAgfSBlbHNlIHRocm93IG51bGxWYWx1ZUV4Y2VwdGlvbjtcclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX0xFOlxyXG4gICAgICAgIHZhbDIgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpO1xyXG4gICAgICAgIHZhbDEgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpO1xyXG4gICAgICAgIHJlc1ZhbC5BdHRyID0gU3RvcmFnZUF0dHJpYnV0ZS5CT09MRUFOO1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICByZXNWYWwuQm9vbFZhbCA9IChFeHByZXNzaW9uRXZhbHVhdG9yLnZhbF9jbXBfYW55KHZhbDEsIHZhbDIsIHRydWUpIDw9IDApO1xyXG4gICAgICAgIH0gY2F0Y2ggKG51bGxWYWx1ZUV4Y2VwdGlvbikge1xyXG4gICAgICAgICAgaWYgKG51bGxWYWx1ZUV4Y2VwdGlvbiBpbnN0YW5jZW9mIE51bGxWYWx1ZUV4Y2VwdGlvbikge1xyXG4gICAgICAgICAgICBzdXBlci5TZXROVUxMKHJlc1ZhbCwgU3RvcmFnZUF0dHJpYnV0ZS5CT09MRUFOKTtcclxuICAgICAgICAgIH0gZWxzZSB0aHJvdyBudWxsVmFsdWVFeGNlcHRpb247XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9MVDpcclxuICAgICAgICB2YWwyID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTtcclxuICAgICAgICB2YWwxID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTtcclxuICAgICAgICByZXNWYWwuQXR0ciA9IFN0b3JhZ2VBdHRyaWJ1dGUuQk9PTEVBTjtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgcmVzVmFsLkJvb2xWYWwgPSAoRXhwcmVzc2lvbkV2YWx1YXRvci52YWxfY21wX2FueSh2YWwxLCB2YWwyLCB0cnVlKSA8IDApO1xyXG4gICAgICAgIH0gY2F0Y2ggKG51bGxWYWx1ZUV4Y2VwdGlvbikge1xyXG4gICAgICAgICAgaWYgKG51bGxWYWx1ZUV4Y2VwdGlvbiBpbnN0YW5jZW9mIE51bGxWYWx1ZUV4Y2VwdGlvbikge1xyXG4gICAgICAgICAgICBzdXBlci5TZXROVUxMKHJlc1ZhbCwgU3RvcmFnZUF0dHJpYnV0ZS5CT09MRUFOKTtcclxuICAgICAgICAgIH0gZWxzZSB0aHJvdyBudWxsVmFsdWVFeGNlcHRpb247XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9HRTpcclxuICAgICAgICB2YWwyID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTtcclxuICAgICAgICB2YWwxID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTtcclxuICAgICAgICByZXNWYWwuQXR0ciA9IFN0b3JhZ2VBdHRyaWJ1dGUuQk9PTEVBTjtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgcmVzVmFsLkJvb2xWYWwgPSAoRXhwcmVzc2lvbkV2YWx1YXRvci52YWxfY21wX2FueSh2YWwxLCB2YWwyLCB0cnVlKSA+PSAwKTtcclxuICAgICAgICB9IGNhdGNoIChudWxsVmFsdWVFeGNlcHRpb24pIHtcclxuICAgICAgICAgIGlmIChudWxsVmFsdWVFeGNlcHRpb24gaW5zdGFuY2VvZiBOdWxsVmFsdWVFeGNlcHRpb24pIHtcclxuICAgICAgICAgICAgc3VwZXIuU2V0TlVMTChyZXNWYWwsIFN0b3JhZ2VBdHRyaWJ1dGUuQk9PTEVBTik7XHJcbiAgICAgICAgICB9IGVsc2UgdGhyb3cgbnVsbFZhbHVlRXhjZXB0aW9uO1xyXG4gICAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfR1Q6XHJcbiAgICAgICAgdmFsMiA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7XHJcbiAgICAgICAgdmFsMSA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7XHJcbiAgICAgICAgcmVzVmFsLkF0dHIgPSBTdG9yYWdlQXR0cmlidXRlLkJPT0xFQU47XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgIHJlc1ZhbC5Cb29sVmFsID0gKEV4cHJlc3Npb25FdmFsdWF0b3IudmFsX2NtcF9hbnkodmFsMSwgdmFsMiwgdHJ1ZSkgPiAwKTtcclxuICAgICAgICB9IGNhdGNoIChudWxsVmFsdWVFeGNlcHRpb24pIHtcclxuICAgICAgICAgIGlmIChudWxsVmFsdWVFeGNlcHRpb24gaW5zdGFuY2VvZiBOdWxsVmFsdWVFeGNlcHRpb24pIHtcclxuICAgICAgICAgICAgc3VwZXIuU2V0TlVMTChyZXNWYWwsIFN0b3JhZ2VBdHRyaWJ1dGUuQk9PTEVBTik7XHJcbiAgICAgICAgICB9IGVsc2UgdGhyb3cgbnVsbFZhbHVlRXhjZXB0aW9uO1xyXG4gICAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfTk9UOlxyXG4gICAgICAgIHJlc1ZhbCA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7XHJcbiAgICAgICAgcmVzVmFsLkJvb2xWYWwgPSAhcmVzVmFsLkJvb2xWYWw7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX09SOlxyXG4gICAgICAgIHJlc1ZhbCA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7XHJcbiAgICAgICAgZHluT3BlciA9IG5ldyBEeW5hbWljT3BlcmF0aW9uKCk7XHJcbiAgICAgICAgZHluT3Blci5hcmdDb3VudF8gPSAxO1xyXG5cclxuICAgICAgICBpZiAocmVzVmFsLkJvb2xWYWwpIHtcclxuICAgICAgICAgIGR5bk9wZXIub3BDb2RlXyA9IEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX0lHTk9SRTtcclxuICAgICAgICAgIGR5bk9wZXIuYXJnQ291bnRfID0gMTtcclxuICAgICAgICAgIGFkZGVkT3BlcnMucHVzaChkeW5PcGVyKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgZHluT3Blci5vcENvZGVfID0gRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfRVZBTFg7XHJcbiAgICAgICAgICBkeW5PcGVyLmFyZ0NvdW50XyA9IDA7XHJcbiAgICAgICAgICBhZGRlZE9wZXJzLnB1c2goZHluT3Blcik7XHJcbiAgICAgICAgICBhZGRSZXN1bHQgPSBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX0FORDpcclxuICAgICAgICByZXNWYWwgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpO1xyXG4gICAgICAgIGR5bk9wZXIgPSBuZXcgRHluYW1pY09wZXJhdGlvbigpO1xyXG4gICAgICAgIGlmICghcmVzVmFsLkJvb2xWYWwpIHtcclxuICAgICAgICAgIGR5bk9wZXIub3BDb2RlXyA9IEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX0lHTk9SRTtcclxuICAgICAgICAgIGR5bk9wZXIuYXJnQ291bnRfID0gMTtcclxuICAgICAgICAgIGFkZGVkT3BlcnMucHVzaChkeW5PcGVyKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgZHluT3Blci5vcENvZGVfID0gRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfRVZBTFg7XHJcbiAgICAgICAgICBkeW5PcGVyLmFyZ0NvdW50XyA9IDA7XHJcbiAgICAgICAgICBhZGRlZE9wZXJzLnB1c2goZHluT3Blcik7XHJcbiAgICAgICAgICBhZGRSZXN1bHQgPSBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX0lGOlxyXG4gICAgICAgIHZhbDEgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpO1xyXG4gICAgICAgIGlmICh2YWwxLkJvb2xWYWwpIHtcclxuICAgICAgICAgIGR5bk9wZXIgPSBuZXcgRHluYW1pY09wZXJhdGlvbigpO1xyXG4gICAgICAgICAgZHluT3Blci5vcENvZGVfID0gRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfRVZBTFg7XHJcbiAgICAgICAgICBkeW5PcGVyLmFyZ0NvdW50XyA9IDA7XHJcblxyXG4gICAgICAgICAgYWRkZWRPcGVycy5wdXNoKGR5bk9wZXIpO1xyXG4gICAgICAgICAgZHluT3BlciA9IG5ldyBEeW5hbWljT3BlcmF0aW9uKCk7XHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIGR5bk9wZXIub3BDb2RlXyA9IEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX0lHTk9SRTtcclxuICAgICAgICAgICAgZHluT3Blci5hcmdDb3VudF8gPSAxO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIGFkZGVkT3BlcnMucHVzaChkeW5PcGVyKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgZHluT3BlciA9IG5ldyBEeW5hbWljT3BlcmF0aW9uKCk7XHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIGR5bk9wZXIub3BDb2RlXyA9IEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX0lHTk9SRTtcclxuICAgICAgICAgICAgZHluT3Blci5hcmdDb3VudF8gPSAxO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIGFkZGVkT3BlcnMucHVzaChkeW5PcGVyKTtcclxuICAgICAgICAgIGR5bk9wZXIgPSBuZXcgRHluYW1pY09wZXJhdGlvbigpO1xyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICBkeW5PcGVyLm9wQ29kZV8gPSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9FVkFMWDtcclxuICAgICAgICAgICAgZHluT3Blci5hcmdDb3VudF8gPSAwO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIGFkZGVkT3BlcnMucHVzaChkeW5PcGVyKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgYWRkUmVzdWx0ID0gZmFsc2U7XHJcbiAgICAgICAgZXhwU3RyVHJhY2tlci5yZXNldE51bGxSZXN1bHQoKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfTEVOOlxyXG4gICAgICAgIHZhbDEgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpO1xyXG5cclxuICAgICAgICByZXNWYWwuQXR0ciA9IFN0b3JhZ2VBdHRyaWJ1dGUuTlVNRVJJQztcclxuICAgICAgICBpZiAodmFsMS5TdHJWYWwgPT0gbnVsbCkge1xyXG4gICAgICAgICAgc3VwZXIuU2V0TlVMTChyZXNWYWwsIFN0b3JhZ2VBdHRyaWJ1dGUuTlVNRVJJQyk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgICAgcmVzVmFsLk1nTnVtVmFsID0gbmV3IE5VTV9UWVBFKCk7XHJcbiAgICAgICAgLy8gY291bnQgdGhlIG51bWJlciBvZiBieXRlcywgbm90IGNoYXJhY3RlcnMgKEpQTjogREJDUyBzdXBwb3J0KVxyXG4gICAgICAgIGlmIChzcGVjaWFsQW5zaUV4cHJlc3Npb24gfHwgdmFsMS5BdHRyICE9PSBTdG9yYWdlQXR0cmlidXRlLlVOSUNPREUpXHJcbiAgICAgICAgICByZXNWYWwuTWdOdW1WYWwuTlVNXzRfTE9ORyhVdGlsU3RyQnl0ZU1vZGUubGVuQih2YWwxLlN0clZhbCkpO1xyXG4gICAgICAgIGVsc2VcclxuICAgICAgICAgIHJlc1ZhbC5NZ051bVZhbC5OVU1fNF9MT05HKHZhbDEuU3RyVmFsLmxlbmd0aCk7XHJcblxyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9DT046XHJcbiAgICAgICAgdmFsMiA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7XHJcbiAgICAgICAgdmFsMSA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7XHJcbiAgICAgICAgcmVzVmFsLkF0dHIgPSBTdG9yYWdlQXR0cmlidXRlLlVOSUNPREU7XHJcbiAgICAgICAgaWYgKHZhbDEuQXR0ciA9PT0gU3RvcmFnZUF0dHJpYnV0ZS5VTklDT0RFICYmIHZhbDEuU3RyVmFsID09IG51bGwgfHxcclxuICAgICAgICAgIHZhbDIuQXR0ciA9PT0gU3RvcmFnZUF0dHJpYnV0ZS5VTklDT0RFICYmIHZhbDIuU3RyVmFsID09IG51bGwpXHJcbiAgICAgICAgICBzdXBlci5TZXROVUxMKHJlc1ZhbCwgU3RvcmFnZUF0dHJpYnV0ZS5VTklDT0RFKTtcclxuICAgICAgICBlbHNlXHJcbiAgICAgICAgICByZXNWYWwuU3RyVmFsID0gKCFOU3RyaW5nLklzTnVsbE9yRW1wdHkodmFsMS5TdHJWYWwpID8gdmFsMS5TdHJWYWwgOiAnJykgKyAoIU5TdHJpbmcuSXNOdWxsT3JFbXB0eSh2YWwyLlN0clZhbCkgPyB2YWwyLlN0clZhbCA6ICcnKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfTUlEOlxyXG4gICAgICAgIHZhbDMgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpOyAvLyBsZW5ndGhcclxuICAgICAgICB2YWwyID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTsgLy8gc3RhcnQsIG9mc2V0XHJcbiAgICAgICAgdmFsMSA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7IC8vIHN0cmluZ1xyXG5cclxuICAgICAgICByZXNWYWwuQXR0ciA9IHZhbDEuQXR0cjtcclxuICAgICAgICBpZiAodmFsMi5NZ051bVZhbCA9PSBudWxsIHx8IHZhbDMuTWdOdW1WYWwgPT0gbnVsbCB8fCB2YWwxLlN0clZhbCA9PSBudWxsKSB7XHJcbiAgICAgICAgICBzdXBlci5TZXROVUxMKHJlc1ZhbCwgcmVzVmFsLkF0dHIpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvKiBDb21wdXRlIG9mZnNldCBhbmQgbGVuZ3RoIG9mIHN1YnN0cmluZyAqL1xyXG4gICAgICAgIG9mcyA9IHZhbDIuTWdOdW1WYWwuTlVNXzJfTE9ORygpO1xyXG4gICAgICAgIG9mcyA9IChvZnMgPiAxXHJcbiAgICAgICAgICA/IG9mcyAtIDFcclxuICAgICAgICAgIDogMCk7IC8vIGluIE1JRCBtYWdpYyBmdW5jdGlvbiBzdGFydD0wICYmIHN0YXJ0PTEgdGhlIHNhbWVcclxuICAgICAgICBsZW4gPSB2YWwzLk1nTnVtVmFsLk5VTV8yX0xPTkcoKTtcclxuXHJcbiAgICAgICAgaWYgKHNwZWNpYWxBbnNpRXhwcmVzc2lvbiB8fCB2YWwxLkF0dHIgIT09IFN0b3JhZ2VBdHRyaWJ1dGUuVU5JQ09ERSkge1xyXG4gICAgICAgICAgcmVzVmFsLkF0dHIgPSBTdG9yYWdlQXR0cmlidXRlLkFMUEhBO1xyXG4gICAgICAgICAgcmVzVmFsLlN0clZhbCA9IFV0aWxTdHJCeXRlTW9kZS5taWRCKHZhbDEuU3RyVmFsLCBvZnMsIGxlbik7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIExlbk1heCA9IHZhbDEuU3RyVmFsLmxlbmd0aCAtIG9mcztcclxuICAgICAgICAgIGlmIChMZW5NYXggPCBsZW4pXHJcbiAgICAgICAgICAgIGxlbiA9IExlbk1heDtcclxuICAgICAgICAgIGlmIChsZW4gPCAwKVxyXG4gICAgICAgICAgICBsZW4gPSAwO1xyXG4gICAgICAgICAgcmVzVmFsLlN0clZhbCA9IHZhbDEuU3RyVmFsLnN1YnN0cihvZnMsIGxlbik7IC8vIGNvZGUgZnJvbSB0cnkgYmxvY2tcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChyZXNWYWwuU3RyVmFsID09IG51bGwpXHJcbiAgICAgICAgICByZXNWYWwuU3RyVmFsID0gJyc7XHJcblxyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9MRUZUOlxyXG4gICAgICAgIHZhbDIgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpOyAvLyBsZW5ndGhcclxuICAgICAgICB2YWwxID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTsgLy8gc3RyaW5nXHJcblxyXG4gICAgICAgIHJlc1ZhbC5BdHRyID0gdmFsMS5BdHRyO1xyXG4gICAgICAgIGlmICh2YWwyLk1nTnVtVmFsID09IG51bGwgfHwgdmFsMS5TdHJWYWwgPT0gbnVsbCkge1xyXG4gICAgICAgICAgc3VwZXIuU2V0TlVMTChyZXNWYWwsIHZhbDEuQXR0cik7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgICAgbGVuID0gdmFsMi5NZ051bVZhbC5OVU1fMl9MT05HKCk7XHJcblxyXG4gICAgICAgIC8vIGNvdW50IHRoZSBudW1iZXIgb2YgYnl0ZXMsIG5vdCBjaGFyYWN0ZXJzIChKUE46IERCQ1Mgc3VwcG9ydClcclxuICAgICAgICBpZiAoc3BlY2lhbEFuc2lFeHByZXNzaW9uIHx8IHZhbDEuQXR0ciAhPT0gU3RvcmFnZUF0dHJpYnV0ZS5VTklDT0RFKSB7XHJcbiAgICAgICAgICByZXNWYWwuQXR0ciA9IFN0b3JhZ2VBdHRyaWJ1dGUuQUxQSEE7XHJcbiAgICAgICAgICByZXNWYWwuU3RyVmFsID0gVXRpbFN0ckJ5dGVNb2RlLmxlZnRCKHZhbDEuU3RyVmFsLCBsZW4pO1xyXG4gICAgICAgICAgaWYgKHJlc1ZhbC5TdHJWYWwgPT0gbnVsbClcclxuICAgICAgICAgICAgcmVzVmFsLlN0clZhbCA9ICcnO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBpZiAobGVuID4gdmFsMS5TdHJWYWwubGVuZ3RoKVxyXG4gICAgICAgICAgICBsZW4gPSB2YWwxLlN0clZhbC5sZW5ndGg7XHJcbiAgICAgICAgICBpZiAobGVuIDwgMClcclxuICAgICAgICAgICAgbGVuID0gMDtcclxuICAgICAgICAgIHJlc1ZhbC5TdHJWYWwgPSB2YWwxLlN0clZhbC5zdWJzdHIoMCwgbGVuKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX1JJR0hUOlxyXG4gICAgICAgIHZhbDIgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpOyAvLyBsZW5ndGhcclxuICAgICAgICB2YWwxID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTsgLy8gc3RyaW5nXHJcblxyXG4gICAgICAgIHJlc1ZhbC5BdHRyID0gdmFsMS5BdHRyO1xyXG4gICAgICAgIGlmICh2YWwyLk1nTnVtVmFsID09IG51bGwgfHwgdmFsMS5TdHJWYWwgPT0gbnVsbCkge1xyXG4gICAgICAgICAgc3VwZXIuU2V0TlVMTChyZXNWYWwsIHZhbDEuQXR0cik7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgICAgbGVuID0gdmFsMi5NZ051bVZhbC5OVU1fMl9MT05HKCk7XHJcblxyXG4gICAgICAgIC8vIGNvdW50IHRoZSBudW1iZXIgb2YgYnl0ZXMsIG5vdCBjaGFyYWN0ZXJzIChKUE46IERCQ1Mgc3VwcG9ydClcclxuICAgICAgICBpZiAoc3BlY2lhbEFuc2lFeHByZXNzaW9uIHx8IHZhbDEuQXR0ciAhPT0gU3RvcmFnZUF0dHJpYnV0ZS5VTklDT0RFKSB7XHJcbiAgICAgICAgICByZXNWYWwuQXR0ciA9IFN0b3JhZ2VBdHRyaWJ1dGUuQUxQSEE7XHJcbiAgICAgICAgICByZXNWYWwuU3RyVmFsID0gVXRpbFN0ckJ5dGVNb2RlLnJpZ2h0Qih2YWwxLlN0clZhbCwgbGVuKTtcclxuICAgICAgICAgIGlmIChyZXNWYWwuU3RyVmFsID09IG51bGwpXHJcbiAgICAgICAgICAgIHJlc1ZhbC5TdHJWYWwgPSAnJztcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgaWYgKGxlbiA+IHZhbDEuU3RyVmFsLmxlbmd0aClcclxuICAgICAgICAgICAgbGVuID0gdmFsMS5TdHJWYWwubGVuZ3RoO1xyXG4gICAgICAgICAgaWYgKGxlbiA8IDApXHJcbiAgICAgICAgICAgIGxlbiA9IDA7XHJcbiAgICAgICAgICBvZnMgPSB2YWwxLlN0clZhbC5sZW5ndGggLSBsZW47XHJcblxyXG4gICAgICAgICAgLy8gbWVtY3B5IChFWFBfcGFybXNbMF0uYWRzLCBFWFBfcGFybXNbMF0uYWRzICsgb2ZzLCBsZW4pO1xyXG4gICAgICAgICAgcmVzVmFsLlN0clZhbCA9IHZhbDEuU3RyVmFsLnN1YnN0cihvZnMpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfRklMTDpcclxuICAgICAgICB2YWwyID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTsgLy8gdGltZXNcclxuICAgICAgICB2YWwxID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTsgLy8gc3RyaW5nXHJcblxyXG4gICAgICAgIHJlc1ZhbC5BdHRyID0gU3RvcmFnZUF0dHJpYnV0ZS5VTklDT0RFO1xyXG4gICAgICAgIGlmICh2YWwyLk1nTnVtVmFsID09IG51bGwgfHwgdmFsMS5TdHJWYWwgPT0gbnVsbCkge1xyXG4gICAgICAgICAgc3VwZXIuU2V0TlVMTChyZXNWYWwsIFN0b3JhZ2VBdHRyaWJ1dGUuVU5JQ09ERSk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxlbiA9IHZhbDEuU3RyVmFsLmxlbmd0aDtcclxuICAgICAgICBqID0gdmFsMi5NZ051bVZhbC5OVU1fMl9MT05HKCk7XHJcbiAgICAgICAgaWYgKGogPCAwKVxyXG4gICAgICAgICAgaiA9IDA7XHJcbiAgICAgICAgTGVuTWF4ID0gbGVuICogajtcclxuICAgICAgICBpZiAoTGVuTWF4ID4gMHg3RkZGKVxyXG4gICAgICAgIC8vIHRoZXJlIGlzIE1BWCBsZW5naHQgaW4gTWFnaWMgKGFjdHVhbGx5IGl0IG5lZWRuJ3QgaW4gSmF2YSwgYnV0IC4uLilcclxuICAgICAgICAgIExlbk1heCA9IE1hdGguZmxvb3IoMHg3RkZGIC8gbGVuKSAqIGxlbjtcclxuICAgICAgICBpZiAoTGVuTWF4ID4gMCkge1xyXG4gICAgICAgICAgaWYgKGxlbiA8PSAwKVxyXG4gICAgICAgICAgICByZXNWYWwuU3RyVmFsID0gJyc7XHJcbiAgICAgICAgICBlbHNlIGlmIChMZW5NYXggPT09IDEpXHJcbiAgICAgICAgICAgIHJlc1ZhbC5TdHJWYWwgPSB2YWwxLlN0clZhbDtcclxuICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBsZXQgdG1wQnVmZmVyID0gbmV3IFN0cmluZ0J1aWxkZXIoTGVuTWF4KTtcclxuICAgICAgICAgICAgZm9yICg7IExlbk1heCA+IDA7IExlbk1heCAtPSBsZW4pXHJcbiAgICAgICAgICAgICAgdG1wQnVmZmVyLkFwcGVuZCh2YWwxLlN0clZhbCk7XHJcbiAgICAgICAgICAgIHJlc1ZhbC5TdHJWYWwgPSB0bXBCdWZmZXIuVG9TdHJpbmcoKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHJlc1ZhbC5TdHJWYWwgPT0gbnVsbClcclxuICAgICAgICAgIHJlc1ZhbC5TdHJWYWwgPSAnJztcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfSU5TVFI6XHJcbiAgICAgICAgdmFsMiA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7IC8vIHN1YlN0clxyXG4gICAgICAgIHZhbDEgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpOyAvLyBzdHJpbmdcclxuXHJcbiAgICAgICAgb2ZzID0gMDtcclxuICAgICAgICByZXNWYWwuQXR0ciA9IFN0b3JhZ2VBdHRyaWJ1dGUuTlVNRVJJQztcclxuICAgICAgICBpZiAodmFsMS5TdHJWYWwgPT0gbnVsbCB8fCB2YWwyLlN0clZhbCA9PSBudWxsKSB7XHJcbiAgICAgICAgICBzdXBlci5TZXROVUxMKHJlc1ZhbCwgU3RvcmFnZUF0dHJpYnV0ZS5OVU1FUklDKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmVzVmFsLk1nTnVtVmFsID0gbmV3IE5VTV9UWVBFKCk7XHJcbiAgICAgICAgLy8gY291bnQgdGhlIG51bWJlciBvZiBieXRlcywgbm90IGNoYXJhY3RlcnMgKEpQTjogREJDUyBzdXBwb3J0KVxyXG4gICAgICAgIGlmIChzcGVjaWFsQW5zaUV4cHJlc3Npb24gfHxcclxuICAgICAgICAgICEodmFsMS5BdHRyID09PSBTdG9yYWdlQXR0cmlidXRlLlVOSUNPREUgfHxcclxuICAgICAgICAgICAgdmFsMi5BdHRyID09PSBTdG9yYWdlQXR0cmlidXRlLlVOSUNPREUpKSB7XHJcbiAgICAgICAgICBvZnMgPSBVdGlsU3RyQnl0ZU1vZGUuaW5zdHJCKHZhbDEuU3RyVmFsLCB2YWwyLlN0clZhbCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGlmICh2YWwyLlN0clZhbC5sZW5ndGggPT09IDApXHJcbiAgICAgICAgICAvLyBub3RoaW5nIDIgbG9vayBmb3JcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgcmVzVmFsLk1nTnVtVmFsLk5VTV80X0xPTkcob2ZzKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBvZnMgPSB2YWwxLlN0clZhbC5pbmRleE9mKHZhbDIuU3RyVmFsKTtcclxuICAgICAgICAgIGlmIChvZnMgPCAwKVxyXG4gICAgICAgICAgLy8gc3RyaW5nIGluIG1hZ2ljIHN0YXJ0cyBmcm9tIDEsIGluIGphdmEgZnJvbSAwLlxyXG4gICAgICAgICAgICBvZnMgPSAwO1xyXG4gICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICBvZnMrKztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJlc1ZhbC5NZ051bVZhbC5OVU1fNF9MT05HKG9mcyk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX1RSSU06XHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfTFRSSU06XHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfUlRSSU06XHJcbiAgICAgICAgdmFsMSA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7IC8vIHN0cmluZ1xyXG4gICAgICAgIHJlc1ZhbC5BdHRyID0gdmFsMS5BdHRyID09PSBTdG9yYWdlQXR0cmlidXRlLkFMUEhBXHJcbiAgICAgICAgICA/IFN0b3JhZ2VBdHRyaWJ1dGUuQUxQSEFcclxuICAgICAgICAgIDogU3RvcmFnZUF0dHJpYnV0ZS5VTklDT0RFO1xyXG4gICAgICAgIGlmICh2YWwxLlN0clZhbCA9PSBudWxsKSB7XHJcbiAgICAgICAgICBzdXBlci5TZXROVUxMKHJlc1ZhbCwgcmVzVmFsLkF0dHIpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBzd2l0Y2ggKG9wQ29kZSkge1xyXG4gICAgICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9UUklNOlxyXG4gICAgICAgICAgICB2YWwxLlN0clZhbCA9IEV4cHJlc3Npb25FdmFsdWF0b3IudHJpbVN0cih2YWwxLlN0clZhbCwgJ0InKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9MVFJJTTpcclxuICAgICAgICAgICAgdmFsMS5TdHJWYWwgPSBFeHByZXNzaW9uRXZhbHVhdG9yLnRyaW1TdHIodmFsMS5TdHJWYWwsICdMJyk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfUlRSSU06XHJcbiAgICAgICAgICAgIHZhbDEuU3RyVmFsID0gRXhwcmVzc2lvbkV2YWx1YXRvci50cmltU3RyKHZhbDEuU3RyVmFsLCAnUicpO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgICAgcmVzVmFsLlN0clZhbCA9IHZhbDEuU3RyVmFsO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9TVFI6XHJcbiAgICAgICAgdmFsMiA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7IC8vIHBpY3R1cmUgZm9ybWF0XHJcbiAgICAgICAgdmFsMSA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7IC8vIE51bSBpbnZlcnQgdG8gc3RyaW5nXHJcbiAgICAgICAgcmVzVmFsLkF0dHIgPSBTdG9yYWdlQXR0cmlidXRlLlVOSUNPREU7XHJcbiAgICAgICAgaWYgKHZhbDIuU3RyVmFsID09IG51bGwgfHwgdmFsMS5NZ051bVZhbCA9PSBudWxsKSB7XHJcbiAgICAgICAgICBzdXBlci5TZXROVUxMKHJlc1ZhbCwgU3RvcmFnZUF0dHJpYnV0ZS5VTklDT0RFKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gTWF4IGxlbmd0aCBvZiB0aGUgcGljdHVyZSBpcyAxMDAgY2hhcmFjdGVycywgbGlrZSBpbiBNYWdpY1xyXG4gICAgICAgIHBpYyA9IG5ldyBQSUMoRXhwcmVzc2lvbkV2YWx1YXRvci5zZXRfYV9waWModmFsMi5TdHJWYWwpLCBTdG9yYWdlQXR0cmlidXRlLk5VTUVSSUMsIHRoaXMuRXhwVGFzay5nZXRDb21wSWR4KCkpO1xyXG4gICAgICAgIHJlc1ZhbC5TdHJWYWwgPSB2YWwxLk1nTnVtVmFsLnRvX2EocGljKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfVkFMOlxyXG4gICAgICAgIHZhbDIgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpOyAvLyBwaWN0dXJlIGZvcm1hdFxyXG4gICAgICAgIHZhbDEgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpOyAvLyBzdHJpbmcgaW52ZXJ0IHRvIE51bVxyXG4gICAgICAgIHJlc1ZhbC5BdHRyID0gU3RvcmFnZUF0dHJpYnV0ZS5OVU1FUklDO1xyXG4gICAgICAgIGlmICh2YWwyLlN0clZhbCA9PSBudWxsIHx8IHZhbDEuU3RyVmFsID09IG51bGwpIHtcclxuICAgICAgICAgIHN1cGVyLlNldE5VTEwocmVzVmFsLCBTdG9yYWdlQXR0cmlidXRlLk5VTUVSSUMpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHBpYyA9IG5ldyBQSUMoRXhwcmVzc2lvbkV2YWx1YXRvci5zZXRfYV9waWModmFsMi5TdHJWYWwpLCBTdG9yYWdlQXR0cmlidXRlLk5VTUVSSUMsIHRoaXMuRXhwVGFzay5nZXRDb21wSWR4KCkpO1xyXG4gICAgICAgIHJlc1ZhbC5NZ051bVZhbCA9IG5ldyBOVU1fVFlQRSh2YWwxLlN0clZhbCwgcGljLCB0aGlzLkV4cFRhc2suZ2V0Q29tcElkeCgpKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfTTpcclxuICAgICAgICBsZW4gPSBleHBTdHJUcmFja2VyLmdldDJCeXRlTnVtYmVyKCk7XHJcbiAgICAgICAgbGV0IGNvZGVzOiBzdHJpbmcgPSBleHBTdHJUcmFja2VyLmdldFN0cmluZyhsZW4sIHRydWUsIGZhbHNlKTtcclxuICAgICAgICB0aGlzLmV2YWxfb3BfbShyZXNWYWwsIGNvZGVzKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfSzpcclxuICAgICAgICByZXNWYWwuQXR0ciA9IFN0b3JhZ2VBdHRyaWJ1dGUuTlVNRVJJQztcclxuICAgICAgICBsZW4gPSBleHBTdHJUcmFja2VyLmdldDJCeXRlTnVtYmVyKCk7XHJcbiAgICAgICAgcmVzVmFsLk1nTnVtVmFsID0gZXhwU3RyVHJhY2tlci5nZXRNYWdpY051bWJlcihsZW4sIHRydWUpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9GOlxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX1A6XHJcbiAgICAgICAgcmVzVmFsLkF0dHIgPSBTdG9yYWdlQXR0cmlidXRlLk5VTUVSSUM7XHJcbiAgICAgICAgbGVuID0gZXhwU3RyVHJhY2tlci5nZXQyQnl0ZU51bWJlcigpO1xyXG4gICAgICAgIHJlc1ZhbC5NZ051bVZhbCA9IGV4cFN0clRyYWNrZXIuZ2V0TWFnaWNOdW1iZXIobGVuLCB0cnVlKTtcclxuICAgICAgICAvLyBza2lwIHNlY29uZCBudW1iZXIgKHRoZSBjb21wb25lbnQgaWR4KVxyXG4gICAgICAgIGxlbiA9IGV4cFN0clRyYWNrZXIuZ2V0MkJ5dGVOdW1iZXIoKTtcclxuICAgICAgICBleHBTdHJUcmFja2VyLmdldE1hZ2ljTnVtYmVyKGxlbiwgdHJ1ZSk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX1NUQVQ6XHJcbiAgICAgICAgdmFsMiA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7IC8vIE1vZGVzXHJcbiAgICAgICAgdmFsMSA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7IC8vIEdlbmVyYXRpb25cclxuICAgICAgICB0aGlzLmV2YWxfb3Bfc3RhdChyZXNWYWwsIHZhbDEsIHZhbDIpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9TVUJGT1JNX0VYRUNfTU9ERTpcclxuICAgICAgICB2YWwxID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTsgLy8gR2VuZXJhdGlvblxyXG4gICAgICAgIHRoaXMuZXZhbF9vcF9zdWJmb3JtRXhlY01vZGUocmVzVmFsLCB2YWwxKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfSVNfTE9HR0VEX0lOOlxyXG4gICAgICAgIHRoaXMuZXZhbF9vcF9Jc0xvZ2dlZEluKHJlc1ZhbCk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX1NZUzpcclxuICAgICAgICB0aGlzLmV2YWxfb3BfYXBwbmFtZShyZXNWYWwpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9QUk9HOlxyXG4gICAgICAgIHRoaXMuZXZhbF9vcF9wcm9nKHJlc1ZhbCk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX0xFVkVMOlxyXG4gICAgICAgIHZhbDEgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpO1xyXG4gICAgICAgIHRoaXMuZXZhbF9vcF9sZXZlbChyZXNWYWwsIHZhbDEpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9DT1VOVEVSOlxyXG4gICAgICAgIHZhbDEgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpO1xyXG4gICAgICAgIHRoaXMuZXZhbF9vcF9jb3VudGVyKHJlc1ZhbCwgdmFsMSk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX0VNUFRZX0RBVEFfVklFVzpcclxuICAgICAgICB2YWwxID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTtcclxuICAgICAgICB0aGlzLmV2YWxfb3BfZW1wdHlEYXRhdmlldyhyZXNWYWwsIHZhbDEpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9NQUlOTEVWRUw6XHJcbiAgICAgICAgdmFsMSA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7XHJcbiAgICAgICAgdGhpcy5ldmFsX29wX21haW5sZXZlbChyZXNWYWwsIHZhbDEpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9NQUlORElTUExBWTpcclxuICAgICAgICB2YWwxID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTtcclxuICAgICAgICB0aGlzLmV2YWxfb3BfbWFpbmRpc3BsYXkocmVzVmFsLCB2YWwxKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfSVNGSVJTVFJFQ09SRENZQ0xFOlxyXG4gICAgICAgIHZhbDEgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpO1xyXG4gICAgICAgIHRoaXMuZXZhbF9vcF9Jc0ZpcnN0UmVjb3JkQ3ljbGUocmVzVmFsLCB2YWwxKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfREFURTpcclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9VVENEQVRFOlxyXG4gICAgICAgIHJlc1ZhbC5NZ051bVZhbCA9IG5ldyBOVU1fVFlQRSgpO1xyXG4gICAgICAgIHJlc1ZhbC5NZ051bVZhbC5OVU1fNF9MT05HKERpc3BsYXlDb252ZXJ0b3IuSW5zdGFuY2UuZGF0ZV9tYWdpYyhvcENvZGUgPT09IEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX1VUQ0RBVEUpKTtcclxuICAgICAgICByZXNWYWwuQXR0ciA9IFN0b3JhZ2VBdHRyaWJ1dGUuREFURTsgLy8gREFURVxyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9BREREVDpcclxuICAgICAgICB2YWw4ID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTtcclxuICAgICAgICB2YWw3ID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTtcclxuICAgICAgICB2YWw2ID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTsgLy8gaG91cnNcclxuICAgICAgICB2YWw1ID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTsgLy8gZGF5c1xyXG4gICAgICAgIHZhbDQgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpOyAvLyBtb250aHNcclxuICAgICAgICB2YWwzID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTsgLy8geWVhcnNcclxuICAgICAgICB2YWwyID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTsgLy8gVGltZVxyXG4gICAgICAgIHZhbDEgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpOyAvLyBEYXRlXHJcbiAgICAgICAgYXdhaXQgdGhpcy5ldmFsX29wX2FkZERhdGVUaW1lKHJlc1ZhbCwgdmFsMSwgdmFsMiwgdmFsMywgdmFsNCwgdmFsNSwgdmFsNiwgdmFsNywgdmFsOCk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX0RJRkRUOlxyXG4gICAgICAgIHZhbDYgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpOyAvLyB0aW1lIGRpZmZcclxuICAgICAgICB2YWw1ID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTsgLy8gZGF0ZSBkaWZmXHJcbiAgICAgICAgdmFsNCA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7IC8vIHRpbWUgMlxyXG4gICAgICAgIHZhbDMgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpOyAvLyBkYXRlIDJcclxuICAgICAgICB2YWwyID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTsgLy8gVGltZSAxXHJcbiAgICAgICAgdmFsMSA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7IC8vIERhdGUgMVxyXG4gICAgICAgIGF3YWl0IHRoaXMuZXZhbF9vcF9kaWZkdChyZXNWYWwsIHZhbDEsIHZhbDIsIHZhbDMsIHZhbDQsIHZhbDUsIHZhbDYpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9WQVJQUkVWOlxyXG4gICAgICAgIHZhbDEgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpO1xyXG4gICAgICAgIC8vIGV4cF9pdG1fMl92ZWUgKCk7XHJcbiAgICAgICAgdGhpcy5leHBfZ2V0X3ZhcihyZXNWYWwsIHZhbDEsIHRydWUpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9WQVJDVVJSOlxyXG4gICAgICAgIHZhbDEgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpO1xyXG4gICAgICAgIHRoaXMuZXhwX2dldF92YXIocmVzVmFsLCB2YWwxLCBmYWxzZSk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX1ZBUk1PRDpcclxuICAgICAgICB2YWwxID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTtcclxuICAgICAgICB0aGlzLmV2YWxfb3BfdmFybW9kKHJlc1ZhbCwgdmFsMSk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX1ZBUklOUDpcclxuICAgICAgICB2YWwxID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTtcclxuICAgICAgICB0aGlzLmV2YWxfb3BfdmFyaW5wKHJlc1ZhbCwgdmFsMSk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX1ZBUk5BTUU6XHJcbiAgICAgICAgdmFsMSA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7XHJcbiAgICAgICAgdGhpcy5ldmFsX29wX3Zhcm5hbWUocmVzVmFsLCB2YWwxKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfVkFSRElTUExBWU5BTUU6XHJcbiAgICAgICAgdmFsMSA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7XHJcbiAgICAgICAgdGhpcy5ldmFsX29wX1ZhckRpc3BsYXlOYW1lKHJlc1ZhbCwgdmFsMSk7XHJcbiAgICAgICAgZXhwU3RyVHJhY2tlci5yZXNldE51bGxSZXN1bHQoKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfVkFSQ09OVFJPTElEOlxyXG4gICAgICAgIHZhbDEgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpO1xyXG4gICAgICAgIHRoaXMuZXZhbF9vcF9WYXJDb250cm9sSUQocmVzVmFsLCB2YWwxKTtcclxuICAgICAgICBleHBTdHJUcmFja2VyLnJlc2V0TnVsbFJlc3VsdCgpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9DT05UUk9MSVRFTVNMSVNUOlxyXG4gICAgICAgIHZhbDEgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpO1xyXG4gICAgICAgIGF3YWl0IHRoaXMuZXZhbF9vcF9Db250cm9sSXRlbXNMaXN0KHJlc1ZhbCwgdmFsMSk7XHJcbiAgICAgICAgZXhwU3RyVHJhY2tlci5yZXNldE51bGxSZXN1bHQoKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfQ09OVFJPTERJU1BMQVlMSVNUOlxyXG4gICAgICAgIHZhbDEgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpO1xyXG4gICAgICAgIGF3YWl0IHRoaXMuZXZhbF9vcF9Db250cm9sRGlzcGxheUxpc3QocmVzVmFsLCB2YWwxKTtcclxuICAgICAgICBleHBTdHJUcmFja2VyLnJlc2V0TnVsbFJlc3VsdCgpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9WSUVXTU9EOlxyXG4gICAgICAgIHZhbDEgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpO1xyXG4gICAgICAgIHRoaXMuZXZhbF9vcF92aWV3bW9kKHJlc1ZhbCwgdmFsMSk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX1RJTUU6XHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfVVRDVElNRTpcclxuICAgICAgICByZXNWYWwuTWdOdW1WYWwgPSBuZXcgTlVNX1RZUEUoKTtcclxuICAgICAgICByZXNWYWwuTWdOdW1WYWwuTlVNXzRfTE9ORyhEaXNwbGF5Q29udmVydG9yLkluc3RhbmNlLnRpbWVfbWFnaWMob3BDb2RlID09PSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9VVENUSU1FKSk7XHJcbiAgICAgICAgcmVzVmFsLkF0dHIgPSBTdG9yYWdlQXR0cmlidXRlLlRJTUU7IC8vIFRJTUVcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfTVRJTUU6XHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfVVRDTVRJTUU6XHJcbiAgICAgICAgcmVzVmFsLk1nTnVtVmFsID0gbmV3IE5VTV9UWVBFKCk7XHJcbiAgICAgICAgcmVzVmFsLk1nTnVtVmFsLk5VTV80X0xPTkcoRGlzcGxheUNvbnZlcnRvci5JbnN0YW5jZS5tdGltZV9tYWdpYyhvcENvZGUgPT09IEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX1VUQ01USU1FKSk7XHJcbiAgICAgICAgcmVzVmFsLkF0dHIgPSBTdG9yYWdlQXR0cmlidXRlLlRJTUU7IC8vIFRJTUVcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfUFdSOlxyXG4gICAgICAgIHZhbDIgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpOyAvLyBwb3dlclxyXG4gICAgICAgIHZhbDEgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpOyAvLyBudW1iZXJcclxuICAgICAgICByZXNWYWwuTWdOdW1WYWwgPSBuZXcgTlVNX1RZUEUoKTtcclxuICAgICAgICByZXNWYWwuTWdOdW1WYWwgPSBOVU1fVFlQRS5ldmFsX29wX3B3cih2YWwxLk1nTnVtVmFsLCB2YWwyLk1nTnVtVmFsKTtcclxuICAgICAgICByZXNWYWwuSXNOdWxsID0gKHJlc1ZhbC5NZ051bVZhbCA9PSBudWxsKTtcclxuICAgICAgICByZXNWYWwuQXR0ciA9IFN0b3JhZ2VBdHRyaWJ1dGUuTlVNRVJJQztcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfTE9HOlxyXG4gICAgICAgIHZhbDEgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpO1xyXG4gICAgICAgIHJlc1ZhbC5NZ051bVZhbCA9IE5VTV9UWVBFLmV2YWxfb3BfbG9nKHZhbDEuTWdOdW1WYWwpO1xyXG4gICAgICAgIHJlc1ZhbC5Jc051bGwgPSAocmVzVmFsLk1nTnVtVmFsID09IG51bGwpO1xyXG4gICAgICAgIHJlc1ZhbC5BdHRyID0gU3RvcmFnZUF0dHJpYnV0ZS5OVU1FUklDO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9FWFA6XHJcbiAgICAgICAgdmFsMSA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7XHJcbiAgICAgICAgcmVzVmFsLk1nTnVtVmFsID0gTlVNX1RZUEUuZXZhbF9vcF9leHAodmFsMS5NZ051bVZhbCk7XHJcbiAgICAgICAgcmVzVmFsLklzTnVsbCA9IChyZXNWYWwuTWdOdW1WYWwgPT0gbnVsbCk7XHJcbiAgICAgICAgcmVzVmFsLkF0dHIgPSBTdG9yYWdlQXR0cmlidXRlLk5VTUVSSUM7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX0FCUzpcclxuICAgICAgICB2YWwxID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTtcclxuICAgICAgICByZXNWYWwuTWdOdW1WYWwgPSBOVU1fVFlQRS5ldmFsX29wX2Ficyh2YWwxLk1nTnVtVmFsKTtcclxuICAgICAgICByZXNWYWwuSXNOdWxsID0gKHJlc1ZhbC5NZ051bVZhbCA9PSBudWxsKTtcclxuICAgICAgICByZXNWYWwuQXR0ciA9IFN0b3JhZ2VBdHRyaWJ1dGUuTlVNRVJJQztcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfU0lOOlxyXG4gICAgICAgIHZhbDEgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpO1xyXG4gICAgICAgIHJlc1ZhbC5NZ051bVZhbCA9IE5VTV9UWVBFLmV2YWxfb3Bfc2luKHZhbDEuTWdOdW1WYWwpO1xyXG4gICAgICAgIHJlc1ZhbC5Jc051bGwgPSAocmVzVmFsLk1nTnVtVmFsID09IG51bGwpO1xyXG4gICAgICAgIHJlc1ZhbC5BdHRyID0gU3RvcmFnZUF0dHJpYnV0ZS5OVU1FUklDO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9DT1M6XHJcbiAgICAgICAgdmFsMSA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7XHJcbiAgICAgICAgcmVzVmFsLk1nTnVtVmFsID0gTlVNX1RZUEUuZXZhbF9vcF9jb3ModmFsMS5NZ051bVZhbCk7XHJcbiAgICAgICAgcmVzVmFsLklzTnVsbCA9IChyZXNWYWwuTWdOdW1WYWwgPT0gbnVsbCk7XHJcbiAgICAgICAgcmVzVmFsLkF0dHIgPSBTdG9yYWdlQXR0cmlidXRlLk5VTUVSSUM7XHJcblxyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9UQU46XHJcbiAgICAgICAgdmFsMSA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7XHJcbiAgICAgICAgcmVzVmFsLk1nTnVtVmFsID0gTlVNX1RZUEUuZXZhbF9vcF90YW4odmFsMS5NZ051bVZhbCk7XHJcbiAgICAgICAgcmVzVmFsLklzTnVsbCA9IChyZXNWYWwuTWdOdW1WYWwgPT0gbnVsbCk7XHJcbiAgICAgICAgcmVzVmFsLkF0dHIgPSBTdG9yYWdlQXR0cmlidXRlLk5VTUVSSUM7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX0FTSU46XHJcbiAgICAgICAgdmFsMSA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7XHJcbiAgICAgICAgcmVzVmFsLk1nTnVtVmFsID0gTlVNX1RZUEUuZXZhbF9vcF9hc2luKHZhbDEuTWdOdW1WYWwpO1xyXG4gICAgICAgIHJlc1ZhbC5Jc051bGwgPSAocmVzVmFsLk1nTnVtVmFsID09IG51bGwpO1xyXG4gICAgICAgIHJlc1ZhbC5BdHRyID0gU3RvcmFnZUF0dHJpYnV0ZS5OVU1FUklDO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9BQ09TOlxyXG4gICAgICAgIHZhbDEgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpO1xyXG4gICAgICAgIHJlc1ZhbC5NZ051bVZhbCA9IE5VTV9UWVBFLmV2YWxfb3BfYWNvcyh2YWwxLk1nTnVtVmFsKTtcclxuICAgICAgICByZXNWYWwuSXNOdWxsID0gKHJlc1ZhbC5NZ051bVZhbCA9PSBudWxsKTtcclxuICAgICAgICByZXNWYWwuQXR0ciA9IFN0b3JhZ2VBdHRyaWJ1dGUuTlVNRVJJQztcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfQVRBTjpcclxuICAgICAgICB2YWwxID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTtcclxuICAgICAgICByZXNWYWwuTWdOdW1WYWwgPSBOVU1fVFlQRS5ldmFsX29wX2F0YW4odmFsMS5NZ051bVZhbCk7XHJcbiAgICAgICAgcmVzVmFsLklzTnVsbCA9IChyZXNWYWwuTWdOdW1WYWwgPT0gbnVsbCk7XHJcbiAgICAgICAgcmVzVmFsLkF0dHIgPSBTdG9yYWdlQXR0cmlidXRlLk5VTUVSSUM7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX1JBTkQ6XHJcbiAgICAgICAgdmFsMSA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7XHJcbiAgICAgICAgcmVzVmFsLk1nTnVtVmFsID0gTlVNX1RZUEUuZXZhbF9vcF9yYW5kKHZhbDEuTWdOdW1WYWwpO1xyXG4gICAgICAgIHJlc1ZhbC5Jc051bGwgPSAocmVzVmFsLk1nTnVtVmFsID09IG51bGwpO1xyXG4gICAgICAgIHJlc1ZhbC5BdHRyID0gU3RvcmFnZUF0dHJpYnV0ZS5OVU1FUklDO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9NSU46XHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfTUFYOlxyXG4gICAgICAgIG5BcmdzID0gdmFsU3RhY2sucG9wKCk7XHJcbiAgICAgICAgdGhpcy52YWxfY3B5KDxFeHBWYWw+dmFsU3RhY2sucG9wKCksIHJlc1ZhbCk7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgIGZvciAoaiA9IDE7IGogPCBuQXJnczsgaisrKSB7XHJcbiAgICAgICAgICAgIHZhbDEgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpO1xyXG4gICAgICAgICAgICBpZiAob3BDb2RlID09PSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9NSU4pIHtcclxuICAgICAgICAgICAgICBpZiAoRXhwcmVzc2lvbkV2YWx1YXRvci52YWxfY21wX2FueSh2YWwxLCByZXNWYWwsIHRydWUpIDwgMClcclxuICAgICAgICAgICAgICAgIHRoaXMudmFsX2NweSh2YWwxLCByZXNWYWwpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vIEVYUF9PUF9NQVhcclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgaWYgKEV4cHJlc3Npb25FdmFsdWF0b3IudmFsX2NtcF9hbnkodmFsMSwgcmVzVmFsLCB0cnVlKSA+IDApXHJcbiAgICAgICAgICAgICAgICB0aGlzLnZhbF9jcHkodmFsMSwgcmVzVmFsKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gY2F0Y2ggKG9uZU9mVmFsdWVzSXNOdWxsKSB7XHJcbiAgICAgICAgICBpZiAob25lT2ZWYWx1ZXNJc051bGwgaW5zdGFuY2VvZiBOdWxsVmFsdWVFeGNlcHRpb24pIHtcclxuICAgICAgICAgICAgZm9yICg7IHZhbFN0YWNrLmNvdW50KCkgPiAwICYmIGogPCBuQXJnczsgaisrKVxyXG4gICAgICAgICAgICAgIC8vIGNsZWFuIHF1ZXVlXHJcbiAgICAgICAgICAgICAgdmFsU3RhY2sucG9wKCk7XHJcbiAgICAgICAgICAgIHJlc1ZhbC5Jc051bGwgPSB0cnVlO1xyXG4gICAgICAgICAgICByZXNWYWwuQXR0ciA9IG9uZU9mVmFsdWVzSXNOdWxsLmdldEF0dHIoKTtcclxuICAgICAgICAgIH0gZWxzZSB0aHJvdyBvbmVPZlZhbHVlc0lzTnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX1JBTkdFOlxyXG4gICAgICAgIHZhbDMgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpOyAvLyB1cHBlcjogQSB2YWx1ZSB0aGF0IHJlcHJlc2VudHMgdGhlIHVwcGVyIGxpbWl0IG9mIHRoZSByYW5nZS5cclxuICAgICAgICB2YWwyID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTsgLy8gbG93ZXI6IEEgdmFsdWUgdGhhdCByZXByZXNlbnRzIHRoZSBsb3dlciBsaW1pdCBvZiB0aGUgcmFuZ2UuXHJcbiAgICAgICAgdmFsMSA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7IC8vIHZhbHVlOiBUaGUgdmFsdWUgY2hlY2tlZC5cclxuICAgICAgICB0aGlzLmV2YWxfb3BfcmFuZ2UodmFsMSwgdmFsMiwgdmFsMywgcmVzVmFsKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfUkVQOlxyXG4gICAgICAgIHZhbDQgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpO1xyXG4gICAgICAgIC8vIGxlbl9vcmlnaW46IFRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyB0aGF0IHdpbGwgYmUgbW92ZWQgZnJvbSBvcmlnaW4gdG8gdGFyZ2V0LCBzdGFydGluZyBmcm9tIHRoZSBsZWZ0bW9zdCBjaGFyYWN0ZXIgb2Ygb3JpZ2luLlxyXG4gICAgICAgIHZhbDMgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpO1xyXG4gICAgICAgIC8vIHBvc190YXJnZXQ6IFRoZSBmaXJzdCBwb3NpdGlvbiBpbiB0aGUgdGFyZ2V0IHN0cmluZyB0aGF0IHdpbGwgcmVjZWl2ZSB0aGUgc3Vic3RyaW5nIGZyb20gb3JpZ2luLlxyXG4gICAgICAgIHZhbDIgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpO1xyXG4gICAgICAgIC8vIG9yaWdpbjogVGhlIGFscGhhIHN0cmluZyBvciBleHByZXNzaW9uIHRoYXQgcHJvdmlkZXMgdGhlIHN1YnN0cmluZyB0byBiZSBjb3BpZWQgdG8gdGFyZ2V0LlxyXG4gICAgICAgIHZhbDEgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpO1xyXG4gICAgICAgIC8vIHRhcmdldDogVGhlIHRhcmdldCBhbHBoYSBzdHJpbmcgb3IgZXhwcmVzc2lvbiB3aGVyZSB0aGUgcmVwbGFjZW1lbnQgd2lsbCB0YWtlIHBsYWNlLlxyXG5cclxuICAgICAgICAvLyBjb3VudCB0aGUgbnVtYmVyIG9mIGJ5dGVzLCBub3QgY2hhcmFjdGVycyAoSlBOOiBEQkNTIHN1cHBvcnQpXHJcbiAgICAgICAgaWYgKHNwZWNpYWxBbnNpRXhwcmVzc2lvbiB8fFxyXG4gICAgICAgICAgISh2YWwxLkF0dHIgPT09IFN0b3JhZ2VBdHRyaWJ1dGUuVU5JQ09ERSB8fFxyXG4gICAgICAgICAgICB2YWwyLkF0dHIgPT09IFN0b3JhZ2VBdHRyaWJ1dGUuVU5JQ09ERSkpIHtcclxuICAgICAgICAgIHJlc1ZhbC5BdHRyID0gU3RvcmFnZUF0dHJpYnV0ZS5BTFBIQTtcclxuICAgICAgICAgIHJlc1ZhbC5TdHJWYWwgPSBVdGlsU3RyQnl0ZU1vZGUucmVwQih2YWwxLlN0clZhbCwgdmFsMi5TdHJWYWwsIHZhbDMuTWdOdW1WYWwuTlVNXzJfTE9ORygpLFxyXG4gICAgICAgICAgICB2YWw0Lk1nTnVtVmFsLk5VTV8yX0xPTkcoKSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuZXZhbF9vcF9yZXBfMShyZXNWYWwsIHZhbDEsIHZhbDIsIHZhbDMsIHZhbDQpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX0lOUzpcclxuICAgICAgICB2YWw0ID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTtcclxuICAgICAgICAvLyBsZW5ndGg6IEEgbnVtYmVyIHRoYXQgcmVwcmVzZW50cyB0aGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMgZnJvbSBzb3VyY2UgdGhhdCB3aWxsIGJlIGluc2VydGVkIGludG8gdGFyZ2V0LlxyXG4gICAgICAgIHZhbDMgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpOyAvLyBwb3NpdGlvbjogQSBudW1iZXIgdGhhdCByZXByZXNlbnRzIHRoZSBzdGFydGluZyBwb3NpdGlvbiBpbiB0YXJnZXQuXHJcbiAgICAgICAgdmFsMiA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7IC8vIHNvdXJjZTogQW4gYWxwaGEgc3RyaW5nIHRoYXQgcmVwcmVzZW50cyB0aGUgc291cmNlIHN0cmluZy5cclxuICAgICAgICB2YWwxID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTsgLy8gdGFyZ2V0OiBBbiBhbHBoYSBzdHJpbmcgdGhhdCByZXByZXNlbnRzIHRoZSB0YXJnZXQgc3RyaW5nXHJcblxyXG4gICAgICAgIC8vIGNvdW50IHRoZSBudW1iZXIgb2YgYnl0ZXMsIG5vdCBjaGFyYWN0ZXJzIChKUE46IERCQ1Mgc3VwcG9ydClcclxuICAgICAgICBpZiAoc3BlY2lhbEFuc2lFeHByZXNzaW9uIHx8XHJcbiAgICAgICAgICAhKHZhbDEuQXR0ciA9PT0gU3RvcmFnZUF0dHJpYnV0ZS5VTklDT0RFIHx8XHJcbiAgICAgICAgICAgIHZhbDIuQXR0ciA9PT0gU3RvcmFnZUF0dHJpYnV0ZS5VTklDT0RFKSkge1xyXG4gICAgICAgICAgcmVzVmFsLkF0dHIgPSBTdG9yYWdlQXR0cmlidXRlLkFMUEhBO1xyXG4gICAgICAgICAgcmVzVmFsLlN0clZhbCA9IFV0aWxTdHJCeXRlTW9kZS5pbnNCKHZhbDEuU3RyVmFsLCB2YWwyLlN0clZhbCwgdmFsMy5NZ051bVZhbC5OVU1fMl9MT05HKCksXHJcbiAgICAgICAgICAgIHZhbDQuTWdOdW1WYWwuTlVNXzJfTE9ORygpKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5ldmFsX29wX2lucyhyZXNWYWwsIHZhbDEsIHZhbDIsIHZhbDMsIHZhbDQpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX0RFTDpcclxuICAgICAgICB2YWwzID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTtcclxuICAgICAgICAvLyBsZW5ndGg6IFRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyB0byBiZSBkZWxldGVkLCBiZWdpbm5pbmcgd2l0aCBwb3NpdGlvbiBzdGFydCBhbmQgcHJvY2VlZGluZyByaWdodHdhcmQuXHJcbiAgICAgICAgdmFsMiA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7IC8vIHN0YXJ0IDogVGhlIHBvc2l0aW9uIG9mIHRoZSBmaXJzdCBjaGFyYWN0ZXIgdG8gYmUgZGVsZXRlZC5cclxuICAgICAgICB2YWwxID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTsgLy8gc3RyaW5nOiBBbiBhbHBoYSBzdHJpbmcgb3IgYW4gYWxwaGEgc3RyaW5nIGV4cHJlc3Npb24uXHJcblxyXG4gICAgICAgIC8vIGNvdW50IHRoZSBudW1iZXIgb2YgYnl0ZXMsIG5vdCBjaGFyYWN0ZXJzIChKUE46IERCQ1Mgc3VwcG9ydClcclxuICAgICAgICBpZiAoc3BlY2lhbEFuc2lFeHByZXNzaW9uIHx8IHZhbDEuQXR0ciAhPT0gU3RvcmFnZUF0dHJpYnV0ZS5VTklDT0RFKSB7XHJcbiAgICAgICAgICByZXNWYWwuQXR0ciA9IFN0b3JhZ2VBdHRyaWJ1dGUuQUxQSEE7XHJcbiAgICAgICAgICByZXNWYWwuU3RyVmFsID0gVXRpbFN0ckJ5dGVNb2RlLmRlbEIodmFsMS5TdHJWYWwsIHZhbDIuTWdOdW1WYWwuTlVNXzJfTE9ORygpLFxyXG4gICAgICAgICAgICB2YWwzLk1nTnVtVmFsLk5VTV8yX0xPTkcoKSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuZXZhbF9vcF9kZWwocmVzVmFsLCB2YWwxLCB2YWwyLCB2YWwzKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9GTElQOlxyXG4gICAgICAgIHZhbDEgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpO1xyXG4gICAgICAgIHRoaXMuZXZhbF9vcF9mbGlwKHJlc1ZhbCwgdmFsMSk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX1VQUEVSOlxyXG4gICAgICAgIHZhbDEgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpO1xyXG4gICAgICAgIHRoaXMuZXZhbF9vcF91cHBlcihyZXNWYWwsIHZhbDEpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9MT1dFUjpcclxuICAgICAgICB2YWwxID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTtcclxuICAgICAgICB0aGlzLmV2YWxfb3BfbG93ZXIocmVzVmFsLCB2YWwxKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfQ1JDOlxyXG4gICAgICAgIHZhbDIgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpO1xyXG4gICAgICAgIC8vIG51bWVyaWM6IEEgbnVtYmVyIHRoYXQgcmVwcmVzZW50cyB0aGUgQ1JDIGFsZ29yaXRobS4gSW4gdGhpcyB2ZXJzaW9uIG9mIE1hZ2ljIHVzZSAwIHRvIGFwcGx5IENSQy0xNi5cclxuICAgICAgICB2YWwxID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTsgLy8gc3RyaW5nIDogQW4gYWxwaGEgc3RyaW5nIHRvIHdoaWNoIHRoZSBDUkMgaXMgYXBwbGllZC5cclxuICAgICAgICB0aGlzLmV2YWxfb3BfY3JjKHJlc1ZhbCwgdmFsMSwgdmFsMik7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX0NIS0RHVDpcclxuICAgICAgICB2YWwyID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTsgLy8gMCBvciAxIChudW1iZXIpIGZvciBNb2R1bHVzIDEwIG9yIE1vZHVsdXMgMTEsIHJlc3BlY3RpdmVseS5cclxuICAgICAgICB2YWwxID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTtcclxuICAgICAgICAvLyBBbiBhbHBoYSBzdHJpbmcgdGhhdCByZXByZXNlbnRzIHRoZSBudW1iZXIgZm9yIHdoaWNoIHRoZSBjaGVjayBkaWdpdCB3aWxsIGJlIGNhbGN1bGF0ZWRcclxuICAgICAgICB0aGlzLmV2YWxfb3BfY2hrZGd0KHJlc1ZhbCwgdmFsMSwgdmFsMik7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX1NPVU5EWDpcclxuICAgICAgICB2YWwxID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTtcclxuICAgICAgICB0aGlzLmV2YWxfb3Bfc291bmR4KHJlc1ZhbCwgdmFsMSk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX0hTVFI6XHJcbiAgICAgICAgdmFsMSA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7XHJcbiAgICAgICAgdGhpcy5ldmFsX29wX2hzdHIocmVzVmFsLCB2YWwxKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfSFZBTDpcclxuICAgICAgICB2YWwxID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTtcclxuICAgICAgICB0aGlzLmV2YWxfb3BfaHZhbChyZXNWYWwsIHZhbDEpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9DSFI6XHJcbiAgICAgICAgdmFsMSA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7XHJcbiAgICAgICAgdGhpcy5ldmFsX29wX2NocihyZXNWYWwsIHZhbDEpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9BU0M6XHJcbiAgICAgICAgdmFsMSA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7XHJcbiAgICAgICAgdGhpcy5ldmFsX29wX2FzYyhyZXNWYWwsIHZhbDEpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9NU1RSOlxyXG4gICAgICAgIHZhbDIgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpO1xyXG4gICAgICAgIHZhbDEgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpO1xyXG4gICAgICAgIHRoaXMuZXZhbF9vcF9tc3RyKHJlc1ZhbCwgdmFsMSwgdmFsMik7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX01WQUw6XHJcbiAgICAgICAgdmFsMSA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7XHJcbiAgICAgICAgdGhpcy5ldmFsX29wX212YWwocmVzVmFsLCB2YWwxKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfRFNUUjpcclxuICAgICAgICB2YWwyID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTsgLy8gcGljdHVyZSBzdHJpbmdcclxuICAgICAgICB2YWwxID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTsgLy8gZGF0ZSBzdHJpbmcgaXQncyBMT0dJQ0FMID8/Pz8/P1xyXG4gICAgICAgIHRoaXMuZXZhbF9vcF9kc3RyKHJlc1ZhbCwgdmFsMSwgdmFsMiwgRGlzcGxheUNvbnZlcnRvci5JbnN0YW5jZSk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX0RWQUw6XHJcbiAgICAgICAgdmFsMiA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7IC8vIHBpY3R1cmUgIGZvcm1hdCBvZiBkYXRlIHN0cmluZyBvdXRwdXRcclxuICAgICAgICB2YWwxID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTsgLy8gZGF0ZSBzdHJpbmdcclxuICAgICAgICB0aGlzLmV2YWxfb3BfZHZhbChyZXNWYWwsIHZhbDEsIHZhbDIsIERpc3BsYXlDb252ZXJ0b3IuSW5zdGFuY2UpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9UU1RSOlxyXG4gICAgICAgIHZhbDIgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpOyAvLyBwaWN0dXJlIGZvcm1hdCBvZiB0aW1lIHN0cmluZyBvdXRwdXRcclxuICAgICAgICB2YWwxID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTsgLy8gdGltZSBzdHJpbmdcclxuICAgICAgICB0aGlzLmV2YWxfb3BfdHN0cihyZXNWYWwsIHZhbDEsIHZhbDIsIERpc3BsYXlDb252ZXJ0b3IuSW5zdGFuY2UsIGZhbHNlKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfTVRTVFI6XHJcbiAgICAgICAgdmFsMiA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7IC8vIHBpY3R1cmUgZm9ybWF0IG9mIHRpbWUgc3RyaW5nIG91dHB1dFxyXG4gICAgICAgIHZhbDEgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpOyAvLyB0aW1lIHN0cmluZ1xyXG4gICAgICAgIHRoaXMuZXZhbF9vcF90c3RyKHJlc1ZhbCwgdmFsMSwgdmFsMiwgRGlzcGxheUNvbnZlcnRvci5JbnN0YW5jZSwgdHJ1ZSk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX1RWQUw6XHJcbiAgICAgICAgdmFsMiA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7IC8vIHBpY3R1cmUgc3RyaW5nXHJcbiAgICAgICAgdmFsMSA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7IC8vIHRpbWUgc3RyaW5nXHJcbiAgICAgICAgdGhpcy5ldmFsX29wX3R2YWwocmVzVmFsLCB2YWwxLCB2YWwyLCBEaXNwbGF5Q29udmVydG9yLkluc3RhbmNlLCBmYWxzZSk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX01UVkFMOlxyXG4gICAgICAgIHZhbDIgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpOyAvLyBwaWN0dXJlIHN0cmluZ1xyXG4gICAgICAgIHZhbDEgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpOyAvLyB0aW1lIHN0cmluZ1xyXG4gICAgICAgIHRoaXMuZXZhbF9vcF90dmFsKHJlc1ZhbCwgdmFsMSwgdmFsMiwgRGlzcGxheUNvbnZlcnRvci5JbnN0YW5jZSwgdHJ1ZSk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX0RBWTpcclxuICAgICAgICB2YWwxID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTtcclxuICAgICAgICB0aGlzLmV2YWxfb3BfZGF5KHJlc1ZhbCwgdmFsMSk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX01PTlRIOlxyXG4gICAgICAgIHZhbDEgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpO1xyXG4gICAgICAgIHRoaXMuZXZhbF9vcF9tb250aChyZXNWYWwsIHZhbDEpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9ZRUFSOlxyXG4gICAgICAgIHZhbDEgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpO1xyXG4gICAgICAgIHRoaXMuZXZhbF9vcF95ZWFyKHJlc1ZhbCwgdmFsMSk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX0RPVzpcclxuICAgICAgICB2YWwxID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTtcclxuICAgICAgICB0aGlzLmV2YWxfb3BfZG93KHJlc1ZhbCwgdmFsMSk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX0NET1c6XHJcbiAgICAgICAgdmFsMSA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7XHJcbiAgICAgICAgdGhpcy5ldmFsX29wX2Nkb3cocmVzVmFsLCB2YWwxLk1nTnVtVmFsLCBEaXNwbGF5Q29udmVydG9yLkluc3RhbmNlKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfQ01PTlRIOlxyXG4gICAgICAgIHZhbDEgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpO1xyXG4gICAgICAgIHRoaXMuZXZhbF9vcF9jbW9udGgocmVzVmFsLCB2YWwxLk1nTnVtVmFsLCBEaXNwbGF5Q29udmVydG9yLkluc3RhbmNlKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfTkRPVzpcclxuICAgICAgICB2YWwxID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTsgLy8gbnVtYmVyIG9yIGRheSBvZiB3ZWVrXHJcbiAgICAgICAgdGhpcy5ldmFsX29wX25kb3cocmVzVmFsLCB2YWwxLCBEaXNwbGF5Q29udmVydG9yLkluc3RhbmNlKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfTk1PTlRIOlxyXG4gICAgICAgIHZhbDEgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpOyAvLyBudW1iZXIgb3IgbW9udGggb2YgeWVhclxyXG4gICAgICAgIHRoaXMuZXZhbF9vcF9ubW9udGgocmVzVmFsLCB2YWwxLCBEaXNwbGF5Q29udmVydG9yLkluc3RhbmNlKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfU0VDT05EOlxyXG4gICAgICAgIHZhbDEgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpO1xyXG4gICAgICAgIHRoaXMuZXZhbF9vcF9zZWNvbmQocmVzVmFsLCB2YWwxKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfTUlOVVRFOlxyXG4gICAgICAgIHZhbDEgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpO1xyXG4gICAgICAgIHRoaXMuZXZhbF9vcF9taW51dGUocmVzVmFsLCB2YWwxKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfSE9VUjpcclxuICAgICAgICB2YWwxID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTtcclxuICAgICAgICB0aGlzLmV2YWxfb3BfaG91cihyZXNWYWwsIHZhbDEpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9ERUxBWTpcclxuICAgICAgICB2YWwxID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTtcclxuICAgICAgICAvLyB0aGlzIGZ1bmN0aW9uIG5vdCB3YXJrLCBub3QgY2hlY2tlZFxyXG4gICAgICAgIHRoaXMuZXZhbF9vcF9kZWxheSh2YWwxKTtcclxuICAgICAgICByZXNWYWwuQXR0ciA9IFN0b3JhZ2VBdHRyaWJ1dGUuQk9PTEVBTjtcclxuICAgICAgICByZXNWYWwuQm9vbFZhbCA9IHRydWU7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX0lETEU6XHJcbiAgICAgICAgdGhpcy5ldmFsX29wX2lkbGUocmVzVmFsKTtcclxuICAgICAgICBicmVhaztcclxuXHJcblxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX0FERERBVEU6XHJcbiAgICAgICAgdmFsNCA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7IC8vIGRheXM6IFRoZSBudW1iZXIgb2YgZGF5cyB0byBhZGQgdG8gZGF0ZS4gTWF5IGJlIHplcm8uXHJcbiAgICAgICAgdmFsMyA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7IC8vIG1vbnRoczogVGhlIG51bWJlciBvZiBtb250aHMgdG8gYWRkIHRvIGRhdGUuIE1heSBiZSB6ZXJvLlxyXG4gICAgICAgIHZhbDIgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpOyAvLyB5ZWFycyA6IFRoZSBudW1iZXIgb2YgeWVhcnMgdG8gYWRkIHRvIGRhdGUuIE1heSBiZSB6ZXJvLlxyXG4gICAgICAgIHZhbDEgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpOyAvLyBkYXRlIDogQSBkYXRlLlxyXG4gICAgICAgIHRoaXMuZXZhbF9vcF9hZGRkYXRlKHJlc1ZhbCwgdmFsMSwgdmFsMiwgdmFsMywgdmFsNCk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX0FERFRJTUU6XHJcbiAgICAgICAgdmFsNCA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7IC8vIHNlY29uZHM6IFRoZSBudW1iZXIgb2Ygc2Vjb25kcyB0byBhZGQgdG8gdGltZS5cclxuICAgICAgICB2YWwzID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTsgLy8gbWludXRlczogVGhlIG51bWJlciBvZiBtaW51dGVzIHRvIGFkZCB0byB0aW1lLlxyXG4gICAgICAgIHZhbDIgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpOyAvLyBob3VycyA6IFRoZSBudW1iZXIgb2YgaG91cnMgdG8gYWRkIHRvIHRpbWVcclxuICAgICAgICB2YWwxID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTsgLy8gdGltZSA6IEEgdGltZSB2YWx1ZS5cclxuICAgICAgICB0aGlzLmV2YWxfb3BfYWRkdGltZShyZXNWYWwsIHZhbDEsIHZhbDIsIHZhbDMsIHZhbDQpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9PV05FUjpcclxuICAgICAgICByZXNWYWwuQXR0ciA9IFN0b3JhZ2VBdHRyaWJ1dGUuQUxQSEE7XHJcbiAgICAgICAgcmVzVmFsLlN0clZhbCA9IEVudmlyb25tZW50Lkluc3RhbmNlLmdldE93bmVyKCk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX1ZBUkFUVFI6XHJcbiAgICAgICAgdmFsMSA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7XHJcbiAgICAgICAgdGhpcy5ldmFsX29wX3ZhcmF0dHIocmVzVmFsLCB2YWwxKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfVkFSUElDOlxyXG4gICAgICAgIHZhbDIgPSAoPEV4cFZhbD52YWxTdGFjay5wb3AoKSk7XHJcbiAgICAgICAgdmFsMSA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7XHJcbiAgICAgICAgLy8gdG8gYWRkIHRoaXMgbWV0aG9kXHJcbiAgICAgICAgdGhpcy5ldmFsX29wX3ZhcnBpYyhyZXNWYWwsIHZhbDEsIHZhbDIpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9EQlJPVU5EOlxyXG4gICAgICAgIHZhbDIgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpO1xyXG4gICAgICAgIHZhbDEgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpO1xyXG4gICAgICAgIC8vIHRvIGFkZCB0aGlzIG1ldGhvZFxyXG4gICAgICAgIHRoaXMuZXZhbF9vcF9kYnJvdW5kKHJlc1ZhbCwgdmFsMSwgdmFsMik7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX05VTEw6XHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfTlVMTF9BOlxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX05VTExfTjpcclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9OVUxMX0I6XHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfTlVMTF9EOlxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX05VTExfVDpcclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9OVUxMX1U6XHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfTlVMTF9POlxyXG4gICAgICAgIHRoaXMuZXhwX251bGxfdmFsX2dldChleHBlY3RlZFR5cGUsIG9wQ29kZSwgcmVzVmFsKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfSVNOVUxMOlxyXG4gICAgICAgIHZhbDEgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpO1xyXG4gICAgICAgIHJlc1ZhbC5Cb29sVmFsID0gdmFsMS5Jc051bGw7XHJcblxyXG4gICAgICAgIC8vIGlkZW50aWZ5IGEgc2l0dWF0aW9uIHdoZXJlIGEgdmFsdWUgd2FzIHVuLW51bGxpZmllZCBkdWUgdG8gXCJudWxsIGFyaXRobWV0aWNcIlxyXG4gICAgICAgIC8vIGFuZCBzdGlsbCwgbWFrZSBJU05VTEwoKSByZXR1cm4gVFJVRSBhbHRob3VnaCB0aGUgdmFsdWUgaXMgZmxhZ2dlZCBhcyBub24tbnVsbFxyXG4gICAgICAgIGlmICghdmFsMS5Jc051bGwgJiYgdmFsMS5PcmlnaW5hbE51bGwpXHJcbiAgICAgICAgICByZXNWYWwuQm9vbFZhbCA9IHZhbDEuT3JpZ2luYWxOdWxsO1xyXG5cclxuICAgICAgICByZXNWYWwuQXR0ciA9IFN0b3JhZ2VBdHRyaWJ1dGUuQk9PTEVBTjtcclxuXHJcbiAgICAgICAgLy8gbnVsbCB2YWx1ZXMgYWNjZXB0ZWQgaW50byB0aGUgSVNOVUxMKCkgZnVuY3Rpb24gZG8gbm90IG51bGxpZnkgdGhlXHJcbiAgICAgICAgLy8gV2hvbGUgZXhwcmVzc2lvbiwgdGh1cyBVTkxFU1MgU09NRVRISU5HIEVMU0UgbnVsbGlmaWVkIHRoZSBleHByZXNzaW9uLFxyXG4gICAgICAgIC8vIHdlIG1hcmsgaXQgYXMgTk9OLU5VTEwuIFdlIGNoZWNrIGlmIHNvbWV0aGluZyBlbHNlIG51bGxpZmllZCB0aGUgZXhwcmVzc2lvblxyXG4gICAgICAgIC8vIGJ5IHNjYW5uaW5nIHRoZSB2YWx1ZXMgY3VycmVudGx5IG9uIHRoZSBwYXJhbWV0ZXJzIHN0YWNrLlxyXG4gICAgICAgIGlmIChleHBTdHJUcmFja2VyLmlzTnVsbCgpKSB7XHJcbiAgICAgICAgICBsZXQgbXlBcnJheTogTGlzdDxFeHBWYWw+ID0gbmV3IExpc3Q8RXhwVmFsPigpO1xyXG4gICAgICAgICAgbGV0IHByZXZOdWxsOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICAgICAgICBsZXQgaTogbnVtYmVyO1xyXG4gICAgICAgICAgd2hpbGUgKCEodmFsU3RhY2suY291bnQoKSA9PT0gMCkgJiYgIXByZXZOdWxsKSB7XHJcbiAgICAgICAgICAgIG15QXJyYXkucHVzaCg8RXhwVmFsPnZhbFN0YWNrLnBvcCgpKTtcclxuICAgICAgICAgICAgaWYgKG15QXJyYXkuZ2V0X0l0ZW0obXlBcnJheS5sZW5ndGggLSAxKS5Jc051bGwpXHJcbiAgICAgICAgICAgICAgcHJldk51bGwgPSB0cnVlO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIGZvciAoaSA9IG15QXJyYXkubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pXHJcbiAgICAgICAgICAgIHZhbFN0YWNrLnB1c2gobXlBcnJheS5nZXRfSXRlbShpKSk7XHJcblxyXG4gICAgICAgICAgaWYgKCFwcmV2TnVsbClcclxuICAgICAgICAgICAgZXhwU3RyVHJhY2tlci5yZXNldE51bGxSZXN1bHQoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9CT006XHJcbiAgICAgICAgdmFsMSA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7XHJcbiAgICAgICAgdGhpcy5ldmFsX29wX2JvbShyZXNWYWwsIHZhbDEpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9CT1k6XHJcbiAgICAgICAgdmFsMSA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7XHJcbiAgICAgICAgdGhpcy5ldmFsX29wX2JveShyZXNWYWwsIHZhbDEpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9FT006XHJcbiAgICAgICAgdmFsMSA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7XHJcbiAgICAgICAgdGhpcy5ldmFsX29wX2VvbShyZXNWYWwsIHZhbDEpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9FT1k6XHJcbiAgICAgICAgdmFsMSA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7XHJcbiAgICAgICAgdGhpcy5ldmFsX29wX2VveShyZXNWYWwsIHZhbDEpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9ST0xMQkFDSzpcclxuICAgICAgICB2YWwyID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTsgLy8gc2hvdyBtZXNzYWdlXHJcbiAgICAgICAgdmFsMSA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7IC8vIGdlbmVyYXRpb24gKD8pXHJcbiAgICAgICAgYXdhaXQgdGhpcy5ldmFsX29wX3JvbGxiYWNrKHJlc1ZhbCwgdmFsMSwgdmFsMik7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX1ZBUlNFVDpcclxuICAgICAgICB2YWwyID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTsgLy8gdmFsdWVcclxuICAgICAgICB2YWwxID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTsgLy8gbnVtYmVyXHJcbiAgICAgICAgYXdhaXQgdGhpcy5ldmFsX29wX3ZhcnNldChyZXNWYWwsIHZhbDIsIHZhbDEpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9DVFJMX05BTUU6XHJcbiAgICAgICAgdGhpcy5ldmFsX29wX2N0cmxfbmFtZShyZXNWYWwpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuXHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfVERFUFRIOlxyXG4gICAgICAgIC8vIHVzZSB0aGUgY29udGV4dCB0YXNrIG9mIHRoZSBjdXJyZW50IHRhc2sgb2YgZXhwcmVzc2lvblxyXG4gICAgICAgIGxldCBjdXJyVHNrOiBUYXNrQmFzZSA9IDxUYXNrQmFzZT4gdGhpcy5FeHBUYXNrLkdldENvbnRleHRUYXNrKCk7XHJcbiAgICAgICAgbGVuID0gKGN1cnJUc2suZ2V0VGFza0RlcHRoKGZhbHNlKSkgLSAxOyAvLyBzdGFydCBmcm9tIEZpcnN0IFRhc2tCYXNlIGFuZCBub3QgZnJvbSBtYWluIFRhc2tCYXNlXHJcbiAgICAgICAgdGhpcy5Db25zdHJ1Y3RNYWdpY051bShyZXNWYWwsIGxlbiwgU3RvcmFnZUF0dHJpYnV0ZS5OVU1FUklDKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfSVNERUZBVUxUOlxyXG4gICAgICAgIHZhbDEgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpO1xyXG4gICAgICAgIHRoaXMuZXhwX2lzX2RlZmF1bHQocmVzVmFsLCB2YWwxKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfU1RSVE9LRU46XHJcbiAgICAgICAgdmFsMyA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7IC8vIERlbGltaXRlcnMgU3RyaW5nIC0gYWxwaGEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIGRlbGltaXRlciBzdHJpbmcuXHJcbiAgICAgICAgdmFsMiA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7IC8vIFRva2VuIEluZGV4IC0gcmVxdWVzdGVkIHRva2VuIGluZGV4IChudW1lcmljKS5cclxuICAgICAgICB2YWwxID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTsgLy8gU291cmNlIFN0cmluZyAtIGRlbGltaXRlZCBhbHBoYSBzdHJpbmcgd2l0aCB0b2tlbnMuXHJcbiAgICAgICAgdGhpcy5ldmFsX29wX3N0cnRvayhyZXNWYWwsIHZhbDEsIHZhbDIsIHZhbDMpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9TVFJUT0tfQ05UOlxyXG4gICAgICAgIHZhbDIgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpOyAvLyB0aGUgZGVsaW1ldGVycyBzdHJpbmdcclxuICAgICAgICB2YWwxID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTsgLy8gdGhlIHNvdXJjZSBzdHJpbmdcclxuICAgICAgICB0aGlzLmV2YWxfb3Bfc3RyVG9rZW5DbnQodmFsMSwgdmFsMiwgcmVzVmFsKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfU1RSVE9LRU5fSURYOlxyXG4gICAgICAgIHZhbDMgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpOyAvLyB0aGUgZGVsaW1ldGVycyBzdHJpbmdcclxuICAgICAgICB2YWwyID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTsgLy8gdGhlIHRva2VuIHRvIGJlIGZvdW5kXHJcbiAgICAgICAgdmFsMSA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7IC8vIHRoZSBzb3VyY2Ugc3RyaW5nXHJcbiAgICAgICAgdGhpcy5ldmFsX29wX3N0clRva2VuSWR4KHZhbDEsIHZhbDIsIHZhbDMsIHJlc1ZhbCk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX0JMT0JTSVpFOlxyXG4gICAgICAgIHZhbDEgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpOyAvLyBCbG9iXHJcbiAgICAgICAgdGhpcy5ldmFsX29wX2Jsb2JzaXplKHJlc1ZhbCwgdmFsMSk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9XRUJfUkVGRVJFTkNFOlxyXG4gICAgICAgIHZhbDEgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpO1xyXG4gICAgICAgIHJlc1ZhbC5BdHRyID0gU3RvcmFnZUF0dHJpYnV0ZS5BTFBIQTtcclxuICAgICAgICByZXNWYWwuU3RyVmFsID0gJyUnICsgdmFsMS5TdHJWYWwgKyAnJSc7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9DQVNFOlxyXG4gICAgICAgIC8vIHRoZSBjYXNlIG5vdCB3b3JrIHdpdGggRGF0ZSBmaWVsZCwgYnV0IG5vdCB3b3JrIGluIE9uTGluZSB0b28uXHJcbiAgICAgICAgbkFyZ3MgPSB2YWxTdGFjay5wb3AoKTtcclxuICAgICAgICBFeHBfcGFyYW1zID0gbmV3IEFycmF5KG5BcmdzKTtcclxuICAgICAgICBmb3IgKGogPSAwOyBqIDwgbkFyZ3M7IGorKylcclxuICAgICAgICAgIEV4cF9wYXJhbXNbbkFyZ3MgLSAxIC0gal0gPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpO1xyXG4gICAgICAgIHRoaXMudmFsX2NweShFeHBfcGFyYW1zWzBdLCByZXNWYWwpOyAvLyBnZXQgIGNhc2UoQSkgLT4gJ0EnIHZhbHVlXHJcblxyXG4gICAgICAgIGZvciAoaiA9IDE7IGogPCBuQXJnczsgaiArPSAyKSB7XHJcbiAgICAgICAgICB2YWwxID0gRXhwX3BhcmFtc1tqXTtcclxuICAgICAgICAgIGxldCB2YWx1ZU1hdGNoZWQ6IGJvb2xlYW47XHJcbiAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICB2YWx1ZU1hdGNoZWQgPSAoRXhwcmVzc2lvbkV2YWx1YXRvci52YWxfY21wX2FueSh2YWwxLCByZXNWYWwsIGZhbHNlKSA9PT0gMCk7XHJcbiAgICAgICAgICB9IGNhdGNoIChudWxsVmFsdWVFeGNlcHRpb24pIHtcclxuICAgICAgICAgICAgaWYgKG51bGxWYWx1ZUV4Y2VwdGlvbiBpbnN0YW5jZW9mIE51bGxWYWx1ZUV4Y2VwdGlvbikge1xyXG4gICAgICAgICAgICAgIHZhbHVlTWF0Y2hlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9IGVsc2VcclxuICAgICAgICAgICAgICB0aHJvdyBudWxsVmFsdWVFeGNlcHRpb247XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgaWYgKHZhbHVlTWF0Y2hlZCkge1xyXG4gICAgICAgICAgICB0aGlzLnZhbF9jcHkoRXhwX3BhcmFtc1tqICsgMV0sIHJlc1ZhbCk7IC8vIHRoZSBjYXNlIGZvdW5kXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKGogPT09IChuQXJncyAtIDMpKVxyXG4gICAgICAgICAgLy8gYXJyYXkgc3RhcnRzIGZyb20gMCAtPm5BcmdzLTE7IGxhc3QgaXMgZGlmZmF1bHQgdmFsdWUgLT5uQXJncy0xO1xyXG4gICAgICAgICAgLy8gbG9va2luZyBvbmUgYmVmb3JlIGRpZmZhdWx0IC0+bkFyZ3MtMSA9Pi0zXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMudmFsX2NweShFeHBfcGFyYW1zW2ogKyAyXSwgcmVzVmFsKTsgLy8gZGlmZmF1bHQgYXJndW1lbnQgZm91bmRcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSAvLyBlbmQgb2YgZm9yIGxvb3BcclxuXHJcbiAgICAgICAgZXhwU3RyVHJhY2tlci5yZXNldE51bGxSZXN1bHQoKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfVEhJUzpcclxuICAgICAgICB0aGlzLmV2YWxfb3BfdGhpcyhyZXNWYWwpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9MSUtFOlxyXG4gICAgICAgIHZhbDIgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpO1xyXG4gICAgICAgIHZhbDEgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpO1xyXG4gICAgICAgIHRoaXMuZXZhbF9vcF9saWtlKHZhbDEsIHZhbDIsIHJlc1ZhbCk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX1JFUFNUUjpcclxuICAgICAgICB2YWwzID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTtcclxuICAgICAgICB2YWwyID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTtcclxuICAgICAgICB2YWwxID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTtcclxuICAgICAgICB0aGlzLmV2YWxfb3BfcmVwc3RyKHZhbDEsIHZhbDIsIHZhbDMsIHJlc1ZhbCk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX1ZBUkNVUlJOOlxyXG4gICAgICAgIHZhbDEgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpOyAvLyBzdHJpbmcsIG5hbWUgb2YgY29udHJvbFxyXG4gICAgICAgIHRoaXMuZXhwX2dldF92YXIodmFsMSwgcmVzVmFsKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfVkFSSU5ERVg6XHJcbiAgICAgICAgdmFsMSA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7IC8vIHN0cmluZywgbmFtZSBvZiBjb250cm9sXHJcbiAgICAgICAgdGhpcy5leHBfZ2V0X2luZHgodmFsMSwgcmVzVmFsKTtcclxuICAgICAgICBicmVhaztcclxuXHJcblxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX0pDRE9XOlxyXG4gICAgICAgIGlmICh0aGlzLl9leHByZXNzaW9uTG9jYWxKcG4gPT0gbnVsbClcclxuICAgICAgICAgIHN1cGVyLlNldE5VTEwocmVzVmFsLCBTdG9yYWdlQXR0cmlidXRlLkFMUEhBKTtcclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgIHZhbDEgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpOyAvLyBkYXRlXHJcbiAgICAgICAgICB0aGlzLl9leHByZXNzaW9uTG9jYWxKcG4uZXZhbF9vcF9qY2RvdyhyZXNWYWwsIHZhbDEuTWdOdW1WYWwsIERpc3BsYXlDb252ZXJ0b3IuSW5zdGFuY2UpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfSk1PTlRIOlxyXG4gICAgICAgIGlmICh0aGlzLl9leHByZXNzaW9uTG9jYWxKcG4gPT0gbnVsbClcclxuICAgICAgICAgIHN1cGVyLlNldE5VTEwocmVzVmFsLCBTdG9yYWdlQXR0cmlidXRlLkFMUEhBKTtcclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgIHZhbDEgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpOyAvLyBudW1iZXIgb3IgbW9udGggb2YgeWVhclxyXG4gICAgICAgICAgdGhpcy5fZXhwcmVzc2lvbkxvY2FsSnBuLmV2YWxfb3Bfam1vbnRoKHJlc1ZhbCwgdmFsMSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9KTkRPVzpcclxuICAgICAgICBpZiAodGhpcy5fZXhwcmVzc2lvbkxvY2FsSnBuID09IG51bGwpXHJcbiAgICAgICAgICBzdXBlci5TZXROVUxMKHJlc1ZhbCwgU3RvcmFnZUF0dHJpYnV0ZS5BTFBIQSk7XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICB2YWwxID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTsgLy8gbnVtYmVyIG9yIGRheSBvZiB3ZWVrXHJcbiAgICAgICAgICB0aGlzLl9leHByZXNzaW9uTG9jYWxKcG4uZXZhbF9vcF9qbmRvdyhyZXNWYWwsIHZhbDEsIERpc3BsYXlDb252ZXJ0b3IuSW5zdGFuY2UpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfSllFQVI6XHJcbiAgICAgICAgaWYgKHRoaXMuX2V4cHJlc3Npb25Mb2NhbEpwbiA9PSBudWxsKVxyXG4gICAgICAgICAgc3VwZXIuU2V0TlVMTChyZXNWYWwsIFN0b3JhZ2VBdHRyaWJ1dGUuQUxQSEEpO1xyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgdmFsMSA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7IC8vIGRhdGVcclxuICAgICAgICAgIHRoaXMuX2V4cHJlc3Npb25Mb2NhbEpwbi5ldmFsX29wX2p5ZWFyKHJlc1ZhbCwgdmFsMSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9KR0VOR086XHJcbiAgICAgICAgaWYgKHRoaXMuX2V4cHJlc3Npb25Mb2NhbEpwbiA9PSBudWxsKVxyXG4gICAgICAgICAgc3VwZXIuU2V0TlVMTChyZXNWYWwsIFN0b3JhZ2VBdHRyaWJ1dGUuQUxQSEEpO1xyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgdmFsMiA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7IC8vIGRhdGVcclxuICAgICAgICAgIHZhbDEgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpOyAvLyBtb2RlXHJcbiAgICAgICAgICB0aGlzLl9leHByZXNzaW9uTG9jYWxKcG4uZXZhbF9vcF9qZ2VuZ28ocmVzVmFsLCB2YWwxLk1nTnVtVmFsLCB2YWwyLk1nTnVtVmFsLFxyXG4gICAgICAgICAgICBEaXNwbGF5Q29udmVydG9yLkluc3RhbmNlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX0hBTjpcclxuICAgICAgICB2YWwxID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTsgLy8gc3RyaW5nXHJcbiAgICAgICAgcmVzVmFsLkF0dHIgPSB2YWwxLkF0dHI7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLl9leHByZXNzaW9uTG9jYWxKcG4gPT0gbnVsbClcclxuICAgICAgICAgIHJlc1ZhbC5TdHJWYWwgPSB2YWwxLlN0clZhbDtcclxuICAgICAgICBlbHNlIGlmICh2YWwxLlN0clZhbCA9PSBudWxsKVxyXG4gICAgICAgICAgc3VwZXIuU2V0TlVMTChyZXNWYWwsIHZhbDEuQXR0cik7XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICByZXNWYWwuU3RyVmFsID0gdGhpcy5fZXhwcmVzc2lvbkxvY2FsSnBuLmV2YWxfb3BfaGFuKHZhbDEuU3RyVmFsKTtcclxuICAgICAgICAgIGlmIChyZXNWYWwuU3RyVmFsID09IG51bGwpXHJcbiAgICAgICAgICAgIHJlc1ZhbC5TdHJWYWwgPSAnJztcclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX1pFTjpcclxuICAgICAgICB2YWwxID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTsgLy8gc3RyaW5nXHJcbiAgICAgICAgcmVzVmFsLkF0dHIgPSB2YWwxLkF0dHI7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLl9leHByZXNzaW9uTG9jYWxKcG4gPT0gbnVsbClcclxuICAgICAgICAgIHJlc1ZhbC5TdHJWYWwgPSB2YWwxLlN0clZhbDtcclxuICAgICAgICBlbHNlIGlmICh2YWwxLlN0clZhbCA9PSBudWxsKVxyXG4gICAgICAgICAgc3VwZXIuU2V0TlVMTChyZXNWYWwsIHZhbDEuQXR0cik7XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICByZXNWYWwuU3RyVmFsID0gdGhpcy5fZXhwcmVzc2lvbkxvY2FsSnBuLmV2YWxfb3BfemVucyh2YWwxLlN0clZhbCwgMCk7XHJcbiAgICAgICAgICBpZiAocmVzVmFsLlN0clZhbCA9PSBudWxsKVxyXG4gICAgICAgICAgICByZXNWYWwuU3RyVmFsID0gJyc7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9aRU5TOlxyXG4gICAgICAgIHZhbDIgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpOyAvLyBtb2RlXHJcbiAgICAgICAgdmFsMSA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7IC8vIHN0cmluZ1xyXG4gICAgICAgIHJlc1ZhbC5BdHRyID0gdmFsMS5BdHRyO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5fZXhwcmVzc2lvbkxvY2FsSnBuID09IG51bGwpXHJcbiAgICAgICAgICByZXNWYWwuU3RyVmFsID0gdmFsMS5TdHJWYWw7XHJcbiAgICAgICAgZWxzZSBpZiAodmFsMi5NZ051bVZhbCA9PSBudWxsIHx8IHZhbDEuU3RyVmFsID09IG51bGwpXHJcbiAgICAgICAgICBzdXBlci5TZXROVUxMKHJlc1ZhbCwgdmFsMS5BdHRyKTtcclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgIHJlc1ZhbC5TdHJWYWwgPSB0aGlzLl9leHByZXNzaW9uTG9jYWxKcG4uZXZhbF9vcF96ZW5zKHZhbDEuU3RyVmFsLCB2YWwyLk1nTnVtVmFsLk5VTV8yX0xPTkcoKSk7XHJcbiAgICAgICAgICBpZiAocmVzVmFsLlN0clZhbCA9PSBudWxsKVxyXG4gICAgICAgICAgICByZXNWYWwuU3RyVmFsID0gJyc7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9aSU1FUkVBRDpcclxuICAgICAgICB2YWwxID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTtcclxuICAgICAgICByZXNWYWwuQXR0ciA9IFN0b3JhZ2VBdHRyaWJ1dGUuQUxQSEE7XHJcbiAgICAgICAgaWYgKHRoaXMuX2V4cHJlc3Npb25Mb2NhbEpwbiA9PSBudWxsKVxyXG4gICAgICAgICAgcmVzVmFsLlN0clZhbCA9IHZhbDEuU3RyVmFsO1xyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgcmVzVmFsLlN0clZhbCA9IHRoaXMuX2V4cHJlc3Npb25Mb2NhbEpwbi5ldmFsX29wX3ppbWVyZWFkKHZhbDEuTWdOdW1WYWwuTlVNXzJfTE9ORygpKTtcclxuICAgICAgICAgIGlmIChyZXNWYWwuU3RyVmFsID09IG51bGwpXHJcbiAgICAgICAgICAgIHJlc1ZhbC5TdHJWYWwgPSAnJztcclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX1pLQU5BOlxyXG4gICAgICAgIHZhbDIgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpOyAvLyBtb2RlXHJcbiAgICAgICAgdmFsMSA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7IC8vIHN0cmluZ1xyXG4gICAgICAgIHJlc1ZhbC5BdHRyID0gdmFsMS5BdHRyO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5fZXhwcmVzc2lvbkxvY2FsSnBuID09IG51bGwpXHJcbiAgICAgICAgICByZXNWYWwuU3RyVmFsID0gdmFsMS5TdHJWYWw7XHJcbiAgICAgICAgZWxzZSBpZiAodmFsMi5NZ051bVZhbCA9PSBudWxsIHx8IHZhbDEuU3RyVmFsID09IG51bGwpXHJcbiAgICAgICAgICBzdXBlci5TZXROVUxMKHJlc1ZhbCwgdmFsMS5BdHRyKTtcclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgIHJlc1ZhbC5TdHJWYWwgPSB0aGlzLl9leHByZXNzaW9uTG9jYWxKcG4uZXZhbF9vcF96a2FuYSh2YWwxLlN0clZhbCwgdmFsMi5NZ051bVZhbC5OVU1fMl9MT05HKCkpO1xyXG4gICAgICAgICAgaWYgKHJlc1ZhbC5TdHJWYWwgPT0gbnVsbClcclxuICAgICAgICAgICAgcmVzVmFsLlN0clZhbCA9ICcnO1xyXG4gICAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfR09UT19DVFJMOlxyXG4gICAgICAgIHZhbDMgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpO1xyXG4gICAgICAgIHZhbDIgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpO1xyXG4gICAgICAgIHZhbDEgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpO1xyXG4gICAgICAgIHRoaXMuZXZhbF9vcF9nb3RvQ3RybCh2YWwxLCB2YWwyLCB2YWwzLCByZXNWYWwpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9UUkFOU0xBVEU6XHJcbiAgICAgICAgdmFsMSA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7XHJcbiAgICAgICAgdGhpcy5ldmFsX29wX3RyYW5zbGF0ZSh2YWwxLCByZXNWYWwpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9BU1RSOlxyXG4gICAgICAgIHZhbDIgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpO1xyXG4gICAgICAgIHZhbDEgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpO1xyXG4gICAgICAgIHRoaXMuZXZhbF9vcF9hc3RyKHZhbDEsIHZhbDIsIHJlc1ZhbCk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9MT09QQ09VTlRFUjpcclxuICAgICAgICB0aGlzLkNvbnN0cnVjdE1hZ2ljTnVtKHJlc1ZhbCwgKDxUYXNrQmFzZT50aGlzLkV4cFRhc2spLmdldExvb3BDb3VudGVyKCksIFN0b3JhZ2VBdHRyaWJ1dGUuTlVNRVJJQyk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX1ZFQ0NFTExBVFRSOlxyXG4gICAgICAgIHZhbDEgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpO1xyXG4gICAgICAgIEV4cHJlc3Npb25FdmFsdWF0b3IuZXZhbF9vcF92ZWNDZWxsQXR0cih2YWwxLCByZXNWYWwpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9WRUNHRVQ6XHJcbiAgICAgICAgdmFsMiA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7IC8vIHRoZSBjZWxsIGluZGV4XHJcbiAgICAgICAgdmFsMSA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7IC8vIHRoZSB2ZWN0b3Igbm90IGEgJ3ZhcicgbGl0ZXJhbFxyXG4gICAgICAgIHRoaXMuZXZhbF9vcF92ZWNHZXQodmFsMSwgdmFsMiwgcmVzVmFsKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfVkVDU0VUOlxyXG4gICAgICAgIHZhbDMgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpOyAvLyB0aGUgbmV3IHZhbHVlIG9mIHRoZSBjZWxsXHJcbiAgICAgICAgdmFsMiA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7IC8vIHRoZSBjZWxscyBpbmRleCB0byBiZSBzZXRcclxuICAgICAgICB2YWwxID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTsgLy8gYSAndmFyJyBsaXRlcmFsIHJlcHJlc2VudGluZyB0aGUgdmVjdG9yXHJcbiAgICAgICAgYXdhaXQgdGhpcy5ldmFsX29wX3ZlY1NldCh2YWwxLCB2YWwyLCB2YWwzLCByZXNWYWwpO1xyXG4gICAgICAgIHJlc1ZhbC5Jc051bGwgPSBmYWxzZTtcclxuICAgICAgICBpZiAoZXhwU3RyVHJhY2tlci5pc051bGwoKSlcclxuICAgICAgICAgIGV4cFN0clRyYWNrZXIucmVzZXROdWxsUmVzdWx0KCk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX1ZFQ1NJWkU6XHJcbiAgICAgICAgdmFsMSA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7IC8vIHRoZSB2ZWN0b3Igbm90IGEgJ3ZhcicgbGl0ZXJhbFxyXG4gICAgICAgIHRoaXMuZXZhbF9vcF92ZWNTaXplKHZhbDEsIHJlc1ZhbCk7XHJcbiAgICAgICAgZXhwU3RyVHJhY2tlci5yZXNldE51bGxSZXN1bHQoKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfSU46XHJcbiAgICAgICAgbkFyZ3MgPSB2YWxTdGFjay5wb3AoKTtcclxuXHJcbiAgICAgICAgcmVzVmFsLkF0dHIgPSBTdG9yYWdlQXR0cmlidXRlLkJPT0xFQU47XHJcbiAgICAgICAgcmVzVmFsLkJvb2xWYWwgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgRXhwX3BhcmFtcyA9IG5ldyBBcnJheTxFeHBWYWw+KG5BcmdzKTtcclxuICAgICAgICBmb3IgKGogPSAwOyBqIDwgbkFyZ3M7IGorKylcclxuICAgICAgICAgIEV4cF9wYXJhbXNbbkFyZ3MgLSAxIC0gal0gPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpO1xyXG5cclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgZm9yIChqID0gMTsgaiA8IG5BcmdzOyBqKyspIHtcclxuICAgICAgICAgICAgaWYgKEV4cHJlc3Npb25FdmFsdWF0b3IudmFsX2NtcF9hbnkoRXhwX3BhcmFtc1swXSwgRXhwX3BhcmFtc1tqXSwgZmFsc2UpID09PSAwKSB7XHJcbiAgICAgICAgICAgICAgcmVzVmFsLkJvb2xWYWwgPSB0cnVlO1xyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBjYXRjaCAobnVsbFZhbHVlRXhjZXB0aW9uKSB7XHJcbiAgICAgICAgICBpZiAobnVsbFZhbHVlRXhjZXB0aW9uIGluc3RhbmNlb2YgTnVsbFZhbHVlRXhjZXB0aW9uKSB7XHJcbiAgICAgICAgICAgIHN1cGVyLlNldE5VTEwocmVzVmFsLCBTdG9yYWdlQXR0cmlidXRlLkJPT0xFQU4pO1xyXG4gICAgICAgICAgfSBlbHNlIHRocm93IG51bGxWYWx1ZUV4Y2VwdGlvbjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9JU0NPTVBPTkVOVDpcclxuICAgICAgICB0aGlzLmV2YWxfb3BfaXNjb21wb25lbnQocmVzVmFsKTtcclxuICAgICAgICBicmVhaztcclxuXHJcblxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX1VTRVJfREVGSU5FRF9GVU5DOlxyXG4gICAgICAgIG5BcmdzID0gdmFsU3RhY2sucG9wKCk7XHJcbiAgICAgICAgLyogbkFyZ3Mgc2hvdWxkIGF0bGVhc3QgYmUgMSAoZm9yIGhvbGRpbmcgdGhlIGZ1bmN0aW9uIG5hbWUpICovXHJcbiAgICAgICAgaWYgKG5BcmdzID4gMCkge1xyXG4gICAgICAgICAgbkFyZ3MtLTsgLy8gb25lIG9mIHRoZSBhcmd1bWVudHMgaXMgdGhlIG5hbWUgb2YgdGhlIGZ1bmN0aW9uIChpdCB3aWxsIGJlIHRoZSAxc3QgdmFsdWUpXHJcbiAgICAgICAgICBFeHBfcGFyYW1zID0gbmV3IEFycmF5PEV4cFZhbD4obkFyZ3MpO1xyXG4gICAgICAgICAgZm9yIChqID0gMDsgaiA8IG5BcmdzOyBqKyspXHJcbiAgICAgICAgICAgIEV4cF9wYXJhbXNbbkFyZ3MgLSAxIC0gal0gPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpO1xyXG5cclxuICAgICAgICAgIGxldCBmdW5jTmFtZTogc3RyaW5nID0gKDxFeHBWYWw+dmFsU3RhY2sucG9wKCkpLlN0clZhbDtcclxuICAgICAgICAgIGF3YWl0IHRoaXMuZXZhbF9vcF9FeGVjVXNlckRlZmluZWRGdW5jKGZ1bmNOYW1lLCBFeHBfcGFyYW1zLCByZXNWYWwsIGV4cGVjdGVkVHlwZSk7XHJcbiAgICAgICAgICBleHBTdHJUcmFja2VyLnJlc2V0TnVsbFJlc3VsdCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfVU5JQ09ERUFTQzpcclxuICAgICAgICAvLyBnZXQgYSB1bmljb2RlIHN0cmluZyBhbmQgcmV0dXJuIHRoZSB1bmljb2RlIG51bWVyaWMgY29kZSBvZiBpdHMgZmlyc3QgY2hhclxyXG4gICAgICAgIHZhbDEgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpO1xyXG4gICAgICAgIHJlc1ZhbC5BdHRyID0gU3RvcmFnZUF0dHJpYnV0ZS5OVU1FUklDO1xyXG4gICAgICAgIHJlc1ZhbC5Jc051bGwgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgaWYgKCF2YWwxLklzTnVsbCAmJiB2YWwxLlN0clZhbC5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICByZXNWYWwuTWdOdW1WYWwgPSBuZXcgTlVNX1RZUEUoKTtcclxuICAgICAgICAgIHJlc1ZhbC5NZ051bVZhbC5OVU1fNF9MT05HKHZhbDEuU3RyVmFsWzBdLmNoYXJDb2RlQXQoMCkpO1xyXG4gICAgICAgIH0gZWxzZVxyXG4gICAgICAgICAgcmVzVmFsLklzTnVsbCA9IHRydWU7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9QVUJMSUNOQU1FOlxyXG4gICAgICAgIHZhbDEgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpOyAvLyBHZW5lcmF0aW9uXHJcbiAgICAgICAgdGhpcy5ldmFsX29wX3B1YmxpY05hbWUocmVzVmFsLCB2YWwxKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfVEFTS0lEOlxyXG4gICAgICAgIHZhbDEgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpOyAvLyBHZW5lcmF0aW9uXHJcbiAgICAgICAgdGhpcy5ldmFsX29wX3Rhc2tJZChyZXNWYWwsIHZhbDEpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9EQlZJRVdTSVpFOlxyXG4gICAgICAgIHZhbDEgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpOyAvLyBHZW5lcmF0aW9uXHJcbiAgICAgICAgdGhpcy5ldmFsX29wX2Ridmlld3NpemUocmVzVmFsLCB2YWwxKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfREJWSUVXUk9XSURYOlxyXG4gICAgICAgIHZhbDEgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpOyAvLyBHZW5lcmF0aW9uXHJcbiAgICAgICAgdGhpcy5ldmFsX29wX2Ridmlld3Jvd2lkeChyZXNWYWwsIHZhbDEpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9QUk9KRUNURElSOlxyXG4gICAgICAgIHRoaXMuZXZhbF9vcF9wcm9qZWN0ZGlyKHJlc1ZhbCk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9NTFNfVFJBTlM6XHJcbiAgICAgICAgdmFsMSA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7IC8vIHRoZSBjb250cm9sIG5hbWVcclxuICAgICAgICB0aGlzLmV2YWxfb3BfTWxzVHJhbnMocmVzVmFsLCB2YWwxKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfU1RSX0JVSUxEOlxyXG4gICAgICAgIG5BcmdzID0gdmFsU3RhY2sucG9wKCk7XHJcbiAgICAgICAgdGhpcy5ldmFsX29wX1N0ckJ1aWxkKHZhbFN0YWNrLCByZXNWYWwsIG5BcmdzKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfU1RBVFVTQkFSU0VUVEVYVDpcclxuICAgICAgICB2YWwxID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTtcclxuICAgICAgICB0aGlzLmV2YWxfb3Bfc3RhdHVzYmFyX3NldF90ZXh0KHJlc1ZhbCwgdmFsMSk7XHJcbiAgICAgICAgZXhwU3RyVHJhY2tlci5yZXNldE51bGxSZXN1bHQoKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfU0VUX1RJVExFOlxyXG4gICAgICAgIHZhbDEgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpO1xyXG4gICAgICAgIHRoaXMuZXZhbF9vcF9zZXRfdGl0bGUocmVzVmFsLCB2YWwxKTtcclxuICAgICAgICBleHBTdHJUcmFja2VyLnJlc2V0TnVsbFJlc3VsdCgpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9JU19ST1dfRURJVElORzpcclxuICAgICAgICB2YWwxID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTtcclxuICAgICAgICB0aGlzLmV2YWxfb3BfaXNfcm93X2VkaXRpbmcocmVzVmFsLCB2YWwxKTtcclxuICAgICAgICBleHBTdHJUcmFja2VyLnJlc2V0TnVsbFJlc3VsdCgpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9HRVRQQVJBTTpcclxuICAgICAgICB2YWwxID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTsgLy8gcGFyYW1ldGVyIG5hbWVcclxuICAgICAgICB0aGlzLmV2YWxfb3BfZ2V0UGFyYW0ocmVzVmFsLCB2YWwxKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfU0VUUEFSQU06XHJcbiAgICAgICAgdmFsMiA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7IC8vIHBhcmFtZXRlciB2YWx1ZVxyXG4gICAgICAgIHZhbDEgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpOyAvLyBwYXJhbWV0ZXIgbmFtZVxyXG4gICAgICAgIHRoaXMuZXZhbF9vcF9zZXRQYXJhbShyZXNWYWwsIHZhbDEsIHZhbDIpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9JTklQVVQ6XHJcbiAgICAgICAgdmFsMiA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7IC8vIHBhcmFtZXRlciB2YWx1ZVxyXG4gICAgICAgIHZhbDEgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpOyAvLyBwYXJhbWV0ZXIgbmFtZVxyXG4gICAgICAgIGF3YWl0IHRoaXMuZXZhbF9vcF9pbmlwdXQocmVzVmFsLCB2YWwxLCB2YWwyKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfSU5JR0VUOlxyXG4gICAgICAgIHZhbDEgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpOyAvLyBwYXJhbWV0ZXIgbmFtZVxyXG4gICAgICAgIHRoaXMuZXZhbF9vcF9pbmlnZXQocmVzVmFsLCB2YWwxKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfSU5JR0VUTE46XHJcbiAgICAgICAgdmFsMiA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7IC8vIHBhcmFtZXRlciBudW1iZXJcclxuICAgICAgICB2YWwxID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTsgLy8gc2VjdGlvbiBuYW1lXHJcbiAgICAgICAgdGhpcy5ldmFsX29wX2luaWdldGxuKHJlc1ZhbCwgdmFsMSwgdmFsMik7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX0VYUENBTEM6XHJcbiAgICAgICAgdmFsMSA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7IC8vIEVYUFxyXG4gICAgICAgIGF3YWl0IHRoaXMuZXZhbF9vcF9leHBjYWxjKHJlc1ZhbCwgdmFsMSk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX1RBU0tUWVBFOlxyXG4gICAgICAgIHZhbDEgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpOyAvLyBHZW5lcmF0aW9uXHJcbiAgICAgICAgdGhpcy5ldmFsX29wX3Rhc2tUeXBlKHJlc1ZhbCwgdmFsMSk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX1JBTkdFX0FERDpcclxuICAgICAgICBuQXJncyA9IHZhbFN0YWNrLnBvcCgpO1xyXG5cclxuICAgICAgICBpZiAobkFyZ3MgPiAwKSB7XHJcbiAgICAgICAgICBFeHBfcGFyYW1zID0gbmV3IEFycmF5PEV4cFZhbD4obkFyZ3MpO1xyXG4gICAgICAgICAgZm9yIChqID0gMDsgaiA8IG5BcmdzOyBqKyspXHJcbiAgICAgICAgICAgIEV4cF9wYXJhbXNbbkFyZ3MgLSAxIC0gal0gPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpO1xyXG5cclxuICAgICAgICAgIGF3YWl0IHRoaXMuZXZhbF9vcF9yYW5nZV9hZGQocmVzVmFsLCBFeHBfcGFyYW1zKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX1JBTkdFX1JFU0VUOlxyXG4gICAgICAgIHZhbDEgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpOyAvLyBnZW5lcmF0aW9uXHJcbiAgICAgICAgYXdhaXQgdGhpcy5ldmFsX29wX3JhbmdlX3Jlc2V0KHJlc1ZhbCwgdmFsMSk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX0xPQ0FURV9BREQ6XHJcbiAgICAgICAgbkFyZ3MgPSB2YWxTdGFjay5wb3AoKTtcclxuICAgICAgICBpZiAobkFyZ3MgPiAwKSB7XHJcbiAgICAgICAgICBFeHBfcGFyYW1zID0gbmV3IEFycmF5PEV4cFZhbD4obkFyZ3MpO1xyXG4gICAgICAgICAgZm9yIChqID0gMDsgaiA8IG5BcmdzOyBqKyspXHJcbiAgICAgICAgICAgIEV4cF9wYXJhbXNbbkFyZ3MgLSAxIC0gal0gPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpO1xyXG5cclxuICAgICAgICAgIGF3YWl0IHRoaXMuZXZhbF9vcF9sb2NhdGVfYWRkKHJlc1ZhbCwgRXhwX3BhcmFtcyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9MT0NBVEVfUkVTRVQ6XHJcbiAgICAgICAgdmFsMSA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7IC8vIGdlbmVyYXRpb25cclxuICAgICAgICBhd2FpdCB0aGlzLmV2YWxfb3BfbG9jYXRlX3Jlc2V0KHJlc1ZhbCwgdmFsMSk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX1NPUlRfQUREOlxyXG4gICAgICAgIHZhbDIgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpOyAvLyBkaXJcclxuICAgICAgICB2YWwxID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTsgLy8gdmFybnVtXHJcbiAgICAgICAgYXdhaXQgdGhpcy5ldmFsX29wX3NvcnRfYWRkKHJlc1ZhbCwgdmFsMSwgdmFsMik7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX1NPUlRfUkVTRVQ6XHJcbiAgICAgICAgdmFsMSA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7IC8vIGdlbmVyYXRpb25cclxuICAgICAgICBhd2FpdCB0aGlzLmV2YWxfb3Bfc29ydF9yZXNldChyZXNWYWwsIHZhbDEpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9UU0tfSU5TVEFOQ0U6XHJcbiAgICAgICAgdmFsMSA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7IC8vIGdlbmVyYXRpb25cclxuICAgICAgICB0aGlzLmV2YWxfb3BfdHNrX2luc3RhbmNlKHJlc1ZhbCwgdmFsMSk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9URVJNOlxyXG4gICAgICAgIHRoaXMuZXZhbF9vcF90ZXJtaW5hbChyZXNWYWwpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9GT1JNU1RBVEVDTEVBUjpcclxuICAgICAgICB2YWwxID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTsgLy8gZm9ybU5hbWVcclxuICAgICAgICB0aGlzLmV2YWxfb3BfZm9ybVN0YXRlQ2xlYXIodmFsMSwgcmVzVmFsKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfQ0xJRU5UU0VTU0lPTl9TRVQ6XHJcbiAgICAgICAgdmFsMiA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7XHJcbiAgICAgICAgdmFsMSA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7XHJcblxyXG4gICAgICAgIHRoaXMuZXZhbF9vcF9DbGllbnRTZXNzaW9uU2V0KHZhbDEsIHZhbDIsIHJlc1ZhbCk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX0NORF9SQU5HRTpcclxuICAgICAgICB2YWwyID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTsgLy8gcmFuZ2UgdG8gYmUgdXNlZFxyXG4gICAgICAgIHZhbDEgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpOyAvLyBjb25kaXRpb24gdG8gdXNlIHJhbmdlXHJcblxyXG4gICAgICAgIHRoaXMuZXZhbF9vcF9DbmRSYW5nZShyZXNWYWwsIHZhbDEsIHZhbDIpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9DT05UUk9MX1NFTEVDVF9QUk9HUkFNOlxyXG4gICAgICAgIHZhbDEgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpO1xyXG4gICAgICAgIGF3YWl0IHRoaXMuZXZhbF9vcF9jb250cm9sX3NlbGVjdF9wcm9ncmFtKHZhbDEsIHJlc1ZhbCk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX0NBTExKUzpcclxuICAgICAgICBuQXJncyA9IDxudW1iZXI+dmFsU3RhY2sucG9wKCk7XHJcbiAgICAgICAgaWYgKG5BcmdzID4gMCkge1xyXG4gICAgICAgICAgbkFyZ3MtLTsgLy8gZmlyc3QgYXJndW1lbnQgaXMgbmFtZSBvZiBqYXZhc2NyaXB0IG1ldGhvZFxyXG5cclxuICAgICAgICAgIC8vIGdldCB0aGUgcGFyYW1ldGVyc1xyXG4gICAgICAgICAgRXhwX3BhcmFtcyA9IG5ldyBBcnJheShuQXJncyk7XHJcbiAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgbkFyZ3M7IGorKylcclxuICAgICAgICAgICAgRXhwX3BhcmFtc1tuQXJncyAtIDEgLSBqXSA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7XHJcblxyXG4gICAgICAgICAgdGhpcy5ldmFsX29wX0NhbGxKUyh0aGlzLkV4cFRhc2ssICg8RXhwVmFsPnZhbFN0YWNrLnBvcCgpKS5TdHJWYWwsIEV4cF9wYXJhbXMsIHJlc1ZhbCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9TRVRfQ09PS0lFOlxyXG4gICAgICAgIG5BcmdzID0gPG51bWJlcj52YWxTdGFjay5wb3AoKTtcclxuICAgICAgICBpZiAobkFyZ3MgPiAwKSB7XHJcbiAgICAgICAgICBuQXJncy0tOyAvLyBmaXJzdCBhcmd1bWVudCBpcyBuYW1lIG9mIGphdmFzY3JpcHQgbWV0aG9kXHJcblxyXG4gICAgICAgICAgLy8gZ2V0IHRoZSBwYXJhbWV0ZXJzXHJcbiAgICAgICAgICBFeHBfcGFyYW1zID0gbmV3IEFycmF5KG5BcmdzKTtcclxuICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBuQXJnczsgaisrKVxyXG4gICAgICAgICAgICBFeHBfcGFyYW1zW25BcmdzIC0gMSAtIGpdID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTtcclxuXHJcbiAgICAgICAgICB0aGlzLmV2YWxfb3Bfc2V0X2Nvb2tpZSgoPEV4cFZhbD52YWxTdGFjay5wb3AoKSkuU3RyVmFsLCBFeHBfcGFyYW1zLCByZXNWYWwpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfR0VUX0NPT0tJRTpcclxuICAgICAgICByZXNWYWwuQXR0ciA9IFN0b3JhZ2VBdHRyaWJ1dGUuQUxQSEE7XHJcbiAgICAgICAgcmVzVmFsLklzTnVsbCA9IGZhbHNlO1xyXG4gICAgICAgICB0aGlzLmV2YWxfb3BfZ2V0X2Nvb2tpZSgoPEV4cFZhbD52YWxTdGFjay5wb3AoKSkuU3RyVmFsLCByZXNWYWwpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9ERUxFVEVfQ09PS0lFOlxyXG4gICAgICAgIHJlc1ZhbC5BdHRyID0gU3RvcmFnZUF0dHJpYnV0ZS5CT09MRUFOO1xyXG4gICAgICAgIHJlc1ZhbC5Jc051bGwgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmV2YWxfb3BfZGVsZXRlX2Nvb2tpZSgoPEV4cFZhbD52YWxTdGFjay5wb3AoKSkuU3RyVmFsLCByZXNWYWwpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBpZiAoYWRkUmVzdWx0KSB7XHJcbiAgICAgIHRoaXMuQ29udmVydEV4cFZhbChyZXNWYWwsIGV4cGVjdGVkVHlwZSk7XHJcbiAgICAgIHZhbFN0YWNrLnB1c2gocmVzVmFsKTtcclxuICAgICAgLyogY2hlY2sgaWYgd2UgbXVzdCBudWxsaWZ5IHJlc3VsdCwgYmVjYXVzZSBvbmUgb2YgdGhlIG1lbWJlcnMgb2YgdGhlIGV4cHJlc3Npb24gaXMgTlVMTFxyXG4gICAgICAgKi9cclxuICAgICAgaWYgKHJlc1ZhbC5Jc051bGwpXHJcbiAgICAgICAgZXhwU3RyVHJhY2tlci5zZXROdWxsUmVzdWx0KCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vIFNldHMgdGhlIGNsaWVudCBzZXNzaW9uIHdpdGggS2V5LCBWYWx1ZSBwYWlyIHByb3ZpZGVkLlxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwidmFsMVwiPjwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwidmFsMlwiPjwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwicmVzVmFsXCI+PC9wYXJhbT5cclxuICBwcml2YXRlIGV2YWxfb3BfQ2xpZW50U2Vzc2lvblNldCh2YWwxOiBFeHBWYWwsIHZhbDI6IEV4cFZhbCwgcmVzVmFsOiBFeHBWYWwpOiB2b2lkIHtcclxuICAgIHJlc1ZhbC5Cb29sVmFsID0gZmFsc2U7XHJcbiAgICByZXNWYWwuQXR0ciA9IFN0b3JhZ2VBdHRyaWJ1dGUuQk9PTEVBTjtcclxuXHJcbiAgICBpZiAoIXZhbDEuaXNFbXB0eVN0cmluZygpKSB7XHJcbiAgICAgIHN3aXRjaCAodmFsMS5TdHJWYWwpIHtcclxuICAgICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLkVOQUJMRV9DT01NVU5JQ0FUSU9OX0RJQUxPR1M6XHJcbiAgICAgICAgICBpZiAodmFsMi5BdHRyID09PSBTdG9yYWdlQXR0cmlidXRlLkJPT0xFQU4pIHtcclxuICAgICAgICAgICAgcmVzVmFsLkJvb2xWYWwgPSB0cnVlO1xyXG4gICAgICAgICAgfSBlbHNlXHJcbiAgICAgICAgICAgIExvZ2dlci5JbnN0YW5jZS5Xcml0ZUV4Y2VwdGlvblRvTG9nV2l0aE1zZygnSW52YWxpZCBhdHRyaWJ1dGUgZm9yICcgKyBDb25zdEludGVyZmFjZS5FTkFCTEVfQ09NTVVOSUNBVElPTl9ESUFMT0dTICsgJyBrZXkgaW4gQ2xpZW50U2Vzc2lvblNldCgpJyk7XHJcbiAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgIExvZ2dlci5JbnN0YW5jZS5Xcml0ZUV4Y2VwdGlvblRvTG9nV2l0aE1zZygnSW52YWxpZCBLZXkgaW4gQ2xpZW50U2Vzc2lvblNldCgpJyk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIEV4ZWN1dGUgdGhlIGV4cHJlc3Npb24gaXRzZWxmXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImV4cFN0clRyYWNrZXJcIj50aGUgZXhwcmVzc2lvbjwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJ2YWxTdGFja1wiPnN0YWNrIG9mIHZhbHVlcyB0byB1c2Ugd2hpbGUgZXhlY3V0aW5nIHRoZSBleHByZXNzaW9uPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImV4cGVjdGVkVHlwZVwiPjwvcGFyYW0+XHJcbiAgcHJpdmF0ZSBhc3luYyBleGVjRXhwcmVzc2lvbihleHBTdHJUcmFja2VyOiBFeHBTdHJUcmFja2VyLCB2YWxTdGFjazogU3RhY2s8YW55PiwgZXhwZWN0ZWRUeXBlOiBTdG9yYWdlQXR0cmlidXRlKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBsZXQgZXhwVmFsOiBFeHBWYWw7XHJcbiAgICBsZXQgaTogbnVtYmVyO1xyXG4gICAgbGV0IGFkZGVkT3BlcnM6IExpc3Q8RHluYW1pY09wZXJhdGlvbj4gPSBuZXcgTGlzdDxEeW5hbWljT3BlcmF0aW9uPigpO1xyXG4gICAgbGV0IGR5bk9wZXI6IER5bmFtaWNPcGVyYXRpb247XHJcblxyXG4gICAgbGV0IG9wQ29kZTogbnVtYmVyID0gZXhwU3RyVHJhY2tlci5nZXRPcENvZGUoKTtcclxuXHJcbiAgICAvLyBpZiBhIGJhc2ljIGRhdGEgaXRlbSwganVzdCBnZXQgaXQgYW5kIHB1c2ggaXQgdG8gdGhlIHN0YWNrXHJcbiAgICBpZiAoRXhwcmVzc2lvbkV2YWx1YXRvci5pc0Jhc2ljSXRlbShvcENvZGUpKSB7XHJcbiAgICAgIGV4cFZhbCA9IHRoaXMuZ2V0RXhwQmFzaWNWYWx1ZShleHBTdHJUcmFja2VyLCBvcENvZGUpO1xyXG5cclxuICAgICAgdGhpcy5Db252ZXJ0RXhwVmFsKGV4cFZhbCwgZXhwZWN0ZWRUeXBlKTtcclxuICAgICAgdmFsU3RhY2sucHVzaChleHBWYWwpO1xyXG4gICAgICAvKiBjaGVjayBpZiB3ZSBtdXN0IG51bGxpZnkgcmVzdWx0LCBiZWNhdXNlIG9uZSBvZiB0aGUgbWVtYmVycyBvZiB0aGUgZXhwcmVzc2lvbiBpcyBOVUxMXHJcbiAgICAgICAqL1xyXG4gICAgICBpZiAoZXhwVmFsLklzTnVsbClcclxuICAgICAgICBleHBTdHJUcmFja2VyLnNldE51bGxSZXN1bHQoKTtcclxuXHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgZXhwRGVzYzogRXhwRGVzYyA9IEV4cHJlc3Npb25EaWN0LmV4cERlc2Nbb3BDb2RlXTtcclxuXHJcbiAgICAvLyBOdWxsIHJlc3VsdCBvZiBhIGZ1bmN0aW9uIGRlcGVuZHMgb25seSBvbiByZXR1cm4gdmFsdWUgaXRzIHBhcmFtZXRlcnNcclxuICAgIC8vIEl0IGRvZXNuJ3QgZGVwZW5kIG9uIHdoZXRoZXIgYW55IHBhcmFtZXRlciBpbiB0aGUgd2hvbGUgZXhwcmVzc2lvbiBpcyBOVUxMXHJcbiAgICAvLyBGb3IgZXhhbXBsZSBpbiBJRiAoVmVjU2V0ICgnQSdWYXIsIDEsIE5VTEwoKSksIEEsIEIpXHJcbiAgICAvLyBJRiBzaG91bGQgbm90IHJldHVybiBOVUxMIGJlY2F1c2UgVmVjU2V0IGhhcyBhIE5VTEwgcGFyYW1ldGVyIGJ1dCBpdCBzaG91bGRcclxuICAgIC8vIHJldHVybiBOVUxMIGlmIGVpdGhlciBvZiB0aGUgcGFyYW1ldGVycyAoVmVjU2V0LCBBIG9yIEIpIGlzIE5VTExcclxuICAgIGxldCBudWxsQXJnczogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgaWYgKGV4cERlc2MuQXJnRXZhbENvdW50XyA+IDApIHtcclxuICAgICAgZm9yIChpID0gMDsgaSA8IGV4cERlc2MuQXJnRXZhbENvdW50XzsgaSsrKSB7XHJcbiAgICAgICAgZXhwU3RyVHJhY2tlci5yZXNldE51bGxSZXN1bHQoKTtcclxuICAgICAgICBhd2FpdCB0aGlzLmV4ZWNFeHByZXNzaW9uKGV4cFN0clRyYWNrZXIsIHZhbFN0YWNrLCA8U3RvcmFnZUF0dHJpYnV0ZT5leHBEZXNjLkFyZ0F0dHJfW2ldKTtcclxuICAgICAgICBpZiAoZXhwU3RyVHJhY2tlci5pc051bGwoKSlcclxuICAgICAgICAgIG51bGxBcmdzID0gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmIChudWxsQXJncylcclxuICAgICAgZXhwU3RyVHJhY2tlci5zZXROdWxsUmVzdWx0KCk7XHJcblxyXG4gICAgLy8gZXhlY3V0ZSB0aGUgY3VycmVudCBvcGVyYXRvclxyXG4gICAgYXdhaXQgdGhpcy5leGVjT3BlcmF0aW9uKG9wQ29kZSwgZXhwU3RyVHJhY2tlciwgdmFsU3RhY2ssIGFkZGVkT3BlcnMsIGV4cGVjdGVkVHlwZSk7XHJcblxyXG4gICAgLy8gaWYgdGhlcmUgYXJlIHNpZGUgZWZmZWN0IG9wZXJhdGlvbiwgZXhlY3V0ZSB0aGVtXHJcbiAgICBsZXQgbkR5bk9wZXJzOiBudW1iZXIgPSBhZGRlZE9wZXJzLmxlbmd0aDtcclxuICAgIGlmIChuRHluT3BlcnMgPiAwKSB7XHJcbiAgICAgIGZvciAoaSA9IDA7IGkgPCBuRHluT3BlcnM7IGkrKykge1xyXG4gICAgICAgIGR5bk9wZXIgPSBhZGRlZE9wZXJzLmdldF9JdGVtKDApO1xyXG4gICAgICAgIGFkZGVkT3BlcnMuUmVtb3ZlQXQoMCk7XHJcbiAgICAgICAgc3dpdGNoIChkeW5PcGVyLm9wQ29kZV8pIHtcclxuICAgICAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfSUdOT1JFOlxyXG4gICAgICAgICAgICBsZXQgajogbnVtYmVyO1xyXG4gICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgZHluT3Blci5hcmdDb3VudF87IGorKylcclxuICAgICAgICAgICAgICBleHBTdHJUcmFja2VyLnNraXBPcGVyYXRvcigpO1xyXG4gICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX0VWQUxYOlxyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLmV4ZWNFeHByZXNzaW9uKGV4cFN0clRyYWNrZXIsIHZhbFN0YWNrLCBleHBlY3RlZFR5cGUpO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gQ2FsY3VsYXRlIHRoZSB2YWx1ZSBvZiB0aGUgMXN0IENuZFJhbmdlIHBhcmFtZXRlciwgYW5kIHJldHVybiB0cnVlIGlmIHRoZSBDbmRSYW5nZSByZXN1bHQgc2hvdWxkIGJlIGRpc2NhcmRlZFxyXG4gIC8vLyBTaW1pbGFyIHRvIGV4ZWNFeHByZXNzaW9uLCBidXQgd29ya3Mgb25seSBvbiBDbmRSYW5nZSwgYW5kIHJldHVybnMgdGhlIHJlc3VsdCBvZiB0aGUgQ25kUmFuZ2UgMXN0IHBhcmFtZXRlclxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwiZXhwU3RyVHJhY2tlclwiPjwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwidmFsU3RhY2tcIj48L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cImV4cGVjdGVkVHlwZVwiPjwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPnRydWUgaWYgQ25kUmFuZ2UgZXZhbHVhdGVkIHRvIGZhbHNlIGFuZCB0aGUgcmFuZ2Ugc2hvdWxkIGJlIGRpc2NhcmRlZDwvcmV0dXJucz5cclxuICBwcml2YXRlIGFzeW5jIERpc2NhcmRDbmRSYW5nZUV4cHJlc3Npb24oZXhwU3RyVHJhY2tlcjogRXhwU3RyVHJhY2tlciwgdmFsU3RhY2s6IFN0YWNrPGFueT4pOiBQcm9taXNlPGJvb2xlYW4+IHtcclxuICAgIGxldCBleHBWYWw6IEV4cFZhbDtcclxuICAgIGxldCBhZGRlZE9wZXJzOiBMaXN0PER5bmFtaWNPcGVyYXRpb24+ID0gbmV3IExpc3Q8RHluYW1pY09wZXJhdGlvbj4oKTtcclxuXHJcbiAgICBsZXQgb3BDb2RlOiBudW1iZXIgPSBleHBTdHJUcmFja2VyLmdldE9wQ29kZSgpO1xyXG5cclxuICAgIC8vIGlmIGEgYmFzaWMgZGF0YSBpdGVtLCBqdXN0IGdldCBpdCBhbmQgcHVzaCBpdCB0byB0aGUgc3RhY2tcclxuICAgIGlmIChvcENvZGUgIT09IEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX0NORF9SQU5HRSkge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IGV4cERlc2M6IEV4cERlc2MgPSBFeHByZXNzaW9uRGljdC5leHBEZXNjW29wQ29kZV07XHJcblxyXG4gICAgYXdhaXQgdGhpcy5leGVjRXhwcmVzc2lvbihleHBTdHJUcmFja2VyLCB2YWxTdGFjaywgPFN0b3JhZ2VBdHRyaWJ1dGU+ZXhwRGVzYy5BcmdBdHRyX1swXSk7XHJcblxyXG4gICAgZXhwVmFsID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTtcclxuICAgIHJldHVybiBleHBWYWwuQXR0ciA9PT0gU3RvcmFnZUF0dHJpYnV0ZS5CT09MRUFOICYmICFleHBWYWwuQm9vbFZhbDtcclxuICB9XHJcblxyXG4gIHN0YXRpYyB2YWxfY21wX2FueSh2YWwxOiBFeHBWYWwsIHZhbDI6IEV4cFZhbCwgZm9yY2VDb21wYXJlcjogYm9vbGVhbik6IG51bWJlciB7XHJcbiAgICBsZXQgcmV0dmFsOiBudW1iZXIgPSAwO1xyXG4gICAgbGV0IGF0dHIxOiBTdG9yYWdlQXR0cmlidXRlID0gdmFsMS5BdHRyO1xyXG4gICAgbGV0IGF0dHIyOiBTdG9yYWdlQXR0cmlidXRlID0gdmFsMi5BdHRyO1xyXG4gICAgbGV0IGV4cFZhbDogRXhwcmVzc2lvbkV2YWx1YXRvciA9IG5ldyBFeHByZXNzaW9uRXZhbHVhdG9yKCk7XHJcblxyXG4gICAgaWYgKHZhbDEuSXNOdWxsICYmIHZhbDIuSXNOdWxsKVxyXG4gICAgICByZXR1cm4gMDtcclxuXHJcbiAgICBpZiAodmFsMS5Jc051bGwgfHwgdmFsMi5Jc051bGwpXHJcbiAgICAgIHRocm93IG5ldyBOdWxsVmFsdWVFeGNlcHRpb24oYXR0cjEpO1xyXG5cclxuICAgIGlmIChTdG9yYWdlQXR0cmlidXRlQ2hlY2suaXNUeXBlQmxvYihhdHRyMSkpIHtcclxuICAgICAgaWYgKHZhbDEuSW5jbHVkZUJsb2JQcmVmaXggJiYgQmxvYlR5cGUuZ2V0Q29udGVudFR5cGUodmFsMS5TdHJWYWwpID09PSBCbG9iVHlwZS5DT05URU5UX1RZUEVfQklOQVJZKSB7XHJcbiAgICAgICAgdmFsMS5TdHJWYWwgPSBCbG9iVHlwZS5yZW1vdmVCbG9iUHJlZml4KHZhbDEuU3RyVmFsKTtcclxuICAgICAgICB2YWwxLkF0dHIgPSBTdG9yYWdlQXR0cmlidXRlLkFMUEhBO1xyXG4gICAgICAgIHZhbDEuSW5jbHVkZUJsb2JQcmVmaXggPSBmYWxzZTtcclxuICAgICAgfSBlbHNlXHJcbiAgICAgICAgZXhwVmFsLkNvbnZlcnRFeHBWYWwodmFsMSwgU3RvcmFnZUF0dHJpYnV0ZS5VTklDT0RFKTtcclxuICAgIH1cclxuICAgIGlmIChTdG9yYWdlQXR0cmlidXRlQ2hlY2suaXNUeXBlQmxvYihhdHRyMikpIHtcclxuICAgICAgaWYgKHZhbDIuSW5jbHVkZUJsb2JQcmVmaXggJiYgQmxvYlR5cGUuZ2V0Q29udGVudFR5cGUodmFsMi5TdHJWYWwpID09PSBCbG9iVHlwZS5DT05URU5UX1RZUEVfQklOQVJZKSB7XHJcbiAgICAgICAgdmFsMi5TdHJWYWwgPSBCbG9iVHlwZS5yZW1vdmVCbG9iUHJlZml4KHZhbDIuU3RyVmFsKTtcclxuICAgICAgICB2YWwyLkF0dHIgPSBTdG9yYWdlQXR0cmlidXRlLkFMUEhBO1xyXG4gICAgICAgIHZhbDIuSW5jbHVkZUJsb2JQcmVmaXggPSBmYWxzZTtcclxuICAgICAgfSBlbHNlXHJcbiAgICAgICAgZXhwVmFsLkNvbnZlcnRFeHBWYWwodmFsMiwgU3RvcmFnZUF0dHJpYnV0ZS5VTklDT0RFKTtcclxuICAgIH1cclxuXHJcbiAgICBhdHRyMSA9IHZhbDEuQXR0cjtcclxuICAgIGF0dHIyID0gdmFsMi5BdHRyO1xyXG5cclxuICAgIGlmIChhdHRyMSAhPT0gYXR0cjIpIHtcclxuICAgICAgaWYgKChTdG9yYWdlQXR0cmlidXRlQ2hlY2suaXNUeXBlTnVtZXJpYyhhdHRyMSkgJiYgU3RvcmFnZUF0dHJpYnV0ZUNoZWNrLmlzVHlwZU51bWVyaWMoYXR0cjIpKSB8fFxyXG4gICAgICAgIChTdG9yYWdlQXR0cmlidXRlQ2hlY2suSXNUeXBlQWxwaGFPclVuaWNvZGUoYXR0cjEpICYmIFN0b3JhZ2VBdHRyaWJ1dGVDaGVjay5Jc1R5cGVBbHBoYU9yVW5pY29kZShhdHRyMikpKSB7XHJcbiAgICAgICAgLyogRG8gbm90aGluZyA6IGl0J3MgT0sgdG8gY29tcGFyZSB0aGVzZSB0eXBlcyAqL1xyXG4gICAgICB9IGVsc2VcclxuICAgICAgICByZXR1cm4gMTtcclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gVGhpcyBjb2RlIHdhcyB0YWtlbiBmcm9tIFNUT1JBR0U6OmZsZF9jbXAgbWV0aG9kIGluIE1hZ2ljXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgc3dpdGNoIChhdHRyMSkge1xyXG4gICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuQUxQSEE6XHJcbiAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5CTE9COlxyXG4gICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuQkxPQl9WRUNUT1I6XHJcbiAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5VTklDT0RFOlxyXG4gICAgICAgIGlmICh2YWwxLlN0clZhbCA9PT0gbnVsbCAmJiB2YWwyLlN0clZhbCA9PT0gbnVsbClcclxuICAgICAgICAgIHJldHVybiAwO1xyXG5cclxuICAgICAgICBpZiAodmFsMS5TdHJWYWwgPT09IG51bGwgfHwgdmFsMi5TdHJWYWwgPT09IG51bGwpXHJcbiAgICAgICAgICB0aHJvdyBuZXcgTnVsbFZhbHVlRXhjZXB0aW9uKGF0dHIxKTtcclxuXHJcbiAgICAgICAgbGV0IHN0cjE6IHN0cmluZyA9IFN0clV0aWwucnRyaW0odmFsMS5TdHJWYWwpO1xyXG4gICAgICAgIGxldCBzdHIyOiBzdHJpbmcgPSBTdHJVdGlsLnJ0cmltKHZhbDIuU3RyVmFsKTtcclxuXHJcbiAgICAgICAgaWYgKEVudmlyb25tZW50Lkluc3RhbmNlLmdldFNwZWNpYWxBbnNpRXhwcmVzc2lvbigpIHx8XHJcbiAgICAgICAgICAoVXRpbFN0ckJ5dGVNb2RlLmlzTG9jYWxlRGVmTGFuZ0RCQ1MoKSAmJlxyXG4gICAgICAgICAgICBhdHRyMSA9PT0gU3RvcmFnZUF0dHJpYnV0ZS5BTFBIQSAmJiBhdHRyMiA9PT0gU3RvcmFnZUF0dHJpYnV0ZS5BTFBIQSkpXHJcbiAgICAgICAgICByZXR2YWwgPSBVdGlsU3RyQnl0ZU1vZGUuc3RyY21wKHN0cjEsIHN0cjIpO1xyXG4gICAgICAgIGVsc2VcclxuICAgICAgICAgIHJldHZhbCA9IE5TdHJpbmcuQ29tcGFyZU9yZGluYWwoc3RyMSwgc3RyMik7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG5cclxuICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLk5VTUVSSUM6XHJcbiAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5EQVRFOlxyXG4gICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuVElNRTpcclxuICAgICAgICBpZiAodmFsMS5NZ051bVZhbCA9PT0gbnVsbCAmJiB2YWwyLk1nTnVtVmFsID09PSBudWxsKVxyXG4gICAgICAgICAgcmV0dXJuIDA7XHJcblxyXG4gICAgICAgIGlmICh2YWwxLk1nTnVtVmFsID09PSBudWxsIHx8IHZhbDIuTWdOdW1WYWwgPT09IG51bGwpXHJcbiAgICAgICAgICB0aHJvdyBuZXcgTnVsbFZhbHVlRXhjZXB0aW9uKGF0dHIxKTtcclxuICAgICAgICByZXR2YWwgPSBOVU1fVFlQRS5udW1fY21wKHZhbDEuTWdOdW1WYWwsIHZhbDIuTWdOdW1WYWwpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuXHJcbiAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5CT09MRUFOOlxyXG4gICAgICAgIHJldHZhbCA9ICh2YWwxLkJvb2xWYWwgPyAxIDogMCkgLSAodmFsMi5Cb29sVmFsID8gMSA6IDApO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgIH1cclxuICAgIHJldHVybiAocmV0dmFsKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBjYWxjdWxhdGUgdGhlIHJlc3VsdCBvZiB0aGUgZXhwcmVzc2lvblxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJleHBcIj5pcyBhIHJlZmVyZW5jZSB0byB0aGUgZXhwcmVzc2lvbiBzdHJpbmcgdG8gYmUgZXZhbHVhdGVkLiB0aGlzIHN0cmluZ1xyXG4gIC8vLyAgIGlzIGluIGFuIGV4cHJlc3Npb24gaW4gcG9saXNoIG5vdGF0aW9uIHdoZXJlIGV2ZXJ5IGJ5dGUgaXMgcmVwcmVzZW50ZWQgYnkgYVxyXG4gIC8vLyAgIDItZGlnaXQgaGV4IG51bWJlcjwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJleHBlY3RlZFR5cGVcIj5pcyB0aGUgZXhwZWN0ZWQgdHlwZSBvZiB0aGUgZXhwcmVzc2lvbi4gd2hlbiB0aGUgZXhwcmVzc2lvbnMgdHlwZSBkb2VzXHJcbiAgLy8vICAgbm90IG1hdGNoIHRoZSBleHBlY3RlZCB0eXBlIGFuIGV4Y2VwdGlvbiBzaG91bGQgYmUgdGhyb3duLiBhIHNwYWNlICgnICcpIGhlcmVcclxuICAvLy8gICBtZWFucyBhbnkgZXhwcmVzc2lvbi4gaXQgaXMgdXNlZCBmb3IgRXZhbHVhdGUgb3BlcmF0aW9uLjwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJ0YXNrXCI+aXMgYSByZWZlcmVuY2UgdG8gdGhlIHRhc2sgaW4gd2hpY2ggdGhlIGV4cHJlc3Npb24gaXMgZGVmaW5lZC4gaXQgaXNcclxuICAvLy8gICB1c2VkIGZvciBnZXR0aW5nIGEgcmVmZXJlbmNlIHRvIGZpZWxkcyBmb3IgZ2V0dGluZy9zZXR0aW5nIHRoZWlyIHZhbHVlczwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPiBTdHJpbmcgaXMgdGhlIHJlc3VsdCBvZiB0aGUgZXZhbHVhdGlvbjpcclxuICAvLy8gICAxLiBzdHJpbmcgdmFsdWUgd2lsbCBiZSBhIHN0cmluZ1xyXG4gIC8vLyAgIDIuIG51bWVyaWMsIGRhdGUsIHRpbWUgd2lsbCBiZSBhIE1hZ2ljIG51bWJlciBhcyBhIHN0cmluZyBvZiBoZXggZGlnaXRzXHJcbiAgLy8vICAgMy4gbG9naWNhbCB3aWxsIGJlIG9uZSBkaWdpdDogMCBmb3IgRkFMU0UsIDEgZm9yIFRSVUVcclxuICAvLy8gICA0LiBudWxsIHZhbHVlIGp1c3QgcmV0dXJuIG51bGwgKG5vdCBhbiBlbXB0eSBzdHJpbmchKTwvcmV0dXJucz5cclxuICBzdGF0aWMgYXN5bmMgZXZhbChleHA6IEludDhBcnJheSwgZXhwZWN0ZWRUeXBlOiBTdG9yYWdlQXR0cmlidXRlLCB0YXNrOiBUYXNrQmFzZSk6IFByb21pc2U8RXhwVmFsPiB7XHJcbiAgICBsZXQgcmVzOiBFeHBWYWwgPSBudWxsO1xyXG4gICAgbGV0IHZhbFN0YWNrOiBTdGFjazxFeHBWYWw+ID0gbmV3IFN0YWNrKCk7XHJcblxyXG4gICAgaWYgKGV4cCAhPT0gbnVsbCAmJiBleHAubGVuZ3RoID4gMCkge1xyXG4gICAgICBsZXQgbWU6IEV4cHJlc3Npb25FdmFsdWF0b3IgPSBuZXcgRXhwcmVzc2lvbkV2YWx1YXRvcigpO1xyXG4gICAgICBsZXQgZXhwU3RyVHJhY2tlcjogRXhwU3RyVHJhY2tlciA9IG5ldyBFeHBTdHJUcmFja2VyKGV4cCwgdGFzay5nZXROdWxsQXJpdGhtZXRpYygpID09PSBDb25zdGFudHMuTlVMTF9BUklUSF9OVUxMSUZZKTtcclxuICAgICAgbWUuRXhwVGFzayA9IHRhc2s7XHJcbiAgICAgIGF3YWl0IG1lLmV4ZWNFeHByZXNzaW9uKGV4cFN0clRyYWNrZXIsIHZhbFN0YWNrLCBleHBlY3RlZFR5cGUpO1xyXG4gICAgICByZXMgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpO1xyXG4gICAgICBpZiAoZXhwU3RyVHJhY2tlci5pc051bGwoKSlcclxuICAgICAgLy8gbnVsbCBhcml0aG1ldGljID09IG51bGxpZnkgYW5kIG9uZSBvZiB0aGUgbWVtYmVycyBvZiB0aGUgZXhwcmVzc2lvbiBpcyBudWxsLFxyXG4gICAgICAvLyBzbyB0aGUgcmVzdWx0IG11c3QgYmUgTlVMTFxyXG4gICAgICAgIHJlcy5Jc051bGwgPSB0cnVlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJlcztcclxuICB9XHJcblxyXG4gIHN0YXRpYyBhc3luYyBEaXNjYXJkQ25kUmFuZ2VSZXN1bHQoZXhwOiBJbnQ4QXJyYXksIHRhc2s6IFRhc2tCYXNlKTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICBsZXQgdmFsU3RhY2s6IFN0YWNrPEV4cFZhbD4gPSBuZXcgU3RhY2soKTtcclxuXHJcbiAgICBpZiAoZXhwICE9PSBudWxsICYmIGV4cC5sZW5ndGggPiAwKSB7XHJcbiAgICAgIGxldCBtZTogRXhwcmVzc2lvbkV2YWx1YXRvciA9IG5ldyBFeHByZXNzaW9uRXZhbHVhdG9yKCk7XHJcbiAgICAgIGxldCBleHBTdHJUcmFja2VyOiBFeHBTdHJUcmFja2VyID0gbmV3IEV4cFN0clRyYWNrZXIoZXhwLCB0YXNrLmdldE51bGxBcml0aG1ldGljKCkgPT09IENvbnN0YW50cy5OVUxMX0FSSVRIX05VTExJRlkpO1xyXG4gICAgICBtZS5FeHBUYXNrID0gdGFzaztcclxuICAgICAgcmV0dXJuIGF3YWl0IG1lLkRpc2NhcmRDbmRSYW5nZUV4cHJlc3Npb24oZXhwU3RyVHJhY2tlciwgdmFsU3RhY2spO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIENvbnZlcnQgYSBzdHJpbmcgdG8gYSBOdWxsIHRlcm1pbmF0ZWQgUGljXHJcbiAgLy8vICAgbWF4IGxlbmd0aCBvZiB0aGUgbWFzayBpcyAxMDAgY2hhcmFjdGVyc1xyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgcHJpdmF0ZSBzdGF0aWMgc2V0X2FfcGljKHZhbDogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIGxldCBsZW46IG51bWJlciA9IE1hdGgubWluKHZhbC5sZW5ndGgsIDk5KTtcclxuICAgIHJldHVybiBTdHJVdGlsLlpzdHJpbmdNYWtlKHZhbCwgbGVuKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBFdmFsdWF0ZSBSQU5HRSBtYWdpYyBmdW5jdGlvblxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgcHJpdmF0ZSBldmFsX29wX3JhbmdlKHZhbDE6IEV4cFZhbCwgdmFsMjogRXhwVmFsLCB2YWwzOiBFeHBWYWwsIHJlc1ZhbDogRXhwVmFsKTogdm9pZCB7XHJcbiAgICByZXNWYWwuQm9vbFZhbCA9IGZhbHNlO1xyXG4gICAgcmVzVmFsLkF0dHIgPSBTdG9yYWdlQXR0cmlidXRlLkJPT0xFQU47XHJcbiAgICB0cnkge1xyXG4gICAgICBpZiAoRXhwcmVzc2lvbkV2YWx1YXRvci52YWxfY21wX2FueSh2YWwxLCB2YWwyLCB0cnVlKSA+PSAwKSB7XHJcbiAgICAgICAgdmFsMiA9IHZhbDM7XHJcbiAgICAgICAgaWYgKEV4cHJlc3Npb25FdmFsdWF0b3IudmFsX2NtcF9hbnkodmFsMSwgdmFsMiwgdHJ1ZSkgPD0gMClcclxuICAgICAgICAgIHJlc1ZhbC5Cb29sVmFsID0gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgfSBjYXRjaCAoZXgpIHtcclxuICAgICAgaWYgKGV4IGluc3RhbmNlb2YgTnVsbFZhbHVlRXhjZXB0aW9uKSB7XHJcbiAgICAgICAgc3VwZXIuU2V0TlVMTChyZXNWYWwsIGV4LmdldEF0dHIoKSk7XHJcbiAgICAgIH0gZWxzZVxyXG4gICAgICAgIHRocm93IGV4O1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIEV2YWx1YXRlIFJFUCBtYWdpYyBmdW5jdGlvblxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgcHJpdmF0ZSBldmFsX29wX3JlcF8xKHJlc1ZhbDogRXhwVmFsLCB2YWwxOiBFeHBWYWwsIHZhbDI6IEV4cFZhbCwgdmFsMzogRXhwVmFsLCB2YWw0OiBFeHBWYWwpOiB2b2lkIHtcclxuICAgIGlmICh2YWwxLlN0clZhbCA9PT0gbnVsbCB8fCB2YWwyLlN0clZhbCA9PT0gbnVsbCB8fCB2YWwzLk1nTnVtVmFsID09PSBudWxsIHx8IHZhbDQuTWdOdW1WYWwgPT09IG51bGwpIHtcclxuICAgICAgc3VwZXIuU2V0TlVMTChyZXNWYWwsIFN0b3JhZ2VBdHRyaWJ1dGUuVU5JQ09ERSk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIEV4cHJlc3Npb25FdmFsdWF0b3IudmFsX3NfY3B5KHZhbDEsIHJlc1ZhbCk7XHJcbiAgICBsZXQgaTogbnVtYmVyID0gdmFsMy5NZ051bVZhbC5OVU1fMl9MT05HKCk7XHJcbiAgICBpZiAoaSA8IDEpXHJcbiAgICAgIGkgPSAxO1xyXG4gICAgbGV0IGo6IG51bWJlciA9IHZhbDQuTWdOdW1WYWwuTlVNXzJfTE9ORygpO1xyXG5cclxuICAgIGlmIChqID4gdmFsMi5TdHJWYWwubGVuZ3RoKVxyXG4gICAgICBqID0gdmFsMi5TdHJWYWwubGVuZ3RoO1xyXG5cclxuICAgIGlmIChpICsgaiAtIDEgPiByZXNWYWwuU3RyVmFsLmxlbmd0aClcclxuICAgICAgaiA9IHJlc1ZhbC5TdHJWYWwubGVuZ3RoIC0gaSArIDE7XHJcblxyXG4gICAgaWYgKChqIDw9IDApKVxyXG4gICAgICByZXR1cm47XHJcblxyXG4gICAgbGV0IHRtcF9zOiBzdHJpbmcgPSBTdHJVdGlsLm1lbWNweSgnJywgMCwgcmVzVmFsLlN0clZhbCwgaSArIGogLSAxLCByZXNWYWwuU3RyVmFsLmxlbmd0aCAtIGkgLSBqICsgMSk7XHJcblxyXG4gICAgcmVzVmFsLlN0clZhbCA9IFN0clV0aWwubWVtY3B5KHJlc1ZhbC5TdHJWYWwsIGkgLSAxLCB2YWwyLlN0clZhbCwgMCwgaik7XHJcbiAgICByZXNWYWwuU3RyVmFsID0gU3RyVXRpbC5tZW1jcHkocmVzVmFsLlN0clZhbCwgaSAtIDEgKyBqLCB0bXBfcywgMCwgcmVzVmFsLlN0clZhbC5sZW5ndGggLSBpIC0gaiArIDEpO1xyXG5cclxuICAgIC8qIGFkZCBibGFua3MgdG8gdGhlIGVuZCovXHJcbiAgICBpZiAoaiAtIHZhbDIuU3RyVmFsLmxlbmd0aCA+IDApXHJcbiAgICAgIHJlc1ZhbC5TdHJWYWwgPSBTdHJVdGlsLm1lbXNldChyZXNWYWwuU3RyVmFsLCBpICsgdmFsMi5TdHJWYWwubGVuZ3RoIC0gMSwgJyAnLCBqIC0gdmFsMi5TdHJWYWwubGVuZ3RoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc3RhdGljIHZhbF9zX2NweSh2YWw6IEV4cFZhbCwgcmVzVmFsOiBFeHBWYWwpOiB2b2lkIHtcclxuICAgIHJlc1ZhbC5BdHRyID0gdmFsLkF0dHI7XHJcbiAgICByZXNWYWwuU3RyVmFsID0gdmFsLlN0clZhbDtcclxuICAgIHJlc1ZhbC5Jc051bGwgPSB2YWwuSXNOdWxsO1xyXG4gICAgcmVzVmFsLkluY2x1ZGVCbG9iUHJlZml4ID0gdmFsLkluY2x1ZGVCbG9iUHJlZml4O1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB2YWxfY3B5KHZhbDogRXhwVmFsLCByZXNWYWw6IEV4cFZhbCk6IHZvaWQge1xyXG4gICAgc3dpdGNoICh2YWwuQXR0cikge1xyXG4gICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuQUxQSEE6XHJcbiAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5VTklDT0RFOlxyXG4gICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuQkxPQjpcclxuICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLkJMT0JfVkVDVE9SOlxyXG4gICAgICAgIEV4cHJlc3Npb25FdmFsdWF0b3IudmFsX3NfY3B5KHZhbCwgcmVzVmFsKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5OVU1FUklDOlxyXG4gICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuREFURTpcclxuICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLlRJTUU6XHJcbiAgICAgICAgaWYgKCF2YWwuSXNOdWxsKVxyXG4gICAgICAgICAgcmVzVmFsLk1nTnVtVmFsID0gbmV3IE5VTV9UWVBFKHZhbC5NZ051bVZhbCk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuQk9PTEVBTjpcclxuICAgICAgICByZXNWYWwuQm9vbFZhbCA9IHZhbC5Cb29sVmFsO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICBMb2dnZXIuSW5zdGFuY2UuV3JpdGVFeGNlcHRpb25Ub0xvZ1dpdGhNc2coJ0V4cHJlc3Npb24gRXZhbHVhdG9yLnZhbF9jcHkgbm8gc3VjaCB0eXBlIG9mIGF0dHJpYnV0ZSA6ICcgKyB2YWwuQXR0cik7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgICByZXNWYWwuQXR0ciA9IHZhbC5BdHRyO1xyXG4gICAgcmVzVmFsLklzTnVsbCA9IHZhbC5Jc051bGw7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgaW5zZXJ0IHN0cmluZyBpbnRvIGFub3RoZXIgc3RyaW5nLCBJTlMgbWFnaWMgZnVuY3Rpb25cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIHByaXZhdGUgZXZhbF9vcF9pbnMocmVzVmFsOiBFeHBWYWwsIHZhbDE6IEV4cFZhbCwgdmFsMjogRXhwVmFsLCB2YWwzOiBFeHBWYWwsIHZhbDQ6IEV4cFZhbCk6IHZvaWQge1xyXG4gICAgcmVzVmFsLkF0dHIgPSBTdG9yYWdlQXR0cmlidXRlLlVOSUNPREU7XHJcbiAgICBpZiAodmFsMS5TdHJWYWwgPT09IG51bGwgfHwgdmFsMi5TdHJWYWwgPT09IG51bGwgfHwgdmFsMy5NZ051bVZhbCA9PT0gbnVsbCB8fCB2YWw0Lk1nTnVtVmFsID09PSBudWxsKSB7XHJcbiAgICAgIHN1cGVyLlNldE5VTEwocmVzVmFsLCBTdG9yYWdlQXR0cmlidXRlLlVOSUNPREUpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBsZXQgaTogbnVtYmVyID0gdmFsMS5TdHJWYWwubGVuZ3RoO1xyXG5cclxuICAgIGxldCBpbnNfb2ZzOiBudW1iZXIgPSB2YWwzLk1nTnVtVmFsLk5VTV8yX0xPTkcoKSAtIDE7XHJcbiAgICBpbnNfb2ZzID0gTWF0aC5tYXgoaW5zX29mcywgMCk7XHJcbiAgICBpbnNfb2ZzID0gTWF0aC5taW4oaW5zX29mcywgaSk7XHJcblxyXG4gICAgbGV0IGluc19sZW46IG51bWJlciA9IHZhbDQuTWdOdW1WYWwuTlVNXzJfTE9ORygpO1xyXG4gICAgaW5zX2xlbiA9IE1hdGgubWF4KGluc19sZW4sIDApO1xyXG4gICAgaW5zX2xlbiA9IE1hdGgubWluKGluc19sZW4sIHZhbDIuU3RyVmFsLmxlbmd0aCk7XHJcblxyXG4gICAgcmVzVmFsLlN0clZhbCA9IFN0clV0aWwubWVtY3B5KCcnLCAwLCB2YWwxLlN0clZhbCwgMCwgaW5zX29mcyk7XHJcbiAgICByZXNWYWwuU3RyVmFsID0gU3RyVXRpbC5tZW1jcHkocmVzVmFsLlN0clZhbCwgaW5zX29mcywgdmFsMi5TdHJWYWwsIDAsIGluc19sZW4pO1xyXG4gICAgcmVzVmFsLlN0clZhbCA9IFN0clV0aWwubWVtY3B5KHJlc1ZhbC5TdHJWYWwsIGluc19vZnMgKyBpbnNfbGVuLCB2YWwxLlN0clZhbCwgaW5zX29mcywgaSAtIGluc19vZnMpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIERFTCBtYWdpYyBmdW5jdGlvblxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgcHJpdmF0ZSBldmFsX29wX2RlbChyZXNWYWw6IEV4cFZhbCwgdmFsMTogRXhwVmFsLCB2YWwyOiBFeHBWYWwsIHZhbDM6IEV4cFZhbCk6IHZvaWQge1xyXG4gICAgaWYgKHZhbDEuU3RyVmFsID09PSBudWxsIHx8IHZhbDIuTWdOdW1WYWwgPT09IG51bGwgfHwgdmFsMy5NZ051bVZhbCA9PT0gbnVsbCkge1xyXG4gICAgICBzdXBlci5TZXROVUxMKHJlc1ZhbCwgU3RvcmFnZUF0dHJpYnV0ZS5VTklDT0RFKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICBFeHByZXNzaW9uRXZhbHVhdG9yLnZhbF9zX2NweSh2YWwxLCByZXNWYWwpO1xyXG4gICAgbGV0IGk6IG51bWJlciA9IHZhbDIuTWdOdW1WYWwuTlVNXzJfTE9ORygpIC0gMTtcclxuICAgIGlmIChpIDwgMCkge1xyXG4gICAgICBpID0gMDtcclxuICAgIH1cclxuICAgIGlmIChpID4gcmVzVmFsLlN0clZhbC5sZW5ndGgpXHJcbiAgICAgIGkgPSByZXNWYWwuU3RyVmFsLmxlbmd0aDtcclxuICAgIGxldCBqOiBudW1iZXIgPSB2YWwzLk1nTnVtVmFsLk5VTV8yX0xPTkcoKTtcclxuICAgIGlmIChpICsgaiA+IHJlc1ZhbC5TdHJWYWwubGVuZ3RoKVxyXG4gICAgICBqID0gcmVzVmFsLlN0clZhbC5sZW5ndGggLSBpO1xyXG4gICAgaWYgKGogPD0gMClcclxuICAgICAgcmV0dXJuO1xyXG5cclxuICAgIHJlc1ZhbC5TdHJWYWwgPSBTdHJVdGlsLm1lbWNweShyZXNWYWwuU3RyVmFsLCBpLCByZXNWYWwuU3RyVmFsLCBpICsgaiwgcmVzVmFsLlN0clZhbC5sZW5ndGggLSBpKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBGTElQIG1hZ2ljIGZ1bmN0aW9uIChyZXZlcnNlKVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgcHJpdmF0ZSBldmFsX29wX2ZsaXAocmVzVmFsOiBFeHBWYWwsIHZhbDE6IEV4cFZhbCk6IHZvaWQge1xyXG4gICAgcmVzVmFsLkF0dHIgPSBTdG9yYWdlQXR0cmlidXRlLlVOSUNPREU7XHJcbiAgICBpZiAodmFsMS5TdHJWYWwgPT09IG51bGwpIHtcclxuICAgICAgc3VwZXIuU2V0TlVMTChyZXNWYWwsIFN0b3JhZ2VBdHRyaWJ1dGUuVU5JQ09ERSk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGxldCByZXZfc3RyID0gbmV3IFN0cmluZ0J1aWxkZXIodmFsMS5TdHJWYWwpO1xyXG4gICAgcmVzVmFsLlN0clZhbCA9IFN0clV0aWwuUmV2ZXJzZVN0cmluZyhyZXZfc3RyKS5Ub1N0cmluZygpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIFVQUEVSIG1hZ2ljIGZ1bmN0aW9uXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBwcml2YXRlIGV2YWxfb3BfdXBwZXIocmVzVmFsOiBFeHBWYWwsIHZhbDE6IEV4cFZhbCk6IHZvaWQge1xyXG4gICAgcmVzVmFsLkF0dHIgPSBTdG9yYWdlQXR0cmlidXRlLlVOSUNPREU7XHJcbiAgICBpZiAodmFsMS5TdHJWYWwgPT09IG51bGwpIHtcclxuICAgICAgc3VwZXIuU2V0TlVMTChyZXNWYWwsIFN0b3JhZ2VBdHRyaWJ1dGUuVU5JQ09ERSk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHJlc1ZhbC5TdHJWYWwgPSB2YWwxLlN0clZhbC50b1VwcGVyQ2FzZSgpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIExPV0VSIG1hZ2ljIGZ1bmN0aW9uXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBwcml2YXRlIGV2YWxfb3BfbG93ZXIocmVzVmFsOiBFeHBWYWwsIHZhbDE6IEV4cFZhbCk6IHZvaWQge1xyXG4gICAgcmVzVmFsLkF0dHIgPSBTdG9yYWdlQXR0cmlidXRlLlVOSUNPREU7XHJcbiAgICBpZiAodmFsMS5TdHJWYWwgPT0gbnVsbCkge1xyXG4gICAgICBzdXBlci5TZXROVUxMKHJlc1ZhbCwgU3RvcmFnZUF0dHJpYnV0ZS5VTklDT0RFKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgcmVzVmFsLlN0clZhbCA9IHZhbDEuU3RyVmFsLnRvTG93ZXJDYXNlKCk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgQ1JDIG1hZ2ljIGZ1bmN0aW9uXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBwcml2YXRlIGV2YWxfb3BfY3JjKHJlc1ZhbDogRXhwVmFsLCB2YWwxOiBFeHBWYWwsIHZhbDI6IEV4cFZhbCk6IHZvaWQge1xyXG4gICAgcmVzVmFsLkF0dHIgPSBTdG9yYWdlQXR0cmlidXRlLkFMUEhBO1xyXG4gICAgaWYgKHZhbDEuU3RyVmFsID09IG51bGwgfHwgdmFsMi5NZ051bVZhbCA9PSBudWxsKSB7XHJcbiAgICAgIHN1cGVyLlNldE5VTEwocmVzVmFsLCBTdG9yYWdlQXR0cmlidXRlLkFMUEhBKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgbGV0IG1vZGU6IG51bWJlciA9IHZhbDIuTWdOdW1WYWwuTlVNXzJfTE9ORygpO1xyXG4gICAgbGV0IHJlczogbnVtYmVyID0gMDtcclxuICAgIHN3aXRjaCAobW9kZSkge1xyXG4gICAgICBjYXNlIDA6XHJcbiAgICAgICAgcmVzID0gRXhwcmVzc2lvbkV2YWx1YXRvci5ldmFsX2NyY18xNih2YWwxLlN0clZhbCk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgICBsZXQgbGVmdCA9IFN0cmluZy5mcm9tQ2hhckNvZGUocmVzICUgMjU2KTtcclxuICAgIGxldCByaWdodCA9IFN0cmluZy5mcm9tQ2hhckNvZGUocmVzIC8gMjU2KTtcclxuICAgIHJlc1ZhbC5TdHJWYWwgPSAnJyArIGxlZnQgKyByaWdodDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc3RhdGljIGV2YWxfY3JjXzE2KGJ1ZjogU3RyaW5nKTogbnVtYmVyIHtcclxuICAgIGxldCBjcmNfMTZfdGFibGUgPSBbXHJcbiAgICAgIDQwOTYxLCA2MTQ0MSwgNTUyOTcsIDUyMjI1LCA1MDY4OSwgNDk5MjEsIDQ5NTM3LCA0OTM0NVxyXG4gICAgXTtcclxuICAgIGxldCBidWZmZXJfaWR4OiBudW1iZXIgPSAwO1xyXG4gICAgbGV0IGxlbjogbnVtYmVyID0gYnVmLmxlbmd0aDtcclxuICAgIGxldCBjcmM6IG51bWJlciA9IDA7XHJcbiAgICBmb3IgKDsgbGVuID4gMDsgbGVuLS0pIHtcclxuICAgICAgbGV0IGJ0ID0gYnVmLmNoYXJDb2RlQXQoYnVmZmVyX2lkeCsrKTtcclxuICAgICAgYnQgPSA8bnVtYmVyPihidCBeIEV4cHJlc3Npb25FdmFsdWF0b3IuTE9fQ0hBUihjcmMpKTtcclxuICAgICAgY3JjID0gRXhwcmVzc2lvbkV2YWx1YXRvci5MT19DSEFSKEV4cHJlc3Npb25FdmFsdWF0b3IuTUtfU0hSVCgwLCBFeHByZXNzaW9uRXZhbHVhdG9yLkhJX0NIQVIoY3JjKSkpO1xyXG4gICAgICBsZXQgbWFzazogbnVtYmVyO1xyXG4gICAgICBsZXQgdGJsX2lkeDogbnVtYmVyO1xyXG4gICAgICBmb3IgKHRibF9pZHggPSAwLCBtYXNrID0gPG51bWJlcj5FeHByZXNzaW9uRXZhbHVhdG9yLkxPX0NIQVIoMHg4MCk7IHRibF9pZHggPCA4OyB0YmxfaWR4KysgLCBtYXNrID0gPG51bWJlcj4oRXhwcmVzc2lvbkV2YWx1YXRvci5MT19DSEFSKG1hc2spID4+IDEpKSB7XHJcbiAgICAgICAgaWYgKDxudW1iZXI+RXhwcmVzc2lvbkV2YWx1YXRvci5MT19DSEFSKDxudW1iZXI+KGJ0ICYgPG51bWJlcj5FeHByZXNzaW9uRXZhbHVhdG9yLkxPX0NIQVIobWFzaykpKSAhPT0gMClcclxuICAgICAgICAgIGNyYyA9IDxudW1iZXI+KGNyYyBeIGNyY18xNl90YWJsZVt0YmxfaWR4XSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiAoY3JjKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc3RhdGljIExPX0NIQVIobjogbnVtYmVyKTogbnVtYmVyIHtcclxuICAgIHJldHVybiA8bnVtYmVyPihuICYgMHhmZik7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHN0YXRpYyBISV9DSEFSKG46IG51bWJlcik6IG51bWJlciB7XHJcbiAgICByZXR1cm4gPG51bWJlcj4oKG4gJiAweGZmMDApID4+IDgpO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIE1LX1NIUlQoYzE6IG51bWJlciwgYzI6IG51bWJlcik6IG51bWJlciB7XHJcbiAgICByZXR1cm4gPG51bWJlcj4oPG51bWJlcj4oYzEgPDwgOCkgfCA8bnVtYmVyPmMyKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBNS19MT05HKGMxOiBudW1iZXIsIGMyOiBudW1iZXIsIGMzOiBudW1iZXIsIGM0OiBudW1iZXIpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuICgoYzEgPDwgMjQpIHwgKGMyIDw8IDE2KSB8IChjMyA8PCA4KSB8IGM0KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZXZhbF9vcF9jaGtkZ3QocmVzVmFsOiBFeHBWYWwsIHZhbDE6IEV4cFZhbCwgdmFsMjogRXhwVmFsKTogdm9pZCB7XHJcbiAgICBsZXQgd2VpZ2h0X3ZhbHM6IHN0cmluZ1tdID0gW1xyXG4gICAgICBTdHJpbmcuZnJvbUNoYXJDb2RlKDEpLCBTdHJpbmcuZnJvbUNoYXJDb2RlKDIpLCBTdHJpbmcuZnJvbUNoYXJDb2RlKDUpLCBTdHJpbmcuZnJvbUNoYXJDb2RlKDMpLCBTdHJpbmcuZnJvbUNoYXJDb2RlKDYpLCBTdHJpbmcuZnJvbUNoYXJDb2RlKDQpLCBTdHJpbmcuZnJvbUNoYXJDb2RlKDgpLFxyXG4gICAgICBTdHJpbmcuZnJvbUNoYXJDb2RlKDcpLCBTdHJpbmcuZnJvbUNoYXJDb2RlKDEwKSwgU3RyaW5nLmZyb21DaGFyQ29kZSg5KVxyXG4gICAgXTtcclxuICAgIGxldCBwb3M6IG51bWJlcjtcclxuICAgIGxldCBtdWw6IG51bWJlcjtcclxuICAgIGxldCBjX3N0cjogc3RyaW5nO1xyXG4gICAgbGV0IGRpZ2l0czogbnVtYmVyO1xyXG5cclxuICAgIGlmICh2YWwxLlN0clZhbCA9PT0gbnVsbCB8fCB2YWwyLk1nTnVtVmFsID09PSBudWxsKSB7XHJcbiAgICAgIHN1cGVyLlNldE5VTEwocmVzVmFsLCBTdG9yYWdlQXR0cmlidXRlLk5VTUVSSUMpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IG1vZGU6IG51bWJlciA9IHZhbDIuTWdOdW1WYWwuTlVNXzJfTE9ORygpO1xyXG4gICAgbGV0IHJlczogbnVtYmVyID0gMDtcclxuICAgIHN3aXRjaCAobW9kZSkge1xyXG4gICAgICBjYXNlIDA6XHJcbiAgICAgICAgbXVsID0gMjtcclxuICAgICAgICBmb3IgKHBvcyA9IHZhbDEuU3RyVmFsLmxlbmd0aDsgcG9zID49IDE7IHBvcy0tKSB7XHJcbiAgICAgICAgICBjX3N0ciA9IHZhbDEuU3RyVmFsLnN1YnN0cihwb3MgLSAxKTtcclxuICAgICAgICAgIGRpZ2l0cyA9IHRoaXMuYV8yX2xvbmcoY19zdHIsIDEpICogbXVsO1xyXG4gICAgICAgICAgcmVzICs9IGRpZ2l0cyArIChkaWdpdHMgPiA5ID8gMSA6IDApO1xyXG4gICAgICAgICAgbXVsID0gMyAtIG11bDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmVzICU9IDEwO1xyXG4gICAgICAgIGlmIChyZXMgIT09IDApXHJcbiAgICAgICAgICByZXMgPSAxMCAtIHJlcztcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgMTpcclxuICAgICAgICBmb3IgKHBvcyA9IHZhbDEuU3RyVmFsLmxlbmd0aDsgcG9zID49IDE7IHBvcy0tKSB7XHJcbiAgICAgICAgICBtdWwgPSB3ZWlnaHRfdmFsc1sodmFsMS5TdHJWYWwubGVuZ3RoIC0gcG9zKSAlIDEwXS5jaGFyQ29kZUF0KDApO1xyXG4gICAgICAgICAgbGV0IGNfY2hhcjogc3RyaW5nID0gdmFsMS5TdHJWYWxbcG9zIC0gMV0udG9VcHBlckNhc2UoKTtcclxuICAgICAgICAgIGNfc3RyID0gdmFsMS5TdHJWYWwuc3Vic3RyKHBvcyAtIDEpO1xyXG4gICAgICAgICAgaWYgKFV0aWxTdHJCeXRlTW9kZS5pc0RpZ2l0KGNfY2hhcikpXHJcbiAgICAgICAgICAgIGRpZ2l0cyA9IHRoaXMuYV8yX2xvbmcoY19zdHIsIDEpICogbXVsO1xyXG4gICAgICAgICAgZWxzZSBpZiAoTkNoYXIuSXNVcHBlcihjX3N0clswXSkpXHJcbiAgICAgICAgICAgIGRpZ2l0cyA9IChjX3N0clswXS5jaGFyQ29kZUF0KDApIC0gJ0EnLmNoYXJDb2RlQXQoMCkgKyAxKSAqIG11bDtcclxuICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgZGlnaXRzID0gMDtcclxuICAgICAgICAgIHJlcyArPSBkaWdpdHM7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJlcyAlPSAxMTtcclxuICAgICAgICBpZiAocmVzICE9PSAwKVxyXG4gICAgICAgICAgcmVzID0gMTEgLSByZXM7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgICBzdXBlci5Db25zdHJ1Y3RNYWdpY051bShyZXNWYWwsIHJlcywgU3RvcmFnZUF0dHJpYnV0ZS5OVU1FUklDKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYV8yX2xvbmcoc3RyOiBzdHJpbmcsIGxlbjogbnVtYmVyKTogbnVtYmVyIHtcclxuICAgIGxldCBuOiBudW1iZXIgPSAwO1xyXG4gICAgZm9yIChsZXQgcG9zOiBudW1iZXIgPSAwOyBwb3MgPCBsZW47IHBvcyA9IHBvcyArIDEpIHtcclxuICAgICAgaWYgKFV0aWxTdHJCeXRlTW9kZS5pc0RpZ2l0KHN0ci5jaGFyQXQocG9zKSkpIHtcclxuICAgICAgICBuID0gbiAqIDEwO1xyXG4gICAgICAgIG4gKz0gPG51bWJlcj4oc3RyLmNoYXJDb2RlQXQocG9zKSAtICcwJy5jaGFyQ29kZUF0KDApKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIG47XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGV2YWxfb3Bfc291bmR4KHJlc1ZhbDogRXhwVmFsLCB2YWwxOiBFeHBWYWwpOiB2b2lkIHtcclxuICAgIGxldCBzb3VuZHhfdmFsczogc3RyaW5nW10gPSBbXHJcbiAgICAgICcwJywgJzEnLCAnMicsICczJywgJzAnLCAnMScsICcyJywgJzAnLCAnMCcsICcyJywgJzInLCAnNCcsICc1JywgJzUnLCAnMCcsICcxJywgJzInLFxyXG4gICAgICAnNicsXHJcbiAgICAgICcyJywgJzMnLCAnMCcsICcxJywgJzAnLCAnMicsICcwJywgJzInXHJcbiAgICBdO1xyXG5cclxuICAgIGlmICh2YWwxLlN0clZhbCA9PT0gbnVsbCkge1xyXG4gICAgICBzdXBlci5TZXROVUxMKHJlc1ZhbCwgU3RvcmFnZUF0dHJpYnV0ZS5BTFBIQSk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHJlc1ZhbC5BdHRyID0gU3RvcmFnZUF0dHJpYnV0ZS5BTFBIQTtcclxuICAgIHJlc1ZhbC5TdHJWYWwgPSAnMDAwMCc7XHJcbiAgICBsZXQgbGFzdGM6IHN0cmluZyA9ICcgJztcclxuICAgIGxldCBvdXRwb3M6IG51bWJlciA9IDA7XHJcbiAgICBmb3IgKGxldCBpbnBvczogbnVtYmVyID0gMDsgaW5wb3MgPCB2YWwxLlN0clZhbC5sZW5ndGg7IGlucG9zKyspIHtcclxuICAgICAgbGV0IGluYzogc3RyaW5nID0gdmFsMS5TdHJWYWwuY2hhckF0KGlucG9zKS50b1VwcGVyQ2FzZSgpO1xyXG4gICAgICBsZXQgb3V0Yzogc3RyaW5nID0gc291bmR4X3ZhbHNbKGluYy5jaGFyQ29kZUF0KDApIC0gJ0EnLmNoYXJDb2RlQXQoMCkpXTtcclxuICAgICAgaWYgKGlucG9zID09PSAwKVxyXG4gICAgICAgIHJlc1ZhbC5TdHJWYWwgPSBFeHByZXNzaW9uRXZhbHVhdG9yLnNldEF0KHJlc1ZhbC5TdHJWYWwsIG91dHBvcysrLCBpbmMpO1xyXG4gICAgICBlbHNlIGlmIChvdXRjID4gJzAnICYmIG91dGMgIT09IGxhc3RjKSB7XHJcbiAgICAgICAgcmVzVmFsLlN0clZhbCA9IEV4cHJlc3Npb25FdmFsdWF0b3Iuc2V0QXQocmVzVmFsLlN0clZhbCwgb3V0cG9zKyssIG91dGMpO1xyXG4gICAgICAgIGlmIChvdXRwb3MgPiAzKVxyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgICAgbGFzdGMgPSBvdXRjO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHNldCBjaGFyYWN0ZXIgaW5zaWRlIHN0cmluZyBvbiBuZWVkZWQgcG9zaXRpb25cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwic3RyXCI+dG8gaW5zZXJ0IGNoYXIgaW50bzwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJwb3NcIj5vZiBjaGFyYWN0ZXIgdG8gaW5zZXJ0PC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImNoXCI+dG8gYmUgaW5zZXJ0ZWQ8L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz4gc3RyaW5nIHdpdGggaW5zZXJ0ZWQgY2hhcjwvcmV0dXJucz5cclxuICBwcml2YXRlIHN0YXRpYyBzZXRBdChzdHI6IHN0cmluZywgcG9zOiBudW1iZXIsIGNoOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgbGV0IGJ1ZmZlcjogU3RyaW5nQnVpbGRlciA9IG5ldyBTdHJpbmdCdWlsZGVyKHN0cik7XHJcblxyXG4gICAgaWYgKHBvcyA8IHN0ci5sZW5ndGgpIHtcclxuICAgICAgYnVmZmVyLnNldF9JdGVtKHBvcywgY2gpOyAvLyB0cnkgYmxvY2tcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGJ1ZmZlci5BcHBlbmQoY2gpOyAvLyBjYXRjaCBibG9ja1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGJ1ZmZlci5Ub1N0cmluZygpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBldmFsX29wX2hzdHIocmVzVmFsOiBFeHBWYWwsIHZhbDE6IEV4cFZhbCk6IHZvaWQge1xyXG4gICAgbGV0IG51bTE2ID0gbmV3IE5VTV9UWVBFKCk7XHJcbiAgICBsZXQgbmV3bnVtOiBOVU1fVFlQRTtcclxuICAgIGxldCBkaWdpdDogbnVtYmVyO1xyXG4gICAgbGV0IG91dHN0ciA9IG5ldyBBcnJheSgzMCk7XHJcbiAgICBsZXQgdG1wT3V0U3RyID0gbmV3IFN0cmluZ0J1aWxkZXIob3V0c3RyLmxlbmd0aCk7XHJcbiAgICBsZXQgbmVnYXRpdmU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIHJlc1ZhbC5BdHRyID0gU3RvcmFnZUF0dHJpYnV0ZS5BTFBIQTtcclxuICAgIGlmICh2YWwxLk1nTnVtVmFsID09IG51bGwpIHtcclxuICAgICAgc3VwZXIuU2V0TlVMTChyZXNWYWwsIFN0b3JhZ2VBdHRyaWJ1dGUuQUxQSEEpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgLyogbm90ZTogY2FuIGJlIG9wdGltaXplZCBieSB1c2luZyBsYXJnZXIgZGl2aXNvciAqL1xyXG4gICAgbnVtMTYubnVtXzRfYV9zdGQoJzE2Jyk7XHJcbiAgICBsZXQgb3JnbnVtID0gbmV3IE5VTV9UWVBFKHZhbDEuTWdOdW1WYWwpO1xyXG4gICAgaWYgKG9yZ251bS5udW1faXNfbmVnKCkpIHtcclxuICAgICAgbmVnYXRpdmUgPSB0cnVlO1xyXG4gICAgICBvcmdudW0ubnVtX2FicygpO1xyXG4gICAgfVxyXG4gICAgbGV0IGRpZ2l0czogbnVtYmVyID0gMDtcclxuICAgIHdoaWxlICh0cnVlKSB7XHJcbiAgICAgIG5ld251bSA9IE5VTV9UWVBFLm1vZChvcmdudW0sIG51bTE2KTtcclxuICAgICAgb3JnbnVtID0gTlVNX1RZUEUuZGl2KG9yZ251bSwgbnVtMTYpO1xyXG4gICAgICBvcmdudW0ubnVtX3RydW5jKDApO1xyXG4gICAgICBkaWdpdCA9IG5ld251bS5OVU1fMl9MT05HKCk7XHJcbiAgICAgIGRpZ2l0cysrO1xyXG4gICAgICBFeHByZXNzaW9uRXZhbHVhdG9yLmludF8yX2hleChvdXRzdHIsIG91dHN0ci5sZW5ndGggLSBkaWdpdHMsIDEsIGRpZ2l0LCAwKTtcclxuICAgICAgaWYgKG9yZ251bS5udW1faXNfemVybygpKVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChuZWdhdGl2ZSkge1xyXG4gICAgICBkaWdpdHMrKztcclxuICAgICAgb3V0c3RyW291dHN0ci5sZW5ndGggLSBkaWdpdHNdID0gJy0nO1xyXG4gICAgfVxyXG4gICAgZm9yIChkaWdpdCA9IG91dHN0ci5sZW5ndGggLSBkaWdpdHM7IGRpZ2l0IDwgb3V0c3RyLmxlbmd0aDsgZGlnaXQrKylcclxuICAgICAgdG1wT3V0U3RyLkFwcGVuZChvdXRzdHJbZGlnaXRdKTtcclxuICAgIHJlc1ZhbC5TdHJWYWwgPSB0bXBPdXRTdHIuVG9TdHJpbmcoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc3RhdGljIGludF8yX2hleChzdHI6IHN0cmluZ1tdLCBzdHJQb3M6IG51bWJlciwgbGVuOiBudW1iZXIsIG46IG51bWJlciwgbGVhZDogbnVtYmVyKTogdm9pZCB7XHJcbiAgICBsZXQgcG9zOiBudW1iZXIgPSBsZW47XHJcbiAgICBkbyB7XHJcbiAgICAgIGxldCBkaWdpdDogbnVtYmVyID0gbiAlIDE2O1xyXG4gICAgICBpZiAoZGlnaXQgPCAxMClcclxuICAgICAgICBzdHJbLS1wb3MgKyBzdHJQb3NdID0gU3RyaW5nLmZyb21DaGFyQ29kZSgnMCcuY2hhckNvZGVBdCgwKSArIGRpZ2l0KTtcclxuICAgICAgZWxzZSBzdHJbLS1wb3MgKyBzdHJQb3NdID0gU3RyaW5nLmZyb21DaGFyQ29kZSgnQScuY2hhckNvZGVBdCgwKSArIGRpZ2l0IC0gMTApO1xyXG4gICAgICBuID0gTWF0aC5mbG9vcihuIC8gMTYpO1xyXG4gICAgfVxyXG4gICAgd2hpbGUgKHBvcyA+IDAgJiYgbiAhPT0gMCk7XHJcbiAgICBFeHByZXNzaW9uRXZhbHVhdG9yLmxpYl9hX2ZpbGwoc3RyLCBsZW4sIHBvcyArIHN0clBvcywgbGVhZCk7XHJcbiAgICByZXR1cm47XHJcbiAgfVxyXG5cclxuXHJcbiAgcHJpdmF0ZSBzdGF0aWMgbGliX2FfZmlsbChzdHI6IHN0cmluZ1tdLCBsZW46IG51bWJlciwgcG9zOiBudW1iZXIsIGxlYWQ6IG51bWJlcik6IHZvaWQge1xyXG4gICAgaWYgKGxlYWQgPT09IDApIHtcclxuICAgICAgbGVuIC09IHBvcztcclxuICAgICAgaWYgKGxlbiA+IDAgJiYgcG9zID4gMCkge1xyXG4gICAgICAgIFN0clV0aWwubWVtY3B5KHN0ciwgMCwgc3RyLCBwb3MsIGxlbik7XHJcbiAgICAgICAgU3RyVXRpbC5tZW1zZXQoc3RyLCBsZW4sICcgJywgcG9zKTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKHBvcyA+IDApXHJcbiAgICAgICAgU3RyVXRpbC5tZW1zZXQoc3RyLCAwLCBTdHJpbmcuZnJvbUNoYXJDb2RlKGxlYWQpLCBwb3MpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuO1xyXG4gIH1cclxuXHJcblxyXG4gIHByaXZhdGUgZXZhbF9vcF9odmFsKHJlc1ZhbDogRXhwVmFsLCB2YWwxOiBFeHBWYWwpOiB2b2lkIHtcclxuICAgIGxldCBudW0xNiA9IG5ldyBOVU1fVFlQRSgpO1xyXG4gICAgbGV0IG51bSA9IG5ldyBOVU1fVFlQRSgpO1xyXG4gICAgbGV0IGRpZ2l0czogbnVtYmVyO1xyXG4gICAgbGV0IHN0YXRlOiBudW1iZXIgPSAwOyAvLyBTVEFURV9CRUZPUkVfTlVNQkVSID0gMDsgU1RBVEVfSU5fTlVNQkVSID0gMVxyXG4gICAgbGV0IG5lZ2F0aXZlOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gICAgaWYgKHZhbDEuU3RyVmFsID09PSBudWxsKSB7XHJcbiAgICAgIHN1cGVyLlNldE5VTEwocmVzVmFsLCBTdG9yYWdlQXR0cmlidXRlLk5VTUVSSUMpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgLyogbm90ZTogY2FuIGJlIG9wdGltaXplZCBieSB1c2luZyBsYXJnZXIgZGl2aXNvciAqL1xyXG4gICAgbnVtMTYubnVtXzRfYV9zdGQoJzE2Jyk7XHJcbiAgICByZXNWYWwuTWdOdW1WYWwgPSBuZXcgTlVNX1RZUEUoKTtcclxuICAgIHJlc1ZhbC5NZ051bVZhbC5OVU1fWkVSTygpO1xyXG4gICAgZm9yIChkaWdpdHMgPSAwOyBkaWdpdHMgPCB2YWwxLlN0clZhbC5sZW5ndGg7IGRpZ2l0cysrKSB7XHJcbiAgICAgIGxldCBkaWdpdGM6IHN0cmluZyA9IHZhbDEuU3RyVmFsW2RpZ2l0c107XHJcbiAgICAgIGlmIChkaWdpdGMgPT09ICctJyAmJiBzdGF0ZSA9PT0gMClcclxuICAgICAgICBuZWdhdGl2ZSA9IHRydWU7XHJcbiAgICAgIGxldCBkaWdpdDogbnVtYmVyID0gdGhpcy5oZXhfMl9sb25nKHZhbDEuU3RyVmFsLCBkaWdpdHMsIDEpO1xyXG4gICAgICBpZiAoZGlnaXQgPT09IDAgJiYgZGlnaXRjICE9PSAnMCcpXHJcbiAgICAgICAgY29udGludWU7XHJcbiAgICAgIHN0YXRlID0gMTtcclxuICAgICAgcmVzVmFsLk1nTnVtVmFsID0gTlVNX1RZUEUubXVsKHJlc1ZhbC5NZ051bVZhbCwgbnVtMTYpO1xyXG4gICAgICBudW0uTlVNXzRfTE9ORyhkaWdpdCk7XHJcbiAgICAgIHJlc1ZhbC5NZ051bVZhbCA9IE5VTV9UWVBFLmFkZChyZXNWYWwuTWdOdW1WYWwsIG51bSk7XHJcbiAgICB9XHJcbiAgICBpZiAobmVnYXRpdmUpXHJcbiAgICAgIHJlc1ZhbC5NZ051bVZhbC5udW1fbmVnKCk7XHJcbiAgICByZXNWYWwuQXR0ciA9IFN0b3JhZ2VBdHRyaWJ1dGUuTlVNRVJJQztcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaGV4XzJfbG9uZyhzdHI6IFN0cmluZywgc3RyQ291bnQ6IG51bWJlciwgbGVuOiBudW1iZXIpOiBudW1iZXIge1xyXG4gICAgbGV0IHBvczogbnVtYmVyO1xyXG4gICAgbGV0IG46IG51bWJlciA9IDA7XHJcbiAgICBmb3IgKHBvcyA9IHN0ckNvdW50OyBwb3MgPCBzdHJDb3VudCArIGxlbjsgcG9zKyspIHtcclxuICAgICAgbGV0IGRpZ2l0OiBzdHJpbmcgPSBzdHIuY2hhckF0KHBvcykudG9VcHBlckNhc2UoKTtcclxuICAgICAgaWYgKFV0aWxTdHJCeXRlTW9kZS5pc0RpZ2l0KGRpZ2l0KSkge1xyXG4gICAgICAgIG4gKj0gMTY7XHJcbiAgICAgICAgbiArPSBkaWdpdC5jaGFyQ29kZUF0KDApIC0gJzAnLmNoYXJDb2RlQXQoMCk7XHJcbiAgICAgIH0gZWxzZSBpZiAoZGlnaXQgPj0gJ0EnICYmIGRpZ2l0IDw9ICdGJykge1xyXG4gICAgICAgIG4gKj0gMTY7XHJcbiAgICAgICAgbiArPSBkaWdpdC5jaGFyQ29kZUF0KDApIC0gJ0EnLmNoYXJDb2RlQXQoMCkgKyAxMDtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIG47XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGV2YWxfb3BfY2hyKHJlc1ZhbDogRXhwVmFsLCB2YWwxOiBFeHBWYWwpOiB2b2lkIHtcclxuICAgIHJlc1ZhbC5BdHRyID0gU3RvcmFnZUF0dHJpYnV0ZS5BTFBIQTtcclxuXHJcbiAgICBpZiAodmFsMS5NZ051bVZhbCA9PT0gbnVsbCkge1xyXG4gICAgICBzdXBlci5TZXROVUxMKHJlc1ZhbCwgU3RvcmFnZUF0dHJpYnV0ZS5BTFBIQSk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICByZXNWYWwuU3RyVmFsID0gU3RyaW5nLmZyb21DaGFyQ29kZSh2YWwxLk1nTnVtVmFsLk5VTV8yX0xPTkcoKSlbMF07XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGV2YWxfb3BfYXNjKHJlc1ZhbDogRXhwVmFsLCB2YWwxOiBFeHBWYWwpOiB2b2lkIHtcclxuICAgIGlmICh2YWwxLlN0clZhbCA9PT0gbnVsbCkge1xyXG4gICAgICBzdXBlci5TZXROVUxMKHJlc1ZhbCwgU3RvcmFnZUF0dHJpYnV0ZS5OVU1FUklDKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBjOiBudW1iZXIgPSAodmFsMS5TdHJWYWwubGVuZ3RoID4gMCkgPyAoRW5jb2RpbmcuQVNDSUkuR2V0Qnl0ZXModmFsMS5TdHJWYWwpKVswXSA6IDA7XHJcblxyXG4gICAgdGhpcy5Db25zdHJ1Y3RNYWdpY051bShyZXNWYWwsIGMsIFN0b3JhZ2VBdHRyaWJ1dGUuTlVNRVJJQyk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGV2YWxfb3BfbXN0cihyZXNWYWw6IEV4cFZhbCwgdmFsMTogRXhwVmFsLCB2YWwyOiBFeHBWYWwpOiB2b2lkIHtcclxuICAgIHJlc1ZhbC5BdHRyID0gU3RvcmFnZUF0dHJpYnV0ZS5BTFBIQTtcclxuICAgIGlmICh2YWwxLk1nTnVtVmFsID09IG51bGwgJiYgdmFsMi5NZ051bVZhbCA9PSBudWxsKSB7XHJcbiAgICAgIHN1cGVyLlNldE5VTEwocmVzVmFsLCBTdG9yYWdlQXR0cmlidXRlLkFMUEhBKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgbGV0IG51bSA9IG5ldyBOVU1fVFlQRSh2YWwxLk1nTnVtVmFsKTtcclxuICAgIGlmIChudW0uTlVNX0lTX0xPTkcoKSlcclxuICAgICAgbnVtLm51bV80X3N0ZF9sb25nKCk7XHJcbiAgICBsZXQgbGVuOiBudW1iZXIgPSB2YWwyLk1nTnVtVmFsLk5VTV8yX0xPTkcoKTtcclxuICAgIGxlbiA9IE1hdGgubWF4KGxlbiwgMik7XHJcbiAgICBsZXQgdG1wQXJyYXk6IEludDhBcnJheSA9IG5ldyBJbnQ4QXJyYXkobGVuKTtcclxuICAgIGZvciAobGV0IGk6IG51bWJlciA9IDA7IGkgPCBsZW47IGkrKylcclxuICAgICAgdG1wQXJyYXlbaV0gPSBudW0uRGF0YVtpXTtcclxuICAgIGxldCB0bXBCeXRlczogVWludDhBcnJheSA9IE1pc2MuVG9CeXRlQXJyYXkodG1wQXJyYXkpO1xyXG4gICAgcmVzVmFsLlN0clZhbCA9IEVudmlyb25tZW50Lkluc3RhbmNlLkdldEVuY29kaW5nKCkuR2V0U3RyaW5nKHRtcEJ5dGVzLCAwLCB0bXBCeXRlcy5sZW5ndGgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBldmFsX29wX212YWwocmVzVmFsOiBFeHBWYWwsIHZhbDE6IEV4cFZhbCk6IHZvaWQge1xyXG4gICAgcmVzVmFsLkF0dHIgPSBTdG9yYWdlQXR0cmlidXRlLk5VTUVSSUM7XHJcbiAgICBpZiAodmFsMS5TdHJWYWwgPT0gbnVsbCkge1xyXG4gICAgICBzdXBlci5TZXROVUxMKHJlc1ZhbCwgU3RvcmFnZUF0dHJpYnV0ZS5OVU1FUklDKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgcmVzVmFsLk1nTnVtVmFsID0gbmV3IE5VTV9UWVBFKCk7XHJcbiAgICByZXNWYWwuTWdOdW1WYWwuTlVNX1NFVF9aRVJPKCk7XHJcbiAgICBsZXQgbGVuOiBudW1iZXIgPSBNYXRoLm1pbih2YWwxLlN0clZhbC5sZW5ndGgsIE5VTV9UWVBFLk5VTV9TSVpFKTtcclxuICAgIHJlc1ZhbC5NZ051bVZhbCA9IG5ldyBOVU1fVFlQRShNaXNjLlRvU0J5dGVBcnJheShFbnZpcm9ubWVudC5JbnN0YW5jZS5HZXRFbmNvZGluZygpLkdldEJ5dGVzKHZhbDEuU3RyVmFsKSksIDAsIGxlbik7XHJcbiAgfVxyXG5cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIGV2YWx1YXRpb24gb2YgRGF0ZSB0byB0aGUgQWxmYSBzdHJpbmcgd2l0aCBzcGVjaWFsIGZvcm1hdFxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgcHJpdmF0ZSBldmFsX29wX2RzdHIocmVzVmFsOiBFeHBWYWwsIHZhbDE6IEV4cFZhbCwgdmFsMjogRXhwVmFsLCBkaXNwbGF5Q29udmVydG9yOiBEaXNwbGF5Q29udmVydG9yKTogdm9pZCB7XHJcbiAgICByZXNWYWwuQXR0ciA9IFN0b3JhZ2VBdHRyaWJ1dGUuVU5JQ09ERTtcclxuICAgIGlmICh2YWwxLk1nTnVtVmFsID09IG51bGwgfHwgdmFsMi5TdHJWYWwgPT0gbnVsbCkge1xyXG4gICAgICBzdXBlci5TZXROVUxMKHJlc1ZhbCwgU3RvcmFnZUF0dHJpYnV0ZS5VTklDT0RFKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgcmVzVmFsLlN0clZhbCA9IGRpc3BsYXlDb252ZXJ0b3IudG9fYShyZXNWYWwuU3RyVmFsLCAxMDAsIHZhbDEuTWdOdW1WYWwuTlVNXzJfVUxPTkcoKSwgdmFsMi5TdHJWYWwsXHJcbiAgICAgIHRoaXMuRXhwVGFzay5nZXRDb21wSWR4KCkpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBldmFsX29wX3RzdHIocmVzVmFsOiBFeHBWYWwsIHZhbDE6IEV4cFZhbCwgdmFsMjogRXhwVmFsLCBkaXNwbGF5Q29udmVydG9yOiBEaXNwbGF5Q29udmVydG9yLFxyXG4gICAgICAgICAgICAgICAgICAgICAgIG1pbGxpU2Vjb25kczogYm9vbGVhbik6IHZvaWQge1xyXG4gICAgcmVzVmFsLkF0dHIgPSBTdG9yYWdlQXR0cmlidXRlLkFMUEhBO1xyXG4gICAgaWYgKHZhbDEuTWdOdW1WYWwgPT0gbnVsbCB8fCB2YWwyLlN0clZhbCA9PSBudWxsKSB7XHJcbiAgICAgIHN1cGVyLlNldE5VTEwocmVzVmFsLCBTdG9yYWdlQXR0cmlidXRlLkFMUEhBKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgcmVzVmFsLlN0clZhbCA9IGRpc3BsYXlDb252ZXJ0b3IudGltZV8yX2EocmVzVmFsLlN0clZhbCwgMTAwLCB2YWwxLk1nTnVtVmFsLk5VTV8yX1VMT05HKCksIHZhbDIuU3RyVmFsLFxyXG4gICAgICB0aGlzLkV4cFRhc2suZ2V0Q29tcElkeCgpLCBtaWxsaVNlY29uZHMpO1xyXG4gIH1cclxuXHJcblxyXG4gIHByaXZhdGUgZXZhbF9vcF9kdmFsKHJlc1ZhbDogRXhwVmFsLCB2YWwxOiBFeHBWYWwsIHZhbDI6IEV4cFZhbCwgZGlzcGxheUNvbnZlcnRvcjogRGlzcGxheUNvbnZlcnRvcik6IHZvaWQge1xyXG4gICAgaWYgKHZhbDEuU3RyVmFsID09PSBudWxsIHx8IHZhbDIuU3RyVmFsID09PSBudWxsKSB7XHJcbiAgICAgIHN1cGVyLlNldE5VTEwocmVzVmFsLCBTdG9yYWdlQXR0cmlidXRlLkRBVEUpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXHJcbiAgICAvKiB5ZWFyIDIwMDAgYnVnIC0gaWYgdGhlIHVzZXIgaW5zZXJ0cyBhIGRhdGUgdmFsdWUgd2l0aCBvbmx5IDIgKi9cclxuICAgIC8qIHllYXIgZGlnaXRzIChpLmUuIEREL01NL1lZKSwgdGhlIGFfMl9kYXRlIG1pZ2h0IGluc2VydCBleHRyYSAqL1xyXG4gICAgLyogMiBjZW50dXJ5IGRpZ2l0cywgYW5kIGVubGFyZ2UgdGhlIGlucHV0IHN0cmluZy4gSW4gb3JkZXIgdG8gICovXHJcbiAgICAvKiBhdmlvZCBtZW1vcnkgY29ycnVwdGlvbnMsIHdlIGVubGFyZ2UgdGhlIGRhdGUgc3RyaW5nIGlucHV0ICAgKi9cclxuICAgIC8qIGJ1ZmZlciAtIElsYW4gc2hpYmVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xyXG4gICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXHJcbiAgICBpZiAodmFsMS5BdHRyID09PSBTdG9yYWdlQXR0cmlidXRlLlVOSUNPREUpXHJcbiAgICAgIGlmICh2YWwxLlN0clZhbC5sZW5ndGggKyAyIDw9IE5VTV9UWVBFLk5VTV9TSVpFKSB7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgbGV0IHRtcCA9IG5ldyBBcnJheSh2YWwxLlN0clZhbC5sZW5ndGggKyAyKTtcclxuICAgICAgICBmb3IgKGxldCBfYWk6IG51bWJlciA9IDA7IF9haSA8IHRtcC5sZW5ndGg7ICsrX2FpKVxyXG4gICAgICAgICAgdG1wW19haV0gPSAnXFwwJztcclxuICAgICAgICBTdHJVdGlsLm1lbWNweSh0bXAsIDAsIE5TdHJpbmcuVG9DaGFyQXJyYXkodmFsMS5TdHJWYWwpLCAwLCB2YWwxLlN0clZhbC5sZW5ndGgpO1xyXG4gICAgICB9XHJcbiAgICBsZXQgbDogbnVtYmVyID0gZGlzcGxheUNvbnZlcnRvci5hXzJfZGF0ZSh2YWwxLlN0clZhbCwgdmFsMi5TdHJWYWwsIHRoaXMuRXhwVGFzay5nZXRDb21wSWR4KCkpO1xyXG4gICAgaWYgKGwgPj0gMTAwMDAwMDAwMClcclxuICAgICAgbCA9IDA7XHJcbiAgICBzdXBlci5Db25zdHJ1Y3RNYWdpY051bShyZXNWYWwsIGwsIFN0b3JhZ2VBdHRyaWJ1dGUuREFURSk7XHJcbiAgfVxyXG5cclxuXHJcbiAgcHJpdmF0ZSBldmFsX29wX3R2YWwocmVzVmFsOiBFeHBWYWwsIHZhbDE6IEV4cFZhbCwgdmFsMjogRXhwVmFsLCBkaXNwbGF5Q29udmVydG9yOiBEaXNwbGF5Q29udmVydG9yLFxyXG4gICAgICAgICAgICAgICAgICAgICAgIG1pbGxpU2Vjb25kczogYm9vbGVhbik6IHZvaWQge1xyXG4gICAgaWYgKHZhbDEuU3RyVmFsID09PSBudWxsIHx8IHZhbDIuU3RyVmFsID09PSBudWxsKSB7XHJcbiAgICAgIHN1cGVyLlNldE5VTEwocmVzVmFsLCBTdG9yYWdlQXR0cmlidXRlLlRJTUUpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBsZXQgcGljID0gbmV3IFBJQyh2YWwyLlN0clZhbCwgU3RvcmFnZUF0dHJpYnV0ZS5USU1FLCB0aGlzLkV4cFRhc2suZ2V0Q29tcElkeCgpKTtcclxuICAgIGxldCBsOiBudW1iZXIgPSBkaXNwbGF5Q29udmVydG9yLmFfMl90aW1lKHZhbDEuU3RyVmFsLCBwaWMsIG1pbGxpU2Vjb25kcyk7XHJcbiAgICBpZiAobCA+PSAxMDAwMDAwMDAwKVxyXG4gICAgICBsID0gMDtcclxuICAgIHN1cGVyLkNvbnN0cnVjdE1hZ2ljTnVtKHJlc1ZhbCwgbCwgU3RvcmFnZUF0dHJpYnV0ZS5USU1FKTtcclxuICB9XHJcblxyXG5cclxuICBwcml2YXRlIGV2YWxfb3BfZGF5KHJlc1ZhbDogRXhwVmFsLCB2YWwxOiBFeHBWYWwpOiB2b2lkIHtcclxuICAgIHRoaXMuZXZhbF9vcF9kYXRlX2JyayhyZXNWYWwsIHZhbDEuTWdOdW1WYWwsIDApO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGV2YWxfb3BfbW9udGgocmVzVmFsOiBFeHBWYWwsIHZhbDE6IEV4cFZhbCk6IHZvaWQge1xyXG4gICAgdGhpcy5ldmFsX29wX2RhdGVfYnJrKHJlc1ZhbCwgdmFsMS5NZ051bVZhbCwgMSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGV2YWxfb3BfeWVhcihyZXNWYWw6IEV4cFZhbCwgdmFsMTogRXhwVmFsKTogdm9pZCB7XHJcbiAgICB0aGlzLmV2YWxfb3BfZGF0ZV9icmsocmVzVmFsLCB2YWwxLk1nTnVtVmFsLCAyKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZXZhbF9vcF9kb3cocmVzVmFsOiBFeHBWYWwsIHZhbDE6IEV4cFZhbCk6IHZvaWQge1xyXG4gICAgdGhpcy5ldmFsX29wX2RhdGVfYnJrKHJlc1ZhbCwgdmFsMS5NZ051bVZhbCwgMyk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGV2YWxfb3Bfc2Vjb25kKHJlc1ZhbDogRXhwVmFsLCB2YWwxOiBFeHBWYWwpOiB2b2lkIHtcclxuICAgIHRoaXMuZXZhbF9vcF90aW1lX2JyayhyZXNWYWwsIHZhbDEuTWdOdW1WYWwsIDIpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBldmFsX29wX21pbnV0ZShyZXNWYWw6IEV4cFZhbCwgdmFsMTogRXhwVmFsKTogdm9pZCB7XHJcbiAgICB0aGlzLmV2YWxfb3BfdGltZV9icmsocmVzVmFsLCB2YWwxLk1nTnVtVmFsLCAxKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZXZhbF9vcF9ob3VyKHJlc1ZhbDogRXhwVmFsLCB2YWwxOiBFeHBWYWwpOiB2b2lkIHtcclxuICAgIHRoaXMuZXZhbF9vcF90aW1lX2JyayhyZXNWYWwsIHZhbDEuTWdOdW1WYWwsIDApO1xyXG4gIH1cclxuXHJcblxyXG4gIHB1YmxpYyBldmFsX29wX2RhdGVfYnJrKHJlc1ZhbDogRXhwVmFsLCB2YWwxOiBOVU1fVFlQRSwgdHlwOiBudW1iZXIpOiB2b2lkIHtcclxuICAgIGlmICh2YWwxID09PSBudWxsKSB7XHJcbiAgICAgIHN1cGVyLlNldE5VTEwocmVzVmFsLCBTdG9yYWdlQXR0cmlidXRlLk5VTUVSSUMpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBsZXQgZDogbnVtYmVyID0gdmFsMS5OVU1fMl9MT05HKCk7XHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gQnJlYWsgZGF0YSBpbnRvIGl0cyBjb21wb25lbnRzXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgbGV0IGJyZWFrUGFyYW1zOiBEYXRlQnJlYWtQYXJhbXMgPSBEaXNwbGF5Q29udmVydG9yLkluc3RhbmNlLmdldE5ld0RhdGVCcmVha1BhcmFtcygpO1xyXG4gICAgRGlzcGxheUNvbnZlcnRvci5JbnN0YW5jZS5kYXRlX2JyZWFrX2RhdGVtb2RlKGJyZWFrUGFyYW1zLCBkLCBmYWxzZSwgdGhpcy5FeHBUYXNrLmdldENvbXBJZHgoKSk7XHJcbiAgICBsZXQgeWVhcjogbnVtYmVyID0gYnJlYWtQYXJhbXMueWVhcjtcclxuICAgIGxldCBtb250aDogbnVtYmVyID0gYnJlYWtQYXJhbXMubW9udGg7XHJcbiAgICBsZXQgZGF5OiBudW1iZXIgPSBicmVha1BhcmFtcy5kYXk7XHJcbiAgICBsZXQgZG95OiBudW1iZXIgPSBicmVha1BhcmFtcy5kb3k7XHJcbiAgICBsZXQgZG93OiBudW1iZXIgPSBicmVha1BhcmFtcy5kb3c7XHJcbiAgICBzd2l0Y2ggKHR5cCkge1xyXG4gICAgICBjYXNlIDA6XHJcbiAgICAgICAgZCA9IGRheTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAxOlxyXG4gICAgICAgIGQgPSBtb250aDtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAyOlxyXG4gICAgICAgIGQgPSB5ZWFyO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIDM6XHJcbiAgICAgICAgZCA9IGRvdztcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSA0OlxyXG4gICAgICAgIGQgPSBVdGlsRGF0ZUpwbi5nZXRJbnN0YW5jZSgpLmRhdGVfanBuX3llYXJfb2ZzKHllYXIsIGRveSk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgZCA9IDA7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgICBzdXBlci5Db25zdHJ1Y3RNYWdpY051bShyZXNWYWwsIGQsIFN0b3JhZ2VBdHRyaWJ1dGUuTlVNRVJJQyk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGV2YWxfb3BfdGltZV9icmsocmVzVmFsOiBFeHBWYWwsIHZhbDE6IE5VTV9UWVBFLCB0eXA6IG51bWJlcik6IHZvaWQge1xyXG4gICAgaWYgKHZhbDEgPT09IG51bGwpIHtcclxuICAgICAgc3VwZXIuU2V0TlVMTChyZXNWYWwsIFN0b3JhZ2VBdHRyaWJ1dGUuTlVNRVJJQyk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGxldCBkOiBudW1iZXIgPSB2YWwxLk5VTV8yX1VMT05HKCk7XHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gQnJlYWtlIGRhdGEgaW50byBpdHMgY29tcG9uZW50c1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIGxldCBicmVha1BhcmFtczogVGltZUJyZWFrUGFyYW1zID0gRGlzcGxheUNvbnZlcnRvci5JbnN0YW5jZS5nZXROZXdUaW1lQnJlYWtQYXJhbXMoKTtcclxuICAgIERpc3BsYXlDb252ZXJ0b3IudGltZV9icmVhayhicmVha1BhcmFtcywgZCk7XHJcbiAgICBsZXQgaG91cjogbnVtYmVyID0gYnJlYWtQYXJhbXMuaG91cjtcclxuICAgIGxldCBtaW51dGU6IG51bWJlciA9IGJyZWFrUGFyYW1zLm1pbnV0ZTtcclxuICAgIGxldCBzZWNvbmQ6IG51bWJlciA9IGJyZWFrUGFyYW1zLnNlY29uZDtcclxuICAgIHN3aXRjaCAodHlwKSB7XHJcbiAgICAgIGNhc2UgMDpcclxuICAgICAgICBkID0gaG91cjtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAxOlxyXG4gICAgICAgIGQgPSBtaW51dGU7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgMjpcclxuICAgICAgICBkID0gc2Vjb25kO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIGQgPSAwO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gICAgc3VwZXIuQ29uc3RydWN0TWFnaWNOdW0ocmVzVmFsLCBkLCBTdG9yYWdlQXR0cmlidXRlLk5VTUVSSUMpO1xyXG4gIH1cclxuXHJcblxyXG4gIHByaXZhdGUgYXN5bmMgZXZhbF9vcF9hZGREYXRlVGltZShyZXNWYWw6IEV4cFZhbCwgZGF0ZVZhbDogRXhwVmFsLCB0aW1lVmFsOiBFeHBWYWwsIHllYXJzVmFsOiBFeHBWYWwsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vbnRoc1ZhbDogRXhwVmFsLCBkYXlzVmFsOiBFeHBWYWwsIGhvdXJzVmFsOiBFeHBWYWwsIG1pbnV0ZXNWYWw6IEV4cFZhbCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vjb25kc1ZhbDogRXhwVmFsKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBsZXQgdG1wVmFsID0gbmV3IEV4cFZhbCgpO1xyXG5cclxuICAgIC8vIHZhbHVlcyBjaGVja1xyXG4gICAgaWYgKGRhdGVWYWwuTWdOdW1WYWwgPT09IG51bGwgfHwgdGltZVZhbC5NZ051bVZhbCA9PT0gbnVsbCkge1xyXG4gICAgICByZXNWYWwuQXR0ciA9IFN0b3JhZ2VBdHRyaWJ1dGUuQk9PTEVBTjtcclxuICAgICAgcmVzVmFsLkJvb2xWYWwgPSBmYWxzZTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIGdldCB0aGUgdGltZSBmaWVsZFxyXG4gICAgbGV0IGZsZFRpbWU6IEZpZWxkID0gdGhpcy5HZXRGaWVsZE9mQ29udGV4dFRhc2sodGltZVZhbC5NZ051bVZhbC5OVU1fMl9MT05HKCkpO1xyXG4gICAgc3VwZXIuU2V0VmFsKHRtcFZhbCwgZmxkVGltZS5nZXRUeXBlKCksIGZsZFRpbWUuZ2V0VmFsdWUodHJ1ZSksIG51bGwpO1xyXG5cclxuICAgIC8vIEFkZCB0aW1lXHJcbiAgICB0aGlzLmV2YWxfb3BfYWRkdGltZShyZXNWYWwsIHRtcFZhbCwgaG91cnNWYWwsIG1pbnV0ZXNWYWwsIHNlY29uZHNWYWwpO1xyXG5cclxuICAgIGxldCB0aW1lOiBudW1iZXIgPSByZXNWYWwuTWdOdW1WYWwuTlVNXzJfTE9ORygpO1xyXG4gICAgbGV0IGRhdGU6IG51bWJlciA9IE1hdGguZmxvb3IodGltZSAvICg2MCAqIDYwICogMjQpKTsgLy8gaWYgZGlmZiBpcyBtb3JlIHRoZW4gMjQgaG91cnMsIHJlbW92ZSB0aGUgZnVsbCBkYXRlIGNoYW5nZXNcclxuICAgIHRpbWUgPSB0aW1lICUgKDYwICogNjAgKiAyNCk7IC8vIElmIHRpbWUgaXMgbmVnYXRpdmUsIG1vdmUgYmFjayBhIGRheSBhbmQgY2hhbmdlIHRoZSB0aW1lXHJcbiAgICBpZiAodGltZSA8IDApIHtcclxuICAgICAgZGF0ZS0tO1xyXG4gICAgICB0aW1lID0gKDYwICogNjAgKiAyNCkgLSAoLXRpbWUpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIEdldCB0aGUgZGF0ZSBmaWVsZFxyXG4gICAgbGV0IGZsZERhdGU6IEZpZWxkID0gdGhpcy5HZXRGaWVsZE9mQ29udGV4dFRhc2soZGF0ZVZhbC5NZ051bVZhbC5OVU1fMl9MT05HKCkpO1xyXG4gICAgc3VwZXIuU2V0VmFsKHRtcFZhbCwgZmxkRGF0ZS5nZXRUeXBlKCksIGZsZERhdGUuZ2V0VmFsdWUodHJ1ZSksIG51bGwpO1xyXG5cclxuICAgIC8vIEFkZCB0aGUgZGF0ZVxyXG4gICAgdGhpcy5ldmFsX29wX2FkZGRhdGUocmVzVmFsLCB0bXBWYWwsIHllYXJzVmFsLCBtb250aHNWYWwsIGRheXNWYWwpO1xyXG5cclxuICAgIC8vIEFkZCB0aGUgcmVzdWx0IGRhdGUgdG8gdGhlIGRhdGUgZGlmZiBjYWxjdWxhdGVkIGVhcmxpZXJcclxuICAgIGRhdGUgKz0gcmVzVmFsLk1nTnVtVmFsLk5VTV8yX0xPTkcoKTtcclxuXHJcbiAgICAvLyBTZXQgbmV3IHRpbWUgYW5kIGRhdGUgaW4gZmllbGRzXHJcbiAgICB0bXBWYWwuTWdOdW1WYWwuTlVNXzRfTE9ORyh0aW1lKTtcclxuICAgIGF3YWl0IGZsZFRpbWUuc2V0VmFsdWVBbmRTdGFydFJlY29tcHV0ZSh0bXBWYWwuVG9NZ1ZhbCgpLCBmYWxzZSwgdHJ1ZSwgZmFsc2UsIGZhbHNlKTtcclxuICAgIGF3YWl0IGZsZFRpbWUudXBkYXRlRGlzcGxheSgpO1xyXG5cclxuICAgIHRtcFZhbC5NZ051bVZhbC5OVU1fNF9MT05HKGRhdGUpO1xyXG4gICAgYXdhaXQgZmxkRGF0ZS5zZXRWYWx1ZUFuZFN0YXJ0UmVjb21wdXRlKHRtcFZhbC5Ub01nVmFsKCksIGZhbHNlLCB0cnVlLCBmYWxzZSwgZmFsc2UpO1xyXG4gICAgYXdhaXQgZmxkRGF0ZS51cGRhdGVEaXNwbGF5KCk7XHJcblxyXG4gICAgcmVzVmFsLkF0dHIgPSBTdG9yYWdlQXR0cmlidXRlLkJPT0xFQU47XHJcbiAgICByZXNWYWwuQm9vbFZhbCA9IHRydWU7XHJcbiAgfVxyXG5cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBldmFsX29wX2RpZmR0KHJlc1ZhbDogRXhwVmFsLCBkYXRlMXZhbDogRXhwVmFsLCB0aW1lMXZhbDogRXhwVmFsLCBkYXRlMnZhbDogRXhwVmFsLCB0aW1lMnZhbDogRXhwVmFsLCBkaWZEYXRlVmFsOiBFeHBWYWwsIGRpZlRpbWVWYWw6IEV4cFZhbCk6IFByb21pc2U8dm9pZD4ge1xyXG5cclxuICAgIGxldCB0bXBWYWw6IEV4cFZhbCA9IG5ldyBFeHBWYWwoKTtcclxuICAgIHRtcFZhbC5NZ051bVZhbCA9IG5ldyBOVU1fVFlQRSgpO1xyXG4gICAgdG1wVmFsLkF0dHIgPSBTdG9yYWdlQXR0cmlidXRlLk5VTUVSSUM7XHJcbiAgICBsZXQgZXhwVmFsOiBFeHBWYWwgPSB0bXBWYWw7XHJcblxyXG4gICAgLy8gdmFsdWVzIGNoZWNrXHJcbiAgICBpZiAoZGlmRGF0ZVZhbC5NZ051bVZhbCA9PT0gbnVsbCB8fCBkaWZUaW1lVmFsLk1nTnVtVmFsID09PSBudWxsKSB7XHJcbiAgICAgIHJlc1ZhbC5BdHRyID0gU3RvcmFnZUF0dHJpYnV0ZS5CT09MRUFOO1xyXG4gICAgICByZXNWYWwuQm9vbFZhbCA9IGZhbHNlO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgLy8gQ2FsY3VsYXRlIHRpbWUgZGlmc1xyXG4gICAgbGV0IGRpZkRhdGU6IG51bWJlciA9IGRhdGUxdmFsLk1nTnVtVmFsLk5VTV8yX0xPTkcoKSAtIGRhdGUydmFsLk1nTnVtVmFsLk5VTV8yX0xPTkcoKTtcclxuICAgIGxldCBkaWZUaW1lOiBudW1iZXIgPSB0aW1lMXZhbC5NZ051bVZhbC5OVU1fMl9MT05HKCkgLSB0aW1lMnZhbC5NZ051bVZhbC5OVU1fMl9MT05HKCk7XHJcblxyXG4gICAgaWYgKChkaWZUaW1lIDwgMCkgJiYgKGRpZlRpbWUgPiAtODY0MDApICYmIChkaWZEYXRlID4gMCkpIHtcclxuICAgICAgZGlmRGF0ZS0tO1xyXG4gICAgICBkaWZUaW1lID0gODY0MDAgLSAoLWRpZlRpbWUpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIGdldCB0aGUgZmllbGRzXHJcbiAgICBsZXQgZmxkRGF0ZTogRmllbGQgPSB0aGlzLkdldEZpZWxkT2ZDb250ZXh0VGFzayhkaWZEYXRlVmFsLk1nTnVtVmFsLk5VTV8yX0xPTkcoKSk7XHJcbiAgICBsZXQgZmxkVGltZTogRmllbGQgPSB0aGlzLkdldEZpZWxkT2ZDb250ZXh0VGFzayhkaWZUaW1lVmFsLk1nTnVtVmFsLk5VTV8yX0xPTkcoKSk7XHJcblxyXG4gICAgLy8gU2V0IHRoZSBkaWYgdmFsdWVzXHJcbiAgICB0bXBWYWwuTWdOdW1WYWwuTlVNXzRfTE9ORyhkaWZEYXRlKTtcclxuICAgIGF3YWl0IGZsZERhdGUuc2V0VmFsdWVBbmRTdGFydFJlY29tcHV0ZSh0bXBWYWwuVG9NZ1ZhbCgpLCBmYWxzZSwgdHJ1ZSwgZmFsc2UsIGZhbHNlKTtcclxuICAgIGF3YWl0IGZsZERhdGUudXBkYXRlRGlzcGxheSgpO1xyXG5cclxuICAgIHRtcFZhbC5NZ051bVZhbC5OVU1fNF9MT05HKGRpZlRpbWUpO1xyXG4gICAgYXdhaXQgZmxkVGltZS5zZXRWYWx1ZUFuZFN0YXJ0UmVjb21wdXRlKHRtcFZhbC5Ub01nVmFsKCksIGZhbHNlLCB0cnVlLCBmYWxzZSwgZmFsc2UpO1xyXG4gICAgYXdhaXQgZmxkVGltZS51cGRhdGVEaXNwbGF5KCk7XHJcblxyXG4gICAgcmVzVmFsLkF0dHIgPSBTdG9yYWdlQXR0cmlidXRlLkJPT0xFQU47XHJcbiAgICByZXNWYWwuQm9vbFZhbCA9IHRydWU7XHJcbiAgfVxyXG5cclxuXHJcbiAgcHJpdmF0ZSBldmFsX29wX25kb3cocmVzVmFsOiBFeHBWYWwsIHZhbDE6IEV4cFZhbCwgZGlzcGxheUNvbnZlcnRvcjogRGlzcGxheUNvbnZlcnRvcik6IHZvaWQge1xyXG4gICAgaWYgKHZhbDEuTWdOdW1WYWwgPT09IG51bGwpIHtcclxuICAgICAgc3VwZXIuU2V0TlVMTChyZXNWYWwsIFN0b3JhZ2VBdHRyaWJ1dGUuTlVNRVJJQyk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHZhbDEuTWdOdW1WYWwgPSB0aGlzLm11bF9hZGQodmFsMS5NZ051bVZhbCwgMCwgNik7XHJcbiAgICB0aGlzLmV2YWxfb3BfY2RvdyhyZXNWYWwsIHZhbDEuTWdOdW1WYWwsIGRpc3BsYXlDb252ZXJ0b3IpO1xyXG4gIH1cclxuXHJcblxyXG4gIHByaXZhdGUgZXZhbF9vcF9ubW9udGgocmVzVmFsOiBFeHBWYWwsIHZhbDE6IEV4cFZhbCwgZGlzcGxheUNvbnZlcnRvcjogRGlzcGxheUNvbnZlcnRvcik6IHZvaWQge1xyXG5cclxuICAgIGlmICh2YWwxLk1nTnVtVmFsID09IG51bGwpIHtcclxuICAgICAgc3VwZXIuU2V0TlVMTChyZXNWYWwsIFN0b3JhZ2VBdHRyaWJ1dGUuTlVNRVJJQyk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHZhbDEuTWdOdW1WYWwgPSB0aGlzLm11bF9hZGQodmFsMS5NZ051bVZhbCwgMzEsIC0zMCk7XHJcbiAgICB0aGlzLmV2YWxfb3BfY21vbnRoKHJlc1ZhbCwgdmFsMS5NZ051bVZhbCwgZGlzcGxheUNvbnZlcnRvcik7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgTXVsdGlwbHkgJiBhZGQgdG8gbnVtZXJpYyB0eXBlXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBwdWJsaWMgbXVsX2FkZChudW06IE5VTV9UWVBFLCBtdWw6IG51bWJlciwgYWRkOiBudW1iZXIpOiBOVU1fVFlQRSB7XHJcbiAgICBsZXQgdG1wID0gbmV3IE5VTV9UWVBFKCk7XHJcblxyXG4gICAgaWYgKG51bSA9PT0gbnVsbClcclxuICAgICAgcmV0dXJuIG51bGw7XHJcblxyXG4gICAgaWYgKG11bCAhPT0gMCkge1xyXG4gICAgICB0bXAuTlVNXzRfTE9ORyhtdWwpO1xyXG4gICAgICBudW0gPSBOVU1fVFlQRS5tdWwobnVtLCB0bXApO1xyXG4gICAgfVxyXG4gICAgaWYgKGFkZCAhPT0gMCkge1xyXG4gICAgICB0bXAuTlVNXzRfTE9ORyhhZGQpO1xyXG4gICAgICBudW0gPSBOVU1fVFlQRS5hZGQobnVtLCB0bXApO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG51bTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZXZhbF9vcF9jZG93KHJlc1ZhbDogRXhwVmFsLCB2YWwxOiBOVU1fVFlQRSwgZGlzcGxheUNvbnZlcnRvcjogRGlzcGxheUNvbnZlcnRvcik6IHZvaWQge1xyXG4gICAgdGhpcy5ldmFsX29wX2RhdGVfc3RyKHJlc1ZhbCwgdmFsMSwgJ1dXV1dXV1dXV1dUJywgZGlzcGxheUNvbnZlcnRvcik7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGV2YWxfb3BfY21vbnRoKHJlc1ZhbDogRXhwVmFsLCB2YWwxOiBOVU1fVFlQRSwgZGlzcGxheUNvbnZlcnRvcjogRGlzcGxheUNvbnZlcnRvcik6IHZvaWQge1xyXG4gICAgdGhpcy5ldmFsX29wX2RhdGVfc3RyKHJlc1ZhbCwgdmFsMSwgJ01NTU1NTU1NTU1UJywgZGlzcGxheUNvbnZlcnRvcik7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZXZhbF9vcF9kYXRlX3N0cihyZXNWYWw6IEV4cFZhbCwgdmFsMTogTlVNX1RZUEUsIGZvcm1hdDogc3RyaW5nLCBkaXNwbGF5Q29udmVydG9yOiBEaXNwbGF5Q29udmVydG9yKTogdm9pZCB7XHJcbiAgICByZXNWYWwuQXR0ciA9IFN0b3JhZ2VBdHRyaWJ1dGUuQUxQSEE7XHJcbiAgICBpZiAodmFsMSA9PT0gbnVsbCkge1xyXG4gICAgICBzdXBlci5TZXROVUxMKHJlc1ZhbCwgU3RvcmFnZUF0dHJpYnV0ZS5BTFBIQSk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGxldCBkb3c6IG51bWJlciA9IHZhbDEuTlVNXzJfVUxPTkcoKTtcclxuICAgIHJlc1ZhbC5TdHJWYWwgPSBkaXNwbGF5Q29udmVydG9yLnRvX2EocmVzVmFsLlN0clZhbCwgMTAsIGRvdywgZm9ybWF0LCB0aGlzLkV4cFRhc2suZ2V0Q29tcElkeCgpKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vIFRPRE86IEltcGxlbWVudCBNb25pdG9yIGZvciBkZWxheVxyXG4gIHByaXZhdGUgZXZhbF9vcF9kZWxheSh2YWwxOiBFeHBWYWwpOiB2b2lkIHtcclxuICB9XHJcblxyXG5cclxuICBwcml2YXRlIGV2YWxfb3BfaWRsZShyZXNWYWw6IEV4cFZhbCk6IHZvaWQge1xyXG4gICAgbGV0IG46IG51bWJlciA9IDA7XHJcbiAgICBsZXQgaWRsZVRpbWU6IG51bWJlciA9IEVudmlyb25tZW50Lkluc3RhbmNlLmdldElkbGVUaW1lKHRoaXMuRXhwVGFzay5nZXRDb21wSWR4KCkpO1xyXG4gICAgaWYgKGlkbGVUaW1lID4gMCkge1xyXG4gICAgICBsZXQgQ3VyclRpbWVNaWxsaTogbnVtYmVyID0gTWlzYy5nZXRTeXN0ZW1NaWxsaXNlY29uZHMoKTtcclxuICAgICAgLy8gYWN0X2lkbGUgKCk6XHJcbiAgICAgIG4gPSBNYXRoLmZsb29yKE1hdGguZmxvb3IoKEN1cnJUaW1lTWlsbGkgLSBMYXN0Rm9jdXNlZE1hbmFnZXIuSW5zdGFuY2UuTGFzdEFjdGlvblRpbWUpIC8gMTAwMCkgLyBpZGxlVGltZSk7XHJcbiAgICB9XHJcbiAgICByZXNWYWwuTWdOdW1WYWwgPSBuZXcgTlVNX1RZUEUoKTtcclxuICAgIHJlc1ZhbC5BdHRyID0gU3RvcmFnZUF0dHJpYnV0ZS5OVU1FUklDO1xyXG4gICAgcmVzVmFsLk1nTnVtVmFsLk5VTV80X0xPTkcobiAqIGlkbGVUaW1lICogMTApO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBldmFsX29wX2FkZGRhdGUocmVzVmFsOiBFeHBWYWwsIHZhbDE6IEV4cFZhbCwgdmFsMjogRXhwVmFsLCB2YWwzOiBFeHBWYWwsIHZhbDQ6IEV4cFZhbCk6IHZvaWQge1xyXG4gICAgbGV0IHRyaWVzOiBudW1iZXI7XHJcbiAgICBpZiAodmFsMS5NZ051bVZhbCA9PT0gbnVsbCB8fCB2YWwyLk1nTnVtVmFsID09PSBudWxsIHx8IHZhbDMuTWdOdW1WYWwgPT09IG51bGwgfHwgdmFsNC5NZ051bVZhbCA9PT0gbnVsbCkge1xyXG4gICAgICBzdXBlci5TZXROVUxMKHJlc1ZhbCwgU3RvcmFnZUF0dHJpYnV0ZS5EQVRFKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgbGV0IGRhdGU6IG51bWJlciA9IHZhbDEuTWdOdW1WYWwuTlVNXzJfTE9ORygpO1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vIEJyZWFrZSBkYXRhIGludG8gaXRzIGNvbXBvbmVudHNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICBsZXQgYnJlYWtQYXJhbXM6IERhdGVCcmVha1BhcmFtcyA9IERpc3BsYXlDb252ZXJ0b3IuSW5zdGFuY2UuZ2V0TmV3RGF0ZUJyZWFrUGFyYW1zKCk7XHJcbiAgICBEaXNwbGF5Q29udmVydG9yLkluc3RhbmNlLmRhdGVfYnJlYWtfZGF0ZW1vZGUoYnJlYWtQYXJhbXMsIGRhdGUsIGZhbHNlLCB0aGlzLkV4cFRhc2suZ2V0Q29tcElkeCgpKTtcclxuICAgIGxldCB5ZWFyOiBudW1iZXIgPSBicmVha1BhcmFtcy55ZWFyO1xyXG4gICAgbGV0IG1vbnRoOiBudW1iZXIgPSBicmVha1BhcmFtcy5tb250aDtcclxuICAgIGxldCBkYXk6IG51bWJlciA9IGJyZWFrUGFyYW1zLmRheTtcclxuXHJcbiAgICAvKiAyMC43Ljk1IC0gSGVuIDogRml4IGJ1ZyAxOTc1ICovXHJcbiAgICBpZiAoRW52aXJvbm1lbnQuSW5zdGFuY2UuR2V0RGF0ZU1vZGUodGhpcy5FeHBUYXNrLmdldENvbXBJZHgoKSkgPT09ICdCJylcclxuICAgICAgeWVhciA9IE1hdGgubWF4KHllYXIgLSBQSUNJbnRlcmZhY2UuREFURV9CVURESElTVF9HQVAsIDApO1xyXG4gICAgeWVhciArPSB2YWwyLk1nTnVtVmFsLk5VTV8yX0xPTkcoKTtcclxuICAgIG1vbnRoICs9IHZhbDMuTWdOdW1WYWwuTlVNXzJfTE9ORygpO1xyXG4gICAgbGV0IGRheTE6IG51bWJlciA9IHZhbDQuTWdOdW1WYWwuTlVNXzJfTE9ORygpO1xyXG4gICAgbGV0IGFkZF9kYXk6IG51bWJlciA9IChkYXkgPT09IDAgJiYgeWVhciAhPT0gMCAmJiBtb250aCAhPT0gMCAmJiBkYXkxICE9PSAwKSA/IDEgOiAwO1xyXG4gICAgbGV0IG1vbnRoMTogbnVtYmVyID0gbW9udGggKyB5ZWFyICogMTI7XHJcbiAgICB5ZWFyID0gTWF0aC5mbG9vcigobW9udGgxIC0gMSkgLyAxMik7XHJcbiAgICBtb250aCA9IChtb250aDEgLSAxKSAlIDEyICsgMTtcclxuICAgIGZvciAodHJpZXMgPSAwOyB0cmllcyA8IDQ7IHRyaWVzKyspIHtcclxuICAgICAgZGF0ZSA9IERpc3BsYXlDb252ZXJ0b3IuSW5zdGFuY2UuZGF0ZV80X2NhbGVuZGVyKHllYXIsIG1vbnRoLCBkYXkgKyBhZGRfZGF5LCAwLCBmYWxzZSk7XHJcbiAgICAgIGlmIChkYXRlIDwgMTAwMDAwMDAwMClcclxuICAgICAgICBicmVhaztcclxuICAgICAgZGF5LS07XHJcbiAgICB9XHJcblxyXG4gICAgLyogRk1JLTI2NCwgOTkvMDEvMDgsIEpQTklEOiBNS1A5OTAxMDAwOCAgICAgICAgICAgICAgICAgICAgKi9cclxuICAgIC8qIGRhdGVfNF9jYWxlbmRlcigpIHJldHVybnMgMTAwMDAwMDAwMEwgYXMgYW4gaW52YWxpZCBkYXRlICovXHJcbiAgICAvKiBpbiB3aGljaCBjYXNlIGRhdGUgc2hvdWxkIGJlIDAwMDAvMDAvMDAuICAgICAgICAgICAgICAgICAqL1xyXG4gICAgaWYgKGRhdGUgPT09IDEwMDAwMDAwMDApXHJcbiAgICAgIGRhdGUgPSAwO1xyXG4gICAgZWxzZSB7XHJcbiAgICAgIGRhdGUgKz0gZGF5MSAtIGFkZF9kYXk7XHJcbiAgICAgIGRhdGUgPSBNYXRoLm1heChkYXRlLCAwKTtcclxuICAgIH1cclxuICAgIHN1cGVyLkNvbnN0cnVjdE1hZ2ljTnVtKHJlc1ZhbCwgZGF0ZSwgU3RvcmFnZUF0dHJpYnV0ZS5EQVRFKTtcclxuICB9XHJcblxyXG5cclxuICBwcml2YXRlIGV2YWxfb3BfYWRkdGltZShyZXNWYWw6IEV4cFZhbCwgdmFsMTogRXhwVmFsLCB2YWwyOiBFeHBWYWwsIHZhbDM6IEV4cFZhbCwgdmFsNDogRXhwVmFsKTogdm9pZCB7XHJcbiAgICBpZiAodmFsMS5NZ051bVZhbCA9PT0gbnVsbCB8fCB2YWwyLk1nTnVtVmFsID09PSBudWxsIHx8IHZhbDMuTWdOdW1WYWwgPT09IG51bGwgfHwgdmFsNC5NZ051bVZhbCA9PT0gbnVsbCkge1xyXG4gICAgICBzdXBlci5TZXROVUxMKHJlc1ZhbCwgU3RvcmFnZUF0dHJpYnV0ZS5USU1FKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgbGV0IHRpbWU6IG51bWJlciA9IHZhbDEuTWdOdW1WYWwuTlVNXzJfVUxPTkcoKSArIHZhbDIuTWdOdW1WYWwuTlVNXzJfTE9ORygpICogMzYwMCArIHZhbDMuTWdOdW1WYWwuTlVNXzJfTE9ORygpICogNjAgKyB2YWw0Lk1nTnVtVmFsLk5VTV8yX0xPTkcoKTtcclxuICAgIHN1cGVyLkNvbnN0cnVjdE1hZ2ljTnVtKHJlc1ZhbCwgdGltZSwgU3RvcmFnZUF0dHJpYnV0ZS5USU1FKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZXZhbF9vcF9ib20ocmVzVmFsOiBFeHBWYWwsIHZhbDE6IEV4cFZhbCk6IHZvaWQge1xyXG4gICAgbGV0IGJyZWFrUGFyYW1zOiBEYXRlQnJlYWtQYXJhbXM7XHJcbiAgICBpZiAodmFsMS5NZ051bVZhbCA9PSBudWxsKSB7XHJcbiAgICAgIHN1cGVyLlNldE5VTEwocmVzVmFsLCBTdG9yYWdlQXR0cmlidXRlLkRBVEUpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBsZXQgZGF0ZTogbnVtYmVyID0gdmFsMS5NZ051bVZhbC5OVU1fMl9VTE9ORygpO1xyXG4gICAgaWYgKGRhdGUgIT09IDApIHtcclxuICAgICAgYnJlYWtQYXJhbXMgPSBEaXNwbGF5Q29udmVydG9yLkluc3RhbmNlLmdldE5ld0RhdGVCcmVha1BhcmFtcygpO1xyXG4gICAgICBEaXNwbGF5Q29udmVydG9yLkluc3RhbmNlLmRhdGVfYnJlYWtfZGF0ZW1vZGUoYnJlYWtQYXJhbXMsIGRhdGUsIGZhbHNlLCB0aGlzLkV4cFRhc2suZ2V0Q29tcElkeCgpKTtcclxuICAgICAgbGV0IGRheTogbnVtYmVyID0gYnJlYWtQYXJhbXMuZGF5O1xyXG4gICAgICBkYXRlIC09IChkYXkgLSAxKTtcclxuICAgIH1cclxuICAgIHN1cGVyLkNvbnN0cnVjdE1hZ2ljTnVtKHJlc1ZhbCwgZGF0ZSwgU3RvcmFnZUF0dHJpYnV0ZS5EQVRFKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZXZhbF9vcF9ib3kocmVzVmFsOiBFeHBWYWwsIHZhbDE6IEV4cFZhbCk6IHZvaWQge1xyXG4gICAgbGV0IGJyZWFrUGFyYW1zOiBEYXRlQnJlYWtQYXJhbXM7XHJcbiAgICBpZiAodmFsMS5NZ051bVZhbCA9PT0gbnVsbCkge1xyXG4gICAgICBzdXBlci5TZXROVUxMKHJlc1ZhbCwgU3RvcmFnZUF0dHJpYnV0ZS5EQVRFKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgbGV0IGRhdGU6IG51bWJlciA9IHZhbDEuTWdOdW1WYWwuTlVNXzJfVUxPTkcoKTtcclxuICAgIGlmIChkYXRlICE9PSAwKSB7XHJcbiAgICAgIGJyZWFrUGFyYW1zID0gRGlzcGxheUNvbnZlcnRvci5JbnN0YW5jZS5nZXROZXdEYXRlQnJlYWtQYXJhbXMoKTtcclxuICAgICAgRGlzcGxheUNvbnZlcnRvci5JbnN0YW5jZS5kYXRlX2JyZWFrX2RhdGVtb2RlKGJyZWFrUGFyYW1zLCBkYXRlLCBmYWxzZSwgdGhpcy5FeHBUYXNrLmdldENvbXBJZHgoKSk7XHJcbiAgICAgIGxldCB5ZWFyOiBudW1iZXIgPSBicmVha1BhcmFtcy55ZWFyO1xyXG4gICAgICBsZXQgZGF5OiBudW1iZXIgPSAxO1xyXG4gICAgICBsZXQgbW9udGg6IG51bWJlciA9IDE7XHJcbiAgICAgIGlmIChFbnZpcm9ubWVudC5JbnN0YW5jZS5HZXREYXRlTW9kZSh0aGlzLkV4cFRhc2suZ2V0Q29tcElkeCgpKSA9PT0gJ0InKVxyXG4gICAgICAgIHllYXIgPSBNYXRoLm1heCh5ZWFyIC0gUElDSW50ZXJmYWNlLkRBVEVfQlVEREhJU1RfR0FQLCAwKTtcclxuICAgICAgZGF0ZSA9IERpc3BsYXlDb252ZXJ0b3IuSW5zdGFuY2UuZGF0ZV80X2NhbGVuZGVyKHllYXIsIG1vbnRoLCBkYXksIDAsIGZhbHNlKTtcclxuICAgIH1cclxuICAgIHN1cGVyLkNvbnN0cnVjdE1hZ2ljTnVtKHJlc1ZhbCwgZGF0ZSwgU3RvcmFnZUF0dHJpYnV0ZS5EQVRFKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZXZhbF9vcF9lb20ocmVzVmFsOiBFeHBWYWwsIHZhbDE6IEV4cFZhbCk6IHZvaWQge1xyXG4gICAgbGV0IGJyZWFrUGFyYW1zOiBEYXRlQnJlYWtQYXJhbXM7XHJcbiAgICBpZiAodmFsMS5NZ051bVZhbCA9PT0gbnVsbCkge1xyXG4gICAgICBzdXBlci5TZXROVUxMKHJlc1ZhbCwgU3RvcmFnZUF0dHJpYnV0ZS5EQVRFKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgbGV0IGRhdGU6IG51bWJlciA9IHZhbDEuTWdOdW1WYWwuTlVNXzJfVUxPTkcoKTtcclxuICAgIGlmIChkYXRlICE9PSAwKSB7XHJcbiAgICAgIGJyZWFrUGFyYW1zID0gRGlzcGxheUNvbnZlcnRvci5JbnN0YW5jZS5nZXROZXdEYXRlQnJlYWtQYXJhbXMoKTtcclxuICAgICAgRGlzcGxheUNvbnZlcnRvci5JbnN0YW5jZS5kYXRlX2JyZWFrX2RhdGVtb2RlKGJyZWFrUGFyYW1zLCBkYXRlLCBmYWxzZSwgdGhpcy5FeHBUYXNrLmdldENvbXBJZHgoKSk7XHJcbiAgICAgIGxldCB5ZWFyOiBudW1iZXIgPSBicmVha1BhcmFtcy55ZWFyO1xyXG4gICAgICBsZXQgbW9udGg6IG51bWJlciA9IGJyZWFrUGFyYW1zLm1vbnRoO1xyXG4gICAgICBsZXQgZGF5OiBudW1iZXIgPSAzMTtcclxuICAgICAgaWYgKEVudmlyb25tZW50Lkluc3RhbmNlLkdldERhdGVNb2RlKHRoaXMuRXhwVGFzay5nZXRDb21wSWR4KCkpID09PSAnQicpXHJcbiAgICAgICAgeWVhciA9IE1hdGgubWF4KHllYXIgLSBQSUNJbnRlcmZhY2UuREFURV9CVURESElTVF9HQVAsIDApO1xyXG4gICAgICBsZXQgdHJpZXM6IG51bWJlcjtcclxuICAgICAgZm9yICh0cmllcyA9IDA7IHRyaWVzIDwgNDsgdHJpZXMrKykge1xyXG4gICAgICAgIGRhdGUgPSBEaXNwbGF5Q29udmVydG9yLkluc3RhbmNlLmRhdGVfNF9jYWxlbmRlcih5ZWFyLCBtb250aCwgZGF5LCAwLCBmYWxzZSk7XHJcbiAgICAgICAgaWYgKGRhdGUgPCAxMDAwMDAwMDAwKVxyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgZGF5LS07XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHN1cGVyLkNvbnN0cnVjdE1hZ2ljTnVtKHJlc1ZhbCwgZGF0ZSwgU3RvcmFnZUF0dHJpYnV0ZS5EQVRFKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZXZhbF9vcF9lb3kocmVzVmFsOiBFeHBWYWwsIHZhbDE6IEV4cFZhbCk6IHZvaWQge1xyXG4gICAgaWYgKHZhbDEuTWdOdW1WYWwgPT09IG51bGwpIHtcclxuICAgICAgc3VwZXIuU2V0TlVMTChyZXNWYWwsIFN0b3JhZ2VBdHRyaWJ1dGUuREFURSk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGxldCBkYXRlOiBudW1iZXIgPSB2YWwxLk1nTnVtVmFsLk5VTV8yX1VMT05HKCk7XHJcbiAgICBpZiAoZGF0ZSAhPT0gMCkge1xyXG4gICAgICBsZXQgYnJlYWtQYXJhbXM6IERhdGVCcmVha1BhcmFtcyA9IERpc3BsYXlDb252ZXJ0b3IuSW5zdGFuY2UuZ2V0TmV3RGF0ZUJyZWFrUGFyYW1zKCk7XHJcbiAgICAgIERpc3BsYXlDb252ZXJ0b3IuSW5zdGFuY2UuZGF0ZV9icmVha19kYXRlbW9kZShicmVha1BhcmFtcywgZGF0ZSwgZmFsc2UsIHRoaXMuRXhwVGFzay5nZXRDb21wSWR4KCkpO1xyXG4gICAgICBsZXQgeWVhcjogbnVtYmVyID0gYnJlYWtQYXJhbXMueWVhcjtcclxuICAgICAgbGV0IG1vbnRoOiBudW1iZXIgPSAxMjtcclxuICAgICAgbGV0IGRheTogbnVtYmVyID0gMzE7XHJcbiAgICAgIGlmIChFbnZpcm9ubWVudC5JbnN0YW5jZS5HZXREYXRlTW9kZSh0aGlzLkV4cFRhc2suZ2V0Q29tcElkeCgpKSA9PT0gJ0InKVxyXG4gICAgICAgIHllYXIgPSBNYXRoLm1heCh5ZWFyIC0gUElDSW50ZXJmYWNlLkRBVEVfQlVEREhJU1RfR0FQLCAwKTtcclxuICAgICAgZGF0ZSA9IERpc3BsYXlDb252ZXJ0b3IuSW5zdGFuY2UuZGF0ZV80X2NhbGVuZGVyKHllYXIsIG1vbnRoLCBkYXksIDAsIGZhbHNlKTtcclxuICAgIH1cclxuICAgIHN1cGVyLkNvbnN0cnVjdE1hZ2ljTnVtKHJlc1ZhbCwgZGF0ZSwgU3RvcmFnZUF0dHJpYnV0ZS5EQVRFKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZXZhbF9vcF9zdHJ0b2socmVzVmFsOiBFeHBWYWwsIHZhbDE6IEV4cFZhbCwgdmFsMjogRXhwVmFsLCB2YWwzOiBFeHBWYWwpOiB2b2lkIHtcclxuICAgIGxldCB0bXBfczogU3RyaW5nQnVpbGRlcjtcclxuICAgIGxldCB0bXBfc3RyOiBzdHJpbmc7XHJcbiAgICBsZXQgaWR4OiBudW1iZXI7XHJcbiAgICBsZXQgZGVsaW06IHN0cmluZztcclxuICAgIGxldCByZXRfc3RyOiBzdHJpbmcgPSAnJztcclxuICAgIGlmICh2YWwxLlN0clZhbCA9PT0gbnVsbCB8fCB2YWwyLk1nTnVtVmFsID09PSBudWxsIHx8IHZhbDMuU3RyVmFsID09PSBudWxsKSB7XHJcbiAgICAgIHN1cGVyLlNldE5VTEwocmVzVmFsLCBTdG9yYWdlQXR0cmlidXRlLlVOSUNPREUpO1xyXG4gICAgfVxyXG4gICAgaWYgKCFOU3RyaW5nLklzTnVsbE9yRW1wdHkodmFsMS5TdHJWYWwpICYmIHZhbDMuU3RyVmFsLmxlbmd0aCA+IDApIHtcclxuICAgICAgdG1wX3MgPSBuZXcgU3RyaW5nQnVpbGRlcih2YWwxLlN0clZhbC5sZW5ndGggKyAyKTtcclxuICAgICAgaWR4ID0gdmFsMi5NZ051bVZhbC5OVU1fMl9MT05HKCk7XHJcbiAgICAgIGlmIChpZHggPiAwKSB7XHJcbiAgICAgICAgZGVsaW0gPSBOU3RyaW5nLlRyaW1FbmQodmFsMy5TdHJWYWwsIHRoaXMuX2NoYXJzVG9UcmltKTtcclxuICAgICAgICB0bXBfcy5BcHBlbmQodmFsMS5TdHJWYWwpO1xyXG4gICAgICAgIGlmIChkZWxpbS5sZW5ndGggPT09IDApIHtcclxuICAgICAgICAgIGlmIChpZHggPT09IDEpXHJcbiAgICAgICAgICAgIHJldF9zdHIgPSB0bXBfcy5Ub1N0cmluZygpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0bXBfc3RyID0gdG1wX3MuVG9TdHJpbmcoKTtcclxuICAgICAgICAgIGxldCBpOiBudW1iZXI7XHJcbiAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgaWR4OyBpKyspIHtcclxuICAgICAgICAgICAgcmV0X3N0ciA9IFN0clV0aWwuc3Ryc3RyKHRtcF9zdHIsIGRlbGltKTtcclxuICAgICAgICAgICAgaWYgKHJldF9zdHIgPT09IG51bGwpIHtcclxuICAgICAgICAgICAgICBpZiAoaSA9PT0gaWR4IC0gMSlcclxuICAgICAgICAgICAgICAgIHJldF9zdHIgPSB0bXBfc3RyO1xyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldF9zdHIgPSB0bXBfc3RyLnN1YnN0cigwLCB0bXBfc3RyLmxlbmd0aCAtIHJldF9zdHIubGVuZ3RoKTtcclxuICAgICAgICAgICAgdG1wX3N0ciA9IHRtcF9zdHIuc3Vic3RyKHJldF9zdHIubGVuZ3RoICsgZGVsaW0ubGVuZ3RoKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGlmIChyZXRfc3RyICE9PSBudWxsKSB7XHJcbiAgICAgIHJlc1ZhbC5BdHRyID0gU3RvcmFnZUF0dHJpYnV0ZS5VTklDT0RFO1xyXG4gICAgICByZXNWYWwuU3RyVmFsID0gcmV0X3N0cjtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJlc1ZhbC5BdHRyID0gU3RvcmFnZUF0dHJpYnV0ZS5VTklDT0RFO1xyXG4gICAgICByZXNWYWwuU3RyVmFsID0gJyc7XHJcbiAgICB9XHJcbiAgICBpZHggPSB2YWwyLk1nTnVtVmFsLk5VTV8yX0xPTkcoKTtcclxuICAgIGlmICghTlN0cmluZy5Jc051bGxPckVtcHR5KHZhbDEuU3RyVmFsKSAmJiB2YWwzLlN0clZhbC5sZW5ndGggPT09IDAgJiYgaWR4ID09PSAxKSB7XHJcbiAgICAgIHJlc1ZhbC5BdHRyID0gU3RvcmFnZUF0dHJpYnV0ZS5VTklDT0RFO1xyXG4gICAgICByZXNWYWwuU3RyVmFsID0gdmFsMS5TdHJWYWw7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGV2YWxfb3BfZGJyb3VuZChyZXNWYWw6IEV4cFZhbCwgdmFsMTogRXhwVmFsLCB2YWwyOiBFeHBWYWwpOiB2b2lkIHtcclxuICAgIGlmICh2YWwxLk1nTnVtVmFsID09PSBudWxsIHx8IHZhbDIuTWdOdW1WYWwgPT09IG51bGwpIHtcclxuICAgICAgc3VwZXIuU2V0TlVMTChyZXNWYWwsIFN0b3JhZ2VBdHRyaWJ1dGUuTlVNRVJJQyk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHJlc1ZhbC5NZ051bVZhbCA9IG5ldyBOVU1fVFlQRSh2YWwxLk1nTnVtVmFsKTtcclxuICAgIGxldCB3aG9sZTogbnVtYmVyID0gdmFsMi5NZ051bVZhbC5OVU1fMl9MT05HKCk7XHJcbiAgICBpZiAod2hvbGUgPCAwKVxyXG4gICAgICByZXNWYWwuTWdOdW1WYWwuZGJSb3VuZCgtd2hvbGUpO1xyXG4gICAgZWxzZSByZXNWYWwuTWdOdW1WYWwucm91bmQod2hvbGUpO1xyXG4gICAgcmVzVmFsLkF0dHIgPSBTdG9yYWdlQXR0cmlidXRlLk5VTUVSSUM7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGV2YWxfb3BfdmFycGljKHJlc1ZhbDogRXhwVmFsLCB2YWwxOiBFeHBWYWwsIHZhbDI6IEV4cFZhbCk6IHZvaWQge1xyXG4gICAgbGV0IGZsZDogRmllbGQ7XHJcbiAgICBsZXQgY3RybDogTWdDb250cm9sO1xyXG5cclxuICAgIC8vIHZhbGlkYXRpb24gY2hlY2tzIG9uIHRoZSBleHByZXNzaW9uIGFyZ3VtZW50c1xyXG4gICAgaWYgKHZhbDIuTWdOdW1WYWwgPT09IG51bGwpIHtcclxuICAgICAgc3VwZXIuU2V0TlVMTChyZXNWYWwsIFN0b3JhZ2VBdHRyaWJ1dGUuVU5JQ09ERSk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodmFsMS5NZ051bVZhbCA9PT0gbnVsbCkge1xyXG4gICAgICBzdXBlci5TZXROVUxMKHJlc1ZhbCwgU3RvcmFnZUF0dHJpYnV0ZS5VTklDT0RFKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBtb2RlOiBudW1iZXIgPSB2YWwyLk1nTnVtVmFsLk5VTV8yX0xPTkcoKTtcclxuICAgIGxldCBpdG06IG51bWJlciA9IHZhbDEuTWdOdW1WYWwuTlVNXzJfTE9ORygpO1xyXG4gICAgcmVzVmFsLkF0dHIgPSBTdG9yYWdlQXR0cmlidXRlLlVOSUNPREU7XHJcblxyXG4gICAgdHJ5IHtcclxuICAgICAgZmxkID0gdGhpcy5HZXRGaWVsZE9mQ29udGV4dFRhc2soaXRtKTsgLy8gaXRtIHN0YXJ0cyBmcm9tIEEgLT4gMSwgYnV0IG91ciBhcnJheSBzdGFydHMgZnJvbSAwIC0+IChpdG0tMSlcclxuICAgIH0gY2F0Y2ggKGV4KSB7XHJcbiAgICAgIGlmIChleCBpbnN0YW5jZW9mIEV4Y2VwdGlvbikge1xyXG4gICAgICAgIExvZ2dlci5JbnN0YW5jZS5Xcml0ZUV4Y2VwdGlvblRvTG9nKGV4KTtcclxuICAgICAgICAvLyBtYWtlTnVsbFN0cmluZ1xyXG4gICAgICAgIGZsZCA9IG51bGw7XHJcbiAgICAgIH0gZWxzZVxyXG4gICAgICAgIHRocm93IGV4O1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChmbGQgPT09IG51bGwpIHtcclxuICAgICAgLy8gdmFsX3ByZV9zICgwKSBpbiBNYWdpY1xyXG4gICAgICBMb2dnZXIuSW5zdGFuY2UuV3JpdGVFeGNlcHRpb25Ub0xvZ1dpdGhNc2coJ0V4cHJlc3Npb25FdmFsdWF0b3IuZXZhbF9vcF92YXJwaWMgdGhlcmUgaXMgbm8gY29udHJvbCBudW1iZXIgJyArIGl0bSk7XHJcbiAgICAgIHJlc1ZhbC5TdHJWYWwgPSAnJztcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgaWYgKG1vZGUgIT09IDApIHtcclxuICAgICAgLy8gZ2V0cyB0aGUgY29udHJvbCBhc3NvY2lhdGVkIHdpdGggdGhlIGZpZWxkXHJcbiAgICAgIGN0cmwgPSBmbGQuZ2V0Q3RybCgpO1xyXG5cclxuICAgICAgaWYgKGN0cmwgIT09IG51bGwpIHtcclxuICAgICAgICAvLyB3ZSBkb250IG5lZWQgdG8gY2hlY2sgaWYgdGhlIGNvbnRyb2wgZm9ybWF0IGlzIGFuIGV4cHJlc3Npb24gc2luY2VcclxuICAgICAgICAvLyB0aGUgUElDIG9iamVjdCBhbHdheXMga2VlcCBhbiB1cCB0byBkYXRlIHZhbHVlIG9mIHRoZSBleHByZXNzaW9uIHJlc3VsdGVcclxuICAgICAgICByZXNWYWwuU3RyVmFsID0gY3RybC5nZXRQSUMoKS5nZXRGb3JtYXQoKTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGlmIChmbGQuZ2V0VHlwZSgpICE9PSBTdG9yYWdlQXR0cmlidXRlLkJMT0IgJiYgZmxkLmdldFR5cGUoKSAhPT0gU3RvcmFnZUF0dHJpYnV0ZS5CTE9CX1ZFQ1RPUikge1xyXG4gICAgICByZXNWYWwuU3RyVmFsID0gZmxkLmdldFBpY3R1cmUoKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgcmVzVmFsLlN0clZhbCA9ICcnO1xyXG4gICAgcmV0dXJuO1xyXG4gIH1cclxuXHJcblxyXG4gIHByaXZhdGUgZXZhbF9vcF92YXJhdHRyKHJlc1ZhbDogRXhwVmFsLCB2YWwxOiBFeHBWYWwpOiB2b2lkIHtcclxuICAgIGxldCBmbGQ6IEZpZWxkO1xyXG4gICAgcmVzVmFsLkF0dHIgPSBTdG9yYWdlQXR0cmlidXRlLkFMUEhBO1xyXG4gICAgaWYgKHZhbDEuTWdOdW1WYWwgPT09IG51bGwpIHtcclxuICAgICAgc3VwZXIuU2V0TlVMTChyZXNWYWwsIFN0b3JhZ2VBdHRyaWJ1dGUuQUxQSEEpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBsZXQgaXRtOiBudW1iZXIgPSB2YWwxLk1nTnVtVmFsLk5VTV8yX0xPTkcoKTtcclxuICAgIHRyeSB7XHJcbiAgICAgIGZsZCA9IHRoaXMuR2V0RmllbGRPZkNvbnRleHRUYXNrKGl0bSk7XHJcbiAgICB9IGNhdGNoIChleCkge1xyXG4gICAgICBpZiAoZXggaW5zdGFuY2VvZiBFeGNlcHRpb24pIHtcclxuICAgICAgICBMb2dnZXIuSW5zdGFuY2UuV3JpdGVFeGNlcHRpb25Ub0xvZyhleCk7XHJcbiAgICAgICAgZmxkID0gbnVsbDtcclxuICAgICAgfSBlbHNlXHJcbiAgICAgICAgdGhyb3cgZXg7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGZsZCA9PT0gbnVsbCkge1xyXG4gICAgICBMb2dnZXIuSW5zdGFuY2UuV3JpdGVFeGNlcHRpb25Ub0xvZ1dpdGhNc2coJ0V4cHJlc3Npb25FdmFsdWF0b3IuZXZhbF9vcF92YXJhdHRyIHRoZXJlIGlzIG5vIGNvbnRyb2wgbnVtYmVyICcgKyBpdG0pO1xyXG4gICAgICByZXNWYWwuU3RyVmFsID0gJyc7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGxldCBhdHRyOiBTdG9yYWdlQXR0cmlidXRlID0gZmxkLmdldFR5cGUoKTtcclxuICAgIHJlc1ZhbC5TdHJWYWwgPSAnJyArIEV4cHJlc3Npb25FdmFsdWF0b3IuR2V0QXR0cmlidXRlQ2hhcihhdHRyKTtcclxuICB9XHJcblxyXG5cclxuICBwcml2YXRlIGV4cF9udWxsX3ZhbF9nZXQoZXhwX2F0dHI6IFN0b3JhZ2VBdHRyaWJ1dGUsIG9wY29kZTogbnVtYmVyLCBudWxsX3Bhcm06IEV4cFZhbCk6IHZvaWQge1xyXG4gICAgbGV0IHB0cjogc3RyaW5nID0gJyc7XHJcbiAgICBsZXQgbnVtX3ZhbDogbnVtYmVyID0gMDtcclxuXHJcbiAgICBudWxsX3Bhcm0uSXNOdWxsID0gdHJ1ZTtcclxuXHJcblxyXG4gICAgLy8gSWYgdGhlIFRoZSBBdHRyaWJ1dGUgaXMgVW5rbm93biAtIHVzZSB0aGUgZXhwZWN0ZWQgQXR0cmlidXRlOlxyXG4gICAgaWYgKG9wY29kZSA9PT0gRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfTlVMTCkge1xyXG4gICAgICBudWxsX3Bhcm0uQXR0ciA9IGV4cF9hdHRyO1xyXG4gICAgICBpZiAoZXhwX2F0dHIgPT09IFN0b3JhZ2VBdHRyaWJ1dGUuQUxQSEEpXHJcbiAgICAgICAgcHRyID0gJyc7XHJcblxyXG4gICAgICBzd2l0Y2ggKGV4cF9hdHRyKSB7XHJcbiAgICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLkFMUEhBOlxyXG4gICAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5CTE9COlxyXG4gICAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5CTE9CX1ZFQ1RPUjpcclxuICAgICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuTUVNTzpcclxuICAgICAgICAgIG9wY29kZSA9IEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX05VTExfQTtcclxuICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuTlVNRVJJQzpcclxuICAgICAgICAgIG9wY29kZSA9IEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX05VTExfTjtcclxuICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuQk9PTEVBTjpcclxuICAgICAgICAgIG9wY29kZSA9IEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX05VTExfQjtcclxuICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuREFURTpcclxuICAgICAgICAgIG9wY29kZSA9IEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX05VTExfRDtcclxuICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuVElNRTpcclxuICAgICAgICAgIG9wY29kZSA9IEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX05VTExfVDtcclxuICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuVU5JQ09ERTpcclxuICAgICAgICAgIG9wY29kZSA9IEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX05VTExfVTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgc3dpdGNoIChvcGNvZGUpIHtcclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9OVUxMOlxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX05VTExfQTpcclxuICAgICAgICBpZiAoZXhwX2F0dHIgIT09IFN0b3JhZ2VBdHRyaWJ1dGUuQkxPQiAmJlxyXG4gICAgICAgICAgZXhwX2F0dHIgIT09IFN0b3JhZ2VBdHRyaWJ1dGUuQkxPQl9WRUNUT1IpXHJcbiAgICAgICAgICBudWxsX3Bhcm0uQXR0ciA9IFN0b3JhZ2VBdHRyaWJ1dGUuQUxQSEE7XHJcbiAgICAgICAgcHRyID0gJyc7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX05VTExfTjpcclxuICAgICAgICBudWxsX3Bhcm0uQXR0ciA9IFN0b3JhZ2VBdHRyaWJ1dGUuTlVNRVJJQztcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfTlVMTF9COlxyXG4gICAgICAgIG51bGxfcGFybS5BdHRyID0gU3RvcmFnZUF0dHJpYnV0ZS5CT09MRUFOO1xyXG4gICAgICAgIG51bV92YWwgPSAwO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9OVUxMX0Q6XHJcbiAgICAgICAgbnVsbF9wYXJtLkF0dHIgPSBTdG9yYWdlQXR0cmlidXRlLkRBVEU7XHJcbiAgICAgICAgbnVtX3ZhbCA9IE5OdW1iZXIuUGFyc2UoUElDSW50ZXJmYWNlLkRFRkFVTFRfREFURSk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX05VTExfVDpcclxuICAgICAgICBudWxsX3Bhcm0uQXR0ciA9IFN0b3JhZ2VBdHRyaWJ1dGUuVElNRTtcclxuICAgICAgICBudW1fdmFsID0gTk51bWJlci5QYXJzZShQSUNJbnRlcmZhY2UuREVGQVVMVF9USU1FKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfTlVMTF9VOlxyXG4gICAgICAgIGlmIChleHBfYXR0ciAhPT0gU3RvcmFnZUF0dHJpYnV0ZS5CTE9CICYmXHJcbiAgICAgICAgICBleHBfYXR0ciAhPT0gU3RvcmFnZUF0dHJpYnV0ZS5CTE9CX1ZFQ1RPUilcclxuICAgICAgICAgIG51bGxfcGFybS5BdHRyID0gU3RvcmFnZUF0dHJpYnV0ZS5VTklDT0RFO1xyXG4gICAgICAgIHB0ciA9ICcnO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX05VTExfTzpcclxuICAgICAgICBudWxsX3Bhcm0uQXR0ciA9IFN0b3JhZ2VBdHRyaWJ1dGUuQkxPQjtcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuXHJcbiAgICBzd2l0Y2ggKG51bGxfcGFybS5BdHRyKSB7XHJcbiAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5BTFBIQTpcclxuICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLkJMT0I6XHJcbiAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5CTE9CX1ZFQ1RPUjpcclxuICAgICAgICBudWxsX3Bhcm0uU3RyVmFsID0gcHRyO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLk5VTUVSSUM6XHJcbiAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5EQVRFOlxyXG4gICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuVElNRTpcclxuICAgICAgICBpZiAob3Bjb2RlID09PSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9OVUxMX04pIHtcclxuICAgICAgICAgIC8vIGluaXQgTlVMTCBOdW1lcmljIG51bWJlclxyXG4gICAgICAgICAgbGV0IG51bV92YWx1ZSA9IG5ldyBJbnQ4QXJyYXkoTlVNX1RZUEUuTlVNX1NJWkUpO1xyXG4gICAgICAgICAgZm9yIChsZXQgaTogbnVtYmVyID0gMDsgaSA8IG51bV92YWx1ZS5sZW5ndGg7IGkrKylcclxuICAgICAgICAgICAgbnVtX3ZhbHVlW2ldID0gMDtcclxuICAgICAgICAgIG51bGxfcGFybS5NZ051bVZhbCA9IG5ldyBOVU1fVFlQRShudW1fdmFsdWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBUaW1lICYgRGF0YVxyXG4gICAgICAgIGVsc2VcclxuICAgICAgICAgIHRoaXMuQ29uc3RydWN0TWFnaWNOdW0obnVsbF9wYXJtLCBudW1fdmFsLCBudWxsX3Bhcm0uQXR0cik7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuVU5JQ09ERTpcclxuICAgICAgICBudWxsX3Bhcm0uU3RyVmFsID0gcHRyO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLkJPT0xFQU46XHJcbiAgICAgICAgbnVsbF9wYXJtLkJvb2xWYWwgPSBmYWxzZTsgLy8gZmFsc2UgaXMgZGVmYXVsdCA0IGJvb2xlYW5cclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGV4cF9nZXRfdmFyKHJlc1ZhbDogRXhwVmFsLCB2YWwxOiBFeHBWYWwsIGlzX3ByZXZpb3VzOiBib29sZWFuKTogdm9pZCA7XHJcbiAgcHJpdmF0ZSBleHBfZ2V0X3Zhcih2YWwxOiBFeHBWYWwsIHJlc1ZhbDogRXhwVmFsKTogdm9pZCA7XHJcbiAgcHJpdmF0ZSBleHBfZ2V0X3ZhcihyZXNWYWxPclZhbDE6IEV4cFZhbCwgdmFsMU9yUmVzVmFsOiBFeHBWYWwsIGlzX3ByZXZpb3VzPzogYm9vbGVhbik6IHZvaWQge1xyXG4gICAgaWYgKCFpc051bGxPclVuZGVmaW5lZChpc19wcmV2aW91cykpXHJcbiAgICAgIHRoaXMuZXhwX2dldF92YXJfMChyZXNWYWxPclZhbDEsIHZhbDFPclJlc1ZhbCwgaXNfcHJldmlvdXMpO1xyXG4gICAgZWxzZVxyXG4gICAgICB0aGlzLmV4cF9nZXRfdmFyXzEocmVzVmFsT3JWYWwxLCB2YWwxT3JSZXNWYWwpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBleHBfZ2V0X3Zhcl8wKHJlc1ZhbDogRXhwVmFsLCB2YWwxOiBFeHBWYWwsIGlzX3ByZXZpb3VzOiBib29sZWFuKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBsZXQgZmxkOiBGaWVsZCA9IG51bGw7XHJcblxyXG4gICAgLy8gZXZhbHVhdGUgZmxkIGZyb20gbWdOdW1WYWxcclxuICAgIGlmICh2YWwxLk1nTnVtVmFsICE9PSBudWxsKSB7XHJcbiAgICAgIGxldCBpdG06IG51bWJlciA9IHZhbDEuTWdOdW1WYWwuTlVNXzJfTE9ORygpO1xyXG4gICAgICBmbGQgPSB0aGlzLkdldEZpZWxkT2ZDb250ZXh0VGFzayhpdG0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIGlmIGZsZCBpcyBudWxsLCBzZXQgcmVzVmFsIHRvIG51bGwgYW5kIHJldHVyblxyXG4gICAgaWYgKGZsZCA9PT0gbnVsbCkge1xyXG4gICAgICBzdXBlci5TZXROVUxMKHJlc1ZhbCwgU3RvcmFnZUF0dHJpYnV0ZS5OT05FKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIGlmIGZsZCBpcyBub3QgZXhwb3NlZCB0byBjbGllbnQgdGhlbiBhbGVydCB3aXRoIGVycm9yIG1lc3NhZ2UgYW5kIHJldHVybiBudWxsXHJcbiAgICBpZiAoZmxkLklzRXhwb3NlZFRvQ2xpZW50ID09PSBmYWxzZSkge1xyXG4gICAgICBsZXQgc2I6IFN0cmluZ0J1aWxkZXIgPSBuZXcgU3RyaW5nQnVpbGRlcigpO1xyXG4gICAgICBzYi5BcHBlbmQoTlN0cmluZy5Gb3JtYXQoJ0Vycm9yOiBWYXJpYWJsZSBcXCd7MH1cXCcgaXMgbm90IGV4cG9zZWQgdG8gY2xpZW50LicsIGZsZC5nZXRWYXJOYW1lKCkpKTtcclxuICAgICAgYWxlcnQoc2IuVG9TdHJpbmcoKSk7XHJcbiAgICAgIHJlc1ZhbC5Jc051bGwgPSB0cnVlO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGlzX3ByZXZpb3VzKVxyXG4gICAgLy8gc2V0IHRoZSBmbGFnIHRoYXQgd2lsbCBiZSB1c2VkIGJ5IGZsZC5nZXRWYWx1ZVxyXG4gICAgICAoPFRhc2tCYXNlPmZsZC5nZXRUYXNrKCkpLnNldEV2YWxPbGRWYWx1ZXModHJ1ZSk7XHJcblxyXG4gICAgLy8gZmlyc3QgZ2V0IHRoZSB2YWx1ZSBvZiB0aGUgZmllbGQgYW5kIHNldCBpdCB0byB0aGUgcmVzdWx0LlxyXG4gICAgc3VwZXIuU2V0VmFsKHJlc1ZhbCwgZmxkLmdldFR5cGUoKSwgZmxkLmdldFZhbHVlKHRydWUpLCBudWxsKTtcclxuXHJcbiAgICAvLyBub3cgZm9yIHRoZSBudWxsIGluZGljYXRpb24uXHJcbiAgICBpZiAoaXNfcHJldmlvdXMpIHtcclxuICAgICAgLy8gZm9yIHByZXZpb3VzLCB0aGUgbnVsbCBpbmRpY2F0aW9uIGlzIG5vdCBvbiB0aGUgZmxkLCB3ZSBzaG91bGQgZ2V0IGl0IGZyb20gdGhlIG9yaWdpbmFsIHJlY29yZC5cclxuICAgICAgaWYgKGZsZC5pc09yaWdpbmFsVmFsdWVOdWxsKCkpXHJcbiAgICAgIC8vIHRoZSBvcmlnaW5hbCB2YWx1ZSBvZiB0aGUgcmVjb3JkIGlzIE5VTExcclxuICAgICAgICBzdXBlci5TZXROVUxMKHJlc1ZhbCwgU3RvcmFnZUF0dHJpYnV0ZS5OT05FKTtcclxuICAgIH1cclxuICAgIC8vIGZvciBjdXJyZW50IHZhbHVlLCB0aGUgbnVsbCBpbmRpY2F0aW9uIGlzIGFscmVhZHkgb24gdGhlIGZsZC5cclxuXHJcbiAgICBlbHNlXHJcbiAgICAgIHJlc1ZhbC5Jc051bGwgPSBmbGQuaXNOdWxsKCk7XHJcblxyXG4gICAgaWYgKGlzX3ByZXZpb3VzKVxyXG4gICAgLy8gcmVzZXQgdGhlIGZsYWcuXHJcbiAgICAgICg8VGFza0Jhc2U+ZmxkLmdldFRhc2soKSkuc2V0RXZhbE9sZFZhbHVlcyhmYWxzZSk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJyZXNWYWxcIj48L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cInZhbDFcIj48L3BhcmFtPlxyXG4gIHByaXZhdGUgZXZhbF9vcF92YXJtb2QocmVzVmFsOiBFeHBWYWwsIHZhbDE6IEV4cFZhbCk6IHZvaWQge1xyXG4gICAgaWYgKHZhbDEuTWdOdW1WYWwgPT09IG51bGwpIHtcclxuICAgICAgc3VwZXIuU2V0TlVMTChyZXNWYWwsIFN0b3JhZ2VBdHRyaWJ1dGUuQk9PTEVBTik7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGxldCBpdG06IG51bWJlciA9IHZhbDEuTWdOdW1WYWwuTlVNXzJfTE9ORygpO1xyXG4gICAgbGV0IGZsZDogRmllbGQgPSB0aGlzLkdldEZpZWxkT2ZDb250ZXh0VGFzayhpdG0pO1xyXG5cclxuICAgIHJlc1ZhbC5BdHRyID0gU3RvcmFnZUF0dHJpYnV0ZS5CT09MRUFOO1xyXG4gICAgcmVzVmFsLkJvb2xWYWwgPSBmYWxzZTtcclxuXHJcbiAgICAvLyBRQ1IgNzUyMjcwIGlmIHRoZSB0aGUgYXJndW1lbnRzIGRvZXMgbm90IHJlcHJlc2VudCBhIHZhbGlkIGZpZWxkIHJldHVybiBmYWxzZVxyXG4gICAgaWYgKGZsZCAhPT0gbnVsbCkge1xyXG4gICAgICBsZXQgaWR4OiBudW1iZXIgPSBmbGQuZ2V0SWQoKTtcclxuICAgICAgbGV0IGR2OiBEYXRhVmlldyA9IDxEYXRhVmlldz4oPFRhc2tCYXNlPmZsZC5nZXRUYXNrKCkpLkRhdGFWaWV3O1xyXG4gICAgICBsZXQgcmVjOiBSZWNvcmQgPSBkdi5nZXRDdXJyUmVjKCk7XHJcbiAgICAgIHJlc1ZhbC5Cb29sVmFsID0gIXJlYy5mbGRWYWxzRXF1YWwoZHYuZ2V0T3JpZ2luYWxSZWMoKSwgaWR4KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgZXZhbF9vcF92YXJpbnAocmVzVmFsOiBFeHBWYWwsIHZhbDE6IEV4cFZhbCk6IHZvaWQge1xyXG4gICAgbGV0IGk6IG51bWJlciA9IDA7XHJcblxyXG4gICAgaWYgKHZhbDEuTWdOdW1WYWwgPT09IG51bGwpIHtcclxuICAgICAgc3VwZXIuU2V0TlVMTChyZXNWYWwsIFN0b3JhZ2VBdHRyaWJ1dGUuTlVNRVJJQyk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgZXhwa2Vybl9wYXJlbnQ6IG51bWJlciA9IHZhbDEuTWdOdW1WYWwuTlVNXzJfTE9ORygpO1xyXG4gICAgaWYgKChleHBrZXJuX3BhcmVudCA+PSAwICYmIGV4cGtlcm5fcGFyZW50IDwgKCg8VGFza0Jhc2U+dGhpcy5FeHBUYXNrKS5nZXRUYXNrRGVwdGgoZmFsc2UpKSkgfHwgZXhwa2Vybl9wYXJlbnQgPT09IEV4cHJlc3Npb25FdmFsdWF0b3IuVFJJR0dFUl9UQVNLKSB7XHJcbiAgICAgIGxldCB0c2s6IFRhc2tCYXNlID0gPFRhc2tCYXNlPiBzdXBlci5HZXRDb250ZXh0VGFzayhleHBrZXJuX3BhcmVudCk7XHJcbiAgICAgIGlmICh0c2sgIT09IG51bGwpXHJcbiAgICAgICAgaSA9IHRzay5jdGxfaXRtXzRfcGFyZW50X3ZlZSgwLCB0c2suZ2V0Q3VyckZpZWxkSWR4KCkgKyAxKTtcclxuICAgIH1cclxuICAgIHN1cGVyLkNvbnN0cnVjdE1hZ2ljTnVtKHJlc1ZhbCwgaSwgU3RvcmFnZUF0dHJpYnV0ZS5OVU1FUklDKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZXZhbF9vcF92YXJuYW1lKHJlc1ZhbDogRXhwVmFsLCB2YWwxOiBFeHBWYWwpOiB2b2lkIHtcclxuICAgIGlmICh2YWwxLk1nTnVtVmFsID09PSBudWxsKSB7XHJcbiAgICAgIHN1cGVyLlNldE5VTEwocmVzVmFsLCBTdG9yYWdlQXR0cmlidXRlLkFMUEhBKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBpdG06IG51bWJlciA9IHZhbDEuTWdOdW1WYWwuTlVNXzJfTE9ORygpO1xyXG4gICAgbGV0IGZsZDogRmllbGQgPSB0aGlzLkdldEZpZWxkT2ZDb250ZXh0VGFzayhpdG0pO1xyXG4gICAgbGV0IGJ1ZmZlcjogc3RyaW5nID0gKGZsZCAhPT0gbnVsbCkgPyBmbGQuZ2V0TmFtZSgpIDogJyc7XHJcbiAgICByZXNWYWwuU3RyVmFsID0gYnVmZmVyO1xyXG4gICAgcmVzVmFsLkF0dHIgPSBTdG9yYWdlQXR0cmlidXRlLkFMUEhBO1xyXG4gIH1cclxuXHJcblxyXG4gIHByaXZhdGUgZXZhbF9vcF9WYXJEaXNwbGF5TmFtZShyZXNWYWw6IEV4cFZhbCwgdmFsMTogRXhwVmFsKTogdm9pZCB7XHJcbiAgICByZXNWYWwuQXR0ciA9IFN0b3JhZ2VBdHRyaWJ1dGUuVU5JQ09ERTtcclxuICAgIHJlc1ZhbC5TdHJWYWwgPSAnJztcclxuXHJcbiAgICBpZiAodmFsMS5NZ051bVZhbCAhPT0gbnVsbCkge1xyXG4gICAgICBsZXQgaXRtOiBudW1iZXIgPSB2YWwxLk1nTnVtVmFsLk5VTV8yX0xPTkcoKTtcclxuICAgICAgbGV0IGZsZDogRmllbGQgPSB0aGlzLkdldEZpZWxkT2ZDb250ZXh0VGFzayhpdG0pO1xyXG5cclxuICAgICAgaWYgKGZsZCAhPT0gbnVsbClcclxuICAgICAgICByZXNWYWwuU3RyVmFsID0gZmxkLlZhckRpc3BsYXlOYW1lO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyBSZXR1cm4gdGhlIGNvbnRyb2wgSUQgb2YgdGhlIGNvbnRyb2wgdG8gd2hpY2ggaXRlbSAoRGF0YSBwcm9wZXJ0eSBsaXRlcmFsKSBpcyBhdHRhY2hlZC5cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cInJlc1ZhbFwiPjwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwidmFsMVwiPjwvcGFyYW0+XHJcbiAgcHJpdmF0ZSBldmFsX29wX1ZhckNvbnRyb2xJRChyZXNWYWw6IEV4cFZhbCwgdmFsMTogRXhwVmFsKTogdm9pZCB7XHJcbiAgICBsZXQgcmV0OiBudW1iZXIgPSAwO1xyXG5cclxuICAgIGlmICh2YWwxLk1nTnVtVmFsICE9PSBudWxsKSB7XHJcbiAgICAgIGxldCBpdG06IG51bWJlciA9IHZhbDEuTWdOdW1WYWwuTlVNXzJfTE9ORygpO1xyXG5cclxuICAgICAgLy8gaWYgaXRtIGlzIHRyaWdnZXIgdGFzaywgY2FsY3VsYXRlIHRoZSBpdGVtIGZyb20gZmllbGQuXHJcbiAgICAgIGlmIChpdG0gPT09IEV4cHJlc3Npb25FdmFsdWF0b3IuVFJJR0dFUl9UQVNLKVxyXG4gICAgICAgIGl0bSA9ICgoPFRhc2tCYXNlPiB0aGlzLkV4cFRhc2suR2V0Q29udGV4dFRhc2soKSkuY3RsX2l0bV80X3BhcmVudF92ZWUoMCwgKDxUYXNrQmFzZT4gdGhpcy5FeHBUYXNrLkdldENvbnRleHRUYXNrKCkpLmdldEN1cnJGaWVsZElkeCgpICsgMSkpO1xyXG5cclxuICAgICAgcmV0ID0gKDxUYXNrQmFzZT4gdGhpcy5FeHBUYXNrLkdldENvbnRleHRUYXNrKCkpLkdldENvbnRyb2xJREZyb21WYXJJdGVtKGl0bSAtIDEpO1xyXG4gICAgfVxyXG5cclxuICAgIHJlc1ZhbC5BdHRyID0gU3RvcmFnZUF0dHJpYnV0ZS5OVU1FUklDO1xyXG4gICAgcmVzVmFsLk1nTnVtVmFsID0gbmV3IE5VTV9UWVBFKCk7XHJcbiAgICByZXNWYWwuTWdOdW1WYWwuTlVNXzRfTE9ORyhyZXQpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyBSZXR1cm4gdGhlIGNob2ljZSBjb250cm9sJ3MgaXRlbXMgbGlzdCBhY2NvcmRpbmcgdG8gY29udHJvbCBJRC5cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cInJlc1ZhbFwiPjwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwidmFsMVwiPjwvcGFyYW0+XHJcbiAgcHJpdmF0ZSBhc3luYyBldmFsX29wX0NvbnRyb2xJdGVtc0xpc3QocmVzVmFsOiBFeHBWYWwsIHZhbDE6IEV4cFZhbCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgcmVzVmFsLkF0dHIgPSBTdG9yYWdlQXR0cmlidXRlLlVOSUNPREU7XHJcbiAgICByZXNWYWwuU3RyVmFsID0gJyc7XHJcblxyXG4gICAgaWYgKHZhbDEuTWdOdW1WYWwgIT09IG51bGwpIHtcclxuICAgICAgbGV0IGNvbnRyb2xJRDogbnVtYmVyID0gdmFsMS5NZ051bVZhbC5OVU1fMl9MT05HKCk7XHJcbiAgICAgIGxldCBwYXJlbnQ6IG51bWJlciA9IDA7XHJcblxyXG4gICAgICBsZXQgcmVmUGFyZW50OiBSZWZQYXJhbTxudW1iZXI+ID0gbmV3IFJlZlBhcmFtKHBhcmVudCk7XHJcbiAgICAgIGxldCBtZ0NvbnRyb2w6IE1nQ29udHJvbCA9ICgoPFRhc2tCYXNlPiB0aGlzLkV4cFRhc2suR2V0Q29udGV4dFRhc2soKSkuR2V0Q29udHJvbEZyb21Db250cm9sSUQoY29udHJvbElEIC0gMSwgcmVmUGFyZW50KSk7XHJcbiAgICAgIHBhcmVudCA9IHJlZlBhcmVudC52YWx1ZTtcclxuXHJcbiAgICAgIGlmIChtZ0NvbnRyb2wgIT09IG51bGwgJiYgbWdDb250cm9sLmlzQ2hvaWNlQ29udHJvbCgpKVxyXG4gICAgICAgIHJlc1ZhbC5TdHJWYWwgPSBhd2FpdCBtZ0NvbnRyb2wuZ2V0Rm9ybSgpLkdldENob2ljZUNvbnRyb2xJdGVtTGlzdChtZ0NvbnRyb2wpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyBSZXR1cm4gdGhlIGNob2ljZSBjb250cm9sJ3MgZGlzcGxheSBsaXN0IGFjY29yZGluZyB0byBjb250cm9sIElELlxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwicmVzVmFsXCI+PC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJ2YWwxXCI+PC9wYXJhbT5cclxuICBwcml2YXRlIGFzeW5jIGV2YWxfb3BfQ29udHJvbERpc3BsYXlMaXN0KHJlc1ZhbDogRXhwVmFsLCB2YWwxOiBFeHBWYWwpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIHJlc1ZhbC5BdHRyID0gU3RvcmFnZUF0dHJpYnV0ZS5VTklDT0RFO1xyXG4gICAgcmVzVmFsLlN0clZhbCA9ICcnO1xyXG5cclxuICAgIGlmICh2YWwxLk1nTnVtVmFsICE9PSBudWxsKSB7XHJcbiAgICAgIGxldCBjb250cm9sSUQ6IG51bWJlciA9IHZhbDEuTWdOdW1WYWwuTlVNXzJfTE9ORygpO1xyXG4gICAgICBsZXQgcGFyZW50OiBudW1iZXIgPSAwO1xyXG5cclxuICAgICAgbGV0IHJlZlBhcmVudDogUmVmUGFyYW08bnVtYmVyPiA9IG5ldyBSZWZQYXJhbShwYXJlbnQpO1xyXG4gICAgICBsZXQgbWdDb250cm9sOiBNZ0NvbnRyb2wgPSAoPFRhc2tCYXNlPiB0aGlzLkV4cFRhc2suR2V0Q29udGV4dFRhc2soKSkuR2V0Q29udHJvbEZyb21Db250cm9sSUQoY29udHJvbElEIC0gMSwgcmVmUGFyZW50KTtcclxuICAgICAgcGFyZW50ID0gcmVmUGFyZW50LnZhbHVlO1xyXG5cclxuICAgICAgaWYgKG1nQ29udHJvbCAhPT0gbnVsbCAmJiBtZ0NvbnRyb2wuaXNDaG9pY2VDb250cm9sKCkpXHJcbiAgICAgICAgcmVzVmFsLlN0clZhbCA9IGF3YWl0IG1nQ29udHJvbC5nZXRGb3JtKCkuR2V0Q2hvaWNlQ29udHJvbERpc3BsYXlMaXN0KG1nQ29udHJvbCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGV2YWxfb3Bfdmlld21vZChyZXNWYWw6IEV4cFZhbCwgdmFsMTogRXhwVmFsKTogdm9pZCB7XHJcbiAgICBpZiAodmFsMS5NZ051bVZhbCA9PT0gbnVsbCkge1xyXG4gICAgICBzdXBlci5TZXROVUxMKHJlc1ZhbCwgU3RvcmFnZUF0dHJpYnV0ZS5CT09MRUFOKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBwYXJlbnQ6IG51bWJlciA9IHZhbDEuTWdOdW1WYWwuTlVNXzJfTE9ORygpO1xyXG4gICAgaWYgKChwYXJlbnQgPj0gMCAmJiBwYXJlbnQgPCAoKDxUYXNrQmFzZT50aGlzLkV4cFRhc2spLmdldFRhc2tEZXB0aChmYWxzZSkpKSB8fCBwYXJlbnQgPT09IEV4cHJlc3Npb25FdmFsdWF0b3IuVFJJR0dFUl9UQVNLKSB7XHJcbiAgICAgIGxldCB0c2s6IFRhc2tCYXNlID0gPFRhc2tCYXNlPiBzdXBlci5HZXRDb250ZXh0VGFzayhwYXJlbnQpO1xyXG4gICAgICBpZiAoIXRzay5pc01haW5Qcm9nKCkpIHtcclxuICAgICAgICByZXNWYWwuQm9vbFZhbCA9ICgoPERhdGFWaWV3PnRzay5EYXRhVmlldykuZ2V0Q3VyclJlYygpKS5Nb2RpZmllZDtcclxuICAgICAgICAvLyByZWNvcmQgbWlnaHQgYmUgbW9kaWZpZWQgZXZlbiBpZiB0aGUgZmxhZyBpcyBmYWxzZSAobGlrZSB3aGVuIHRoZXJlIGlzIGFuIHVwZGF0ZSB3aXRoIGZvcmNlIHVwID0gbm9cclxuICAgICAgICAvLyBpbiB0aGUgc2VydmVyIHRoZSBjaGVjayBpcyBjb21wYXJpbmcgYWxsIHRoZSBmaWVsZHMgaW4gdGhlIHZpZXcuXHJcbiAgICAgICAgLy8gSGVyZSwgaWYgdGhlIG1vZGlmaWVkIGlzIGZhbHNlLCB3ZSB3aWxsIGNvbXBhcmUgdGhlIGN1cnJlbnQgcmVjIHRvIHRoZSBvcmlnaW5hbCBjdXJyZW50IHJlYy5cclxuICAgICAgICBpZiAoIXJlc1ZhbC5Cb29sVmFsKSB7XHJcbiAgICAgICAgICBsZXQgY3VyclJlYzogUmVjb3JkID0gKDxEYXRhVmlldz50c2suRGF0YVZpZXcpLmdldEN1cnJSZWMoKTtcclxuICAgICAgICAgIGxldCBvcmlnaW5hbFJlYzogUmVjb3JkID0gKDxEYXRhVmlldz50c2suRGF0YVZpZXcpLmdldE9yaWdpbmFsUmVjKCk7XHJcbiAgICAgICAgICAvLyBjb21wYXJlIGZpZWxkcyBiZXR3ZWVuIGN1cnJlbnQgcmVjb3JkIGFuZCBvcmlnaW5hbCByZWNvcmQuIGNvbXBhcmUgb25seSBmaWVsZHMgdGhhdCBhcmUgcGFydCBvZiBkYXRhIHZpZXcuXHJcbiAgICAgICAgICByZXNWYWwuQm9vbFZhbCA9ICFjdXJyUmVjLmlzU2FtZVJlY0RhdGEob3JpZ2luYWxSZWMsIHRydWUsIHRydWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByZXNWYWwuQm9vbFZhbCA9IGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2VcclxuICAgICAgcmVzVmFsLkJvb2xWYWwgPSBmYWxzZTtcclxuXHJcbiAgICByZXNWYWwuQXR0ciA9IFN0b3JhZ2VBdHRyaWJ1dGUuQk9PTEVBTjtcclxuXHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGV2YWxfb3BfbGV2ZWwocmVzVmFsOiBFeHBWYWwsIHZhbDE6IEV4cFZhbCk6IHZvaWQge1xyXG4gICAgbGV0IG91dHN0cjogc3RyaW5nID0gJyc7XHJcblxyXG4gICAgaWYgKHZhbDEuTWdOdW1WYWwgPT09IG51bGwpIHtcclxuICAgICAgc3VwZXIuU2V0TlVMTChyZXNWYWwsIFN0b3JhZ2VBdHRyaWJ1dGUuQUxQSEEpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBsZXQgcGFyZW50OiBudW1iZXIgPSB2YWwxLk1nTnVtVmFsLk5VTV8yX0xPTkcoKTtcclxuICAgIGlmICgocGFyZW50ID49IDAgJiYgcGFyZW50IDwgKCg8VGFza0Jhc2U+dGhpcy5FeHBUYXNrKS5nZXRUYXNrRGVwdGgoZmFsc2UpKSkgfHwgcGFyZW50ID09PSBFeHByZXNzaW9uRXZhbHVhdG9yLlRSSUdHRVJfVEFTSykge1xyXG4gICAgICBsZXQgdHNrOiBUYXNrQmFzZSA9IDxUYXNrQmFzZT4gc3VwZXIuR2V0Q29udGV4dFRhc2socGFyZW50KTtcclxuICAgICAgb3V0c3RyID0gdHNrLmdldEJya0xldmVsKCk7XHJcblxyXG4gICAgICAvKlxyXG4gICAgICAgKiBDaGVjayB0aGUgbGV2ZWwgb2YgdGhlIGdlbmVyYXRpb24gdGFzay5cclxuICAgICAgICogQS4gSWYgaXQgaXMgbm90IFJNLCByZXR1cm4gdGhlIGhhbmRsZXIgdGV4dC5cclxuICAgICAgICogQi4gSWYgaXQgaXMgUk0sIHRoZW4gd2UgaGF2ZSAzIGRpZmZlcmVudCBzaXR1YXRpb25zOlxyXG4gICAgICAgKiAxLiBJZiB0aGUgZ2VuZXJhdGlvbiB0YXNrIGlzIE1haW4gUHJvZ3JhbSwgcmV0dXJuIFwiTVBcIi5cclxuICAgICAgICogMi4gSWYgdGhlIGdlbmVyYXRpb24gdGFzayBpcyBhIHRhc2sgd2hvc2UgaW1tZWRpYXRlIGNhbGxlZCB0YXNrIChpbiB0aGUgcnVudGltZSB0YXNrIHRyZWUpIGlzIGEgU3ViRm9ybSwgcmV0dXJuIFwiU1VCRk9STVwiLlxyXG4gICAgICAgKiAzLiBJbiBhbnkgb3RoZXIgY2FzZSwgcmV0dXJuIHRoZSBoYW5kbGVyIHRleHQuXHJcbiAgICAgICAqL1xyXG4gICAgICBpZiAocGFyZW50ICE9PSBFeHByZXNzaW9uRXZhbHVhdG9yLlRSSUdHRVJfVEFTSyAmJiB0c2sgIT09IHRoaXMuRXhwVGFzaykge1xyXG4gICAgICAgIGlmIChvdXRzdHIudG9VcHBlckNhc2UoKSA9PT0gQ29uc3RJbnRlcmZhY2UuQlJLX0xFVkVMX1JFQ19NQUlOLnRvVXBwZXJDYXNlKCkpIHtcclxuICAgICAgICAgIGlmICh0c2suaXNNYWluUHJvZygpKSB7XHJcbiAgICAgICAgICAgIG91dHN0ciA9IENvbnN0SW50ZXJmYWNlLkJSS19MRVZFTF9NQUlOX1BST0c7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBsZXQgdHNrVHJlZTogVGFza0Jhc2VbXSA9IG5ldyBBcnJheTxUYXNrQmFzZT4oKCg8VGFza0Jhc2U+dGhpcy5FeHBUYXNrKS5nZXRUYXNrRGVwdGgoZmFsc2UpKSk7XHJcbiAgICAgICAgICAgIGZvciAobGV0IF9haTogbnVtYmVyID0gMDsgX2FpIDwgdHNrVHJlZS5sZW5ndGg7ICsrX2FpKVxyXG4gICAgICAgICAgICAgIHRza1RyZWVbX2FpXSA9IG51bGw7XHJcbiAgICAgICAgICAgICg8VGFza0Jhc2U+dGhpcy5FeHBUYXNrKS5wYXRoVG9Sb290KHRza1RyZWUsIGZhbHNlKTtcclxuXHJcbiAgICAgICAgICAgIGlmIChwYXJlbnQgPiAwICYmIHRza1RyZWVbcGFyZW50IC0gMV0uSXNTdWJGb3JtKVxyXG4gICAgICAgICAgICAgIG91dHN0ciA9IENvbnN0SW50ZXJmYWNlLkJSS19MRVZFTF9TVUJGT1JNO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmVzVmFsLlN0clZhbCA9IG91dHN0cjtcclxuICAgIHJlc1ZhbC5BdHRyID0gU3RvcmFnZUF0dHJpYnV0ZS5BTFBIQTtcclxuICB9XHJcblxyXG5cclxuICAvLyBnZXQgdGhlIHRhc2sncyBjb3VudGVyIChieSB0YXNrIGdlbmVyYXRpb24pLlxyXG4gIHByaXZhdGUgZXZhbF9vcF9jb3VudGVyKHJlc1ZhbDogRXhwVmFsLCB2YWwxOiBFeHBWYWwpOiB2b2lkIHtcclxuICAgIGxldCBudW06IG51bWJlciA9IDA7XHJcbiAgICBsZXQgcGFyZW50OiBudW1iZXIgPSB2YWwxLk1nTnVtVmFsLk5VTV8yX0xPTkcoKTtcclxuICAgIGlmICgocGFyZW50ID49IDAgJiYgcGFyZW50IDwgKDxUYXNrQmFzZT50aGlzLkV4cFRhc2spLmdldFRhc2tEZXB0aChmYWxzZSkpIHx8IHBhcmVudCA9PT0gRXhwcmVzc2lvbkV2YWx1YXRvci5UUklHR0VSX1RBU0spIHtcclxuICAgICAgbGV0IHRhc2s6IFRhc2tCYXNlID0gPFRhc2tCYXNlPiBzdXBlci5HZXRDb250ZXh0VGFzayhwYXJlbnQpO1xyXG4gICAgICBudW0gPSA8bnVtYmVyPigodGFzayA9PT0gbnVsbCkgPyAwIDogdGFzay5nZXRDb3VudGVyKCkpO1xyXG4gICAgfVxyXG4gICAgcmVzVmFsLkF0dHIgPSBTdG9yYWdlQXR0cmlidXRlLk5VTUVSSUM7XHJcbiAgICByZXNWYWwuTWdOdW1WYWwgPSBuZXcgTlVNX1RZUEUoKTtcclxuICAgIHJlc1ZhbC5NZ051bVZhbC5OVU1fNF9MT05HKDxudW1iZXI+bnVtKTtcclxuICB9XHJcblxyXG4gIGV2YWxfb3BfZW1wdHlEYXRhdmlldyhyZXNWYWw6IEV4cFZhbCwgdmFsMTogRXhwVmFsKTogdm9pZCB7XHJcbiAgICBsZXQgcmV0OiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBsZXQgcGFyZW50OiBudW1iZXIgPSB2YWwxLk1nTnVtVmFsLk5VTV8yX0xPTkcoKTtcclxuICAgIGlmICgocGFyZW50ID49IDAgJiYgcGFyZW50IDwgKDxUYXNrQmFzZT50aGlzLkV4cFRhc2spLmdldFRhc2tEZXB0aChmYWxzZSkpIHx8IHBhcmVudCA9PT0gRXhwcmVzc2lvbkV2YWx1YXRvci5UUklHR0VSX1RBU0spIHtcclxuICAgICAgbGV0IHRzazogVGFza0Jhc2UgPSA8VGFza0Jhc2U+IHN1cGVyLkdldENvbnRleHRUYXNrKHBhcmVudCk7XHJcbiAgICAgIGlmICh0c2sgIT09IG51bGwgJiYgdHNrLkRhdGFWaWV3LmlzRW1wdHlEYXRhdmlldygpKVxyXG4gICAgICAgIHJldCA9IHRydWU7XHJcbiAgICB9XHJcbiAgICByZXNWYWwuQXR0ciA9IFN0b3JhZ2VBdHRyaWJ1dGUuQk9PTEVBTjtcclxuICAgIHJlc1ZhbC5Cb29sVmFsID0gcmV0O1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vL1xyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwicmVzVmFsXCI+PC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJ2YWwxXCI+PC9wYXJhbT5cclxuICBwcml2YXRlIGV2YWxfb3BfbWFpbmxldmVsKHJlc1ZhbDogRXhwVmFsLCB2YWwxOiBFeHBWYWwpOiB2b2lkIHtcclxuICAgIGxldCBvdXRzdHI6IHN0cmluZyA9ICcnO1xyXG5cclxuICAgIGlmICh2YWwxLk1nTnVtVmFsID09PSBudWxsKSB7XHJcbiAgICAgIHN1cGVyLlNldE5VTEwocmVzVmFsLCBTdG9yYWdlQXR0cmlidXRlLkFMUEhBKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBwYXJlbnQ6IG51bWJlciA9IHZhbDEuTWdOdW1WYWwuTlVNXzJfTE9ORygpO1xyXG4gICAgaWYgKChwYXJlbnQgPj0gMCAmJiBwYXJlbnQgPCAoKDxUYXNrQmFzZT50aGlzLkV4cFRhc2spLmdldFRhc2tEZXB0aChmYWxzZSkpKSB8fCBwYXJlbnQgPT09IEV4cHJlc3Npb25FdmFsdWF0b3IuVFJJR0dFUl9UQVNLKSB7XHJcbiAgICAgIGxldCB0c2s6IFRhc2tCYXNlID0gPFRhc2tCYXNlPiBzdXBlci5HZXRDb250ZXh0VGFzayhwYXJlbnQpO1xyXG4gICAgICBvdXRzdHIgPSB0c2suZ2V0TWFpbkxldmVsKCk7XHJcbiAgICB9XHJcbiAgICByZXNWYWwuU3RyVmFsID0gb3V0c3RyO1xyXG4gICAgcmVzVmFsLkF0dHIgPSBTdG9yYWdlQXR0cmlidXRlLkFMUEhBO1xyXG4gIH1cclxuXHJcblxyXG4gIHByaXZhdGUgZXZhbF9vcF9tYWluZGlzcGxheShyZXNWYWw6IEV4cFZhbCwgdmFsMTogRXhwVmFsKTogdm9pZCB7XHJcbiAgICBsZXQgbWFpbkRzcElkeDogbnVtYmVyID0gMDtcclxuICAgIGlmICh2YWwxLk1nTnVtVmFsID09PSBudWxsKSB7XHJcbiAgICAgIHN1cGVyLlNldE5VTEwocmVzVmFsLCBTdG9yYWdlQXR0cmlidXRlLk5VTUVSSUMpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IHBhcmVudDogbnVtYmVyID0gdmFsMS5NZ051bVZhbC5OVU1fMl9MT05HKCk7XHJcblxyXG4gICAgaWYgKChwYXJlbnQgPj0gMCAmJiBwYXJlbnQgPCAoKDxUYXNrQmFzZT50aGlzLkV4cFRhc2spLmdldFRhc2tEZXB0aChmYWxzZSkpKSB8fCBwYXJlbnQgPT09IEV4cHJlc3Npb25FdmFsdWF0b3IuVFJJR0dFUl9UQVNLKSB7XHJcbiAgICAgIGxldCB0c2s6IFRhc2tCYXNlID0gPFRhc2tCYXNlPiBzdXBlci5HZXRDb250ZXh0VGFzayhwYXJlbnQpO1xyXG4gICAgICBtYWluRHNwSWR4ID0gKHRzay5nZXRQcm9wKFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX01BSU5fRElTUExBWSkpLkdldENvbXB1dGVkVmFsdWVJbnRlZ2VyKCk7XHJcbiAgICB9XHJcbiAgICBzdXBlci5Db25zdHJ1Y3RNYWdpY051bShyZXNWYWwsIG1haW5Ec3BJZHgsIFN0b3JhZ2VBdHRyaWJ1dGUuTlVNRVJJQyk7XHJcbiAgfVxyXG5cclxuXHJcbiAgcHJpdmF0ZSBldmFsX29wX0lzRmlyc3RSZWNvcmRDeWNsZShyZXNWYWw6IEV4cFZhbCwgdmFsMTogRXhwVmFsKTogdm9pZCB7XHJcbiAgICBsZXQgaXNGaXJzdFJlY0N5Y2xlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBpZiAodmFsMS5NZ051bVZhbCA9PT0gbnVsbCkge1xyXG4gICAgICBzdXBlci5TZXROVUxMKHJlc1ZhbCwgU3RvcmFnZUF0dHJpYnV0ZS5BTFBIQSk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgcGFyZW50OiBudW1iZXIgPSB2YWwxLk1nTnVtVmFsLk5VTV8yX0xPTkcoKTtcclxuICAgIGlmICgocGFyZW50ID49IDAgJiYgcGFyZW50IDwgKCg8VGFza0Jhc2U+dGhpcy5FeHBUYXNrKS5nZXRUYXNrRGVwdGgoZmFsc2UpKSkgfHwgcGFyZW50ID09PSBFeHByZXNzaW9uRXZhbHVhdG9yLlRSSUdHRVJfVEFTSykge1xyXG4gICAgICBsZXQgdHNrOiBUYXNrQmFzZSA9IDxUYXNrQmFzZT4gc3VwZXIuR2V0Q29udGV4dFRhc2socGFyZW50KTtcclxuICAgICAgaXNGaXJzdFJlY0N5Y2xlID0gdHNrLmlzRmlyc3RSZWNvcmRDeWNsZSgpO1xyXG4gICAgfVxyXG4gICAgcmVzVmFsLkJvb2xWYWwgPSBpc0ZpcnN0UmVjQ3ljbGU7XHJcbiAgICByZXNWYWwuQXR0ciA9IFN0b3JhZ2VBdHRyaWJ1dGUuQk9PTEVBTjtcclxuXHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJyZXNWYWxcIj48L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cInZhbDFcIj48L3BhcmFtPlxyXG4gIHByaXZhdGUgZXhwX2lzX2RlZmF1bHQocmVzVmFsOiBFeHBWYWwsIHZhbDE6IEV4cFZhbCk6IHZvaWQge1xyXG4gICAgcmVzVmFsLkF0dHIgPSBTdG9yYWdlQXR0cmlidXRlLkJPT0xFQU47XHJcbiAgICByZXNWYWwuQm9vbFZhbCA9IGZhbHNlO1xyXG4gICAgbGV0IGl0bTogbnVtYmVyID0gdmFsMS5NZ051bVZhbC5OVU1fMl9MT05HKCk7XHJcbiAgICAvLyBpdG0gc3RhcnRzIGZyb20gQS0+MSBidXQgdGhlIGFycmF5IHN0YXJ0cyBmcm9tIDAgLT4gaXRtLTFcclxuICAgIGxldCBmbGQ6IEZpZWxkID0gKCg8VGFza0Jhc2U+dGhpcy5FeHBUYXNrKS5jdGxfaXRtXzJfcGFyZW50X3ZlZShpdG0gLSAxKSk7XHJcbiAgICBpZiAoZmxkID09PSBudWxsKVxyXG4gICAgICByZXR1cm47XHJcblxyXG4gICAgLy8gUUNSIDkyODMwOCAtIGZvciB2ZWN0b3JzIGFzIHZlY3RvcnMgKCBub3QgcGVyIGNlbGwgb2YgdGhlIHZlY3RvcikgdGhlIEJlaGF2aW9yIGlzIHRoZSBzYW1lIGFzIGJsb2JzXHJcbiAgICAvLyB0aGF0IGlzIG51bGwgaXMgYWxsb3dlZCBhbmQgbnVsbCBpcyBkZWZhdWx0XHJcbiAgICBpZiAoZmxkLmlzTnVsbCgpICYmIChmbGQuaXNOdWxsRGVmYXVsdCgpIHx8IGZsZC5nZXRUeXBlKCkgPT09IFN0b3JhZ2VBdHRyaWJ1dGUuQkxPQl9WRUNUT1IpKVxyXG4gICAgICByZXNWYWwuQm9vbFZhbCA9IHRydWU7XHJcblxyXG4gICAgbGV0IHZhbDogc3RyaW5nID0gZmxkLmdldFZhbHVlKGZhbHNlKTtcclxuICAgIGxldCBkZWZWYWw6IHN0cmluZyA9IGZsZC5nZXREZWZhdWx0VmFsdWUoKTtcclxuICAgIGxldCB0eXBlOiBTdG9yYWdlQXR0cmlidXRlID0gZmxkLmdldFR5cGUoKTtcclxuXHJcbiAgICByZXNWYWwuQm9vbFZhbCA9IEV4cHJlc3Npb25FdmFsdWF0b3IubWdWYWxzRXF1YWwodmFsLCBmbGQuaXNOdWxsKCksIHR5cGUsIGRlZlZhbCwgZmxkLmlzTnVsbERlZmF1bHQoKSwgdHlwZSk7XHJcbiAgICAvLyB2YWx1ZSBub3QgZXF1aXZhbGVudCB0byBkZWZhdWx0IHZhbHVlIGZ1bmN0aW9uIHNob3VsZCByZXR1cm4gRkFMU0VcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gcmV0dXJuIHRydWUgaWYgdXNlciBpcyBsb2dnZWRuIGluXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJyZXNWYWxcIj48L3BhcmFtPlxyXG4gIHByaXZhdGUgZXZhbF9vcF9Jc0xvZ2dlZEluKHJlc1ZhbDogRXhwVmFsKTogdm9pZCB7XHJcbiAgICByZXNWYWwuQXR0ciA9IFN0b3JhZ2VBdHRyaWJ1dGUuQk9PTEVBTjtcclxuICAgIHJlc1ZhbC5Cb29sVmFsID0gVXNlckRldGFpbHMuSW5zdGFuY2UuZ2V0SXNMb2dnZWRJbigpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBldmFsX29wX2FwcG5hbWUocmVzVmFsOiBFeHBWYWwpOiB2b2lkIHtcclxuICAgIHJlc1ZhbC5BdHRyID0gU3RvcmFnZUF0dHJpYnV0ZS5BTFBIQTtcclxuICAgIHJlc1ZhbC5TdHJWYWwgPSBTZXJ2ZXJDb25maWcuSW5zdGFuY2UuZ2V0QXBwTmFtZSgpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vL1xyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwicmVzVmFsXCI+PC9wYXJhbT5cclxuICBwcml2YXRlIGV2YWxfb3BfcHJvZyhyZXNWYWw6IEV4cFZhbCk6IHZvaWQge1xyXG4gICAgcmVzVmFsLkF0dHIgPSBTdG9yYWdlQXR0cmlidXRlLkFMUEhBO1xyXG4gICAgcmVzVmFsLlN0clZhbCA9ICgoKDxUYXNrQmFzZT50aGlzLkV4cFRhc2spLnF1ZXJ5VGFza1BhdGgoKSkpLlRvU3RyaW5nKCk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJyZXNWYWxcIj48L3BhcmFtPlxyXG4gIHByaXZhdGUgZXZhbF9vcF90aGlzKHJlc1ZhbDogRXhwVmFsKTogdm9pZCB7XHJcbiAgICBsZXQgdHJpZ2dlclRhc2s6IFRhc2tCYXNlID0gPFRhc2tCYXNlPnRoaXMuRXhwVGFzaztcclxuICAgIGxldCBSZXN1bHQ6IG51bWJlciA9IDA7XHJcblxyXG4gICAgLy8gRVhQS0VSTl9wYXJlbnQgPSBFWFBLRVJOX3ZlZSA9IDA7XHJcblxyXG4gICAgaWYgKHRyaWdnZXJUYXNrICE9PSBudWxsKSB7XHJcbiAgICAgIC8vIEVYUEtFUk5fcGFyZW50ID0gVFJJR0dFUl9UQVNLO1xyXG4gICAgICBSZXN1bHQgPSBFeHByZXNzaW9uRXZhbHVhdG9yLlRSSUdHRVJfVEFTSztcclxuICAgIH1cclxuICAgIHN1cGVyLkNvbnN0cnVjdE1hZ2ljTnVtKHJlc1ZhbCwgUmVzdWx0LCBTdG9yYWdlQXR0cmlidXRlLk5VTUVSSUMpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJyZXNWYWxcIj48L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiUGFyZW50XCI+PC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcIk1vZGVzXCI+TU9ERSBsaXRlcmFsIGdpdmVuIGFzIG1vZGUgcGFyYW1ldGVyPC9wYXJhbT5cclxuICBwcml2YXRlIGV2YWxfb3Bfc3RhdChyZXNWYWw6IEV4cFZhbCwgUGFyZW50OiBFeHBWYWwsIE1vZGVzOiBFeHBWYWwpOiB2b2lkIHtcclxuICAgIGxldCBSZXQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIGxldCBpUGFyZW50OiBudW1iZXIgPSBQYXJlbnQuTWdOdW1WYWwuTlVNXzJfTE9ORygpO1xyXG4gICAgaWYgKChpUGFyZW50ID49IDAgJiYgaVBhcmVudCA8ICAoKDxUYXNrQmFzZT50aGlzLkV4cFRhc2spLmdldFRhc2tEZXB0aChmYWxzZSkpKSB8fCBpUGFyZW50ID09PSBFeHByZXNzaW9uRXZhbHVhdG9yLlRSSUdHRVJfVEFTSykge1xyXG4gICAgICBsZXQgVHNrOiBUYXNrQmFzZSA9IDxUYXNrQmFzZT4gc3VwZXIuR2V0Q29udGV4dFRhc2soaVBhcmVudCk7XHJcbiAgICAgIGlmIChUc2sgIT09IG51bGwpIHtcclxuICAgICAgICBsZXQgdHNrTW9kZTogc3RyaW5nID0gKFRzay5nZXRNb2RlKCkpLnRvVXBwZXJDYXNlKCk7XHJcbiAgICAgICAgZm9yIChsZXQgaTogbnVtYmVyID0gMDsgaSA8IE1vZGVzLlN0clZhbC5sZW5ndGg7IGkgPSBpICsgMSkge1xyXG4gICAgICAgICAgbGV0IG1vZGU6IHN0cmluZyA9IE1vZGVzLlN0clZhbC5jaGFyQXQoaSkudG9VcHBlckNhc2UoKTtcclxuICAgICAgICAgIGxldCBjb2RlOiBzdHJpbmcgPSB0aGlzLmNzdF9jb2RlX3RyYW5zX2J1ZignSScsICdNQ0RFUExSS1NPTkInLCBtb2RlLCBNc2dJbnRlcmZhY2UuRVhQVEFCX1RTS19NT0RFX1JUKTtcclxuXHJcbiAgICAgICAgICAvLyBjb2RlIG5vdCBmb3VuZCwgaXQgbWlnaHQgYmUgRW5nbGlzaCAoc2FtZSBhcyBpbiBvbmxpbmUpLlxyXG4gICAgICAgICAgaWYgKGNvZGUgPT09ICdcXDAnKSB7XHJcbiAgICAgICAgICAgIGNvZGUgPSBtb2RlLnRvVXBwZXJDYXNlKCk7XHJcbiAgICAgICAgICAgIGlmIChjb2RlID09PSAnUScpXHJcbiAgICAgICAgICAgICAgY29kZSA9ICdFJztcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmIChjb2RlID09PSB0c2tNb2RlKSB7XHJcbiAgICAgICAgICAgIFJldCA9IHRydWU7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmVzVmFsLkF0dHIgPSBTdG9yYWdlQXR0cmlidXRlLkJPT0xFQU47XHJcbiAgICByZXNWYWwuQm9vbFZhbCA9IFJldDtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gUmV0dXJucyBzdWJmb3JtIGV4ZWN1dGlvbiBtb2RlIGZvciB0aGUgdGFzayB3aXRoIHRoZSBjb3JyZXNwb25kaW5nIGdlbmVyYXRpb25cclxuICAvLy8gLTEgwoFFVGhlIHRhc2sgaXMgbm90IGV4ZWN1dGVkIGFzIGEgc3ViZm9ybVxyXG4gIC8vLyAgMCDCgUVUaGUgdGFzayBpcyBleGVjdXRlZCBieSBzZXR0aW5nIHRoZSBmb2N1cyBvbiBpdFxyXG4gIC8vLyAgMSDCgUVUaGUgc3VidGFzayBpcyBleGVjdXRlZCBmb3IgdGhlIGZpcnN0IHRpbWVcclxuICAvLy8gIDIgwoFFVGhlIHRhc2sgaXMgZXhlY3V0ZWQgYmVjYXVzZSB0aGUgQXV0b21hdGljIFJlZnJlc2ggcHJvcGVydHkgb3IgdGhlIFN1YmZvcm0gUmVmcmVzaCBldmVudCBoYXMgYmVlblxyXG4gIC8vLyAgICAgIHRyaWdnZXJlZC5cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cInJlc1ZhbFwiPjwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwiZ2VuZXJhdGlvblwiPjwvcGFyYW0+XHJcbiAgcHJpdmF0ZSBldmFsX29wX3N1YmZvcm1FeGVjTW9kZShyZXNWYWw6IEV4cFZhbCwgZ2VuZXJhdGlvbjogRXhwVmFsKTogdm9pZCB7XHJcbiAgICBsZXQgc3ViZm9ybUV4ZWNNb2RlOiBUYXNrX1N1YmZvcm1FeGVjTW9kZUVudW0gPSBUYXNrX1N1YmZvcm1FeGVjTW9kZUVudW0uTk9fU1VCRk9STTtcclxuICAgIGxldCBpUGFyZW50OiBudW1iZXIgPSBnZW5lcmF0aW9uLk1nTnVtVmFsLk5VTV8yX0xPTkcoKTtcclxuICAgIGlmICgoaVBhcmVudCA+PSAwICYmIGlQYXJlbnQgPCAoKDxUYXNrQmFzZT50aGlzLkV4cFRhc2spLmdldFRhc2tEZXB0aChmYWxzZSkpKSB8fCBpUGFyZW50ID09PSBFeHByZXNzaW9uRXZhbHVhdG9yLlRSSUdHRVJfVEFTSykge1xyXG4gICAgICBsZXQgdGFzazogVGFza0Jhc2UgPSA8VGFza0Jhc2U+IHN1cGVyLkdldENvbnRleHRUYXNrKGlQYXJlbnQpO1xyXG4gICAgICBpZiAodGFzayAhPT0gbnVsbCkge1xyXG4gICAgICAgIGlmICh0YXNrLklzU3ViRm9ybSlcclxuICAgICAgICAgIHN1YmZvcm1FeGVjTW9kZSA9IHRhc2suU3ViZm9ybUV4ZWNNb2RlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBzdXBlci5Db25zdHJ1Y3RNYWdpY051bShyZXNWYWwsIDxudW1iZXI+c3ViZm9ybUV4ZWNNb2RlLCBTdG9yYWdlQXR0cmlidXRlLk5VTUVSSUMpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBldmFsX29wX3ZhcnNldChyZXNWYWw6IEV4cFZhbCwgdmFsOiBFeHBWYWwsIG51bTogRXhwVmFsKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICAvLyBpbml0IHJldHVybmVkIHZhbHVlXHJcbiAgICByZXNWYWwuQm9vbFZhbCA9IHRydWU7XHJcbiAgICByZXNWYWwuQXR0ciA9IFN0b3JhZ2VBdHRyaWJ1dGUuQk9PTEVBTjtcclxuXHJcbiAgICBpZiAobnVtLk1nTnVtVmFsID09PSBudWxsKSB7XHJcbiAgICAgIC8vIHRoZSB2YXJzZXQgZnVuY3Rpb24gYWx3YXlzIHJldHVybnMgdHJ1ZS5cclxuICAgICAgLy8gU2V0TlVMTChyZXNWYWwsU1RPUkFHRV9BVFRSX0JPT0xFQU4pO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IGl0bTogbnVtYmVyID0gbnVtLk1nTnVtVmFsLk5VTV8yX0xPTkcoKTtcclxuXHJcbiAgICBsZXQgZmxkOiBGaWVsZCA9IHRoaXMuR2V0RmllbGRPZkNvbnRleHRUYXNrKGl0bSk7XHJcblxyXG4gICAgaWYgKGZsZCA9PT0gbnVsbCkge1xyXG4gICAgICByZXNWYWwuQm9vbFZhbCA9IGZhbHNlO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKFN0b3JhZ2VBdHRyaWJ1dGVDaGVjay5TdG9yYWdlRmxkQWxwaGFVbmljb2RlT3JCbG9iKGZsZC5nZXRUeXBlKCksIHZhbC5BdHRyKSlcclxuICAgICAgdGhpcy5Db252ZXJ0RXhwVmFsKHZhbCwgZmxkLmdldFR5cGUoKSk7XHJcblxyXG4gICAgbGV0IGJ1ZnB0cjogc3RyaW5nO1xyXG4gICAgaWYgKFN0b3JhZ2VBdHRyaWJ1dGVDaGVjay5pc1RoZVNhbWVUeXBlKGZsZC5nZXRUeXBlKCksIHZhbC5BdHRyKSkge1xyXG4gICAgICBzd2l0Y2ggKGZsZC5nZXRUeXBlKCkpIHtcclxuICAgICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuQUxQSEE6XHJcbiAgICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLlVOSUNPREU6XHJcbiAgICAgICAgICBidWZwdHIgPSB2YWwuU3RyVmFsO1xyXG4gICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5OVU1FUklDOlxyXG4gICAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5EQVRFOlxyXG4gICAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5USU1FOlxyXG4gICAgICAgICAgYnVmcHRyID0gdmFsLk1nTnVtVmFsLnRvWE1McmVjb3JkKCk7XHJcbiAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLkJPT0xFQU46XHJcbiAgICAgICAgICBidWZwdHIgPSB2YWwuQm9vbFZhbCA/ICcxJyA6ICcwJztcclxuICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuQkxPQjpcclxuICAgICAgICAgIGJ1ZnB0ciA9IHZhbC5Ub01nVmFsKCk7XHJcbiAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLkJMT0JfVkVDVE9SOlxyXG4gICAgICAgICAgYnVmcHRyID0gdmFsLlRvTWdWYWwoKTtcclxuXHJcbiAgICAgICAgICAvLyBRQ1IgNDQ4NjY4MlxyXG4gICAgICAgICAgaWYgKCF2YWwuSXNOdWxsKSB7XHJcbiAgICAgICAgICAgIC8vIGNoZWNrIGZvciB2YWxpZCB2ZWN0b3IgaW4gdGhlIGJsb2JcclxuICAgICAgICAgICAgaWYgKHZhbC5BdHRyID09PSBTdG9yYWdlQXR0cmlidXRlLkJMT0IpXHJcbiAgICAgICAgICAgICAgaWYgKCFWZWN0b3JUeXBlLnZhbGlkYXRlQmxvYkNvbnRlbnRzKHZhbC5TdHJWYWwpKVxyXG4gICAgICAgICAgICAgICAgYnVmcHRyID0gbnVsbDtcclxuXHJcbiAgICAgICAgICAgIGlmIChidWZwdHIgIT0gbnVsbClcclxuICAgICAgICAgICAgICBidWZwdHIgPSBPcGVyYXRpb24ub3BlclVwZGF0ZVZlY3RvcnMoZmxkLCBidWZwdHIpO1xyXG5cclxuICAgICAgICAgICAgaWYgKGJ1ZnB0ciAhPSBudWxsKVxyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBmYWxscyB0aHJvdWdoXHJcbiAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgIC8vIGNhbid0IGNvbWUgdG8gdGhpcyBwb2ludFxyXG4gICAgICAgICAgc3VwZXIuU2V0TlVMTChyZXNWYWwsIFN0b3JhZ2VBdHRyaWJ1dGUuQk9PTEVBTik7XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIC8vIGl0J3Mgbm90IHRoZSBzYW1lIHR5cGUgb2YgdGhlIGZpZWxkIGFuZCB2YWx1ZSA6XHJcbiAgICBlbHNlIHtcclxuICAgICAgLy8gZXZlcnkgZmllbGQgaGFzIHRvIGdldCBpdCdzIGRlZmF1bHQgdmFsdWVcclxuICAgICAgYnVmcHRyID0gZmxkLmdldERlZmF1bHRWYWx1ZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh2YWwuSXNOdWxsKSB7XHJcbiAgICAgIC8vIGdldCB0aGUgbnVsbCB2YWx1ZSBvciB0aGUgbWFnaWMgZGVmYXVsdCB2YWx1ZVxyXG4gICAgICBidWZwdHIgPSBmbGQuZ2V0TnVsbFZhbHVlKCk7XHJcbiAgICAgIGlmIChidWZwdHIgPT09IG51bGwpXHJcbiAgICAgICAgZmxkLmdldE1hZ2ljRGVmYXVsdFZhbHVlKCk7XHJcbiAgICB9XHJcbiAgICAvLyBRQ1IgOTg0NTYzIHZhciBzZXQgaW4gY3JlYXQgbW9kZSBzb3VsZCBub3QgY3JlYXQgYSBuZXcgcmVjb3JkXHJcbiAgICAvLyAjNzc3NzAwLiBUaGUgcmVjb3JkIHNob3VsZCBiZSBtYXJrZWQgYXMgdXBkYXRlZCBpZiB0aGUgZmllbGQncyB0YXNrIGFuZCB0aGUgZXhwcmVzc2lvbiB0YXNrIGFyZSBkaWZmZXJlbnQgb3JcclxuICAgIC8vIHRoZSBmaWVsZCdzIHRhc2sgaXMgaW4gUmVjb3JkIFN1ZmZpeC4gVGhpcyBpcyBzYW1lIGFzIE9MIChyZWZlciBSVDo6UG9zdFZlZVVwZGF0ZSBpbiB2ZXcuY3BwKS5cclxuICAgIGxldCBzZXRSZWNvcmRVcGRhdGVkOiBib29sZWFuID0gZmxkLmdldFRhc2soKSAhPT0gdGhpcy5FeHBUYXNrIHx8ICg8VGFza0Jhc2U+ZmxkLmdldFRhc2soKSkuZ2V0QnJrTGV2ZWwoKSA9PT0gQ29uc3RJbnRlcmZhY2UuQlJLX0xFVkVMX1JFQ19TVUZGSVg7XHJcblxyXG4gICAgYXdhaXQgZmxkLnNldFZhbHVlQW5kU3RhcnRSZWNvbXB1dGUoYnVmcHRyLCB2YWwuSXNOdWxsLCB0cnVlLCBzZXRSZWNvcmRVcGRhdGVkLCBmYWxzZSk7XHJcbiAgICBhd2FpdCBmbGQudXBkYXRlRGlzcGxheSgpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vL1xyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwicmVzVmFsXCI+PC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJzaG93TWVzc2FnZVwiPjwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwiZ2VuZXJhdGlvblwiPjwvcGFyYW0+XHJcbiAgcHJpdmF0ZSBhc3luYyBldmFsX29wX3JvbGxiYWNrKHJlc1ZhbDogRXhwVmFsLCBzaG93TWVzc2FnZTogRXhwVmFsLCBnZW5lcmF0aW9uOiBFeHBWYWwpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGxldCB0YXNrOiBUYXNrQmFzZSA9ICg8VGFza0Jhc2U+dGhpcy5FeHBUYXNrLkdldENvbnRleHRUYXNrKCkpIHx8ICg8VGFza0Jhc2U+dGhpcy5FeHBUYXNrKTtcclxuXHJcbiAgICAvLyBleGVjdXRlIHJvbGxiYWNrIGNvbW1hbmRcclxuICAgIGF3YWl0IEFjY2Vzc0hlbHBlci5ldmVudHNNYW5hZ2VyLmhhbmRsZUludGVybmFsRXZlbnRXaXRoVGFzayh0YXNrLCBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfUk9MTEJBQ0spO1xyXG5cclxuICAgIHJlc1ZhbC5BdHRyID0gU3RvcmFnZUF0dHJpYnV0ZS5CT09MRUFOO1xyXG4gICAgcmVzVmFsLkJvb2xWYWwgPSB0cnVlOyAvLyBpbiB0aGUgc2VydmVyIHdlIHJldHVybiBhbHdlcyB0cnVlXHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJzb3VyY2VcIj48L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cIm1hc2tPcmdcIj48L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cInJlc1ZhbFwiPjwvcGFyYW0+XHJcbiAgcHJpdmF0ZSBldmFsX29wX2xpa2Uoc291cmNlOiBFeHBWYWwsIG1hc2tPcmc6IEV4cFZhbCwgcmVzVmFsOiBFeHBWYWwpOiB2b2lkIHtcclxuICAgIGxldCBpOiBudW1iZXI7XHJcbiAgICBsZXQgajogbnVtYmVyO1xyXG4gICAgbGV0IFNvdXJjZTogc3RyaW5nID0gc291cmNlLlN0clZhbDtcclxuICAgIGxldCBNYXNrT3JnOiBzdHJpbmcgPSBtYXNrT3JnLlN0clZhbDtcclxuICAgIGxldCBhc3Rlcmlza0NudDogbnVtYmVyID0gMDsgLy8gY291bnRlciBvZiAnKicgaW4gdGhlIHNvdXJjZSBzdHJpbmdcclxuICAgIGxldCBTYW1lOiBib29sZWFuID0gdHJ1ZTtcclxuICAgIGxldCBlc2NfY2g6IGJvb2xlYW47XHJcbiAgICBpZiAoU291cmNlID09PSBudWxsIHx8IE1hc2tPcmcgPT09IG51bGwpIHtcclxuICAgICAgc3VwZXIuU2V0TlVMTChyZXNWYWwsIFN0b3JhZ2VBdHRyaWJ1dGUuQk9PTEVBTik7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGxldCBTb3VyY2VMZW46IG51bWJlciA9IFNvdXJjZS5sZW5ndGg7XHJcbiAgICBsZXQgTWFza0xlbjogbnVtYmVyID0gTWFza09yZy5sZW5ndGg7XHJcbiAgICBsZXQgTWFzayA9IG5ldyBBcnJheShNYXNrTGVuKTtcclxuICAgIGxldCBidWZmZXIgPSBuZXcgU3RyaW5nQnVpbGRlcihNYXNrTGVuKTtcclxuXHJcbiAgICAvLyBDaGFuZ2UgaW4gdGhlIG1hc2sgJ1xcXFwnIC0+ICdcXCcsICdcXConIC0+ICcqJywgJ1xcPycgLT4gJz8nLFxyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnKicgLT4gQVNURVJJU0tfQ0hSLCAnPycgLT4gUVVFU1RJT05fQ0hSXHJcbiAgICBmb3IgKGkgPSAwLCBqID0gMCwgZXNjX2NoID0gZmFsc2U7IGkgPCBNYXNrTGVuOyBpKyspIHtcclxuICAgICAgbGV0IGN1cnJDaHI6IHN0cmluZyA9IE1hc2tPcmdbaV07XHJcbiAgICAgIHN3aXRjaCAoY3VyckNocikge1xyXG4gICAgICAgIGNhc2UgJ1xcXFwnOlxyXG4gICAgICAgICAgaWYgKGVzY19jaClcclxuICAgICAgICAgICAgTWFza1tqKytdID0gY3VyckNocjtcclxuICAgICAgICAgIGVzY19jaCA9ICFlc2NfY2g7XHJcbiAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgY2FzZSAnKic6XHJcbiAgICAgICAgICBpZiAoZXNjX2NoKVxyXG4gICAgICAgICAgICBNYXNrW2orK10gPSBjdXJyQ2hyO1xyXG4gICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIE1hc2tbaisrXSA9IEV4cHJlc3Npb25FdmFsdWF0b3IuQVNURVJJU0tfQ0hSO1xyXG4gICAgICAgICAgICBhc3Rlcmlza0NudCsrO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZXNjX2NoID0gZmFsc2U7XHJcbiAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgY2FzZSAnPyc6XHJcbiAgICAgICAgICBNYXNrW2orK10gPSBlc2NfY2ggPyBjdXJyQ2hyIDogRXhwcmVzc2lvbkV2YWx1YXRvci5RVUVTVElPTl9DSFI7XHJcbiAgICAgICAgICBlc2NfY2ggPSBmYWxzZTtcclxuICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgTWFza1tqKytdID0gY3VyckNocjtcclxuICAgICAgICAgIGVzY19jaCA9IGZhbHNlO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIE1hc2tMZW4gPSBqO1xyXG4gICAgTWFza09yZyA9IEV4cHJlc3Npb25FdmFsdWF0b3IuYXJyVG9TdHIoTWFzaywgMCwgTWFzay5sZW5ndGgpO1xyXG4gICAgLy8gMS4gRmluZCB0aGUgbGFzdCAnKidcclxuICAgIGxldCBhc3RfbGFzdF9wdHI6IG51bWJlciA9IE1hc2tPcmcubGFzdEluZGV4T2YoRXhwcmVzc2lvbkV2YWx1YXRvci5BU1RFUklTS19DSFIpO1xyXG5cclxuICAgIGlmIChhc3RfbGFzdF9wdHIgPT09IC0xKVxyXG4gICAgLy8gMi4gSW4gdGhlIGNhc2U6IHRoZXJlIGlzIG5vdCBhbnkgJyonXHJcbiAgICAgIFNhbWUgPSBFeHByZXNzaW9uRXZhbHVhdG9yLm9wX2xpa2VfY21wKFNvdXJjZSwgTWFza09yZyk7XHJcbiAgICBlbHNlIHtcclxuICAgICAgLy8gMi4gSW4gdGhlIGNhc2U6IHRoZXJlIGFyZSBvbmUgb3IgbW9yZSAnKidcclxuICAgICAgLy8gMi4xIENvbXBhcmUgdGhlIHBpZWNlIG9mIHRoZSBzdHJpbmcgYmVmb3JlIHRoZSBmaXJzdCAnKidcclxuICAgICAgZm9yIChpID0gMDsgTWFza1tpXSAhPT0gRXhwcmVzc2lvbkV2YWx1YXRvci5BU1RFUklTS19DSFIgJiYgU2FtZTsgaSsrLCBNYXNrTGVuLS0sIFNvdXJjZUxlbi0tKSB7XHJcbiAgICAgICAgaWYgKFNvdXJjZUxlbiA9PT0gMClcclxuICAgICAgICAgIFNhbWUgPSBmYWxzZTtcclxuICAgICAgICBlbHNlIFNhbWUgPSAoTWFza1tpXSA9PT0gRXhwcmVzc2lvbkV2YWx1YXRvci5RVUVTVElPTl9DSFIgPyB0cnVlIDogTWFza1tpXSA9PT0gU291cmNlW2ldKTtcclxuICAgICAgfVxyXG4gICAgICAvLyBpIC0gaXMgaW5kZXggb2YgZmlyc3QgJyonIGluIHRoZSBtYXNrXHJcbiAgICAgIFNvdXJjZSA9IFNvdXJjZS5zdWJzdHIoaSk7XHJcbiAgICAgIE1hc2sgPSBFeHByZXNzaW9uRXZhbHVhdG9yLmN1dEFycmF5KE1hc2ssIGkpO1xyXG5cclxuICAgICAgLy8gMi4yIENvbXBhcmUgdGhlIGFsbCBwaWVjZXMgYmV0d2VlbiB0aGUgJyonIGFuZCAnKidcclxuICAgICAgd2hpbGUgKFNhbWUgJiYgYXN0ZXJpc2tDbnQgIT09IDEpIHtcclxuICAgICAgICBsZXQgYXN0X3B0cjogbnVtYmVyO1xyXG4gICAgICAgIGxldCB0bXBfbGVuOiBudW1iZXI7XHJcbiAgICAgICAgZm9yIChhc3RfcHRyID0gMSwgdG1wX2xlbiA9IDA7IGFzdF9wdHIgKyBpICE9PSBhc3RfbGFzdF9wdHI7IGFzdF9wdHIrKyAsIHRtcF9sZW4rKylcclxuICAgICAgICAgIGlmIChNYXNrW2FzdF9wdHJdID09PSBFeHByZXNzaW9uRXZhbHVhdG9yLkFTVEVSSVNLX0NIUilcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgYXN0ZXJpc2tDbnQtLTtcclxuICAgICAgICBTb3VyY2VMZW4gPSBTb3VyY2UubGVuZ3RoO1xyXG4gICAgICAgIC8vIGFzdF9wdHIgLSBpbmRleCBvZiBuZXh0ICcqJyAobm90IGZpcnN0IGFuZCBub3QgbGFzdClcclxuXHJcbiAgICAgICAgaWYgKHRtcF9sZW4gIT09IDApIHtcclxuICAgICAgICAgIC8vIG5leHQgaW5kZXggb2YgJyonIGZvdW5kXHJcbiAgICAgICAgICBpZiAoU291cmNlTGVuID4gMClcclxuICAgICAgICAgIC8vIHRoZXJlIGlzIHN0aWxsIG1lbWJlcnMgaW4gc291cmNlXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIGJ1ZmZlci5SZW1vdmUoMCwgYnVmZmVyLkxlbmd0aCk7XHJcbiAgICAgICAgICAgIGJ1ZmZlci5BcHBlbmQoU291cmNlKTtcclxuICAgICAgICAgICAgU2FtZSA9IEV4cHJlc3Npb25FdmFsdWF0b3Iub3BfbGlrZV9tYXAoYnVmZmVyLCBFeHByZXNzaW9uRXZhbHVhdG9yLmFyclRvU3RyKE1hc2ssIDEsIHRtcF9sZW4gKyAxKSwgZmFsc2UpO1xyXG4gICAgICAgICAgICBTb3VyY2UgPSBidWZmZXIuVG9TdHJpbmcoKTtcclxuICAgICAgICAgIH0gZWxzZSBTYW1lID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGkgKz0gYXN0X3B0cjsgLy8gbW92ZSAncG9pbnRlcicgdG8gdGhlIG5leHQgcGllY2Ugb2Ygc3RyaW5nIChiZXR3ZWVuIDIgYXN0ZXJpc2tzKVxyXG4gICAgICAgIE1hc2sgPSBFeHByZXNzaW9uRXZhbHVhdG9yLmN1dEFycmF5KE1hc2ssIGFzdF9wdHIpO1xyXG4gICAgICB9IC8vIGVuZCBvZiB3aGlsZVxyXG5cclxuICAgICAgaWYgKE1hc2tbMF0gPT09IEV4cHJlc3Npb25FdmFsdWF0b3IuQVNURVJJU0tfQ0hSKVxyXG4gICAgICAvLyBkZWxldGUgbGFzdCAnKidcclxuICAgICAgICBNYXNrID0gRXhwcmVzc2lvbkV2YWx1YXRvci5jdXRBcnJheShNYXNrLCAxKTtcclxuXHJcbiAgICAgIC8vIDIuMyBDb21wYXJlIHRoZSBwaWVjZSBvZiB0aGUgc3RyaW5nIGFmdGVyIHRoZSBsYXN0ICcqJ1xyXG4gICAgICBpZiAoU2FtZSAmJiAoTWFzay5sZW5ndGggPiAwKSkge1xyXG4gICAgICAgIGJ1ZmZlci5SZW1vdmUoMCwgYnVmZmVyLkxlbmd0aCk7XHJcbiAgICAgICAgYnVmZmVyLkFwcGVuZChTb3VyY2UpO1xyXG4gICAgICAgIFNhbWUgPSBFeHByZXNzaW9uRXZhbHVhdG9yLm9wX2xpa2VfbWFwKGJ1ZmZlciwgRXhwcmVzc2lvbkV2YWx1YXRvci5hcnJUb1N0cihNYXNrKSwgdHJ1ZSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJlc1ZhbC5BdHRyID0gU3RvcmFnZUF0dHJpYnV0ZS5CT09MRUFOO1xyXG4gICAgcmVzVmFsLkJvb2xWYWwgPSBTYW1lO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIGN1dCBzb3VyY2UgYXJyYXkgZnJvbSBzcGVjaWFsIG1lbWJlclxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJzb3VyY2VcIj5hcnJheSwgdG8gY3V0IGl0PC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImZyb21cIj50byBjdXQgYWxsIG1lbWJlciBiZWZvcmUgaXQgaW4gYXJyYXk8L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz4gY3V0dGVkIGFycmF5PC9yZXR1cm5zPlxyXG4gIHByaXZhdGUgc3RhdGljIGN1dEFycmF5KHNvdXJjZTogc3RyaW5nW10sIGZyb206IG51bWJlcik6IHN0cmluZ1tdIHtcclxuICAgIGxldCBsZW5ndGg6IG51bWJlciA9IHNvdXJjZS5sZW5ndGggLSBmcm9tO1xyXG4gICAgbGV0IGJ1ZmZlcjogc3RyaW5nW10gPSBuZXcgQXJyYXk8c3RyaW5nPihsZW5ndGgpO1xyXG4gICAgZm9yIChsZXQgY3VycjogbnVtYmVyID0gMDsgY3VyciA8IGxlbmd0aDsgY3VycisrKVxyXG4gICAgICBidWZmZXJbY3Vycl0gPSBzb3VyY2VbZnJvbSArIGN1cnJdO1xyXG4gICAgcmV0dXJuIGJ1ZmZlcjtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBpbXBsZW1lbnRzIFJlcFN0clxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgcHJpdmF0ZSBldmFsX29wX3JlcHN0cihzb3VyY2U6IEV4cFZhbCwgb3JnU3Vic3RyOiBFeHBWYWwsIG5ld1N1YnN0cjogRXhwVmFsLCByZXNWYWw6IEV4cFZhbCk6IHZvaWQge1xyXG4gICAgaWYgKHNvdXJjZS5TdHJWYWwgPT09IG51bGwgfHwgb3JnU3Vic3RyLlN0clZhbCA9PT0gbnVsbCB8fCBuZXdTdWJzdHIuU3RyVmFsID09PSBudWxsIHx8ICFTdG9yYWdlQXR0cmlidXRlQ2hlY2suSXNUeXBlQWxwaGFPclVuaWNvZGUoc291cmNlLkF0dHIpIHx8ICFTdG9yYWdlQXR0cmlidXRlQ2hlY2suSXNUeXBlQWxwaGFPclVuaWNvZGUob3JnU3Vic3RyLkF0dHIpIHx8ICFTdG9yYWdlQXR0cmlidXRlQ2hlY2suSXNUeXBlQWxwaGFPclVuaWNvZGUobmV3U3Vic3RyLkF0dHIpKSB7XHJcbiAgICAgIHN1cGVyLlNldE5VTEwocmVzVmFsLCBTdG9yYWdlQXR0cmlidXRlLlVOSUNPREUpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgcmVzVmFsLlN0clZhbCA9IE5TdHJpbmcuUmVwbGFjZShzb3VyY2UuU3RyVmFsLCBvcmdTdWJzdHIuU3RyVmFsLCBuZXdTdWJzdHIuU3RyVmFsKTtcclxuICAgIHJlc1ZhbC5BdHRyID0gU3RvcmFnZUF0dHJpYnV0ZS5VTklDT0RFO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzdGF0aWMgYXJyVG9TdHIoYXJyOiBzdHJpbmdbXSk6IHN0cmluZztcclxuICBwcml2YXRlIHN0YXRpYyBhcnJUb1N0cihhcnI6IHN0cmluZ1tdLCBmcm9tOiBudW1iZXIsIHRvOiBudW1iZXIpOiBzdHJpbmc7XHJcbiAgcHJpdmF0ZSBzdGF0aWMgYXJyVG9TdHIoYXJyOiBhbnksIGZyb20/OiBudW1iZXIsIHRvPzogbnVtYmVyKTogc3RyaW5nIHtcclxuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAxKVxyXG4gICAgICByZXR1cm4gRXhwcmVzc2lvbkV2YWx1YXRvci5hcnJUb1N0cl8wKGFycik7XHJcbiAgICBlbHNlXHJcbiAgICAgIHJldHVybiBFeHByZXNzaW9uRXZhbHVhdG9yLmFyclRvU3RyXzEoYXJyLCBmcm9tLCB0byk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgTWFrZSBzdHJpbmcgZnJvbSBhcnJheSBvZiBjaGFyYWN0ZXJzXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImFyclwiPnRvIG1ha2Ugc3RyaW5nIGZyb208L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz4gc3RyaW5nIGNvbnRhaW5zIGFsbCBjaGFyYWN0ZXJzIGZyb20gdGhlIGFycmF5PC9yZXR1cm5zPlxyXG4gIHByaXZhdGUgc3RhdGljIGFyclRvU3RyXzAoYXJyOiBzdHJpbmdbXSk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gRXhwcmVzc2lvbkV2YWx1YXRvci5hcnJUb1N0cihhcnIsIDAsIGFyci5sZW5ndGgpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIE1ha2Ugc3RyaW5nIGZyb20gYXJyYXkgb2YgY2hhcmFjdGVyc1xyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJhcnJcIj50byBtYWtlIHN0cmluZyBmcm9tPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImZyb21cIj50byBzdGFydCBjb3B5IGZyb20gYXJyYXk8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwidG9cIj50byBmaW5pc2ggY29weSBmcm9tIGFycmF5PC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+IHN0cmluZyBjb250YWlucyBhbGwgY2hhcmFjdGVycyBmcm9tIHRoZSBhcnJheTwvcmV0dXJucz5cclxuICBwcml2YXRlIHN0YXRpYyBhcnJUb1N0cl8xKGFycjogc3RyaW5nW10sIGZyb206IG51bWJlciwgdG86IG51bWJlcik6IHN0cmluZyB7XHJcbiAgICBsZXQgYnVmZmVyOiBTdHJpbmdCdWlsZGVyID0gbmV3IFN0cmluZ0J1aWxkZXIodG8gLSBmcm9tKTtcclxuICAgIGZvciAoOyBmcm9tIDwgdG87IGZyb20rKylcclxuICAgICAgYnVmZmVyLkFwcGVuZChhcnJbZnJvbV0pO1xyXG4gICAgcmV0dXJuIGJ1ZmZlci5Ub1N0cmluZygpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIGNvbXBpbGUgMiBzdHJpbmdzICwgcmVndWxhciBleHByZXNzaW9uIGZvciAnPycgLSBhbnkgT05FIGNoYXJhY3RlclxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJTb3VyY2VcIj50byBiZSBjaGVja2VkIGJ5IHBhdHRlcm48L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiTWFza09yZ1wiPmZvciBSZWd1bGFyIGV4cHJlc3Npb248L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz4gdHJ1ZSBpZiBzdHJpbmcgbXVjaGVzIGZvciB0aGUgcGF0dGVybjwvcmV0dXJucz5cclxuICBwcml2YXRlIHN0YXRpYyBvcF9saWtlX2NtcChTb3VyY2U6IHN0cmluZywgTWFza09yZzogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICBsZXQgU2FtZTogYm9vbGVhbiA9IHRydWU7XHJcbiAgICBsZXQgTWFzazogc3RyaW5nID0gTWFza09yZztcclxuICAgIGxldCBTb3VyY2VMZW46IG51bWJlciA9IFNvdXJjZS5sZW5ndGg7XHJcbiAgICBsZXQgTWFza0xlbjogbnVtYmVyID0gTWFza09yZy5sZW5ndGg7XHJcbiAgICBpZiAoU291cmNlTGVuIDwgTWFza0xlbilcclxuICAgICAgU2FtZSA9IGZhbHNlO1xyXG5cclxuICAgIGVsc2UgaWYgKFNvdXJjZUxlbiA+IE1hc2tMZW4pXHJcbiAgICAgIE1hc2sgPSBNYXNrT3JnO1xyXG5cclxuICAgIC8vIFFDUiA3NDMxODdcclxuICAgIHdoaWxlIChNYXNrLmxlbmd0aCA8IFNvdXJjZUxlbilcclxuICAgICAgTWFzayArPSAnICc7XHJcblxyXG4gICAgZm9yIChsZXQgaTogbnVtYmVyID0gMDsgaSA8IFNvdXJjZUxlbiAmJiBTYW1lOyBpKyspXHJcbiAgICAgIFNhbWUgPSAoTWFzay5jaGFyQXQoaSkgPT09IEV4cHJlc3Npb25FdmFsdWF0b3IuUVVFU1RJT05fQ0hSIHx8IE1hc2suY2hhckF0KGkpID09PSBTb3VyY2UuY2hhckF0KGkpKTtcclxuXHJcbiAgICByZXR1cm4gU2FtZTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBjb21waWxlIDIgc3RyaW5ncyBhbmQgbW92ZSBzb3VyY2VcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiU291cmNlXCI+c291cmNlIGZvciBjaGVja2luZywgQ0hBTkdFRCBpbiBwcm9jZXNzIG9mIGNoZWNraW5nLCBtdXN0IGJlIGNoYW5nZWRcclxuICAvLy8gICBpbiBhY2NvcmRhbmNlIHRvIGNoYW5naW5nIGFmdGVyIHRoZSB1c2luZyBvZiBmdW5jdGlvbjwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJNYXNrXCI+Zm9yIFJlZ3VsYXIgZXhwcmVzc2lvbjwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJlbmRcIj5pdCB0aGUgbGFzdCBhc3RlcmlzayBpbiB0aGUgcGF0dGVybjwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPiB0cnVlIGlmIHN0cmluZyBtdWNoZXMgZm9yIHRoZSBwYXR0ZXJuPC9yZXR1cm5zPlxyXG4gIHByaXZhdGUgc3RhdGljIG9wX2xpa2VfbWFwKHNvdXJjZTogU3RyaW5nQnVpbGRlciwgbWFzazogc3RyaW5nLCBlbmQ6IGJvb2xlYW4pOiBib29sZWFuIHtcclxuICAgIGxldCBzYW1lOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBsZXQgcHRyOiBzdHJpbmcgPSBzb3VyY2UuVG9TdHJpbmcoKTtcclxuICAgIGxldCBpOiBudW1iZXIgPSAwO1xyXG5cclxuICAgIC8vIG1hc2sgaXMgbGFyZ2VyIHRoZW4gdGhlIHNvdXJjZS4gVGhleSBkbyBub3QgbWF0Y2guXHJcbiAgICBpZiAoIWVuZCAmJiBzb3VyY2UuTGVuZ3RoIDwgbWFzay5sZW5ndGgpXHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICBsZXQgajogbnVtYmVyID0gMDtcclxuICAgIGZvciAoaiA9IDA7IGogPCBzb3VyY2UuTGVuZ3RoICYmICFzYW1lOyBqKyspIHtcclxuICAgICAgc2FtZSA9IHRydWU7XHJcbiAgICAgIGlmIChlbmQpIHtcclxuICAgICAgICBzYW1lID0gRXhwcmVzc2lvbkV2YWx1YXRvci5vcF9saWtlX2NtcChwdHIuc3Vic3RyKGopLCBtYXNrKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbWFzay5sZW5ndGggJiYgc2FtZTsgaSsrKSB7XHJcbiAgICAgICAgICAvLyBJZiBhbHJlYWR5IHJlYWNoZWQgYXQgdGhlIGVuZCBvZiBzb3VyY2Ugc3RyaW5nLCByZXR1cm4gZmFsc2UuXHJcbiAgICAgICAgICBpZiAoaiArIGkgPT09IHNvdXJjZS5MZW5ndGgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgc2FtZSA9IChtYXNrLmNoYXJBdChpKSA9PT0gRXhwcmVzc2lvbkV2YWx1YXRvci5RVUVTVElPTl9DSFIgfHwgbWFzay5jaGFyQXQoaSkgPT09IHB0ci5jaGFyQXQoaiArIGkpKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGlmIChzYW1lKSB7XHJcbiAgICAgIHNvdXJjZS5SZW1vdmUoMCwgc291cmNlLkxlbmd0aCk7XHJcbiAgICAgIHNvdXJjZS5BcHBlbmQocHRyLnN1YnN0cihqICsgaSAtIDEpKTtcclxuICAgIH1cclxuICAgIHJldHVybiBzYW1lO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBleHBfZ2V0X3Zhcl8xKHZhbDE6IEV4cFZhbCwgcmVzVmFsOiBFeHBWYWwpOiB2b2lkIHtcclxuICAgIGxldCBmbGROYW1lOiBzdHJpbmcgPSB2YWwxLlN0clZhbDtcclxuICAgIGxldCBmbGQ6IEZpZWxkID0gKDxUYXNrQmFzZT50aGlzLkV4cFRhc2spLmdldEZpZWxkQnlOYW1lKGZsZE5hbWUpO1xyXG5cclxuICAgIGlmIChmbGQgPT09IG51bGwpIHtcclxuICAgICAgc3VwZXIuU2V0TlVMTChyZXNWYWwsIFN0b3JhZ2VBdHRyaWJ1dGUuTk9ORSk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICAvLyBpZiBmbGQgaXMgbm90IGV4cG9zZWQgdG8gY2xpZW50IHRoZW4gYWxlcnQgd2l0aCBlcnJvciBtZXNzYWdlIGFuZCByZXR1cm4gbnVsbFxyXG4gICAgaWYgKGZsZC5Jc0V4cG9zZWRUb0NsaWVudCA9PT0gZmFsc2UpIHtcclxuICAgICAgbGV0IHNiOiBTdHJpbmdCdWlsZGVyID0gbmV3IFN0cmluZ0J1aWxkZXIoKTtcclxuICAgICAgc2IuQXBwZW5kKE5TdHJpbmcuRm9ybWF0KCdFcnJvcjogVmFyaWFibGUgXFwnezB9XFwnIGlzIG5vdCBleHBvc2VkIHRvIGNsaWVudC4nLCBmbGQuZ2V0VmFyTmFtZSgpKSk7XHJcbiAgICAgIGFsZXJ0KHNiLlRvU3RyaW5nKCkpO1xyXG4gICAgICByZXNWYWwuSXNOdWxsID0gdHJ1ZTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBmbGRWYWx1ZTogc3RyaW5nID0gZmxkLmdldFZhbHVlKHRydWUpO1xyXG4gICAgcmVzVmFsLklzTnVsbCA9IGZsZC5pc051bGwoKTtcclxuICAgIC8vIGN0cmwgPSBmbGQuZ2V0Q29udHJvbCgpO1xyXG4gICAgLy8gcGljID0gKGN0cmwgPT0gbnVsbCkgPyBudWxsIDogY3RybC5nZXRQSUMoKTtcclxuICAgIHN1cGVyLlNldFZhbChyZXNWYWwsIGZsZC5nZXRUeXBlKCksIGZsZFZhbHVlLCBudWxsKTtcclxuICB9XHJcblxyXG5cclxuICBwcml2YXRlIGV4cF9nZXRfaW5keCh2YWwxOiBFeHBWYWwsIHJlc1ZhbDogRXhwVmFsKTogdm9pZCB7XHJcbiAgICBsZXQgaW5kZXg6IG51bWJlciA9ICg8VGFza0Jhc2U+IHRoaXMuRXhwVGFzay5HZXRDb250ZXh0VGFzaygpKS5nZXRJbmRleE9mRmllbGRCeU5hbWUodmFsMS5TdHJWYWwpO1xyXG4gICAgc3VwZXIuQ29uc3RydWN0TWFnaWNOdW0ocmVzVmFsLCBpbmRleCwgU3RvcmFnZUF0dHJpYnV0ZS5OVU1FUklDKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBnZXQgbmVlZGVkIEZpZWxkIGZyb20gdmFyIGZ1bmN0aW9uc1xyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJpdG1cIj5udW1iZXIgb2YgaXRlbVxyXG4gIC8vLyA8L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz4gZmllbGQgIGZyb20gd2hpY2ggYW4gZXZlbnQgd2FzIHRyaWdnZXJlZCBvciBmaWVsZCBvZiBpdG0gaW5kZXggb2YgdGhlIHZhcmlhYmxlXHJcbiAgLy8vIDwvcmV0dXJucz5cclxuICBnZXRGaWVsZChpdG06IG51bWJlcik6IEZpZWxkIHtcclxuICAgIGxldCBmbGQ6IEZpZWxkID0gKGl0bSAhPT0gRXhwcmVzc2lvbkV2YWx1YXRvci5UUklHR0VSX1RBU0spID8gKCg8VGFza0Jhc2U+dGhpcy5FeHBUYXNrKS5jdGxfaXRtXzJfcGFyZW50X3ZlZShpdG0gLSAxKSkgOiBBY2Nlc3NIZWxwZXIuZXZlbnRzTWFuYWdlci5nZXRDdXJyRmllbGQoKTtcclxuICAgIHJldHVybiBmbGQ7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJpdG1cIj48L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz48L3JldHVybnM+XHJcbiAgcHJpdmF0ZSBHZXRGaWVsZE9mQ29udGV4dFRhc2soaXRtOiBudW1iZXIpOiBGaWVsZCB7XHJcbiAgICByZXR1cm4gKGl0bSAhPT0gRXhwcmVzc2lvbkV2YWx1YXRvci5UUklHR0VSX1RBU0spID8gKCg8VGFza0Jhc2U+dGhpcy5FeHBUYXNrLkdldENvbnRleHRUYXNrKCkpLmN0bF9pdG1fMl9wYXJlbnRfdmVlKGl0bSAtIDEpKSA6IEFjY2Vzc0hlbHBlci5ldmVudHNNYW5hZ2VyLmdldEN1cnJGaWVsZCgpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHJlbW92ZSBzcGFjZXMgZnJvbSB0aGUgZWRnZXMgb2YgdGhlIHN0cmluZ1xyXG4gIC8vLyAgIHRoaXMgaXMgYSBoaWdoIHBlcmZvcm1hbmNlIGltcGxlbWVudGF0aW9uIHRoYXQgZG9lcyBub3QgY3JlYXRlIHVubmVjZXNzYXJ5IFN0cmluZ3NcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwic1wiPnRoZSBzb3VyY2Ugc3RyaW5nPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInR5cGVcIj5MZWZ0LCBSaWdodCwgQm90aDwvcGFyYW0+XHJcbiAgcHJpdmF0ZSBzdGF0aWMgdHJpbVN0cihzOiBzdHJpbmcsIHR5cGU6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBsZXQgbDogbnVtYmVyID0gMDtcclxuXHJcbiAgICBpZiAoTlN0cmluZy5Jc051bGxPckVtcHR5KHMpKVxyXG4gICAgICByZXR1cm4gcztcclxuXHJcblxyXG4gICAgbGV0IHI6IG51bWJlciA9IHMubGVuZ3RoIC0gMTtcclxuXHJcbiAgICAvLyB0cmltIHRoZSBsZWZ0IHNpZGVcclxuICAgIGlmICh0eXBlICE9PSAnUicpIHtcclxuICAgICAgd2hpbGUgKGwgPCBzLmxlbmd0aCAmJiBzLmNoYXJBdChsKSA9PT0gJyAnKVxyXG4gICAgICAgIGwrKztcclxuICAgIH1cclxuXHJcbiAgICAvLyB0cmltIHRoZSByaWdodCBzaWRlXHJcbiAgICBpZiAodHlwZSAhPT0gJ0wnKSB7XHJcbiAgICAgIHdoaWxlIChyID49IGwgJiYgcy5jaGFyQXQocikgPT09ICcgJylcclxuICAgICAgICByLS07XHJcbiAgICB9XHJcblxyXG4gICAgcisrOyAvLyBwb2ludCB0aGUgcmlnaHQgYm91bmQgb2YgdGhlIHN0cmluZyAoZXhjbHVzaXZlKVxyXG4gICAgcmV0dXJuIHIgPiBsID8gcy5zdWJzdHIobCwgKHIpIC0gKGwpKSA6ICcnO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIGNvbXBhcmUgMiBtYWdpYyB2YWx1ZXMgYW5kIHJldHVybiB0cnVlIGlmIHRoZXkgYXJlIGVxdWFsXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImFWYWxcIj50aGUgZmlyc3QgdmFsdWUgdG8gY29tcGFyZTwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJhSXNOdWxsXCI+dHJ1ZSBpZiB0aGUgZmlyc3QgdmFsdWUgaXMgbnVsbDwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJhRGF0YVR5cGVcIj50aGUgZGF0YSB0eXBlIG9mIHRoZSBmaXJzdCB2YWx1ZTwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJiVmFsXCI+dGhlIHNlY29uZCB2YWx1ZSB0byBjb21wYXJlPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImJJc051bGxcIj50cnVlIGlmIHRoZSBzZWNvbmQgdmFsdWUgaXMgbnVsbDwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJiRGF0YVR5cGVcIj50aGUgZGF0YSB0eXBlIG9mIHRoZSBzZWNvbmQgdmFsdWU8L3BhcmFtPlxyXG4gIHN0YXRpYyBtZ1ZhbHNFcXVhbChhVmFsOiBzdHJpbmcsIGFJc051bGw6IGJvb2xlYW4sIGFEYXRhVHlwZTogU3RvcmFnZUF0dHJpYnV0ZSwgYlZhbDogc3RyaW5nLCBiSXNOdWxsOiBib29sZWFuLCBiRGF0YVR5cGU6IFN0b3JhZ2VBdHRyaWJ1dGUpOiBib29sZWFuIHtcclxuICAgIGxldCBhOiBFeHBWYWwgPSBudWxsO1xyXG4gICAgbGV0IGI6IEV4cFZhbCA9IG51bGw7XHJcbiAgICBsZXQgcmVzdWx0OiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gICAgLy8gaWYgb25lIG9mIGFWYWwgb3IgYlZhbCBoYXMgYSBudWxsIEphdmEgdmFsdWUgYW5kIGhhcyBhIGJvb2xlYW4gZGF0YSB0eXBlXHJcbiAgICAvLyB0aGVuIGRvbid0IGVudGVyIHRoZSBcImlmIGJsb2NrXCIgYmVjYXVzZSB0aGUgdmFsX2NtcF9hbnkoKSBtZXRob2Qgd2lsbFxyXG4gICAgLy8gdHJlYXQgdGhhdCB2YWx1ZSBhcyBmYWxzZSwgc28gaXQgbWlnaHQgcmV0dXJuIGEgYmFkIHJlc3VsdFxyXG4gICAgaWYgKGFJc051bGwgPT09IGJJc051bGwgJiYgKGFJc051bGwgfHwgKGFWYWwgIT09IG51bGwgJiYgYlZhbCAhPT0gbnVsbCkpKSB7XHJcbiAgICAgIHRyeSB7XHJcbiAgICAgICAgYSA9IG5ldyBFeHBWYWwoYURhdGFUeXBlLCBhSXNOdWxsLCBhVmFsKTtcclxuICAgICAgICBiID0gbmV3IEV4cFZhbChiRGF0YVR5cGUsIGJJc051bGwsIGJWYWwpO1xyXG4gICAgICAgIHJlc3VsdCA9IChFeHByZXNzaW9uRXZhbHVhdG9yLnZhbF9jbXBfYW55KGEsIGIsIGZhbHNlKSA9PT0gMCk7XHJcbiAgICAgIH0gY2F0Y2ggKG51bGxWYWx1ZUV4Y2VwdGlvbikge1xyXG4gICAgICAgIC8vIFFDUiA5ODMzMzIgaWYgYm90aCB2YWx1ZXMgYXJlIG51bGwgdGhlbiB0aGV5IGFyZSBlcXVhbFxyXG4gICAgICAgIGlmIChudWxsVmFsdWVFeGNlcHRpb24gaW5zdGFuY2VvZiBOdWxsVmFsdWVFeGNlcHRpb24pIHtcclxuICAgICAgICAgIGlmIChhLklzTnVsbCAmJiBiLklzTnVsbClcclxuICAgICAgICAgICAgcmVzdWx0ID0gdHJ1ZTtcclxuICAgICAgICB9IGVsc2VcclxuICAgICAgICAgIHRocm93IG51bGxWYWx1ZUV4Y2VwdGlvbjtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJlc3VsdDtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBmdW50aW9uIHRoYXQgZ2V0IHRoZSBsb2dpY2FsIG5hbWUgdHJhbnNsYXRlXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInN0clwiPjwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJyZXNWYWxcIj48L3BhcmFtPlxyXG4gIHByaXZhdGUgZXZhbF9vcF90cmFuc2xhdGUoc3RyOiBFeHBWYWwsIHJlc1ZhbDogRXhwVmFsKTogdm9pZCB7XHJcbiAgICByZXNWYWwuQXR0ciA9IFN0b3JhZ2VBdHRyaWJ1dGUuQUxQSEE7XHJcbiAgICByZXNWYWwuU3RyVmFsID0gJyc7XHJcblxyXG4gICAgbGV0IG5hbWU6IHN0cmluZyA9IHN0ci5TdHJWYWw7XHJcbiAgICBpZiAoTlN0cmluZy5Jc051bGxPckVtcHR5KG5hbWUpKVxyXG4gICAgICBzdXBlci5TZXROVUxMKHJlc1ZhbCwgU3RvcmFnZUF0dHJpYnV0ZS5BTFBIQSk7XHJcbiAgICBlbHNlXHJcbiAgICAgIHJlc1ZhbC5TdHJWYWwgPSBFbnZQYXJhbXNUYWJsZS5JbnN0YW5jZS50cmFuc2xhdGUobmFtZSk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgZnVuY3Rpb24gdGhhdCBnZXQgYSBzdHJpbmcgYW5kIGZvcm1hdFxyXG4gIC8vLyAgIGFuZCBjaGFuZ2UgdGhlIHN0cmluZyB0byBiZSBjb252ZXJ0IGFzIHRoZSBmb3JtYXRcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIHByaXZhdGUgZXZhbF9vcF9hc3RyKHNvdXJjZTogRXhwVmFsLCBmb3JtYXQ6IEV4cFZhbCwgcmVzVmFsOiBFeHBWYWwpOiB2b2lkIHtcclxuICAgIHJlc1ZhbC5BdHRyID0gU3RvcmFnZUF0dHJpYnV0ZS5VTklDT0RFO1xyXG5cclxuICAgIGlmIChzb3VyY2UuU3RyVmFsID09PSBudWxsIHx8IGZvcm1hdC5TdHJWYWwgPT09IG51bGwpIHtcclxuICAgICAgc3VwZXIuU2V0TlVMTChyZXNWYWwsIFN0b3JhZ2VBdHRyaWJ1dGUuVU5JQ09ERSk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoZm9ybWF0LlN0clZhbC5sZW5ndGggPiAwICYmIHNvdXJjZS5TdHJWYWwubGVuZ3RoID4gMCkge1xyXG4gICAgICBsZXQgcGljOiBQSUMgPSBuZXcgUElDKEV4cHJlc3Npb25FdmFsdWF0b3Iuc2V0X2FfcGljKGZvcm1hdC5TdHJWYWwpLCBTdG9yYWdlQXR0cmlidXRlLlVOSUNPREUsIHRoaXMuRXhwVGFzay5nZXRDb21wSWR4KCkpO1xyXG4gICAgICByZXNWYWwuU3RyVmFsID0gRGlzcGxheUNvbnZlcnRvci5JbnN0YW5jZS5tZzJkaXNwKHNvdXJjZS5Ub01nVmFsKCksIG51bGwsIHBpYywgZmFsc2UsIGZhbHNlLCB0aGlzLkV4cFRhc2suZ2V0Q29tcElkeCgpLCB0cnVlLCBmYWxzZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgY2FsY3VsYXRlcyB0aGUgYXR0cmlidXRlIG9mIGEgdmVjdG9yIGNlbGxzXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInZlY1wiPi0gdGhlIGFjdHVhbGwgdmVjdG9yIG5vdCBhICd2YXInIGxpdGVyYWwgPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInJlc1wiPjwvcGFyYW0+XHJcbiAgcHJpdmF0ZSBzdGF0aWMgZXZhbF9vcF92ZWNDZWxsQXR0cih2ZWM6IEV4cFZhbCwgcmVzOiBFeHBWYWwpOiB2b2lkIHtcclxuICAgIC8vIHJldHVybiB0eXBlIGlzIGFsbHdheSBhbHBoYVxyXG4gICAgcmVzLkF0dHIgPSBTdG9yYWdlQXR0cmlidXRlLkFMUEhBO1xyXG4gICAgcmVzLklzTnVsbCA9IGZhbHNlO1xyXG4gICAgbGV0IGF0dHI6IFN0b3JhZ2VBdHRyaWJ1dGUgPSBTdG9yYWdlQXR0cmlidXRlLk5PTkU7XHJcblxyXG4gICAgLy8gaWYgdGhlIHZlY3RvciBpcyBudWxsIHRha2UgdGhlIHR5cGUgZnJvbSB0aGUgZmllbGRcclxuICAgIC8vIFFDUiA5MjgzMDggJiYgNDI2NjE4XHJcbiAgICBpZiAodmVjLklzTnVsbCAmJiB2ZWMuVmVjdG9yRmllbGQgIT09IG51bGwpIHtcclxuICAgICAgYXR0ciA9IHZlYy5WZWN0b3JGaWVsZC5nZXRDZWxsc1R5cGUoKTtcclxuICAgIH0gZWxzZSBpZiAoRXhwcmVzc2lvbkV2YWx1YXRvci5Jc1ZhbGlkVmVjdG9yKHZlYykpXHJcbiAgICAvLyBpZiBpdCBhIHZhbGlkIHZlY3RvciB0YWtlIGZyb20gdmVjdG9yXHJcbiAgICB7XHJcbiAgICAgIGF0dHIgPSBWZWN0b3JUeXBlLmdldENlbGxzQXR0cih2ZWMuU3RyVmFsKTtcclxuICAgIH1cclxuXHJcbiAgICByZXMuU3RyVmFsID0gJycgKyBFeHByZXNzaW9uRXZhbHVhdG9yLkdldEF0dHJpYnV0ZUNoYXIoYXR0cik7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgcmV0dXJucyBhIGNlbGxzIHZhbHVlIGZyb20gYSB2ZWN0b3JcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwidmVjXCI+LSB0aGUgYWN0dWFsbCB2ZWN0b3Igbm90IGEgJ3ZhcicgbGl0ZXJhbDwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJjZWxsXCI+LSB0aGUgY2VsbCBpbmRleCB0byBnZXQgPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInJlc1wiPjwvcGFyYW0+XHJcbiAgcHJpdmF0ZSBldmFsX29wX3ZlY0dldCh2ZWM6IEV4cFZhbCwgY2VsbDogRXhwVmFsLCByZXM6IEV4cFZhbCk6IHZvaWQge1xyXG4gICAgaWYgKGNlbGwuTWdOdW1WYWwgPT09IG51bGwgfHwgIUV4cHJlc3Npb25FdmFsdWF0b3IuSXNWYWxpZFZlY3Rvcih2ZWMpIHx8IGNlbGwuTWdOdW1WYWwuTlVNXzJfTE9ORygpIDw9IDApIHtcclxuICAgICAgcmVzLklzTnVsbCA9IHRydWU7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBsZXQgY2VsbEF0dHI6IFN0b3JhZ2VBdHRyaWJ1dGU7XHJcbiAgICAgIGxldCBjZWxsVmFsOiBzdHJpbmc7XHJcbiAgICAgIGlmICh2ZWMuVmVjdG9yRmllbGQgIT09IG51bGwpIHtcclxuICAgICAgICBjZWxsQXR0ciA9IHZlYy5WZWN0b3JGaWVsZC5nZXRDZWxsc1R5cGUoKTtcclxuICAgICAgICBjZWxsVmFsID0gKDxGaWVsZD52ZWMuVmVjdG9yRmllbGQpLmdldFZlY0NlbGxWYWx1ZShjZWxsLk1nTnVtVmFsLk5VTV8yX0xPTkcoKSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgbGV0IHZlY3RvciA9IG5ldyBWZWN0b3JUeXBlKHZlYy5TdHJWYWwpO1xyXG4gICAgICAgIGNlbGxWYWwgPSB2ZWN0b3IuZ2V0VmVjQ2VsbChjZWxsLk1nTnVtVmFsLk5VTV8yX0xPTkcoKSk7XHJcbiAgICAgICAgY2VsbEF0dHIgPSB2ZWN0b3IuZ2V0Q2VsbHNBdHRyKCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIGNoZWNrIHRoZSByZXR1cm4gdmFsdWUgdHlwZSB0eXBlXHJcbiAgICAgIGlmIChjZWxsVmFsID09IG51bGwpXHJcbiAgICAgICAgcmVzLklzTnVsbCA9IHRydWU7XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIHN3aXRjaCAoY2VsbEF0dHIpIHtcclxuICAgICAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5BTFBIQTpcclxuICAgICAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5NRU1POlxyXG4gICAgICAgICAgICByZXMuQXR0ciA9IFN0b3JhZ2VBdHRyaWJ1dGUuQUxQSEE7XHJcbiAgICAgICAgICAgIHJlcy5TdHJWYWwgPSBjZWxsVmFsO1xyXG4gICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuVU5JQ09ERTpcclxuICAgICAgICAgICAgcmVzLkF0dHIgPSBjZWxsQXR0cjtcclxuICAgICAgICAgICAgcmVzLlN0clZhbCA9IGNlbGxWYWw7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5CTE9COlxyXG4gICAgICAgICAgICByZXMuQXR0ciA9IGNlbGxBdHRyO1xyXG4gICAgICAgICAgICByZXMuU3RyVmFsID0gY2VsbFZhbDtcclxuICAgICAgICAgICAgcmVzLkluY2x1ZGVCbG9iUHJlZml4ID0gdHJ1ZTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLkJMT0JfVkVDVE9SOlxyXG4gICAgICAgICAgICByZXMuQXR0ciA9IGNlbGxBdHRyO1xyXG4gICAgICAgICAgICByZXMuU3RyVmFsID0gY2VsbFZhbDtcclxuICAgICAgICAgICAgcmVzLkluY2x1ZGVCbG9iUHJlZml4ID0gdHJ1ZTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLk5VTUVSSUM6XHJcbiAgICAgICAgICAgIHJlcy5BdHRyID0gY2VsbEF0dHI7XHJcbiAgICAgICAgICAgIHJlcy5NZ051bVZhbCA9IG5ldyBOVU1fVFlQRShjZWxsVmFsKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLkRBVEU6XHJcbiAgICAgICAgICAgIHJlcy5BdHRyID0gY2VsbEF0dHI7XHJcbiAgICAgICAgICAgIHJlcy5NZ051bVZhbCA9IG5ldyBOVU1fVFlQRShjZWxsVmFsKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLlRJTUU6XHJcbiAgICAgICAgICAgIHJlcy5BdHRyID0gY2VsbEF0dHI7XHJcbiAgICAgICAgICAgIHJlcy5NZ051bVZhbCA9IG5ldyBOVU1fVFlQRShjZWxsVmFsKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLkJPT0xFQU46XHJcbiAgICAgICAgICAgIHJlcy5BdHRyID0gY2VsbEF0dHI7XHJcbiAgICAgICAgICAgIHJlcy5Cb29sVmFsID0gRGlzcGxheUNvbnZlcnRvci50b0Jvb2xlYW4oY2VsbFZhbCk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBBcHBsaWNhdGlvbkV4Y2VwdGlvbignaW4gRXhwcmVzc2lvbkV2YWx1YXRvci5ldmFsX29wX3ZlY0dldCB1bmtub3dlbiBzdG9yYWdlIHR5cGU6ICcgK1xyXG4gICAgICAgICAgICAgIGNlbGxBdHRyKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICByZXR1cm5zIHRoZSBzaXplIG9mIHRoZSB2ZWN0b3JcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwidmVjXCI+LSB0aGUgYWN0dWFsbCB2ZWN0b3Igbm90IGEgJ3ZhcicgbGl0ZXJhbDwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJyZXNcIj48L3BhcmFtPlxyXG4gIHByaXZhdGUgZXZhbF9vcF92ZWNTaXplKHZlYzogRXhwVmFsLCByZXM6IEV4cFZhbCk6IHZvaWQge1xyXG4gICAgLy8gdGhlIHJlc3VsdGUgd2lsbCBhbHdheXMgYmUgbnVtZXJpY1xyXG4gICAgcmVzLkF0dHIgPSBTdG9yYWdlQXR0cmlidXRlLk5VTUVSSUM7XHJcbiAgICByZXMuSXNOdWxsID0gZmFsc2U7XHJcbiAgICByZXMuTWdOdW1WYWwgPSBuZXcgTlVNX1RZUEUoKTtcclxuXHJcbiAgICByZXMuTWdOdW1WYWwuTlVNXzRfTE9ORygtMSk7IC8vIGlmIHRoZXJlIGlzIGEgcHJvYmxlbSByZXR1cm4gLTFcclxuICAgIC8vIFFDUiA0MjY2MThcclxuICAgIGlmIChFeHByZXNzaW9uRXZhbHVhdG9yLklzVmFsaWRWZWN0b3IodmVjKSlcclxuICAgICAgcmVzLk1nTnVtVmFsLk5VTV80X0xPTkcoPG51bWJlcj5uZXcgVmVjdG9yVHlwZSh2ZWMuU3RyVmFsKS5nZXRWZWNTaXplKCkpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHNldHMgdGhlIHZhbHVlIG9mIGEgZ2l2ZW4gY2VsbFxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJ2ZWNcIj4tICBhICd2YXInIGxpdGVyYWwgcG9pbnRpbmcgdG8gdGhlIHZlY3RvcjwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJjZWxsXCI+LSB0aGUgY2VsbCBpbmRleCB0byBzZXQ8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwibmV3VmFsXCI+LSB0aGUgdmFsdWUgdG8gYmUgc2V0PC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInJlc1wiPjwvcGFyYW0+XHJcbiAgcHJpdmF0ZSBhc3luYyBldmFsX29wX3ZlY1NldCh2ZWM6IEV4cFZhbCwgY2VsbDogRXhwVmFsLCBuZXdWYWw6IEV4cFZhbCwgcmVzOiBFeHBWYWwpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIC8vIHJlc3VsdCBpcyBsb2dpY2FsXHJcbiAgICByZXMuQXR0ciA9IFN0b3JhZ2VBdHRyaWJ1dGUuQk9PTEVBTjtcclxuICAgIHJlcy5Cb29sVmFsID0gZmFsc2U7XHJcblxyXG4gICAgaWYgKHZlYy5NZ051bVZhbCAhPT0gbnVsbCAmJiBjZWxsLk1nTnVtVmFsICE9PSBudWxsKSB7XHJcbiAgICAgIGxldCB2ZWNGaWVsZDogRmllbGQ7XHJcbiAgICAgIHRyeSB7XHJcbiAgICAgICAgdmVjRmllbGQgPSAoPEZpZWxkPiB0aGlzLmdldEZpZWxkKHZlYy5NZ051bVZhbC5OVU1fMl9MT05HKCkpKTtcclxuICAgICAgfSBjYXRjaCAoZXgpIHtcclxuICAgICAgICBpZiAoZXggaW5zdGFuY2VvZiBFeGNlcHRpb24pIHtcclxuICAgICAgICAgIExvZ2dlci5JbnN0YW5jZS5Xcml0ZUV4Y2VwdGlvblRvTG9nKGV4KTtcclxuICAgICAgICAgIHZlY0ZpZWxkID0gbnVsbDtcclxuICAgICAgICB9IGVsc2VcclxuICAgICAgICAgIHRocm93IGV4O1xyXG4gICAgICB9XHJcblxyXG5cclxuICAgICAgaWYgKChTdG9yYWdlQXR0cmlidXRlQ2hlY2suSXNUeXBlQWxwaGFPclVuaWNvZGUodmVjRmllbGQuZ2V0Q2VsbHNUeXBlKCkpICYmIFN0b3JhZ2VBdHRyaWJ1dGVDaGVjay5Jc1R5cGVBbHBoYU9yVW5pY29kZShuZXdWYWwuQXR0cikpIHx8ICh2ZWNGaWVsZCAhPT0gbnVsbCAmJiAodmVjRmllbGQuSXNWaXJ0dWFsIHx8IHZlY0ZpZWxkLmdldFRhc2soKS5nZXRNb2RlKCkgPT09IENvbnN0YW50cy5UQVNLX01PREVfQ1JFQVRFIHx8IHZlY0ZpZWxkLkRiTW9kaWZpYWJsZSkgJiYgdmVjRmllbGQuZ2V0VHlwZSgpID09PSBTdG9yYWdlQXR0cmlidXRlLkJMT0JfVkVDVE9SICYmIChTdG9yYWdlQXR0cmlidXRlQ2hlY2suaXNUaGVTYW1lVHlwZSh2ZWNGaWVsZC5nZXRDZWxsc1R5cGUoKSwgbmV3VmFsLkF0dHIpIHx8IG5ld1ZhbC5Jc051bGwgfHwgKFN0b3JhZ2VBdHRyaWJ1dGVDaGVjay5Jc1R5cGVBbHBoYU9yVW5pY29kZShuZXdWYWwuQXR0cikgJiYgdmVjRmllbGQuZ2V0Q2VsbHNUeXBlKCkgPT09IFN0b3JhZ2VBdHRyaWJ1dGUuQkxPQikpKSlcclxuICAgICAgLy8gYWxsb3cgYWxwaGEgaW50byBibG9iIHJ0ZlxyXG4gICAgICB7XHJcbiAgICAgICAgLy8gUUNSIDc0NTU0MVxyXG4gICAgICAgIC8vIGNvbnZlcnQgdGhlIGFscGhhIGRhdGEgaW50byBibG9iXHJcbiAgICAgICAgaWYgKFN0b3JhZ2VBdHRyaWJ1dGVDaGVjay5Jc1R5cGVBbHBoYU9yVW5pY29kZShuZXdWYWwuQXR0cikgJiYgdmVjRmllbGQuZ2V0Q2VsbHNUeXBlKCkgPT09IFN0b3JhZ2VBdHRyaWJ1dGUuQkxPQikge1xyXG4gICAgICAgICAgdGhpcy5Db252ZXJ0RXhwVmFsKG5ld1ZhbCwgU3RvcmFnZUF0dHJpYnV0ZS5CTE9CKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJlcy5Cb29sVmFsID0gYXdhaXQgdmVjRmllbGQuc2V0Q2VsbFZlY1ZhbHVlKGNlbGwuTWdOdW1WYWwuTlVNXzJfTE9ORygpLCBuZXdWYWwuVG9NZ1ZhbCgpLCBuZXdWYWwuSXNOdWxsKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHJldHVybnMgdGhlIG51bWJlciBvZiB0b2tlbnMgaW4gdGhlIHN0cmluZyBhY291cmRpbmcgdG8gdGhlIGdpdmVuIGRlbGltZXRlcnNcclxuICAvLy8gICBJZiB0aGUgU291cmNlU3RyaW5nIGlzIGVtcHR5LCByZXR1cm4gdmFsdWUgaXMgMC5cclxuICAvLy8gICBJZiB0aGUgZGVsaW1pdGVyIHdhcyBub3QgZm91bmQgIGluIHRoZSBTb3VyY2VTdHJpbmcgb3Igd2FzIGVtcHR5LCByZXR1cm4gdmFsdWUgaXMgMS5cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwic291cmNlU3RyaW5nXCI+LSB0aGUgZGF0YSBzdHJpbmc8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiZGVsaW1pdGVyXCI+dGhlIGRlbGltZXRlcjwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJyZXNWYWxcIj48L3BhcmFtPlxyXG4gIHByaXZhdGUgZXZhbF9vcF9zdHJUb2tlbkNudChzb3VyY2VTdHJpbmc6IEV4cFZhbCwgZGVsaW1pdGVyOiBFeHBWYWwsIHJlc1ZhbDogRXhwVmFsKTogdm9pZCB7XHJcbiAgICAvLyB0aGUgcmV0dXJuIHZhbHVlIGlzIGFsd2F5cyBudW1lcmljXHJcbiAgICByZXNWYWwuQXR0ciA9IFN0b3JhZ2VBdHRyaWJ1dGUuTlVNRVJJQztcclxuICAgIHJlc1ZhbC5NZ051bVZhbCA9IG5ldyBOVU1fVFlQRSgpO1xyXG5cclxuICAgIC8vIHRoZSByZXN1bHRcclxuICAgIGxldCByZXM6IG51bWJlciA9IDA7XHJcblxyXG4gICAgLy8gY29udGludWUgb25seSBpZiB0aGUgc291cmNlIHN0cmluZyBleGlzdHMgYW5kIGlzIG5vdCBlbXB0eVxyXG4gICAgaWYgKCFzb3VyY2VTdHJpbmcuSXNOdWxsICYmIHNvdXJjZVN0cmluZy5TdHJWYWwgIT09IG51bGwgJiYgTlN0cmluZy5UcmltRW5kKHNvdXJjZVN0cmluZy5TdHJWYWwsIHRoaXMuX2NoYXJzVG9UcmltKS5sZW5ndGggIT09IDApIHtcclxuICAgICAgLy8gaWYgdGhlIGRlbGltaXRlciBpcyBlbXB0eVxyXG4gICAgICBpZiAoZGVsaW1pdGVyLklzTnVsbCB8fCBOU3RyaW5nLlRyaW1FbmQoZGVsaW1pdGVyLlN0clZhbCwgdGhpcy5fY2hhcnNUb1RyaW0pLmxlbmd0aCA9PT0gMClcclxuICAgICAgICByZXMgPSAxO1xyXG4gICAgICAvLyBmaW5kIHRoZSBkZWxpbWl0ZXIgaW4gdGhlIHNvdXJjZSBzdHJpbmdcclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgLy8gaWYgdGhlIGRlbGltaXRlciB3YXMgbm90IGZvdW5kIGluIHRoZSBkYXRhXHJcbiAgICAgICAgbGV0IHRva2Vuc1NpemU6IG51bWJlciA9IHRoaXMuc3RyVG9rZW5Db3VudChzb3VyY2VTdHJpbmcuU3RyVmFsLCBkZWxpbWl0ZXIuU3RyVmFsKTtcclxuICAgICAgICBpZiAodG9rZW5zU2l6ZSA9PT0gMClcclxuICAgICAgICAgIHJlcyA9IDE7XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgICAgcmVzID0gdG9rZW5zU2l6ZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgLy8gcmV0dXJuIHRoZSByZXMgdmFsdWVcclxuICAgIHJlc1ZhbC5NZ051bVZhbC5OVU1fNF9MT05HKHJlcyk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgZ2l2ZW4gdG9rZW4gd2l0aGluIHRoZSBzb3VyY2VcclxuICAvLy8gICBzdHJpbmcgb3IgMCBpZiB0aGUgdG9rZW4gd2FzIG5vdCBmb3VuZC5cclxuICAvLy8gICBJZiB0aGUgU291cmNlU3RyaW5nIG9yIHRoZSB0b2tlbiBhcmUgZW1wdHksIHJldHVybiB2YWx1ZSBpcyAwLlxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgcHJpdmF0ZSBldmFsX29wX3N0clRva2VuSWR4KHNvdXJjZVN0cmluZzogRXhwVmFsLCB0b2tlbjogRXhwVmFsLCBkZWxpbWl0ZXI6IEV4cFZhbCwgcmVzVmFsOiBFeHBWYWwpOiB2b2lkIHtcclxuICAgIC8vIHRoZSByZXR1cm4gdmFsdWUgaXMgYWx3YXlzIG51bWVyaWNcclxuICAgIHJlc1ZhbC5BdHRyID0gU3RvcmFnZUF0dHJpYnV0ZS5OVU1FUklDO1xyXG4gICAgcmVzVmFsLk1nTnVtVmFsID0gbmV3IE5VTV9UWVBFKCk7XHJcblxyXG4gICAgLy8gdGhlIHJlc3VsdFxyXG4gICAgbGV0IHJlczogbnVtYmVyID0gMDtcclxuXHJcbiAgICAvLyBjb250aW51ZSBvbmx5IGlmIHRoZSBzb3VyY2Ugc3RyaW5nIGV4aXN0cyBhbmQgaXMgbm90IGVtcHR5XHJcbiAgICAvLyBhbmQgdGhlIHRva2VuIGV4aXN0IGFuZCBub3QgZW1wdHlcclxuICAgIGlmICghc291cmNlU3RyaW5nLklzTnVsbCAmJiBzb3VyY2VTdHJpbmcuU3RyVmFsICE9PSBudWxsICYmICF0b2tlbi5Jc051bGwgJiYgdG9rZW4uU3RyVmFsICE9PSBudWxsICYmIE5TdHJpbmcuVHJpbUVuZChzb3VyY2VTdHJpbmcuU3RyVmFsLCB0aGlzLl9jaGFyc1RvVHJpbSkubGVuZ3RoICE9PSAwICYmIHRva2VuLlN0clZhbC50cmltKCkubGVuZ3RoID4gMCkge1xyXG5cclxuICAgICAgLy8gaWYgdGhlIGRlbGltaXRlciBpcyBlbXB0eSBjaGVjayBpZiB0aGUgZGF0YSBlcXVhbHMgdG8gdGhlIHRva2VuXHJcbiAgICAgIGlmICghZGVsaW1pdGVyLklzTnVsbCAmJiBOU3RyaW5nLlRyaW1FbmQoZGVsaW1pdGVyLlN0clZhbCwgdGhpcy5fY2hhcnNUb1RyaW0pLmxlbmd0aCAhPT0gMClcclxuICAgICAgICByZXMgPSB0aGlzLnN0clRva2VuSW5kZXgoc291cmNlU3RyaW5nLlN0clZhbCwgZGVsaW1pdGVyLlN0clZhbCwgdG9rZW4uU3RyVmFsKTtcclxuXHJcbiAgICAgIGVsc2UgaWYgKHNvdXJjZVN0cmluZy5TdHJWYWwgPT09IHRva2VuLlN0clZhbClcclxuICAgICAgICByZXMgPSAxO1xyXG4gICAgICBlbHNlXHJcbiAgICAgICAgcmVzID0gMDtcclxuICAgIH1cclxuICAgIC8vIHJldHVybiB0aGUgcmVzIHZhbHVlXHJcbiAgICByZXNWYWwuTWdOdW1WYWwuTlVNXzRfTE9ORyhyZXMpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyBGaW5kIGEgZ2l2ZW4gdG9rZW4gaW5kZXggaW4gYSBnaXZlbiBzdHJpbmcgKDEgYmFzZSlcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cInNvdXJjZVwiPlRoZSBzdHJpbmcgdG8gc2VhcmNoIG9uPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJkZWxpbWl0ZXJcIj5UaGUgZGVsaW1pdGVyPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJ0b2tlblwiPlRoZSB0b2tlbiB0byBzZWFyY2g8L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz48L3JldHVybnM+XHJcbiAgcHJpdmF0ZSBzdHJUb2tlbkluZGV4KHNvdXJjZTogc3RyaW5nLCBkZWxpbWl0ZXI6IHN0cmluZywgdG9rZW46IHN0cmluZyk6IG51bWJlciB7XHJcbiAgICAvLyBhZGQgdGhlIGRlbGltaXRlciBhdCB0aGUgZnJvbnQgYW5kIGVuZCBvZiB0aGUgc3RyaW5nIGFuZCB0aGUgdG9rZW5cclxuICAgIC8vIHRoaXMgd2lsbCBoZWxwIHVzIGlmIGZpbmRpbmcgdG9rZW5zIHRoYXQgYXJlIGF0IHRoZSBiZWdpbm5pbmcvZW5kIG9mIHRoZSBzdHJpbmcuXHJcbiAgICBsZXQgdHJpbURlbGltOiBzdHJpbmcgPSBOU3RyaW5nLlRyaW1FbmQoZGVsaW1pdGVyLCB0aGlzLl9jaGFyc1RvVHJpbSk7XHJcbiAgICBsZXQgdHJpbVNvdXJjZTogc3RyaW5nID0gdHJpbURlbGltICsgTlN0cmluZy5UcmltRW5kKHNvdXJjZSwgdGhpcy5fY2hhcnNUb1RyaW0pICsgdHJpbURlbGltO1xyXG4gICAgbGV0IHRyaW1Ub2tlbjogc3RyaW5nID0gKHRva2VuICE9PSBudWxsKSA/IE5TdHJpbmcuVHJpbUVuZCh0b2tlbiwgdGhpcy5fY2hhcnNUb1RyaW0pIDogbnVsbDtcclxuXHJcbiAgICBpZiAodHJpbVRva2VuID09PSBudWxsKVxyXG4gICAgICByZXR1cm4gMDtcclxuICAgIC8vIHN1cnJvdW5kIHRoZSB0b2tlbiB3aXRoIGRlbGltaXRlcnNcclxuICAgIHRyaW1Ub2tlbiA9IHRyaW1EZWxpbSArIHRyaW1Ub2tlbiArIHRyaW1EZWxpbTtcclxuXHJcbiAgICBsZXQgdG9rZW5PZmZzZXQ6IG51bWJlciA9IHRyaW1Tb3VyY2UuaW5kZXhPZih0cmltVG9rZW4pO1xyXG5cclxuICAgIGlmICh0b2tlbk9mZnNldCA9PT0gLTEpXHJcbiAgICAgIHJldHVybiAwO1xyXG4gICAgZWxzZSB7XHJcbiAgICAgIC8vIFRoZSB0b2tlbiBjb3VudCBpcyB0aGUgbnVtYmVyIG9mIHRva2VucyB0aWxsIG91ciB0b2tlbiBvZmZzZXQgKzFcclxuICAgICAgLy8gc2luY2Ugd2UgYWRkZWQgMSB0b2tlbiBiZWZvcmUgdGhlIHN0cmluZywgd2Ugd2lsbCBoYXZlIHRvIHN1YnRyYWN0IDFcclxuICAgICAgbGV0IHRva2VuSW5kZXg6IG51bWJlciA9IHRoaXMuc3RyVG9rZW5Db3VudCh0cmltU291cmNlLnN1YnN0cigwLCB0b2tlbk9mZnNldCArIHRyaW1EZWxpbS5sZW5ndGgpLCB0cmltRGVsaW0pO1xyXG4gICAgICB0b2tlbkluZGV4LS07XHJcbiAgICAgIHJldHVybiB0b2tlbkluZGV4O1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyBDb3VudCB0aGUgdG9rZW5zXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJzb3VyY2VcIj5UaGUgc3RyaW5nIHRvIHNwbGl0PC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJkZWxpbWl0ZXJcIj5UaGUgZGVsaW1pdHJlcjwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPjwvcmV0dXJucz5cclxuICBwcml2YXRlIHN0clRva2VuQ291bnQoc291cmNlOiBzdHJpbmcsIGRlbGltaXRlcjogc3RyaW5nKTogbnVtYmVyIHtcclxuICAgIGxldCBjb3VudGVyOiBudW1iZXIgPSAxO1xyXG4gICAgbGV0IHRyaW1EZWxpbTogc3RyaW5nID0gTlN0cmluZy5UcmltRW5kKGRlbGltaXRlciwgdGhpcy5fY2hhcnNUb1RyaW0pO1xyXG4gICAgbGV0IHRyaW1Tb3VyY2U6IHN0cmluZyA9IE5TdHJpbmcuVHJpbUVuZChzb3VyY2UsIHRoaXMuX2NoYXJzVG9UcmltKTtcclxuXHJcbiAgICBsZXQgZGVsaW1MZW5ndGg6IG51bWJlciA9IHRyaW1EZWxpbS5sZW5ndGg7XHJcbiAgICBsZXQgZGF0YTogc3RyaW5nID0gdHJpbVNvdXJjZTtcclxuICAgIGxldCBmcm9tT2Zmc2V0OiBudW1iZXIgPSAwO1xyXG4gICAgbGV0IGRlbGltaXRlck9mZnNldDogbnVtYmVyID0gMDtcclxuXHJcbiAgICAvLyBlbXB0eSBzdHJpbmcuIG5vIHRva2Vucy5cclxuICAgIGlmIChzb3VyY2UgPT09IG51bGwgfHwgc291cmNlLmxlbmd0aCA9PT0gMClcclxuICAgICAgcmV0dXJuIDA7XHJcblxyXG4gICAgZGVsaW1pdGVyT2Zmc2V0ID0gZGF0YS5pbmRleE9mKHRyaW1EZWxpbSwgZnJvbU9mZnNldCk7XHJcbiAgICAvLyBmaW5kIHRoZSBudW1iZXIgb2YgdG9rZW5zIGJ5IGNvdW50aW5nIHRoZSBkZWxpbWl0ZXJzICsgMVxyXG4gICAgd2hpbGUgKGRlbGltaXRlck9mZnNldCA+PSAwKSB7XHJcbiAgICAgIGNvdW50ZXIrKztcclxuXHJcbiAgICAgIC8vIHN0YXJ0IG5leHQgc2VhcmNoIGFmdGVyIHRoZSBkZWxpbWl0ZXJcclxuICAgICAgZnJvbU9mZnNldCA9IGRlbGltaXRlck9mZnNldCArIGRlbGltTGVuZ3RoO1xyXG5cclxuICAgICAgZGVsaW1pdGVyT2Zmc2V0ID0gZGF0YS5pbmRleE9mKHRyaW1EZWxpbSwgZnJvbU9mZnNldCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gY291bnRlcjtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZXZhbF9vcF9ibG9ic2l6ZShyZXNWYWw6IEV4cFZhbCwgYmxvYlZhbDogRXhwVmFsKTogdm9pZCB7XHJcbiAgICBsZXQgc2l6ZTogbnVtYmVyID0gMDtcclxuICAgIHN3aXRjaCAoYmxvYlZhbC5BdHRyKSB7XHJcbiAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5CTE9CX1ZFQ1RPUjpcclxuICAgICAgICBzaXplID0gPG51bWJlcj5WZWN0b3JUeXBlLmdldFZlY1NpemUoYmxvYlZhbC5TdHJWYWwpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuQkxPQjpcclxuICAgICAgICBzaXplID0gQmxvYlR5cGUuZ2V0QmxvYlNpemUoYmxvYlZhbC5TdHJWYWwpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gICAgcmVzVmFsLkF0dHIgPSBTdG9yYWdlQXR0cmlidXRlLk5VTUVSSUM7XHJcbiAgICByZXNWYWwuTWdOdW1WYWwgPSBuZXcgTlVNX1RZUEUoKTtcclxuICAgIHJlc1ZhbC5NZ051bVZhbC5OVU1fNF9MT05HKHNpemUpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBldmFsX29wX2lzY29tcG9uZW50KHJlc1ZhbDogRXhwVmFsKTogdm9pZCB7XHJcbiAgICBsZXQgY3VyclRzazogVGFza0Jhc2UgPSBBY2Nlc3NIZWxwZXIuZXZlbnRzTWFuYWdlci5nZXRDdXJyVGFzaygpIHx8ICg8VGFza0Jhc2U+dGhpcy5FeHBUYXNrKTtcclxuXHJcbiAgICByZXNWYWwuQXR0ciA9IFN0b3JhZ2VBdHRyaWJ1dGUuQk9PTEVBTjtcclxuICAgIHJlc1ZhbC5Cb29sVmFsID0gKGN1cnJUc2suZ2V0Q29tcElkeCgpICE9PSAwKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBGaW5kIGFuZCBFeGVjdXRlIHVzZXIgZGVmaW5lZCBmdW5jdGlvblxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgcHJpdmF0ZSBhc3luYyBldmFsX29wX0V4ZWNVc2VyRGVmaW5lZEZ1bmMoZnVuY05hbWU6IHN0cmluZywgRXhwX3BhcmFtczogRXhwVmFsW10sIHJlc1ZhbDogRXhwVmFsLCBleHBlY3RlZFR5cGU6IFN0b3JhZ2VBdHRyaWJ1dGUpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGxldCBydEV2dDogUnVuVGltZUV2ZW50ID0gbmV3IFJ1blRpbWVFdmVudCg8VGFza0Jhc2U+dGhpcy5FeHBUYXNrKTtcclxuICAgIHJ0RXZ0LnNldFR5cGUoQ29uc3RJbnRlcmZhY2UuRVZFTlRfVFlQRV9VU0VSX0ZVTkMpO1xyXG4gICAgcnRFdnQuc2V0VXNlckRlZmluZWRGdW5jTmFtZShmdW5jTmFtZSk7XHJcblxyXG4gICAgbGV0IGV2dEhhblBvczogRXZlbnRIYW5kbGVyUG9zaXRpb24gPSBuZXcgRXZlbnRIYW5kbGVyUG9zaXRpb24oKTtcclxuICAgIGV2dEhhblBvcy5pbml0KHJ0RXZ0KTtcclxuXHJcbiAgICBsZXQgaGFuZGxlcjogRXZlbnRIYW5kbGVyID0gZXZ0SGFuUG9zLmdldE5leHQoKTtcclxuICAgIGxldCBhcmdzTWF0Y2g6IGJvb2xlYW4gPSBoYW5kbGVyICE9PSBudWxsICYmIGhhbmRsZXIuYXJnc01hdGNoKEV4cF9wYXJhbXMpO1xyXG4gICAgbGV0IHZhbDogRXhwVmFsID0gbnVsbDtcclxuICAgIGxldCB2YWxJbmlhdGVkOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gICAgaWYgKGFyZ3NNYXRjaCkge1xyXG4gICAgICAvLyBpZiB0aGVyZSBpcyBhIGhhbmRsZXIgY2hhbmdlIHRoZSBoYW5kbGVyJ3MgY29udGV4dCB0YXNrIHRvIHRoZSBldmVudCdzIHRhc2tcclxuICAgICAgbGV0IGhhbmRsZXJDb250ZXh0VGFzazogVGFza0Jhc2UgPSA8VGFza0Jhc2U+IGhhbmRsZXIuZ2V0VGFzaygpLkdldENvbnRleHRUYXNrKCk7XHJcbiAgICAgIC8vIElmIHVzZXItZGVmaW5lZCBmdW5jdGlvbiBpcyBleGVjdXRlZCBmcm9tIGhhbmRsZXIgd2hpY2ggaXMgaW52b2tlZCBmcm9tICBjb250ZXh0IHRhc2sgYWxyZWFkeSxcclxuICAgICAgLy8gdGhlbiBkbyBub3QgY2hhbmdlIHRoZSBjb250ZXh0IHRhc2sgYWdhaW4uXHJcbiAgICAgIGlmIChoYW5kbGVyLmdldFRhc2soKSA9PT0gIGhhbmRsZXIuZ2V0VGFzaygpLkdldENvbnRleHRUYXNrKCkpXHJcbiAgICAgICAgaGFuZGxlci5nZXRUYXNrKCkuU2V0Q29udGV4dFRhc2socnRFdnQuZ2V0VGFzaygpKTtcclxuXHJcbiAgICAgIGxldCBhcmdMaXN0OiBBcmd1bWVudHNMaXN0ID0gbmV3IEFyZ3VtZW50c0xpc3QoRXhwX3BhcmFtcyk7XHJcblxyXG4gICAgICBydEV2dC5zZXRBcmdMaXN0KGFyZ0xpc3QpO1xyXG4gICAgICAvLyBpZiB0aGUgZXhlY3V0aW9uIG9mIHRoZSB1c2VyIGRlZmluZWQgZnVuY3Rpb24gd2lsbCBnbyB0byB0aGUgc2VydmVyLCB3ZSBkb24ndCB3YW50IGl0IHRvIGNvbnRpbnVlXHJcbiAgICAgIC8vIGFueSBvdGhlciBleGVjdXRpb24gb24gdGhlIHNlcnZlciwgbGlrZSBpZiB3ZSBhcmUgaW4gdGhlIG1pZGRsZSBvZiByYWlzZSBldmVudCBvciBzb21ldGhpbmdcclxuICAgICAgLy8gbGlrZSB0aGF0IGJlY2F1c2UgdGhlIHNlcnZlciBjYW5ub3Qga25vdyBvbiB3aGljaCBvcGVyYXRpb24gd2UgYXJlIGN1cnJlbnRseSBvbiBhbmQgd2hpY2ggZXhwcnNzaW9uXHJcbiAgICAgIC8vIGFuZCB3aGljaCBwYXJ0IG9mIHRoZSBleHByZXNzaW9uIHdlIGFyZSBldmFsdWF0aW5nXHJcbiAgICAgIEFjY2Vzc0hlbHBlci5ldmVudHNNYW5hZ2VyLnB1c2hOZXdFeGVjU3RhY2tzKCk7XHJcbiAgICAgIGF3YWl0IGhhbmRsZXIuZXhlY3V0ZShydEV2dCwgZmFsc2UsIGZhbHNlKTtcclxuICAgICAgQWNjZXNzSGVscGVyLmV2ZW50c01hbmFnZXIucG9wTmV3RXhlY1N0YWNrcygpO1xyXG5cclxuICAgICAgLy8gZXZhbHVhdGUgdGhlIHJldHVybiB2YWx1ZSBvZiB0aGUgdXNlciBkZWZpbmVkIGZ1bmN0aW9uXHJcbiAgICAgIGxldCBleHA6IEV4cHJlc3Npb24gPSBoYW5kbGVyLmdldFRhc2soKS5nZXRFeHBCeUlkKGhhbmRsZXIuZ2V0RXZlbnQoKS5nZXRVc2VyRGVmaW5lZEZ1bmNSZXRFeHAoKSk7XHJcbiAgICAgIGlmIChleHAgIT09IG51bGwpIHtcclxuICAgICAgICB2YWwgPSBhd2FpdCBleHAuZXZhbHVhdGVXaXRoUmVzVHlwZShleHBlY3RlZFR5cGUpO1xyXG4gICAgICAgIHZhbEluaWF0ZWQgPSB0cnVlO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyByZXN0b3JpbmcgdGhlIGNvbnRleHRcclxuICAgICAgaGFuZGxlci5nZXRUYXNrKCkuU2V0Q29udGV4dFRhc2soaGFuZGxlckNvbnRleHRUYXNrKTtcclxuICAgIH1cclxuICAgIGlmICghdmFsSW5pYXRlZCkge1xyXG4gICAgICBpZiAoZXhwZWN0ZWRUeXBlID09PSBTdG9yYWdlQXR0cmlidXRlLk5PTkUpIHtcclxuICAgICAgICBleHBlY3RlZFR5cGUgPSBTdG9yYWdlQXR0cmlidXRlLkFMUEhBO1xyXG4gICAgICB9XHJcbiAgICAgIHZhbCA9IG5ldyBFeHBWYWwoZXhwZWN0ZWRUeXBlLCB0cnVlLCBudWxsKTtcclxuICAgIH1cclxuICAgIC8vIGNvcHkgY29udGVudHMgZnJvbSB0aGUgVmFsIGhlbHBlciB2YXJpYWJsZSB0byB0aGUgcmVzVmFsIHBhcmFtZXRlci5cclxuICAgIHJlc1ZhbC5Db3B5KHZhbCk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgcmV0dXJucyB0aGUgaW50ZXJuYWwgbmFtZSBvZiB0aGUgdGFza1xyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgcHJpdmF0ZSBldmFsX29wX3B1YmxpY05hbWUocmVzVmFsOiBFeHBWYWwsIFBhcmVudDogRXhwVmFsKTogdm9pZCB7XHJcbiAgICBsZXQgcHVibGljTmFtZTogc3RyaW5nID0gJ05VTEwnO1xyXG5cclxuICAgIGxldCBpUGFyZW50OiBudW1iZXIgPSBQYXJlbnQuTWdOdW1WYWwuTlVNXzJfTE9ORygpO1xyXG4gICAgaWYgKChpUGFyZW50ID49IDAgJiYgaVBhcmVudCA8ICgoPFRhc2tCYXNlPnRoaXMuRXhwVGFzaykuZ2V0VGFza0RlcHRoKGZhbHNlKSkpIHx8IGlQYXJlbnQgPT09IEV4cHJlc3Npb25FdmFsdWF0b3IuVFJJR0dFUl9UQVNLKSB7XHJcbiAgICAgIGxldCB0YXNrOiBUYXNrQmFzZSA9IDxUYXNrQmFzZT4gc3VwZXIuR2V0Q29udGV4dFRhc2soaVBhcmVudCk7XHJcbiAgICAgIGlmICh0YXNrICE9PSBudWxsICYmIHRhc2suaXNQcm9ncmFtKCkgJiYgIXRhc2suaXNNYWluUHJvZygpKVxyXG4gICAgICAgIHB1YmxpY05hbWUgPSB0YXNrLmdldFB1YmxpY05hbWUoKTtcclxuICAgIH1cclxuXHJcbiAgICByZXNWYWwuQXR0ciA9IFN0b3JhZ2VBdHRyaWJ1dGUuQUxQSEE7XHJcbiAgICByZXNWYWwuU3RyVmFsID0gcHVibGljTmFtZTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICByZXR1cm5zIHRoZSBleHRlcm5hbCB0YXNrIElEIG9mIHRoZSB0YXNrXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBwcml2YXRlIGV2YWxfb3BfdGFza0lkKHJlc1ZhbDogRXhwVmFsLCBQYXJlbnQ6IEV4cFZhbCk6IHZvaWQge1xyXG4gICAgbGV0IHRhc2tJZDogc3RyaW5nID0gJ05VTEwnO1xyXG5cclxuICAgIGxldCBpUGFyZW50OiBudW1iZXIgPSBQYXJlbnQuTWdOdW1WYWwuTlVNXzJfTE9ORygpO1xyXG4gICAgaWYgKChpUGFyZW50ID49IDAgJiYgaVBhcmVudCA8ICgoPFRhc2tCYXNlPnRoaXMuRXhwVGFzaykuZ2V0VGFza0RlcHRoKGZhbHNlKSkpIHx8IGlQYXJlbnQgPT09IEV4cHJlc3Npb25FdmFsdWF0b3IuVFJJR0dFUl9UQVNLKSB7XHJcbiAgICAgIGxldCB0YXNrOiBUYXNrQmFzZSA9IDxUYXNrQmFzZT4gc3VwZXIuR2V0Q29udGV4dFRhc2soaVBhcmVudCk7XHJcbiAgICAgIGlmICh0YXNrICE9PSBudWxsKVxyXG4gICAgICAgIHRhc2tJZCA9IHRhc2suZ2V0RXh0ZXJuYWxUYXNrSWQoKTtcclxuICAgIH1cclxuXHJcbiAgICByZXNWYWwuQXR0ciA9IFN0b3JhZ2VBdHRyaWJ1dGUuQUxQSEE7XHJcbiAgICByZXNWYWwuU3RyVmFsID0gdGFza0lkO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHJldHVybnMgdGhlIG51bWJlciBvZiBjYWNoZWQgcmVjb3Jkc1xyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgcHJpdmF0ZSBldmFsX29wX2Ridmlld3NpemUocmVzVmFsOiBFeHBWYWwsIFBhcmVudDogRXhwVmFsKTogdm9pZCB7XHJcbiAgICBsZXQgc2l6ZTogbnVtYmVyID0gMDtcclxuXHJcbiAgICBsZXQgaVBhcmVudDogbnVtYmVyID0gUGFyZW50Lk1nTnVtVmFsLk5VTV8yX0xPTkcoKTtcclxuICAgIGlmICgoaVBhcmVudCA+PSAwICYmIGlQYXJlbnQgPCAoPFRhc2tCYXNlPnRoaXMuRXhwVGFzaykuZ2V0VGFza0RlcHRoKGZhbHNlKSkgfHwgaVBhcmVudCA9PT0gRXhwcmVzc2lvbkV2YWx1YXRvci5UUklHR0VSX1RBU0spIHtcclxuICAgICAgbGV0IHRhc2s6IFRhc2tCYXNlID0gPFRhc2tCYXNlPiBzdXBlci5HZXRDb250ZXh0VGFzayhpUGFyZW50KTtcclxuICAgICAgaWYgKHRhc2sgIT09IG51bGwgJiYgKDxEYXRhVmlldz50YXNrLkRhdGFWaWV3KS5IYXNNYWluVGFibGUpIHtcclxuICAgICAgICBpZiAodGFzay5HZXRDb21wdXRlZFByb3BlcnR5KFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX1BSRUxPQURfVklFVykuR2V0Q29tcHV0ZWRWYWx1ZUJvb2xlYW4oKSkge1xyXG4gICAgICAgICAgc2l6ZSA9ICg8RGF0YVZpZXc+dGFzay5EYXRhVmlldykuREJWaWV3U2l6ZTtcclxuICAgICAgICB9IGVsc2UgaWYgKHRhc2suaXNUYWJsZVdpdGhBYnNvbHV0ZXNTY3JvbGxiYXIoKSlcclxuICAgICAgICAgIHNpemUgPSAoPERhdGFWaWV3PnRhc2suRGF0YVZpZXcpLlRvdGFsUmVjb3Jkc0NvdW50O1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBzdXBlci5Db25zdHJ1Y3RNYWdpY051bShyZXNWYWwsIHNpemUsIFN0b3JhZ2VBdHRyaWJ1dGUuTlVNRVJJQyk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgcmV0dXJucyB0aGUgbnVtZXJpYyB2YWx1ZSByZXByZXNlbnRpbmcgdGhlIHNlcXVlbnRpYWwgbnVtYmVyXHJcbiAgLy8vICAgb2YgYSByZWNvcmQgaW4gYSBjYWNoZWQgdmlld1xyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgcHJpdmF0ZSBldmFsX29wX2Ridmlld3Jvd2lkeChyZXNWYWw6IEV4cFZhbCwgUGFyZW50OiBFeHBWYWwpOiB2b2lkIHtcclxuICAgIGxldCBpZHg6IG51bWJlciA9IDA7XHJcblxyXG4gICAgbGV0IGlQYXJlbnQ6IG51bWJlciA9IFBhcmVudC5NZ051bVZhbC5OVU1fMl9MT05HKCk7XHJcbiAgICBpZiAoKGlQYXJlbnQgPj0gMCAmJiBpUGFyZW50IDwgKDxUYXNrQmFzZT50aGlzLkV4cFRhc2spLmdldFRhc2tEZXB0aChmYWxzZSkpIHx8IGlQYXJlbnQgPT09IEV4cHJlc3Npb25FdmFsdWF0b3IuVFJJR0dFUl9UQVNLKSB7XHJcbiAgICAgIGxldCB0YXNrOiBUYXNrQmFzZSA9IDxUYXNrQmFzZT5zdXBlci5HZXRDb250ZXh0VGFzayhpUGFyZW50KTtcclxuXHJcbiAgICAgIGlmICh0YXNrICE9PSBudWxsICYmIHRhc2suR2V0Q29tcHV0ZWRQcm9wZXJ0eShQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9QUkVMT0FEX1ZJRVcpLkdldENvbXB1dGVkVmFsdWVCb29sZWFuKCkpIHtcclxuICAgICAgICAvKiBRQ1IjIDk2OTcyMyAtIERvIG5vdCByZXR1cm4gdGhlIHJvdyBpZHggdW50aWxsIHRoZSByZWNvcmQgaXMgY29tbWl0ZWQuICAqL1xyXG4gICAgICAgIGlmICgoKDxEYXRhVmlldz50YXNrLkRhdGFWaWV3KS5nZXRDdXJyUmVjKCkpLmdldE1vZGUoKSAhPT0gRGF0YU1vZGlmaWNhdGlvblR5cGVzLkluc2VydCkge1xyXG4gICAgICAgICAgaWR4ID0gdGFzay5EYXRhdmlld01hbmFnZXIuQ3VycmVudERhdGF2aWV3TWFuYWdlci5HZXREYlZpZXdSb3dJZHgoKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHN1cGVyLkNvbnN0cnVjdE1hZ2ljTnVtKHJlc1ZhbCwgaWR4LCBTdG9yYWdlQXR0cmlidXRlLk5VTUVSSUMpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIENhbGwgdGhlIE1scyB0cmFuc2xhdGlvbiB0byByZXR1cm4gdGhlIHRyYW5zbGF0aW9uIG9mICdmcm9tU3RyaW5nJy5cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIHByaXZhdGUgZXZhbF9vcF9NbHNUcmFucyhyZXNWYWw6IEV4cFZhbCwgZnJvbVN0cmluZzogRXhwVmFsKTogdm9pZCB7XHJcbiAgICByZXNWYWwuQXR0ciA9IFN0b3JhZ2VBdHRyaWJ1dGUuVU5JQ09ERTtcclxuICAgIHJlc1ZhbC5TdHJWYWwgPSAnJztcclxuXHJcbiAgICByZXNWYWwuU3RyVmFsID0gTGFuZ3VhZ2VEYXRhLkluc3RhbmNlLnRyYW5zbGF0ZShOU3RyaW5nLlRyaW1FbmQoZnJvbVN0cmluZy5TdHJWYWwsIHRoaXMuX2NoYXJzVG9UcmltKSk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgSW1wbGVtZW50cyBTdHJCdWlsZFxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgcHJpdmF0ZSBldmFsX29wX1N0ckJ1aWxkKHZhbFN0YWNrOiBTdGFjazxFeHBWYWw+LCByZXNWYWw6IEV4cFZhbCwgbkFyZ3M6IG51bWJlcik6IHZvaWQge1xyXG4gICAgbGV0IEV4cF9wYXJtczogRXhwVmFsW10gPSBuZXcgQXJyYXk8RXhwVmFsPihuQXJncyk7XHJcblxyXG4gICAgLy8gUmVhZCBwYXJhbWV0ZXJzXHJcbiAgICBmb3IgKGxldCBpOiBudW1iZXIgPSAwOyBpIDwgbkFyZ3M7IGkrKylcclxuICAgICAgRXhwX3Bhcm1zW25BcmdzIC0gMSAtIGldID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTtcclxuICAgIHRoaXMudmFsX2NweShFeHBfcGFybXNbMF0sIHJlc1ZhbCk7XHJcblxyXG4gICAgbGV0IHJlc3VsdFN0cjogU3RyaW5nQnVpbGRlciA9IG5ldyBTdHJpbmdCdWlsZGVyKHJlc1ZhbC5TdHJWYWwpO1xyXG4gICAgLy8gRm9yIGVhY2ggcGFyYW1ldGVyLCBzZWFyY2ggXCJAbkBcIiBzdHJpbmcgaW4gdGhlIGdpdmVuIHN0cmluZy5cclxuICAgIC8vIElmIGZvdW5kLCBhbmQgaWYgaXQgaXMgbm90IHByZWNlZGVkIGJ5ICdcXCdcclxuICAgIGZvciAobGV0IGk6IG51bWJlciA9IDE7IGkgPCBuQXJnczsgaSsrKSB7XHJcbiAgICAgIGxldCB0b1JlcGxhY2U6IHN0cmluZyA9ICdAJyArIGkudG9TdHJpbmcoKS50cmltKCkgKyAnQCc7XHJcbiAgICAgIGxldCBpbmRleEZyb206IG51bWJlciA9IDA7XHJcbiAgICAgIHdoaWxlIChpbmRleEZyb20gIT09IC0xKSB7XHJcbiAgICAgICAgbGV0IG5leHRJbmRleDogbnVtYmVyID0gcmVzdWx0U3RyLlRvU3RyaW5nKCkuaW5kZXhPZih0b1JlcGxhY2UsIGluZGV4RnJvbSk7XHJcbiAgICAgICAgaWYgKG5leHRJbmRleCA9PT0gLTEpXHJcbiAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgbGV0IHByZWNlZGVkQnlTbGFzaDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgICAgIGxldCBzaGFzaEluZGV4OiBudW1iZXIgPSByZXN1bHRTdHIuVG9TdHJpbmcoKS5pbmRleE9mKCdcXFxcJyArIHRvUmVwbGFjZSwgaW5kZXhGcm9tKTtcclxuICAgICAgICBpZiAoc2hhc2hJbmRleCAhPT0gLTEpXHJcbiAgICAgICAgICBwcmVjZWRlZEJ5U2xhc2ggPSB0cnVlO1xyXG5cclxuICAgICAgICAvLyBpZiAnXFwnIGlzIGZvdW5kIGNoZWNrIGlmLCBpdCBpcyByZWZlcnJpbmcgdGhlIGN1cnJlbnQgb2NjdXJyYW5jZSBvZiBAbkBcclxuICAgICAgICBpZiAoKHByZWNlZGVkQnlTbGFzaCAmJiBuZXh0SW5kZXggIT09IHNoYXNoSW5kZXggKyAxKSB8fCAhcHJlY2VkZWRCeVNsYXNoKSB7XHJcbiAgICAgICAgICByZXN1bHRTdHIuUmVwbGFjZShyZXN1bHRTdHIuVG9TdHJpbmcobmV4dEluZGV4LCBuZXh0SW5kZXggKyB0b1JlcGxhY2UubGVuZ3RoIC0gbmV4dEluZGV4KSwgRXhwX3Bhcm1zW2ldLlN0clZhbC50cmltKCksIG5leHRJbmRleCwgbmV4dEluZGV4ICsgdG9SZXBsYWNlLmxlbmd0aCAtIG5leHRJbmRleCk7XHJcbiAgICAgICAgICBpbmRleEZyb20gPSBuZXh0SW5kZXggKyBFeHBfcGFybXNbaV0uU3RyVmFsLnRyaW0oKS5sZW5ndGg7XHJcbiAgICAgICAgfSBlbHNlXHJcbiAgICAgICAgICBpbmRleEZyb20gPSBuZXh0SW5kZXggKyAxO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXN1bHRTdHIuUmVwbGFjZSgnXFxcXEAnLCAnQCcpO1xyXG4gICAgcmVzVmFsLlN0clZhbCA9IHJlc3VsdFN0ci5Ub1N0cmluZygpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIEFkZCB1c2VyIHJhbmdlcyBvbiBUYXNrQmFzZS4uXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInJlc1ZhbFwiPldpbGwgcmV0dXJuIEJvb2xWYWwuPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJ2YXJudW1cIj4gdmFybnVtIGNvbnRhaW5zIHZhciBudW0gb24gd2hpY2ggcmFuZ2UgaXMgc3BlY2lmaWVkLjwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwibWluXCI+IG1pbiBjb250YWlucyBtaW4gcmFuZ2UgdmFsdWUuPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJtYXhcIj4gbWF4IGNvbnRhaW5zIG1heCByYW5nZSB2YWx1ZS48L3BhcmFtPlxyXG4gIHByaXZhdGUgYXN5bmMgZXZhbF9vcF9yYW5nZV9hZGQocmVzVmFsOiBFeHBWYWwsIEV4cF9wYXJhbXM6IEV4cFZhbFtdKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICByZXNWYWwuQXR0ciA9IFN0b3JhZ2VBdHRyaWJ1dGUuQk9PTEVBTjtcclxuICAgIHJlc1ZhbC5Cb29sVmFsID0gYXdhaXQgdGhpcy5hZGRfcnRfcmFuZ2VzKEV4cF9wYXJhbXMsIGZhbHNlKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBGcmVlIHVzZXIgcmFuZ2VzIG9uIFRhc2tCYXNlLi5cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwicmVzVmFsXCI+V2lsbCByZXR1cm4gQm9vbFZhbC48L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwicGFyZW50XCI+IHBhcmVudCBjb250YWlucyBnZW5lcmF0aW9uIG9mIHRoZSB0YXNrLjwvcGFyYW0+XHJcbiAgcHJpdmF0ZSBhc3luYyBldmFsX29wX3JhbmdlX3Jlc2V0KHJlc1ZhbDogRXhwVmFsLCBwYXJlbnQ6IEV4cFZhbCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgcmVzVmFsLkF0dHIgPSBTdG9yYWdlQXR0cmlidXRlLkJPT0xFQU47XHJcblxyXG4gICAgbGV0IGlQYXJlbnQ6IG51bWJlciA9IHBhcmVudC5NZ051bVZhbC5OVU1fMl9MT05HKCk7XHJcbiAgICBpZiAoKGlQYXJlbnQgPj0gMCAmJiBpUGFyZW50IDwgKCg8VGFza0Jhc2U+dGhpcy5FeHBUYXNrKS5nZXRUYXNrRGVwdGgoZmFsc2UpKSkgfHwgaVBhcmVudCA9PT0gRXhwcmVzc2lvbkV2YWx1YXRvci5UUklHR0VSX1RBU0spIHtcclxuICAgICAgbGV0IHRhc2s6IFRhc2tCYXNlID0gPFRhc2tCYXNlPiBzdXBlci5HZXRDb250ZXh0VGFzayhpUGFyZW50KTtcclxuICAgICAgaWYgKHRhc2sgIT09IG51bGwpIHtcclxuICAgICAgICBsZXQgY29tbWFuZDogSUNsaWVudENvbW1hbmQgPSBDb21tYW5kRmFjdG9yeS5DcmVhdGVEYXRhVmlld0NvbW1hbmQodGFzay5nZXRUYXNrVGFnKCksIERhdGFWaWV3Q29tbWFuZFR5cGUuUmVzZXRVc2VyUmFuZ2UpO1xyXG4gICAgICAgIGF3YWl0IHRhc2suRGF0YXZpZXdNYW5hZ2VyLkV4ZWN1dGUoY29tbWFuZCk7XHJcbiAgICAgICAgcmVzVmFsLkJvb2xWYWwgPSB0cnVlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgQWRkIHVzZXIgbG9jYXRlcyBvbiBUYXNrLi5cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwicmVzVmFsXCI+V2lsbCByZXR1cm4gQm9vbFZhbC48L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cInZhcm51bVwiPiB2YXJudW0gY29udGFpbnMgdmFyIG51bSBvbiB3aGljaCByYW5nZSBpcyBzcGVjaWZpZWQuPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJtaW5cIj4gbWluIGNvbnRhaW5zIG1pbiByYW5nZSB2YWx1ZS48L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cIm1heFwiPiBtYXggY29udGFpbnMgbWF4IHJhbmdlIHZhbHVlLjwvcGFyYW0+XHJcbiAgcHJpdmF0ZSBhc3luYyBldmFsX29wX2xvY2F0ZV9hZGQocmVzVmFsOiBFeHBWYWwsIEV4cF9wYXJhbXM6IEV4cFZhbFtdKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICByZXNWYWwuQXR0ciA9IFN0b3JhZ2VBdHRyaWJ1dGUuQk9PTEVBTjtcclxuICAgIHJlc1ZhbC5Cb29sVmFsID0gYXdhaXQgdGhpcy5hZGRfcnRfcmFuZ2VzKEV4cF9wYXJhbXMsIHRydWUpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIEZyZWUgdXNlciBsb2NhdGVzIG9uIFRhc2suLlxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJyZXNWYWxcIj5XaWxsIHJldHVybiBCb29sVmFsLjwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJwYXJlbnRcIj4gcGFyZW50IGNvbnRhaW5zIGdlbmVyYXRpb24gb2YgdGhlIHRhc2suPC9wYXJhbT5cclxuICBwcml2YXRlIGFzeW5jIGV2YWxfb3BfbG9jYXRlX3Jlc2V0KHJlc1ZhbDogRXhwVmFsLCBwYXJlbnQ6IEV4cFZhbCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgcmVzVmFsLkF0dHIgPSBTdG9yYWdlQXR0cmlidXRlLkJPT0xFQU47XHJcbiAgICBsZXQgaVBhcmVudDogbnVtYmVyID0gcGFyZW50Lk1nTnVtVmFsLk5VTV8yX0xPTkcoKTtcclxuICAgIGlmICgoaVBhcmVudCA+PSAwICYmIGlQYXJlbnQgPCAoKDxUYXNrQmFzZT50aGlzLkV4cFRhc2spLmdldFRhc2tEZXB0aChmYWxzZSkpKSB8fCBpUGFyZW50ID09PSBFeHByZXNzaW9uRXZhbHVhdG9yLlRSSUdHRVJfVEFTSykge1xyXG4gICAgICBsZXQgdGFzazogVGFza0Jhc2UgPSA8VGFza0Jhc2U+IHN1cGVyLkdldENvbnRleHRUYXNrKGlQYXJlbnQpO1xyXG4gICAgICBpZiAodGFzayAhPT0gbnVsbCkge1xyXG4gICAgICAgIGxldCBjb21tYW5kOiBJQ2xpZW50Q29tbWFuZCA9IENvbW1hbmRGYWN0b3J5LkNyZWF0ZURhdGFWaWV3Q29tbWFuZCh0YXNrLmdldFRhc2tUYWcoKSwgRGF0YVZpZXdDb21tYW5kVHlwZS5SZXNldFVzZXJMb2NhdGUpO1xyXG4gICAgICAgIGF3YWl0IHRhc2suRGF0YXZpZXdNYW5hZ2VyLkV4ZWN1dGUoY29tbWFuZCk7XHJcbiAgICAgICAgcmVzVmFsLkJvb2xWYWwgPSB0cnVlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgQWRkIHVzZXIgc29ydHMgb24gVGFzay4uXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInJlc1ZhbFwiPldpbGwgcmV0dXJuIEJvb2xWYWwuIFN1Y2Nlc3NmdWwgYW5kIEF0dHIgd2lsbCBiZSBzZXQgdG8gU1RPUkFHRV9BVFRSX0JPT0xFQU4uPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJ2YXJudW1cIj4gdmFsMSBjb250YWlucyB2YXIgbnVtIG9uIHdoaWNoIHJhbmdlIGlzIHNwZWNpZmllZC48L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cImRpclwiPiBkaXIgY29udGFpbnMgZGlyZWN0aW9uIG9mIHNvcnQuPC9wYXJhbT5cclxuICBwcml2YXRlIGFzeW5jIGV2YWxfb3Bfc29ydF9hZGQocmVzVmFsOiBFeHBWYWwsIHZhcm51bTogRXhwVmFsLCBkaXI6IEV4cFZhbCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgcmVzVmFsLkF0dHIgPSBTdG9yYWdlQXR0cmlidXRlLkJPT0xFQU47XHJcbiAgICByZXNWYWwuQm9vbFZhbCA9IGF3YWl0IHRoaXMuYWRkX3NvcnQodmFybnVtLCBkaXIpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIEZyZWUgdXNlciByYW5nZXMgb24gVGFzay4uXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInJlc1ZhbFwiPldpbGwgcmV0dXJuIEJvb2xWYWwuPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJwYXJlbnRcIj4gcGFyZW50IGNvbnRhaW5zIGdlbmVyYXRpb24gb2YgdGFzay48L3BhcmFtPlxyXG4gIHByaXZhdGUgYXN5bmMgZXZhbF9vcF9zb3J0X3Jlc2V0KHJlc1ZhbDogRXhwVmFsLCBwYXJlbnQ6IEV4cFZhbCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgcmVzVmFsLkF0dHIgPSBTdG9yYWdlQXR0cmlidXRlLkJPT0xFQU47XHJcbiAgICBsZXQgaVBhcmVudDogbnVtYmVyID0gcGFyZW50Lk1nTnVtVmFsLk5VTV8yX0xPTkcoKTtcclxuICAgIGlmICgoaVBhcmVudCA+PSAwICYmIGlQYXJlbnQgPCAoKDxUYXNrQmFzZT50aGlzLkV4cFRhc2spLmdldFRhc2tEZXB0aChmYWxzZSkpKSB8fCBpUGFyZW50ID09PSBFeHByZXNzaW9uRXZhbHVhdG9yLlRSSUdHRVJfVEFTSykge1xyXG4gICAgICBsZXQgdGFzazogVGFza0Jhc2UgPSA8VGFza0Jhc2U+IHN1cGVyLkdldENvbnRleHRUYXNrKGlQYXJlbnQpO1xyXG4gICAgICBpZiAodGFzayAhPT0gbnVsbCkge1xyXG4gICAgICAgIGxldCBjb21tYW5kOiBJQ2xpZW50Q29tbWFuZCA9IENvbW1hbmRGYWN0b3J5LkNyZWF0ZURhdGFWaWV3Q29tbWFuZCh0YXNrLmdldFRhc2tUYWcoKSwgRGF0YVZpZXdDb21tYW5kVHlwZS5SZXNldFVzZXJTb3J0KTtcclxuICAgICAgICBhd2FpdCB0YXNrLkRhdGF2aWV3TWFuYWdlci5FeGVjdXRlKGNvbW1hbmQpO1xyXG4gICAgICAgIHJlc1ZhbC5Cb29sVmFsID0gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBUaGlzIGZ1bmN0aW9uIHJldHVybnMgY3VycmVudCBpbnN0YW5jZSBpLmUuIHRhZyBvZiB0aGUgdGFza1xyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJyZXNWYWxcIj5XaWxsIHJldHVybiBCb29sVmFsLjwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJQYXJlbnRcIj4gcGFyZW50IGNvbnRhaW5zIGdlbmVyYXRpb24gb2YgdGFzay48L3BhcmFtPlxyXG4gIHByaXZhdGUgZXZhbF9vcF90c2tfaW5zdGFuY2UocmVzVmFsOiBFeHBWYWwsIFBhcmVudDogRXhwVmFsKTogdm9pZCB7XHJcbiAgICBsZXQgdGFnOiBudW1iZXIgPSAwO1xyXG4gICAgbGV0IGlQYXJlbnQ6IG51bWJlciA9IFBhcmVudC5NZ051bVZhbC5OVU1fMl9MT05HKCk7XHJcbiAgICBpZiAoKGlQYXJlbnQgPj0gMCAmJiBpUGFyZW50IDwgKCg8VGFza0Jhc2U+dGhpcy5FeHBUYXNrKS5nZXRUYXNrRGVwdGgoZmFsc2UpKSkgfHwgaVBhcmVudCA9PT0gRXhwcmVzc2lvbkV2YWx1YXRvci5UUklHR0VSX1RBU0spIHtcclxuICAgICAgbGV0IHRhc2s6IFRhc2tCYXNlID0gPFRhc2tCYXNlPiBzdXBlci5HZXRDb250ZXh0VGFzayhpUGFyZW50KTtcclxuICAgICAgaWYgKHRhc2sgIT09IG51bGwpIHtcclxuICAgICAgICB0YWcgPSBOTnVtYmVyLlBhcnNlKHRhc2suZ2V0VGFza1RhZygpKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJlc1ZhbC5BdHRyID0gU3RvcmFnZUF0dHJpYnV0ZS5OVU1FUklDO1xyXG4gICAgcmVzVmFsLk1nTnVtVmFsID0gbmV3IE5VTV9UWVBFKCk7XHJcbiAgICByZXNWYWwuTWdOdW1WYWwuTlVNXzRfTE9ORyh0YWcpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIFRoaXMgZnVuY3Rpb24gYWRkcyBVc2VyIFNvcnQgb24gdGFzay5cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIHByaXZhdGUgYXN5bmMgYWRkX3NvcnQodmFybnVtOiBFeHBWYWwsIGRpcjogRXhwVmFsKTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICBpZiAodmFybnVtLk1nTnVtVmFsID09PSBudWxsKVxyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgbGV0IGl0bTogbnVtYmVyID0gdmFybnVtLk1nTnVtVmFsLk5VTV8yX0xPTkcoKTtcclxuXHJcbiAgICBpZiAoaXRtID09PSAwKVxyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcblxyXG5cclxuICAgIGxldCBmbGQ6IEZpZWxkID0gdGhpcy5HZXRGaWVsZE9mQ29udGV4dFRhc2soaXRtKTtcclxuXHJcbiAgICBpZiAoZmxkID09PSBudWxsKVxyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgbGV0IHRhc2s6IFRhc2tCYXNlID0gPFRhc2tCYXNlPmZsZC5nZXRUYXNrKCk7XHJcbiAgICBsZXQgdmVlX2lkeDogbnVtYmVyID0gZmxkLmdldElkKCkgKyAxO1xyXG5cclxuICAgIGxldCBleHByXzY0OiBTb3J0ID0gbmV3IFNvcnQoKTtcclxuXHJcbiAgICBleHByXzY0LmZsZElkeCA9IHZlZV9pZHg7XHJcbiAgICBleHByXzY0LmRpciA9IGRpci5Cb29sVmFsO1xyXG4gICAgbGV0IHNvcnQ6IFNvcnQgPSBleHByXzY0O1xyXG5cclxuICAgIGxldCBjb21tYW5kOiBJQ2xpZW50Q29tbWFuZCA9IENvbW1hbmRGYWN0b3J5LkNyZWF0ZUFkZFVzZXJTb3J0RGF0YXZpZXdDb21tYW5kKHRhc2suZ2V0VGFza1RhZygpLCBzb3J0KTtcclxuICAgIGF3YWl0IHRhc2suRGF0YXZpZXdNYW5hZ2VyLkV4ZWN1dGUoY29tbWFuZCk7XHJcblxyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgVGhpcyBmdW5jdGlvbiBhZGRzIFVzZXIgU29ydCBvbiB0YXNrLlxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgcHJpdmF0ZSBhc3luYyBhZGRfcnRfcmFuZ2VzKEV4cF9wYXJhbXM6IEV4cFZhbFtdLCBsb2NhdGU6IGJvb2xlYW4pOiBQcm9taXNlPGJvb2xlYW4+IHtcclxuICAgIGxldCB2YXJudW06IEV4cFZhbCA9IEV4cF9wYXJhbXNbMF07XHJcbiAgICBsZXQgbWluOiBFeHBWYWwgPSBFeHBfcGFyYW1zWzFdO1xyXG5cclxuICAgIGlmICh2YXJudW0uTWdOdW1WYWwgPT09IG51bGwpXHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICBsZXQgaXRtOiBudW1iZXIgPSB2YXJudW0uTWdOdW1WYWwuTlVNXzJfTE9ORygpO1xyXG5cclxuICAgIGlmIChpdG0gPT09IDApXHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICBsZXQgZmxkOiBGaWVsZCA9IHRoaXMuR2V0RmllbGRPZkNvbnRleHRUYXNrKGl0bSk7XHJcblxyXG4gICAgaWYgKGZsZCA9PT0gbnVsbClcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgIGxldCB0YXNrOiBUYXNrQmFzZSA9IDxUYXNrQmFzZT5mbGQuZ2V0VGFzaygpO1xyXG4gICAgbGV0IHZlZV9pZHg6IG51bWJlciA9IGZsZC5nZXRJZCgpICsgMTtcclxuXHJcbiAgICBsZXQgZXhwcl83ODogVXNlclJhbmdlID0gbmV3IFVzZXJSYW5nZSgpO1xyXG4gICAgZXhwcl83OC52ZWVJZHggPSA8bnVtYmVyPnZlZV9pZHg7XHJcblxyXG4gICAgbGV0IHJuZzogVXNlclJhbmdlID0gZXhwcl83ODtcclxuXHJcbiAgICBpZiAobWluLklzTnVsbClcclxuICAgICAgcm5nLm51bGxNaW4gPSB0cnVlO1xyXG5cclxuICAgIGlmICghcm5nLm51bGxNaW4gJiYgKG1pbi5BdHRyID09PSBTdG9yYWdlQXR0cmlidXRlLkFMUEhBIHx8IG1pbi5BdHRyID09PSBTdG9yYWdlQXR0cmlidXRlLlVOSUNPREUpICYmIG1pbi5TdHJWYWwubGVuZ3RoID09PSAwKVxyXG4gICAgICBybmcuZGlzY2FyZE1pbiA9IHRydWU7XHJcblxyXG4gICAgZWxzZSB7XHJcbiAgICAgIGlmICghcm5nLm51bGxNaW4pIHtcclxuICAgICAgICBpZiAoIVN0b3JhZ2VBdHRyaWJ1dGVDaGVjay5pc1RoZVNhbWVUeXBlKGZsZC5nZXRUeXBlKCksIG1pbi5BdHRyKSlcclxuICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICAgICAgaWYgKFN0b3JhZ2VBdHRyaWJ1dGVDaGVjay5TdG9yYWdlRmxkQWxwaGFVbmljb2RlT3JCbG9iKGZsZC5nZXRUeXBlKCksIG1pbi5BdHRyKSlcclxuICAgICAgICAgIHRoaXMuQ29udmVydEV4cFZhbChtaW4sIGZsZC5nZXRUeXBlKCkpO1xyXG5cclxuICAgICAgICBybmcubWluID0gbWluLlRvTWdWYWwoKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKEV4cF9wYXJhbXMubGVuZ3RoID09PSAzKSB7XHJcbiAgICAgIGxldCBtYXg6IEV4cFZhbCA9IEV4cF9wYXJhbXNbMl07XHJcbiAgICAgIGlmIChtYXguSXNOdWxsKVxyXG4gICAgICAgIHJuZy5udWxsTWF4ID0gdHJ1ZTtcclxuXHJcbiAgICAgIGlmICghcm5nLm51bGxNYXggJiYgKG1heC5BdHRyID09PSBTdG9yYWdlQXR0cmlidXRlLkFMUEhBIHx8IG1heC5BdHRyID09PSBTdG9yYWdlQXR0cmlidXRlLlVOSUNPREUpICYmIG1heC5TdHJWYWwubGVuZ3RoID09PSAwKVxyXG4gICAgICAgIHJuZy5kaXNjYXJkTWF4ID0gdHJ1ZTtcclxuXHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIGlmICghcm5nLm51bGxNYXgpIHtcclxuICAgICAgICAgIGlmICghU3RvcmFnZUF0dHJpYnV0ZUNoZWNrLmlzVGhlU2FtZVR5cGUoZmxkLmdldFR5cGUoKSwgbWF4LkF0dHIpKVxyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgICAgICAgaWYgKFN0b3JhZ2VBdHRyaWJ1dGVDaGVjay5TdG9yYWdlRmxkQWxwaGFVbmljb2RlT3JCbG9iKGZsZC5nZXRUeXBlKCksIG1heC5BdHRyKSlcclxuICAgICAgICAgICAgdGhpcy5Db252ZXJ0RXhwVmFsKG1heCwgZmxkLmdldFR5cGUoKSk7XHJcblxyXG4gICAgICAgICAgcm5nLm1heCA9IG1heC5Ub01nVmFsKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9IGVsc2VcclxuICAgICAgcm5nLmRpc2NhcmRNYXggPSB0cnVlO1xyXG5cclxuICAgIGlmICghcm5nLmRpc2NhcmRNaW4gfHwgIXJuZy5kaXNjYXJkTWF4KSB7XHJcbiAgICAgIGlmIChsb2NhdGUpIHtcclxuICAgICAgICBsZXQgY29tbWFuZDogSUNsaWVudENvbW1hbmQgPSBDb21tYW5kRmFjdG9yeS5DcmVhdGVBZGRVc2VyTG9jYXRlRGF0YXZpZXdDb21tYW5kKHRhc2suZ2V0VGFza1RhZygpLCBybmcpO1xyXG4gICAgICAgIGF3YWl0IHRhc2suRGF0YXZpZXdNYW5hZ2VyLkV4ZWN1dGUoY29tbWFuZCk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgbGV0IGNvbW1hbmQyOiBJQ2xpZW50Q29tbWFuZCA9IENvbW1hbmRGYWN0b3J5LkNyZWF0ZUFkZFVzZXJSYW5nZURhdGF2aWV3Q29tbWFuZCh0YXNrLmdldFRhc2tUYWcoKSwgcm5nKTtcclxuICAgICAgICBhd2FpdCB0YXNrLkRhdGF2aWV3TWFuYWdlci5FeGVjdXRlKGNvbW1hbmQyKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIGdldCBhIGNvbnRleHQgdmFsdWUgKEdldFBhcmFtKVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJyZXNWYWxcIj48L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwibmFtZVwiPjwvcGFyYW0+XHJcbiAgcHJpdmF0ZSBldmFsX29wX2dldFBhcmFtKHJlc1ZhbDogRXhwVmFsLCBuYW1lOiBFeHBWYWwpOiB2b2lkIHtcclxuICAgIERlYnVnLkFzc2VydCghbmFtZS5Jc051bGwgJiYgbmFtZS5TdHJWYWwgIT09IG51bGwpO1xyXG5cclxuICAgIGxldCBleHBWYWw6IEV4cFZhbCA9IEdsb2JhbFBhcmFtcy5JbnN0YW5jZS5nZXQobmFtZS5TdHJWYWwpO1xyXG4gICAgaWYgKGV4cFZhbCAhPT0gbnVsbClcclxuICAgICAgcmVzVmFsLkNvcHkoZXhwVmFsKTtcclxuICAgIGVsc2VcclxuICAgICAgcmVzVmFsLk51bGxpZnkoKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gc2V0IGEgY29udGV4dCB2YWx1ZSAoU2V0UGFyYW0pXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJyZXNWYWxcIj48L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cIm5hbWVcIj48L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cInZhbHVlXCI+PC9wYXJhbT5cclxuICBwcml2YXRlIGV2YWxfb3Bfc2V0UGFyYW0ocmVzVmFsOiBFeHBWYWwsIG5hbWU6IEV4cFZhbCwgdmFsdWU6IEV4cFZhbCk6IHZvaWQge1xyXG4gICAgRGVidWcuQXNzZXJ0KCFuYW1lLklzTnVsbCAmJiBuYW1lLlN0clZhbCAhPT0gbnVsbCk7XHJcblxyXG4gICAgcmVzVmFsLkF0dHIgPSBTdG9yYWdlQXR0cmlidXRlLkJPT0xFQU47XHJcbiAgICBsZXQgZ2xvYmFsUGFyYW1zOiBHbG9iYWxQYXJhbXMgPSBHbG9iYWxQYXJhbXMuSW5zdGFuY2U7XHJcblxyXG4gICAgZ2xvYmFsUGFyYW1zLnNldChuYW1lLlN0clZhbCwgdmFsdWUpO1xyXG4gICAgcmVzVmFsLkJvb2xWYWwgPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHNldCBhbiBlbnZpcm9ubWVudCB2YXJpYWJsZSAoSU5JcHV0KVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwicmVzVmFsXCI+PC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJ2YWx1ZVwiPjwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwidXBkYXRlSW5pXCI+PC9wYXJhbT5cclxuICBwcml2YXRlIGFzeW5jIGV2YWxfb3BfaW5pcHV0KHJlc1ZhbDogRXhwVmFsLCB2YWx1ZTogRXhwVmFsLCB1cGRhdGVJbmk6IEV4cFZhbCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgcmVzVmFsLkF0dHIgPSBTdG9yYWdlQXR0cmlidXRlLkJPT0xFQU47XHJcbiAgICByZXNWYWwuQm9vbFZhbCA9IGF3YWl0IEVudlBhcmFtc1RhYmxlLkluc3RhbmNlLnNldCh2YWx1ZS5TdHJWYWwsIHVwZGF0ZUluaS5Cb29sVmFsKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBnZXQgYW4gZW52aXJvbm1lbnQgdmFyaWFibGUgdmFsdWUgKElOSWdldClcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cInJlc1ZhbFwiPjwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwibmFtZVwiPjwvcGFyYW0+XHJcbiAgcHJpdmF0ZSBldmFsX29wX2luaWdldChyZXNWYWw6IEV4cFZhbCwgbmFtZVZhbDogRXhwVmFsKTogdm9pZCB7XHJcbiAgICByZXNWYWwuU3RyVmFsID0gRW52UGFyYW1zVGFibGUuSW5zdGFuY2UuZ2V0KG5hbWVWYWwuU3RyVmFsKTtcclxuICAgIHJlc1ZhbC5BdHRyID0gU3RvcmFnZUF0dHJpYnV0ZS5BTFBIQTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBnZXQgYW4gZW52aXJvbm1lbnQgdmFyaWFibGUgdmFsdWUgYnkgc2VjdGlvbiBuYW1lIGFuZCBsb2NhdGlvblxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwicmVzVmFsXCI+PC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJuYW1lXCI+PC9wYXJhbT5cclxuICBwcml2YXRlIGV2YWxfb3BfaW5pZ2V0bG4ocmVzVmFsOiBFeHBWYWwsIHNlY3Rpb25WYWw6IEV4cFZhbCwgbnVtYmVyVmFsOiBFeHBWYWwpOiB2b2lkIHtcclxuICAgIHJlc1ZhbC5TdHJWYWwgPSBFbnZQYXJhbXNUYWJsZS5JbnN0YW5jZS5nZXRsbihzZWN0aW9uVmFsLlN0clZhbCwgbnVtYmVyVmFsLk1nTnVtVmFsLk5VTV8yX0xPTkcoKSk7XHJcbiAgICByZXNWYWwuQXR0ciA9IFN0b3JhZ2VBdHRyaWJ1dGUuQUxQSEE7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgRXZhbHVhdGVzIE1PREUgbGl0ZXJhbFxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJyZXNWYWxcIj48L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiY29kZXNcIj5jb2RlcyBzdHJpbmcgZ2l2ZW4gaW4gTU9ERSBsaXRlcmFsPC9wYXJhbT5cclxuICBwcml2YXRlIGV2YWxfb3BfbShyZXNWYWw6IEV4cFZhbCwgY29kZXM6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgcmVzVmFsLkF0dHIgPSBTdG9yYWdlQXR0cmlidXRlLkFMUEhBO1xyXG4gICAgcmVzVmFsLlN0clZhbCA9ICcnO1xyXG5cclxuICAgIGZvciAobGV0IGk6IG51bWJlciA9IDA7IGkgPCBjb2Rlcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICBsZXQgbW9kZTogc3RyaW5nID0gdGhpcy5jc3RfY29kZV90cmFuc19idWYoJ08nLCAnTUNERUxSS1NPTiAnLCBjb2Rlcy5jaGFyQXQoaSksIE1zZ0ludGVyZmFjZS5FWFBUQUJfVFNLX01PREVfUlQpO1xyXG4gICAgICByZXNWYWwuU3RyVmFsID0gcmVzVmFsLlN0clZhbCArIG1vZGU7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgVHJhbnNsYXRlIGNvZGVzIGFjY29yZGluZyB0byBnaXZlbiBzdHJpbmcgYW5kIHZpY2UgdmVyc2FcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwib3ByXCI+SW5wdXQvT3V0cHV0PC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImludFN0clwiPkxpc3Qgb2YgaW50ZXJuYWwgdmFsdWVzIHVzZWQgYnkgbWFnaWM8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiY29kZVwiPkludGVybmFsL2V4dGVybmFsIGNvZGUgb2YgbWFnaWM8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwic3RySWRcIj5pbmRleCBvZiBzdHJpbmc8L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz48L3JldHVybnM+XHJcbiAgcHJpdmF0ZSBjc3RfY29kZV90cmFuc19idWYob3ByOiBzdHJpbmcsIGludFN0cjogU3RyaW5nLCBjb2RlOiBzdHJpbmcsIHN0cklkOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgbGV0IGk6IG51bWJlcjtcclxuICAgIGxldCBjb25zdFN0cjogc3RyaW5nID0gTGFuZ3VhZ2VEYXRhLkluc3RhbmNlLmdldENvbnN0TWVzc2FnZShzdHJJZCk7XHJcbiAgICBsZXQgdG9rZW5zOiBBcnJheV9FbnVtZXJhdG9yPHN0cmluZz4gPSBuZXcgQXJyYXlfRW51bWVyYXRvcihTdHJVdGlsLnRva2VuaXplKGNvbnN0U3RyLCAnLCcpKTtcclxuICAgIGxldCB0b2tlbjogc3RyaW5nO1xyXG4gICAgbGV0IHJlc1ZhbDogc3RyaW5nID0gJ1xcMCc7XHJcbiAgICBmb3IgKGkgPSAwOyBpIDwgaW50U3RyLmxlbmd0aCAmJiB0b2tlbnMuTW92ZU5leHQoKTsgaSsrKSB7XHJcbiAgICAgIHRva2VuID0gPHN0cmluZz50b2tlbnMuQ3VycmVudDtcclxuICAgICAgbGV0IG9mczogbnVtYmVyID0gdG9rZW4uaW5kZXhPZignJicpO1xyXG5cclxuICAgICAgLy8gaWYgJyYnIGlzIGZvdW5kLCBtb3ZlIHRvIGNoYXJhY3RlciBuZXh0IHRvICcmJ1xyXG4gICAgICAvLyBlbHNlIG1vdmUgdG8gZmlyc3QgY2hhcmFjdGVyXHJcbiAgICAgIG9mcysrO1xyXG4gICAgICBsZXQgY3VyckNvZGU6IHN0cmluZyA9IHRva2VuLmNoYXJBdChvZnMpLnRvVXBwZXJDYXNlKCk7XHJcbiAgICAgIGlmIChvcHIgPT09ICdJJykge1xyXG4gICAgICAgIGlmIChjb2RlID09PSBjdXJyQ29kZSkge1xyXG4gICAgICAgICAgcmVzVmFsID0gaW50U3RyLmNoYXJBdChpKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICAvLyBvcHIgPT0gJ08nXHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIGlmIChjb2RlID09PSBpbnRTdHIuY2hhckF0KGkpKSB7XHJcbiAgICAgICAgICByZXNWYWwgPSBjdXJyQ29kZTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJlc1ZhbDtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gaW1wbGVtZW50aW5nIEV4cENhbGMgLSBnZXQgaW5kZXggb2YgZXhwcmVzc2lvbiwgZmluZCB0aGUgZXhwcmVzc2lvbiBhbmQgZXZhbHVhdGUgaXRcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cInJlc1ZhbFwiPjwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwiZXhwVmFsXCI+IGV4cHJlc3Npb24gaW5kZXggPC9wYXJhbT5cclxuICBwcml2YXRlIGFzeW5jIGV2YWxfb3BfZXhwY2FsYyhyZXNWYWw6IEV4cFZhbCwgZXhwVmFsOiBFeHBWYWwpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIHJlc1ZhbC5Jc051bGwgPSB0cnVlO1xyXG4gICAgLy8gQXZvaWQgb3ZlciA1MCByZWN1cnNpdmUgY2FsbHNcclxuICAgIGlmIChFeHByZXNzaW9uRXZhbHVhdG9yLl9yZWN1cnNpdmVFeHBDYWxjQ291bnQgPCA1MCkge1xyXG4gICAgICBFeHByZXNzaW9uRXZhbHVhdG9yLl9yZWN1cnNpdmVFeHBDYWxjQ291bnQrKztcclxuICAgICAgLy8gZ2V0IGV4cHJlc3Npb24gZnJvbSBpZHggYW5kIGV2YWx1YXRlIGl0LiBwYXNzIFwibm9uZVwiIGZvciB0eXBlLCBzbyB3ZSBnZXQgd2hhdGV2ZXIgdHlwZSB0aGUgc2VydmVyIHNlbnQgYmFja1xyXG4gICAgICBsZXQgZXhwVmFsMjogRXhwVmFsID0gYXdhaXQgKDxUYXNrQmFzZT50aGlzLkV4cFRhc2spLmdldEV4cEJ5SWQoZXhwVmFsLk1nTnVtVmFsLk5VTV8yX0xPTkcoKSkuZXZhbHVhdGVXaXRoUmVzVHlwZShTdG9yYWdlQXR0cmlidXRlLk5PTkUpO1xyXG4gICAgICBFeHByZXNzaW9uRXZhbHVhdG9yLl9yZWN1cnNpdmVFeHBDYWxjQ291bnQtLTtcclxuXHJcbiAgICAgIGlmIChleHBWYWwyICE9PSBudWxsKVxyXG4gICAgICAgIHJlc1ZhbC5Db3B5KGV4cFZhbDIpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyBpbXBsZW1lbnRhdGlvbiBvZiBDbmRSYW5nZSBmdW5jdGlvbjogSWYgY29uZGl0aW9uIGlzIHRydWUsIHVzZSB0aGUgMm5kIHBhcmFtZXRlciBhcyByYW5nZS4gaWYgbm90IC1cclxuICAvLy8gbWFyayB0aGUgcmVzdWx0IGFzIG51bGxcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cInJlc1ZhbFwiPjwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwidmFsMVwiPjwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwidmFsMlwiPjwvcGFyYW0+XHJcbiAgcHJpdmF0ZSBldmFsX29wX0NuZFJhbmdlKHJlc1ZhbDogRXhwVmFsLCB2YWwxOiBFeHBWYWwsIHZhbDI6IEV4cFZhbCk6IHZvaWQge1xyXG4gICAgaWYgKHZhbDEuQm9vbFZhbClcclxuICAgICAgcmVzVmFsLkNvcHkodmFsMik7XHJcbiAgICBlbHNlXHJcbiAgICAgIHJlc1ZhbC5Jc051bGwgPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHJldHVybnMgdGhlIGV4dGVybmFsIHRhc2sgdHlwZSBvZiB0aGUgdGFza1xyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgcHJpdmF0ZSBldmFsX29wX3Rhc2tUeXBlKHJlc1ZhbDogRXhwVmFsLCBQYXJlbnQ6IEV4cFZhbCk6IHZvaWQge1xyXG4gICAgbGV0IGlQYXJlbnQ6IG51bWJlciA9IFBhcmVudC5NZ051bVZhbC5OVU1fMl9MT05HKCk7XHJcbiAgICBpZiAoKGlQYXJlbnQgPj0gMCAmJiBpUGFyZW50IDwgKCg8VGFza0Jhc2U+dGhpcy5FeHBUYXNrKS5nZXRUYXNrRGVwdGgoZmFsc2UpKSkgfHwgaVBhcmVudCA9PT0gRXhwcmVzc2lvbkV2YWx1YXRvci5UUklHR0VSX1RBU0spIHtcclxuICAgICAgbGV0IHRhc2s6IFRhc2tCYXNlID0gPFRhc2tCYXNlPiBzdXBlci5HZXRDb250ZXh0VGFzayhpUGFyZW50KTtcclxuICAgICAgaWYgKHRhc2sgIT09IG51bGwpIHtcclxuICAgICAgICByZXNWYWwuU3RyVmFsID0gKHRhc2suaXNNYWluUHJvZygpID8gJ01XJyA6ICdXJyk7XHJcbiAgICAgIH0gZWxzZVxyXG4gICAgICAgIHJlc1ZhbC5TdHJWYWwgPSAnICc7XHJcbiAgICB9XHJcblxyXG4gICAgcmVzVmFsLkF0dHIgPSBTdG9yYWdlQXR0cmlidXRlLkFMUEhBO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIEZ1bmN0aW9uIGdldHRpbmcgdGhlIHRlcm1pbmFsIG51bWJlci5cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cInJlc1ZhbFwiPjwvcGFyYW0+XHJcbiAgcHJpdmF0ZSBldmFsX29wX3Rlcm1pbmFsKHJlc1ZhbDogRXhwVmFsKTogdm9pZCB7XHJcbiAgICBsZXQgdGVybWluYWw6IG51bWJlciA9IEVudmlyb25tZW50Lkluc3RhbmNlLmdldFRlcm1pbmFsKCk7XHJcblxyXG4gICAgc3VwZXIuQ29uc3RydWN0TWFnaWNOdW0ocmVzVmFsLCB0ZXJtaW5hbCwgU3RvcmFnZUF0dHJpYnV0ZS5OVU1FUklDKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICByZXR1cm4gdGhlIHByb2plY3QncyBkaXJcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cInJlc1ZhbFwiPjwvcGFyYW0+XHJcbiAgcHJpdmF0ZSBldmFsX29wX3Byb2plY3RkaXIocmVzVmFsOiBFeHBWYWwpOiB2b2lkIHtcclxuICAgIHJlc1ZhbC5TdHJWYWwgPSBFbnZpcm9ubWVudC5JbnN0YW5jZS5nZXRQcm9qRGlyKHRoaXMuRXhwVGFzay5nZXRDb21wSWR4KCkpO1xyXG4gICAgcmVzVmFsLkF0dHIgPSBTdG9yYWdlQXR0cmlidXRlLkFMUEhBO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHRoaXMgbWV0aG9kIGNoZWNrcyBpZiB0aGUgYmxvYiBpcyB2YWxpZCB2ZWN0b3IgaS5lLiBpZiB0aGUgYmxvYiBpcyBpbiB2ZWN0b3IncyBmbGF0dGVuIGZvcm1hdFxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJ2ZWNcIj50aGUgYmxvYiB0byBiZSBjaGVja2VkPC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+IHRydWUgaWYgdmFsaWQgdmVjdG9yPC9yZXR1cm5zPlxyXG4gIHByaXZhdGUgc3RhdGljIElzVmFsaWRWZWN0b3IodmVjOiBFeHBWYWwpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB2ZWMgIT09IG51bGwgJiYgdmVjLkF0dHIgPT09IFN0b3JhZ2VBdHRyaWJ1dGUuQkxPQl9WRUNUT1IgJiYgVmVjdG9yVHlwZS52YWxpZGF0ZUJsb2JDb250ZW50cyh2ZWMuU3RyVmFsKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBhdHRyaWJ1dGUgYWNjb3JkaW5nIHRvIG1hZ2ljLCBmb3IgZWcgJ0wnIGlzIHJldHVybmVkIGZvciBib29sZWFuLlxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwic3RvcmFnZUF0dHJcIj48L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz5hdHRyaWJ1dGUgY2hhcmFjdGVyIGNvcnJlc3BvbmRpbmcgdG8gc3RvcmFnZSBhdHRyaWJ1dGUuPC9yZXR1cm5zPlxyXG4gIHByaXZhdGUgc3RhdGljIEdldEF0dHJpYnV0ZUNoYXIoc3RvcmFnZUF0dHI6IFN0b3JhZ2VBdHRyaWJ1dGUpOiBzdHJpbmcge1xyXG4gICAgbGV0IGF0dHI6IHN0cmluZyA9IDxzdHJpbmc+c3RvcmFnZUF0dHI7XHJcbiAgICBzd2l0Y2ggKHN0b3JhZ2VBdHRyKSB7XHJcbiAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5CTE9COlxyXG4gICAgICAgIGF0dHIgPSAnQic7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuQk9PTEVBTjpcclxuICAgICAgICBhdHRyID0gJ0wnO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuICAgIHJldHVybiBhdHRyO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyByZXR1cm4gYWxsIHRvcCBsZXZlbCBmb3JtcyB0aGF0IGV4aXN0XHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJjb250ZXh0SWRcIj48L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz48L3JldHVybnM+XHJcbiAgR2V0VG9wTW9zdEZvcm1zKGNvbnRleHRJRDogbnVtYmVyKTogTGlzdDxNZ0Zvcm1CYXNlPiB7XHJcbiAgICByZXR1cm4gQWNjZXNzSGVscGVyLm1nRGF0YVRhYmxlLkdldFRvcE1vc3RGb3JtcygpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyBNb3ZlcyB0aGUgY2FyZXQgdG8gc3BlY2lmaWVkIGNvbnRyb2xcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cImN0cmxUYXNrXCI+PC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJjdHJsXCI+PC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJyb3dOb1wiPjwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPjwvcmV0dXJucz5cclxuICBIYW5kbGVDb250cm9sR290byhjdHJsVGFzazogSVRhc2ssIGN0cmw6IE1nQ29udHJvbEJhc2UsIHJvd05vOiBudW1iZXIpOiBib29sZWFuIHtcclxuICAgIGxldCB0YXNrOiBUYXNrQmFzZSA9IDxUYXNrQmFzZT5jdHJsVGFzaztcclxuICAgIGlmIChjdHJsICE9PSBudWxsKSB7XHJcbiAgICAgIGxldCBkdjogRGF0YVZpZXcgPSA8RGF0YVZpZXc+dGFzay5EYXRhVmlldztcclxuICAgICAgbGV0IHRDdHJsOiBNZ0NvbnRyb2wgPSA8TWdDb250cm9sPmN0cmw7XHJcbiAgICAgIGxldCB3YW50ZWRMaW5lOiBudW1iZXIgPSB0YXNrLmdldEZvcm0oKS5EaXNwbGF5TGluZTsgLy8gMC1iYXNlZCByZWNvcmQgaW5kZXhcclxuXHJcbiAgICAgIC8vIHZhbGlkYXRlIHNwZWNpZmllZCByb3dcclxuICAgICAgaWYgKGN0cmwuSXNSZXBlYXRhYmxlICYmIHJvd05vID4gMCkge1xyXG4gICAgICAgIHRhc2suZ2V0Rm9ybSgpLmdldFRvcEluZGV4RnJvbUdVSSgpO1xyXG4gICAgICAgIGxldCB0b3BSZWNJZHg6IG51bWJlciA9IGR2LmdldFRvcFJlY0lkeCgpO1xyXG4gICAgICAgIHdhbnRlZExpbmUgPSB0b3BSZWNJZHggKyByb3dObyAtIDE7XHJcblxyXG4gICAgICAgIC8vIGNoZWNrIGlmIHRoZSByZWNvcmQgaXMgZXhpc3QgaW4gdGhlIGN1cnJlbnQgcGFnZVxyXG4gICAgICAgIGlmICh3YW50ZWRMaW5lIC0gdG9wUmVjSWR4IC0gMSA+PSB0YXNrLmdldEZvcm0oKS5nZXRSb3dzSW5QYWdlKCkpXHJcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgICAgIC8vIGNoZWNrIGZvciBpbnZhbGlkIHJlY29yZCBpbmRleFxyXG4gICAgICAgIGlmICghdGFzay5nZXRGb3JtKCkuSXNWYWxpZFJvdyh3YW50ZWRMaW5lKSlcclxuICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKHRDdHJsLmlzVmlzaWJsZSgpKSB7XHJcbiAgICAgICAgaWYgKHRDdHJsLmlzU3ViZm9ybSgpKSB7XHJcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBEZWZlY3QgMTUyMzE1OiBQcm9ibGVtOiBXaGVuIGNsaWNrZWQgb24gQnV0dG9uIGFuZCBjbGlja2VkIG9uIGVkaXQgd2hpY2ggaXMgZ2VuZXJhdGVkIGFzIExhYmVsIG9uIFRhYmxlLFxyXG4gICAgICAgIC8vIENQICYgQ1Mgb2YgRWRpdCBpcyBjYWxsZWQuIFRoaXMgaXMgYmVjYXVzZSB3ZSBlZGl0IHdoaWNoIGlzIExhYmVsIGlzIG5vbi1mb2N1c2FibGUgYW4gaGVuY2UgYnV0dG9uIGdldHMgZm9jdXMgYmFjay5cclxuICAgICAgICAvLyBQb3NzaWJsZSBzb2x1dGlvbnM6XHJcblxyXG4gICAgICAgIC8vIDEpIEdvdG8gRWRpdGluZyBtb2RlIHdoZW4gb24gVGFibGVDb250cm9sIHdoZW4gY29udHJvbEdvdG8gaXMgY2FsbGVkIHRoZW4gaGFuZGxlIGNvbnRyb2xHb3RvIHN0dWZmLiBUaGlzIHdpbGwgbmVlZCBzb21lIHJlc2VhcmNoL2JpZ2dlciBjaGFuZ2VzLlxyXG4gICAgICAgIC8vIDIpIEp1c3QgcGFyayBvbiBSb3cgb24gd2hpY2ggQ29udHJvbEdvdG8gaXMgY2FsbGVkLiBUaGlzIG1lYW5zIGl0IHdpbGwgd29yayBwYXJ0aWFsbHkgaS5lLiBjYWxsIFJQIGFuZCBub3QgQ1Agb2YgY29udHJvbCBvbiB3aGljaCBDb250cm9sR290byBpcyBjYWxsZWQuXHJcbiAgICAgICAgLy8gMykgTWF5YmUoIG5vdCBpbiB0aGlzIHZlcnNpb24pIHdlIHNob3VsZCBpbnRyb2R1Y2Ug4oCcZ290b0xpbmXigJ0gLiBUaGVuIHVzZXIgY2FuIGRvIHRoaXMgYW5kIGhhdmUgZnVsbCBjb250cm9sOlxyXG4gICAgICAgIC8vICAgIEdvdG9MaW5lKFgpXHJcbiAgICAgICAgLy8gICAgUmFpc2UgUm93RWRpdGluZ1xyXG4gICAgICAgIC8vICAgIEdvdG9Db250cm9sKFkpXHJcbiAgICAgICAgLy8gT3B0aW9uIDIgd2FzIHNlbGVjdGVkIGJ5IFBNLiBJdCB3aWxsIGFwcGx5IG9ubHkgd2hlbiByb3cgaXMgbm90IGluIGVkaXRpbmcgbW9kZS5cclxuICAgICAgICBsZXQgZnJtOiBNZ0Zvcm0gPSA8TWdGb3JtPnRhc2suZ2V0Rm9ybSgpO1xyXG4gICAgICAgIGxldCBpc1Jvd0VkaXRpbmcgPSBmcm0uZ2V0SXNSb3dFZGl0aW5nRnJvbUd1aSh3YW50ZWRMaW5lKTtcclxuICAgICAgICBpZiAodEN0cmwuaXNSZXBlYXRhYmxlKCkgJiYgIWlzUm93RWRpdGluZykge1xyXG4gICAgICAgICAgQWNjZXNzSGVscGVyLmV2ZW50c01hbmFnZXIuYWRkR3VpVHJpZ2dlcmVkRXZlbnRXaXRoVGFza0FuZENvZGVBbmRMaW5lKHRhc2ssIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9SRUNfUFJFRklYLCB3YW50ZWRMaW5lKTtcclxuICAgICAgICAgIGNvbnNvbGUubG9nKCdVbmFibGUgdG8gcGFyayBvbiBjb250cm9sOiAnICsgdEN0cmwuTmFtZSArICcgYXMgcm93IGlzIG5vdCBpbiBlZGl0aW5nIG1vZGUnKTtcclxuICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAvLyBqdW1wIHRvIHRoZSBjb250cm9sXHJcbiAgICAgICAgICBsZXQgcnRFdnQ6IFJ1blRpbWVFdmVudCA9IG5ldyBSdW5UaW1lRXZlbnQodEN0cmwsIHdhbnRlZExpbmUpO1xyXG4gICAgICAgICAgcnRFdnQuc2V0SW50ZXJuYWwoSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX0NUUkxfRk9DVVMpO1xyXG4gICAgICAgICAgQWNjZXNzSGVscGVyLmV2ZW50c01hbmFnZXIuYWRkVG9UYWlsKHJ0RXZ0KTtcclxuICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5Pihwcm90ZWN0ZWQpXHJcbiAgLy8vIHNldHMgdGhlIHN0YXR1cyBiYXIgdGV4dCB3aXRoIHRoZSBnaXZlbiB0ZXh0IGFuZFxyXG4gIC8vLyBzZXRzIHRoZSByZXN1bHQgd2l0aCB0aGUgbGFzdCB0ZXh0IHRoYXQgd2FzIHNldCB0byB0aGUgc3RhdHVzIGJhciBieSB0aGUgdXNlIG9mIHRoaXMgZnVuY3Rpb25cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwicmVzVmFsXCI+bGFzdCB0ZXh0IG9mIHN0YXR1cyBiYXI8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwic3RhdHVzQmFyVGV4dFwiPnRoZSB0ZXh0IHRvIGJlIHNldCBhdCBzdGF0dXMgYmFyPC9wYXJhbT5cclxuICBldmFsX29wX3NldF90aXRsZShyZXNWYWw6IEV4cFZhbCwgdGl0bGU6IEV4cFZhbCk6IHZvaWQge1xyXG4gICAgcmVzVmFsLkF0dHIgPSBTdG9yYWdlQXR0cmlidXRlLkJPT0xFQU47XHJcbiAgICByZXNWYWwuQm9vbFZhbCA9IHRydWU7XHJcblxyXG4gICAgaWYgKCEodGl0bGUuQXR0ciAhPT0gU3RvcmFnZUF0dHJpYnV0ZS5BTFBIQSAmJiB0aXRsZS5BdHRyICE9PSBTdG9yYWdlQXR0cmlidXRlLlVOSUNPREUpKSB7XHJcbiAgICAgIGlmICghdGl0bGUuSXNOdWxsKSB7XHJcbiAgICAgICAgbGV0IHRleHQ6IHN0cmluZyA9IHRpdGxlLlN0clZhbDtcclxuICAgICAgICBsZXQgdGFzazogVGFza0Jhc2UgPSA8VGFza0Jhc2U+IHRoaXMuRXhwVGFzay5HZXRDb250ZXh0VGFzaygpO1xyXG5cclxuICAgICAgICAvLyBJbiBjYXNlIG9mIG5vbiBpbnRlcmFjdGl2ZSB0YXNrcywgaXQgaXMgcG9zc2libGUgdGhhdCB0YXNrIGhhcyBvcGVuIHdpbmRvdyA9IE5vLCBTbyBkaXNwbGF5IHRoZSBzdGF0dXMgYmFyIG1zZyBvbiBmcmFtZSB3aW5kb3cuXHJcbiAgICAgICAgaWYgKHRhc2suZ2V0VG9wTW9zdEZvcm0oKSAhPT0gbnVsbCkge1xyXG4gICAgICAgICAgdGFzay5nZXRUb3BNb3N0Rm9ybSgpLnNldFRpdGxlKHRleHQpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5Pihwcm90ZWN0ZWQpXHJcbiAgLy8vIGdldHMgdGhlIGlzUm93IGVkaXRpbmcgb24gdGhlIGN1cnJlbnQgdGFza1xyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgZXZhbF9vcF9pc19yb3dfZWRpdGluZyhyZXNWYWw6IEV4cFZhbCwgdmFsMTogRXhwVmFsKTogdm9pZCB7XHJcbiAgICBsZXQgaXNSb3dFZGl0aW5nOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBpZiAodmFsMS5NZ051bVZhbCA9PT0gbnVsbCkge1xyXG4gICAgICBzdXBlci5TZXROVUxMKHJlc1ZhbCwgU3RvcmFnZUF0dHJpYnV0ZS5BTFBIQSk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgcGFyZW50OiBudW1iZXIgPSB2YWwxLk1nTnVtVmFsLk5VTV8yX0xPTkcoKTtcclxuICAgIGlmICgocGFyZW50ID49IDAgJiYgcGFyZW50IDwgKCg8VGFza0Jhc2U+dGhpcy5FeHBUYXNrKS5nZXRUYXNrRGVwdGgoZmFsc2UpKSkgfHwgcGFyZW50ID09PSBFeHByZXNzaW9uRXZhbHVhdG9yLlRSSUdHRVJfVEFTSykge1xyXG4gICAgICBsZXQgdHNrOiBUYXNrQmFzZSA9IDxUYXNrQmFzZT4gc3VwZXIuR2V0Q29udGV4dFRhc2socGFyZW50KTtcclxuICAgICAgbGV0IG15Zm9ybTogTWdGb3JtID0gPE1nRm9ybT50c2suZ2V0Rm9ybSgpO1xyXG4gICAgICBpc1Jvd0VkaXRpbmcgPSBteWZvcm0uZ2V0SXNSb3dFZGl0aW5nRnJvbUd1aShteWZvcm0uRGlzcGxheUxpbmUpO1xyXG4gICAgfVxyXG4gICAgcmVzVmFsLkJvb2xWYWwgPSBpc1Jvd0VkaXRpbmc7XHJcbiAgICByZXNWYWwuQXR0ciA9IFN0b3JhZ2VBdHRyaWJ1dGUuQk9PTEVBTjtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gRGlzY29ubmVjdCB0aGUgZGF0YWJhc2UgY29ubmVjdGlvbiBvZiBnaXZlbiBkYXRhYmFzZSBuYW1lLlxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwidmFsXCI+IERhdGFiYXNlIG5hbWU8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cInJlc1ZhbFwiPlJldHVybiBzdGF0dXMgb2YgZGlzY29ubmVjdCBvcGVyYXRpb248L3BhcmFtPlxyXG4gIC8vIHByaXZhdGUgdm9pZCBleHBfb3BfQ2xpZW50RGJEaXNjb25uZWN0KEV4cFZhbCB2YWwsIEV4cFZhbCByZXNWYWwpXHJcbiAgLy8ge1xyXG4gIC8vICAgc3RyaW5nIGRhdGFiYXNlTmFtZSA9IHZhbC5TdHJWYWw7XHJcbiAgLy8gICBUYXNrQmFzZSB0YXNrID0gKFRhc2tCYXNlKUV4cFRhc2s7XHJcblxyXG4gIC8vICAgSUNsaWVudENvbW1hbmQgY29tbWFuZCA9IENvbW1hbmRGYWN0b3J5LkNyZWF0ZUNsaWVudERiRGlzY29ubmVjdENvbW1hbmQoZGF0YWJhc2VOYW1lKTtcclxuICAvLyAgIFJldHVyblJlc3VsdCByZXN1bHQgPSB0YXNrLkRhdGF2aWV3TWFuYWdlci5Mb2NhbERhdGF2aWV3TWFuYWdlci5FeGVjdXRlKGNvbW1hbmQpO1xyXG5cclxuICAvLyAgIHJlc1ZhbC5BdHRyID0gU3RvcmFnZUF0dHJpYnV0ZS5CT09MRUFOO1xyXG4gIC8vICAgcmVzVmFsLkJvb2xWYWwgPSByZXN1bHQuU3VjY2VzcztcclxuICAvLyB9XHJcblxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vIEV4ZWN1dGUgQ29udHJvbFNlbGVjdFByb2dyYW0oKSBmdW5jdG9uLlxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwiZXhwVmFsXCI+PC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJyZXNWYWxcIj48L3BhcmFtPlxyXG4gIGFzeW5jIGV2YWxfb3BfY29udHJvbF9zZWxlY3RfcHJvZ3JhbShleHBWYWw6IEV4cFZhbCwgcmVzVmFsOiBFeHBWYWwpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGxldCBjb250cm9sSUQ6IG51bWJlciA9IGV4cFZhbC5NZ051bVZhbC5OVU1fMl9MT05HKCk7XHJcbiAgICBsZXQgcGFyZW50OiBudW1iZXIgPSAwO1xyXG5cclxuICAgIGxldCByZWZQYXJlbnQ6IFJlZlBhcmFtPG51bWJlcj4gPSBuZXcgUmVmUGFyYW0ocGFyZW50KTtcclxuICAgIGxldCBtZ0NvbnRyb2w6IE1nQ29udHJvbCA9ICg8VGFza0Jhc2U+dGhpcy5FeHBUYXNrLkdldENvbnRleHRUYXNrKCkpLkdldENvbnRyb2xGcm9tQ29udHJvbElEKGNvbnRyb2xJRCAtIDEsIHJlZlBhcmVudCk7XHJcbiAgICBwYXJlbnQgPSByZWZQYXJlbnQudmFsdWU7XHJcblxyXG4gICAgcmVzVmFsLkF0dHIgPSBTdG9yYWdlQXR0cmlidXRlLk5VTUVSSUM7XHJcbiAgICByZXNWYWwuTWdOdW1WYWwgPSBuZXcgTlVNX1RZUEUoKTtcclxuXHJcbiAgICAvLyBJZiBjb250cm9sIGhhcyBzZWxlY3QgcHJvZ3JhbSBwcm9wZXJ0eS5cclxuICAgIGlmIChtZ0NvbnRyb2wgIT09IG51bGwgJiYgbWdDb250cm9sLkhhc1NlbGVjdFByb2dyYW0oKSkge1xyXG4gICAgICBsZXQgc2VsZWN0UHJvZ1Byb3A6IFByb3BlcnR5ID0gbWdDb250cm9sLmdldFByb3AoUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfU0VMRUNUX1BST0dSQU0pO1xyXG4gICAgICBsZXQgcmVhbEluZGV4OiBudW1iZXIgPSBOTnVtYmVyLlBhcnNlKGF3YWl0IHNlbGVjdFByb2dQcm9wLmdldFZhbHVlKCkpO1xyXG4gICAgICBsZXQgcHJvZ3JhbUluZGV4OiBudW1iZXIgPSAwO1xyXG4gICAgICBpZiAocmVhbEluZGV4ID4gMCkge1xyXG4gICAgICAgIGlmIChwYXJlbnQgPiAwKVxyXG4gICAgICAgICAgcHJvZ3JhbUluZGV4ID0gPG51bWJlcj5yZWFsSW5kZXggKyA8bnVtYmVyPnBhcmVudCAvIDEwMDtcclxuICAgICAgICBlbHNlXHJcbiAgICAgICAgICBwcm9ncmFtSW5kZXggPSA8bnVtYmVyPnJlYWxJbmRleDtcclxuICAgICAgfVxyXG4gICAgICByZXNWYWwuTWdOdW1WYWwgPSBOVU1fVFlQRS5mcm9tX2RvdWJsZSg8bnVtYmVyPnByb2dyYW1JbmRleCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBldmFsX29wX0NhbGxKUyh0YXNrOiBJVGFzaywgbWV0aG9kTmFtZTogc3RyaW5nLCBleHBWYWw6IEV4cFZhbFtdLCByZXNWYWw6IEV4cFZhbCk6IHZvaWQge1xyXG4gICAgcmVzVmFsLkF0dHIgPSBTdG9yYWdlQXR0cmlidXRlLkFMUEhBO1xyXG4gICAgcmVzVmFsLlN0clZhbCA9ICcnO1xyXG4gICAgaWYoKDxUYXNrQmFzZT50YXNrKS5pc01haW5Qcm9nKCkpXHJcbiAgICB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoXCJDYWxsSlMgY2Fubm90IGJlIHVzZWQgaW4gTWFpbiBQcm9ncmFtXCIpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBsZXQgZm9ybTogTWdGb3JtID0gPE1nRm9ybT4oPFRhc2tCYXNlPnRhc2spLmdldEZvcm0oKTtcclxuICAgIGxldCBhcmdzID0gdGhpcy5wYXJhbXMyYXJndW1lbnRzKGV4cFZhbCwgMCwgZXhwVmFsLmxlbmd0aCk7XHJcblxyXG4gICAgaWYoIWlzTnVsbE9yVW5kZWZpbmVkKGFyZ3MpKSB7XHJcbiAgICAgIHJlc1ZhbC5TdHJWYWwgPSBDb21tYW5kcy5hZGRDYWxsSlMoZm9ybSwgZm9ybS5VbmlxdWVOYW1lLCBtZXRob2ROYW1lLCBhcmdzKTtcclxuICAgICAgcmVzVmFsLkF0dHIgPSBTdG9yYWdlQXR0cmlidXRlLkFMUEhBO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcblxyXG4gIGV2YWxfb3Bfc2V0X2Nvb2tpZShjb29raWVOYW1lOiBzdHJpbmcsIGV4cFZhbDogRXhwVmFsW10sIHJlc1ZhbDogRXhwVmFsKVxyXG4gIHtcclxuICAgIHJlc1ZhbC5BdHRyID0gU3RvcmFnZUF0dHJpYnV0ZS5CT09MRUFOO1xyXG4gICAgcmVzVmFsLlN0clZhbCA9ICcnO1xyXG5cclxuICAgIGxldCBhcmdzID0gdGhpcy5wYXJhbXMyYXJndW1lbnRzKGV4cFZhbCwgMCwgZXhwVmFsLmxlbmd0aCk7XHJcbiAgICB2YXIgZXhwaXJlcywgcGF0aCwgZG9tYWluLCBzZWN1cmUsIHNhbWVTaXRlO1xyXG5cclxuICAgIGV4cGlyZXMgPSBhcmdzWzFdO1xyXG4gICAgbGV0IG5hdGl2ZUR0OiBEYXRlO1xyXG4gICAgaWYoZXhwaXJlcylcclxuICAgIHtcclxuICAgICAgLy8gZ2V0IGRhdGUgZnJvbSBtYWdpYyBudW1iZXJcclxuICAgICAgbGV0ICBicmVha1BhcmFtcyA9IG5ldyBEYXRlQnJlYWtQYXJhbXMoKTtcclxuICAgICAgRGlzcGxheUNvbnZlcnRvci5JbnN0YW5jZS5kYXRlX2JyZWFrX2RhdGVtb2RlKGJyZWFrUGFyYW1zLCBleHBpcmVzLCBmYWxzZSwgMCk7XHJcbiAgICAgIGlmIChicmVha1BhcmFtcy5tb250aCA+IDApXHJcbiAgICAgICAgYnJlYWtQYXJhbXMubW9udGggPSBicmVha1BhcmFtcy5tb250aCAtIDE7IC8vbW9udGggaXMgMCBiYXNlZCBpbiBEYXRlIGNsYXNzXHJcblxyXG4gICAgICBpZiAoYnJlYWtQYXJhbXMueWVhciA9PSAwICYmIGJyZWFrUGFyYW1zLm1vbnRoID09IDAgJiYgYnJlYWtQYXJhbXMuZGF5ID09IDApXHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgIG5hdGl2ZUR0ID0gbmV3IERhdGUoYnJlYWtQYXJhbXMueWVhciwgYnJlYWtQYXJhbXMubW9udGgsIGJyZWFrUGFyYW1zLmRheSk7XHJcbiAgICAgIC8vIGdldCB0aW1lIGZyb20gbWFnaWMgbnVtYmVyXHJcbiAgICAgIGxldCB0aW1lQnJlYWtQYXJhbXM6IFRpbWVCcmVha1BhcmFtcyA9IG5ldyBUaW1lQnJlYWtQYXJhbXMoKTtcclxuICAgICAgRGlzcGxheUNvbnZlcnRvci50aW1lX2JyZWFrKHRpbWVCcmVha1BhcmFtcywgZXhwaXJlcyk7XHJcblxyXG4gICAgICBuYXRpdmVEdC5zZXRIb3Vycyh0aW1lQnJlYWtQYXJhbXMuaG91cik7XHJcbiAgICAgIG5hdGl2ZUR0LnNldE1pbnV0ZXModGltZUJyZWFrUGFyYW1zLm1pbnV0ZSk7XHJcbiAgICAgIG5hdGl2ZUR0LnNldFNlY29uZHModGltZUJyZWFrUGFyYW1zLnNlY29uZCk7XHJcbiAgICB9XHJcbiAgICBwYXRoID0gYXJnc1syXTtcclxuICAgIGRvbWFpbiA9IGFyZ3NbM107XHJcblxyXG4gICAgcmVzVmFsLkJvb2xWYWwgPSAgQ29va2llU2VydmljZS5zZXRDb29raWUoY29va2llTmFtZSwgYXJnc1swXSwgbmF0aXZlRHQsIHBhdGgsIGRvbWFpbiAsIHNlY3VyZSwgc2FtZVNpdGUpOztcclxuICB9XHJcblxyXG4gIGV2YWxfb3BfZ2V0X2Nvb2tpZShjb29raWVOYW1lOiBzdHJpbmcsIHJlc1ZhbDogRXhwVmFsKVxyXG4gIHtcclxuICAgIC8vIGdldCB0aGUgY29va2llIHZhbHVlXHJcbiAgICByZXNWYWwuU3RyVmFsID0gQ29va2llU2VydmljZS5nZXRDb29raWUoY29va2llTmFtZSk7XHJcbiAgfVxyXG5cclxuICBldmFsX29wX2RlbGV0ZV9jb29raWUoY29va2llTmFtZTogc3RyaW5nLCByZXNWYWw6IEV4cFZhbClcclxuICB7XHJcbiAgICAvLyBkZWxldGUgY29va2llcyBcclxuICAgIHJlc1ZhbC5BdHRyID0gU3RvcmFnZUF0dHJpYnV0ZS5CT09MRUFOO1xyXG5cclxuICAgIHJlc1ZhbC5Cb29sVmFsID0gQ29va2llU2VydmljZS5kZWxldGVDb29raWUoY29va2llTmFtZSk7O1xyXG4gIH1cclxuXHJcblxyXG5cclxuICBwcml2YXRlIHBhcmFtczJhcmd1bWVudHMoRXhwX3BhcmFtczogRXhwVmFsW10sIHN0YXJ0QXQ6IG51bWJlciwgY291bnQ6IG51bWJlcik6IEFycmF5PGFueT4ge1xyXG4gICAgbGV0IE5VTExfU1RSOiBzdHJpbmcgPSAnJztcclxuICAgIGxldCBhdHRyOiBBcnJheTxhbnk+ID0gbmV3IEFycmF5PGFueT4oKTtcclxuXHJcbiAgICBmb3IgKGxldCBpOiBudW1iZXIgPSBzdGFydEF0OyBpIDwgc3RhcnRBdCArIGNvdW50OyBpKyspIHtcclxuICAgICAgaWYgKGlzTnVsbE9yVW5kZWZpbmVkKEV4cF9wYXJhbXNbaV0pKSB7XHJcbiAgICAgICAgYXR0ci5wdXNoKE5VTExfU1RSKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBzd2l0Y2ggKEV4cF9wYXJhbXNbaV0uQXR0cikge1xyXG4gICAgICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLkFMUEhBOlxyXG4gICAgICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLlVOSUNPREU6XHJcbiAgICAgICAgICAgIGlmIChFeHBfcGFyYW1zW2ldLlN0clZhbCAhPSBudWxsICYmIEV4cF9wYXJhbXNbaV0uU3RyVmFsLmxlbmd0aCA+IDApXHJcbiAgICAgICAgICAgICAgYXR0ci5wdXNoKEV4cF9wYXJhbXNbaV0uU3RyVmFsKTtcclxuICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgIGF0dHIucHVzaChOVUxMX1NUUik7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5CT09MRUFOOlxyXG4gICAgICAgICAgICBhdHRyLnB1c2goRXhwX3BhcmFtc1tpXS5Cb29sVmFsID8gdHJ1ZSA6IGZhbHNlKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLkRBVEU6XHJcbiAgICAgICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuVElNRTpcclxuICAgICAgICAgICAgYXR0ci5wdXNoKEV4cF9wYXJhbXNbaV0uTWdOdW1WYWwuTlVNXzJfTE9ORygpKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLk5VTUVSSUM6XHJcbiAgICAgICAgICAgIGF0dHIucHVzaChFeHBfcGFyYW1zW2ldLk1nTnVtVmFsLnRvX2RvdWJsZSgpKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLkJMT0I6XHJcbiAgICAgICAgICAgIGxldCBibG9iID0gRXhwX3BhcmFtc1tpXS5TdHJWYWw7XHJcbiAgICAgICAgICAgIGlmKCFpc051bGxPclVuZGVmaW5lZChibG9iKSkge1xyXG4gICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGxldCBjb250ZW50VHlwZTogc3RyaW5nID0gQmxvYlR5cGUuZ2V0Q29udGVudFR5cGUoYmxvYik7XHJcbiAgICAgICAgICAgICAgICBpZiAoY29udGVudFR5cGUgIT09IEJsb2JUeXBlLkNPTlRFTlRfVFlQRV9CSU5BUlkpIHtcclxuICAgICAgICAgICAgICAgICAgYXR0ci5wdXNoKEJsb2JUeXBlLmdldFN0cmluZyhibG9iKSk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICBMb2dnZXIuSW5zdGFuY2UuV3JpdGVFcnJvclRvTG9nKCdBcmd1bWVudCAnICsgKGkgKyAxKSArICcgb2YgdHlwZSBCaW5hcnkgQmxvYiBpcyBub3Qgc3VwcG9ydGVkIGluIENhbGxKUycpO1xyXG4gICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuTk9ORTpcclxuICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgIExvZ2dlci5JbnN0YW5jZS5Xcml0ZUVycm9yVG9Mb2coJyBBcmd1bWVudCAnKyAoaSArIDEpKyAnIGlzIG5vdCBzdXBwb3J0ZWQgaW4gQ2FsbEpTJyApO1xyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBhdHRyO1xyXG4gIH1cclxuXHJcbn1cclxuXHJcbi8vLyA8c3VtbWFyeT5cclxuLy8vICAgVGhpcyBleGNlcHRpb24gdXNlZCB3aGVuIGF0IGxlYXN0IG9uZSBvZiB0aGUgb3BlcmFuZHMgaXMgbnVsbFxyXG4vLy8gPC9zdW1tYXJ5PlxyXG5leHBvcnQgY2xhc3MgTnVsbFZhbHVlRXhjZXB0aW9uIGV4dGVuZHMgRXhjZXB0aW9uIHtcclxuICBwcml2YXRlIF9hdHRyOiBTdG9yYWdlQXR0cmlidXRlID0gU3RvcmFnZUF0dHJpYnV0ZS5OT05FO1xyXG5cclxuICBjb25zdHJ1Y3RvcihhdHRyOiBTdG9yYWdlQXR0cmlidXRlKSB7XHJcbiAgICBzdXBlcigpO1xyXG4gICAgdGhpcy5fYXR0ciA9IGF0dHI7XHJcbiAgICB0aGlzLm5hbWUgPSAnTnVsbFZhbHVlRXhjZXB0aW9uJztcclxuICB9XHJcblxyXG4gIGdldEF0dHIoKTogU3RvcmFnZUF0dHJpYnV0ZSB7XHJcbiAgICByZXR1cm4gdGhpcy5fYXR0cjtcclxuICB9XHJcbn1cclxuXHJcbi8vLyA8c3VtbWFyeT5cclxuLy8vICAgVGhpcyBjbGFzcyBpcyB1c2VkIGZvciB0cmFja2luZyB0aGUgY3VycmVudCBwb3NpdGlvbiBpbiB0aGUgY3VycmVudFxyXG4vLy8gICBleGVjdXRlZCBleHByZXNzaW9uLlxyXG4vLy8gICBleHBTdHJfIC0gaXMgdGhlIGN1cnJlbnQgc3RyaW5nIG9mIHRoZSBleHByZXNzaW9uIGJlaW5nIGV4ZWN1dGVkXHJcbi8vLyAgIHBvc0lkeF8gLSBpcyB0aGUgY3VycmVudCBwb3NpdGlvbiBpbiB0aGUgZXhwcmVzc2lvbiAod2hpbGUgZXhlY3V0aW5nIGl0KVxyXG4vLy8gICBUaGUgY2xhc3MgYWxzbyBwcm92aWRlcyBtZXRob2RzIGZvciBleHRyYWN0aW5nIHZhbHVlcy9vcGVyYXRvciBmcm9tXHJcbi8vLyAgIHRoZSBleHByZXNzaW9uIGJlaW5nIGV4ZWN1dGVkLlxyXG4vLy8gPC9zdW1tYXJ5PlxyXG5leHBvcnQgY2xhc3MgRXhwU3RyVHJhY2tlciB7XHJcbiAgcHJpdmF0ZSBfZXhwQnl0ZXM6IEludDhBcnJheSA9IG51bGw7IC8vIEN1cnJlbnQgc3RyaW5nIG9mIHRoZSBleHByZXNzaW9uIGJlaW5nIGV4ZWN1dGVkXHJcbiAgcHJpdmF0ZSBfbG93SGlnaDogYm9vbGVhbiA9IHRydWU7XHJcbiAgcHJpdmF0ZSBfbnVsbEFyaXRobWV0aWM6IGJvb2xlYW4gPSBmYWxzZTsgLy8gdHJ1ZSwgaWYgdGFzayBvZiB0aGUgZXhwcmVzc2lvbiBoYXMgbnVsbCBhcml0aG1ldGljID09IG51bGxpZnk7XHJcbiAgcHJpdmF0ZSBfaXNOdWxsOiBib29sZWFuID0gZmFsc2U7IC8vIGlzIGV4cHJlc3Npb24gcmVzdWx0IE5VTExcclxuICBwcml2YXRlIF9wb3NJZHg6IG51bWJlciA9IDA7IC8vIFRoZSBjdXJyZW50IHBvc2l0aW9uIGluIHRoZSBleHByZXNzaW9uICh3aGlsZSBleGVjdXRpbmcgaXQpXHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBpbml0aWFsaXppbmcgdGhlIGNsYXNzIHdpdGggdGhlIGV4cHJlc3Npb24gdG8gYmUgZXhlY3V0ZWRcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIGNvbnN0cnVjdG9yKGV4cEJ5dGVzOiBJbnQ4QXJyYXksIG51bGxBcml0aG1ldGljOiBib29sZWFuKSB7XHJcbiAgICB0aGlzLl9leHBCeXRlcyA9IG5ldyBJbnQ4QXJyYXkoZXhwQnl0ZXMubGVuZ3RoKTtcclxuICAgIGZvciAobGV0IF9haTogbnVtYmVyID0gMDsgX2FpIDwgdGhpcy5fZXhwQnl0ZXMubGVuZ3RoOyArK19haSlcclxuICAgICAgdGhpcy5fZXhwQnl0ZXNbX2FpXSA9IDA7XHJcblxyXG4gICAgZm9yIChsZXQgaTogbnVtYmVyID0gMDsgaSA8IGV4cEJ5dGVzLmxlbmd0aDsgaSsrKVxyXG4gICAgICB0aGlzLl9leHBCeXRlc1tpXSA9IGV4cEJ5dGVzW2ldO1xyXG5cclxuICAgIHRoaXMuX251bGxBcml0aG1ldGljID0gbnVsbEFyaXRobWV0aWM7XHJcbiAgICB0aGlzLl9sb3dIaWdoID0gRW52aXJvbm1lbnQuSW5zdGFuY2UuZ2V0TG93SGlnaCgpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHNldCByZXN1bHQgdG8gYmUgTlVMTFxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgc2V0TnVsbFJlc3VsdCgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLl9udWxsQXJpdGhtZXRpYylcclxuICAgICAgdGhpcy5faXNOdWxsID0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICByZXNldCByZXN1bHQgdG8gYmUgTlVMTFxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgcmVzZXROdWxsUmVzdWx0KCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuX251bGxBcml0aG1ldGljKSB7XHJcbiAgICAgIHRoaXMuX2lzTnVsbCA9IGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIGNoZWNrIGlmIHRoZSByZXN1bHQgbXVzdCBiZSBudWxsXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBpc051bGwoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5faXNOdWxsO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIEdldCBhIG51bWJlciByZXByZXNlbnRlZCBpbiAxIGJ5dGUgZnJvbSB0aGUgZXhwcmVzc2lvblxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxyZXR1cm5zPiB0aGUgbnVtYmVyXHJcbiAgLy8vIDwvcmV0dXJucz5cclxuICBnZXQxQnl0ZU51bWJlcigpOiBudW1iZXIge1xyXG4gICAgbGV0IG51bTogbnVtYmVyID0gKHRoaXMuX2V4cEJ5dGVzW3RoaXMuX3Bvc0lkeF0gPj0gMCkgPyAoPG51bWJlcj50aGlzLl9leHBCeXRlc1t0aGlzLl9wb3NJZHhdKSA6ICgyNTYgKyA8bnVtYmVyPnRoaXMuX2V4cEJ5dGVzW3RoaXMuX3Bvc0lkeF0pO1xyXG4gICAgdGhpcy5fcG9zSWR4ICs9IDE7XHJcblxyXG4gICAgcmV0dXJuIG51bTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBHZXQgYSBudW1iZXIgcmVwcmVzZW50ZWQgaW4gMiBieXRlcyBmcm9tIHRoZSBleHByZXNzaW9uXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHJldHVybnM+IHRoZSBudW1iZXJcclxuICAvLy8gPC9yZXR1cm5zPlxyXG4gIGdldDJCeXRlTnVtYmVyKCk6IG51bWJlciB7XHJcbiAgICBsZXQgYzE6IG51bWJlciA9ICh0aGlzLl9leHBCeXRlc1t0aGlzLl9wb3NJZHhdID49IDApID8gKDxudW1iZXI+dGhpcy5fZXhwQnl0ZXNbdGhpcy5fcG9zSWR4XSkgOiAoMjU2ICsgPG51bWJlcj50aGlzLl9leHBCeXRlc1t0aGlzLl9wb3NJZHhdKTtcclxuICAgIHRoaXMuX3Bvc0lkeCArPSAxO1xyXG5cclxuICAgIGxldCBjMjogbnVtYmVyID0gKHRoaXMuX2V4cEJ5dGVzW3RoaXMuX3Bvc0lkeF0gPj0gMCkgPyAoPG51bWJlcj50aGlzLl9leHBCeXRlc1t0aGlzLl9wb3NJZHhdKSA6ICgyNTYgKyA8bnVtYmVyPnRoaXMuX2V4cEJ5dGVzW3RoaXMuX3Bvc0lkeF0pO1xyXG4gICAgdGhpcy5fcG9zSWR4ICs9IDE7XHJcblxyXG4gICAgbGV0IG51bTogbnVtYmVyID0gPG51bWJlcj4odGhpcy5fbG93SGlnaCA/IEV4cHJlc3Npb25FdmFsdWF0b3IuTUtfU0hSVCg8bnVtYmVyPmMyLCA8bnVtYmVyPmMxKSA6IEV4cHJlc3Npb25FdmFsdWF0b3IuTUtfU0hSVCg8bnVtYmVyPmMxLCA8bnVtYmVyPmMyKSk7XHJcbiAgICByZXR1cm4gbnVtO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIEdldCBhIG51bWJlciByZXByZXNlbnRlZCBpbiA0IGJ5dGUgZnJvbSB0aGUgZXhwcmVzc2lvblxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxyZXR1cm5zPnRoZSBudW1iZXI8L3JldHVybnM+XHJcbiAgZ2V0NEJ5dGVOdW1iZXIoKTogbnVtYmVyIHtcclxuICAgIGxldCBjNDogbnVtYmVyID0gKHRoaXMuX2V4cEJ5dGVzW3RoaXMuX3Bvc0lkeF0gPj0gMCkgPyAoPG51bWJlcj50aGlzLl9leHBCeXRlc1t0aGlzLl9wb3NJZHhdKSA6ICgyNTYgKyA8bnVtYmVyPnRoaXMuX2V4cEJ5dGVzW3RoaXMuX3Bvc0lkeF0pO1xyXG4gICAgdGhpcy5fcG9zSWR4ICs9IDE7XHJcblxyXG4gICAgbGV0IGMzOiBudW1iZXIgPSAodGhpcy5fZXhwQnl0ZXNbdGhpcy5fcG9zSWR4XSA+PSAwKSA/ICg8bnVtYmVyPnRoaXMuX2V4cEJ5dGVzW3RoaXMuX3Bvc0lkeF0pIDogKDI1NiArIDxudW1iZXI+dGhpcy5fZXhwQnl0ZXNbdGhpcy5fcG9zSWR4XSk7XHJcbiAgICB0aGlzLl9wb3NJZHggKz0gMTtcclxuXHJcbiAgICBsZXQgYzI6IG51bWJlciA9ICh0aGlzLl9leHBCeXRlc1t0aGlzLl9wb3NJZHhdID49IDApID8gKDxudW1iZXI+dGhpcy5fZXhwQnl0ZXNbdGhpcy5fcG9zSWR4XSkgOiAoMjU2ICsgPG51bWJlcj50aGlzLl9leHBCeXRlc1t0aGlzLl9wb3NJZHhdKTtcclxuICAgIHRoaXMuX3Bvc0lkeCArPSAxO1xyXG5cclxuICAgIGxldCBjMTogbnVtYmVyID0gKHRoaXMuX2V4cEJ5dGVzW3RoaXMuX3Bvc0lkeF0gPj0gMCkgPyAoPG51bWJlcj50aGlzLl9leHBCeXRlc1t0aGlzLl9wb3NJZHhdKSA6ICgyNTYgKyA8bnVtYmVyPnRoaXMuX2V4cEJ5dGVzW3RoaXMuX3Bvc0lkeF0pO1xyXG4gICAgdGhpcy5fcG9zSWR4ICs9IDE7XHJcblxyXG4gICAgbGV0IG51bTogbnVtYmVyID0gdGhpcy5fbG93SGlnaCA/IEV4cHJlc3Npb25FdmFsdWF0b3IuTUtfTE9ORyhjMSwgYzIsIGMzLCBjNCkgOiBFeHByZXNzaW9uRXZhbHVhdG9yLk1LX0xPTkcoYzQsIGMzLCBjMiwgYzEpO1xyXG4gICAgcmV0dXJuIG51bTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBHZXQgYWxwaGEgc3RyaW5nIGZyb20gdGhlIGV4cHJlc3Npb24gYnkgaXRzIGxlbmd0aFxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJsZW5cIj4gICAgICAgIGxlbmd0aCBvZiBzdHJpbmcgdG8gZXh0cmFjdDwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJ1cGRhdGVJZHhcIj4gIHRoZSBjdXJyZW50IHBvc2l0aW9uIHdpbGwgYmUgaW5jcmVtZW50ZWQ8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiaXNVbmljb2RlXCI+PC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+IHRoZSBudW1iZXI8L3JldHVybnM+XHJcbiAgZ2V0U3RyaW5nKGxlbjogbnVtYmVyLCB1cGRhdGVJZHg6IGJvb2xlYW4sIGlzVW5pY29kZTogYm9vbGVhbik6IHN0cmluZyB7XHJcbiAgICBsZXQgc3RyOiBzdHJpbmcgPSAnJztcclxuICAgIGxldCBieXRlczogbnVtYmVyO1xyXG5cclxuICAgIGlmIChpc1VuaWNvZGUgPT09IGZhbHNlKSB7XHJcbiAgICAgIGJ5dGVzID0gbGVuO1xyXG4gICAgICBsZXQgdG1wQ2hhcjogc3RyaW5nW10gPSBuZXcgQXJyYXk8c3RyaW5nPih0aGlzLl9leHBCeXRlcy5sZW5ndGgpO1xyXG4gICAgICBmb3IgKGxldCBpOiBudW1iZXIgPSAwOyBpIDwgdGhpcy5fZXhwQnl0ZXMubGVuZ3RoOyBpID0gaSArIDEpXHJcbiAgICAgICAgdG1wQ2hhcltpXSA9IFN0cmluZy5mcm9tQ2hhckNvZGUodGhpcy5fZXhwQnl0ZXNbaV0pO1xyXG5cclxuICAgICAgc3RyID0gTlN0cmluZy5Gcm9tQ2hhcnModG1wQ2hhciwgdGhpcy5fcG9zSWR4LCBsZW4pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgYnl0ZXMgPSBsZW4gKiAyO1xyXG5cclxuICAgICAgbGV0IHRtcDogVWludDhBcnJheSA9IG5ldyBVaW50OEFycmF5KGJ5dGVzKTtcclxuXHJcbiAgICAgIGxldCBpbmNyZW1lbnQ6IG51bWJlciA9ICghdGhpcy5fbG93SGlnaCkgPyBDb25zdEludGVyZmFjZS5CWVRFU19JTl9DSEFSIDogMTtcclxuXHJcbiAgICAgIGZvciAobGV0IGk6IG51bWJlciA9IHRoaXMuX3Bvc0lkeDsgaSA8IHRoaXMuX3Bvc0lkeCArIGJ5dGVzOyBpID0gaSArIGluY3JlbWVudCkge1xyXG4gICAgICAgIGlmICghdGhpcy5fbG93SGlnaCkge1xyXG4gICAgICAgICAgdG1wW2kgLSB0aGlzLl9wb3NJZHhdID0gPG51bWJlcj50aGlzLl9leHBCeXRlc1tpICsgMV07XHJcbiAgICAgICAgICB0bXBbaSArIDEgLSB0aGlzLl9wb3NJZHhdID0gPG51bWJlcj50aGlzLl9leHBCeXRlc1tpXTtcclxuICAgICAgICB9IGVsc2VcclxuICAgICAgICAgIHRtcFtpIC0gdGhpcy5fcG9zSWR4XSA9IDxudW1iZXI+dGhpcy5fZXhwQnl0ZXNbaV07XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRyeSB7XHJcbiAgICAgICAgc3RyID0gRW5jb2RpbmcuVW5pY29kZS5HZXRTdHJpbmcodG1wLCAwLCB0bXAubGVuZ3RoKTtcclxuICAgICAgfSBjYXRjaCAoZXgpIHtcclxuICAgICAgICBpZiAoZXggaW5zdGFuY2VvZiBFeGNlcHRpb24pIHtcclxuICAgICAgICAgIExvZ2dlci5JbnN0YW5jZS5Xcml0ZUV4Y2VwdGlvblRvTG9nKGV4KTtcclxuICAgICAgICB9IGVsc2VcclxuICAgICAgICAgIHRocm93IGV4O1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAodXBkYXRlSWR4KSB7XHJcbiAgICAgIHRoaXMuX3Bvc0lkeCArPSBieXRlcztcclxuICAgIH1cclxuICAgIHJldHVybiBzdHI7XHJcbiAgfVxyXG5cclxuICAvLy8gVG8gZW5oYW5jZSB0aGUgcGVyZm9ybWFuY2Ugb2YgdGhlIHJ1bnRpbWUgZXhwcmVzc2lvbiBldmFsdWF0b3IsXHJcbiAgLy8vIHRoZSBmdW5jdGlvbiBwb2ludGVyIHRvIHRoZSByZWxldmFudCBlbnRyeSBpbiB0aGUgRVhQX09QX1RBQiBpcyBzYXZlZFxyXG4gIC8vLyBpbiB0aGUgcG9saXNoZWQgZXhwcmVzc2lvbiBpbnN0ZWFkIG9mIHJlZmVyZW5jaW5nIGl0IGVhY2ggdGltZSB3ZSBuZWVkXHJcbiAgLy8vIGl0IGluIHJ1bnRpbWUuIEJ1dCBpbiBCcm93c2VyIENsaWVudCB3ZSBkbyBub3QgKHJhdGhlciB3ZSBjYW5ub3QpIHVzZVxyXG4gIC8vLyB0aGlzIGZ1bmN0aW9uIHBvaW50ZXIgYW5kIHNvIHdlIGhhdmUgdG8gc2tpcCBpdC5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgVG8gZW5oYW5jZSB0aGUgcGVyZm9ybWFuY2Ugb2YgdGhlIHJ1bnRpbWUgZXhwcmVzc2lvbiBldmFsdWF0b3IsXHJcbiAgLy8vICAgdGhlIGZ1bmN0aW9uIHBvaW50ZXIgdG8gdGhlIHJlbGV2YW50IGVudHJ5IGluIHRoZSBFWFBfT1BfVEFCIGlzIHNhdmVkXHJcbiAgLy8vICAgaW4gdGhlIHBvbGlzaGVkIGV4cHJlc3Npb24gaW5zdGVhZCBvZiByZWZlcmVuY2luZyBpdCBlYWNoIHRpbWUgd2UgbmVlZFxyXG4gIC8vLyAgIGl0IGluIHJ1bnRpbWUuIEJ1dCBpbiBCcm93c2VyIENsaWVudCB3ZSBkbyBub3QgKHJhdGhlciB3ZSBjYW5ub3QpIHVzZVxyXG4gIC8vLyAgIHRoaXMgZnVuY3Rpb24gcG9pbnRlciBhbmQgc28gd2UgaGF2ZSB0byBza2lwIGl0LlxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgcHJpdmF0ZSBza2lwT3BGdW5jdGlvblB0cigpOiB2b2lkIHtcclxuICAgIHRoaXMuX3Bvc0lkeCArPSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUEVSX0ZVTkNfUFRSX0xFTjtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBHZXQgYW4gb3BlcmF0b3IgZnJvbSB0aGUgY3VycmVudCBwb3NpdGlvbiBpbiB0aGUgZXhwcmVzc2lvblxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxyZXR1cm5zPiB0aGUgY3VycmVudCBvcGVyYXRvcjwvcmV0dXJucz5cclxuICBnZXRPcENvZGUoKTogbnVtYmVyIHtcclxuICAgIGxldCB0bXA6IG51bWJlcltdID0gW1xyXG4gICAgICB0aGlzLl9sb3dIaWdoID8gdGhpcy5fZXhwQnl0ZXNbdGhpcy5fcG9zSWR4XSA6IHRoaXMuX2V4cEJ5dGVzW3RoaXMuX3Bvc0lkeCArIDFdLCB0aGlzLl9sb3dIaWdoID8gdGhpcy5fZXhwQnl0ZXNbdGhpcy5fcG9zSWR4ICsgMV0gOiB0aGlzLl9leHBCeXRlc1t0aGlzLl9wb3NJZHhdXHJcbiAgICBdO1xyXG4gICAgbGV0IG51bTogbnVtYmVyID0gKHRtcFsxXSA+PSAwKSA/ICg8bnVtYmVyPnRtcFsxXSkgOiAoMjU2ICsgPG51bWJlcj50bXBbMV0pO1xyXG4gICAgbnVtIDw8PSA4O1xyXG4gICAgbnVtID0gKG51bSB8ICgodG1wWzBdID49IDApID8gKDxudW1iZXI+dG1wWzBdKSA6ICgyNTYgKyA8bnVtYmVyPnRtcFswXSkpKTtcclxuICAgIHRoaXMuX3Bvc0lkeCArPSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUEVSX0xFTjtcclxuXHJcbiAgICB0aGlzLnNraXBPcEZ1bmN0aW9uUHRyKCk7XHJcblxyXG4gICAgcmV0dXJuIG51bTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBHZXQgYSB2YXJpYWJsZSBpZHggZnJvbSB0aGUgY3VycmVudCBwb3NpdGlvbiBpbiB0aGUgZXhwcmVzc2lvblxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxyZXR1cm5zPiB0aGUgdmFyaWFibGUgaWR4PC9yZXR1cm5zPlxyXG4gIGdldFZhcklkeCgpOiBudW1iZXIge1xyXG4gICAgbGV0IGZsaXA6IG51bWJlciA9IDA7XHJcblxyXG4gICAgaWYgKHRoaXMuX2xvd0hpZ2gpXHJcbiAgICAgIGZsaXAgPSAxIC0gZmxpcDtcclxuXHJcbiAgICAvLyB0aGUgZmlyc3QgYnl0ZSBpcyB0aGUgbGVhc3Qgc2lnbmlmaWNhbnQgaGVyZVxyXG4gICAgbGV0IG51bTogbnVtYmVyID0gKHRoaXMuX2V4cEJ5dGVzW3RoaXMuX3Bvc0lkeCArIGZsaXBdID49IDApID8gKDxudW1iZXI+dGhpcy5fZXhwQnl0ZXNbdGhpcy5fcG9zSWR4ICsgZmxpcF0pIDogKDI1NiArIDxudW1iZXI+dGhpcy5fZXhwQnl0ZXNbdGhpcy5fcG9zSWR4ICsgZmxpcF0pO1xyXG4gICAgbnVtIDw8PSA4O1xyXG4gICAgZmxpcCA9IDEgLSBmbGlwO1xyXG4gICAgbnVtIHw9ICgodGhpcy5fZXhwQnl0ZXNbdGhpcy5fcG9zSWR4ICsgZmxpcF0gPj0gMCkgPyAoPG51bWJlcj50aGlzLl9leHBCeXRlc1t0aGlzLl9wb3NJZHggKyBmbGlwXSkgOiAoMjU2ICsgPG51bWJlcj50aGlzLl9leHBCeXRlc1t0aGlzLl9wb3NJZHggKyBmbGlwXSkpO1xyXG4gICAgdGhpcy5fcG9zSWR4ICs9IEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QRVJfTEVOO1xyXG5cclxuICAgIHJldHVybiBudW07XHJcbiAgfVxyXG5cclxuLy8vIDxzdW1tYXJ5PlxyXG4vLy8gICBHZXQgYSBNYWdpYyBOdW1iZXIgZnJvbSB0aGUgZXhwcmVzc2lvblxyXG4vLy8gPC9zdW1tYXJ5PlxyXG4vLy8gPHBhcmFtIG5hbWUgPSBcImxlblwiPiBsZW5ndGggb2YgdGhlIG1hZ2ljIG51bWJlciB3aXRoaW4gdGhlIGV4cHJlc3Npb248L3BhcmFtPlxyXG4vLy8gPHBhcmFtIG5hbWUgPSBcInVwZGF0ZUlkeFwiPiAgdGhlIGN1cnJlbnQgcG9zaXRpb24gd2lsbCBiZSBpbmNyZW1lbnRlZDwvcGFyYW0+XHJcbi8vLyA8cmV0dXJucz4gdGhlIE1hZ2ljIE51bWJlcjwvcmV0dXJucz5cclxuICBnZXRNYWdpY051bWJlcihsZW46IG51bWJlciwgdXBkYXRlSWR4OiBib29sZWFuKTogTlVNX1RZUEUge1xyXG4gICAgbGV0IG1nTnVtOiBOVU1fVFlQRSA9IG5ldyBOVU1fVFlQRSh0aGlzLl9leHBCeXRlcywgdGhpcy5fcG9zSWR4LCBsZW4pO1xyXG4gICAgaWYgKHVwZGF0ZUlkeClcclxuICAgICAgdGhpcy5fcG9zSWR4ICs9IGxlbjtcclxuICAgIHJldHVybiBtZ051bTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBTa2lwcyBhbiBvcGVyYXRvciB3aXRoaW4gYW4gZXhwcmVzc2lvbiBmcm9tIHRoZSBjdXJyZW50IHBvc2l0aW9uXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBza2lwT3BlcmF0b3IoKTogdm9pZCB7XHJcbiAgICAgIGxldCBhcmdzUmVtYWluOiBudW1iZXIgPSAxO1xyXG4gICAgICBsZXQgZXhwRGVzYzogRXhwRGVzYztcclxuICAgICAgbGV0IGxlbjtcclxuXHJcbiAgICAgIHdoaWxlIChhcmdzUmVtYWluID4gMCkge1xyXG4gICAgICAgICAgYXJnc1JlbWFpbi0tO1xyXG4gICAgICAgICAgbGV0IG9wQ29kZTogbnVtYmVyID0gdGhpcy5nZXRPcENvZGUoKTtcclxuICAgICAgICAgIHN3aXRjaCAob3BDb2RlKSB7XHJcbiAgICAgICAgICAgICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgICAgICAgICAgICAvLyBTa2lwIFN0cmluZyB2YWx1ZVxyXG4gICAgICAgICAgICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAgICAgICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9BOlxyXG4gICAgICAgICAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfSDpcclxuICAgICAgICAgICAgICAgICAgbGVuID0gdGhpcy5nZXQ0Qnl0ZU51bWJlcigpO1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLl9wb3NJZHggKz0gKGxlbiAqIENvbnN0SW50ZXJmYWNlLkJZVEVTX0lOX0NIQVIpO1xyXG4gICAgICAgICAgICAgICAgICAvLyBzaW5jZSB0aGUgc2VydmVyIHNlbmRzIHVzIGJvdGggVW5pY29kZSBzdHJpbmcgQW5zaSBzdHJpbmcgZm9yXHJcbiAgICAgICAgICAgICAgICAgIC8vIGVhY2ggc3RyaW5nIGluIHRoZSBleHByZXNzaW9uLCBhbmQgdGhlIGNsaWVudCB1c2VzIG9ubHkgdW5pY29kZSxcclxuICAgICAgICAgICAgICAgICAgLy8gd2Ugd2lsbCBkaXJlZ2FyZCB0aGUgQW5zaSBzdHJpbmdcclxuICAgICAgICAgICAgICAgICAgbGVuID0gdGhpcy5nZXQ0Qnl0ZU51bWJlcigpO1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLl9wb3NJZHggKz0gbGVuO1xyXG4gICAgICAgICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9FWFRfQTpcclxuICAgICAgICAgICAgICAgICAgbGVuID0gdGhpcy5nZXQyQnl0ZU51bWJlcigpO1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLl9wb3NJZHggKz0gbGVuO1xyXG4gICAgICAgICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICAgICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgICAgICAgICAgICAvLyBTa2lwIE1hZ2ljIE51bWJlciB2YWx1ZVxyXG4gICAgICAgICAgICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgICAgICAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfTjpcclxuICAgICAgICAgICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX1Q6XHJcbiAgICAgICAgICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9EOlxyXG4gICAgICAgICAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfTTpcclxuICAgICAgICAgICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX0s6XHJcbiAgICAgICAgICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9FOlxyXG4gICAgICAgICAgICAgICAgICBsZW4gPSB0aGlzLmdldDJCeXRlTnVtYmVyKCk7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuX3Bvc0lkeCArPSBsZW47XHJcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgICAgICAgICAgIC8vIFNraXAgUHJvZyBhbmQgRmlsZSBsaXRlcmFscyB3aGljaCBhbHNvIGluY2x1ZGUgYSBjb21wb25lbnQgcmVmZXJlbmNlXHJcbiAgICAgICAgICAgICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICAgICAgICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9GOlxyXG4gICAgICAgICAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfUDpcclxuICAgICAgICAgICAgICAgICAgbGVuID0gdGhpcy5nZXQyQnl0ZU51bWJlcigpO1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLl9wb3NJZHggKz0gbGVuO1xyXG4gICAgICAgICAgICAgICAgICBsZW4gPSB0aGlzLmdldDJCeXRlTnVtYmVyKCk7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuX3Bvc0lkeCArPSBsZW47XHJcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgICAgICAgICAgIC8vIFNraXAgTG9naWNhbCBWYWx1ZVxyXG4gICAgICAgICAgICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgICAgICAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfTDpcclxuICAgICAgICAgICAgICAgICAgdGhpcy5fcG9zSWR4ICs9IDI7XHJcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgICAgICAgICAgIC8vIFNraXAgdmFyaWFibGVcclxuICAgICAgICAgICAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgICAgICAgICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX1Y6XHJcbiAgICAgICAgICAgICAgICAgIC8vIGlmIHNvbWV0aGluZyB3cm9uZyB3aXRoIGVzY2FwZSB2YXJpYWJsZSwgY2hhbmdlIHRoaXMgbnVtYmVyLlxyXG4gICAgICAgICAgICAgICAgICB0aGlzLl9wb3NJZHggKz0gKEV4cHJlc3Npb25FdmFsdWF0b3IuUEFSRU5UX0xFTiArIEV4cHJlc3Npb25FdmFsdWF0b3IuTE9OR19PQkpFQ1RfTEVOKTtcclxuICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfRk9STTpcclxuICAgICAgICAgICAgICAgICAgdGhpcy5fcG9zSWR4ICs9IChFeHByZXNzaW9uRXZhbHVhdG9yLlBBUkVOVF9MRU4gKyBFeHByZXNzaW9uRXZhbHVhdG9yLkxPTkdfT0JKRUNUX0xFTik7XHJcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX1ZBUjpcclxuICAgICAgICAgICAgICAgICAgdGhpcy5fcG9zSWR4ICs9IChFeHByZXNzaW9uRXZhbHVhdG9yLlBBUkVOVF9MRU4gKyBFeHByZXNzaW9uRXZhbHVhdG9yLkxPTkdfT0JKRUNUX0xFTik7XHJcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX1JJR0hUX0xJVEVSQUw6XHJcbiAgICAgICAgICAgICAgICAgIGxlbiA9IHRoaXMuZ2V0MkJ5dGVOdW1iZXIoKTtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5fcG9zSWR4ICs9IGxlbjtcclxuICAgICAgICAgICAgICAgICAgLy8gU2tpcCBleHRyYSB1bnVzZWQgc3RyaW5nIHN0b3JlZCBhZnRlciBsaXRlcmFsXHJcbiAgICAgICAgICAgICAgICAgIGxlbiA9IHRoaXMuZ2V0MkJ5dGVOdW1iZXIoKTtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5fcG9zSWR4ICs9IGxlbjtcclxuICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgICAgIC8qIGNhc2UgRVhQX09QX0FDVDpcclxuICAgICAgICAgICAgICAgcG9zSWR4XyArPTI7XHJcbiAgICAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgICAgY2FzZSBFWFBfT1BfS0JEOlxyXG4gICAgICAgICAgICAgICBwb3NJZHhfICsrO1xyXG4gICAgICAgICAgICAgICBicmVhazsgKi9cclxuXHJcbiAgICAgICAgICAgICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgICAgICAgICAgICAvLyBDdXJyZW50IG9wZXJhdG9yIGlzIGEgZnVuY3Rpb24sIHNvIHdlIGp1c3QgbmVlZCB0byB1cGRhdGVcclxuICAgICAgICAgICAgICAvLyAgdGhlIG51bWJlciBvZiBhcmd1bWVudHMgdG8gc2tpcFxyXG4gICAgICAgICAgICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICAgIGV4cERlc2MgPSBFeHByZXNzaW9uRGljdC5leHBEZXNjW29wQ29kZV07XHJcbiAgICAgICAgICAgICAgICAgIGlmIChleHBEZXNjLkFyZ0NvdW50XyA8IDApXHJcbiAgICAgICAgICAgICAgICAgICAgICBhcmdzUmVtYWluICs9IHRoaXMuZ2V0MUJ5dGVOdW1iZXIoKTtcclxuICAgICAgICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgICAgICAgYXJnc1JlbWFpbiArPSBleHBEZXNjLkFyZ0NvdW50XztcclxuICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICB9XHJcbiAgICAgIH1cclxuICB9XHJcbn1cclxuXHJcbmNsYXNzIER5bmFtaWNPcGVyYXRpb24ge1xyXG4gIGFyZ0NvdW50XzogbnVtYmVyID0gMDtcclxuICBvcENvZGVfOiBudW1iZXIgPSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9OT05FO1xyXG59XHJcblxyXG4iXX0=
4441
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRXhwcmVzc2lvbkV2YWx1YXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2VuZ2luZS9zcmMvZXhwL0V4cHJlc3Npb25FdmFsdWF0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFDTCxRQUFRLEVBQ1IsUUFBUSxFQUNSLHFCQUFxQixFQUVyQixnQkFBZ0IsRUFDaEIsbUJBQW1CLEVBQ25CLE1BQU0sRUFDTixzQkFBc0IsRUFJdEIsUUFBUSxFQUNSLEdBQUcsRUFFSCxhQUFhLEVBRWIsVUFBVSxFQUNYLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEIsT0FBTyxFQUNMLFNBQVMsRUFDVCxpQkFBaUIsRUFDakIsTUFBTSxFQUNOLElBQUksRUFDSixZQUFZLEVBQ1osWUFBWSxFQUNaLGdCQUFnQixFQUNoQixxQkFBcUIsRUFDckIsT0FBTyxFQUNQLFdBQVcsRUFDWCxlQUFlLEVBQ2hCLE1BQU0sa0JBQWtCLENBQUM7QUFDMUIsT0FBTyxFQUNMLG9CQUFvQixFQUNwQixnQkFBZ0IsRUFDaEIsS0FBSyxFQUNMLFFBQVEsRUFDUixTQUFTLEVBQ1QsSUFBSSxFQUNKLEtBQUssRUFDTCxPQUFPLEVBQ1AsT0FBTyxFQUNQLFFBQVEsRUFDUixLQUFLLEVBQ0wsYUFBYSxFQUNkLE1BQU0sc0JBQXNCLENBQUM7QUFDOUIsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFFMUQsT0FBTyxFQUFXLGNBQWMsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQzNELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDRDQUE0QyxDQUFDO0FBQ2pGLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUNyRCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUVyRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFHcEQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDJDQUEyQyxDQUFDO0FBQzNFLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUMxQyxPQUFPLEVBQUUsd0JBQXdCLEVBQVksU0FBUyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDbEYsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDNUMsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBS25ELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNuRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDMUQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzlELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUV2RCxNQUFNLE9BQU8sbUJBQW9CLFNBQVEsc0JBQXNCO0lBbUI3RDtRQUNFLEtBQUssRUFBRSxDQUFDO1FBUkYsaUJBQVksR0FBYSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUNyQyx3QkFBbUIsR0FBdUIsSUFBSSxDQUFDO1FBUXJELElBQUksQ0FBQyxtQkFBbUIsR0FBRyxDQUFDLGVBQWUsQ0FBQyxrQkFBa0IsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLGtCQUFrQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMxRyxDQUFDO0lBUU8sZ0JBQWdCLENBQUMsYUFBNEIsRUFBRSxNQUFjO1FBQ25FLElBQUksR0FBRyxHQUFXLElBQUksTUFBTSxFQUFFLENBQUM7UUFDL0IsSUFBSSxHQUFXLENBQUM7UUFDaEIsSUFBSSxNQUFjLEVBQUUsR0FBVyxDQUFDO1FBQ2hDLElBQUksS0FBWSxDQUFDO1FBQ2pCLElBQUksTUFBYyxDQUFDO1FBRW5CLFFBQVEsTUFBTSxFQUFFO1lBSWQsS0FBSyxtQkFBbUIsQ0FBQyxRQUFRLENBQUM7WUFDbEMsS0FBSyxtQkFBbUIsQ0FBQyxRQUFRO2dCQUMvQixHQUFHLENBQUMsSUFBSSxHQUFHLGdCQUFnQixDQUFDLE9BQU8sQ0FBQztnQkFDcEMsR0FBRyxHQUFHLGFBQWEsQ0FBQyxjQUFjLEVBQUUsQ0FBQztnQkFDckMsR0FBRyxDQUFDLE1BQU0sR0FBRyxhQUFhLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7Z0JBSXRELEdBQUcsR0FBRyxhQUFhLENBQUMsY0FBYyxFQUFFLENBQUM7Z0JBQ3JDLGFBQWEsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztnQkFDMUMsTUFBTTtZQUVSLEtBQUssbUJBQW1CLENBQUMsWUFBWTtnQkFDbkMsR0FBRyxDQUFDLElBQUksR0FBRyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUM7Z0JBQ2xDLEdBQUcsR0FBRyxhQUFhLENBQUMsY0FBYyxFQUFFLENBQUM7Z0JBQ3JDLGFBQWEsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztnQkFJekMsR0FBRyxHQUFHLGFBQWEsQ0FBQyxjQUFjLEVBQUUsQ0FBQztnQkFDckMsR0FBRyxDQUFDLE1BQU0sR0FBRyxhQUFhLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7Z0JBQ3ZELE1BQU07WUFLUixLQUFLLG1CQUFtQixDQUFDLFFBQVEsQ0FBQztZQUNsQyxLQUFLLG1CQUFtQixDQUFDLFFBQVEsQ0FBQztZQUNsQyxLQUFLLG1CQUFtQixDQUFDLFFBQVEsQ0FBQztZQUNsQyxLQUFLLG1CQUFtQixDQUFDLFFBQVE7Z0JBQy9CLElBQUksTUFBTSxLQUFLLG1CQUFtQixDQUFDLFFBQVE7b0JBQ3pDLEdBQUcsQ0FBQyxJQUFJLEdBQUcsZ0JBQWdCLENBQUMsSUFBSSxDQUFDO3FCQUM5QixJQUFJLE1BQU0sS0FBSyxtQkFBbUIsQ0FBQyxRQUFRO29CQUM5QyxHQUFHLENBQUMsSUFBSSxHQUFHLGdCQUFnQixDQUFDLElBQUksQ0FBQzs7b0JBRWpDLEdBQUcsQ0FBQyxJQUFJLEdBQUcsZ0JBQWdCLENBQUMsT0FBTyxDQUFDO2dCQUN0QyxHQUFHLEdBQUcsYUFBYSxDQUFDLGNBQWMsRUFBRSxDQUFDO2dCQUNyQyxHQUFHLENBQUMsUUFBUSxHQUFHLGFBQWEsQ0FBQyxjQUFjLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO2dCQUN2RCxNQUFNO1lBS1IsS0FBSyxtQkFBbUIsQ0FBQyxRQUFRO2dCQUMvQixHQUFHLENBQUMsSUFBSSxHQUFHLGdCQUFnQixDQUFDLE9BQU8sQ0FBQztnQkFDcEMsR0FBRyxDQUFDLE9BQU8sR0FBRyxDQUFDLGFBQWEsQ0FBQyxjQUFjLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztnQkFDckQsTUFBTTtZQUtSLEtBQUssbUJBQW1CLENBQUMsUUFBUTtnQkFDL0IsTUFBTSxHQUFHLGFBQWEsQ0FBQyxTQUFTLEVBQUUsQ0FBQztnQkFDbkMsR0FBRyxHQUFHLGFBQWEsQ0FBQyxjQUFjLEVBQUUsQ0FBQztnQkFDckMsS0FBSyxHQUFVLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLE1BQU0sRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUM7Z0JBQ3pELEdBQUcsQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDO2dCQUczQixJQUFJLFdBQVcsR0FBWSxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsS0FBSyxnQkFBZ0IsQ0FBQyxXQUFXLENBQUM7b0JBQzNFLENBQUMsQ0FBQyxJQUFJO29CQUNOLENBQUMsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDO2dCQUN0QixHQUFHLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQyxNQUFNLEVBQUUsSUFBSSxXQUFXLENBQUM7Z0JBQzNDLEdBQUcsQ0FBQyxZQUFZLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQztnQkFDOUIsTUFBTSxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBRTlCLElBQUksTUFBTSxJQUFJLElBQUksSUFBSSxHQUFHLENBQUMsTUFBTTtvQkFDOUIsS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDLGlCQUFpQixFQUFFLEtBQUssU0FBUyxDQUFDLGtCQUFrQjtvQkFDcEUsR0FBRyxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7Z0JBRXJCLFFBQVEsR0FBRyxDQUFDLElBQUksRUFBRTtvQkFDaEIsS0FBSyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUM7b0JBQzVCLEtBQUssZ0JBQWdCLENBQUMsT0FBTzt3QkFDM0IsR0FBRyxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7d0JBQ3BCLE1BQU07b0JBRVIsS0FBSyxnQkFBZ0IsQ0FBQyxXQUFXO3dCQUMvQixHQUFHLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQztvQkFHMUIsS0FBSyxnQkFBZ0IsQ0FBQyxJQUFJO3dCQUN4QixHQUFHLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQzt3QkFFcEIsSUFBSSxHQUFHLENBQUMsTUFBTSxJQUFJLElBQUksRUFBRTs0QkFDdEIsR0FBRyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7NEJBQ2xCLEdBQUcsQ0FBQyxpQkFBaUIsR0FBRyxLQUFLLENBQUM7eUJBQy9COzs0QkFDQyxHQUFHLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDO3dCQUMvQixNQUFNO29CQUVSLEtBQUssZ0JBQWdCLENBQUMsT0FBTyxDQUFDO29CQUM5QixLQUFLLGdCQUFnQixDQUFDLElBQUksQ0FBQztvQkFDM0IsS0FBSyxnQkFBZ0IsQ0FBQyxJQUFJO3dCQUN4QixHQUFHLENBQUMsUUFBUSxHQUFHLE1BQU0sSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7d0JBQzVELE1BQU07b0JBRVIsS0FBSyxnQkFBZ0IsQ0FBQyxPQUFPO3dCQUMzQixJQUFJLE1BQU0sSUFBSSxJQUFJOzRCQUNoQixHQUFHLENBQUMsT0FBTyxHQUFHLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQzt3QkFDbkQsTUFBTTtpQkFFVDtnQkFDRCxNQUFNO1lBRVIsS0FBSyxtQkFBbUIsQ0FBQyxXQUFXO2dCQUNsQyxNQUFNLEdBQUcsYUFBYSxDQUFDLFNBQVMsRUFBRSxDQUFDO2dCQUNuQyxJQUFJLHNCQUFzQixHQUFXLGFBQWEsQ0FBQyxjQUFjLEVBQUUsQ0FBQztnQkFDcEUsc0JBQXNCLEdBQWMsSUFBSSxDQUFDLE9BQVEsQ0FBQyw4QkFBOEIsQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO2dCQUN6RyxJQUFJLENBQUMsaUJBQWlCLENBQUMsR0FBRyxFQUFFLHNCQUFzQixFQUFFLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxDQUFDO2dCQUM5RSxNQUFNO1lBRVIsS0FBSyxtQkFBbUIsQ0FBQyxVQUFVO2dCQUNqQyxNQUFNLEdBQUcsYUFBYSxDQUFDLFNBQVMsRUFBRSxDQUFDO2dCQUNuQyxHQUFHLEdBQUcsYUFBYSxDQUFDLGNBQWMsRUFBRSxDQUFDO2dCQUNyQyxJQUFJLEdBQUcsR0FBc0IsSUFBSSxDQUFDLE9BQVEsQ0FBQyxvQkFBb0IsQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUM7Z0JBQzdFLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxDQUFDO2dCQUMzRCxNQUFNO1lBRVIsS0FBSyxtQkFBbUIsQ0FBQyxvQkFBb0I7Z0JBQzNDLEdBQUcsR0FBRyxhQUFhLENBQUMsY0FBYyxFQUFFLENBQUM7Z0JBQ3JDLEdBQUcsQ0FBQyxRQUFRLEdBQUcsYUFBYSxDQUFDLGNBQWMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7Z0JBRXZELEdBQUcsR0FBRyxhQUFhLENBQUMsY0FBYyxFQUFFLENBQUM7Z0JBQ3JDLEdBQUcsQ0FBQyxJQUFJLEdBQUcsZ0JBQWdCLENBQUMsT0FBTyxDQUFDO2dCQUNwQyxhQUFhLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7Z0JBQzFDLE1BQU07U0FDVDtRQUVELE9BQU8sR0FBRyxDQUFDO0lBQ2IsQ0FBQztJQU9ELE1BQU0sQ0FBQyxXQUFXLENBQUMsTUFBYztRQUMvQixPQUFPLENBQUMsTUFBTSxJQUFJLG1CQUFtQixDQUFDLFFBQVE7WUFDNUMsTUFBTSxLQUFLLG1CQUFtQixDQUFDLFlBQVk7WUFDM0MsTUFBTSxLQUFLLG1CQUFtQixDQUFDLG9CQUFvQjtZQUNuRCxNQUFNLEtBQUssbUJBQW1CLENBQUMsUUFBUTtZQUN2QyxNQUFNLEtBQUssbUJBQW1CLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDaEQsQ0FBQztJQU1PLE1BQU0sQ0FBQyxZQUFZLENBQUMsT0FBZ0I7UUFDMUMsSUFBSSxPQUFPLENBQUMsU0FBUyxHQUFHLENBQUMsSUFBSSxPQUFPLENBQUMsUUFBUSxDQUFDLE1BQU0sR0FBVyxPQUFPLENBQUMsU0FBUztZQUM5RSxPQUFPLElBQUksQ0FBQztRQUNkLE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQVVhLGFBQWEsQ0FBQyxNQUFjLEVBQUUsYUFBNEIsRUFBRSxRQUFvQixFQUFFLFVBQWtDLEVBQUUsWUFBOEI7Ozs7O1lBQ2hLLElBQUksSUFBWSxDQUFDO1lBQ2pCLElBQUksSUFBWSxDQUFDO1lBQ2pCLElBQUksSUFBWSxDQUFDO1lBQ2pCLElBQUksSUFBWSxDQUFDO1lBQ2pCLElBQUksSUFBWSxDQUFDO1lBQ2pCLElBQUksSUFBWSxDQUFDO1lBQ2pCLElBQUksSUFBWSxDQUFDO1lBQ2pCLElBQUksSUFBWSxDQUFDO1lBQ2pCLElBQUksSUFBWSxDQUFDO1lBQ2pCLElBQUksT0FBTyxHQUFHLElBQUksZ0JBQWdCLEVBQUUsQ0FBQztZQUNyQyxJQUFJLEtBQWEsQ0FBQztZQUNsQixJQUFJLEdBQVcsQ0FBQztZQUVoQixJQUFJLE1BQU0sR0FBRyxJQUFJLE1BQU0sRUFBRSxDQUFDO1lBQzFCLElBQUksVUFBb0IsQ0FBQztZQUN6QixJQUFJLFNBQVMsR0FBWSxJQUFJLENBQUM7WUFDOUIsSUFBSSxLQUFhLENBQUM7WUFDbEIsSUFBSSxxQkFBcUIsR0FBWSxXQUFXLENBQUMsUUFBUSxDQUFDLHdCQUF3QixFQUFFLENBQUM7WUFHckYsSUFBSSxHQUFXLEVBQUUsR0FBVyxFQUFFLE1BQWMsRUFBRSxDQUFDLEdBQVcsQ0FBQyxDQUFDO1lBQzVELElBQUksR0FBUSxDQUFDO1lBS2IsSUFBSSxPQUFPLEdBQVksY0FBYyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUl0RCxJQUFJLG1CQUFtQixDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsRUFBRTtnQkFDN0MsS0FBSyxHQUFHLGFBQWEsQ0FBQyxjQUFjLEVBQUUsQ0FBQztnQkFFdkMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLEVBQUUsQ0FBQyxFQUFFLEVBQUU7b0JBQzFCLElBQUk7d0JBQ0YsTUFBTSxJQUFJLENBQUMsY0FBYyxDQUFDLGFBQWEsRUFBRSxRQUFRLEVBQUUsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUM7cUJBQzNFO29CQUFDLE9BQU8sU0FBUyxFQUFFO3dCQUNsQixJQUFJLFNBQVMsWUFBWSxTQUFTLEVBQUU7NEJBRWxDLE1BQU07eUJBQ1A7OzRCQUFNLE1BQU0sU0FBUyxDQUFDO3FCQUN4QjtpQkFDRjtnQkFDRCxJQUFJLG1CQUFtQixDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssS0FBSyxFQUM1RDtvQkFDRSxJQUFJLFdBQVcsR0FBVyxLQUFLLENBQUM7b0JBQ2hDLFFBQVEsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7aUJBQzVCOztvQkFDQyxNQUFNLENBQUMsUUFBUSxDQUFDLDBCQUEwQixDQUFDLHlFQUF5RTt3QkFDbEgsTUFBTSxHQUFHLCtCQUErQixDQUFDLENBQUM7YUFDL0M7WUFFRCxRQUFRLE1BQU0sRUFBRTtnQkFDZCxLQUFLLG1CQUFtQixDQUFDLFVBQVU7b0JBQ2pDLElBQUksR0FBVyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUM7b0JBQzlCLElBQUksR0FBVyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUM7b0JBQzlCLE1BQU0sQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztvQkFDN0QsTUFBTSxDQUFDLElBQUksR0FBRyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUM7b0JBQ3ZDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxNQUFNLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxDQUFDO29CQUMxQyxNQUFNO2dCQUVSLEtBQUssbUJBQW1CLENBQUMsVUFBVTtvQkFDakMsSUFBSSxHQUFXLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQztvQkFDOUIsSUFBSSxHQUFXLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQztvQkFDOUIsTUFBTSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO29CQUM3RCxNQUFNLENBQUMsSUFBSSxHQUFHLGdCQUFnQixDQUFDLE9BQU8sQ0FBQztvQkFDdkMsTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLE1BQU0sQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLENBQUM7b0JBQzFDLE1BQU07Z0JBRVIsS0FBSyxtQkFBbUIsQ0FBQyxVQUFVO29CQUNqQyxJQUFJLEdBQVcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDO29CQUM5QixJQUFJLEdBQVcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDO29CQUM5QixNQUFNLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7b0JBQzdELE1BQU0sQ0FBQyxJQUFJLEdBQUcsZ0JBQWdCLENBQUMsT0FBTyxDQUFDO29CQUN2QyxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsTUFBTSxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUMsQ0FBQztvQkFDMUMsTUFBTTtnQkFFUixLQUFLLG1CQUFtQixDQUFDLFVBQVU7b0JBQ2pDLElBQUksR0FBVyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUM7b0JBQzlCLElBQUksR0FBVyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUM7b0JBQzlCLE1BQU0sQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztvQkFDN0QsTUFBTSxDQUFDLElBQUksR0FBRyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUM7b0JBQ3ZDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxNQUFNLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxDQUFDO29CQUMxQyxNQUFNO2dCQUVSLEtBQUssbUJBQW1CLENBQUMsVUFBVTtvQkFDakMsSUFBSSxHQUFXLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQztvQkFDOUIsSUFBSSxHQUFXLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQztvQkFDOUIsTUFBTSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO29CQUM3RCxNQUFNLENBQUMsSUFBSSxHQUFHLGdCQUFnQixDQUFDLE9BQU8sQ0FBQztvQkFDdkMsTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLE1BQU0sQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLENBQUM7b0JBQzFDLE1BQU07Z0JBRVIsS0FBSyxtQkFBbUIsQ0FBQyxVQUFVO29CQUNqQyxJQUFJLEdBQVcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDO29CQUM5QixNQUFNLENBQUMsSUFBSSxHQUFHLGdCQUFnQixDQUFDLE9BQU8sQ0FBQztvQkFDdkMsSUFBSSxJQUFJLENBQUMsUUFBUSxJQUFJLElBQUksRUFBRTt3QkFDekIsT0FBTSxPQUFPLFlBQUMsTUFBTSxFQUFFLGdCQUFnQixDQUFDLE9BQU8sRUFBRTt3QkFDaEQsTUFBTTtxQkFDUDtvQkFFRCxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sRUFBRSxDQUFDO29CQUN4QixNQUFNLENBQUMsUUFBUSxHQUFHLElBQUksUUFBUSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztvQkFDOUMsTUFBTTtnQkFFUixLQUFLLG1CQUFtQixDQUFDLFVBQVU7b0JBQ2pDLElBQUksR0FBVyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUM7b0JBQzlCLElBQUksR0FBVyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUM7b0JBQzlCLElBQUksR0FBVyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUM7b0JBQzlCLE1BQU0sQ0FBQyxJQUFJLEdBQUcsZ0JBQWdCLENBQUMsT0FBTyxDQUFDO29CQUN2QyxJQUFJLElBQUksQ0FBQyxRQUFRLElBQUksSUFBSSxJQUFJLElBQUksQ0FBQyxRQUFRLElBQUksSUFBSSxJQUFJLElBQUksQ0FBQyxRQUFRLElBQUksSUFBSSxFQUFFO3dCQUMzRSxPQUFNLE9BQU8sWUFBQyxNQUFNLEVBQUUsZ0JBQWdCLENBQUMsT0FBTyxFQUFFO3dCQUNoRCxNQUFNO3FCQUNQO29CQUVELE1BQU0sQ0FBQyxRQUFRLEdBQUcsSUFBSSxRQUFRLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO29CQUM5QyxLQUFLLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLEVBQUUsQ0FBQztvQkFDbkMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7b0JBQy9CLEdBQUcsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsRUFBRSxDQUFDO29CQUNqQyxNQUFNLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQztvQkFDL0IsTUFBTTtnQkFFUixLQUFLLG1CQUFtQixDQUFDLFlBQVk7b0JBRW5DLElBQUksR0FBVyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUM7b0JBQzlCLElBQUksR0FBVyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUM7b0JBQzlCLElBQUksR0FBVyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUM7b0JBQzlCLE1BQU0sQ0FBQyxJQUFJLEdBQUcsZ0JBQWdCLENBQUMsT0FBTyxDQUFDO29CQUN2QyxJQUFJLElBQUksQ0FBQyxRQUFRLElBQUksSUFBSSxJQUFJLElBQUksQ0FBQyxRQUFRLElBQUksSUFBSSxJQUFJLElBQUksQ0FBQyxRQUFRLElBQUksSUFBSSxFQUFFO3dCQUMzRSxPQUFNLE9BQU8sWUFBQyxNQUFNLEVBQUUsZ0JBQWdCLENBQUMsT0FBTyxFQUFFO3dCQUNoRCxNQUFNO3FCQUNQO29CQUVELE1BQU0sQ0FBQyxRQUFRLEdBQUcsSUFBSSxRQUFRLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO29CQUM5QyxLQUFLLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLEVBQUUsQ0FBQztvQkFDbkMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7b0JBQy9CLEdBQUcsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsRUFBRSxDQUFDO29CQUNqQyxNQUFNLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztvQkFFM0IsTUFBTTtnQkFFUixLQUFLLG1CQUFtQixDQUFDLFNBQVM7b0JBQ2hDLElBQUksR0FBVyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUM7b0JBQzlCLElBQUksR0FBVyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUM7b0JBQzlCLE1BQU0sQ0FBQyxJQUFJLEdBQUcsZ0JBQWdCLENBQUMsT0FBTyxDQUFDO29CQUN2QyxJQUFJO3dCQUNGLE1BQU0sQ0FBQyxPQUFPLEdBQUcsQ0FBQyxtQkFBbUIsQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztxQkFDN0U7b0JBQUMsT0FBTyxrQkFBa0IsRUFBRTt3QkFDM0IsSUFBSSxrQkFBa0IsWUFBWSxrQkFBa0IsRUFBRTs0QkFDcEQsTUFBTSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7eUJBQ3hCOzs0QkFBTSxNQUFNLGtCQUFrQixDQUFDO3FCQUNqQztvQkFDRCxhQUFhLENBQUMsZUFBZSxFQUFFLENBQUM7b0JBQ2hDLE1BQU07Z0JBRVIsS0FBSyxtQkFBbUIsQ0FBQyxTQUFTO29CQUNoQyxJQUFJLEdBQVcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDO29CQUM5QixJQUFJLEdBQVcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDO29CQUM5QixNQUFNLENBQUMsSUFBSSxHQUFHLGdCQUFnQixDQUFDLE9BQU8sQ0FBQztvQkFDdkMsSUFBSTt3QkFDRixNQUFNLENBQUMsT0FBTyxHQUFHLENBQUMsbUJBQW1CLENBQUMsV0FBVyxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7cUJBQzdFO29CQUFDLE9BQU8sa0JBQWtCLEVBQUU7d0JBQzNCLElBQUksa0JBQWtCLFlBQVksa0JBQWtCLEVBQUU7NEJBQ3BELE9BQU0sT0FBTyxZQUFDLE1BQU0sRUFBRSxnQkFBZ0IsQ0FBQyxPQUFPLEVBQUU7eUJBQ2pEOzs0QkFBTSxNQUFNLGtCQUFrQixDQUFDO3FCQUNqQztvQkFDRCxNQUFNO2dCQUVSLEtBQUssbUJBQW1CLENBQUMsU0FBUztvQkFDaEMsSUFBSSxHQUFXLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQztvQkFDOUIsSUFBSSxHQUFXLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQztvQkFDOUIsTUFBTSxDQUFDLElBQUksR0FBRyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUM7b0JBQ3ZDLElBQUk7d0JBQ0YsTUFBTSxDQUFDLE9BQU8sR0FBRyxDQUFDLG1CQUFtQixDQUFDLFdBQVcsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO3FCQUMzRTtvQkFBQyxPQUFPLGtCQUFrQixFQUFFO3dCQUMzQixJQUFJLGtCQUFrQixZQUFZLGtCQUFrQixFQUFFOzRCQUNwRCxPQUFNLE9BQU8sWUFBQyxNQUFNLEVBQUUsZ0JBQWdCLENBQUMsT0FBTyxFQUFFO3lCQUNqRDs7NEJBQU0sTUFBTSxrQkFBa0IsQ0FBQztxQkFDakM7b0JBQ0QsTUFBTTtnQkFFUixLQUFLLG1CQUFtQixDQUFDLFNBQVM7b0JBQ2hDLElBQUksR0FBVyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUM7b0JBQzlCLElBQUksR0FBVyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUM7b0JBQzlCLE1BQU0sQ0FBQyxJQUFJLEdBQUcsZ0JBQWdCLENBQUMsT0FBTyxDQUFDO29CQUN2QyxJQUFJO3dCQUNGLE1BQU0sQ0FBQyxPQUFPLEdBQUcsQ0FBQyxtQkFBbUIsQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztxQkFDMUU7b0JBQUMsT0FBTyxrQkFBa0IsRUFBRTt3QkFDM0IsSUFBSSxrQkFBa0IsWUFBWSxrQkFBa0IsRUFBRTs0QkFDcEQsT0FBTSxPQUFPLFlBQUMsTUFBTSxFQUFFLGdCQUFnQixDQUFDLE9BQU8sRUFBRTt5QkFDakQ7OzRCQUFNLE1BQU0sa0JBQWtCLENBQUM7cUJBQ2pDO29CQUNELE1BQU07Z0JBRVIsS0FBSyxtQkFBbUIsQ0FBQyxTQUFTO29CQUNoQyxJQUFJLEdBQVcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDO29CQUM5QixJQUFJLEdBQVcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDO29CQUM5QixNQUFNLENBQUMsSUFBSSxHQUFHLGdCQUFnQixDQUFDLE9BQU8sQ0FBQztvQkFDdkMsSUFBSTt3QkFDRixNQUFNLENBQUMsT0FBTyxHQUFHLENBQUMsbUJBQW1CLENBQUMsV0FBVyxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7cUJBQzNFO29CQUFDLE9BQU8sa0JBQWtCLEVBQUU7d0JBQzNCLElBQUksa0JBQWtCLFlBQVksa0JBQWtCLEVBQUU7NEJBQ3BELE9BQU0sT0FBTyxZQUFDLE1BQU0sRUFBRSxnQkFBZ0IsQ0FBQyxPQUFPLEVBQUU7eUJBQ2pEOzs0QkFBTSxNQUFNLGtCQUFrQixDQUFDO3FCQUNqQztvQkFDRCxNQUFNO2dCQUVSLEtBQUssbUJBQW1CLENBQUMsU0FBUztvQkFDaEMsSUFBSSxHQUFXLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQztvQkFDOUIsSUFBSSxHQUFXLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQztvQkFDOUIsTUFBTSxDQUFDLElBQUksR0FBRyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUM7b0JBQ3ZDLElBQUk7d0JBQ0YsTUFBTSxDQUFDLE9BQU8sR0FBRyxDQUFDLG1CQUFtQixDQUFDLFdBQVcsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO3FCQUMxRTtvQkFBQyxPQUFPLGtCQUFrQixFQUFFO3dCQUMzQixJQUFJLGtCQUFrQixZQUFZLGtCQUFrQixFQUFFOzRCQUNwRCxPQUFNLE9BQU8sWUFBQyxNQUFNLEVBQUUsZ0JBQWdCLENBQUMsT0FBTyxFQUFFO3lCQUNqRDs7NEJBQU0sTUFBTSxrQkFBa0IsQ0FBQztxQkFDakM7b0JBQ0QsTUFBTTtnQkFFUixLQUFLLG1CQUFtQixDQUFDLFVBQVU7b0JBQ2pDLE1BQU0sR0FBVyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUM7b0JBQ2hDLE1BQU0sQ0FBQyxPQUFPLEdBQUcsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDO29CQUNqQyxNQUFNO2dCQUVSLEtBQUssbUJBQW1CLENBQUMsU0FBUztvQkFDaEMsTUFBTSxHQUFXLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQztvQkFDaEMsT0FBTyxHQUFHLElBQUksZ0JBQWdCLEVBQUUsQ0FBQztvQkFDakMsT0FBTyxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUM7b0JBRXRCLElBQUksTUFBTSxDQUFDLE9BQU8sRUFBRTt3QkFDbEIsT0FBTyxDQUFDLE9BQU8sR0FBRyxtQkFBbUIsQ0FBQyxhQUFhLENBQUM7d0JBQ3BELE9BQU8sQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDO3dCQUN0QixVQUFVLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO3FCQUMxQjt5QkFBTTt3QkFDTCxPQUFPLENBQUMsT0FBTyxHQUFHLG1CQUFtQixDQUFDLFlBQVksQ0FBQzt3QkFDbkQsT0FBTyxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUM7d0JBQ3RCLFVBQVUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7d0JBQ3pCLFNBQVMsR0FBRyxLQUFLLENBQUM7cUJBQ25CO29CQUNELE1BQU07Z0JBRVIsS0FBSyxtQkFBbUIsQ0FBQyxVQUFVO29CQUNqQyxNQUFNLEdBQVcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDO29CQUNoQyxPQUFPLEdBQUcsSUFBSSxnQkFBZ0IsRUFBRSxDQUFDO29CQUNqQyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRTt3QkFDbkIsT0FBTyxDQUFDLE9BQU8sR0FBRyxtQkFBbUIsQ0FBQyxhQUFhLENBQUM7d0JBQ3BELE9BQU8sQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDO3dCQUN0QixVQUFVLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO3FCQUMxQjt5QkFBTTt3QkFDTCxPQUFPLENBQUMsT0FBTyxHQUFHLG1CQUFtQixDQUFDLFlBQVksQ0FBQzt3QkFDbkQsT0FBTyxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUM7d0JBQ3RCLFVBQVUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7d0JBQ3pCLFNBQVMsR0FBRyxLQUFLLENBQUM7cUJBQ25CO29CQUNELE1BQU07Z0JBRVIsS0FBSyxtQkFBbUIsQ0FBQyxTQUFTO29CQUNoQyxJQUFJLEdBQVcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDO29CQUM5QixJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUU7d0JBQ2hCLE9BQU8sR0FBRyxJQUFJLGdCQUFnQixFQUFFLENBQUM7d0JBQ2pDLE9BQU8sQ0FBQyxPQUFPLEdBQUcsbUJBQW1CLENBQUMsWUFBWSxDQUFDO3dCQUNuRCxPQUFPLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQzt3QkFFdEIsVUFBVSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQzt3QkFDekIsT0FBTyxHQUFHLElBQUksZ0JBQWdCLEVBQUUsQ0FBQzt3QkFDakM7NEJBQ0UsT0FBTyxDQUFDLE9BQU8sR0FBRyxtQkFBbUIsQ0FBQyxhQUFhLENBQUM7NEJBQ3BELE9BQU8sQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDO3lCQUN2Qjt3QkFFRCxVQUFVLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO3FCQUMxQjt5QkFBTTt3QkFDTCxPQUFPLEdBQUcsSUFBSSxnQkFBZ0IsRUFBRSxDQUFDO3dCQUNqQzs0QkFDRSxPQUFPLENBQUMsT0FBTyxHQUFHLG1CQUFtQixDQUFDLGFBQWEsQ0FBQzs0QkFDcEQsT0FBTyxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUM7eUJBQ3ZCO3dCQUVELFVBQVUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7d0JBQ3pCLE9BQU8sR0FBRyxJQUFJLGdCQUFnQixFQUFFLENBQUM7d0JBQ2pDOzRCQUNFLE9BQU8sQ0FBQyxPQUFPLEdBQUcsbUJBQW1CLENBQUMsWUFBWSxDQUFDOzRCQUNuRCxPQUFPLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQzt5QkFDdkI7d0JBRUQsVUFBVSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztxQkFDMUI7b0JBQ0QsU0FBUyxHQUFHLEtBQUssQ0FBQztvQkFDbEIsYUFBYSxDQUFDLGVBQWUsRUFBRSxDQUFDO29CQUNoQyxNQUFNO2dCQUVSLEtBQUssbUJBQW1CLENBQUMsVUFBVTtvQkFDakMsSUFBSSxHQUFXLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQztvQkFFOUIsTUFBTSxDQUFDLElBQUksR0FBRyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUM7b0JBQ3ZDLElBQUksSUFBSSxDQUFDLE1BQU0sSUFBSSxJQUFJLEVBQUU7d0JBQ3ZCLE9BQU0sT0FBTyxZQUFDLE1BQU0sRUFBRSxnQkFBZ0IsQ0FBQyxPQUFPLEVBQUU7d0JBQ2hELE1BQU07cUJBQ1A7b0JBQ0QsTUFBTSxDQUFDLFFBQVEsR0FBRyxJQUFJLFFBQVEsRUFBRSxDQUFDO29CQUVqQyxJQUFJLHFCQUFxQixJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssZ0JBQWdCLENBQUMsT0FBTzt3QkFDakUsTUFBTSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQzs7d0JBRTlELE1BQU0sQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7b0JBRWpELE1BQU07Z0JBRVIsS0FBSyxtQkFBbUIsQ0FBQyxVQUFVO29CQUNqQyxJQUFJLEdBQVcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDO29CQUM5QixJQUFJLEdBQVcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDO29CQUM5QixNQUFNLENBQUMsSUFBSSxHQUFHLGdCQUFnQixDQUFDLE9BQU8sQ0FBQztvQkFDdkMsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLGdCQUFnQixDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsTUFBTSxJQUFJLElBQUk7d0JBQy9ELElBQUksQ0FBQyxJQUFJLEtBQUssZ0JBQWdCLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxNQUFNLElBQUksSUFBSTt3QkFDN0QsT0FBTSxPQUFPLFlBQUMsTUFBTSxFQUFFLGdCQUFnQixDQUFDLE9BQU8sRUFBRTs7d0JBRWhELE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO29CQUN0SSxNQUFNO2dCQUVSLEtBQUssbUJBQW1CLENBQUMsVUFBVTtvQkFDakMsSUFBSSxHQUFXLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQztvQkFDOUIsSUFBSSxHQUFXLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQztvQkFDOUIsSUFBSSxHQUFXLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQztvQkFFOUIsTUFBTSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO29CQUN4QixJQUFJLElBQUksQ0FBQyxRQUFRLElBQUksSUFBSSxJQUFJLElBQUksQ0FBQyxRQUFRLElBQUksSUFBSSxJQUFJLElBQUksQ0FBQyxNQUFNLElBQUksSUFBSSxFQUFFO3dCQUN6RSxPQUFNLE9BQU8sWUFBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLElBQUksRUFBRTt3QkFDbkMsTUFBTTtxQkFDUDtvQkFHRCxHQUFHLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLEVBQUUsQ0FBQztvQkFDakMsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7d0JBQ1osQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO3dCQUNULENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDUCxHQUFHLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLEVBQUUsQ0FBQztvQkFFakMsSUFBSSxxQkFBcUIsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLGdCQUFnQixDQUFDLE9BQU8sRUFBRTt3QkFDbkUsTUFBTSxDQUFDLElBQUksR0FBRyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUM7d0JBQ3JDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsZUFBZSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztxQkFDN0Q7eUJBQU07d0JBQ0wsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxHQUFHLEdBQUcsQ0FBQzt3QkFDbEMsSUFBSSxNQUFNLEdBQUcsR0FBRzs0QkFDZCxHQUFHLEdBQUcsTUFBTSxDQUFDO3dCQUNmLElBQUksR0FBRyxHQUFHLENBQUM7NEJBQ1QsR0FBRyxHQUFHLENBQUMsQ0FBQzt3QkFDVixNQUFNLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztxQkFDOUM7b0JBRUQsSUFBSSxNQUFNLENBQUMsTUFBTSxJQUFJLElBQUk7d0JBQ3ZCLE1BQU0sQ0FBQyxNQUFNLEdBQUcsRUFBRSxDQUFDO29CQUVyQixNQUFNO2dCQUVSLEtBQUssbUJBQW1CLENBQUMsV0FBVztvQkFDbEMsSUFBSSxHQUFXLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQztvQkFDOUIsSUFBSSxHQUFXLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQztvQkFFOUIsTUFBTSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO29CQUN4QixJQUFJLElBQUksQ0FBQyxRQUFRLElBQUksSUFBSSxJQUFJLElBQUksQ0FBQyxNQUFNLElBQUksSUFBSSxFQUFFO3dCQUNoRCxPQUFNLE9BQU8sWUFBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRTt3QkFDakMsTUFBTTtxQkFDUDtvQkFDRCxHQUFHLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLEVBQUUsQ0FBQztvQkFHakMsSUFBSSxxQkFBcUIsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLGdCQUFnQixDQUFDLE9BQU8sRUFBRTt3QkFDbkUsTUFBTSxDQUFDLElBQUksR0FBRyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUM7d0JBQ3JDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsZUFBZSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDO3dCQUN4RCxJQUFJLE1BQU0sQ0FBQyxNQUFNLElBQUksSUFBSTs0QkFDdkIsTUFBTSxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUM7cUJBQ3RCO3lCQUFNO3dCQUNMLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTTs0QkFDMUIsR0FBRyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDO3dCQUMzQixJQUFJLEdBQUcsR0FBRyxDQUFDOzRCQUNULEdBQUcsR0FBRyxDQUFDLENBQUM7d0JBQ1YsTUFBTSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7cUJBQzVDO29CQUNELE1BQU07Z0JBRVIsS0FBSyxtQkFBbUIsQ0FBQyxZQUFZO29CQUNuQyxJQUFJLEdBQVcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDO29CQUM5QixJQUFJLEdBQVcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDO29CQUU5QixNQUFNLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7b0JBQ3hCLElBQUksSUFBSSxDQUFDLFFBQVEsSUFBSSxJQUFJLElBQUksSUFBSSxDQUFDLE1BQU0sSUFBSSxJQUFJLEVBQUU7d0JBQ2hELE9BQU0sT0FBTyxZQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFO3dCQUNqQyxNQUFNO3FCQUNQO29CQUNELEdBQUcsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsRUFBRSxDQUFDO29CQUdqQyxJQUFJLHFCQUFxQixJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssZ0JBQWdCLENBQUMsT0FBTyxFQUFFO3dCQUNuRSxNQUFNLENBQUMsSUFBSSxHQUFHLGdCQUFnQixDQUFDLEtBQUssQ0FBQzt3QkFDckMsTUFBTSxDQUFDLE1BQU0sR0FBRyxlQUFlLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUM7d0JBQ3pELElBQUksTUFBTSxDQUFDLE1BQU0sSUFBSSxJQUFJOzRCQUN2QixNQUFNLENBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQztxQkFDdEI7eUJBQU07d0JBQ0wsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNOzRCQUMxQixHQUFHLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUM7d0JBQzNCLElBQUksR0FBRyxHQUFHLENBQUM7NEJBQ1QsR0FBRyxHQUFHLENBQUMsQ0FBQzt3QkFDVixHQUFHLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsR0FBRyxDQUFDO3dCQUcvQixNQUFNLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO3FCQUN6QztvQkFDRCxNQUFNO2dCQUVSLEtBQUssbUJBQW1CLENBQUMsV0FBVztvQkFDbEMsSUFBSSxHQUFXLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQztvQkFDOUIsSUFBSSxHQUFXLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQztvQkFFOUIsTUFBTSxDQUFDLElBQUksR0FBRyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUM7b0JBQ3ZDLElBQUksSUFBSSxDQUFDLFFBQVEsSUFBSSxJQUFJLElBQUksSUFBSSxDQUFDLE1BQU0sSUFBSSxJQUFJLEVBQUU7d0JBQ2hELE9BQU0sT0FBTyxZQUFDLE1BQU0sRUFBRSxnQkFBZ0IsQ0FBQyxPQUFPLEVBQUU7d0JBQ2hELE1BQU07cUJBQ1A7b0JBRUQsR0FBRyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDO29CQUN6QixDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLEVBQUUsQ0FBQztvQkFDL0IsSUFBSSxDQUFDLEdBQUcsQ0FBQzt3QkFDUCxDQUFDLEdBQUcsQ0FBQyxDQUFDO29CQUNSLE1BQU0sR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO29CQUNqQixJQUFJLE1BQU0sR0FBRyxNQUFNO3dCQUVqQixNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO29CQUMxQyxJQUFJLE1BQU0sR0FBRyxDQUFDLEVBQUU7d0JBQ2QsSUFBSSxHQUFHLElBQUksQ0FBQzs0QkFDVixNQUFNLENBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQzs2QkFDaEIsSUFBSSxNQUFNLEtBQUssQ0FBQzs0QkFDbkIsTUFBTSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDOzZCQUN6Qjs0QkFDSCxJQUFJLFNBQVMsR0FBRyxJQUFJLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQzs0QkFDMUMsT0FBTyxNQUFNLEdBQUcsQ0FBQyxFQUFFLE1BQU0sSUFBSSxHQUFHO2dDQUM5QixTQUFTLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQzs0QkFDaEMsTUFBTSxDQUFDLE1BQU0sR0FBRyxTQUFTLENBQUMsUUFBUSxFQUFFLENBQUM7eUJBQ3RDO3FCQUNGO29CQUNELElBQUksTUFBTSxDQUFDLE1BQU0sSUFBSSxJQUFJO3dCQUN2QixNQUFNLENBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQztvQkFDckIsTUFBTTtnQkFFUixLQUFLLG1CQUFtQixDQUFDLFlBQVk7b0JBQ25DLElBQUksR0FBVyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUM7b0JBQzlCLElBQUksR0FBVyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUM7b0JBRTlCLEdBQUcsR0FBRyxDQUFDLENBQUM7b0JBQ1IsTUFBTSxDQUFDLElBQUksR0FBRyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUM7b0JBQ3ZDLElBQUksSUFBSSxDQUFDLE1BQU0sSUFBSSxJQUFJLElBQUksSUFBSSxDQUFDLE1BQU0sSUFBSSxJQUFJLEVBQUU7d0JBQzlDLE9BQU0sT0FBTyxZQUFDLE1BQU0sRUFBRSxnQkFBZ0IsQ0FBQyxPQUFPLEVBQUU7d0JBQ2hELE1BQU07cUJBQ1A7b0JBRUQsTUFBTSxDQUFDLFFBQVEsR0FBRyxJQUFJLFFBQVEsRUFBRSxDQUFDO29CQUVqQyxJQUFJLHFCQUFxQjt3QkFDdkIsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLEtBQUssZ0JBQWdCLENBQUMsT0FBTzs0QkFDdEMsSUFBSSxDQUFDLElBQUksS0FBSyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsRUFBRTt3QkFDM0MsR0FBRyxHQUFHLGVBQWUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7cUJBQ3hEO3lCQUFNO3dCQUNMLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUU1Qjs0QkFDRSxNQUFNLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQzs0QkFDaEMsTUFBTTt5QkFDUDt3QkFDRCxHQUFHLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO3dCQUN2QyxJQUFJLEdBQUcsR0FBRyxDQUFDOzRCQUVULEdBQUcsR0FBRyxDQUFDLENBQUM7OzRCQUVSLEdBQUcsRUFBRSxDQUFDO3FCQUNUO29CQUVELE1BQU0sQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDO29CQUNoQyxNQUFNO2dCQUVSLEtBQUssbUJBQW1CLENBQUMsV0FBVyxDQUFDO2dCQUNyQyxLQUFLLG1CQUFtQixDQUFDLFlBQVksQ0FBQztnQkFDdEMsS0FBSyxtQkFBbUIsQ0FBQyxZQUFZO29CQUNuQyxJQUFJLEdBQVcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDO29CQUM5QixNQUFNLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLEtBQUssZ0JBQWdCLENBQUMsS0FBSzt3QkFDaEQsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLEtBQUs7d0JBQ3hCLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUM7b0JBQzdCLElBQUksSUFBSSxDQUFDLE1BQU0sSUFBSSxJQUFJLEVBQUU7d0JBQ3ZCLE9BQU0sT0FBTyxZQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsSUFBSSxFQUFFO3dCQUNuQyxNQUFNO3FCQUNQO29CQUVELFFBQVEsTUFBTSxFQUFFO3dCQUNkLEtBQUssbUJBQW1CLENBQUMsV0FBVzs0QkFDbEMsSUFBSSxDQUFDLE1BQU0sR0FBRyxtQkFBbUIsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQzs0QkFDNUQsTUFBTTt3QkFFUixLQUFLLG1CQUFtQixDQUFDLFlBQVk7NEJBQ25DLElBQUksQ0FBQyxNQUFNLEdBQUcsbUJBQW1CLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUM7NEJBQzVELE1BQU07d0JBRVIsS0FBSyxtQkFBbUIsQ0FBQyxZQUFZOzRCQUNuQyxJQUFJLENBQUMsTUFBTSxHQUFHLG1CQUFtQixDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDOzRCQUM1RCxNQUFNO3FCQUNUO29CQUNELE1BQU0sQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztvQkFDNUIsTUFBTTtnQkFFUixLQUFLLG1CQUFtQixDQUFDLFVBQVU7b0JBQ2pDLElBQUksR0FBVyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUM7b0JBQzlCLElBQUksR0FBVyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUM7b0JBQzlCLE1BQU0sQ0FBQyxJQUFJLEdBQUcsZ0JBQWdCLENBQUMsT0FBTyxDQUFDO29CQUN2QyxJQUFJLElBQUksQ0FBQyxNQUFNLElBQUksSUFBSSxJQUFJLElBQUksQ0FBQyxRQUFRLElBQUksSUFBSSxFQUFFO3dCQUNoRCxPQUFNLE9BQU8sWUFBQyxNQUFNLEVBQUUsZ0JBQWdCLENBQUMsT0FBTyxFQUFFO3dCQUNoRCxNQUFNO3FCQUNQO29CQUdELEdBQUcsR0FBRyxJQUFJLEdBQUcsQ0FBQyxtQkFBbUIsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLGdCQUFnQixDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUM7b0JBQy9HLE1BQU0sQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7b0JBQ3hDLE1BQU07Z0JBRVIsS0FBSyxtQkFBbUIsQ0FBQyxVQUFVO29CQUNqQyxJQUFJLEdBQVcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDO29CQUM5QixJQUFJLEdBQVcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDO29CQUM5QixNQUFNLENBQUMsSUFBSSxHQUFHLGdCQUFnQixDQUFDLE9BQU8sQ0FBQztvQkFDdkMsSUFBSSxJQUFJLENBQUMsTUFBTSxJQUFJLElBQUksSUFBSSxJQUFJLENBQUMsTUFBTSxJQUFJLElBQUksRUFBRTt3QkFDOUMsT0FBTSxPQUFPLFlBQUMsTUFBTSxFQUFFLGdCQUFnQixDQUFDLE9BQU8sRUFBRTt3QkFDaEQsTUFBTTtxQkFDUDtvQkFDRCxHQUFHLEdBQUcsSUFBSSxHQUFHLENBQUMsbUJBQW1CLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxnQkFBZ0IsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDO29CQUMvRyxNQUFNLENBQUMsUUFBUSxHQUFHLElBQUksUUFBUSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQztvQkFDNUUsTUFBTTtnQkFFUixLQUFLLG1CQUFtQixDQUFDLFFBQVE7b0JBQy9CLEdBQUcsR0FBRyxhQUFhLENBQUMsY0FBYyxFQUFFLENBQUM7b0JBQ3JDLElBQUksS0FBSyxHQUFXLGFBQWEsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztvQkFDOUQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUM7b0JBQzlCLE1BQU07Z0JBRVIsS0FBSyxtQkFBbUIsQ0FBQyxRQUFRO29CQUMvQixNQUFNLENBQUMsSUFBSSxHQUFHLGdCQUFnQixDQUFDLE9BQU8sQ0FBQztvQkFDdkMsR0FBRyxHQUFHLGFBQWEsQ0FBQyxjQUFjLEVBQUUsQ0FBQztvQkFDckMsTUFBTSxDQUFDLFFBQVEsR0FBRyxhQUFhLENBQUMsY0FBYyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQztvQkFDMUQsTUFBTTtnQkFFUixLQUFLLG1CQUFtQixDQUFDLFFBQVEsQ0FBQztnQkFDbEMsS0FBSyxtQkFBbUIsQ0FBQyxRQUFRO29CQUMvQixNQUFNLENBQUMsSUFBSSxHQUFHLGdCQUFnQixDQUFDLE9BQU8sQ0FBQztvQkFDdkMsR0FBRyxHQUFHLGFBQWEsQ0FBQyxjQUFjLEVBQUUsQ0FBQztvQkFDckMsTUFBTSxDQUFDLFFBQVEsR0FBRyxhQUFhLENBQUMsY0FBYyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQztvQkFFMUQsR0FBRyxHQUFHLGFBQWEsQ0FBQyxjQUFjLEVBQUUsQ0FBQztvQkFDckMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7b0JBQ3hDLE1BQU07Z0JBRVIsS0FBSyxtQkFBbUIsQ0FBQyxXQUFXO29CQUNsQyxJQUFJLEdBQVcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDO29CQUM5QixJQUFJLEdBQVcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDO29CQUM5QixJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7b0JBQ3RDLE1BQU07Z0JBRVIsS0FBSyxtQkFBbUIsQ0FBQyx3QkFBd0I7b0JBQy9DLElBQUksR0FBVyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUM7b0JBQzlCLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7b0JBQzNDLE1BQU07Z0JBRVIsS0FBSyxtQkFBbUIsQ0FBQyxtQkFBbUI7b0JBQzFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztvQkFDaEMsTUFBTTtnQkFFUixLQUFLLG1CQUFtQixDQUFDLFVBQVU7b0JBQ2pDLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLENBQUM7b0JBQzdCLE1BQU07Z0JBRVIsS0FBSyxtQkFBbUIsQ0FBQyxXQUFXO29CQUNsQyxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDO29CQUMxQixNQUFNO2dCQUVSLEtBQUssbUJBQW1CLENBQUMsWUFBWTtvQkFDbkMsSUFBSSxHQUFXLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQztvQkFDOUIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7b0JBQ2pDLE1BQU07Z0JBRVIsS0FBSyxtQkFBbUIsQ0FBQyxjQUFjO29CQUNyQyxJQUFJLEdBQVcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDO29CQUM5QixJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztvQkFDbkMsTUFBTTtnQkFFUixLQUFLLG1CQUFtQixDQUFDLHNCQUFzQjtvQkFDN0MsSUFBSSxHQUFXLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQztvQkFDOUIsSUFBSSxDQUFDLHFCQUFxQixDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztvQkFDekMsTUFBTTtnQkFFUixLQUFLLG1CQUFtQixDQUFDLGdCQUFnQjtvQkFDdkMsSUFBSSxHQUFXLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQztvQkFDOUIsSUFBSSxDQUFDLGlCQUFpQixDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztvQkFDckMsTUFBTTtnQkFFUixLQUFLLG1CQUFtQixDQUFDLGtCQUFrQjtvQkFDekMsSUFBSSxHQUFXLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQztvQkFDOUIsSUFBSSxDQUFDLG1CQUFtQixDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztvQkFDdkMsTUFBTTtnQkFFUixLQUFLLG1CQUFtQixDQUFDLHlCQUF5QjtvQkFDaEQsSUFBSSxHQUFXLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQztvQkFDOUIsSUFBSSxDQUFDLDBCQUEwQixDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztvQkFDOUMsTUFBTTtnQkFFUixLQUFLLG1CQUFtQixDQUFDLFdBQVcsQ0FBQztnQkFDckMsS0FBSyxtQkFBbUIsQ0FBQyxjQUFjO29CQUNyQyxNQUFNLENBQUMsUUFBUSxHQUFHLElBQUksUUFBUSxFQUFFLENBQUM7b0JBQ2pDLE1BQU0sQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsTUFBTSxLQUFLLG1CQUFtQixDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUM7b0JBQ2hILE1BQU0sQ0FBQyxJQUFJLEdBQUcsZ0JBQWdCLENBQUMsSUFBSSxDQUFDO29CQUNwQyxNQUFNO2dCQUVSLEtBQUssbUJBQW1CLENBQUMsWUFBWTtvQkFDbkMsSUFBSSxHQUFXLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQztvQkFDOUIsSUFBSSxHQUFXLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQztvQkFDOUIsSUFBSSxHQUFXLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQztvQkFDOUIsSUFBSSxHQUFXLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQztvQkFDOUIsSUFBSSxHQUFXLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQztvQkFDOUIsSUFBSSxHQUFXLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQztvQkFDOUIsSUFBSSxHQUFXLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQztvQkFDOUIsSUFBSSxHQUFXLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQztvQkFDOUIsTUFBTSxJQUFJLENBQUMsbUJBQW1CLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztvQkFDdkYsTUFBTTtnQkFFUixLQUFLLG1CQUFtQixDQUFDLFlBQVk7b0JBQ25DLElBQUksR0FBVyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUM7b0JBQzlCLElBQUksR0FBVyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUM7b0JBQzlCLElBQUksR0FBVyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUM7b0JBQzlCLElBQUksR0FBVyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUM7b0JBQzlCLElBQUksR0FBVyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUM7b0JBQzlCLElBQUksR0FBVyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUM7b0JBQzlCLE1BQU0sSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztvQkFDckUsTUFBTTtnQkFFUixLQUFLLG1CQUFtQixDQUFDLGNBQWM7b0JBQ3JDLElBQUksR0FBVyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUM7b0JBRTlCLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztvQkFDckMsTUFBTTtnQkFFUixLQUFLLG1CQUFtQixDQUFDLGNBQWM7b0JBQ3JDLElBQUksR0FBVyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUM7b0JBQzlCLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztvQkFDdEMsTUFBTTtnQkFFUixLQUFLLG1CQUFtQixDQUFDLGFBQWE7b0JBQ3BDLElBQUksR0FBVyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUM7b0JBQzlCLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDO29CQUNsQyxNQUFNO2dCQUVSLEtBQUssbUJBQW1CLENBQUMsYUFBYTtvQkFDcEMsSUFBSSxHQUFXLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQztvQkFDOUIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7b0JBQ2xDLE1BQU07Z0JBRVIsS0FBSyxtQkFBbUIsQ0FBQyxjQUFjO29CQUNyQyxJQUFJLEdBQVcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDO29CQUM5QixJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztvQkFDbkMsTUFBTTtnQkFFUixLQUFLLG1CQUFtQixDQUFDLHFCQUFxQjtvQkFDNUMsSUFBSSxHQUFXLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQztvQkFDOUIsSUFBSSxDQUFDLHNCQUFzQixDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztvQkFDMUMsYUFBYSxDQUFDLGVBQWUsRUFBRSxDQUFDO29CQUNoQyxNQUFNO2dCQUVSLEtBQUssbUJBQW1CLENBQUMsbUJBQW1CO29CQUMxQyxJQUFJLEdBQVcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDO29CQUM5QixJQUFJLENBQUMsb0JBQW9CLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDO29CQUN4QyxhQUFhLENBQUMsZUFBZSxFQUFFLENBQUM7b0JBQ2hDLE1BQU07Z0JBRVIsS0FBSyxtQkFBbUIsQ0FBQyx1QkFBdUI7b0JBQzlDLElBQUksR0FBVyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUM7b0JBQzlCLE1BQU0sSUFBSSxDQUFDLHdCQUF3QixDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztvQkFDbEQsYUFBYSxDQUFDLGVBQWUsRUFBRSxDQUFDO29CQUNoQyxNQUFNO2dCQUVSLEtBQUssbUJBQW1CLENBQUMseUJBQXlCO29CQUNoRCxJQUFJLEdBQVcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDO29CQUM5QixNQUFNLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7b0JBQ3BELGFBQWEsQ0FBQyxlQUFlLEVBQUUsQ0FBQztvQkFDaEMsTUFBTTtnQkFFUixLQUFLLG1CQUFtQixDQUFDLGNBQWM7b0JBQ3JDLElBQUksR0FBVyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUM7b0JBQzlCLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDO29CQUNuQyxNQUFNO2dCQUVSLEtBQUssbUJBQW1CLENBQUMsV0FBVyxDQUFDO2dCQUNyQyxLQUFLLG1CQUFtQixDQUFDLGNBQWM7b0JBQ3JDLE1BQU0sQ0FBQyxRQUFRLEdBQUcsSUFBSSxRQUFRLEVBQUUsQ0FBQztvQkFDakMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEtBQUssbUJBQW1CLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQztvQkFDaEgsTUFBTSxDQUFDLElBQUksR0FBRyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUM7b0JBQ3BDLE1BQU07Z0JBRVIsS0FBSyxtQkFBbUIsQ0FBQyxZQUFZLENBQUM7Z0JBQ3RDLEtBQUssbUJBQW1CLENBQUMsZUFBZTtvQkFDdEMsTUFBTSxDQUFDLFFBQVEsR0FBRyxJQUFJLFFBQVEsRUFBRSxDQUFDO29CQUNqQyxNQUFNLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLE1BQU0sS0FBSyxtQkFBbUIsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDO29CQUNsSCxNQUFNLENBQUMsSUFBSSxHQUFHLGdCQUFnQixDQUFDLElBQUksQ0FBQztvQkFDcEMsTUFBTTtnQkFFUixLQUFLLG1CQUFtQixDQUFDLFVBQVU7b0JBQ2pDLElBQUksR0FBVyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUM7b0JBQzlCLElBQUksR0FBVyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUM7b0JBQzlCLE1BQU0sQ0FBQyxRQUFRLEdBQUcsSUFBSSxRQUFRLEVBQUUsQ0FBQztvQkFDakMsTUFBTSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO29CQUNyRSxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsTUFBTSxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUMsQ0FBQztvQkFDMUMsTUFBTSxDQUFDLElBQUksR0FBRyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUM7b0JBQ3ZDLE1BQU07Z0JBRVIsS0FBSyxtQkFBbUIsQ0FBQyxVQUFVO29CQUNqQyxJQUFJLEdBQVcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDO29CQUM5QixNQUFNLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO29CQUN0RCxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsTUFBTSxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUMsQ0FBQztvQkFDMUMsTUFBTSxDQUFDLElBQUksR0FBRyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUM7b0JBQ3ZDLE1BQU07Z0JBRVIsS0FBSyxtQkFBbUIsQ0FBQyxVQUFVO29CQUNqQyxJQUFJLEdBQVcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDO29CQUM5QixNQUFNLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO29CQUN0RCxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsTUFBTSxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUMsQ0FBQztvQkFDMUMsTUFBTSxDQUFDLElBQUksR0FBRyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUM7b0JBQ3ZDLE1BQU07Z0JBRVIsS0FBSyxtQkFBbUIsQ0FBQyxVQUFVO29CQUNqQyxJQUFJLEdBQVcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDO29CQUM5QixNQUFNLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO29CQUN0RCxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsTUFBTSxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUMsQ0FBQztvQkFDMUMsTUFBTSxDQUFDLElBQUksR0FBRyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUM7b0JBQ3ZDLE1BQU07Z0JBRVIsS0FBSyxtQkFBbUIsQ0FBQyxVQUFVO29CQUNqQyxJQUFJLEdBQVcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDO29CQUM5QixNQUFNLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO29CQUN0RCxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsTUFBTSxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUMsQ0FBQztvQkFDMUMsTUFBTSxDQUFDLElBQUksR0FBRyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUM7b0JBQ3ZDLE1BQU07Z0JBRVIsS0FBSyxtQkFBbUIsQ0FBQyxVQUFVO29CQUNqQyxJQUFJLEdBQVcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDO29CQUM5QixNQUFNLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO29CQUN0RCxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsTUFBTSxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUMsQ0FBQztvQkFDMUMsTUFBTSxDQUFDLElBQUksR0FBRyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUM7b0JBRXZDLE1BQU07Z0JBRVIsS0FBSyxtQkFBbUIsQ0FBQyxVQUFVO29CQUNqQyxJQUFJLEdBQVcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDO29CQUM5QixNQUFNLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO29CQUN0RCxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsTUFBTSxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUMsQ0FBQztvQkFDMUMsTUFBTSxDQUFDLElBQUksR0FBRyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUM7b0JBQ3ZDLE1BQU07Z0JBRVIsS0FBSyxtQkFBbUIsQ0FBQyxXQUFXO29CQUNsQyxJQUFJLEdBQVcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDO29CQUM5QixNQUFNLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO29CQUN2RCxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsTUFBTSxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUMsQ0FBQztvQkFDMUMsTUFBTSxDQUFDLElBQUksR0FBRyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUM7b0JBQ3ZDLE1BQU07Z0JBRVIsS0FBSyxtQkFBbUIsQ0FBQyxXQUFXO29CQUNsQyxJQUFJLEdBQVcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDO29CQUM5QixNQUFNLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO29CQUN2RCxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsTUFBTSxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUMsQ0FBQztvQkFDMUMsTUFBTSxDQUFDLElBQUksR0FBRyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUM7b0JBQ3ZDLE1BQU07Z0JBRVIsS0FBSyxtQkFBbUIsQ0FBQyxXQUFXO29CQUNsQyxJQUFJLEdBQVcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDO29CQUM5QixNQUFNLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO29CQUN2RCxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsTUFBTSxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUMsQ0FBQztvQkFDMUMsTUFBTSxDQUFDLElBQUksR0FBRyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUM7b0JBQ3ZDLE1BQU07Z0JBRVIsS0FBSyxtQkFBbUIsQ0FBQyxXQUFXO29CQUNsQyxJQUFJLEdBQVcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDO29CQUM5QixNQUFNLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO29CQUN2RCxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsTUFBTSxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUMsQ0FBQztvQkFDMUMsTUFBTSxDQUFDLElBQUksR0FBRyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUM7b0JBQ3ZDLE1BQU07Z0JBRVIsS0FBSyxtQkFBbUIsQ0FBQyxVQUFVLENBQUM7Z0JBQ3BDLEtBQUssbUJBQW1CLENBQUMsVUFBVTtvQkFDakMsS0FBSyxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQztvQkFDdkIsSUFBSSxDQUFDLE9BQU8sQ0FBUyxRQUFRLENBQUMsR0FBRyxFQUFFLEVBQUUsTUFBTSxDQUFDLENBQUM7b0JBQzdDLElBQUk7d0JBQ0YsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLEVBQUUsQ0FBQyxFQUFFLEVBQUU7NEJBQzFCLElBQUksR0FBVyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUM7NEJBQzlCLElBQUksTUFBTSxLQUFLLG1CQUFtQixDQUFDLFVBQVUsRUFBRTtnQ0FDN0MsSUFBSSxtQkFBbUIsQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDO29DQUN6RCxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQzs2QkFDOUI7aUNBRUk7Z0NBQ0gsSUFBSSxtQkFBbUIsQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDO29DQUN6RCxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQzs2QkFDOUI7eUJBQ0Y7cUJBQ0Y7b0JBQUMsT0FBTyxpQkFBaUIsRUFBRTt3QkFDMUIsSUFBSSxpQkFBaUIsWUFBWSxrQkFBa0IsRUFBRTs0QkFDbkQsT0FBTyxRQUFRLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxLQUFLLEVBQUUsQ0FBQyxFQUFFO2dDQUUzQyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUM7NEJBQ2pCLE1BQU0sQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDOzRCQUNyQixNQUFNLENBQUMsSUFBSSxHQUFHLGlCQUFpQixDQUFDLE9BQU8sRUFBRSxDQUFDO3lCQUMzQzs7NEJBQU0sTUFBTSxpQkFBaUIsQ0FBQztxQkFDaEM7b0JBQ0QsTUFBTTtnQkFFUixLQUFLLG1CQUFtQixDQUFDLFlBQVk7b0JBQ25DLElBQUksR0FBVyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUM7b0JBQzlCLElBQUksR0FBVyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUM7b0JBQzlCLElBQUksR0FBVyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUM7b0JBQzlCLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7b0JBQzdDLE1BQU07Z0JBRVIsS0FBSyxtQkFBbUIsQ0FBQyxVQUFVO29CQUNqQyxJQUFJLEdBQVcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDO29CQUU5QixJQUFJLEdBQVcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDO29CQUU5QixJQUFJLEdBQVcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDO29CQUU5QixJQUFJLEdBQVcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDO29CQUk5QixJQUFJLHFCQUFxQjt3QkFDdkIsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLEtBQUssZ0JBQWdCLENBQUMsT0FBTzs0QkFDdEMsSUFBSSxDQUFDLElBQUksS0FBSyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsRUFBRTt3QkFDM0MsTUFBTSxDQUFDLElBQUksR0FBRyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUM7d0JBQ3JDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsZUFBZSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLEVBQUUsRUFDdkYsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDO3FCQUMvQjt5QkFBTTt3QkFDTCxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztxQkFDcEQ7b0JBRUQsTUFBTTtnQkFFUixLQUFLLG1CQUFtQixDQUFDLFVBQVU7b0JBQ2pDLElBQUksR0FBVyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUM7b0JBRTlCLElBQUksR0FBVyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUM7b0JBQzlCLElBQUksR0FBVyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUM7b0JBQzlCLElBQUksR0FBVyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUM7b0JBRzlCLElBQUkscUJBQXFCO3dCQUN2QixDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksS0FBSyxnQkFBZ0IsQ0FBQyxPQUFPOzRCQUN0QyxJQUFJLENBQUMsSUFBSSxLQUFLLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxFQUFFO3dCQUMzQyxNQUFNLENBQUMsSUFBSSxHQUFHLGdCQUFnQixDQUFDLEtBQUssQ0FBQzt3QkFDckMsTUFBTSxDQUFDLE1BQU0sR0FBRyxlQUFlLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsRUFBRSxFQUN2RixJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUM7cUJBQy9CO3lCQUFNO3dCQUNMLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO3FCQUNsRDtvQkFFRCxNQUFNO2dCQUVSLEtBQUssbUJBQW1CLENBQUMsVUFBVTtvQkFDakMsSUFBSSxHQUFXLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQztvQkFFOUIsSUFBSSxHQUFXLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQztvQkFDOUIsSUFBSSxHQUFXLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQztvQkFHOUIsSUFBSSxxQkFBcUIsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLGdCQUFnQixDQUFDLE9BQU8sRUFBRTt3QkFDbkUsTUFBTSxDQUFDLElBQUksR0FBRyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUM7d0JBQ3JDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsZUFBZSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxFQUFFLEVBQzFFLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQztxQkFDL0I7eUJBQU07d0JBQ0wsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztxQkFDNUM7b0JBRUQsTUFBTTtnQkFFUixLQUFLLG1CQUFtQixDQUFDLFdBQVc7b0JBQ2xDLElBQUksR0FBVyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUM7b0JBQzlCLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDO29CQUNoQyxNQUFNO2dCQUVSLEtBQUssbUJBQW1CLENBQUMsWUFBWTtvQkFDbkMsSUFBSSxHQUFXLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQztvQkFDOUIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7b0JBQ2pDLE1BQU07Z0JBRVIsS0FBSyxtQkFBbUIsQ0FBQyxZQUFZO29CQUNuQyxJQUFJLEdBQVcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDO29CQUM5QixJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztvQkFDakMsTUFBTTtnQkFFUixLQUFLLG1CQUFtQixDQUFDLFVBQVU7b0JBQ2pDLElBQUksR0FBVyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUM7b0JBRTlCLElBQUksR0FBVyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUM7b0JBQzlCLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztvQkFDckMsTUFBTTtnQkFFUixLQUFLLG1CQUFtQixDQUFDLGFBQWE7b0JBQ3BDLElBQUksR0FBVyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUM7b0JBQzlCLElBQUksR0FBVyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUM7b0JBRTlCLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztvQkFDeEMsTUFBTTtnQkFFUixLQUFLLG1CQUFtQixDQUFDLGFBQWE7b0JBQ3BDLElBQUksR0FBVyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUM7b0JBQzlCLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDO29CQUNsQyxNQUFNO2dCQUVSLEtBQUssbUJBQW1CLENBQUMsV0FBVztvQkFDbEMsSUFBSSxHQUFXLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQztvQkFDOUIsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7b0JBQ2hDLE1BQU07Z0JBRVIsS0FBSyxtQkFBbUIsQ0FBQyxXQUFXO29CQUNsQyxJQUFJLEdBQVcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDO29CQUM5QixJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztvQkFDaEMsTUFBTTtnQkFFUixLQUFLLG1CQUFtQixDQUFDLFVBQVU7b0JBQ2pDLElBQUksR0FBVyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUM7b0JBQzlCLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDO29CQUMvQixNQUFNO2dCQUVSLEtBQUssbUJBQW1CLENBQUMsVUFBVTtvQkFDakMsSUFBSSxHQUFXLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQztvQkFDOUIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7b0JBQy9CLE1BQU07Z0JBRVIsS0FBSyxtQkFBbUIsQ0FBQyxXQUFXO29CQUNsQyxJQUFJLEdBQVcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDO29CQUM5QixJQUFJLEdBQVcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDO29CQUM5QixJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7b0JBQ3RDLE1BQU07Z0JBRVIsS0FBSyxtQkFBbUIsQ0FBQyxXQUFXO29CQUNsQyxJQUFJLEdBQVcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDO29CQUM5QixJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztvQkFDaEMsTUFBTTtnQkFFUixLQUFLLG1CQUFtQixDQUFDLFdBQVc7b0JBQ2xDLElBQUksR0FBVyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUM7b0JBQzlCLElBQUksR0FBVyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUM7b0JBQzlCLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLENBQUM7b0JBQ2pFLE1BQU07Z0JBRVIsS0FBSyxtQkFBbUIsQ0FBQyxXQUFXO29CQUNsQyxJQUFJLEdBQVcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDO29CQUM5QixJQUFJLEdBQVcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDO29CQUM5QixJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxDQUFDO29CQUNqRSxNQUFNO2dCQUVSLEtBQUssbUJBQW1CLENBQUMsV0FBVztvQkFDbEMsSUFBSSxHQUFXLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQztvQkFDOUIsSUFBSSxHQUFXLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQztvQkFDOUIsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxnQkFBZ0IsQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLENBQUM7b0JBQ3hFLE1BQU07Z0JBRVIsS0FBSyxtQkFBbUIsQ0FBQyxZQUFZO29CQUNuQyxJQUFJLEdBQVcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDO29CQUM5QixJQUFJLEdBQVcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDO29CQUM5QixJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLGdCQUFnQixDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsQ0FBQztvQkFDdkUsTUFBTTtnQkFFUixLQUFLLG1CQUFtQixDQUFDLFdBQVc7b0JBQ2xDLElBQUksR0FBVyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUM7b0JBQzlCLElBQUksR0FBVyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUM7b0JBQzlCLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsZ0JBQWdCLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxDQUFDO29CQUN4RSxNQUFNO2dCQUVSLEtBQUssbUJBQW1CLENBQUMsWUFBWTtvQkFDbkMsSUFBSSxHQUFXLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQztvQkFDOUIsSUFBSSxHQUFXLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQztvQkFDOUIsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxnQkFBZ0IsQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUM7b0JBQ3ZFLE1BQU07Z0JBRVIsS0FBSyxtQkFBbUIsQ0FBQyxVQUFVO29CQUNqQyxJQUFJLEdBQVcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDO29CQUM5QixJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztvQkFDL0IsTUFBTTtnQkFFUixLQUFLLG1CQUFtQixDQUFDLFlBQVk7b0JBQ25DLElBQUksR0FBVyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUM7b0JBQzlCLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDO29CQUNqQyxNQUFNO2dCQUVSLEtBQUssbUJBQW1CLENBQUMsV0FBVztvQkFDbEMsSUFBSSxHQUFXLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQztvQkFDOUIsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7b0JBQ2hDLE1BQU07Z0JBRVIsS0FBSyxtQkFBbUIsQ0FBQyxVQUFVO29CQUNqQyxJQUFJLEdBQVcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDO29CQUM5QixJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztvQkFDL0IsTUFBTTtnQkFFUixLQUFLLG1CQUFtQixDQUFDLFdBQVc7b0JBQ2xDLElBQUksR0FBVyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUM7b0JBQzlCLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLENBQUM7b0JBQ3BFLE1BQU07Z0JBRVIsS0FBSyxtQkFBbUIsQ0FBQyxhQUFhO29CQUNwQyxJQUFJLEdBQVcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDO29CQUM5QixJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxDQUFDO29CQUN0RSxNQUFNO2dCQUVSLEtBQUssbUJBQW1CLENBQUMsV0FBVztvQkFDbEMsSUFBSSxHQUFXLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQztvQkFDOUIsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxDQUFDO29CQUMzRCxNQUFNO2dCQUVSLEtBQUssbUJBQW1CLENBQUMsYUFBYTtvQkFDcEMsSUFBSSxHQUFXLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQztvQkFDOUIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxDQUFDO29CQUM3RCxNQUFNO2dCQUVSLEtBQUssbUJBQW1CLENBQUMsYUFBYTtvQkFDcEMsSUFBSSxHQUFXLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQztvQkFDOUIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7b0JBQ2xDLE1BQU07Z0JBRVIsS0FBSyxtQkFBbUIsQ0FBQyxhQUFhO29CQUNwQyxJQUFJLEdBQVcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDO29CQUM5QixJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztvQkFDbEMsTUFBTTtnQkFFUixLQUFLLG1CQUFtQixDQUFDLFdBQVc7b0JBQ2xDLElBQUksR0FBVyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUM7b0JBQzlCLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDO29CQUNoQyxNQUFNO2dCQUVSLEtBQUssbUJBQW1CLENBQUMsWUFBWTtvQkFDbkMsSUFBSSxHQUFXLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQztvQkFFOUIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQztvQkFDekIsTUFBTSxDQUFDLElBQUksR0FBRyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUM7b0JBQ3ZDLE1BQU0sQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO29CQUN0QixNQUFNO2dCQUVSLEtBQUssbUJBQW1CLENBQUMsV0FBVztvQkFDbEMsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQztvQkFDMUIsTUFBTTtnQkFHUixLQUFLLG1CQUFtQixDQUFDLGNBQWM7b0JBQ3JDLElBQUksR0FBVyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUM7b0JBQzlCLElBQUksR0FBVyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUM7b0JBQzlCLElBQUksR0FBVyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUM7b0JBQzlCLElBQUksR0FBVyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUM7b0JBQzlCLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO29CQUNyRCxNQUFNO2dCQUVSLEtBQUssbUJBQW1CLENBQUMsY0FBYztvQkFDckMsSUFBSSxHQUFXLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQztvQkFDOUIsSUFBSSxHQUFXLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQztvQkFDOUIsSUFBSSxHQUFXLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQztvQkFDOUIsSUFBSSxHQUFXLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQztvQkFDOUIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7b0JBQ3JELE1BQU07Z0JBRVIsS0FBSyxtQkFBbUIsQ0FBQyxZQUFZO29CQUNuQyxNQUFNLENBQUMsSUFBSSxHQUFHLGdCQUFnQixDQUFDLEtBQUssQ0FBQztvQkFDckMsTUFBTSxDQUFDLE1BQU0sR0FBRyxXQUFXLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxDQUFDO29CQUNoRCxNQUFNO2dCQUVSLEtBQUssbUJBQW1CLENBQUMsY0FBYztvQkFDckMsSUFBSSxHQUFXLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQztvQkFDOUIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7b0JBQ25DLE1BQU07Z0JBRVIsS0FBSyxtQkFBbUIsQ0FBQyxhQUFhO29CQUNwQyxJQUFJLEdBQVksUUFBUSxDQUFDLEdBQUcsRUFBRyxDQUFDO29CQUNoQyxJQUFJLEdBQVcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDO29CQUU5QixJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7b0JBQ3hDLE1BQU07Z0JBRVIsS0FBSyxtQkFBbUIsQ0FBQyxjQUFjO29CQUNyQyxJQUFJLEdBQVcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDO29CQUM5QixJQUFJLEdBQVcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDO29CQUU5QixJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7b0JBQ3pDLE1BQU07Z0JBRVIsS0FBSyxtQkFBbUIsQ0FBQyxXQUFXLENBQUM7Z0JBQ3JDLEtBQUssbUJBQW1CLENBQUMsYUFBYSxDQUFDO2dCQUN2QyxLQUFLLG1CQUFtQixDQUFDLGFBQWEsQ0FBQztnQkFDdkMsS0FBSyxtQkFBbUIsQ0FBQyxhQUFhLENBQUM7Z0JBQ3ZDLEtBQUssbUJBQW1CLENBQUMsYUFBYSxDQUFDO2dCQUN2QyxLQUFLLG1CQUFtQixDQUFDLGFBQWEsQ0FBQztnQkFDdkMsS0FBSyxtQkFBbUIsQ0FBQyxhQUFhLENBQUM7Z0JBQ3ZDLEtBQUssbUJBQW1CLENBQUMsYUFBYTtvQkFDcEMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFlBQVksRUFBRSxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUM7b0JBQ3BELE1BQU07Z0JBRVIsS0FBSyxtQkFBbUIsQ0FBQyxhQUFhO29CQUNwQyxJQUFJLEdBQVcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDO29CQUM5QixNQUFNLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7b0JBSTdCLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxZQUFZO3dCQUNuQyxNQUFNLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUM7b0JBRXJDLE1BQU0sQ0FBQyxJQUFJLEdBQUcsZ0JBQWdCLENBQUMsT0FBTyxDQUFDO29CQU12QyxJQUFJLGFBQWEsQ0FBQyxNQUFNLEVBQUUsRUFBRTt3QkFDMUIsSUFBSSxPQUFPLEdBQWlCLElBQUksSUFBSSxFQUFVLENBQUM7d0JBQy9DLElBQUksUUFBUSxHQUFZLEtBQUssQ0FBQzt3QkFDOUIsSUFBSSxDQUFTLENBQUM7d0JBQ2QsT0FBTyxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFOzRCQUM3QyxPQUFPLENBQUMsSUFBSSxDQUFTLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDOzRCQUNyQyxJQUFJLE9BQU8sQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxNQUFNO2dDQUM3QyxRQUFRLEdBQUcsSUFBSSxDQUFDO3lCQUNuQjt3QkFFRCxLQUFLLENBQUMsR0FBRyxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRTs0QkFDdEMsUUFBUSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7d0JBRXJDLElBQUksQ0FBQyxRQUFROzRCQUNYLGFBQWEsQ0FBQyxlQUFlLEVBQUUsQ0FBQztxQkFDbkM7b0JBRUQsTUFBTTtnQkFFUixLQUFLLG1CQUFtQixDQUFDLFVBQVU7b0JBQ2pDLElBQUksR0FBVyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUM7b0JBQzlCLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDO29CQUMvQixNQUFNO2dCQUVSLEtBQUssbUJBQW1CLENBQUMsVUFBVTtvQkFDakMsSUFBSSxHQUFXLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQztvQkFDOUIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7b0JBQy9CLE1BQU07Z0JBRVIsS0FBSyxtQkFBbUIsQ0FBQyxVQUFVO29CQUNqQyxJQUFJLEdBQVcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDO29CQUM5QixJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztvQkFDL0IsTUFBTTtnQkFFUixLQUFLLG1CQUFtQixDQUFDLFVBQVU7b0JBQ2pDLElBQUksR0FBVyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUM7b0JBQzlCLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDO29CQUMvQixNQUFNO2dCQUVSLEtBQUssbUJBQW1CLENBQUMsZUFBZTtvQkFDdEMsSUFBSSxHQUFXLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQztvQkFDOUIsSUFBSSxHQUFXLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQztvQkFDOUIsTUFBTSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztvQkFDaEQsTUFBTTtnQkFFUixLQUFLLG1CQUFtQixDQUFDLGFBQWE7b0JBQ3BDLElBQUksR0FBVyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUM7b0JBQzlCLElBQUksR0FBVyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUM7b0JBQzlCLE1BQU0sSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO29CQUM5QyxNQUFNO2dCQUVSLEtBQUssbUJBQW1CLENBQUMsZ0JBQWdCO29CQUN2QyxJQUFJLENBQUMsaUJBQWlCLENBQUMsTUFBTSxDQUFDLENBQUM7b0JBQy9CLE1BQU07Z0JBR1IsS0FBSyxtQkFBbUIsQ0FBQyxhQUFhO29CQUVwQyxJQUFJLE9BQU8sR0FBd0IsSUFBSSxDQUFDLE9BQU8sQ0FBQyxjQUFjLEVBQUUsQ0FBQztvQkFDakUsR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztvQkFDeEMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLENBQUM7b0JBQzlELE1BQU07Z0JBRVIsS0FBSyxtQkFBbUIsQ0FBQyxnQkFBZ0I7b0JBQ3ZDLElBQUksR0FBVyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUM7b0JBQzlCLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDO29CQUNsQyxNQUFNO2dCQUVSLEtBQUssbUJBQW1CLENBQUMsZUFBZTtvQkFDdEMsSUFBSSxHQUFXLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQztvQkFDOUIsSUFBSSxHQUFXLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQztvQkFDOUIsSUFBSSxHQUFXLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQztvQkFDOUIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztvQkFDOUMsTUFBTTtnQkFFUixLQUFLLG1CQUFtQixDQUFDLGlCQUFpQjtvQkFDeEMsSUFBSSxHQUFXLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQztvQkFDOUIsSUFBSSxHQUFXLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQztvQkFDOUIsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7b0JBQzdDLE1BQU07Z0JBRVIsS0FBSyxtQkFBbUIsQ0FBQyxtQkFBbUI7b0JBQzFDLElBQUksR0FBVyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUM7b0JBQzlCLElBQUksR0FBVyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUM7b0JBQzlCLElBQUksR0FBVyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUM7b0JBQzlCLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztvQkFDbkQsTUFBTTtnQkFFUixLQUFLLG1CQUFtQixDQUFDLGVBQWU7b0JBQ3RDLElBQUksR0FBVyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUM7b0JBQzlCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7b0JBQ3BDLE1BQU07Z0JBR1IsS0FBSyxtQkFBbUIsQ0FBQyxvQkFBb0I7b0JBQzNDLElBQUksR0FBVyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUM7b0JBQzlCLE1BQU0sQ0FBQyxJQUFJLEdBQUcsZ0JBQWdCLENBQUMsS0FBSyxDQUFDO29CQUNyQyxNQUFNLENBQUMsTUFBTSxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBTSxHQUFHLEdBQUcsQ0FBQztvQkFDeEMsTUFBTTtnQkFHUixLQUFLLG1CQUFtQixDQUFDLFdBQVc7b0JBRWxDLEtBQUssR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUM7b0JBQ3ZCLFVBQVUsR0FBRyxJQUFJLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztvQkFDOUIsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLEVBQUUsQ0FBQyxFQUFFO3dCQUN4QixVQUFVLENBQUMsS0FBSyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBVyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUM7b0JBQ3JELElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDO29CQUVwQyxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFO3dCQUM3QixJQUFJLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO3dCQUNyQixJQUFJLFlBQXFCLENBQUM7d0JBQzFCLElBQUk7NEJBQ0YsWUFBWSxHQUFHLENBQUMsbUJBQW1CLENBQUMsV0FBVyxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7eUJBQzdFO3dCQUFDLE9BQU8sa0JBQWtCLEVBQUU7NEJBQzNCLElBQUksa0JBQWtCLFlBQVksa0JBQWtCLEVBQUU7Z0NBQ3BELFlBQVksR0FBRyxLQUFLLENBQUM7NkJBQ3RCOztnQ0FDQyxNQUFNLGtCQUFrQixDQUFDO3lCQUM1Qjt3QkFFRCxJQUFJLFlBQVksRUFBRTs0QkFDaEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDOzRCQUN4QyxNQUFNO3lCQUNQO3dCQUNELElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxFQUdyQjs0QkFDRSxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUM7NEJBQ3hDLE1BQU07eUJBQ1A7cUJBQ0Y7b0JBRUQsYUFBYSxDQUFDLGVBQWUsRUFBRSxDQUFDO29CQUNoQyxNQUFNO2dCQUVSLEtBQUssbUJBQW1CLENBQUMsV0FBVztvQkFDbEMsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQztvQkFDMUIsTUFBTTtnQkFFUixLQUFLLG1CQUFtQixDQUFDLFdBQVc7b0JBQ2xDLElBQUksR0FBVyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUM7b0JBQzlCLElBQUksR0FBVyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUM7b0JBQzlCLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztvQkFDdEMsTUFBTTtnQkFFUixLQUFLLG1CQUFtQixDQUFDLGFBQWE7b0JBQ3BDLElBQUksR0FBVyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUM7b0JBQzlCLElBQUksR0FBVyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUM7b0JBQzlCLElBQUksR0FBVyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUM7b0JBQzlCLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7b0JBQzlDLE1BQU07Z0JBRVIsS0FBSyxtQkFBbUIsQ0FBQyxlQUFlO29CQUN0QyxJQUFJLEdBQVcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDO29CQUM5QixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztvQkFDL0IsTUFBTTtnQkFFUixLQUFLLG1CQUFtQixDQUFDLGVBQWU7b0JBQ3RDLElBQUksR0FBVyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUM7b0JBQzlCLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO29CQUNoQyxNQUFNO2dCQUdSLEtBQUssbUJBQW1CLENBQUMsWUFBWTtvQkFDbkMsSUFBSSxJQUFJLENBQUMsbUJBQW1CLElBQUksSUFBSTt3QkFDbEMsT0FBTSxPQUFPLFlBQUMsTUFBTSxFQUFFLGdCQUFnQixDQUFDLEtBQUssRUFBRTt5QkFDM0M7d0JBQ0gsSUFBSSxHQUFXLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQzt3QkFDOUIsSUFBSSxDQUFDLG1CQUFtQixDQUFDLGFBQWEsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsQ0FBQztxQkFDMUY7b0JBQ0QsTUFBTTtnQkFFUixLQUFLLG1CQUFtQixDQUFDLGFBQWE7b0JBQ3BDLElBQUksSUFBSSxDQUFDLG1CQUFtQixJQUFJLElBQUk7d0JBQ2xDLE9BQU0sT0FBTyxZQUFDLE1BQU0sRUFBRSxnQkFBZ0IsQ0FBQyxLQUFLLEVBQUU7eUJBQzNDO3dCQUNILElBQUksR0FBVyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUM7d0JBQzlCLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDO3FCQUN2RDtvQkFDRCxNQUFNO2dCQUVSLEtBQUssbUJBQW1CLENBQUMsWUFBWTtvQkFDbkMsSUFBSSxJQUFJLENBQUMsbUJBQW1CLElBQUksSUFBSTt3QkFDbEMsT0FBTSxPQUFPLFlBQUMsTUFBTSxFQUFFLGdCQUFnQixDQUFDLEtBQUssRUFBRTt5QkFDM0M7d0JBQ0gsSUFBSSxHQUFXLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQzt3QkFDOUIsSUFBSSxDQUFDLG1CQUFtQixDQUFDLGFBQWEsQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxDQUFDO3FCQUNqRjtvQkFDRCxNQUFNO2dCQUVSLEtBQUssbUJBQW1CLENBQUMsWUFBWTtvQkFDbkMsSUFBSSxJQUFJLENBQUMsbUJBQW1CLElBQUksSUFBSTt3QkFDbEMsT0FBTSxPQUFPLFlBQUMsTUFBTSxFQUFFLGdCQUFnQixDQUFDLEtBQUssRUFBRTt5QkFDM0M7d0JBQ0gsSUFBSSxHQUFXLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQzt3QkFDOUIsSUFBSSxDQUFDLG1CQUFtQixDQUFDLGFBQWEsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7cUJBQ3REO29CQUNELE1BQU07Z0JBRVIsS0FBSyxtQkFBbUIsQ0FBQyxhQUFhO29CQUNwQyxJQUFJLElBQUksQ0FBQyxtQkFBbUIsSUFBSSxJQUFJO3dCQUNsQyxPQUFNLE9BQU8sWUFBQyxNQUFNLEVBQUUsZ0JBQWdCLENBQUMsS0FBSyxFQUFFO3lCQUMzQzt3QkFDSCxJQUFJLEdBQVcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDO3dCQUM5QixJQUFJLEdBQVcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDO3dCQUM5QixJQUFJLENBQUMsbUJBQW1CLENBQUMsY0FBYyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQzFFLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxDQUFDO3FCQUM5QjtvQkFDRCxNQUFNO2dCQUVSLEtBQUssbUJBQW1CLENBQUMsVUFBVTtvQkFDakMsSUFBSSxHQUFXLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQztvQkFDOUIsTUFBTSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO29CQUV4QixJQUFJLElBQUksQ0FBQyxtQkFBbUIsSUFBSSxJQUFJO3dCQUNsQyxNQUFNLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7eUJBQ3pCLElBQUksSUFBSSxDQUFDLE1BQU0sSUFBSSxJQUFJO3dCQUMxQixPQUFNLE9BQU8sWUFBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRTt5QkFDOUI7d0JBQ0gsTUFBTSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQzt3QkFDbEUsSUFBSSxNQUFNLENBQUMsTUFBTSxJQUFJLElBQUk7NEJBQ3ZCLE1BQU0sQ0FBQyxNQUFNLEdBQUcsRUFBRSxDQUFDO3FCQUN0QjtvQkFDRCxNQUFNO2dCQUVSLEtBQUssbUJBQW1CLENBQUMsVUFBVTtvQkFDakMsSUFBSSxHQUFXLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQztvQkFDOUIsTUFBTSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO29CQUV4QixJQUFJLElBQUksQ0FBQyxtQkFBbUIsSUFBSSxJQUFJO3dCQUNsQyxNQUFNLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7eUJBQ3pCLElBQUksSUFBSSxDQUFDLE1BQU0sSUFBSSxJQUFJO3dCQUMxQixPQUFNLE9BQU8sWUFBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRTt5QkFDOUI7d0JBQ0gsTUFBTSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUM7d0JBQ3RFLElBQUksTUFBTSxDQUFDLE1BQU0sSUFBSSxJQUFJOzRCQUN2QixNQUFNLENBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQztxQkFDdEI7b0JBQ0QsTUFBTTtnQkFFUixLQUFLLG1CQUFtQixDQUFDLFdBQVc7b0JBQ2xDLElBQUksR0FBVyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUM7b0JBQzlCLElBQUksR0FBVyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUM7b0JBQzlCLE1BQU0sQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztvQkFFeEIsSUFBSSxJQUFJLENBQUMsbUJBQW1CLElBQUksSUFBSTt3QkFDbEMsTUFBTSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO3lCQUN6QixJQUFJLElBQUksQ0FBQyxRQUFRLElBQUksSUFBSSxJQUFJLElBQUksQ0FBQyxNQUFNLElBQUksSUFBSTt3QkFDbkQsT0FBTSxPQUFPLFlBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUU7eUJBQzlCO3dCQUNILE1BQU0sQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQzt3QkFDL0YsSUFBSSxNQUFNLENBQUMsTUFBTSxJQUFJLElBQUk7NEJBQ3ZCLE1BQU0sQ0FBQyxNQUFNLEdBQUcsRUFBRSxDQUFDO3FCQUN0QjtvQkFDRCxNQUFNO2dCQUVSLEtBQUssbUJBQW1CLENBQUMsZUFBZTtvQkFDdEMsSUFBSSxHQUFXLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQztvQkFDOUIsTUFBTSxDQUFDLElBQUksR0FBRyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUM7b0JBQ3JDLElBQUksSUFBSSxDQUFDLG1CQUFtQixJQUFJLElBQUk7d0JBQ2xDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQzt5QkFDekI7d0JBQ0gsTUFBTSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDO3dCQUN0RixJQUFJLE1BQU0sQ0FBQyxNQUFNLElBQUksSUFBSTs0QkFDdkIsTUFBTSxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUM7cUJBQ3RCO29CQUNELE1BQU07Z0JBRVIsS0FBSyxtQkFBbUIsQ0FBQyxZQUFZO29CQUNuQyxJQUFJLEdBQVcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDO29CQUM5QixJQUFJLEdBQVcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDO29CQUM5QixNQUFNLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7b0JBRXhCLElBQUksSUFBSSxDQUFDLG1CQUFtQixJQUFJLElBQUk7d0JBQ2xDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQzt5QkFDekIsSUFBSSxJQUFJLENBQUMsUUFBUSxJQUFJLElBQUksSUFBSSxJQUFJLENBQUMsTUFBTSxJQUFJLElBQUk7d0JBQ25ELE9BQU0sT0FBTyxZQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFO3lCQUM5Qjt3QkFDSCxNQUFNLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUM7d0JBQ2hHLElBQUksTUFBTSxDQUFDLE1BQU0sSUFBSSxJQUFJOzRCQUN2QixNQUFNLENBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQztxQkFDdEI7b0JBQ0QsTUFBTTtnQkFFUixLQUFLLG1CQUFtQixDQUFDLGdCQUFnQjtvQkFDdkMsSUFBSSxHQUFXLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQztvQkFDOUIsSUFBSSxHQUFXLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQztvQkFDOUIsSUFBSSxHQUFXLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQztvQkFDOUIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO29CQUNoRCxNQUFNO2dCQUVSLEtBQUssbUJBQW1CLENBQUMsZ0JBQWdCO29CQUN2QyxJQUFJLEdBQVcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDO29CQUM5QixJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO29CQUNyQyxNQUFNO2dCQUVSLEtBQUssbUJBQW1CLENBQUMsV0FBVztvQkFDbEMsSUFBSSxHQUFXLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQztvQkFDOUIsSUFBSSxHQUFXLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQztvQkFDOUIsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO29CQUN0QyxNQUFNO2dCQUdSLEtBQUssbUJBQW1CLENBQUMsa0JBQWtCO29CQUN6QyxJQUFJLENBQUMsaUJBQWlCLENBQUMsTUFBTSxFQUFhLElBQUksQ0FBQyxPQUFRLENBQUMsY0FBYyxFQUFFLEVBQUUsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLENBQUM7b0JBQ3BHLE1BQU07Z0JBRVIsS0FBSyxtQkFBbUIsQ0FBQyxrQkFBa0I7b0JBQ3pDLElBQUksR0FBVyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUM7b0JBQzlCLG1CQUFtQixDQUFDLG1CQUFtQixDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztvQkFDdEQsTUFBTTtnQkFFUixLQUFLLG1CQUFtQixDQUFDLGFBQWE7b0JBQ3BDLElBQUksR0FBVyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUM7b0JBQzlCLElBQUksR0FBVyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUM7b0JBQzlCLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztvQkFDeEMsTUFBTTtnQkFFUixLQUFLLG1CQUFtQixDQUFDLGFBQWE7b0JBQ3BDLElBQUksR0FBVyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUM7b0JBQzlCLElBQUksR0FBVyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUM7b0JBQzlCLElBQUksR0FBVyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUM7b0JBQzlCLE1BQU0sSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztvQkFDcEQsTUFBTSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7b0JBQ3RCLElBQUksYUFBYSxDQUFDLE1BQU0sRUFBRTt3QkFDeEIsYUFBYSxDQUFDLGVBQWUsRUFBRSxDQUFDO29CQUNsQyxNQUFNO2dCQUVSLEtBQUssbUJBQW1CLENBQUMsY0FBYztvQkFDckMsSUFBSSxHQUFXLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQztvQkFDOUIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7b0JBQ25DLGFBQWEsQ0FBQyxlQUFlLEVBQUUsQ0FBQztvQkFDaEMsTUFBTTtnQkFFUixLQUFLLG1CQUFtQixDQUFDLFNBQVM7b0JBQ2hDLEtBQUssR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUM7b0JBRXZCLE1BQU0sQ0FBQyxJQUFJLEdBQUcsZ0JBQWdCLENBQUMsT0FBTyxDQUFDO29CQUN2QyxNQUFNLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztvQkFFdkIsVUFBVSxHQUFHLElBQUksS0FBSyxDQUFTLEtBQUssQ0FBQyxDQUFDO29CQUN0QyxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssRUFBRSxDQUFDLEVBQUU7d0JBQ3hCLFVBQVUsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFXLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQztvQkFFckQsSUFBSTt3QkFDRixLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssRUFBRSxDQUFDLEVBQUUsRUFBRTs0QkFDMUIsSUFBSSxtQkFBbUIsQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsS0FBSyxDQUFDLEVBQUU7Z0NBQzlFLE1BQU0sQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO2dDQUN0QixNQUFNOzZCQUNQO3lCQUNGO3FCQUNGO29CQUFDLE9BQU8sa0JBQWtCLEVBQUU7d0JBQzNCLElBQUksa0JBQWtCLFlBQVksa0JBQWtCLEVBQUU7NEJBQ3BELE9BQU0sT0FBTyxZQUFDLE1BQU0sRUFBRSxnQkFBZ0IsQ0FBQyxPQUFPLEVBQUU7eUJBQ2pEOzs0QkFBTSxNQUFNLGtCQUFrQixDQUFDO3FCQUNqQztvQkFFRCxNQUFNO2dCQUVSLEtBQUssbUJBQW1CLENBQUMsa0JBQWtCO29CQUN6QyxJQUFJLENBQUMsbUJBQW1CLENBQUMsTUFBTSxDQUFDLENBQUM7b0JBQ2pDLE1BQU07Z0JBR1IsS0FBSyxtQkFBbUIsQ0FBQyx3QkFBd0I7b0JBQy9DLEtBQUssR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUM7b0JBRXZCLElBQUksS0FBSyxHQUFHLENBQUMsRUFBRTt3QkFDYixLQUFLLEVBQUUsQ0FBQzt3QkFDUixVQUFVLEdBQUcsSUFBSSxLQUFLLENBQVMsS0FBSyxDQUFDLENBQUM7d0JBQ3RDLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxFQUFFLENBQUMsRUFBRTs0QkFDeEIsVUFBVSxDQUFDLEtBQUssR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQVcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDO3dCQUVyRCxJQUFJLFFBQVEsR0FBb0IsUUFBUSxDQUFDLEdBQUcsRUFBRyxDQUFDLE1BQU0sQ0FBQzt3QkFDdkQsTUFBTSxJQUFJLENBQUMsMkJBQTJCLENBQUMsUUFBUSxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsWUFBWSxDQUFDLENBQUM7d0JBQ25GLGFBQWEsQ0FBQyxlQUFlLEVBQUUsQ0FBQztxQkFDakM7b0JBQ0QsTUFBTTtnQkFFUixLQUFLLG1CQUFtQixDQUFDLGlCQUFpQjtvQkFFeEMsSUFBSSxHQUFXLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQztvQkFDOUIsTUFBTSxDQUFDLElBQUksR0FBRyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUM7b0JBQ3ZDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO29CQUV0QixJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7d0JBQzFDLE1BQU0sQ0FBQyxRQUFRLEdBQUcsSUFBSSxRQUFRLEVBQUUsQ0FBQzt3QkFDakMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztxQkFDMUQ7O3dCQUNDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO29CQUN2QixNQUFNO2dCQUdSLEtBQUssbUJBQW1CLENBQUMsaUJBQWlCO29CQUN4QyxJQUFJLEdBQVcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDO29CQUM5QixJQUFJLENBQUMsa0JBQWtCLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDO29CQUN0QyxNQUFNO2dCQUVSLEtBQUssbUJBQW1CLENBQUMsYUFBYTtvQkFDcEMsSUFBSSxHQUFXLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQztvQkFDOUIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7b0JBQ2xDLE1BQU07Z0JBRVIsS0FBSyxtQkFBbUIsQ0FBQyxpQkFBaUI7b0JBQ3hDLElBQUksR0FBVyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUM7b0JBQzlCLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7b0JBQ3RDLE1BQU07Z0JBRVIsS0FBSyxtQkFBbUIsQ0FBQyxtQkFBbUI7b0JBQzFDLElBQUksR0FBVyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUM7b0JBQzlCLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7b0JBQ3hDLE1BQU07Z0JBRVIsS0FBSyxtQkFBbUIsQ0FBQyxpQkFBaUI7b0JBQ3hDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztvQkFDaEMsTUFBTTtnQkFHUixLQUFLLG1CQUFtQixDQUFDLGdCQUFnQjtvQkFDdkMsSUFBSSxHQUFXLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQztvQkFDOUIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztvQkFDcEMsTUFBTTtnQkFFUixLQUFLLG1CQUFtQixDQUFDLGdCQUFnQjtvQkFDdkMsS0FBSyxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQztvQkFDdkIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsRUFBRSxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUM7b0JBQy9DLE1BQU07Z0JBRVIsS0FBSyxtQkFBbUIsQ0FBQyx1QkFBdUI7b0JBQzlDLElBQUksR0FBVyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUM7b0JBQzlCLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7b0JBQzlDLGFBQWEsQ0FBQyxlQUFlLEVBQUUsQ0FBQztvQkFDaEMsTUFBTTtnQkFFUixLQUFLLG1CQUFtQixDQUFDLGdCQUFnQjtvQkFDdkMsSUFBSSxHQUFXLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQztvQkFDOUIsSUFBSSxDQUFDLGlCQUFpQixDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztvQkFDckMsYUFBYSxDQUFDLGVBQWUsRUFBRSxDQUFDO29CQUNoQyxNQUFNO2dCQUVSLEtBQUssbUJBQW1CLENBQUMscUJBQXFCO29CQUM1QyxJQUFJLEdBQVcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDO29CQUM5QixJQUFJLENBQUMsc0JBQXNCLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDO29CQUMxQyxhQUFhLENBQUMsZUFBZSxFQUFFLENBQUM7b0JBQ2hDLE1BQU07Z0JBRVIsS0FBSyxtQkFBbUIsQ0FBQyxlQUFlO29CQUN0QyxJQUFJLEdBQVcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDO29CQUM5QixJQUFJLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDO29CQUNwQyxNQUFNO2dCQUVSLEtBQUssbUJBQW1CLENBQUMsZUFBZTtvQkFDdEMsSUFBSSxHQUFXLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQztvQkFDOUIsSUFBSSxHQUFXLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQztvQkFDOUIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7b0JBQzFDLE1BQU07Z0JBRVIsS0FBSyxtQkFBbUIsQ0FBQyxhQUFhO29CQUNwQyxJQUFJLEdBQVcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDO29CQUM5QixJQUFJLEdBQVcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDO29CQUM5QixNQUFNLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztvQkFDOUMsTUFBTTtnQkFFUixLQUFLLG1CQUFtQixDQUFDLGFBQWE7b0JBQ3BDLElBQUksR0FBVyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUM7b0JBQzlCLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDO29CQUNsQyxNQUFNO2dCQUVSLEtBQUssbUJBQW1CLENBQUMsZUFBZTtvQkFDdEMsSUFBSSxHQUFXLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQztvQkFDOUIsSUFBSSxHQUFXLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQztvQkFDOUIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7b0JBQzFDLE1BQU07Z0JBRVIsS0FBSyxtQkFBbUIsQ0FBQyxjQUFjO29CQUNyQyxJQUFJLEdBQVcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDO29CQUM5QixNQUFNLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDO29CQUN6QyxNQUFNO2dCQUVSLEtBQUssbUJBQW1CLENBQUMsZUFBZTtvQkFDdEMsSUFBSSxHQUFXLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQztvQkFDOUIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztvQkFDcEMsTUFBTTtnQkFFUixLQUFLLG1CQUFtQixDQUFDLGdCQUFnQjtvQkFDdkMsS0FBSyxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQztvQkFFdkIsSUFBSSxLQUFLLEdBQUcsQ0FBQyxFQUFFO3dCQUNiLFVBQVUsR0FBRyxJQUFJLEtBQUssQ0FBUyxLQUFLLENBQUMsQ0FBQzt3QkFDdEMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLEVBQUUsQ0FBQyxFQUFFOzRCQUN4QixVQUFVLENBQUMsS0FBSyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBVyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUM7d0JBRXJELE1BQU0sSUFBSSxDQUFDLGlCQUFpQixDQUFDLE1BQU0sRUFBRSxVQUFVLENBQUMsQ0FBQztxQkFDbEQ7b0JBQ0QsTUFBTTtnQkFFUixLQUFLLG1CQUFtQixDQUFDLGtCQUFrQjtvQkFDekMsSUFBSSxHQUFXLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQztvQkFDOUIsTUFBTSxJQUFJLENBQUMsbUJBQW1CLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDO29CQUM3QyxNQUFNO2dCQUVSLEtBQUssbUJBQW1CLENBQUMsaUJBQWlCO29CQUN4QyxLQUFLLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDO29CQUN2QixJQUFJLEtBQUssR0FBRyxDQUFDLEVBQUU7d0JBQ2IsVUFBVSxHQUFHLElBQUksS0FBSyxDQUFTLEtBQUssQ0FBQyxDQUFDO3dCQUN0QyxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssRUFBRSxDQUFDLEVBQUU7NEJBQ3hCLFVBQVUsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFXLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQzt3QkFFckQsTUFBTSxJQUFJLENBQUMsa0JBQWtCLENBQUMsTUFBTSxFQUFFLFVBQVUsQ0FBQyxDQUFDO3FCQUNuRDtvQkFDRCxNQUFNO2dCQUVSLEtBQUssbUJBQW1CLENBQUMsbUJBQW1CO29CQUMxQyxJQUFJLEdBQVcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDO29CQUM5QixNQUFNLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7b0JBQzlDLE1BQU07Z0JBRVIsS0FBSyxtQkFBbUIsQ0FBQyxlQUFlO29CQUN0QyxJQUFJLEdBQVcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDO29CQUM5QixJQUFJLEdBQVcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDO29CQUM5QixNQUFNLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO29CQUNoRCxNQUFNO2dCQUVSLEtBQUssbUJBQW1CLENBQUMsaUJBQWlCO29CQUN4QyxJQUFJLEdBQVcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDO29CQUM5QixNQUFNLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7b0JBQzVDLE1BQU07Z0JBRVIsS0FBSyxtQkFBbUIsQ0FBQyxtQkFBbUI7b0JBQzFDLElBQUksR0FBVyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUM7b0JBQzlCLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7b0JBQ3hDLE1BQU07Z0JBR1IsS0FBSyxtQkFBbUIsQ0FBQyxXQUFXO29CQUNsQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLENBQUM7b0JBQzlCLE1BQU07Z0JBRVIsS0FBSyxtQkFBbUIsQ0FBQyxxQkFBcUI7b0JBQzVDLElBQUksR0FBVyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUM7b0JBQzlCLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7b0JBQzFDLE1BQU07Z0JBRVIsS0FBSyxtQkFBbUIsQ0FBQyx3QkFBd0I7b0JBQy9DLElBQUksR0FBVyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUM7b0JBQzlCLElBQUksR0FBVyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUM7b0JBRTlCLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO29CQUNsRCxNQUFNO2dCQUVSLEtBQUssbUJBQW1CLENBQUMsZ0JBQWdCO29CQUN2QyxJQUFJLEdBQVcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDO29CQUM5QixJQUFJLEdBQVcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDO29CQUU5QixJQUFJLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztvQkFDMUMsTUFBTTtnQkFFUixLQUFLLG1CQUFtQixDQUFDLDZCQUE2QjtvQkFDcEQsSUFBSSxHQUFXLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQztvQkFDOUIsTUFBTSxJQUFJLENBQUMsOEJBQThCLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO29CQUN4RCxNQUFNO2dCQUVSLEtBQUssbUJBQW1CLENBQUMsYUFBYTtvQkFDcEMsS0FBSyxHQUFXLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQztvQkFDL0IsSUFBSSxLQUFLLEdBQUcsQ0FBQyxFQUFFO3dCQUNiLEtBQUssRUFBRSxDQUFDO3dCQUdSLFVBQVUsR0FBRyxJQUFJLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQzt3QkFDOUIsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLEVBQUUsQ0FBQyxFQUFFOzRCQUN4QixVQUFVLENBQUMsS0FBSyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBVyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUM7d0JBRXJELElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBVyxRQUFRLENBQUMsR0FBRyxFQUFHLENBQUMsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLENBQUMsQ0FBQztxQkFDeEY7b0JBQ0QsTUFBTTtnQkFFUixLQUFLLG1CQUFtQixDQUFDLGlCQUFpQjtvQkFDeEMsS0FBSyxHQUFXLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQztvQkFDL0IsSUFBSSxLQUFLLEdBQUcsQ0FBQyxFQUFFO3dCQUNiLEtBQUssRUFBRSxDQUFDO3dCQUdSLFVBQVUsR0FBRyxJQUFJLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQzt3QkFDOUIsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLEVBQUUsQ0FBQyxFQUFFOzRCQUN4QixVQUFVLENBQUMsS0FBSyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBVyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUM7d0JBRXJELElBQUksQ0FBQyxrQkFBa0IsQ0FBVSxRQUFRLENBQUMsR0FBRyxFQUFHLENBQUMsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLENBQUMsQ0FBQztxQkFDOUU7b0JBQ0QsTUFBTTtnQkFFUixLQUFLLG1CQUFtQixDQUFDLGlCQUFpQjtvQkFDeEMsTUFBTSxDQUFDLElBQUksR0FBRyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUM7b0JBQ3JDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO29CQUNyQixJQUFJLENBQUMsa0JBQWtCLENBQVUsUUFBUSxDQUFDLEdBQUcsRUFBRyxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQztvQkFDbEUsTUFBTTtnQkFFUixLQUFLLG1CQUFtQixDQUFDLG9CQUFvQjtvQkFDM0MsTUFBTSxDQUFDLElBQUksR0FBRyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUM7b0JBQ3ZDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO29CQUN0QixJQUFJLENBQUMscUJBQXFCLENBQVUsUUFBUSxDQUFDLEdBQUcsRUFBRyxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQztvQkFDcEUsTUFBTTtnQkFFUixLQUFLLG1CQUFtQixDQUFDLGVBQWU7b0JBQ3RDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsQ0FBQztvQkFDL0IsTUFBTTtnQkFFUjtvQkFDRSxPQUFPO2FBQ1Y7WUFDRCxJQUFJLFNBQVMsRUFBRTtnQkFDYixJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sRUFBRSxZQUFZLENBQUMsQ0FBQztnQkFDekMsUUFBUSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFHdEIsSUFBSSxNQUFNLENBQUMsTUFBTTtvQkFDZixhQUFhLENBQUMsYUFBYSxFQUFFLENBQUM7YUFDakM7UUFDSCxDQUFDO0tBQUE7SUFRTyx3QkFBd0IsQ0FBQyxJQUFZLEVBQUUsSUFBWSxFQUFFLE1BQWM7UUFDekUsTUFBTSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7UUFDdkIsTUFBTSxDQUFDLElBQUksR0FBRyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUM7UUFFdkMsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsRUFBRTtZQUN6QixRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUU7Z0JBQ25CLEtBQUssY0FBYyxDQUFDLDRCQUE0QjtvQkFDOUMsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLGdCQUFnQixDQUFDLE9BQU8sRUFBRTt3QkFDMUMsTUFBTSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7cUJBQ3ZCOzt3QkFDQyxNQUFNLENBQUMsUUFBUSxDQUFDLDBCQUEwQixDQUFDLHdCQUF3QixHQUFHLGNBQWMsQ0FBQyw0QkFBNEIsR0FBRyw0QkFBNEIsQ0FBQyxDQUFDO29CQUNwSixNQUFNO2dCQUVSO29CQUNFLE1BQU0sQ0FBQyxRQUFRLENBQUMsMEJBQTBCLENBQUMsbUNBQW1DLENBQUMsQ0FBQztvQkFDaEYsTUFBTTthQUNUO1NBQ0Y7SUFDSCxDQUFDO0lBUWEsY0FBYyxDQUFDLGFBQTRCLEVBQUUsUUFBb0IsRUFBRSxZQUE4Qjs7WUFDN0csSUFBSSxNQUFjLENBQUM7WUFDbkIsSUFBSSxDQUFTLENBQUM7WUFDZCxJQUFJLFVBQVUsR0FBMkIsSUFBSSxJQUFJLEVBQW9CLENBQUM7WUFDdEUsSUFBSSxPQUF5QixDQUFDO1lBRTlCLElBQUksTUFBTSxHQUFXLGFBQWEsQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUcvQyxJQUFJLG1CQUFtQixDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsRUFBRTtnQkFDM0MsTUFBTSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxhQUFhLEVBQUUsTUFBTSxDQUFDLENBQUM7Z0JBRXRELElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxFQUFFLFlBQVksQ0FBQyxDQUFDO2dCQUN6QyxRQUFRLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO2dCQUd0QixJQUFJLE1BQU0sQ0FBQyxNQUFNO29CQUNmLGFBQWEsQ0FBQyxhQUFhLEVBQUUsQ0FBQztnQkFFaEMsT0FBTzthQUNSO1lBRUQsSUFBSSxPQUFPLEdBQVksY0FBYyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztZQU90RCxJQUFJLFFBQVEsR0FBWSxLQUFLLENBQUM7WUFDOUIsSUFBSSxPQUFPLENBQUMsYUFBYSxHQUFHLENBQUMsRUFBRTtnQkFDN0IsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxPQUFPLENBQUMsYUFBYSxFQUFFLENBQUMsRUFBRSxFQUFFO29CQUMxQyxhQUFhLENBQUMsZUFBZSxFQUFFLENBQUM7b0JBQ2hDLE1BQU0sSUFBSSxDQUFDLGNBQWMsQ0FBQyxhQUFhLEVBQUUsUUFBUSxFQUFvQixPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQzFGLElBQUksYUFBYSxDQUFDLE1BQU0sRUFBRTt3QkFDeEIsUUFBUSxHQUFHLElBQUksQ0FBQztpQkFDbkI7YUFDRjtZQUVELElBQUksUUFBUTtnQkFDVixhQUFhLENBQUMsYUFBYSxFQUFFLENBQUM7WUFHaEMsTUFBTSxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sRUFBRSxhQUFhLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxZQUFZLENBQUMsQ0FBQztZQUdwRixJQUFJLFNBQVMsR0FBVyxVQUFVLENBQUMsTUFBTSxDQUFDO1lBQzFDLElBQUksU0FBUyxHQUFHLENBQUMsRUFBRTtnQkFDakIsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxTQUFTLEVBQUUsQ0FBQyxFQUFFLEVBQUU7b0JBQzlCLE9BQU8sR0FBRyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO29CQUNqQyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO29CQUN2QixRQUFRLE9BQU8sQ0FBQyxPQUFPLEVBQUU7d0JBQ3ZCLEtBQUssbUJBQW1CLENBQUMsYUFBYTs0QkFDcEMsSUFBSSxDQUFTLENBQUM7NEJBQ2QsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxPQUFPLENBQUMsU0FBUyxFQUFFLENBQUMsRUFBRTtnQ0FDcEMsYUFBYSxDQUFDLFlBQVksRUFBRSxDQUFDOzRCQUMvQixNQUFNO3dCQUVSLEtBQUssbUJBQW1CLENBQUMsWUFBWTs0QkFDbkMsTUFBTSxJQUFJLENBQUMsY0FBYyxDQUFDLGFBQWEsRUFBRSxRQUFRLEVBQUUsWUFBWSxDQUFDLENBQUM7NEJBQ2pFLE1BQU07cUJBQ1Q7aUJBQ0Y7YUFDRjtRQUNILENBQUM7S0FBQTtJQVVhLHlCQUF5QixDQUFDLGFBQTRCLEVBQUUsUUFBb0I7O1lBQ3hGLElBQUksTUFBYyxDQUFDO1lBQ25CLElBQUksVUFBVSxHQUEyQixJQUFJLElBQUksRUFBb0IsQ0FBQztZQUV0RSxJQUFJLE1BQU0sR0FBVyxhQUFhLENBQUMsU0FBUyxFQUFFLENBQUM7WUFHL0MsSUFBSSxNQUFNLEtBQUssbUJBQW1CLENBQUMsZ0JBQWdCLEVBQUU7Z0JBQ25ELE9BQU8sS0FBSyxDQUFDO2FBQ2Q7WUFFRCxJQUFJLE9BQU8sR0FBWSxjQUFjLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBRXRELE1BQU0sSUFBSSxDQUFDLGNBQWMsQ0FBQyxhQUFhLEVBQUUsUUFBUSxFQUFvQixPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFFMUYsTUFBTSxHQUFXLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUNoQyxPQUFPLE1BQU0sQ0FBQyxJQUFJLEtBQUssZ0JBQWdCLENBQUMsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQztRQUNyRSxDQUFDO0tBQUE7SUFFRCxNQUFNLENBQUMsV0FBVyxDQUFDLElBQVksRUFBRSxJQUFZLEVBQUUsYUFBc0I7UUFDbkUsSUFBSSxNQUFNLEdBQVcsQ0FBQyxDQUFDO1FBQ3ZCLElBQUksS0FBSyxHQUFxQixJQUFJLENBQUMsSUFBSSxDQUFDO1FBQ3hDLElBQUksS0FBSyxHQUFxQixJQUFJLENBQUMsSUFBSSxDQUFDO1FBQ3hDLElBQUksTUFBTSxHQUF3QixJQUFJLG1CQUFtQixFQUFFLENBQUM7UUFFNUQsSUFBSSxJQUFJLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxNQUFNO1lBQzVCLE9BQU8sQ0FBQyxDQUFDO1FBRVgsSUFBSSxJQUFJLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxNQUFNO1lBQzVCLE1BQU0sSUFBSSxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUV0QyxJQUFJLHFCQUFxQixDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUMzQyxJQUFJLElBQUksQ0FBQyxpQkFBaUIsSUFBSSxRQUFRLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxRQUFRLENBQUMsbUJBQW1CLEVBQUU7Z0JBQ25HLElBQUksQ0FBQyxNQUFNLEdBQUcsUUFBUSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFDckQsSUFBSSxDQUFDLElBQUksR0FBRyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUM7Z0JBQ25DLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxLQUFLLENBQUM7YUFDaEM7O2dCQUNDLE1BQU0sQ0FBQyxhQUFhLENBQUMsSUFBSSxFQUFFLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxDQUFDO1NBQ3hEO1FBQ0QsSUFBSSxxQkFBcUIsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDM0MsSUFBSSxJQUFJLENBQUMsaUJBQWlCLElBQUksUUFBUSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssUUFBUSxDQUFDLG1CQUFtQixFQUFFO2dCQUNuRyxJQUFJLENBQUMsTUFBTSxHQUFHLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQ3JELElBQUksQ0FBQyxJQUFJLEdBQUcsZ0JBQWdCLENBQUMsS0FBSyxDQUFDO2dCQUNuQyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsS0FBSyxDQUFDO2FBQ2hDOztnQkFDQyxNQUFNLENBQUMsYUFBYSxDQUFDLElBQUksRUFBRSxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsQ0FBQztTQUN4RDtRQUVELEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO1FBQ2xCLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO1FBRWxCLElBQUksS0FBSyxLQUFLLEtBQUssRUFBRTtZQUNuQixJQUFJLENBQUMscUJBQXFCLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxJQUFJLHFCQUFxQixDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDNUYsQ0FBQyxxQkFBcUIsQ0FBQyxvQkFBb0IsQ0FBQyxLQUFLLENBQUMsSUFBSSxxQkFBcUIsQ0FBQyxvQkFBb0IsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFO2FBRTNHOztnQkFDQyxPQUFPLENBQUMsQ0FBQztTQUNaO1FBS0QsUUFBUSxLQUFLLEVBQUU7WUFDYixLQUFLLGdCQUFnQixDQUFDLEtBQUssQ0FBQztZQUM1QixLQUFLLGdCQUFnQixDQUFDLElBQUksQ0FBQztZQUMzQixLQUFLLGdCQUFnQixDQUFDLFdBQVcsQ0FBQztZQUNsQyxLQUFLLGdCQUFnQixDQUFDLE9BQU87Z0JBQzNCLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxJQUFJLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxJQUFJO29CQUM5QyxPQUFPLENBQUMsQ0FBQztnQkFFWCxJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssSUFBSSxJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssSUFBSTtvQkFDOUMsTUFBTSxJQUFJLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUV0QyxJQUFJLElBQUksR0FBVyxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFDOUMsSUFBSSxJQUFJLEdBQVcsT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBRTlDLElBQUksV0FBVyxDQUFDLFFBQVEsQ0FBQyx3QkFBd0IsRUFBRTtvQkFDakQsQ0FBQyxlQUFlLENBQUMsbUJBQW1CLEVBQUU7d0JBQ3BDLEtBQUssS0FBSyxnQkFBZ0IsQ0FBQyxLQUFLLElBQUksS0FBSyxLQUFLLGdCQUFnQixDQUFDLEtBQUssQ0FBQztvQkFDdkUsTUFBTSxHQUFHLGVBQWUsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDOztvQkFFNUMsTUFBTSxHQUFHLE9BQU8sQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO2dCQUM5QyxNQUFNO1lBR1IsS0FBSyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUM7WUFDOUIsS0FBSyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUM7WUFDM0IsS0FBSyxnQkFBZ0IsQ0FBQyxJQUFJO2dCQUN4QixJQUFJLElBQUksQ0FBQyxRQUFRLEtBQUssSUFBSSxJQUFJLElBQUksQ0FBQyxRQUFRLEtBQUssSUFBSTtvQkFDbEQsT0FBTyxDQUFDLENBQUM7Z0JBRVgsSUFBSSxJQUFJLENBQUMsUUFBUSxLQUFLLElBQUksSUFBSSxJQUFJLENBQUMsUUFBUSxLQUFLLElBQUk7b0JBQ2xELE1BQU0sSUFBSSxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDdEMsTUFBTSxHQUFHLFFBQVEsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7Z0JBQ3hELE1BQU07WUFHUixLQUFLLGdCQUFnQixDQUFDLE9BQU87Z0JBQzNCLE1BQU0sR0FBRyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUN6RCxNQUFNO1NBRVQ7UUFDRCxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDbEIsQ0FBQztJQWtCRCxNQUFNLENBQU8sSUFBSSxDQUFDLEdBQWMsRUFBRSxZQUE4QixFQUFFLElBQWM7O1lBQzlFLElBQUksR0FBRyxHQUFXLElBQUksQ0FBQztZQUN2QixJQUFJLFFBQVEsR0FBa0IsSUFBSSxLQUFLLEVBQUUsQ0FBQztZQUUxQyxJQUFJLEdBQUcsS0FBSyxJQUFJLElBQUksR0FBRyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7Z0JBQ2xDLElBQUksRUFBRSxHQUF3QixJQUFJLG1CQUFtQixFQUFFLENBQUM7Z0JBQ3hELElBQUksYUFBYSxHQUFrQixJQUFJLGFBQWEsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLGlCQUFpQixFQUFFLEtBQUssU0FBUyxDQUFDLGtCQUFrQixDQUFDLENBQUM7Z0JBQ3JILEVBQUUsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO2dCQUNsQixNQUFNLEVBQUUsQ0FBQyxjQUFjLENBQUMsYUFBYSxFQUFFLFFBQVEsRUFBRSxZQUFZLENBQUMsQ0FBQztnQkFDL0QsR0FBRyxHQUFXLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQztnQkFDN0IsSUFBSSxhQUFhLENBQUMsTUFBTSxFQUFFO29CQUd4QixHQUFHLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQzthQUNyQjtZQUNELE9BQU8sR0FBRyxDQUFDO1FBQ2IsQ0FBQztLQUFBO0lBRUQsTUFBTSxDQUFPLHFCQUFxQixDQUFDLEdBQWMsRUFBRSxJQUFjOztZQUMvRCxJQUFJLFFBQVEsR0FBa0IsSUFBSSxLQUFLLEVBQUUsQ0FBQztZQUUxQyxJQUFJLEdBQUcsS0FBSyxJQUFJLElBQUksR0FBRyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7Z0JBQ2xDLElBQUksRUFBRSxHQUF3QixJQUFJLG1CQUFtQixFQUFFLENBQUM7Z0JBQ3hELElBQUksYUFBYSxHQUFrQixJQUFJLGFBQWEsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLGlCQUFpQixFQUFFLEtBQUssU0FBUyxDQUFDLGtCQUFrQixDQUFDLENBQUM7Z0JBQ3JILEVBQUUsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO2dCQUNsQixPQUFPLE1BQU0sRUFBRSxDQUFDLHlCQUF5QixDQUFDLGFBQWEsRUFBRSxRQUFRLENBQUMsQ0FBQzthQUNwRTtZQUNELE9BQU8sS0FBSyxDQUFDO1FBQ2YsQ0FBQztLQUFBO0lBTU8sTUFBTSxDQUFDLFNBQVMsQ0FBQyxHQUFXO1FBQ2xDLElBQUksR0FBRyxHQUFXLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsQ0FBQztRQUMzQyxPQUFPLE9BQU8sQ0FBQyxXQUFXLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7SUFLTyxhQUFhLENBQUMsSUFBWSxFQUFFLElBQVksRUFBRSxJQUFZLEVBQUUsTUFBYztRQUM1RSxNQUFNLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztRQUN2QixNQUFNLENBQUMsSUFBSSxHQUFHLGdCQUFnQixDQUFDLE9BQU8sQ0FBQztRQUN2QyxJQUFJO1lBQ0YsSUFBSSxtQkFBbUIsQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUU7Z0JBQzFELElBQUksR0FBRyxJQUFJLENBQUM7Z0JBQ1osSUFBSSxtQkFBbUIsQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDO29CQUN4RCxNQUFNLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQzthQUN6QjtTQUNGO1FBQUMsT0FBTyxFQUFFLEVBQUU7WUFDWCxJQUFJLEVBQUUsWUFBWSxrQkFBa0IsRUFBRTtnQkFDcEMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7YUFDckM7O2dCQUNDLE1BQU0sRUFBRSxDQUFDO1NBQ1o7SUFDSCxDQUFDO0lBS08sYUFBYSxDQUFDLE1BQWMsRUFBRSxJQUFZLEVBQUUsSUFBWSxFQUFFLElBQVksRUFBRSxJQUFZO1FBQzFGLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxJQUFJLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxJQUFJLElBQUksSUFBSSxDQUFDLFFBQVEsS0FBSyxJQUFJLElBQUksSUFBSSxDQUFDLFFBQVEsS0FBSyxJQUFJLEVBQUU7WUFDcEcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDaEQsT0FBTztTQUNSO1FBQ0QsbUJBQW1CLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztRQUM1QyxJQUFJLENBQUMsR0FBVyxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQzNDLElBQUksQ0FBQyxHQUFHLENBQUM7WUFDUCxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ1IsSUFBSSxDQUFDLEdBQVcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUUzQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU07WUFDeEIsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDO1FBRXpCLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNO1lBQ2xDLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBRW5DLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ1YsT0FBTztRQUVULElBQUksS0FBSyxHQUFXLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFFdEcsTUFBTSxDQUFDLE1BQU0sR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUN4RSxNQUFNLENBQUMsTUFBTSxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFHckcsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQztZQUM1QixNQUFNLENBQUMsTUFBTSxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUMzRyxDQUFDO0lBRU8sTUFBTSxDQUFDLFNBQVMsQ0FBQyxHQUFXLEVBQUUsTUFBYztRQUNsRCxNQUFNLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUM7UUFDdkIsTUFBTSxDQUFDLE1BQU0sR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDO1FBQzNCLE1BQU0sQ0FBQyxNQUFNLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQztRQUMzQixNQUFNLENBQUMsaUJBQWlCLEdBQUcsR0FBRyxDQUFDLGlCQUFpQixDQUFDO0lBQ25ELENBQUM7SUFFTyxPQUFPLENBQUMsR0FBVyxFQUFFLE1BQWM7UUFDekMsUUFBUSxHQUFHLENBQUMsSUFBSSxFQUFFO1lBQ2hCLEtBQUssZ0JBQWdCLENBQUMsS0FBSyxDQUFDO1lBQzVCLEtBQUssZ0JBQWdCLENBQUMsT0FBTyxDQUFDO1lBQzlCLEtBQUssZ0JBQWdCLENBQUMsSUFBSSxDQUFDO1lBQzNCLEtBQUssZ0JBQWdCLENBQUMsV0FBVztnQkFDL0IsbUJBQW1CLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxNQUFNLENBQUMsQ0FBQztnQkFDM0MsTUFBTTtZQUVSLEtBQUssZ0JBQWdCLENBQUMsT0FBTyxDQUFDO1lBQzlCLEtBQUssZ0JBQWdCLENBQUMsSUFBSSxDQUFDO1lBQzNCLEtBQUssZ0JBQWdCLENBQUMsSUFBSTtnQkFDeEIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNO29CQUNiLE1BQU0sQ0FBQyxRQUFRLEdBQUcsSUFBSSxRQUFRLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUMvQyxNQUFNO1lBRVIsS0FBSyxnQkFBZ0IsQ0FBQyxPQUFPO2dCQUMzQixNQUFNLENBQUMsT0FBTyxHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUM7Z0JBQzdCLE1BQU07WUFFUjtnQkFDRSxNQUFNLENBQUMsUUFBUSxDQUFDLDBCQUEwQixDQUFDLDJEQUEyRCxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDbkgsTUFBTTtTQUNUO1FBQ0QsTUFBTSxDQUFDLElBQUksR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDO1FBQ3ZCLE1BQU0sQ0FBQyxNQUFNLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQztJQUM3QixDQUFDO0lBS08sV0FBVyxDQUFDLE1BQWMsRUFBRSxJQUFZLEVBQUUsSUFBWSxFQUFFLElBQVksRUFBRSxJQUFZO1FBQ3hGLE1BQU0sQ0FBQyxJQUFJLEdBQUcsZ0JBQWdCLENBQUMsT0FBTyxDQUFDO1FBQ3ZDLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxJQUFJLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxJQUFJLElBQUksSUFBSSxDQUFDLFFBQVEsS0FBSyxJQUFJLElBQUksSUFBSSxDQUFDLFFBQVEsS0FBSyxJQUFJLEVBQUU7WUFDcEcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDaEQsT0FBTztTQUNSO1FBQ0QsSUFBSSxDQUFDLEdBQVcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUM7UUFFbkMsSUFBSSxPQUFPLEdBQVcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDckQsT0FBTyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQy9CLE9BQU8sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQztRQUUvQixJQUFJLE9BQU8sR0FBVyxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQ2pELE9BQU8sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQztRQUMvQixPQUFPLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUVoRCxNQUFNLENBQUMsTUFBTSxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQztRQUMvRCxNQUFNLENBQUMsTUFBTSxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDaEYsTUFBTSxDQUFDLE1BQU0sR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsT0FBTyxHQUFHLE9BQU8sRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxDQUFDLEdBQUcsT0FBTyxDQUFDLENBQUM7SUFDdEcsQ0FBQztJQUtPLFdBQVcsQ0FBQyxNQUFjLEVBQUUsSUFBWSxFQUFFLElBQVksRUFBRSxJQUFZO1FBQzFFLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxJQUFJLElBQUksSUFBSSxDQUFDLFFBQVEsS0FBSyxJQUFJLElBQUksSUFBSSxDQUFDLFFBQVEsS0FBSyxJQUFJLEVBQUU7WUFDNUUsS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDaEQsT0FBTztTQUNSO1FBR0QsbUJBQW1CLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztRQUM1QyxJQUFJLENBQUMsR0FBVyxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUMvQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDVCxDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQ1A7UUFDRCxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU07WUFDMUIsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDO1FBQzNCLElBQUksQ0FBQyxHQUFXLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDM0MsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTTtZQUM5QixDQUFDLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO1FBQy9CLElBQUksQ0FBQyxJQUFJLENBQUM7WUFDUixPQUFPO1FBRVQsTUFBTSxDQUFDLE1BQU0sR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztJQUNuRyxDQUFDO0lBS08sWUFBWSxDQUFDLE1BQWMsRUFBRSxJQUFZO1FBQy9DLE1BQU0sQ0FBQyxJQUFJLEdBQUcsZ0JBQWdCLENBQUMsT0FBTyxDQUFDO1FBQ3ZDLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxJQUFJLEVBQUU7WUFDeEIsS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDaEQsT0FBTztTQUNSO1FBQ0QsSUFBSSxPQUFPLEdBQUcsSUFBSSxhQUFhLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzdDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsT0FBTyxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUM1RCxDQUFDO0lBS08sYUFBYSxDQUFDLE1BQWMsRUFBRSxJQUFZO1FBQ2hELE1BQU0sQ0FBQyxJQUFJLEdBQUcsZ0JBQWdCLENBQUMsT0FBTyxDQUFDO1FBQ3ZDLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxJQUFJLEVBQUU7WUFDeEIsS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDaEQsT0FBTztTQUNSO1FBQ0QsTUFBTSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQzVDLENBQUM7SUFLTyxhQUFhLENBQUMsTUFBYyxFQUFFLElBQVk7UUFDaEQsTUFBTSxDQUFDLElBQUksR0FBRyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUM7UUFDdkMsSUFBSSxJQUFJLENBQUMsTUFBTSxJQUFJLElBQUksRUFBRTtZQUN2QixLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUNoRCxPQUFPO1NBQ1I7UUFDRCxNQUFNLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDNUMsQ0FBQztJQUtPLFdBQVcsQ0FBQyxNQUFjLEVBQUUsSUFBWSxFQUFFLElBQVk7UUFDNUQsTUFBTSxDQUFDLElBQUksR0FBRyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUM7UUFDckMsSUFBSSxJQUFJLENBQUMsTUFBTSxJQUFJLElBQUksSUFBSSxJQUFJLENBQUMsUUFBUSxJQUFJLElBQUksRUFBRTtZQUNoRCxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUM5QyxPQUFPO1NBQ1I7UUFDRCxJQUFJLElBQUksR0FBVyxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQzlDLElBQUksR0FBRyxHQUFXLENBQUMsQ0FBQztRQUNwQixRQUFRLElBQUksRUFBRTtZQUNaLEtBQUssQ0FBQztnQkFDSixHQUFHLEdBQUcsbUJBQW1CLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFDbkQsTUFBTTtTQUNUO1FBQ0QsSUFBSSxJQUFJLEdBQUcsTUFBTSxDQUFDLFlBQVksQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7UUFDMUMsSUFBSSxLQUFLLEdBQUcsTUFBTSxDQUFDLFlBQVksQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7UUFDM0MsTUFBTSxDQUFDLE1BQU0sR0FBRyxFQUFFLEdBQUcsSUFBSSxHQUFHLEtBQUssQ0FBQztJQUNwQyxDQUFDO0lBRU8sTUFBTSxDQUFDLFdBQVcsQ0FBQyxHQUFXO1FBQ3BDLElBQUksWUFBWSxHQUFHO1lBQ2pCLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLO1NBQ3ZELENBQUM7UUFDRixJQUFJLFVBQVUsR0FBVyxDQUFDLENBQUM7UUFDM0IsSUFBSSxHQUFHLEdBQVcsR0FBRyxDQUFDLE1BQU0sQ0FBQztRQUM3QixJQUFJLEdBQUcsR0FBVyxDQUFDLENBQUM7UUFDcEIsT0FBTyxHQUFHLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxFQUFFO1lBQ3JCLElBQUksRUFBRSxHQUFHLEdBQUcsQ0FBQyxVQUFVLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQztZQUN0QyxFQUFFLEdBQVcsQ0FBQyxFQUFFLEdBQUcsbUJBQW1CLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDckQsR0FBRyxHQUFHLG1CQUFtQixDQUFDLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFFLG1CQUFtQixDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDcEcsSUFBSSxJQUFZLENBQUM7WUFDakIsSUFBSSxPQUFlLENBQUM7WUFDcEIsS0FBSyxPQUFPLEdBQUcsQ0FBQyxFQUFFLElBQUksR0FBVyxtQkFBbUIsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsT0FBTyxHQUFHLENBQUMsRUFBRSxPQUFPLEVBQUUsRUFBRyxJQUFJLEdBQVcsQ0FBQyxtQkFBbUIsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUU7Z0JBQ3BKLElBQVksbUJBQW1CLENBQUMsT0FBTyxDQUFTLENBQUMsRUFBRSxHQUFXLG1CQUFtQixDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztvQkFDckcsR0FBRyxHQUFXLENBQUMsR0FBRyxHQUFHLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO2FBQy9DO1NBQ0Y7UUFDRCxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDZixDQUFDO0lBRU8sTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFTO1FBQzlCLE9BQWUsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUM7SUFDNUIsQ0FBQztJQUVPLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBUztRQUM5QixPQUFlLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDckMsQ0FBQztJQUVELE1BQU0sQ0FBQyxPQUFPLENBQUMsRUFBVSxFQUFFLEVBQVU7UUFDbkMsT0FBZSxDQUFTLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxHQUFXLEVBQUUsQ0FBQyxDQUFDO0lBQ2xELENBQUM7SUFFRCxNQUFNLENBQUMsT0FBTyxDQUFDLEVBQVUsRUFBRSxFQUFVLEVBQUUsRUFBVSxFQUFFLEVBQVU7UUFDM0QsT0FBTyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO0lBQ3BELENBQUM7SUFFTyxjQUFjLENBQUMsTUFBYyxFQUFFLElBQVksRUFBRSxJQUFZO1FBQy9ELElBQUksV0FBVyxHQUFhO1lBQzFCLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDO1lBQ3RLLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUMsRUFBRSxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQztTQUN4RSxDQUFDO1FBQ0YsSUFBSSxHQUFXLENBQUM7UUFDaEIsSUFBSSxHQUFXLENBQUM7UUFDaEIsSUFBSSxLQUFhLENBQUM7UUFDbEIsSUFBSSxNQUFjLENBQUM7UUFFbkIsSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLElBQUksSUFBSSxJQUFJLENBQUMsUUFBUSxLQUFLLElBQUksRUFBRTtZQUNsRCxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUNoRCxPQUFPO1NBQ1I7UUFFRCxJQUFJLElBQUksR0FBVyxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQzlDLElBQUksR0FBRyxHQUFXLENBQUMsQ0FBQztRQUNwQixRQUFRLElBQUksRUFBRTtZQUNaLEtBQUssQ0FBQztnQkFDSixHQUFHLEdBQUcsQ0FBQyxDQUFDO2dCQUNSLEtBQUssR0FBRyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLEVBQUU7b0JBQzlDLEtBQUssR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUM7b0JBQ3BDLE1BQU0sR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7b0JBQ3ZDLEdBQUcsSUFBSSxNQUFNLEdBQUcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO29CQUNyQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztpQkFDZjtnQkFDRCxHQUFHLElBQUksRUFBRSxDQUFDO2dCQUNWLElBQUksR0FBRyxLQUFLLENBQUM7b0JBQ1gsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLENBQUM7Z0JBQ2pCLE1BQU07WUFFUixLQUFLLENBQUM7Z0JBQ0osS0FBSyxHQUFHLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLEVBQUUsRUFBRTtvQkFDOUMsR0FBRyxHQUFHLFdBQVcsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxHQUFHLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDakUsSUFBSSxNQUFNLEdBQVcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUM7b0JBQ3hELEtBQUssR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUM7b0JBQ3BDLElBQUksZUFBZSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUM7d0JBQ2pDLE1BQU0sR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7eUJBQ3BDLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7d0JBQzlCLE1BQU0sR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7O3dCQUVoRSxNQUFNLEdBQUcsQ0FBQyxDQUFDO29CQUNiLEdBQUcsSUFBSSxNQUFNLENBQUM7aUJBQ2Y7Z0JBQ0QsR0FBRyxJQUFJLEVBQUUsQ0FBQztnQkFDVixJQUFJLEdBQUcsS0FBSyxDQUFDO29CQUNYLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxDQUFDO2dCQUNqQixNQUFNO1NBQ1Q7UUFDRCxLQUFLLENBQUMsaUJBQWlCLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNqRSxDQUFDO0lBRU8sUUFBUSxDQUFDLEdBQVcsRUFBRSxHQUFXO1FBQ3ZDLElBQUksQ0FBQyxHQUFXLENBQUMsQ0FBQztRQUNsQixLQUFLLElBQUksR0FBRyxHQUFXLENBQUMsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxFQUFFO1lBQ2xELElBQUksZUFBZSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUU7Z0JBQzVDLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDO2dCQUNYLENBQUMsSUFBWSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQ3hEO1NBQ0Y7UUFDRCxPQUFPLENBQUMsQ0FBQztJQUNYLENBQUM7SUFFTyxjQUFjLENBQUMsTUFBYyxFQUFFLElBQVk7UUFDakQsSUFBSSxXQUFXLEdBQWE7WUFDMUIsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUc7WUFDbkYsR0FBRztZQUNILEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHO1NBQ3ZDLENBQUM7UUFFRixJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssSUFBSSxFQUFFO1lBQ3hCLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzlDLE9BQU87U0FDUjtRQUNELE1BQU0sQ0FBQyxJQUFJLEdBQUcsZ0JBQWdCLENBQUMsS0FBSyxDQUFDO1FBQ3JDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO1FBQ3ZCLElBQUksS0FBSyxHQUFXLEdBQUcsQ0FBQztRQUN4QixJQUFJLE1BQU0sR0FBVyxDQUFDLENBQUM7UUFDdkIsS0FBSyxJQUFJLEtBQUssR0FBVyxDQUFDLEVBQUUsS0FBSyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxFQUFFO1lBQy9ELElBQUksR0FBRyxHQUFXLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQzFELElBQUksSUFBSSxHQUFXLFdBQVcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDeEUsSUFBSSxLQUFLLEtBQUssQ0FBQztnQkFDYixNQUFNLENBQUMsTUFBTSxHQUFHLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDO2lCQUNyRSxJQUFJLElBQUksR0FBRyxHQUFHLElBQUksSUFBSSxLQUFLLEtBQUssRUFBRTtnQkFDckMsTUFBTSxDQUFDLE1BQU0sR0FBRyxtQkFBbUIsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxNQUFNLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQztnQkFDekUsSUFBSSxNQUFNLEdBQUcsQ0FBQztvQkFDWixNQUFNO2FBQ1Q7WUFDRCxLQUFLLEdBQUcsSUFBSSxDQUFDO1NBQ2Q7SUFDSCxDQUFDO0lBU08sTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFXLEVBQUUsR0FBVyxFQUFFLEVBQVU7UUFDdkQsSUFBSSxNQUFNLEdBQWtCLElBQUksYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBRW5ELElBQUksR0FBRyxHQUFHLEdBQUcsQ0FBQyxNQUFNLEVBQUU7WUFDcEIsTUFBTSxDQUFDLFFBQVEsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUM7U0FDMUI7YUFBTTtZQUNMLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7U0FDbkI7UUFDRCxPQUFPLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUMzQixDQUFDO0lBRU8sWUFBWSxDQUFDLE1BQWMsRUFBRSxJQUFZO1FBQy9DLElBQUksS0FBSyxHQUFHLElBQUksUUFBUSxFQUFFLENBQUM7UUFDM0IsSUFBSSxNQUFnQixDQUFDO1FBQ3JCLElBQUksS0FBYSxDQUFDO1FBQ2xCLElBQUksTUFBTSxHQUFHLElBQUksS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQzNCLElBQUksU0FBUyxHQUFHLElBQUksYUFBYSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNqRCxJQUFJLFFBQVEsR0FBWSxLQUFLLENBQUM7UUFDOUIsTUFBTSxDQUFDLElBQUksR0FBRyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUM7UUFDckMsSUFBSSxJQUFJLENBQUMsUUFBUSxJQUFJLElBQUksRUFBRTtZQUN6QixLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUM5QyxPQUFPO1NBQ1I7UUFHRCxLQUFLLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3hCLElBQUksTUFBTSxHQUFHLElBQUksUUFBUSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUN6QyxJQUFJLE1BQU0sQ0FBQyxVQUFVLEVBQUUsRUFBRTtZQUN2QixRQUFRLEdBQUcsSUFBSSxDQUFDO1lBQ2hCLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQztTQUNsQjtRQUNELElBQUksTUFBTSxHQUFXLENBQUMsQ0FBQztRQUN2QixPQUFPLElBQUksRUFBRTtZQUNYLE1BQU0sR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQztZQUNyQyxNQUFNLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDckMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNwQixLQUFLLEdBQUcsTUFBTSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQzVCLE1BQU0sRUFBRSxDQUFDO1lBQ1QsbUJBQW1CLENBQUMsU0FBUyxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsTUFBTSxHQUFHLE1BQU0sRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQzNFLElBQUksTUFBTSxDQUFDLFdBQVcsRUFBRTtnQkFDdEIsTUFBTTtTQUNUO1FBRUQsSUFBSSxRQUFRLEVBQUU7WUFDWixNQUFNLEVBQUUsQ0FBQztZQUNULE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQyxHQUFHLEdBQUcsQ0FBQztTQUN0QztRQUNELEtBQUssS0FBSyxHQUFHLE1BQU0sQ0FBQyxNQUFNLEdBQUcsTUFBTSxFQUFFLEtBQUssR0FBRyxNQUFNLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRTtZQUNqRSxTQUFTLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQ2xDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsU0FBUyxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ3ZDLENBQUM7SUFFTyxNQUFNLENBQUMsU0FBUyxDQUFDLEdBQWEsRUFBRSxNQUFjLEVBQUUsR0FBVyxFQUFFLENBQVMsRUFBRSxJQUFZO1FBQzFGLElBQUksR0FBRyxHQUFXLEdBQUcsQ0FBQztRQUN0QixHQUFHO1lBQ0QsSUFBSSxLQUFLLEdBQVcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUMzQixJQUFJLEtBQUssR0FBRyxFQUFFO2dCQUNaLEdBQUcsQ0FBQyxFQUFFLEdBQUcsR0FBRyxNQUFNLENBQUMsR0FBRyxNQUFNLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUM7O2dCQUNsRSxHQUFHLENBQUMsRUFBRSxHQUFHLEdBQUcsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssR0FBRyxFQUFFLENBQUMsQ0FBQztZQUMvRSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUM7U0FDeEIsUUFDTSxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUU7UUFDM0IsbUJBQW1CLENBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxHQUFHLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztRQUM3RCxPQUFPO0lBQ1QsQ0FBQztJQUdPLE1BQU0sQ0FBQyxVQUFVLENBQUMsR0FBYSxFQUFFLEdBQVcsRUFBRSxHQUFXLEVBQUUsSUFBWTtRQUM3RSxJQUFJLElBQUksS0FBSyxDQUFDLEVBQUU7WUFDZCxHQUFHLElBQUksR0FBRyxDQUFDO1lBQ1gsSUFBSSxHQUFHLEdBQUcsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDLEVBQUU7Z0JBQ3RCLE9BQU8sQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO2dCQUN0QyxPQUFPLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO2FBQ3BDO1NBQ0Y7YUFBTTtZQUNMLElBQUksR0FBRyxHQUFHLENBQUM7Z0JBQ1QsT0FBTyxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7U0FDMUQ7UUFDRCxPQUFPO0lBQ1QsQ0FBQztJQUdPLFlBQVksQ0FBQyxNQUFjLEVBQUUsSUFBWTtRQUMvQyxJQUFJLEtBQUssR0FBRyxJQUFJLFFBQVEsRUFBRSxDQUFDO1FBQzNCLElBQUksR0FBRyxHQUFHLElBQUksUUFBUSxFQUFFLENBQUM7UUFDekIsSUFBSSxNQUFjLENBQUM7UUFDbkIsSUFBSSxLQUFLLEdBQVcsQ0FBQyxDQUFDO1FBQ3RCLElBQUksUUFBUSxHQUFZLEtBQUssQ0FBQztRQUU5QixJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssSUFBSSxFQUFFO1lBQ3hCLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ2hELE9BQU87U0FDUjtRQUdELEtBQUssQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDeEIsTUFBTSxDQUFDLFFBQVEsR0FBRyxJQUFJLFFBQVEsRUFBRSxDQUFDO1FBQ2pDLE1BQU0sQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDM0IsS0FBSyxNQUFNLEdBQUcsQ0FBQyxFQUFFLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxNQUFNLEVBQUUsRUFBRTtZQUN0RCxJQUFJLE1BQU0sR0FBVyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ3pDLElBQUksTUFBTSxLQUFLLEdBQUcsSUFBSSxLQUFLLEtBQUssQ0FBQztnQkFDL0IsUUFBUSxHQUFHLElBQUksQ0FBQztZQUNsQixJQUFJLEtBQUssR0FBVyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQzVELElBQUksS0FBSyxLQUFLLENBQUMsSUFBSSxNQUFNLEtBQUssR0FBRztnQkFDL0IsU0FBUztZQUNYLEtBQUssR0FBRyxDQUFDLENBQUM7WUFDVixNQUFNLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUN2RCxHQUFHLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3RCLE1BQU0sQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1NBQ3REO1FBQ0QsSUFBSSxRQUFRO1lBQ1YsTUFBTSxDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUM1QixNQUFNLENBQUMsSUFBSSxHQUFHLGdCQUFnQixDQUFDLE9BQU8sQ0FBQztJQUN6QyxDQUFDO0lBRU8sVUFBVSxDQUFDLEdBQVcsRUFBRSxRQUFnQixFQUFFLEdBQVc7UUFDM0QsSUFBSSxHQUFXLENBQUM7UUFDaEIsSUFBSSxDQUFDLEdBQVcsQ0FBQyxDQUFDO1FBQ2xCLEtBQUssR0FBRyxHQUFHLFFBQVEsRUFBRSxHQUFHLEdBQUcsUUFBUSxHQUFHLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRTtZQUNoRCxJQUFJLEtBQUssR0FBVyxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ2xELElBQUksZUFBZSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRTtnQkFDbEMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztnQkFDUixDQUFDLElBQUksS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQzlDO2lCQUFNLElBQUksS0FBSyxJQUFJLEdBQUcsSUFBSSxLQUFLLElBQUksR0FBRyxFQUFFO2dCQUN2QyxDQUFDLElBQUksRUFBRSxDQUFDO2dCQUNSLENBQUMsSUFBSSxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO2FBQ25EO1NBQ0Y7UUFDRCxPQUFPLENBQUMsQ0FBQztJQUNYLENBQUM7SUFFTyxXQUFXLENBQUMsTUFBYyxFQUFFLElBQVk7UUFDOUMsTUFBTSxDQUFDLElBQUksR0FBRyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUM7UUFFckMsSUFBSSxJQUFJLENBQUMsUUFBUSxLQUFLLElBQUksRUFBRTtZQUMxQixLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUM5QyxPQUFPO1NBQ1I7UUFFRCxNQUFNLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3JFLENBQUM7SUFFTyxXQUFXLENBQUMsTUFBYyxFQUFFLElBQVk7UUFDOUMsSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLElBQUksRUFBRTtZQUN4QixLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUNoRCxPQUFPO1NBQ1I7UUFFRCxJQUFJLENBQUMsR0FBVyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFekYsSUFBSSxDQUFDLGlCQUFpQixDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDOUQsQ0FBQztJQUVPLFlBQVksQ0FBQyxNQUFjLEVBQUUsSUFBWSxFQUFFLElBQVk7UUFDN0QsTUFBTSxDQUFDLElBQUksR0FBRyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUM7UUFDckMsSUFBSSxJQUFJLENBQUMsUUFBUSxJQUFJLElBQUksSUFBSSxJQUFJLENBQUMsUUFBUSxJQUFJLElBQUksRUFBRTtZQUNsRCxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUM5QyxPQUFPO1NBQ1I7UUFDRCxJQUFJLEdBQUcsR0FBRyxJQUFJLFFBQVEsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDdEMsSUFBSSxHQUFHLENBQUMsV0FBVyxFQUFFO1lBQ25CLEdBQUcsQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUN2QixJQUFJLEdBQUcsR0FBVyxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQzdDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUN2QixJQUFJLFFBQVEsR0FBYyxJQUFJLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUM3QyxLQUFLLElBQUksQ0FBQyxHQUFXLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsRUFBRTtZQUNsQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM1QixJQUFJLFFBQVEsR0FBZSxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3RELE1BQU0sQ0FBQyxNQUFNLEdBQUcsV0FBVyxDQUFDLFFBQVEsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxTQUFTLENBQUMsUUFBUSxFQUFFLENBQUMsRUFBRSxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDN0YsQ0FBQztJQUVPLFlBQVksQ0FBQyxNQUFjLEVBQUUsSUFBWTtRQUMvQyxNQUFNLENBQUMsSUFBSSxHQUFHLGdCQUFnQixDQUFDLE9BQU8sQ0FBQztRQUN2QyxJQUFJLElBQUksQ0FBQyxNQUFNLElBQUksSUFBSSxFQUFFO1lBQ3ZCLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ2hELE9BQU87U0FDUjtRQUNELE1BQU0sQ0FBQyxRQUFRLEdBQUcsSUFBSSxRQUFRLEVBQUUsQ0FBQztRQUNqQyxNQUFNLENBQUMsUUFBUSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQy9CLElBQUksR0FBRyxHQUFXLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ2xFLE1BQU0sQ0FBQyxRQUFRLEdBQUcsSUFBSSxRQUFRLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLFdBQVcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDdEgsQ0FBQztJQU1PLFlBQVksQ0FBQyxNQUFjLEVBQUUsSUFBWSxFQUFFLElBQVksRUFBRSxnQkFBa0M7UUFDakcsTUFBTSxDQUFDLElBQUksR0FBRyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUM7UUFDdkMsSUFBSSxJQUFJLENBQUMsUUFBUSxJQUFJLElBQUksSUFBSSxJQUFJLENBQUMsTUFBTSxJQUFJLElBQUksRUFBRTtZQUNoRCxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUNoRCxPQUFPO1NBQ1I7UUFDRCxNQUFNLENBQUMsTUFBTSxHQUFHLGdCQUFnQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsRUFBRSxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQ2hHLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQztJQUMvQixDQUFDO0lBRU8sWUFBWSxDQUFDLE1BQWMsRUFBRSxJQUFZLEVBQUUsSUFBWSxFQUFFLGdCQUFrQyxFQUM5RSxZQUFxQjtRQUN4QyxNQUFNLENBQUMsSUFBSSxHQUFHLGdCQUFnQixDQUFDLEtBQUssQ0FBQztRQUNyQyxJQUFJLElBQUksQ0FBQyxRQUFRLElBQUksSUFBSSxJQUFJLElBQUksQ0FBQyxNQUFNLElBQUksSUFBSSxFQUFFO1lBQ2hELEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzlDLE9BQU87U0FDUjtRQUNELE1BQU0sQ0FBQyxNQUFNLEdBQUcsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxFQUFFLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFDcEcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLEVBQUUsRUFBRSxZQUFZLENBQUMsQ0FBQztJQUM3QyxDQUFDO0lBR08sWUFBWSxDQUFDLE1BQWMsRUFBRSxJQUFZLEVBQUUsSUFBWSxFQUFFLGdCQUFrQztRQUNqRyxJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssSUFBSSxJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssSUFBSSxFQUFFO1lBQ2hELEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFDO1lBQzdDLE9BQU87U0FDUjtRQVNELElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxnQkFBZ0IsQ0FBQyxPQUFPO1lBQ3hDLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLFFBQVEsQ0FBQyxRQUFRLEVBQUU7YUFDaEQ7aUJBQU07Z0JBQ0wsSUFBSSxHQUFHLEdBQUcsSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7Z0JBQzVDLEtBQUssSUFBSSxHQUFHLEdBQVcsQ0FBQyxFQUFFLEdBQUcsR0FBRyxHQUFHLENBQUMsTUFBTSxFQUFFLEVBQUUsR0FBRztvQkFDL0MsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQztnQkFDbEIsT0FBTyxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO2FBQ2pGO1FBQ0gsSUFBSSxDQUFDLEdBQVcsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUM7UUFDL0YsSUFBSSxDQUFDLElBQUksVUFBVTtZQUNqQixDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ1IsS0FBSyxDQUFDLGlCQUFpQixDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDNUQsQ0FBQztJQUdPLFlBQVksQ0FBQyxNQUFjLEVBQUUsSUFBWSxFQUFFLElBQVksRUFBRSxnQkFBa0MsRUFDOUUsWUFBcUI7UUFDeEMsSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLElBQUksSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLElBQUksRUFBRTtZQUNoRCxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUM3QyxPQUFPO1NBQ1I7UUFDRCxJQUFJLEdBQUcsR0FBRyxJQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLGdCQUFnQixDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUM7UUFDakYsSUFBSSxDQUFDLEdBQVcsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFLFlBQVksQ0FBQyxDQUFDO1FBQzFFLElBQUksQ0FBQyxJQUFJLFVBQVU7WUFDakIsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNSLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzVELENBQUM7SUFHTyxXQUFXLENBQUMsTUFBYyxFQUFFLElBQVk7UUFDOUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ2xELENBQUM7SUFFTSxhQUFhLENBQUMsTUFBYyxFQUFFLElBQVk7UUFDL0MsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ2xELENBQUM7SUFFTyxZQUFZLENBQUMsTUFBYyxFQUFFLElBQVk7UUFDL0MsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ2xELENBQUM7SUFFTyxXQUFXLENBQUMsTUFBYyxFQUFFLElBQVk7UUFDOUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ2xELENBQUM7SUFFTyxjQUFjLENBQUMsTUFBYyxFQUFFLElBQVk7UUFDakQsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ2xELENBQUM7SUFFTyxjQUFjLENBQUMsTUFBYyxFQUFFLElBQVk7UUFDakQsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ2xELENBQUM7SUFFTyxZQUFZLENBQUMsTUFBYyxFQUFFLElBQVk7UUFDL0MsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ2xELENBQUM7SUFHTSxnQkFBZ0IsQ0FBQyxNQUFjLEVBQUUsSUFBYyxFQUFFLEdBQVc7UUFDakUsSUFBSSxJQUFJLEtBQUssSUFBSSxFQUFFO1lBQ2pCLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ2hELE9BQU87U0FDUjtRQUNELElBQUksQ0FBQyxHQUFXLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUlsQyxJQUFJLFdBQVcsR0FBb0IsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLHFCQUFxQixFQUFFLENBQUM7UUFDckYsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLG1CQUFtQixDQUFDLFdBQVcsRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQztRQUNoRyxJQUFJLElBQUksR0FBVyxXQUFXLENBQUMsSUFBSSxDQUFDO1FBQ3BDLElBQUksS0FBSyxHQUFXLFdBQVcsQ0FBQyxLQUFLLENBQUM7UUFDdEMsSUFBSSxHQUFHLEdBQVcsV0FBVyxDQUFDLEdBQUcsQ0FBQztRQUNsQyxJQUFJLEdBQUcsR0FBVyxXQUFXLENBQUMsR0FBRyxDQUFDO1FBQ2xDLElBQUksR0FBRyxHQUFXLFdBQVcsQ0FBQyxHQUFHLENBQUM7UUFDbEMsUUFBUSxHQUFHLEVBQUU7WUFDWCxLQUFLLENBQUM7Z0JBQ0osQ0FBQyxHQUFHLEdBQUcsQ0FBQztnQkFDUixNQUFNO1lBQ1IsS0FBSyxDQUFDO2dCQUNKLENBQUMsR0FBRyxLQUFLLENBQUM7Z0JBQ1YsTUFBTTtZQUNSLEtBQUssQ0FBQztnQkFDSixDQUFDLEdBQUcsSUFBSSxDQUFDO2dCQUNULE1BQU07WUFDUixLQUFLLENBQUM7Z0JBQ0osQ0FBQyxHQUFHLEdBQUcsQ0FBQztnQkFDUixNQUFNO1lBQ1IsS0FBSyxDQUFDO2dCQUNKLENBQUMsR0FBRyxXQUFXLENBQUMsV0FBVyxFQUFFLENBQUMsaUJBQWlCLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDO2dCQUMzRCxNQUFNO1lBQ1I7Z0JBQ0UsQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDTixNQUFNO1NBQ1Q7UUFDRCxLQUFLLENBQUMsaUJBQWlCLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUMvRCxDQUFDO0lBRU8sZ0JBQWdCLENBQUMsTUFBYyxFQUFFLElBQWMsRUFBRSxHQUFXO1FBQ2xFLElBQUksSUFBSSxLQUFLLElBQUksRUFBRTtZQUNqQixLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUNoRCxPQUFPO1NBQ1I7UUFDRCxJQUFJLENBQUMsR0FBVyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7UUFJbkMsSUFBSSxXQUFXLEdBQW9CLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1FBQ3JGLGdCQUFnQixDQUFDLFVBQVUsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDNUMsSUFBSSxJQUFJLEdBQVcsV0FBVyxDQUFDLElBQUksQ0FBQztRQUNwQyxJQUFJLE1BQU0sR0FBVyxXQUFXLENBQUMsTUFBTSxDQUFDO1FBQ3hDLElBQUksTUFBTSxHQUFXLFdBQVcsQ0FBQyxNQUFNLENBQUM7UUFDeEMsUUFBUSxHQUFHLEVBQUU7WUFDWCxLQUFLLENBQUM7Z0JBQ0osQ0FBQyxHQUFHLElBQUksQ0FBQztnQkFDVCxNQUFNO1lBQ1IsS0FBSyxDQUFDO2dCQUNKLENBQUMsR0FBRyxNQUFNLENBQUM7Z0JBQ1gsTUFBTTtZQUNSLEtBQUssQ0FBQztnQkFDSixDQUFDLEdBQUcsTUFBTSxDQUFDO2dCQUNYLE1BQU07WUFDUjtnQkFDRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUNOLE1BQU07U0FDVDtRQUNELEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQy9ELENBQUM7SUFHYSxtQkFBbUIsQ0FBQyxNQUFjLEVBQUUsT0FBZSxFQUFFLE9BQWUsRUFBRSxRQUFnQixFQUNsRSxTQUFpQixFQUFFLE9BQWUsRUFBRSxRQUFnQixFQUFFLFVBQWtCLEVBQ3hFLFVBQWtCOzs7OztZQUNsRCxJQUFJLE1BQU0sR0FBRyxJQUFJLE1BQU0sRUFBRSxDQUFDO1lBRzFCLElBQUksT0FBTyxDQUFDLFFBQVEsS0FBSyxJQUFJLElBQUksT0FBTyxDQUFDLFFBQVEsS0FBSyxJQUFJLEVBQUU7Z0JBQzFELE1BQU0sQ0FBQyxJQUFJLEdBQUcsZ0JBQWdCLENBQUMsT0FBTyxDQUFDO2dCQUN2QyxNQUFNLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztnQkFDdkIsT0FBTzthQUNSO1lBR0QsSUFBSSxPQUFPLEdBQVUsSUFBSSxDQUFDLHFCQUFxQixDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQztZQUMvRSxPQUFNLE1BQU0sWUFBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLE9BQU8sRUFBRSxFQUFFLE9BQU8sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxFQUFFO1lBR3RFLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLFVBQVUsQ0FBQyxDQUFDO1lBRXZFLElBQUksSUFBSSxHQUFXLE1BQU0sQ0FBQyxRQUFRLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDaEQsSUFBSSxJQUFJLEdBQVcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDckQsSUFBSSxHQUFHLElBQUksR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7WUFDN0IsSUFBSSxJQUFJLEdBQUcsQ0FBQyxFQUFFO2dCQUNaLElBQUksRUFBRSxDQUFDO2dCQUNQLElBQUksR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO2FBQ2pDO1lBR0QsSUFBSSxPQUFPLEdBQVUsSUFBSSxDQUFDLHFCQUFxQixDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQztZQUMvRSxPQUFNLE1BQU0sWUFBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLE9BQU8sRUFBRSxFQUFFLE9BQU8sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxFQUFFO1lBR3RFLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1lBR25FLElBQUksSUFBSSxNQUFNLENBQUMsUUFBUSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBR3JDLE1BQU0sQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ2pDLE1BQU0sT0FBTyxDQUFDLHlCQUF5QixDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQztZQUNyRixNQUFNLE9BQU8sQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUU5QixNQUFNLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNqQyxNQUFNLE9BQU8sQ0FBQyx5QkFBeUIsQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDckYsTUFBTSxPQUFPLENBQUMsYUFBYSxFQUFFLENBQUM7WUFFOUIsTUFBTSxDQUFDLElBQUksR0FBRyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUM7WUFDdkMsTUFBTSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7UUFDeEIsQ0FBQztLQUFBO0lBR2EsYUFBYSxDQUFDLE1BQWMsRUFBRSxRQUFnQixFQUFFLFFBQWdCLEVBQUUsUUFBZ0IsRUFBRSxRQUFnQixFQUFFLFVBQWtCLEVBQUUsVUFBa0I7O1lBRXhKLElBQUksTUFBTSxHQUFXLElBQUksTUFBTSxFQUFFLENBQUM7WUFDbEMsTUFBTSxDQUFDLFFBQVEsR0FBRyxJQUFJLFFBQVEsRUFBRSxDQUFDO1lBQ2pDLE1BQU0sQ0FBQyxJQUFJLEdBQUcsZ0JBQWdCLENBQUMsT0FBTyxDQUFDO1lBQ3ZDLElBQUksTUFBTSxHQUFXLE1BQU0sQ0FBQztZQUc1QixJQUFJLFVBQVUsQ0FBQyxRQUFRLEtBQUssSUFBSSxJQUFJLFVBQVUsQ0FBQyxRQUFRLEtBQUssSUFBSSxFQUFFO2dCQUNoRSxNQUFNLENBQUMsSUFBSSxHQUFHLGdCQUFnQixDQUFDLE9BQU8sQ0FBQztnQkFDdkMsTUFBTSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7Z0JBQ3ZCLE9BQU87YUFDUjtZQUdELElBQUksT0FBTyxHQUFXLFFBQVEsQ0FBQyxRQUFRLENBQUMsVUFBVSxFQUFFLEdBQUcsUUFBUSxDQUFDLFFBQVEsQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUN0RixJQUFJLE9BQU8sR0FBVyxRQUFRLENBQUMsUUFBUSxDQUFDLFVBQVUsRUFBRSxHQUFHLFFBQVEsQ0FBQyxRQUFRLENBQUMsVUFBVSxFQUFFLENBQUM7WUFFdEYsSUFBSSxDQUFDLE9BQU8sR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQyxFQUFFO2dCQUN4RCxPQUFPLEVBQUUsQ0FBQztnQkFDVixPQUFPLEdBQUcsS0FBSyxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQzthQUM5QjtZQUdELElBQUksT0FBTyxHQUFVLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUM7WUFDbEYsSUFBSSxPQUFPLEdBQVUsSUFBSSxDQUFDLHFCQUFxQixDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQztZQUdsRixNQUFNLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUNwQyxNQUFNLE9BQU8sQ0FBQyx5QkFBeUIsQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDckYsTUFBTSxPQUFPLENBQUMsYUFBYSxFQUFFLENBQUM7WUFFOUIsTUFBTSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDcEMsTUFBTSxPQUFPLENBQUMseUJBQXlCLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQ3JGLE1BQU0sT0FBTyxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBRTlCLE1BQU0sQ0FBQyxJQUFJLEdBQUcsZ0JBQWdCLENBQUMsT0FBTyxDQUFDO1lBQ3ZDLE1BQU0sQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO1FBQ3hCLENBQUM7S0FBQTtJQUdPLFlBQVksQ0FBQyxNQUFjLEVBQUUsSUFBWSxFQUFFLGdCQUFrQztRQUNuRixJQUFJLElBQUksQ0FBQyxRQUFRLEtBQUssSUFBSSxFQUFFO1lBQzFCLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ2hELE9BQU87U0FDUjtRQUNELElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUNsRCxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLGdCQUFnQixDQUFDLENBQUM7SUFDN0QsQ0FBQztJQUdPLGNBQWMsQ0FBQyxNQUFjLEVBQUUsSUFBWSxFQUFFLGdCQUFrQztRQUVyRixJQUFJLElBQUksQ0FBQyxRQUFRLElBQUksSUFBSSxFQUFFO1lBQ3pCLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ2hELE9BQU87U0FDUjtRQUNELElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3JELElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztJQUMvRCxDQUFDO0lBS00sT0FBTyxDQUFDLEdBQWEsRUFBRSxHQUFXLEVBQUUsR0FBVztRQUNwRCxJQUFJLEdBQUcsR0FBRyxJQUFJLFFBQVEsRUFBRSxDQUFDO1FBRXpCLElBQUksR0FBRyxLQUFLLElBQUk7WUFDZCxPQUFPLElBQUksQ0FBQztRQUVkLElBQUksR0FBRyxLQUFLLENBQUMsRUFBRTtZQUNiLEdBQUcsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDcEIsR0FBRyxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1NBQzlCO1FBQ0QsSUFBSSxHQUFHLEtBQUssQ0FBQyxFQUFFO1lBQ2IsR0FBRyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNwQixHQUFHLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7U0FDOUI7UUFDRCxPQUFPLEdBQUcsQ0FBQztJQUNiLENBQUM7SUFFTyxZQUFZLENBQUMsTUFBYyxFQUFFLElBQWMsRUFBRSxnQkFBa0M7UUFDckYsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsYUFBYSxFQUFFLGdCQUFnQixDQUFDLENBQUM7SUFDdkUsQ0FBQztJQUVPLGNBQWMsQ0FBQyxNQUFjLEVBQUUsSUFBYyxFQUFFLGdCQUFrQztRQUN2RixJQUFJLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxhQUFhLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztJQUN2RSxDQUFDO0lBRU0sZ0JBQWdCLENBQUMsTUFBYyxFQUFFLElBQWMsRUFBRSxNQUFjLEVBQUUsZ0JBQWtDO1FBQ3hHLE1BQU0sQ0FBQyxJQUFJLEdBQUcsZ0JBQWdCLENBQUMsS0FBSyxDQUFDO1FBQ3JDLElBQUksSUFBSSxLQUFLLElBQUksRUFBRTtZQUNqQixLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUM5QyxPQUFPO1NBQ1I7UUFDRCxJQUFJLEdBQUcsR0FBVyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDckMsTUFBTSxDQUFDLE1BQU0sR0FBRyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUM7SUFDbkcsQ0FBQztJQUtPLGFBQWEsQ0FBQyxJQUFZO0lBQ2xDLENBQUM7SUFHTyxZQUFZLENBQUMsTUFBYztRQUNqQyxJQUFJLENBQUMsR0FBVyxDQUFDLENBQUM7UUFDbEIsSUFBSSxRQUFRLEdBQVcsV0FBVyxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDO1FBQ25GLElBQUksUUFBUSxHQUFHLENBQUMsRUFBRTtZQUNoQixJQUFJLGFBQWEsR0FBVyxJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQztZQUV6RCxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsYUFBYSxHQUFHLGtCQUFrQixDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxRQUFRLENBQUMsQ0FBQztTQUM1RztRQUNELE1BQU0sQ0FBQyxRQUFRLEdBQUcsSUFBSSxRQUFRLEVBQUUsQ0FBQztRQUNqQyxNQUFNLENBQUMsSUFBSSxHQUFHLGdCQUFnQixDQUFDLE9BQU8sQ0FBQztRQUN2QyxNQUFNLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxDQUFDLEdBQUcsUUFBUSxHQUFHLEVBQUUsQ0FBQyxDQUFDO0lBQ2hELENBQUM7SUFFTyxlQUFlLENBQUMsTUFBYyxFQUFFLElBQVksRUFBRSxJQUFZLEVBQUUsSUFBWSxFQUFFLElBQVk7UUFDNUYsSUFBSSxLQUFhLENBQUM7UUFDbEIsSUFBSSxJQUFJLENBQUMsUUFBUSxLQUFLLElBQUksSUFBSSxJQUFJLENBQUMsUUFBUSxLQUFLLElBQUksSUFBSSxJQUFJLENBQUMsUUFBUSxLQUFLLElBQUksSUFBSSxJQUFJLENBQUMsUUFBUSxLQUFLLElBQUksRUFBRTtZQUN4RyxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUM3QyxPQUFPO1NBQ1I7UUFDRCxJQUFJLElBQUksR0FBVyxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBSTlDLElBQUksV0FBVyxHQUFvQixnQkFBZ0IsQ0FBQyxRQUFRLENBQUMscUJBQXFCLEVBQUUsQ0FBQztRQUNyRixnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsbUJBQW1CLENBQUMsV0FBVyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDO1FBQ25HLElBQUksSUFBSSxHQUFXLFdBQVcsQ0FBQyxJQUFJLENBQUM7UUFDcEMsSUFBSSxLQUFLLEdBQVcsV0FBVyxDQUFDLEtBQUssQ0FBQztRQUN0QyxJQUFJLEdBQUcsR0FBVyxXQUFXLENBQUMsR0FBRyxDQUFDO1FBR2xDLElBQUksV0FBVyxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLEVBQUUsQ0FBQyxLQUFLLEdBQUc7WUFDckUsSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLFlBQVksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUM1RCxJQUFJLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUNuQyxLQUFLLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUNwQyxJQUFJLElBQUksR0FBVyxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQzlDLElBQUksT0FBTyxHQUFXLENBQUMsR0FBRyxLQUFLLENBQUMsSUFBSSxJQUFJLEtBQUssQ0FBQyxJQUFJLEtBQUssS0FBSyxDQUFDLElBQUksSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNyRixJQUFJLE1BQU0sR0FBVyxLQUFLLEdBQUcsSUFBSSxHQUFHLEVBQUUsQ0FBQztRQUN2QyxJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztRQUNyQyxLQUFLLEdBQUcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUM5QixLQUFLLEtBQUssR0FBRyxDQUFDLEVBQUUsS0FBSyxHQUFHLENBQUMsRUFBRSxLQUFLLEVBQUUsRUFBRTtZQUNsQyxJQUFJLEdBQUcsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLGVBQWUsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLEdBQUcsR0FBRyxPQUFPLEVBQUUsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQ3ZGLElBQUksSUFBSSxHQUFHLFVBQVU7Z0JBQ25CLE1BQU07WUFDUixHQUFHLEVBQUUsQ0FBQztTQUNQO1FBS0QsSUFBSSxJQUFJLEtBQUssVUFBVTtZQUNyQixJQUFJLEdBQUcsQ0FBQyxDQUFDO2FBQ047WUFDSCxJQUFJLElBQUksSUFBSSxHQUFHLE9BQU8sQ0FBQztZQUN2QixJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7U0FDMUI7UUFDRCxLQUFLLENBQUMsaUJBQWlCLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMvRCxDQUFDO0lBR08sZUFBZSxDQUFDLE1BQWMsRUFBRSxJQUFZLEVBQUUsSUFBWSxFQUFFLElBQVksRUFBRSxJQUFZO1FBQzVGLElBQUksSUFBSSxDQUFDLFFBQVEsS0FBSyxJQUFJLElBQUksSUFBSSxDQUFDLFFBQVEsS0FBSyxJQUFJLElBQUksSUFBSSxDQUFDLFFBQVEsS0FBSyxJQUFJLElBQUksSUFBSSxDQUFDLFFBQVEsS0FBSyxJQUFJLEVBQUU7WUFDeEcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDN0MsT0FBTztTQUNSO1FBQ0QsSUFBSSxJQUFJLEdBQVcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLEVBQUUsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsRUFBRSxHQUFHLElBQUksR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsRUFBRSxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQ2xKLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFDO0lBQy9ELENBQUM7SUFFTyxXQUFXLENBQUMsTUFBYyxFQUFFLElBQVk7UUFDOUMsSUFBSSxXQUE0QixDQUFDO1FBQ2pDLElBQUksSUFBSSxDQUFDLFFBQVEsSUFBSSxJQUFJLEVBQUU7WUFDekIsS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDN0MsT0FBTztTQUNSO1FBQ0QsSUFBSSxJQUFJLEdBQVcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUMvQyxJQUFJLElBQUksS0FBSyxDQUFDLEVBQUU7WUFDZCxXQUFXLEdBQUcsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLHFCQUFxQixFQUFFLENBQUM7WUFDaEUsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLG1CQUFtQixDQUFDLFdBQVcsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQztZQUNuRyxJQUFJLEdBQUcsR0FBVyxXQUFXLENBQUMsR0FBRyxDQUFDO1lBQ2xDLElBQUksSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQztTQUNuQjtRQUNELEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFDO0lBQy9ELENBQUM7SUFFTyxXQUFXLENBQUMsTUFBYyxFQUFFLElBQVk7UUFDOUMsSUFBSSxXQUE0QixDQUFDO1FBQ2pDLElBQUksSUFBSSxDQUFDLFFBQVEsS0FBSyxJQUFJLEVBQUU7WUFDMUIsS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDN0MsT0FBTztTQUNSO1FBQ0QsSUFBSSxJQUFJLEdBQVcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUMvQyxJQUFJLElBQUksS0FBSyxDQUFDLEVBQUU7WUFDZCxXQUFXLEdBQUcsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLHFCQUFxQixFQUFFLENBQUM7WUFDaEUsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLG1CQUFtQixDQUFDLFdBQVcsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQztZQUNuRyxJQUFJLElBQUksR0FBVyxXQUFXLENBQUMsSUFBSSxDQUFDO1lBQ3BDLElBQUksR0FBRyxHQUFXLENBQUMsQ0FBQztZQUNwQixJQUFJLEtBQUssR0FBVyxDQUFDLENBQUM7WUFDdEIsSUFBSSxXQUFXLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsRUFBRSxDQUFDLEtBQUssR0FBRztnQkFDckUsSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLFlBQVksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUM1RCxJQUFJLEdBQUcsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLGVBQWUsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7U0FDOUU7UUFDRCxLQUFLLENBQUMsaUJBQWlCLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMvRCxDQUFDO0lBRU8sV0FBVyxDQUFDLE1BQWMsRUFBRSxJQUFZO1FBQzlDLElBQUksV0FBNEIsQ0FBQztRQUNqQyxJQUFJLElBQUksQ0FBQyxRQUFRLEtBQUssSUFBSSxFQUFFO1lBQzFCLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFDO1lBQzdDLE9BQU87U0FDUjtRQUNELElBQUksSUFBSSxHQUFXLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDL0MsSUFBSSxJQUFJLEtBQUssQ0FBQyxFQUFFO1lBQ2QsV0FBVyxHQUFHLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1lBQ2hFLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxtQkFBbUIsQ0FBQyxXQUFXLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUM7WUFDbkcsSUFBSSxJQUFJLEdBQVcsV0FBVyxDQUFDLElBQUksQ0FBQztZQUNwQyxJQUFJLEtBQUssR0FBVyxXQUFXLENBQUMsS0FBSyxDQUFDO1lBQ3RDLElBQUksR0FBRyxHQUFXLEVBQUUsQ0FBQztZQUNyQixJQUFJLFdBQVcsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxFQUFFLENBQUMsS0FBSyxHQUFHO2dCQUNyRSxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEdBQUcsWUFBWSxDQUFDLGlCQUFpQixFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQzVELElBQUksS0FBYSxDQUFDO1lBQ2xCLEtBQUssS0FBSyxHQUFHLENBQUMsRUFBRSxLQUFLLEdBQUcsQ0FBQyxFQUFFLEtBQUssRUFBRSxFQUFFO2dCQUNsQyxJQUFJLEdBQUcsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLGVBQWUsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7Z0JBQzdFLElBQUksSUFBSSxHQUFHLFVBQVU7b0JBQ25CLE1BQU07Z0JBQ1IsR0FBRyxFQUFFLENBQUM7YUFDUDtTQUNGO1FBQ0QsS0FBSyxDQUFDLGlCQUFpQixDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDL0QsQ0FBQztJQUVPLFdBQVcsQ0FBQyxNQUFjLEVBQUUsSUFBWTtRQUM5QyxJQUFJLElBQUksQ0FBQyxRQUFRLEtBQUssSUFBSSxFQUFFO1lBQzFCLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFDO1lBQzdDLE9BQU87U0FDUjtRQUNELElBQUksSUFBSSxHQUFXLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDL0MsSUFBSSxJQUFJLEtBQUssQ0FBQyxFQUFFO1lBQ2QsSUFBSSxXQUFXLEdBQW9CLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1lBQ3JGLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxtQkFBbUIsQ0FBQyxXQUFXLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUM7WUFDbkcsSUFBSSxJQUFJLEdBQVcsV0FBVyxDQUFDLElBQUksQ0FBQztZQUNwQyxJQUFJLEtBQUssR0FBVyxFQUFFLENBQUM7WUFDdkIsSUFBSSxHQUFHLEdBQVcsRUFBRSxDQUFDO1lBQ3JCLElBQUksV0FBVyxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLEVBQUUsQ0FBQyxLQUFLLEdBQUc7Z0JBQ3JFLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksR0FBRyxZQUFZLENBQUMsaUJBQWlCLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDNUQsSUFBSSxHQUFHLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxlQUFlLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO1NBQzlFO1FBQ0QsS0FBSyxDQUFDLGlCQUFpQixDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDL0QsQ0FBQztJQUVPLGNBQWMsQ0FBQyxNQUFjLEVBQUUsSUFBWSxFQUFFLElBQVksRUFBRSxJQUFZO1FBQzdFLElBQUksS0FBb0IsQ0FBQztRQUN6QixJQUFJLE9BQWUsQ0FBQztRQUNwQixJQUFJLEdBQVcsQ0FBQztRQUNoQixJQUFJLEtBQWEsQ0FBQztRQUNsQixJQUFJLE9BQU8sR0FBVyxFQUFFLENBQUM7UUFDekIsSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLElBQUksSUFBSSxJQUFJLENBQUMsUUFBUSxLQUFLLElBQUksSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLElBQUksRUFBRTtZQUMxRSxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsQ0FBQztTQUNqRDtRQUNELElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDakUsS0FBSyxHQUFHLElBQUksYUFBYSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQ2xELEdBQUcsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ2pDLElBQUksR0FBRyxHQUFHLENBQUMsRUFBRTtnQkFDWCxLQUFLLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztnQkFDeEQsS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQzFCLElBQUksS0FBSyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7b0JBQ3RCLElBQUksR0FBRyxLQUFLLENBQUM7d0JBQ1gsT0FBTyxHQUFHLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQztpQkFDOUI7cUJBQU07b0JBQ0wsT0FBTyxHQUFHLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQztvQkFDM0IsSUFBSSxDQUFTLENBQUM7b0JBQ2QsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUU7d0JBQ3hCLE9BQU8sR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQzt3QkFDekMsSUFBSSxPQUFPLEtBQUssSUFBSSxFQUFFOzRCQUNwQixJQUFJLENBQUMsS0FBSyxHQUFHLEdBQUcsQ0FBQztnQ0FDZixPQUFPLEdBQUcsT0FBTyxDQUFDOzRCQUNwQixNQUFNO3lCQUNQO3dCQUNELE9BQU8sR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxPQUFPLENBQUMsTUFBTSxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQzt3QkFDN0QsT0FBTyxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7cUJBQ3pEO2lCQUNGO2FBQ0Y7U0FDRjtRQUNELElBQUksT0FBTyxLQUFLLElBQUksRUFBRTtZQUNwQixNQUFNLENBQUMsSUFBSSxHQUFHLGdCQUFnQixDQUFDLE9BQU8sQ0FBQztZQUN2QyxNQUFNLENBQUMsTUFBTSxHQUFHLE9BQU8sQ0FBQztTQUN6QjthQUFNO1lBQ0wsTUFBTSxDQUFDLElBQUksR0FBRyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUM7WUFDdkMsTUFBTSxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUM7U0FDcEI7UUFDRCxHQUFHLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUNqQyxJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEtBQUssQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDLEVBQUU7WUFDaEYsTUFBTSxDQUFDLElBQUksR0FBRyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUM7WUFDdkMsTUFBTSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO1NBQzdCO0lBQ0gsQ0FBQztJQUVPLGVBQWUsQ0FBQyxNQUFjLEVBQUUsSUFBWSxFQUFFLElBQVk7UUFDaEUsSUFBSSxJQUFJLENBQUMsUUFBUSxLQUFLLElBQUksSUFBSSxJQUFJLENBQUMsUUFBUSxLQUFLLElBQUksRUFBRTtZQUNwRCxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUNoRCxPQUFPO1NBQ1I7UUFDRCxNQUFNLENBQUMsUUFBUSxHQUFHLElBQUksUUFBUSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUM5QyxJQUFJLEtBQUssR0FBVyxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQy9DLElBQUksS0FBSyxHQUFHLENBQUM7WUFDWCxNQUFNLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDOztZQUM3QixNQUFNLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNsQyxNQUFNLENBQUMsSUFBSSxHQUFHLGdCQUFnQixDQUFDLE9BQU8sQ0FBQztJQUN6QyxDQUFDO0lBRU8sY0FBYyxDQUFDLE1BQWMsRUFBRSxJQUFZLEVBQUUsSUFBWTtRQUMvRCxJQUFJLEdBQVUsQ0FBQztRQUNmLElBQUksSUFBZSxDQUFDO1FBR3BCLElBQUksSUFBSSxDQUFDLFFBQVEsS0FBSyxJQUFJLEVBQUU7WUFDMUIsS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDaEQsT0FBTztTQUNSO1FBRUQsSUFBSSxJQUFJLENBQUMsUUFBUSxLQUFLLElBQUksRUFBRTtZQUMxQixLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUNoRCxPQUFPO1NBQ1I7UUFFRCxJQUFJLElBQUksR0FBVyxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQzlDLElBQUksR0FBRyxHQUFXLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDN0MsTUFBTSxDQUFDLElBQUksR0FBRyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUM7UUFFdkMsSUFBSTtZQUNGLEdBQUcsR0FBRyxJQUFJLENBQUMscUJBQXFCLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDdkM7UUFBQyxPQUFPLEVBQUUsRUFBRTtZQUNYLElBQUksRUFBRSxZQUFZLFNBQVMsRUFBRTtnQkFDM0IsTUFBTSxDQUFDLFFBQVEsQ0FBQyxtQkFBbUIsQ0FBQyxFQUFFLENBQUMsQ0FBQztnQkFFeEMsR0FBRyxHQUFHLElBQUksQ0FBQzthQUNaOztnQkFDQyxNQUFNLEVBQUUsQ0FBQztTQUNaO1FBRUQsSUFBSSxHQUFHLEtBQUssSUFBSSxFQUFFO1lBRWhCLE1BQU0sQ0FBQyxRQUFRLENBQUMsMEJBQTBCLENBQUMsZ0VBQWdFLEdBQUcsR0FBRyxDQUFDLENBQUM7WUFDbkgsTUFBTSxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUM7WUFDbkIsT0FBTztTQUNSO1FBQ0QsSUFBSSxJQUFJLEtBQUssQ0FBQyxFQUFFO1lBRWQsSUFBSSxHQUFHLEdBQUcsQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUVyQixJQUFJLElBQUksS0FBSyxJQUFJLEVBQUU7Z0JBR2pCLE1BQU0sQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLFNBQVMsRUFBRSxDQUFDO2dCQUMxQyxPQUFPO2FBQ1I7U0FDRjtRQUNELElBQUksR0FBRyxDQUFDLE9BQU8sRUFBRSxLQUFLLGdCQUFnQixDQUFDLElBQUksSUFBSSxHQUFHLENBQUMsT0FBTyxFQUFFLEtBQUssZ0JBQWdCLENBQUMsV0FBVyxFQUFFO1lBQzdGLE1BQU0sQ0FBQyxNQUFNLEdBQUcsR0FBRyxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ2pDLE9BQU87U0FDUjtRQUNELE1BQU0sQ0FBQyxNQUFNLEdBQUcsRUFBRSxDQUFDO1FBQ25CLE9BQU87SUFDVCxDQUFDO0lBR08sZUFBZSxDQUFDLE1BQWMsRUFBRSxJQUFZO1FBQ2xELElBQUksR0FBVSxDQUFDO1FBQ2YsTUFBTSxDQUFDLElBQUksR0FBRyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUM7UUFDckMsSUFBSSxJQUFJLENBQUMsUUFBUSxLQUFLLElBQUksRUFBRTtZQUMxQixLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUM5QyxPQUFPO1NBQ1I7UUFDRCxJQUFJLEdBQUcsR0FBVyxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQzdDLElBQUk7WUFDRixHQUFHLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQ3ZDO1FBQUMsT0FBTyxFQUFFLEVBQUU7WUFDWCxJQUFJLEVBQUUsWUFBWSxTQUFTLEVBQUU7Z0JBQzNCLE1BQU0sQ0FBQyxRQUFRLENBQUMsbUJBQW1CLENBQUMsRUFBRSxDQUFDLENBQUM7Z0JBQ3hDLEdBQUcsR0FBRyxJQUFJLENBQUM7YUFDWjs7Z0JBQ0MsTUFBTSxFQUFFLENBQUM7U0FDWjtRQUVELElBQUksR0FBRyxLQUFLLElBQUksRUFBRTtZQUNoQixNQUFNLENBQUMsUUFBUSxDQUFDLDBCQUEwQixDQUFDLGlFQUFpRSxHQUFHLEdBQUcsQ0FBQyxDQUFDO1lBQ3BILE1BQU0sQ0FBQyxNQUFNLEdBQUcsRUFBRSxDQUFDO1lBQ25CLE9BQU87U0FDUjtRQUNELElBQUksSUFBSSxHQUFxQixHQUFHLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDM0MsTUFBTSxDQUFDLE1BQU0sR0FBRyxFQUFFLEdBQUcsbUJBQW1CLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDbEUsQ0FBQztJQUdPLGdCQUFnQixDQUFDLFFBQTBCLEVBQUUsTUFBYyxFQUFFLFNBQWlCO1FBQ3BGLElBQUksR0FBRyxHQUFXLEVBQUUsQ0FBQztRQUNyQixJQUFJLE9BQU8sR0FBVyxDQUFDLENBQUM7UUFFeEIsU0FBUyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7UUFJeEIsSUFBSSxNQUFNLEtBQUssbUJBQW1CLENBQUMsV0FBVyxFQUFFO1lBQzlDLFNBQVMsQ0FBQyxJQUFJLEdBQUcsUUFBUSxDQUFDO1lBQzFCLElBQUksUUFBUSxLQUFLLGdCQUFnQixDQUFDLEtBQUs7Z0JBQ3JDLEdBQUcsR0FBRyxFQUFFLENBQUM7WUFFWCxRQUFRLFFBQVEsRUFBRTtnQkFDaEIsS0FBSyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUM7Z0JBQzVCLEtBQUssZ0JBQWdCLENBQUMsSUFBSSxDQUFDO2dCQUMzQixLQUFLLGdCQUFnQixDQUFDLFdBQVcsQ0FBQztnQkFDbEMsS0FBSyxnQkFBZ0IsQ0FBQyxJQUFJO29CQUN4QixNQUFNLEdBQUcsbUJBQW1CLENBQUMsYUFBYSxDQUFDO29CQUMzQyxNQUFNO2dCQUVSLEtBQUssZ0JBQWdCLENBQUMsT0FBTztvQkFDM0IsTUFBTSxHQUFHLG1CQUFtQixDQUFDLGFBQWEsQ0FBQztvQkFDM0MsTUFBTTtnQkFFUixLQUFLLGdCQUFnQixDQUFDLE9BQU87b0JBQzNCLE1BQU0sR0FBRyxtQkFBbUIsQ0FBQyxhQUFhLENBQUM7b0JBQzNDLE1BQU07Z0JBRVIsS0FBSyxnQkFBZ0IsQ0FBQyxJQUFJO29CQUN4QixNQUFNLEdBQUcsbUJBQW1CLENBQUMsYUFBYSxDQUFDO29CQUMzQyxNQUFNO2dCQUVSLEtBQUssZ0JBQWdCLENBQUMsSUFBSTtvQkFDeEIsTUFBTSxHQUFHLG1CQUFtQixDQUFDLGFBQWEsQ0FBQztvQkFDM0MsTUFBTTtnQkFFUixLQUFLLGdCQUFnQixDQUFDLE9BQU87b0JBQzNCLE1BQU0sR0FBRyxtQkFBbUIsQ0FBQyxhQUFhLENBQUM7b0JBQzNDLE1BQU07YUFDVDtTQUNGO1FBRUQsUUFBUSxNQUFNLEVBQUU7WUFDZCxLQUFLLG1CQUFtQixDQUFDLFdBQVcsQ0FBQztZQUNyQyxLQUFLLG1CQUFtQixDQUFDLGFBQWE7Z0JBQ3BDLElBQUksUUFBUSxLQUFLLGdCQUFnQixDQUFDLElBQUk7b0JBQ3BDLFFBQVEsS0FBSyxnQkFBZ0IsQ0FBQyxXQUFXO29CQUN6QyxTQUFTLENBQUMsSUFBSSxHQUFHLGdCQUFnQixDQUFDLEtBQUssQ0FBQztnQkFDMUMsR0FBRyxHQUFHLEVBQUUsQ0FBQztnQkFDVCxNQUFNO1lBRVIsS0FBSyxtQkFBbUIsQ0FBQyxhQUFhO2dCQUNwQyxTQUFTLENBQUMsSUFBSSxHQUFHLGdCQUFnQixDQUFDLE9BQU8sQ0FBQztnQkFDMUMsTUFBTTtZQUVSLEtBQUssbUJBQW1CLENBQUMsYUFBYTtnQkFDcEMsU0FBUyxDQUFDLElBQUksR0FBRyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUM7Z0JBQzFDLE9BQU8sR0FBRyxDQUFDLENBQUM7Z0JBQ1osTUFBTTtZQUVSLEtBQUssbUJBQW1CLENBQUMsYUFBYTtnQkFDcEMsU0FBUyxDQUFDLElBQUksR0FBRyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUM7Z0JBQ3ZDLE9BQU8sR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxZQUFZLENBQUMsQ0FBQztnQkFDbkQsTUFBTTtZQUVSLEtBQUssbUJBQW1CLENBQUMsYUFBYTtnQkFDcEMsU0FBUyxDQUFDLElBQUksR0FBRyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUM7Z0JBQ3ZDLE9BQU8sR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxZQUFZLENBQUMsQ0FBQztnQkFDbkQsTUFBTTtZQUVSLEtBQUssbUJBQW1CLENBQUMsYUFBYTtnQkFDcEMsSUFBSSxRQUFRLEtBQUssZ0JBQWdCLENBQUMsSUFBSTtvQkFDcEMsUUFBUSxLQUFLLGdCQUFnQixDQUFDLFdBQVc7b0JBQ3pDLFNBQVMsQ0FBQyxJQUFJLEdBQUcsZ0JBQWdCLENBQUMsT0FBTyxDQUFDO2dCQUM1QyxHQUFHLEdBQUcsRUFBRSxDQUFDO2dCQUNULE1BQU07WUFDUixLQUFLLG1CQUFtQixDQUFDLGFBQWE7Z0JBQ3BDLFNBQVMsQ0FBQyxJQUFJLEdBQUcsZ0JBQWdCLENBQUMsSUFBSSxDQUFDO2dCQUN2QyxNQUFNO1NBQ1Q7UUFFRCxRQUFRLFNBQVMsQ0FBQyxJQUFJLEVBQUU7WUFDdEIsS0FBSyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUM7WUFDNUIsS0FBSyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUM7WUFDM0IsS0FBSyxnQkFBZ0IsQ0FBQyxXQUFXO2dCQUMvQixTQUFTLENBQUMsTUFBTSxHQUFHLEdBQUcsQ0FBQztnQkFDdkIsTUFBTTtZQUVSLEtBQUssZ0JBQWdCLENBQUMsT0FBTyxDQUFDO1lBQzlCLEtBQUssZ0JBQWdCLENBQUMsSUFBSSxDQUFDO1lBQzNCLEtBQUssZ0JBQWdCLENBQUMsSUFBSTtnQkFDeEIsSUFBSSxNQUFNLEtBQUssbUJBQW1CLENBQUMsYUFBYSxFQUFFO29CQUVoRCxJQUFJLFNBQVMsR0FBRyxJQUFJLFNBQVMsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUM7b0JBQ2pELEtBQUssSUFBSSxDQUFDLEdBQVcsQ0FBQyxFQUFFLENBQUMsR0FBRyxTQUFTLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRTt3QkFDL0MsU0FBUyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztvQkFDbkIsU0FBUyxDQUFDLFFBQVEsR0FBRyxJQUFJLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQztpQkFDOUM7O29CQUdDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxTQUFTLEVBQUUsT0FBTyxFQUFFLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDN0QsTUFBTTtZQUVSLEtBQUssZ0JBQWdCLENBQUMsT0FBTztnQkFDM0IsU0FBUyxDQUFDLE1BQU0sR0FBRyxHQUFHLENBQUM7Z0JBQ3ZCLE1BQU07WUFFUixLQUFLLGdCQUFnQixDQUFDLE9BQU87Z0JBQzNCLFNBQVMsQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO2dCQUMxQixNQUFNO1NBRVQ7SUFDSCxDQUFDO0lBSU8sV0FBVyxDQUFDLFlBQW9CLEVBQUUsWUFBb0IsRUFBRSxXQUFxQjtRQUNuRixJQUFJLENBQUMsaUJBQWlCLENBQUMsV0FBVyxDQUFDO1lBQ2pDLElBQUksQ0FBQyxhQUFhLENBQUMsWUFBWSxFQUFFLFlBQVksRUFBRSxXQUFXLENBQUMsQ0FBQzs7WUFFNUQsSUFBSSxDQUFDLGFBQWEsQ0FBQyxZQUFZLEVBQUUsWUFBWSxDQUFDLENBQUM7SUFDbkQsQ0FBQztJQUVPLGFBQWEsQ0FBQyxNQUFjLEVBQUUsSUFBWSxFQUFFLFdBQW9CO1FBQ3RFLElBQUksR0FBRyxHQUFVLElBQUksQ0FBQztRQUd0QixJQUFJLElBQUksQ0FBQyxRQUFRLEtBQUssSUFBSSxFQUFFO1lBQzFCLElBQUksR0FBRyxHQUFXLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDN0MsR0FBRyxHQUFHLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxHQUFHLENBQUMsQ0FBQztTQUN2QztRQUdELElBQUksR0FBRyxLQUFLLElBQUksRUFBRTtZQUNoQixLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUM3QyxPQUFPO1NBQ1I7UUFHRCxJQUFJLEdBQUcsQ0FBQyxpQkFBaUIsS0FBSyxLQUFLLEVBQUU7WUFDbkMsSUFBSSxFQUFFLEdBQWtCLElBQUksYUFBYSxFQUFFLENBQUM7WUFDNUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLG1EQUFtRCxFQUFFLEdBQUcsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDakcsS0FBSyxDQUFDLEVBQUUsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO1lBQ3JCLE1BQU0sQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO1lBQ3JCLE9BQU87U0FDUjtRQUVELElBQUksV0FBVztZQUVGLEdBQUcsQ0FBQyxPQUFPLEVBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUduRCxLQUFLLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsT0FBTyxFQUFFLEVBQUUsR0FBRyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUc5RCxJQUFJLFdBQVcsRUFBRTtZQUVmLElBQUksR0FBRyxDQUFDLG1CQUFtQixFQUFFO2dCQUUzQixLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUNoRDs7WUFJQyxNQUFNLENBQUMsTUFBTSxHQUFHLEdBQUcsQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUUvQixJQUFJLFdBQVc7WUFFRixHQUFHLENBQUMsT0FBTyxFQUFHLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDdEQsQ0FBQztJQU9PLGNBQWMsQ0FBQyxNQUFjLEVBQUUsSUFBWTtRQUNqRCxJQUFJLElBQUksQ0FBQyxRQUFRLEtBQUssSUFBSSxFQUFFO1lBQzFCLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ2hELE9BQU87U0FDUjtRQUNELElBQUksR0FBRyxHQUFXLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDN0MsSUFBSSxHQUFHLEdBQVUsSUFBSSxDQUFDLHFCQUFxQixDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBRWpELE1BQU0sQ0FBQyxJQUFJLEdBQUcsZ0JBQWdCLENBQUMsT0FBTyxDQUFDO1FBQ3ZDLE1BQU0sQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO1FBR3ZCLElBQUksR0FBRyxLQUFLLElBQUksRUFBRTtZQUNoQixJQUFJLEdBQUcsR0FBVyxHQUFHLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDOUIsSUFBSSxFQUFFLEdBQWtDLEdBQUcsQ0FBQyxPQUFPLEVBQUcsQ0FBQyxRQUFRLENBQUM7WUFDaEUsSUFBSSxHQUFHLEdBQVcsRUFBRSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ2xDLE1BQU0sQ0FBQyxPQUFPLEdBQUcsQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQyxjQUFjLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQztTQUM5RDtJQUNILENBQUM7SUFFTyxjQUFjLENBQUMsTUFBYyxFQUFFLElBQVk7UUFDakQsSUFBSSxDQUFDLEdBQVcsQ0FBQyxDQUFDO1FBRWxCLElBQUksSUFBSSxDQUFDLFFBQVEsS0FBSyxJQUFJLEVBQUU7WUFDMUIsS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDaEQsT0FBTztTQUNSO1FBRUQsSUFBSSxjQUFjLEdBQVcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUN4RCxJQUFJLENBQUMsY0FBYyxJQUFJLENBQUMsSUFBSSxjQUFjLEdBQUcsQ0FBWSxJQUFJLENBQUMsT0FBUSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksY0FBYyxLQUFLLG1CQUFtQixDQUFDLFlBQVksRUFBRTtZQUNuSixJQUFJLEdBQUcsR0FBd0IsS0FBSyxDQUFDLGNBQWMsQ0FBQyxjQUFjLENBQUMsQ0FBQztZQUNwRSxJQUFJLEdBQUcsS0FBSyxJQUFJO2dCQUNkLENBQUMsR0FBRyxHQUFHLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxlQUFlLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztTQUM5RDtRQUNELEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQy9ELENBQUM7SUFFTyxlQUFlLENBQUMsTUFBYyxFQUFFLElBQVk7UUFDbEQsSUFBSSxJQUFJLENBQUMsUUFBUSxLQUFLLElBQUksRUFBRTtZQUMxQixLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUM5QyxPQUFPO1NBQ1I7UUFFRCxJQUFJLEdBQUcsR0FBVyxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQzdDLElBQUksR0FBRyxHQUFVLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNqRCxJQUFJLE1BQU0sR0FBVyxDQUFDLEdBQUcsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDekQsTUFBTSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7UUFDdkIsTUFBTSxDQUFDLElBQUksR0FBRyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUM7SUFDdkMsQ0FBQztJQUdPLHNCQUFzQixDQUFDLE1BQWMsRUFBRSxJQUFZO1FBQ3pELE1BQU0sQ0FBQyxJQUFJLEdBQUcsZ0JBQWdCLENBQUMsT0FBTyxDQUFDO1FBQ3ZDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsRUFBRSxDQUFDO1FBRW5CLElBQUksSUFBSSxDQUFDLFFBQVEsS0FBSyxJQUFJLEVBQUU7WUFDMUIsSUFBSSxHQUFHLEdBQVcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUM3QyxJQUFJLEdBQUcsR0FBVSxJQUFJLENBQUMscUJBQXFCLENBQUMsR0FBRyxDQUFDLENBQUM7WUFFakQsSUFBSSxHQUFHLEtBQUssSUFBSTtnQkFDZCxNQUFNLENBQUMsTUFBTSxHQUFHLEdBQUcsQ0FBQyxjQUFjLENBQUM7U0FDdEM7SUFDSCxDQUFDO0lBT08sb0JBQW9CLENBQUMsTUFBYyxFQUFFLElBQVk7UUFDdkQsSUFBSSxHQUFHLEdBQVcsQ0FBQyxDQUFDO1FBRXBCLElBQUksSUFBSSxDQUFDLFFBQVEsS0FBSyxJQUFJLEVBQUU7WUFDMUIsSUFBSSxHQUFHLEdBQVcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUc3QyxJQUFJLEdBQUcsS0FBSyxtQkFBbUIsQ0FBQyxZQUFZO2dCQUMxQyxHQUFHLEdBQUcsQ0FBYSxJQUFJLENBQUMsT0FBTyxDQUFDLGNBQWMsRUFBRyxDQUFDLG9CQUFvQixDQUFDLENBQUMsRUFBYyxJQUFJLENBQUMsT0FBTyxDQUFDLGNBQWMsRUFBRyxDQUFDLGVBQWUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFFL0ksR0FBRyxHQUFlLElBQUksQ0FBQyxPQUFPLENBQUMsY0FBYyxFQUFHLENBQUMsdUJBQXVCLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDO1NBQ25GO1FBRUQsTUFBTSxDQUFDLElBQUksR0FBRyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUM7UUFDdkMsTUFBTSxDQUFDLFFBQVEsR0FBRyxJQUFJLFFBQVEsRUFBRSxDQUFDO1FBQ2pDLE1BQU0sQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2xDLENBQUM7SUFPYSx3QkFBd0IsQ0FBQyxNQUFjLEVBQUUsSUFBWTs7WUFDakUsTUFBTSxDQUFDLElBQUksR0FBRyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUM7WUFDdkMsTUFBTSxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUM7WUFFbkIsSUFBSSxJQUFJLENBQUMsUUFBUSxLQUFLLElBQUksRUFBRTtnQkFDMUIsSUFBSSxTQUFTLEdBQVcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLEVBQUUsQ0FBQztnQkFDbkQsSUFBSSxNQUFNLEdBQVcsQ0FBQyxDQUFDO2dCQUV2QixJQUFJLFNBQVMsR0FBcUIsSUFBSSxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQ3ZELElBQUksU0FBUyxHQUFjLENBQWEsSUFBSSxDQUFDLE9BQU8sQ0FBQyxjQUFjLEVBQUcsQ0FBQyx1QkFBdUIsQ0FBQyxTQUFTLEdBQUcsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUM7Z0JBQzFILE1BQU0sR0FBRyxTQUFTLENBQUMsS0FBSyxDQUFDO2dCQUV6QixJQUFJLFNBQVMsS0FBSyxJQUFJLElBQUksU0FBUyxDQUFDLGVBQWUsRUFBRTtvQkFDbkQsTUFBTSxDQUFDLE1BQU0sR0FBRyxNQUFNLFNBQVMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyx3QkFBd0IsQ0FBQyxTQUFTLENBQUMsQ0FBQzthQUNqRjtRQUNILENBQUM7S0FBQTtJQU9hLDBCQUEwQixDQUFDLE1BQWMsRUFBRSxJQUFZOztZQUNuRSxNQUFNLENBQUMsSUFBSSxHQUFHLGdCQUFnQixDQUFDLE9BQU8sQ0FBQztZQUN2QyxNQUFNLENBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQztZQUVuQixJQUFJLElBQUksQ0FBQyxRQUFRLEtBQUssSUFBSSxFQUFFO2dCQUMxQixJQUFJLFNBQVMsR0FBVyxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsRUFBRSxDQUFDO2dCQUNuRCxJQUFJLE1BQU0sR0FBVyxDQUFDLENBQUM7Z0JBRXZCLElBQUksU0FBUyxHQUFxQixJQUFJLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFDdkQsSUFBSSxTQUFTLEdBQTBCLElBQUksQ0FBQyxPQUFPLENBQUMsY0FBYyxFQUFHLENBQUMsdUJBQXVCLENBQUMsU0FBUyxHQUFHLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQztnQkFDeEgsTUFBTSxHQUFHLFNBQVMsQ0FBQyxLQUFLLENBQUM7Z0JBRXpCLElBQUksU0FBUyxLQUFLLElBQUksSUFBSSxTQUFTLENBQUMsZUFBZSxFQUFFO29CQUNuRCxNQUFNLENBQUMsTUFBTSxHQUFHLE1BQU0sU0FBUyxDQUFDLE9BQU8sRUFBRSxDQUFDLDJCQUEyQixDQUFDLFNBQVMsQ0FBQyxDQUFDO2FBQ3BGO1FBQ0gsQ0FBQztLQUFBO0lBRU8sZUFBZSxDQUFDLE1BQWMsRUFBRSxJQUFZO1FBQ2xELElBQUksSUFBSSxDQUFDLFFBQVEsS0FBSyxJQUFJLEVBQUU7WUFDMUIsS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDaEQsT0FBTztTQUNSO1FBRUQsSUFBSSxNQUFNLEdBQVcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUNoRCxJQUFJLENBQUMsTUFBTSxJQUFJLENBQUMsSUFBSSxNQUFNLEdBQUcsQ0FBWSxJQUFJLENBQUMsT0FBUSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksTUFBTSxLQUFLLG1CQUFtQixDQUFDLFlBQVksRUFBRTtZQUMzSCxJQUFJLEdBQUcsR0FBd0IsS0FBSyxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUM1RCxJQUFJLENBQUMsR0FBRyxDQUFDLFVBQVUsRUFBRSxFQUFFO2dCQUNyQixNQUFNLENBQUMsT0FBTyxHQUFHLENBQVksR0FBRyxDQUFDLFFBQVMsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQztnQkFJbEUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUU7b0JBQ25CLElBQUksT0FBTyxHQUFzQixHQUFHLENBQUMsUUFBUyxDQUFDLFVBQVUsRUFBRSxDQUFDO29CQUM1RCxJQUFJLFdBQVcsR0FBc0IsR0FBRyxDQUFDLFFBQVMsQ0FBQyxjQUFjLEVBQUUsQ0FBQztvQkFFcEUsTUFBTSxDQUFDLE9BQU8sR0FBRyxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsV0FBVyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztpQkFDbEU7YUFDRjtpQkFBTTtnQkFDTCxNQUFNLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQzthQUN4QjtTQUNGOztZQUNDLE1BQU0sQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO1FBRXpCLE1BQU0sQ0FBQyxJQUFJLEdBQUcsZ0JBQWdCLENBQUMsT0FBTyxDQUFDO0lBRXpDLENBQUM7SUFFTyxhQUFhLENBQUMsTUFBYyxFQUFFLElBQVk7UUFDaEQsSUFBSSxNQUFNLEdBQVcsRUFBRSxDQUFDO1FBRXhCLElBQUksSUFBSSxDQUFDLFFBQVEsS0FBSyxJQUFJLEVBQUU7WUFDMUIsS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDOUMsT0FBTztTQUNSO1FBQ0QsSUFBSSxNQUFNLEdBQVcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUNoRCxJQUFJLENBQUMsTUFBTSxJQUFJLENBQUMsSUFBSSxNQUFNLEdBQUcsQ0FBWSxJQUFJLENBQUMsT0FBUSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksTUFBTSxLQUFLLG1CQUFtQixDQUFDLFlBQVksRUFBRTtZQUMzSCxJQUFJLEdBQUcsR0FBd0IsS0FBSyxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUM1RCxNQUFNLEdBQUcsR0FBRyxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBVTNCLElBQUksTUFBTSxLQUFLLG1CQUFtQixDQUFDLFlBQVksSUFBSSxHQUFHLEtBQUssSUFBSSxDQUFDLE9BQU8sRUFBRTtnQkFDdkUsSUFBSSxNQUFNLENBQUMsV0FBVyxFQUFFLEtBQUssY0FBYyxDQUFDLGtCQUFrQixDQUFDLFdBQVcsRUFBRSxFQUFFO29CQUM1RSxJQUFJLEdBQUcsQ0FBQyxVQUFVLEVBQUUsRUFBRTt3QkFDcEIsTUFBTSxHQUFHLGNBQWMsQ0FBQyxtQkFBbUIsQ0FBQztxQkFDN0M7eUJBQU07d0JBQ0wsSUFBSSxPQUFPLEdBQWUsSUFBSSxLQUFLLENBQVcsQ0FBWSxJQUFJLENBQUMsT0FBUSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7d0JBQzlGLEtBQUssSUFBSSxHQUFHLEdBQVcsQ0FBQyxFQUFFLEdBQUcsR0FBRyxPQUFPLENBQUMsTUFBTSxFQUFFLEVBQUUsR0FBRzs0QkFDbkQsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQzt3QkFDWCxJQUFJLENBQUMsT0FBUSxDQUFDLFVBQVUsQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUM7d0JBRXBELElBQUksTUFBTSxHQUFHLENBQUMsSUFBSSxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLFNBQVM7NEJBQzdDLE1BQU0sR0FBRyxjQUFjLENBQUMsaUJBQWlCLENBQUM7cUJBQzdDO2lCQUNGO2FBQ0Y7U0FDRjtRQUNELE1BQU0sQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO1FBQ3ZCLE1BQU0sQ0FBQyxJQUFJLEdBQUcsZ0JBQWdCLENBQUMsS0FBSyxDQUFDO0lBQ3ZDLENBQUM7SUFJTyxlQUFlLENBQUMsTUFBYyxFQUFFLElBQVk7UUFDbEQsSUFBSSxHQUFHLEdBQVcsQ0FBQyxDQUFDO1FBQ3BCLElBQUksTUFBTSxHQUFXLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDaEQsSUFBSSxDQUFDLE1BQU0sSUFBSSxDQUFDLElBQUksTUFBTSxHQUFjLElBQUksQ0FBQyxPQUFRLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksTUFBTSxLQUFLLG1CQUFtQixDQUFDLFlBQVksRUFBRTtZQUN6SCxJQUFJLElBQUksR0FBd0IsS0FBSyxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUM3RCxHQUFHLEdBQVcsQ0FBQyxDQUFDLElBQUksS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQztTQUN6RDtRQUNELE1BQU0sQ0FBQyxJQUFJLEdBQUcsZ0JBQWdCLENBQUMsT0FBTyxDQUFDO1FBQ3ZDLE1BQU0sQ0FBQyxRQUFRLEdBQUcsSUFBSSxRQUFRLEVBQUUsQ0FBQztRQUNqQyxNQUFNLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBUyxHQUFHLENBQUMsQ0FBQztJQUMxQyxDQUFDO0lBRUQscUJBQXFCLENBQUMsTUFBYyxFQUFFLElBQVk7UUFDaEQsSUFBSSxHQUFHLEdBQVksS0FBSyxDQUFDO1FBQ3pCLElBQUksTUFBTSxHQUFXLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDaEQsSUFBSSxDQUFDLE1BQU0sSUFBSSxDQUFDLElBQUksTUFBTSxHQUFjLElBQUksQ0FBQyxPQUFRLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksTUFBTSxLQUFLLG1CQUFtQixDQUFDLFlBQVksRUFBRTtZQUN6SCxJQUFJLEdBQUcsR0FBd0IsS0FBSyxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUM1RCxJQUFJLEdBQUcsS0FBSyxJQUFJLElBQUksR0FBRyxDQUFDLFFBQVEsQ0FBQyxlQUFlLEVBQUU7Z0JBQ2hELEdBQUcsR0FBRyxJQUFJLENBQUM7U0FDZDtRQUNELE1BQU0sQ0FBQyxJQUFJLEdBQUcsZ0JBQWdCLENBQUMsT0FBTyxDQUFDO1FBQ3ZDLE1BQU0sQ0FBQyxPQUFPLEdBQUcsR0FBRyxDQUFDO0lBQ3ZCLENBQUM7SUFPTyxpQkFBaUIsQ0FBQyxNQUFjLEVBQUUsSUFBWTtRQUNwRCxJQUFJLE1BQU0sR0FBVyxFQUFFLENBQUM7UUFFeEIsSUFBSSxJQUFJLENBQUMsUUFBUSxLQUFLLElBQUksRUFBRTtZQUMxQixLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUM5QyxPQUFPO1NBQ1I7UUFFRCxJQUFJLE1BQU0sR0FBVyxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQ2hELElBQUksQ0FBQyxNQUFNLElBQUksQ0FBQyxJQUFJLE1BQU0sR0FBRyxDQUFZLElBQUksQ0FBQyxPQUFRLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxNQUFNLEtBQUssbUJBQW1CLENBQUMsWUFBWSxFQUFFO1lBQzNILElBQUksR0FBRyxHQUF3QixLQUFLLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQzVELE1BQU0sR0FBRyxHQUFHLENBQUMsWUFBWSxFQUFFLENBQUM7U0FDN0I7UUFDRCxNQUFNLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztRQUN2QixNQUFNLENBQUMsSUFBSSxHQUFHLGdCQUFnQixDQUFDLEtBQUssQ0FBQztJQUN2QyxDQUFDO0lBR08sbUJBQW1CLENBQUMsTUFBYyxFQUFFLElBQVk7UUFDdEQsSUFBSSxVQUFVLEdBQVcsQ0FBQyxDQUFDO1FBQzNCLElBQUksSUFBSSxDQUFDLFFBQVEsS0FBSyxJQUFJLEVBQUU7WUFDMUIsS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDaEQsT0FBTztTQUNSO1FBRUQsSUFBSSxNQUFNLEdBQVcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUVoRCxJQUFJLENBQUMsTUFBTSxJQUFJLENBQUMsSUFBSSxNQUFNLEdBQUcsQ0FBWSxJQUFJLENBQUMsT0FBUSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksTUFBTSxLQUFLLG1CQUFtQixDQUFDLFlBQVksRUFBRTtZQUMzSCxJQUFJLEdBQUcsR0FBd0IsS0FBSyxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUM1RCxVQUFVLEdBQUcsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDLENBQUMsdUJBQXVCLEVBQUUsQ0FBQztTQUM1RjtRQUNELEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLEVBQUUsVUFBVSxFQUFFLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3hFLENBQUM7SUFHTywwQkFBMEIsQ0FBQyxNQUFjLEVBQUUsSUFBWTtRQUM3RCxJQUFJLGVBQWUsR0FBWSxLQUFLLENBQUM7UUFDckMsSUFBSSxJQUFJLENBQUMsUUFBUSxLQUFLLElBQUksRUFBRTtZQUMxQixLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUM5QyxPQUFPO1NBQ1I7UUFFRCxJQUFJLE1BQU0sR0FBVyxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQ2hELElBQUksQ0FBQyxNQUFNLElBQUksQ0FBQyxJQUFJLE1BQU0sR0FBRyxDQUFZLElBQUksQ0FBQyxPQUFRLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxNQUFNLEtBQUssbUJBQW1CLENBQUMsWUFBWSxFQUFFO1lBQzNILElBQUksR0FBRyxHQUF3QixLQUFLLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQzVELGVBQWUsR0FBRyxHQUFHLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztTQUM1QztRQUNELE1BQU0sQ0FBQyxPQUFPLEdBQUcsZUFBZSxDQUFDO1FBQ2pDLE1BQU0sQ0FBQyxJQUFJLEdBQUcsZ0JBQWdCLENBQUMsT0FBTyxDQUFDO0lBRXpDLENBQUM7SUFPTyxjQUFjLENBQUMsTUFBYyxFQUFFLElBQVk7UUFDakQsTUFBTSxDQUFDLElBQUksR0FBRyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUM7UUFDdkMsTUFBTSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7UUFDdkIsSUFBSSxHQUFHLEdBQVcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUU3QyxJQUFJLEdBQUcsR0FBVSxDQUFZLElBQUksQ0FBQyxPQUFRLENBQUMsb0JBQW9CLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDMUUsSUFBSSxHQUFHLEtBQUssSUFBSTtZQUNkLE9BQU87UUFJVCxJQUFJLEdBQUcsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsSUFBSSxHQUFHLENBQUMsT0FBTyxFQUFFLEtBQUssZ0JBQWdCLENBQUMsV0FBVyxDQUFDO1lBQ3pGLE1BQU0sQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO1FBRXhCLElBQUksR0FBRyxHQUFXLEdBQUcsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDdEMsSUFBSSxNQUFNLEdBQVcsR0FBRyxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQzNDLElBQUksSUFBSSxHQUFxQixHQUFHLENBQUMsT0FBTyxFQUFFLENBQUM7UUFFM0MsTUFBTSxDQUFDLE9BQU8sR0FBRyxtQkFBbUIsQ0FBQyxXQUFXLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxNQUFNLEVBQUUsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLEdBQUcsQ0FBQyxhQUFhLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUUvRyxDQUFDO0lBTU8sa0JBQWtCLENBQUMsTUFBYztRQUN2QyxNQUFNLENBQUMsSUFBSSxHQUFHLGdCQUFnQixDQUFDLE9BQU8sQ0FBQztRQUN2QyxNQUFNLENBQUMsT0FBTyxHQUFHLFdBQVcsQ0FBQyxRQUFRLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDeEQsQ0FBQztJQUVPLGVBQWUsQ0FBQyxNQUFjO1FBQ3BDLE1BQU0sQ0FBQyxJQUFJLEdBQUcsZ0JBQWdCLENBQUMsS0FBSyxDQUFDO1FBQ3JDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsWUFBWSxDQUFDLFFBQVEsQ0FBQyxVQUFVLEVBQUUsQ0FBQztJQUNyRCxDQUFDO0lBTU8sWUFBWSxDQUFDLE1BQWM7UUFDakMsTUFBTSxDQUFDLElBQUksR0FBRyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUM7UUFDckMsTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQVksSUFBSSxDQUFDLE9BQVEsQ0FBQyxhQUFhLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDMUUsQ0FBQztJQU1PLFlBQVksQ0FBQyxNQUFjO1FBQ2pDLElBQUksV0FBVyxHQUF1QixJQUFJLENBQUMsT0FBTyxDQUFDO1FBQ25ELElBQUksTUFBTSxHQUFXLENBQUMsQ0FBQztRQUl2QixJQUFJLFdBQVcsS0FBSyxJQUFJLEVBQUU7WUFFeEIsTUFBTSxHQUFHLG1CQUFtQixDQUFDLFlBQVksQ0FBQztTQUMzQztRQUNELEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLEVBQUUsTUFBTSxFQUFFLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3BFLENBQUM7SUFPTyxZQUFZLENBQUMsTUFBYyxFQUFFLE1BQWMsRUFBRSxLQUFhO1FBQ2hFLElBQUksR0FBRyxHQUFZLEtBQUssQ0FBQztRQUN6QixJQUFJLE9BQU8sR0FBVyxNQUFNLENBQUMsUUFBUSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQ25ELElBQUksQ0FBQyxPQUFPLElBQUksQ0FBQyxJQUFJLE9BQU8sR0FBSSxDQUFZLElBQUksQ0FBQyxPQUFRLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxPQUFPLEtBQUssbUJBQW1CLENBQUMsWUFBWSxFQUFFO1lBQy9ILElBQUksR0FBRyxHQUF3QixLQUFLLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQzdELElBQUksR0FBRyxLQUFLLElBQUksRUFBRTtnQkFDaEIsSUFBSSxPQUFPLEdBQVcsQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztnQkFDcEQsS0FBSyxJQUFJLENBQUMsR0FBVyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFO29CQUMxRCxJQUFJLElBQUksR0FBVyxLQUFLLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztvQkFDeEQsSUFBSSxJQUFJLEdBQVcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEdBQUcsRUFBRSxjQUFjLEVBQUUsSUFBSSxFQUFFLFlBQVksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO29CQUd2RyxJQUFJLElBQUksS0FBSyxJQUFJLEVBQUU7d0JBQ2pCLElBQUksR0FBRyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7d0JBQzFCLElBQUksSUFBSSxLQUFLLEdBQUc7NEJBQ2QsSUFBSSxHQUFHLEdBQUcsQ0FBQztxQkFDZDtvQkFDRCxJQUFJLElBQUksS0FBSyxPQUFPLEVBQUU7d0JBQ3BCLEdBQUcsR0FBRyxJQUFJLENBQUM7d0JBQ1gsTUFBTTtxQkFDUDtpQkFDRjthQUNGO1NBQ0Y7UUFDRCxNQUFNLENBQUMsSUFBSSxHQUFHLGdCQUFnQixDQUFDLE9BQU8sQ0FBQztRQUN2QyxNQUFNLENBQUMsT0FBTyxHQUFHLEdBQUcsQ0FBQztJQUN2QixDQUFDO0lBWU8sdUJBQXVCLENBQUMsTUFBYyxFQUFFLFVBQWtCO1FBQ2hFLElBQUksZUFBZSxHQUE2Qix3QkFBd0IsQ0FBQyxVQUFVLENBQUM7UUFDcEYsSUFBSSxPQUFPLEdBQVcsVUFBVSxDQUFDLFFBQVEsQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUN2RCxJQUFJLENBQUMsT0FBTyxJQUFJLENBQUMsSUFBSSxPQUFPLEdBQUcsQ0FBWSxJQUFJLENBQUMsT0FBUSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksT0FBTyxLQUFLLG1CQUFtQixDQUFDLFlBQVksRUFBRTtZQUM5SCxJQUFJLElBQUksR0FBd0IsS0FBSyxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUM5RCxJQUFJLElBQUksS0FBSyxJQUFJLEVBQUU7Z0JBQ2pCLElBQUksSUFBSSxDQUFDLFNBQVM7b0JBQ2hCLGVBQWUsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDO2FBQzFDO1NBQ0Y7UUFDRCxLQUFLLENBQUMsaUJBQWlCLENBQUMsTUFBTSxFQUFVLGVBQWUsRUFBRSxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNyRixDQUFDO0lBRWEsY0FBYyxDQUFDLE1BQWMsRUFBRSxHQUFXLEVBQUUsR0FBVzs7Ozs7WUFFbkUsTUFBTSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7WUFDdEIsTUFBTSxDQUFDLElBQUksR0FBRyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUM7WUFFdkMsSUFBSSxHQUFHLENBQUMsUUFBUSxLQUFLLElBQUksRUFBRTtnQkFHekIsT0FBTzthQUNSO1lBRUQsSUFBSSxHQUFHLEdBQVcsR0FBRyxDQUFDLFFBQVEsQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUU1QyxJQUFJLEdBQUcsR0FBVSxJQUFJLENBQUMscUJBQXFCLENBQUMsR0FBRyxDQUFDLENBQUM7WUFFakQsSUFBSSxHQUFHLEtBQUssSUFBSSxFQUFFO2dCQUNoQixNQUFNLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztnQkFDdkIsT0FBTzthQUNSO1lBRUQsSUFBSSxxQkFBcUIsQ0FBQyw0QkFBNEIsQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQztnQkFDN0UsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7WUFFekMsSUFBSSxNQUFjLENBQUM7WUFDbkIsSUFBSSxxQkFBcUIsQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRTtnQkFDaEUsUUFBUSxHQUFHLENBQUMsT0FBTyxFQUFFLEVBQUU7b0JBQ3JCLEtBQUssZ0JBQWdCLENBQUMsS0FBSyxDQUFDO29CQUM1QixLQUFLLGdCQUFnQixDQUFDLE9BQU87d0JBQzNCLE1BQU0sR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDO3dCQUNwQixNQUFNO29CQUVSLEtBQUssZ0JBQWdCLENBQUMsT0FBTyxDQUFDO29CQUM5QixLQUFLLGdCQUFnQixDQUFDLElBQUksQ0FBQztvQkFDM0IsS0FBSyxnQkFBZ0IsQ0FBQyxJQUFJO3dCQUN4QixNQUFNLEdBQUcsR0FBRyxDQUFDLFFBQVEsQ0FBQyxXQUFXLEVBQUUsQ0FBQzt3QkFDcEMsTUFBTTtvQkFFUixLQUFLLGdCQUFnQixDQUFDLE9BQU87d0JBQzNCLE1BQU0sR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQzt3QkFDakMsTUFBTTtvQkFFUixLQUFLLGdCQUFnQixDQUFDLElBQUk7d0JBQ3hCLE1BQU0sR0FBRyxHQUFHLENBQUMsT0FBTyxFQUFFLENBQUM7d0JBQ3ZCLE1BQU07b0JBRVIsS0FBSyxnQkFBZ0IsQ0FBQyxXQUFXO3dCQUMvQixNQUFNLEdBQUcsR0FBRyxDQUFDLE9BQU8sRUFBRSxDQUFDO3dCQUd2QixJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRTs0QkFFZixJQUFJLEdBQUcsQ0FBQyxJQUFJLEtBQUssZ0JBQWdCLENBQUMsSUFBSTtnQ0FDcEMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxvQkFBb0IsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDO29DQUM5QyxNQUFNLEdBQUcsSUFBSSxDQUFDOzRCQUVsQixJQUFJLE1BQU0sSUFBSSxJQUFJO2dDQUNoQixNQUFNLEdBQUcsU0FBUyxDQUFDLGlCQUFpQixDQUFDLEdBQUcsRUFBRSxNQUFNLENBQUMsQ0FBQzs0QkFFcEQsSUFBSSxNQUFNLElBQUksSUFBSTtnQ0FDaEIsTUFBTTt5QkFDVDtvQkFHSDt3QkFFRSxPQUFNLE9BQU8sWUFBQyxNQUFNLEVBQUUsZ0JBQWdCLENBQUMsT0FBTyxFQUFFO3dCQUNoRCxPQUFPO2lCQUNWO2FBQ0Y7aUJBRUk7Z0JBRUgsTUFBTSxHQUFHLEdBQUcsQ0FBQyxlQUFlLEVBQUUsQ0FBQzthQUNoQztZQUVELElBQUksR0FBRyxDQUFDLE1BQU0sRUFBRTtnQkFFZCxNQUFNLEdBQUcsR0FBRyxDQUFDLFlBQVksRUFBRSxDQUFDO2dCQUM1QixJQUFJLE1BQU0sS0FBSyxJQUFJO29CQUNqQixHQUFHLENBQUMsb0JBQW9CLEVBQUUsQ0FBQzthQUM5QjtZQUlELElBQUksZ0JBQWdCLEdBQVksR0FBRyxDQUFDLE9BQU8sRUFBRSxLQUFLLElBQUksQ0FBQyxPQUFPLElBQWUsR0FBRyxDQUFDLE9BQU8sRUFBRyxDQUFDLFdBQVcsRUFBRSxLQUFLLGNBQWMsQ0FBQyxvQkFBb0IsQ0FBQztZQUVsSixNQUFNLEdBQUcsQ0FBQyx5QkFBeUIsQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsZ0JBQWdCLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDdkYsTUFBTSxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDNUIsQ0FBQztLQUFBO0lBUWEsZ0JBQWdCLENBQUMsTUFBYyxFQUFFLFdBQW1CLEVBQUUsVUFBa0I7O1lBQ3BGLElBQUksSUFBSSxHQUF3QixJQUFJLENBQUMsT0FBTyxDQUFDLGNBQWMsRUFBRyxJQUFlLElBQUksQ0FBQyxPQUFRLENBQUM7WUFHM0YsTUFBTSxZQUFZLENBQUMsYUFBYSxDQUFDLDJCQUEyQixDQUFDLElBQUksRUFBRSxpQkFBaUIsQ0FBQyxlQUFlLENBQUMsQ0FBQztZQUV0RyxNQUFNLENBQUMsSUFBSSxHQUFHLGdCQUFnQixDQUFDLE9BQU8sQ0FBQztZQUN2QyxNQUFNLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztRQUN4QixDQUFDO0tBQUE7SUFRTyxZQUFZLENBQUMsTUFBYyxFQUFFLE9BQWUsRUFBRSxNQUFjO1FBQ2xFLElBQUksQ0FBUyxDQUFDO1FBQ2QsSUFBSSxDQUFTLENBQUM7UUFDZCxJQUFJLE1BQU0sR0FBVyxNQUFNLENBQUMsTUFBTSxDQUFDO1FBQ25DLElBQUksT0FBTyxHQUFXLE9BQU8sQ0FBQyxNQUFNLENBQUM7UUFDckMsSUFBSSxXQUFXLEdBQVcsQ0FBQyxDQUFDO1FBQzVCLElBQUksSUFBSSxHQUFZLElBQUksQ0FBQztRQUN6QixJQUFJLE1BQWUsQ0FBQztRQUNwQixJQUFJLE1BQU0sS0FBSyxJQUFJLElBQUksT0FBTyxLQUFLLElBQUksRUFBRTtZQUN2QyxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUNoRCxPQUFPO1NBQ1I7UUFDRCxJQUFJLFNBQVMsR0FBVyxNQUFNLENBQUMsTUFBTSxDQUFDO1FBQ3RDLElBQUksT0FBTyxHQUFXLE9BQU8sQ0FBQyxNQUFNLENBQUM7UUFDckMsSUFBSSxJQUFJLEdBQUcsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDOUIsSUFBSSxNQUFNLEdBQUcsSUFBSSxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUM7UUFJeEMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsTUFBTSxHQUFHLEtBQUssRUFBRSxDQUFDLEdBQUcsT0FBTyxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQ25ELElBQUksT0FBTyxHQUFXLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNqQyxRQUFRLE9BQU8sRUFBRTtnQkFDZixLQUFLLElBQUk7b0JBQ1AsSUFBSSxNQUFNO3dCQUNSLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE9BQU8sQ0FBQztvQkFDdEIsTUFBTSxHQUFHLENBQUMsTUFBTSxDQUFDO29CQUNqQixNQUFNO2dCQUVSLEtBQUssR0FBRztvQkFDTixJQUFJLE1BQU07d0JBQ1IsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsT0FBTyxDQUFDO3lCQUNqQjt3QkFDSCxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxtQkFBbUIsQ0FBQyxZQUFZLENBQUM7d0JBQzdDLFdBQVcsRUFBRSxDQUFDO3FCQUNmO29CQUNELE1BQU0sR0FBRyxLQUFLLENBQUM7b0JBQ2YsTUFBTTtnQkFFUixLQUFLLEdBQUc7b0JBQ04sSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLG1CQUFtQixDQUFDLFlBQVksQ0FBQztvQkFDaEUsTUFBTSxHQUFHLEtBQUssQ0FBQztvQkFDZixNQUFNO2dCQUVSO29CQUNFLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE9BQU8sQ0FBQztvQkFDcEIsTUFBTSxHQUFHLEtBQUssQ0FBQztvQkFDZixNQUFNO2FBQ1Q7U0FDRjtRQUNELE9BQU8sR0FBRyxDQUFDLENBQUM7UUFDWixPQUFPLEdBQUcsbUJBQW1CLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBRTdELElBQUksWUFBWSxHQUFXLE9BQU8sQ0FBQyxXQUFXLENBQUMsbUJBQW1CLENBQUMsWUFBWSxDQUFDLENBQUM7UUFFakYsSUFBSSxZQUFZLEtBQUssQ0FBQyxDQUFDO1lBRXJCLElBQUksR0FBRyxtQkFBbUIsQ0FBQyxXQUFXLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFDO2FBQ3JEO1lBR0gsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxtQkFBbUIsQ0FBQyxZQUFZLElBQUksSUFBSSxFQUFFLENBQUMsRUFBRSxFQUFFLE9BQU8sRUFBRSxFQUFFLFNBQVMsRUFBRSxFQUFFO2dCQUM3RixJQUFJLFNBQVMsS0FBSyxDQUFDO29CQUNqQixJQUFJLEdBQUcsS0FBSyxDQUFDOztvQkFDVixJQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssbUJBQW1CLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUMzRjtZQUVELE1BQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzFCLElBQUksR0FBRyxtQkFBbUIsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBRzdDLE9BQU8sSUFBSSxJQUFJLFdBQVcsS0FBSyxDQUFDLEVBQUU7Z0JBQ2hDLElBQUksT0FBZSxDQUFDO2dCQUNwQixJQUFJLE9BQWUsQ0FBQztnQkFDcEIsS0FBSyxPQUFPLEdBQUcsQ0FBQyxFQUFFLE9BQU8sR0FBRyxDQUFDLEVBQUUsT0FBTyxHQUFHLENBQUMsS0FBSyxZQUFZLEVBQUUsT0FBTyxFQUFFLEVBQUcsT0FBTyxFQUFFO29CQUNoRixJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxtQkFBbUIsQ0FBQyxZQUFZO3dCQUNwRCxNQUFNO2dCQUNWLFdBQVcsRUFBRSxDQUFDO2dCQUNkLFNBQVMsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDO2dCQUcxQixJQUFJLE9BQU8sS0FBSyxDQUFDLEVBQUU7b0JBRWpCLElBQUksU0FBUyxHQUFHLENBQUMsRUFFakI7d0JBQ0UsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO3dCQUNoQyxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO3dCQUN0QixJQUFJLEdBQUcsbUJBQW1CLENBQUMsV0FBVyxDQUFDLE1BQU0sRUFBRSxtQkFBbUIsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxPQUFPLEdBQUcsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7d0JBQzFHLE1BQU0sR0FBRyxNQUFNLENBQUMsUUFBUSxFQUFFLENBQUM7cUJBQzVCOzt3QkFBTSxJQUFJLEdBQUcsS0FBSyxDQUFDO2lCQUNyQjtnQkFDRCxDQUFDLElBQUksT0FBTyxDQUFDO2dCQUNiLElBQUksR0FBRyxtQkFBbUIsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO2FBQ3BEO1lBRUQsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssbUJBQW1CLENBQUMsWUFBWTtnQkFFOUMsSUFBSSxHQUFHLG1CQUFtQixDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFHL0MsSUFBSSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxFQUFFO2dCQUM3QixNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQ2hDLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQ3RCLElBQUksR0FBRyxtQkFBbUIsQ0FBQyxXQUFXLENBQUMsTUFBTSxFQUFFLG1CQUFtQixDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQzthQUMxRjtTQUNGO1FBQ0QsTUFBTSxDQUFDLElBQUksR0FBRyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUM7UUFDdkMsTUFBTSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7SUFDeEIsQ0FBQztJQVFPLE1BQU0sQ0FBQyxRQUFRLENBQUMsTUFBZ0IsRUFBRSxJQUFZO1FBQ3BELElBQUksTUFBTSxHQUFXLE1BQU0sQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO1FBQzFDLElBQUksTUFBTSxHQUFhLElBQUksS0FBSyxDQUFTLE1BQU0sQ0FBQyxDQUFDO1FBQ2pELEtBQUssSUFBSSxJQUFJLEdBQVcsQ0FBQyxFQUFFLElBQUksR0FBRyxNQUFNLEVBQUUsSUFBSSxFQUFFO1lBQzlDLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxDQUFDO1FBQ3JDLE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7SUFLTyxjQUFjLENBQUMsTUFBYyxFQUFFLFNBQWlCLEVBQUUsU0FBaUIsRUFBRSxNQUFjO1FBQ3pGLElBQUksTUFBTSxDQUFDLE1BQU0sS0FBSyxJQUFJLElBQUksU0FBUyxDQUFDLE1BQU0sS0FBSyxJQUFJLElBQUksU0FBUyxDQUFDLE1BQU0sS0FBSyxJQUFJLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxvQkFBb0IsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxvQkFBb0IsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxvQkFBb0IsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDOVEsS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDaEQsT0FBTztTQUNSO1FBRUQsTUFBTSxDQUFDLE1BQU0sR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsU0FBUyxDQUFDLE1BQU0sRUFBRSxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDbkYsTUFBTSxDQUFDLElBQUksR0FBRyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUM7SUFDekMsQ0FBQztJQUlPLE1BQU0sQ0FBQyxRQUFRLENBQUMsR0FBUSxFQUFFLElBQWEsRUFBRSxFQUFXO1FBQzFELElBQUksU0FBUyxDQUFDLE1BQU0sS0FBSyxDQUFDO1lBQ3hCLE9BQU8sbUJBQW1CLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDOztZQUUzQyxPQUFPLG1CQUFtQixDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ3pELENBQUM7SUFPTyxNQUFNLENBQUMsVUFBVSxDQUFDLEdBQWE7UUFDckMsT0FBTyxtQkFBbUIsQ0FBQyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDMUQsQ0FBQztJQVNPLE1BQU0sQ0FBQyxVQUFVLENBQUMsR0FBYSxFQUFFLElBQVksRUFBRSxFQUFVO1FBQy9ELElBQUksTUFBTSxHQUFrQixJQUFJLGFBQWEsQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUM7UUFDekQsT0FBTyxJQUFJLEdBQUcsRUFBRSxFQUFFLElBQUksRUFBRTtZQUN0QixNQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQzNCLE9BQU8sTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQzNCLENBQUM7SUFRTyxNQUFNLENBQUMsV0FBVyxDQUFDLE1BQWMsRUFBRSxPQUFlO1FBQ3hELElBQUksSUFBSSxHQUFZLElBQUksQ0FBQztRQUN6QixJQUFJLElBQUksR0FBVyxPQUFPLENBQUM7UUFDM0IsSUFBSSxTQUFTLEdBQVcsTUFBTSxDQUFDLE1BQU0sQ0FBQztRQUN0QyxJQUFJLE9BQU8sR0FBVyxPQUFPLENBQUMsTUFBTSxDQUFDO1FBQ3JDLElBQUksU0FBUyxHQUFHLE9BQU87WUFDckIsSUFBSSxHQUFHLEtBQUssQ0FBQzthQUVWLElBQUksU0FBUyxHQUFHLE9BQU87WUFDMUIsSUFBSSxHQUFHLE9BQU8sQ0FBQztRQUdqQixPQUFPLElBQUksQ0FBQyxNQUFNLEdBQUcsU0FBUztZQUM1QixJQUFJLElBQUksR0FBRyxDQUFDO1FBRWQsS0FBSyxJQUFJLENBQUMsR0FBVyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFNBQVMsSUFBSSxJQUFJLEVBQUUsQ0FBQyxFQUFFO1lBQ2hELElBQUksR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEtBQUssbUJBQW1CLENBQUMsWUFBWSxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEtBQUssTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRXRHLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQVVPLE1BQU0sQ0FBQyxXQUFXLENBQUMsTUFBcUIsRUFBRSxJQUFZLEVBQUUsR0FBWTtRQUMxRSxJQUFJLElBQUksR0FBWSxLQUFLLENBQUM7UUFDMUIsSUFBSSxHQUFHLEdBQVcsTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ3BDLElBQUksQ0FBQyxHQUFXLENBQUMsQ0FBQztRQUdsQixJQUFJLENBQUMsR0FBRyxJQUFJLE1BQU0sQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU07WUFDckMsT0FBTyxLQUFLLENBQUM7UUFFZixJQUFJLENBQUMsR0FBVyxDQUFDLENBQUM7UUFDbEIsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQzNDLElBQUksR0FBRyxJQUFJLENBQUM7WUFDWixJQUFJLEdBQUcsRUFBRTtnQkFDUCxJQUFJLEdBQUcsbUJBQW1CLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7YUFDN0Q7aUJBQU07Z0JBQ0wsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxJQUFJLElBQUksRUFBRSxDQUFDLEVBQUUsRUFBRTtvQkFFeEMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLE1BQU0sQ0FBQyxNQUFNLEVBQUU7d0JBQzNCLE9BQU8sS0FBSyxDQUFDO3FCQUNkO29CQUNELElBQUksR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEtBQUssbUJBQW1CLENBQUMsWUFBWSxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztpQkFDdEc7YUFDRjtTQUNGO1FBQ0QsSUFBSSxJQUFJLEVBQUU7WUFDUixNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDaEMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUN0QztRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVPLGFBQWEsQ0FBQyxJQUFZLEVBQUUsTUFBYztRQUNoRCxJQUFJLE9BQU8sR0FBVyxJQUFJLENBQUMsTUFBTSxDQUFDO1FBQ2xDLElBQUksR0FBRyxHQUFxQixJQUFJLENBQUMsT0FBUSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUVsRSxJQUFJLEdBQUcsS0FBSyxJQUFJLEVBQUU7WUFDaEIsS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDN0MsT0FBTztTQUNSO1FBR0QsSUFBSSxHQUFHLENBQUMsaUJBQWlCLEtBQUssS0FBSyxFQUFFO1lBQ25DLElBQUksRUFBRSxHQUFrQixJQUFJLGFBQWEsRUFBRSxDQUFDO1lBQzVDLEVBQUUsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxtREFBbUQsRUFBRSxHQUFHLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQ2pHLEtBQUssQ0FBQyxFQUFFLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztZQUNyQixNQUFNLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztZQUNyQixPQUFPO1NBQ1I7UUFFRCxJQUFJLFFBQVEsR0FBVyxHQUFHLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzFDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsR0FBRyxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBRzdCLEtBQUssQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxPQUFPLEVBQUUsRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDdEQsQ0FBQztJQUdPLFlBQVksQ0FBQyxJQUFZLEVBQUUsTUFBYztRQUMvQyxJQUFJLEtBQUssR0FBdUIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxjQUFjLEVBQUcsQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDbEcsS0FBSyxDQUFDLGlCQUFpQixDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDbkUsQ0FBQztJQVNELFFBQVEsQ0FBQyxHQUFXO1FBQ2xCLElBQUksR0FBRyxHQUFVLENBQUMsR0FBRyxLQUFLLG1CQUFtQixDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFZLElBQUksQ0FBQyxPQUFRLENBQUMsb0JBQW9CLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxhQUFhLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDbkssT0FBTyxHQUFHLENBQUM7SUFDYixDQUFDO0lBTU8scUJBQXFCLENBQUMsR0FBVztRQUN2QyxPQUFPLENBQUMsR0FBRyxLQUFLLG1CQUFtQixDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFZLElBQUksQ0FBQyxPQUFPLENBQUMsY0FBYyxFQUFHLENBQUMsb0JBQW9CLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxhQUFhLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDNUssQ0FBQztJQVFPLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBUyxFQUFFLElBQVk7UUFDNUMsSUFBSSxDQUFDLEdBQVcsQ0FBQyxDQUFDO1FBRWxCLElBQUksT0FBTyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUM7WUFDMUIsT0FBTyxDQUFDLENBQUM7UUFHWCxJQUFJLENBQUMsR0FBVyxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztRQUc3QixJQUFJLElBQUksS0FBSyxHQUFHLEVBQUU7WUFDaEIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUc7Z0JBQ3hDLENBQUMsRUFBRSxDQUFDO1NBQ1A7UUFHRCxJQUFJLElBQUksS0FBSyxHQUFHLEVBQUU7WUFDaEIsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRztnQkFDbEMsQ0FBQyxFQUFFLENBQUM7U0FDUDtRQUVELENBQUMsRUFBRSxDQUFDO1FBQ0osT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0lBQzdDLENBQUM7SUFXRCxNQUFNLENBQUMsV0FBVyxDQUFDLElBQVksRUFBRSxPQUFnQixFQUFFLFNBQTJCLEVBQUUsSUFBWSxFQUFFLE9BQWdCLEVBQUUsU0FBMkI7UUFDekksSUFBSSxDQUFDLEdBQVcsSUFBSSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxHQUFXLElBQUksQ0FBQztRQUNyQixJQUFJLE1BQU0sR0FBWSxLQUFLLENBQUM7UUFLNUIsSUFBSSxPQUFPLEtBQUssT0FBTyxJQUFJLENBQUMsT0FBTyxJQUFJLENBQUMsSUFBSSxLQUFLLElBQUksSUFBSSxJQUFJLEtBQUssSUFBSSxDQUFDLENBQUMsRUFBRTtZQUN4RSxJQUFJO2dCQUNGLENBQUMsR0FBRyxJQUFJLE1BQU0sQ0FBQyxTQUFTLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDO2dCQUN6QyxDQUFDLEdBQUcsSUFBSSxNQUFNLENBQUMsU0FBUyxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQztnQkFDekMsTUFBTSxHQUFHLENBQUMsbUJBQW1CLENBQUMsV0FBVyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7YUFDL0Q7WUFBQyxPQUFPLGtCQUFrQixFQUFFO2dCQUUzQixJQUFJLGtCQUFrQixZQUFZLGtCQUFrQixFQUFFO29CQUNwRCxJQUFJLENBQUMsQ0FBQyxNQUFNLElBQUksQ0FBQyxDQUFDLE1BQU07d0JBQ3RCLE1BQU0sR0FBRyxJQUFJLENBQUM7aUJBQ2pCOztvQkFDQyxNQUFNLGtCQUFrQixDQUFDO2FBQzVCO1NBQ0Y7UUFDRCxPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDO0lBT08saUJBQWlCLENBQUMsR0FBVyxFQUFFLE1BQWM7UUFDbkQsTUFBTSxDQUFDLElBQUksR0FBRyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUM7UUFDckMsTUFBTSxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUM7UUFFbkIsSUFBSSxJQUFJLEdBQVcsR0FBRyxDQUFDLE1BQU0sQ0FBQztRQUM5QixJQUFJLE9BQU8sQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDO1lBQzdCLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxDQUFDOztZQUU5QyxNQUFNLENBQUMsTUFBTSxHQUFHLGNBQWMsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzVELENBQUM7SUFNTyxZQUFZLENBQUMsTUFBYyxFQUFFLE1BQWMsRUFBRSxNQUFjO1FBQ2pFLE1BQU0sQ0FBQyxJQUFJLEdBQUcsZ0JBQWdCLENBQUMsT0FBTyxDQUFDO1FBRXZDLElBQUksTUFBTSxDQUFDLE1BQU0sS0FBSyxJQUFJLElBQUksTUFBTSxDQUFDLE1BQU0sS0FBSyxJQUFJLEVBQUU7WUFDcEQsS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDaEQsT0FBTztTQUNSO1FBRUQsSUFBSSxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQ3hELElBQUksR0FBRyxHQUFRLElBQUksR0FBRyxDQUFDLG1CQUFtQixDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsZ0JBQWdCLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQztZQUMxSCxNQUFNLENBQUMsTUFBTSxHQUFHLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsRUFBRSxFQUFFLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztTQUN0STtJQUNILENBQUM7SUFPTyxNQUFNLENBQUMsbUJBQW1CLENBQUMsR0FBVyxFQUFFLEdBQVc7UUFFekQsR0FBRyxDQUFDLElBQUksR0FBRyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUM7UUFDbEMsR0FBRyxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7UUFDbkIsSUFBSSxJQUFJLEdBQXFCLGdCQUFnQixDQUFDLElBQUksQ0FBQztRQUluRCxJQUFJLEdBQUcsQ0FBQyxNQUFNLElBQUksR0FBRyxDQUFDLFdBQVcsS0FBSyxJQUFJLEVBQUU7WUFDMUMsSUFBSSxHQUFHLEdBQUcsQ0FBQyxXQUFXLENBQUMsWUFBWSxFQUFFLENBQUM7U0FDdkM7YUFBTSxJQUFJLG1CQUFtQixDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsRUFFakQ7WUFDRSxJQUFJLEdBQUcsVUFBVSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7U0FDNUM7UUFFRCxHQUFHLENBQUMsTUFBTSxHQUFHLEVBQUUsR0FBRyxtQkFBbUIsQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMvRCxDQUFDO0lBUU8sY0FBYyxDQUFDLEdBQVcsRUFBRSxJQUFZLEVBQUUsR0FBVztRQUMzRCxJQUFJLElBQUksQ0FBQyxRQUFRLEtBQUssSUFBSSxJQUFJLENBQUMsbUJBQW1CLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxFQUFFO1lBQ3hHLEdBQUcsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO1NBQ25CO2FBQU07WUFDTCxJQUFJLFFBQTBCLENBQUM7WUFDL0IsSUFBSSxPQUFlLENBQUM7WUFDcEIsSUFBSSxHQUFHLENBQUMsV0FBVyxLQUFLLElBQUksRUFBRTtnQkFDNUIsUUFBUSxHQUFHLEdBQUcsQ0FBQyxXQUFXLENBQUMsWUFBWSxFQUFFLENBQUM7Z0JBQzFDLE9BQU8sR0FBVyxHQUFHLENBQUMsV0FBWSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUM7YUFDaEY7aUJBQU07Z0JBQ0wsSUFBSSxNQUFNLEdBQUcsSUFBSSxVQUFVLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO2dCQUN4QyxPQUFPLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUM7Z0JBQ3hELFFBQVEsR0FBRyxNQUFNLENBQUMsWUFBWSxFQUFFLENBQUM7YUFDbEM7WUFHRCxJQUFJLE9BQU8sSUFBSSxJQUFJO2dCQUNqQixHQUFHLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztpQkFDZjtnQkFDSCxRQUFRLFFBQVEsRUFBRTtvQkFDaEIsS0FBSyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUM7b0JBQzVCLEtBQUssZ0JBQWdCLENBQUMsSUFBSTt3QkFDeEIsR0FBRyxDQUFDLElBQUksR0FBRyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUM7d0JBQ2xDLEdBQUcsQ0FBQyxNQUFNLEdBQUcsT0FBTyxDQUFDO3dCQUNyQixNQUFNO29CQUVSLEtBQUssZ0JBQWdCLENBQUMsT0FBTzt3QkFDM0IsR0FBRyxDQUFDLElBQUksR0FBRyxRQUFRLENBQUM7d0JBQ3BCLEdBQUcsQ0FBQyxNQUFNLEdBQUcsT0FBTyxDQUFDO3dCQUNyQixNQUFNO29CQUVSLEtBQUssZ0JBQWdCLENBQUMsSUFBSTt3QkFDeEIsR0FBRyxDQUFDLElBQUksR0FBRyxRQUFRLENBQUM7d0JBQ3BCLEdBQUcsQ0FBQyxNQUFNLEdBQUcsT0FBTyxDQUFDO3dCQUNyQixHQUFHLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDO3dCQUM3QixNQUFNO29CQUVSLEtBQUssZ0JBQWdCLENBQUMsV0FBVzt3QkFDL0IsR0FBRyxDQUFDLElBQUksR0FBRyxRQUFRLENBQUM7d0JBQ3BCLEdBQUcsQ0FBQyxNQUFNLEdBQUcsT0FBTyxDQUFDO3dCQUNyQixHQUFHLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDO3dCQUM3QixNQUFNO29CQUVSLEtBQUssZ0JBQWdCLENBQUMsT0FBTzt3QkFDM0IsR0FBRyxDQUFDLElBQUksR0FBRyxRQUFRLENBQUM7d0JBQ3BCLEdBQUcsQ0FBQyxRQUFRLEdBQUcsSUFBSSxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUM7d0JBQ3JDLE1BQU07b0JBRVIsS0FBSyxnQkFBZ0IsQ0FBQyxJQUFJO3dCQUN4QixHQUFHLENBQUMsSUFBSSxHQUFHLFFBQVEsQ0FBQzt3QkFDcEIsR0FBRyxDQUFDLFFBQVEsR0FBRyxJQUFJLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQzt3QkFDckMsTUFBTTtvQkFFUixLQUFLLGdCQUFnQixDQUFDLElBQUk7d0JBQ3hCLEdBQUcsQ0FBQyxJQUFJLEdBQUcsUUFBUSxDQUFDO3dCQUNwQixHQUFHLENBQUMsUUFBUSxHQUFHLElBQUksUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDO3dCQUNyQyxNQUFNO29CQUVSLEtBQUssZ0JBQWdCLENBQUMsT0FBTzt3QkFDM0IsR0FBRyxDQUFDLElBQUksR0FBRyxRQUFRLENBQUM7d0JBQ3BCLEdBQUcsQ0FBQyxPQUFPLEdBQUcsZ0JBQWdCLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDO3dCQUNsRCxNQUFNO29CQUVSO3dCQUNFLE1BQU0sSUFBSSxvQkFBb0IsQ0FBQywrREFBK0Q7NEJBQzVGLFFBQVEsQ0FBQyxDQUFDO2lCQUNmO2FBQ0Y7U0FDRjtJQUNILENBQUM7SUFPTyxlQUFlLENBQUMsR0FBVyxFQUFFLEdBQVc7UUFFOUMsR0FBRyxDQUFDLElBQUksR0FBRyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUM7UUFDcEMsR0FBRyxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7UUFDbkIsR0FBRyxDQUFDLFFBQVEsR0FBRyxJQUFJLFFBQVEsRUFBRSxDQUFDO1FBRTlCLEdBQUcsQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFNUIsSUFBSSxtQkFBbUIsQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDO1lBQ3hDLEdBQUcsQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFTLElBQUksVUFBVSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDO0lBQzdFLENBQUM7SUFTYSxjQUFjLENBQUMsR0FBVyxFQUFFLElBQVksRUFBRSxNQUFjLEVBQUUsR0FBVzs7WUFFakYsR0FBRyxDQUFDLElBQUksR0FBRyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUM7WUFDcEMsR0FBRyxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7WUFFcEIsSUFBSSxHQUFHLENBQUMsUUFBUSxLQUFLLElBQUksSUFBSSxJQUFJLENBQUMsUUFBUSxLQUFLLElBQUksRUFBRTtnQkFDbkQsSUFBSSxRQUFlLENBQUM7Z0JBQ3BCLElBQUk7b0JBQ0YsUUFBUSxHQUFZLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxVQUFVLEVBQUUsQ0FBRSxDQUFDO2lCQUMvRDtnQkFBQyxPQUFPLEVBQUUsRUFBRTtvQkFDWCxJQUFJLEVBQUUsWUFBWSxTQUFTLEVBQUU7d0JBQzNCLE1BQU0sQ0FBQyxRQUFRLENBQUMsbUJBQW1CLENBQUMsRUFBRSxDQUFDLENBQUM7d0JBQ3hDLFFBQVEsR0FBRyxJQUFJLENBQUM7cUJBQ2pCOzt3QkFDQyxNQUFNLEVBQUUsQ0FBQztpQkFDWjtnQkFHRCxJQUFJLENBQUMscUJBQXFCLENBQUMsb0JBQW9CLENBQUMsUUFBUSxDQUFDLFlBQVksRUFBRSxDQUFDLElBQUkscUJBQXFCLENBQUMsb0JBQW9CLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLEtBQUssSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsSUFBSSxRQUFRLENBQUMsT0FBTyxFQUFFLENBQUMsT0FBTyxFQUFFLEtBQUssU0FBUyxDQUFDLGdCQUFnQixJQUFJLFFBQVEsQ0FBQyxZQUFZLENBQUMsSUFBSSxRQUFRLENBQUMsT0FBTyxFQUFFLEtBQUssZ0JBQWdCLENBQUMsV0FBVyxJQUFJLENBQUMscUJBQXFCLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxZQUFZLEVBQUUsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksTUFBTSxDQUFDLE1BQU0sSUFBSSxDQUFDLHFCQUFxQixDQUFDLG9CQUFvQixDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxRQUFRLENBQUMsWUFBWSxFQUFFLEtBQUssZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUVwaEI7b0JBR0UsSUFBSSxxQkFBcUIsQ0FBQyxvQkFBb0IsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksUUFBUSxDQUFDLFlBQVksRUFBRSxLQUFLLGdCQUFnQixDQUFDLElBQUksRUFBRTt3QkFDaEgsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLEVBQUUsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUM7cUJBQ25EO29CQUVELEdBQUcsQ0FBQyxPQUFPLEdBQUcsTUFBTSxRQUFRLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxFQUFFLEVBQUUsTUFBTSxDQUFDLE9BQU8sRUFBRSxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztpQkFDM0c7YUFDRjtRQUNILENBQUM7S0FBQTtJQVVPLG1CQUFtQixDQUFDLFlBQW9CLEVBQUUsU0FBaUIsRUFBRSxNQUFjO1FBRWpGLE1BQU0sQ0FBQyxJQUFJLEdBQUcsZ0JBQWdCLENBQUMsT0FBTyxDQUFDO1FBQ3ZDLE1BQU0sQ0FBQyxRQUFRLEdBQUcsSUFBSSxRQUFRLEVBQUUsQ0FBQztRQUdqQyxJQUFJLEdBQUcsR0FBVyxDQUFDLENBQUM7UUFHcEIsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLElBQUksWUFBWSxDQUFDLE1BQU0sS0FBSyxJQUFJLElBQUksT0FBTyxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO1lBRWhJLElBQUksU0FBUyxDQUFDLE1BQU0sSUFBSSxPQUFPLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLE1BQU0sS0FBSyxDQUFDO2dCQUN2RixHQUFHLEdBQUcsQ0FBQyxDQUFDO2lCQUVMO2dCQUVILElBQUksVUFBVSxHQUFXLElBQUksQ0FBQyxhQUFhLENBQUMsWUFBWSxDQUFDLE1BQU0sRUFBRSxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQ25GLElBQUksVUFBVSxLQUFLLENBQUM7b0JBQ2xCLEdBQUcsR0FBRyxDQUFDLENBQUM7O29CQUVSLEdBQUcsR0FBRyxVQUFVLENBQUM7YUFDcEI7U0FDRjtRQUVELE1BQU0sQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2xDLENBQUM7SUFPTyxtQkFBbUIsQ0FBQyxZQUFvQixFQUFFLEtBQWEsRUFBRSxTQUFpQixFQUFFLE1BQWM7UUFFaEcsTUFBTSxDQUFDLElBQUksR0FBRyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUM7UUFDdkMsTUFBTSxDQUFDLFFBQVEsR0FBRyxJQUFJLFFBQVEsRUFBRSxDQUFDO1FBR2pDLElBQUksR0FBRyxHQUFXLENBQUMsQ0FBQztRQUlwQixJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sSUFBSSxZQUFZLENBQUMsTUFBTSxLQUFLLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLElBQUksS0FBSyxDQUFDLE1BQU0sS0FBSyxJQUFJLElBQUksT0FBTyxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxJQUFJLEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUc1TSxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sSUFBSSxPQUFPLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLE1BQU0sS0FBSyxDQUFDO2dCQUN4RixHQUFHLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxZQUFZLENBQUMsTUFBTSxFQUFFLFNBQVMsQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO2lCQUUzRSxJQUFJLFlBQVksQ0FBQyxNQUFNLEtBQUssS0FBSyxDQUFDLE1BQU07Z0JBQzNDLEdBQUcsR0FBRyxDQUFDLENBQUM7O2dCQUVSLEdBQUcsR0FBRyxDQUFDLENBQUM7U0FDWDtRQUVELE1BQU0sQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2xDLENBQUM7SUFTTyxhQUFhLENBQUMsTUFBYyxFQUFFLFNBQWlCLEVBQUUsS0FBYTtRQUdwRSxJQUFJLFNBQVMsR0FBVyxPQUFPLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDdEUsSUFBSSxVQUFVLEdBQVcsU0FBUyxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxTQUFTLENBQUM7UUFDNUYsSUFBSSxTQUFTLEdBQVcsQ0FBQyxLQUFLLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1FBRTVGLElBQUksU0FBUyxLQUFLLElBQUk7WUFDcEIsT0FBTyxDQUFDLENBQUM7UUFFWCxTQUFTLEdBQUcsU0FBUyxHQUFHLFNBQVMsR0FBRyxTQUFTLENBQUM7UUFFOUMsSUFBSSxXQUFXLEdBQVcsVUFBVSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUV4RCxJQUFJLFdBQVcsS0FBSyxDQUFDLENBQUM7WUFDcEIsT0FBTyxDQUFDLENBQUM7YUFDTjtZQUdILElBQUksVUFBVSxHQUFXLElBQUksQ0FBQyxhQUFhLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsV0FBVyxHQUFHLFNBQVMsQ0FBQyxNQUFNLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQztZQUM3RyxVQUFVLEVBQUUsQ0FBQztZQUNiLE9BQU8sVUFBVSxDQUFDO1NBQ25CO0lBQ0gsQ0FBQztJQVFPLGFBQWEsQ0FBQyxNQUFjLEVBQUUsU0FBaUI7UUFDckQsSUFBSSxPQUFPLEdBQVcsQ0FBQyxDQUFDO1FBQ3hCLElBQUksU0FBUyxHQUFXLE9BQU8sQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUN0RSxJQUFJLFVBQVUsR0FBVyxPQUFPLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7UUFFcEUsSUFBSSxXQUFXLEdBQVcsU0FBUyxDQUFDLE1BQU0sQ0FBQztRQUMzQyxJQUFJLElBQUksR0FBVyxVQUFVLENBQUM7UUFDOUIsSUFBSSxVQUFVLEdBQVcsQ0FBQyxDQUFDO1FBQzNCLElBQUksZUFBZSxHQUFXLENBQUMsQ0FBQztRQUdoQyxJQUFJLE1BQU0sS0FBSyxJQUFJLElBQUksTUFBTSxDQUFDLE1BQU0sS0FBSyxDQUFDO1lBQ3hDLE9BQU8sQ0FBQyxDQUFDO1FBRVgsZUFBZSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBRXRELE9BQU8sZUFBZSxJQUFJLENBQUMsRUFBRTtZQUMzQixPQUFPLEVBQUUsQ0FBQztZQUdWLFVBQVUsR0FBRyxlQUFlLEdBQUcsV0FBVyxDQUFDO1lBRTNDLGVBQWUsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxVQUFVLENBQUMsQ0FBQztTQUN2RDtRQUNELE9BQU8sT0FBTyxDQUFDO0lBQ2pCLENBQUM7SUFFTyxnQkFBZ0IsQ0FBQyxNQUFjLEVBQUUsT0FBZTtRQUN0RCxJQUFJLElBQUksR0FBVyxDQUFDLENBQUM7UUFDckIsUUFBUSxPQUFPLENBQUMsSUFBSSxFQUFFO1lBQ3BCLEtBQUssZ0JBQWdCLENBQUMsV0FBVztnQkFDL0IsSUFBSSxHQUFXLFVBQVUsQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO2dCQUNyRCxNQUFNO1lBQ1IsS0FBSyxnQkFBZ0IsQ0FBQyxJQUFJO2dCQUN4QixJQUFJLEdBQUcsUUFBUSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQzVDLE1BQU07WUFDUjtnQkFDRSxNQUFNO1NBQ1Q7UUFDRCxNQUFNLENBQUMsSUFBSSxHQUFHLGdCQUFnQixDQUFDLE9BQU8sQ0FBQztRQUN2QyxNQUFNLENBQUMsUUFBUSxHQUFHLElBQUksUUFBUSxFQUFFLENBQUM7UUFDakMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDbkMsQ0FBQztJQUVPLG1CQUFtQixDQUFDLE1BQWM7UUFDeEMsSUFBSSxPQUFPLEdBQWEsWUFBWSxDQUFDLGFBQWEsQ0FBQyxXQUFXLEVBQUUsSUFBZSxJQUFJLENBQUMsT0FBUSxDQUFDO1FBRTdGLE1BQU0sQ0FBQyxJQUFJLEdBQUcsZ0JBQWdCLENBQUMsT0FBTyxDQUFDO1FBQ3ZDLE1BQU0sQ0FBQyxPQUFPLEdBQUcsQ0FBQyxPQUFPLENBQUMsVUFBVSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDaEQsQ0FBQztJQUthLDJCQUEyQixDQUFDLFFBQWdCLEVBQUUsVUFBb0IsRUFBRSxNQUFjLEVBQUUsWUFBOEI7O1lBQzlILElBQUksS0FBSyxHQUFpQixJQUFJLFlBQVksQ0FBVyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDbkUsS0FBSyxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUMsb0JBQW9CLENBQUMsQ0FBQztZQUNuRCxLQUFLLENBQUMsc0JBQXNCLENBQUMsUUFBUSxDQUFDLENBQUM7WUFFdkMsSUFBSSxTQUFTLEdBQXlCLElBQUksb0JBQW9CLEVBQUUsQ0FBQztZQUNqRSxTQUFTLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBRXRCLElBQUksT0FBTyxHQUFpQixTQUFTLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDaEQsSUFBSSxTQUFTLEdBQVksT0FBTyxLQUFLLElBQUksSUFBSSxPQUFPLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQzNFLElBQUksR0FBRyxHQUFXLElBQUksQ0FBQztZQUN2QixJQUFJLFVBQVUsR0FBWSxLQUFLLENBQUM7WUFFaEMsSUFBSSxTQUFTLEVBQUU7Z0JBRWIsSUFBSSxrQkFBa0IsR0FBd0IsT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDLGNBQWMsRUFBRSxDQUFDO2dCQUdqRixJQUFJLE9BQU8sQ0FBQyxPQUFPLEVBQUUsS0FBTSxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUMsY0FBYyxFQUFFO29CQUMzRCxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO2dCQUVwRCxJQUFJLE9BQU8sR0FBa0IsSUFBSSxhQUFhLENBQUMsVUFBVSxDQUFDLENBQUM7Z0JBRTNELEtBQUssQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBSzFCLFlBQVksQ0FBQyxhQUFhLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztnQkFDL0MsTUFBTSxPQUFPLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7Z0JBQzNDLFlBQVksQ0FBQyxhQUFhLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztnQkFHOUMsSUFBSSxHQUFHLEdBQWUsT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLENBQUMsd0JBQXdCLEVBQUUsQ0FBQyxDQUFDO2dCQUNsRyxJQUFJLEdBQUcsS0FBSyxJQUFJLEVBQUU7b0JBQ2hCLEdBQUcsR0FBRyxNQUFNLEdBQUcsQ0FBQyxtQkFBbUIsQ0FBQyxZQUFZLENBQUMsQ0FBQztvQkFDbEQsVUFBVSxHQUFHLElBQUksQ0FBQztpQkFDbkI7Z0JBR0QsT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDLGNBQWMsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO2FBQ3REO1lBQ0QsSUFBSSxDQUFDLFVBQVUsRUFBRTtnQkFDZixJQUFJLFlBQVksS0FBSyxnQkFBZ0IsQ0FBQyxJQUFJLEVBQUU7b0JBQzFDLFlBQVksR0FBRyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUM7aUJBQ3ZDO2dCQUNELEdBQUcsR0FBRyxJQUFJLE1BQU0sQ0FBQyxZQUFZLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO2FBQzVDO1lBRUQsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNuQixDQUFDO0tBQUE7SUFLTyxrQkFBa0IsQ0FBQyxNQUFjLEVBQUUsTUFBYztRQUN2RCxJQUFJLFVBQVUsR0FBVyxNQUFNLENBQUM7UUFFaEMsSUFBSSxPQUFPLEdBQVcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUNuRCxJQUFJLENBQUMsT0FBTyxJQUFJLENBQUMsSUFBSSxPQUFPLEdBQUcsQ0FBWSxJQUFJLENBQUMsT0FBUSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksT0FBTyxLQUFLLG1CQUFtQixDQUFDLFlBQVksRUFBRTtZQUM5SCxJQUFJLElBQUksR0FBd0IsS0FBSyxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUM5RCxJQUFJLElBQUksS0FBSyxJQUFJLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRTtnQkFDekQsVUFBVSxHQUFHLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztTQUNyQztRQUVELE1BQU0sQ0FBQyxJQUFJLEdBQUcsZ0JBQWdCLENBQUMsS0FBSyxDQUFDO1FBQ3JDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsVUFBVSxDQUFDO0lBQzdCLENBQUM7SUFLTyxjQUFjLENBQUMsTUFBYyxFQUFFLE1BQWM7UUFDbkQsSUFBSSxNQUFNLEdBQVcsTUFBTSxDQUFDO1FBRTVCLElBQUksT0FBTyxHQUFXLE1BQU0sQ0FBQyxRQUFRLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDbkQsSUFBSSxDQUFDLE9BQU8sSUFBSSxDQUFDLElBQUksT0FBTyxHQUFHLENBQVksSUFBSSxDQUFDLE9BQVEsQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLE9BQU8sS0FBSyxtQkFBbUIsQ0FBQyxZQUFZLEVBQUU7WUFDOUgsSUFBSSxJQUFJLEdBQXdCLEtBQUssQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDOUQsSUFBSSxJQUFJLEtBQUssSUFBSTtnQkFDZixNQUFNLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7U0FDckM7UUFFRCxNQUFNLENBQUMsSUFBSSxHQUFHLGdCQUFnQixDQUFDLEtBQUssQ0FBQztRQUNyQyxNQUFNLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztJQUN6QixDQUFDO0lBS08sa0JBQWtCLENBQUMsTUFBYyxFQUFFLE1BQWM7UUFDdkQsSUFBSSxJQUFJLEdBQVcsQ0FBQyxDQUFDO1FBRXJCLElBQUksT0FBTyxHQUFXLE1BQU0sQ0FBQyxRQUFRLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDbkQsSUFBSSxDQUFDLE9BQU8sSUFBSSxDQUFDLElBQUksT0FBTyxHQUFjLElBQUksQ0FBQyxPQUFRLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksT0FBTyxLQUFLLG1CQUFtQixDQUFDLFlBQVksRUFBRTtZQUM1SCxJQUFJLElBQUksR0FBd0IsS0FBSyxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUM5RCxJQUFJLElBQUksS0FBSyxJQUFJLElBQWUsSUFBSSxDQUFDLFFBQVMsQ0FBQyxZQUFZLEVBQUU7Z0JBQzNELElBQUksSUFBSSxDQUFDLG1CQUFtQixDQUFDLGFBQWEsQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDLHVCQUF1QixFQUFFLEVBQUU7b0JBQzVGLElBQUksR0FBYyxJQUFJLENBQUMsUUFBUyxDQUFDLFVBQVUsQ0FBQztpQkFDN0M7cUJBQU0sSUFBSSxJQUFJLENBQUMsNkJBQTZCLEVBQUU7b0JBQzdDLElBQUksR0FBYyxJQUFJLENBQUMsUUFBUyxDQUFDLGlCQUFpQixDQUFDO2FBQ3REO1NBQ0Y7UUFDRCxLQUFLLENBQUMsaUJBQWlCLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNsRSxDQUFDO0lBTU8sb0JBQW9CLENBQUMsTUFBYyxFQUFFLE1BQWM7UUFDekQsSUFBSSxHQUFHLEdBQVcsQ0FBQyxDQUFDO1FBRXBCLElBQUksT0FBTyxHQUFXLE1BQU0sQ0FBQyxRQUFRLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDbkQsSUFBSSxDQUFDLE9BQU8sSUFBSSxDQUFDLElBQUksT0FBTyxHQUFjLElBQUksQ0FBQyxPQUFRLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksT0FBTyxLQUFLLG1CQUFtQixDQUFDLFlBQVksRUFBRTtZQUM1SCxJQUFJLElBQUksR0FBdUIsS0FBSyxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUU3RCxJQUFJLElBQUksS0FBSyxJQUFJLElBQUksSUFBSSxDQUFDLG1CQUFtQixDQUFDLGFBQWEsQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDLHVCQUF1QixFQUFFLEVBQUU7Z0JBRTdHLElBQUksQ0FBWSxJQUFJLENBQUMsUUFBUyxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUMsT0FBTyxFQUFFLEtBQUsscUJBQXFCLENBQUMsTUFBTSxFQUFFO29CQUN2RixHQUFHLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxzQkFBc0IsQ0FBQyxlQUFlLEVBQUUsQ0FBQztpQkFDckU7YUFDRjtTQUNGO1FBQ0QsS0FBSyxDQUFDLGlCQUFpQixDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDakUsQ0FBQztJQUtPLGdCQUFnQixDQUFDLE1BQWMsRUFBRSxVQUFrQjtRQUN6RCxNQUFNLENBQUMsSUFBSSxHQUFHLGdCQUFnQixDQUFDLE9BQU8sQ0FBQztRQUN2QyxNQUFNLENBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQztRQUVuQixNQUFNLENBQUMsTUFBTSxHQUFHLFlBQVksQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQztJQUN6RyxDQUFDO0lBS08sZ0JBQWdCLENBQUMsUUFBdUIsRUFBRSxNQUFjLEVBQUUsS0FBYTtRQUM3RSxJQUFJLFNBQVMsR0FBYSxJQUFJLEtBQUssQ0FBUyxLQUFLLENBQUMsQ0FBQztRQUduRCxLQUFLLElBQUksQ0FBQyxHQUFXLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxFQUFFLENBQUMsRUFBRTtZQUNwQyxTQUFTLENBQUMsS0FBSyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBVyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDcEQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFFbkMsSUFBSSxTQUFTLEdBQWtCLElBQUksYUFBYSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUdoRSxLQUFLLElBQUksQ0FBQyxHQUFXLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQ3RDLElBQUksU0FBUyxHQUFXLEdBQUcsR0FBRyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUMsSUFBSSxFQUFFLEdBQUcsR0FBRyxDQUFDO1lBQ3hELElBQUksU0FBUyxHQUFXLENBQUMsQ0FBQztZQUMxQixPQUFPLFNBQVMsS0FBSyxDQUFDLENBQUMsRUFBRTtnQkFDdkIsSUFBSSxTQUFTLEdBQVcsU0FBUyxDQUFDLFFBQVEsRUFBRSxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsU0FBUyxDQUFDLENBQUM7Z0JBQzNFLElBQUksU0FBUyxLQUFLLENBQUMsQ0FBQztvQkFDbEIsTUFBTTtnQkFFUixJQUFJLGVBQWUsR0FBWSxLQUFLLENBQUM7Z0JBQ3JDLElBQUksVUFBVSxHQUFXLFNBQVMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxHQUFHLFNBQVMsRUFBRSxTQUFTLENBQUMsQ0FBQztnQkFDbkYsSUFBSSxVQUFVLEtBQUssQ0FBQyxDQUFDO29CQUNuQixlQUFlLEdBQUcsSUFBSSxDQUFDO2dCQUd6QixJQUFJLENBQUMsZUFBZSxJQUFJLFNBQVMsS0FBSyxVQUFVLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUU7b0JBQ3pFLFNBQVMsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxTQUFTLEVBQUUsU0FBUyxHQUFHLFNBQVMsQ0FBQyxNQUFNLEdBQUcsU0FBUyxDQUFDLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsRUFBRSxTQUFTLEVBQUUsU0FBUyxHQUFHLFNBQVMsQ0FBQyxNQUFNLEdBQUcsU0FBUyxDQUFDLENBQUM7b0JBQzVLLFNBQVMsR0FBRyxTQUFTLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxNQUFNLENBQUM7aUJBQzNEOztvQkFDQyxTQUFTLEdBQUcsU0FBUyxHQUFHLENBQUMsQ0FBQzthQUM3QjtTQUNGO1FBQ0QsU0FBUyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDOUIsTUFBTSxDQUFDLE1BQU0sR0FBRyxTQUFTLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDdkMsQ0FBQztJQVNhLGlCQUFpQixDQUFDLE1BQWMsRUFBRSxVQUFvQjs7WUFDbEUsTUFBTSxDQUFDLElBQUksR0FBRyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUM7WUFDdkMsTUFBTSxDQUFDLE9BQU8sR0FBRyxNQUFNLElBQUksQ0FBQyxhQUFhLENBQUMsVUFBVSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQy9ELENBQUM7S0FBQTtJQU9hLG1CQUFtQixDQUFDLE1BQWMsRUFBRSxNQUFjOzs7OztZQUM5RCxNQUFNLENBQUMsSUFBSSxHQUFHLGdCQUFnQixDQUFDLE9BQU8sQ0FBQztZQUV2QyxJQUFJLE9BQU8sR0FBVyxNQUFNLENBQUMsUUFBUSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ25ELElBQUksQ0FBQyxPQUFPLElBQUksQ0FBQyxJQUFJLE9BQU8sR0FBRyxDQUFZLElBQUksQ0FBQyxPQUFRLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxPQUFPLEtBQUssbUJBQW1CLENBQUMsWUFBWSxFQUFFO2dCQUM5SCxJQUFJLElBQUksR0FBd0IsT0FBTSxjQUFjLFlBQUMsT0FBTyxDQUFDLENBQUM7Z0JBQzlELElBQUksSUFBSSxLQUFLLElBQUksRUFBRTtvQkFDakIsSUFBSSxPQUFPLEdBQW1CLGNBQWMsQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLEVBQUUsbUJBQW1CLENBQUMsY0FBYyxDQUFDLENBQUM7b0JBQzFILE1BQU0sSUFBSSxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7b0JBQzVDLE1BQU0sQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO2lCQUN2QjthQUNGO1FBQ0gsQ0FBQztLQUFBO0lBU2Esa0JBQWtCLENBQUMsTUFBYyxFQUFFLFVBQW9COztZQUNuRSxNQUFNLENBQUMsSUFBSSxHQUFHLGdCQUFnQixDQUFDLE9BQU8sQ0FBQztZQUN2QyxNQUFNLENBQUMsT0FBTyxHQUFHLE1BQU0sSUFBSSxDQUFDLGFBQWEsQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDOUQsQ0FBQztLQUFBO0lBT2Esb0JBQW9CLENBQUMsTUFBYyxFQUFFLE1BQWM7Ozs7O1lBQy9ELE1BQU0sQ0FBQyxJQUFJLEdBQUcsZ0JBQWdCLENBQUMsT0FBTyxDQUFDO1lBQ3ZDLElBQUksT0FBTyxHQUFXLE1BQU0sQ0FBQyxRQUFRLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDbkQsSUFBSSxDQUFDLE9BQU8sSUFBSSxDQUFDLElBQUksT0FBTyxHQUFHLENBQVksSUFBSSxDQUFDLE9BQVEsQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLE9BQU8sS0FBSyxtQkFBbUIsQ0FBQyxZQUFZLEVBQUU7Z0JBQzlILElBQUksSUFBSSxHQUF3QixPQUFNLGNBQWMsWUFBQyxPQUFPLENBQUMsQ0FBQztnQkFDOUQsSUFBSSxJQUFJLEtBQUssSUFBSSxFQUFFO29CQUNqQixJQUFJLE9BQU8sR0FBbUIsY0FBYyxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsRUFBRSxtQkFBbUIsQ0FBQyxlQUFlLENBQUMsQ0FBQztvQkFDM0gsTUFBTSxJQUFJLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQztvQkFDNUMsTUFBTSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7aUJBQ3ZCO2FBQ0Y7UUFDSCxDQUFDO0tBQUE7SUFRYSxnQkFBZ0IsQ0FBQyxNQUFjLEVBQUUsTUFBYyxFQUFFLEdBQVc7O1lBQ3hFLE1BQU0sQ0FBQyxJQUFJLEdBQUcsZ0JBQWdCLENBQUMsT0FBTyxDQUFDO1lBQ3ZDLE1BQU0sQ0FBQyxPQUFPLEdBQUcsTUFBTSxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQztRQUNwRCxDQUFDO0tBQUE7SUFPYSxrQkFBa0IsQ0FBQyxNQUFjLEVBQUUsTUFBYzs7Ozs7WUFDN0QsTUFBTSxDQUFDLElBQUksR0FBRyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUM7WUFDdkMsSUFBSSxPQUFPLEdBQVcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUNuRCxJQUFJLENBQUMsT0FBTyxJQUFJLENBQUMsSUFBSSxPQUFPLEdBQUcsQ0FBWSxJQUFJLENBQUMsT0FBUSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksT0FBTyxLQUFLLG1CQUFtQixDQUFDLFlBQVksRUFBRTtnQkFDOUgsSUFBSSxJQUFJLEdBQXdCLE9BQU0sY0FBYyxZQUFDLE9BQU8sQ0FBQyxDQUFDO2dCQUM5RCxJQUFJLElBQUksS0FBSyxJQUFJLEVBQUU7b0JBQ2pCLElBQUksT0FBTyxHQUFtQixjQUFjLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxFQUFFLG1CQUFtQixDQUFDLGFBQWEsQ0FBQyxDQUFDO29CQUN6SCxNQUFNLElBQUksQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDO29CQUM1QyxNQUFNLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztpQkFDdkI7YUFDRjtRQUNILENBQUM7S0FBQTtJQVFPLG9CQUFvQixDQUFDLE1BQWMsRUFBRSxNQUFjO1FBQ3pELElBQUksR0FBRyxHQUFXLENBQUMsQ0FBQztRQUNwQixJQUFJLE9BQU8sR0FBVyxNQUFNLENBQUMsUUFBUSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQ25ELElBQUksQ0FBQyxPQUFPLElBQUksQ0FBQyxJQUFJLE9BQU8sR0FBRyxDQUFZLElBQUksQ0FBQyxPQUFRLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxPQUFPLEtBQUssbUJBQW1CLENBQUMsWUFBWSxFQUFFO1lBQzlILElBQUksSUFBSSxHQUF3QixLQUFLLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQzlELElBQUksSUFBSSxLQUFLLElBQUksRUFBRTtnQkFDakIsR0FBRyxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUM7YUFDeEM7U0FDRjtRQUVELE1BQU0sQ0FBQyxJQUFJLEdBQUcsZ0JBQWdCLENBQUMsT0FBTyxDQUFDO1FBQ3ZDLE1BQU0sQ0FBQyxRQUFRLEdBQUcsSUFBSSxRQUFRLEVBQUUsQ0FBQztRQUNqQyxNQUFNLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNsQyxDQUFDO0lBS2EsUUFBUSxDQUFDLE1BQWMsRUFBRSxHQUFXOztZQUNoRCxJQUFJLE1BQU0sQ0FBQyxRQUFRLEtBQUssSUFBSTtnQkFDMUIsT0FBTyxLQUFLLENBQUM7WUFFZixJQUFJLEdBQUcsR0FBVyxNQUFNLENBQUMsUUFBUSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBRS9DLElBQUksR0FBRyxLQUFLLENBQUM7Z0JBQ1gsT0FBTyxLQUFLLENBQUM7WUFHZixJQUFJLEdBQUcsR0FBVSxJQUFJLENBQUMscUJBQXFCLENBQUMsR0FBRyxDQUFDLENBQUM7WUFFakQsSUFBSSxHQUFHLEtBQUssSUFBSTtnQkFDZCxPQUFPLEtBQUssQ0FBQztZQUVmLElBQUksSUFBSSxHQUF1QixHQUFHLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDN0MsSUFBSSxPQUFPLEdBQVcsR0FBRyxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQztZQUV0QyxJQUFJLE9BQU8sR0FBUyxJQUFJLElBQUksRUFBRSxDQUFDO1lBRS9CLE9BQU8sQ0FBQyxNQUFNLEdBQUcsT0FBTyxDQUFDO1lBQ3pCLE9BQU8sQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLE9BQU8sQ0FBQztZQUMxQixJQUFJLElBQUksR0FBUyxPQUFPLENBQUM7WUFFekIsSUFBSSxPQUFPLEdBQW1CLGNBQWMsQ0FBQyxnQ0FBZ0MsQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDdkcsTUFBTSxJQUFJLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUU1QyxPQUFPLElBQUksQ0FBQztRQUNkLENBQUM7S0FBQTtJQUthLGFBQWEsQ0FBQyxVQUFvQixFQUFFLE1BQWU7O1lBQy9ELElBQUksTUFBTSxHQUFXLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNuQyxJQUFJLEdBQUcsR0FBVyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFFaEMsSUFBSSxNQUFNLENBQUMsUUFBUSxLQUFLLElBQUk7Z0JBQzFCLE9BQU8sS0FBSyxDQUFDO1lBRWYsSUFBSSxHQUFHLEdBQVcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUUvQyxJQUFJLEdBQUcsS0FBSyxDQUFDO2dCQUNYLE9BQU8sS0FBSyxDQUFDO1lBRWYsSUFBSSxHQUFHLEdBQVUsSUFBSSxDQUFDLHFCQUFxQixDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBRWpELElBQUksR0FBRyxLQUFLLElBQUk7Z0JBQ2QsT0FBTyxLQUFLLENBQUM7WUFFZixJQUFJLElBQUksR0FBdUIsR0FBRyxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQzdDLElBQUksT0FBTyxHQUFXLEdBQUcsQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUM7WUFFdEMsSUFBSSxPQUFPLEdBQWMsSUFBSSxTQUFTLEVBQUUsQ0FBQztZQUN6QyxPQUFPLENBQUMsTUFBTSxHQUFXLE9BQU8sQ0FBQztZQUVqQyxJQUFJLEdBQUcsR0FBYyxPQUFPLENBQUM7WUFFN0IsSUFBSSxHQUFHLENBQUMsTUFBTTtnQkFDWixHQUFHLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztZQUVyQixJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEtBQUssZ0JBQWdCLENBQUMsS0FBSyxJQUFJLEdBQUcsQ0FBQyxJQUFJLEtBQUssZ0JBQWdCLENBQUMsT0FBTyxDQUFDLElBQUksR0FBRyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEtBQUssQ0FBQztnQkFDM0gsR0FBRyxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7aUJBRW5CO2dCQUNILElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFO29CQUNoQixJQUFJLENBQUMscUJBQXFCLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDO3dCQUMvRCxPQUFPLEtBQUssQ0FBQztvQkFFZixJQUFJLHFCQUFxQixDQUFDLDRCQUE0QixDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDO3dCQUM3RSxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztvQkFFekMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsT0FBTyxFQUFFLENBQUM7aUJBQ3pCO2FBQ0Y7WUFDRCxJQUFJLFVBQVUsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO2dCQUMzQixJQUFJLEdBQUcsR0FBVyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ2hDLElBQUksR0FBRyxDQUFDLE1BQU07b0JBQ1osR0FBRyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7Z0JBRXJCLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksS0FBSyxnQkFBZ0IsQ0FBQyxLQUFLLElBQUksR0FBRyxDQUFDLElBQUksS0FBSyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsSUFBSSxHQUFHLENBQUMsTUFBTSxDQUFDLE1BQU0sS0FBSyxDQUFDO29CQUMzSCxHQUFHLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztxQkFFbkI7b0JBQ0gsSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUU7d0JBQ2hCLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUM7NEJBQy9ELE9BQU8sS0FBSyxDQUFDO3dCQUVmLElBQUkscUJBQXFCLENBQUMsNEJBQTRCLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUM7NEJBQzdFLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO3dCQUV6QyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxPQUFPLEVBQUUsQ0FBQztxQkFDekI7aUJBQ0Y7YUFDRjs7Z0JBQ0MsR0FBRyxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7WUFFeEIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxVQUFVLElBQUksQ0FBQyxHQUFHLENBQUMsVUFBVSxFQUFFO2dCQUN0QyxJQUFJLE1BQU0sRUFBRTtvQkFDVixJQUFJLE9BQU8sR0FBbUIsY0FBYyxDQUFDLGtDQUFrQyxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQztvQkFDeEcsTUFBTSxJQUFJLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQztpQkFDN0M7cUJBQU07b0JBQ0wsSUFBSSxRQUFRLEdBQW1CLGNBQWMsQ0FBQyxpQ0FBaUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUM7b0JBQ3hHLE1BQU0sSUFBSSxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUM7aUJBQzlDO2FBQ0Y7WUFDRCxPQUFPLElBQUksQ0FBQztRQUNkLENBQUM7S0FBQTtJQVFPLGdCQUFnQixDQUFDLE1BQWMsRUFBRSxJQUFZO1FBQ25ELEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssSUFBSSxDQUFDLENBQUM7UUFFbkQsSUFBSSxNQUFNLEdBQVcsWUFBWSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzVELElBQUksTUFBTSxLQUFLLElBQUk7WUFDakIsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQzs7WUFFcEIsTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQ3JCLENBQUM7SUFRTyxnQkFBZ0IsQ0FBQyxNQUFjLEVBQUUsSUFBWSxFQUFFLEtBQWE7UUFDbEUsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxJQUFJLENBQUMsQ0FBQztRQUVuRCxNQUFNLENBQUMsSUFBSSxHQUFHLGdCQUFnQixDQUFDLE9BQU8sQ0FBQztRQUN2QyxJQUFJLFlBQVksR0FBaUIsWUFBWSxDQUFDLFFBQVEsQ0FBQztRQUV2RCxZQUFZLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDckMsTUFBTSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7SUFDeEIsQ0FBQztJQVFhLGNBQWMsQ0FBQyxNQUFjLEVBQUUsS0FBYSxFQUFFLFNBQWlCOztZQUMzRSxNQUFNLENBQUMsSUFBSSxHQUFHLGdCQUFnQixDQUFDLE9BQU8sQ0FBQztZQUN2QyxNQUFNLENBQUMsT0FBTyxHQUFHLE1BQU0sY0FBYyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDdEYsQ0FBQztLQUFBO0lBT08sY0FBYyxDQUFDLE1BQWMsRUFBRSxPQUFlO1FBQ3BELE1BQU0sQ0FBQyxNQUFNLEdBQUcsY0FBYyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzVELE1BQU0sQ0FBQyxJQUFJLEdBQUcsZ0JBQWdCLENBQUMsS0FBSyxDQUFDO0lBQ3ZDLENBQUM7SUFPTyxnQkFBZ0IsQ0FBQyxNQUFjLEVBQUUsVUFBa0IsRUFBRSxTQUFpQjtRQUM1RSxNQUFNLENBQUMsTUFBTSxHQUFHLGNBQWMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxNQUFNLEVBQUUsU0FBUyxDQUFDLFFBQVEsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDO1FBQ2xHLE1BQU0sQ0FBQyxJQUFJLEdBQUcsZ0JBQWdCLENBQUMsS0FBSyxDQUFDO0lBQ3ZDLENBQUM7SUFPTyxTQUFTLENBQUMsTUFBYyxFQUFFLEtBQWE7UUFDN0MsTUFBTSxDQUFDLElBQUksR0FBRyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUM7UUFDckMsTUFBTSxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUM7UUFFbkIsS0FBSyxJQUFJLENBQUMsR0FBVyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDN0MsSUFBSSxJQUFJLEdBQVcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEdBQUcsRUFBRSxhQUFhLEVBQUUsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxZQUFZLENBQUMsa0JBQWtCLENBQUMsQ0FBQztZQUNqSCxNQUFNLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO1NBQ3RDO0lBQ0gsQ0FBQztJQVVPLGtCQUFrQixDQUFDLEdBQVcsRUFBRSxNQUFjLEVBQUUsSUFBWSxFQUFFLEtBQWE7UUFDakYsSUFBSSxDQUFTLENBQUM7UUFDZCxJQUFJLFFBQVEsR0FBVyxZQUFZLENBQUMsUUFBUSxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNwRSxJQUFJLE1BQU0sR0FBNkIsSUFBSSxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQzdGLElBQUksS0FBYSxDQUFDO1FBQ2xCLElBQUksTUFBTSxHQUFXLElBQUksQ0FBQztRQUMxQixLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLElBQUksTUFBTSxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQ3ZELEtBQUssR0FBVyxNQUFNLENBQUMsT0FBTyxDQUFDO1lBQy9CLElBQUksR0FBRyxHQUFXLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7WUFJckMsR0FBRyxFQUFFLENBQUM7WUFDTixJQUFJLFFBQVEsR0FBVyxLQUFLLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ3ZELElBQUksR0FBRyxLQUFLLEdBQUcsRUFBRTtnQkFDZixJQUFJLElBQUksS0FBSyxRQUFRLEVBQUU7b0JBQ3JCLE1BQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO29CQUMxQixNQUFNO2lCQUNQO2FBQ0Y7aUJBRUk7Z0JBQ0gsSUFBSSxJQUFJLEtBQUssTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRTtvQkFDN0IsTUFBTSxHQUFHLFFBQVEsQ0FBQztvQkFDbEIsTUFBTTtpQkFDUDthQUNGO1NBQ0Y7UUFDRCxPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDO0lBT2EsZUFBZSxDQUFDLE1BQWMsRUFBRSxNQUFjOztZQUMxRCxNQUFNLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztZQUVyQixJQUFJLG1CQUFtQixDQUFDLHNCQUFzQixHQUFHLEVBQUUsRUFBRTtnQkFDbkQsbUJBQW1CLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztnQkFFN0MsSUFBSSxPQUFPLEdBQVcsTUFBaUIsSUFBSSxDQUFDLE9BQVEsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDLG1CQUFtQixDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUN6SSxtQkFBbUIsQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO2dCQUU3QyxJQUFJLE9BQU8sS0FBSyxJQUFJO29CQUNsQixNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO2FBQ3hCO1FBQ0gsQ0FBQztLQUFBO0lBU08sZ0JBQWdCLENBQUMsTUFBYyxFQUFFLElBQVksRUFBRSxJQUFZO1FBQ2pFLElBQUksSUFBSSxDQUFDLE9BQU87WUFDZCxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDOztZQUVsQixNQUFNLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztJQUN6QixDQUFDO0lBS08sZ0JBQWdCLENBQUMsTUFBYyxFQUFFLE1BQWM7UUFDckQsSUFBSSxPQUFPLEdBQVcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUNuRCxJQUFJLENBQUMsT0FBTyxJQUFJLENBQUMsSUFBSSxPQUFPLEdBQUcsQ0FBWSxJQUFJLENBQUMsT0FBUSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksT0FBTyxLQUFLLG1CQUFtQixDQUFDLFlBQVksRUFBRTtZQUM5SCxJQUFJLElBQUksR0FBd0IsS0FBSyxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUM5RCxJQUFJLElBQUksS0FBSyxJQUFJLEVBQUU7Z0JBQ2pCLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7YUFDbEQ7O2dCQUNDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsR0FBRyxDQUFDO1NBQ3ZCO1FBRUQsTUFBTSxDQUFDLElBQUksR0FBRyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUM7SUFDdkMsQ0FBQztJQU1PLGdCQUFnQixDQUFDLE1BQWM7UUFDckMsSUFBSSxRQUFRLEdBQVcsV0FBVyxDQUFDLFFBQVEsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUUxRCxLQUFLLENBQUMsaUJBQWlCLENBQUMsTUFBTSxFQUFFLFFBQVEsRUFBRSxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUN0RSxDQUFDO0lBTU8sa0JBQWtCLENBQUMsTUFBYztRQUN2QyxNQUFNLENBQUMsTUFBTSxHQUFHLFdBQVcsQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQztRQUMzRSxNQUFNLENBQUMsSUFBSSxHQUFHLGdCQUFnQixDQUFDLEtBQUssQ0FBQztJQUN2QyxDQUFDO0lBT08sTUFBTSxDQUFDLGFBQWEsQ0FBQyxHQUFXO1FBQ3RDLE9BQU8sR0FBRyxLQUFLLElBQUksSUFBSSxHQUFHLENBQUMsSUFBSSxLQUFLLGdCQUFnQixDQUFDLFdBQVcsSUFBSSxVQUFVLENBQUMsb0JBQW9CLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ2xILENBQUM7SUFPTyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsV0FBNkI7UUFDM0QsSUFBSSxJQUFJLEdBQW1CLFdBQVcsQ0FBQztRQUN2QyxRQUFRLFdBQVcsRUFBRTtZQUNuQixLQUFLLGdCQUFnQixDQUFDLElBQUk7Z0JBQ3hCLElBQUksR0FBRyxHQUFHLENBQUM7Z0JBQ1gsTUFBTTtZQUVSLEtBQUssZ0JBQWdCLENBQUMsT0FBTztnQkFDM0IsSUFBSSxHQUFHLEdBQUcsQ0FBQztnQkFDWCxNQUFNO1lBRVI7Z0JBQ0UsTUFBTTtTQUNUO1FBQ0QsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBT0QsZUFBZSxDQUFDLFNBQWlCO1FBQy9CLE9BQU8sWUFBWSxDQUFDLFdBQVcsQ0FBQyxlQUFlLEVBQUUsQ0FBQztJQUNwRCxDQUFDO0lBU0QsaUJBQWlCLENBQUMsUUFBZSxFQUFFLElBQW1CLEVBQUUsS0FBYTtRQUNuRSxJQUFJLElBQUksR0FBdUIsUUFBUSxDQUFDO1FBQ3hDLElBQUksSUFBSSxLQUFLLElBQUksRUFBRTtZQUNqQixJQUFJLEVBQUUsR0FBdUIsSUFBSSxDQUFDLFFBQVEsQ0FBQztZQUMzQyxJQUFJLEtBQUssR0FBeUIsSUFBSSxDQUFDO1lBQ3ZDLElBQUksVUFBVSxHQUFXLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxXQUFXLENBQUM7WUFHcEQsSUFBSSxJQUFJLENBQUMsWUFBWSxJQUFJLEtBQUssR0FBRyxDQUFDLEVBQUU7Z0JBQ2xDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO2dCQUNwQyxJQUFJLFNBQVMsR0FBVyxFQUFFLENBQUMsWUFBWSxFQUFFLENBQUM7Z0JBQzFDLFVBQVUsR0FBRyxTQUFTLEdBQUcsS0FBSyxHQUFHLENBQUMsQ0FBQztnQkFHbkMsSUFBSSxVQUFVLEdBQUcsU0FBUyxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsYUFBYSxFQUFFO29CQUM5RCxPQUFPLEtBQUssQ0FBQztnQkFHZixJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUM7b0JBQ3hDLE9BQU8sS0FBSyxDQUFDO2FBQ2hCO1lBRUQsSUFBSSxLQUFLLENBQUMsU0FBUyxFQUFFLEVBQUU7Z0JBQ3JCLElBQUksS0FBSyxDQUFDLFNBQVMsRUFBRSxFQUFFO29CQUNyQixPQUFPLEtBQUssQ0FBQztpQkFDZDtnQkFhRCxJQUFJLEdBQUcsR0FBbUIsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO2dCQUN6QyxJQUFJLFlBQVksR0FBRyxHQUFHLENBQUMsc0JBQXNCLENBQUMsVUFBVSxDQUFDLENBQUM7Z0JBQzFELElBQUksS0FBSyxDQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsWUFBWSxFQUFFO29CQUN6QyxZQUFZLENBQUMsYUFBYSxDQUFDLDBDQUEwQyxDQUFDLElBQUksRUFBRSxpQkFBaUIsQ0FBQyxpQkFBaUIsRUFBRSxVQUFVLENBQUMsQ0FBQztvQkFDN0gsT0FBTyxDQUFDLEdBQUcsQ0FBQyw2QkFBNkIsR0FBRyxLQUFLLENBQUMsSUFBSSxHQUFHLGdDQUFnQyxDQUFDLENBQUM7b0JBQzNGLE9BQU8sSUFBSSxDQUFDO2lCQUNiO3FCQUFNO29CQUVMLElBQUksS0FBSyxHQUFpQixJQUFJLFlBQVksQ0FBQyxLQUFLLEVBQUUsVUFBVSxDQUFDLENBQUM7b0JBQzlELEtBQUssQ0FBQyxXQUFXLENBQUMsaUJBQWlCLENBQUMsaUJBQWlCLENBQUMsQ0FBQztvQkFDdkQsWUFBWSxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7b0JBQzVDLE9BQU8sSUFBSSxDQUFDO2lCQUNiO2FBQ0Y7U0FDRjtRQUNELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQVFELGlCQUFpQixDQUFDLE1BQWMsRUFBRSxLQUFhO1FBQzdDLE1BQU0sQ0FBQyxJQUFJLEdBQUcsZ0JBQWdCLENBQUMsT0FBTyxDQUFDO1FBQ3ZDLE1BQU0sQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO1FBRXRCLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLEtBQUssZ0JBQWdCLENBQUMsS0FBSyxJQUFJLEtBQUssQ0FBQyxJQUFJLEtBQUssZ0JBQWdCLENBQUMsT0FBTyxDQUFDLEVBQUU7WUFDdkYsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUU7Z0JBQ2pCLElBQUksSUFBSSxHQUFXLEtBQUssQ0FBQyxNQUFNLENBQUM7Z0JBQ2hDLElBQUksSUFBSSxHQUF3QixJQUFJLENBQUMsT0FBTyxDQUFDLGNBQWMsRUFBRSxDQUFDO2dCQUc5RCxJQUFJLElBQUksQ0FBQyxjQUFjLEVBQUUsS0FBSyxJQUFJLEVBQUU7b0JBQ2xDLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7aUJBQ3RDO2FBQ0Y7U0FDRjtJQUNILENBQUM7SUFLRCxzQkFBc0IsQ0FBQyxNQUFjLEVBQUUsSUFBWTtRQUNqRCxJQUFJLFlBQVksR0FBWSxLQUFLLENBQUM7UUFDbEMsSUFBSSxJQUFJLENBQUMsUUFBUSxLQUFLLElBQUksRUFBRTtZQUMxQixLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUM5QyxPQUFPO1NBQ1I7UUFFRCxJQUFJLE1BQU0sR0FBVyxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQ2hELElBQUksQ0FBQyxNQUFNLElBQUksQ0FBQyxJQUFJLE1BQU0sR0FBRyxDQUFZLElBQUksQ0FBQyxPQUFRLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxNQUFNLEtBQUssbUJBQW1CLENBQUMsWUFBWSxFQUFFO1lBQzNILElBQUksR0FBRyxHQUF3QixLQUFLLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQzVELElBQUksTUFBTSxHQUFtQixHQUFHLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDM0MsWUFBWSxHQUFHLE1BQU0sQ0FBQyxzQkFBc0IsQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUM7U0FDbEU7UUFDRCxNQUFNLENBQUMsT0FBTyxHQUFHLFlBQVksQ0FBQztRQUM5QixNQUFNLENBQUMsSUFBSSxHQUFHLGdCQUFnQixDQUFDLE9BQU8sQ0FBQztJQUN6QyxDQUFDO0lBeUJLLDhCQUE4QixDQUFDLE1BQWMsRUFBRSxNQUFjOztZQUNqRSxJQUFJLFNBQVMsR0FBVyxNQUFNLENBQUMsUUFBUSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ3JELElBQUksTUFBTSxHQUFXLENBQUMsQ0FBQztZQUV2QixJQUFJLFNBQVMsR0FBcUIsSUFBSSxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDdkQsSUFBSSxTQUFTLEdBQXlCLElBQUksQ0FBQyxPQUFPLENBQUMsY0FBYyxFQUFHLENBQUMsdUJBQXVCLENBQUMsU0FBUyxHQUFHLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQztZQUN2SCxNQUFNLEdBQUcsU0FBUyxDQUFDLEtBQUssQ0FBQztZQUV6QixNQUFNLENBQUMsSUFBSSxHQUFHLGdCQUFnQixDQUFDLE9BQU8sQ0FBQztZQUN2QyxNQUFNLENBQUMsUUFBUSxHQUFHLElBQUksUUFBUSxFQUFFLENBQUM7WUFHakMsSUFBSSxTQUFTLEtBQUssSUFBSSxJQUFJLFNBQVMsQ0FBQyxnQkFBZ0IsRUFBRSxFQUFFO2dCQUN0RCxJQUFJLGNBQWMsR0FBYSxTQUFTLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO2dCQUN6RixJQUFJLFNBQVMsR0FBVyxPQUFPLENBQUMsS0FBSyxDQUFDLE1BQU0sY0FBYyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7Z0JBQ3ZFLElBQUksWUFBWSxHQUFXLENBQUMsQ0FBQztnQkFDN0IsSUFBSSxTQUFTLEdBQUcsQ0FBQyxFQUFFO29CQUNqQixJQUFJLE1BQU0sR0FBRyxDQUFDO3dCQUNaLFlBQVksR0FBVyxTQUFTLEdBQVcsTUFBTSxHQUFHLEdBQUcsQ0FBQzs7d0JBRXhELFlBQVksR0FBVyxTQUFTLENBQUM7aUJBQ3BDO2dCQUNELE1BQU0sQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDLFdBQVcsQ0FBUyxZQUFZLENBQUMsQ0FBQzthQUM5RDtRQUNILENBQUM7S0FBQTtJQUVELGNBQWMsQ0FBQyxJQUFXLEVBQUUsVUFBa0IsRUFBRSxNQUFnQixFQUFFLE1BQWM7UUFDOUUsTUFBTSxDQUFDLElBQUksR0FBRyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUM7UUFDckMsTUFBTSxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUM7UUFDbkIsSUFBYyxJQUFLLENBQUMsVUFBVSxFQUFFLEVBQ2hDO1lBQ0UsT0FBTyxDQUFDLEtBQUssQ0FBQyx1Q0FBdUMsQ0FBQyxDQUFDO1lBQ3ZELE9BQU87U0FDUjtRQUNELElBQUksSUFBSSxHQUE4QixJQUFLLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDdEQsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBRTNELElBQUcsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUMzQixNQUFNLENBQUMsTUFBTSxHQUFHLFFBQVEsQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxVQUFVLEVBQUUsVUFBVSxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQzVFLE1BQU0sQ0FBQyxJQUFJLEdBQUcsZ0JBQWdCLENBQUMsS0FBSyxDQUFDO1NBQ3RDO0lBQ0gsQ0FBQztJQUdELGtCQUFrQixDQUFDLFVBQWtCLEVBQUUsTUFBZ0IsRUFBRSxNQUFjO1FBRXJFLE1BQU0sQ0FBQyxJQUFJLEdBQUcsZ0JBQWdCLENBQUMsT0FBTyxDQUFDO1FBQ3ZDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsRUFBRSxDQUFDO1FBRW5CLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUMzRCxJQUFJLFdBQVcsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxRQUFRLENBQUM7UUFFaEQsV0FBVyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN0QixJQUFJLFdBQVcsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDMUIsSUFBSSxRQUFjLENBQUM7UUFDbkIsSUFBRyxXQUFXLEVBQ2Q7WUFFRSxJQUFJLFdBQVcsR0FBb0IsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLHFCQUFxQixFQUFFLENBQUM7WUFDckYsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLG1CQUFtQixDQUFDLFdBQVcsRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQztZQUMxRyxJQUFJLElBQUksR0FBVyxXQUFXLENBQUMsSUFBSSxDQUFDO1lBQ3BDLElBQUksS0FBSyxHQUFXLFdBQVcsQ0FBQyxLQUFLLENBQUM7WUFDdEMsSUFBSSxHQUFHLEdBQVcsV0FBVyxDQUFDLEdBQUcsQ0FBQztZQUVsQyxJQUFJLFdBQVcsQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLFdBQVcsQ0FBQyxLQUFLLElBQUksQ0FBQyxJQUFJLFdBQVcsQ0FBQyxHQUFHLElBQUksQ0FBQztnQkFDekUsT0FBTyxJQUFJLENBQUM7WUFDZCxRQUFRLEdBQUcsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksRUFBRSxXQUFXLENBQUMsS0FBSyxHQUFHLENBQUMsRUFBRSxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUM7WUFHOUUsSUFBRyxXQUFXLEVBQUU7Z0JBQ2QsSUFBSSxlQUFlLEdBQW9CLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO2dCQUN6RixnQkFBZ0IsQ0FBQyxVQUFVLENBQUMsZUFBZSxFQUFFLFdBQVcsQ0FBQyxDQUFDO2dCQUUxRCxRQUFRLENBQUMsUUFBUSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDeEMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQzVDLFFBQVEsQ0FBQyxVQUFVLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxDQUFDO2FBQzdDO1NBQ0Y7UUFDRCxJQUFJLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2YsTUFBTSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUVqQixNQUFNLENBQUMsT0FBTyxHQUFJLGFBQWEsQ0FBQyxTQUFTLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRyxNQUFNLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDNUcsQ0FBQztJQUVELGtCQUFrQixDQUFDLFVBQWtCLEVBQUUsTUFBYztRQUduRCxNQUFNLENBQUMsTUFBTSxHQUFHLGFBQWEsQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDdEQsQ0FBQztJQUVELHFCQUFxQixDQUFDLFVBQWtCLEVBQUUsTUFBYztRQUd0RCxNQUFNLENBQUMsSUFBSSxHQUFHLGdCQUFnQixDQUFDLE9BQU8sQ0FBQztRQUV2QyxNQUFNLENBQUMsT0FBTyxHQUFHLGFBQWEsQ0FBQyxZQUFZLENBQUMsVUFBVSxDQUFDLENBQUM7UUFBQSxDQUFDO0lBQzNELENBQUM7SUFFRCxpQkFBaUIsQ0FBQyxNQUFjO1FBRTlCLE1BQU0sQ0FBQyxJQUFJLEdBQUcsZ0JBQWdCLENBQUMsT0FBTyxDQUFDO1FBQ3ZDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO1FBQ3RCLE1BQU0sQ0FBQyxNQUFNLEdBQUcsUUFBUSxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQzFDLENBQUM7SUFHTyxnQkFBZ0IsQ0FBQyxVQUFvQixFQUFFLE9BQWUsRUFBRSxLQUFhO1FBQzNFLElBQUksUUFBUSxHQUFXLEVBQUUsQ0FBQztRQUMxQixJQUFJLElBQUksR0FBZSxJQUFJLEtBQUssRUFBTyxDQUFDO1FBRXhDLEtBQUssSUFBSSxDQUFDLEdBQVcsT0FBTyxFQUFFLENBQUMsR0FBRyxPQUFPLEdBQUcsS0FBSyxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQ3RELElBQUksaUJBQWlCLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUU7Z0JBQ3BDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7YUFDckI7aUJBQU07Z0JBQ0wsUUFBUSxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFO29CQUMxQixLQUFLLGdCQUFnQixDQUFDLEtBQUssQ0FBQztvQkFDNUIsS0FBSyxnQkFBZ0IsQ0FBQyxPQUFPO3dCQUMzQixJQUFJLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLElBQUksSUFBSSxJQUFJLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUM7NEJBQ2pFLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDOzs0QkFFaEMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQzt3QkFDdEIsTUFBTTtvQkFFUixLQUFLLGdCQUFnQixDQUFDLE9BQU87d0JBQzNCLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQzt3QkFDaEQsTUFBTTtvQkFFUixLQUFLLGdCQUFnQixDQUFDLElBQUksQ0FBQztvQkFDM0IsS0FBSyxnQkFBZ0IsQ0FBQyxJQUFJO3dCQUN4QixJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQzt3QkFDL0MsTUFBTTtvQkFFUixLQUFLLGdCQUFnQixDQUFDLE9BQU87d0JBQzNCLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDO3dCQUM5QyxNQUFNO29CQUVSLEtBQUssZ0JBQWdCLENBQUMsSUFBSTt3QkFDeEIsSUFBSSxJQUFJLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQzt3QkFDaEMsSUFBRyxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxFQUFFOzRCQUMzQjtnQ0FDRSxJQUFJLFdBQVcsR0FBVyxRQUFRLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDO2dDQUN4RCxJQUFJLFdBQVcsS0FBSyxRQUFRLENBQUMsbUJBQW1CLEVBQUU7b0NBQ2hELElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO2lDQUNyQztxQ0FBTTtvQ0FDTCxNQUFNLENBQUMsUUFBUSxDQUFDLGVBQWUsQ0FBQyxXQUFXLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsaURBQWlELENBQUMsQ0FBQztvQ0FDM0csT0FBTyxJQUFJLENBQUM7aUNBQ2I7NkJBQ0Y7eUJBQ0Y7d0JBQ0QsTUFBTTtvQkFDUixLQUFLLGdCQUFnQixDQUFDLElBQUksQ0FBQztvQkFDM0I7d0JBQ0UsTUFBTSxDQUFDLFFBQVEsQ0FBQyxlQUFlLENBQUMsWUFBWSxHQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFFLDZCQUE2QixDQUFFLENBQUM7d0JBQ3ZGLE9BQU8sSUFBSSxDQUFDO2lCQUNmO2FBQ0Y7U0FDRjtRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQzs7QUEzZ0xjLGdDQUFZLEdBQVcsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM5QyxnQ0FBWSxHQUFXLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFJdEQsOEJBQVUsR0FBVyxDQUFDLENBQUM7QUFDdkIsb0NBQWdCLEdBQVcsQ0FBQyxDQUFDO0FBQzdCLG1DQUFlLEdBQVcsQ0FBQyxDQUFDO0FBRXBCLDBDQUFzQixHQUFXLENBQUMsQ0FBQztBQUczQywrQ0FBMkIsR0FBVyxJQUFJLENBQUM7QUFzZ0xwRCxNQUFNLE9BQU8sa0JBQW1CLFNBQVEsU0FBUztJQUcvQyxZQUFZLElBQXNCO1FBQ2hDLEtBQUssRUFBRSxDQUFDO1FBSEYsVUFBSyxHQUFxQixnQkFBZ0IsQ0FBQyxJQUFJLENBQUM7UUFJdEQsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7UUFDbEIsSUFBSSxDQUFDLElBQUksR0FBRyxvQkFBb0IsQ0FBQztJQUNuQyxDQUFDO0lBRUQsT0FBTztRQUNMLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQztJQUNwQixDQUFDO0NBQ0Y7QUFVRCxNQUFNLE9BQU8sYUFBYTtJQVV4QixZQUFZLFFBQW1CLEVBQUUsY0FBdUI7UUFUaEQsY0FBUyxHQUFjLElBQUksQ0FBQztRQUM1QixhQUFRLEdBQVksSUFBSSxDQUFDO1FBQ3pCLG9CQUFlLEdBQVksS0FBSyxDQUFDO1FBQ2pDLFlBQU8sR0FBWSxLQUFLLENBQUM7UUFDekIsWUFBTyxHQUFXLENBQUMsQ0FBQztRQU0xQixJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksU0FBUyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNoRCxLQUFLLElBQUksR0FBRyxHQUFXLENBQUMsRUFBRSxHQUFHLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxHQUFHO1lBQzFELElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBRTFCLEtBQUssSUFBSSxDQUFDLEdBQVcsQ0FBQyxFQUFFLENBQUMsR0FBRyxRQUFRLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRTtZQUM5QyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUVsQyxJQUFJLENBQUMsZUFBZSxHQUFHLGNBQWMsQ0FBQztRQUN0QyxJQUFJLENBQUMsUUFBUSxHQUFHLFdBQVcsQ0FBQyxRQUFRLENBQUMsVUFBVSxFQUFFLENBQUM7SUFDcEQsQ0FBQztJQUtELGFBQWE7UUFDWCxJQUFJLElBQUksQ0FBQyxlQUFlO1lBQ3RCLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO0lBQ3hCLENBQUM7SUFLRCxlQUFlO1FBQ2IsSUFBSSxJQUFJLENBQUMsZUFBZSxFQUFFO1lBQ3hCLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO1NBQ3RCO0lBQ0gsQ0FBQztJQUtELE1BQU07UUFDSixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUM7SUFDdEIsQ0FBQztJQU9ELGNBQWM7UUFDWixJQUFJLEdBQUcsR0FBVyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBVSxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQVcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztRQUM5SSxJQUFJLENBQUMsT0FBTyxJQUFJLENBQUMsQ0FBQztRQUVsQixPQUFPLEdBQUcsQ0FBQztJQUNiLENBQUM7SUFPRCxjQUFjO1FBQ1osSUFBSSxFQUFFLEdBQVcsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQVUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFXLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7UUFDN0ksSUFBSSxDQUFDLE9BQU8sSUFBSSxDQUFDLENBQUM7UUFFbEIsSUFBSSxFQUFFLEdBQVcsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQVUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFXLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7UUFDN0ksSUFBSSxDQUFDLE9BQU8sSUFBSSxDQUFDLENBQUM7UUFFbEIsSUFBSSxHQUFHLEdBQW1CLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsbUJBQW1CLENBQUMsT0FBTyxDQUFTLEVBQUUsRUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsbUJBQW1CLENBQUMsT0FBTyxDQUFTLEVBQUUsRUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ3RKLE9BQU8sR0FBRyxDQUFDO0lBQ2IsQ0FBQztJQU1ELGNBQWM7UUFDWixJQUFJLEVBQUUsR0FBVyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBVSxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQVcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztRQUM3SSxJQUFJLENBQUMsT0FBTyxJQUFJLENBQUMsQ0FBQztRQUVsQixJQUFJLEVBQUUsR0FBVyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBVSxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQVcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztRQUM3SSxJQUFJLENBQUMsT0FBTyxJQUFJLENBQUMsQ0FBQztRQUVsQixJQUFJLEVBQUUsR0FBVyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBVSxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQVcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztRQUM3SSxJQUFJLENBQUMsT0FBTyxJQUFJLENBQUMsQ0FBQztRQUVsQixJQUFJLEVBQUUsR0FBVyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBVSxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQVcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztRQUM3SSxJQUFJLENBQUMsT0FBTyxJQUFJLENBQUMsQ0FBQztRQUVsQixJQUFJLEdBQUcsR0FBVyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxtQkFBbUIsQ0FBQyxPQUFPLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLG1CQUFtQixDQUFDLE9BQU8sQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUM1SCxPQUFPLEdBQUcsQ0FBQztJQUNiLENBQUM7SUFTRCxTQUFTLENBQUMsR0FBVyxFQUFFLFNBQWtCLEVBQUUsU0FBa0I7UUFDM0QsSUFBSSxHQUFHLEdBQVcsRUFBRSxDQUFDO1FBQ3JCLElBQUksS0FBYSxDQUFDO1FBRWxCLElBQUksU0FBUyxLQUFLLEtBQUssRUFBRTtZQUN2QixLQUFLLEdBQUcsR0FBRyxDQUFDO1lBQ1osSUFBSSxPQUFPLEdBQWEsSUFBSSxLQUFLLENBQVMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUNqRSxLQUFLLElBQUksQ0FBQyxHQUFXLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDO2dCQUMxRCxPQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFFdEQsR0FBRyxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPLEVBQUUsR0FBRyxDQUFDLENBQUM7U0FDckQ7YUFBTTtZQUNMLEtBQUssR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO1lBRWhCLElBQUksR0FBRyxHQUFlLElBQUksVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBRTVDLElBQUksU0FBUyxHQUFXLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUU1RSxLQUFLLElBQUksQ0FBQyxHQUFXLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsU0FBUyxFQUFFO2dCQUM5RSxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRTtvQkFDbEIsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQVcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7b0JBQ3RELEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBVyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO2lCQUN2RDs7b0JBQ0MsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQVcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUNyRDtZQUVELElBQUk7Z0JBQ0YsR0FBRyxHQUFHLFFBQVEsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO2FBQ3REO1lBQUMsT0FBTyxFQUFFLEVBQUU7Z0JBQ1gsSUFBSSxFQUFFLFlBQVksU0FBUyxFQUFFO29CQUMzQixNQUFNLENBQUMsUUFBUSxDQUFDLG1CQUFtQixDQUFDLEVBQUUsQ0FBQyxDQUFDO2lCQUN6Qzs7b0JBQ0MsTUFBTSxFQUFFLENBQUM7YUFDWjtTQUNGO1FBQ0QsSUFBSSxTQUFTLEVBQUU7WUFDYixJQUFJLENBQUMsT0FBTyxJQUFJLEtBQUssQ0FBQztTQUN2QjtRQUNELE9BQU8sR0FBRyxDQUFDO0lBQ2IsQ0FBQztJQWNPLGlCQUFpQjtRQUN2QixJQUFJLENBQUMsT0FBTyxJQUFJLG1CQUFtQixDQUFDLHFCQUFxQixDQUFDO0lBQzVELENBQUM7SUFNRCxTQUFTO1FBQ1AsSUFBSSxHQUFHLEdBQWE7WUFDbEIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLE9BQU8sR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQztTQUNqSyxDQUFDO1FBQ0YsSUFBSSxHQUFHLEdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFVLEdBQUcsQ0FBQyxDQUFDLENBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQVcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDNUUsR0FBRyxLQUFLLENBQUMsQ0FBQztRQUNWLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBVSxHQUFHLENBQUMsQ0FBQyxDQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFXLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMxRSxJQUFJLENBQUMsT0FBTyxJQUFJLG1CQUFtQixDQUFDLFlBQVksQ0FBQztRQUVqRCxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztRQUV6QixPQUFPLEdBQUcsQ0FBQztJQUNiLENBQUM7SUFNRCxTQUFTO1FBQ1AsSUFBSSxJQUFJLEdBQVcsQ0FBQyxDQUFDO1FBRXJCLElBQUksSUFBSSxDQUFDLFFBQVE7WUFDZixJQUFJLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQztRQUdsQixJQUFJLEdBQUcsR0FBVyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQVUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBVyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUNuSyxHQUFHLEtBQUssQ0FBQyxDQUFDO1FBQ1YsSUFBSSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7UUFDaEIsR0FBRyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFVLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQVcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMxSixJQUFJLENBQUMsT0FBTyxJQUFJLG1CQUFtQixDQUFDLFlBQVksQ0FBQztRQUVqRCxPQUFPLEdBQUcsQ0FBQztJQUNiLENBQUM7SUFRRCxjQUFjLENBQUMsR0FBVyxFQUFFLFNBQWtCO1FBQzVDLElBQUksS0FBSyxHQUFhLElBQUksUUFBUSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFBRSxHQUFHLENBQUMsQ0FBQztRQUN0RSxJQUFJLFNBQVM7WUFDWCxJQUFJLENBQUMsT0FBTyxJQUFJLEdBQUcsQ0FBQztRQUN0QixPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFLRCxZQUFZO1FBQ1IsSUFBSSxVQUFVLEdBQVcsQ0FBQyxDQUFDO1FBQzNCLElBQUksT0FBZ0IsQ0FBQztRQUNyQixJQUFJLEdBQUcsQ0FBQztRQUVSLE9BQU8sVUFBVSxHQUFHLENBQUMsRUFBRTtZQUNuQixVQUFVLEVBQUUsQ0FBQztZQUNiLElBQUksTUFBTSxHQUFXLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUN0QyxRQUFRLE1BQU0sRUFBRTtnQkFJWixLQUFLLG1CQUFtQixDQUFDLFFBQVEsQ0FBQztnQkFDbEMsS0FBSyxtQkFBbUIsQ0FBQyxRQUFRO29CQUM3QixHQUFHLEdBQUcsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO29CQUM1QixJQUFJLENBQUMsT0FBTyxJQUFJLENBQUMsR0FBRyxHQUFHLGNBQWMsQ0FBQyxhQUFhLENBQUMsQ0FBQztvQkFJckQsR0FBRyxHQUFHLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztvQkFDNUIsSUFBSSxDQUFDLE9BQU8sSUFBSSxHQUFHLENBQUM7b0JBQ3BCLE1BQU07Z0JBRVYsS0FBSyxtQkFBbUIsQ0FBQyxZQUFZO29CQUNqQyxHQUFHLEdBQUcsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO29CQUM1QixJQUFJLENBQUMsT0FBTyxJQUFJLEdBQUcsQ0FBQztvQkFDcEIsTUFBTTtnQkFNVixLQUFLLG1CQUFtQixDQUFDLFFBQVEsQ0FBQztnQkFDbEMsS0FBSyxtQkFBbUIsQ0FBQyxRQUFRLENBQUM7Z0JBQ2xDLEtBQUssbUJBQW1CLENBQUMsUUFBUSxDQUFDO2dCQUNsQyxLQUFLLG1CQUFtQixDQUFDLFFBQVEsQ0FBQztnQkFDbEMsS0FBSyxtQkFBbUIsQ0FBQyxRQUFRLENBQUM7Z0JBQ2xDLEtBQUssbUJBQW1CLENBQUMsUUFBUTtvQkFDN0IsR0FBRyxHQUFHLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztvQkFDNUIsSUFBSSxDQUFDLE9BQU8sSUFBSSxHQUFHLENBQUM7b0JBQ3BCLE1BQU07Z0JBTVYsS0FBSyxtQkFBbUIsQ0FBQyxRQUFRLENBQUM7Z0JBQ2xDLEtBQUssbUJBQW1CLENBQUMsUUFBUTtvQkFDN0IsR0FBRyxHQUFHLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztvQkFDNUIsSUFBSSxDQUFDLE9BQU8sSUFBSSxHQUFHLENBQUM7b0JBQ3BCLEdBQUcsR0FBRyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7b0JBQzVCLElBQUksQ0FBQyxPQUFPLElBQUksR0FBRyxDQUFDO29CQUNwQixNQUFNO2dCQU1WLEtBQUssbUJBQW1CLENBQUMsUUFBUTtvQkFDN0IsSUFBSSxDQUFDLE9BQU8sSUFBSSxDQUFDLENBQUM7b0JBQ2xCLE1BQU07Z0JBTVYsS0FBSyxtQkFBbUIsQ0FBQyxRQUFRO29CQUU3QixJQUFJLENBQUMsT0FBTyxJQUFJLENBQUMsbUJBQW1CLENBQUMsVUFBVSxHQUFHLG1CQUFtQixDQUFDLGVBQWUsQ0FBQyxDQUFDO29CQUN2RixNQUFNO2dCQUVWLEtBQUssbUJBQW1CLENBQUMsV0FBVztvQkFDaEMsSUFBSSxDQUFDLE9BQU8sSUFBSSxDQUFDLG1CQUFtQixDQUFDLFVBQVUsR0FBRyxtQkFBbUIsQ0FBQyxlQUFlLENBQUMsQ0FBQztvQkFDdkYsTUFBTTtnQkFFVixLQUFLLG1CQUFtQixDQUFDLFVBQVU7b0JBQy9CLElBQUksQ0FBQyxPQUFPLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxVQUFVLEdBQUcsbUJBQW1CLENBQUMsZUFBZSxDQUFDLENBQUM7b0JBQ3ZGLE1BQU07Z0JBRVYsS0FBSyxtQkFBbUIsQ0FBQyxvQkFBb0I7b0JBQ3pDLEdBQUcsR0FBRyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7b0JBQzVCLElBQUksQ0FBQyxPQUFPLElBQUksR0FBRyxDQUFDO29CQUVwQixHQUFHLEdBQUcsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO29CQUM1QixJQUFJLENBQUMsT0FBTyxJQUFJLEdBQUcsQ0FBQztvQkFDcEIsTUFBTTtnQkFlVjtvQkFDSSxPQUFPLEdBQUcsY0FBYyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztvQkFDekMsSUFBSSxPQUFPLENBQUMsU0FBUyxHQUFHLENBQUM7d0JBQ3JCLFVBQVUsSUFBSSxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7O3dCQUVwQyxVQUFVLElBQUksT0FBTyxDQUFDLFNBQVMsQ0FBQztvQkFDcEMsTUFBTTthQUNiO1NBQ0o7SUFDTCxDQUFDO0NBQ0Y7QUFFRCxNQUFNLGdCQUFnQjtJQUF0QjtRQUNFLGNBQVMsR0FBVyxDQUFDLENBQUM7UUFDdEIsWUFBTyxHQUFXLG1CQUFtQixDQUFDLFdBQVcsQ0FBQztJQUNwRCxDQUFDO0NBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIEJsb2JUeXBlLFxyXG4gIENvbW1hbmRzLFxyXG4gIERhdGFNb2RpZmljYXRpb25UeXBlcyxcclxuICBEYXRlQnJlYWtQYXJhbXMsXHJcbiAgRGlzcGxheUNvbnZlcnRvcixcclxuICBFeHByZXNzaW9uSW50ZXJmYWNlLFxyXG4gIEV4cFZhbCxcclxuICBHdWlFeHByZXNzaW9uRXZhbHVhdG9yLFxyXG4gIElUYXNrLFxyXG4gIE1nQ29udHJvbEJhc2UsXHJcbiAgTWdGb3JtQmFzZSxcclxuICBOVU1fVFlQRSxcclxuICBQSUMsXHJcbiAgUHJvcGVydHksXHJcbiAgUHJvcEludGVyZmFjZSxcclxuICBUaW1lQnJlYWtQYXJhbXMsXHJcbiAgVmVjdG9yVHlwZVxyXG59IGZyb20gJ0BtYWdpYy14cGEvZ3VpJztcclxuaW1wb3J0IHtcclxuICBDb25zdGFudHMsXHJcbiAgSW50ZXJuYWxJbnRlcmZhY2UsXHJcbiAgTG9nZ2VyLFxyXG4gIE1pc2MsXHJcbiAgTXNnSW50ZXJmYWNlLFxyXG4gIFBJQ0ludGVyZmFjZSxcclxuICBTdG9yYWdlQXR0cmlidXRlLFxyXG4gIFN0b3JhZ2VBdHRyaWJ1dGVDaGVjayxcclxuICBTdHJVdGlsLFxyXG4gIFV0aWxEYXRlSnBuLFxyXG4gIFV0aWxTdHJCeXRlTW9kZVxyXG59IGZyb20gJ0BtYWdpYy14cGEvdXRpbHMnO1xyXG5pbXBvcnQge1xyXG4gIEFwcGxpY2F0aW9uRXhjZXB0aW9uLFxyXG4gIEFycmF5X0VudW1lcmF0b3IsXHJcbiAgRGVidWcsXHJcbiAgRW5jb2RpbmcsXHJcbiAgRXhjZXB0aW9uLFxyXG4gIExpc3QsXHJcbiAgTkNoYXIsXHJcbiAgTk51bWJlcixcclxuICBOU3RyaW5nLFxyXG4gIFJlZlBhcmFtLFxyXG4gIFN0YWNrLFxyXG4gIFN0cmluZ0J1aWxkZXJcclxufSBmcm9tICdAbWFnaWMteHBhL21zY29yZWxpYic7XHJcbmltcG9ydCB7IEV4cHJlc3Npb25Mb2NhbEpwbiB9IGZyb20gJy4vRXhwcmVzc2lvbkxvY2FsSnBuJztcclxuaW1wb3J0IHsgRmllbGQgfSBmcm9tICcuLi9kYXRhL0ZpZWxkJztcclxuaW1wb3J0IHsgRXhwRGVzYywgRXhwcmVzc2lvbkRpY3QgfSBmcm9tICcuL0V4cHJlc3Npb25EaWN0JztcclxuaW1wb3J0IHsgRGF0YVZpZXdDb21tYW5kVHlwZSB9IGZyb20gJy4uL2NvbW1hbmRzL0NsaWVudFRvU2VydmVyL0RhdGF2aWV3Q29tbWFuZCc7XHJcbmltcG9ydCB7IFJ1blRpbWVFdmVudCB9IGZyb20gJy4uL2V2ZW50L1J1blRpbWVFdmVudCc7XHJcbmltcG9ydCB7IEV2ZW50SGFuZGxlclBvc2l0aW9uIH0gZnJvbSAnLi4vZXZlbnQvRXZlbnRIYW5kbGVyUG9zaXRpb24nO1xyXG5pbXBvcnQgeyBFdmVudEhhbmRsZXIgfSBmcm9tICcuLi9ldmVudC9FdmVudEhhbmRsZXInO1xyXG5pbXBvcnQgeyBBcmd1bWVudHNMaXN0IH0gZnJvbSAnLi4vcnQvQXJndW1lbnRzTGlzdCc7XHJcbmltcG9ydCB7IEV4cHJlc3Npb24gfSBmcm9tICcuL0V4cHJlc3Npb24nO1xyXG5pbXBvcnQgeyBJQ2xpZW50Q29tbWFuZCB9IGZyb20gJy4uL2NvbW1hbmRzL0lDbGllbnRDb21tYW5kJztcclxuaW1wb3J0IHsgQ29tbWFuZEZhY3RvcnkgfSBmcm9tICcuLi9jb21tYW5kcy9DbGllbnRUb1NlcnZlci9Db21tYW5kRmFjdG9yeSc7XHJcbmltcG9ydCB7IFNvcnQgfSBmcm9tICcuLi90YXNrcy9zb3J0L1NvcnQnO1xyXG5pbXBvcnQgeyBUYXNrX1N1YmZvcm1FeGVjTW9kZUVudW0sIFRhc2tCYXNlLCBVc2VyUmFuZ2UgfSBmcm9tICcuLi90YXNrcy9UYXNrQmFzZSc7XHJcbmltcG9ydCB7IEdsb2JhbFBhcmFtcyB9IGZyb20gJy4vR2xvYmFsUGFyYW1zVGFibGUnO1xyXG5pbXBvcnQgeyBVc2VyRGV0YWlscyB9IGZyb20gJy4uL3NlY3VyaXR5L1VzZXJEZXRhaWxzJztcclxuaW1wb3J0IHsgT3BlcmF0aW9uIH0gZnJvbSAnLi4vcnQvT3BlcmF0aW9uJztcclxuaW1wb3J0IHsgQ29uc3RJbnRlcmZhY2UgfSBmcm9tICcuLi9Db25zdEludGVyZmFjZSc7XHJcbmltcG9ydCB7IE1nQ29udHJvbCB9IGZyb20gJy4uL2d1aS9NZ0NvbnRyb2wnO1xyXG5pbXBvcnQgeyBEYXRhVmlldyB9IGZyb20gJy4uL2RhdGEvRGF0YVZpZXcnO1xyXG5pbXBvcnQgeyBSZWNvcmQgfSBmcm9tICcuLi9kYXRhL1JlY29yZCc7XHJcbmltcG9ydCB7IE1nRm9ybSB9IGZyb20gJy4uL2d1aS9NZ0Zvcm0nO1xyXG5pbXBvcnQgeyBMYW5ndWFnZURhdGEgfSBmcm9tICcuLi9lbnYvTGFuZ3VhZ2VEYXRhJztcclxuaW1wb3J0IHsgRW52UGFyYW1zVGFibGUgfSBmcm9tICcuLi9lbnYvRW52VmFyaWFibGVzVGFibGUnO1xyXG5pbXBvcnQgeyBFbnZpcm9ubWVudCB9IGZyb20gJy4uL2Vudi9FbnZpcm9ubWVudCc7XHJcbmltcG9ydCB7IExhc3RGb2N1c2VkTWFuYWdlciB9IGZyb20gJy4uL3J0L0xhc3RGb2N1c2VkTWFuYWdlcic7XHJcbmltcG9ydCB7IFNlcnZlckNvbmZpZyB9IGZyb20gJy4uL1NlcnZlckNvbmZpZyc7XHJcbmltcG9ydCB7IEFjY2Vzc0hlbHBlciB9IGZyb20gJy4uL0FjY2Vzc0hlbHBlcic7XHJcbmltcG9ydCB7IGlzTnVsbE9yVW5kZWZpbmVkIH0gZnJvbSAndXRpbCc7XHJcbmltcG9ydCB7IENvb2tpZVNlcnZpY2UgfSBmcm9tICcuLi91dGlsL2Nvb2tpZS5zZXJ2aWNlJztcclxuXHJcbmV4cG9ydCBjbGFzcyBFeHByZXNzaW9uRXZhbHVhdG9yIGV4dGVuZHMgR3VpRXhwcmVzc2lvbkV2YWx1YXRvciB7XHJcblxyXG4gIHByaXZhdGUgc3RhdGljIEFTVEVSSVNLX0NIUjogc3RyaW5nID0gU3RyaW5nLmZyb21DaGFyQ29kZSgxKTtcclxuICBwcml2YXRlIHN0YXRpYyBRVUVTVElPTl9DSFI6IHN0cmluZyA9IFN0cmluZy5mcm9tQ2hhckNvZGUoMik7XHJcblxyXG4gIC8vIFNvbWUgaXRlbXMgaW4gcG9saXNoIGFyZSBzYXZlZCBhcyBzaG9ydCBvciBsb25nLlxyXG4gIC8vIEZvbGxvd2luZyBjb25zdGFudHMgYXJlIHVzZWQgd2hpbGUgcmVhZGluZyB0aGUgcG9saXNoZWQgZXhwcmVzc2lvbi5cclxuICBzdGF0aWMgUEFSRU5UX0xFTjogbnVtYmVyID0gMjsgLy8gMiBieXRlc1xyXG4gIHN0YXRpYyBTSE9SVF9PQkpFQ1RfTEVOOiBudW1iZXIgPSAyOyAvLyAyIGJ5dGVzXHJcbiAgc3RhdGljIExPTkdfT0JKRUNUX0xFTjogbnVtYmVyID0gNDsgLy8gNCBieXRlc1xyXG5cclxuICBwcml2YXRlIHN0YXRpYyBfcmVjdXJzaXZlRXhwQ2FsY0NvdW50OiBudW1iZXIgPSAwO1xyXG4gIHByaXZhdGUgX2NoYXJzVG9UcmltOiBzdHJpbmdbXSA9IFsnICcsICdcXDAnXTtcclxuICBwcml2YXRlIF9leHByZXNzaW9uTG9jYWxKcG46IEV4cHJlc3Npb25Mb2NhbEpwbiA9IG51bGw7XHJcbiAgc3RhdGljIEVycm9yVG9CZVdyaXR0ZW5JblNlcnZlckxvZzogc3RyaW5nID0gbnVsbDtcclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIENUT1JcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgc3VwZXIoKTtcclxuICAgIHRoaXMuX2V4cHJlc3Npb25Mb2NhbEpwbiA9IChVdGlsU3RyQnl0ZU1vZGUuaXNMb2NhbGVEZWZMYW5nSlBOKCkgPyBuZXcgRXhwcmVzc2lvbkxvY2FsSnBuKHRoaXMpIDogbnVsbCk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgR2V0IGEgYmFzaWMgdmFsdWUgZnJvbSB0aGUgZXhwcmVzc2lvbiBzdHJpbmdcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiZXhwU3RyVHJhY2tlclwiPnRoZSBleHByZXNzaW9uIHByb2Nlc3NlZDwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJvcENvZGVcIj50aGUgb3Bjb2RlIG9mIHRoZSBleHByZXNzaW9uPC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+IHRoZSBiYXNpYyBkYXRhIHZhbHVlIGFzIGFuIEV4cFZhbCBpbnN0YW5jZTwvcmV0dXJucz5cclxuICBwcml2YXRlIGdldEV4cEJhc2ljVmFsdWUoZXhwU3RyVHJhY2tlcjogRXhwU3RyVHJhY2tlciwgb3BDb2RlOiBudW1iZXIpOiBFeHBWYWwge1xyXG4gICAgbGV0IFZhbDogRXhwVmFsID0gbmV3IEV4cFZhbCgpO1xyXG4gICAgbGV0IGxlbjogbnVtYmVyO1xyXG4gICAgbGV0IHBhcmVudDogbnVtYmVyLCB2ZWU6IG51bWJlcjtcclxuICAgIGxldCBmaWVsZDogRmllbGQ7XHJcbiAgICBsZXQgZmxkVmFsOiBzdHJpbmc7XHJcblxyXG4gICAgc3dpdGNoIChvcENvZGUpIHtcclxuICAgICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgICAgLy8gU3RyaW5nIFZhbHVlXHJcbiAgICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfQTpcclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9IOlxyXG4gICAgICAgIFZhbC5BdHRyID0gU3RvcmFnZUF0dHJpYnV0ZS5VTklDT0RFO1xyXG4gICAgICAgIGxlbiA9IGV4cFN0clRyYWNrZXIuZ2V0NEJ5dGVOdW1iZXIoKTtcclxuICAgICAgICBWYWwuU3RyVmFsID0gZXhwU3RyVHJhY2tlci5nZXRTdHJpbmcobGVuLCB0cnVlLCB0cnVlKTsgLy8gZmlyc3QgdmFsdWUgaXMgdW5pY29kZVxyXG4gICAgICAgIC8vIHNpbmNlIHRoZSBzZXJ2ZXIgc2VuZHMgdXMgYm90aCBVbmljb2RlIHN0cmluZyBBbnNpIHN0cmluZyBmb3JcclxuICAgICAgICAvLyBlYWNoIHN0cmluZyBpbiB0aGUgZXhwcmVzc2lvbiwgYW5kIHRoZSBjbGllbnQgdXNlcyBvbmx5IHVuaWNvZGUsXHJcbiAgICAgICAgLy8gd2Ugd2lsbCBkaXJlZ2FyZCB0aGUgQW5zaSBzdHJpbmdcclxuICAgICAgICBsZW4gPSBleHBTdHJUcmFja2VyLmdldDRCeXRlTnVtYmVyKCk7XHJcbiAgICAgICAgZXhwU3RyVHJhY2tlci5nZXRTdHJpbmcobGVuLCB0cnVlLCBmYWxzZSk7IC8vIHNlY29uZCB2YWx1ZSBpcyBhbnNpXHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX0VYVF9BOlxyXG4gICAgICAgIFZhbC5BdHRyID0gU3RvcmFnZUF0dHJpYnV0ZS5BTFBIQTtcclxuICAgICAgICBsZW4gPSBleHBTdHJUcmFja2VyLmdldDRCeXRlTnVtYmVyKCk7XHJcbiAgICAgICAgZXhwU3RyVHJhY2tlci5nZXRTdHJpbmcobGVuLCB0cnVlLCB0cnVlKTsgLy8gZmlyc3QgdmFsdWUgaXMgdW5pY29kZVxyXG4gICAgICAgIC8vIHNpbmNlIHRoZSBzZXJ2ZXIgc2VuZHMgdXMgYm90aCBVbmljb2RlIHN0cmluZyBBbnNpIHN0cmluZyBmb3JcclxuICAgICAgICAvLyBlYWNoIHN0cmluZyBpbiB0aGUgZXhwcmVzc2lvbiwgYW5kIHRoZSBjbGllbnQgdXNlcyBvbmx5IHVuaWNvZGUsXHJcbiAgICAgICAgLy8gd2Ugd2lsbCBkaXJlZ2FyZCB0aGUgQW5zaSBzdHJpbmdcclxuICAgICAgICBsZW4gPSBleHBTdHJUcmFja2VyLmdldDRCeXRlTnVtYmVyKCk7XHJcbiAgICAgICAgVmFsLlN0clZhbCA9IGV4cFN0clRyYWNrZXIuZ2V0U3RyaW5nKGxlbiwgdHJ1ZSwgZmFsc2UpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgICAgLy8gTWFnaWMgTnVtYmVyIHZhbHVlXHJcbiAgICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfTjpcclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9UOlxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX0Q6XHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfRTpcclxuICAgICAgICBpZiAob3BDb2RlID09PSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9EKVxyXG4gICAgICAgICAgVmFsLkF0dHIgPSBTdG9yYWdlQXR0cmlidXRlLkRBVEU7XHJcbiAgICAgICAgZWxzZSBpZiAob3BDb2RlID09PSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9UKVxyXG4gICAgICAgICAgVmFsLkF0dHIgPSBTdG9yYWdlQXR0cmlidXRlLlRJTUU7XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgICAgVmFsLkF0dHIgPSBTdG9yYWdlQXR0cmlidXRlLk5VTUVSSUM7XHJcbiAgICAgICAgbGVuID0gZXhwU3RyVHJhY2tlci5nZXQyQnl0ZU51bWJlcigpO1xyXG4gICAgICAgIFZhbC5NZ051bVZhbCA9IGV4cFN0clRyYWNrZXIuZ2V0TWFnaWNOdW1iZXIobGVuLCB0cnVlKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAgIC8vIExvZ2ljYWwgVmFsdWVcclxuICAgICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9MOlxyXG4gICAgICAgIFZhbC5BdHRyID0gU3RvcmFnZUF0dHJpYnV0ZS5CT09MRUFOO1xyXG4gICAgICAgIFZhbC5Cb29sVmFsID0gKGV4cFN0clRyYWNrZXIuZ2V0MkJ5dGVOdW1iZXIoKSA9PT0gMSk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgICAvLyBWYXJpYWJsZSBWYWx1ZVxyXG4gICAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX1Y6XHJcbiAgICAgICAgcGFyZW50ID0gZXhwU3RyVHJhY2tlci5nZXRWYXJJZHgoKTtcclxuICAgICAgICB2ZWUgPSBleHBTdHJUcmFja2VyLmdldDRCeXRlTnVtYmVyKCk7XHJcbiAgICAgICAgZmllbGQgPSA8RmllbGQ+dGhpcy5FeHBUYXNrLmdldEZpZWxkRGVmKHBhcmVudCwgdmVlIC0gMSk7XHJcbiAgICAgICAgVmFsLkF0dHIgPSBmaWVsZC5nZXRUeXBlKCk7XHJcbiAgICAgICAgLyogRm9yIFZlY3RvciwgbnVsbCBhbGxvd2VkIGlzIGFsd2F5cyB0cnVlLiBJZiB0aGUgZmllbGQgaXMgYSB2ZWN0b3IsIHRoZSAgKi9cclxuICAgICAgICAvKiBmaWVsZC5udWxsQWxsb3dlZCgpIGFjdHVhbGx5IHJldHVybnMgdGhlIG51bGwgYWxsb3dlZCBmb3IgdGhlIHZlYyBjZWxsLiAqL1xyXG4gICAgICAgIGxldCBudWxsQWxsb3dlZDogYm9vbGVhbiA9IChmaWVsZC5nZXRUeXBlKCkgPT09IFN0b3JhZ2VBdHRyaWJ1dGUuQkxPQl9WRUNUT1IpXHJcbiAgICAgICAgICA/IHRydWVcclxuICAgICAgICAgIDogZmllbGQuTnVsbEFsbG93ZWQ7XHJcbiAgICAgICAgVmFsLklzTnVsbCA9IGZpZWxkLmlzTnVsbCgpICYmIG51bGxBbGxvd2VkO1xyXG4gICAgICAgIFZhbC5PcmlnaW5hbE51bGwgPSBWYWwuSXNOdWxsO1xyXG4gICAgICAgIGZsZFZhbCA9IGZpZWxkLmdldFZhbHVlKHRydWUpO1xyXG5cclxuICAgICAgICBpZiAoZmxkVmFsICE9IG51bGwgJiYgVmFsLklzTnVsbCAmJlxyXG4gICAgICAgICAgZmllbGQuZ2V0VGFzaygpLmdldE51bGxBcml0aG1ldGljKCkgPT09IENvbnN0YW50cy5OVUxMX0FSSVRIX1VTRV9ERUYpXHJcbiAgICAgICAgICBWYWwuSXNOdWxsID0gZmFsc2U7XHJcblxyXG4gICAgICAgIHN3aXRjaCAoVmFsLkF0dHIpIHtcclxuICAgICAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5BTFBIQTpcclxuICAgICAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5VTklDT0RFOlxyXG4gICAgICAgICAgICBWYWwuU3RyVmFsID0gZmxkVmFsO1xyXG4gICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuQkxPQl9WRUNUT1I6XHJcbiAgICAgICAgICAgIFZhbC5WZWN0b3JGaWVsZCA9IGZpZWxkO1xyXG4gICAgICAgICAgLy8gZmFsbHMgdGhyb3VnaFxyXG5cclxuICAgICAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5CTE9COlxyXG4gICAgICAgICAgICBWYWwuU3RyVmFsID0gZmxkVmFsO1xyXG5cclxuICAgICAgICAgICAgaWYgKFZhbC5TdHJWYWwgPT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgIFZhbC5Jc051bGwgPSB0cnVlO1xyXG4gICAgICAgICAgICAgIFZhbC5JbmNsdWRlQmxvYlByZWZpeCA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9IGVsc2VcclxuICAgICAgICAgICAgICBWYWwuSW5jbHVkZUJsb2JQcmVmaXggPSB0cnVlO1xyXG4gICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuTlVNRVJJQzpcclxuICAgICAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5EQVRFOlxyXG4gICAgICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLlRJTUU6XHJcbiAgICAgICAgICAgIFZhbC5NZ051bVZhbCA9IGZsZFZhbCAhPSBudWxsID8gbmV3IE5VTV9UWVBFKGZsZFZhbCkgOiBudWxsO1xyXG4gICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuQk9PTEVBTjpcclxuICAgICAgICAgICAgaWYgKGZsZFZhbCAhPSBudWxsKVxyXG4gICAgICAgICAgICAgIFZhbC5Cb29sVmFsID0gRGlzcGxheUNvbnZlcnRvci50b0Jvb2xlYW4oZmxkVmFsKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfRk9STTpcclxuICAgICAgICBwYXJlbnQgPSBleHBTdHJUcmFja2VyLmdldFZhcklkeCgpO1xyXG4gICAgICAgIGxldCBmb3JtRGlzcGxheUluZGV4SW5UYXNrOiBudW1iZXIgPSBleHBTdHJUcmFja2VyLmdldDRCeXRlTnVtYmVyKCk7XHJcbiAgICAgICAgZm9ybURpc3BsYXlJbmRleEluVGFzayA9ICg8VGFza0Jhc2U+dGhpcy5FeHBUYXNrKS5HZXRSZWFsTWFpbkRpc3BsYXlJbmRleE9uRGVwdGgoZm9ybURpc3BsYXlJbmRleEluVGFzayk7XHJcbiAgICAgICAgdGhpcy5Db25zdHJ1Y3RNYWdpY051bShWYWwsIGZvcm1EaXNwbGF5SW5kZXhJblRhc2ssIFN0b3JhZ2VBdHRyaWJ1dGUuTlVNRVJJQyk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX1ZBUjpcclxuICAgICAgICBwYXJlbnQgPSBleHBTdHJUcmFja2VyLmdldFZhcklkeCgpO1xyXG4gICAgICAgIHZlZSA9IGV4cFN0clRyYWNrZXIuZ2V0NEJ5dGVOdW1iZXIoKTtcclxuICAgICAgICBsZXQgaXRtOiBudW1iZXIgPSAoPFRhc2tCYXNlPnRoaXMuRXhwVGFzaykuY3RsX2l0bV80X3BhcmVudF92ZWUocGFyZW50LCB2ZWUpO1xyXG4gICAgICAgIHRoaXMuQ29uc3RydWN0TWFnaWNOdW0oVmFsLCBpdG0sIFN0b3JhZ2VBdHRyaWJ1dGUuTlVNRVJJQyk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX1JJR0hUX0xJVEVSQUw6XHJcbiAgICAgICAgbGVuID0gZXhwU3RyVHJhY2tlci5nZXQyQnl0ZU51bWJlcigpO1xyXG4gICAgICAgIFZhbC5NZ051bVZhbCA9IGV4cFN0clRyYWNrZXIuZ2V0TWFnaWNOdW1iZXIobGVuLCB0cnVlKTtcclxuICAgICAgICAvLyBTa2lwIGV4dHJhIHVudXNlZCBzdHJpbmcgc3RvcmVkIGFmdGVyIGxpdGVyYWxcclxuICAgICAgICBsZW4gPSBleHBTdHJUcmFja2VyLmdldDJCeXRlTnVtYmVyKCk7XHJcbiAgICAgICAgVmFsLkF0dHIgPSBTdG9yYWdlQXR0cmlidXRlLk5VTUVSSUM7XHJcbiAgICAgICAgZXhwU3RyVHJhY2tlci5nZXRTdHJpbmcobGVuLCB0cnVlLCBmYWxzZSk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIFZhbDtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBEb2VzIHRoZSBvcGVyYXRvciByZXByZXNlbnRzIGEgYmFzaWMgZGF0YSB2YWx1ZT9cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwib3BDb2RlXCI+ICB0aGUgY3VycmVudCBvcGVyYXRpb24gY29kZTwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPiB0cnVlIGlmIHRoZSBvcGVyYXRvciBpbmRpY2F0ZXMgYmFzaWMgZGF0YSBpdGVtLCBmYWxzZSBpZiBub3Q8L3JldHVybnM+XHJcbiAgc3RhdGljIGlzQmFzaWNJdGVtKG9wQ29kZTogbnVtYmVyKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gKG9wQ29kZSA8PSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9MIHx8XHJcbiAgICAgIG9wQ29kZSA9PT0gRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfRVhUX0EgfHxcclxuICAgICAgb3BDb2RlID09PSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9SSUdIVF9MSVRFUkFMIHx8XHJcbiAgICAgIG9wQ29kZSA9PT0gRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfRSB8fFxyXG4gICAgICBvcENvZGUgPT09IEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX0ZPUk0pO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIENoZWNrcyBpZiB0aGUgZnVuY3Rpb24gaGFzIHZhcmlhYmxlIGFyZ3VtZW50IGxpc3RcclxuICAvLy8gICBsaWtlIGluIG1hZ2ljIDogRVhQX09QX0lTX1ZBUkFSRyhvcHIpXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBwcml2YXRlIHN0YXRpYyBpc1ZhckFyZ0xpc3QoZXhwRGVzYzogRXhwRGVzYyk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKGV4cERlc2MuQXJnQ291bnRfIDwgMCB8fCBleHBEZXNjLkFyZ0F0dHJfLmxlbmd0aCA+IDxudW1iZXI+ZXhwRGVzYy5BcmdDb3VudF8pXHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIEV4ZWN1dGUgc2luZ2xlIG9wZXJhdGlvblxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJvcENvZGVcIj5vcGVyYXRpb24gY29kZSB0byBleGVjdXRlPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImV4cFN0clRyYWNrZXJcIj50aGUgZXhwcmVzc2lvbiBiZWluZyBwcm9jZXNzZWQ8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwidmFsU3RhY2tcIj5zdGFjayBvZiB2YWx1ZXMgdGhhdCBhcmUgdGhlIHJlc3VsdCBvZiB0aGUgb3BlcmF0aW9uPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImFkZGVkT3BlcnNcIj5zdGFjayBvZiBvcGVyYXRpb24gdG8gZXhlY3V0ZSBhcyBhIHJlc3VsdCBvZiB0aGlzIG9wZXJhdG9yPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImV4cGVjdGVkVHlwZVwiPjwvcGFyYW0+XHJcbiAgcHJpdmF0ZSBhc3luYyBleGVjT3BlcmF0aW9uKG9wQ29kZTogbnVtYmVyLCBleHBTdHJUcmFja2VyOiBFeHBTdHJUcmFja2VyLCB2YWxTdGFjazogU3RhY2s8YW55PiwgYWRkZWRPcGVyczogTGlzdDxEeW5hbWljT3BlcmF0aW9uPiwgZXhwZWN0ZWRUeXBlOiBTdG9yYWdlQXR0cmlidXRlKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBsZXQgdmFsMTogRXhwVmFsO1xyXG4gICAgbGV0IHZhbDI6IEV4cFZhbDtcclxuICAgIGxldCB2YWwzOiBFeHBWYWw7XHJcbiAgICBsZXQgdmFsNDogRXhwVmFsO1xyXG4gICAgbGV0IHZhbDU6IEV4cFZhbDtcclxuICAgIGxldCB2YWw2OiBFeHBWYWw7XHJcbiAgICBsZXQgdmFsNzogRXhwVmFsO1xyXG4gICAgbGV0IHZhbDg6IEV4cFZhbDtcclxuICAgIGxldCB2YWw5OiBFeHBWYWw7XHJcbiAgICBsZXQgZHluT3BlciA9IG5ldyBEeW5hbWljT3BlcmF0aW9uKCk7XHJcbiAgICBsZXQgd2hvbGU6IG51bWJlcjtcclxuICAgIGxldCBkZWM6IG51bWJlcjtcclxuXHJcbiAgICBsZXQgcmVzVmFsID0gbmV3IEV4cFZhbCgpO1xyXG4gICAgbGV0IEV4cF9wYXJhbXM6IEV4cFZhbFtdO1xyXG4gICAgbGV0IGFkZFJlc3VsdDogYm9vbGVhbiA9IHRydWU7XHJcbiAgICBsZXQgbkFyZ3M6IG51bWJlcjtcclxuICAgIGxldCBzcGVjaWFsQW5zaUV4cHJlc3Npb246IGJvb2xlYW4gPSBFbnZpcm9ubWVudC5JbnN0YW5jZS5nZXRTcGVjaWFsQW5zaUV4cHJlc3Npb24oKTtcclxuXHJcbiAgICAvLyB0ZW1wb3JhcnkgdmFsdWVzOlxyXG4gICAgbGV0IG9mczogbnVtYmVyLCBsZW46IG51bWJlciwgTGVuTWF4OiBudW1iZXIsIGo6IG51bWJlciA9IDA7XHJcbiAgICBsZXQgcGljOiBQSUM7XHJcblxyXG4gICAgLy8gdGhpcyBwYXJ0IHB1dHMgdGhlIG51bWJlciBvZiBhcmd1bWVudHMgaW4gdGhlIFRPUCBvZiB0aGUgc3RhY2tcclxuICAgIC8vIDQgdmFyaWFibGUgYXJndW1lbnQgbGlzdCBmdW5jdGlvbnMgT05MWVxyXG4gICAgLy8gZG9uJ3QgZm9yZ2V0IHBvcCB0aGlzIGFyZ3VtZW50IGluIHRoZSBzdGFydCBvZiB0aGUgY2FzZXMgb2YgdmFyaWFibGUgYXJndW1lbnQgbGlzdCBmdW5jdGlvbnNcclxuICAgIGxldCBleHBEZXNjOiBFeHBEZXNjID0gRXhwcmVzc2lvbkRpY3QuZXhwRGVzY1tvcENvZGVdO1xyXG5cclxuICAgIC8vIGZvciBmdW5jdGlvbiB3aXRoIE5PVCBjb25zdGFudCBudW1iZXIgb2YgYXJndW1lbnRzIE9OTFlcclxuICAgIC8vIGRvbid0IHVzZSB0aGlzIGJsb2NrIGZvciBhbm90aGVyIGNhc2VzLCBiZWNhdXNlIHRoZSB0cnktY2F0Y2ggcGFydCBpbnNlcnQgdW51c2FibGUgdmFsdWVzIHRvIHRoZSBleHByZXNzaW9uIHF1ZXVlXHJcbiAgICBpZiAoRXhwcmVzc2lvbkV2YWx1YXRvci5pc1ZhckFyZ0xpc3QoZXhwRGVzYykpIHtcclxuICAgICAgbkFyZ3MgPSBleHBTdHJUcmFja2VyLmdldDFCeXRlTnVtYmVyKCk7XHJcblxyXG4gICAgICBmb3IgKGogPSAwOyBqIDwgbkFyZ3M7IGorKykge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICBhd2FpdCB0aGlzLmV4ZWNFeHByZXNzaW9uKGV4cFN0clRyYWNrZXIsIHZhbFN0YWNrLCBTdG9yYWdlQXR0cmlidXRlLk5PTkUpO1xyXG4gICAgICAgIH0gY2F0Y2ggKGV4Y2VwdGlvbikge1xyXG4gICAgICAgICAgaWYgKGV4Y2VwdGlvbiBpbnN0YW5jZW9mIEV4Y2VwdGlvbikge1xyXG4gICAgICAgICAgICAvLyBnZXRPdXRMb29wXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgfSBlbHNlIHRocm93IGV4Y2VwdGlvbjtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgaWYgKEV4cHJlc3Npb25FdmFsdWF0b3IuaXNWYXJBcmdMaXN0KGV4cERlc2MpICYmIGogPT09IG5BcmdzKSAvLyB0aGUgZm9yX2xvb3AgZmluaXNoZWQgd2l0aG91dCBleGNlcHRpb25cclxuICAgICAge1xyXG4gICAgICAgIGxldCB0ZW1wX29iamVjdDogT2JqZWN0ID0gbkFyZ3M7XHJcbiAgICAgICAgdmFsU3RhY2sucHVzaCh0ZW1wX29iamVjdCk7XHJcbiAgICAgIH0gZWxzZVxyXG4gICAgICAgIExvZ2dlci5JbnN0YW5jZS5Xcml0ZUV4Y2VwdGlvblRvTG9nV2l0aE1zZygnRXhwcmVzc2lvbkV2YWx1YXRvci5leGVjT3BlcmF0aW9uKCkgdGhlcmUgaXMgcHJvYmxlbSB3aXRoIGFyZ3VtZW50cyBvZiAnICtcclxuICAgICAgICAgIG9wQ29kZSArICcoc2VlIEV4cHJlc3Npb25EaWN0IGZvciBuYW1lKScpO1xyXG4gICAgfVxyXG5cclxuICAgIHN3aXRjaCAob3BDb2RlKSB7XHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfQUREOlxyXG4gICAgICAgIHZhbDIgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpO1xyXG4gICAgICAgIHZhbDEgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpO1xyXG4gICAgICAgIHJlc1ZhbC5NZ051bVZhbCA9IE5VTV9UWVBFLmFkZCh2YWwxLk1nTnVtVmFsLCB2YWwyLk1nTnVtVmFsKTtcclxuICAgICAgICByZXNWYWwuQXR0ciA9IFN0b3JhZ2VBdHRyaWJ1dGUuTlVNRVJJQztcclxuICAgICAgICByZXNWYWwuSXNOdWxsID0gKHJlc1ZhbC5NZ051bVZhbCA9PSBudWxsKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfU1VCOlxyXG4gICAgICAgIHZhbDIgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpO1xyXG4gICAgICAgIHZhbDEgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpO1xyXG4gICAgICAgIHJlc1ZhbC5NZ051bVZhbCA9IE5VTV9UWVBFLnN1Yih2YWwxLk1nTnVtVmFsLCB2YWwyLk1nTnVtVmFsKTtcclxuICAgICAgICByZXNWYWwuQXR0ciA9IFN0b3JhZ2VBdHRyaWJ1dGUuTlVNRVJJQztcclxuICAgICAgICByZXNWYWwuSXNOdWxsID0gKHJlc1ZhbC5NZ051bVZhbCA9PSBudWxsKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfTVVMOlxyXG4gICAgICAgIHZhbDIgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpO1xyXG4gICAgICAgIHZhbDEgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpO1xyXG4gICAgICAgIHJlc1ZhbC5NZ051bVZhbCA9IE5VTV9UWVBFLm11bCh2YWwxLk1nTnVtVmFsLCB2YWwyLk1nTnVtVmFsKTtcclxuICAgICAgICByZXNWYWwuQXR0ciA9IFN0b3JhZ2VBdHRyaWJ1dGUuTlVNRVJJQztcclxuICAgICAgICByZXNWYWwuSXNOdWxsID0gKHJlc1ZhbC5NZ051bVZhbCA9PSBudWxsKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfRElWOlxyXG4gICAgICAgIHZhbDIgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpO1xyXG4gICAgICAgIHZhbDEgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpO1xyXG4gICAgICAgIHJlc1ZhbC5NZ051bVZhbCA9IE5VTV9UWVBFLmRpdih2YWwxLk1nTnVtVmFsLCB2YWwyLk1nTnVtVmFsKTtcclxuICAgICAgICByZXNWYWwuQXR0ciA9IFN0b3JhZ2VBdHRyaWJ1dGUuTlVNRVJJQztcclxuICAgICAgICByZXNWYWwuSXNOdWxsID0gKHJlc1ZhbC5NZ051bVZhbCA9PSBudWxsKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfTU9EOlxyXG4gICAgICAgIHZhbDIgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpO1xyXG4gICAgICAgIHZhbDEgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpO1xyXG4gICAgICAgIHJlc1ZhbC5NZ051bVZhbCA9IE5VTV9UWVBFLm1vZCh2YWwxLk1nTnVtVmFsLCB2YWwyLk1nTnVtVmFsKTtcclxuICAgICAgICByZXNWYWwuQXR0ciA9IFN0b3JhZ2VBdHRyaWJ1dGUuTlVNRVJJQztcclxuICAgICAgICByZXNWYWwuSXNOdWxsID0gKHJlc1ZhbC5NZ051bVZhbCA9PSBudWxsKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfTkVHOlxyXG4gICAgICAgIHZhbDEgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpO1xyXG4gICAgICAgIHJlc1ZhbC5BdHRyID0gU3RvcmFnZUF0dHJpYnV0ZS5OVU1FUklDO1xyXG4gICAgICAgIGlmICh2YWwxLk1nTnVtVmFsID09IG51bGwpIHtcclxuICAgICAgICAgIHN1cGVyLlNldE5VTEwocmVzVmFsLCBTdG9yYWdlQXR0cmlidXRlLk5VTUVSSUMpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YWwxLk1nTnVtVmFsLm51bV9uZWcoKTtcclxuICAgICAgICByZXNWYWwuTWdOdW1WYWwgPSBuZXcgTlVNX1RZUEUodmFsMS5NZ051bVZhbCk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX0ZJWDpcclxuICAgICAgICB2YWwzID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTsgLy8gZGVjXHJcbiAgICAgICAgdmFsMiA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7IC8vIHdob2xlXHJcbiAgICAgICAgdmFsMSA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7XHJcbiAgICAgICAgcmVzVmFsLkF0dHIgPSBTdG9yYWdlQXR0cmlidXRlLk5VTUVSSUM7XHJcbiAgICAgICAgaWYgKHZhbDEuTWdOdW1WYWwgPT0gbnVsbCB8fCB2YWwyLk1nTnVtVmFsID09IG51bGwgfHwgdmFsMy5NZ051bVZhbCA9PSBudWxsKSB7XHJcbiAgICAgICAgICBzdXBlci5TZXROVUxMKHJlc1ZhbCwgU3RvcmFnZUF0dHJpYnV0ZS5OVU1FUklDKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmVzVmFsLk1nTnVtVmFsID0gbmV3IE5VTV9UWVBFKHZhbDEuTWdOdW1WYWwpO1xyXG4gICAgICAgIHdob2xlID0gdmFsMi5NZ051bVZhbC5OVU1fMl9MT05HKCk7XHJcbiAgICAgICAgcmVzVmFsLk1nTnVtVmFsLm51bV9maXgod2hvbGUpO1xyXG4gICAgICAgIGRlYyA9IHZhbDMuTWdOdW1WYWwuTlVNXzJfTE9ORygpO1xyXG4gICAgICAgIHJlc1ZhbC5NZ051bVZhbC5udW1fdHJ1bmMoZGVjKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfUk9VTkQ6XHJcbiAgICAgICAgLy8gaW50IHdob2xlLCBkZWM7ICAgICAgICAgbmVlZG4ndCB0aGlzIHZhcmlhYmxlcywgdGhlbSBkZWZpbmVkIGluIEVYUF9PUF9GSVhcclxuICAgICAgICB2YWwzID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTsgLy8gZGVjXHJcbiAgICAgICAgdmFsMiA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7IC8vIHdob2xlXHJcbiAgICAgICAgdmFsMSA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7XHJcbiAgICAgICAgcmVzVmFsLkF0dHIgPSBTdG9yYWdlQXR0cmlidXRlLk5VTUVSSUM7XHJcbiAgICAgICAgaWYgKHZhbDEuTWdOdW1WYWwgPT0gbnVsbCB8fCB2YWwyLk1nTnVtVmFsID09IG51bGwgfHwgdmFsMy5NZ051bVZhbCA9PSBudWxsKSB7XHJcbiAgICAgICAgICBzdXBlci5TZXROVUxMKHJlc1ZhbCwgU3RvcmFnZUF0dHJpYnV0ZS5OVU1FUklDKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmVzVmFsLk1nTnVtVmFsID0gbmV3IE5VTV9UWVBFKHZhbDEuTWdOdW1WYWwpO1xyXG4gICAgICAgIHdob2xlID0gdmFsMi5NZ051bVZhbC5OVU1fMl9MT05HKCk7XHJcbiAgICAgICAgcmVzVmFsLk1nTnVtVmFsLm51bV9maXgod2hvbGUpO1xyXG4gICAgICAgIGRlYyA9IHZhbDMuTWdOdW1WYWwuTlVNXzJfTE9ORygpO1xyXG4gICAgICAgIHJlc1ZhbC5NZ051bVZhbC5yb3VuZChkZWMpO1xyXG5cclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfRVE6XHJcbiAgICAgICAgdmFsMiA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7XHJcbiAgICAgICAgdmFsMSA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7XHJcbiAgICAgICAgcmVzVmFsLkF0dHIgPSBTdG9yYWdlQXR0cmlidXRlLkJPT0xFQU47XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgIHJlc1ZhbC5Cb29sVmFsID0gKEV4cHJlc3Npb25FdmFsdWF0b3IudmFsX2NtcF9hbnkodmFsMSwgdmFsMiwgZmFsc2UpID09PSAwKTtcclxuICAgICAgICB9IGNhdGNoIChudWxsVmFsdWVFeGNlcHRpb24pIHtcclxuICAgICAgICAgIGlmIChudWxsVmFsdWVFeGNlcHRpb24gaW5zdGFuY2VvZiBOdWxsVmFsdWVFeGNlcHRpb24pIHtcclxuICAgICAgICAgICAgcmVzVmFsLkJvb2xWYWwgPSBmYWxzZTtcclxuICAgICAgICAgIH0gZWxzZSB0aHJvdyBudWxsVmFsdWVFeGNlcHRpb247XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGV4cFN0clRyYWNrZXIucmVzZXROdWxsUmVzdWx0KCk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX05FOlxyXG4gICAgICAgIHZhbDIgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpO1xyXG4gICAgICAgIHZhbDEgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpO1xyXG4gICAgICAgIHJlc1ZhbC5BdHRyID0gU3RvcmFnZUF0dHJpYnV0ZS5CT09MRUFOO1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICByZXNWYWwuQm9vbFZhbCA9IChFeHByZXNzaW9uRXZhbHVhdG9yLnZhbF9jbXBfYW55KHZhbDEsIHZhbDIsIGZhbHNlKSAhPT0gMCk7XHJcbiAgICAgICAgfSBjYXRjaCAobnVsbFZhbHVlRXhjZXB0aW9uKSB7XHJcbiAgICAgICAgICBpZiAobnVsbFZhbHVlRXhjZXB0aW9uIGluc3RhbmNlb2YgTnVsbFZhbHVlRXhjZXB0aW9uKSB7XHJcbiAgICAgICAgICAgIHN1cGVyLlNldE5VTEwocmVzVmFsLCBTdG9yYWdlQXR0cmlidXRlLkJPT0xFQU4pO1xyXG4gICAgICAgICAgfSBlbHNlIHRocm93IG51bGxWYWx1ZUV4Y2VwdGlvbjtcclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX0xFOlxyXG4gICAgICAgIHZhbDIgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpO1xyXG4gICAgICAgIHZhbDEgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpO1xyXG4gICAgICAgIHJlc1ZhbC5BdHRyID0gU3RvcmFnZUF0dHJpYnV0ZS5CT09MRUFOO1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICByZXNWYWwuQm9vbFZhbCA9IChFeHByZXNzaW9uRXZhbHVhdG9yLnZhbF9jbXBfYW55KHZhbDEsIHZhbDIsIHRydWUpIDw9IDApO1xyXG4gICAgICAgIH0gY2F0Y2ggKG51bGxWYWx1ZUV4Y2VwdGlvbikge1xyXG4gICAgICAgICAgaWYgKG51bGxWYWx1ZUV4Y2VwdGlvbiBpbnN0YW5jZW9mIE51bGxWYWx1ZUV4Y2VwdGlvbikge1xyXG4gICAgICAgICAgICBzdXBlci5TZXROVUxMKHJlc1ZhbCwgU3RvcmFnZUF0dHJpYnV0ZS5CT09MRUFOKTtcclxuICAgICAgICAgIH0gZWxzZSB0aHJvdyBudWxsVmFsdWVFeGNlcHRpb247XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9MVDpcclxuICAgICAgICB2YWwyID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTtcclxuICAgICAgICB2YWwxID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTtcclxuICAgICAgICByZXNWYWwuQXR0ciA9IFN0b3JhZ2VBdHRyaWJ1dGUuQk9PTEVBTjtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgcmVzVmFsLkJvb2xWYWwgPSAoRXhwcmVzc2lvbkV2YWx1YXRvci52YWxfY21wX2FueSh2YWwxLCB2YWwyLCB0cnVlKSA8IDApO1xyXG4gICAgICAgIH0gY2F0Y2ggKG51bGxWYWx1ZUV4Y2VwdGlvbikge1xyXG4gICAgICAgICAgaWYgKG51bGxWYWx1ZUV4Y2VwdGlvbiBpbnN0YW5jZW9mIE51bGxWYWx1ZUV4Y2VwdGlvbikge1xyXG4gICAgICAgICAgICBzdXBlci5TZXROVUxMKHJlc1ZhbCwgU3RvcmFnZUF0dHJpYnV0ZS5CT09MRUFOKTtcclxuICAgICAgICAgIH0gZWxzZSB0aHJvdyBudWxsVmFsdWVFeGNlcHRpb247XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9HRTpcclxuICAgICAgICB2YWwyID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTtcclxuICAgICAgICB2YWwxID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTtcclxuICAgICAgICByZXNWYWwuQXR0ciA9IFN0b3JhZ2VBdHRyaWJ1dGUuQk9PTEVBTjtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgcmVzVmFsLkJvb2xWYWwgPSAoRXhwcmVzc2lvbkV2YWx1YXRvci52YWxfY21wX2FueSh2YWwxLCB2YWwyLCB0cnVlKSA+PSAwKTtcclxuICAgICAgICB9IGNhdGNoIChudWxsVmFsdWVFeGNlcHRpb24pIHtcclxuICAgICAgICAgIGlmIChudWxsVmFsdWVFeGNlcHRpb24gaW5zdGFuY2VvZiBOdWxsVmFsdWVFeGNlcHRpb24pIHtcclxuICAgICAgICAgICAgc3VwZXIuU2V0TlVMTChyZXNWYWwsIFN0b3JhZ2VBdHRyaWJ1dGUuQk9PTEVBTik7XHJcbiAgICAgICAgICB9IGVsc2UgdGhyb3cgbnVsbFZhbHVlRXhjZXB0aW9uO1xyXG4gICAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfR1Q6XHJcbiAgICAgICAgdmFsMiA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7XHJcbiAgICAgICAgdmFsMSA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7XHJcbiAgICAgICAgcmVzVmFsLkF0dHIgPSBTdG9yYWdlQXR0cmlidXRlLkJPT0xFQU47XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgIHJlc1ZhbC5Cb29sVmFsID0gKEV4cHJlc3Npb25FdmFsdWF0b3IudmFsX2NtcF9hbnkodmFsMSwgdmFsMiwgdHJ1ZSkgPiAwKTtcclxuICAgICAgICB9IGNhdGNoIChudWxsVmFsdWVFeGNlcHRpb24pIHtcclxuICAgICAgICAgIGlmIChudWxsVmFsdWVFeGNlcHRpb24gaW5zdGFuY2VvZiBOdWxsVmFsdWVFeGNlcHRpb24pIHtcclxuICAgICAgICAgICAgc3VwZXIuU2V0TlVMTChyZXNWYWwsIFN0b3JhZ2VBdHRyaWJ1dGUuQk9PTEVBTik7XHJcbiAgICAgICAgICB9IGVsc2UgdGhyb3cgbnVsbFZhbHVlRXhjZXB0aW9uO1xyXG4gICAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfTk9UOlxyXG4gICAgICAgIHJlc1ZhbCA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7XHJcbiAgICAgICAgcmVzVmFsLkJvb2xWYWwgPSAhcmVzVmFsLkJvb2xWYWw7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX09SOlxyXG4gICAgICAgIHJlc1ZhbCA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7XHJcbiAgICAgICAgZHluT3BlciA9IG5ldyBEeW5hbWljT3BlcmF0aW9uKCk7XHJcbiAgICAgICAgZHluT3Blci5hcmdDb3VudF8gPSAxO1xyXG5cclxuICAgICAgICBpZiAocmVzVmFsLkJvb2xWYWwpIHtcclxuICAgICAgICAgIGR5bk9wZXIub3BDb2RlXyA9IEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX0lHTk9SRTtcclxuICAgICAgICAgIGR5bk9wZXIuYXJnQ291bnRfID0gMTtcclxuICAgICAgICAgIGFkZGVkT3BlcnMucHVzaChkeW5PcGVyKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgZHluT3Blci5vcENvZGVfID0gRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfRVZBTFg7XHJcbiAgICAgICAgICBkeW5PcGVyLmFyZ0NvdW50XyA9IDA7XHJcbiAgICAgICAgICBhZGRlZE9wZXJzLnB1c2goZHluT3Blcik7XHJcbiAgICAgICAgICBhZGRSZXN1bHQgPSBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX0FORDpcclxuICAgICAgICByZXNWYWwgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpO1xyXG4gICAgICAgIGR5bk9wZXIgPSBuZXcgRHluYW1pY09wZXJhdGlvbigpO1xyXG4gICAgICAgIGlmICghcmVzVmFsLkJvb2xWYWwpIHtcclxuICAgICAgICAgIGR5bk9wZXIub3BDb2RlXyA9IEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX0lHTk9SRTtcclxuICAgICAgICAgIGR5bk9wZXIuYXJnQ291bnRfID0gMTtcclxuICAgICAgICAgIGFkZGVkT3BlcnMucHVzaChkeW5PcGVyKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgZHluT3Blci5vcENvZGVfID0gRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfRVZBTFg7XHJcbiAgICAgICAgICBkeW5PcGVyLmFyZ0NvdW50XyA9IDA7XHJcbiAgICAgICAgICBhZGRlZE9wZXJzLnB1c2goZHluT3Blcik7XHJcbiAgICAgICAgICBhZGRSZXN1bHQgPSBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX0lGOlxyXG4gICAgICAgIHZhbDEgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpO1xyXG4gICAgICAgIGlmICh2YWwxLkJvb2xWYWwpIHtcclxuICAgICAgICAgIGR5bk9wZXIgPSBuZXcgRHluYW1pY09wZXJhdGlvbigpO1xyXG4gICAgICAgICAgZHluT3Blci5vcENvZGVfID0gRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfRVZBTFg7XHJcbiAgICAgICAgICBkeW5PcGVyLmFyZ0NvdW50XyA9IDA7XHJcblxyXG4gICAgICAgICAgYWRkZWRPcGVycy5wdXNoKGR5bk9wZXIpO1xyXG4gICAgICAgICAgZHluT3BlciA9IG5ldyBEeW5hbWljT3BlcmF0aW9uKCk7XHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIGR5bk9wZXIub3BDb2RlXyA9IEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX0lHTk9SRTtcclxuICAgICAgICAgICAgZHluT3Blci5hcmdDb3VudF8gPSAxO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIGFkZGVkT3BlcnMucHVzaChkeW5PcGVyKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgZHluT3BlciA9IG5ldyBEeW5hbWljT3BlcmF0aW9uKCk7XHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIGR5bk9wZXIub3BDb2RlXyA9IEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX0lHTk9SRTtcclxuICAgICAgICAgICAgZHluT3Blci5hcmdDb3VudF8gPSAxO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIGFkZGVkT3BlcnMucHVzaChkeW5PcGVyKTtcclxuICAgICAgICAgIGR5bk9wZXIgPSBuZXcgRHluYW1pY09wZXJhdGlvbigpO1xyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICBkeW5PcGVyLm9wQ29kZV8gPSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9FVkFMWDtcclxuICAgICAgICAgICAgZHluT3Blci5hcmdDb3VudF8gPSAwO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIGFkZGVkT3BlcnMucHVzaChkeW5PcGVyKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgYWRkUmVzdWx0ID0gZmFsc2U7XHJcbiAgICAgICAgZXhwU3RyVHJhY2tlci5yZXNldE51bGxSZXN1bHQoKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfTEVOOlxyXG4gICAgICAgIHZhbDEgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpO1xyXG5cclxuICAgICAgICByZXNWYWwuQXR0ciA9IFN0b3JhZ2VBdHRyaWJ1dGUuTlVNRVJJQztcclxuICAgICAgICBpZiAodmFsMS5TdHJWYWwgPT0gbnVsbCkge1xyXG4gICAgICAgICAgc3VwZXIuU2V0TlVMTChyZXNWYWwsIFN0b3JhZ2VBdHRyaWJ1dGUuTlVNRVJJQyk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgICAgcmVzVmFsLk1nTnVtVmFsID0gbmV3IE5VTV9UWVBFKCk7XHJcbiAgICAgICAgLy8gY291bnQgdGhlIG51bWJlciBvZiBieXRlcywgbm90IGNoYXJhY3RlcnMgKEpQTjogREJDUyBzdXBwb3J0KVxyXG4gICAgICAgIGlmIChzcGVjaWFsQW5zaUV4cHJlc3Npb24gfHwgdmFsMS5BdHRyICE9PSBTdG9yYWdlQXR0cmlidXRlLlVOSUNPREUpXHJcbiAgICAgICAgICByZXNWYWwuTWdOdW1WYWwuTlVNXzRfTE9ORyhVdGlsU3RyQnl0ZU1vZGUubGVuQih2YWwxLlN0clZhbCkpO1xyXG4gICAgICAgIGVsc2VcclxuICAgICAgICAgIHJlc1ZhbC5NZ051bVZhbC5OVU1fNF9MT05HKHZhbDEuU3RyVmFsLmxlbmd0aCk7XHJcblxyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9DT046XHJcbiAgICAgICAgdmFsMiA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7XHJcbiAgICAgICAgdmFsMSA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7XHJcbiAgICAgICAgcmVzVmFsLkF0dHIgPSBTdG9yYWdlQXR0cmlidXRlLlVOSUNPREU7XHJcbiAgICAgICAgaWYgKHZhbDEuQXR0ciA9PT0gU3RvcmFnZUF0dHJpYnV0ZS5VTklDT0RFICYmIHZhbDEuU3RyVmFsID09IG51bGwgfHxcclxuICAgICAgICAgIHZhbDIuQXR0ciA9PT0gU3RvcmFnZUF0dHJpYnV0ZS5VTklDT0RFICYmIHZhbDIuU3RyVmFsID09IG51bGwpXHJcbiAgICAgICAgICBzdXBlci5TZXROVUxMKHJlc1ZhbCwgU3RvcmFnZUF0dHJpYnV0ZS5VTklDT0RFKTtcclxuICAgICAgICBlbHNlXHJcbiAgICAgICAgICByZXNWYWwuU3RyVmFsID0gKCFOU3RyaW5nLklzTnVsbE9yRW1wdHkodmFsMS5TdHJWYWwpID8gdmFsMS5TdHJWYWwgOiAnJykgKyAoIU5TdHJpbmcuSXNOdWxsT3JFbXB0eSh2YWwyLlN0clZhbCkgPyB2YWwyLlN0clZhbCA6ICcnKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfTUlEOlxyXG4gICAgICAgIHZhbDMgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpOyAvLyBsZW5ndGhcclxuICAgICAgICB2YWwyID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTsgLy8gc3RhcnQsIG9mc2V0XHJcbiAgICAgICAgdmFsMSA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7IC8vIHN0cmluZ1xyXG5cclxuICAgICAgICByZXNWYWwuQXR0ciA9IHZhbDEuQXR0cjtcclxuICAgICAgICBpZiAodmFsMi5NZ051bVZhbCA9PSBudWxsIHx8IHZhbDMuTWdOdW1WYWwgPT0gbnVsbCB8fCB2YWwxLlN0clZhbCA9PSBudWxsKSB7XHJcbiAgICAgICAgICBzdXBlci5TZXROVUxMKHJlc1ZhbCwgcmVzVmFsLkF0dHIpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvKiBDb21wdXRlIG9mZnNldCBhbmQgbGVuZ3RoIG9mIHN1YnN0cmluZyAqL1xyXG4gICAgICAgIG9mcyA9IHZhbDIuTWdOdW1WYWwuTlVNXzJfTE9ORygpO1xyXG4gICAgICAgIG9mcyA9IChvZnMgPiAxXHJcbiAgICAgICAgICA/IG9mcyAtIDFcclxuICAgICAgICAgIDogMCk7IC8vIGluIE1JRCBtYWdpYyBmdW5jdGlvbiBzdGFydD0wICYmIHN0YXJ0PTEgdGhlIHNhbWVcclxuICAgICAgICBsZW4gPSB2YWwzLk1nTnVtVmFsLk5VTV8yX0xPTkcoKTtcclxuXHJcbiAgICAgICAgaWYgKHNwZWNpYWxBbnNpRXhwcmVzc2lvbiB8fCB2YWwxLkF0dHIgIT09IFN0b3JhZ2VBdHRyaWJ1dGUuVU5JQ09ERSkge1xyXG4gICAgICAgICAgcmVzVmFsLkF0dHIgPSBTdG9yYWdlQXR0cmlidXRlLkFMUEhBO1xyXG4gICAgICAgICAgcmVzVmFsLlN0clZhbCA9IFV0aWxTdHJCeXRlTW9kZS5taWRCKHZhbDEuU3RyVmFsLCBvZnMsIGxlbik7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIExlbk1heCA9IHZhbDEuU3RyVmFsLmxlbmd0aCAtIG9mcztcclxuICAgICAgICAgIGlmIChMZW5NYXggPCBsZW4pXHJcbiAgICAgICAgICAgIGxlbiA9IExlbk1heDtcclxuICAgICAgICAgIGlmIChsZW4gPCAwKVxyXG4gICAgICAgICAgICBsZW4gPSAwO1xyXG4gICAgICAgICAgcmVzVmFsLlN0clZhbCA9IHZhbDEuU3RyVmFsLnN1YnN0cihvZnMsIGxlbik7IC8vIGNvZGUgZnJvbSB0cnkgYmxvY2tcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChyZXNWYWwuU3RyVmFsID09IG51bGwpXHJcbiAgICAgICAgICByZXNWYWwuU3RyVmFsID0gJyc7XHJcblxyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9MRUZUOlxyXG4gICAgICAgIHZhbDIgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpOyAvLyBsZW5ndGhcclxuICAgICAgICB2YWwxID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTsgLy8gc3RyaW5nXHJcblxyXG4gICAgICAgIHJlc1ZhbC5BdHRyID0gdmFsMS5BdHRyO1xyXG4gICAgICAgIGlmICh2YWwyLk1nTnVtVmFsID09IG51bGwgfHwgdmFsMS5TdHJWYWwgPT0gbnVsbCkge1xyXG4gICAgICAgICAgc3VwZXIuU2V0TlVMTChyZXNWYWwsIHZhbDEuQXR0cik7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgICAgbGVuID0gdmFsMi5NZ051bVZhbC5OVU1fMl9MT05HKCk7XHJcblxyXG4gICAgICAgIC8vIGNvdW50IHRoZSBudW1iZXIgb2YgYnl0ZXMsIG5vdCBjaGFyYWN0ZXJzIChKUE46IERCQ1Mgc3VwcG9ydClcclxuICAgICAgICBpZiAoc3BlY2lhbEFuc2lFeHByZXNzaW9uIHx8IHZhbDEuQXR0ciAhPT0gU3RvcmFnZUF0dHJpYnV0ZS5VTklDT0RFKSB7XHJcbiAgICAgICAgICByZXNWYWwuQXR0ciA9IFN0b3JhZ2VBdHRyaWJ1dGUuQUxQSEE7XHJcbiAgICAgICAgICByZXNWYWwuU3RyVmFsID0gVXRpbFN0ckJ5dGVNb2RlLmxlZnRCKHZhbDEuU3RyVmFsLCBsZW4pO1xyXG4gICAgICAgICAgaWYgKHJlc1ZhbC5TdHJWYWwgPT0gbnVsbClcclxuICAgICAgICAgICAgcmVzVmFsLlN0clZhbCA9ICcnO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBpZiAobGVuID4gdmFsMS5TdHJWYWwubGVuZ3RoKVxyXG4gICAgICAgICAgICBsZW4gPSB2YWwxLlN0clZhbC5sZW5ndGg7XHJcbiAgICAgICAgICBpZiAobGVuIDwgMClcclxuICAgICAgICAgICAgbGVuID0gMDtcclxuICAgICAgICAgIHJlc1ZhbC5TdHJWYWwgPSB2YWwxLlN0clZhbC5zdWJzdHIoMCwgbGVuKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX1JJR0hUOlxyXG4gICAgICAgIHZhbDIgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpOyAvLyBsZW5ndGhcclxuICAgICAgICB2YWwxID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTsgLy8gc3RyaW5nXHJcblxyXG4gICAgICAgIHJlc1ZhbC5BdHRyID0gdmFsMS5BdHRyO1xyXG4gICAgICAgIGlmICh2YWwyLk1nTnVtVmFsID09IG51bGwgfHwgdmFsMS5TdHJWYWwgPT0gbnVsbCkge1xyXG4gICAgICAgICAgc3VwZXIuU2V0TlVMTChyZXNWYWwsIHZhbDEuQXR0cik7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgICAgbGVuID0gdmFsMi5NZ051bVZhbC5OVU1fMl9MT05HKCk7XHJcblxyXG4gICAgICAgIC8vIGNvdW50IHRoZSBudW1iZXIgb2YgYnl0ZXMsIG5vdCBjaGFyYWN0ZXJzIChKUE46IERCQ1Mgc3VwcG9ydClcclxuICAgICAgICBpZiAoc3BlY2lhbEFuc2lFeHByZXNzaW9uIHx8IHZhbDEuQXR0ciAhPT0gU3RvcmFnZUF0dHJpYnV0ZS5VTklDT0RFKSB7XHJcbiAgICAgICAgICByZXNWYWwuQXR0ciA9IFN0b3JhZ2VBdHRyaWJ1dGUuQUxQSEE7XHJcbiAgICAgICAgICByZXNWYWwuU3RyVmFsID0gVXRpbFN0ckJ5dGVNb2RlLnJpZ2h0Qih2YWwxLlN0clZhbCwgbGVuKTtcclxuICAgICAgICAgIGlmIChyZXNWYWwuU3RyVmFsID09IG51bGwpXHJcbiAgICAgICAgICAgIHJlc1ZhbC5TdHJWYWwgPSAnJztcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgaWYgKGxlbiA+IHZhbDEuU3RyVmFsLmxlbmd0aClcclxuICAgICAgICAgICAgbGVuID0gdmFsMS5TdHJWYWwubGVuZ3RoO1xyXG4gICAgICAgICAgaWYgKGxlbiA8IDApXHJcbiAgICAgICAgICAgIGxlbiA9IDA7XHJcbiAgICAgICAgICBvZnMgPSB2YWwxLlN0clZhbC5sZW5ndGggLSBsZW47XHJcblxyXG4gICAgICAgICAgLy8gbWVtY3B5IChFWFBfcGFybXNbMF0uYWRzLCBFWFBfcGFybXNbMF0uYWRzICsgb2ZzLCBsZW4pO1xyXG4gICAgICAgICAgcmVzVmFsLlN0clZhbCA9IHZhbDEuU3RyVmFsLnN1YnN0cihvZnMpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfRklMTDpcclxuICAgICAgICB2YWwyID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTsgLy8gdGltZXNcclxuICAgICAgICB2YWwxID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTsgLy8gc3RyaW5nXHJcblxyXG4gICAgICAgIHJlc1ZhbC5BdHRyID0gU3RvcmFnZUF0dHJpYnV0ZS5VTklDT0RFO1xyXG4gICAgICAgIGlmICh2YWwyLk1nTnVtVmFsID09IG51bGwgfHwgdmFsMS5TdHJWYWwgPT0gbnVsbCkge1xyXG4gICAgICAgICAgc3VwZXIuU2V0TlVMTChyZXNWYWwsIFN0b3JhZ2VBdHRyaWJ1dGUuVU5JQ09ERSk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxlbiA9IHZhbDEuU3RyVmFsLmxlbmd0aDtcclxuICAgICAgICBqID0gdmFsMi5NZ051bVZhbC5OVU1fMl9MT05HKCk7XHJcbiAgICAgICAgaWYgKGogPCAwKVxyXG4gICAgICAgICAgaiA9IDA7XHJcbiAgICAgICAgTGVuTWF4ID0gbGVuICogajtcclxuICAgICAgICBpZiAoTGVuTWF4ID4gMHg3RkZGKVxyXG4gICAgICAgIC8vIHRoZXJlIGlzIE1BWCBsZW5naHQgaW4gTWFnaWMgKGFjdHVhbGx5IGl0IG5lZWRuJ3QgaW4gSmF2YSwgYnV0IC4uLilcclxuICAgICAgICAgIExlbk1heCA9IE1hdGguZmxvb3IoMHg3RkZGIC8gbGVuKSAqIGxlbjtcclxuICAgICAgICBpZiAoTGVuTWF4ID4gMCkge1xyXG4gICAgICAgICAgaWYgKGxlbiA8PSAwKVxyXG4gICAgICAgICAgICByZXNWYWwuU3RyVmFsID0gJyc7XHJcbiAgICAgICAgICBlbHNlIGlmIChMZW5NYXggPT09IDEpXHJcbiAgICAgICAgICAgIHJlc1ZhbC5TdHJWYWwgPSB2YWwxLlN0clZhbDtcclxuICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBsZXQgdG1wQnVmZmVyID0gbmV3IFN0cmluZ0J1aWxkZXIoTGVuTWF4KTtcclxuICAgICAgICAgICAgZm9yICg7IExlbk1heCA+IDA7IExlbk1heCAtPSBsZW4pXHJcbiAgICAgICAgICAgICAgdG1wQnVmZmVyLkFwcGVuZCh2YWwxLlN0clZhbCk7XHJcbiAgICAgICAgICAgIHJlc1ZhbC5TdHJWYWwgPSB0bXBCdWZmZXIuVG9TdHJpbmcoKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHJlc1ZhbC5TdHJWYWwgPT0gbnVsbClcclxuICAgICAgICAgIHJlc1ZhbC5TdHJWYWwgPSAnJztcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfSU5TVFI6XHJcbiAgICAgICAgdmFsMiA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7IC8vIHN1YlN0clxyXG4gICAgICAgIHZhbDEgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpOyAvLyBzdHJpbmdcclxuXHJcbiAgICAgICAgb2ZzID0gMDtcclxuICAgICAgICByZXNWYWwuQXR0ciA9IFN0b3JhZ2VBdHRyaWJ1dGUuTlVNRVJJQztcclxuICAgICAgICBpZiAodmFsMS5TdHJWYWwgPT0gbnVsbCB8fCB2YWwyLlN0clZhbCA9PSBudWxsKSB7XHJcbiAgICAgICAgICBzdXBlci5TZXROVUxMKHJlc1ZhbCwgU3RvcmFnZUF0dHJpYnV0ZS5OVU1FUklDKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmVzVmFsLk1nTnVtVmFsID0gbmV3IE5VTV9UWVBFKCk7XHJcbiAgICAgICAgLy8gY291bnQgdGhlIG51bWJlciBvZiBieXRlcywgbm90IGNoYXJhY3RlcnMgKEpQTjogREJDUyBzdXBwb3J0KVxyXG4gICAgICAgIGlmIChzcGVjaWFsQW5zaUV4cHJlc3Npb24gfHxcclxuICAgICAgICAgICEodmFsMS5BdHRyID09PSBTdG9yYWdlQXR0cmlidXRlLlVOSUNPREUgfHxcclxuICAgICAgICAgICAgdmFsMi5BdHRyID09PSBTdG9yYWdlQXR0cmlidXRlLlVOSUNPREUpKSB7XHJcbiAgICAgICAgICBvZnMgPSBVdGlsU3RyQnl0ZU1vZGUuaW5zdHJCKHZhbDEuU3RyVmFsLCB2YWwyLlN0clZhbCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGlmICh2YWwyLlN0clZhbC5sZW5ndGggPT09IDApXHJcbiAgICAgICAgICAvLyBub3RoaW5nIDIgbG9vayBmb3JcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgcmVzVmFsLk1nTnVtVmFsLk5VTV80X0xPTkcob2ZzKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBvZnMgPSB2YWwxLlN0clZhbC5pbmRleE9mKHZhbDIuU3RyVmFsKTtcclxuICAgICAgICAgIGlmIChvZnMgPCAwKVxyXG4gICAgICAgICAgLy8gc3RyaW5nIGluIG1hZ2ljIHN0YXJ0cyBmcm9tIDEsIGluIGphdmEgZnJvbSAwLlxyXG4gICAgICAgICAgICBvZnMgPSAwO1xyXG4gICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICBvZnMrKztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJlc1ZhbC5NZ051bVZhbC5OVU1fNF9MT05HKG9mcyk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX1RSSU06XHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfTFRSSU06XHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfUlRSSU06XHJcbiAgICAgICAgdmFsMSA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7IC8vIHN0cmluZ1xyXG4gICAgICAgIHJlc1ZhbC5BdHRyID0gdmFsMS5BdHRyID09PSBTdG9yYWdlQXR0cmlidXRlLkFMUEhBXHJcbiAgICAgICAgICA/IFN0b3JhZ2VBdHRyaWJ1dGUuQUxQSEFcclxuICAgICAgICAgIDogU3RvcmFnZUF0dHJpYnV0ZS5VTklDT0RFO1xyXG4gICAgICAgIGlmICh2YWwxLlN0clZhbCA9PSBudWxsKSB7XHJcbiAgICAgICAgICBzdXBlci5TZXROVUxMKHJlc1ZhbCwgcmVzVmFsLkF0dHIpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBzd2l0Y2ggKG9wQ29kZSkge1xyXG4gICAgICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9UUklNOlxyXG4gICAgICAgICAgICB2YWwxLlN0clZhbCA9IEV4cHJlc3Npb25FdmFsdWF0b3IudHJpbVN0cih2YWwxLlN0clZhbCwgJ0InKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9MVFJJTTpcclxuICAgICAgICAgICAgdmFsMS5TdHJWYWwgPSBFeHByZXNzaW9uRXZhbHVhdG9yLnRyaW1TdHIodmFsMS5TdHJWYWwsICdMJyk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfUlRSSU06XHJcbiAgICAgICAgICAgIHZhbDEuU3RyVmFsID0gRXhwcmVzc2lvbkV2YWx1YXRvci50cmltU3RyKHZhbDEuU3RyVmFsLCAnUicpO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgICAgcmVzVmFsLlN0clZhbCA9IHZhbDEuU3RyVmFsO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9TVFI6XHJcbiAgICAgICAgdmFsMiA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7IC8vIHBpY3R1cmUgZm9ybWF0XHJcbiAgICAgICAgdmFsMSA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7IC8vIE51bSBpbnZlcnQgdG8gc3RyaW5nXHJcbiAgICAgICAgcmVzVmFsLkF0dHIgPSBTdG9yYWdlQXR0cmlidXRlLlVOSUNPREU7XHJcbiAgICAgICAgaWYgKHZhbDIuU3RyVmFsID09IG51bGwgfHwgdmFsMS5NZ051bVZhbCA9PSBudWxsKSB7XHJcbiAgICAgICAgICBzdXBlci5TZXROVUxMKHJlc1ZhbCwgU3RvcmFnZUF0dHJpYnV0ZS5VTklDT0RFKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gTWF4IGxlbmd0aCBvZiB0aGUgcGljdHVyZSBpcyAxMDAgY2hhcmFjdGVycywgbGlrZSBpbiBNYWdpY1xyXG4gICAgICAgIHBpYyA9IG5ldyBQSUMoRXhwcmVzc2lvbkV2YWx1YXRvci5zZXRfYV9waWModmFsMi5TdHJWYWwpLCBTdG9yYWdlQXR0cmlidXRlLk5VTUVSSUMsIHRoaXMuRXhwVGFzay5nZXRDb21wSWR4KCkpO1xyXG4gICAgICAgIHJlc1ZhbC5TdHJWYWwgPSB2YWwxLk1nTnVtVmFsLnRvX2EocGljKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfVkFMOlxyXG4gICAgICAgIHZhbDIgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpOyAvLyBwaWN0dXJlIGZvcm1hdFxyXG4gICAgICAgIHZhbDEgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpOyAvLyBzdHJpbmcgaW52ZXJ0IHRvIE51bVxyXG4gICAgICAgIHJlc1ZhbC5BdHRyID0gU3RvcmFnZUF0dHJpYnV0ZS5OVU1FUklDO1xyXG4gICAgICAgIGlmICh2YWwyLlN0clZhbCA9PSBudWxsIHx8IHZhbDEuU3RyVmFsID09IG51bGwpIHtcclxuICAgICAgICAgIHN1cGVyLlNldE5VTEwocmVzVmFsLCBTdG9yYWdlQXR0cmlidXRlLk5VTUVSSUMpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHBpYyA9IG5ldyBQSUMoRXhwcmVzc2lvbkV2YWx1YXRvci5zZXRfYV9waWModmFsMi5TdHJWYWwpLCBTdG9yYWdlQXR0cmlidXRlLk5VTUVSSUMsIHRoaXMuRXhwVGFzay5nZXRDb21wSWR4KCkpO1xyXG4gICAgICAgIHJlc1ZhbC5NZ051bVZhbCA9IG5ldyBOVU1fVFlQRSh2YWwxLlN0clZhbCwgcGljLCB0aGlzLkV4cFRhc2suZ2V0Q29tcElkeCgpKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfTTpcclxuICAgICAgICBsZW4gPSBleHBTdHJUcmFja2VyLmdldDJCeXRlTnVtYmVyKCk7XHJcbiAgICAgICAgbGV0IGNvZGVzOiBzdHJpbmcgPSBleHBTdHJUcmFja2VyLmdldFN0cmluZyhsZW4sIHRydWUsIGZhbHNlKTtcclxuICAgICAgICB0aGlzLmV2YWxfb3BfbShyZXNWYWwsIGNvZGVzKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfSzpcclxuICAgICAgICByZXNWYWwuQXR0ciA9IFN0b3JhZ2VBdHRyaWJ1dGUuTlVNRVJJQztcclxuICAgICAgICBsZW4gPSBleHBTdHJUcmFja2VyLmdldDJCeXRlTnVtYmVyKCk7XHJcbiAgICAgICAgcmVzVmFsLk1nTnVtVmFsID0gZXhwU3RyVHJhY2tlci5nZXRNYWdpY051bWJlcihsZW4sIHRydWUpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9GOlxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX1A6XHJcbiAgICAgICAgcmVzVmFsLkF0dHIgPSBTdG9yYWdlQXR0cmlidXRlLk5VTUVSSUM7XHJcbiAgICAgICAgbGVuID0gZXhwU3RyVHJhY2tlci5nZXQyQnl0ZU51bWJlcigpO1xyXG4gICAgICAgIHJlc1ZhbC5NZ051bVZhbCA9IGV4cFN0clRyYWNrZXIuZ2V0TWFnaWNOdW1iZXIobGVuLCB0cnVlKTtcclxuICAgICAgICAvLyBza2lwIHNlY29uZCBudW1iZXIgKHRoZSBjb21wb25lbnQgaWR4KVxyXG4gICAgICAgIGxlbiA9IGV4cFN0clRyYWNrZXIuZ2V0MkJ5dGVOdW1iZXIoKTtcclxuICAgICAgICBleHBTdHJUcmFja2VyLmdldE1hZ2ljTnVtYmVyKGxlbiwgdHJ1ZSk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX1NUQVQ6XHJcbiAgICAgICAgdmFsMiA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7IC8vIE1vZGVzXHJcbiAgICAgICAgdmFsMSA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7IC8vIEdlbmVyYXRpb25cclxuICAgICAgICB0aGlzLmV2YWxfb3Bfc3RhdChyZXNWYWwsIHZhbDEsIHZhbDIpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9TVUJGT1JNX0VYRUNfTU9ERTpcclxuICAgICAgICB2YWwxID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTsgLy8gR2VuZXJhdGlvblxyXG4gICAgICAgIHRoaXMuZXZhbF9vcF9zdWJmb3JtRXhlY01vZGUocmVzVmFsLCB2YWwxKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfSVNfTE9HR0VEX0lOOlxyXG4gICAgICAgIHRoaXMuZXZhbF9vcF9Jc0xvZ2dlZEluKHJlc1ZhbCk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX1NZUzpcclxuICAgICAgICB0aGlzLmV2YWxfb3BfYXBwbmFtZShyZXNWYWwpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9QUk9HOlxyXG4gICAgICAgIHRoaXMuZXZhbF9vcF9wcm9nKHJlc1ZhbCk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX0xFVkVMOlxyXG4gICAgICAgIHZhbDEgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpO1xyXG4gICAgICAgIHRoaXMuZXZhbF9vcF9sZXZlbChyZXNWYWwsIHZhbDEpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9DT1VOVEVSOlxyXG4gICAgICAgIHZhbDEgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpO1xyXG4gICAgICAgIHRoaXMuZXZhbF9vcF9jb3VudGVyKHJlc1ZhbCwgdmFsMSk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX0VNUFRZX0RBVEFfVklFVzpcclxuICAgICAgICB2YWwxID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTtcclxuICAgICAgICB0aGlzLmV2YWxfb3BfZW1wdHlEYXRhdmlldyhyZXNWYWwsIHZhbDEpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9NQUlOTEVWRUw6XHJcbiAgICAgICAgdmFsMSA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7XHJcbiAgICAgICAgdGhpcy5ldmFsX29wX21haW5sZXZlbChyZXNWYWwsIHZhbDEpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9NQUlORElTUExBWTpcclxuICAgICAgICB2YWwxID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTtcclxuICAgICAgICB0aGlzLmV2YWxfb3BfbWFpbmRpc3BsYXkocmVzVmFsLCB2YWwxKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfSVNGSVJTVFJFQ09SRENZQ0xFOlxyXG4gICAgICAgIHZhbDEgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpO1xyXG4gICAgICAgIHRoaXMuZXZhbF9vcF9Jc0ZpcnN0UmVjb3JkQ3ljbGUocmVzVmFsLCB2YWwxKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfREFURTpcclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9VVENEQVRFOlxyXG4gICAgICAgIHJlc1ZhbC5NZ051bVZhbCA9IG5ldyBOVU1fVFlQRSgpO1xyXG4gICAgICAgIHJlc1ZhbC5NZ051bVZhbC5OVU1fNF9MT05HKERpc3BsYXlDb252ZXJ0b3IuSW5zdGFuY2UuZGF0ZV9tYWdpYyhvcENvZGUgPT09IEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX1VUQ0RBVEUpKTtcclxuICAgICAgICByZXNWYWwuQXR0ciA9IFN0b3JhZ2VBdHRyaWJ1dGUuREFURTsgLy8gREFURVxyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9BREREVDpcclxuICAgICAgICB2YWw4ID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTtcclxuICAgICAgICB2YWw3ID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTtcclxuICAgICAgICB2YWw2ID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTsgLy8gaG91cnNcclxuICAgICAgICB2YWw1ID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTsgLy8gZGF5c1xyXG4gICAgICAgIHZhbDQgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpOyAvLyBtb250aHNcclxuICAgICAgICB2YWwzID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTsgLy8geWVhcnNcclxuICAgICAgICB2YWwyID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTsgLy8gVGltZVxyXG4gICAgICAgIHZhbDEgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpOyAvLyBEYXRlXHJcbiAgICAgICAgYXdhaXQgdGhpcy5ldmFsX29wX2FkZERhdGVUaW1lKHJlc1ZhbCwgdmFsMSwgdmFsMiwgdmFsMywgdmFsNCwgdmFsNSwgdmFsNiwgdmFsNywgdmFsOCk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX0RJRkRUOlxyXG4gICAgICAgIHZhbDYgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpOyAvLyB0aW1lIGRpZmZcclxuICAgICAgICB2YWw1ID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTsgLy8gZGF0ZSBkaWZmXHJcbiAgICAgICAgdmFsNCA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7IC8vIHRpbWUgMlxyXG4gICAgICAgIHZhbDMgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpOyAvLyBkYXRlIDJcclxuICAgICAgICB2YWwyID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTsgLy8gVGltZSAxXHJcbiAgICAgICAgdmFsMSA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7IC8vIERhdGUgMVxyXG4gICAgICAgIGF3YWl0IHRoaXMuZXZhbF9vcF9kaWZkdChyZXNWYWwsIHZhbDEsIHZhbDIsIHZhbDMsIHZhbDQsIHZhbDUsIHZhbDYpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9WQVJQUkVWOlxyXG4gICAgICAgIHZhbDEgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpO1xyXG4gICAgICAgIC8vIGV4cF9pdG1fMl92ZWUgKCk7XHJcbiAgICAgICAgdGhpcy5leHBfZ2V0X3ZhcihyZXNWYWwsIHZhbDEsIHRydWUpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9WQVJDVVJSOlxyXG4gICAgICAgIHZhbDEgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpO1xyXG4gICAgICAgIHRoaXMuZXhwX2dldF92YXIocmVzVmFsLCB2YWwxLCBmYWxzZSk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX1ZBUk1PRDpcclxuICAgICAgICB2YWwxID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTtcclxuICAgICAgICB0aGlzLmV2YWxfb3BfdmFybW9kKHJlc1ZhbCwgdmFsMSk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX1ZBUklOUDpcclxuICAgICAgICB2YWwxID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTtcclxuICAgICAgICB0aGlzLmV2YWxfb3BfdmFyaW5wKHJlc1ZhbCwgdmFsMSk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX1ZBUk5BTUU6XHJcbiAgICAgICAgdmFsMSA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7XHJcbiAgICAgICAgdGhpcy5ldmFsX29wX3Zhcm5hbWUocmVzVmFsLCB2YWwxKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfVkFSRElTUExBWU5BTUU6XHJcbiAgICAgICAgdmFsMSA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7XHJcbiAgICAgICAgdGhpcy5ldmFsX29wX1ZhckRpc3BsYXlOYW1lKHJlc1ZhbCwgdmFsMSk7XHJcbiAgICAgICAgZXhwU3RyVHJhY2tlci5yZXNldE51bGxSZXN1bHQoKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfVkFSQ09OVFJPTElEOlxyXG4gICAgICAgIHZhbDEgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpO1xyXG4gICAgICAgIHRoaXMuZXZhbF9vcF9WYXJDb250cm9sSUQocmVzVmFsLCB2YWwxKTtcclxuICAgICAgICBleHBTdHJUcmFja2VyLnJlc2V0TnVsbFJlc3VsdCgpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9DT05UUk9MSVRFTVNMSVNUOlxyXG4gICAgICAgIHZhbDEgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpO1xyXG4gICAgICAgIGF3YWl0IHRoaXMuZXZhbF9vcF9Db250cm9sSXRlbXNMaXN0KHJlc1ZhbCwgdmFsMSk7XHJcbiAgICAgICAgZXhwU3RyVHJhY2tlci5yZXNldE51bGxSZXN1bHQoKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfQ09OVFJPTERJU1BMQVlMSVNUOlxyXG4gICAgICAgIHZhbDEgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpO1xyXG4gICAgICAgIGF3YWl0IHRoaXMuZXZhbF9vcF9Db250cm9sRGlzcGxheUxpc3QocmVzVmFsLCB2YWwxKTtcclxuICAgICAgICBleHBTdHJUcmFja2VyLnJlc2V0TnVsbFJlc3VsdCgpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9WSUVXTU9EOlxyXG4gICAgICAgIHZhbDEgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpO1xyXG4gICAgICAgIHRoaXMuZXZhbF9vcF92aWV3bW9kKHJlc1ZhbCwgdmFsMSk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX1RJTUU6XHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfVVRDVElNRTpcclxuICAgICAgICByZXNWYWwuTWdOdW1WYWwgPSBuZXcgTlVNX1RZUEUoKTtcclxuICAgICAgICByZXNWYWwuTWdOdW1WYWwuTlVNXzRfTE9ORyhEaXNwbGF5Q29udmVydG9yLkluc3RhbmNlLnRpbWVfbWFnaWMob3BDb2RlID09PSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9VVENUSU1FKSk7XHJcbiAgICAgICAgcmVzVmFsLkF0dHIgPSBTdG9yYWdlQXR0cmlidXRlLlRJTUU7IC8vIFRJTUVcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfTVRJTUU6XHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfVVRDTVRJTUU6XHJcbiAgICAgICAgcmVzVmFsLk1nTnVtVmFsID0gbmV3IE5VTV9UWVBFKCk7XHJcbiAgICAgICAgcmVzVmFsLk1nTnVtVmFsLk5VTV80X0xPTkcoRGlzcGxheUNvbnZlcnRvci5JbnN0YW5jZS5tdGltZV9tYWdpYyhvcENvZGUgPT09IEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX1VUQ01USU1FKSk7XHJcbiAgICAgICAgcmVzVmFsLkF0dHIgPSBTdG9yYWdlQXR0cmlidXRlLlRJTUU7IC8vIFRJTUVcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfUFdSOlxyXG4gICAgICAgIHZhbDIgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpOyAvLyBwb3dlclxyXG4gICAgICAgIHZhbDEgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpOyAvLyBudW1iZXJcclxuICAgICAgICByZXNWYWwuTWdOdW1WYWwgPSBuZXcgTlVNX1RZUEUoKTtcclxuICAgICAgICByZXNWYWwuTWdOdW1WYWwgPSBOVU1fVFlQRS5ldmFsX29wX3B3cih2YWwxLk1nTnVtVmFsLCB2YWwyLk1nTnVtVmFsKTtcclxuICAgICAgICByZXNWYWwuSXNOdWxsID0gKHJlc1ZhbC5NZ051bVZhbCA9PSBudWxsKTtcclxuICAgICAgICByZXNWYWwuQXR0ciA9IFN0b3JhZ2VBdHRyaWJ1dGUuTlVNRVJJQztcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfTE9HOlxyXG4gICAgICAgIHZhbDEgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpO1xyXG4gICAgICAgIHJlc1ZhbC5NZ051bVZhbCA9IE5VTV9UWVBFLmV2YWxfb3BfbG9nKHZhbDEuTWdOdW1WYWwpO1xyXG4gICAgICAgIHJlc1ZhbC5Jc051bGwgPSAocmVzVmFsLk1nTnVtVmFsID09IG51bGwpO1xyXG4gICAgICAgIHJlc1ZhbC5BdHRyID0gU3RvcmFnZUF0dHJpYnV0ZS5OVU1FUklDO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9FWFA6XHJcbiAgICAgICAgdmFsMSA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7XHJcbiAgICAgICAgcmVzVmFsLk1nTnVtVmFsID0gTlVNX1RZUEUuZXZhbF9vcF9leHAodmFsMS5NZ051bVZhbCk7XHJcbiAgICAgICAgcmVzVmFsLklzTnVsbCA9IChyZXNWYWwuTWdOdW1WYWwgPT0gbnVsbCk7XHJcbiAgICAgICAgcmVzVmFsLkF0dHIgPSBTdG9yYWdlQXR0cmlidXRlLk5VTUVSSUM7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX0FCUzpcclxuICAgICAgICB2YWwxID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTtcclxuICAgICAgICByZXNWYWwuTWdOdW1WYWwgPSBOVU1fVFlQRS5ldmFsX29wX2Ficyh2YWwxLk1nTnVtVmFsKTtcclxuICAgICAgICByZXNWYWwuSXNOdWxsID0gKHJlc1ZhbC5NZ051bVZhbCA9PSBudWxsKTtcclxuICAgICAgICByZXNWYWwuQXR0ciA9IFN0b3JhZ2VBdHRyaWJ1dGUuTlVNRVJJQztcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfU0lOOlxyXG4gICAgICAgIHZhbDEgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpO1xyXG4gICAgICAgIHJlc1ZhbC5NZ051bVZhbCA9IE5VTV9UWVBFLmV2YWxfb3Bfc2luKHZhbDEuTWdOdW1WYWwpO1xyXG4gICAgICAgIHJlc1ZhbC5Jc051bGwgPSAocmVzVmFsLk1nTnVtVmFsID09IG51bGwpO1xyXG4gICAgICAgIHJlc1ZhbC5BdHRyID0gU3RvcmFnZUF0dHJpYnV0ZS5OVU1FUklDO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9DT1M6XHJcbiAgICAgICAgdmFsMSA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7XHJcbiAgICAgICAgcmVzVmFsLk1nTnVtVmFsID0gTlVNX1RZUEUuZXZhbF9vcF9jb3ModmFsMS5NZ051bVZhbCk7XHJcbiAgICAgICAgcmVzVmFsLklzTnVsbCA9IChyZXNWYWwuTWdOdW1WYWwgPT0gbnVsbCk7XHJcbiAgICAgICAgcmVzVmFsLkF0dHIgPSBTdG9yYWdlQXR0cmlidXRlLk5VTUVSSUM7XHJcblxyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9UQU46XHJcbiAgICAgICAgdmFsMSA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7XHJcbiAgICAgICAgcmVzVmFsLk1nTnVtVmFsID0gTlVNX1RZUEUuZXZhbF9vcF90YW4odmFsMS5NZ051bVZhbCk7XHJcbiAgICAgICAgcmVzVmFsLklzTnVsbCA9IChyZXNWYWwuTWdOdW1WYWwgPT0gbnVsbCk7XHJcbiAgICAgICAgcmVzVmFsLkF0dHIgPSBTdG9yYWdlQXR0cmlidXRlLk5VTUVSSUM7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX0FTSU46XHJcbiAgICAgICAgdmFsMSA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7XHJcbiAgICAgICAgcmVzVmFsLk1nTnVtVmFsID0gTlVNX1RZUEUuZXZhbF9vcF9hc2luKHZhbDEuTWdOdW1WYWwpO1xyXG4gICAgICAgIHJlc1ZhbC5Jc051bGwgPSAocmVzVmFsLk1nTnVtVmFsID09IG51bGwpO1xyXG4gICAgICAgIHJlc1ZhbC5BdHRyID0gU3RvcmFnZUF0dHJpYnV0ZS5OVU1FUklDO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9BQ09TOlxyXG4gICAgICAgIHZhbDEgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpO1xyXG4gICAgICAgIHJlc1ZhbC5NZ051bVZhbCA9IE5VTV9UWVBFLmV2YWxfb3BfYWNvcyh2YWwxLk1nTnVtVmFsKTtcclxuICAgICAgICByZXNWYWwuSXNOdWxsID0gKHJlc1ZhbC5NZ051bVZhbCA9PSBudWxsKTtcclxuICAgICAgICByZXNWYWwuQXR0ciA9IFN0b3JhZ2VBdHRyaWJ1dGUuTlVNRVJJQztcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfQVRBTjpcclxuICAgICAgICB2YWwxID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTtcclxuICAgICAgICByZXNWYWwuTWdOdW1WYWwgPSBOVU1fVFlQRS5ldmFsX29wX2F0YW4odmFsMS5NZ051bVZhbCk7XHJcbiAgICAgICAgcmVzVmFsLklzTnVsbCA9IChyZXNWYWwuTWdOdW1WYWwgPT0gbnVsbCk7XHJcbiAgICAgICAgcmVzVmFsLkF0dHIgPSBTdG9yYWdlQXR0cmlidXRlLk5VTUVSSUM7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX1JBTkQ6XHJcbiAgICAgICAgdmFsMSA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7XHJcbiAgICAgICAgcmVzVmFsLk1nTnVtVmFsID0gTlVNX1RZUEUuZXZhbF9vcF9yYW5kKHZhbDEuTWdOdW1WYWwpO1xyXG4gICAgICAgIHJlc1ZhbC5Jc051bGwgPSAocmVzVmFsLk1nTnVtVmFsID09IG51bGwpO1xyXG4gICAgICAgIHJlc1ZhbC5BdHRyID0gU3RvcmFnZUF0dHJpYnV0ZS5OVU1FUklDO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9NSU46XHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfTUFYOlxyXG4gICAgICAgIG5BcmdzID0gdmFsU3RhY2sucG9wKCk7XHJcbiAgICAgICAgdGhpcy52YWxfY3B5KDxFeHBWYWw+dmFsU3RhY2sucG9wKCksIHJlc1ZhbCk7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgIGZvciAoaiA9IDE7IGogPCBuQXJnczsgaisrKSB7XHJcbiAgICAgICAgICAgIHZhbDEgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpO1xyXG4gICAgICAgICAgICBpZiAob3BDb2RlID09PSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9NSU4pIHtcclxuICAgICAgICAgICAgICBpZiAoRXhwcmVzc2lvbkV2YWx1YXRvci52YWxfY21wX2FueSh2YWwxLCByZXNWYWwsIHRydWUpIDwgMClcclxuICAgICAgICAgICAgICAgIHRoaXMudmFsX2NweSh2YWwxLCByZXNWYWwpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vIEVYUF9PUF9NQVhcclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgaWYgKEV4cHJlc3Npb25FdmFsdWF0b3IudmFsX2NtcF9hbnkodmFsMSwgcmVzVmFsLCB0cnVlKSA+IDApXHJcbiAgICAgICAgICAgICAgICB0aGlzLnZhbF9jcHkodmFsMSwgcmVzVmFsKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gY2F0Y2ggKG9uZU9mVmFsdWVzSXNOdWxsKSB7XHJcbiAgICAgICAgICBpZiAob25lT2ZWYWx1ZXNJc051bGwgaW5zdGFuY2VvZiBOdWxsVmFsdWVFeGNlcHRpb24pIHtcclxuICAgICAgICAgICAgZm9yICg7IHZhbFN0YWNrLmNvdW50KCkgPiAwICYmIGogPCBuQXJnczsgaisrKVxyXG4gICAgICAgICAgICAgIC8vIGNsZWFuIHF1ZXVlXHJcbiAgICAgICAgICAgICAgdmFsU3RhY2sucG9wKCk7XHJcbiAgICAgICAgICAgIHJlc1ZhbC5Jc051bGwgPSB0cnVlO1xyXG4gICAgICAgICAgICByZXNWYWwuQXR0ciA9IG9uZU9mVmFsdWVzSXNOdWxsLmdldEF0dHIoKTtcclxuICAgICAgICAgIH0gZWxzZSB0aHJvdyBvbmVPZlZhbHVlc0lzTnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX1JBTkdFOlxyXG4gICAgICAgIHZhbDMgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpOyAvLyB1cHBlcjogQSB2YWx1ZSB0aGF0IHJlcHJlc2VudHMgdGhlIHVwcGVyIGxpbWl0IG9mIHRoZSByYW5nZS5cclxuICAgICAgICB2YWwyID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTsgLy8gbG93ZXI6IEEgdmFsdWUgdGhhdCByZXByZXNlbnRzIHRoZSBsb3dlciBsaW1pdCBvZiB0aGUgcmFuZ2UuXHJcbiAgICAgICAgdmFsMSA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7IC8vIHZhbHVlOiBUaGUgdmFsdWUgY2hlY2tlZC5cclxuICAgICAgICB0aGlzLmV2YWxfb3BfcmFuZ2UodmFsMSwgdmFsMiwgdmFsMywgcmVzVmFsKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfUkVQOlxyXG4gICAgICAgIHZhbDQgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpO1xyXG4gICAgICAgIC8vIGxlbl9vcmlnaW46IFRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyB0aGF0IHdpbGwgYmUgbW92ZWQgZnJvbSBvcmlnaW4gdG8gdGFyZ2V0LCBzdGFydGluZyBmcm9tIHRoZSBsZWZ0bW9zdCBjaGFyYWN0ZXIgb2Ygb3JpZ2luLlxyXG4gICAgICAgIHZhbDMgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpO1xyXG4gICAgICAgIC8vIHBvc190YXJnZXQ6IFRoZSBmaXJzdCBwb3NpdGlvbiBpbiB0aGUgdGFyZ2V0IHN0cmluZyB0aGF0IHdpbGwgcmVjZWl2ZSB0aGUgc3Vic3RyaW5nIGZyb20gb3JpZ2luLlxyXG4gICAgICAgIHZhbDIgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpO1xyXG4gICAgICAgIC8vIG9yaWdpbjogVGhlIGFscGhhIHN0cmluZyBvciBleHByZXNzaW9uIHRoYXQgcHJvdmlkZXMgdGhlIHN1YnN0cmluZyB0byBiZSBjb3BpZWQgdG8gdGFyZ2V0LlxyXG4gICAgICAgIHZhbDEgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpO1xyXG4gICAgICAgIC8vIHRhcmdldDogVGhlIHRhcmdldCBhbHBoYSBzdHJpbmcgb3IgZXhwcmVzc2lvbiB3aGVyZSB0aGUgcmVwbGFjZW1lbnQgd2lsbCB0YWtlIHBsYWNlLlxyXG5cclxuICAgICAgICAvLyBjb3VudCB0aGUgbnVtYmVyIG9mIGJ5dGVzLCBub3QgY2hhcmFjdGVycyAoSlBOOiBEQkNTIHN1cHBvcnQpXHJcbiAgICAgICAgaWYgKHNwZWNpYWxBbnNpRXhwcmVzc2lvbiB8fFxyXG4gICAgICAgICAgISh2YWwxLkF0dHIgPT09IFN0b3JhZ2VBdHRyaWJ1dGUuVU5JQ09ERSB8fFxyXG4gICAgICAgICAgICB2YWwyLkF0dHIgPT09IFN0b3JhZ2VBdHRyaWJ1dGUuVU5JQ09ERSkpIHtcclxuICAgICAgICAgIHJlc1ZhbC5BdHRyID0gU3RvcmFnZUF0dHJpYnV0ZS5BTFBIQTtcclxuICAgICAgICAgIHJlc1ZhbC5TdHJWYWwgPSBVdGlsU3RyQnl0ZU1vZGUucmVwQih2YWwxLlN0clZhbCwgdmFsMi5TdHJWYWwsIHZhbDMuTWdOdW1WYWwuTlVNXzJfTE9ORygpLFxyXG4gICAgICAgICAgICB2YWw0Lk1nTnVtVmFsLk5VTV8yX0xPTkcoKSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuZXZhbF9vcF9yZXBfMShyZXNWYWwsIHZhbDEsIHZhbDIsIHZhbDMsIHZhbDQpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX0lOUzpcclxuICAgICAgICB2YWw0ID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTtcclxuICAgICAgICAvLyBsZW5ndGg6IEEgbnVtYmVyIHRoYXQgcmVwcmVzZW50cyB0aGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMgZnJvbSBzb3VyY2UgdGhhdCB3aWxsIGJlIGluc2VydGVkIGludG8gdGFyZ2V0LlxyXG4gICAgICAgIHZhbDMgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpOyAvLyBwb3NpdGlvbjogQSBudW1iZXIgdGhhdCByZXByZXNlbnRzIHRoZSBzdGFydGluZyBwb3NpdGlvbiBpbiB0YXJnZXQuXHJcbiAgICAgICAgdmFsMiA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7IC8vIHNvdXJjZTogQW4gYWxwaGEgc3RyaW5nIHRoYXQgcmVwcmVzZW50cyB0aGUgc291cmNlIHN0cmluZy5cclxuICAgICAgICB2YWwxID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTsgLy8gdGFyZ2V0OiBBbiBhbHBoYSBzdHJpbmcgdGhhdCByZXByZXNlbnRzIHRoZSB0YXJnZXQgc3RyaW5nXHJcblxyXG4gICAgICAgIC8vIGNvdW50IHRoZSBudW1iZXIgb2YgYnl0ZXMsIG5vdCBjaGFyYWN0ZXJzIChKUE46IERCQ1Mgc3VwcG9ydClcclxuICAgICAgICBpZiAoc3BlY2lhbEFuc2lFeHByZXNzaW9uIHx8XHJcbiAgICAgICAgICAhKHZhbDEuQXR0ciA9PT0gU3RvcmFnZUF0dHJpYnV0ZS5VTklDT0RFIHx8XHJcbiAgICAgICAgICAgIHZhbDIuQXR0ciA9PT0gU3RvcmFnZUF0dHJpYnV0ZS5VTklDT0RFKSkge1xyXG4gICAgICAgICAgcmVzVmFsLkF0dHIgPSBTdG9yYWdlQXR0cmlidXRlLkFMUEhBO1xyXG4gICAgICAgICAgcmVzVmFsLlN0clZhbCA9IFV0aWxTdHJCeXRlTW9kZS5pbnNCKHZhbDEuU3RyVmFsLCB2YWwyLlN0clZhbCwgdmFsMy5NZ051bVZhbC5OVU1fMl9MT05HKCksXHJcbiAgICAgICAgICAgIHZhbDQuTWdOdW1WYWwuTlVNXzJfTE9ORygpKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5ldmFsX29wX2lucyhyZXNWYWwsIHZhbDEsIHZhbDIsIHZhbDMsIHZhbDQpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX0RFTDpcclxuICAgICAgICB2YWwzID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTtcclxuICAgICAgICAvLyBsZW5ndGg6IFRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyB0byBiZSBkZWxldGVkLCBiZWdpbm5pbmcgd2l0aCBwb3NpdGlvbiBzdGFydCBhbmQgcHJvY2VlZGluZyByaWdodHdhcmQuXHJcbiAgICAgICAgdmFsMiA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7IC8vIHN0YXJ0IDogVGhlIHBvc2l0aW9uIG9mIHRoZSBmaXJzdCBjaGFyYWN0ZXIgdG8gYmUgZGVsZXRlZC5cclxuICAgICAgICB2YWwxID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTsgLy8gc3RyaW5nOiBBbiBhbHBoYSBzdHJpbmcgb3IgYW4gYWxwaGEgc3RyaW5nIGV4cHJlc3Npb24uXHJcblxyXG4gICAgICAgIC8vIGNvdW50IHRoZSBudW1iZXIgb2YgYnl0ZXMsIG5vdCBjaGFyYWN0ZXJzIChKUE46IERCQ1Mgc3VwcG9ydClcclxuICAgICAgICBpZiAoc3BlY2lhbEFuc2lFeHByZXNzaW9uIHx8IHZhbDEuQXR0ciAhPT0gU3RvcmFnZUF0dHJpYnV0ZS5VTklDT0RFKSB7XHJcbiAgICAgICAgICByZXNWYWwuQXR0ciA9IFN0b3JhZ2VBdHRyaWJ1dGUuQUxQSEE7XHJcbiAgICAgICAgICByZXNWYWwuU3RyVmFsID0gVXRpbFN0ckJ5dGVNb2RlLmRlbEIodmFsMS5TdHJWYWwsIHZhbDIuTWdOdW1WYWwuTlVNXzJfTE9ORygpLFxyXG4gICAgICAgICAgICB2YWwzLk1nTnVtVmFsLk5VTV8yX0xPTkcoKSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuZXZhbF9vcF9kZWwocmVzVmFsLCB2YWwxLCB2YWwyLCB2YWwzKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9GTElQOlxyXG4gICAgICAgIHZhbDEgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpO1xyXG4gICAgICAgIHRoaXMuZXZhbF9vcF9mbGlwKHJlc1ZhbCwgdmFsMSk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX1VQUEVSOlxyXG4gICAgICAgIHZhbDEgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpO1xyXG4gICAgICAgIHRoaXMuZXZhbF9vcF91cHBlcihyZXNWYWwsIHZhbDEpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9MT1dFUjpcclxuICAgICAgICB2YWwxID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTtcclxuICAgICAgICB0aGlzLmV2YWxfb3BfbG93ZXIocmVzVmFsLCB2YWwxKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfQ1JDOlxyXG4gICAgICAgIHZhbDIgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpO1xyXG4gICAgICAgIC8vIG51bWVyaWM6IEEgbnVtYmVyIHRoYXQgcmVwcmVzZW50cyB0aGUgQ1JDIGFsZ29yaXRobS4gSW4gdGhpcyB2ZXJzaW9uIG9mIE1hZ2ljIHVzZSAwIHRvIGFwcGx5IENSQy0xNi5cclxuICAgICAgICB2YWwxID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTsgLy8gc3RyaW5nIDogQW4gYWxwaGEgc3RyaW5nIHRvIHdoaWNoIHRoZSBDUkMgaXMgYXBwbGllZC5cclxuICAgICAgICB0aGlzLmV2YWxfb3BfY3JjKHJlc1ZhbCwgdmFsMSwgdmFsMik7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX0NIS0RHVDpcclxuICAgICAgICB2YWwyID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTsgLy8gMCBvciAxIChudW1iZXIpIGZvciBNb2R1bHVzIDEwIG9yIE1vZHVsdXMgMTEsIHJlc3BlY3RpdmVseS5cclxuICAgICAgICB2YWwxID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTtcclxuICAgICAgICAvLyBBbiBhbHBoYSBzdHJpbmcgdGhhdCByZXByZXNlbnRzIHRoZSBudW1iZXIgZm9yIHdoaWNoIHRoZSBjaGVjayBkaWdpdCB3aWxsIGJlIGNhbGN1bGF0ZWRcclxuICAgICAgICB0aGlzLmV2YWxfb3BfY2hrZGd0KHJlc1ZhbCwgdmFsMSwgdmFsMik7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX1NPVU5EWDpcclxuICAgICAgICB2YWwxID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTtcclxuICAgICAgICB0aGlzLmV2YWxfb3Bfc291bmR4KHJlc1ZhbCwgdmFsMSk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX0hTVFI6XHJcbiAgICAgICAgdmFsMSA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7XHJcbiAgICAgICAgdGhpcy5ldmFsX29wX2hzdHIocmVzVmFsLCB2YWwxKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfSFZBTDpcclxuICAgICAgICB2YWwxID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTtcclxuICAgICAgICB0aGlzLmV2YWxfb3BfaHZhbChyZXNWYWwsIHZhbDEpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9DSFI6XHJcbiAgICAgICAgdmFsMSA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7XHJcbiAgICAgICAgdGhpcy5ldmFsX29wX2NocihyZXNWYWwsIHZhbDEpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9BU0M6XHJcbiAgICAgICAgdmFsMSA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7XHJcbiAgICAgICAgdGhpcy5ldmFsX29wX2FzYyhyZXNWYWwsIHZhbDEpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9NU1RSOlxyXG4gICAgICAgIHZhbDIgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpO1xyXG4gICAgICAgIHZhbDEgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpO1xyXG4gICAgICAgIHRoaXMuZXZhbF9vcF9tc3RyKHJlc1ZhbCwgdmFsMSwgdmFsMik7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX01WQUw6XHJcbiAgICAgICAgdmFsMSA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7XHJcbiAgICAgICAgdGhpcy5ldmFsX29wX212YWwocmVzVmFsLCB2YWwxKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfRFNUUjpcclxuICAgICAgICB2YWwyID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTsgLy8gcGljdHVyZSBzdHJpbmdcclxuICAgICAgICB2YWwxID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTsgLy8gZGF0ZSBzdHJpbmcgaXQncyBMT0dJQ0FMID8/Pz8/P1xyXG4gICAgICAgIHRoaXMuZXZhbF9vcF9kc3RyKHJlc1ZhbCwgdmFsMSwgdmFsMiwgRGlzcGxheUNvbnZlcnRvci5JbnN0YW5jZSk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX0RWQUw6XHJcbiAgICAgICAgdmFsMiA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7IC8vIHBpY3R1cmUgIGZvcm1hdCBvZiBkYXRlIHN0cmluZyBvdXRwdXRcclxuICAgICAgICB2YWwxID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTsgLy8gZGF0ZSBzdHJpbmdcclxuICAgICAgICB0aGlzLmV2YWxfb3BfZHZhbChyZXNWYWwsIHZhbDEsIHZhbDIsIERpc3BsYXlDb252ZXJ0b3IuSW5zdGFuY2UpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9UU1RSOlxyXG4gICAgICAgIHZhbDIgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpOyAvLyBwaWN0dXJlIGZvcm1hdCBvZiB0aW1lIHN0cmluZyBvdXRwdXRcclxuICAgICAgICB2YWwxID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTsgLy8gdGltZSBzdHJpbmdcclxuICAgICAgICB0aGlzLmV2YWxfb3BfdHN0cihyZXNWYWwsIHZhbDEsIHZhbDIsIERpc3BsYXlDb252ZXJ0b3IuSW5zdGFuY2UsIGZhbHNlKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfTVRTVFI6XHJcbiAgICAgICAgdmFsMiA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7IC8vIHBpY3R1cmUgZm9ybWF0IG9mIHRpbWUgc3RyaW5nIG91dHB1dFxyXG4gICAgICAgIHZhbDEgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpOyAvLyB0aW1lIHN0cmluZ1xyXG4gICAgICAgIHRoaXMuZXZhbF9vcF90c3RyKHJlc1ZhbCwgdmFsMSwgdmFsMiwgRGlzcGxheUNvbnZlcnRvci5JbnN0YW5jZSwgdHJ1ZSk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX1RWQUw6XHJcbiAgICAgICAgdmFsMiA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7IC8vIHBpY3R1cmUgc3RyaW5nXHJcbiAgICAgICAgdmFsMSA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7IC8vIHRpbWUgc3RyaW5nXHJcbiAgICAgICAgdGhpcy5ldmFsX29wX3R2YWwocmVzVmFsLCB2YWwxLCB2YWwyLCBEaXNwbGF5Q29udmVydG9yLkluc3RhbmNlLCBmYWxzZSk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX01UVkFMOlxyXG4gICAgICAgIHZhbDIgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpOyAvLyBwaWN0dXJlIHN0cmluZ1xyXG4gICAgICAgIHZhbDEgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpOyAvLyB0aW1lIHN0cmluZ1xyXG4gICAgICAgIHRoaXMuZXZhbF9vcF90dmFsKHJlc1ZhbCwgdmFsMSwgdmFsMiwgRGlzcGxheUNvbnZlcnRvci5JbnN0YW5jZSwgdHJ1ZSk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX0RBWTpcclxuICAgICAgICB2YWwxID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTtcclxuICAgICAgICB0aGlzLmV2YWxfb3BfZGF5KHJlc1ZhbCwgdmFsMSk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX01PTlRIOlxyXG4gICAgICAgIHZhbDEgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpO1xyXG4gICAgICAgIHRoaXMuZXZhbF9vcF9tb250aChyZXNWYWwsIHZhbDEpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9ZRUFSOlxyXG4gICAgICAgIHZhbDEgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpO1xyXG4gICAgICAgIHRoaXMuZXZhbF9vcF95ZWFyKHJlc1ZhbCwgdmFsMSk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX0RPVzpcclxuICAgICAgICB2YWwxID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTtcclxuICAgICAgICB0aGlzLmV2YWxfb3BfZG93KHJlc1ZhbCwgdmFsMSk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX0NET1c6XHJcbiAgICAgICAgdmFsMSA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7XHJcbiAgICAgICAgdGhpcy5ldmFsX29wX2Nkb3cocmVzVmFsLCB2YWwxLk1nTnVtVmFsLCBEaXNwbGF5Q29udmVydG9yLkluc3RhbmNlKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfQ01PTlRIOlxyXG4gICAgICAgIHZhbDEgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpO1xyXG4gICAgICAgIHRoaXMuZXZhbF9vcF9jbW9udGgocmVzVmFsLCB2YWwxLk1nTnVtVmFsLCBEaXNwbGF5Q29udmVydG9yLkluc3RhbmNlKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfTkRPVzpcclxuICAgICAgICB2YWwxID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTsgLy8gbnVtYmVyIG9yIGRheSBvZiB3ZWVrXHJcbiAgICAgICAgdGhpcy5ldmFsX29wX25kb3cocmVzVmFsLCB2YWwxLCBEaXNwbGF5Q29udmVydG9yLkluc3RhbmNlKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfTk1PTlRIOlxyXG4gICAgICAgIHZhbDEgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpOyAvLyBudW1iZXIgb3IgbW9udGggb2YgeWVhclxyXG4gICAgICAgIHRoaXMuZXZhbF9vcF9ubW9udGgocmVzVmFsLCB2YWwxLCBEaXNwbGF5Q29udmVydG9yLkluc3RhbmNlKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfU0VDT05EOlxyXG4gICAgICAgIHZhbDEgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpO1xyXG4gICAgICAgIHRoaXMuZXZhbF9vcF9zZWNvbmQocmVzVmFsLCB2YWwxKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfTUlOVVRFOlxyXG4gICAgICAgIHZhbDEgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpO1xyXG4gICAgICAgIHRoaXMuZXZhbF9vcF9taW51dGUocmVzVmFsLCB2YWwxKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfSE9VUjpcclxuICAgICAgICB2YWwxID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTtcclxuICAgICAgICB0aGlzLmV2YWxfb3BfaG91cihyZXNWYWwsIHZhbDEpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9ERUxBWTpcclxuICAgICAgICB2YWwxID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTtcclxuICAgICAgICAvLyB0aGlzIGZ1bmN0aW9uIG5vdCB3YXJrLCBub3QgY2hlY2tlZFxyXG4gICAgICAgIHRoaXMuZXZhbF9vcF9kZWxheSh2YWwxKTtcclxuICAgICAgICByZXNWYWwuQXR0ciA9IFN0b3JhZ2VBdHRyaWJ1dGUuQk9PTEVBTjtcclxuICAgICAgICByZXNWYWwuQm9vbFZhbCA9IHRydWU7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX0lETEU6XHJcbiAgICAgICAgdGhpcy5ldmFsX29wX2lkbGUocmVzVmFsKTtcclxuICAgICAgICBicmVhaztcclxuXHJcblxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX0FERERBVEU6XHJcbiAgICAgICAgdmFsNCA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7IC8vIGRheXM6IFRoZSBudW1iZXIgb2YgZGF5cyB0byBhZGQgdG8gZGF0ZS4gTWF5IGJlIHplcm8uXHJcbiAgICAgICAgdmFsMyA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7IC8vIG1vbnRoczogVGhlIG51bWJlciBvZiBtb250aHMgdG8gYWRkIHRvIGRhdGUuIE1heSBiZSB6ZXJvLlxyXG4gICAgICAgIHZhbDIgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpOyAvLyB5ZWFycyA6IFRoZSBudW1iZXIgb2YgeWVhcnMgdG8gYWRkIHRvIGRhdGUuIE1heSBiZSB6ZXJvLlxyXG4gICAgICAgIHZhbDEgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpOyAvLyBkYXRlIDogQSBkYXRlLlxyXG4gICAgICAgIHRoaXMuZXZhbF9vcF9hZGRkYXRlKHJlc1ZhbCwgdmFsMSwgdmFsMiwgdmFsMywgdmFsNCk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX0FERFRJTUU6XHJcbiAgICAgICAgdmFsNCA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7IC8vIHNlY29uZHM6IFRoZSBudW1iZXIgb2Ygc2Vjb25kcyB0byBhZGQgdG8gdGltZS5cclxuICAgICAgICB2YWwzID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTsgLy8gbWludXRlczogVGhlIG51bWJlciBvZiBtaW51dGVzIHRvIGFkZCB0byB0aW1lLlxyXG4gICAgICAgIHZhbDIgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpOyAvLyBob3VycyA6IFRoZSBudW1iZXIgb2YgaG91cnMgdG8gYWRkIHRvIHRpbWVcclxuICAgICAgICB2YWwxID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTsgLy8gdGltZSA6IEEgdGltZSB2YWx1ZS5cclxuICAgICAgICB0aGlzLmV2YWxfb3BfYWRkdGltZShyZXNWYWwsIHZhbDEsIHZhbDIsIHZhbDMsIHZhbDQpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9PV05FUjpcclxuICAgICAgICByZXNWYWwuQXR0ciA9IFN0b3JhZ2VBdHRyaWJ1dGUuQUxQSEE7XHJcbiAgICAgICAgcmVzVmFsLlN0clZhbCA9IEVudmlyb25tZW50Lkluc3RhbmNlLmdldE93bmVyKCk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX1ZBUkFUVFI6XHJcbiAgICAgICAgdmFsMSA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7XHJcbiAgICAgICAgdGhpcy5ldmFsX29wX3ZhcmF0dHIocmVzVmFsLCB2YWwxKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfVkFSUElDOlxyXG4gICAgICAgIHZhbDIgPSAoPEV4cFZhbD52YWxTdGFjay5wb3AoKSk7XHJcbiAgICAgICAgdmFsMSA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7XHJcbiAgICAgICAgLy8gdG8gYWRkIHRoaXMgbWV0aG9kXHJcbiAgICAgICAgdGhpcy5ldmFsX29wX3ZhcnBpYyhyZXNWYWwsIHZhbDEsIHZhbDIpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9EQlJPVU5EOlxyXG4gICAgICAgIHZhbDIgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpO1xyXG4gICAgICAgIHZhbDEgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpO1xyXG4gICAgICAgIC8vIHRvIGFkZCB0aGlzIG1ldGhvZFxyXG4gICAgICAgIHRoaXMuZXZhbF9vcF9kYnJvdW5kKHJlc1ZhbCwgdmFsMSwgdmFsMik7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX05VTEw6XHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfTlVMTF9BOlxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX05VTExfTjpcclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9OVUxMX0I6XHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfTlVMTF9EOlxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX05VTExfVDpcclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9OVUxMX1U6XHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfTlVMTF9POlxyXG4gICAgICAgIHRoaXMuZXhwX251bGxfdmFsX2dldChleHBlY3RlZFR5cGUsIG9wQ29kZSwgcmVzVmFsKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfSVNOVUxMOlxyXG4gICAgICAgIHZhbDEgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpO1xyXG4gICAgICAgIHJlc1ZhbC5Cb29sVmFsID0gdmFsMS5Jc051bGw7XHJcblxyXG4gICAgICAgIC8vIGlkZW50aWZ5IGEgc2l0dWF0aW9uIHdoZXJlIGEgdmFsdWUgd2FzIHVuLW51bGxpZmllZCBkdWUgdG8gXCJudWxsIGFyaXRobWV0aWNcIlxyXG4gICAgICAgIC8vIGFuZCBzdGlsbCwgbWFrZSBJU05VTEwoKSByZXR1cm4gVFJVRSBhbHRob3VnaCB0aGUgdmFsdWUgaXMgZmxhZ2dlZCBhcyBub24tbnVsbFxyXG4gICAgICAgIGlmICghdmFsMS5Jc051bGwgJiYgdmFsMS5PcmlnaW5hbE51bGwpXHJcbiAgICAgICAgICByZXNWYWwuQm9vbFZhbCA9IHZhbDEuT3JpZ2luYWxOdWxsO1xyXG5cclxuICAgICAgICByZXNWYWwuQXR0ciA9IFN0b3JhZ2VBdHRyaWJ1dGUuQk9PTEVBTjtcclxuXHJcbiAgICAgICAgLy8gbnVsbCB2YWx1ZXMgYWNjZXB0ZWQgaW50byB0aGUgSVNOVUxMKCkgZnVuY3Rpb24gZG8gbm90IG51bGxpZnkgdGhlXHJcbiAgICAgICAgLy8gV2hvbGUgZXhwcmVzc2lvbiwgdGh1cyBVTkxFU1MgU09NRVRISU5HIEVMU0UgbnVsbGlmaWVkIHRoZSBleHByZXNzaW9uLFxyXG4gICAgICAgIC8vIHdlIG1hcmsgaXQgYXMgTk9OLU5VTEwuIFdlIGNoZWNrIGlmIHNvbWV0aGluZyBlbHNlIG51bGxpZmllZCB0aGUgZXhwcmVzc2lvblxyXG4gICAgICAgIC8vIGJ5IHNjYW5uaW5nIHRoZSB2YWx1ZXMgY3VycmVudGx5IG9uIHRoZSBwYXJhbWV0ZXJzIHN0YWNrLlxyXG4gICAgICAgIGlmIChleHBTdHJUcmFja2VyLmlzTnVsbCgpKSB7XHJcbiAgICAgICAgICBsZXQgbXlBcnJheTogTGlzdDxFeHBWYWw+ID0gbmV3IExpc3Q8RXhwVmFsPigpO1xyXG4gICAgICAgICAgbGV0IHByZXZOdWxsOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICAgICAgICBsZXQgaTogbnVtYmVyO1xyXG4gICAgICAgICAgd2hpbGUgKCEodmFsU3RhY2suY291bnQoKSA9PT0gMCkgJiYgIXByZXZOdWxsKSB7XHJcbiAgICAgICAgICAgIG15QXJyYXkucHVzaCg8RXhwVmFsPnZhbFN0YWNrLnBvcCgpKTtcclxuICAgICAgICAgICAgaWYgKG15QXJyYXkuZ2V0X0l0ZW0obXlBcnJheS5sZW5ndGggLSAxKS5Jc051bGwpXHJcbiAgICAgICAgICAgICAgcHJldk51bGwgPSB0cnVlO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIGZvciAoaSA9IG15QXJyYXkubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pXHJcbiAgICAgICAgICAgIHZhbFN0YWNrLnB1c2gobXlBcnJheS5nZXRfSXRlbShpKSk7XHJcblxyXG4gICAgICAgICAgaWYgKCFwcmV2TnVsbClcclxuICAgICAgICAgICAgZXhwU3RyVHJhY2tlci5yZXNldE51bGxSZXN1bHQoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9CT006XHJcbiAgICAgICAgdmFsMSA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7XHJcbiAgICAgICAgdGhpcy5ldmFsX29wX2JvbShyZXNWYWwsIHZhbDEpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9CT1k6XHJcbiAgICAgICAgdmFsMSA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7XHJcbiAgICAgICAgdGhpcy5ldmFsX29wX2JveShyZXNWYWwsIHZhbDEpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9FT006XHJcbiAgICAgICAgdmFsMSA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7XHJcbiAgICAgICAgdGhpcy5ldmFsX29wX2VvbShyZXNWYWwsIHZhbDEpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9FT1k6XHJcbiAgICAgICAgdmFsMSA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7XHJcbiAgICAgICAgdGhpcy5ldmFsX29wX2VveShyZXNWYWwsIHZhbDEpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9ST0xMQkFDSzpcclxuICAgICAgICB2YWwyID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTsgLy8gc2hvdyBtZXNzYWdlXHJcbiAgICAgICAgdmFsMSA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7IC8vIGdlbmVyYXRpb24gKD8pXHJcbiAgICAgICAgYXdhaXQgdGhpcy5ldmFsX29wX3JvbGxiYWNrKHJlc1ZhbCwgdmFsMSwgdmFsMik7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX1ZBUlNFVDpcclxuICAgICAgICB2YWwyID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTsgLy8gdmFsdWVcclxuICAgICAgICB2YWwxID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTsgLy8gbnVtYmVyXHJcbiAgICAgICAgYXdhaXQgdGhpcy5ldmFsX29wX3ZhcnNldChyZXNWYWwsIHZhbDIsIHZhbDEpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9DVFJMX05BTUU6XHJcbiAgICAgICAgdGhpcy5ldmFsX29wX2N0cmxfbmFtZShyZXNWYWwpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuXHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfVERFUFRIOlxyXG4gICAgICAgIC8vIHVzZSB0aGUgY29udGV4dCB0YXNrIG9mIHRoZSBjdXJyZW50IHRhc2sgb2YgZXhwcmVzc2lvblxyXG4gICAgICAgIGxldCBjdXJyVHNrOiBUYXNrQmFzZSA9IDxUYXNrQmFzZT4gdGhpcy5FeHBUYXNrLkdldENvbnRleHRUYXNrKCk7XHJcbiAgICAgICAgbGVuID0gKGN1cnJUc2suZ2V0VGFza0RlcHRoKGZhbHNlKSkgLSAxOyAvLyBzdGFydCBmcm9tIEZpcnN0IFRhc2tCYXNlIGFuZCBub3QgZnJvbSBtYWluIFRhc2tCYXNlXHJcbiAgICAgICAgdGhpcy5Db25zdHJ1Y3RNYWdpY051bShyZXNWYWwsIGxlbiwgU3RvcmFnZUF0dHJpYnV0ZS5OVU1FUklDKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfSVNERUZBVUxUOlxyXG4gICAgICAgIHZhbDEgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpO1xyXG4gICAgICAgIHRoaXMuZXhwX2lzX2RlZmF1bHQocmVzVmFsLCB2YWwxKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfU1RSVE9LRU46XHJcbiAgICAgICAgdmFsMyA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7IC8vIERlbGltaXRlcnMgU3RyaW5nIC0gYWxwaGEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIGRlbGltaXRlciBzdHJpbmcuXHJcbiAgICAgICAgdmFsMiA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7IC8vIFRva2VuIEluZGV4IC0gcmVxdWVzdGVkIHRva2VuIGluZGV4IChudW1lcmljKS5cclxuICAgICAgICB2YWwxID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTsgLy8gU291cmNlIFN0cmluZyAtIGRlbGltaXRlZCBhbHBoYSBzdHJpbmcgd2l0aCB0b2tlbnMuXHJcbiAgICAgICAgdGhpcy5ldmFsX29wX3N0cnRvayhyZXNWYWwsIHZhbDEsIHZhbDIsIHZhbDMpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9TVFJUT0tfQ05UOlxyXG4gICAgICAgIHZhbDIgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpOyAvLyB0aGUgZGVsaW1ldGVycyBzdHJpbmdcclxuICAgICAgICB2YWwxID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTsgLy8gdGhlIHNvdXJjZSBzdHJpbmdcclxuICAgICAgICB0aGlzLmV2YWxfb3Bfc3RyVG9rZW5DbnQodmFsMSwgdmFsMiwgcmVzVmFsKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfU1RSVE9LRU5fSURYOlxyXG4gICAgICAgIHZhbDMgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpOyAvLyB0aGUgZGVsaW1ldGVycyBzdHJpbmdcclxuICAgICAgICB2YWwyID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTsgLy8gdGhlIHRva2VuIHRvIGJlIGZvdW5kXHJcbiAgICAgICAgdmFsMSA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7IC8vIHRoZSBzb3VyY2Ugc3RyaW5nXHJcbiAgICAgICAgdGhpcy5ldmFsX29wX3N0clRva2VuSWR4KHZhbDEsIHZhbDIsIHZhbDMsIHJlc1ZhbCk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX0JMT0JTSVpFOlxyXG4gICAgICAgIHZhbDEgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpOyAvLyBCbG9iXHJcbiAgICAgICAgdGhpcy5ldmFsX29wX2Jsb2JzaXplKHJlc1ZhbCwgdmFsMSk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9XRUJfUkVGRVJFTkNFOlxyXG4gICAgICAgIHZhbDEgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpO1xyXG4gICAgICAgIHJlc1ZhbC5BdHRyID0gU3RvcmFnZUF0dHJpYnV0ZS5BTFBIQTtcclxuICAgICAgICByZXNWYWwuU3RyVmFsID0gJyUnICsgdmFsMS5TdHJWYWwgKyAnJSc7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9DQVNFOlxyXG4gICAgICAgIC8vIHRoZSBjYXNlIG5vdCB3b3JrIHdpdGggRGF0ZSBmaWVsZCwgYnV0IG5vdCB3b3JrIGluIE9uTGluZSB0b28uXHJcbiAgICAgICAgbkFyZ3MgPSB2YWxTdGFjay5wb3AoKTtcclxuICAgICAgICBFeHBfcGFyYW1zID0gbmV3IEFycmF5KG5BcmdzKTtcclxuICAgICAgICBmb3IgKGogPSAwOyBqIDwgbkFyZ3M7IGorKylcclxuICAgICAgICAgIEV4cF9wYXJhbXNbbkFyZ3MgLSAxIC0gal0gPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpO1xyXG4gICAgICAgIHRoaXMudmFsX2NweShFeHBfcGFyYW1zWzBdLCByZXNWYWwpOyAvLyBnZXQgIGNhc2UoQSkgLT4gJ0EnIHZhbHVlXHJcblxyXG4gICAgICAgIGZvciAoaiA9IDE7IGogPCBuQXJnczsgaiArPSAyKSB7XHJcbiAgICAgICAgICB2YWwxID0gRXhwX3BhcmFtc1tqXTtcclxuICAgICAgICAgIGxldCB2YWx1ZU1hdGNoZWQ6IGJvb2xlYW47XHJcbiAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICB2YWx1ZU1hdGNoZWQgPSAoRXhwcmVzc2lvbkV2YWx1YXRvci52YWxfY21wX2FueSh2YWwxLCByZXNWYWwsIGZhbHNlKSA9PT0gMCk7XHJcbiAgICAgICAgICB9IGNhdGNoIChudWxsVmFsdWVFeGNlcHRpb24pIHtcclxuICAgICAgICAgICAgaWYgKG51bGxWYWx1ZUV4Y2VwdGlvbiBpbnN0YW5jZW9mIE51bGxWYWx1ZUV4Y2VwdGlvbikge1xyXG4gICAgICAgICAgICAgIHZhbHVlTWF0Y2hlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9IGVsc2VcclxuICAgICAgICAgICAgICB0aHJvdyBudWxsVmFsdWVFeGNlcHRpb247XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgaWYgKHZhbHVlTWF0Y2hlZCkge1xyXG4gICAgICAgICAgICB0aGlzLnZhbF9jcHkoRXhwX3BhcmFtc1tqICsgMV0sIHJlc1ZhbCk7IC8vIHRoZSBjYXNlIGZvdW5kXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKGogPT09IChuQXJncyAtIDMpKVxyXG4gICAgICAgICAgLy8gYXJyYXkgc3RhcnRzIGZyb20gMCAtPm5BcmdzLTE7IGxhc3QgaXMgZGlmZmF1bHQgdmFsdWUgLT5uQXJncy0xO1xyXG4gICAgICAgICAgLy8gbG9va2luZyBvbmUgYmVmb3JlIGRpZmZhdWx0IC0+bkFyZ3MtMSA9Pi0zXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMudmFsX2NweShFeHBfcGFyYW1zW2ogKyAyXSwgcmVzVmFsKTsgLy8gZGlmZmF1bHQgYXJndW1lbnQgZm91bmRcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSAvLyBlbmQgb2YgZm9yIGxvb3BcclxuXHJcbiAgICAgICAgZXhwU3RyVHJhY2tlci5yZXNldE51bGxSZXN1bHQoKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfVEhJUzpcclxuICAgICAgICB0aGlzLmV2YWxfb3BfdGhpcyhyZXNWYWwpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9MSUtFOlxyXG4gICAgICAgIHZhbDIgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpO1xyXG4gICAgICAgIHZhbDEgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpO1xyXG4gICAgICAgIHRoaXMuZXZhbF9vcF9saWtlKHZhbDEsIHZhbDIsIHJlc1ZhbCk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX1JFUFNUUjpcclxuICAgICAgICB2YWwzID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTtcclxuICAgICAgICB2YWwyID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTtcclxuICAgICAgICB2YWwxID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTtcclxuICAgICAgICB0aGlzLmV2YWxfb3BfcmVwc3RyKHZhbDEsIHZhbDIsIHZhbDMsIHJlc1ZhbCk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX1ZBUkNVUlJOOlxyXG4gICAgICAgIHZhbDEgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpOyAvLyBzdHJpbmcsIG5hbWUgb2YgY29udHJvbFxyXG4gICAgICAgIHRoaXMuZXhwX2dldF92YXIodmFsMSwgcmVzVmFsKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfVkFSSU5ERVg6XHJcbiAgICAgICAgdmFsMSA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7IC8vIHN0cmluZywgbmFtZSBvZiBjb250cm9sXHJcbiAgICAgICAgdGhpcy5leHBfZ2V0X2luZHgodmFsMSwgcmVzVmFsKTtcclxuICAgICAgICBicmVhaztcclxuXHJcblxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX0pDRE9XOlxyXG4gICAgICAgIGlmICh0aGlzLl9leHByZXNzaW9uTG9jYWxKcG4gPT0gbnVsbClcclxuICAgICAgICAgIHN1cGVyLlNldE5VTEwocmVzVmFsLCBTdG9yYWdlQXR0cmlidXRlLkFMUEhBKTtcclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgIHZhbDEgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpOyAvLyBkYXRlXHJcbiAgICAgICAgICB0aGlzLl9leHByZXNzaW9uTG9jYWxKcG4uZXZhbF9vcF9qY2RvdyhyZXNWYWwsIHZhbDEuTWdOdW1WYWwsIERpc3BsYXlDb252ZXJ0b3IuSW5zdGFuY2UpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfSk1PTlRIOlxyXG4gICAgICAgIGlmICh0aGlzLl9leHByZXNzaW9uTG9jYWxKcG4gPT0gbnVsbClcclxuICAgICAgICAgIHN1cGVyLlNldE5VTEwocmVzVmFsLCBTdG9yYWdlQXR0cmlidXRlLkFMUEhBKTtcclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgIHZhbDEgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpOyAvLyBudW1iZXIgb3IgbW9udGggb2YgeWVhclxyXG4gICAgICAgICAgdGhpcy5fZXhwcmVzc2lvbkxvY2FsSnBuLmV2YWxfb3Bfam1vbnRoKHJlc1ZhbCwgdmFsMSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9KTkRPVzpcclxuICAgICAgICBpZiAodGhpcy5fZXhwcmVzc2lvbkxvY2FsSnBuID09IG51bGwpXHJcbiAgICAgICAgICBzdXBlci5TZXROVUxMKHJlc1ZhbCwgU3RvcmFnZUF0dHJpYnV0ZS5BTFBIQSk7XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICB2YWwxID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTsgLy8gbnVtYmVyIG9yIGRheSBvZiB3ZWVrXHJcbiAgICAgICAgICB0aGlzLl9leHByZXNzaW9uTG9jYWxKcG4uZXZhbF9vcF9qbmRvdyhyZXNWYWwsIHZhbDEsIERpc3BsYXlDb252ZXJ0b3IuSW5zdGFuY2UpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfSllFQVI6XHJcbiAgICAgICAgaWYgKHRoaXMuX2V4cHJlc3Npb25Mb2NhbEpwbiA9PSBudWxsKVxyXG4gICAgICAgICAgc3VwZXIuU2V0TlVMTChyZXNWYWwsIFN0b3JhZ2VBdHRyaWJ1dGUuQUxQSEEpO1xyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgdmFsMSA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7IC8vIGRhdGVcclxuICAgICAgICAgIHRoaXMuX2V4cHJlc3Npb25Mb2NhbEpwbi5ldmFsX29wX2p5ZWFyKHJlc1ZhbCwgdmFsMSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9KR0VOR086XHJcbiAgICAgICAgaWYgKHRoaXMuX2V4cHJlc3Npb25Mb2NhbEpwbiA9PSBudWxsKVxyXG4gICAgICAgICAgc3VwZXIuU2V0TlVMTChyZXNWYWwsIFN0b3JhZ2VBdHRyaWJ1dGUuQUxQSEEpO1xyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgdmFsMiA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7IC8vIGRhdGVcclxuICAgICAgICAgIHZhbDEgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpOyAvLyBtb2RlXHJcbiAgICAgICAgICB0aGlzLl9leHByZXNzaW9uTG9jYWxKcG4uZXZhbF9vcF9qZ2VuZ28ocmVzVmFsLCB2YWwxLk1nTnVtVmFsLCB2YWwyLk1nTnVtVmFsLFxyXG4gICAgICAgICAgICBEaXNwbGF5Q29udmVydG9yLkluc3RhbmNlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX0hBTjpcclxuICAgICAgICB2YWwxID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTsgLy8gc3RyaW5nXHJcbiAgICAgICAgcmVzVmFsLkF0dHIgPSB2YWwxLkF0dHI7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLl9leHByZXNzaW9uTG9jYWxKcG4gPT0gbnVsbClcclxuICAgICAgICAgIHJlc1ZhbC5TdHJWYWwgPSB2YWwxLlN0clZhbDtcclxuICAgICAgICBlbHNlIGlmICh2YWwxLlN0clZhbCA9PSBudWxsKVxyXG4gICAgICAgICAgc3VwZXIuU2V0TlVMTChyZXNWYWwsIHZhbDEuQXR0cik7XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICByZXNWYWwuU3RyVmFsID0gdGhpcy5fZXhwcmVzc2lvbkxvY2FsSnBuLmV2YWxfb3BfaGFuKHZhbDEuU3RyVmFsKTtcclxuICAgICAgICAgIGlmIChyZXNWYWwuU3RyVmFsID09IG51bGwpXHJcbiAgICAgICAgICAgIHJlc1ZhbC5TdHJWYWwgPSAnJztcclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX1pFTjpcclxuICAgICAgICB2YWwxID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTsgLy8gc3RyaW5nXHJcbiAgICAgICAgcmVzVmFsLkF0dHIgPSB2YWwxLkF0dHI7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLl9leHByZXNzaW9uTG9jYWxKcG4gPT0gbnVsbClcclxuICAgICAgICAgIHJlc1ZhbC5TdHJWYWwgPSB2YWwxLlN0clZhbDtcclxuICAgICAgICBlbHNlIGlmICh2YWwxLlN0clZhbCA9PSBudWxsKVxyXG4gICAgICAgICAgc3VwZXIuU2V0TlVMTChyZXNWYWwsIHZhbDEuQXR0cik7XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICByZXNWYWwuU3RyVmFsID0gdGhpcy5fZXhwcmVzc2lvbkxvY2FsSnBuLmV2YWxfb3BfemVucyh2YWwxLlN0clZhbCwgMCk7XHJcbiAgICAgICAgICBpZiAocmVzVmFsLlN0clZhbCA9PSBudWxsKVxyXG4gICAgICAgICAgICByZXNWYWwuU3RyVmFsID0gJyc7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9aRU5TOlxyXG4gICAgICAgIHZhbDIgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpOyAvLyBtb2RlXHJcbiAgICAgICAgdmFsMSA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7IC8vIHN0cmluZ1xyXG4gICAgICAgIHJlc1ZhbC5BdHRyID0gdmFsMS5BdHRyO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5fZXhwcmVzc2lvbkxvY2FsSnBuID09IG51bGwpXHJcbiAgICAgICAgICByZXNWYWwuU3RyVmFsID0gdmFsMS5TdHJWYWw7XHJcbiAgICAgICAgZWxzZSBpZiAodmFsMi5NZ051bVZhbCA9PSBudWxsIHx8IHZhbDEuU3RyVmFsID09IG51bGwpXHJcbiAgICAgICAgICBzdXBlci5TZXROVUxMKHJlc1ZhbCwgdmFsMS5BdHRyKTtcclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgIHJlc1ZhbC5TdHJWYWwgPSB0aGlzLl9leHByZXNzaW9uTG9jYWxKcG4uZXZhbF9vcF96ZW5zKHZhbDEuU3RyVmFsLCB2YWwyLk1nTnVtVmFsLk5VTV8yX0xPTkcoKSk7XHJcbiAgICAgICAgICBpZiAocmVzVmFsLlN0clZhbCA9PSBudWxsKVxyXG4gICAgICAgICAgICByZXNWYWwuU3RyVmFsID0gJyc7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9aSU1FUkVBRDpcclxuICAgICAgICB2YWwxID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTtcclxuICAgICAgICByZXNWYWwuQXR0ciA9IFN0b3JhZ2VBdHRyaWJ1dGUuQUxQSEE7XHJcbiAgICAgICAgaWYgKHRoaXMuX2V4cHJlc3Npb25Mb2NhbEpwbiA9PSBudWxsKVxyXG4gICAgICAgICAgcmVzVmFsLlN0clZhbCA9IHZhbDEuU3RyVmFsO1xyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgcmVzVmFsLlN0clZhbCA9IHRoaXMuX2V4cHJlc3Npb25Mb2NhbEpwbi5ldmFsX29wX3ppbWVyZWFkKHZhbDEuTWdOdW1WYWwuTlVNXzJfTE9ORygpKTtcclxuICAgICAgICAgIGlmIChyZXNWYWwuU3RyVmFsID09IG51bGwpXHJcbiAgICAgICAgICAgIHJlc1ZhbC5TdHJWYWwgPSAnJztcclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX1pLQU5BOlxyXG4gICAgICAgIHZhbDIgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpOyAvLyBtb2RlXHJcbiAgICAgICAgdmFsMSA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7IC8vIHN0cmluZ1xyXG4gICAgICAgIHJlc1ZhbC5BdHRyID0gdmFsMS5BdHRyO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5fZXhwcmVzc2lvbkxvY2FsSnBuID09IG51bGwpXHJcbiAgICAgICAgICByZXNWYWwuU3RyVmFsID0gdmFsMS5TdHJWYWw7XHJcbiAgICAgICAgZWxzZSBpZiAodmFsMi5NZ051bVZhbCA9PSBudWxsIHx8IHZhbDEuU3RyVmFsID09IG51bGwpXHJcbiAgICAgICAgICBzdXBlci5TZXROVUxMKHJlc1ZhbCwgdmFsMS5BdHRyKTtcclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgIHJlc1ZhbC5TdHJWYWwgPSB0aGlzLl9leHByZXNzaW9uTG9jYWxKcG4uZXZhbF9vcF96a2FuYSh2YWwxLlN0clZhbCwgdmFsMi5NZ051bVZhbC5OVU1fMl9MT05HKCkpO1xyXG4gICAgICAgICAgaWYgKHJlc1ZhbC5TdHJWYWwgPT0gbnVsbClcclxuICAgICAgICAgICAgcmVzVmFsLlN0clZhbCA9ICcnO1xyXG4gICAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfR09UT19DVFJMOlxyXG4gICAgICAgIHZhbDMgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpO1xyXG4gICAgICAgIHZhbDIgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpO1xyXG4gICAgICAgIHZhbDEgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpO1xyXG4gICAgICAgIHRoaXMuZXZhbF9vcF9nb3RvQ3RybCh2YWwxLCB2YWwyLCB2YWwzLCByZXNWYWwpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9UUkFOU0xBVEU6XHJcbiAgICAgICAgdmFsMSA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7XHJcbiAgICAgICAgdGhpcy5ldmFsX29wX3RyYW5zbGF0ZSh2YWwxLCByZXNWYWwpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9BU1RSOlxyXG4gICAgICAgIHZhbDIgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpO1xyXG4gICAgICAgIHZhbDEgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpO1xyXG4gICAgICAgIHRoaXMuZXZhbF9vcF9hc3RyKHZhbDEsIHZhbDIsIHJlc1ZhbCk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9MT09QQ09VTlRFUjpcclxuICAgICAgICB0aGlzLkNvbnN0cnVjdE1hZ2ljTnVtKHJlc1ZhbCwgKDxUYXNrQmFzZT50aGlzLkV4cFRhc2spLmdldExvb3BDb3VudGVyKCksIFN0b3JhZ2VBdHRyaWJ1dGUuTlVNRVJJQyk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX1ZFQ0NFTExBVFRSOlxyXG4gICAgICAgIHZhbDEgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpO1xyXG4gICAgICAgIEV4cHJlc3Npb25FdmFsdWF0b3IuZXZhbF9vcF92ZWNDZWxsQXR0cih2YWwxLCByZXNWYWwpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9WRUNHRVQ6XHJcbiAgICAgICAgdmFsMiA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7IC8vIHRoZSBjZWxsIGluZGV4XHJcbiAgICAgICAgdmFsMSA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7IC8vIHRoZSB2ZWN0b3Igbm90IGEgJ3ZhcicgbGl0ZXJhbFxyXG4gICAgICAgIHRoaXMuZXZhbF9vcF92ZWNHZXQodmFsMSwgdmFsMiwgcmVzVmFsKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfVkVDU0VUOlxyXG4gICAgICAgIHZhbDMgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpOyAvLyB0aGUgbmV3IHZhbHVlIG9mIHRoZSBjZWxsXHJcbiAgICAgICAgdmFsMiA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7IC8vIHRoZSBjZWxscyBpbmRleCB0byBiZSBzZXRcclxuICAgICAgICB2YWwxID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTsgLy8gYSAndmFyJyBsaXRlcmFsIHJlcHJlc2VudGluZyB0aGUgdmVjdG9yXHJcbiAgICAgICAgYXdhaXQgdGhpcy5ldmFsX29wX3ZlY1NldCh2YWwxLCB2YWwyLCB2YWwzLCByZXNWYWwpO1xyXG4gICAgICAgIHJlc1ZhbC5Jc051bGwgPSBmYWxzZTtcclxuICAgICAgICBpZiAoZXhwU3RyVHJhY2tlci5pc051bGwoKSlcclxuICAgICAgICAgIGV4cFN0clRyYWNrZXIucmVzZXROdWxsUmVzdWx0KCk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX1ZFQ1NJWkU6XHJcbiAgICAgICAgdmFsMSA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7IC8vIHRoZSB2ZWN0b3Igbm90IGEgJ3ZhcicgbGl0ZXJhbFxyXG4gICAgICAgIHRoaXMuZXZhbF9vcF92ZWNTaXplKHZhbDEsIHJlc1ZhbCk7XHJcbiAgICAgICAgZXhwU3RyVHJhY2tlci5yZXNldE51bGxSZXN1bHQoKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfSU46XHJcbiAgICAgICAgbkFyZ3MgPSB2YWxTdGFjay5wb3AoKTtcclxuXHJcbiAgICAgICAgcmVzVmFsLkF0dHIgPSBTdG9yYWdlQXR0cmlidXRlLkJPT0xFQU47XHJcbiAgICAgICAgcmVzVmFsLkJvb2xWYWwgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgRXhwX3BhcmFtcyA9IG5ldyBBcnJheTxFeHBWYWw+KG5BcmdzKTtcclxuICAgICAgICBmb3IgKGogPSAwOyBqIDwgbkFyZ3M7IGorKylcclxuICAgICAgICAgIEV4cF9wYXJhbXNbbkFyZ3MgLSAxIC0gal0gPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpO1xyXG5cclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgZm9yIChqID0gMTsgaiA8IG5BcmdzOyBqKyspIHtcclxuICAgICAgICAgICAgaWYgKEV4cHJlc3Npb25FdmFsdWF0b3IudmFsX2NtcF9hbnkoRXhwX3BhcmFtc1swXSwgRXhwX3BhcmFtc1tqXSwgZmFsc2UpID09PSAwKSB7XHJcbiAgICAgICAgICAgICAgcmVzVmFsLkJvb2xWYWwgPSB0cnVlO1xyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBjYXRjaCAobnVsbFZhbHVlRXhjZXB0aW9uKSB7XHJcbiAgICAgICAgICBpZiAobnVsbFZhbHVlRXhjZXB0aW9uIGluc3RhbmNlb2YgTnVsbFZhbHVlRXhjZXB0aW9uKSB7XHJcbiAgICAgICAgICAgIHN1cGVyLlNldE5VTEwocmVzVmFsLCBTdG9yYWdlQXR0cmlidXRlLkJPT0xFQU4pO1xyXG4gICAgICAgICAgfSBlbHNlIHRocm93IG51bGxWYWx1ZUV4Y2VwdGlvbjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9JU0NPTVBPTkVOVDpcclxuICAgICAgICB0aGlzLmV2YWxfb3BfaXNjb21wb25lbnQocmVzVmFsKTtcclxuICAgICAgICBicmVhaztcclxuXHJcblxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX1VTRVJfREVGSU5FRF9GVU5DOlxyXG4gICAgICAgIG5BcmdzID0gdmFsU3RhY2sucG9wKCk7XHJcbiAgICAgICAgLyogbkFyZ3Mgc2hvdWxkIGF0bGVhc3QgYmUgMSAoZm9yIGhvbGRpbmcgdGhlIGZ1bmN0aW9uIG5hbWUpICovXHJcbiAgICAgICAgaWYgKG5BcmdzID4gMCkge1xyXG4gICAgICAgICAgbkFyZ3MtLTsgLy8gb25lIG9mIHRoZSBhcmd1bWVudHMgaXMgdGhlIG5hbWUgb2YgdGhlIGZ1bmN0aW9uIChpdCB3aWxsIGJlIHRoZSAxc3QgdmFsdWUpXHJcbiAgICAgICAgICBFeHBfcGFyYW1zID0gbmV3IEFycmF5PEV4cFZhbD4obkFyZ3MpO1xyXG4gICAgICAgICAgZm9yIChqID0gMDsgaiA8IG5BcmdzOyBqKyspXHJcbiAgICAgICAgICAgIEV4cF9wYXJhbXNbbkFyZ3MgLSAxIC0gal0gPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpO1xyXG5cclxuICAgICAgICAgIGxldCBmdW5jTmFtZTogc3RyaW5nID0gKDxFeHBWYWw+dmFsU3RhY2sucG9wKCkpLlN0clZhbDtcclxuICAgICAgICAgIGF3YWl0IHRoaXMuZXZhbF9vcF9FeGVjVXNlckRlZmluZWRGdW5jKGZ1bmNOYW1lLCBFeHBfcGFyYW1zLCByZXNWYWwsIGV4cGVjdGVkVHlwZSk7XHJcbiAgICAgICAgICBleHBTdHJUcmFja2VyLnJlc2V0TnVsbFJlc3VsdCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfVU5JQ09ERUFTQzpcclxuICAgICAgICAvLyBnZXQgYSB1bmljb2RlIHN0cmluZyBhbmQgcmV0dXJuIHRoZSB1bmljb2RlIG51bWVyaWMgY29kZSBvZiBpdHMgZmlyc3QgY2hhclxyXG4gICAgICAgIHZhbDEgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpO1xyXG4gICAgICAgIHJlc1ZhbC5BdHRyID0gU3RvcmFnZUF0dHJpYnV0ZS5OVU1FUklDO1xyXG4gICAgICAgIHJlc1ZhbC5Jc051bGwgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgaWYgKCF2YWwxLklzTnVsbCAmJiB2YWwxLlN0clZhbC5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICByZXNWYWwuTWdOdW1WYWwgPSBuZXcgTlVNX1RZUEUoKTtcclxuICAgICAgICAgIHJlc1ZhbC5NZ051bVZhbC5OVU1fNF9MT05HKHZhbDEuU3RyVmFsWzBdLmNoYXJDb2RlQXQoMCkpO1xyXG4gICAgICAgIH0gZWxzZVxyXG4gICAgICAgICAgcmVzVmFsLklzTnVsbCA9IHRydWU7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9QVUJMSUNOQU1FOlxyXG4gICAgICAgIHZhbDEgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpOyAvLyBHZW5lcmF0aW9uXHJcbiAgICAgICAgdGhpcy5ldmFsX29wX3B1YmxpY05hbWUocmVzVmFsLCB2YWwxKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfVEFTS0lEOlxyXG4gICAgICAgIHZhbDEgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpOyAvLyBHZW5lcmF0aW9uXHJcbiAgICAgICAgdGhpcy5ldmFsX29wX3Rhc2tJZChyZXNWYWwsIHZhbDEpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9EQlZJRVdTSVpFOlxyXG4gICAgICAgIHZhbDEgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpOyAvLyBHZW5lcmF0aW9uXHJcbiAgICAgICAgdGhpcy5ldmFsX29wX2Ridmlld3NpemUocmVzVmFsLCB2YWwxKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfREJWSUVXUk9XSURYOlxyXG4gICAgICAgIHZhbDEgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpOyAvLyBHZW5lcmF0aW9uXHJcbiAgICAgICAgdGhpcy5ldmFsX29wX2Ridmlld3Jvd2lkeChyZXNWYWwsIHZhbDEpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9QUk9KRUNURElSOlxyXG4gICAgICAgIHRoaXMuZXZhbF9vcF9wcm9qZWN0ZGlyKHJlc1ZhbCk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9NTFNfVFJBTlM6XHJcbiAgICAgICAgdmFsMSA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7IC8vIHRoZSBjb250cm9sIG5hbWVcclxuICAgICAgICB0aGlzLmV2YWxfb3BfTWxzVHJhbnMocmVzVmFsLCB2YWwxKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfU1RSX0JVSUxEOlxyXG4gICAgICAgIG5BcmdzID0gdmFsU3RhY2sucG9wKCk7XHJcbiAgICAgICAgdGhpcy5ldmFsX29wX1N0ckJ1aWxkKHZhbFN0YWNrLCByZXNWYWwsIG5BcmdzKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfU1RBVFVTQkFSU0VUVEVYVDpcclxuICAgICAgICB2YWwxID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTtcclxuICAgICAgICB0aGlzLmV2YWxfb3Bfc3RhdHVzYmFyX3NldF90ZXh0KHJlc1ZhbCwgdmFsMSk7XHJcbiAgICAgICAgZXhwU3RyVHJhY2tlci5yZXNldE51bGxSZXN1bHQoKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfU0VUX1RJVExFOlxyXG4gICAgICAgIHZhbDEgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpO1xyXG4gICAgICAgIHRoaXMuZXZhbF9vcF9zZXRfdGl0bGUocmVzVmFsLCB2YWwxKTtcclxuICAgICAgICBleHBTdHJUcmFja2VyLnJlc2V0TnVsbFJlc3VsdCgpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9JU19ST1dfRURJVElORzpcclxuICAgICAgICB2YWwxID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTtcclxuICAgICAgICB0aGlzLmV2YWxfb3BfaXNfcm93X2VkaXRpbmcocmVzVmFsLCB2YWwxKTtcclxuICAgICAgICBleHBTdHJUcmFja2VyLnJlc2V0TnVsbFJlc3VsdCgpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9HRVRQQVJBTTpcclxuICAgICAgICB2YWwxID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTsgLy8gcGFyYW1ldGVyIG5hbWVcclxuICAgICAgICB0aGlzLmV2YWxfb3BfZ2V0UGFyYW0ocmVzVmFsLCB2YWwxKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfU0VUUEFSQU06XHJcbiAgICAgICAgdmFsMiA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7IC8vIHBhcmFtZXRlciB2YWx1ZVxyXG4gICAgICAgIHZhbDEgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpOyAvLyBwYXJhbWV0ZXIgbmFtZVxyXG4gICAgICAgIHRoaXMuZXZhbF9vcF9zZXRQYXJhbShyZXNWYWwsIHZhbDEsIHZhbDIpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9JTklQVVQ6XHJcbiAgICAgICAgdmFsMiA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7IC8vIHBhcmFtZXRlciB2YWx1ZVxyXG4gICAgICAgIHZhbDEgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpOyAvLyBwYXJhbWV0ZXIgbmFtZVxyXG4gICAgICAgIGF3YWl0IHRoaXMuZXZhbF9vcF9pbmlwdXQocmVzVmFsLCB2YWwxLCB2YWwyKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfSU5JR0VUOlxyXG4gICAgICAgIHZhbDEgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpOyAvLyBwYXJhbWV0ZXIgbmFtZVxyXG4gICAgICAgIHRoaXMuZXZhbF9vcF9pbmlnZXQocmVzVmFsLCB2YWwxKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfSU5JR0VUTE46XHJcbiAgICAgICAgdmFsMiA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7IC8vIHBhcmFtZXRlciBudW1iZXJcclxuICAgICAgICB2YWwxID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTsgLy8gc2VjdGlvbiBuYW1lXHJcbiAgICAgICAgdGhpcy5ldmFsX29wX2luaWdldGxuKHJlc1ZhbCwgdmFsMSwgdmFsMik7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX0VYUENBTEM6XHJcbiAgICAgICAgdmFsMSA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7IC8vIEVYUFxyXG4gICAgICAgIGF3YWl0IHRoaXMuZXZhbF9vcF9leHBjYWxjKHJlc1ZhbCwgdmFsMSk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX1RBU0tUWVBFOlxyXG4gICAgICAgIHZhbDEgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpOyAvLyBHZW5lcmF0aW9uXHJcbiAgICAgICAgdGhpcy5ldmFsX29wX3Rhc2tUeXBlKHJlc1ZhbCwgdmFsMSk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX1JBTkdFX0FERDpcclxuICAgICAgICBuQXJncyA9IHZhbFN0YWNrLnBvcCgpO1xyXG5cclxuICAgICAgICBpZiAobkFyZ3MgPiAwKSB7XHJcbiAgICAgICAgICBFeHBfcGFyYW1zID0gbmV3IEFycmF5PEV4cFZhbD4obkFyZ3MpO1xyXG4gICAgICAgICAgZm9yIChqID0gMDsgaiA8IG5BcmdzOyBqKyspXHJcbiAgICAgICAgICAgIEV4cF9wYXJhbXNbbkFyZ3MgLSAxIC0gal0gPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpO1xyXG5cclxuICAgICAgICAgIGF3YWl0IHRoaXMuZXZhbF9vcF9yYW5nZV9hZGQocmVzVmFsLCBFeHBfcGFyYW1zKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX1JBTkdFX1JFU0VUOlxyXG4gICAgICAgIHZhbDEgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpOyAvLyBnZW5lcmF0aW9uXHJcbiAgICAgICAgYXdhaXQgdGhpcy5ldmFsX29wX3JhbmdlX3Jlc2V0KHJlc1ZhbCwgdmFsMSk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX0xPQ0FURV9BREQ6XHJcbiAgICAgICAgbkFyZ3MgPSB2YWxTdGFjay5wb3AoKTtcclxuICAgICAgICBpZiAobkFyZ3MgPiAwKSB7XHJcbiAgICAgICAgICBFeHBfcGFyYW1zID0gbmV3IEFycmF5PEV4cFZhbD4obkFyZ3MpO1xyXG4gICAgICAgICAgZm9yIChqID0gMDsgaiA8IG5BcmdzOyBqKyspXHJcbiAgICAgICAgICAgIEV4cF9wYXJhbXNbbkFyZ3MgLSAxIC0gal0gPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpO1xyXG5cclxuICAgICAgICAgIGF3YWl0IHRoaXMuZXZhbF9vcF9sb2NhdGVfYWRkKHJlc1ZhbCwgRXhwX3BhcmFtcyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9MT0NBVEVfUkVTRVQ6XHJcbiAgICAgICAgdmFsMSA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7IC8vIGdlbmVyYXRpb25cclxuICAgICAgICBhd2FpdCB0aGlzLmV2YWxfb3BfbG9jYXRlX3Jlc2V0KHJlc1ZhbCwgdmFsMSk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX1NPUlRfQUREOlxyXG4gICAgICAgIHZhbDIgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpOyAvLyBkaXJcclxuICAgICAgICB2YWwxID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTsgLy8gdmFybnVtXHJcbiAgICAgICAgYXdhaXQgdGhpcy5ldmFsX29wX3NvcnRfYWRkKHJlc1ZhbCwgdmFsMSwgdmFsMik7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX1NPUlRfUkVTRVQ6XHJcbiAgICAgICAgdmFsMSA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7IC8vIGdlbmVyYXRpb25cclxuICAgICAgICBhd2FpdCB0aGlzLmV2YWxfb3Bfc29ydF9yZXNldChyZXNWYWwsIHZhbDEpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9UU0tfSU5TVEFOQ0U6XHJcbiAgICAgICAgdmFsMSA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7IC8vIGdlbmVyYXRpb25cclxuICAgICAgICB0aGlzLmV2YWxfb3BfdHNrX2luc3RhbmNlKHJlc1ZhbCwgdmFsMSk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9URVJNOlxyXG4gICAgICAgIHRoaXMuZXZhbF9vcF90ZXJtaW5hbChyZXNWYWwpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9GT1JNU1RBVEVDTEVBUjpcclxuICAgICAgICB2YWwxID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTsgLy8gZm9ybU5hbWVcclxuICAgICAgICB0aGlzLmV2YWxfb3BfZm9ybVN0YXRlQ2xlYXIodmFsMSwgcmVzVmFsKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfQ0xJRU5UU0VTU0lPTl9TRVQ6XHJcbiAgICAgICAgdmFsMiA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7XHJcbiAgICAgICAgdmFsMSA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7XHJcblxyXG4gICAgICAgIHRoaXMuZXZhbF9vcF9DbGllbnRTZXNzaW9uU2V0KHZhbDEsIHZhbDIsIHJlc1ZhbCk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX0NORF9SQU5HRTpcclxuICAgICAgICB2YWwyID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTsgLy8gcmFuZ2UgdG8gYmUgdXNlZFxyXG4gICAgICAgIHZhbDEgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpOyAvLyBjb25kaXRpb24gdG8gdXNlIHJhbmdlXHJcblxyXG4gICAgICAgIHRoaXMuZXZhbF9vcF9DbmRSYW5nZShyZXNWYWwsIHZhbDEsIHZhbDIpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9DT05UUk9MX1NFTEVDVF9QUk9HUkFNOlxyXG4gICAgICAgIHZhbDEgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpO1xyXG4gICAgICAgIGF3YWl0IHRoaXMuZXZhbF9vcF9jb250cm9sX3NlbGVjdF9wcm9ncmFtKHZhbDEsIHJlc1ZhbCk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX0NBTExKUzpcclxuICAgICAgICBuQXJncyA9IDxudW1iZXI+dmFsU3RhY2sucG9wKCk7XHJcbiAgICAgICAgaWYgKG5BcmdzID4gMCkge1xyXG4gICAgICAgICAgbkFyZ3MtLTsgLy8gZmlyc3QgYXJndW1lbnQgaXMgbmFtZSBvZiBqYXZhc2NyaXB0IG1ldGhvZFxyXG5cclxuICAgICAgICAgIC8vIGdldCB0aGUgcGFyYW1ldGVyc1xyXG4gICAgICAgICAgRXhwX3BhcmFtcyA9IG5ldyBBcnJheShuQXJncyk7XHJcbiAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgbkFyZ3M7IGorKylcclxuICAgICAgICAgICAgRXhwX3BhcmFtc1tuQXJncyAtIDEgLSBqXSA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7XHJcblxyXG4gICAgICAgICAgdGhpcy5ldmFsX29wX0NhbGxKUyh0aGlzLkV4cFRhc2ssICg8RXhwVmFsPnZhbFN0YWNrLnBvcCgpKS5TdHJWYWwsIEV4cF9wYXJhbXMsIHJlc1ZhbCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9TRVRfQ09PS0lFOlxyXG4gICAgICAgIG5BcmdzID0gPG51bWJlcj52YWxTdGFjay5wb3AoKTtcclxuICAgICAgICBpZiAobkFyZ3MgPiAwKSB7XHJcbiAgICAgICAgICBuQXJncy0tOyAvLyBmaXJzdCBhcmd1bWVudCBpcyBuYW1lIG9mIGphdmFzY3JpcHQgbWV0aG9kXHJcblxyXG4gICAgICAgICAgLy8gZ2V0IHRoZSBwYXJhbWV0ZXJzXHJcbiAgICAgICAgICBFeHBfcGFyYW1zID0gbmV3IEFycmF5KG5BcmdzKTtcclxuICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBuQXJnczsgaisrKVxyXG4gICAgICAgICAgICBFeHBfcGFyYW1zW25BcmdzIC0gMSAtIGpdID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTtcclxuXHJcbiAgICAgICAgICB0aGlzLmV2YWxfb3Bfc2V0X2Nvb2tpZSgoPEV4cFZhbD52YWxTdGFjay5wb3AoKSkuU3RyVmFsLCBFeHBfcGFyYW1zLCByZXNWYWwpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfR0VUX0NPT0tJRTpcclxuICAgICAgICByZXNWYWwuQXR0ciA9IFN0b3JhZ2VBdHRyaWJ1dGUuQUxQSEE7XHJcbiAgICAgICAgcmVzVmFsLklzTnVsbCA9IGZhbHNlO1xyXG4gICAgICAgICB0aGlzLmV2YWxfb3BfZ2V0X2Nvb2tpZSgoPEV4cFZhbD52YWxTdGFjay5wb3AoKSkuU3RyVmFsLCByZXNWYWwpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9ERUxFVEVfQ09PS0lFOlxyXG4gICAgICAgIHJlc1ZhbC5BdHRyID0gU3RvcmFnZUF0dHJpYnV0ZS5CT09MRUFOO1xyXG4gICAgICAgIHJlc1ZhbC5Jc051bGwgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmV2YWxfb3BfZGVsZXRlX2Nvb2tpZSgoPEV4cFZhbD52YWxTdGFjay5wb3AoKSkuU3RyVmFsLCByZXNWYWwpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9ST1VURUdFVDpcclxuICAgICAgICB0aGlzLmV2YWxfb3Bfcm91dGVfZ2V0KHJlc1ZhbCk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGlmIChhZGRSZXN1bHQpIHtcclxuICAgICAgdGhpcy5Db252ZXJ0RXhwVmFsKHJlc1ZhbCwgZXhwZWN0ZWRUeXBlKTtcclxuICAgICAgdmFsU3RhY2sucHVzaChyZXNWYWwpO1xyXG4gICAgICAvKiBjaGVjayBpZiB3ZSBtdXN0IG51bGxpZnkgcmVzdWx0LCBiZWNhdXNlIG9uZSBvZiB0aGUgbWVtYmVycyBvZiB0aGUgZXhwcmVzc2lvbiBpcyBOVUxMXHJcbiAgICAgICAqL1xyXG4gICAgICBpZiAocmVzVmFsLklzTnVsbClcclxuICAgICAgICBleHBTdHJUcmFja2VyLnNldE51bGxSZXN1bHQoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gU2V0cyB0aGUgY2xpZW50IHNlc3Npb24gd2l0aCBLZXksIFZhbHVlIHBhaXIgcHJvdmlkZWQuXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJ2YWwxXCI+PC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJ2YWwyXCI+PC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJyZXNWYWxcIj48L3BhcmFtPlxyXG4gIHByaXZhdGUgZXZhbF9vcF9DbGllbnRTZXNzaW9uU2V0KHZhbDE6IEV4cFZhbCwgdmFsMjogRXhwVmFsLCByZXNWYWw6IEV4cFZhbCk6IHZvaWQge1xyXG4gICAgcmVzVmFsLkJvb2xWYWwgPSBmYWxzZTtcclxuICAgIHJlc1ZhbC5BdHRyID0gU3RvcmFnZUF0dHJpYnV0ZS5CT09MRUFOO1xyXG5cclxuICAgIGlmICghdmFsMS5pc0VtcHR5U3RyaW5nKCkpIHtcclxuICAgICAgc3dpdGNoICh2YWwxLlN0clZhbCkge1xyXG4gICAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuRU5BQkxFX0NPTU1VTklDQVRJT05fRElBTE9HUzpcclxuICAgICAgICAgIGlmICh2YWwyLkF0dHIgPT09IFN0b3JhZ2VBdHRyaWJ1dGUuQk9PTEVBTikge1xyXG4gICAgICAgICAgICByZXNWYWwuQm9vbFZhbCA9IHRydWU7XHJcbiAgICAgICAgICB9IGVsc2VcclxuICAgICAgICAgICAgTG9nZ2VyLkluc3RhbmNlLldyaXRlRXhjZXB0aW9uVG9Mb2dXaXRoTXNnKCdJbnZhbGlkIGF0dHJpYnV0ZSBmb3IgJyArIENvbnN0SW50ZXJmYWNlLkVOQUJMRV9DT01NVU5JQ0FUSU9OX0RJQUxPR1MgKyAnIGtleSBpbiBDbGllbnRTZXNzaW9uU2V0KCknKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgTG9nZ2VyLkluc3RhbmNlLldyaXRlRXhjZXB0aW9uVG9Mb2dXaXRoTXNnKCdJbnZhbGlkIEtleSBpbiBDbGllbnRTZXNzaW9uU2V0KCknKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgRXhlY3V0ZSB0aGUgZXhwcmVzc2lvbiBpdHNlbGZcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiZXhwU3RyVHJhY2tlclwiPnRoZSBleHByZXNzaW9uPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInZhbFN0YWNrXCI+c3RhY2sgb2YgdmFsdWVzIHRvIHVzZSB3aGlsZSBleGVjdXRpbmcgdGhlIGV4cHJlc3Npb248L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiZXhwZWN0ZWRUeXBlXCI+PC9wYXJhbT5cclxuICBwcml2YXRlIGFzeW5jIGV4ZWNFeHByZXNzaW9uKGV4cFN0clRyYWNrZXI6IEV4cFN0clRyYWNrZXIsIHZhbFN0YWNrOiBTdGFjazxhbnk+LCBleHBlY3RlZFR5cGU6IFN0b3JhZ2VBdHRyaWJ1dGUpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGxldCBleHBWYWw6IEV4cFZhbDtcclxuICAgIGxldCBpOiBudW1iZXI7XHJcbiAgICBsZXQgYWRkZWRPcGVyczogTGlzdDxEeW5hbWljT3BlcmF0aW9uPiA9IG5ldyBMaXN0PER5bmFtaWNPcGVyYXRpb24+KCk7XHJcbiAgICBsZXQgZHluT3BlcjogRHluYW1pY09wZXJhdGlvbjtcclxuXHJcbiAgICBsZXQgb3BDb2RlOiBudW1iZXIgPSBleHBTdHJUcmFja2VyLmdldE9wQ29kZSgpO1xyXG5cclxuICAgIC8vIGlmIGEgYmFzaWMgZGF0YSBpdGVtLCBqdXN0IGdldCBpdCBhbmQgcHVzaCBpdCB0byB0aGUgc3RhY2tcclxuICAgIGlmIChFeHByZXNzaW9uRXZhbHVhdG9yLmlzQmFzaWNJdGVtKG9wQ29kZSkpIHtcclxuICAgICAgZXhwVmFsID0gdGhpcy5nZXRFeHBCYXNpY1ZhbHVlKGV4cFN0clRyYWNrZXIsIG9wQ29kZSk7XHJcblxyXG4gICAgICB0aGlzLkNvbnZlcnRFeHBWYWwoZXhwVmFsLCBleHBlY3RlZFR5cGUpO1xyXG4gICAgICB2YWxTdGFjay5wdXNoKGV4cFZhbCk7XHJcbiAgICAgIC8qIGNoZWNrIGlmIHdlIG11c3QgbnVsbGlmeSByZXN1bHQsIGJlY2F1c2Ugb25lIG9mIHRoZSBtZW1iZXJzIG9mIHRoZSBleHByZXNzaW9uIGlzIE5VTExcclxuICAgICAgICovXHJcbiAgICAgIGlmIChleHBWYWwuSXNOdWxsKVxyXG4gICAgICAgIGV4cFN0clRyYWNrZXIuc2V0TnVsbFJlc3VsdCgpO1xyXG5cclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBleHBEZXNjOiBFeHBEZXNjID0gRXhwcmVzc2lvbkRpY3QuZXhwRGVzY1tvcENvZGVdO1xyXG5cclxuICAgIC8vIE51bGwgcmVzdWx0IG9mIGEgZnVuY3Rpb24gZGVwZW5kcyBvbmx5IG9uIHJldHVybiB2YWx1ZSBpdHMgcGFyYW1ldGVyc1xyXG4gICAgLy8gSXQgZG9lc24ndCBkZXBlbmQgb24gd2hldGhlciBhbnkgcGFyYW1ldGVyIGluIHRoZSB3aG9sZSBleHByZXNzaW9uIGlzIE5VTExcclxuICAgIC8vIEZvciBleGFtcGxlIGluIElGIChWZWNTZXQgKCdBJ1ZhciwgMSwgTlVMTCgpKSwgQSwgQilcclxuICAgIC8vIElGIHNob3VsZCBub3QgcmV0dXJuIE5VTEwgYmVjYXVzZSBWZWNTZXQgaGFzIGEgTlVMTCBwYXJhbWV0ZXIgYnV0IGl0IHNob3VsZFxyXG4gICAgLy8gcmV0dXJuIE5VTEwgaWYgZWl0aGVyIG9mIHRoZSBwYXJhbWV0ZXJzIChWZWNTZXQsIEEgb3IgQikgaXMgTlVMTFxyXG4gICAgbGV0IG51bGxBcmdzOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBpZiAoZXhwRGVzYy5BcmdFdmFsQ291bnRfID4gMCkge1xyXG4gICAgICBmb3IgKGkgPSAwOyBpIDwgZXhwRGVzYy5BcmdFdmFsQ291bnRfOyBpKyspIHtcclxuICAgICAgICBleHBTdHJUcmFja2VyLnJlc2V0TnVsbFJlc3VsdCgpO1xyXG4gICAgICAgIGF3YWl0IHRoaXMuZXhlY0V4cHJlc3Npb24oZXhwU3RyVHJhY2tlciwgdmFsU3RhY2ssIDxTdG9yYWdlQXR0cmlidXRlPmV4cERlc2MuQXJnQXR0cl9baV0pO1xyXG4gICAgICAgIGlmIChleHBTdHJUcmFja2VyLmlzTnVsbCgpKVxyXG4gICAgICAgICAgbnVsbEFyZ3MgPSB0cnVlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKG51bGxBcmdzKVxyXG4gICAgICBleHBTdHJUcmFja2VyLnNldE51bGxSZXN1bHQoKTtcclxuXHJcbiAgICAvLyBleGVjdXRlIHRoZSBjdXJyZW50IG9wZXJhdG9yXHJcbiAgICBhd2FpdCB0aGlzLmV4ZWNPcGVyYXRpb24ob3BDb2RlLCBleHBTdHJUcmFja2VyLCB2YWxTdGFjaywgYWRkZWRPcGVycywgZXhwZWN0ZWRUeXBlKTtcclxuXHJcbiAgICAvLyBpZiB0aGVyZSBhcmUgc2lkZSBlZmZlY3Qgb3BlcmF0aW9uLCBleGVjdXRlIHRoZW1cclxuICAgIGxldCBuRHluT3BlcnM6IG51bWJlciA9IGFkZGVkT3BlcnMubGVuZ3RoO1xyXG4gICAgaWYgKG5EeW5PcGVycyA+IDApIHtcclxuICAgICAgZm9yIChpID0gMDsgaSA8IG5EeW5PcGVyczsgaSsrKSB7XHJcbiAgICAgICAgZHluT3BlciA9IGFkZGVkT3BlcnMuZ2V0X0l0ZW0oMCk7XHJcbiAgICAgICAgYWRkZWRPcGVycy5SZW1vdmVBdCgwKTtcclxuICAgICAgICBzd2l0Y2ggKGR5bk9wZXIub3BDb2RlXykge1xyXG4gICAgICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9JR05PUkU6XHJcbiAgICAgICAgICAgIGxldCBqOiBudW1iZXI7XHJcbiAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBkeW5PcGVyLmFyZ0NvdW50XzsgaisrKVxyXG4gICAgICAgICAgICAgIGV4cFN0clRyYWNrZXIuc2tpcE9wZXJhdG9yKCk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfRVZBTFg6XHJcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuZXhlY0V4cHJlc3Npb24oZXhwU3RyVHJhY2tlciwgdmFsU3RhY2ssIGV4cGVjdGVkVHlwZSk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyBDYWxjdWxhdGUgdGhlIHZhbHVlIG9mIHRoZSAxc3QgQ25kUmFuZ2UgcGFyYW1ldGVyLCBhbmQgcmV0dXJuIHRydWUgaWYgdGhlIENuZFJhbmdlIHJlc3VsdCBzaG91bGQgYmUgZGlzY2FyZGVkXHJcbiAgLy8vIFNpbWlsYXIgdG8gZXhlY0V4cHJlc3Npb24sIGJ1dCB3b3JrcyBvbmx5IG9uIENuZFJhbmdlLCBhbmQgcmV0dXJucyB0aGUgcmVzdWx0IG9mIHRoZSBDbmRSYW5nZSAxc3QgcGFyYW1ldGVyXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJleHBTdHJUcmFja2VyXCI+PC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJ2YWxTdGFja1wiPjwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwiZXhwZWN0ZWRUeXBlXCI+PC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+dHJ1ZSBpZiBDbmRSYW5nZSBldmFsdWF0ZWQgdG8gZmFsc2UgYW5kIHRoZSByYW5nZSBzaG91bGQgYmUgZGlzY2FyZGVkPC9yZXR1cm5zPlxyXG4gIHByaXZhdGUgYXN5bmMgRGlzY2FyZENuZFJhbmdlRXhwcmVzc2lvbihleHBTdHJUcmFja2VyOiBFeHBTdHJUcmFja2VyLCB2YWxTdGFjazogU3RhY2s8YW55Pik6IFByb21pc2U8Ym9vbGVhbj4ge1xyXG4gICAgbGV0IGV4cFZhbDogRXhwVmFsO1xyXG4gICAgbGV0IGFkZGVkT3BlcnM6IExpc3Q8RHluYW1pY09wZXJhdGlvbj4gPSBuZXcgTGlzdDxEeW5hbWljT3BlcmF0aW9uPigpO1xyXG5cclxuICAgIGxldCBvcENvZGU6IG51bWJlciA9IGV4cFN0clRyYWNrZXIuZ2V0T3BDb2RlKCk7XHJcblxyXG4gICAgLy8gaWYgYSBiYXNpYyBkYXRhIGl0ZW0sIGp1c3QgZ2V0IGl0IGFuZCBwdXNoIGl0IHRvIHRoZSBzdGFja1xyXG4gICAgaWYgKG9wQ29kZSAhPT0gRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfQ05EX1JBTkdFKSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgZXhwRGVzYzogRXhwRGVzYyA9IEV4cHJlc3Npb25EaWN0LmV4cERlc2Nbb3BDb2RlXTtcclxuXHJcbiAgICBhd2FpdCB0aGlzLmV4ZWNFeHByZXNzaW9uKGV4cFN0clRyYWNrZXIsIHZhbFN0YWNrLCA8U3RvcmFnZUF0dHJpYnV0ZT5leHBEZXNjLkFyZ0F0dHJfWzBdKTtcclxuXHJcbiAgICBleHBWYWwgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpO1xyXG4gICAgcmV0dXJuIGV4cFZhbC5BdHRyID09PSBTdG9yYWdlQXR0cmlidXRlLkJPT0xFQU4gJiYgIWV4cFZhbC5Cb29sVmFsO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIHZhbF9jbXBfYW55KHZhbDE6IEV4cFZhbCwgdmFsMjogRXhwVmFsLCBmb3JjZUNvbXBhcmVyOiBib29sZWFuKTogbnVtYmVyIHtcclxuICAgIGxldCByZXR2YWw6IG51bWJlciA9IDA7XHJcbiAgICBsZXQgYXR0cjE6IFN0b3JhZ2VBdHRyaWJ1dGUgPSB2YWwxLkF0dHI7XHJcbiAgICBsZXQgYXR0cjI6IFN0b3JhZ2VBdHRyaWJ1dGUgPSB2YWwyLkF0dHI7XHJcbiAgICBsZXQgZXhwVmFsOiBFeHByZXNzaW9uRXZhbHVhdG9yID0gbmV3IEV4cHJlc3Npb25FdmFsdWF0b3IoKTtcclxuXHJcbiAgICBpZiAodmFsMS5Jc051bGwgJiYgdmFsMi5Jc051bGwpXHJcbiAgICAgIHJldHVybiAwO1xyXG5cclxuICAgIGlmICh2YWwxLklzTnVsbCB8fCB2YWwyLklzTnVsbClcclxuICAgICAgdGhyb3cgbmV3IE51bGxWYWx1ZUV4Y2VwdGlvbihhdHRyMSk7XHJcblxyXG4gICAgaWYgKFN0b3JhZ2VBdHRyaWJ1dGVDaGVjay5pc1R5cGVCbG9iKGF0dHIxKSkge1xyXG4gICAgICBpZiAodmFsMS5JbmNsdWRlQmxvYlByZWZpeCAmJiBCbG9iVHlwZS5nZXRDb250ZW50VHlwZSh2YWwxLlN0clZhbCkgPT09IEJsb2JUeXBlLkNPTlRFTlRfVFlQRV9CSU5BUlkpIHtcclxuICAgICAgICB2YWwxLlN0clZhbCA9IEJsb2JUeXBlLnJlbW92ZUJsb2JQcmVmaXgodmFsMS5TdHJWYWwpO1xyXG4gICAgICAgIHZhbDEuQXR0ciA9IFN0b3JhZ2VBdHRyaWJ1dGUuQUxQSEE7XHJcbiAgICAgICAgdmFsMS5JbmNsdWRlQmxvYlByZWZpeCA9IGZhbHNlO1xyXG4gICAgICB9IGVsc2VcclxuICAgICAgICBleHBWYWwuQ29udmVydEV4cFZhbCh2YWwxLCBTdG9yYWdlQXR0cmlidXRlLlVOSUNPREUpO1xyXG4gICAgfVxyXG4gICAgaWYgKFN0b3JhZ2VBdHRyaWJ1dGVDaGVjay5pc1R5cGVCbG9iKGF0dHIyKSkge1xyXG4gICAgICBpZiAodmFsMi5JbmNsdWRlQmxvYlByZWZpeCAmJiBCbG9iVHlwZS5nZXRDb250ZW50VHlwZSh2YWwyLlN0clZhbCkgPT09IEJsb2JUeXBlLkNPTlRFTlRfVFlQRV9CSU5BUlkpIHtcclxuICAgICAgICB2YWwyLlN0clZhbCA9IEJsb2JUeXBlLnJlbW92ZUJsb2JQcmVmaXgodmFsMi5TdHJWYWwpO1xyXG4gICAgICAgIHZhbDIuQXR0ciA9IFN0b3JhZ2VBdHRyaWJ1dGUuQUxQSEE7XHJcbiAgICAgICAgdmFsMi5JbmNsdWRlQmxvYlByZWZpeCA9IGZhbHNlO1xyXG4gICAgICB9IGVsc2VcclxuICAgICAgICBleHBWYWwuQ29udmVydEV4cFZhbCh2YWwyLCBTdG9yYWdlQXR0cmlidXRlLlVOSUNPREUpO1xyXG4gICAgfVxyXG5cclxuICAgIGF0dHIxID0gdmFsMS5BdHRyO1xyXG4gICAgYXR0cjIgPSB2YWwyLkF0dHI7XHJcblxyXG4gICAgaWYgKGF0dHIxICE9PSBhdHRyMikge1xyXG4gICAgICBpZiAoKFN0b3JhZ2VBdHRyaWJ1dGVDaGVjay5pc1R5cGVOdW1lcmljKGF0dHIxKSAmJiBTdG9yYWdlQXR0cmlidXRlQ2hlY2suaXNUeXBlTnVtZXJpYyhhdHRyMikpIHx8XHJcbiAgICAgICAgKFN0b3JhZ2VBdHRyaWJ1dGVDaGVjay5Jc1R5cGVBbHBoYU9yVW5pY29kZShhdHRyMSkgJiYgU3RvcmFnZUF0dHJpYnV0ZUNoZWNrLklzVHlwZUFscGhhT3JVbmljb2RlKGF0dHIyKSkpIHtcclxuICAgICAgICAvKiBEbyBub3RoaW5nIDogaXQncyBPSyB0byBjb21wYXJlIHRoZXNlIHR5cGVzICovXHJcbiAgICAgIH0gZWxzZVxyXG4gICAgICAgIHJldHVybiAxO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyBUaGlzIGNvZGUgd2FzIHRha2VuIGZyb20gU1RPUkFHRTo6ZmxkX2NtcCBtZXRob2QgaW4gTWFnaWNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICBzd2l0Y2ggKGF0dHIxKSB7XHJcbiAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5BTFBIQTpcclxuICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLkJMT0I6XHJcbiAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5CTE9CX1ZFQ1RPUjpcclxuICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLlVOSUNPREU6XHJcbiAgICAgICAgaWYgKHZhbDEuU3RyVmFsID09PSBudWxsICYmIHZhbDIuU3RyVmFsID09PSBudWxsKVxyXG4gICAgICAgICAgcmV0dXJuIDA7XHJcblxyXG4gICAgICAgIGlmICh2YWwxLlN0clZhbCA9PT0gbnVsbCB8fCB2YWwyLlN0clZhbCA9PT0gbnVsbClcclxuICAgICAgICAgIHRocm93IG5ldyBOdWxsVmFsdWVFeGNlcHRpb24oYXR0cjEpO1xyXG5cclxuICAgICAgICBsZXQgc3RyMTogc3RyaW5nID0gU3RyVXRpbC5ydHJpbSh2YWwxLlN0clZhbCk7XHJcbiAgICAgICAgbGV0IHN0cjI6IHN0cmluZyA9IFN0clV0aWwucnRyaW0odmFsMi5TdHJWYWwpO1xyXG5cclxuICAgICAgICBpZiAoRW52aXJvbm1lbnQuSW5zdGFuY2UuZ2V0U3BlY2lhbEFuc2lFeHByZXNzaW9uKCkgfHxcclxuICAgICAgICAgIChVdGlsU3RyQnl0ZU1vZGUuaXNMb2NhbGVEZWZMYW5nREJDUygpICYmXHJcbiAgICAgICAgICAgIGF0dHIxID09PSBTdG9yYWdlQXR0cmlidXRlLkFMUEhBICYmIGF0dHIyID09PSBTdG9yYWdlQXR0cmlidXRlLkFMUEhBKSlcclxuICAgICAgICAgIHJldHZhbCA9IFV0aWxTdHJCeXRlTW9kZS5zdHJjbXAoc3RyMSwgc3RyMik7XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgICAgcmV0dmFsID0gTlN0cmluZy5Db21wYXJlT3JkaW5hbChzdHIxLCBzdHIyKTtcclxuICAgICAgICBicmVhaztcclxuXHJcblxyXG4gICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuTlVNRVJJQzpcclxuICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLkRBVEU6XHJcbiAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5USU1FOlxyXG4gICAgICAgIGlmICh2YWwxLk1nTnVtVmFsID09PSBudWxsICYmIHZhbDIuTWdOdW1WYWwgPT09IG51bGwpXHJcbiAgICAgICAgICByZXR1cm4gMDtcclxuXHJcbiAgICAgICAgaWYgKHZhbDEuTWdOdW1WYWwgPT09IG51bGwgfHwgdmFsMi5NZ051bVZhbCA9PT0gbnVsbClcclxuICAgICAgICAgIHRocm93IG5ldyBOdWxsVmFsdWVFeGNlcHRpb24oYXR0cjEpO1xyXG4gICAgICAgIHJldHZhbCA9IE5VTV9UWVBFLm51bV9jbXAodmFsMS5NZ051bVZhbCwgdmFsMi5NZ051bVZhbCk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG5cclxuICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLkJPT0xFQU46XHJcbiAgICAgICAgcmV0dmFsID0gKHZhbDEuQm9vbFZhbCA/IDEgOiAwKSAtICh2YWwyLkJvb2xWYWwgPyAxIDogMCk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgfVxyXG4gICAgcmV0dXJuIChyZXR2YWwpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIGNhbGN1bGF0ZSB0aGUgcmVzdWx0IG9mIHRoZSBleHByZXNzaW9uXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImV4cFwiPmlzIGEgcmVmZXJlbmNlIHRvIHRoZSBleHByZXNzaW9uIHN0cmluZyB0byBiZSBldmFsdWF0ZWQuIHRoaXMgc3RyaW5nXHJcbiAgLy8vICAgaXMgaW4gYW4gZXhwcmVzc2lvbiBpbiBwb2xpc2ggbm90YXRpb24gd2hlcmUgZXZlcnkgYnl0ZSBpcyByZXByZXNlbnRlZCBieSBhXHJcbiAgLy8vICAgMi1kaWdpdCBoZXggbnVtYmVyPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImV4cGVjdGVkVHlwZVwiPmlzIHRoZSBleHBlY3RlZCB0eXBlIG9mIHRoZSBleHByZXNzaW9uLiB3aGVuIHRoZSBleHByZXNzaW9ucyB0eXBlIGRvZXNcclxuICAvLy8gICBub3QgbWF0Y2ggdGhlIGV4cGVjdGVkIHR5cGUgYW4gZXhjZXB0aW9uIHNob3VsZCBiZSB0aHJvd24uIGEgc3BhY2UgKCcgJykgaGVyZVxyXG4gIC8vLyAgIG1lYW5zIGFueSBleHByZXNzaW9uLiBpdCBpcyB1c2VkIGZvciBFdmFsdWF0ZSBvcGVyYXRpb24uPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInRhc2tcIj5pcyBhIHJlZmVyZW5jZSB0byB0aGUgdGFzayBpbiB3aGljaCB0aGUgZXhwcmVzc2lvbiBpcyBkZWZpbmVkLiBpdCBpc1xyXG4gIC8vLyAgIHVzZWQgZm9yIGdldHRpbmcgYSByZWZlcmVuY2UgdG8gZmllbGRzIGZvciBnZXR0aW5nL3NldHRpbmcgdGhlaXIgdmFsdWVzPC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+IFN0cmluZyBpcyB0aGUgcmVzdWx0IG9mIHRoZSBldmFsdWF0aW9uOlxyXG4gIC8vLyAgIDEuIHN0cmluZyB2YWx1ZSB3aWxsIGJlIGEgc3RyaW5nXHJcbiAgLy8vICAgMi4gbnVtZXJpYywgZGF0ZSwgdGltZSB3aWxsIGJlIGEgTWFnaWMgbnVtYmVyIGFzIGEgc3RyaW5nIG9mIGhleCBkaWdpdHNcclxuICAvLy8gICAzLiBsb2dpY2FsIHdpbGwgYmUgb25lIGRpZ2l0OiAwIGZvciBGQUxTRSwgMSBmb3IgVFJVRVxyXG4gIC8vLyAgIDQuIG51bGwgdmFsdWUganVzdCByZXR1cm4gbnVsbCAobm90IGFuIGVtcHR5IHN0cmluZyEpPC9yZXR1cm5zPlxyXG4gIHN0YXRpYyBhc3luYyBldmFsKGV4cDogSW50OEFycmF5LCBleHBlY3RlZFR5cGU6IFN0b3JhZ2VBdHRyaWJ1dGUsIHRhc2s6IFRhc2tCYXNlKTogUHJvbWlzZTxFeHBWYWw+IHtcclxuICAgIGxldCByZXM6IEV4cFZhbCA9IG51bGw7XHJcbiAgICBsZXQgdmFsU3RhY2s6IFN0YWNrPEV4cFZhbD4gPSBuZXcgU3RhY2soKTtcclxuXHJcbiAgICBpZiAoZXhwICE9PSBudWxsICYmIGV4cC5sZW5ndGggPiAwKSB7XHJcbiAgICAgIGxldCBtZTogRXhwcmVzc2lvbkV2YWx1YXRvciA9IG5ldyBFeHByZXNzaW9uRXZhbHVhdG9yKCk7XHJcbiAgICAgIGxldCBleHBTdHJUcmFja2VyOiBFeHBTdHJUcmFja2VyID0gbmV3IEV4cFN0clRyYWNrZXIoZXhwLCB0YXNrLmdldE51bGxBcml0aG1ldGljKCkgPT09IENvbnN0YW50cy5OVUxMX0FSSVRIX05VTExJRlkpO1xyXG4gICAgICBtZS5FeHBUYXNrID0gdGFzaztcclxuICAgICAgYXdhaXQgbWUuZXhlY0V4cHJlc3Npb24oZXhwU3RyVHJhY2tlciwgdmFsU3RhY2ssIGV4cGVjdGVkVHlwZSk7XHJcbiAgICAgIHJlcyA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7XHJcbiAgICAgIGlmIChleHBTdHJUcmFja2VyLmlzTnVsbCgpKVxyXG4gICAgICAvLyBudWxsIGFyaXRobWV0aWMgPT0gbnVsbGlmeSBhbmQgb25lIG9mIHRoZSBtZW1iZXJzIG9mIHRoZSBleHByZXNzaW9uIGlzIG51bGwsXHJcbiAgICAgIC8vIHNvIHRoZSByZXN1bHQgbXVzdCBiZSBOVUxMXHJcbiAgICAgICAgcmVzLklzTnVsbCA9IHRydWU7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmVzO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIGFzeW5jIERpc2NhcmRDbmRSYW5nZVJlc3VsdChleHA6IEludDhBcnJheSwgdGFzazogVGFza0Jhc2UpOiBQcm9taXNlPGJvb2xlYW4+IHtcclxuICAgIGxldCB2YWxTdGFjazogU3RhY2s8RXhwVmFsPiA9IG5ldyBTdGFjaygpO1xyXG5cclxuICAgIGlmIChleHAgIT09IG51bGwgJiYgZXhwLmxlbmd0aCA+IDApIHtcclxuICAgICAgbGV0IG1lOiBFeHByZXNzaW9uRXZhbHVhdG9yID0gbmV3IEV4cHJlc3Npb25FdmFsdWF0b3IoKTtcclxuICAgICAgbGV0IGV4cFN0clRyYWNrZXI6IEV4cFN0clRyYWNrZXIgPSBuZXcgRXhwU3RyVHJhY2tlcihleHAsIHRhc2suZ2V0TnVsbEFyaXRobWV0aWMoKSA9PT0gQ29uc3RhbnRzLk5VTExfQVJJVEhfTlVMTElGWSk7XHJcbiAgICAgIG1lLkV4cFRhc2sgPSB0YXNrO1xyXG4gICAgICByZXR1cm4gYXdhaXQgbWUuRGlzY2FyZENuZFJhbmdlRXhwcmVzc2lvbihleHBTdHJUcmFja2VyLCB2YWxTdGFjayk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgQ29udmVydCBhIHN0cmluZyB0byBhIE51bGwgdGVybWluYXRlZCBQaWNcclxuICAvLy8gICBtYXggbGVuZ3RoIG9mIHRoZSBtYXNrIGlzIDEwMCBjaGFyYWN0ZXJzXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBwcml2YXRlIHN0YXRpYyBzZXRfYV9waWModmFsOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgbGV0IGxlbjogbnVtYmVyID0gTWF0aC5taW4odmFsLmxlbmd0aCwgOTkpO1xyXG4gICAgcmV0dXJuIFN0clV0aWwuWnN0cmluZ01ha2UodmFsLCBsZW4pO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIEV2YWx1YXRlIFJBTkdFIG1hZ2ljIGZ1bmN0aW9uXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBwcml2YXRlIGV2YWxfb3BfcmFuZ2UodmFsMTogRXhwVmFsLCB2YWwyOiBFeHBWYWwsIHZhbDM6IEV4cFZhbCwgcmVzVmFsOiBFeHBWYWwpOiB2b2lkIHtcclxuICAgIHJlc1ZhbC5Cb29sVmFsID0gZmFsc2U7XHJcbiAgICByZXNWYWwuQXR0ciA9IFN0b3JhZ2VBdHRyaWJ1dGUuQk9PTEVBTjtcclxuICAgIHRyeSB7XHJcbiAgICAgIGlmIChFeHByZXNzaW9uRXZhbHVhdG9yLnZhbF9jbXBfYW55KHZhbDEsIHZhbDIsIHRydWUpID49IDApIHtcclxuICAgICAgICB2YWwyID0gdmFsMztcclxuICAgICAgICBpZiAoRXhwcmVzc2lvbkV2YWx1YXRvci52YWxfY21wX2FueSh2YWwxLCB2YWwyLCB0cnVlKSA8PSAwKVxyXG4gICAgICAgICAgcmVzVmFsLkJvb2xWYWwgPSB0cnVlO1xyXG4gICAgICB9XHJcbiAgICB9IGNhdGNoIChleCkge1xyXG4gICAgICBpZiAoZXggaW5zdGFuY2VvZiBOdWxsVmFsdWVFeGNlcHRpb24pIHtcclxuICAgICAgICBzdXBlci5TZXROVUxMKHJlc1ZhbCwgZXguZ2V0QXR0cigpKTtcclxuICAgICAgfSBlbHNlXHJcbiAgICAgICAgdGhyb3cgZXg7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgRXZhbHVhdGUgUkVQIG1hZ2ljIGZ1bmN0aW9uXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBwcml2YXRlIGV2YWxfb3BfcmVwXzEocmVzVmFsOiBFeHBWYWwsIHZhbDE6IEV4cFZhbCwgdmFsMjogRXhwVmFsLCB2YWwzOiBFeHBWYWwsIHZhbDQ6IEV4cFZhbCk6IHZvaWQge1xyXG4gICAgaWYgKHZhbDEuU3RyVmFsID09PSBudWxsIHx8IHZhbDIuU3RyVmFsID09PSBudWxsIHx8IHZhbDMuTWdOdW1WYWwgPT09IG51bGwgfHwgdmFsNC5NZ051bVZhbCA9PT0gbnVsbCkge1xyXG4gICAgICBzdXBlci5TZXROVUxMKHJlc1ZhbCwgU3RvcmFnZUF0dHJpYnV0ZS5VTklDT0RFKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgRXhwcmVzc2lvbkV2YWx1YXRvci52YWxfc19jcHkodmFsMSwgcmVzVmFsKTtcclxuICAgIGxldCBpOiBudW1iZXIgPSB2YWwzLk1nTnVtVmFsLk5VTV8yX0xPTkcoKTtcclxuICAgIGlmIChpIDwgMSlcclxuICAgICAgaSA9IDE7XHJcbiAgICBsZXQgajogbnVtYmVyID0gdmFsNC5NZ051bVZhbC5OVU1fMl9MT05HKCk7XHJcblxyXG4gICAgaWYgKGogPiB2YWwyLlN0clZhbC5sZW5ndGgpXHJcbiAgICAgIGogPSB2YWwyLlN0clZhbC5sZW5ndGg7XHJcblxyXG4gICAgaWYgKGkgKyBqIC0gMSA+IHJlc1ZhbC5TdHJWYWwubGVuZ3RoKVxyXG4gICAgICBqID0gcmVzVmFsLlN0clZhbC5sZW5ndGggLSBpICsgMTtcclxuXHJcbiAgICBpZiAoKGogPD0gMCkpXHJcbiAgICAgIHJldHVybjtcclxuXHJcbiAgICBsZXQgdG1wX3M6IHN0cmluZyA9IFN0clV0aWwubWVtY3B5KCcnLCAwLCByZXNWYWwuU3RyVmFsLCBpICsgaiAtIDEsIHJlc1ZhbC5TdHJWYWwubGVuZ3RoIC0gaSAtIGogKyAxKTtcclxuXHJcbiAgICByZXNWYWwuU3RyVmFsID0gU3RyVXRpbC5tZW1jcHkocmVzVmFsLlN0clZhbCwgaSAtIDEsIHZhbDIuU3RyVmFsLCAwLCBqKTtcclxuICAgIHJlc1ZhbC5TdHJWYWwgPSBTdHJVdGlsLm1lbWNweShyZXNWYWwuU3RyVmFsLCBpIC0gMSArIGosIHRtcF9zLCAwLCByZXNWYWwuU3RyVmFsLmxlbmd0aCAtIGkgLSBqICsgMSk7XHJcblxyXG4gICAgLyogYWRkIGJsYW5rcyB0byB0aGUgZW5kKi9cclxuICAgIGlmIChqIC0gdmFsMi5TdHJWYWwubGVuZ3RoID4gMClcclxuICAgICAgcmVzVmFsLlN0clZhbCA9IFN0clV0aWwubWVtc2V0KHJlc1ZhbC5TdHJWYWwsIGkgKyB2YWwyLlN0clZhbC5sZW5ndGggLSAxLCAnICcsIGogLSB2YWwyLlN0clZhbC5sZW5ndGgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzdGF0aWMgdmFsX3NfY3B5KHZhbDogRXhwVmFsLCByZXNWYWw6IEV4cFZhbCk6IHZvaWQge1xyXG4gICAgcmVzVmFsLkF0dHIgPSB2YWwuQXR0cjtcclxuICAgIHJlc1ZhbC5TdHJWYWwgPSB2YWwuU3RyVmFsO1xyXG4gICAgcmVzVmFsLklzTnVsbCA9IHZhbC5Jc051bGw7XHJcbiAgICByZXNWYWwuSW5jbHVkZUJsb2JQcmVmaXggPSB2YWwuSW5jbHVkZUJsb2JQcmVmaXg7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHZhbF9jcHkodmFsOiBFeHBWYWwsIHJlc1ZhbDogRXhwVmFsKTogdm9pZCB7XHJcbiAgICBzd2l0Y2ggKHZhbC5BdHRyKSB7XHJcbiAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5BTFBIQTpcclxuICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLlVOSUNPREU6XHJcbiAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5CTE9COlxyXG4gICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuQkxPQl9WRUNUT1I6XHJcbiAgICAgICAgRXhwcmVzc2lvbkV2YWx1YXRvci52YWxfc19jcHkodmFsLCByZXNWYWwpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLk5VTUVSSUM6XHJcbiAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5EQVRFOlxyXG4gICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuVElNRTpcclxuICAgICAgICBpZiAoIXZhbC5Jc051bGwpXHJcbiAgICAgICAgICByZXNWYWwuTWdOdW1WYWwgPSBuZXcgTlVNX1RZUEUodmFsLk1nTnVtVmFsKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5CT09MRUFOOlxyXG4gICAgICAgIHJlc1ZhbC5Cb29sVmFsID0gdmFsLkJvb2xWYWw7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIExvZ2dlci5JbnN0YW5jZS5Xcml0ZUV4Y2VwdGlvblRvTG9nV2l0aE1zZygnRXhwcmVzc2lvbiBFdmFsdWF0b3IudmFsX2NweSBubyBzdWNoIHR5cGUgb2YgYXR0cmlidXRlIDogJyArIHZhbC5BdHRyKTtcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuICAgIHJlc1ZhbC5BdHRyID0gdmFsLkF0dHI7XHJcbiAgICByZXNWYWwuSXNOdWxsID0gdmFsLklzTnVsbDtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBpbnNlcnQgc3RyaW5nIGludG8gYW5vdGhlciBzdHJpbmcsIElOUyBtYWdpYyBmdW5jdGlvblxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgcHJpdmF0ZSBldmFsX29wX2lucyhyZXNWYWw6IEV4cFZhbCwgdmFsMTogRXhwVmFsLCB2YWwyOiBFeHBWYWwsIHZhbDM6IEV4cFZhbCwgdmFsNDogRXhwVmFsKTogdm9pZCB7XHJcbiAgICByZXNWYWwuQXR0ciA9IFN0b3JhZ2VBdHRyaWJ1dGUuVU5JQ09ERTtcclxuICAgIGlmICh2YWwxLlN0clZhbCA9PT0gbnVsbCB8fCB2YWwyLlN0clZhbCA9PT0gbnVsbCB8fCB2YWwzLk1nTnVtVmFsID09PSBudWxsIHx8IHZhbDQuTWdOdW1WYWwgPT09IG51bGwpIHtcclxuICAgICAgc3VwZXIuU2V0TlVMTChyZXNWYWwsIFN0b3JhZ2VBdHRyaWJ1dGUuVU5JQ09ERSk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGxldCBpOiBudW1iZXIgPSB2YWwxLlN0clZhbC5sZW5ndGg7XHJcblxyXG4gICAgbGV0IGluc19vZnM6IG51bWJlciA9IHZhbDMuTWdOdW1WYWwuTlVNXzJfTE9ORygpIC0gMTtcclxuICAgIGluc19vZnMgPSBNYXRoLm1heChpbnNfb2ZzLCAwKTtcclxuICAgIGluc19vZnMgPSBNYXRoLm1pbihpbnNfb2ZzLCBpKTtcclxuXHJcbiAgICBsZXQgaW5zX2xlbjogbnVtYmVyID0gdmFsNC5NZ051bVZhbC5OVU1fMl9MT05HKCk7XHJcbiAgICBpbnNfbGVuID0gTWF0aC5tYXgoaW5zX2xlbiwgMCk7XHJcbiAgICBpbnNfbGVuID0gTWF0aC5taW4oaW5zX2xlbiwgdmFsMi5TdHJWYWwubGVuZ3RoKTtcclxuXHJcbiAgICByZXNWYWwuU3RyVmFsID0gU3RyVXRpbC5tZW1jcHkoJycsIDAsIHZhbDEuU3RyVmFsLCAwLCBpbnNfb2ZzKTtcclxuICAgIHJlc1ZhbC5TdHJWYWwgPSBTdHJVdGlsLm1lbWNweShyZXNWYWwuU3RyVmFsLCBpbnNfb2ZzLCB2YWwyLlN0clZhbCwgMCwgaW5zX2xlbik7XHJcbiAgICByZXNWYWwuU3RyVmFsID0gU3RyVXRpbC5tZW1jcHkocmVzVmFsLlN0clZhbCwgaW5zX29mcyArIGluc19sZW4sIHZhbDEuU3RyVmFsLCBpbnNfb2ZzLCBpIC0gaW5zX29mcyk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgREVMIG1hZ2ljIGZ1bmN0aW9uXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBwcml2YXRlIGV2YWxfb3BfZGVsKHJlc1ZhbDogRXhwVmFsLCB2YWwxOiBFeHBWYWwsIHZhbDI6IEV4cFZhbCwgdmFsMzogRXhwVmFsKTogdm9pZCB7XHJcbiAgICBpZiAodmFsMS5TdHJWYWwgPT09IG51bGwgfHwgdmFsMi5NZ051bVZhbCA9PT0gbnVsbCB8fCB2YWwzLk1nTnVtVmFsID09PSBudWxsKSB7XHJcbiAgICAgIHN1cGVyLlNldE5VTEwocmVzVmFsLCBTdG9yYWdlQXR0cmlidXRlLlVOSUNPREUpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG5cclxuICAgIEV4cHJlc3Npb25FdmFsdWF0b3IudmFsX3NfY3B5KHZhbDEsIHJlc1ZhbCk7XHJcbiAgICBsZXQgaTogbnVtYmVyID0gdmFsMi5NZ051bVZhbC5OVU1fMl9MT05HKCkgLSAxO1xyXG4gICAgaWYgKGkgPCAwKSB7XHJcbiAgICAgIGkgPSAwO1xyXG4gICAgfVxyXG4gICAgaWYgKGkgPiByZXNWYWwuU3RyVmFsLmxlbmd0aClcclxuICAgICAgaSA9IHJlc1ZhbC5TdHJWYWwubGVuZ3RoO1xyXG4gICAgbGV0IGo6IG51bWJlciA9IHZhbDMuTWdOdW1WYWwuTlVNXzJfTE9ORygpO1xyXG4gICAgaWYgKGkgKyBqID4gcmVzVmFsLlN0clZhbC5sZW5ndGgpXHJcbiAgICAgIGogPSByZXNWYWwuU3RyVmFsLmxlbmd0aCAtIGk7XHJcbiAgICBpZiAoaiA8PSAwKVxyXG4gICAgICByZXR1cm47XHJcblxyXG4gICAgcmVzVmFsLlN0clZhbCA9IFN0clV0aWwubWVtY3B5KHJlc1ZhbC5TdHJWYWwsIGksIHJlc1ZhbC5TdHJWYWwsIGkgKyBqLCByZXNWYWwuU3RyVmFsLmxlbmd0aCAtIGkpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIEZMSVAgbWFnaWMgZnVuY3Rpb24gKHJldmVyc2UpXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBwcml2YXRlIGV2YWxfb3BfZmxpcChyZXNWYWw6IEV4cFZhbCwgdmFsMTogRXhwVmFsKTogdm9pZCB7XHJcbiAgICByZXNWYWwuQXR0ciA9IFN0b3JhZ2VBdHRyaWJ1dGUuVU5JQ09ERTtcclxuICAgIGlmICh2YWwxLlN0clZhbCA9PT0gbnVsbCkge1xyXG4gICAgICBzdXBlci5TZXROVUxMKHJlc1ZhbCwgU3RvcmFnZUF0dHJpYnV0ZS5VTklDT0RFKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgbGV0IHJldl9zdHIgPSBuZXcgU3RyaW5nQnVpbGRlcih2YWwxLlN0clZhbCk7XHJcbiAgICByZXNWYWwuU3RyVmFsID0gU3RyVXRpbC5SZXZlcnNlU3RyaW5nKHJldl9zdHIpLlRvU3RyaW5nKCk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgVVBQRVIgbWFnaWMgZnVuY3Rpb25cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIHByaXZhdGUgZXZhbF9vcF91cHBlcihyZXNWYWw6IEV4cFZhbCwgdmFsMTogRXhwVmFsKTogdm9pZCB7XHJcbiAgICByZXNWYWwuQXR0ciA9IFN0b3JhZ2VBdHRyaWJ1dGUuVU5JQ09ERTtcclxuICAgIGlmICh2YWwxLlN0clZhbCA9PT0gbnVsbCkge1xyXG4gICAgICBzdXBlci5TZXROVUxMKHJlc1ZhbCwgU3RvcmFnZUF0dHJpYnV0ZS5VTklDT0RFKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgcmVzVmFsLlN0clZhbCA9IHZhbDEuU3RyVmFsLnRvVXBwZXJDYXNlKCk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgTE9XRVIgbWFnaWMgZnVuY3Rpb25cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIHByaXZhdGUgZXZhbF9vcF9sb3dlcihyZXNWYWw6IEV4cFZhbCwgdmFsMTogRXhwVmFsKTogdm9pZCB7XHJcbiAgICByZXNWYWwuQXR0ciA9IFN0b3JhZ2VBdHRyaWJ1dGUuVU5JQ09ERTtcclxuICAgIGlmICh2YWwxLlN0clZhbCA9PSBudWxsKSB7XHJcbiAgICAgIHN1cGVyLlNldE5VTEwocmVzVmFsLCBTdG9yYWdlQXR0cmlidXRlLlVOSUNPREUpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICByZXNWYWwuU3RyVmFsID0gdmFsMS5TdHJWYWwudG9Mb3dlckNhc2UoKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBDUkMgbWFnaWMgZnVuY3Rpb25cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIHByaXZhdGUgZXZhbF9vcF9jcmMocmVzVmFsOiBFeHBWYWwsIHZhbDE6IEV4cFZhbCwgdmFsMjogRXhwVmFsKTogdm9pZCB7XHJcbiAgICByZXNWYWwuQXR0ciA9IFN0b3JhZ2VBdHRyaWJ1dGUuQUxQSEE7XHJcbiAgICBpZiAodmFsMS5TdHJWYWwgPT0gbnVsbCB8fCB2YWwyLk1nTnVtVmFsID09IG51bGwpIHtcclxuICAgICAgc3VwZXIuU2V0TlVMTChyZXNWYWwsIFN0b3JhZ2VBdHRyaWJ1dGUuQUxQSEEpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBsZXQgbW9kZTogbnVtYmVyID0gdmFsMi5NZ051bVZhbC5OVU1fMl9MT05HKCk7XHJcbiAgICBsZXQgcmVzOiBudW1iZXIgPSAwO1xyXG4gICAgc3dpdGNoIChtb2RlKSB7XHJcbiAgICAgIGNhc2UgMDpcclxuICAgICAgICByZXMgPSBFeHByZXNzaW9uRXZhbHVhdG9yLmV2YWxfY3JjXzE2KHZhbDEuU3RyVmFsKTtcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuICAgIGxldCBsZWZ0ID0gU3RyaW5nLmZyb21DaGFyQ29kZShyZXMgJSAyNTYpO1xyXG4gICAgbGV0IHJpZ2h0ID0gU3RyaW5nLmZyb21DaGFyQ29kZShyZXMgLyAyNTYpO1xyXG4gICAgcmVzVmFsLlN0clZhbCA9ICcnICsgbGVmdCArIHJpZ2h0O1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzdGF0aWMgZXZhbF9jcmNfMTYoYnVmOiBTdHJpbmcpOiBudW1iZXIge1xyXG4gICAgbGV0IGNyY18xNl90YWJsZSA9IFtcclxuICAgICAgNDA5NjEsIDYxNDQxLCA1NTI5NywgNTIyMjUsIDUwNjg5LCA0OTkyMSwgNDk1MzcsIDQ5MzQ1XHJcbiAgICBdO1xyXG4gICAgbGV0IGJ1ZmZlcl9pZHg6IG51bWJlciA9IDA7XHJcbiAgICBsZXQgbGVuOiBudW1iZXIgPSBidWYubGVuZ3RoO1xyXG4gICAgbGV0IGNyYzogbnVtYmVyID0gMDtcclxuICAgIGZvciAoOyBsZW4gPiAwOyBsZW4tLSkge1xyXG4gICAgICBsZXQgYnQgPSBidWYuY2hhckNvZGVBdChidWZmZXJfaWR4KyspO1xyXG4gICAgICBidCA9IDxudW1iZXI+KGJ0IF4gRXhwcmVzc2lvbkV2YWx1YXRvci5MT19DSEFSKGNyYykpO1xyXG4gICAgICBjcmMgPSBFeHByZXNzaW9uRXZhbHVhdG9yLkxPX0NIQVIoRXhwcmVzc2lvbkV2YWx1YXRvci5NS19TSFJUKDAsIEV4cHJlc3Npb25FdmFsdWF0b3IuSElfQ0hBUihjcmMpKSk7XHJcbiAgICAgIGxldCBtYXNrOiBudW1iZXI7XHJcbiAgICAgIGxldCB0YmxfaWR4OiBudW1iZXI7XHJcbiAgICAgIGZvciAodGJsX2lkeCA9IDAsIG1hc2sgPSA8bnVtYmVyPkV4cHJlc3Npb25FdmFsdWF0b3IuTE9fQ0hBUigweDgwKTsgdGJsX2lkeCA8IDg7IHRibF9pZHgrKyAsIG1hc2sgPSA8bnVtYmVyPihFeHByZXNzaW9uRXZhbHVhdG9yLkxPX0NIQVIobWFzaykgPj4gMSkpIHtcclxuICAgICAgICBpZiAoPG51bWJlcj5FeHByZXNzaW9uRXZhbHVhdG9yLkxPX0NIQVIoPG51bWJlcj4oYnQgJiA8bnVtYmVyPkV4cHJlc3Npb25FdmFsdWF0b3IuTE9fQ0hBUihtYXNrKSkpICE9PSAwKVxyXG4gICAgICAgICAgY3JjID0gPG51bWJlcj4oY3JjIF4gY3JjXzE2X3RhYmxlW3RibF9pZHhdKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIChjcmMpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzdGF0aWMgTE9fQ0hBUihuOiBudW1iZXIpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIDxudW1iZXI+KG4gJiAweGZmKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc3RhdGljIEhJX0NIQVIobjogbnVtYmVyKTogbnVtYmVyIHtcclxuICAgIHJldHVybiA8bnVtYmVyPigobiAmIDB4ZmYwMCkgPj4gOCk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgTUtfU0hSVChjMTogbnVtYmVyLCBjMjogbnVtYmVyKTogbnVtYmVyIHtcclxuICAgIHJldHVybiA8bnVtYmVyPig8bnVtYmVyPihjMSA8PCA4KSB8IDxudW1iZXI+YzIpO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIE1LX0xPTkcoYzE6IG51bWJlciwgYzI6IG51bWJlciwgYzM6IG51bWJlciwgYzQ6IG51bWJlcik6IG51bWJlciB7XHJcbiAgICByZXR1cm4gKChjMSA8PCAyNCkgfCAoYzIgPDwgMTYpIHwgKGMzIDw8IDgpIHwgYzQpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBldmFsX29wX2Noa2RndChyZXNWYWw6IEV4cFZhbCwgdmFsMTogRXhwVmFsLCB2YWwyOiBFeHBWYWwpOiB2b2lkIHtcclxuICAgIGxldCB3ZWlnaHRfdmFsczogc3RyaW5nW10gPSBbXHJcbiAgICAgIFN0cmluZy5mcm9tQ2hhckNvZGUoMSksIFN0cmluZy5mcm9tQ2hhckNvZGUoMiksIFN0cmluZy5mcm9tQ2hhckNvZGUoNSksIFN0cmluZy5mcm9tQ2hhckNvZGUoMyksIFN0cmluZy5mcm9tQ2hhckNvZGUoNiksIFN0cmluZy5mcm9tQ2hhckNvZGUoNCksIFN0cmluZy5mcm9tQ2hhckNvZGUoOCksXHJcbiAgICAgIFN0cmluZy5mcm9tQ2hhckNvZGUoNyksIFN0cmluZy5mcm9tQ2hhckNvZGUoMTApLCBTdHJpbmcuZnJvbUNoYXJDb2RlKDkpXHJcbiAgICBdO1xyXG4gICAgbGV0IHBvczogbnVtYmVyO1xyXG4gICAgbGV0IG11bDogbnVtYmVyO1xyXG4gICAgbGV0IGNfc3RyOiBzdHJpbmc7XHJcbiAgICBsZXQgZGlnaXRzOiBudW1iZXI7XHJcblxyXG4gICAgaWYgKHZhbDEuU3RyVmFsID09PSBudWxsIHx8IHZhbDIuTWdOdW1WYWwgPT09IG51bGwpIHtcclxuICAgICAgc3VwZXIuU2V0TlVMTChyZXNWYWwsIFN0b3JhZ2VBdHRyaWJ1dGUuTlVNRVJJQyk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgbW9kZTogbnVtYmVyID0gdmFsMi5NZ051bVZhbC5OVU1fMl9MT05HKCk7XHJcbiAgICBsZXQgcmVzOiBudW1iZXIgPSAwO1xyXG4gICAgc3dpdGNoIChtb2RlKSB7XHJcbiAgICAgIGNhc2UgMDpcclxuICAgICAgICBtdWwgPSAyO1xyXG4gICAgICAgIGZvciAocG9zID0gdmFsMS5TdHJWYWwubGVuZ3RoOyBwb3MgPj0gMTsgcG9zLS0pIHtcclxuICAgICAgICAgIGNfc3RyID0gdmFsMS5TdHJWYWwuc3Vic3RyKHBvcyAtIDEpO1xyXG4gICAgICAgICAgZGlnaXRzID0gdGhpcy5hXzJfbG9uZyhjX3N0ciwgMSkgKiBtdWw7XHJcbiAgICAgICAgICByZXMgKz0gZGlnaXRzICsgKGRpZ2l0cyA+IDkgPyAxIDogMCk7XHJcbiAgICAgICAgICBtdWwgPSAzIC0gbXVsO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXMgJT0gMTA7XHJcbiAgICAgICAgaWYgKHJlcyAhPT0gMClcclxuICAgICAgICAgIHJlcyA9IDEwIC0gcmVzO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSAxOlxyXG4gICAgICAgIGZvciAocG9zID0gdmFsMS5TdHJWYWwubGVuZ3RoOyBwb3MgPj0gMTsgcG9zLS0pIHtcclxuICAgICAgICAgIG11bCA9IHdlaWdodF92YWxzWyh2YWwxLlN0clZhbC5sZW5ndGggLSBwb3MpICUgMTBdLmNoYXJDb2RlQXQoMCk7XHJcbiAgICAgICAgICBsZXQgY19jaGFyOiBzdHJpbmcgPSB2YWwxLlN0clZhbFtwb3MgLSAxXS50b1VwcGVyQ2FzZSgpO1xyXG4gICAgICAgICAgY19zdHIgPSB2YWwxLlN0clZhbC5zdWJzdHIocG9zIC0gMSk7XHJcbiAgICAgICAgICBpZiAoVXRpbFN0ckJ5dGVNb2RlLmlzRGlnaXQoY19jaGFyKSlcclxuICAgICAgICAgICAgZGlnaXRzID0gdGhpcy5hXzJfbG9uZyhjX3N0ciwgMSkgKiBtdWw7XHJcbiAgICAgICAgICBlbHNlIGlmIChOQ2hhci5Jc1VwcGVyKGNfc3RyWzBdKSlcclxuICAgICAgICAgICAgZGlnaXRzID0gKGNfc3RyWzBdLmNoYXJDb2RlQXQoMCkgLSAnQScuY2hhckNvZGVBdCgwKSArIDEpICogbXVsO1xyXG4gICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICBkaWdpdHMgPSAwO1xyXG4gICAgICAgICAgcmVzICs9IGRpZ2l0cztcclxuICAgICAgICB9XHJcbiAgICAgICAgcmVzICU9IDExO1xyXG4gICAgICAgIGlmIChyZXMgIT09IDApXHJcbiAgICAgICAgICByZXMgPSAxMSAtIHJlcztcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuICAgIHN1cGVyLkNvbnN0cnVjdE1hZ2ljTnVtKHJlc1ZhbCwgcmVzLCBTdG9yYWdlQXR0cmlidXRlLk5VTUVSSUMpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhXzJfbG9uZyhzdHI6IHN0cmluZywgbGVuOiBudW1iZXIpOiBudW1iZXIge1xyXG4gICAgbGV0IG46IG51bWJlciA9IDA7XHJcbiAgICBmb3IgKGxldCBwb3M6IG51bWJlciA9IDA7IHBvcyA8IGxlbjsgcG9zID0gcG9zICsgMSkge1xyXG4gICAgICBpZiAoVXRpbFN0ckJ5dGVNb2RlLmlzRGlnaXQoc3RyLmNoYXJBdChwb3MpKSkge1xyXG4gICAgICAgIG4gPSBuICogMTA7XHJcbiAgICAgICAgbiArPSA8bnVtYmVyPihzdHIuY2hhckNvZGVBdChwb3MpIC0gJzAnLmNoYXJDb2RlQXQoMCkpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbjtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZXZhbF9vcF9zb3VuZHgocmVzVmFsOiBFeHBWYWwsIHZhbDE6IEV4cFZhbCk6IHZvaWQge1xyXG4gICAgbGV0IHNvdW5keF92YWxzOiBzdHJpbmdbXSA9IFtcclxuICAgICAgJzAnLCAnMScsICcyJywgJzMnLCAnMCcsICcxJywgJzInLCAnMCcsICcwJywgJzInLCAnMicsICc0JywgJzUnLCAnNScsICcwJywgJzEnLCAnMicsXHJcbiAgICAgICc2JyxcclxuICAgICAgJzInLCAnMycsICcwJywgJzEnLCAnMCcsICcyJywgJzAnLCAnMidcclxuICAgIF07XHJcblxyXG4gICAgaWYgKHZhbDEuU3RyVmFsID09PSBudWxsKSB7XHJcbiAgICAgIHN1cGVyLlNldE5VTEwocmVzVmFsLCBTdG9yYWdlQXR0cmlidXRlLkFMUEhBKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgcmVzVmFsLkF0dHIgPSBTdG9yYWdlQXR0cmlidXRlLkFMUEhBO1xyXG4gICAgcmVzVmFsLlN0clZhbCA9ICcwMDAwJztcclxuICAgIGxldCBsYXN0Yzogc3RyaW5nID0gJyAnO1xyXG4gICAgbGV0IG91dHBvczogbnVtYmVyID0gMDtcclxuICAgIGZvciAobGV0IGlucG9zOiBudW1iZXIgPSAwOyBpbnBvcyA8IHZhbDEuU3RyVmFsLmxlbmd0aDsgaW5wb3MrKykge1xyXG4gICAgICBsZXQgaW5jOiBzdHJpbmcgPSB2YWwxLlN0clZhbC5jaGFyQXQoaW5wb3MpLnRvVXBwZXJDYXNlKCk7XHJcbiAgICAgIGxldCBvdXRjOiBzdHJpbmcgPSBzb3VuZHhfdmFsc1soaW5jLmNoYXJDb2RlQXQoMCkgLSAnQScuY2hhckNvZGVBdCgwKSldO1xyXG4gICAgICBpZiAoaW5wb3MgPT09IDApXHJcbiAgICAgICAgcmVzVmFsLlN0clZhbCA9IEV4cHJlc3Npb25FdmFsdWF0b3Iuc2V0QXQocmVzVmFsLlN0clZhbCwgb3V0cG9zKyssIGluYyk7XHJcbiAgICAgIGVsc2UgaWYgKG91dGMgPiAnMCcgJiYgb3V0YyAhPT0gbGFzdGMpIHtcclxuICAgICAgICByZXNWYWwuU3RyVmFsID0gRXhwcmVzc2lvbkV2YWx1YXRvci5zZXRBdChyZXNWYWwuU3RyVmFsLCBvdXRwb3MrKywgb3V0Yyk7XHJcbiAgICAgICAgaWYgKG91dHBvcyA+IDMpXHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgICBsYXN0YyA9IG91dGM7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgc2V0IGNoYXJhY3RlciBpbnNpZGUgc3RyaW5nIG9uIG5lZWRlZCBwb3NpdGlvblxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJzdHJcIj50byBpbnNlcnQgY2hhciBpbnRvPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInBvc1wiPm9mIGNoYXJhY3RlciB0byBpbnNlcnQ8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiY2hcIj50byBiZSBpbnNlcnRlZDwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPiBzdHJpbmcgd2l0aCBpbnNlcnRlZCBjaGFyPC9yZXR1cm5zPlxyXG4gIHByaXZhdGUgc3RhdGljIHNldEF0KHN0cjogc3RyaW5nLCBwb3M6IG51bWJlciwgY2g6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBsZXQgYnVmZmVyOiBTdHJpbmdCdWlsZGVyID0gbmV3IFN0cmluZ0J1aWxkZXIoc3RyKTtcclxuXHJcbiAgICBpZiAocG9zIDwgc3RyLmxlbmd0aCkge1xyXG4gICAgICBidWZmZXIuc2V0X0l0ZW0ocG9zLCBjaCk7IC8vIHRyeSBibG9ja1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgYnVmZmVyLkFwcGVuZChjaCk7IC8vIGNhdGNoIGJsb2NrXHJcbiAgICB9XHJcbiAgICByZXR1cm4gYnVmZmVyLlRvU3RyaW5nKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGV2YWxfb3BfaHN0cihyZXNWYWw6IEV4cFZhbCwgdmFsMTogRXhwVmFsKTogdm9pZCB7XHJcbiAgICBsZXQgbnVtMTYgPSBuZXcgTlVNX1RZUEUoKTtcclxuICAgIGxldCBuZXdudW06IE5VTV9UWVBFO1xyXG4gICAgbGV0IGRpZ2l0OiBudW1iZXI7XHJcbiAgICBsZXQgb3V0c3RyID0gbmV3IEFycmF5KDMwKTtcclxuICAgIGxldCB0bXBPdXRTdHIgPSBuZXcgU3RyaW5nQnVpbGRlcihvdXRzdHIubGVuZ3RoKTtcclxuICAgIGxldCBuZWdhdGl2ZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgcmVzVmFsLkF0dHIgPSBTdG9yYWdlQXR0cmlidXRlLkFMUEhBO1xyXG4gICAgaWYgKHZhbDEuTWdOdW1WYWwgPT0gbnVsbCkge1xyXG4gICAgICBzdXBlci5TZXROVUxMKHJlc1ZhbCwgU3RvcmFnZUF0dHJpYnV0ZS5BTFBIQSk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICAvKiBub3RlOiBjYW4gYmUgb3B0aW1pemVkIGJ5IHVzaW5nIGxhcmdlciBkaXZpc29yICovXHJcbiAgICBudW0xNi5udW1fNF9hX3N0ZCgnMTYnKTtcclxuICAgIGxldCBvcmdudW0gPSBuZXcgTlVNX1RZUEUodmFsMS5NZ051bVZhbCk7XHJcbiAgICBpZiAob3JnbnVtLm51bV9pc19uZWcoKSkge1xyXG4gICAgICBuZWdhdGl2ZSA9IHRydWU7XHJcbiAgICAgIG9yZ251bS5udW1fYWJzKCk7XHJcbiAgICB9XHJcbiAgICBsZXQgZGlnaXRzOiBudW1iZXIgPSAwO1xyXG4gICAgd2hpbGUgKHRydWUpIHtcclxuICAgICAgbmV3bnVtID0gTlVNX1RZUEUubW9kKG9yZ251bSwgbnVtMTYpO1xyXG4gICAgICBvcmdudW0gPSBOVU1fVFlQRS5kaXYob3JnbnVtLCBudW0xNik7XHJcbiAgICAgIG9yZ251bS5udW1fdHJ1bmMoMCk7XHJcbiAgICAgIGRpZ2l0ID0gbmV3bnVtLk5VTV8yX0xPTkcoKTtcclxuICAgICAgZGlnaXRzKys7XHJcbiAgICAgIEV4cHJlc3Npb25FdmFsdWF0b3IuaW50XzJfaGV4KG91dHN0ciwgb3V0c3RyLmxlbmd0aCAtIGRpZ2l0cywgMSwgZGlnaXQsIDApO1xyXG4gICAgICBpZiAob3JnbnVtLm51bV9pc196ZXJvKCkpXHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKG5lZ2F0aXZlKSB7XHJcbiAgICAgIGRpZ2l0cysrO1xyXG4gICAgICBvdXRzdHJbb3V0c3RyLmxlbmd0aCAtIGRpZ2l0c10gPSAnLSc7XHJcbiAgICB9XHJcbiAgICBmb3IgKGRpZ2l0ID0gb3V0c3RyLmxlbmd0aCAtIGRpZ2l0czsgZGlnaXQgPCBvdXRzdHIubGVuZ3RoOyBkaWdpdCsrKVxyXG4gICAgICB0bXBPdXRTdHIuQXBwZW5kKG91dHN0cltkaWdpdF0pO1xyXG4gICAgcmVzVmFsLlN0clZhbCA9IHRtcE91dFN0ci5Ub1N0cmluZygpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzdGF0aWMgaW50XzJfaGV4KHN0cjogc3RyaW5nW10sIHN0clBvczogbnVtYmVyLCBsZW46IG51bWJlciwgbjogbnVtYmVyLCBsZWFkOiBudW1iZXIpOiB2b2lkIHtcclxuICAgIGxldCBwb3M6IG51bWJlciA9IGxlbjtcclxuICAgIGRvIHtcclxuICAgICAgbGV0IGRpZ2l0OiBudW1iZXIgPSBuICUgMTY7XHJcbiAgICAgIGlmIChkaWdpdCA8IDEwKVxyXG4gICAgICAgIHN0clstLXBvcyArIHN0clBvc10gPSBTdHJpbmcuZnJvbUNoYXJDb2RlKCcwJy5jaGFyQ29kZUF0KDApICsgZGlnaXQpO1xyXG4gICAgICBlbHNlIHN0clstLXBvcyArIHN0clBvc10gPSBTdHJpbmcuZnJvbUNoYXJDb2RlKCdBJy5jaGFyQ29kZUF0KDApICsgZGlnaXQgLSAxMCk7XHJcbiAgICAgIG4gPSBNYXRoLmZsb29yKG4gLyAxNik7XHJcbiAgICB9XHJcbiAgICB3aGlsZSAocG9zID4gMCAmJiBuICE9PSAwKTtcclxuICAgIEV4cHJlc3Npb25FdmFsdWF0b3IubGliX2FfZmlsbChzdHIsIGxlbiwgcG9zICsgc3RyUG9zLCBsZWFkKTtcclxuICAgIHJldHVybjtcclxuICB9XHJcblxyXG5cclxuICBwcml2YXRlIHN0YXRpYyBsaWJfYV9maWxsKHN0cjogc3RyaW5nW10sIGxlbjogbnVtYmVyLCBwb3M6IG51bWJlciwgbGVhZDogbnVtYmVyKTogdm9pZCB7XHJcbiAgICBpZiAobGVhZCA9PT0gMCkge1xyXG4gICAgICBsZW4gLT0gcG9zO1xyXG4gICAgICBpZiAobGVuID4gMCAmJiBwb3MgPiAwKSB7XHJcbiAgICAgICAgU3RyVXRpbC5tZW1jcHkoc3RyLCAwLCBzdHIsIHBvcywgbGVuKTtcclxuICAgICAgICBTdHJVdGlsLm1lbXNldChzdHIsIGxlbiwgJyAnLCBwb3MpO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAocG9zID4gMClcclxuICAgICAgICBTdHJVdGlsLm1lbXNldChzdHIsIDAsIFN0cmluZy5mcm9tQ2hhckNvZGUobGVhZCksIHBvcyk7XHJcbiAgICB9XHJcbiAgICByZXR1cm47XHJcbiAgfVxyXG5cclxuXHJcbiAgcHJpdmF0ZSBldmFsX29wX2h2YWwocmVzVmFsOiBFeHBWYWwsIHZhbDE6IEV4cFZhbCk6IHZvaWQge1xyXG4gICAgbGV0IG51bTE2ID0gbmV3IE5VTV9UWVBFKCk7XHJcbiAgICBsZXQgbnVtID0gbmV3IE5VTV9UWVBFKCk7XHJcbiAgICBsZXQgZGlnaXRzOiBudW1iZXI7XHJcbiAgICBsZXQgc3RhdGU6IG51bWJlciA9IDA7IC8vIFNUQVRFX0JFRk9SRV9OVU1CRVIgPSAwOyBTVEFURV9JTl9OVU1CRVIgPSAxXHJcbiAgICBsZXQgbmVnYXRpdmU6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgICBpZiAodmFsMS5TdHJWYWwgPT09IG51bGwpIHtcclxuICAgICAgc3VwZXIuU2V0TlVMTChyZXNWYWwsIFN0b3JhZ2VBdHRyaWJ1dGUuTlVNRVJJQyk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICAvKiBub3RlOiBjYW4gYmUgb3B0aW1pemVkIGJ5IHVzaW5nIGxhcmdlciBkaXZpc29yICovXHJcbiAgICBudW0xNi5udW1fNF9hX3N0ZCgnMTYnKTtcclxuICAgIHJlc1ZhbC5NZ051bVZhbCA9IG5ldyBOVU1fVFlQRSgpO1xyXG4gICAgcmVzVmFsLk1nTnVtVmFsLk5VTV9aRVJPKCk7XHJcbiAgICBmb3IgKGRpZ2l0cyA9IDA7IGRpZ2l0cyA8IHZhbDEuU3RyVmFsLmxlbmd0aDsgZGlnaXRzKyspIHtcclxuICAgICAgbGV0IGRpZ2l0Yzogc3RyaW5nID0gdmFsMS5TdHJWYWxbZGlnaXRzXTtcclxuICAgICAgaWYgKGRpZ2l0YyA9PT0gJy0nICYmIHN0YXRlID09PSAwKVxyXG4gICAgICAgIG5lZ2F0aXZlID0gdHJ1ZTtcclxuICAgICAgbGV0IGRpZ2l0OiBudW1iZXIgPSB0aGlzLmhleF8yX2xvbmcodmFsMS5TdHJWYWwsIGRpZ2l0cywgMSk7XHJcbiAgICAgIGlmIChkaWdpdCA9PT0gMCAmJiBkaWdpdGMgIT09ICcwJylcclxuICAgICAgICBjb250aW51ZTtcclxuICAgICAgc3RhdGUgPSAxO1xyXG4gICAgICByZXNWYWwuTWdOdW1WYWwgPSBOVU1fVFlQRS5tdWwocmVzVmFsLk1nTnVtVmFsLCBudW0xNik7XHJcbiAgICAgIG51bS5OVU1fNF9MT05HKGRpZ2l0KTtcclxuICAgICAgcmVzVmFsLk1nTnVtVmFsID0gTlVNX1RZUEUuYWRkKHJlc1ZhbC5NZ051bVZhbCwgbnVtKTtcclxuICAgIH1cclxuICAgIGlmIChuZWdhdGl2ZSlcclxuICAgICAgcmVzVmFsLk1nTnVtVmFsLm51bV9uZWcoKTtcclxuICAgIHJlc1ZhbC5BdHRyID0gU3RvcmFnZUF0dHJpYnV0ZS5OVU1FUklDO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBoZXhfMl9sb25nKHN0cjogU3RyaW5nLCBzdHJDb3VudDogbnVtYmVyLCBsZW46IG51bWJlcik6IG51bWJlciB7XHJcbiAgICBsZXQgcG9zOiBudW1iZXI7XHJcbiAgICBsZXQgbjogbnVtYmVyID0gMDtcclxuICAgIGZvciAocG9zID0gc3RyQ291bnQ7IHBvcyA8IHN0ckNvdW50ICsgbGVuOyBwb3MrKykge1xyXG4gICAgICBsZXQgZGlnaXQ6IHN0cmluZyA9IHN0ci5jaGFyQXQocG9zKS50b1VwcGVyQ2FzZSgpO1xyXG4gICAgICBpZiAoVXRpbFN0ckJ5dGVNb2RlLmlzRGlnaXQoZGlnaXQpKSB7XHJcbiAgICAgICAgbiAqPSAxNjtcclxuICAgICAgICBuICs9IGRpZ2l0LmNoYXJDb2RlQXQoMCkgLSAnMCcuY2hhckNvZGVBdCgwKTtcclxuICAgICAgfSBlbHNlIGlmIChkaWdpdCA+PSAnQScgJiYgZGlnaXQgPD0gJ0YnKSB7XHJcbiAgICAgICAgbiAqPSAxNjtcclxuICAgICAgICBuICs9IGRpZ2l0LmNoYXJDb2RlQXQoMCkgLSAnQScuY2hhckNvZGVBdCgwKSArIDEwO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbjtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZXZhbF9vcF9jaHIocmVzVmFsOiBFeHBWYWwsIHZhbDE6IEV4cFZhbCk6IHZvaWQge1xyXG4gICAgcmVzVmFsLkF0dHIgPSBTdG9yYWdlQXR0cmlidXRlLkFMUEhBO1xyXG5cclxuICAgIGlmICh2YWwxLk1nTnVtVmFsID09PSBudWxsKSB7XHJcbiAgICAgIHN1cGVyLlNldE5VTEwocmVzVmFsLCBTdG9yYWdlQXR0cmlidXRlLkFMUEhBKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHJlc1ZhbC5TdHJWYWwgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKHZhbDEuTWdOdW1WYWwuTlVNXzJfTE9ORygpKVswXTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZXZhbF9vcF9hc2MocmVzVmFsOiBFeHBWYWwsIHZhbDE6IEV4cFZhbCk6IHZvaWQge1xyXG4gICAgaWYgKHZhbDEuU3RyVmFsID09PSBudWxsKSB7XHJcbiAgICAgIHN1cGVyLlNldE5VTEwocmVzVmFsLCBTdG9yYWdlQXR0cmlidXRlLk5VTUVSSUMpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IGM6IG51bWJlciA9ICh2YWwxLlN0clZhbC5sZW5ndGggPiAwKSA/IChFbmNvZGluZy5BU0NJSS5HZXRCeXRlcyh2YWwxLlN0clZhbCkpWzBdIDogMDtcclxuXHJcbiAgICB0aGlzLkNvbnN0cnVjdE1hZ2ljTnVtKHJlc1ZhbCwgYywgU3RvcmFnZUF0dHJpYnV0ZS5OVU1FUklDKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZXZhbF9vcF9tc3RyKHJlc1ZhbDogRXhwVmFsLCB2YWwxOiBFeHBWYWwsIHZhbDI6IEV4cFZhbCk6IHZvaWQge1xyXG4gICAgcmVzVmFsLkF0dHIgPSBTdG9yYWdlQXR0cmlidXRlLkFMUEhBO1xyXG4gICAgaWYgKHZhbDEuTWdOdW1WYWwgPT0gbnVsbCAmJiB2YWwyLk1nTnVtVmFsID09IG51bGwpIHtcclxuICAgICAgc3VwZXIuU2V0TlVMTChyZXNWYWwsIFN0b3JhZ2VBdHRyaWJ1dGUuQUxQSEEpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBsZXQgbnVtID0gbmV3IE5VTV9UWVBFKHZhbDEuTWdOdW1WYWwpO1xyXG4gICAgaWYgKG51bS5OVU1fSVNfTE9ORygpKVxyXG4gICAgICBudW0ubnVtXzRfc3RkX2xvbmcoKTtcclxuICAgIGxldCBsZW46IG51bWJlciA9IHZhbDIuTWdOdW1WYWwuTlVNXzJfTE9ORygpO1xyXG4gICAgbGVuID0gTWF0aC5tYXgobGVuLCAyKTtcclxuICAgIGxldCB0bXBBcnJheTogSW50OEFycmF5ID0gbmV3IEludDhBcnJheShsZW4pO1xyXG4gICAgZm9yIChsZXQgaTogbnVtYmVyID0gMDsgaSA8IGxlbjsgaSsrKVxyXG4gICAgICB0bXBBcnJheVtpXSA9IG51bS5EYXRhW2ldO1xyXG4gICAgbGV0IHRtcEJ5dGVzOiBVaW50OEFycmF5ID0gTWlzYy5Ub0J5dGVBcnJheSh0bXBBcnJheSk7XHJcbiAgICByZXNWYWwuU3RyVmFsID0gRW52aXJvbm1lbnQuSW5zdGFuY2UuR2V0RW5jb2RpbmcoKS5HZXRTdHJpbmcodG1wQnl0ZXMsIDAsIHRtcEJ5dGVzLmxlbmd0aCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGV2YWxfb3BfbXZhbChyZXNWYWw6IEV4cFZhbCwgdmFsMTogRXhwVmFsKTogdm9pZCB7XHJcbiAgICByZXNWYWwuQXR0ciA9IFN0b3JhZ2VBdHRyaWJ1dGUuTlVNRVJJQztcclxuICAgIGlmICh2YWwxLlN0clZhbCA9PSBudWxsKSB7XHJcbiAgICAgIHN1cGVyLlNldE5VTEwocmVzVmFsLCBTdG9yYWdlQXR0cmlidXRlLk5VTUVSSUMpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICByZXNWYWwuTWdOdW1WYWwgPSBuZXcgTlVNX1RZUEUoKTtcclxuICAgIHJlc1ZhbC5NZ051bVZhbC5OVU1fU0VUX1pFUk8oKTtcclxuICAgIGxldCBsZW46IG51bWJlciA9IE1hdGgubWluKHZhbDEuU3RyVmFsLmxlbmd0aCwgTlVNX1RZUEUuTlVNX1NJWkUpO1xyXG4gICAgcmVzVmFsLk1nTnVtVmFsID0gbmV3IE5VTV9UWVBFKE1pc2MuVG9TQnl0ZUFycmF5KEVudmlyb25tZW50Lkluc3RhbmNlLkdldEVuY29kaW5nKCkuR2V0Qnl0ZXModmFsMS5TdHJWYWwpKSwgMCwgbGVuKTtcclxuICB9XHJcblxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgZXZhbHVhdGlvbiBvZiBEYXRlIHRvIHRoZSBBbGZhIHN0cmluZyB3aXRoIHNwZWNpYWwgZm9ybWF0XHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBwcml2YXRlIGV2YWxfb3BfZHN0cihyZXNWYWw6IEV4cFZhbCwgdmFsMTogRXhwVmFsLCB2YWwyOiBFeHBWYWwsIGRpc3BsYXlDb252ZXJ0b3I6IERpc3BsYXlDb252ZXJ0b3IpOiB2b2lkIHtcclxuICAgIHJlc1ZhbC5BdHRyID0gU3RvcmFnZUF0dHJpYnV0ZS5VTklDT0RFO1xyXG4gICAgaWYgKHZhbDEuTWdOdW1WYWwgPT0gbnVsbCB8fCB2YWwyLlN0clZhbCA9PSBudWxsKSB7XHJcbiAgICAgIHN1cGVyLlNldE5VTEwocmVzVmFsLCBTdG9yYWdlQXR0cmlidXRlLlVOSUNPREUpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICByZXNWYWwuU3RyVmFsID0gZGlzcGxheUNvbnZlcnRvci50b19hKHJlc1ZhbC5TdHJWYWwsIDEwMCwgdmFsMS5NZ051bVZhbC5OVU1fMl9VTE9ORygpLCB2YWwyLlN0clZhbCxcclxuICAgICAgdGhpcy5FeHBUYXNrLmdldENvbXBJZHgoKSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGV2YWxfb3BfdHN0cihyZXNWYWw6IEV4cFZhbCwgdmFsMTogRXhwVmFsLCB2YWwyOiBFeHBWYWwsIGRpc3BsYXlDb252ZXJ0b3I6IERpc3BsYXlDb252ZXJ0b3IsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgbWlsbGlTZWNvbmRzOiBib29sZWFuKTogdm9pZCB7XHJcbiAgICByZXNWYWwuQXR0ciA9IFN0b3JhZ2VBdHRyaWJ1dGUuQUxQSEE7XHJcbiAgICBpZiAodmFsMS5NZ051bVZhbCA9PSBudWxsIHx8IHZhbDIuU3RyVmFsID09IG51bGwpIHtcclxuICAgICAgc3VwZXIuU2V0TlVMTChyZXNWYWwsIFN0b3JhZ2VBdHRyaWJ1dGUuQUxQSEEpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICByZXNWYWwuU3RyVmFsID0gZGlzcGxheUNvbnZlcnRvci50aW1lXzJfYShyZXNWYWwuU3RyVmFsLCAxMDAsIHZhbDEuTWdOdW1WYWwuTlVNXzJfVUxPTkcoKSwgdmFsMi5TdHJWYWwsXHJcbiAgICAgIHRoaXMuRXhwVGFzay5nZXRDb21wSWR4KCksIG1pbGxpU2Vjb25kcyk7XHJcbiAgfVxyXG5cclxuXHJcbiAgcHJpdmF0ZSBldmFsX29wX2R2YWwocmVzVmFsOiBFeHBWYWwsIHZhbDE6IEV4cFZhbCwgdmFsMjogRXhwVmFsLCBkaXNwbGF5Q29udmVydG9yOiBEaXNwbGF5Q29udmVydG9yKTogdm9pZCB7XHJcbiAgICBpZiAodmFsMS5TdHJWYWwgPT09IG51bGwgfHwgdmFsMi5TdHJWYWwgPT09IG51bGwpIHtcclxuICAgICAgc3VwZXIuU2V0TlVMTChyZXNWYWwsIFN0b3JhZ2VBdHRyaWJ1dGUuREFURSk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cclxuICAgIC8qIHllYXIgMjAwMCBidWcgLSBpZiB0aGUgdXNlciBpbnNlcnRzIGEgZGF0ZSB2YWx1ZSB3aXRoIG9ubHkgMiAqL1xyXG4gICAgLyogeWVhciBkaWdpdHMgKGkuZS4gREQvTU0vWVkpLCB0aGUgYV8yX2RhdGUgbWlnaHQgaW5zZXJ0IGV4dHJhICovXHJcbiAgICAvKiAyIGNlbnR1cnkgZGlnaXRzLCBhbmQgZW5sYXJnZSB0aGUgaW5wdXQgc3RyaW5nLiBJbiBvcmRlciB0byAgKi9cclxuICAgIC8qIGF2aW9kIG1lbW9yeSBjb3JydXB0aW9ucywgd2UgZW5sYXJnZSB0aGUgZGF0ZSBzdHJpbmcgaW5wdXQgICAqL1xyXG4gICAgLyogYnVmZmVyIC0gSWxhbiBzaGliZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXHJcbiAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cclxuICAgIGlmICh2YWwxLkF0dHIgPT09IFN0b3JhZ2VBdHRyaWJ1dGUuVU5JQ09ERSlcclxuICAgICAgaWYgKHZhbDEuU3RyVmFsLmxlbmd0aCArIDIgPD0gTlVNX1RZUEUuTlVNX1NJWkUpIHtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBsZXQgdG1wID0gbmV3IEFycmF5KHZhbDEuU3RyVmFsLmxlbmd0aCArIDIpO1xyXG4gICAgICAgIGZvciAobGV0IF9haTogbnVtYmVyID0gMDsgX2FpIDwgdG1wLmxlbmd0aDsgKytfYWkpXHJcbiAgICAgICAgICB0bXBbX2FpXSA9ICdcXDAnO1xyXG4gICAgICAgIFN0clV0aWwubWVtY3B5KHRtcCwgMCwgTlN0cmluZy5Ub0NoYXJBcnJheSh2YWwxLlN0clZhbCksIDAsIHZhbDEuU3RyVmFsLmxlbmd0aCk7XHJcbiAgICAgIH1cclxuICAgIGxldCBsOiBudW1iZXIgPSBkaXNwbGF5Q29udmVydG9yLmFfMl9kYXRlKHZhbDEuU3RyVmFsLCB2YWwyLlN0clZhbCwgdGhpcy5FeHBUYXNrLmdldENvbXBJZHgoKSk7XHJcbiAgICBpZiAobCA+PSAxMDAwMDAwMDAwKVxyXG4gICAgICBsID0gMDtcclxuICAgIHN1cGVyLkNvbnN0cnVjdE1hZ2ljTnVtKHJlc1ZhbCwgbCwgU3RvcmFnZUF0dHJpYnV0ZS5EQVRFKTtcclxuICB9XHJcblxyXG5cclxuICBwcml2YXRlIGV2YWxfb3BfdHZhbChyZXNWYWw6IEV4cFZhbCwgdmFsMTogRXhwVmFsLCB2YWwyOiBFeHBWYWwsIGRpc3BsYXlDb252ZXJ0b3I6IERpc3BsYXlDb252ZXJ0b3IsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgbWlsbGlTZWNvbmRzOiBib29sZWFuKTogdm9pZCB7XHJcbiAgICBpZiAodmFsMS5TdHJWYWwgPT09IG51bGwgfHwgdmFsMi5TdHJWYWwgPT09IG51bGwpIHtcclxuICAgICAgc3VwZXIuU2V0TlVMTChyZXNWYWwsIFN0b3JhZ2VBdHRyaWJ1dGUuVElNRSk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGxldCBwaWMgPSBuZXcgUElDKHZhbDIuU3RyVmFsLCBTdG9yYWdlQXR0cmlidXRlLlRJTUUsIHRoaXMuRXhwVGFzay5nZXRDb21wSWR4KCkpO1xyXG4gICAgbGV0IGw6IG51bWJlciA9IGRpc3BsYXlDb252ZXJ0b3IuYV8yX3RpbWUodmFsMS5TdHJWYWwsIHBpYywgbWlsbGlTZWNvbmRzKTtcclxuICAgIGlmIChsID49IDEwMDAwMDAwMDApXHJcbiAgICAgIGwgPSAwO1xyXG4gICAgc3VwZXIuQ29uc3RydWN0TWFnaWNOdW0ocmVzVmFsLCBsLCBTdG9yYWdlQXR0cmlidXRlLlRJTUUpO1xyXG4gIH1cclxuXHJcblxyXG4gIHByaXZhdGUgZXZhbF9vcF9kYXkocmVzVmFsOiBFeHBWYWwsIHZhbDE6IEV4cFZhbCk6IHZvaWQge1xyXG4gICAgdGhpcy5ldmFsX29wX2RhdGVfYnJrKHJlc1ZhbCwgdmFsMS5NZ051bVZhbCwgMCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZXZhbF9vcF9tb250aChyZXNWYWw6IEV4cFZhbCwgdmFsMTogRXhwVmFsKTogdm9pZCB7XHJcbiAgICB0aGlzLmV2YWxfb3BfZGF0ZV9icmsocmVzVmFsLCB2YWwxLk1nTnVtVmFsLCAxKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZXZhbF9vcF95ZWFyKHJlc1ZhbDogRXhwVmFsLCB2YWwxOiBFeHBWYWwpOiB2b2lkIHtcclxuICAgIHRoaXMuZXZhbF9vcF9kYXRlX2JyayhyZXNWYWwsIHZhbDEuTWdOdW1WYWwsIDIpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBldmFsX29wX2RvdyhyZXNWYWw6IEV4cFZhbCwgdmFsMTogRXhwVmFsKTogdm9pZCB7XHJcbiAgICB0aGlzLmV2YWxfb3BfZGF0ZV9icmsocmVzVmFsLCB2YWwxLk1nTnVtVmFsLCAzKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZXZhbF9vcF9zZWNvbmQocmVzVmFsOiBFeHBWYWwsIHZhbDE6IEV4cFZhbCk6IHZvaWQge1xyXG4gICAgdGhpcy5ldmFsX29wX3RpbWVfYnJrKHJlc1ZhbCwgdmFsMS5NZ051bVZhbCwgMik7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGV2YWxfb3BfbWludXRlKHJlc1ZhbDogRXhwVmFsLCB2YWwxOiBFeHBWYWwpOiB2b2lkIHtcclxuICAgIHRoaXMuZXZhbF9vcF90aW1lX2JyayhyZXNWYWwsIHZhbDEuTWdOdW1WYWwsIDEpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBldmFsX29wX2hvdXIocmVzVmFsOiBFeHBWYWwsIHZhbDE6IEV4cFZhbCk6IHZvaWQge1xyXG4gICAgdGhpcy5ldmFsX29wX3RpbWVfYnJrKHJlc1ZhbCwgdmFsMS5NZ051bVZhbCwgMCk7XHJcbiAgfVxyXG5cclxuXHJcbiAgcHVibGljIGV2YWxfb3BfZGF0ZV9icmsocmVzVmFsOiBFeHBWYWwsIHZhbDE6IE5VTV9UWVBFLCB0eXA6IG51bWJlcik6IHZvaWQge1xyXG4gICAgaWYgKHZhbDEgPT09IG51bGwpIHtcclxuICAgICAgc3VwZXIuU2V0TlVMTChyZXNWYWwsIFN0b3JhZ2VBdHRyaWJ1dGUuTlVNRVJJQyk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGxldCBkOiBudW1iZXIgPSB2YWwxLk5VTV8yX0xPTkcoKTtcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyBCcmVhayBkYXRhIGludG8gaXRzIGNvbXBvbmVudHNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICBsZXQgYnJlYWtQYXJhbXM6IERhdGVCcmVha1BhcmFtcyA9IERpc3BsYXlDb252ZXJ0b3IuSW5zdGFuY2UuZ2V0TmV3RGF0ZUJyZWFrUGFyYW1zKCk7XHJcbiAgICBEaXNwbGF5Q29udmVydG9yLkluc3RhbmNlLmRhdGVfYnJlYWtfZGF0ZW1vZGUoYnJlYWtQYXJhbXMsIGQsIGZhbHNlLCB0aGlzLkV4cFRhc2suZ2V0Q29tcElkeCgpKTtcclxuICAgIGxldCB5ZWFyOiBudW1iZXIgPSBicmVha1BhcmFtcy55ZWFyO1xyXG4gICAgbGV0IG1vbnRoOiBudW1iZXIgPSBicmVha1BhcmFtcy5tb250aDtcclxuICAgIGxldCBkYXk6IG51bWJlciA9IGJyZWFrUGFyYW1zLmRheTtcclxuICAgIGxldCBkb3k6IG51bWJlciA9IGJyZWFrUGFyYW1zLmRveTtcclxuICAgIGxldCBkb3c6IG51bWJlciA9IGJyZWFrUGFyYW1zLmRvdztcclxuICAgIHN3aXRjaCAodHlwKSB7XHJcbiAgICAgIGNhc2UgMDpcclxuICAgICAgICBkID0gZGF5O1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIDE6XHJcbiAgICAgICAgZCA9IG1vbnRoO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIDI6XHJcbiAgICAgICAgZCA9IHllYXI7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgMzpcclxuICAgICAgICBkID0gZG93O1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIDQ6XHJcbiAgICAgICAgZCA9IFV0aWxEYXRlSnBuLmdldEluc3RhbmNlKCkuZGF0ZV9qcG5feWVhcl9vZnMoeWVhciwgZG95KTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICBkID0gMDtcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuICAgIHN1cGVyLkNvbnN0cnVjdE1hZ2ljTnVtKHJlc1ZhbCwgZCwgU3RvcmFnZUF0dHJpYnV0ZS5OVU1FUklDKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZXZhbF9vcF90aW1lX2JyayhyZXNWYWw6IEV4cFZhbCwgdmFsMTogTlVNX1RZUEUsIHR5cDogbnVtYmVyKTogdm9pZCB7XHJcbiAgICBpZiAodmFsMSA9PT0gbnVsbCkge1xyXG4gICAgICBzdXBlci5TZXROVUxMKHJlc1ZhbCwgU3RvcmFnZUF0dHJpYnV0ZS5OVU1FUklDKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgbGV0IGQ6IG51bWJlciA9IHZhbDEuTlVNXzJfVUxPTkcoKTtcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyBCcmVha2UgZGF0YSBpbnRvIGl0cyBjb21wb25lbnRzXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgbGV0IGJyZWFrUGFyYW1zOiBUaW1lQnJlYWtQYXJhbXMgPSBEaXNwbGF5Q29udmVydG9yLkluc3RhbmNlLmdldE5ld1RpbWVCcmVha1BhcmFtcygpO1xyXG4gICAgRGlzcGxheUNvbnZlcnRvci50aW1lX2JyZWFrKGJyZWFrUGFyYW1zLCBkKTtcclxuICAgIGxldCBob3VyOiBudW1iZXIgPSBicmVha1BhcmFtcy5ob3VyO1xyXG4gICAgbGV0IG1pbnV0ZTogbnVtYmVyID0gYnJlYWtQYXJhbXMubWludXRlO1xyXG4gICAgbGV0IHNlY29uZDogbnVtYmVyID0gYnJlYWtQYXJhbXMuc2Vjb25kO1xyXG4gICAgc3dpdGNoICh0eXApIHtcclxuICAgICAgY2FzZSAwOlxyXG4gICAgICAgIGQgPSBob3VyO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIDE6XHJcbiAgICAgICAgZCA9IG1pbnV0ZTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAyOlxyXG4gICAgICAgIGQgPSBzZWNvbmQ7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgZCA9IDA7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgICBzdXBlci5Db25zdHJ1Y3RNYWdpY051bShyZXNWYWwsIGQsIFN0b3JhZ2VBdHRyaWJ1dGUuTlVNRVJJQyk7XHJcbiAgfVxyXG5cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBldmFsX29wX2FkZERhdGVUaW1lKHJlc1ZhbDogRXhwVmFsLCBkYXRlVmFsOiBFeHBWYWwsIHRpbWVWYWw6IEV4cFZhbCwgeWVhcnNWYWw6IEV4cFZhbCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9udGhzVmFsOiBFeHBWYWwsIGRheXNWYWw6IEV4cFZhbCwgaG91cnNWYWw6IEV4cFZhbCwgbWludXRlc1ZhbDogRXhwVmFsLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWNvbmRzVmFsOiBFeHBWYWwpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGxldCB0bXBWYWwgPSBuZXcgRXhwVmFsKCk7XHJcblxyXG4gICAgLy8gdmFsdWVzIGNoZWNrXHJcbiAgICBpZiAoZGF0ZVZhbC5NZ051bVZhbCA9PT0gbnVsbCB8fCB0aW1lVmFsLk1nTnVtVmFsID09PSBudWxsKSB7XHJcbiAgICAgIHJlc1ZhbC5BdHRyID0gU3RvcmFnZUF0dHJpYnV0ZS5CT09MRUFOO1xyXG4gICAgICByZXNWYWwuQm9vbFZhbCA9IGZhbHNlO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgLy8gZ2V0IHRoZSB0aW1lIGZpZWxkXHJcbiAgICBsZXQgZmxkVGltZTogRmllbGQgPSB0aGlzLkdldEZpZWxkT2ZDb250ZXh0VGFzayh0aW1lVmFsLk1nTnVtVmFsLk5VTV8yX0xPTkcoKSk7XHJcbiAgICBzdXBlci5TZXRWYWwodG1wVmFsLCBmbGRUaW1lLmdldFR5cGUoKSwgZmxkVGltZS5nZXRWYWx1ZSh0cnVlKSwgbnVsbCk7XHJcblxyXG4gICAgLy8gQWRkIHRpbWVcclxuICAgIHRoaXMuZXZhbF9vcF9hZGR0aW1lKHJlc1ZhbCwgdG1wVmFsLCBob3Vyc1ZhbCwgbWludXRlc1ZhbCwgc2Vjb25kc1ZhbCk7XHJcblxyXG4gICAgbGV0IHRpbWU6IG51bWJlciA9IHJlc1ZhbC5NZ051bVZhbC5OVU1fMl9MT05HKCk7XHJcbiAgICBsZXQgZGF0ZTogbnVtYmVyID0gTWF0aC5mbG9vcih0aW1lIC8gKDYwICogNjAgKiAyNCkpOyAvLyBpZiBkaWZmIGlzIG1vcmUgdGhlbiAyNCBob3VycywgcmVtb3ZlIHRoZSBmdWxsIGRhdGUgY2hhbmdlc1xyXG4gICAgdGltZSA9IHRpbWUgJSAoNjAgKiA2MCAqIDI0KTsgLy8gSWYgdGltZSBpcyBuZWdhdGl2ZSwgbW92ZSBiYWNrIGEgZGF5IGFuZCBjaGFuZ2UgdGhlIHRpbWVcclxuICAgIGlmICh0aW1lIDwgMCkge1xyXG4gICAgICBkYXRlLS07XHJcbiAgICAgIHRpbWUgPSAoNjAgKiA2MCAqIDI0KSAtICgtdGltZSk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gR2V0IHRoZSBkYXRlIGZpZWxkXHJcbiAgICBsZXQgZmxkRGF0ZTogRmllbGQgPSB0aGlzLkdldEZpZWxkT2ZDb250ZXh0VGFzayhkYXRlVmFsLk1nTnVtVmFsLk5VTV8yX0xPTkcoKSk7XHJcbiAgICBzdXBlci5TZXRWYWwodG1wVmFsLCBmbGREYXRlLmdldFR5cGUoKSwgZmxkRGF0ZS5nZXRWYWx1ZSh0cnVlKSwgbnVsbCk7XHJcblxyXG4gICAgLy8gQWRkIHRoZSBkYXRlXHJcbiAgICB0aGlzLmV2YWxfb3BfYWRkZGF0ZShyZXNWYWwsIHRtcFZhbCwgeWVhcnNWYWwsIG1vbnRoc1ZhbCwgZGF5c1ZhbCk7XHJcblxyXG4gICAgLy8gQWRkIHRoZSByZXN1bHQgZGF0ZSB0byB0aGUgZGF0ZSBkaWZmIGNhbGN1bGF0ZWQgZWFybGllclxyXG4gICAgZGF0ZSArPSByZXNWYWwuTWdOdW1WYWwuTlVNXzJfTE9ORygpO1xyXG5cclxuICAgIC8vIFNldCBuZXcgdGltZSBhbmQgZGF0ZSBpbiBmaWVsZHNcclxuICAgIHRtcFZhbC5NZ051bVZhbC5OVU1fNF9MT05HKHRpbWUpO1xyXG4gICAgYXdhaXQgZmxkVGltZS5zZXRWYWx1ZUFuZFN0YXJ0UmVjb21wdXRlKHRtcFZhbC5Ub01nVmFsKCksIGZhbHNlLCB0cnVlLCBmYWxzZSwgZmFsc2UpO1xyXG4gICAgYXdhaXQgZmxkVGltZS51cGRhdGVEaXNwbGF5KCk7XHJcblxyXG4gICAgdG1wVmFsLk1nTnVtVmFsLk5VTV80X0xPTkcoZGF0ZSk7XHJcbiAgICBhd2FpdCBmbGREYXRlLnNldFZhbHVlQW5kU3RhcnRSZWNvbXB1dGUodG1wVmFsLlRvTWdWYWwoKSwgZmFsc2UsIHRydWUsIGZhbHNlLCBmYWxzZSk7XHJcbiAgICBhd2FpdCBmbGREYXRlLnVwZGF0ZURpc3BsYXkoKTtcclxuXHJcbiAgICByZXNWYWwuQXR0ciA9IFN0b3JhZ2VBdHRyaWJ1dGUuQk9PTEVBTjtcclxuICAgIHJlc1ZhbC5Cb29sVmFsID0gdHJ1ZTtcclxuICB9XHJcblxyXG5cclxuICBwcml2YXRlIGFzeW5jIGV2YWxfb3BfZGlmZHQocmVzVmFsOiBFeHBWYWwsIGRhdGUxdmFsOiBFeHBWYWwsIHRpbWUxdmFsOiBFeHBWYWwsIGRhdGUydmFsOiBFeHBWYWwsIHRpbWUydmFsOiBFeHBWYWwsIGRpZkRhdGVWYWw6IEV4cFZhbCwgZGlmVGltZVZhbDogRXhwVmFsKTogUHJvbWlzZTx2b2lkPiB7XHJcblxyXG4gICAgbGV0IHRtcFZhbDogRXhwVmFsID0gbmV3IEV4cFZhbCgpO1xyXG4gICAgdG1wVmFsLk1nTnVtVmFsID0gbmV3IE5VTV9UWVBFKCk7XHJcbiAgICB0bXBWYWwuQXR0ciA9IFN0b3JhZ2VBdHRyaWJ1dGUuTlVNRVJJQztcclxuICAgIGxldCBleHBWYWw6IEV4cFZhbCA9IHRtcFZhbDtcclxuXHJcbiAgICAvLyB2YWx1ZXMgY2hlY2tcclxuICAgIGlmIChkaWZEYXRlVmFsLk1nTnVtVmFsID09PSBudWxsIHx8IGRpZlRpbWVWYWwuTWdOdW1WYWwgPT09IG51bGwpIHtcclxuICAgICAgcmVzVmFsLkF0dHIgPSBTdG9yYWdlQXR0cmlidXRlLkJPT0xFQU47XHJcbiAgICAgIHJlc1ZhbC5Cb29sVmFsID0gZmFsc2U7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICAvLyBDYWxjdWxhdGUgdGltZSBkaWZzXHJcbiAgICBsZXQgZGlmRGF0ZTogbnVtYmVyID0gZGF0ZTF2YWwuTWdOdW1WYWwuTlVNXzJfTE9ORygpIC0gZGF0ZTJ2YWwuTWdOdW1WYWwuTlVNXzJfTE9ORygpO1xyXG4gICAgbGV0IGRpZlRpbWU6IG51bWJlciA9IHRpbWUxdmFsLk1nTnVtVmFsLk5VTV8yX0xPTkcoKSAtIHRpbWUydmFsLk1nTnVtVmFsLk5VTV8yX0xPTkcoKTtcclxuXHJcbiAgICBpZiAoKGRpZlRpbWUgPCAwKSAmJiAoZGlmVGltZSA+IC04NjQwMCkgJiYgKGRpZkRhdGUgPiAwKSkge1xyXG4gICAgICBkaWZEYXRlLS07XHJcbiAgICAgIGRpZlRpbWUgPSA4NjQwMCAtICgtZGlmVGltZSk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gZ2V0IHRoZSBmaWVsZHNcclxuICAgIGxldCBmbGREYXRlOiBGaWVsZCA9IHRoaXMuR2V0RmllbGRPZkNvbnRleHRUYXNrKGRpZkRhdGVWYWwuTWdOdW1WYWwuTlVNXzJfTE9ORygpKTtcclxuICAgIGxldCBmbGRUaW1lOiBGaWVsZCA9IHRoaXMuR2V0RmllbGRPZkNvbnRleHRUYXNrKGRpZlRpbWVWYWwuTWdOdW1WYWwuTlVNXzJfTE9ORygpKTtcclxuXHJcbiAgICAvLyBTZXQgdGhlIGRpZiB2YWx1ZXNcclxuICAgIHRtcFZhbC5NZ051bVZhbC5OVU1fNF9MT05HKGRpZkRhdGUpO1xyXG4gICAgYXdhaXQgZmxkRGF0ZS5zZXRWYWx1ZUFuZFN0YXJ0UmVjb21wdXRlKHRtcFZhbC5Ub01nVmFsKCksIGZhbHNlLCB0cnVlLCBmYWxzZSwgZmFsc2UpO1xyXG4gICAgYXdhaXQgZmxkRGF0ZS51cGRhdGVEaXNwbGF5KCk7XHJcblxyXG4gICAgdG1wVmFsLk1nTnVtVmFsLk5VTV80X0xPTkcoZGlmVGltZSk7XHJcbiAgICBhd2FpdCBmbGRUaW1lLnNldFZhbHVlQW5kU3RhcnRSZWNvbXB1dGUodG1wVmFsLlRvTWdWYWwoKSwgZmFsc2UsIHRydWUsIGZhbHNlLCBmYWxzZSk7XHJcbiAgICBhd2FpdCBmbGRUaW1lLnVwZGF0ZURpc3BsYXkoKTtcclxuXHJcbiAgICByZXNWYWwuQXR0ciA9IFN0b3JhZ2VBdHRyaWJ1dGUuQk9PTEVBTjtcclxuICAgIHJlc1ZhbC5Cb29sVmFsID0gdHJ1ZTtcclxuICB9XHJcblxyXG5cclxuICBwcml2YXRlIGV2YWxfb3BfbmRvdyhyZXNWYWw6IEV4cFZhbCwgdmFsMTogRXhwVmFsLCBkaXNwbGF5Q29udmVydG9yOiBEaXNwbGF5Q29udmVydG9yKTogdm9pZCB7XHJcbiAgICBpZiAodmFsMS5NZ051bVZhbCA9PT0gbnVsbCkge1xyXG4gICAgICBzdXBlci5TZXROVUxMKHJlc1ZhbCwgU3RvcmFnZUF0dHJpYnV0ZS5OVU1FUklDKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdmFsMS5NZ051bVZhbCA9IHRoaXMubXVsX2FkZCh2YWwxLk1nTnVtVmFsLCAwLCA2KTtcclxuICAgIHRoaXMuZXZhbF9vcF9jZG93KHJlc1ZhbCwgdmFsMS5NZ051bVZhbCwgZGlzcGxheUNvbnZlcnRvcik7XHJcbiAgfVxyXG5cclxuXHJcbiAgcHJpdmF0ZSBldmFsX29wX25tb250aChyZXNWYWw6IEV4cFZhbCwgdmFsMTogRXhwVmFsLCBkaXNwbGF5Q29udmVydG9yOiBEaXNwbGF5Q29udmVydG9yKTogdm9pZCB7XHJcblxyXG4gICAgaWYgKHZhbDEuTWdOdW1WYWwgPT0gbnVsbCkge1xyXG4gICAgICBzdXBlci5TZXROVUxMKHJlc1ZhbCwgU3RvcmFnZUF0dHJpYnV0ZS5OVU1FUklDKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdmFsMS5NZ051bVZhbCA9IHRoaXMubXVsX2FkZCh2YWwxLk1nTnVtVmFsLCAzMSwgLTMwKTtcclxuICAgIHRoaXMuZXZhbF9vcF9jbW9udGgocmVzVmFsLCB2YWwxLk1nTnVtVmFsLCBkaXNwbGF5Q29udmVydG9yKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBNdWx0aXBseSAmIGFkZCB0byBudW1lcmljIHR5cGVcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIHB1YmxpYyBtdWxfYWRkKG51bTogTlVNX1RZUEUsIG11bDogbnVtYmVyLCBhZGQ6IG51bWJlcik6IE5VTV9UWVBFIHtcclxuICAgIGxldCB0bXAgPSBuZXcgTlVNX1RZUEUoKTtcclxuXHJcbiAgICBpZiAobnVtID09PSBudWxsKVxyXG4gICAgICByZXR1cm4gbnVsbDtcclxuXHJcbiAgICBpZiAobXVsICE9PSAwKSB7XHJcbiAgICAgIHRtcC5OVU1fNF9MT05HKG11bCk7XHJcbiAgICAgIG51bSA9IE5VTV9UWVBFLm11bChudW0sIHRtcCk7XHJcbiAgICB9XHJcbiAgICBpZiAoYWRkICE9PSAwKSB7XHJcbiAgICAgIHRtcC5OVU1fNF9MT05HKGFkZCk7XHJcbiAgICAgIG51bSA9IE5VTV9UWVBFLmFkZChudW0sIHRtcCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbnVtO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBldmFsX29wX2Nkb3cocmVzVmFsOiBFeHBWYWwsIHZhbDE6IE5VTV9UWVBFLCBkaXNwbGF5Q29udmVydG9yOiBEaXNwbGF5Q29udmVydG9yKTogdm9pZCB7XHJcbiAgICB0aGlzLmV2YWxfb3BfZGF0ZV9zdHIocmVzVmFsLCB2YWwxLCAnV1dXV1dXV1dXV1QnLCBkaXNwbGF5Q29udmVydG9yKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZXZhbF9vcF9jbW9udGgocmVzVmFsOiBFeHBWYWwsIHZhbDE6IE5VTV9UWVBFLCBkaXNwbGF5Q29udmVydG9yOiBEaXNwbGF5Q29udmVydG9yKTogdm9pZCB7XHJcbiAgICB0aGlzLmV2YWxfb3BfZGF0ZV9zdHIocmVzVmFsLCB2YWwxLCAnTU1NTU1NTU1NTVQnLCBkaXNwbGF5Q29udmVydG9yKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBldmFsX29wX2RhdGVfc3RyKHJlc1ZhbDogRXhwVmFsLCB2YWwxOiBOVU1fVFlQRSwgZm9ybWF0OiBzdHJpbmcsIGRpc3BsYXlDb252ZXJ0b3I6IERpc3BsYXlDb252ZXJ0b3IpOiB2b2lkIHtcclxuICAgIHJlc1ZhbC5BdHRyID0gU3RvcmFnZUF0dHJpYnV0ZS5BTFBIQTtcclxuICAgIGlmICh2YWwxID09PSBudWxsKSB7XHJcbiAgICAgIHN1cGVyLlNldE5VTEwocmVzVmFsLCBTdG9yYWdlQXR0cmlidXRlLkFMUEhBKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgbGV0IGRvdzogbnVtYmVyID0gdmFsMS5OVU1fMl9VTE9ORygpO1xyXG4gICAgcmVzVmFsLlN0clZhbCA9IGRpc3BsYXlDb252ZXJ0b3IudG9fYShyZXNWYWwuU3RyVmFsLCAxMCwgZG93LCBmb3JtYXQsIHRoaXMuRXhwVGFzay5nZXRDb21wSWR4KCkpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8gVE9ETzogSW1wbGVtZW50IE1vbml0b3IgZm9yIGRlbGF5XHJcbiAgcHJpdmF0ZSBldmFsX29wX2RlbGF5KHZhbDE6IEV4cFZhbCk6IHZvaWQge1xyXG4gIH1cclxuXHJcblxyXG4gIHByaXZhdGUgZXZhbF9vcF9pZGxlKHJlc1ZhbDogRXhwVmFsKTogdm9pZCB7XHJcbiAgICBsZXQgbjogbnVtYmVyID0gMDtcclxuICAgIGxldCBpZGxlVGltZTogbnVtYmVyID0gRW52aXJvbm1lbnQuSW5zdGFuY2UuZ2V0SWRsZVRpbWUodGhpcy5FeHBUYXNrLmdldENvbXBJZHgoKSk7XHJcbiAgICBpZiAoaWRsZVRpbWUgPiAwKSB7XHJcbiAgICAgIGxldCBDdXJyVGltZU1pbGxpOiBudW1iZXIgPSBNaXNjLmdldFN5c3RlbU1pbGxpc2Vjb25kcygpO1xyXG4gICAgICAvLyBhY3RfaWRsZSAoKTpcclxuICAgICAgbiA9IE1hdGguZmxvb3IoTWF0aC5mbG9vcigoQ3VyclRpbWVNaWxsaSAtIExhc3RGb2N1c2VkTWFuYWdlci5JbnN0YW5jZS5MYXN0QWN0aW9uVGltZSkgLyAxMDAwKSAvIGlkbGVUaW1lKTtcclxuICAgIH1cclxuICAgIHJlc1ZhbC5NZ051bVZhbCA9IG5ldyBOVU1fVFlQRSgpO1xyXG4gICAgcmVzVmFsLkF0dHIgPSBTdG9yYWdlQXR0cmlidXRlLk5VTUVSSUM7XHJcbiAgICByZXNWYWwuTWdOdW1WYWwuTlVNXzRfTE9ORyhuICogaWRsZVRpbWUgKiAxMCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGV2YWxfb3BfYWRkZGF0ZShyZXNWYWw6IEV4cFZhbCwgdmFsMTogRXhwVmFsLCB2YWwyOiBFeHBWYWwsIHZhbDM6IEV4cFZhbCwgdmFsNDogRXhwVmFsKTogdm9pZCB7XHJcbiAgICBsZXQgdHJpZXM6IG51bWJlcjtcclxuICAgIGlmICh2YWwxLk1nTnVtVmFsID09PSBudWxsIHx8IHZhbDIuTWdOdW1WYWwgPT09IG51bGwgfHwgdmFsMy5NZ051bVZhbCA9PT0gbnVsbCB8fCB2YWw0Lk1nTnVtVmFsID09PSBudWxsKSB7XHJcbiAgICAgIHN1cGVyLlNldE5VTEwocmVzVmFsLCBTdG9yYWdlQXR0cmlidXRlLkRBVEUpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBsZXQgZGF0ZTogbnVtYmVyID0gdmFsMS5NZ051bVZhbC5OVU1fMl9MT05HKCk7XHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gQnJlYWtlIGRhdGEgaW50byBpdHMgY29tcG9uZW50c1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIGxldCBicmVha1BhcmFtczogRGF0ZUJyZWFrUGFyYW1zID0gRGlzcGxheUNvbnZlcnRvci5JbnN0YW5jZS5nZXROZXdEYXRlQnJlYWtQYXJhbXMoKTtcclxuICAgIERpc3BsYXlDb252ZXJ0b3IuSW5zdGFuY2UuZGF0ZV9icmVha19kYXRlbW9kZShicmVha1BhcmFtcywgZGF0ZSwgZmFsc2UsIHRoaXMuRXhwVGFzay5nZXRDb21wSWR4KCkpO1xyXG4gICAgbGV0IHllYXI6IG51bWJlciA9IGJyZWFrUGFyYW1zLnllYXI7XHJcbiAgICBsZXQgbW9udGg6IG51bWJlciA9IGJyZWFrUGFyYW1zLm1vbnRoO1xyXG4gICAgbGV0IGRheTogbnVtYmVyID0gYnJlYWtQYXJhbXMuZGF5O1xyXG5cclxuICAgIC8qIDIwLjcuOTUgLSBIZW4gOiBGaXggYnVnIDE5NzUgKi9cclxuICAgIGlmIChFbnZpcm9ubWVudC5JbnN0YW5jZS5HZXREYXRlTW9kZSh0aGlzLkV4cFRhc2suZ2V0Q29tcElkeCgpKSA9PT0gJ0InKVxyXG4gICAgICB5ZWFyID0gTWF0aC5tYXgoeWVhciAtIFBJQ0ludGVyZmFjZS5EQVRFX0JVRERISVNUX0dBUCwgMCk7XHJcbiAgICB5ZWFyICs9IHZhbDIuTWdOdW1WYWwuTlVNXzJfTE9ORygpO1xyXG4gICAgbW9udGggKz0gdmFsMy5NZ051bVZhbC5OVU1fMl9MT05HKCk7XHJcbiAgICBsZXQgZGF5MTogbnVtYmVyID0gdmFsNC5NZ051bVZhbC5OVU1fMl9MT05HKCk7XHJcbiAgICBsZXQgYWRkX2RheTogbnVtYmVyID0gKGRheSA9PT0gMCAmJiB5ZWFyICE9PSAwICYmIG1vbnRoICE9PSAwICYmIGRheTEgIT09IDApID8gMSA6IDA7XHJcbiAgICBsZXQgbW9udGgxOiBudW1iZXIgPSBtb250aCArIHllYXIgKiAxMjtcclxuICAgIHllYXIgPSBNYXRoLmZsb29yKChtb250aDEgLSAxKSAvIDEyKTtcclxuICAgIG1vbnRoID0gKG1vbnRoMSAtIDEpICUgMTIgKyAxO1xyXG4gICAgZm9yICh0cmllcyA9IDA7IHRyaWVzIDwgNDsgdHJpZXMrKykge1xyXG4gICAgICBkYXRlID0gRGlzcGxheUNvbnZlcnRvci5JbnN0YW5jZS5kYXRlXzRfY2FsZW5kZXIoeWVhciwgbW9udGgsIGRheSArIGFkZF9kYXksIDAsIGZhbHNlKTtcclxuICAgICAgaWYgKGRhdGUgPCAxMDAwMDAwMDAwKVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBkYXktLTtcclxuICAgIH1cclxuXHJcbiAgICAvKiBGTUktMjY0LCA5OS8wMS8wOCwgSlBOSUQ6IE1LUDk5MDEwMDA4ICAgICAgICAgICAgICAgICAgICAqL1xyXG4gICAgLyogZGF0ZV80X2NhbGVuZGVyKCkgcmV0dXJucyAxMDAwMDAwMDAwTCBhcyBhbiBpbnZhbGlkIGRhdGUgKi9cclxuICAgIC8qIGluIHdoaWNoIGNhc2UgZGF0ZSBzaG91bGQgYmUgMDAwMC8wMC8wMC4gICAgICAgICAgICAgICAgICovXHJcbiAgICBpZiAoZGF0ZSA9PT0gMTAwMDAwMDAwMClcclxuICAgICAgZGF0ZSA9IDA7XHJcbiAgICBlbHNlIHtcclxuICAgICAgZGF0ZSArPSBkYXkxIC0gYWRkX2RheTtcclxuICAgICAgZGF0ZSA9IE1hdGgubWF4KGRhdGUsIDApO1xyXG4gICAgfVxyXG4gICAgc3VwZXIuQ29uc3RydWN0TWFnaWNOdW0ocmVzVmFsLCBkYXRlLCBTdG9yYWdlQXR0cmlidXRlLkRBVEUpO1xyXG4gIH1cclxuXHJcblxyXG4gIHByaXZhdGUgZXZhbF9vcF9hZGR0aW1lKHJlc1ZhbDogRXhwVmFsLCB2YWwxOiBFeHBWYWwsIHZhbDI6IEV4cFZhbCwgdmFsMzogRXhwVmFsLCB2YWw0OiBFeHBWYWwpOiB2b2lkIHtcclxuICAgIGlmICh2YWwxLk1nTnVtVmFsID09PSBudWxsIHx8IHZhbDIuTWdOdW1WYWwgPT09IG51bGwgfHwgdmFsMy5NZ051bVZhbCA9PT0gbnVsbCB8fCB2YWw0Lk1nTnVtVmFsID09PSBudWxsKSB7XHJcbiAgICAgIHN1cGVyLlNldE5VTEwocmVzVmFsLCBTdG9yYWdlQXR0cmlidXRlLlRJTUUpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBsZXQgdGltZTogbnVtYmVyID0gdmFsMS5NZ051bVZhbC5OVU1fMl9VTE9ORygpICsgdmFsMi5NZ051bVZhbC5OVU1fMl9MT05HKCkgKiAzNjAwICsgdmFsMy5NZ051bVZhbC5OVU1fMl9MT05HKCkgKiA2MCArIHZhbDQuTWdOdW1WYWwuTlVNXzJfTE9ORygpO1xyXG4gICAgc3VwZXIuQ29uc3RydWN0TWFnaWNOdW0ocmVzVmFsLCB0aW1lLCBTdG9yYWdlQXR0cmlidXRlLlRJTUUpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBldmFsX29wX2JvbShyZXNWYWw6IEV4cFZhbCwgdmFsMTogRXhwVmFsKTogdm9pZCB7XHJcbiAgICBsZXQgYnJlYWtQYXJhbXM6IERhdGVCcmVha1BhcmFtcztcclxuICAgIGlmICh2YWwxLk1nTnVtVmFsID09IG51bGwpIHtcclxuICAgICAgc3VwZXIuU2V0TlVMTChyZXNWYWwsIFN0b3JhZ2VBdHRyaWJ1dGUuREFURSk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGxldCBkYXRlOiBudW1iZXIgPSB2YWwxLk1nTnVtVmFsLk5VTV8yX1VMT05HKCk7XHJcbiAgICBpZiAoZGF0ZSAhPT0gMCkge1xyXG4gICAgICBicmVha1BhcmFtcyA9IERpc3BsYXlDb252ZXJ0b3IuSW5zdGFuY2UuZ2V0TmV3RGF0ZUJyZWFrUGFyYW1zKCk7XHJcbiAgICAgIERpc3BsYXlDb252ZXJ0b3IuSW5zdGFuY2UuZGF0ZV9icmVha19kYXRlbW9kZShicmVha1BhcmFtcywgZGF0ZSwgZmFsc2UsIHRoaXMuRXhwVGFzay5nZXRDb21wSWR4KCkpO1xyXG4gICAgICBsZXQgZGF5OiBudW1iZXIgPSBicmVha1BhcmFtcy5kYXk7XHJcbiAgICAgIGRhdGUgLT0gKGRheSAtIDEpO1xyXG4gICAgfVxyXG4gICAgc3VwZXIuQ29uc3RydWN0TWFnaWNOdW0ocmVzVmFsLCBkYXRlLCBTdG9yYWdlQXR0cmlidXRlLkRBVEUpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBldmFsX29wX2JveShyZXNWYWw6IEV4cFZhbCwgdmFsMTogRXhwVmFsKTogdm9pZCB7XHJcbiAgICBsZXQgYnJlYWtQYXJhbXM6IERhdGVCcmVha1BhcmFtcztcclxuICAgIGlmICh2YWwxLk1nTnVtVmFsID09PSBudWxsKSB7XHJcbiAgICAgIHN1cGVyLlNldE5VTEwocmVzVmFsLCBTdG9yYWdlQXR0cmlidXRlLkRBVEUpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBsZXQgZGF0ZTogbnVtYmVyID0gdmFsMS5NZ051bVZhbC5OVU1fMl9VTE9ORygpO1xyXG4gICAgaWYgKGRhdGUgIT09IDApIHtcclxuICAgICAgYnJlYWtQYXJhbXMgPSBEaXNwbGF5Q29udmVydG9yLkluc3RhbmNlLmdldE5ld0RhdGVCcmVha1BhcmFtcygpO1xyXG4gICAgICBEaXNwbGF5Q29udmVydG9yLkluc3RhbmNlLmRhdGVfYnJlYWtfZGF0ZW1vZGUoYnJlYWtQYXJhbXMsIGRhdGUsIGZhbHNlLCB0aGlzLkV4cFRhc2suZ2V0Q29tcElkeCgpKTtcclxuICAgICAgbGV0IHllYXI6IG51bWJlciA9IGJyZWFrUGFyYW1zLnllYXI7XHJcbiAgICAgIGxldCBkYXk6IG51bWJlciA9IDE7XHJcbiAgICAgIGxldCBtb250aDogbnVtYmVyID0gMTtcclxuICAgICAgaWYgKEVudmlyb25tZW50Lkluc3RhbmNlLkdldERhdGVNb2RlKHRoaXMuRXhwVGFzay5nZXRDb21wSWR4KCkpID09PSAnQicpXHJcbiAgICAgICAgeWVhciA9IE1hdGgubWF4KHllYXIgLSBQSUNJbnRlcmZhY2UuREFURV9CVURESElTVF9HQVAsIDApO1xyXG4gICAgICBkYXRlID0gRGlzcGxheUNvbnZlcnRvci5JbnN0YW5jZS5kYXRlXzRfY2FsZW5kZXIoeWVhciwgbW9udGgsIGRheSwgMCwgZmFsc2UpO1xyXG4gICAgfVxyXG4gICAgc3VwZXIuQ29uc3RydWN0TWFnaWNOdW0ocmVzVmFsLCBkYXRlLCBTdG9yYWdlQXR0cmlidXRlLkRBVEUpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBldmFsX29wX2VvbShyZXNWYWw6IEV4cFZhbCwgdmFsMTogRXhwVmFsKTogdm9pZCB7XHJcbiAgICBsZXQgYnJlYWtQYXJhbXM6IERhdGVCcmVha1BhcmFtcztcclxuICAgIGlmICh2YWwxLk1nTnVtVmFsID09PSBudWxsKSB7XHJcbiAgICAgIHN1cGVyLlNldE5VTEwocmVzVmFsLCBTdG9yYWdlQXR0cmlidXRlLkRBVEUpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBsZXQgZGF0ZTogbnVtYmVyID0gdmFsMS5NZ051bVZhbC5OVU1fMl9VTE9ORygpO1xyXG4gICAgaWYgKGRhdGUgIT09IDApIHtcclxuICAgICAgYnJlYWtQYXJhbXMgPSBEaXNwbGF5Q29udmVydG9yLkluc3RhbmNlLmdldE5ld0RhdGVCcmVha1BhcmFtcygpO1xyXG4gICAgICBEaXNwbGF5Q29udmVydG9yLkluc3RhbmNlLmRhdGVfYnJlYWtfZGF0ZW1vZGUoYnJlYWtQYXJhbXMsIGRhdGUsIGZhbHNlLCB0aGlzLkV4cFRhc2suZ2V0Q29tcElkeCgpKTtcclxuICAgICAgbGV0IHllYXI6IG51bWJlciA9IGJyZWFrUGFyYW1zLnllYXI7XHJcbiAgICAgIGxldCBtb250aDogbnVtYmVyID0gYnJlYWtQYXJhbXMubW9udGg7XHJcbiAgICAgIGxldCBkYXk6IG51bWJlciA9IDMxO1xyXG4gICAgICBpZiAoRW52aXJvbm1lbnQuSW5zdGFuY2UuR2V0RGF0ZU1vZGUodGhpcy5FeHBUYXNrLmdldENvbXBJZHgoKSkgPT09ICdCJylcclxuICAgICAgICB5ZWFyID0gTWF0aC5tYXgoeWVhciAtIFBJQ0ludGVyZmFjZS5EQVRFX0JVRERISVNUX0dBUCwgMCk7XHJcbiAgICAgIGxldCB0cmllczogbnVtYmVyO1xyXG4gICAgICBmb3IgKHRyaWVzID0gMDsgdHJpZXMgPCA0OyB0cmllcysrKSB7XHJcbiAgICAgICAgZGF0ZSA9IERpc3BsYXlDb252ZXJ0b3IuSW5zdGFuY2UuZGF0ZV80X2NhbGVuZGVyKHllYXIsIG1vbnRoLCBkYXksIDAsIGZhbHNlKTtcclxuICAgICAgICBpZiAoZGF0ZSA8IDEwMDAwMDAwMDApXHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBkYXktLTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgc3VwZXIuQ29uc3RydWN0TWFnaWNOdW0ocmVzVmFsLCBkYXRlLCBTdG9yYWdlQXR0cmlidXRlLkRBVEUpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBldmFsX29wX2VveShyZXNWYWw6IEV4cFZhbCwgdmFsMTogRXhwVmFsKTogdm9pZCB7XHJcbiAgICBpZiAodmFsMS5NZ051bVZhbCA9PT0gbnVsbCkge1xyXG4gICAgICBzdXBlci5TZXROVUxMKHJlc1ZhbCwgU3RvcmFnZUF0dHJpYnV0ZS5EQVRFKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgbGV0IGRhdGU6IG51bWJlciA9IHZhbDEuTWdOdW1WYWwuTlVNXzJfVUxPTkcoKTtcclxuICAgIGlmIChkYXRlICE9PSAwKSB7XHJcbiAgICAgIGxldCBicmVha1BhcmFtczogRGF0ZUJyZWFrUGFyYW1zID0gRGlzcGxheUNvbnZlcnRvci5JbnN0YW5jZS5nZXROZXdEYXRlQnJlYWtQYXJhbXMoKTtcclxuICAgICAgRGlzcGxheUNvbnZlcnRvci5JbnN0YW5jZS5kYXRlX2JyZWFrX2RhdGVtb2RlKGJyZWFrUGFyYW1zLCBkYXRlLCBmYWxzZSwgdGhpcy5FeHBUYXNrLmdldENvbXBJZHgoKSk7XHJcbiAgICAgIGxldCB5ZWFyOiBudW1iZXIgPSBicmVha1BhcmFtcy55ZWFyO1xyXG4gICAgICBsZXQgbW9udGg6IG51bWJlciA9IDEyO1xyXG4gICAgICBsZXQgZGF5OiBudW1iZXIgPSAzMTtcclxuICAgICAgaWYgKEVudmlyb25tZW50Lkluc3RhbmNlLkdldERhdGVNb2RlKHRoaXMuRXhwVGFzay5nZXRDb21wSWR4KCkpID09PSAnQicpXHJcbiAgICAgICAgeWVhciA9IE1hdGgubWF4KHllYXIgLSBQSUNJbnRlcmZhY2UuREFURV9CVURESElTVF9HQVAsIDApO1xyXG4gICAgICBkYXRlID0gRGlzcGxheUNvbnZlcnRvci5JbnN0YW5jZS5kYXRlXzRfY2FsZW5kZXIoeWVhciwgbW9udGgsIGRheSwgMCwgZmFsc2UpO1xyXG4gICAgfVxyXG4gICAgc3VwZXIuQ29uc3RydWN0TWFnaWNOdW0ocmVzVmFsLCBkYXRlLCBTdG9yYWdlQXR0cmlidXRlLkRBVEUpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBldmFsX29wX3N0cnRvayhyZXNWYWw6IEV4cFZhbCwgdmFsMTogRXhwVmFsLCB2YWwyOiBFeHBWYWwsIHZhbDM6IEV4cFZhbCk6IHZvaWQge1xyXG4gICAgbGV0IHRtcF9zOiBTdHJpbmdCdWlsZGVyO1xyXG4gICAgbGV0IHRtcF9zdHI6IHN0cmluZztcclxuICAgIGxldCBpZHg6IG51bWJlcjtcclxuICAgIGxldCBkZWxpbTogc3RyaW5nO1xyXG4gICAgbGV0IHJldF9zdHI6IHN0cmluZyA9ICcnO1xyXG4gICAgaWYgKHZhbDEuU3RyVmFsID09PSBudWxsIHx8IHZhbDIuTWdOdW1WYWwgPT09IG51bGwgfHwgdmFsMy5TdHJWYWwgPT09IG51bGwpIHtcclxuICAgICAgc3VwZXIuU2V0TlVMTChyZXNWYWwsIFN0b3JhZ2VBdHRyaWJ1dGUuVU5JQ09ERSk7XHJcbiAgICB9XHJcbiAgICBpZiAoIU5TdHJpbmcuSXNOdWxsT3JFbXB0eSh2YWwxLlN0clZhbCkgJiYgdmFsMy5TdHJWYWwubGVuZ3RoID4gMCkge1xyXG4gICAgICB0bXBfcyA9IG5ldyBTdHJpbmdCdWlsZGVyKHZhbDEuU3RyVmFsLmxlbmd0aCArIDIpO1xyXG4gICAgICBpZHggPSB2YWwyLk1nTnVtVmFsLk5VTV8yX0xPTkcoKTtcclxuICAgICAgaWYgKGlkeCA+IDApIHtcclxuICAgICAgICBkZWxpbSA9IE5TdHJpbmcuVHJpbUVuZCh2YWwzLlN0clZhbCwgdGhpcy5fY2hhcnNUb1RyaW0pO1xyXG4gICAgICAgIHRtcF9zLkFwcGVuZCh2YWwxLlN0clZhbCk7XHJcbiAgICAgICAgaWYgKGRlbGltLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgICAgaWYgKGlkeCA9PT0gMSlcclxuICAgICAgICAgICAgcmV0X3N0ciA9IHRtcF9zLlRvU3RyaW5nKCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRtcF9zdHIgPSB0bXBfcy5Ub1N0cmluZygpO1xyXG4gICAgICAgICAgbGV0IGk6IG51bWJlcjtcclxuICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBpZHg7IGkrKykge1xyXG4gICAgICAgICAgICByZXRfc3RyID0gU3RyVXRpbC5zdHJzdHIodG1wX3N0ciwgZGVsaW0pO1xyXG4gICAgICAgICAgICBpZiAocmV0X3N0ciA9PT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgIGlmIChpID09PSBpZHggLSAxKVxyXG4gICAgICAgICAgICAgICAgcmV0X3N0ciA9IHRtcF9zdHI7XHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0X3N0ciA9IHRtcF9zdHIuc3Vic3RyKDAsIHRtcF9zdHIubGVuZ3RoIC0gcmV0X3N0ci5sZW5ndGgpO1xyXG4gICAgICAgICAgICB0bXBfc3RyID0gdG1wX3N0ci5zdWJzdHIocmV0X3N0ci5sZW5ndGggKyBkZWxpbS5sZW5ndGgpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKHJldF9zdHIgIT09IG51bGwpIHtcclxuICAgICAgcmVzVmFsLkF0dHIgPSBTdG9yYWdlQXR0cmlidXRlLlVOSUNPREU7XHJcbiAgICAgIHJlc1ZhbC5TdHJWYWwgPSByZXRfc3RyO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmVzVmFsLkF0dHIgPSBTdG9yYWdlQXR0cmlidXRlLlVOSUNPREU7XHJcbiAgICAgIHJlc1ZhbC5TdHJWYWwgPSAnJztcclxuICAgIH1cclxuICAgIGlkeCA9IHZhbDIuTWdOdW1WYWwuTlVNXzJfTE9ORygpO1xyXG4gICAgaWYgKCFOU3RyaW5nLklzTnVsbE9yRW1wdHkodmFsMS5TdHJWYWwpICYmIHZhbDMuU3RyVmFsLmxlbmd0aCA9PT0gMCAmJiBpZHggPT09IDEpIHtcclxuICAgICAgcmVzVmFsLkF0dHIgPSBTdG9yYWdlQXR0cmlidXRlLlVOSUNPREU7XHJcbiAgICAgIHJlc1ZhbC5TdHJWYWwgPSB2YWwxLlN0clZhbDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgZXZhbF9vcF9kYnJvdW5kKHJlc1ZhbDogRXhwVmFsLCB2YWwxOiBFeHBWYWwsIHZhbDI6IEV4cFZhbCk6IHZvaWQge1xyXG4gICAgaWYgKHZhbDEuTWdOdW1WYWwgPT09IG51bGwgfHwgdmFsMi5NZ051bVZhbCA9PT0gbnVsbCkge1xyXG4gICAgICBzdXBlci5TZXROVUxMKHJlc1ZhbCwgU3RvcmFnZUF0dHJpYnV0ZS5OVU1FUklDKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgcmVzVmFsLk1nTnVtVmFsID0gbmV3IE5VTV9UWVBFKHZhbDEuTWdOdW1WYWwpO1xyXG4gICAgbGV0IHdob2xlOiBudW1iZXIgPSB2YWwyLk1nTnVtVmFsLk5VTV8yX0xPTkcoKTtcclxuICAgIGlmICh3aG9sZSA8IDApXHJcbiAgICAgIHJlc1ZhbC5NZ051bVZhbC5kYlJvdW5kKC13aG9sZSk7XHJcbiAgICBlbHNlIHJlc1ZhbC5NZ051bVZhbC5yb3VuZCh3aG9sZSk7XHJcbiAgICByZXNWYWwuQXR0ciA9IFN0b3JhZ2VBdHRyaWJ1dGUuTlVNRVJJQztcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZXZhbF9vcF92YXJwaWMocmVzVmFsOiBFeHBWYWwsIHZhbDE6IEV4cFZhbCwgdmFsMjogRXhwVmFsKTogdm9pZCB7XHJcbiAgICBsZXQgZmxkOiBGaWVsZDtcclxuICAgIGxldCBjdHJsOiBNZ0NvbnRyb2w7XHJcblxyXG4gICAgLy8gdmFsaWRhdGlvbiBjaGVja3Mgb24gdGhlIGV4cHJlc3Npb24gYXJndW1lbnRzXHJcbiAgICBpZiAodmFsMi5NZ051bVZhbCA9PT0gbnVsbCkge1xyXG4gICAgICBzdXBlci5TZXROVUxMKHJlc1ZhbCwgU3RvcmFnZUF0dHJpYnV0ZS5VTklDT0RFKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh2YWwxLk1nTnVtVmFsID09PSBudWxsKSB7XHJcbiAgICAgIHN1cGVyLlNldE5VTEwocmVzVmFsLCBTdG9yYWdlQXR0cmlidXRlLlVOSUNPREUpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IG1vZGU6IG51bWJlciA9IHZhbDIuTWdOdW1WYWwuTlVNXzJfTE9ORygpO1xyXG4gICAgbGV0IGl0bTogbnVtYmVyID0gdmFsMS5NZ051bVZhbC5OVU1fMl9MT05HKCk7XHJcbiAgICByZXNWYWwuQXR0ciA9IFN0b3JhZ2VBdHRyaWJ1dGUuVU5JQ09ERTtcclxuXHJcbiAgICB0cnkge1xyXG4gICAgICBmbGQgPSB0aGlzLkdldEZpZWxkT2ZDb250ZXh0VGFzayhpdG0pOyAvLyBpdG0gc3RhcnRzIGZyb20gQSAtPiAxLCBidXQgb3VyIGFycmF5IHN0YXJ0cyBmcm9tIDAgLT4gKGl0bS0xKVxyXG4gICAgfSBjYXRjaCAoZXgpIHtcclxuICAgICAgaWYgKGV4IGluc3RhbmNlb2YgRXhjZXB0aW9uKSB7XHJcbiAgICAgICAgTG9nZ2VyLkluc3RhbmNlLldyaXRlRXhjZXB0aW9uVG9Mb2coZXgpO1xyXG4gICAgICAgIC8vIG1ha2VOdWxsU3RyaW5nXHJcbiAgICAgICAgZmxkID0gbnVsbDtcclxuICAgICAgfSBlbHNlXHJcbiAgICAgICAgdGhyb3cgZXg7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGZsZCA9PT0gbnVsbCkge1xyXG4gICAgICAvLyB2YWxfcHJlX3MgKDApIGluIE1hZ2ljXHJcbiAgICAgIExvZ2dlci5JbnN0YW5jZS5Xcml0ZUV4Y2VwdGlvblRvTG9nV2l0aE1zZygnRXhwcmVzc2lvbkV2YWx1YXRvci5ldmFsX29wX3ZhcnBpYyB0aGVyZSBpcyBubyBjb250cm9sIG51bWJlciAnICsgaXRtKTtcclxuICAgICAgcmVzVmFsLlN0clZhbCA9ICcnO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBpZiAobW9kZSAhPT0gMCkge1xyXG4gICAgICAvLyBnZXRzIHRoZSBjb250cm9sIGFzc29jaWF0ZWQgd2l0aCB0aGUgZmllbGRcclxuICAgICAgY3RybCA9IGZsZC5nZXRDdHJsKCk7XHJcblxyXG4gICAgICBpZiAoY3RybCAhPT0gbnVsbCkge1xyXG4gICAgICAgIC8vIHdlIGRvbnQgbmVlZCB0byBjaGVjayBpZiB0aGUgY29udHJvbCBmb3JtYXQgaXMgYW4gZXhwcmVzc2lvbiBzaW5jZVxyXG4gICAgICAgIC8vIHRoZSBQSUMgb2JqZWN0IGFsd2F5cyBrZWVwIGFuIHVwIHRvIGRhdGUgdmFsdWUgb2YgdGhlIGV4cHJlc3Npb24gcmVzdWx0ZVxyXG4gICAgICAgIHJlc1ZhbC5TdHJWYWwgPSBjdHJsLmdldFBJQygpLmdldEZvcm1hdCgpO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKGZsZC5nZXRUeXBlKCkgIT09IFN0b3JhZ2VBdHRyaWJ1dGUuQkxPQiAmJiBmbGQuZ2V0VHlwZSgpICE9PSBTdG9yYWdlQXR0cmlidXRlLkJMT0JfVkVDVE9SKSB7XHJcbiAgICAgIHJlc1ZhbC5TdHJWYWwgPSBmbGQuZ2V0UGljdHVyZSgpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICByZXNWYWwuU3RyVmFsID0gJyc7XHJcbiAgICByZXR1cm47XHJcbiAgfVxyXG5cclxuXHJcbiAgcHJpdmF0ZSBldmFsX29wX3ZhcmF0dHIocmVzVmFsOiBFeHBWYWwsIHZhbDE6IEV4cFZhbCk6IHZvaWQge1xyXG4gICAgbGV0IGZsZDogRmllbGQ7XHJcbiAgICByZXNWYWwuQXR0ciA9IFN0b3JhZ2VBdHRyaWJ1dGUuQUxQSEE7XHJcbiAgICBpZiAodmFsMS5NZ051bVZhbCA9PT0gbnVsbCkge1xyXG4gICAgICBzdXBlci5TZXROVUxMKHJlc1ZhbCwgU3RvcmFnZUF0dHJpYnV0ZS5BTFBIQSk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGxldCBpdG06IG51bWJlciA9IHZhbDEuTWdOdW1WYWwuTlVNXzJfTE9ORygpO1xyXG4gICAgdHJ5IHtcclxuICAgICAgZmxkID0gdGhpcy5HZXRGaWVsZE9mQ29udGV4dFRhc2soaXRtKTtcclxuICAgIH0gY2F0Y2ggKGV4KSB7XHJcbiAgICAgIGlmIChleCBpbnN0YW5jZW9mIEV4Y2VwdGlvbikge1xyXG4gICAgICAgIExvZ2dlci5JbnN0YW5jZS5Xcml0ZUV4Y2VwdGlvblRvTG9nKGV4KTtcclxuICAgICAgICBmbGQgPSBudWxsO1xyXG4gICAgICB9IGVsc2VcclxuICAgICAgICB0aHJvdyBleDtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoZmxkID09PSBudWxsKSB7XHJcbiAgICAgIExvZ2dlci5JbnN0YW5jZS5Xcml0ZUV4Y2VwdGlvblRvTG9nV2l0aE1zZygnRXhwcmVzc2lvbkV2YWx1YXRvci5ldmFsX29wX3ZhcmF0dHIgdGhlcmUgaXMgbm8gY29udHJvbCBudW1iZXIgJyArIGl0bSk7XHJcbiAgICAgIHJlc1ZhbC5TdHJWYWwgPSAnJztcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgbGV0IGF0dHI6IFN0b3JhZ2VBdHRyaWJ1dGUgPSBmbGQuZ2V0VHlwZSgpO1xyXG4gICAgcmVzVmFsLlN0clZhbCA9ICcnICsgRXhwcmVzc2lvbkV2YWx1YXRvci5HZXRBdHRyaWJ1dGVDaGFyKGF0dHIpO1xyXG4gIH1cclxuXHJcblxyXG4gIHByaXZhdGUgZXhwX251bGxfdmFsX2dldChleHBfYXR0cjogU3RvcmFnZUF0dHJpYnV0ZSwgb3Bjb2RlOiBudW1iZXIsIG51bGxfcGFybTogRXhwVmFsKTogdm9pZCB7XHJcbiAgICBsZXQgcHRyOiBzdHJpbmcgPSAnJztcclxuICAgIGxldCBudW1fdmFsOiBudW1iZXIgPSAwO1xyXG5cclxuICAgIG51bGxfcGFybS5Jc051bGwgPSB0cnVlO1xyXG5cclxuXHJcbiAgICAvLyBJZiB0aGUgVGhlIEF0dHJpYnV0ZSBpcyBVbmtub3duIC0gdXNlIHRoZSBleHBlY3RlZCBBdHRyaWJ1dGU6XHJcbiAgICBpZiAob3Bjb2RlID09PSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9OVUxMKSB7XHJcbiAgICAgIG51bGxfcGFybS5BdHRyID0gZXhwX2F0dHI7XHJcbiAgICAgIGlmIChleHBfYXR0ciA9PT0gU3RvcmFnZUF0dHJpYnV0ZS5BTFBIQSlcclxuICAgICAgICBwdHIgPSAnJztcclxuXHJcbiAgICAgIHN3aXRjaCAoZXhwX2F0dHIpIHtcclxuICAgICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuQUxQSEE6XHJcbiAgICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLkJMT0I6XHJcbiAgICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLkJMT0JfVkVDVE9SOlxyXG4gICAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5NRU1POlxyXG4gICAgICAgICAgb3Bjb2RlID0gRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfTlVMTF9BO1xyXG4gICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5OVU1FUklDOlxyXG4gICAgICAgICAgb3Bjb2RlID0gRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfTlVMTF9OO1xyXG4gICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5CT09MRUFOOlxyXG4gICAgICAgICAgb3Bjb2RlID0gRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfTlVMTF9CO1xyXG4gICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5EQVRFOlxyXG4gICAgICAgICAgb3Bjb2RlID0gRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfTlVMTF9EO1xyXG4gICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5USU1FOlxyXG4gICAgICAgICAgb3Bjb2RlID0gRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfTlVMTF9UO1xyXG4gICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5VTklDT0RFOlxyXG4gICAgICAgICAgb3Bjb2RlID0gRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfTlVMTF9VO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBzd2l0Y2ggKG9wY29kZSkge1xyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX05VTEw6XHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfTlVMTF9BOlxyXG4gICAgICAgIGlmIChleHBfYXR0ciAhPT0gU3RvcmFnZUF0dHJpYnV0ZS5CTE9CICYmXHJcbiAgICAgICAgICBleHBfYXR0ciAhPT0gU3RvcmFnZUF0dHJpYnV0ZS5CTE9CX1ZFQ1RPUilcclxuICAgICAgICAgIG51bGxfcGFybS5BdHRyID0gU3RvcmFnZUF0dHJpYnV0ZS5BTFBIQTtcclxuICAgICAgICBwdHIgPSAnJztcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfTlVMTF9OOlxyXG4gICAgICAgIG51bGxfcGFybS5BdHRyID0gU3RvcmFnZUF0dHJpYnV0ZS5OVU1FUklDO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9OVUxMX0I6XHJcbiAgICAgICAgbnVsbF9wYXJtLkF0dHIgPSBTdG9yYWdlQXR0cmlidXRlLkJPT0xFQU47XHJcbiAgICAgICAgbnVtX3ZhbCA9IDA7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX05VTExfRDpcclxuICAgICAgICBudWxsX3Bhcm0uQXR0ciA9IFN0b3JhZ2VBdHRyaWJ1dGUuREFURTtcclxuICAgICAgICBudW1fdmFsID0gTk51bWJlci5QYXJzZShQSUNJbnRlcmZhY2UuREVGQVVMVF9EQVRFKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfTlVMTF9UOlxyXG4gICAgICAgIG51bGxfcGFybS5BdHRyID0gU3RvcmFnZUF0dHJpYnV0ZS5USU1FO1xyXG4gICAgICAgIG51bV92YWwgPSBOTnVtYmVyLlBhcnNlKFBJQ0ludGVyZmFjZS5ERUZBVUxUX1RJTUUpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9OVUxMX1U6XHJcbiAgICAgICAgaWYgKGV4cF9hdHRyICE9PSBTdG9yYWdlQXR0cmlidXRlLkJMT0IgJiZcclxuICAgICAgICAgIGV4cF9hdHRyICE9PSBTdG9yYWdlQXR0cmlidXRlLkJMT0JfVkVDVE9SKVxyXG4gICAgICAgICAgbnVsbF9wYXJtLkF0dHIgPSBTdG9yYWdlQXR0cmlidXRlLlVOSUNPREU7XHJcbiAgICAgICAgcHRyID0gJyc7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfTlVMTF9POlxyXG4gICAgICAgIG51bGxfcGFybS5BdHRyID0gU3RvcmFnZUF0dHJpYnV0ZS5CTE9CO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG5cclxuICAgIHN3aXRjaCAobnVsbF9wYXJtLkF0dHIpIHtcclxuICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLkFMUEhBOlxyXG4gICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuQkxPQjpcclxuICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLkJMT0JfVkVDVE9SOlxyXG4gICAgICAgIG51bGxfcGFybS5TdHJWYWwgPSBwdHI7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuTlVNRVJJQzpcclxuICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLkRBVEU6XHJcbiAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5USU1FOlxyXG4gICAgICAgIGlmIChvcGNvZGUgPT09IEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX05VTExfTikge1xyXG4gICAgICAgICAgLy8gaW5pdCBOVUxMIE51bWVyaWMgbnVtYmVyXHJcbiAgICAgICAgICBsZXQgbnVtX3ZhbHVlID0gbmV3IEludDhBcnJheShOVU1fVFlQRS5OVU1fU0laRSk7XHJcbiAgICAgICAgICBmb3IgKGxldCBpOiBudW1iZXIgPSAwOyBpIDwgbnVtX3ZhbHVlLmxlbmd0aDsgaSsrKVxyXG4gICAgICAgICAgICBudW1fdmFsdWVbaV0gPSAwO1xyXG4gICAgICAgICAgbnVsbF9wYXJtLk1nTnVtVmFsID0gbmV3IE5VTV9UWVBFKG51bV92YWx1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIFRpbWUgJiBEYXRhXHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgICAgdGhpcy5Db25zdHJ1Y3RNYWdpY051bShudWxsX3Bhcm0sIG51bV92YWwsIG51bGxfcGFybS5BdHRyKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5VTklDT0RFOlxyXG4gICAgICAgIG51bGxfcGFybS5TdHJWYWwgPSBwdHI7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuQk9PTEVBTjpcclxuICAgICAgICBudWxsX3Bhcm0uQm9vbFZhbCA9IGZhbHNlOyAvLyBmYWxzZSBpcyBkZWZhdWx0IDQgYm9vbGVhblxyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgZXhwX2dldF92YXIocmVzVmFsOiBFeHBWYWwsIHZhbDE6IEV4cFZhbCwgaXNfcHJldmlvdXM6IGJvb2xlYW4pOiB2b2lkIDtcclxuICBwcml2YXRlIGV4cF9nZXRfdmFyKHZhbDE6IEV4cFZhbCwgcmVzVmFsOiBFeHBWYWwpOiB2b2lkIDtcclxuICBwcml2YXRlIGV4cF9nZXRfdmFyKHJlc1ZhbE9yVmFsMTogRXhwVmFsLCB2YWwxT3JSZXNWYWw6IEV4cFZhbCwgaXNfcHJldmlvdXM/OiBib29sZWFuKTogdm9pZCB7XHJcbiAgICBpZiAoIWlzTnVsbE9yVW5kZWZpbmVkKGlzX3ByZXZpb3VzKSlcclxuICAgICAgdGhpcy5leHBfZ2V0X3Zhcl8wKHJlc1ZhbE9yVmFsMSwgdmFsMU9yUmVzVmFsLCBpc19wcmV2aW91cyk7XHJcbiAgICBlbHNlXHJcbiAgICAgIHRoaXMuZXhwX2dldF92YXJfMShyZXNWYWxPclZhbDEsIHZhbDFPclJlc1ZhbCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGV4cF9nZXRfdmFyXzAocmVzVmFsOiBFeHBWYWwsIHZhbDE6IEV4cFZhbCwgaXNfcHJldmlvdXM6IGJvb2xlYW4pOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGxldCBmbGQ6IEZpZWxkID0gbnVsbDtcclxuXHJcbiAgICAvLyBldmFsdWF0ZSBmbGQgZnJvbSBtZ051bVZhbFxyXG4gICAgaWYgKHZhbDEuTWdOdW1WYWwgIT09IG51bGwpIHtcclxuICAgICAgbGV0IGl0bTogbnVtYmVyID0gdmFsMS5NZ051bVZhbC5OVU1fMl9MT05HKCk7XHJcbiAgICAgIGZsZCA9IHRoaXMuR2V0RmllbGRPZkNvbnRleHRUYXNrKGl0bSk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gaWYgZmxkIGlzIG51bGwsIHNldCByZXNWYWwgdG8gbnVsbCBhbmQgcmV0dXJuXHJcbiAgICBpZiAoZmxkID09PSBudWxsKSB7XHJcbiAgICAgIHN1cGVyLlNldE5VTEwocmVzVmFsLCBTdG9yYWdlQXR0cmlidXRlLk5PTkUpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgLy8gaWYgZmxkIGlzIG5vdCBleHBvc2VkIHRvIGNsaWVudCB0aGVuIGFsZXJ0IHdpdGggZXJyb3IgbWVzc2FnZSBhbmQgcmV0dXJuIG51bGxcclxuICAgIGlmIChmbGQuSXNFeHBvc2VkVG9DbGllbnQgPT09IGZhbHNlKSB7XHJcbiAgICAgIGxldCBzYjogU3RyaW5nQnVpbGRlciA9IG5ldyBTdHJpbmdCdWlsZGVyKCk7XHJcbiAgICAgIHNiLkFwcGVuZChOU3RyaW5nLkZvcm1hdCgnRXJyb3I6IFZhcmlhYmxlIFxcJ3swfVxcJyBpcyBub3QgZXhwb3NlZCB0byBjbGllbnQuJywgZmxkLmdldFZhck5hbWUoKSkpO1xyXG4gICAgICBhbGVydChzYi5Ub1N0cmluZygpKTtcclxuICAgICAgcmVzVmFsLklzTnVsbCA9IHRydWU7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoaXNfcHJldmlvdXMpXHJcbiAgICAvLyBzZXQgdGhlIGZsYWcgdGhhdCB3aWxsIGJlIHVzZWQgYnkgZmxkLmdldFZhbHVlXHJcbiAgICAgICg8VGFza0Jhc2U+ZmxkLmdldFRhc2soKSkuc2V0RXZhbE9sZFZhbHVlcyh0cnVlKTtcclxuXHJcbiAgICAvLyBmaXJzdCBnZXQgdGhlIHZhbHVlIG9mIHRoZSBmaWVsZCBhbmQgc2V0IGl0IHRvIHRoZSByZXN1bHQuXHJcbiAgICBzdXBlci5TZXRWYWwocmVzVmFsLCBmbGQuZ2V0VHlwZSgpLCBmbGQuZ2V0VmFsdWUodHJ1ZSksIG51bGwpO1xyXG5cclxuICAgIC8vIG5vdyBmb3IgdGhlIG51bGwgaW5kaWNhdGlvbi5cclxuICAgIGlmIChpc19wcmV2aW91cykge1xyXG4gICAgICAvLyBmb3IgcHJldmlvdXMsIHRoZSBudWxsIGluZGljYXRpb24gaXMgbm90IG9uIHRoZSBmbGQsIHdlIHNob3VsZCBnZXQgaXQgZnJvbSB0aGUgb3JpZ2luYWwgcmVjb3JkLlxyXG4gICAgICBpZiAoZmxkLmlzT3JpZ2luYWxWYWx1ZU51bGwoKSlcclxuICAgICAgLy8gdGhlIG9yaWdpbmFsIHZhbHVlIG9mIHRoZSByZWNvcmQgaXMgTlVMTFxyXG4gICAgICAgIHN1cGVyLlNldE5VTEwocmVzVmFsLCBTdG9yYWdlQXR0cmlidXRlLk5PTkUpO1xyXG4gICAgfVxyXG4gICAgLy8gZm9yIGN1cnJlbnQgdmFsdWUsIHRoZSBudWxsIGluZGljYXRpb24gaXMgYWxyZWFkeSBvbiB0aGUgZmxkLlxyXG5cclxuICAgIGVsc2VcclxuICAgICAgcmVzVmFsLklzTnVsbCA9IGZsZC5pc051bGwoKTtcclxuXHJcbiAgICBpZiAoaXNfcHJldmlvdXMpXHJcbiAgICAvLyByZXNldCB0aGUgZmxhZy5cclxuICAgICAgKDxUYXNrQmFzZT5mbGQuZ2V0VGFzaygpKS5zZXRFdmFsT2xkVmFsdWVzKGZhbHNlKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy9cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cInJlc1ZhbFwiPjwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwidmFsMVwiPjwvcGFyYW0+XHJcbiAgcHJpdmF0ZSBldmFsX29wX3Zhcm1vZChyZXNWYWw6IEV4cFZhbCwgdmFsMTogRXhwVmFsKTogdm9pZCB7XHJcbiAgICBpZiAodmFsMS5NZ051bVZhbCA9PT0gbnVsbCkge1xyXG4gICAgICBzdXBlci5TZXROVUxMKHJlc1ZhbCwgU3RvcmFnZUF0dHJpYnV0ZS5CT09MRUFOKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgbGV0IGl0bTogbnVtYmVyID0gdmFsMS5NZ051bVZhbC5OVU1fMl9MT05HKCk7XHJcbiAgICBsZXQgZmxkOiBGaWVsZCA9IHRoaXMuR2V0RmllbGRPZkNvbnRleHRUYXNrKGl0bSk7XHJcblxyXG4gICAgcmVzVmFsLkF0dHIgPSBTdG9yYWdlQXR0cmlidXRlLkJPT0xFQU47XHJcbiAgICByZXNWYWwuQm9vbFZhbCA9IGZhbHNlO1xyXG5cclxuICAgIC8vIFFDUiA3NTIyNzAgaWYgdGhlIHRoZSBhcmd1bWVudHMgZG9lcyBub3QgcmVwcmVzZW50IGEgdmFsaWQgZmllbGQgcmV0dXJuIGZhbHNlXHJcbiAgICBpZiAoZmxkICE9PSBudWxsKSB7XHJcbiAgICAgIGxldCBpZHg6IG51bWJlciA9IGZsZC5nZXRJZCgpO1xyXG4gICAgICBsZXQgZHY6IERhdGFWaWV3ID0gPERhdGFWaWV3Pig8VGFza0Jhc2U+ZmxkLmdldFRhc2soKSkuRGF0YVZpZXc7XHJcbiAgICAgIGxldCByZWM6IFJlY29yZCA9IGR2LmdldEN1cnJSZWMoKTtcclxuICAgICAgcmVzVmFsLkJvb2xWYWwgPSAhcmVjLmZsZFZhbHNFcXVhbChkdi5nZXRPcmlnaW5hbFJlYygpLCBpZHgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBldmFsX29wX3ZhcmlucChyZXNWYWw6IEV4cFZhbCwgdmFsMTogRXhwVmFsKTogdm9pZCB7XHJcbiAgICBsZXQgaTogbnVtYmVyID0gMDtcclxuXHJcbiAgICBpZiAodmFsMS5NZ051bVZhbCA9PT0gbnVsbCkge1xyXG4gICAgICBzdXBlci5TZXROVUxMKHJlc1ZhbCwgU3RvcmFnZUF0dHJpYnV0ZS5OVU1FUklDKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBleHBrZXJuX3BhcmVudDogbnVtYmVyID0gdmFsMS5NZ051bVZhbC5OVU1fMl9MT05HKCk7XHJcbiAgICBpZiAoKGV4cGtlcm5fcGFyZW50ID49IDAgJiYgZXhwa2Vybl9wYXJlbnQgPCAoKDxUYXNrQmFzZT50aGlzLkV4cFRhc2spLmdldFRhc2tEZXB0aChmYWxzZSkpKSB8fCBleHBrZXJuX3BhcmVudCA9PT0gRXhwcmVzc2lvbkV2YWx1YXRvci5UUklHR0VSX1RBU0spIHtcclxuICAgICAgbGV0IHRzazogVGFza0Jhc2UgPSA8VGFza0Jhc2U+IHN1cGVyLkdldENvbnRleHRUYXNrKGV4cGtlcm5fcGFyZW50KTtcclxuICAgICAgaWYgKHRzayAhPT0gbnVsbClcclxuICAgICAgICBpID0gdHNrLmN0bF9pdG1fNF9wYXJlbnRfdmVlKDAsIHRzay5nZXRDdXJyRmllbGRJZHgoKSArIDEpO1xyXG4gICAgfVxyXG4gICAgc3VwZXIuQ29uc3RydWN0TWFnaWNOdW0ocmVzVmFsLCBpLCBTdG9yYWdlQXR0cmlidXRlLk5VTUVSSUMpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBldmFsX29wX3Zhcm5hbWUocmVzVmFsOiBFeHBWYWwsIHZhbDE6IEV4cFZhbCk6IHZvaWQge1xyXG4gICAgaWYgKHZhbDEuTWdOdW1WYWwgPT09IG51bGwpIHtcclxuICAgICAgc3VwZXIuU2V0TlVMTChyZXNWYWwsIFN0b3JhZ2VBdHRyaWJ1dGUuQUxQSEEpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IGl0bTogbnVtYmVyID0gdmFsMS5NZ051bVZhbC5OVU1fMl9MT05HKCk7XHJcbiAgICBsZXQgZmxkOiBGaWVsZCA9IHRoaXMuR2V0RmllbGRPZkNvbnRleHRUYXNrKGl0bSk7XHJcbiAgICBsZXQgYnVmZmVyOiBzdHJpbmcgPSAoZmxkICE9PSBudWxsKSA/IGZsZC5nZXROYW1lKCkgOiAnJztcclxuICAgIHJlc1ZhbC5TdHJWYWwgPSBidWZmZXI7XHJcbiAgICByZXNWYWwuQXR0ciA9IFN0b3JhZ2VBdHRyaWJ1dGUuQUxQSEE7XHJcbiAgfVxyXG5cclxuXHJcbiAgcHJpdmF0ZSBldmFsX29wX1ZhckRpc3BsYXlOYW1lKHJlc1ZhbDogRXhwVmFsLCB2YWwxOiBFeHBWYWwpOiB2b2lkIHtcclxuICAgIHJlc1ZhbC5BdHRyID0gU3RvcmFnZUF0dHJpYnV0ZS5VTklDT0RFO1xyXG4gICAgcmVzVmFsLlN0clZhbCA9ICcnO1xyXG5cclxuICAgIGlmICh2YWwxLk1nTnVtVmFsICE9PSBudWxsKSB7XHJcbiAgICAgIGxldCBpdG06IG51bWJlciA9IHZhbDEuTWdOdW1WYWwuTlVNXzJfTE9ORygpO1xyXG4gICAgICBsZXQgZmxkOiBGaWVsZCA9IHRoaXMuR2V0RmllbGRPZkNvbnRleHRUYXNrKGl0bSk7XHJcblxyXG4gICAgICBpZiAoZmxkICE9PSBudWxsKVxyXG4gICAgICAgIHJlc1ZhbC5TdHJWYWwgPSBmbGQuVmFyRGlzcGxheU5hbWU7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vIFJldHVybiB0aGUgY29udHJvbCBJRCBvZiB0aGUgY29udHJvbCB0byB3aGljaCBpdGVtIChEYXRhIHByb3BlcnR5IGxpdGVyYWwpIGlzIGF0dGFjaGVkLlxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwicmVzVmFsXCI+PC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJ2YWwxXCI+PC9wYXJhbT5cclxuICBwcml2YXRlIGV2YWxfb3BfVmFyQ29udHJvbElEKHJlc1ZhbDogRXhwVmFsLCB2YWwxOiBFeHBWYWwpOiB2b2lkIHtcclxuICAgIGxldCByZXQ6IG51bWJlciA9IDA7XHJcblxyXG4gICAgaWYgKHZhbDEuTWdOdW1WYWwgIT09IG51bGwpIHtcclxuICAgICAgbGV0IGl0bTogbnVtYmVyID0gdmFsMS5NZ051bVZhbC5OVU1fMl9MT05HKCk7XHJcblxyXG4gICAgICAvLyBpZiBpdG0gaXMgdHJpZ2dlciB0YXNrLCBjYWxjdWxhdGUgdGhlIGl0ZW0gZnJvbSBmaWVsZC5cclxuICAgICAgaWYgKGl0bSA9PT0gRXhwcmVzc2lvbkV2YWx1YXRvci5UUklHR0VSX1RBU0spXHJcbiAgICAgICAgaXRtID0gKCg8VGFza0Jhc2U+IHRoaXMuRXhwVGFzay5HZXRDb250ZXh0VGFzaygpKS5jdGxfaXRtXzRfcGFyZW50X3ZlZSgwLCAoPFRhc2tCYXNlPiB0aGlzLkV4cFRhc2suR2V0Q29udGV4dFRhc2soKSkuZ2V0Q3VyckZpZWxkSWR4KCkgKyAxKSk7XHJcblxyXG4gICAgICByZXQgPSAoPFRhc2tCYXNlPiB0aGlzLkV4cFRhc2suR2V0Q29udGV4dFRhc2soKSkuR2V0Q29udHJvbElERnJvbVZhckl0ZW0oaXRtIC0gMSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmVzVmFsLkF0dHIgPSBTdG9yYWdlQXR0cmlidXRlLk5VTUVSSUM7XHJcbiAgICByZXNWYWwuTWdOdW1WYWwgPSBuZXcgTlVNX1RZUEUoKTtcclxuICAgIHJlc1ZhbC5NZ051bVZhbC5OVU1fNF9MT05HKHJldCk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vIFJldHVybiB0aGUgY2hvaWNlIGNvbnRyb2wncyBpdGVtcyBsaXN0IGFjY29yZGluZyB0byBjb250cm9sIElELlxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwicmVzVmFsXCI+PC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJ2YWwxXCI+PC9wYXJhbT5cclxuICBwcml2YXRlIGFzeW5jIGV2YWxfb3BfQ29udHJvbEl0ZW1zTGlzdChyZXNWYWw6IEV4cFZhbCwgdmFsMTogRXhwVmFsKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICByZXNWYWwuQXR0ciA9IFN0b3JhZ2VBdHRyaWJ1dGUuVU5JQ09ERTtcclxuICAgIHJlc1ZhbC5TdHJWYWwgPSAnJztcclxuXHJcbiAgICBpZiAodmFsMS5NZ051bVZhbCAhPT0gbnVsbCkge1xyXG4gICAgICBsZXQgY29udHJvbElEOiBudW1iZXIgPSB2YWwxLk1nTnVtVmFsLk5VTV8yX0xPTkcoKTtcclxuICAgICAgbGV0IHBhcmVudDogbnVtYmVyID0gMDtcclxuXHJcbiAgICAgIGxldCByZWZQYXJlbnQ6IFJlZlBhcmFtPG51bWJlcj4gPSBuZXcgUmVmUGFyYW0ocGFyZW50KTtcclxuICAgICAgbGV0IG1nQ29udHJvbDogTWdDb250cm9sID0gKCg8VGFza0Jhc2U+IHRoaXMuRXhwVGFzay5HZXRDb250ZXh0VGFzaygpKS5HZXRDb250cm9sRnJvbUNvbnRyb2xJRChjb250cm9sSUQgLSAxLCByZWZQYXJlbnQpKTtcclxuICAgICAgcGFyZW50ID0gcmVmUGFyZW50LnZhbHVlO1xyXG5cclxuICAgICAgaWYgKG1nQ29udHJvbCAhPT0gbnVsbCAmJiBtZ0NvbnRyb2wuaXNDaG9pY2VDb250cm9sKCkpXHJcbiAgICAgICAgcmVzVmFsLlN0clZhbCA9IGF3YWl0IG1nQ29udHJvbC5nZXRGb3JtKCkuR2V0Q2hvaWNlQ29udHJvbEl0ZW1MaXN0KG1nQ29udHJvbCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vIFJldHVybiB0aGUgY2hvaWNlIGNvbnRyb2wncyBkaXNwbGF5IGxpc3QgYWNjb3JkaW5nIHRvIGNvbnRyb2wgSUQuXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJyZXNWYWxcIj48L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cInZhbDFcIj48L3BhcmFtPlxyXG4gIHByaXZhdGUgYXN5bmMgZXZhbF9vcF9Db250cm9sRGlzcGxheUxpc3QocmVzVmFsOiBFeHBWYWwsIHZhbDE6IEV4cFZhbCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgcmVzVmFsLkF0dHIgPSBTdG9yYWdlQXR0cmlidXRlLlVOSUNPREU7XHJcbiAgICByZXNWYWwuU3RyVmFsID0gJyc7XHJcblxyXG4gICAgaWYgKHZhbDEuTWdOdW1WYWwgIT09IG51bGwpIHtcclxuICAgICAgbGV0IGNvbnRyb2xJRDogbnVtYmVyID0gdmFsMS5NZ051bVZhbC5OVU1fMl9MT05HKCk7XHJcbiAgICAgIGxldCBwYXJlbnQ6IG51bWJlciA9IDA7XHJcblxyXG4gICAgICBsZXQgcmVmUGFyZW50OiBSZWZQYXJhbTxudW1iZXI+ID0gbmV3IFJlZlBhcmFtKHBhcmVudCk7XHJcbiAgICAgIGxldCBtZ0NvbnRyb2w6IE1nQ29udHJvbCA9ICg8VGFza0Jhc2U+IHRoaXMuRXhwVGFzay5HZXRDb250ZXh0VGFzaygpKS5HZXRDb250cm9sRnJvbUNvbnRyb2xJRChjb250cm9sSUQgLSAxLCByZWZQYXJlbnQpO1xyXG4gICAgICBwYXJlbnQgPSByZWZQYXJlbnQudmFsdWU7XHJcblxyXG4gICAgICBpZiAobWdDb250cm9sICE9PSBudWxsICYmIG1nQ29udHJvbC5pc0Nob2ljZUNvbnRyb2woKSlcclxuICAgICAgICByZXNWYWwuU3RyVmFsID0gYXdhaXQgbWdDb250cm9sLmdldEZvcm0oKS5HZXRDaG9pY2VDb250cm9sRGlzcGxheUxpc3QobWdDb250cm9sKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgZXZhbF9vcF92aWV3bW9kKHJlc1ZhbDogRXhwVmFsLCB2YWwxOiBFeHBWYWwpOiB2b2lkIHtcclxuICAgIGlmICh2YWwxLk1nTnVtVmFsID09PSBudWxsKSB7XHJcbiAgICAgIHN1cGVyLlNldE5VTEwocmVzVmFsLCBTdG9yYWdlQXR0cmlidXRlLkJPT0xFQU4pO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IHBhcmVudDogbnVtYmVyID0gdmFsMS5NZ051bVZhbC5OVU1fMl9MT05HKCk7XHJcbiAgICBpZiAoKHBhcmVudCA+PSAwICYmIHBhcmVudCA8ICgoPFRhc2tCYXNlPnRoaXMuRXhwVGFzaykuZ2V0VGFza0RlcHRoKGZhbHNlKSkpIHx8IHBhcmVudCA9PT0gRXhwcmVzc2lvbkV2YWx1YXRvci5UUklHR0VSX1RBU0spIHtcclxuICAgICAgbGV0IHRzazogVGFza0Jhc2UgPSA8VGFza0Jhc2U+IHN1cGVyLkdldENvbnRleHRUYXNrKHBhcmVudCk7XHJcbiAgICAgIGlmICghdHNrLmlzTWFpblByb2coKSkge1xyXG4gICAgICAgIHJlc1ZhbC5Cb29sVmFsID0gKCg8RGF0YVZpZXc+dHNrLkRhdGFWaWV3KS5nZXRDdXJyUmVjKCkpLk1vZGlmaWVkO1xyXG4gICAgICAgIC8vIHJlY29yZCBtaWdodCBiZSBtb2RpZmllZCBldmVuIGlmIHRoZSBmbGFnIGlzIGZhbHNlIChsaWtlIHdoZW4gdGhlcmUgaXMgYW4gdXBkYXRlIHdpdGggZm9yY2UgdXAgPSBub1xyXG4gICAgICAgIC8vIGluIHRoZSBzZXJ2ZXIgdGhlIGNoZWNrIGlzIGNvbXBhcmluZyBhbGwgdGhlIGZpZWxkcyBpbiB0aGUgdmlldy5cclxuICAgICAgICAvLyBIZXJlLCBpZiB0aGUgbW9kaWZpZWQgaXMgZmFsc2UsIHdlIHdpbGwgY29tcGFyZSB0aGUgY3VycmVudCByZWMgdG8gdGhlIG9yaWdpbmFsIGN1cnJlbnQgcmVjLlxyXG4gICAgICAgIGlmICghcmVzVmFsLkJvb2xWYWwpIHtcclxuICAgICAgICAgIGxldCBjdXJyUmVjOiBSZWNvcmQgPSAoPERhdGFWaWV3PnRzay5EYXRhVmlldykuZ2V0Q3VyclJlYygpO1xyXG4gICAgICAgICAgbGV0IG9yaWdpbmFsUmVjOiBSZWNvcmQgPSAoPERhdGFWaWV3PnRzay5EYXRhVmlldykuZ2V0T3JpZ2luYWxSZWMoKTtcclxuICAgICAgICAgIC8vIGNvbXBhcmUgZmllbGRzIGJldHdlZW4gY3VycmVudCByZWNvcmQgYW5kIG9yaWdpbmFsIHJlY29yZC4gY29tcGFyZSBvbmx5IGZpZWxkcyB0aGF0IGFyZSBwYXJ0IG9mIGRhdGEgdmlldy5cclxuICAgICAgICAgIHJlc1ZhbC5Cb29sVmFsID0gIWN1cnJSZWMuaXNTYW1lUmVjRGF0YShvcmlnaW5hbFJlYywgdHJ1ZSwgdHJ1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJlc1ZhbC5Cb29sVmFsID0gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZVxyXG4gICAgICByZXNWYWwuQm9vbFZhbCA9IGZhbHNlO1xyXG5cclxuICAgIHJlc1ZhbC5BdHRyID0gU3RvcmFnZUF0dHJpYnV0ZS5CT09MRUFOO1xyXG5cclxuICB9XHJcblxyXG4gIHByaXZhdGUgZXZhbF9vcF9sZXZlbChyZXNWYWw6IEV4cFZhbCwgdmFsMTogRXhwVmFsKTogdm9pZCB7XHJcbiAgICBsZXQgb3V0c3RyOiBzdHJpbmcgPSAnJztcclxuXHJcbiAgICBpZiAodmFsMS5NZ051bVZhbCA9PT0gbnVsbCkge1xyXG4gICAgICBzdXBlci5TZXROVUxMKHJlc1ZhbCwgU3RvcmFnZUF0dHJpYnV0ZS5BTFBIQSk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGxldCBwYXJlbnQ6IG51bWJlciA9IHZhbDEuTWdOdW1WYWwuTlVNXzJfTE9ORygpO1xyXG4gICAgaWYgKChwYXJlbnQgPj0gMCAmJiBwYXJlbnQgPCAoKDxUYXNrQmFzZT50aGlzLkV4cFRhc2spLmdldFRhc2tEZXB0aChmYWxzZSkpKSB8fCBwYXJlbnQgPT09IEV4cHJlc3Npb25FdmFsdWF0b3IuVFJJR0dFUl9UQVNLKSB7XHJcbiAgICAgIGxldCB0c2s6IFRhc2tCYXNlID0gPFRhc2tCYXNlPiBzdXBlci5HZXRDb250ZXh0VGFzayhwYXJlbnQpO1xyXG4gICAgICBvdXRzdHIgPSB0c2suZ2V0QnJrTGV2ZWwoKTtcclxuXHJcbiAgICAgIC8qXHJcbiAgICAgICAqIENoZWNrIHRoZSBsZXZlbCBvZiB0aGUgZ2VuZXJhdGlvbiB0YXNrLlxyXG4gICAgICAgKiBBLiBJZiBpdCBpcyBub3QgUk0sIHJldHVybiB0aGUgaGFuZGxlciB0ZXh0LlxyXG4gICAgICAgKiBCLiBJZiBpdCBpcyBSTSwgdGhlbiB3ZSBoYXZlIDMgZGlmZmVyZW50IHNpdHVhdGlvbnM6XHJcbiAgICAgICAqIDEuIElmIHRoZSBnZW5lcmF0aW9uIHRhc2sgaXMgTWFpbiBQcm9ncmFtLCByZXR1cm4gXCJNUFwiLlxyXG4gICAgICAgKiAyLiBJZiB0aGUgZ2VuZXJhdGlvbiB0YXNrIGlzIGEgdGFzayB3aG9zZSBpbW1lZGlhdGUgY2FsbGVkIHRhc2sgKGluIHRoZSBydW50aW1lIHRhc2sgdHJlZSkgaXMgYSBTdWJGb3JtLCByZXR1cm4gXCJTVUJGT1JNXCIuXHJcbiAgICAgICAqIDMuIEluIGFueSBvdGhlciBjYXNlLCByZXR1cm4gdGhlIGhhbmRsZXIgdGV4dC5cclxuICAgICAgICovXHJcbiAgICAgIGlmIChwYXJlbnQgIT09IEV4cHJlc3Npb25FdmFsdWF0b3IuVFJJR0dFUl9UQVNLICYmIHRzayAhPT0gdGhpcy5FeHBUYXNrKSB7XHJcbiAgICAgICAgaWYgKG91dHN0ci50b1VwcGVyQ2FzZSgpID09PSBDb25zdEludGVyZmFjZS5CUktfTEVWRUxfUkVDX01BSU4udG9VcHBlckNhc2UoKSkge1xyXG4gICAgICAgICAgaWYgKHRzay5pc01haW5Qcm9nKCkpIHtcclxuICAgICAgICAgICAgb3V0c3RyID0gQ29uc3RJbnRlcmZhY2UuQlJLX0xFVkVMX01BSU5fUFJPRztcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGxldCB0c2tUcmVlOiBUYXNrQmFzZVtdID0gbmV3IEFycmF5PFRhc2tCYXNlPigoKDxUYXNrQmFzZT50aGlzLkV4cFRhc2spLmdldFRhc2tEZXB0aChmYWxzZSkpKTtcclxuICAgICAgICAgICAgZm9yIChsZXQgX2FpOiBudW1iZXIgPSAwOyBfYWkgPCB0c2tUcmVlLmxlbmd0aDsgKytfYWkpXHJcbiAgICAgICAgICAgICAgdHNrVHJlZVtfYWldID0gbnVsbDtcclxuICAgICAgICAgICAgKDxUYXNrQmFzZT50aGlzLkV4cFRhc2spLnBhdGhUb1Jvb3QodHNrVHJlZSwgZmFsc2UpO1xyXG5cclxuICAgICAgICAgICAgaWYgKHBhcmVudCA+IDAgJiYgdHNrVHJlZVtwYXJlbnQgLSAxXS5Jc1N1YkZvcm0pXHJcbiAgICAgICAgICAgICAgb3V0c3RyID0gQ29uc3RJbnRlcmZhY2UuQlJLX0xFVkVMX1NVQkZPUk07XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXNWYWwuU3RyVmFsID0gb3V0c3RyO1xyXG4gICAgcmVzVmFsLkF0dHIgPSBTdG9yYWdlQXR0cmlidXRlLkFMUEhBO1xyXG4gIH1cclxuXHJcblxyXG4gIC8vIGdldCB0aGUgdGFzaydzIGNvdW50ZXIgKGJ5IHRhc2sgZ2VuZXJhdGlvbikuXHJcbiAgcHJpdmF0ZSBldmFsX29wX2NvdW50ZXIocmVzVmFsOiBFeHBWYWwsIHZhbDE6IEV4cFZhbCk6IHZvaWQge1xyXG4gICAgbGV0IG51bTogbnVtYmVyID0gMDtcclxuICAgIGxldCBwYXJlbnQ6IG51bWJlciA9IHZhbDEuTWdOdW1WYWwuTlVNXzJfTE9ORygpO1xyXG4gICAgaWYgKChwYXJlbnQgPj0gMCAmJiBwYXJlbnQgPCAoPFRhc2tCYXNlPnRoaXMuRXhwVGFzaykuZ2V0VGFza0RlcHRoKGZhbHNlKSkgfHwgcGFyZW50ID09PSBFeHByZXNzaW9uRXZhbHVhdG9yLlRSSUdHRVJfVEFTSykge1xyXG4gICAgICBsZXQgdGFzazogVGFza0Jhc2UgPSA8VGFza0Jhc2U+IHN1cGVyLkdldENvbnRleHRUYXNrKHBhcmVudCk7XHJcbiAgICAgIG51bSA9IDxudW1iZXI+KCh0YXNrID09PSBudWxsKSA/IDAgOiB0YXNrLmdldENvdW50ZXIoKSk7XHJcbiAgICB9XHJcbiAgICByZXNWYWwuQXR0ciA9IFN0b3JhZ2VBdHRyaWJ1dGUuTlVNRVJJQztcclxuICAgIHJlc1ZhbC5NZ051bVZhbCA9IG5ldyBOVU1fVFlQRSgpO1xyXG4gICAgcmVzVmFsLk1nTnVtVmFsLk5VTV80X0xPTkcoPG51bWJlcj5udW0pO1xyXG4gIH1cclxuXHJcbiAgZXZhbF9vcF9lbXB0eURhdGF2aWV3KHJlc1ZhbDogRXhwVmFsLCB2YWwxOiBFeHBWYWwpOiB2b2lkIHtcclxuICAgIGxldCByZXQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIGxldCBwYXJlbnQ6IG51bWJlciA9IHZhbDEuTWdOdW1WYWwuTlVNXzJfTE9ORygpO1xyXG4gICAgaWYgKChwYXJlbnQgPj0gMCAmJiBwYXJlbnQgPCAoPFRhc2tCYXNlPnRoaXMuRXhwVGFzaykuZ2V0VGFza0RlcHRoKGZhbHNlKSkgfHwgcGFyZW50ID09PSBFeHByZXNzaW9uRXZhbHVhdG9yLlRSSUdHRVJfVEFTSykge1xyXG4gICAgICBsZXQgdHNrOiBUYXNrQmFzZSA9IDxUYXNrQmFzZT4gc3VwZXIuR2V0Q29udGV4dFRhc2socGFyZW50KTtcclxuICAgICAgaWYgKHRzayAhPT0gbnVsbCAmJiB0c2suRGF0YVZpZXcuaXNFbXB0eURhdGF2aWV3KCkpXHJcbiAgICAgICAgcmV0ID0gdHJ1ZTtcclxuICAgIH1cclxuICAgIHJlc1ZhbC5BdHRyID0gU3RvcmFnZUF0dHJpYnV0ZS5CT09MRUFOO1xyXG4gICAgcmVzVmFsLkJvb2xWYWwgPSByZXQ7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJyZXNWYWxcIj48L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cInZhbDFcIj48L3BhcmFtPlxyXG4gIHByaXZhdGUgZXZhbF9vcF9tYWlubGV2ZWwocmVzVmFsOiBFeHBWYWwsIHZhbDE6IEV4cFZhbCk6IHZvaWQge1xyXG4gICAgbGV0IG91dHN0cjogc3RyaW5nID0gJyc7XHJcblxyXG4gICAgaWYgKHZhbDEuTWdOdW1WYWwgPT09IG51bGwpIHtcclxuICAgICAgc3VwZXIuU2V0TlVMTChyZXNWYWwsIFN0b3JhZ2VBdHRyaWJ1dGUuQUxQSEEpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IHBhcmVudDogbnVtYmVyID0gdmFsMS5NZ051bVZhbC5OVU1fMl9MT05HKCk7XHJcbiAgICBpZiAoKHBhcmVudCA+PSAwICYmIHBhcmVudCA8ICgoPFRhc2tCYXNlPnRoaXMuRXhwVGFzaykuZ2V0VGFza0RlcHRoKGZhbHNlKSkpIHx8IHBhcmVudCA9PT0gRXhwcmVzc2lvbkV2YWx1YXRvci5UUklHR0VSX1RBU0spIHtcclxuICAgICAgbGV0IHRzazogVGFza0Jhc2UgPSA8VGFza0Jhc2U+IHN1cGVyLkdldENvbnRleHRUYXNrKHBhcmVudCk7XHJcbiAgICAgIG91dHN0ciA9IHRzay5nZXRNYWluTGV2ZWwoKTtcclxuICAgIH1cclxuICAgIHJlc1ZhbC5TdHJWYWwgPSBvdXRzdHI7XHJcbiAgICByZXNWYWwuQXR0ciA9IFN0b3JhZ2VBdHRyaWJ1dGUuQUxQSEE7XHJcbiAgfVxyXG5cclxuXHJcbiAgcHJpdmF0ZSBldmFsX29wX21haW5kaXNwbGF5KHJlc1ZhbDogRXhwVmFsLCB2YWwxOiBFeHBWYWwpOiB2b2lkIHtcclxuICAgIGxldCBtYWluRHNwSWR4OiBudW1iZXIgPSAwO1xyXG4gICAgaWYgKHZhbDEuTWdOdW1WYWwgPT09IG51bGwpIHtcclxuICAgICAgc3VwZXIuU2V0TlVMTChyZXNWYWwsIFN0b3JhZ2VBdHRyaWJ1dGUuTlVNRVJJQyk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgcGFyZW50OiBudW1iZXIgPSB2YWwxLk1nTnVtVmFsLk5VTV8yX0xPTkcoKTtcclxuXHJcbiAgICBpZiAoKHBhcmVudCA+PSAwICYmIHBhcmVudCA8ICgoPFRhc2tCYXNlPnRoaXMuRXhwVGFzaykuZ2V0VGFza0RlcHRoKGZhbHNlKSkpIHx8IHBhcmVudCA9PT0gRXhwcmVzc2lvbkV2YWx1YXRvci5UUklHR0VSX1RBU0spIHtcclxuICAgICAgbGV0IHRzazogVGFza0Jhc2UgPSA8VGFza0Jhc2U+IHN1cGVyLkdldENvbnRleHRUYXNrKHBhcmVudCk7XHJcbiAgICAgIG1haW5Ec3BJZHggPSAodHNrLmdldFByb3AoUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfTUFJTl9ESVNQTEFZKSkuR2V0Q29tcHV0ZWRWYWx1ZUludGVnZXIoKTtcclxuICAgIH1cclxuICAgIHN1cGVyLkNvbnN0cnVjdE1hZ2ljTnVtKHJlc1ZhbCwgbWFpbkRzcElkeCwgU3RvcmFnZUF0dHJpYnV0ZS5OVU1FUklDKTtcclxuICB9XHJcblxyXG5cclxuICBwcml2YXRlIGV2YWxfb3BfSXNGaXJzdFJlY29yZEN5Y2xlKHJlc1ZhbDogRXhwVmFsLCB2YWwxOiBFeHBWYWwpOiB2b2lkIHtcclxuICAgIGxldCBpc0ZpcnN0UmVjQ3ljbGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIGlmICh2YWwxLk1nTnVtVmFsID09PSBudWxsKSB7XHJcbiAgICAgIHN1cGVyLlNldE5VTEwocmVzVmFsLCBTdG9yYWdlQXR0cmlidXRlLkFMUEhBKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBwYXJlbnQ6IG51bWJlciA9IHZhbDEuTWdOdW1WYWwuTlVNXzJfTE9ORygpO1xyXG4gICAgaWYgKChwYXJlbnQgPj0gMCAmJiBwYXJlbnQgPCAoKDxUYXNrQmFzZT50aGlzLkV4cFRhc2spLmdldFRhc2tEZXB0aChmYWxzZSkpKSB8fCBwYXJlbnQgPT09IEV4cHJlc3Npb25FdmFsdWF0b3IuVFJJR0dFUl9UQVNLKSB7XHJcbiAgICAgIGxldCB0c2s6IFRhc2tCYXNlID0gPFRhc2tCYXNlPiBzdXBlci5HZXRDb250ZXh0VGFzayhwYXJlbnQpO1xyXG4gICAgICBpc0ZpcnN0UmVjQ3ljbGUgPSB0c2suaXNGaXJzdFJlY29yZEN5Y2xlKCk7XHJcbiAgICB9XHJcbiAgICByZXNWYWwuQm9vbFZhbCA9IGlzRmlyc3RSZWNDeWNsZTtcclxuICAgIHJlc1ZhbC5BdHRyID0gU3RvcmFnZUF0dHJpYnV0ZS5CT09MRUFOO1xyXG5cclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy9cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cInJlc1ZhbFwiPjwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwidmFsMVwiPjwvcGFyYW0+XHJcbiAgcHJpdmF0ZSBleHBfaXNfZGVmYXVsdChyZXNWYWw6IEV4cFZhbCwgdmFsMTogRXhwVmFsKTogdm9pZCB7XHJcbiAgICByZXNWYWwuQXR0ciA9IFN0b3JhZ2VBdHRyaWJ1dGUuQk9PTEVBTjtcclxuICAgIHJlc1ZhbC5Cb29sVmFsID0gZmFsc2U7XHJcbiAgICBsZXQgaXRtOiBudW1iZXIgPSB2YWwxLk1nTnVtVmFsLk5VTV8yX0xPTkcoKTtcclxuICAgIC8vIGl0bSBzdGFydHMgZnJvbSBBLT4xIGJ1dCB0aGUgYXJyYXkgc3RhcnRzIGZyb20gMCAtPiBpdG0tMVxyXG4gICAgbGV0IGZsZDogRmllbGQgPSAoKDxUYXNrQmFzZT50aGlzLkV4cFRhc2spLmN0bF9pdG1fMl9wYXJlbnRfdmVlKGl0bSAtIDEpKTtcclxuICAgIGlmIChmbGQgPT09IG51bGwpXHJcbiAgICAgIHJldHVybjtcclxuXHJcbiAgICAvLyBRQ1IgOTI4MzA4IC0gZm9yIHZlY3RvcnMgYXMgdmVjdG9ycyAoIG5vdCBwZXIgY2VsbCBvZiB0aGUgdmVjdG9yKSB0aGUgQmVoYXZpb3IgaXMgdGhlIHNhbWUgYXMgYmxvYnNcclxuICAgIC8vIHRoYXQgaXMgbnVsbCBpcyBhbGxvd2VkIGFuZCBudWxsIGlzIGRlZmF1bHRcclxuICAgIGlmIChmbGQuaXNOdWxsKCkgJiYgKGZsZC5pc051bGxEZWZhdWx0KCkgfHwgZmxkLmdldFR5cGUoKSA9PT0gU3RvcmFnZUF0dHJpYnV0ZS5CTE9CX1ZFQ1RPUikpXHJcbiAgICAgIHJlc1ZhbC5Cb29sVmFsID0gdHJ1ZTtcclxuXHJcbiAgICBsZXQgdmFsOiBzdHJpbmcgPSBmbGQuZ2V0VmFsdWUoZmFsc2UpO1xyXG4gICAgbGV0IGRlZlZhbDogc3RyaW5nID0gZmxkLmdldERlZmF1bHRWYWx1ZSgpO1xyXG4gICAgbGV0IHR5cGU6IFN0b3JhZ2VBdHRyaWJ1dGUgPSBmbGQuZ2V0VHlwZSgpO1xyXG5cclxuICAgIHJlc1ZhbC5Cb29sVmFsID0gRXhwcmVzc2lvbkV2YWx1YXRvci5tZ1ZhbHNFcXVhbCh2YWwsIGZsZC5pc051bGwoKSwgdHlwZSwgZGVmVmFsLCBmbGQuaXNOdWxsRGVmYXVsdCgpLCB0eXBlKTtcclxuICAgIC8vIHZhbHVlIG5vdCBlcXVpdmFsZW50IHRvIGRlZmF1bHQgdmFsdWUgZnVuY3Rpb24gc2hvdWxkIHJldHVybiBGQUxTRVxyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyByZXR1cm4gdHJ1ZSBpZiB1c2VyIGlzIGxvZ2dlZG4gaW5cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cInJlc1ZhbFwiPjwvcGFyYW0+XHJcbiAgcHJpdmF0ZSBldmFsX29wX0lzTG9nZ2VkSW4ocmVzVmFsOiBFeHBWYWwpOiB2b2lkIHtcclxuICAgIHJlc1ZhbC5BdHRyID0gU3RvcmFnZUF0dHJpYnV0ZS5CT09MRUFOO1xyXG4gICAgcmVzVmFsLkJvb2xWYWwgPSBVc2VyRGV0YWlscy5JbnN0YW5jZS5nZXRJc0xvZ2dlZEluKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGV2YWxfb3BfYXBwbmFtZShyZXNWYWw6IEV4cFZhbCk6IHZvaWQge1xyXG4gICAgcmVzVmFsLkF0dHIgPSBTdG9yYWdlQXR0cmlidXRlLkFMUEhBO1xyXG4gICAgcmVzVmFsLlN0clZhbCA9IFNlcnZlckNvbmZpZy5JbnN0YW5jZS5nZXRBcHBOYW1lKCk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJyZXNWYWxcIj48L3BhcmFtPlxyXG4gIHByaXZhdGUgZXZhbF9vcF9wcm9nKHJlc1ZhbDogRXhwVmFsKTogdm9pZCB7XHJcbiAgICByZXNWYWwuQXR0ciA9IFN0b3JhZ2VBdHRyaWJ1dGUuQUxQSEE7XHJcbiAgICByZXNWYWwuU3RyVmFsID0gKCgoPFRhc2tCYXNlPnRoaXMuRXhwVGFzaykucXVlcnlUYXNrUGF0aCgpKSkuVG9TdHJpbmcoKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy9cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cInJlc1ZhbFwiPjwvcGFyYW0+XHJcbiAgcHJpdmF0ZSBldmFsX29wX3RoaXMocmVzVmFsOiBFeHBWYWwpOiB2b2lkIHtcclxuICAgIGxldCB0cmlnZ2VyVGFzazogVGFza0Jhc2UgPSA8VGFza0Jhc2U+dGhpcy5FeHBUYXNrO1xyXG4gICAgbGV0IFJlc3VsdDogbnVtYmVyID0gMDtcclxuXHJcbiAgICAvLyBFWFBLRVJOX3BhcmVudCA9IEVYUEtFUk5fdmVlID0gMDtcclxuXHJcbiAgICBpZiAodHJpZ2dlclRhc2sgIT09IG51bGwpIHtcclxuICAgICAgLy8gRVhQS0VSTl9wYXJlbnQgPSBUUklHR0VSX1RBU0s7XHJcbiAgICAgIFJlc3VsdCA9IEV4cHJlc3Npb25FdmFsdWF0b3IuVFJJR0dFUl9UQVNLO1xyXG4gICAgfVxyXG4gICAgc3VwZXIuQ29uc3RydWN0TWFnaWNOdW0ocmVzVmFsLCBSZXN1bHQsIFN0b3JhZ2VBdHRyaWJ1dGUuTlVNRVJJQyk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInJlc1ZhbFwiPjwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJQYXJlbnRcIj48L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiTW9kZXNcIj5NT0RFIGxpdGVyYWwgZ2l2ZW4gYXMgbW9kZSBwYXJhbWV0ZXI8L3BhcmFtPlxyXG4gIHByaXZhdGUgZXZhbF9vcF9zdGF0KHJlc1ZhbDogRXhwVmFsLCBQYXJlbnQ6IEV4cFZhbCwgTW9kZXM6IEV4cFZhbCk6IHZvaWQge1xyXG4gICAgbGV0IFJldDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgbGV0IGlQYXJlbnQ6IG51bWJlciA9IFBhcmVudC5NZ051bVZhbC5OVU1fMl9MT05HKCk7XHJcbiAgICBpZiAoKGlQYXJlbnQgPj0gMCAmJiBpUGFyZW50IDwgICgoPFRhc2tCYXNlPnRoaXMuRXhwVGFzaykuZ2V0VGFza0RlcHRoKGZhbHNlKSkpIHx8IGlQYXJlbnQgPT09IEV4cHJlc3Npb25FdmFsdWF0b3IuVFJJR0dFUl9UQVNLKSB7XHJcbiAgICAgIGxldCBUc2s6IFRhc2tCYXNlID0gPFRhc2tCYXNlPiBzdXBlci5HZXRDb250ZXh0VGFzayhpUGFyZW50KTtcclxuICAgICAgaWYgKFRzayAhPT0gbnVsbCkge1xyXG4gICAgICAgIGxldCB0c2tNb2RlOiBzdHJpbmcgPSAoVHNrLmdldE1vZGUoKSkudG9VcHBlckNhc2UoKTtcclxuICAgICAgICBmb3IgKGxldCBpOiBudW1iZXIgPSAwOyBpIDwgTW9kZXMuU3RyVmFsLmxlbmd0aDsgaSA9IGkgKyAxKSB7XHJcbiAgICAgICAgICBsZXQgbW9kZTogc3RyaW5nID0gTW9kZXMuU3RyVmFsLmNoYXJBdChpKS50b1VwcGVyQ2FzZSgpO1xyXG4gICAgICAgICAgbGV0IGNvZGU6IHN0cmluZyA9IHRoaXMuY3N0X2NvZGVfdHJhbnNfYnVmKCdJJywgJ01DREVQTFJLU09OQicsIG1vZGUsIE1zZ0ludGVyZmFjZS5FWFBUQUJfVFNLX01PREVfUlQpO1xyXG5cclxuICAgICAgICAgIC8vIGNvZGUgbm90IGZvdW5kLCBpdCBtaWdodCBiZSBFbmdsaXNoIChzYW1lIGFzIGluIG9ubGluZSkuXHJcbiAgICAgICAgICBpZiAoY29kZSA9PT0gJ1xcMCcpIHtcclxuICAgICAgICAgICAgY29kZSA9IG1vZGUudG9VcHBlckNhc2UoKTtcclxuICAgICAgICAgICAgaWYgKGNvZGUgPT09ICdRJylcclxuICAgICAgICAgICAgICBjb2RlID0gJ0UnO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKGNvZGUgPT09IHRza01vZGUpIHtcclxuICAgICAgICAgICAgUmV0ID0gdHJ1ZTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXNWYWwuQXR0ciA9IFN0b3JhZ2VBdHRyaWJ1dGUuQk9PTEVBTjtcclxuICAgIHJlc1ZhbC5Cb29sVmFsID0gUmV0O1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyBSZXR1cm5zIHN1YmZvcm0gZXhlY3V0aW9uIG1vZGUgZm9yIHRoZSB0YXNrIHdpdGggdGhlIGNvcnJlc3BvbmRpbmcgZ2VuZXJhdGlvblxyXG4gIC8vLyAtMSDCgUVUaGUgdGFzayBpcyBub3QgZXhlY3V0ZWQgYXMgYSBzdWJmb3JtXHJcbiAgLy8vICAwIMKBRVRoZSB0YXNrIGlzIGV4ZWN1dGVkIGJ5IHNldHRpbmcgdGhlIGZvY3VzIG9uIGl0XHJcbiAgLy8vICAxIMKBRVRoZSBzdWJ0YXNrIGlzIGV4ZWN1dGVkIGZvciB0aGUgZmlyc3QgdGltZVxyXG4gIC8vLyAgMiDCgUVUaGUgdGFzayBpcyBleGVjdXRlZCBiZWNhdXNlIHRoZSBBdXRvbWF0aWMgUmVmcmVzaCBwcm9wZXJ0eSBvciB0aGUgU3ViZm9ybSBSZWZyZXNoIGV2ZW50IGhhcyBiZWVuXHJcbiAgLy8vICAgICAgdHJpZ2dlcmVkLlxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwicmVzVmFsXCI+PC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJnZW5lcmF0aW9uXCI+PC9wYXJhbT5cclxuICBwcml2YXRlIGV2YWxfb3Bfc3ViZm9ybUV4ZWNNb2RlKHJlc1ZhbDogRXhwVmFsLCBnZW5lcmF0aW9uOiBFeHBWYWwpOiB2b2lkIHtcclxuICAgIGxldCBzdWJmb3JtRXhlY01vZGU6IFRhc2tfU3ViZm9ybUV4ZWNNb2RlRW51bSA9IFRhc2tfU3ViZm9ybUV4ZWNNb2RlRW51bS5OT19TVUJGT1JNO1xyXG4gICAgbGV0IGlQYXJlbnQ6IG51bWJlciA9IGdlbmVyYXRpb24uTWdOdW1WYWwuTlVNXzJfTE9ORygpO1xyXG4gICAgaWYgKChpUGFyZW50ID49IDAgJiYgaVBhcmVudCA8ICgoPFRhc2tCYXNlPnRoaXMuRXhwVGFzaykuZ2V0VGFza0RlcHRoKGZhbHNlKSkpIHx8IGlQYXJlbnQgPT09IEV4cHJlc3Npb25FdmFsdWF0b3IuVFJJR0dFUl9UQVNLKSB7XHJcbiAgICAgIGxldCB0YXNrOiBUYXNrQmFzZSA9IDxUYXNrQmFzZT4gc3VwZXIuR2V0Q29udGV4dFRhc2soaVBhcmVudCk7XHJcbiAgICAgIGlmICh0YXNrICE9PSBudWxsKSB7XHJcbiAgICAgICAgaWYgKHRhc2suSXNTdWJGb3JtKVxyXG4gICAgICAgICAgc3ViZm9ybUV4ZWNNb2RlID0gdGFzay5TdWJmb3JtRXhlY01vZGU7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHN1cGVyLkNvbnN0cnVjdE1hZ2ljTnVtKHJlc1ZhbCwgPG51bWJlcj5zdWJmb3JtRXhlY01vZGUsIFN0b3JhZ2VBdHRyaWJ1dGUuTlVNRVJJQyk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIGV2YWxfb3BfdmFyc2V0KHJlc1ZhbDogRXhwVmFsLCB2YWw6IEV4cFZhbCwgbnVtOiBFeHBWYWwpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIC8vIGluaXQgcmV0dXJuZWQgdmFsdWVcclxuICAgIHJlc1ZhbC5Cb29sVmFsID0gdHJ1ZTtcclxuICAgIHJlc1ZhbC5BdHRyID0gU3RvcmFnZUF0dHJpYnV0ZS5CT09MRUFOO1xyXG5cclxuICAgIGlmIChudW0uTWdOdW1WYWwgPT09IG51bGwpIHtcclxuICAgICAgLy8gdGhlIHZhcnNldCBmdW5jdGlvbiBhbHdheXMgcmV0dXJucyB0cnVlLlxyXG4gICAgICAvLyBTZXROVUxMKHJlc1ZhbCxTVE9SQUdFX0FUVFJfQk9PTEVBTik7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgaXRtOiBudW1iZXIgPSBudW0uTWdOdW1WYWwuTlVNXzJfTE9ORygpO1xyXG5cclxuICAgIGxldCBmbGQ6IEZpZWxkID0gdGhpcy5HZXRGaWVsZE9mQ29udGV4dFRhc2soaXRtKTtcclxuXHJcbiAgICBpZiAoZmxkID09PSBudWxsKSB7XHJcbiAgICAgIHJlc1ZhbC5Cb29sVmFsID0gZmFsc2U7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoU3RvcmFnZUF0dHJpYnV0ZUNoZWNrLlN0b3JhZ2VGbGRBbHBoYVVuaWNvZGVPckJsb2IoZmxkLmdldFR5cGUoKSwgdmFsLkF0dHIpKVxyXG4gICAgICB0aGlzLkNvbnZlcnRFeHBWYWwodmFsLCBmbGQuZ2V0VHlwZSgpKTtcclxuXHJcbiAgICBsZXQgYnVmcHRyOiBzdHJpbmc7XHJcbiAgICBpZiAoU3RvcmFnZUF0dHJpYnV0ZUNoZWNrLmlzVGhlU2FtZVR5cGUoZmxkLmdldFR5cGUoKSwgdmFsLkF0dHIpKSB7XHJcbiAgICAgIHN3aXRjaCAoZmxkLmdldFR5cGUoKSkge1xyXG4gICAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5BTFBIQTpcclxuICAgICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuVU5JQ09ERTpcclxuICAgICAgICAgIGJ1ZnB0ciA9IHZhbC5TdHJWYWw7XHJcbiAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLk5VTUVSSUM6XHJcbiAgICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLkRBVEU6XHJcbiAgICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLlRJTUU6XHJcbiAgICAgICAgICBidWZwdHIgPSB2YWwuTWdOdW1WYWwudG9YTUxyZWNvcmQoKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuQk9PTEVBTjpcclxuICAgICAgICAgIGJ1ZnB0ciA9IHZhbC5Cb29sVmFsID8gJzEnIDogJzAnO1xyXG4gICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5CTE9COlxyXG4gICAgICAgICAgYnVmcHRyID0gdmFsLlRvTWdWYWwoKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuQkxPQl9WRUNUT1I6XHJcbiAgICAgICAgICBidWZwdHIgPSB2YWwuVG9NZ1ZhbCgpO1xyXG5cclxuICAgICAgICAgIC8vIFFDUiA0NDg2NjgyXHJcbiAgICAgICAgICBpZiAoIXZhbC5Jc051bGwpIHtcclxuICAgICAgICAgICAgLy8gY2hlY2sgZm9yIHZhbGlkIHZlY3RvciBpbiB0aGUgYmxvYlxyXG4gICAgICAgICAgICBpZiAodmFsLkF0dHIgPT09IFN0b3JhZ2VBdHRyaWJ1dGUuQkxPQilcclxuICAgICAgICAgICAgICBpZiAoIVZlY3RvclR5cGUudmFsaWRhdGVCbG9iQ29udGVudHModmFsLlN0clZhbCkpXHJcbiAgICAgICAgICAgICAgICBidWZwdHIgPSBudWxsO1xyXG5cclxuICAgICAgICAgICAgaWYgKGJ1ZnB0ciAhPSBudWxsKVxyXG4gICAgICAgICAgICAgIGJ1ZnB0ciA9IE9wZXJhdGlvbi5vcGVyVXBkYXRlVmVjdG9ycyhmbGQsIGJ1ZnB0cik7XHJcblxyXG4gICAgICAgICAgICBpZiAoYnVmcHRyICE9IG51bGwpXHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIGZhbGxzIHRocm91Z2hcclxuICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgLy8gY2FuJ3QgY29tZSB0byB0aGlzIHBvaW50XHJcbiAgICAgICAgICBzdXBlci5TZXROVUxMKHJlc1ZhbCwgU3RvcmFnZUF0dHJpYnV0ZS5CT09MRUFOKTtcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgLy8gaXQncyBub3QgdGhlIHNhbWUgdHlwZSBvZiB0aGUgZmllbGQgYW5kIHZhbHVlIDpcclxuICAgIGVsc2Uge1xyXG4gICAgICAvLyBldmVyeSBmaWVsZCBoYXMgdG8gZ2V0IGl0J3MgZGVmYXVsdCB2YWx1ZVxyXG4gICAgICBidWZwdHIgPSBmbGQuZ2V0RGVmYXVsdFZhbHVlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHZhbC5Jc051bGwpIHtcclxuICAgICAgLy8gZ2V0IHRoZSBudWxsIHZhbHVlIG9yIHRoZSBtYWdpYyBkZWZhdWx0IHZhbHVlXHJcbiAgICAgIGJ1ZnB0ciA9IGZsZC5nZXROdWxsVmFsdWUoKTtcclxuICAgICAgaWYgKGJ1ZnB0ciA9PT0gbnVsbClcclxuICAgICAgICBmbGQuZ2V0TWFnaWNEZWZhdWx0VmFsdWUoKTtcclxuICAgIH1cclxuICAgIC8vIFFDUiA5ODQ1NjMgdmFyIHNldCBpbiBjcmVhdCBtb2RlIHNvdWxkIG5vdCBjcmVhdCBhIG5ldyByZWNvcmRcclxuICAgIC8vICM3Nzc3MDAuIFRoZSByZWNvcmQgc2hvdWxkIGJlIG1hcmtlZCBhcyB1cGRhdGVkIGlmIHRoZSBmaWVsZCdzIHRhc2sgYW5kIHRoZSBleHByZXNzaW9uIHRhc2sgYXJlIGRpZmZlcmVudCBvclxyXG4gICAgLy8gdGhlIGZpZWxkJ3MgdGFzayBpcyBpbiBSZWNvcmQgU3VmZml4LiBUaGlzIGlzIHNhbWUgYXMgT0wgKHJlZmVyIFJUOjpQb3N0VmVlVXBkYXRlIGluIHZldy5jcHApLlxyXG4gICAgbGV0IHNldFJlY29yZFVwZGF0ZWQ6IGJvb2xlYW4gPSBmbGQuZ2V0VGFzaygpICE9PSB0aGlzLkV4cFRhc2sgfHwgKDxUYXNrQmFzZT5mbGQuZ2V0VGFzaygpKS5nZXRCcmtMZXZlbCgpID09PSBDb25zdEludGVyZmFjZS5CUktfTEVWRUxfUkVDX1NVRkZJWDtcclxuXHJcbiAgICBhd2FpdCBmbGQuc2V0VmFsdWVBbmRTdGFydFJlY29tcHV0ZShidWZwdHIsIHZhbC5Jc051bGwsIHRydWUsIHNldFJlY29yZFVwZGF0ZWQsIGZhbHNlKTtcclxuICAgIGF3YWl0IGZsZC51cGRhdGVEaXNwbGF5KCk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJyZXNWYWxcIj48L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cInNob3dNZXNzYWdlXCI+PC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJnZW5lcmF0aW9uXCI+PC9wYXJhbT5cclxuICBwcml2YXRlIGFzeW5jIGV2YWxfb3Bfcm9sbGJhY2socmVzVmFsOiBFeHBWYWwsIHNob3dNZXNzYWdlOiBFeHBWYWwsIGdlbmVyYXRpb246IEV4cFZhbCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgbGV0IHRhc2s6IFRhc2tCYXNlID0gKDxUYXNrQmFzZT50aGlzLkV4cFRhc2suR2V0Q29udGV4dFRhc2soKSkgfHwgKDxUYXNrQmFzZT50aGlzLkV4cFRhc2spO1xyXG5cclxuICAgIC8vIGV4ZWN1dGUgcm9sbGJhY2sgY29tbWFuZFxyXG4gICAgYXdhaXQgQWNjZXNzSGVscGVyLmV2ZW50c01hbmFnZXIuaGFuZGxlSW50ZXJuYWxFdmVudFdpdGhUYXNrKHRhc2ssIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9ST0xMQkFDSyk7XHJcblxyXG4gICAgcmVzVmFsLkF0dHIgPSBTdG9yYWdlQXR0cmlidXRlLkJPT0xFQU47XHJcbiAgICByZXNWYWwuQm9vbFZhbCA9IHRydWU7IC8vIGluIHRoZSBzZXJ2ZXIgd2UgcmV0dXJuIGFsd2VzIHRydWVcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy9cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cInNvdXJjZVwiPjwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwibWFza09yZ1wiPjwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwicmVzVmFsXCI+PC9wYXJhbT5cclxuICBwcml2YXRlIGV2YWxfb3BfbGlrZShzb3VyY2U6IEV4cFZhbCwgbWFza09yZzogRXhwVmFsLCByZXNWYWw6IEV4cFZhbCk6IHZvaWQge1xyXG4gICAgbGV0IGk6IG51bWJlcjtcclxuICAgIGxldCBqOiBudW1iZXI7XHJcbiAgICBsZXQgU291cmNlOiBzdHJpbmcgPSBzb3VyY2UuU3RyVmFsO1xyXG4gICAgbGV0IE1hc2tPcmc6IHN0cmluZyA9IG1hc2tPcmcuU3RyVmFsO1xyXG4gICAgbGV0IGFzdGVyaXNrQ250OiBudW1iZXIgPSAwOyAvLyBjb3VudGVyIG9mICcqJyBpbiB0aGUgc291cmNlIHN0cmluZ1xyXG4gICAgbGV0IFNhbWU6IGJvb2xlYW4gPSB0cnVlO1xyXG4gICAgbGV0IGVzY19jaDogYm9vbGVhbjtcclxuICAgIGlmIChTb3VyY2UgPT09IG51bGwgfHwgTWFza09yZyA9PT0gbnVsbCkge1xyXG4gICAgICBzdXBlci5TZXROVUxMKHJlc1ZhbCwgU3RvcmFnZUF0dHJpYnV0ZS5CT09MRUFOKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgbGV0IFNvdXJjZUxlbjogbnVtYmVyID0gU291cmNlLmxlbmd0aDtcclxuICAgIGxldCBNYXNrTGVuOiBudW1iZXIgPSBNYXNrT3JnLmxlbmd0aDtcclxuICAgIGxldCBNYXNrID0gbmV3IEFycmF5KE1hc2tMZW4pO1xyXG4gICAgbGV0IGJ1ZmZlciA9IG5ldyBTdHJpbmdCdWlsZGVyKE1hc2tMZW4pO1xyXG5cclxuICAgIC8vIENoYW5nZSBpbiB0aGUgbWFzayAnXFxcXCcgLT4gJ1xcJywgJ1xcKicgLT4gJyonLCAnXFw/JyAtPiAnPycsXHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcqJyAtPiBBU1RFUklTS19DSFIsICc/JyAtPiBRVUVTVElPTl9DSFJcclxuICAgIGZvciAoaSA9IDAsIGogPSAwLCBlc2NfY2ggPSBmYWxzZTsgaSA8IE1hc2tMZW47IGkrKykge1xyXG4gICAgICBsZXQgY3VyckNocjogc3RyaW5nID0gTWFza09yZ1tpXTtcclxuICAgICAgc3dpdGNoIChjdXJyQ2hyKSB7XHJcbiAgICAgICAgY2FzZSAnXFxcXCc6XHJcbiAgICAgICAgICBpZiAoZXNjX2NoKVxyXG4gICAgICAgICAgICBNYXNrW2orK10gPSBjdXJyQ2hyO1xyXG4gICAgICAgICAgZXNjX2NoID0gIWVzY19jaDtcclxuICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICBjYXNlICcqJzpcclxuICAgICAgICAgIGlmIChlc2NfY2gpXHJcbiAgICAgICAgICAgIE1hc2tbaisrXSA9IGN1cnJDaHI7XHJcbiAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgTWFza1tqKytdID0gRXhwcmVzc2lvbkV2YWx1YXRvci5BU1RFUklTS19DSFI7XHJcbiAgICAgICAgICAgIGFzdGVyaXNrQ250Kys7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBlc2NfY2ggPSBmYWxzZTtcclxuICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICBjYXNlICc/JzpcclxuICAgICAgICAgIE1hc2tbaisrXSA9IGVzY19jaCA/IGN1cnJDaHIgOiBFeHByZXNzaW9uRXZhbHVhdG9yLlFVRVNUSU9OX0NIUjtcclxuICAgICAgICAgIGVzY19jaCA9IGZhbHNlO1xyXG4gICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICBNYXNrW2orK10gPSBjdXJyQ2hyO1xyXG4gICAgICAgICAgZXNjX2NoID0gZmFsc2U7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgTWFza0xlbiA9IGo7XHJcbiAgICBNYXNrT3JnID0gRXhwcmVzc2lvbkV2YWx1YXRvci5hcnJUb1N0cihNYXNrLCAwLCBNYXNrLmxlbmd0aCk7XHJcbiAgICAvLyAxLiBGaW5kIHRoZSBsYXN0ICcqJ1xyXG4gICAgbGV0IGFzdF9sYXN0X3B0cjogbnVtYmVyID0gTWFza09yZy5sYXN0SW5kZXhPZihFeHByZXNzaW9uRXZhbHVhdG9yLkFTVEVSSVNLX0NIUik7XHJcblxyXG4gICAgaWYgKGFzdF9sYXN0X3B0ciA9PT0gLTEpXHJcbiAgICAvLyAyLiBJbiB0aGUgY2FzZTogdGhlcmUgaXMgbm90IGFueSAnKidcclxuICAgICAgU2FtZSA9IEV4cHJlc3Npb25FdmFsdWF0b3Iub3BfbGlrZV9jbXAoU291cmNlLCBNYXNrT3JnKTtcclxuICAgIGVsc2Uge1xyXG4gICAgICAvLyAyLiBJbiB0aGUgY2FzZTogdGhlcmUgYXJlIG9uZSBvciBtb3JlICcqJ1xyXG4gICAgICAvLyAyLjEgQ29tcGFyZSB0aGUgcGllY2Ugb2YgdGhlIHN0cmluZyBiZWZvcmUgdGhlIGZpcnN0ICcqJ1xyXG4gICAgICBmb3IgKGkgPSAwOyBNYXNrW2ldICE9PSBFeHByZXNzaW9uRXZhbHVhdG9yLkFTVEVSSVNLX0NIUiAmJiBTYW1lOyBpKyssIE1hc2tMZW4tLSwgU291cmNlTGVuLS0pIHtcclxuICAgICAgICBpZiAoU291cmNlTGVuID09PSAwKVxyXG4gICAgICAgICAgU2FtZSA9IGZhbHNlO1xyXG4gICAgICAgIGVsc2UgU2FtZSA9IChNYXNrW2ldID09PSBFeHByZXNzaW9uRXZhbHVhdG9yLlFVRVNUSU9OX0NIUiA/IHRydWUgOiBNYXNrW2ldID09PSBTb3VyY2VbaV0pO1xyXG4gICAgICB9XHJcbiAgICAgIC8vIGkgLSBpcyBpbmRleCBvZiBmaXJzdCAnKicgaW4gdGhlIG1hc2tcclxuICAgICAgU291cmNlID0gU291cmNlLnN1YnN0cihpKTtcclxuICAgICAgTWFzayA9IEV4cHJlc3Npb25FdmFsdWF0b3IuY3V0QXJyYXkoTWFzaywgaSk7XHJcblxyXG4gICAgICAvLyAyLjIgQ29tcGFyZSB0aGUgYWxsIHBpZWNlcyBiZXR3ZWVuIHRoZSAnKicgYW5kICcqJ1xyXG4gICAgICB3aGlsZSAoU2FtZSAmJiBhc3Rlcmlza0NudCAhPT0gMSkge1xyXG4gICAgICAgIGxldCBhc3RfcHRyOiBudW1iZXI7XHJcbiAgICAgICAgbGV0IHRtcF9sZW46IG51bWJlcjtcclxuICAgICAgICBmb3IgKGFzdF9wdHIgPSAxLCB0bXBfbGVuID0gMDsgYXN0X3B0ciArIGkgIT09IGFzdF9sYXN0X3B0cjsgYXN0X3B0cisrICwgdG1wX2xlbisrKVxyXG4gICAgICAgICAgaWYgKE1hc2tbYXN0X3B0cl0gPT09IEV4cHJlc3Npb25FdmFsdWF0b3IuQVNURVJJU0tfQ0hSKVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICBhc3Rlcmlza0NudC0tO1xyXG4gICAgICAgIFNvdXJjZUxlbiA9IFNvdXJjZS5sZW5ndGg7XHJcbiAgICAgICAgLy8gYXN0X3B0ciAtIGluZGV4IG9mIG5leHQgJyonIChub3QgZmlyc3QgYW5kIG5vdCBsYXN0KVxyXG5cclxuICAgICAgICBpZiAodG1wX2xlbiAhPT0gMCkge1xyXG4gICAgICAgICAgLy8gbmV4dCBpbmRleCBvZiAnKicgZm91bmRcclxuICAgICAgICAgIGlmIChTb3VyY2VMZW4gPiAwKVxyXG4gICAgICAgICAgLy8gdGhlcmUgaXMgc3RpbGwgbWVtYmVycyBpbiBzb3VyY2VcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgYnVmZmVyLlJlbW92ZSgwLCBidWZmZXIuTGVuZ3RoKTtcclxuICAgICAgICAgICAgYnVmZmVyLkFwcGVuZChTb3VyY2UpO1xyXG4gICAgICAgICAgICBTYW1lID0gRXhwcmVzc2lvbkV2YWx1YXRvci5vcF9saWtlX21hcChidWZmZXIsIEV4cHJlc3Npb25FdmFsdWF0b3IuYXJyVG9TdHIoTWFzaywgMSwgdG1wX2xlbiArIDEpLCBmYWxzZSk7XHJcbiAgICAgICAgICAgIFNvdXJjZSA9IGJ1ZmZlci5Ub1N0cmluZygpO1xyXG4gICAgICAgICAgfSBlbHNlIFNhbWUgPSBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaSArPSBhc3RfcHRyOyAvLyBtb3ZlICdwb2ludGVyJyB0byB0aGUgbmV4dCBwaWVjZSBvZiBzdHJpbmcgKGJldHdlZW4gMiBhc3Rlcmlza3MpXHJcbiAgICAgICAgTWFzayA9IEV4cHJlc3Npb25FdmFsdWF0b3IuY3V0QXJyYXkoTWFzaywgYXN0X3B0cik7XHJcbiAgICAgIH0gLy8gZW5kIG9mIHdoaWxlXHJcblxyXG4gICAgICBpZiAoTWFza1swXSA9PT0gRXhwcmVzc2lvbkV2YWx1YXRvci5BU1RFUklTS19DSFIpXHJcbiAgICAgIC8vIGRlbGV0ZSBsYXN0ICcqJ1xyXG4gICAgICAgIE1hc2sgPSBFeHByZXNzaW9uRXZhbHVhdG9yLmN1dEFycmF5KE1hc2ssIDEpO1xyXG5cclxuICAgICAgLy8gMi4zIENvbXBhcmUgdGhlIHBpZWNlIG9mIHRoZSBzdHJpbmcgYWZ0ZXIgdGhlIGxhc3QgJyonXHJcbiAgICAgIGlmIChTYW1lICYmIChNYXNrLmxlbmd0aCA+IDApKSB7XHJcbiAgICAgICAgYnVmZmVyLlJlbW92ZSgwLCBidWZmZXIuTGVuZ3RoKTtcclxuICAgICAgICBidWZmZXIuQXBwZW5kKFNvdXJjZSk7XHJcbiAgICAgICAgU2FtZSA9IEV4cHJlc3Npb25FdmFsdWF0b3Iub3BfbGlrZV9tYXAoYnVmZmVyLCBFeHByZXNzaW9uRXZhbHVhdG9yLmFyclRvU3RyKE1hc2spLCB0cnVlKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmVzVmFsLkF0dHIgPSBTdG9yYWdlQXR0cmlidXRlLkJPT0xFQU47XHJcbiAgICByZXNWYWwuQm9vbFZhbCA9IFNhbWU7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgY3V0IHNvdXJjZSBhcnJheSBmcm9tIHNwZWNpYWwgbWVtYmVyXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInNvdXJjZVwiPmFycmF5LCB0byBjdXQgaXQ8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiZnJvbVwiPnRvIGN1dCBhbGwgbWVtYmVyIGJlZm9yZSBpdCBpbiBhcnJheTwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPiBjdXR0ZWQgYXJyYXk8L3JldHVybnM+XHJcbiAgcHJpdmF0ZSBzdGF0aWMgY3V0QXJyYXkoc291cmNlOiBzdHJpbmdbXSwgZnJvbTogbnVtYmVyKTogc3RyaW5nW10ge1xyXG4gICAgbGV0IGxlbmd0aDogbnVtYmVyID0gc291cmNlLmxlbmd0aCAtIGZyb207XHJcbiAgICBsZXQgYnVmZmVyOiBzdHJpbmdbXSA9IG5ldyBBcnJheTxzdHJpbmc+KGxlbmd0aCk7XHJcbiAgICBmb3IgKGxldCBjdXJyOiBudW1iZXIgPSAwOyBjdXJyIDwgbGVuZ3RoOyBjdXJyKyspXHJcbiAgICAgIGJ1ZmZlcltjdXJyXSA9IHNvdXJjZVtmcm9tICsgY3Vycl07XHJcbiAgICByZXR1cm4gYnVmZmVyO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIGltcGxlbWVudHMgUmVwU3RyXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBwcml2YXRlIGV2YWxfb3BfcmVwc3RyKHNvdXJjZTogRXhwVmFsLCBvcmdTdWJzdHI6IEV4cFZhbCwgbmV3U3Vic3RyOiBFeHBWYWwsIHJlc1ZhbDogRXhwVmFsKTogdm9pZCB7XHJcbiAgICBpZiAoc291cmNlLlN0clZhbCA9PT0gbnVsbCB8fCBvcmdTdWJzdHIuU3RyVmFsID09PSBudWxsIHx8IG5ld1N1YnN0ci5TdHJWYWwgPT09IG51bGwgfHwgIVN0b3JhZ2VBdHRyaWJ1dGVDaGVjay5Jc1R5cGVBbHBoYU9yVW5pY29kZShzb3VyY2UuQXR0cikgfHwgIVN0b3JhZ2VBdHRyaWJ1dGVDaGVjay5Jc1R5cGVBbHBoYU9yVW5pY29kZShvcmdTdWJzdHIuQXR0cikgfHwgIVN0b3JhZ2VBdHRyaWJ1dGVDaGVjay5Jc1R5cGVBbHBoYU9yVW5pY29kZShuZXdTdWJzdHIuQXR0cikpIHtcclxuICAgICAgc3VwZXIuU2V0TlVMTChyZXNWYWwsIFN0b3JhZ2VBdHRyaWJ1dGUuVU5JQ09ERSk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICByZXNWYWwuU3RyVmFsID0gTlN0cmluZy5SZXBsYWNlKHNvdXJjZS5TdHJWYWwsIG9yZ1N1YnN0ci5TdHJWYWwsIG5ld1N1YnN0ci5TdHJWYWwpO1xyXG4gICAgcmVzVmFsLkF0dHIgPSBTdG9yYWdlQXR0cmlidXRlLlVOSUNPREU7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHN0YXRpYyBhcnJUb1N0cihhcnI6IHN0cmluZ1tdKTogc3RyaW5nO1xyXG4gIHByaXZhdGUgc3RhdGljIGFyclRvU3RyKGFycjogc3RyaW5nW10sIGZyb206IG51bWJlciwgdG86IG51bWJlcik6IHN0cmluZztcclxuICBwcml2YXRlIHN0YXRpYyBhcnJUb1N0cihhcnI6IGFueSwgZnJvbT86IG51bWJlciwgdG8/OiBudW1iZXIpOiBzdHJpbmcge1xyXG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDEpXHJcbiAgICAgIHJldHVybiBFeHByZXNzaW9uRXZhbHVhdG9yLmFyclRvU3RyXzAoYXJyKTtcclxuICAgIGVsc2VcclxuICAgICAgcmV0dXJuIEV4cHJlc3Npb25FdmFsdWF0b3IuYXJyVG9TdHJfMShhcnIsIGZyb20sIHRvKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBNYWtlIHN0cmluZyBmcm9tIGFycmF5IG9mIGNoYXJhY3RlcnNcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiYXJyXCI+dG8gbWFrZSBzdHJpbmcgZnJvbTwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPiBzdHJpbmcgY29udGFpbnMgYWxsIGNoYXJhY3RlcnMgZnJvbSB0aGUgYXJyYXk8L3JldHVybnM+XHJcbiAgcHJpdmF0ZSBzdGF0aWMgYXJyVG9TdHJfMChhcnI6IHN0cmluZ1tdKTogc3RyaW5nIHtcclxuICAgIHJldHVybiBFeHByZXNzaW9uRXZhbHVhdG9yLmFyclRvU3RyKGFyciwgMCwgYXJyLmxlbmd0aCk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgTWFrZSBzdHJpbmcgZnJvbSBhcnJheSBvZiBjaGFyYWN0ZXJzXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImFyclwiPnRvIG1ha2Ugc3RyaW5nIGZyb208L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiZnJvbVwiPnRvIHN0YXJ0IGNvcHkgZnJvbSBhcnJheTwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJ0b1wiPnRvIGZpbmlzaCBjb3B5IGZyb20gYXJyYXk8L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz4gc3RyaW5nIGNvbnRhaW5zIGFsbCBjaGFyYWN0ZXJzIGZyb20gdGhlIGFycmF5PC9yZXR1cm5zPlxyXG4gIHByaXZhdGUgc3RhdGljIGFyclRvU3RyXzEoYXJyOiBzdHJpbmdbXSwgZnJvbTogbnVtYmVyLCB0bzogbnVtYmVyKTogc3RyaW5nIHtcclxuICAgIGxldCBidWZmZXI6IFN0cmluZ0J1aWxkZXIgPSBuZXcgU3RyaW5nQnVpbGRlcih0byAtIGZyb20pO1xyXG4gICAgZm9yICg7IGZyb20gPCB0bzsgZnJvbSsrKVxyXG4gICAgICBidWZmZXIuQXBwZW5kKGFycltmcm9tXSk7XHJcbiAgICByZXR1cm4gYnVmZmVyLlRvU3RyaW5nKCk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgY29tcGlsZSAyIHN0cmluZ3MgLCByZWd1bGFyIGV4cHJlc3Npb24gZm9yICc/JyAtIGFueSBPTkUgY2hhcmFjdGVyXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcIlNvdXJjZVwiPnRvIGJlIGNoZWNrZWQgYnkgcGF0dGVybjwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJNYXNrT3JnXCI+Zm9yIFJlZ3VsYXIgZXhwcmVzc2lvbjwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPiB0cnVlIGlmIHN0cmluZyBtdWNoZXMgZm9yIHRoZSBwYXR0ZXJuPC9yZXR1cm5zPlxyXG4gIHByaXZhdGUgc3RhdGljIG9wX2xpa2VfY21wKFNvdXJjZTogc3RyaW5nLCBNYXNrT3JnOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgIGxldCBTYW1lOiBib29sZWFuID0gdHJ1ZTtcclxuICAgIGxldCBNYXNrOiBzdHJpbmcgPSBNYXNrT3JnO1xyXG4gICAgbGV0IFNvdXJjZUxlbjogbnVtYmVyID0gU291cmNlLmxlbmd0aDtcclxuICAgIGxldCBNYXNrTGVuOiBudW1iZXIgPSBNYXNrT3JnLmxlbmd0aDtcclxuICAgIGlmIChTb3VyY2VMZW4gPCBNYXNrTGVuKVxyXG4gICAgICBTYW1lID0gZmFsc2U7XHJcblxyXG4gICAgZWxzZSBpZiAoU291cmNlTGVuID4gTWFza0xlbilcclxuICAgICAgTWFzayA9IE1hc2tPcmc7XHJcblxyXG4gICAgLy8gUUNSIDc0MzE4N1xyXG4gICAgd2hpbGUgKE1hc2subGVuZ3RoIDwgU291cmNlTGVuKVxyXG4gICAgICBNYXNrICs9ICcgJztcclxuXHJcbiAgICBmb3IgKGxldCBpOiBudW1iZXIgPSAwOyBpIDwgU291cmNlTGVuICYmIFNhbWU7IGkrKylcclxuICAgICAgU2FtZSA9IChNYXNrLmNoYXJBdChpKSA9PT0gRXhwcmVzc2lvbkV2YWx1YXRvci5RVUVTVElPTl9DSFIgfHwgTWFzay5jaGFyQXQoaSkgPT09IFNvdXJjZS5jaGFyQXQoaSkpO1xyXG5cclxuICAgIHJldHVybiBTYW1lO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIGNvbXBpbGUgMiBzdHJpbmdzIGFuZCBtb3ZlIHNvdXJjZVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJTb3VyY2VcIj5zb3VyY2UgZm9yIGNoZWNraW5nLCBDSEFOR0VEIGluIHByb2Nlc3Mgb2YgY2hlY2tpbmcsIG11c3QgYmUgY2hhbmdlZFxyXG4gIC8vLyAgIGluIGFjY29yZGFuY2UgdG8gY2hhbmdpbmcgYWZ0ZXIgdGhlIHVzaW5nIG9mIGZ1bmN0aW9uPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcIk1hc2tcIj5mb3IgUmVndWxhciBleHByZXNzaW9uPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImVuZFwiPml0IHRoZSBsYXN0IGFzdGVyaXNrIGluIHRoZSBwYXR0ZXJuPC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+IHRydWUgaWYgc3RyaW5nIG11Y2hlcyBmb3IgdGhlIHBhdHRlcm48L3JldHVybnM+XHJcbiAgcHJpdmF0ZSBzdGF0aWMgb3BfbGlrZV9tYXAoc291cmNlOiBTdHJpbmdCdWlsZGVyLCBtYXNrOiBzdHJpbmcsIGVuZDogYm9vbGVhbik6IGJvb2xlYW4ge1xyXG4gICAgbGV0IHNhbWU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIGxldCBwdHI6IHN0cmluZyA9IHNvdXJjZS5Ub1N0cmluZygpO1xyXG4gICAgbGV0IGk6IG51bWJlciA9IDA7XHJcblxyXG4gICAgLy8gbWFzayBpcyBsYXJnZXIgdGhlbiB0aGUgc291cmNlLiBUaGV5IGRvIG5vdCBtYXRjaC5cclxuICAgIGlmICghZW5kICYmIHNvdXJjZS5MZW5ndGggPCBtYXNrLmxlbmd0aClcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgIGxldCBqOiBudW1iZXIgPSAwO1xyXG4gICAgZm9yIChqID0gMDsgaiA8IHNvdXJjZS5MZW5ndGggJiYgIXNhbWU7IGorKykge1xyXG4gICAgICBzYW1lID0gdHJ1ZTtcclxuICAgICAgaWYgKGVuZCkge1xyXG4gICAgICAgIHNhbWUgPSBFeHByZXNzaW9uRXZhbHVhdG9yLm9wX2xpa2VfY21wKHB0ci5zdWJzdHIoaiksIG1hc2spO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBtYXNrLmxlbmd0aCAmJiBzYW1lOyBpKyspIHtcclxuICAgICAgICAgIC8vIElmIGFscmVhZHkgcmVhY2hlZCBhdCB0aGUgZW5kIG9mIHNvdXJjZSBzdHJpbmcsIHJldHVybiBmYWxzZS5cclxuICAgICAgICAgIGlmIChqICsgaSA9PT0gc291cmNlLkxlbmd0aCkge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBzYW1lID0gKG1hc2suY2hhckF0KGkpID09PSBFeHByZXNzaW9uRXZhbHVhdG9yLlFVRVNUSU9OX0NIUiB8fCBtYXNrLmNoYXJBdChpKSA9PT0gcHRyLmNoYXJBdChqICsgaSkpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKHNhbWUpIHtcclxuICAgICAgc291cmNlLlJlbW92ZSgwLCBzb3VyY2UuTGVuZ3RoKTtcclxuICAgICAgc291cmNlLkFwcGVuZChwdHIuc3Vic3RyKGogKyBpIC0gMSkpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHNhbWU7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGV4cF9nZXRfdmFyXzEodmFsMTogRXhwVmFsLCByZXNWYWw6IEV4cFZhbCk6IHZvaWQge1xyXG4gICAgbGV0IGZsZE5hbWU6IHN0cmluZyA9IHZhbDEuU3RyVmFsO1xyXG4gICAgbGV0IGZsZDogRmllbGQgPSAoPFRhc2tCYXNlPnRoaXMuRXhwVGFzaykuZ2V0RmllbGRCeU5hbWUoZmxkTmFtZSk7XHJcblxyXG4gICAgaWYgKGZsZCA9PT0gbnVsbCkge1xyXG4gICAgICBzdXBlci5TZXROVUxMKHJlc1ZhbCwgU3RvcmFnZUF0dHJpYnV0ZS5OT05FKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIGlmIGZsZCBpcyBub3QgZXhwb3NlZCB0byBjbGllbnQgdGhlbiBhbGVydCB3aXRoIGVycm9yIG1lc3NhZ2UgYW5kIHJldHVybiBudWxsXHJcbiAgICBpZiAoZmxkLklzRXhwb3NlZFRvQ2xpZW50ID09PSBmYWxzZSkge1xyXG4gICAgICBsZXQgc2I6IFN0cmluZ0J1aWxkZXIgPSBuZXcgU3RyaW5nQnVpbGRlcigpO1xyXG4gICAgICBzYi5BcHBlbmQoTlN0cmluZy5Gb3JtYXQoJ0Vycm9yOiBWYXJpYWJsZSBcXCd7MH1cXCcgaXMgbm90IGV4cG9zZWQgdG8gY2xpZW50LicsIGZsZC5nZXRWYXJOYW1lKCkpKTtcclxuICAgICAgYWxlcnQoc2IuVG9TdHJpbmcoKSk7XHJcbiAgICAgIHJlc1ZhbC5Jc051bGwgPSB0cnVlO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IGZsZFZhbHVlOiBzdHJpbmcgPSBmbGQuZ2V0VmFsdWUodHJ1ZSk7XHJcbiAgICByZXNWYWwuSXNOdWxsID0gZmxkLmlzTnVsbCgpO1xyXG4gICAgLy8gY3RybCA9IGZsZC5nZXRDb250cm9sKCk7XHJcbiAgICAvLyBwaWMgPSAoY3RybCA9PSBudWxsKSA/IG51bGwgOiBjdHJsLmdldFBJQygpO1xyXG4gICAgc3VwZXIuU2V0VmFsKHJlc1ZhbCwgZmxkLmdldFR5cGUoKSwgZmxkVmFsdWUsIG51bGwpO1xyXG4gIH1cclxuXHJcblxyXG4gIHByaXZhdGUgZXhwX2dldF9pbmR4KHZhbDE6IEV4cFZhbCwgcmVzVmFsOiBFeHBWYWwpOiB2b2lkIHtcclxuICAgIGxldCBpbmRleDogbnVtYmVyID0gKDxUYXNrQmFzZT4gdGhpcy5FeHBUYXNrLkdldENvbnRleHRUYXNrKCkpLmdldEluZGV4T2ZGaWVsZEJ5TmFtZSh2YWwxLlN0clZhbCk7XHJcbiAgICBzdXBlci5Db25zdHJ1Y3RNYWdpY051bShyZXNWYWwsIGluZGV4LCBTdG9yYWdlQXR0cmlidXRlLk5VTUVSSUMpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIGdldCBuZWVkZWQgRmllbGQgZnJvbSB2YXIgZnVuY3Rpb25zXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcIml0bVwiPm51bWJlciBvZiBpdGVtXHJcbiAgLy8vIDwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPiBmaWVsZCAgZnJvbSB3aGljaCBhbiBldmVudCB3YXMgdHJpZ2dlcmVkIG9yIGZpZWxkIG9mIGl0bSBpbmRleCBvZiB0aGUgdmFyaWFibGVcclxuICAvLy8gPC9yZXR1cm5zPlxyXG4gIGdldEZpZWxkKGl0bTogbnVtYmVyKTogRmllbGQge1xyXG4gICAgbGV0IGZsZDogRmllbGQgPSAoaXRtICE9PSBFeHByZXNzaW9uRXZhbHVhdG9yLlRSSUdHRVJfVEFTSykgPyAoKDxUYXNrQmFzZT50aGlzLkV4cFRhc2spLmN0bF9pdG1fMl9wYXJlbnRfdmVlKGl0bSAtIDEpKSA6IEFjY2Vzc0hlbHBlci5ldmVudHNNYW5hZ2VyLmdldEN1cnJGaWVsZCgpO1xyXG4gICAgcmV0dXJuIGZsZDtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cIml0bVwiPjwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPjwvcmV0dXJucz5cclxuICBwcml2YXRlIEdldEZpZWxkT2ZDb250ZXh0VGFzayhpdG06IG51bWJlcik6IEZpZWxkIHtcclxuICAgIHJldHVybiAoaXRtICE9PSBFeHByZXNzaW9uRXZhbHVhdG9yLlRSSUdHRVJfVEFTSykgPyAoKDxUYXNrQmFzZT50aGlzLkV4cFRhc2suR2V0Q29udGV4dFRhc2soKSkuY3RsX2l0bV8yX3BhcmVudF92ZWUoaXRtIC0gMSkpIDogQWNjZXNzSGVscGVyLmV2ZW50c01hbmFnZXIuZ2V0Q3VyckZpZWxkKCk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgcmVtb3ZlIHNwYWNlcyBmcm9tIHRoZSBlZGdlcyBvZiB0aGUgc3RyaW5nXHJcbiAgLy8vICAgdGhpcyBpcyBhIGhpZ2ggcGVyZm9ybWFuY2UgaW1wbGVtZW50YXRpb24gdGhhdCBkb2VzIG5vdCBjcmVhdGUgdW5uZWNlc3NhcnkgU3RyaW5nc1xyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJzXCI+dGhlIHNvdXJjZSBzdHJpbmc8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwidHlwZVwiPkxlZnQsIFJpZ2h0LCBCb3RoPC9wYXJhbT5cclxuICBwcml2YXRlIHN0YXRpYyB0cmltU3RyKHM6IHN0cmluZywgdHlwZTogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIGxldCBsOiBudW1iZXIgPSAwO1xyXG5cclxuICAgIGlmIChOU3RyaW5nLklzTnVsbE9yRW1wdHkocykpXHJcbiAgICAgIHJldHVybiBzO1xyXG5cclxuXHJcbiAgICBsZXQgcjogbnVtYmVyID0gcy5sZW5ndGggLSAxO1xyXG5cclxuICAgIC8vIHRyaW0gdGhlIGxlZnQgc2lkZVxyXG4gICAgaWYgKHR5cGUgIT09ICdSJykge1xyXG4gICAgICB3aGlsZSAobCA8IHMubGVuZ3RoICYmIHMuY2hhckF0KGwpID09PSAnICcpXHJcbiAgICAgICAgbCsrO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIHRyaW0gdGhlIHJpZ2h0IHNpZGVcclxuICAgIGlmICh0eXBlICE9PSAnTCcpIHtcclxuICAgICAgd2hpbGUgKHIgPj0gbCAmJiBzLmNoYXJBdChyKSA9PT0gJyAnKVxyXG4gICAgICAgIHItLTtcclxuICAgIH1cclxuXHJcbiAgICByKys7IC8vIHBvaW50IHRoZSByaWdodCBib3VuZCBvZiB0aGUgc3RyaW5nIChleGNsdXNpdmUpXHJcbiAgICByZXR1cm4gciA+IGwgPyBzLnN1YnN0cihsLCAocikgLSAobCkpIDogJyc7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgY29tcGFyZSAyIG1hZ2ljIHZhbHVlcyBhbmQgcmV0dXJuIHRydWUgaWYgdGhleSBhcmUgZXF1YWxcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiYVZhbFwiPnRoZSBmaXJzdCB2YWx1ZSB0byBjb21wYXJlPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImFJc051bGxcIj50cnVlIGlmIHRoZSBmaXJzdCB2YWx1ZSBpcyBudWxsPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImFEYXRhVHlwZVwiPnRoZSBkYXRhIHR5cGUgb2YgdGhlIGZpcnN0IHZhbHVlPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImJWYWxcIj50aGUgc2Vjb25kIHZhbHVlIHRvIGNvbXBhcmU8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiYklzTnVsbFwiPnRydWUgaWYgdGhlIHNlY29uZCB2YWx1ZSBpcyBudWxsPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImJEYXRhVHlwZVwiPnRoZSBkYXRhIHR5cGUgb2YgdGhlIHNlY29uZCB2YWx1ZTwvcGFyYW0+XHJcbiAgc3RhdGljIG1nVmFsc0VxdWFsKGFWYWw6IHN0cmluZywgYUlzTnVsbDogYm9vbGVhbiwgYURhdGFUeXBlOiBTdG9yYWdlQXR0cmlidXRlLCBiVmFsOiBzdHJpbmcsIGJJc051bGw6IGJvb2xlYW4sIGJEYXRhVHlwZTogU3RvcmFnZUF0dHJpYnV0ZSk6IGJvb2xlYW4ge1xyXG4gICAgbGV0IGE6IEV4cFZhbCA9IG51bGw7XHJcbiAgICBsZXQgYjogRXhwVmFsID0gbnVsbDtcclxuICAgIGxldCByZXN1bHQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgICAvLyBpZiBvbmUgb2YgYVZhbCBvciBiVmFsIGhhcyBhIG51bGwgSmF2YSB2YWx1ZSBhbmQgaGFzIGEgYm9vbGVhbiBkYXRhIHR5cGVcclxuICAgIC8vIHRoZW4gZG9uJ3QgZW50ZXIgdGhlIFwiaWYgYmxvY2tcIiBiZWNhdXNlIHRoZSB2YWxfY21wX2FueSgpIG1ldGhvZCB3aWxsXHJcbiAgICAvLyB0cmVhdCB0aGF0IHZhbHVlIGFzIGZhbHNlLCBzbyBpdCBtaWdodCByZXR1cm4gYSBiYWQgcmVzdWx0XHJcbiAgICBpZiAoYUlzTnVsbCA9PT0gYklzTnVsbCAmJiAoYUlzTnVsbCB8fCAoYVZhbCAhPT0gbnVsbCAmJiBiVmFsICE9PSBudWxsKSkpIHtcclxuICAgICAgdHJ5IHtcclxuICAgICAgICBhID0gbmV3IEV4cFZhbChhRGF0YVR5cGUsIGFJc051bGwsIGFWYWwpO1xyXG4gICAgICAgIGIgPSBuZXcgRXhwVmFsKGJEYXRhVHlwZSwgYklzTnVsbCwgYlZhbCk7XHJcbiAgICAgICAgcmVzdWx0ID0gKEV4cHJlc3Npb25FdmFsdWF0b3IudmFsX2NtcF9hbnkoYSwgYiwgZmFsc2UpID09PSAwKTtcclxuICAgICAgfSBjYXRjaCAobnVsbFZhbHVlRXhjZXB0aW9uKSB7XHJcbiAgICAgICAgLy8gUUNSIDk4MzMzMiBpZiBib3RoIHZhbHVlcyBhcmUgbnVsbCB0aGVuIHRoZXkgYXJlIGVxdWFsXHJcbiAgICAgICAgaWYgKG51bGxWYWx1ZUV4Y2VwdGlvbiBpbnN0YW5jZW9mIE51bGxWYWx1ZUV4Y2VwdGlvbikge1xyXG4gICAgICAgICAgaWYgKGEuSXNOdWxsICYmIGIuSXNOdWxsKVxyXG4gICAgICAgICAgICByZXN1bHQgPSB0cnVlO1xyXG4gICAgICAgIH0gZWxzZVxyXG4gICAgICAgICAgdGhyb3cgbnVsbFZhbHVlRXhjZXB0aW9uO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIGZ1bnRpb24gdGhhdCBnZXQgdGhlIGxvZ2ljYWwgbmFtZSB0cmFuc2xhdGVcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwic3RyXCI+PC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInJlc1ZhbFwiPjwvcGFyYW0+XHJcbiAgcHJpdmF0ZSBldmFsX29wX3RyYW5zbGF0ZShzdHI6IEV4cFZhbCwgcmVzVmFsOiBFeHBWYWwpOiB2b2lkIHtcclxuICAgIHJlc1ZhbC5BdHRyID0gU3RvcmFnZUF0dHJpYnV0ZS5BTFBIQTtcclxuICAgIHJlc1ZhbC5TdHJWYWwgPSAnJztcclxuXHJcbiAgICBsZXQgbmFtZTogc3RyaW5nID0gc3RyLlN0clZhbDtcclxuICAgIGlmIChOU3RyaW5nLklzTnVsbE9yRW1wdHkobmFtZSkpXHJcbiAgICAgIHN1cGVyLlNldE5VTEwocmVzVmFsLCBTdG9yYWdlQXR0cmlidXRlLkFMUEhBKTtcclxuICAgIGVsc2VcclxuICAgICAgcmVzVmFsLlN0clZhbCA9IEVudlBhcmFtc1RhYmxlLkluc3RhbmNlLnRyYW5zbGF0ZShuYW1lKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBmdW5jdGlvbiB0aGF0IGdldCBhIHN0cmluZyBhbmQgZm9ybWF0XHJcbiAgLy8vICAgYW5kIGNoYW5nZSB0aGUgc3RyaW5nIHRvIGJlIGNvbnZlcnQgYXMgdGhlIGZvcm1hdFxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgcHJpdmF0ZSBldmFsX29wX2FzdHIoc291cmNlOiBFeHBWYWwsIGZvcm1hdDogRXhwVmFsLCByZXNWYWw6IEV4cFZhbCk6IHZvaWQge1xyXG4gICAgcmVzVmFsLkF0dHIgPSBTdG9yYWdlQXR0cmlidXRlLlVOSUNPREU7XHJcblxyXG4gICAgaWYgKHNvdXJjZS5TdHJWYWwgPT09IG51bGwgfHwgZm9ybWF0LlN0clZhbCA9PT0gbnVsbCkge1xyXG4gICAgICBzdXBlci5TZXROVUxMKHJlc1ZhbCwgU3RvcmFnZUF0dHJpYnV0ZS5VTklDT0RFKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChmb3JtYXQuU3RyVmFsLmxlbmd0aCA+IDAgJiYgc291cmNlLlN0clZhbC5sZW5ndGggPiAwKSB7XHJcbiAgICAgIGxldCBwaWM6IFBJQyA9IG5ldyBQSUMoRXhwcmVzc2lvbkV2YWx1YXRvci5zZXRfYV9waWMoZm9ybWF0LlN0clZhbCksIFN0b3JhZ2VBdHRyaWJ1dGUuVU5JQ09ERSwgdGhpcy5FeHBUYXNrLmdldENvbXBJZHgoKSk7XHJcbiAgICAgIHJlc1ZhbC5TdHJWYWwgPSBEaXNwbGF5Q29udmVydG9yLkluc3RhbmNlLm1nMmRpc3Aoc291cmNlLlRvTWdWYWwoKSwgbnVsbCwgcGljLCBmYWxzZSwgZmFsc2UsIHRoaXMuRXhwVGFzay5nZXRDb21wSWR4KCksIHRydWUsIGZhbHNlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBjYWxjdWxhdGVzIHRoZSBhdHRyaWJ1dGUgb2YgYSB2ZWN0b3IgY2VsbHNcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwidmVjXCI+LSB0aGUgYWN0dWFsbCB2ZWN0b3Igbm90IGEgJ3ZhcicgbGl0ZXJhbCA8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwicmVzXCI+PC9wYXJhbT5cclxuICBwcml2YXRlIHN0YXRpYyBldmFsX29wX3ZlY0NlbGxBdHRyKHZlYzogRXhwVmFsLCByZXM6IEV4cFZhbCk6IHZvaWQge1xyXG4gICAgLy8gcmV0dXJuIHR5cGUgaXMgYWxsd2F5IGFscGhhXHJcbiAgICByZXMuQXR0ciA9IFN0b3JhZ2VBdHRyaWJ1dGUuQUxQSEE7XHJcbiAgICByZXMuSXNOdWxsID0gZmFsc2U7XHJcbiAgICBsZXQgYXR0cjogU3RvcmFnZUF0dHJpYnV0ZSA9IFN0b3JhZ2VBdHRyaWJ1dGUuTk9ORTtcclxuXHJcbiAgICAvLyBpZiB0aGUgdmVjdG9yIGlzIG51bGwgdGFrZSB0aGUgdHlwZSBmcm9tIHRoZSBmaWVsZFxyXG4gICAgLy8gUUNSIDkyODMwOCAmJiA0MjY2MThcclxuICAgIGlmICh2ZWMuSXNOdWxsICYmIHZlYy5WZWN0b3JGaWVsZCAhPT0gbnVsbCkge1xyXG4gICAgICBhdHRyID0gdmVjLlZlY3RvckZpZWxkLmdldENlbGxzVHlwZSgpO1xyXG4gICAgfSBlbHNlIGlmIChFeHByZXNzaW9uRXZhbHVhdG9yLklzVmFsaWRWZWN0b3IodmVjKSlcclxuICAgIC8vIGlmIGl0IGEgdmFsaWQgdmVjdG9yIHRha2UgZnJvbSB2ZWN0b3JcclxuICAgIHtcclxuICAgICAgYXR0ciA9IFZlY3RvclR5cGUuZ2V0Q2VsbHNBdHRyKHZlYy5TdHJWYWwpO1xyXG4gICAgfVxyXG5cclxuICAgIHJlcy5TdHJWYWwgPSAnJyArIEV4cHJlc3Npb25FdmFsdWF0b3IuR2V0QXR0cmlidXRlQ2hhcihhdHRyKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICByZXR1cm5zIGEgY2VsbHMgdmFsdWUgZnJvbSBhIHZlY3RvclxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJ2ZWNcIj4tIHRoZSBhY3R1YWxsIHZlY3RvciBub3QgYSAndmFyJyBsaXRlcmFsPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImNlbGxcIj4tIHRoZSBjZWxsIGluZGV4IHRvIGdldCA8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwicmVzXCI+PC9wYXJhbT5cclxuICBwcml2YXRlIGV2YWxfb3BfdmVjR2V0KHZlYzogRXhwVmFsLCBjZWxsOiBFeHBWYWwsIHJlczogRXhwVmFsKTogdm9pZCB7XHJcbiAgICBpZiAoY2VsbC5NZ051bVZhbCA9PT0gbnVsbCB8fCAhRXhwcmVzc2lvbkV2YWx1YXRvci5Jc1ZhbGlkVmVjdG9yKHZlYykgfHwgY2VsbC5NZ051bVZhbC5OVU1fMl9MT05HKCkgPD0gMCkge1xyXG4gICAgICByZXMuSXNOdWxsID0gdHJ1ZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGxldCBjZWxsQXR0cjogU3RvcmFnZUF0dHJpYnV0ZTtcclxuICAgICAgbGV0IGNlbGxWYWw6IHN0cmluZztcclxuICAgICAgaWYgKHZlYy5WZWN0b3JGaWVsZCAhPT0gbnVsbCkge1xyXG4gICAgICAgIGNlbGxBdHRyID0gdmVjLlZlY3RvckZpZWxkLmdldENlbGxzVHlwZSgpO1xyXG4gICAgICAgIGNlbGxWYWwgPSAoPEZpZWxkPnZlYy5WZWN0b3JGaWVsZCkuZ2V0VmVjQ2VsbFZhbHVlKGNlbGwuTWdOdW1WYWwuTlVNXzJfTE9ORygpKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBsZXQgdmVjdG9yID0gbmV3IFZlY3RvclR5cGUodmVjLlN0clZhbCk7XHJcbiAgICAgICAgY2VsbFZhbCA9IHZlY3Rvci5nZXRWZWNDZWxsKGNlbGwuTWdOdW1WYWwuTlVNXzJfTE9ORygpKTtcclxuICAgICAgICBjZWxsQXR0ciA9IHZlY3Rvci5nZXRDZWxsc0F0dHIoKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gY2hlY2sgdGhlIHJldHVybiB2YWx1ZSB0eXBlIHR5cGVcclxuICAgICAgaWYgKGNlbGxWYWwgPT0gbnVsbClcclxuICAgICAgICByZXMuSXNOdWxsID0gdHJ1ZTtcclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgc3dpdGNoIChjZWxsQXR0cikge1xyXG4gICAgICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLkFMUEhBOlxyXG4gICAgICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLk1FTU86XHJcbiAgICAgICAgICAgIHJlcy5BdHRyID0gU3RvcmFnZUF0dHJpYnV0ZS5BTFBIQTtcclxuICAgICAgICAgICAgcmVzLlN0clZhbCA9IGNlbGxWYWw7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5VTklDT0RFOlxyXG4gICAgICAgICAgICByZXMuQXR0ciA9IGNlbGxBdHRyO1xyXG4gICAgICAgICAgICByZXMuU3RyVmFsID0gY2VsbFZhbDtcclxuICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLkJMT0I6XHJcbiAgICAgICAgICAgIHJlcy5BdHRyID0gY2VsbEF0dHI7XHJcbiAgICAgICAgICAgIHJlcy5TdHJWYWwgPSBjZWxsVmFsO1xyXG4gICAgICAgICAgICByZXMuSW5jbHVkZUJsb2JQcmVmaXggPSB0cnVlO1xyXG4gICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuQkxPQl9WRUNUT1I6XHJcbiAgICAgICAgICAgIHJlcy5BdHRyID0gY2VsbEF0dHI7XHJcbiAgICAgICAgICAgIHJlcy5TdHJWYWwgPSBjZWxsVmFsO1xyXG4gICAgICAgICAgICByZXMuSW5jbHVkZUJsb2JQcmVmaXggPSB0cnVlO1xyXG4gICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuTlVNRVJJQzpcclxuICAgICAgICAgICAgcmVzLkF0dHIgPSBjZWxsQXR0cjtcclxuICAgICAgICAgICAgcmVzLk1nTnVtVmFsID0gbmV3IE5VTV9UWVBFKGNlbGxWYWwpO1xyXG4gICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuREFURTpcclxuICAgICAgICAgICAgcmVzLkF0dHIgPSBjZWxsQXR0cjtcclxuICAgICAgICAgICAgcmVzLk1nTnVtVmFsID0gbmV3IE5VTV9UWVBFKGNlbGxWYWwpO1xyXG4gICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuVElNRTpcclxuICAgICAgICAgICAgcmVzLkF0dHIgPSBjZWxsQXR0cjtcclxuICAgICAgICAgICAgcmVzLk1nTnVtVmFsID0gbmV3IE5VTV9UWVBFKGNlbGxWYWwpO1xyXG4gICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuQk9PTEVBTjpcclxuICAgICAgICAgICAgcmVzLkF0dHIgPSBjZWxsQXR0cjtcclxuICAgICAgICAgICAgcmVzLkJvb2xWYWwgPSBEaXNwbGF5Q29udmVydG9yLnRvQm9vbGVhbihjZWxsVmFsKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEFwcGxpY2F0aW9uRXhjZXB0aW9uKCdpbiBFeHByZXNzaW9uRXZhbHVhdG9yLmV2YWxfb3BfdmVjR2V0IHVua25vd2VuIHN0b3JhZ2UgdHlwZTogJyArXHJcbiAgICAgICAgICAgICAgY2VsbEF0dHIpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHJldHVybnMgdGhlIHNpemUgb2YgdGhlIHZlY3RvclxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJ2ZWNcIj4tIHRoZSBhY3R1YWxsIHZlY3RvciBub3QgYSAndmFyJyBsaXRlcmFsPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInJlc1wiPjwvcGFyYW0+XHJcbiAgcHJpdmF0ZSBldmFsX29wX3ZlY1NpemUodmVjOiBFeHBWYWwsIHJlczogRXhwVmFsKTogdm9pZCB7XHJcbiAgICAvLyB0aGUgcmVzdWx0ZSB3aWxsIGFsd2F5cyBiZSBudW1lcmljXHJcbiAgICByZXMuQXR0ciA9IFN0b3JhZ2VBdHRyaWJ1dGUuTlVNRVJJQztcclxuICAgIHJlcy5Jc051bGwgPSBmYWxzZTtcclxuICAgIHJlcy5NZ051bVZhbCA9IG5ldyBOVU1fVFlQRSgpO1xyXG5cclxuICAgIHJlcy5NZ051bVZhbC5OVU1fNF9MT05HKC0xKTsgLy8gaWYgdGhlcmUgaXMgYSBwcm9ibGVtIHJldHVybiAtMVxyXG4gICAgLy8gUUNSIDQyNjYxOFxyXG4gICAgaWYgKEV4cHJlc3Npb25FdmFsdWF0b3IuSXNWYWxpZFZlY3Rvcih2ZWMpKVxyXG4gICAgICByZXMuTWdOdW1WYWwuTlVNXzRfTE9ORyg8bnVtYmVyPm5ldyBWZWN0b3JUeXBlKHZlYy5TdHJWYWwpLmdldFZlY1NpemUoKSk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgc2V0cyB0aGUgdmFsdWUgb2YgYSBnaXZlbiBjZWxsXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInZlY1wiPi0gIGEgJ3ZhcicgbGl0ZXJhbCBwb2ludGluZyB0byB0aGUgdmVjdG9yPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImNlbGxcIj4tIHRoZSBjZWxsIGluZGV4IHRvIHNldDwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJuZXdWYWxcIj4tIHRoZSB2YWx1ZSB0byBiZSBzZXQ8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwicmVzXCI+PC9wYXJhbT5cclxuICBwcml2YXRlIGFzeW5jIGV2YWxfb3BfdmVjU2V0KHZlYzogRXhwVmFsLCBjZWxsOiBFeHBWYWwsIG5ld1ZhbDogRXhwVmFsLCByZXM6IEV4cFZhbCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgLy8gcmVzdWx0IGlzIGxvZ2ljYWxcclxuICAgIHJlcy5BdHRyID0gU3RvcmFnZUF0dHJpYnV0ZS5CT09MRUFOO1xyXG4gICAgcmVzLkJvb2xWYWwgPSBmYWxzZTtcclxuXHJcbiAgICBpZiAodmVjLk1nTnVtVmFsICE9PSBudWxsICYmIGNlbGwuTWdOdW1WYWwgIT09IG51bGwpIHtcclxuICAgICAgbGV0IHZlY0ZpZWxkOiBGaWVsZDtcclxuICAgICAgdHJ5IHtcclxuICAgICAgICB2ZWNGaWVsZCA9ICg8RmllbGQ+IHRoaXMuZ2V0RmllbGQodmVjLk1nTnVtVmFsLk5VTV8yX0xPTkcoKSkpO1xyXG4gICAgICB9IGNhdGNoIChleCkge1xyXG4gICAgICAgIGlmIChleCBpbnN0YW5jZW9mIEV4Y2VwdGlvbikge1xyXG4gICAgICAgICAgTG9nZ2VyLkluc3RhbmNlLldyaXRlRXhjZXB0aW9uVG9Mb2coZXgpO1xyXG4gICAgICAgICAgdmVjRmllbGQgPSBudWxsO1xyXG4gICAgICAgIH0gZWxzZVxyXG4gICAgICAgICAgdGhyb3cgZXg7XHJcbiAgICAgIH1cclxuXHJcblxyXG4gICAgICBpZiAoKFN0b3JhZ2VBdHRyaWJ1dGVDaGVjay5Jc1R5cGVBbHBoYU9yVW5pY29kZSh2ZWNGaWVsZC5nZXRDZWxsc1R5cGUoKSkgJiYgU3RvcmFnZUF0dHJpYnV0ZUNoZWNrLklzVHlwZUFscGhhT3JVbmljb2RlKG5ld1ZhbC5BdHRyKSkgfHwgKHZlY0ZpZWxkICE9PSBudWxsICYmICh2ZWNGaWVsZC5Jc1ZpcnR1YWwgfHwgdmVjRmllbGQuZ2V0VGFzaygpLmdldE1vZGUoKSA9PT0gQ29uc3RhbnRzLlRBU0tfTU9ERV9DUkVBVEUgfHwgdmVjRmllbGQuRGJNb2RpZmlhYmxlKSAmJiB2ZWNGaWVsZC5nZXRUeXBlKCkgPT09IFN0b3JhZ2VBdHRyaWJ1dGUuQkxPQl9WRUNUT1IgJiYgKFN0b3JhZ2VBdHRyaWJ1dGVDaGVjay5pc1RoZVNhbWVUeXBlKHZlY0ZpZWxkLmdldENlbGxzVHlwZSgpLCBuZXdWYWwuQXR0cikgfHwgbmV3VmFsLklzTnVsbCB8fCAoU3RvcmFnZUF0dHJpYnV0ZUNoZWNrLklzVHlwZUFscGhhT3JVbmljb2RlKG5ld1ZhbC5BdHRyKSAmJiB2ZWNGaWVsZC5nZXRDZWxsc1R5cGUoKSA9PT0gU3RvcmFnZUF0dHJpYnV0ZS5CTE9CKSkpKVxyXG4gICAgICAvLyBhbGxvdyBhbHBoYSBpbnRvIGJsb2IgcnRmXHJcbiAgICAgIHtcclxuICAgICAgICAvLyBRQ1IgNzQ1NTQxXHJcbiAgICAgICAgLy8gY29udmVydCB0aGUgYWxwaGEgZGF0YSBpbnRvIGJsb2JcclxuICAgICAgICBpZiAoU3RvcmFnZUF0dHJpYnV0ZUNoZWNrLklzVHlwZUFscGhhT3JVbmljb2RlKG5ld1ZhbC5BdHRyKSAmJiB2ZWNGaWVsZC5nZXRDZWxsc1R5cGUoKSA9PT0gU3RvcmFnZUF0dHJpYnV0ZS5CTE9CKSB7XHJcbiAgICAgICAgICB0aGlzLkNvbnZlcnRFeHBWYWwobmV3VmFsLCBTdG9yYWdlQXR0cmlidXRlLkJMT0IpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmVzLkJvb2xWYWwgPSBhd2FpdCB2ZWNGaWVsZC5zZXRDZWxsVmVjVmFsdWUoY2VsbC5NZ051bVZhbC5OVU1fMl9MT05HKCksIG5ld1ZhbC5Ub01nVmFsKCksIG5ld1ZhbC5Jc051bGwpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgcmV0dXJucyB0aGUgbnVtYmVyIG9mIHRva2VucyBpbiB0aGUgc3RyaW5nIGFjb3VyZGluZyB0byB0aGUgZ2l2ZW4gZGVsaW1ldGVyc1xyXG4gIC8vLyAgIElmIHRoZSBTb3VyY2VTdHJpbmcgaXMgZW1wdHksIHJldHVybiB2YWx1ZSBpcyAwLlxyXG4gIC8vLyAgIElmIHRoZSBkZWxpbWl0ZXIgd2FzIG5vdCBmb3VuZCAgaW4gdGhlIFNvdXJjZVN0cmluZyBvciB3YXMgZW1wdHksIHJldHVybiB2YWx1ZSBpcyAxLlxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJzb3VyY2VTdHJpbmdcIj4tIHRoZSBkYXRhIHN0cmluZzwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJkZWxpbWl0ZXJcIj50aGUgZGVsaW1ldGVyPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInJlc1ZhbFwiPjwvcGFyYW0+XHJcbiAgcHJpdmF0ZSBldmFsX29wX3N0clRva2VuQ250KHNvdXJjZVN0cmluZzogRXhwVmFsLCBkZWxpbWl0ZXI6IEV4cFZhbCwgcmVzVmFsOiBFeHBWYWwpOiB2b2lkIHtcclxuICAgIC8vIHRoZSByZXR1cm4gdmFsdWUgaXMgYWx3YXlzIG51bWVyaWNcclxuICAgIHJlc1ZhbC5BdHRyID0gU3RvcmFnZUF0dHJpYnV0ZS5OVU1FUklDO1xyXG4gICAgcmVzVmFsLk1nTnVtVmFsID0gbmV3IE5VTV9UWVBFKCk7XHJcblxyXG4gICAgLy8gdGhlIHJlc3VsdFxyXG4gICAgbGV0IHJlczogbnVtYmVyID0gMDtcclxuXHJcbiAgICAvLyBjb250aW51ZSBvbmx5IGlmIHRoZSBzb3VyY2Ugc3RyaW5nIGV4aXN0cyBhbmQgaXMgbm90IGVtcHR5XHJcbiAgICBpZiAoIXNvdXJjZVN0cmluZy5Jc051bGwgJiYgc291cmNlU3RyaW5nLlN0clZhbCAhPT0gbnVsbCAmJiBOU3RyaW5nLlRyaW1FbmQoc291cmNlU3RyaW5nLlN0clZhbCwgdGhpcy5fY2hhcnNUb1RyaW0pLmxlbmd0aCAhPT0gMCkge1xyXG4gICAgICAvLyBpZiB0aGUgZGVsaW1pdGVyIGlzIGVtcHR5XHJcbiAgICAgIGlmIChkZWxpbWl0ZXIuSXNOdWxsIHx8IE5TdHJpbmcuVHJpbUVuZChkZWxpbWl0ZXIuU3RyVmFsLCB0aGlzLl9jaGFyc1RvVHJpbSkubGVuZ3RoID09PSAwKVxyXG4gICAgICAgIHJlcyA9IDE7XHJcbiAgICAgIC8vIGZpbmQgdGhlIGRlbGltaXRlciBpbiB0aGUgc291cmNlIHN0cmluZ1xyXG4gICAgICBlbHNlIHtcclxuICAgICAgICAvLyBpZiB0aGUgZGVsaW1pdGVyIHdhcyBub3QgZm91bmQgaW4gdGhlIGRhdGFcclxuICAgICAgICBsZXQgdG9rZW5zU2l6ZTogbnVtYmVyID0gdGhpcy5zdHJUb2tlbkNvdW50KHNvdXJjZVN0cmluZy5TdHJWYWwsIGRlbGltaXRlci5TdHJWYWwpO1xyXG4gICAgICAgIGlmICh0b2tlbnNTaXplID09PSAwKVxyXG4gICAgICAgICAgcmVzID0gMTtcclxuICAgICAgICBlbHNlXHJcbiAgICAgICAgICByZXMgPSB0b2tlbnNTaXplO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICAvLyByZXR1cm4gdGhlIHJlcyB2YWx1ZVxyXG4gICAgcmVzVmFsLk1nTnVtVmFsLk5VTV80X0xPTkcocmVzKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIGluZGV4IG9mIHRoZSBnaXZlbiB0b2tlbiB3aXRoaW4gdGhlIHNvdXJjZVxyXG4gIC8vLyAgIHN0cmluZyBvciAwIGlmIHRoZSB0b2tlbiB3YXMgbm90IGZvdW5kLlxyXG4gIC8vLyAgIElmIHRoZSBTb3VyY2VTdHJpbmcgb3IgdGhlIHRva2VuIGFyZSBlbXB0eSwgcmV0dXJuIHZhbHVlIGlzIDAuXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBwcml2YXRlIGV2YWxfb3Bfc3RyVG9rZW5JZHgoc291cmNlU3RyaW5nOiBFeHBWYWwsIHRva2VuOiBFeHBWYWwsIGRlbGltaXRlcjogRXhwVmFsLCByZXNWYWw6IEV4cFZhbCk6IHZvaWQge1xyXG4gICAgLy8gdGhlIHJldHVybiB2YWx1ZSBpcyBhbHdheXMgbnVtZXJpY1xyXG4gICAgcmVzVmFsLkF0dHIgPSBTdG9yYWdlQXR0cmlidXRlLk5VTUVSSUM7XHJcbiAgICByZXNWYWwuTWdOdW1WYWwgPSBuZXcgTlVNX1RZUEUoKTtcclxuXHJcbiAgICAvLyB0aGUgcmVzdWx0XHJcbiAgICBsZXQgcmVzOiBudW1iZXIgPSAwO1xyXG5cclxuICAgIC8vIGNvbnRpbnVlIG9ubHkgaWYgdGhlIHNvdXJjZSBzdHJpbmcgZXhpc3RzIGFuZCBpcyBub3QgZW1wdHlcclxuICAgIC8vIGFuZCB0aGUgdG9rZW4gZXhpc3QgYW5kIG5vdCBlbXB0eVxyXG4gICAgaWYgKCFzb3VyY2VTdHJpbmcuSXNOdWxsICYmIHNvdXJjZVN0cmluZy5TdHJWYWwgIT09IG51bGwgJiYgIXRva2VuLklzTnVsbCAmJiB0b2tlbi5TdHJWYWwgIT09IG51bGwgJiYgTlN0cmluZy5UcmltRW5kKHNvdXJjZVN0cmluZy5TdHJWYWwsIHRoaXMuX2NoYXJzVG9UcmltKS5sZW5ndGggIT09IDAgJiYgdG9rZW4uU3RyVmFsLnRyaW0oKS5sZW5ndGggPiAwKSB7XHJcblxyXG4gICAgICAvLyBpZiB0aGUgZGVsaW1pdGVyIGlzIGVtcHR5IGNoZWNrIGlmIHRoZSBkYXRhIGVxdWFscyB0byB0aGUgdG9rZW5cclxuICAgICAgaWYgKCFkZWxpbWl0ZXIuSXNOdWxsICYmIE5TdHJpbmcuVHJpbUVuZChkZWxpbWl0ZXIuU3RyVmFsLCB0aGlzLl9jaGFyc1RvVHJpbSkubGVuZ3RoICE9PSAwKVxyXG4gICAgICAgIHJlcyA9IHRoaXMuc3RyVG9rZW5JbmRleChzb3VyY2VTdHJpbmcuU3RyVmFsLCBkZWxpbWl0ZXIuU3RyVmFsLCB0b2tlbi5TdHJWYWwpO1xyXG5cclxuICAgICAgZWxzZSBpZiAoc291cmNlU3RyaW5nLlN0clZhbCA9PT0gdG9rZW4uU3RyVmFsKVxyXG4gICAgICAgIHJlcyA9IDE7XHJcbiAgICAgIGVsc2VcclxuICAgICAgICByZXMgPSAwO1xyXG4gICAgfVxyXG4gICAgLy8gcmV0dXJuIHRoZSByZXMgdmFsdWVcclxuICAgIHJlc1ZhbC5NZ051bVZhbC5OVU1fNF9MT05HKHJlcyk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vIEZpbmQgYSBnaXZlbiB0b2tlbiBpbmRleCBpbiBhIGdpdmVuIHN0cmluZyAoMSBiYXNlKVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwic291cmNlXCI+VGhlIHN0cmluZyB0byBzZWFyY2ggb248L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cImRlbGltaXRlclwiPlRoZSBkZWxpbWl0ZXI8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cInRva2VuXCI+VGhlIHRva2VuIHRvIHNlYXJjaDwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPjwvcmV0dXJucz5cclxuICBwcml2YXRlIHN0clRva2VuSW5kZXgoc291cmNlOiBzdHJpbmcsIGRlbGltaXRlcjogc3RyaW5nLCB0b2tlbjogc3RyaW5nKTogbnVtYmVyIHtcclxuICAgIC8vIGFkZCB0aGUgZGVsaW1pdGVyIGF0IHRoZSBmcm9udCBhbmQgZW5kIG9mIHRoZSBzdHJpbmcgYW5kIHRoZSB0b2tlblxyXG4gICAgLy8gdGhpcyB3aWxsIGhlbHAgdXMgaWYgZmluZGluZyB0b2tlbnMgdGhhdCBhcmUgYXQgdGhlIGJlZ2lubmluZy9lbmQgb2YgdGhlIHN0cmluZy5cclxuICAgIGxldCB0cmltRGVsaW06IHN0cmluZyA9IE5TdHJpbmcuVHJpbUVuZChkZWxpbWl0ZXIsIHRoaXMuX2NoYXJzVG9UcmltKTtcclxuICAgIGxldCB0cmltU291cmNlOiBzdHJpbmcgPSB0cmltRGVsaW0gKyBOU3RyaW5nLlRyaW1FbmQoc291cmNlLCB0aGlzLl9jaGFyc1RvVHJpbSkgKyB0cmltRGVsaW07XHJcbiAgICBsZXQgdHJpbVRva2VuOiBzdHJpbmcgPSAodG9rZW4gIT09IG51bGwpID8gTlN0cmluZy5UcmltRW5kKHRva2VuLCB0aGlzLl9jaGFyc1RvVHJpbSkgOiBudWxsO1xyXG5cclxuICAgIGlmICh0cmltVG9rZW4gPT09IG51bGwpXHJcbiAgICAgIHJldHVybiAwO1xyXG4gICAgLy8gc3Vycm91bmQgdGhlIHRva2VuIHdpdGggZGVsaW1pdGVyc1xyXG4gICAgdHJpbVRva2VuID0gdHJpbURlbGltICsgdHJpbVRva2VuICsgdHJpbURlbGltO1xyXG5cclxuICAgIGxldCB0b2tlbk9mZnNldDogbnVtYmVyID0gdHJpbVNvdXJjZS5pbmRleE9mKHRyaW1Ub2tlbik7XHJcblxyXG4gICAgaWYgKHRva2VuT2Zmc2V0ID09PSAtMSlcclxuICAgICAgcmV0dXJuIDA7XHJcbiAgICBlbHNlIHtcclxuICAgICAgLy8gVGhlIHRva2VuIGNvdW50IGlzIHRoZSBudW1iZXIgb2YgdG9rZW5zIHRpbGwgb3VyIHRva2VuIG9mZnNldCArMVxyXG4gICAgICAvLyBzaW5jZSB3ZSBhZGRlZCAxIHRva2VuIGJlZm9yZSB0aGUgc3RyaW5nLCB3ZSB3aWxsIGhhdmUgdG8gc3VidHJhY3QgMVxyXG4gICAgICBsZXQgdG9rZW5JbmRleDogbnVtYmVyID0gdGhpcy5zdHJUb2tlbkNvdW50KHRyaW1Tb3VyY2Uuc3Vic3RyKDAsIHRva2VuT2Zmc2V0ICsgdHJpbURlbGltLmxlbmd0aCksIHRyaW1EZWxpbSk7XHJcbiAgICAgIHRva2VuSW5kZXgtLTtcclxuICAgICAgcmV0dXJuIHRva2VuSW5kZXg7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vIENvdW50IHRoZSB0b2tlbnNcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cInNvdXJjZVwiPlRoZSBzdHJpbmcgdG8gc3BsaXQ8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cImRlbGltaXRlclwiPlRoZSBkZWxpbWl0cmVyPC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+PC9yZXR1cm5zPlxyXG4gIHByaXZhdGUgc3RyVG9rZW5Db3VudChzb3VyY2U6IHN0cmluZywgZGVsaW1pdGVyOiBzdHJpbmcpOiBudW1iZXIge1xyXG4gICAgbGV0IGNvdW50ZXI6IG51bWJlciA9IDE7XHJcbiAgICBsZXQgdHJpbURlbGltOiBzdHJpbmcgPSBOU3RyaW5nLlRyaW1FbmQoZGVsaW1pdGVyLCB0aGlzLl9jaGFyc1RvVHJpbSk7XHJcbiAgICBsZXQgdHJpbVNvdXJjZTogc3RyaW5nID0gTlN0cmluZy5UcmltRW5kKHNvdXJjZSwgdGhpcy5fY2hhcnNUb1RyaW0pO1xyXG5cclxuICAgIGxldCBkZWxpbUxlbmd0aDogbnVtYmVyID0gdHJpbURlbGltLmxlbmd0aDtcclxuICAgIGxldCBkYXRhOiBzdHJpbmcgPSB0cmltU291cmNlO1xyXG4gICAgbGV0IGZyb21PZmZzZXQ6IG51bWJlciA9IDA7XHJcbiAgICBsZXQgZGVsaW1pdGVyT2Zmc2V0OiBudW1iZXIgPSAwO1xyXG5cclxuICAgIC8vIGVtcHR5IHN0cmluZy4gbm8gdG9rZW5zLlxyXG4gICAgaWYgKHNvdXJjZSA9PT0gbnVsbCB8fCBzb3VyY2UubGVuZ3RoID09PSAwKVxyXG4gICAgICByZXR1cm4gMDtcclxuXHJcbiAgICBkZWxpbWl0ZXJPZmZzZXQgPSBkYXRhLmluZGV4T2YodHJpbURlbGltLCBmcm9tT2Zmc2V0KTtcclxuICAgIC8vIGZpbmQgdGhlIG51bWJlciBvZiB0b2tlbnMgYnkgY291bnRpbmcgdGhlIGRlbGltaXRlcnMgKyAxXHJcbiAgICB3aGlsZSAoZGVsaW1pdGVyT2Zmc2V0ID49IDApIHtcclxuICAgICAgY291bnRlcisrO1xyXG5cclxuICAgICAgLy8gc3RhcnQgbmV4dCBzZWFyY2ggYWZ0ZXIgdGhlIGRlbGltaXRlclxyXG4gICAgICBmcm9tT2Zmc2V0ID0gZGVsaW1pdGVyT2Zmc2V0ICsgZGVsaW1MZW5ndGg7XHJcblxyXG4gICAgICBkZWxpbWl0ZXJPZmZzZXQgPSBkYXRhLmluZGV4T2YodHJpbURlbGltLCBmcm9tT2Zmc2V0KTtcclxuICAgIH1cclxuICAgIHJldHVybiBjb3VudGVyO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBldmFsX29wX2Jsb2JzaXplKHJlc1ZhbDogRXhwVmFsLCBibG9iVmFsOiBFeHBWYWwpOiB2b2lkIHtcclxuICAgIGxldCBzaXplOiBudW1iZXIgPSAwO1xyXG4gICAgc3dpdGNoIChibG9iVmFsLkF0dHIpIHtcclxuICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLkJMT0JfVkVDVE9SOlxyXG4gICAgICAgIHNpemUgPSA8bnVtYmVyPlZlY3RvclR5cGUuZ2V0VmVjU2l6ZShibG9iVmFsLlN0clZhbCk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5CTE9COlxyXG4gICAgICAgIHNpemUgPSBCbG9iVHlwZS5nZXRCbG9iU2l6ZShibG9iVmFsLlN0clZhbCk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgICByZXNWYWwuQXR0ciA9IFN0b3JhZ2VBdHRyaWJ1dGUuTlVNRVJJQztcclxuICAgIHJlc1ZhbC5NZ051bVZhbCA9IG5ldyBOVU1fVFlQRSgpO1xyXG4gICAgcmVzVmFsLk1nTnVtVmFsLk5VTV80X0xPTkcoc2l6ZSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGV2YWxfb3BfaXNjb21wb25lbnQocmVzVmFsOiBFeHBWYWwpOiB2b2lkIHtcclxuICAgIGxldCBjdXJyVHNrOiBUYXNrQmFzZSA9IEFjY2Vzc0hlbHBlci5ldmVudHNNYW5hZ2VyLmdldEN1cnJUYXNrKCkgfHwgKDxUYXNrQmFzZT50aGlzLkV4cFRhc2spO1xyXG5cclxuICAgIHJlc1ZhbC5BdHRyID0gU3RvcmFnZUF0dHJpYnV0ZS5CT09MRUFOO1xyXG4gICAgcmVzVmFsLkJvb2xWYWwgPSAoY3VyclRzay5nZXRDb21wSWR4KCkgIT09IDApO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIEZpbmQgYW5kIEV4ZWN1dGUgdXNlciBkZWZpbmVkIGZ1bmN0aW9uXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBwcml2YXRlIGFzeW5jIGV2YWxfb3BfRXhlY1VzZXJEZWZpbmVkRnVuYyhmdW5jTmFtZTogc3RyaW5nLCBFeHBfcGFyYW1zOiBFeHBWYWxbXSwgcmVzVmFsOiBFeHBWYWwsIGV4cGVjdGVkVHlwZTogU3RvcmFnZUF0dHJpYnV0ZSk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgbGV0IHJ0RXZ0OiBSdW5UaW1lRXZlbnQgPSBuZXcgUnVuVGltZUV2ZW50KDxUYXNrQmFzZT50aGlzLkV4cFRhc2spO1xyXG4gICAgcnRFdnQuc2V0VHlwZShDb25zdEludGVyZmFjZS5FVkVOVF9UWVBFX1VTRVJfRlVOQyk7XHJcbiAgICBydEV2dC5zZXRVc2VyRGVmaW5lZEZ1bmNOYW1lKGZ1bmNOYW1lKTtcclxuXHJcbiAgICBsZXQgZXZ0SGFuUG9zOiBFdmVudEhhbmRsZXJQb3NpdGlvbiA9IG5ldyBFdmVudEhhbmRsZXJQb3NpdGlvbigpO1xyXG4gICAgZXZ0SGFuUG9zLmluaXQocnRFdnQpO1xyXG5cclxuICAgIGxldCBoYW5kbGVyOiBFdmVudEhhbmRsZXIgPSBldnRIYW5Qb3MuZ2V0TmV4dCgpO1xyXG4gICAgbGV0IGFyZ3NNYXRjaDogYm9vbGVhbiA9IGhhbmRsZXIgIT09IG51bGwgJiYgaGFuZGxlci5hcmdzTWF0Y2goRXhwX3BhcmFtcyk7XHJcbiAgICBsZXQgdmFsOiBFeHBWYWwgPSBudWxsO1xyXG4gICAgbGV0IHZhbEluaWF0ZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgICBpZiAoYXJnc01hdGNoKSB7XHJcbiAgICAgIC8vIGlmIHRoZXJlIGlzIGEgaGFuZGxlciBjaGFuZ2UgdGhlIGhhbmRsZXIncyBjb250ZXh0IHRhc2sgdG8gdGhlIGV2ZW50J3MgdGFza1xyXG4gICAgICBsZXQgaGFuZGxlckNvbnRleHRUYXNrOiBUYXNrQmFzZSA9IDxUYXNrQmFzZT4gaGFuZGxlci5nZXRUYXNrKCkuR2V0Q29udGV4dFRhc2soKTtcclxuICAgICAgLy8gSWYgdXNlci1kZWZpbmVkIGZ1bmN0aW9uIGlzIGV4ZWN1dGVkIGZyb20gaGFuZGxlciB3aGljaCBpcyBpbnZva2VkIGZyb20gIGNvbnRleHQgdGFzayBhbHJlYWR5LFxyXG4gICAgICAvLyB0aGVuIGRvIG5vdCBjaGFuZ2UgdGhlIGNvbnRleHQgdGFzayBhZ2Fpbi5cclxuICAgICAgaWYgKGhhbmRsZXIuZ2V0VGFzaygpID09PSAgaGFuZGxlci5nZXRUYXNrKCkuR2V0Q29udGV4dFRhc2soKSlcclxuICAgICAgICBoYW5kbGVyLmdldFRhc2soKS5TZXRDb250ZXh0VGFzayhydEV2dC5nZXRUYXNrKCkpO1xyXG5cclxuICAgICAgbGV0IGFyZ0xpc3Q6IEFyZ3VtZW50c0xpc3QgPSBuZXcgQXJndW1lbnRzTGlzdChFeHBfcGFyYW1zKTtcclxuXHJcbiAgICAgIHJ0RXZ0LnNldEFyZ0xpc3QoYXJnTGlzdCk7XHJcbiAgICAgIC8vIGlmIHRoZSBleGVjdXRpb24gb2YgdGhlIHVzZXIgZGVmaW5lZCBmdW5jdGlvbiB3aWxsIGdvIHRvIHRoZSBzZXJ2ZXIsIHdlIGRvbid0IHdhbnQgaXQgdG8gY29udGludWVcclxuICAgICAgLy8gYW55IG90aGVyIGV4ZWN1dGlvbiBvbiB0aGUgc2VydmVyLCBsaWtlIGlmIHdlIGFyZSBpbiB0aGUgbWlkZGxlIG9mIHJhaXNlIGV2ZW50IG9yIHNvbWV0aGluZ1xyXG4gICAgICAvLyBsaWtlIHRoYXQgYmVjYXVzZSB0aGUgc2VydmVyIGNhbm5vdCBrbm93IG9uIHdoaWNoIG9wZXJhdGlvbiB3ZSBhcmUgY3VycmVudGx5IG9uIGFuZCB3aGljaCBleHByc3Npb25cclxuICAgICAgLy8gYW5kIHdoaWNoIHBhcnQgb2YgdGhlIGV4cHJlc3Npb24gd2UgYXJlIGV2YWx1YXRpbmdcclxuICAgICAgQWNjZXNzSGVscGVyLmV2ZW50c01hbmFnZXIucHVzaE5ld0V4ZWNTdGFja3MoKTtcclxuICAgICAgYXdhaXQgaGFuZGxlci5leGVjdXRlKHJ0RXZ0LCBmYWxzZSwgZmFsc2UpO1xyXG4gICAgICBBY2Nlc3NIZWxwZXIuZXZlbnRzTWFuYWdlci5wb3BOZXdFeGVjU3RhY2tzKCk7XHJcblxyXG4gICAgICAvLyBldmFsdWF0ZSB0aGUgcmV0dXJuIHZhbHVlIG9mIHRoZSB1c2VyIGRlZmluZWQgZnVuY3Rpb25cclxuICAgICAgbGV0IGV4cDogRXhwcmVzc2lvbiA9IGhhbmRsZXIuZ2V0VGFzaygpLmdldEV4cEJ5SWQoaGFuZGxlci5nZXRFdmVudCgpLmdldFVzZXJEZWZpbmVkRnVuY1JldEV4cCgpKTtcclxuICAgICAgaWYgKGV4cCAhPT0gbnVsbCkge1xyXG4gICAgICAgIHZhbCA9IGF3YWl0IGV4cC5ldmFsdWF0ZVdpdGhSZXNUeXBlKGV4cGVjdGVkVHlwZSk7XHJcbiAgICAgICAgdmFsSW5pYXRlZCA9IHRydWU7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIHJlc3RvcmluZyB0aGUgY29udGV4dFxyXG4gICAgICBoYW5kbGVyLmdldFRhc2soKS5TZXRDb250ZXh0VGFzayhoYW5kbGVyQ29udGV4dFRhc2spO1xyXG4gICAgfVxyXG4gICAgaWYgKCF2YWxJbmlhdGVkKSB7XHJcbiAgICAgIGlmIChleHBlY3RlZFR5cGUgPT09IFN0b3JhZ2VBdHRyaWJ1dGUuTk9ORSkge1xyXG4gICAgICAgIGV4cGVjdGVkVHlwZSA9IFN0b3JhZ2VBdHRyaWJ1dGUuQUxQSEE7XHJcbiAgICAgIH1cclxuICAgICAgdmFsID0gbmV3IEV4cFZhbChleHBlY3RlZFR5cGUsIHRydWUsIG51bGwpO1xyXG4gICAgfVxyXG4gICAgLy8gY29weSBjb250ZW50cyBmcm9tIHRoZSBWYWwgaGVscGVyIHZhcmlhYmxlIHRvIHRoZSByZXNWYWwgcGFyYW1ldGVyLlxyXG4gICAgcmVzVmFsLkNvcHkodmFsKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICByZXR1cm5zIHRoZSBpbnRlcm5hbCBuYW1lIG9mIHRoZSB0YXNrXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBwcml2YXRlIGV2YWxfb3BfcHVibGljTmFtZShyZXNWYWw6IEV4cFZhbCwgUGFyZW50OiBFeHBWYWwpOiB2b2lkIHtcclxuICAgIGxldCBwdWJsaWNOYW1lOiBzdHJpbmcgPSAnTlVMTCc7XHJcblxyXG4gICAgbGV0IGlQYXJlbnQ6IG51bWJlciA9IFBhcmVudC5NZ051bVZhbC5OVU1fMl9MT05HKCk7XHJcbiAgICBpZiAoKGlQYXJlbnQgPj0gMCAmJiBpUGFyZW50IDwgKCg8VGFza0Jhc2U+dGhpcy5FeHBUYXNrKS5nZXRUYXNrRGVwdGgoZmFsc2UpKSkgfHwgaVBhcmVudCA9PT0gRXhwcmVzc2lvbkV2YWx1YXRvci5UUklHR0VSX1RBU0spIHtcclxuICAgICAgbGV0IHRhc2s6IFRhc2tCYXNlID0gPFRhc2tCYXNlPiBzdXBlci5HZXRDb250ZXh0VGFzayhpUGFyZW50KTtcclxuICAgICAgaWYgKHRhc2sgIT09IG51bGwgJiYgdGFzay5pc1Byb2dyYW0oKSAmJiAhdGFzay5pc01haW5Qcm9nKCkpXHJcbiAgICAgICAgcHVibGljTmFtZSA9IHRhc2suZ2V0UHVibGljTmFtZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHJlc1ZhbC5BdHRyID0gU3RvcmFnZUF0dHJpYnV0ZS5BTFBIQTtcclxuICAgIHJlc1ZhbC5TdHJWYWwgPSBwdWJsaWNOYW1lO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHJldHVybnMgdGhlIGV4dGVybmFsIHRhc2sgSUQgb2YgdGhlIHRhc2tcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIHByaXZhdGUgZXZhbF9vcF90YXNrSWQocmVzVmFsOiBFeHBWYWwsIFBhcmVudDogRXhwVmFsKTogdm9pZCB7XHJcbiAgICBsZXQgdGFza0lkOiBzdHJpbmcgPSAnTlVMTCc7XHJcblxyXG4gICAgbGV0IGlQYXJlbnQ6IG51bWJlciA9IFBhcmVudC5NZ051bVZhbC5OVU1fMl9MT05HKCk7XHJcbiAgICBpZiAoKGlQYXJlbnQgPj0gMCAmJiBpUGFyZW50IDwgKCg8VGFza0Jhc2U+dGhpcy5FeHBUYXNrKS5nZXRUYXNrRGVwdGgoZmFsc2UpKSkgfHwgaVBhcmVudCA9PT0gRXhwcmVzc2lvbkV2YWx1YXRvci5UUklHR0VSX1RBU0spIHtcclxuICAgICAgbGV0IHRhc2s6IFRhc2tCYXNlID0gPFRhc2tCYXNlPiBzdXBlci5HZXRDb250ZXh0VGFzayhpUGFyZW50KTtcclxuICAgICAgaWYgKHRhc2sgIT09IG51bGwpXHJcbiAgICAgICAgdGFza0lkID0gdGFzay5nZXRFeHRlcm5hbFRhc2tJZCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHJlc1ZhbC5BdHRyID0gU3RvcmFnZUF0dHJpYnV0ZS5BTFBIQTtcclxuICAgIHJlc1ZhbC5TdHJWYWwgPSB0YXNrSWQ7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgcmV0dXJucyB0aGUgbnVtYmVyIG9mIGNhY2hlZCByZWNvcmRzXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBwcml2YXRlIGV2YWxfb3BfZGJ2aWV3c2l6ZShyZXNWYWw6IEV4cFZhbCwgUGFyZW50OiBFeHBWYWwpOiB2b2lkIHtcclxuICAgIGxldCBzaXplOiBudW1iZXIgPSAwO1xyXG5cclxuICAgIGxldCBpUGFyZW50OiBudW1iZXIgPSBQYXJlbnQuTWdOdW1WYWwuTlVNXzJfTE9ORygpO1xyXG4gICAgaWYgKChpUGFyZW50ID49IDAgJiYgaVBhcmVudCA8ICg8VGFza0Jhc2U+dGhpcy5FeHBUYXNrKS5nZXRUYXNrRGVwdGgoZmFsc2UpKSB8fCBpUGFyZW50ID09PSBFeHByZXNzaW9uRXZhbHVhdG9yLlRSSUdHRVJfVEFTSykge1xyXG4gICAgICBsZXQgdGFzazogVGFza0Jhc2UgPSA8VGFza0Jhc2U+IHN1cGVyLkdldENvbnRleHRUYXNrKGlQYXJlbnQpO1xyXG4gICAgICBpZiAodGFzayAhPT0gbnVsbCAmJiAoPERhdGFWaWV3PnRhc2suRGF0YVZpZXcpLkhhc01haW5UYWJsZSkge1xyXG4gICAgICAgIGlmICh0YXNrLkdldENvbXB1dGVkUHJvcGVydHkoUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfUFJFTE9BRF9WSUVXKS5HZXRDb21wdXRlZFZhbHVlQm9vbGVhbigpKSB7XHJcbiAgICAgICAgICBzaXplID0gKDxEYXRhVmlldz50YXNrLkRhdGFWaWV3KS5EQlZpZXdTaXplO1xyXG4gICAgICAgIH0gZWxzZSBpZiAodGFzay5pc1RhYmxlV2l0aEFic29sdXRlc1Njcm9sbGJhcigpKVxyXG4gICAgICAgICAgc2l6ZSA9ICg8RGF0YVZpZXc+dGFzay5EYXRhVmlldykuVG90YWxSZWNvcmRzQ291bnQ7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHN1cGVyLkNvbnN0cnVjdE1hZ2ljTnVtKHJlc1ZhbCwgc2l6ZSwgU3RvcmFnZUF0dHJpYnV0ZS5OVU1FUklDKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICByZXR1cm5zIHRoZSBudW1lcmljIHZhbHVlIHJlcHJlc2VudGluZyB0aGUgc2VxdWVudGlhbCBudW1iZXJcclxuICAvLy8gICBvZiBhIHJlY29yZCBpbiBhIGNhY2hlZCB2aWV3XHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBwcml2YXRlIGV2YWxfb3BfZGJ2aWV3cm93aWR4KHJlc1ZhbDogRXhwVmFsLCBQYXJlbnQ6IEV4cFZhbCk6IHZvaWQge1xyXG4gICAgbGV0IGlkeDogbnVtYmVyID0gMDtcclxuXHJcbiAgICBsZXQgaVBhcmVudDogbnVtYmVyID0gUGFyZW50Lk1nTnVtVmFsLk5VTV8yX0xPTkcoKTtcclxuICAgIGlmICgoaVBhcmVudCA+PSAwICYmIGlQYXJlbnQgPCAoPFRhc2tCYXNlPnRoaXMuRXhwVGFzaykuZ2V0VGFza0RlcHRoKGZhbHNlKSkgfHwgaVBhcmVudCA9PT0gRXhwcmVzc2lvbkV2YWx1YXRvci5UUklHR0VSX1RBU0spIHtcclxuICAgICAgbGV0IHRhc2s6IFRhc2tCYXNlID0gPFRhc2tCYXNlPnN1cGVyLkdldENvbnRleHRUYXNrKGlQYXJlbnQpO1xyXG5cclxuICAgICAgaWYgKHRhc2sgIT09IG51bGwgJiYgdGFzay5HZXRDb21wdXRlZFByb3BlcnR5KFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX1BSRUxPQURfVklFVykuR2V0Q29tcHV0ZWRWYWx1ZUJvb2xlYW4oKSkge1xyXG4gICAgICAgIC8qIFFDUiMgOTY5NzIzIC0gRG8gbm90IHJldHVybiB0aGUgcm93IGlkeCB1bnRpbGwgdGhlIHJlY29yZCBpcyBjb21taXRlZC4gICovXHJcbiAgICAgICAgaWYgKCgoPERhdGFWaWV3PnRhc2suRGF0YVZpZXcpLmdldEN1cnJSZWMoKSkuZ2V0TW9kZSgpICE9PSBEYXRhTW9kaWZpY2F0aW9uVHlwZXMuSW5zZXJ0KSB7XHJcbiAgICAgICAgICBpZHggPSB0YXNrLkRhdGF2aWV3TWFuYWdlci5DdXJyZW50RGF0YXZpZXdNYW5hZ2VyLkdldERiVmlld1Jvd0lkeCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgc3VwZXIuQ29uc3RydWN0TWFnaWNOdW0ocmVzVmFsLCBpZHgsIFN0b3JhZ2VBdHRyaWJ1dGUuTlVNRVJJQyk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgQ2FsbCB0aGUgTWxzIHRyYW5zbGF0aW9uIHRvIHJldHVybiB0aGUgdHJhbnNsYXRpb24gb2YgJ2Zyb21TdHJpbmcnLlxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgcHJpdmF0ZSBldmFsX29wX01sc1RyYW5zKHJlc1ZhbDogRXhwVmFsLCBmcm9tU3RyaW5nOiBFeHBWYWwpOiB2b2lkIHtcclxuICAgIHJlc1ZhbC5BdHRyID0gU3RvcmFnZUF0dHJpYnV0ZS5VTklDT0RFO1xyXG4gICAgcmVzVmFsLlN0clZhbCA9ICcnO1xyXG5cclxuICAgIHJlc1ZhbC5TdHJWYWwgPSBMYW5ndWFnZURhdGEuSW5zdGFuY2UudHJhbnNsYXRlKE5TdHJpbmcuVHJpbUVuZChmcm9tU3RyaW5nLlN0clZhbCwgdGhpcy5fY2hhcnNUb1RyaW0pKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBJbXBsZW1lbnRzIFN0ckJ1aWxkXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBwcml2YXRlIGV2YWxfb3BfU3RyQnVpbGQodmFsU3RhY2s6IFN0YWNrPEV4cFZhbD4sIHJlc1ZhbDogRXhwVmFsLCBuQXJnczogbnVtYmVyKTogdm9pZCB7XHJcbiAgICBsZXQgRXhwX3Bhcm1zOiBFeHBWYWxbXSA9IG5ldyBBcnJheTxFeHBWYWw+KG5BcmdzKTtcclxuXHJcbiAgICAvLyBSZWFkIHBhcmFtZXRlcnNcclxuICAgIGZvciAobGV0IGk6IG51bWJlciA9IDA7IGkgPCBuQXJnczsgaSsrKVxyXG4gICAgICBFeHBfcGFybXNbbkFyZ3MgLSAxIC0gaV0gPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpO1xyXG4gICAgdGhpcy52YWxfY3B5KEV4cF9wYXJtc1swXSwgcmVzVmFsKTtcclxuXHJcbiAgICBsZXQgcmVzdWx0U3RyOiBTdHJpbmdCdWlsZGVyID0gbmV3IFN0cmluZ0J1aWxkZXIocmVzVmFsLlN0clZhbCk7XHJcbiAgICAvLyBGb3IgZWFjaCBwYXJhbWV0ZXIsIHNlYXJjaCBcIkBuQFwiIHN0cmluZyBpbiB0aGUgZ2l2ZW4gc3RyaW5nLlxyXG4gICAgLy8gSWYgZm91bmQsIGFuZCBpZiBpdCBpcyBub3QgcHJlY2VkZWQgYnkgJ1xcJ1xyXG4gICAgZm9yIChsZXQgaTogbnVtYmVyID0gMTsgaSA8IG5BcmdzOyBpKyspIHtcclxuICAgICAgbGV0IHRvUmVwbGFjZTogc3RyaW5nID0gJ0AnICsgaS50b1N0cmluZygpLnRyaW0oKSArICdAJztcclxuICAgICAgbGV0IGluZGV4RnJvbTogbnVtYmVyID0gMDtcclxuICAgICAgd2hpbGUgKGluZGV4RnJvbSAhPT0gLTEpIHtcclxuICAgICAgICBsZXQgbmV4dEluZGV4OiBudW1iZXIgPSByZXN1bHRTdHIuVG9TdHJpbmcoKS5pbmRleE9mKHRvUmVwbGFjZSwgaW5kZXhGcm9tKTtcclxuICAgICAgICBpZiAobmV4dEluZGV4ID09PSAtMSlcclxuICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICBsZXQgcHJlY2VkZWRCeVNsYXNoOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICAgICAgbGV0IHNoYXNoSW5kZXg6IG51bWJlciA9IHJlc3VsdFN0ci5Ub1N0cmluZygpLmluZGV4T2YoJ1xcXFwnICsgdG9SZXBsYWNlLCBpbmRleEZyb20pO1xyXG4gICAgICAgIGlmIChzaGFzaEluZGV4ICE9PSAtMSlcclxuICAgICAgICAgIHByZWNlZGVkQnlTbGFzaCA9IHRydWU7XHJcblxyXG4gICAgICAgIC8vIGlmICdcXCcgaXMgZm91bmQgY2hlY2sgaWYsIGl0IGlzIHJlZmVycmluZyB0aGUgY3VycmVudCBvY2N1cnJhbmNlIG9mIEBuQFxyXG4gICAgICAgIGlmICgocHJlY2VkZWRCeVNsYXNoICYmIG5leHRJbmRleCAhPT0gc2hhc2hJbmRleCArIDEpIHx8ICFwcmVjZWRlZEJ5U2xhc2gpIHtcclxuICAgICAgICAgIHJlc3VsdFN0ci5SZXBsYWNlKHJlc3VsdFN0ci5Ub1N0cmluZyhuZXh0SW5kZXgsIG5leHRJbmRleCArIHRvUmVwbGFjZS5sZW5ndGggLSBuZXh0SW5kZXgpLCBFeHBfcGFybXNbaV0uU3RyVmFsLnRyaW0oKSwgbmV4dEluZGV4LCBuZXh0SW5kZXggKyB0b1JlcGxhY2UubGVuZ3RoIC0gbmV4dEluZGV4KTtcclxuICAgICAgICAgIGluZGV4RnJvbSA9IG5leHRJbmRleCArIEV4cF9wYXJtc1tpXS5TdHJWYWwudHJpbSgpLmxlbmd0aDtcclxuICAgICAgICB9IGVsc2VcclxuICAgICAgICAgIGluZGV4RnJvbSA9IG5leHRJbmRleCArIDE7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJlc3VsdFN0ci5SZXBsYWNlKCdcXFxcQCcsICdAJyk7XHJcbiAgICByZXNWYWwuU3RyVmFsID0gcmVzdWx0U3RyLlRvU3RyaW5nKCk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgQWRkIHVzZXIgcmFuZ2VzIG9uIFRhc2tCYXNlLi5cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwicmVzVmFsXCI+V2lsbCByZXR1cm4gQm9vbFZhbC48L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cInZhcm51bVwiPiB2YXJudW0gY29udGFpbnMgdmFyIG51bSBvbiB3aGljaCByYW5nZSBpcyBzcGVjaWZpZWQuPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJtaW5cIj4gbWluIGNvbnRhaW5zIG1pbiByYW5nZSB2YWx1ZS48L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cIm1heFwiPiBtYXggY29udGFpbnMgbWF4IHJhbmdlIHZhbHVlLjwvcGFyYW0+XHJcbiAgcHJpdmF0ZSBhc3luYyBldmFsX29wX3JhbmdlX2FkZChyZXNWYWw6IEV4cFZhbCwgRXhwX3BhcmFtczogRXhwVmFsW10pOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIHJlc1ZhbC5BdHRyID0gU3RvcmFnZUF0dHJpYnV0ZS5CT09MRUFOO1xyXG4gICAgcmVzVmFsLkJvb2xWYWwgPSBhd2FpdCB0aGlzLmFkZF9ydF9yYW5nZXMoRXhwX3BhcmFtcywgZmFsc2UpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIEZyZWUgdXNlciByYW5nZXMgb24gVGFza0Jhc2UuLlxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJyZXNWYWxcIj5XaWxsIHJldHVybiBCb29sVmFsLjwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJwYXJlbnRcIj4gcGFyZW50IGNvbnRhaW5zIGdlbmVyYXRpb24gb2YgdGhlIHRhc2suPC9wYXJhbT5cclxuICBwcml2YXRlIGFzeW5jIGV2YWxfb3BfcmFuZ2VfcmVzZXQocmVzVmFsOiBFeHBWYWwsIHBhcmVudDogRXhwVmFsKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICByZXNWYWwuQXR0ciA9IFN0b3JhZ2VBdHRyaWJ1dGUuQk9PTEVBTjtcclxuXHJcbiAgICBsZXQgaVBhcmVudDogbnVtYmVyID0gcGFyZW50Lk1nTnVtVmFsLk5VTV8yX0xPTkcoKTtcclxuICAgIGlmICgoaVBhcmVudCA+PSAwICYmIGlQYXJlbnQgPCAoKDxUYXNrQmFzZT50aGlzLkV4cFRhc2spLmdldFRhc2tEZXB0aChmYWxzZSkpKSB8fCBpUGFyZW50ID09PSBFeHByZXNzaW9uRXZhbHVhdG9yLlRSSUdHRVJfVEFTSykge1xyXG4gICAgICBsZXQgdGFzazogVGFza0Jhc2UgPSA8VGFza0Jhc2U+IHN1cGVyLkdldENvbnRleHRUYXNrKGlQYXJlbnQpO1xyXG4gICAgICBpZiAodGFzayAhPT0gbnVsbCkge1xyXG4gICAgICAgIGxldCBjb21tYW5kOiBJQ2xpZW50Q29tbWFuZCA9IENvbW1hbmRGYWN0b3J5LkNyZWF0ZURhdGFWaWV3Q29tbWFuZCh0YXNrLmdldFRhc2tUYWcoKSwgRGF0YVZpZXdDb21tYW5kVHlwZS5SZXNldFVzZXJSYW5nZSk7XHJcbiAgICAgICAgYXdhaXQgdGFzay5EYXRhdmlld01hbmFnZXIuRXhlY3V0ZShjb21tYW5kKTtcclxuICAgICAgICByZXNWYWwuQm9vbFZhbCA9IHRydWU7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBBZGQgdXNlciBsb2NhdGVzIG9uIFRhc2suLlxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJyZXNWYWxcIj5XaWxsIHJldHVybiBCb29sVmFsLjwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwidmFybnVtXCI+IHZhcm51bSBjb250YWlucyB2YXIgbnVtIG9uIHdoaWNoIHJhbmdlIGlzIHNwZWNpZmllZC48L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cIm1pblwiPiBtaW4gY29udGFpbnMgbWluIHJhbmdlIHZhbHVlLjwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwibWF4XCI+IG1heCBjb250YWlucyBtYXggcmFuZ2UgdmFsdWUuPC9wYXJhbT5cclxuICBwcml2YXRlIGFzeW5jIGV2YWxfb3BfbG9jYXRlX2FkZChyZXNWYWw6IEV4cFZhbCwgRXhwX3BhcmFtczogRXhwVmFsW10pOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIHJlc1ZhbC5BdHRyID0gU3RvcmFnZUF0dHJpYnV0ZS5CT09MRUFOO1xyXG4gICAgcmVzVmFsLkJvb2xWYWwgPSBhd2FpdCB0aGlzLmFkZF9ydF9yYW5nZXMoRXhwX3BhcmFtcywgdHJ1ZSk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgRnJlZSB1c2VyIGxvY2F0ZXMgb24gVGFzay4uXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInJlc1ZhbFwiPldpbGwgcmV0dXJuIEJvb2xWYWwuPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInBhcmVudFwiPiBwYXJlbnQgY29udGFpbnMgZ2VuZXJhdGlvbiBvZiB0aGUgdGFzay48L3BhcmFtPlxyXG4gIHByaXZhdGUgYXN5bmMgZXZhbF9vcF9sb2NhdGVfcmVzZXQocmVzVmFsOiBFeHBWYWwsIHBhcmVudDogRXhwVmFsKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICByZXNWYWwuQXR0ciA9IFN0b3JhZ2VBdHRyaWJ1dGUuQk9PTEVBTjtcclxuICAgIGxldCBpUGFyZW50OiBudW1iZXIgPSBwYXJlbnQuTWdOdW1WYWwuTlVNXzJfTE9ORygpO1xyXG4gICAgaWYgKChpUGFyZW50ID49IDAgJiYgaVBhcmVudCA8ICgoPFRhc2tCYXNlPnRoaXMuRXhwVGFzaykuZ2V0VGFza0RlcHRoKGZhbHNlKSkpIHx8IGlQYXJlbnQgPT09IEV4cHJlc3Npb25FdmFsdWF0b3IuVFJJR0dFUl9UQVNLKSB7XHJcbiAgICAgIGxldCB0YXNrOiBUYXNrQmFzZSA9IDxUYXNrQmFzZT4gc3VwZXIuR2V0Q29udGV4dFRhc2soaVBhcmVudCk7XHJcbiAgICAgIGlmICh0YXNrICE9PSBudWxsKSB7XHJcbiAgICAgICAgbGV0IGNvbW1hbmQ6IElDbGllbnRDb21tYW5kID0gQ29tbWFuZEZhY3RvcnkuQ3JlYXRlRGF0YVZpZXdDb21tYW5kKHRhc2suZ2V0VGFza1RhZygpLCBEYXRhVmlld0NvbW1hbmRUeXBlLlJlc2V0VXNlckxvY2F0ZSk7XHJcbiAgICAgICAgYXdhaXQgdGFzay5EYXRhdmlld01hbmFnZXIuRXhlY3V0ZShjb21tYW5kKTtcclxuICAgICAgICByZXNWYWwuQm9vbFZhbCA9IHRydWU7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBBZGQgdXNlciBzb3J0cyBvbiBUYXNrLi5cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwicmVzVmFsXCI+V2lsbCByZXR1cm4gQm9vbFZhbC4gU3VjY2Vzc2Z1bCBhbmQgQXR0ciB3aWxsIGJlIHNldCB0byBTVE9SQUdFX0FUVFJfQk9PTEVBTi48L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cInZhcm51bVwiPiB2YWwxIGNvbnRhaW5zIHZhciBudW0gb24gd2hpY2ggcmFuZ2UgaXMgc3BlY2lmaWVkLjwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwiZGlyXCI+IGRpciBjb250YWlucyBkaXJlY3Rpb24gb2Ygc29ydC48L3BhcmFtPlxyXG4gIHByaXZhdGUgYXN5bmMgZXZhbF9vcF9zb3J0X2FkZChyZXNWYWw6IEV4cFZhbCwgdmFybnVtOiBFeHBWYWwsIGRpcjogRXhwVmFsKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICByZXNWYWwuQXR0ciA9IFN0b3JhZ2VBdHRyaWJ1dGUuQk9PTEVBTjtcclxuICAgIHJlc1ZhbC5Cb29sVmFsID0gYXdhaXQgdGhpcy5hZGRfc29ydCh2YXJudW0sIGRpcik7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgRnJlZSB1c2VyIHJhbmdlcyBvbiBUYXNrLi5cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwicmVzVmFsXCI+V2lsbCByZXR1cm4gQm9vbFZhbC48L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cInBhcmVudFwiPiBwYXJlbnQgY29udGFpbnMgZ2VuZXJhdGlvbiBvZiB0YXNrLjwvcGFyYW0+XHJcbiAgcHJpdmF0ZSBhc3luYyBldmFsX29wX3NvcnRfcmVzZXQocmVzVmFsOiBFeHBWYWwsIHBhcmVudDogRXhwVmFsKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICByZXNWYWwuQXR0ciA9IFN0b3JhZ2VBdHRyaWJ1dGUuQk9PTEVBTjtcclxuICAgIGxldCBpUGFyZW50OiBudW1iZXIgPSBwYXJlbnQuTWdOdW1WYWwuTlVNXzJfTE9ORygpO1xyXG4gICAgaWYgKChpUGFyZW50ID49IDAgJiYgaVBhcmVudCA8ICgoPFRhc2tCYXNlPnRoaXMuRXhwVGFzaykuZ2V0VGFza0RlcHRoKGZhbHNlKSkpIHx8IGlQYXJlbnQgPT09IEV4cHJlc3Npb25FdmFsdWF0b3IuVFJJR0dFUl9UQVNLKSB7XHJcbiAgICAgIGxldCB0YXNrOiBUYXNrQmFzZSA9IDxUYXNrQmFzZT4gc3VwZXIuR2V0Q29udGV4dFRhc2soaVBhcmVudCk7XHJcbiAgICAgIGlmICh0YXNrICE9PSBudWxsKSB7XHJcbiAgICAgICAgbGV0IGNvbW1hbmQ6IElDbGllbnRDb21tYW5kID0gQ29tbWFuZEZhY3RvcnkuQ3JlYXRlRGF0YVZpZXdDb21tYW5kKHRhc2suZ2V0VGFza1RhZygpLCBEYXRhVmlld0NvbW1hbmRUeXBlLlJlc2V0VXNlclNvcnQpO1xyXG4gICAgICAgIGF3YWl0IHRhc2suRGF0YXZpZXdNYW5hZ2VyLkV4ZWN1dGUoY29tbWFuZCk7XHJcbiAgICAgICAgcmVzVmFsLkJvb2xWYWwgPSB0cnVlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIFRoaXMgZnVuY3Rpb24gcmV0dXJucyBjdXJyZW50IGluc3RhbmNlIGkuZS4gdGFnIG9mIHRoZSB0YXNrXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInJlc1ZhbFwiPldpbGwgcmV0dXJuIEJvb2xWYWwuPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcIlBhcmVudFwiPiBwYXJlbnQgY29udGFpbnMgZ2VuZXJhdGlvbiBvZiB0YXNrLjwvcGFyYW0+XHJcbiAgcHJpdmF0ZSBldmFsX29wX3Rza19pbnN0YW5jZShyZXNWYWw6IEV4cFZhbCwgUGFyZW50OiBFeHBWYWwpOiB2b2lkIHtcclxuICAgIGxldCB0YWc6IG51bWJlciA9IDA7XHJcbiAgICBsZXQgaVBhcmVudDogbnVtYmVyID0gUGFyZW50Lk1nTnVtVmFsLk5VTV8yX0xPTkcoKTtcclxuICAgIGlmICgoaVBhcmVudCA+PSAwICYmIGlQYXJlbnQgPCAoKDxUYXNrQmFzZT50aGlzLkV4cFRhc2spLmdldFRhc2tEZXB0aChmYWxzZSkpKSB8fCBpUGFyZW50ID09PSBFeHByZXNzaW9uRXZhbHVhdG9yLlRSSUdHRVJfVEFTSykge1xyXG4gICAgICBsZXQgdGFzazogVGFza0Jhc2UgPSA8VGFza0Jhc2U+IHN1cGVyLkdldENvbnRleHRUYXNrKGlQYXJlbnQpO1xyXG4gICAgICBpZiAodGFzayAhPT0gbnVsbCkge1xyXG4gICAgICAgIHRhZyA9IE5OdW1iZXIuUGFyc2UodGFzay5nZXRUYXNrVGFnKCkpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmVzVmFsLkF0dHIgPSBTdG9yYWdlQXR0cmlidXRlLk5VTUVSSUM7XHJcbiAgICByZXNWYWwuTWdOdW1WYWwgPSBuZXcgTlVNX1RZUEUoKTtcclxuICAgIHJlc1ZhbC5NZ051bVZhbC5OVU1fNF9MT05HKHRhZyk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgVGhpcyBmdW5jdGlvbiBhZGRzIFVzZXIgU29ydCBvbiB0YXNrLlxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgcHJpdmF0ZSBhc3luYyBhZGRfc29ydCh2YXJudW06IEV4cFZhbCwgZGlyOiBFeHBWYWwpOiBQcm9taXNlPGJvb2xlYW4+IHtcclxuICAgIGlmICh2YXJudW0uTWdOdW1WYWwgPT09IG51bGwpXHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICBsZXQgaXRtOiBudW1iZXIgPSB2YXJudW0uTWdOdW1WYWwuTlVNXzJfTE9ORygpO1xyXG5cclxuICAgIGlmIChpdG0gPT09IDApXHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuXHJcblxyXG4gICAgbGV0IGZsZDogRmllbGQgPSB0aGlzLkdldEZpZWxkT2ZDb250ZXh0VGFzayhpdG0pO1xyXG5cclxuICAgIGlmIChmbGQgPT09IG51bGwpXHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICBsZXQgdGFzazogVGFza0Jhc2UgPSA8VGFza0Jhc2U+ZmxkLmdldFRhc2soKTtcclxuICAgIGxldCB2ZWVfaWR4OiBudW1iZXIgPSBmbGQuZ2V0SWQoKSArIDE7XHJcblxyXG4gICAgbGV0IGV4cHJfNjQ6IFNvcnQgPSBuZXcgU29ydCgpO1xyXG5cclxuICAgIGV4cHJfNjQuZmxkSWR4ID0gdmVlX2lkeDtcclxuICAgIGV4cHJfNjQuZGlyID0gZGlyLkJvb2xWYWw7XHJcbiAgICBsZXQgc29ydDogU29ydCA9IGV4cHJfNjQ7XHJcblxyXG4gICAgbGV0IGNvbW1hbmQ6IElDbGllbnRDb21tYW5kID0gQ29tbWFuZEZhY3RvcnkuQ3JlYXRlQWRkVXNlclNvcnREYXRhdmlld0NvbW1hbmQodGFzay5nZXRUYXNrVGFnKCksIHNvcnQpO1xyXG4gICAgYXdhaXQgdGFzay5EYXRhdmlld01hbmFnZXIuRXhlY3V0ZShjb21tYW5kKTtcclxuXHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBUaGlzIGZ1bmN0aW9uIGFkZHMgVXNlciBTb3J0IG9uIHRhc2suXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBwcml2YXRlIGFzeW5jIGFkZF9ydF9yYW5nZXMoRXhwX3BhcmFtczogRXhwVmFsW10sIGxvY2F0ZTogYm9vbGVhbik6IFByb21pc2U8Ym9vbGVhbj4ge1xyXG4gICAgbGV0IHZhcm51bTogRXhwVmFsID0gRXhwX3BhcmFtc1swXTtcclxuICAgIGxldCBtaW46IEV4cFZhbCA9IEV4cF9wYXJhbXNbMV07XHJcblxyXG4gICAgaWYgKHZhcm51bS5NZ051bVZhbCA9PT0gbnVsbClcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgIGxldCBpdG06IG51bWJlciA9IHZhcm51bS5NZ051bVZhbC5OVU1fMl9MT05HKCk7XHJcblxyXG4gICAgaWYgKGl0bSA9PT0gMClcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgIGxldCBmbGQ6IEZpZWxkID0gdGhpcy5HZXRGaWVsZE9mQ29udGV4dFRhc2soaXRtKTtcclxuXHJcbiAgICBpZiAoZmxkID09PSBudWxsKVxyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgbGV0IHRhc2s6IFRhc2tCYXNlID0gPFRhc2tCYXNlPmZsZC5nZXRUYXNrKCk7XHJcbiAgICBsZXQgdmVlX2lkeDogbnVtYmVyID0gZmxkLmdldElkKCkgKyAxO1xyXG5cclxuICAgIGxldCBleHByXzc4OiBVc2VyUmFuZ2UgPSBuZXcgVXNlclJhbmdlKCk7XHJcbiAgICBleHByXzc4LnZlZUlkeCA9IDxudW1iZXI+dmVlX2lkeDtcclxuXHJcbiAgICBsZXQgcm5nOiBVc2VyUmFuZ2UgPSBleHByXzc4O1xyXG5cclxuICAgIGlmIChtaW4uSXNOdWxsKVxyXG4gICAgICBybmcubnVsbE1pbiA9IHRydWU7XHJcblxyXG4gICAgaWYgKCFybmcubnVsbE1pbiAmJiAobWluLkF0dHIgPT09IFN0b3JhZ2VBdHRyaWJ1dGUuQUxQSEEgfHwgbWluLkF0dHIgPT09IFN0b3JhZ2VBdHRyaWJ1dGUuVU5JQ09ERSkgJiYgbWluLlN0clZhbC5sZW5ndGggPT09IDApXHJcbiAgICAgIHJuZy5kaXNjYXJkTWluID0gdHJ1ZTtcclxuXHJcbiAgICBlbHNlIHtcclxuICAgICAgaWYgKCFybmcubnVsbE1pbikge1xyXG4gICAgICAgIGlmICghU3RvcmFnZUF0dHJpYnV0ZUNoZWNrLmlzVGhlU2FtZVR5cGUoZmxkLmdldFR5cGUoKSwgbWluLkF0dHIpKVxyXG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgICAgICBpZiAoU3RvcmFnZUF0dHJpYnV0ZUNoZWNrLlN0b3JhZ2VGbGRBbHBoYVVuaWNvZGVPckJsb2IoZmxkLmdldFR5cGUoKSwgbWluLkF0dHIpKVxyXG4gICAgICAgICAgdGhpcy5Db252ZXJ0RXhwVmFsKG1pbiwgZmxkLmdldFR5cGUoKSk7XHJcblxyXG4gICAgICAgIHJuZy5taW4gPSBtaW4uVG9NZ1ZhbCgpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAoRXhwX3BhcmFtcy5sZW5ndGggPT09IDMpIHtcclxuICAgICAgbGV0IG1heDogRXhwVmFsID0gRXhwX3BhcmFtc1syXTtcclxuICAgICAgaWYgKG1heC5Jc051bGwpXHJcbiAgICAgICAgcm5nLm51bGxNYXggPSB0cnVlO1xyXG5cclxuICAgICAgaWYgKCFybmcubnVsbE1heCAmJiAobWF4LkF0dHIgPT09IFN0b3JhZ2VBdHRyaWJ1dGUuQUxQSEEgfHwgbWF4LkF0dHIgPT09IFN0b3JhZ2VBdHRyaWJ1dGUuVU5JQ09ERSkgJiYgbWF4LlN0clZhbC5sZW5ndGggPT09IDApXHJcbiAgICAgICAgcm5nLmRpc2NhcmRNYXggPSB0cnVlO1xyXG5cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgaWYgKCFybmcubnVsbE1heCkge1xyXG4gICAgICAgICAgaWYgKCFTdG9yYWdlQXR0cmlidXRlQ2hlY2suaXNUaGVTYW1lVHlwZShmbGQuZ2V0VHlwZSgpLCBtYXguQXR0cikpXHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICAgICAgICBpZiAoU3RvcmFnZUF0dHJpYnV0ZUNoZWNrLlN0b3JhZ2VGbGRBbHBoYVVuaWNvZGVPckJsb2IoZmxkLmdldFR5cGUoKSwgbWF4LkF0dHIpKVxyXG4gICAgICAgICAgICB0aGlzLkNvbnZlcnRFeHBWYWwobWF4LCBmbGQuZ2V0VHlwZSgpKTtcclxuXHJcbiAgICAgICAgICBybmcubWF4ID0gbWF4LlRvTWdWYWwoKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZVxyXG4gICAgICBybmcuZGlzY2FyZE1heCA9IHRydWU7XHJcblxyXG4gICAgaWYgKCFybmcuZGlzY2FyZE1pbiB8fCAhcm5nLmRpc2NhcmRNYXgpIHtcclxuICAgICAgaWYgKGxvY2F0ZSkge1xyXG4gICAgICAgIGxldCBjb21tYW5kOiBJQ2xpZW50Q29tbWFuZCA9IENvbW1hbmRGYWN0b3J5LkNyZWF0ZUFkZFVzZXJMb2NhdGVEYXRhdmlld0NvbW1hbmQodGFzay5nZXRUYXNrVGFnKCksIHJuZyk7XHJcbiAgICAgICAgYXdhaXQgdGFzay5EYXRhdmlld01hbmFnZXIuRXhlY3V0ZShjb21tYW5kKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBsZXQgY29tbWFuZDI6IElDbGllbnRDb21tYW5kID0gQ29tbWFuZEZhY3RvcnkuQ3JlYXRlQWRkVXNlclJhbmdlRGF0YXZpZXdDb21tYW5kKHRhc2suZ2V0VGFza1RhZygpLCBybmcpO1xyXG4gICAgICAgIGF3YWl0IHRhc2suRGF0YXZpZXdNYW5hZ2VyLkV4ZWN1dGUoY29tbWFuZDIpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcblxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgZ2V0IGEgY29udGV4dCB2YWx1ZSAoR2V0UGFyYW0pXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInJlc1ZhbFwiPjwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJuYW1lXCI+PC9wYXJhbT5cclxuICBwcml2YXRlIGV2YWxfb3BfZ2V0UGFyYW0ocmVzVmFsOiBFeHBWYWwsIG5hbWU6IEV4cFZhbCk6IHZvaWQge1xyXG4gICAgRGVidWcuQXNzZXJ0KCFuYW1lLklzTnVsbCAmJiBuYW1lLlN0clZhbCAhPT0gbnVsbCk7XHJcblxyXG4gICAgbGV0IGV4cFZhbDogRXhwVmFsID0gR2xvYmFsUGFyYW1zLkluc3RhbmNlLmdldChuYW1lLlN0clZhbCk7XHJcbiAgICBpZiAoZXhwVmFsICE9PSBudWxsKVxyXG4gICAgICByZXNWYWwuQ29weShleHBWYWwpO1xyXG4gICAgZWxzZVxyXG4gICAgICByZXNWYWwuTnVsbGlmeSgpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyBzZXQgYSBjb250ZXh0IHZhbHVlIChTZXRQYXJhbSlcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cInJlc1ZhbFwiPjwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwibmFtZVwiPjwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwidmFsdWVcIj48L3BhcmFtPlxyXG4gIHByaXZhdGUgZXZhbF9vcF9zZXRQYXJhbShyZXNWYWw6IEV4cFZhbCwgbmFtZTogRXhwVmFsLCB2YWx1ZTogRXhwVmFsKTogdm9pZCB7XHJcbiAgICBEZWJ1Zy5Bc3NlcnQoIW5hbWUuSXNOdWxsICYmIG5hbWUuU3RyVmFsICE9PSBudWxsKTtcclxuXHJcbiAgICByZXNWYWwuQXR0ciA9IFN0b3JhZ2VBdHRyaWJ1dGUuQk9PTEVBTjtcclxuICAgIGxldCBnbG9iYWxQYXJhbXM6IEdsb2JhbFBhcmFtcyA9IEdsb2JhbFBhcmFtcy5JbnN0YW5jZTtcclxuXHJcbiAgICBnbG9iYWxQYXJhbXMuc2V0KG5hbWUuU3RyVmFsLCB2YWx1ZSk7XHJcbiAgICByZXNWYWwuQm9vbFZhbCA9IHRydWU7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgc2V0IGFuIGVudmlyb25tZW50IHZhcmlhYmxlIChJTklwdXQpXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJyZXNWYWxcIj48L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cInZhbHVlXCI+PC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJ1cGRhdGVJbmlcIj48L3BhcmFtPlxyXG4gIHByaXZhdGUgYXN5bmMgZXZhbF9vcF9pbmlwdXQocmVzVmFsOiBFeHBWYWwsIHZhbHVlOiBFeHBWYWwsIHVwZGF0ZUluaTogRXhwVmFsKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICByZXNWYWwuQXR0ciA9IFN0b3JhZ2VBdHRyaWJ1dGUuQk9PTEVBTjtcclxuICAgIHJlc1ZhbC5Cb29sVmFsID0gYXdhaXQgRW52UGFyYW1zVGFibGUuSW5zdGFuY2Uuc2V0KHZhbHVlLlN0clZhbCwgdXBkYXRlSW5pLkJvb2xWYWwpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIGdldCBhbiBlbnZpcm9ubWVudCB2YXJpYWJsZSB2YWx1ZSAoSU5JZ2V0KVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwicmVzVmFsXCI+PC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJuYW1lXCI+PC9wYXJhbT5cclxuICBwcml2YXRlIGV2YWxfb3BfaW5pZ2V0KHJlc1ZhbDogRXhwVmFsLCBuYW1lVmFsOiBFeHBWYWwpOiB2b2lkIHtcclxuICAgIHJlc1ZhbC5TdHJWYWwgPSBFbnZQYXJhbXNUYWJsZS5JbnN0YW5jZS5nZXQobmFtZVZhbC5TdHJWYWwpO1xyXG4gICAgcmVzVmFsLkF0dHIgPSBTdG9yYWdlQXR0cmlidXRlLkFMUEhBO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIGdldCBhbiBlbnZpcm9ubWVudCB2YXJpYWJsZSB2YWx1ZSBieSBzZWN0aW9uIG5hbWUgYW5kIGxvY2F0aW9uXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJyZXNWYWxcIj48L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cIm5hbWVcIj48L3BhcmFtPlxyXG4gIHByaXZhdGUgZXZhbF9vcF9pbmlnZXRsbihyZXNWYWw6IEV4cFZhbCwgc2VjdGlvblZhbDogRXhwVmFsLCBudW1iZXJWYWw6IEV4cFZhbCk6IHZvaWQge1xyXG4gICAgcmVzVmFsLlN0clZhbCA9IEVudlBhcmFtc1RhYmxlLkluc3RhbmNlLmdldGxuKHNlY3Rpb25WYWwuU3RyVmFsLCBudW1iZXJWYWwuTWdOdW1WYWwuTlVNXzJfTE9ORygpKTtcclxuICAgIHJlc1ZhbC5BdHRyID0gU3RvcmFnZUF0dHJpYnV0ZS5BTFBIQTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBFdmFsdWF0ZXMgTU9ERSBsaXRlcmFsXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInJlc1ZhbFwiPjwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJjb2Rlc1wiPmNvZGVzIHN0cmluZyBnaXZlbiBpbiBNT0RFIGxpdGVyYWw8L3BhcmFtPlxyXG4gIHByaXZhdGUgZXZhbF9vcF9tKHJlc1ZhbDogRXhwVmFsLCBjb2Rlczogc3RyaW5nKTogdm9pZCB7XHJcbiAgICByZXNWYWwuQXR0ciA9IFN0b3JhZ2VBdHRyaWJ1dGUuQUxQSEE7XHJcbiAgICByZXNWYWwuU3RyVmFsID0gJyc7XHJcblxyXG4gICAgZm9yIChsZXQgaTogbnVtYmVyID0gMDsgaSA8IGNvZGVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGxldCBtb2RlOiBzdHJpbmcgPSB0aGlzLmNzdF9jb2RlX3RyYW5zX2J1ZignTycsICdNQ0RFTFJLU09OICcsIGNvZGVzLmNoYXJBdChpKSwgTXNnSW50ZXJmYWNlLkVYUFRBQl9UU0tfTU9ERV9SVCk7XHJcbiAgICAgIHJlc1ZhbC5TdHJWYWwgPSByZXNWYWwuU3RyVmFsICsgbW9kZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBUcmFuc2xhdGUgY29kZXMgYWNjb3JkaW5nIHRvIGdpdmVuIHN0cmluZyBhbmQgdmljZSB2ZXJzYVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJvcHJcIj5JbnB1dC9PdXRwdXQ8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiaW50U3RyXCI+TGlzdCBvZiBpbnRlcm5hbCB2YWx1ZXMgdXNlZCBieSBtYWdpYzwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJjb2RlXCI+SW50ZXJuYWwvZXh0ZXJuYWwgY29kZSBvZiBtYWdpYzwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJzdHJJZFwiPmluZGV4IG9mIHN0cmluZzwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPjwvcmV0dXJucz5cclxuICBwcml2YXRlIGNzdF9jb2RlX3RyYW5zX2J1ZihvcHI6IHN0cmluZywgaW50U3RyOiBTdHJpbmcsIGNvZGU6IHN0cmluZywgc3RySWQ6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBsZXQgaTogbnVtYmVyO1xyXG4gICAgbGV0IGNvbnN0U3RyOiBzdHJpbmcgPSBMYW5ndWFnZURhdGEuSW5zdGFuY2UuZ2V0Q29uc3RNZXNzYWdlKHN0cklkKTtcclxuICAgIGxldCB0b2tlbnM6IEFycmF5X0VudW1lcmF0b3I8c3RyaW5nPiA9IG5ldyBBcnJheV9FbnVtZXJhdG9yKFN0clV0aWwudG9rZW5pemUoY29uc3RTdHIsICcsJykpO1xyXG4gICAgbGV0IHRva2VuOiBzdHJpbmc7XHJcbiAgICBsZXQgcmVzVmFsOiBzdHJpbmcgPSAnXFwwJztcclxuICAgIGZvciAoaSA9IDA7IGkgPCBpbnRTdHIubGVuZ3RoICYmIHRva2Vucy5Nb3ZlTmV4dCgpOyBpKyspIHtcclxuICAgICAgdG9rZW4gPSA8c3RyaW5nPnRva2Vucy5DdXJyZW50O1xyXG4gICAgICBsZXQgb2ZzOiBudW1iZXIgPSB0b2tlbi5pbmRleE9mKCcmJyk7XHJcblxyXG4gICAgICAvLyBpZiAnJicgaXMgZm91bmQsIG1vdmUgdG8gY2hhcmFjdGVyIG5leHQgdG8gJyYnXHJcbiAgICAgIC8vIGVsc2UgbW92ZSB0byBmaXJzdCBjaGFyYWN0ZXJcclxuICAgICAgb2ZzKys7XHJcbiAgICAgIGxldCBjdXJyQ29kZTogc3RyaW5nID0gdG9rZW4uY2hhckF0KG9mcykudG9VcHBlckNhc2UoKTtcclxuICAgICAgaWYgKG9wciA9PT0gJ0knKSB7XHJcbiAgICAgICAgaWYgKGNvZGUgPT09IGN1cnJDb2RlKSB7XHJcbiAgICAgICAgICByZXNWYWwgPSBpbnRTdHIuY2hhckF0KGkpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIC8vIG9wciA9PSAnTydcclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgaWYgKGNvZGUgPT09IGludFN0ci5jaGFyQXQoaSkpIHtcclxuICAgICAgICAgIHJlc1ZhbCA9IGN1cnJDb2RlO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmVzVmFsO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyBpbXBsZW1lbnRpbmcgRXhwQ2FsYyAtIGdldCBpbmRleCBvZiBleHByZXNzaW9uLCBmaW5kIHRoZSBleHByZXNzaW9uIGFuZCBldmFsdWF0ZSBpdFxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwicmVzVmFsXCI+PC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJleHBWYWxcIj4gZXhwcmVzc2lvbiBpbmRleCA8L3BhcmFtPlxyXG4gIHByaXZhdGUgYXN5bmMgZXZhbF9vcF9leHBjYWxjKHJlc1ZhbDogRXhwVmFsLCBleHBWYWw6IEV4cFZhbCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgcmVzVmFsLklzTnVsbCA9IHRydWU7XHJcbiAgICAvLyBBdm9pZCBvdmVyIDUwIHJlY3Vyc2l2ZSBjYWxsc1xyXG4gICAgaWYgKEV4cHJlc3Npb25FdmFsdWF0b3IuX3JlY3Vyc2l2ZUV4cENhbGNDb3VudCA8IDUwKSB7XHJcbiAgICAgIEV4cHJlc3Npb25FdmFsdWF0b3IuX3JlY3Vyc2l2ZUV4cENhbGNDb3VudCsrO1xyXG4gICAgICAvLyBnZXQgZXhwcmVzc2lvbiBmcm9tIGlkeCBhbmQgZXZhbHVhdGUgaXQuIHBhc3MgXCJub25lXCIgZm9yIHR5cGUsIHNvIHdlIGdldCB3aGF0ZXZlciB0eXBlIHRoZSBzZXJ2ZXIgc2VudCBiYWNrXHJcbiAgICAgIGxldCBleHBWYWwyOiBFeHBWYWwgPSBhd2FpdCAoPFRhc2tCYXNlPnRoaXMuRXhwVGFzaykuZ2V0RXhwQnlJZChleHBWYWwuTWdOdW1WYWwuTlVNXzJfTE9ORygpKS5ldmFsdWF0ZVdpdGhSZXNUeXBlKFN0b3JhZ2VBdHRyaWJ1dGUuTk9ORSk7XHJcbiAgICAgIEV4cHJlc3Npb25FdmFsdWF0b3IuX3JlY3Vyc2l2ZUV4cENhbGNDb3VudC0tO1xyXG5cclxuICAgICAgaWYgKGV4cFZhbDIgIT09IG51bGwpXHJcbiAgICAgICAgcmVzVmFsLkNvcHkoZXhwVmFsMik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vIGltcGxlbWVudGF0aW9uIG9mIENuZFJhbmdlIGZ1bmN0aW9uOiBJZiBjb25kaXRpb24gaXMgdHJ1ZSwgdXNlIHRoZSAybmQgcGFyYW1ldGVyIGFzIHJhbmdlLiBpZiBub3QgLVxyXG4gIC8vLyBtYXJrIHRoZSByZXN1bHQgYXMgbnVsbFxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwicmVzVmFsXCI+PC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJ2YWwxXCI+PC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJ2YWwyXCI+PC9wYXJhbT5cclxuICBwcml2YXRlIGV2YWxfb3BfQ25kUmFuZ2UocmVzVmFsOiBFeHBWYWwsIHZhbDE6IEV4cFZhbCwgdmFsMjogRXhwVmFsKTogdm9pZCB7XHJcbiAgICBpZiAodmFsMS5Cb29sVmFsKVxyXG4gICAgICByZXNWYWwuQ29weSh2YWwyKTtcclxuICAgIGVsc2VcclxuICAgICAgcmVzVmFsLklzTnVsbCA9IHRydWU7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgcmV0dXJucyB0aGUgZXh0ZXJuYWwgdGFzayB0eXBlIG9mIHRoZSB0YXNrXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBwcml2YXRlIGV2YWxfb3BfdGFza1R5cGUocmVzVmFsOiBFeHBWYWwsIFBhcmVudDogRXhwVmFsKTogdm9pZCB7XHJcbiAgICBsZXQgaVBhcmVudDogbnVtYmVyID0gUGFyZW50Lk1nTnVtVmFsLk5VTV8yX0xPTkcoKTtcclxuICAgIGlmICgoaVBhcmVudCA+PSAwICYmIGlQYXJlbnQgPCAoKDxUYXNrQmFzZT50aGlzLkV4cFRhc2spLmdldFRhc2tEZXB0aChmYWxzZSkpKSB8fCBpUGFyZW50ID09PSBFeHByZXNzaW9uRXZhbHVhdG9yLlRSSUdHRVJfVEFTSykge1xyXG4gICAgICBsZXQgdGFzazogVGFza0Jhc2UgPSA8VGFza0Jhc2U+IHN1cGVyLkdldENvbnRleHRUYXNrKGlQYXJlbnQpO1xyXG4gICAgICBpZiAodGFzayAhPT0gbnVsbCkge1xyXG4gICAgICAgIHJlc1ZhbC5TdHJWYWwgPSAodGFzay5pc01haW5Qcm9nKCkgPyAnTVcnIDogJ1cnKTtcclxuICAgICAgfSBlbHNlXHJcbiAgICAgICAgcmVzVmFsLlN0clZhbCA9ICcgJztcclxuICAgIH1cclxuXHJcbiAgICByZXNWYWwuQXR0ciA9IFN0b3JhZ2VBdHRyaWJ1dGUuQUxQSEE7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgRnVuY3Rpb24gZ2V0dGluZyB0aGUgdGVybWluYWwgbnVtYmVyLlxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwicmVzVmFsXCI+PC9wYXJhbT5cclxuICBwcml2YXRlIGV2YWxfb3BfdGVybWluYWwocmVzVmFsOiBFeHBWYWwpOiB2b2lkIHtcclxuICAgIGxldCB0ZXJtaW5hbDogbnVtYmVyID0gRW52aXJvbm1lbnQuSW5zdGFuY2UuZ2V0VGVybWluYWwoKTtcclxuXHJcbiAgICBzdXBlci5Db25zdHJ1Y3RNYWdpY051bShyZXNWYWwsIHRlcm1pbmFsLCBTdG9yYWdlQXR0cmlidXRlLk5VTUVSSUMpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHJldHVybiB0aGUgcHJvamVjdCdzIGRpclxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwicmVzVmFsXCI+PC9wYXJhbT5cclxuICBwcml2YXRlIGV2YWxfb3BfcHJvamVjdGRpcihyZXNWYWw6IEV4cFZhbCk6IHZvaWQge1xyXG4gICAgcmVzVmFsLlN0clZhbCA9IEVudmlyb25tZW50Lkluc3RhbmNlLmdldFByb2pEaXIodGhpcy5FeHBUYXNrLmdldENvbXBJZHgoKSk7XHJcbiAgICByZXNWYWwuQXR0ciA9IFN0b3JhZ2VBdHRyaWJ1dGUuQUxQSEE7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgdGhpcyBtZXRob2QgY2hlY2tzIGlmIHRoZSBibG9iIGlzIHZhbGlkIHZlY3RvciBpLmUuIGlmIHRoZSBibG9iIGlzIGluIHZlY3RvcidzIGZsYXR0ZW4gZm9ybWF0XHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInZlY1wiPnRoZSBibG9iIHRvIGJlIGNoZWNrZWQ8L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz4gdHJ1ZSBpZiB2YWxpZCB2ZWN0b3I8L3JldHVybnM+XHJcbiAgcHJpdmF0ZSBzdGF0aWMgSXNWYWxpZFZlY3Rvcih2ZWM6IEV4cFZhbCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHZlYyAhPT0gbnVsbCAmJiB2ZWMuQXR0ciA9PT0gU3RvcmFnZUF0dHJpYnV0ZS5CTE9CX1ZFQ1RPUiAmJiBWZWN0b3JUeXBlLnZhbGlkYXRlQmxvYkNvbnRlbnRzKHZlYy5TdHJWYWwpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIGF0dHJpYnV0ZSBhY2NvcmRpbmcgdG8gbWFnaWMsIGZvciBlZyAnTCcgaXMgcmV0dXJuZWQgZm9yIGJvb2xlYW4uXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJzdG9yYWdlQXR0clwiPjwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPmF0dHJpYnV0ZSBjaGFyYWN0ZXIgY29ycmVzcG9uZGluZyB0byBzdG9yYWdlIGF0dHJpYnV0ZS48L3JldHVybnM+XHJcbiAgcHJpdmF0ZSBzdGF0aWMgR2V0QXR0cmlidXRlQ2hhcihzdG9yYWdlQXR0cjogU3RvcmFnZUF0dHJpYnV0ZSk6IHN0cmluZyB7XHJcbiAgICBsZXQgYXR0cjogc3RyaW5nID0gPHN0cmluZz5zdG9yYWdlQXR0cjtcclxuICAgIHN3aXRjaCAoc3RvcmFnZUF0dHIpIHtcclxuICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLkJMT0I6XHJcbiAgICAgICAgYXR0ciA9ICdCJztcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5CT09MRUFOOlxyXG4gICAgICAgIGF0dHIgPSAnTCc7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGF0dHI7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vIHJldHVybiBhbGwgdG9wIGxldmVsIGZvcm1zIHRoYXQgZXhpc3RcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cImNvbnRleHRJZFwiPjwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPjwvcmV0dXJucz5cclxuICBHZXRUb3BNb3N0Rm9ybXMoY29udGV4dElEOiBudW1iZXIpOiBMaXN0PE1nRm9ybUJhc2U+IHtcclxuICAgIHJldHVybiBBY2Nlc3NIZWxwZXIubWdEYXRhVGFibGUuR2V0VG9wTW9zdEZvcm1zKCk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vIE1vdmVzIHRoZSBjYXJldCB0byBzcGVjaWZpZWQgY29udHJvbFxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwiY3RybFRhc2tcIj48L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cImN0cmxcIj48L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cInJvd05vXCI+PC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+PC9yZXR1cm5zPlxyXG4gIEhhbmRsZUNvbnRyb2xHb3RvKGN0cmxUYXNrOiBJVGFzaywgY3RybDogTWdDb250cm9sQmFzZSwgcm93Tm86IG51bWJlcik6IGJvb2xlYW4ge1xyXG4gICAgbGV0IHRhc2s6IFRhc2tCYXNlID0gPFRhc2tCYXNlPmN0cmxUYXNrO1xyXG4gICAgaWYgKGN0cmwgIT09IG51bGwpIHtcclxuICAgICAgbGV0IGR2OiBEYXRhVmlldyA9IDxEYXRhVmlldz50YXNrLkRhdGFWaWV3O1xyXG4gICAgICBsZXQgdEN0cmw6IE1nQ29udHJvbCA9IDxNZ0NvbnRyb2w+Y3RybDtcclxuICAgICAgbGV0IHdhbnRlZExpbmU6IG51bWJlciA9IHRhc2suZ2V0Rm9ybSgpLkRpc3BsYXlMaW5lOyAvLyAwLWJhc2VkIHJlY29yZCBpbmRleFxyXG5cclxuICAgICAgLy8gdmFsaWRhdGUgc3BlY2lmaWVkIHJvd1xyXG4gICAgICBpZiAoY3RybC5Jc1JlcGVhdGFibGUgJiYgcm93Tm8gPiAwKSB7XHJcbiAgICAgICAgdGFzay5nZXRGb3JtKCkuZ2V0VG9wSW5kZXhGcm9tR1VJKCk7XHJcbiAgICAgICAgbGV0IHRvcFJlY0lkeDogbnVtYmVyID0gZHYuZ2V0VG9wUmVjSWR4KCk7XHJcbiAgICAgICAgd2FudGVkTGluZSA9IHRvcFJlY0lkeCArIHJvd05vIC0gMTtcclxuXHJcbiAgICAgICAgLy8gY2hlY2sgaWYgdGhlIHJlY29yZCBpcyBleGlzdCBpbiB0aGUgY3VycmVudCBwYWdlXHJcbiAgICAgICAgaWYgKHdhbnRlZExpbmUgLSB0b3BSZWNJZHggLSAxID49IHRhc2suZ2V0Rm9ybSgpLmdldFJvd3NJblBhZ2UoKSlcclxuICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICAgICAgLy8gY2hlY2sgZm9yIGludmFsaWQgcmVjb3JkIGluZGV4XHJcbiAgICAgICAgaWYgKCF0YXNrLmdldEZvcm0oKS5Jc1ZhbGlkUm93KHdhbnRlZExpbmUpKVxyXG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAodEN0cmwuaXNWaXNpYmxlKCkpIHtcclxuICAgICAgICBpZiAodEN0cmwuaXNTdWJmb3JtKCkpIHtcclxuICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIERlZmVjdCAxNTIzMTU6IFByb2JsZW06IFdoZW4gY2xpY2tlZCBvbiBCdXR0b24gYW5kIGNsaWNrZWQgb24gZWRpdCB3aGljaCBpcyBnZW5lcmF0ZWQgYXMgTGFiZWwgb24gVGFibGUsXHJcbiAgICAgICAgLy8gQ1AgJiBDUyBvZiBFZGl0IGlzIGNhbGxlZC4gVGhpcyBpcyBiZWNhdXNlIHdlIGVkaXQgd2hpY2ggaXMgTGFiZWwgaXMgbm9uLWZvY3VzYWJsZSBhbiBoZW5jZSBidXR0b24gZ2V0cyBmb2N1cyBiYWNrLlxyXG4gICAgICAgIC8vIFBvc3NpYmxlIHNvbHV0aW9uczpcclxuXHJcbiAgICAgICAgLy8gMSkgR290byBFZGl0aW5nIG1vZGUgd2hlbiBvbiBUYWJsZUNvbnRyb2wgd2hlbiBjb250cm9sR290byBpcyBjYWxsZWQgdGhlbiBoYW5kbGUgY29udHJvbEdvdG8gc3R1ZmYuIFRoaXMgd2lsbCBuZWVkIHNvbWUgcmVzZWFyY2gvYmlnZ2VyIGNoYW5nZXMuXHJcbiAgICAgICAgLy8gMikgSnVzdCBwYXJrIG9uIFJvdyBvbiB3aGljaCBDb250cm9sR290byBpcyBjYWxsZWQuIFRoaXMgbWVhbnMgaXQgd2lsbCB3b3JrIHBhcnRpYWxseSBpLmUuIGNhbGwgUlAgYW5kIG5vdCBDUCBvZiBjb250cm9sIG9uIHdoaWNoIENvbnRyb2xHb3RvIGlzIGNhbGxlZC5cclxuICAgICAgICAvLyAzKSBNYXliZSggbm90IGluIHRoaXMgdmVyc2lvbikgd2Ugc2hvdWxkIGludHJvZHVjZSDigJxnb3RvTGluZeKAnSAuIFRoZW4gdXNlciBjYW4gZG8gdGhpcyBhbmQgaGF2ZSBmdWxsIGNvbnRyb2w6XHJcbiAgICAgICAgLy8gICAgR290b0xpbmUoWClcclxuICAgICAgICAvLyAgICBSYWlzZSBSb3dFZGl0aW5nXHJcbiAgICAgICAgLy8gICAgR290b0NvbnRyb2woWSlcclxuICAgICAgICAvLyBPcHRpb24gMiB3YXMgc2VsZWN0ZWQgYnkgUE0uIEl0IHdpbGwgYXBwbHkgb25seSB3aGVuIHJvdyBpcyBub3QgaW4gZWRpdGluZyBtb2RlLlxyXG4gICAgICAgIGxldCBmcm06IE1nRm9ybSA9IDxNZ0Zvcm0+dGFzay5nZXRGb3JtKCk7XHJcbiAgICAgICAgbGV0IGlzUm93RWRpdGluZyA9IGZybS5nZXRJc1Jvd0VkaXRpbmdGcm9tR3VpKHdhbnRlZExpbmUpO1xyXG4gICAgICAgIGlmICh0Q3RybC5pc1JlcGVhdGFibGUoKSAmJiAhaXNSb3dFZGl0aW5nKSB7XHJcbiAgICAgICAgICBBY2Nlc3NIZWxwZXIuZXZlbnRzTWFuYWdlci5hZGRHdWlUcmlnZ2VyZWRFdmVudFdpdGhUYXNrQW5kQ29kZUFuZExpbmUodGFzaywgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX1JFQ19QUkVGSVgsIHdhbnRlZExpbmUpO1xyXG4gICAgICAgICAgY29uc29sZS5sb2coJ1VuYWJsZSB0byBwYXJrIG9uIGNvbnRyb2w6ICcgKyB0Q3RybC5OYW1lICsgJyBhcyByb3cgaXMgbm90IGluIGVkaXRpbmcgbW9kZScpO1xyXG4gICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIC8vIGp1bXAgdG8gdGhlIGNvbnRyb2xcclxuICAgICAgICAgIGxldCBydEV2dDogUnVuVGltZUV2ZW50ID0gbmV3IFJ1blRpbWVFdmVudCh0Q3RybCwgd2FudGVkTGluZSk7XHJcbiAgICAgICAgICBydEV2dC5zZXRJbnRlcm5hbChJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfQ1RSTF9GT0NVUyk7XHJcbiAgICAgICAgICBBY2Nlc3NIZWxwZXIuZXZlbnRzTWFuYWdlci5hZGRUb1RhaWwocnRFdnQpO1xyXG4gICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+KHByb3RlY3RlZClcclxuICAvLy8gc2V0cyB0aGUgc3RhdHVzIGJhciB0ZXh0IHdpdGggdGhlIGdpdmVuIHRleHQgYW5kXHJcbiAgLy8vIHNldHMgdGhlIHJlc3VsdCB3aXRoIHRoZSBsYXN0IHRleHQgdGhhdCB3YXMgc2V0IHRvIHRoZSBzdGF0dXMgYmFyIGJ5IHRoZSB1c2Ugb2YgdGhpcyBmdW5jdGlvblxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJyZXNWYWxcIj5sYXN0IHRleHQgb2Ygc3RhdHVzIGJhcjwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJzdGF0dXNCYXJUZXh0XCI+dGhlIHRleHQgdG8gYmUgc2V0IGF0IHN0YXR1cyBiYXI8L3BhcmFtPlxyXG4gIGV2YWxfb3Bfc2V0X3RpdGxlKHJlc1ZhbDogRXhwVmFsLCB0aXRsZTogRXhwVmFsKTogdm9pZCB7XHJcbiAgICByZXNWYWwuQXR0ciA9IFN0b3JhZ2VBdHRyaWJ1dGUuQk9PTEVBTjtcclxuICAgIHJlc1ZhbC5Cb29sVmFsID0gdHJ1ZTtcclxuXHJcbiAgICBpZiAoISh0aXRsZS5BdHRyICE9PSBTdG9yYWdlQXR0cmlidXRlLkFMUEhBICYmIHRpdGxlLkF0dHIgIT09IFN0b3JhZ2VBdHRyaWJ1dGUuVU5JQ09ERSkpIHtcclxuICAgICAgaWYgKCF0aXRsZS5Jc051bGwpIHtcclxuICAgICAgICBsZXQgdGV4dDogc3RyaW5nID0gdGl0bGUuU3RyVmFsO1xyXG4gICAgICAgIGxldCB0YXNrOiBUYXNrQmFzZSA9IDxUYXNrQmFzZT4gdGhpcy5FeHBUYXNrLkdldENvbnRleHRUYXNrKCk7XHJcblxyXG4gICAgICAgIC8vIEluIGNhc2Ugb2Ygbm9uIGludGVyYWN0aXZlIHRhc2tzLCBpdCBpcyBwb3NzaWJsZSB0aGF0IHRhc2sgaGFzIG9wZW4gd2luZG93ID0gTm8sIFNvIGRpc3BsYXkgdGhlIHN0YXR1cyBiYXIgbXNnIG9uIGZyYW1lIHdpbmRvdy5cclxuICAgICAgICBpZiAodGFzay5nZXRUb3BNb3N0Rm9ybSgpICE9PSBudWxsKSB7XHJcbiAgICAgICAgICB0YXNrLmdldFRvcE1vc3RGb3JtKCkuc2V0VGl0bGUodGV4dCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+KHByb3RlY3RlZClcclxuICAvLy8gZ2V0cyB0aGUgaXNSb3cgZWRpdGluZyBvbiB0aGUgY3VycmVudCB0YXNrXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBldmFsX29wX2lzX3Jvd19lZGl0aW5nKHJlc1ZhbDogRXhwVmFsLCB2YWwxOiBFeHBWYWwpOiB2b2lkIHtcclxuICAgIGxldCBpc1Jvd0VkaXRpbmc6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIGlmICh2YWwxLk1nTnVtVmFsID09PSBudWxsKSB7XHJcbiAgICAgIHN1cGVyLlNldE5VTEwocmVzVmFsLCBTdG9yYWdlQXR0cmlidXRlLkFMUEhBKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBwYXJlbnQ6IG51bWJlciA9IHZhbDEuTWdOdW1WYWwuTlVNXzJfTE9ORygpO1xyXG4gICAgaWYgKChwYXJlbnQgPj0gMCAmJiBwYXJlbnQgPCAoKDxUYXNrQmFzZT50aGlzLkV4cFRhc2spLmdldFRhc2tEZXB0aChmYWxzZSkpKSB8fCBwYXJlbnQgPT09IEV4cHJlc3Npb25FdmFsdWF0b3IuVFJJR0dFUl9UQVNLKSB7XHJcbiAgICAgIGxldCB0c2s6IFRhc2tCYXNlID0gPFRhc2tCYXNlPiBzdXBlci5HZXRDb250ZXh0VGFzayhwYXJlbnQpO1xyXG4gICAgICBsZXQgbXlmb3JtOiBNZ0Zvcm0gPSA8TWdGb3JtPnRzay5nZXRGb3JtKCk7XHJcbiAgICAgIGlzUm93RWRpdGluZyA9IG15Zm9ybS5nZXRJc1Jvd0VkaXRpbmdGcm9tR3VpKG15Zm9ybS5EaXNwbGF5TGluZSk7XHJcbiAgICB9XHJcbiAgICByZXNWYWwuQm9vbFZhbCA9IGlzUm93RWRpdGluZztcclxuICAgIHJlc1ZhbC5BdHRyID0gU3RvcmFnZUF0dHJpYnV0ZS5CT09MRUFOO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyBEaXNjb25uZWN0IHRoZSBkYXRhYmFzZSBjb25uZWN0aW9uIG9mIGdpdmVuIGRhdGFiYXNlIG5hbWUuXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJ2YWxcIj4gRGF0YWJhc2UgbmFtZTwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwicmVzVmFsXCI+UmV0dXJuIHN0YXR1cyBvZiBkaXNjb25uZWN0IG9wZXJhdGlvbjwvcGFyYW0+XHJcbiAgLy8gcHJpdmF0ZSB2b2lkIGV4cF9vcF9DbGllbnREYkRpc2Nvbm5lY3QoRXhwVmFsIHZhbCwgRXhwVmFsIHJlc1ZhbClcclxuICAvLyB7XHJcbiAgLy8gICBzdHJpbmcgZGF0YWJhc2VOYW1lID0gdmFsLlN0clZhbDtcclxuICAvLyAgIFRhc2tCYXNlIHRhc2sgPSAoVGFza0Jhc2UpRXhwVGFzaztcclxuXHJcbiAgLy8gICBJQ2xpZW50Q29tbWFuZCBjb21tYW5kID0gQ29tbWFuZEZhY3RvcnkuQ3JlYXRlQ2xpZW50RGJEaXNjb25uZWN0Q29tbWFuZChkYXRhYmFzZU5hbWUpO1xyXG4gIC8vICAgUmV0dXJuUmVzdWx0IHJlc3VsdCA9IHRhc2suRGF0YXZpZXdNYW5hZ2VyLkxvY2FsRGF0YXZpZXdNYW5hZ2VyLkV4ZWN1dGUoY29tbWFuZCk7XHJcblxyXG4gIC8vICAgcmVzVmFsLkF0dHIgPSBTdG9yYWdlQXR0cmlidXRlLkJPT0xFQU47XHJcbiAgLy8gICByZXNWYWwuQm9vbFZhbCA9IHJlc3VsdC5TdWNjZXNzO1xyXG4gIC8vIH1cclxuXHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gRXhlY3V0ZSBDb250cm9sU2VsZWN0UHJvZ3JhbSgpIGZ1bmN0b24uXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJleHBWYWxcIj48L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cInJlc1ZhbFwiPjwvcGFyYW0+XHJcbiAgYXN5bmMgZXZhbF9vcF9jb250cm9sX3NlbGVjdF9wcm9ncmFtKGV4cFZhbDogRXhwVmFsLCByZXNWYWw6IEV4cFZhbCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgbGV0IGNvbnRyb2xJRDogbnVtYmVyID0gZXhwVmFsLk1nTnVtVmFsLk5VTV8yX0xPTkcoKTtcclxuICAgIGxldCBwYXJlbnQ6IG51bWJlciA9IDA7XHJcblxyXG4gICAgbGV0IHJlZlBhcmVudDogUmVmUGFyYW08bnVtYmVyPiA9IG5ldyBSZWZQYXJhbShwYXJlbnQpO1xyXG4gICAgbGV0IG1nQ29udHJvbDogTWdDb250cm9sID0gKDxUYXNrQmFzZT50aGlzLkV4cFRhc2suR2V0Q29udGV4dFRhc2soKSkuR2V0Q29udHJvbEZyb21Db250cm9sSUQoY29udHJvbElEIC0gMSwgcmVmUGFyZW50KTtcclxuICAgIHBhcmVudCA9IHJlZlBhcmVudC52YWx1ZTtcclxuXHJcbiAgICByZXNWYWwuQXR0ciA9IFN0b3JhZ2VBdHRyaWJ1dGUuTlVNRVJJQztcclxuICAgIHJlc1ZhbC5NZ051bVZhbCA9IG5ldyBOVU1fVFlQRSgpO1xyXG5cclxuICAgIC8vIElmIGNvbnRyb2wgaGFzIHNlbGVjdCBwcm9ncmFtIHByb3BlcnR5LlxyXG4gICAgaWYgKG1nQ29udHJvbCAhPT0gbnVsbCAmJiBtZ0NvbnRyb2wuSGFzU2VsZWN0UHJvZ3JhbSgpKSB7XHJcbiAgICAgIGxldCBzZWxlY3RQcm9nUHJvcDogUHJvcGVydHkgPSBtZ0NvbnRyb2wuZ2V0UHJvcChQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9TRUxFQ1RfUFJPR1JBTSk7XHJcbiAgICAgIGxldCByZWFsSW5kZXg6IG51bWJlciA9IE5OdW1iZXIuUGFyc2UoYXdhaXQgc2VsZWN0UHJvZ1Byb3AuZ2V0VmFsdWUoKSk7XHJcbiAgICAgIGxldCBwcm9ncmFtSW5kZXg6IG51bWJlciA9IDA7XHJcbiAgICAgIGlmIChyZWFsSW5kZXggPiAwKSB7XHJcbiAgICAgICAgaWYgKHBhcmVudCA+IDApXHJcbiAgICAgICAgICBwcm9ncmFtSW5kZXggPSA8bnVtYmVyPnJlYWxJbmRleCArIDxudW1iZXI+cGFyZW50IC8gMTAwO1xyXG4gICAgICAgIGVsc2VcclxuICAgICAgICAgIHByb2dyYW1JbmRleCA9IDxudW1iZXI+cmVhbEluZGV4O1xyXG4gICAgICB9XHJcbiAgICAgIHJlc1ZhbC5NZ051bVZhbCA9IE5VTV9UWVBFLmZyb21fZG91YmxlKDxudW1iZXI+cHJvZ3JhbUluZGV4KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGV2YWxfb3BfQ2FsbEpTKHRhc2s6IElUYXNrLCBtZXRob2ROYW1lOiBzdHJpbmcsIGV4cFZhbDogRXhwVmFsW10sIHJlc1ZhbDogRXhwVmFsKTogdm9pZCB7XHJcbiAgICByZXNWYWwuQXR0ciA9IFN0b3JhZ2VBdHRyaWJ1dGUuQUxQSEE7XHJcbiAgICByZXNWYWwuU3RyVmFsID0gJyc7XHJcbiAgICBpZigoPFRhc2tCYXNlPnRhc2spLmlzTWFpblByb2coKSlcclxuICAgIHtcclxuICAgICAgY29uc29sZS5lcnJvcihcIkNhbGxKUyBjYW5ub3QgYmUgdXNlZCBpbiBNYWluIFByb2dyYW1cIik7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGxldCBmb3JtOiBNZ0Zvcm0gPSA8TWdGb3JtPig8VGFza0Jhc2U+dGFzaykuZ2V0Rm9ybSgpO1xyXG4gICAgbGV0IGFyZ3MgPSB0aGlzLnBhcmFtczJhcmd1bWVudHMoZXhwVmFsLCAwLCBleHBWYWwubGVuZ3RoKTtcclxuXHJcbiAgICBpZighaXNOdWxsT3JVbmRlZmluZWQoYXJncykpIHtcclxuICAgICAgcmVzVmFsLlN0clZhbCA9IENvbW1hbmRzLmFkZENhbGxKUyhmb3JtLCBmb3JtLlVuaXF1ZU5hbWUsIG1ldGhvZE5hbWUsIGFyZ3MpO1xyXG4gICAgICByZXNWYWwuQXR0ciA9IFN0b3JhZ2VBdHRyaWJ1dGUuQUxQSEE7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuXHJcbiAgZXZhbF9vcF9zZXRfY29va2llKGNvb2tpZU5hbWU6IHN0cmluZywgZXhwVmFsOiBFeHBWYWxbXSwgcmVzVmFsOiBFeHBWYWwpXHJcbiAge1xyXG4gICAgcmVzVmFsLkF0dHIgPSBTdG9yYWdlQXR0cmlidXRlLkJPT0xFQU47XHJcbiAgICByZXNWYWwuU3RyVmFsID0gJyc7XHJcblxyXG4gICAgbGV0IGFyZ3MgPSB0aGlzLnBhcmFtczJhcmd1bWVudHMoZXhwVmFsLCAwLCBleHBWYWwubGVuZ3RoKTtcclxuICAgIHZhciBleHBpcmVzRGF0ZSwgcGF0aCwgZG9tYWluLCBzZWN1cmUsIHNhbWVTaXRlO1xyXG5cclxuICAgIGV4cGlyZXNEYXRlID0gYXJnc1sxXTtcclxuICAgIGxldCBleHBpcmVzVGltZSA9IGFyZ3NbMl07XHJcbiAgICBsZXQgbmF0aXZlRHQ6IERhdGU7XHJcbiAgICBpZihleHBpcmVzRGF0ZSlcclxuICAgIHtcclxuXHJcbiAgICAgIGxldCBicmVha1BhcmFtczogRGF0ZUJyZWFrUGFyYW1zID0gRGlzcGxheUNvbnZlcnRvci5JbnN0YW5jZS5nZXROZXdEYXRlQnJlYWtQYXJhbXMoKTtcclxuICAgICAgRGlzcGxheUNvbnZlcnRvci5JbnN0YW5jZS5kYXRlX2JyZWFrX2RhdGVtb2RlKGJyZWFrUGFyYW1zLCBleHBpcmVzRGF0ZSwgZmFsc2UsIHRoaXMuRXhwVGFzay5nZXRDb21wSWR4KCkpO1xyXG4gICAgICBsZXQgeWVhcjogbnVtYmVyID0gYnJlYWtQYXJhbXMueWVhcjtcclxuICAgICAgbGV0IG1vbnRoOiBudW1iZXIgPSBicmVha1BhcmFtcy5tb250aDtcclxuICAgICAgbGV0IGRheTogbnVtYmVyID0gYnJlYWtQYXJhbXMuZGF5O1xyXG5cclxuICAgICAgaWYgKGJyZWFrUGFyYW1zLnllYXIgPT0gMCAmJiBicmVha1BhcmFtcy5tb250aCA9PSAwICYmIGJyZWFrUGFyYW1zLmRheSA9PSAwKVxyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICBuYXRpdmVEdCA9IG5ldyBEYXRlKGJyZWFrUGFyYW1zLnllYXIsIGJyZWFrUGFyYW1zLm1vbnRoIC0gMSwgYnJlYWtQYXJhbXMuZGF5KTtcclxuICAgICAgLy8gZ2V0IHRpbWUgZnJvbSBtYWdpYyBudW1iZXJcclxuXHJcbiAgICAgIGlmKGV4cGlyZXNUaW1lKSB7XHJcbiAgICAgICAgbGV0IHRpbWVCcmVha1BhcmFtczogVGltZUJyZWFrUGFyYW1zID0gRGlzcGxheUNvbnZlcnRvci5JbnN0YW5jZS5nZXROZXdUaW1lQnJlYWtQYXJhbXMoKTtcclxuICAgICAgICBEaXNwbGF5Q29udmVydG9yLnRpbWVfYnJlYWsodGltZUJyZWFrUGFyYW1zLCBleHBpcmVzVGltZSk7XHJcblxyXG4gICAgICAgIG5hdGl2ZUR0LnNldEhvdXJzKHRpbWVCcmVha1BhcmFtcy5ob3VyKTtcclxuICAgICAgICBuYXRpdmVEdC5zZXRNaW51dGVzKHRpbWVCcmVha1BhcmFtcy5taW51dGUpO1xyXG4gICAgICAgIG5hdGl2ZUR0LnNldFNlY29uZHModGltZUJyZWFrUGFyYW1zLnNlY29uZCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHBhdGggPSBhcmdzWzNdO1xyXG4gICAgZG9tYWluID0gYXJnc1s0XTtcclxuXHJcbiAgICByZXNWYWwuQm9vbFZhbCA9ICBDb29raWVTZXJ2aWNlLnNldENvb2tpZShjb29raWVOYW1lLCBhcmdzWzBdLCBuYXRpdmVEdCwgcGF0aCwgZG9tYWluICwgc2VjdXJlLCBzYW1lU2l0ZSk7XHJcbiAgfVxyXG5cclxuICBldmFsX29wX2dldF9jb29raWUoY29va2llTmFtZTogc3RyaW5nLCByZXNWYWw6IEV4cFZhbClcclxuICB7XHJcbiAgICAvLyBnZXQgdGhlIGNvb2tpZSB2YWx1ZVxyXG4gICAgcmVzVmFsLlN0clZhbCA9IENvb2tpZVNlcnZpY2UuZ2V0Q29va2llKGNvb2tpZU5hbWUpO1xyXG4gIH1cclxuXHJcbiAgZXZhbF9vcF9kZWxldGVfY29va2llKGNvb2tpZU5hbWU6IHN0cmluZywgcmVzVmFsOiBFeHBWYWwpXHJcbiAge1xyXG4gICAgLy8gZGVsZXRlIGNvb2tpZXMgXHJcbiAgICByZXNWYWwuQXR0ciA9IFN0b3JhZ2VBdHRyaWJ1dGUuQk9PTEVBTjtcclxuXHJcbiAgICByZXNWYWwuQm9vbFZhbCA9IENvb2tpZVNlcnZpY2UuZGVsZXRlQ29va2llKGNvb2tpZU5hbWUpOztcclxuICB9XHJcblxyXG4gIGV2YWxfb3Bfcm91dGVfZ2V0KHJlc1ZhbDogRXhwVmFsKVxyXG4gIHtcclxuICAgIHJlc1ZhbC5BdHRyID0gU3RvcmFnZUF0dHJpYnV0ZS5VTklDT0RFO1xyXG4gICAgcmVzVmFsLklzTnVsbCA9IGZhbHNlO1xyXG4gICAgcmVzVmFsLlN0clZhbCA9IENvbW1hbmRzLmdldExhc3RSb3V0ZSgpO1xyXG4gIH1cclxuXHJcblxyXG4gIHByaXZhdGUgcGFyYW1zMmFyZ3VtZW50cyhFeHBfcGFyYW1zOiBFeHBWYWxbXSwgc3RhcnRBdDogbnVtYmVyLCBjb3VudDogbnVtYmVyKTogQXJyYXk8YW55PiB7XHJcbiAgICBsZXQgTlVMTF9TVFI6IHN0cmluZyA9ICcnO1xyXG4gICAgbGV0IGF0dHI6IEFycmF5PGFueT4gPSBuZXcgQXJyYXk8YW55PigpO1xyXG5cclxuICAgIGZvciAobGV0IGk6IG51bWJlciA9IHN0YXJ0QXQ7IGkgPCBzdGFydEF0ICsgY291bnQ7IGkrKykge1xyXG4gICAgICBpZiAoaXNOdWxsT3JVbmRlZmluZWQoRXhwX3BhcmFtc1tpXSkpIHtcclxuICAgICAgICBhdHRyLnB1c2goTlVMTF9TVFIpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHN3aXRjaCAoRXhwX3BhcmFtc1tpXS5BdHRyKSB7XHJcbiAgICAgICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuQUxQSEE6XHJcbiAgICAgICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuVU5JQ09ERTpcclxuICAgICAgICAgICAgaWYgKEV4cF9wYXJhbXNbaV0uU3RyVmFsICE9IG51bGwgJiYgRXhwX3BhcmFtc1tpXS5TdHJWYWwubGVuZ3RoID4gMClcclxuICAgICAgICAgICAgICBhdHRyLnB1c2goRXhwX3BhcmFtc1tpXS5TdHJWYWwpO1xyXG4gICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgYXR0ci5wdXNoKE5VTExfU1RSKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLkJPT0xFQU46XHJcbiAgICAgICAgICAgIGF0dHIucHVzaChFeHBfcGFyYW1zW2ldLkJvb2xWYWwgPyB0cnVlIDogZmFsc2UpO1xyXG4gICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuREFURTpcclxuICAgICAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5USU1FOlxyXG4gICAgICAgICAgICBhdHRyLnB1c2goRXhwX3BhcmFtc1tpXS5NZ051bVZhbC5OVU1fMl9MT05HKCkpO1xyXG4gICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuTlVNRVJJQzpcclxuICAgICAgICAgICAgYXR0ci5wdXNoKEV4cF9wYXJhbXNbaV0uTWdOdW1WYWwudG9fZG91YmxlKCkpO1xyXG4gICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuQkxPQjpcclxuICAgICAgICAgICAgbGV0IGJsb2IgPSBFeHBfcGFyYW1zW2ldLlN0clZhbDtcclxuICAgICAgICAgICAgaWYoIWlzTnVsbE9yVW5kZWZpbmVkKGJsb2IpKSB7XHJcbiAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgbGV0IGNvbnRlbnRUeXBlOiBzdHJpbmcgPSBCbG9iVHlwZS5nZXRDb250ZW50VHlwZShibG9iKTtcclxuICAgICAgICAgICAgICAgIGlmIChjb250ZW50VHlwZSAhPT0gQmxvYlR5cGUuQ09OVEVOVF9UWVBFX0JJTkFSWSkge1xyXG4gICAgICAgICAgICAgICAgICBhdHRyLnB1c2goQmxvYlR5cGUuZ2V0U3RyaW5nKGJsb2IpKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgIExvZ2dlci5JbnN0YW5jZS5Xcml0ZUVycm9yVG9Mb2coJ0FyZ3VtZW50ICcgKyAoaSArIDEpICsgJyBvZiB0eXBlIEJpbmFyeSBCbG9iIGlzIG5vdCBzdXBwb3J0ZWQgaW4gQ2FsbEpTJyk7XHJcbiAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5OT05FOlxyXG4gICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgTG9nZ2VyLkluc3RhbmNlLldyaXRlRXJyb3JUb0xvZygnIEFyZ3VtZW50ICcrIChpICsgMSkrICcgaXMgbm90IHN1cHBvcnRlZCBpbiBDYWxsSlMnICk7XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGF0dHI7XHJcbiAgfVxyXG5cclxufVxyXG5cclxuLy8vIDxzdW1tYXJ5PlxyXG4vLy8gICBUaGlzIGV4Y2VwdGlvbiB1c2VkIHdoZW4gYXQgbGVhc3Qgb25lIG9mIHRoZSBvcGVyYW5kcyBpcyBudWxsXHJcbi8vLyA8L3N1bW1hcnk+XHJcbmV4cG9ydCBjbGFzcyBOdWxsVmFsdWVFeGNlcHRpb24gZXh0ZW5kcyBFeGNlcHRpb24ge1xyXG4gIHByaXZhdGUgX2F0dHI6IFN0b3JhZ2VBdHRyaWJ1dGUgPSBTdG9yYWdlQXR0cmlidXRlLk5PTkU7XHJcblxyXG4gIGNvbnN0cnVjdG9yKGF0dHI6IFN0b3JhZ2VBdHRyaWJ1dGUpIHtcclxuICAgIHN1cGVyKCk7XHJcbiAgICB0aGlzLl9hdHRyID0gYXR0cjtcclxuICAgIHRoaXMubmFtZSA9ICdOdWxsVmFsdWVFeGNlcHRpb24nO1xyXG4gIH1cclxuXHJcbiAgZ2V0QXR0cigpOiBTdG9yYWdlQXR0cmlidXRlIHtcclxuICAgIHJldHVybiB0aGlzLl9hdHRyO1xyXG4gIH1cclxufVxyXG5cclxuLy8vIDxzdW1tYXJ5PlxyXG4vLy8gICBUaGlzIGNsYXNzIGlzIHVzZWQgZm9yIHRyYWNraW5nIHRoZSBjdXJyZW50IHBvc2l0aW9uIGluIHRoZSBjdXJyZW50XHJcbi8vLyAgIGV4ZWN1dGVkIGV4cHJlc3Npb24uXHJcbi8vLyAgIGV4cFN0cl8gLSBpcyB0aGUgY3VycmVudCBzdHJpbmcgb2YgdGhlIGV4cHJlc3Npb24gYmVpbmcgZXhlY3V0ZWRcclxuLy8vICAgcG9zSWR4XyAtIGlzIHRoZSBjdXJyZW50IHBvc2l0aW9uIGluIHRoZSBleHByZXNzaW9uICh3aGlsZSBleGVjdXRpbmcgaXQpXHJcbi8vLyAgIFRoZSBjbGFzcyBhbHNvIHByb3ZpZGVzIG1ldGhvZHMgZm9yIGV4dHJhY3RpbmcgdmFsdWVzL29wZXJhdG9yIGZyb21cclxuLy8vICAgdGhlIGV4cHJlc3Npb24gYmVpbmcgZXhlY3V0ZWQuXHJcbi8vLyA8L3N1bW1hcnk+XHJcbmV4cG9ydCBjbGFzcyBFeHBTdHJUcmFja2VyIHtcclxuICBwcml2YXRlIF9leHBCeXRlczogSW50OEFycmF5ID0gbnVsbDsgLy8gQ3VycmVudCBzdHJpbmcgb2YgdGhlIGV4cHJlc3Npb24gYmVpbmcgZXhlY3V0ZWRcclxuICBwcml2YXRlIF9sb3dIaWdoOiBib29sZWFuID0gdHJ1ZTtcclxuICBwcml2YXRlIF9udWxsQXJpdGhtZXRpYzogYm9vbGVhbiA9IGZhbHNlOyAvLyB0cnVlLCBpZiB0YXNrIG9mIHRoZSBleHByZXNzaW9uIGhhcyBudWxsIGFyaXRobWV0aWMgPT0gbnVsbGlmeTtcclxuICBwcml2YXRlIF9pc051bGw6IGJvb2xlYW4gPSBmYWxzZTsgLy8gaXMgZXhwcmVzc2lvbiByZXN1bHQgTlVMTFxyXG4gIHByaXZhdGUgX3Bvc0lkeDogbnVtYmVyID0gMDsgLy8gVGhlIGN1cnJlbnQgcG9zaXRpb24gaW4gdGhlIGV4cHJlc3Npb24gKHdoaWxlIGV4ZWN1dGluZyBpdClcclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIGluaXRpYWxpemluZyB0aGUgY2xhc3Mgd2l0aCB0aGUgZXhwcmVzc2lvbiB0byBiZSBleGVjdXRlZFxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgY29uc3RydWN0b3IoZXhwQnl0ZXM6IEludDhBcnJheSwgbnVsbEFyaXRobWV0aWM6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMuX2V4cEJ5dGVzID0gbmV3IEludDhBcnJheShleHBCeXRlcy5sZW5ndGgpO1xyXG4gICAgZm9yIChsZXQgX2FpOiBudW1iZXIgPSAwOyBfYWkgPCB0aGlzLl9leHBCeXRlcy5sZW5ndGg7ICsrX2FpKVxyXG4gICAgICB0aGlzLl9leHBCeXRlc1tfYWldID0gMDtcclxuXHJcbiAgICBmb3IgKGxldCBpOiBudW1iZXIgPSAwOyBpIDwgZXhwQnl0ZXMubGVuZ3RoOyBpKyspXHJcbiAgICAgIHRoaXMuX2V4cEJ5dGVzW2ldID0gZXhwQnl0ZXNbaV07XHJcblxyXG4gICAgdGhpcy5fbnVsbEFyaXRobWV0aWMgPSBudWxsQXJpdGhtZXRpYztcclxuICAgIHRoaXMuX2xvd0hpZ2ggPSBFbnZpcm9ubWVudC5JbnN0YW5jZS5nZXRMb3dIaWdoKCk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgc2V0IHJlc3VsdCB0byBiZSBOVUxMXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBzZXROdWxsUmVzdWx0KCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuX251bGxBcml0aG1ldGljKVxyXG4gICAgICB0aGlzLl9pc051bGwgPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHJlc2V0IHJlc3VsdCB0byBiZSBOVUxMXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICByZXNldE51bGxSZXN1bHQoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5fbnVsbEFyaXRobWV0aWMpIHtcclxuICAgICAgdGhpcy5faXNOdWxsID0gZmFsc2U7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgY2hlY2sgaWYgdGhlIHJlc3VsdCBtdXN0IGJlIG51bGxcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIGlzTnVsbCgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl9pc051bGw7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgR2V0IGEgbnVtYmVyIHJlcHJlc2VudGVkIGluIDEgYnl0ZSBmcm9tIHRoZSBleHByZXNzaW9uXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHJldHVybnM+IHRoZSBudW1iZXJcclxuICAvLy8gPC9yZXR1cm5zPlxyXG4gIGdldDFCeXRlTnVtYmVyKCk6IG51bWJlciB7XHJcbiAgICBsZXQgbnVtOiBudW1iZXIgPSAodGhpcy5fZXhwQnl0ZXNbdGhpcy5fcG9zSWR4XSA+PSAwKSA/ICg8bnVtYmVyPnRoaXMuX2V4cEJ5dGVzW3RoaXMuX3Bvc0lkeF0pIDogKDI1NiArIDxudW1iZXI+dGhpcy5fZXhwQnl0ZXNbdGhpcy5fcG9zSWR4XSk7XHJcbiAgICB0aGlzLl9wb3NJZHggKz0gMTtcclxuXHJcbiAgICByZXR1cm4gbnVtO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIEdldCBhIG51bWJlciByZXByZXNlbnRlZCBpbiAyIGJ5dGVzIGZyb20gdGhlIGV4cHJlc3Npb25cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cmV0dXJucz4gdGhlIG51bWJlclxyXG4gIC8vLyA8L3JldHVybnM+XHJcbiAgZ2V0MkJ5dGVOdW1iZXIoKTogbnVtYmVyIHtcclxuICAgIGxldCBjMTogbnVtYmVyID0gKHRoaXMuX2V4cEJ5dGVzW3RoaXMuX3Bvc0lkeF0gPj0gMCkgPyAoPG51bWJlcj50aGlzLl9leHBCeXRlc1t0aGlzLl9wb3NJZHhdKSA6ICgyNTYgKyA8bnVtYmVyPnRoaXMuX2V4cEJ5dGVzW3RoaXMuX3Bvc0lkeF0pO1xyXG4gICAgdGhpcy5fcG9zSWR4ICs9IDE7XHJcblxyXG4gICAgbGV0IGMyOiBudW1iZXIgPSAodGhpcy5fZXhwQnl0ZXNbdGhpcy5fcG9zSWR4XSA+PSAwKSA/ICg8bnVtYmVyPnRoaXMuX2V4cEJ5dGVzW3RoaXMuX3Bvc0lkeF0pIDogKDI1NiArIDxudW1iZXI+dGhpcy5fZXhwQnl0ZXNbdGhpcy5fcG9zSWR4XSk7XHJcbiAgICB0aGlzLl9wb3NJZHggKz0gMTtcclxuXHJcbiAgICBsZXQgbnVtOiBudW1iZXIgPSA8bnVtYmVyPih0aGlzLl9sb3dIaWdoID8gRXhwcmVzc2lvbkV2YWx1YXRvci5NS19TSFJUKDxudW1iZXI+YzIsIDxudW1iZXI+YzEpIDogRXhwcmVzc2lvbkV2YWx1YXRvci5NS19TSFJUKDxudW1iZXI+YzEsIDxudW1iZXI+YzIpKTtcclxuICAgIHJldHVybiBudW07XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgR2V0IGEgbnVtYmVyIHJlcHJlc2VudGVkIGluIDQgYnl0ZSBmcm9tIHRoZSBleHByZXNzaW9uXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHJldHVybnM+dGhlIG51bWJlcjwvcmV0dXJucz5cclxuICBnZXQ0Qnl0ZU51bWJlcigpOiBudW1iZXIge1xyXG4gICAgbGV0IGM0OiBudW1iZXIgPSAodGhpcy5fZXhwQnl0ZXNbdGhpcy5fcG9zSWR4XSA+PSAwKSA/ICg8bnVtYmVyPnRoaXMuX2V4cEJ5dGVzW3RoaXMuX3Bvc0lkeF0pIDogKDI1NiArIDxudW1iZXI+dGhpcy5fZXhwQnl0ZXNbdGhpcy5fcG9zSWR4XSk7XHJcbiAgICB0aGlzLl9wb3NJZHggKz0gMTtcclxuXHJcbiAgICBsZXQgYzM6IG51bWJlciA9ICh0aGlzLl9leHBCeXRlc1t0aGlzLl9wb3NJZHhdID49IDApID8gKDxudW1iZXI+dGhpcy5fZXhwQnl0ZXNbdGhpcy5fcG9zSWR4XSkgOiAoMjU2ICsgPG51bWJlcj50aGlzLl9leHBCeXRlc1t0aGlzLl9wb3NJZHhdKTtcclxuICAgIHRoaXMuX3Bvc0lkeCArPSAxO1xyXG5cclxuICAgIGxldCBjMjogbnVtYmVyID0gKHRoaXMuX2V4cEJ5dGVzW3RoaXMuX3Bvc0lkeF0gPj0gMCkgPyAoPG51bWJlcj50aGlzLl9leHBCeXRlc1t0aGlzLl9wb3NJZHhdKSA6ICgyNTYgKyA8bnVtYmVyPnRoaXMuX2V4cEJ5dGVzW3RoaXMuX3Bvc0lkeF0pO1xyXG4gICAgdGhpcy5fcG9zSWR4ICs9IDE7XHJcblxyXG4gICAgbGV0IGMxOiBudW1iZXIgPSAodGhpcy5fZXhwQnl0ZXNbdGhpcy5fcG9zSWR4XSA+PSAwKSA/ICg8bnVtYmVyPnRoaXMuX2V4cEJ5dGVzW3RoaXMuX3Bvc0lkeF0pIDogKDI1NiArIDxudW1iZXI+dGhpcy5fZXhwQnl0ZXNbdGhpcy5fcG9zSWR4XSk7XHJcbiAgICB0aGlzLl9wb3NJZHggKz0gMTtcclxuXHJcbiAgICBsZXQgbnVtOiBudW1iZXIgPSB0aGlzLl9sb3dIaWdoID8gRXhwcmVzc2lvbkV2YWx1YXRvci5NS19MT05HKGMxLCBjMiwgYzMsIGM0KSA6IEV4cHJlc3Npb25FdmFsdWF0b3IuTUtfTE9ORyhjNCwgYzMsIGMyLCBjMSk7XHJcbiAgICByZXR1cm4gbnVtO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIEdldCBhbHBoYSBzdHJpbmcgZnJvbSB0aGUgZXhwcmVzc2lvbiBieSBpdHMgbGVuZ3RoXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImxlblwiPiAgICAgICAgbGVuZ3RoIG9mIHN0cmluZyB0byBleHRyYWN0PC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInVwZGF0ZUlkeFwiPiAgdGhlIGN1cnJlbnQgcG9zaXRpb24gd2lsbCBiZSBpbmNyZW1lbnRlZDwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJpc1VuaWNvZGVcIj48L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz4gdGhlIG51bWJlcjwvcmV0dXJucz5cclxuICBnZXRTdHJpbmcobGVuOiBudW1iZXIsIHVwZGF0ZUlkeDogYm9vbGVhbiwgaXNVbmljb2RlOiBib29sZWFuKTogc3RyaW5nIHtcclxuICAgIGxldCBzdHI6IHN0cmluZyA9ICcnO1xyXG4gICAgbGV0IGJ5dGVzOiBudW1iZXI7XHJcblxyXG4gICAgaWYgKGlzVW5pY29kZSA9PT0gZmFsc2UpIHtcclxuICAgICAgYnl0ZXMgPSBsZW47XHJcbiAgICAgIGxldCB0bXBDaGFyOiBzdHJpbmdbXSA9IG5ldyBBcnJheTxzdHJpbmc+KHRoaXMuX2V4cEJ5dGVzLmxlbmd0aCk7XHJcbiAgICAgIGZvciAobGV0IGk6IG51bWJlciA9IDA7IGkgPCB0aGlzLl9leHBCeXRlcy5sZW5ndGg7IGkgPSBpICsgMSlcclxuICAgICAgICB0bXBDaGFyW2ldID0gU3RyaW5nLmZyb21DaGFyQ29kZSh0aGlzLl9leHBCeXRlc1tpXSk7XHJcblxyXG4gICAgICBzdHIgPSBOU3RyaW5nLkZyb21DaGFycyh0bXBDaGFyLCB0aGlzLl9wb3NJZHgsIGxlbik7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBieXRlcyA9IGxlbiAqIDI7XHJcblxyXG4gICAgICBsZXQgdG1wOiBVaW50OEFycmF5ID0gbmV3IFVpbnQ4QXJyYXkoYnl0ZXMpO1xyXG5cclxuICAgICAgbGV0IGluY3JlbWVudDogbnVtYmVyID0gKCF0aGlzLl9sb3dIaWdoKSA/IENvbnN0SW50ZXJmYWNlLkJZVEVTX0lOX0NIQVIgOiAxO1xyXG5cclxuICAgICAgZm9yIChsZXQgaTogbnVtYmVyID0gdGhpcy5fcG9zSWR4OyBpIDwgdGhpcy5fcG9zSWR4ICsgYnl0ZXM7IGkgPSBpICsgaW5jcmVtZW50KSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLl9sb3dIaWdoKSB7XHJcbiAgICAgICAgICB0bXBbaSAtIHRoaXMuX3Bvc0lkeF0gPSA8bnVtYmVyPnRoaXMuX2V4cEJ5dGVzW2kgKyAxXTtcclxuICAgICAgICAgIHRtcFtpICsgMSAtIHRoaXMuX3Bvc0lkeF0gPSA8bnVtYmVyPnRoaXMuX2V4cEJ5dGVzW2ldO1xyXG4gICAgICAgIH0gZWxzZVxyXG4gICAgICAgICAgdG1wW2kgLSB0aGlzLl9wb3NJZHhdID0gPG51bWJlcj50aGlzLl9leHBCeXRlc1tpXTtcclxuICAgICAgfVxyXG5cclxuICAgICAgdHJ5IHtcclxuICAgICAgICBzdHIgPSBFbmNvZGluZy5Vbmljb2RlLkdldFN0cmluZyh0bXAsIDAsIHRtcC5sZW5ndGgpO1xyXG4gICAgICB9IGNhdGNoIChleCkge1xyXG4gICAgICAgIGlmIChleCBpbnN0YW5jZW9mIEV4Y2VwdGlvbikge1xyXG4gICAgICAgICAgTG9nZ2VyLkluc3RhbmNlLldyaXRlRXhjZXB0aW9uVG9Mb2coZXgpO1xyXG4gICAgICAgIH0gZWxzZVxyXG4gICAgICAgICAgdGhyb3cgZXg7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGlmICh1cGRhdGVJZHgpIHtcclxuICAgICAgdGhpcy5fcG9zSWR4ICs9IGJ5dGVzO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHN0cjtcclxuICB9XHJcblxyXG4gIC8vLyBUbyBlbmhhbmNlIHRoZSBwZXJmb3JtYW5jZSBvZiB0aGUgcnVudGltZSBleHByZXNzaW9uIGV2YWx1YXRvcixcclxuICAvLy8gdGhlIGZ1bmN0aW9uIHBvaW50ZXIgdG8gdGhlIHJlbGV2YW50IGVudHJ5IGluIHRoZSBFWFBfT1BfVEFCIGlzIHNhdmVkXHJcbiAgLy8vIGluIHRoZSBwb2xpc2hlZCBleHByZXNzaW9uIGluc3RlYWQgb2YgcmVmZXJlbmNpbmcgaXQgZWFjaCB0aW1lIHdlIG5lZWRcclxuICAvLy8gaXQgaW4gcnVudGltZS4gQnV0IGluIEJyb3dzZXIgQ2xpZW50IHdlIGRvIG5vdCAocmF0aGVyIHdlIGNhbm5vdCkgdXNlXHJcbiAgLy8vIHRoaXMgZnVuY3Rpb24gcG9pbnRlciBhbmQgc28gd2UgaGF2ZSB0byBza2lwIGl0LlxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBUbyBlbmhhbmNlIHRoZSBwZXJmb3JtYW5jZSBvZiB0aGUgcnVudGltZSBleHByZXNzaW9uIGV2YWx1YXRvcixcclxuICAvLy8gICB0aGUgZnVuY3Rpb24gcG9pbnRlciB0byB0aGUgcmVsZXZhbnQgZW50cnkgaW4gdGhlIEVYUF9PUF9UQUIgaXMgc2F2ZWRcclxuICAvLy8gICBpbiB0aGUgcG9saXNoZWQgZXhwcmVzc2lvbiBpbnN0ZWFkIG9mIHJlZmVyZW5jaW5nIGl0IGVhY2ggdGltZSB3ZSBuZWVkXHJcbiAgLy8vICAgaXQgaW4gcnVudGltZS4gQnV0IGluIEJyb3dzZXIgQ2xpZW50IHdlIGRvIG5vdCAocmF0aGVyIHdlIGNhbm5vdCkgdXNlXHJcbiAgLy8vICAgdGhpcyBmdW5jdGlvbiBwb2ludGVyIGFuZCBzbyB3ZSBoYXZlIHRvIHNraXAgaXQuXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBwcml2YXRlIHNraXBPcEZ1bmN0aW9uUHRyKCk6IHZvaWQge1xyXG4gICAgdGhpcy5fcG9zSWR4ICs9IEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QRVJfRlVOQ19QVFJfTEVOO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIEdldCBhbiBvcGVyYXRvciBmcm9tIHRoZSBjdXJyZW50IHBvc2l0aW9uIGluIHRoZSBleHByZXNzaW9uXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHJldHVybnM+IHRoZSBjdXJyZW50IG9wZXJhdG9yPC9yZXR1cm5zPlxyXG4gIGdldE9wQ29kZSgpOiBudW1iZXIge1xyXG4gICAgbGV0IHRtcDogbnVtYmVyW10gPSBbXHJcbiAgICAgIHRoaXMuX2xvd0hpZ2ggPyB0aGlzLl9leHBCeXRlc1t0aGlzLl9wb3NJZHhdIDogdGhpcy5fZXhwQnl0ZXNbdGhpcy5fcG9zSWR4ICsgMV0sIHRoaXMuX2xvd0hpZ2ggPyB0aGlzLl9leHBCeXRlc1t0aGlzLl9wb3NJZHggKyAxXSA6IHRoaXMuX2V4cEJ5dGVzW3RoaXMuX3Bvc0lkeF1cclxuICAgIF07XHJcbiAgICBsZXQgbnVtOiBudW1iZXIgPSAodG1wWzFdID49IDApID8gKDxudW1iZXI+dG1wWzFdKSA6ICgyNTYgKyA8bnVtYmVyPnRtcFsxXSk7XHJcbiAgICBudW0gPDw9IDg7XHJcbiAgICBudW0gPSAobnVtIHwgKCh0bXBbMF0gPj0gMCkgPyAoPG51bWJlcj50bXBbMF0pIDogKDI1NiArIDxudW1iZXI+dG1wWzBdKSkpO1xyXG4gICAgdGhpcy5fcG9zSWR4ICs9IEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QRVJfTEVOO1xyXG5cclxuICAgIHRoaXMuc2tpcE9wRnVuY3Rpb25QdHIoKTtcclxuXHJcbiAgICByZXR1cm4gbnVtO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIEdldCBhIHZhcmlhYmxlIGlkeCBmcm9tIHRoZSBjdXJyZW50IHBvc2l0aW9uIGluIHRoZSBleHByZXNzaW9uXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHJldHVybnM+IHRoZSB2YXJpYWJsZSBpZHg8L3JldHVybnM+XHJcbiAgZ2V0VmFySWR4KCk6IG51bWJlciB7XHJcbiAgICBsZXQgZmxpcDogbnVtYmVyID0gMDtcclxuXHJcbiAgICBpZiAodGhpcy5fbG93SGlnaClcclxuICAgICAgZmxpcCA9IDEgLSBmbGlwO1xyXG5cclxuICAgIC8vIHRoZSBmaXJzdCBieXRlIGlzIHRoZSBsZWFzdCBzaWduaWZpY2FudCBoZXJlXHJcbiAgICBsZXQgbnVtOiBudW1iZXIgPSAodGhpcy5fZXhwQnl0ZXNbdGhpcy5fcG9zSWR4ICsgZmxpcF0gPj0gMCkgPyAoPG51bWJlcj50aGlzLl9leHBCeXRlc1t0aGlzLl9wb3NJZHggKyBmbGlwXSkgOiAoMjU2ICsgPG51bWJlcj50aGlzLl9leHBCeXRlc1t0aGlzLl9wb3NJZHggKyBmbGlwXSk7XHJcbiAgICBudW0gPDw9IDg7XHJcbiAgICBmbGlwID0gMSAtIGZsaXA7XHJcbiAgICBudW0gfD0gKCh0aGlzLl9leHBCeXRlc1t0aGlzLl9wb3NJZHggKyBmbGlwXSA+PSAwKSA/ICg8bnVtYmVyPnRoaXMuX2V4cEJ5dGVzW3RoaXMuX3Bvc0lkeCArIGZsaXBdKSA6ICgyNTYgKyA8bnVtYmVyPnRoaXMuX2V4cEJ5dGVzW3RoaXMuX3Bvc0lkeCArIGZsaXBdKSk7XHJcbiAgICB0aGlzLl9wb3NJZHggKz0gRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BFUl9MRU47XHJcblxyXG4gICAgcmV0dXJuIG51bTtcclxuICB9XHJcblxyXG4vLy8gPHN1bW1hcnk+XHJcbi8vLyAgIEdldCBhIE1hZ2ljIE51bWJlciBmcm9tIHRoZSBleHByZXNzaW9uXHJcbi8vLyA8L3N1bW1hcnk+XHJcbi8vLyA8cGFyYW0gbmFtZSA9IFwibGVuXCI+IGxlbmd0aCBvZiB0aGUgbWFnaWMgbnVtYmVyIHdpdGhpbiB0aGUgZXhwcmVzc2lvbjwvcGFyYW0+XHJcbi8vLyA8cGFyYW0gbmFtZSA9IFwidXBkYXRlSWR4XCI+ICB0aGUgY3VycmVudCBwb3NpdGlvbiB3aWxsIGJlIGluY3JlbWVudGVkPC9wYXJhbT5cclxuLy8vIDxyZXR1cm5zPiB0aGUgTWFnaWMgTnVtYmVyPC9yZXR1cm5zPlxyXG4gIGdldE1hZ2ljTnVtYmVyKGxlbjogbnVtYmVyLCB1cGRhdGVJZHg6IGJvb2xlYW4pOiBOVU1fVFlQRSB7XHJcbiAgICBsZXQgbWdOdW06IE5VTV9UWVBFID0gbmV3IE5VTV9UWVBFKHRoaXMuX2V4cEJ5dGVzLCB0aGlzLl9wb3NJZHgsIGxlbik7XHJcbiAgICBpZiAodXBkYXRlSWR4KVxyXG4gICAgICB0aGlzLl9wb3NJZHggKz0gbGVuO1xyXG4gICAgcmV0dXJuIG1nTnVtO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIFNraXBzIGFuIG9wZXJhdG9yIHdpdGhpbiBhbiBleHByZXNzaW9uIGZyb20gdGhlIGN1cnJlbnQgcG9zaXRpb25cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIHNraXBPcGVyYXRvcigpOiB2b2lkIHtcclxuICAgICAgbGV0IGFyZ3NSZW1haW46IG51bWJlciA9IDE7XHJcbiAgICAgIGxldCBleHBEZXNjOiBFeHBEZXNjO1xyXG4gICAgICBsZXQgbGVuO1xyXG5cclxuICAgICAgd2hpbGUgKGFyZ3NSZW1haW4gPiAwKSB7XHJcbiAgICAgICAgICBhcmdzUmVtYWluLS07XHJcbiAgICAgICAgICBsZXQgb3BDb2RlOiBudW1iZXIgPSB0aGlzLmdldE9wQ29kZSgpO1xyXG4gICAgICAgICAgc3dpdGNoIChvcENvZGUpIHtcclxuICAgICAgICAgICAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgICAgICAgICAgIC8vIFNraXAgU3RyaW5nIHZhbHVlXHJcbiAgICAgICAgICAgICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgICAgICAgICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX0E6XHJcbiAgICAgICAgICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9IOlxyXG4gICAgICAgICAgICAgICAgICBsZW4gPSB0aGlzLmdldDRCeXRlTnVtYmVyKCk7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuX3Bvc0lkeCArPSAobGVuICogQ29uc3RJbnRlcmZhY2UuQllURVNfSU5fQ0hBUik7XHJcbiAgICAgICAgICAgICAgICAgIC8vIHNpbmNlIHRoZSBzZXJ2ZXIgc2VuZHMgdXMgYm90aCBVbmljb2RlIHN0cmluZyBBbnNpIHN0cmluZyBmb3JcclxuICAgICAgICAgICAgICAgICAgLy8gZWFjaCBzdHJpbmcgaW4gdGhlIGV4cHJlc3Npb24sIGFuZCB0aGUgY2xpZW50IHVzZXMgb25seSB1bmljb2RlLFxyXG4gICAgICAgICAgICAgICAgICAvLyB3ZSB3aWxsIGRpcmVnYXJkIHRoZSBBbnNpIHN0cmluZ1xyXG4gICAgICAgICAgICAgICAgICBsZW4gPSB0aGlzLmdldDRCeXRlTnVtYmVyKCk7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuX3Bvc0lkeCArPSBsZW47XHJcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX0VYVF9BOlxyXG4gICAgICAgICAgICAgICAgICBsZW4gPSB0aGlzLmdldDJCeXRlTnVtYmVyKCk7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuX3Bvc0lkeCArPSBsZW47XHJcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgICAgICAgICAgIC8vIFNraXAgTWFnaWMgTnVtYmVyIHZhbHVlXHJcbiAgICAgICAgICAgICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICAgICAgICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9OOlxyXG4gICAgICAgICAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfVDpcclxuICAgICAgICAgICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX0Q6XHJcbiAgICAgICAgICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9NOlxyXG4gICAgICAgICAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfSzpcclxuICAgICAgICAgICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX0U6XHJcbiAgICAgICAgICAgICAgICAgIGxlbiA9IHRoaXMuZ2V0MkJ5dGVOdW1iZXIoKTtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5fcG9zSWR4ICs9IGxlbjtcclxuICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAgICAgICAgICAgLy8gU2tpcCBQcm9nIGFuZCBGaWxlIGxpdGVyYWxzIHdoaWNoIGFsc28gaW5jbHVkZSBhIGNvbXBvbmVudCByZWZlcmVuY2VcclxuICAgICAgICAgICAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgICAgICAgICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX0Y6XHJcbiAgICAgICAgICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9QOlxyXG4gICAgICAgICAgICAgICAgICBsZW4gPSB0aGlzLmdldDJCeXRlTnVtYmVyKCk7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuX3Bvc0lkeCArPSBsZW47XHJcbiAgICAgICAgICAgICAgICAgIGxlbiA9IHRoaXMuZ2V0MkJ5dGVOdW1iZXIoKTtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5fcG9zSWR4ICs9IGxlbjtcclxuICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAgICAgICAgICAgLy8gU2tpcCBMb2dpY2FsIFZhbHVlXHJcbiAgICAgICAgICAgICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICAgICAgICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9MOlxyXG4gICAgICAgICAgICAgICAgICB0aGlzLl9wb3NJZHggKz0gMjtcclxuICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAgICAgICAgICAgLy8gU2tpcCB2YXJpYWJsZVxyXG4gICAgICAgICAgICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgICAgICAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfVjpcclxuICAgICAgICAgICAgICAgICAgLy8gaWYgc29tZXRoaW5nIHdyb25nIHdpdGggZXNjYXBlIHZhcmlhYmxlLCBjaGFuZ2UgdGhpcyBudW1iZXIuXHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuX3Bvc0lkeCArPSAoRXhwcmVzc2lvbkV2YWx1YXRvci5QQVJFTlRfTEVOICsgRXhwcmVzc2lvbkV2YWx1YXRvci5MT05HX09CSkVDVF9MRU4pO1xyXG4gICAgICAgICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9GT1JNOlxyXG4gICAgICAgICAgICAgICAgICB0aGlzLl9wb3NJZHggKz0gKEV4cHJlc3Npb25FdmFsdWF0b3IuUEFSRU5UX0xFTiArIEV4cHJlc3Npb25FdmFsdWF0b3IuTE9OR19PQkpFQ1RfTEVOKTtcclxuICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfVkFSOlxyXG4gICAgICAgICAgICAgICAgICB0aGlzLl9wb3NJZHggKz0gKEV4cHJlc3Npb25FdmFsdWF0b3IuUEFSRU5UX0xFTiArIEV4cHJlc3Npb25FdmFsdWF0b3IuTE9OR19PQkpFQ1RfTEVOKTtcclxuICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfUklHSFRfTElURVJBTDpcclxuICAgICAgICAgICAgICAgICAgbGVuID0gdGhpcy5nZXQyQnl0ZU51bWJlcigpO1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLl9wb3NJZHggKz0gbGVuO1xyXG4gICAgICAgICAgICAgICAgICAvLyBTa2lwIGV4dHJhIHVudXNlZCBzdHJpbmcgc3RvcmVkIGFmdGVyIGxpdGVyYWxcclxuICAgICAgICAgICAgICAgICAgbGVuID0gdGhpcy5nZXQyQnl0ZU51bWJlcigpO1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLl9wb3NJZHggKz0gbGVuO1xyXG4gICAgICAgICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICAgICAgLyogY2FzZSBFWFBfT1BfQUNUOlxyXG4gICAgICAgICAgICAgICBwb3NJZHhfICs9MjtcclxuICAgICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgICAgICBjYXNlIEVYUF9PUF9LQkQ6XHJcbiAgICAgICAgICAgICAgIHBvc0lkeF8gKys7XHJcbiAgICAgICAgICAgICAgIGJyZWFrOyAqL1xyXG5cclxuICAgICAgICAgICAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgICAgICAgICAgIC8vIEN1cnJlbnQgb3BlcmF0b3IgaXMgYSBmdW5jdGlvbiwgc28gd2UganVzdCBuZWVkIHRvIHVwZGF0ZVxyXG4gICAgICAgICAgICAgIC8vICB0aGUgbnVtYmVyIG9mIGFyZ3VtZW50cyB0byBza2lwXHJcbiAgICAgICAgICAgICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgICAgZXhwRGVzYyA9IEV4cHJlc3Npb25EaWN0LmV4cERlc2Nbb3BDb2RlXTtcclxuICAgICAgICAgICAgICAgICAgaWYgKGV4cERlc2MuQXJnQ291bnRfIDwgMClcclxuICAgICAgICAgICAgICAgICAgICAgIGFyZ3NSZW1haW4gKz0gdGhpcy5nZXQxQnl0ZU51bWJlcigpO1xyXG4gICAgICAgICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICAgICAgICBhcmdzUmVtYWluICs9IGV4cERlc2MuQXJnQ291bnRfO1xyXG4gICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIH1cclxuICAgICAgfVxyXG4gIH1cclxufVxyXG5cclxuY2xhc3MgRHluYW1pY09wZXJhdGlvbiB7XHJcbiAgYXJnQ291bnRfOiBudW1iZXIgPSAwO1xyXG4gIG9wQ29kZV86IG51bWJlciA9IEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX05PTkU7XHJcbn1cclxuXHJcbiJdfQ==