speechrecorderng 3.3.1 → 3.3.4

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 (32) hide show
  1. package/esm2020/lib/audio/playback/player.mjs +2 -2
  2. package/esm2020/lib/speechrecorder/session/audiorecorder.mjs +92 -77
  3. package/esm2020/lib/speechrecorder/session/basicrecorder.mjs +11 -5
  4. package/esm2020/lib/speechrecorder/session/controlpanel.mjs +50 -37
  5. package/esm2020/lib/speechrecorder/session/prompting.mjs +19 -15
  6. package/esm2020/lib/speechrecorder/session/recorder_combi_pane.mjs +14 -11
  7. package/esm2020/lib/speechrecorder/session/recording_list.mjs +2 -2
  8. package/esm2020/lib/speechrecorder/session/recordingfile/recording-file-navi.component.mjs +9 -9
  9. package/esm2020/lib/speechrecorder/session/recordingfile/recording-file-u-i.component.mjs +3 -3
  10. package/esm2020/lib/speechrecorder/session/recordingfile/recording-file-view.component.mjs +3 -3
  11. package/esm2020/lib/speechrecorder/session/sessionmanager.mjs +226 -206
  12. package/esm2020/lib/speechrecorderng.component.mjs +2 -1
  13. package/esm2020/lib/speechrecorderng.module.mjs +5 -5
  14. package/esm2020/lib/spr.module.version.mjs +2 -2
  15. package/esm2020/lib/ui/recordingitem_display.mjs +29 -25
  16. package/esm2020/lib/ui/responsive_component.mjs +24 -0
  17. package/fesm2015/speechrecorderng.mjs +432 -349
  18. package/fesm2015/speechrecorderng.mjs.map +1 -1
  19. package/fesm2020/speechrecorderng.mjs +432 -349
  20. package/fesm2020/speechrecorderng.mjs.map +1 -1
  21. package/lib/speechrecorder/session/audiorecorder.d.ts +5 -3
  22. package/lib/speechrecorder/session/basicrecorder.d.ts +6 -3
  23. package/lib/speechrecorder/session/controlpanel.d.ts +9 -3
  24. package/lib/speechrecorder/session/prompting.d.ts +5 -1
  25. package/lib/speechrecorder/session/recorder_combi_pane.d.ts +5 -2
  26. package/lib/speechrecorder/session/sessionmanager.d.ts +6 -3
  27. package/lib/speechrecorderng.component.d.ts +1 -1
  28. package/lib/speechrecorderng.module.d.ts +18 -19
  29. package/lib/spr.module.version.d.ts +1 -1
  30. package/lib/ui/recordingitem_display.d.ts +8 -4
  31. package/lib/ui/responsive_component.d.ts +9 -0
  32. package/package.json +1 -2
@@ -75,6 +75,7 @@ export class AudioPlayer {
75
75
  return this._stopAction;
76
76
  }
77
77
  set audioClip(audioClip) {
78
+ this._audioClip = audioClip;
78
79
  let length = 0;
79
80
  let chs = 0;
80
81
  if (audioClip && audioClip.audioDataHolder) {
@@ -97,7 +98,6 @@ export class AudioPlayer {
97
98
  else {
98
99
  this.audioSource = null;
99
100
  }
100
- this._audioClip = audioClip;
101
101
  }
102
102
  get audioSource() {
103
103
  return this._audioSource;
@@ -358,4 +358,4 @@ export class AudioPlayer {
358
358
  }
359
359
  }
360
360
  AudioPlayer.DEFAULT_BUFSIZE = 8192;
361
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGxheWVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc3BlZWNocmVjb3JkZXJuZy9zcmMvbGliL2F1ZGlvL3BsYXliYWNrL3BsYXllci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0scUJBQXFCLENBQUE7QUFFNUMsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFDdkQsT0FBTyxFQUFDLDBCQUEwQixFQUFDLE1BQU0sa0NBQWtDLENBQUM7QUFDNUUsT0FBTyxFQUFDLG9CQUFvQixFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFDM0QsT0FBTyxFQUFDLDhCQUE4QixFQUFDLE1BQU0sc0NBQXNDLENBQUM7QUFDcEYsT0FBTyxFQUFDLDhCQUE4QixFQUFDLE1BQU0sa0NBQWtDLENBQUM7QUFFaEYsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLHFCQUFxQixDQUFDO0FBQ25ELE9BQU8sRUFBQyx3QkFBd0IsRUFBQyxNQUFNLGdDQUFnQyxDQUFDO0FBQ3hFLE9BQU8sRUFBQyxpQkFBaUIsRUFBYyxNQUFNLHNCQUFzQixDQUFDO0FBSWhFLE1BQU0sQ0FBTixJQUFhLFNBQWlFO0FBQTlFLFdBQWEsU0FBUztJQUFFLDZDQUFNLENBQUE7SUFBQywyQ0FBSyxDQUFBO0lBQUMsK0NBQU8sQ0FBQTtJQUFDLHFEQUFVLENBQUE7SUFBRSwrQ0FBTyxDQUFBO0lBQUUsMkNBQUssQ0FBQTtJQUFDLDJDQUFLLENBQUE7QUFBQSxDQUFDLEVBQWpFLFNBQVMsS0FBVCxTQUFTLFFBQXdEO0FBRTlFLE1BQU0sT0FBTyxnQkFBZ0I7SUFLekIsWUFBWSxJQUFjLEVBQUUsWUFBb0I7UUFDNUMsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7UUFDbEIsSUFBSSxDQUFDLGFBQWEsR0FBRyxZQUFZLENBQUM7SUFDdEMsQ0FBQztJQUVELElBQUksSUFB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SUFBRyxJQUFJLENBQUMsc0JBQXNCLEVBQUM7WUFDbkMsR0FBRyxHQUFDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxnQkFBZ0IsQ0FBQztTQUNsRDtRQUNELE9BQU8sR0FBRyxDQUFDO0lBQ2YsQ0FBQztJQUVILElBQUksa0JBQWtCO1FBQ3BCLElBQUksS0FBSyxHQUFhLElBQUksQ0FBQztRQUM1QixJQUFHLElBQUksQ0FBQyxZQUFZLEVBQUU7WUFDcEIsSUFBSSxFQUFFLEdBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxVQUFVLENBQUM7WUFDcEMsSUFBSSxFQUFFLEVBQUU7Z0JBQ04sSUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDO2dCQUNuQyxJQUFJLE1BQU0sS0FBSyxJQUFJLEVBQUU7b0JBQ25CLEtBQUssR0FBRyxFQUFFLEdBQUcsTUFBTSxDQUFDO2lCQUNyQjthQUNGO1NBQ0Y7UUFDQSxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7O0FBdldlLDJCQUFlLEdBQVUsSUFBSSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWN0aW9uIH0gZnJvbSAnLi4vLi4vYWN0aW9uL2FjdGlvbidcclxuaW1wb3J0IHsgQXVkaW9DbGlwIH0gZnJvbSAnLi4vcGVyc2lzdG9yJ1xyXG5pbXBvcnQge0FycmF5QXVkaW9CdWZmZXJ9IGZyb20gXCIuLi9hcnJheV9hdWRpb19idWZmZXJcIjtcclxuaW1wb3J0IHtBcnJheUF1ZGlvQnVmZmVyU291cmNlTm9kZX0gZnJvbSBcIi4vYXJyYXlfYXVkaW9fYnVmZmVyX3NvdXJjZV9ub2RlXCI7XHJcbmltcG9ydCB7SW5kZXhlZERiQXVkaW9CdWZmZXJ9IGZyb20gXCIuLi9pbmRkYl9hdWRpb19idWZmZXJcIjtcclxuaW1wb3J0IHtBdWRpb1NvdXJjZVdvcmtsZXRNb2R1bGVMb2FkZXJ9IGZyb20gXCIuL2F1ZGlvX3NvdXJjZV93b3JrbGV0X21vZHVsZV9sb2FkZXJcIjtcclxuaW1wb3J0IHtJbmRleGVkRGJBdWRpb0J1ZmZlclNvdXJjZU5vZGV9IGZyb20gXCIuL2luZGRiX2F1ZGlvX2J1ZmZlcl9zb3VyY2Vfbm9kZVwiO1xyXG5pbXBvcnQge0F1ZGlvU291cmNlTm9kZX0gZnJvbSBcIi4vYXVkaW9fc291cmNlX25vZGVcIjtcclxuaW1wb3J0IHtOZXRBdWRpb0J1ZmZlcn0gZnJvbSBcIi4uL25ldF9hdWRpb19idWZmZXJcIjtcclxuaW1wb3J0IHtOZXRBdWRpb0J1ZmZlclNvdXJjZU5vZGV9IGZyb20gXCIuL25ldF9hdWRpb19idWZmZXJfc291cmNlX25vZGVcIjtcclxuaW1wb3J0IHtBdWRpb0J1ZmZlclNvdXJjZSwgQXVkaW9Tb3VyY2V9IGZyb20gXCIuLi9hdWRpb19kYXRhX2hvbGRlclwiO1xyXG5cclxuXHJcblxyXG4gICAgZXhwb3J0IGVudW0gIEV2ZW50VHlwZSB7Q0xPU0VELFJFQURZLFNUQVJURUQsUE9TX1VQREFURSwgU1RPUFBFRCwgRU5ERUQsRVJST1J9XHJcblxyXG4gICAgZXhwb3J0IGNsYXNzIEF1ZGlvUGxheWVyRXZlbnR7XHJcblxyXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgX3R5cGU6RXZlbnRUeXBlO1xyXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgX3RpbWVQb3NpdGlvbjpudW1iZXIgfCB1bmRlZmluZWQ7XHJcblxyXG4gICAgICAgIGNvbnN0cnVjdG9yKHR5cGU6RXZlbnRUeXBlLCB0aW1lUG9zaXRpb24/Om51bWJlcikge1xyXG4gICAgICAgICAgICB0aGlzLl90eXBlID0gdHlwZTtcclxuICAgICAgICAgICAgdGhpcy5fdGltZVBvc2l0aW9uID0gdGltZVBvc2l0aW9uO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZ2V0IHR5cGUoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl90eXBlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZ2V0IHRpbWVQb3NpdGlvbigpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3RpbWVQb3NpdGlvbjtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBleHBvcnQgaW50ZXJmYWNlIEF1ZGlvUGxheWVyTGlzdGVuZXIge1xyXG4gICAgICAgIGF1ZGlvUGxheWVyVXBkYXRlKGU6QXVkaW9QbGF5ZXJFdmVudCk6dm9pZDtcclxuICAgIH1cclxuXHJcbiAgICBleHBvcnQgY2xhc3MgQXVkaW9QbGF5ZXIge1xyXG5cclxuICAgICAgICBnZXQgYXV0b1BsYXlPblNlbGVjdFRvZ2dsZUFjdGlvbigpOiBBY3Rpb248Ym9vbGVhbj4ge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fYXV0b1BsYXlPblNlbGVjdFRvZ2dsZUFjdGlvbjtcclxuICAgICAgICB9XHJcbiAgICAgICAgcHVibGljIHN0YXRpYyBERUZBVUxUX0JVRlNJWkU6bnVtYmVyID0gODE5MjtcclxuICAgICAgICBwcml2YXRlIHJ1bm5pbmc9ZmFsc2U7XHJcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBfc3RhcnRBY3Rpb246QWN0aW9uPHZvaWQ+O1xyXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgX3N0YXJ0U2VsZWN0aW9uQWN0aW9uOkFjdGlvbjx2b2lkPjtcclxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IF9hdXRvUGxheU9uU2VsZWN0VG9nZ2xlQWN0aW9uOkFjdGlvbjxib29sZWFuPlxyXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgX3N0b3BBY3Rpb246QWN0aW9uPHZvaWQ+O1xyXG4gICAgICAgIGJ1ZlNpemU6bnVtYmVyO1xyXG4gICAgICAgIGNvbnRleHQ6QXVkaW9Db250ZXh0O1xyXG4gICAgICAgIHJlYWR5PWZhbHNlO1xyXG4gICAgICAgIGxpc3RlbmVyOkF1ZGlvUGxheWVyTGlzdGVuZXI7XHJcbiAgICAgICAgX2F1ZGlvQ2xpcDpBdWRpb0NsaXB8bnVsbD1udWxsO1xyXG4gICAgICAgIHByaXZhdGUgX2F1ZGlvU291cmNlOkF1ZGlvU291cmNlfG51bGw9bnVsbDtcclxuICAgICAgICBzb3VyY2VCdWZmZXJOb2RlOkF1ZGlvQnVmZmVyU291cmNlTm9kZXxudWxsPW51bGw7XHJcbiAgICAgICAgc291cmNlQXVkaW9Xb3JrbGV0Tm9kZTpBdWRpb1NvdXJjZU5vZGV8bnVsbD1udWxsO1xyXG5cclxuICAgICAgICBidWZmUG9zOm51bWJlcjtcclxuICAgICAgICBwcml2YXRlIHplcm9CdWZDbnQ6bnVtYmVyO1xyXG4gICAgICAgIG46YW55O1xyXG4gICAgICAgIHpiOkZsb2F0MzJBcnJheTtcclxuICAgICAgICBwcml2YXRlIHBsYXlTdGFydFRpbWU6bnVtYmVyfG51bGw9bnVsbDtcclxuXHJcbiAgICAgICAgcHJpdmF0ZSB0aW1lclZhcjpudW1iZXJ8bnVsbD1udWxsO1xyXG5cclxuICAgICAgICBjb25zdHJ1Y3Rvcihjb250ZXh0OkF1ZGlvQ29udGV4dCwgbGlzdGVuZXI6QXVkaW9QbGF5ZXJMaXN0ZW5lcikge1xyXG4gICAgICAgICAgIHRoaXMuY29udGV4dD1jb250ZXh0O1xyXG4gICAgICAgICAgICB0aGlzLmxpc3RlbmVyPWxpc3RlbmVyO1xyXG4gICAgICAgICAgICB0aGlzLmJ1ZlNpemUgPSBBdWRpb1BsYXllci5ERUZBVUxUX0JVRlNJWkU7XHJcbiAgICAgICAgICAgIHRoaXMubj1uYXZpZ2F0b3I7XHJcbiAgICAgICAgICAgIHRoaXMuYnVmZlBvcz0wO1xyXG4gICAgICAgICAgICB0aGlzLnplcm9CdWZDbnQ9MDtcclxuICAgICAgICAgICAgdGhpcy56YiA9IG5ldyBGbG9hdDMyQXJyYXkodGhpcy5idWZTaXplKTtcclxuICAgICAgICAgICAgdGhpcy5fc3RhcnRBY3Rpb24gPSBuZXcgQWN0aW9uKCdTdGFydCcpO1xyXG4gICAgICAgICAgICB0aGlzLl9zdGFydEFjdGlvbi5kaXNhYmxlZCA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMuX3N0YXJ0QWN0aW9uLm9uQWN0aW9uID0gKCk9PnRoaXMuc3RhcnQoKTtcclxuICAgICAgICAgICAgdGhpcy5fc3RhcnRTZWxlY3Rpb25BY3Rpb249bmV3IEFjdGlvbignU3RhcnQgc2VsZWN0ZWQnKVxyXG4gICAgICAgICAgICB0aGlzLl9zdGFydFNlbGVjdGlvbkFjdGlvbi5kaXNhYmxlZD10cnVlXHJcbiAgICAgICAgICAgIHRoaXMuX3N0YXJ0U2VsZWN0aW9uQWN0aW9uLm9uQWN0aW9uID0gKCk9PnRoaXMuc3RhcnRTZWxlY3RlZCgpO1xyXG4gICAgICAgICAgICB0aGlzLl9hdXRvUGxheU9uU2VsZWN0VG9nZ2xlQWN0aW9uPW5ldyBBY3Rpb248Ym9vbGVhbj4oXCJBdXRvcGxheSBvbiBzZWxlY3RcIixmYWxzZSk7XHJcbiAgICAgICAgICAgIHRoaXMuX3N0b3BBY3Rpb24gPSBuZXcgQWN0aW9uKCdTdG9wJyk7XHJcbiAgICAgICAgICAgIHRoaXMuX3N0b3BBY3Rpb24uZGlzYWJsZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLl9zdG9wQWN0aW9uLm9uQWN0aW9uID0gKCk9PnRoaXMuc3RvcCgpO1xyXG4gICAgICAgICAgdGhpcy5jb250ZXh0LmFkZEV2ZW50TGlzdGVuZXIoJ3N0YXRlY2hhbmdlJywgKGV2KSA9PiB7XHJcbiAgICAgICAgICAgICAgaWYodGhpcy5jb250ZXh0LnN0YXRlIT09J3J1bm5pbmcnKXtcclxuICAgICAgICAgICAgICAgIHRoaXMuc3RvcCgpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGdldCBzdGFydEFjdGlvbigpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3N0YXJ0QWN0aW9uO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZ2V0IHN0YXJ0U2VsZWN0aW9uQWN0aW9uKCl7XHJcbiAgICAgICAgICByZXR1cm4gdGhpcy5fc3RhcnRTZWxlY3Rpb25BY3Rpb25cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGdldCBzdG9wQWN0aW9uKCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fc3RvcEFjdGlvbjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHNldCBhdWRpb0NsaXAoYXVkaW9DbGlwOkF1ZGlvQ2xpcHwgbnVsbCkge1xyXG5cclxuICAgICAgICAgICAgbGV0IGxlbmd0aCA9IDA7XHJcbiAgICAgICAgICAgIGxldCBjaHMgPSAwO1xyXG4gICAgICAgICAgICBpZiAoYXVkaW9DbGlwICYmIGF1ZGlvQ2xpcC5hdWRpb0RhdGFIb2xkZXIpIHtcclxuICAgICAgICAgICAgICAgIGxldCBhdWRpb0RhdGFIb2xkZXI9YXVkaW9DbGlwLmF1ZGlvRGF0YUhvbGRlcjtcclxuICAgICAgICAgICAgICAgIGNocyA9IGF1ZGlvRGF0YUhvbGRlci5udW1iZXJPZkNoYW5uZWxzXHJcbiAgICAgICAgICAgICAgICBpZiAoY2hzID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGxlbmd0aCA9IGF1ZGlvRGF0YUhvbGRlci5mcmFtZUxlbjtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoY2hzID4gdGhpcy5jb250ZXh0LmRlc3RpbmF0aW9uLm1heENoYW5uZWxDb3VudCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBUT0RPIGV4Y2VwdGlvblxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRoaXMuYXVkaW9Tb3VyY2U9YXVkaW9EYXRhSG9sZGVyLmF1ZGlvU291cmNlO1xyXG5cclxuICAgICAgICAgICAgICAgIGF1ZGlvQ2xpcC5hZGRTZWxlY3Rpb25PYnNlcnZlcigoYWMpPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3N0YXJ0U2VsZWN0aW9uQWN0aW9uLmRpc2FibGVkID0gdGhpcy5zdGFydFNlbGVjdGlvbkRpc2FibGVkKClcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuc3RhcnRTZWxlY3Rpb25BY3Rpb24uZGlzYWJsZWQgJiYgdGhpcy5fYXV0b1BsYXlPblNlbGVjdFRvZ2dsZUFjdGlvbi52YWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGFydFNlbGVjdGVkKClcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmF1ZGlvU291cmNlPW51bGw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIHRoaXMuX2F1ZGlvQ2xpcD1hdWRpb0NsaXBcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgZ2V0IGF1ZGlvU291cmNlKCk6IEF1ZGlvU291cmNlIHwgbnVsbCB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2F1ZGlvU291cmNlO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBzZXQgYXVkaW9Tb3VyY2UodmFsdWU6IEF1ZGlvU291cmNlIHwgbnVsbCkge1xyXG4gICAgICAgIHRoaXMuc3RvcCgpO1xyXG4gICAgICAgIHRoaXMuX2F1ZGlvU291cmNlID0gdmFsdWU7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLl9hdWRpb1NvdXJjZSAmJiB0aGlzLmNvbnRleHQpIHtcclxuICAgICAgICAgICAgICBpZiAodGhpcy5fYXVkaW9Tb3VyY2UgaW5zdGFuY2VvZiBBdWRpb0J1ZmZlclNvdXJjZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yZWFkeSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZVN0YXJ0QWN0aW9ucygpO1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMubGlzdGVuZXIpIHtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5saXN0ZW5lci5hdWRpb1BsYXllclVwZGF0ZShuZXcgQXVkaW9QbGF5ZXJFdmVudChFdmVudFR5cGUuUkVBRFkpKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fbG9hZFNvdXJjZVdvcmtsZXRBbmRJbml0U3RhcnQoKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1lbHNlIHtcclxuICAgICAgICAgICAgICB0aGlzLnJlYWR5ID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgdGhpcy51cGRhdGVTdGFydEFjdGlvbnMoKTtcclxuICAgICAgICAgICAgICBpZiAodGhpcy5saXN0ZW5lcikge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5saXN0ZW5lci5hdWRpb1BsYXllclVwZGF0ZShuZXcgQXVkaW9QbGF5ZXJFdmVudChFdmVudFR5cGUuQ0xPU0VEKSk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgICAgcHJpdmF0ZSBfbG9hZFNvdXJjZVdvcmtsZXRBbmRJbml0U3RhcnQoKXtcclxuICAgICAgICAgIEF1ZGlvU291cmNlV29ya2xldE1vZHVsZUxvYWRlci5sb2FkTW9kdWxlKHRoaXMuY29udGV4dCkudGhlbigoKT0+e1xyXG4gICAgICAgICAgICAvL2NvbnNvbGUuZGVidWcoXCJQbGF5ZXIgcmVhZHkuICggYnkgUGxheWVyOjpfbG9hZFNvdXJjZVdvcmtsZXRBbmRJbml0U3RhcnQoKVwiKTtcclxuICAgICAgICAgICAgdGhpcy5yZWFkeT10cnVlO1xyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVN0YXJ0QWN0aW9ucygpO1xyXG4gICAgICAgICAgICBpZih0aGlzLmxpc3RlbmVyKXtcclxuICAgICAgICAgICAgICB0aGlzLmxpc3RlbmVyLmF1ZGlvUGxheWVyVXBkYXRlKG5ldyBBdWRpb1BsYXllckV2ZW50KEV2ZW50VHlwZS5SRUFEWSkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KS5jYXRjaCgoZXJyb3I6IGFueSk9PntcclxuICAgICAgICAgICAgdGhpcy5yZWFkeT1mYWxzZTtcclxuICAgICAgICAgICAgIHRoaXMudXBkYXRlU3RhcnRBY3Rpb25zKCk7XHJcbiAgICAgICAgICAgIGlmKHRoaXMubGlzdGVuZXIpe1xyXG4gICAgICAgICAgICAgIHRoaXMubGlzdGVuZXIuYXVkaW9QbGF5ZXJVcGRhdGUobmV3IEF1ZGlvUGxheWVyRXZlbnQoRXZlbnRUeXBlLkNMT1NFRCkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0NvdWxkIG5vdCBhZGQgbW9kdWxlICcrZXJyb3IpO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG5cclxuXHJcbiAgcHJpdmF0ZSBfc3RhcnRBdWRpb1NvdXJjZVdvcmtsZXROb2RlKCl7XHJcbiAgICAgICAgICBpZih0aGlzLnNvdXJjZUF1ZGlvV29ya2xldE5vZGUpIHtcclxuICAgICAgICAgICAgdGhpcy5zb3VyY2VBdWRpb1dvcmtsZXROb2RlLm9ucHJvY2Vzc29yZXJyb3IgPSAoZXY6IEV2ZW50KSA9PiB7XHJcbiAgICAgICAgICAgICAgbGV0IG1zZyA9ICdVbmtud29uIGVycm9yJztcclxuICAgICAgICAgICAgICBpZiAoZXYgaW5zdGFuY2VvZiBFcnJvckV2ZW50KSB7XHJcbiAgICAgICAgICAgICAgICBtc2cgPSBldi5tZXNzYWdlO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFwiQXVkaW8gc291cmNlIHdvcmtsZXQgZXJyb3I6IFwiICsgbXNnKTtcclxuICAgICAgICAgICAgICBpZiAodGhpcy5saXN0ZW5lcikge1xyXG4gICAgICAgICAgICAgICAgLy8gVE9ET1xyXG4gICAgICAgICAgICAgICAgLy8gdGhpcy5saXN0ZW5lci5lcnJvcihtc2cpO1xyXG4gICAgICAgICAgICAgICAgLy8gdGhpcy5saXN0ZW5lci5hdWRpb1BsYXllclVwZGF0ZShuZXcgQXVkaW9QbGF5ZXJFdmVudCgpKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICB0aGlzLnNvdXJjZUF1ZGlvV29ya2xldE5vZGUuY29ubmVjdCh0aGlzLmNvbnRleHQuZGVzdGluYXRpb24pOyAvLyB0aGlzIGFscmVhZHkgc3RhcnRzIHBsYXlpbmdcclxuICAgICAgICAgICAgdGhpcy5zb3VyY2VBdWRpb1dvcmtsZXROb2RlLm9uZW5kZWQgPSAoKSA9PiB0aGlzLm9uZW5kZWQoKTtcclxuICAgICAgICAgICAgdGhpcy5ydW5uaW5nID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5zb3VyY2VBdWRpb1dvcmtsZXROb2RlLnN0YXJ0KCk7XHJcbiAgICAgICAgICAgIC8vY29uc29sZS5kZWJ1ZyhcIlBsYXliYWNrIHN0YXJ0IGFjdGlvbiBlbmFibGVkLiAoIGJ5IFBsYXllcjo6X3N0YXJ0QXVkaW9Tb3VyY2VXb3JrbGV0Tm9kZSgpXCIpO1xyXG4gICAgICAgICAgICB0aGlzLl9zdGFydEFjdGlvbi5kaXNhYmxlZCA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMuX3N0YXJ0U2VsZWN0aW9uQWN0aW9uLmRpc2FibGVkID0gdHJ1ZVxyXG4gICAgICAgICAgICB0aGlzLl9zdG9wQWN0aW9uLmRpc2FibGVkID0gZmFsc2U7XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5saXN0ZW5lcikge1xyXG4gICAgICAgICAgICAgIHRoaXMubGlzdGVuZXIuYXVkaW9QbGF5ZXJVcGRhdGUobmV3IEF1ZGlvUGxheWVyRXZlbnQoRXZlbnRUeXBlLlNUQVJURUQpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG5cclxuICB9XHJcblxyXG4gICAgICAgIHN0YXJ0KCkge1xyXG4gICAgICAgICAgICBpZighdGhpcy5fc3RhcnRBY3Rpb24uZGlzYWJsZWQgJiYgIXRoaXMucnVubmluZykge1xyXG4gICAgICAgICAgICAgIGlmKHRoaXMuY29udGV4dC5zdGF0ZSE9PSdydW5uaW5nJykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jb250ZXh0LnJlc3VtZSgpLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLl9zdGFydCgpO1xyXG4gICAgICAgICAgICAgICAgfSkuY2F0Y2goKHJlYXNvbikgPT4ge1xyXG4gICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdDb3VsZCBub3QgcmVzdW1lIGF1ZGlvIGNvbnRleHQ6ICcgKyByZWFzb24pO1xyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3N0YXJ0KCk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB1cGRhdGVTdGFydEFjdGlvbnMoKXtcclxuXHJcbiAgICAgICAgICBpZih0aGlzLnJlYWR5KXtcclxuICAgICAgICAgICAgaWYodGhpcy5fYXVkaW9Tb3VyY2UgaW5zdGFuY2VvZiBBdWRpb0J1ZmZlclNvdXJjZSB8fCB0aGlzLl9hdWRpb1NvdXJjZSBpbnN0YW5jZW9mIEFycmF5QXVkaW9CdWZmZXIgfHwgdGhpcy5fYXVkaW9Tb3VyY2UgaW5zdGFuY2VvZiBJbmRleGVkRGJBdWRpb0J1ZmZlcil7XHJcbiAgICAgICAgICAgICAgdGhpcy5fc3RhcnRBY3Rpb24uZGlzYWJsZWQ9ZmFsc2U7XHJcbiAgICAgICAgICAgICAgdGhpcy5fc3RhcnRTZWxlY3Rpb25BY3Rpb24uZGlzYWJsZWQ9dGhpcy5zdGFydFNlbGVjdGlvbkRpc2FibGVkKCk7XHJcbiAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgIGlmKHRoaXMuX2F1ZGlvU291cmNlIGluc3RhbmNlb2YgTmV0QXVkaW9CdWZmZXIpe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fYXVkaW9Tb3VyY2UuYWRkT25SZWFkeUxpc3RlbmVyKCgpPT57XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuX3N0YXJ0QWN0aW9uLmRpc2FibGVkPWZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLl9zdGFydFNlbGVjdGlvbkFjdGlvbi5kaXNhYmxlZD10aGlzLnN0YXJ0U2VsZWN0aW9uRGlzYWJsZWQoKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgIHRoaXMuX3N0YXJ0QWN0aW9uLmRpc2FibGVkPXRydWU7XHJcbiAgICAgICAgICAgIHRoaXMuX3N0YXJ0U2VsZWN0aW9uQWN0aW9uLmRpc2FibGVkPXRydWU7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBzdGFydFNlbGVjdGlvbkRpc2FibGVkKCl7XHJcbiAgICAgICAgICByZXR1cm4gISh0aGlzLl9hdWRpb0NsaXAgJiYgdGhpcy5jb250ZXh0ICYmICF0aGlzLnN0YXJ0QWN0aW9uLmRpc2FibGVkICYmIHRoaXMuX2F1ZGlvQ2xpcC5zZWxlY3Rpb24gKVxyXG4gICAgICAgIH1cclxuXHJcblxyXG4gICAgICAgIHByaXZhdGUgX3N0YXJ0KHBsYXlTZWxlY3Rpb249ZmFsc2Upe1xyXG4gICAgICAgICAgaWYgKHRoaXMuX2F1ZGlvU291cmNlIGluc3RhbmNlb2YgQXVkaW9CdWZmZXJTb3VyY2UpIHtcclxuICAgICAgICAgICAgdGhpcy5zb3VyY2VCdWZmZXJOb2RlID0gdGhpcy5jb250ZXh0LmNyZWF0ZUJ1ZmZlclNvdXJjZSgpO1xyXG4gICAgICAgICAgICB0aGlzLnNvdXJjZUJ1ZmZlck5vZGUuYnVmZmVyID0gdGhpcy5fYXVkaW9Tb3VyY2UuYXVkaW9CdWZmZXI7XHJcbiAgICAgICAgICAgIHRoaXMuc291cmNlQnVmZmVyTm9kZS5jb25uZWN0KHRoaXMuY29udGV4dC5kZXN0aW5hdGlvbik7XHJcbiAgICAgICAgICAgIHRoaXMuc291cmNlQnVmZmVyTm9kZS5vbmVuZGVkID0gKCkgPT4gdGhpcy5vbmVuZGVkKCk7XHJcbiAgICAgICAgICAgIHRoaXMucGxheVN0YXJ0VGltZSA9IHRoaXMuY29udGV4dC5jdXJyZW50VGltZTtcclxuICAgICAgICAgICAgdGhpcy5ydW5uaW5nID0gdHJ1ZTtcclxuICAgICAgICAgICAgLy8gdW5mb3J0dW5hdGVseSBXZWIgQXVkaW8gQVBJIHVzZXMgdGltZSB2YWx1ZXMgbm90IGZyYW1lc1xyXG4gICAgICAgICAgICBjb25zdCBhYyA9IHRoaXMuX2F1ZGlvQ2xpcFxyXG4gICAgICAgICAgICBsZXQgb2Zmc2V0ID0gMDtcclxuICAgICAgICAgICAgaWYgKHBsYXlTZWxlY3Rpb24gJiYgYWMgJiYgYWMuc2VsZWN0aW9uKSB7XHJcblxyXG4gICAgICAgICAgICAgIGNvbnN0IHMgPSBhYy5zZWxlY3Rpb247XHJcbiAgICAgICAgICAgICAgY29uc3Qgc3IgPSBhYy5hdWRpb0RhdGFIb2xkZXIuc2FtcGxlUmF0ZTtcclxuICAgICAgICAgICAgICBvZmZzZXQgPSBzLmxlZnRGcmFtZSAvIHNyO1xyXG4gICAgICAgICAgICAgIGNvbnN0IHN0b3BQb3NJbnNlY3MgPSBzLnJpZ2h0RnJhbWUgLyBzcjtcclxuICAgICAgICAgICAgICBjb25zdCBkdXIgPSBzdG9wUG9zSW5zZWNzIC0gb2Zmc2V0O1xyXG4gICAgICAgICAgICAgIHRoaXMuc291cmNlQnVmZmVyTm9kZS5zdGFydCgwLCBvZmZzZXQsIGR1cilcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICB0aGlzLnNvdXJjZUJ1ZmZlck5vZGUuc3RhcnQoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLnBsYXlTdGFydFRpbWUgPSB0aGlzLmNvbnRleHQuY3VycmVudFRpbWUgLSBvZmZzZXQ7XHJcbiAgICAgICAgICAgIHRoaXMuX3N0YXJ0QWN0aW9uLmRpc2FibGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5fc3RhcnRTZWxlY3Rpb25BY3Rpb24uZGlzYWJsZWQgPSB0cnVlXHJcbiAgICAgICAgICAgIHRoaXMuX3N0b3BBY3Rpb24uZGlzYWJsZWQgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLmxpc3RlbmVyKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5saXN0ZW5lci5hdWRpb1BsYXllclVwZGF0ZShuZXcgQXVkaW9QbGF5ZXJFdmVudChFdmVudFR5cGUuU1RBUlRFRCkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuX2F1ZGlvU291cmNlIGluc3RhbmNlb2YgQXJyYXlBdWRpb0J1ZmZlciB8fCB0aGlzLl9hdWRpb1NvdXJjZSBpbnN0YW5jZW9mIEluZGV4ZWREYkF1ZGlvQnVmZmVyIHx8IHRoaXMuX2F1ZGlvU291cmNlIGluc3RhbmNlb2YgTmV0QXVkaW9CdWZmZXIpIHtcclxuICAgICAgICAgICAgdGhpcy5wbGF5U3RhcnRUaW1lID0gbnVsbDtcclxuICAgICAgICAgICAgaWYgKHRoaXMuX2F1ZGlvU291cmNlIGluc3RhbmNlb2YgQXJyYXlBdWRpb0J1ZmZlcikge1xyXG4gICAgICAgICAgICAgIGNvbnN0IGFhYnNuID0gbmV3IEFycmF5QXVkaW9CdWZmZXJTb3VyY2VOb2RlKHRoaXMuY29udGV4dCk7XHJcbiAgICAgICAgICAgICAgYWFic24uYXJyYXlBdWRpb0J1ZmZlciA9IHRoaXMuX2F1ZGlvU291cmNlO1xyXG4gICAgICAgICAgICAgIHRoaXMuc291cmNlQXVkaW9Xb3JrbGV0Tm9kZSA9IGFhYnNuO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuX2F1ZGlvU291cmNlIGluc3RhbmNlb2YgSW5kZXhlZERiQXVkaW9CdWZmZXIpIHtcclxuICAgICAgICAgICAgICBjb25zdCBpYXNuID0gbmV3IEluZGV4ZWREYkF1ZGlvQnVmZmVyU291cmNlTm9kZSh0aGlzLmNvbnRleHQpO1xyXG4gICAgICAgICAgICAgIGlhc24uaW5kZGJBdWRpb0J1ZmZlciA9IHRoaXMuX2F1ZGlvU291cmNlO1xyXG4gICAgICAgICAgICAgIHRoaXMuc291cmNlQXVkaW9Xb3JrbGV0Tm9kZSA9IGlhc247XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5fYXVkaW9Tb3VyY2UgaW5zdGFuY2VvZiBOZXRBdWRpb0J1ZmZlcikge1xyXG4gICAgICAgICAgICAgIGNvbnN0IG5hYnNuID0gbmV3IE5ldEF1ZGlvQnVmZmVyU291cmNlTm9kZSh0aGlzLmNvbnRleHQpO1xyXG4gICAgICAgICAgICAgIG5hYnNuLm5ldEF1ZGlvQnVmZmVyID0gdGhpcy5fYXVkaW9Tb3VyY2U7XHJcbiAgICAgICAgICAgICAgdGhpcy5zb3VyY2VBdWRpb1dvcmtsZXROb2RlID0gbmFic247XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHRoaXMuc291cmNlQXVkaW9Xb3JrbGV0Tm9kZSkge1xyXG4gICAgICAgICAgICAgIHRoaXMuc291cmNlQXVkaW9Xb3JrbGV0Tm9kZS5vbnByb2Nlc3NvcmVycm9yID0gKGV2OiBFdmVudCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgbGV0IG1zZyA9ICdVbmtud29uIGVycm9yJztcclxuICAgICAgICAgICAgICAgIGlmIChldiBpbnN0YW5jZW9mIEVycm9yRXZlbnQpIHtcclxuICAgICAgICAgICAgICAgICAgbXNnID0gZXYubWVzc2FnZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXCJBdWRpbyBzb3VyY2Ugd29ya2xldCBlcnJvcjogXCIgKyBtc2cpO1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMubGlzdGVuZXIpIHtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5saXN0ZW5lci5hdWRpb1BsYXllclVwZGF0ZShuZXcgQXVkaW9QbGF5ZXJFdmVudChFdmVudFR5cGUuRVJST1IpKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgICB0aGlzLnNvdXJjZUF1ZGlvV29ya2xldE5vZGUuY29ubmVjdCh0aGlzLmNvbnRleHQuZGVzdGluYXRpb24pOyAvLyB0aGlzIGFscmVhZHkgc3RhcnRzIHBsYXlpbmdcclxuICAgICAgICAgICAgICB0aGlzLnNvdXJjZUF1ZGlvV29ya2xldE5vZGUub25lbmRlZCA9ICgpID0+IHRoaXMub25lbmRlZCgpO1xyXG5cclxuICAgICAgICAgICAgICB0aGlzLnJ1bm5pbmcgPSB0cnVlO1xyXG5cclxuICAgICAgICAgICAgICBjb25zdCBhYyA9IHRoaXMuX2F1ZGlvQ2xpcFxyXG4gICAgICAgICAgICAgIGxldCBvZmZzZXQgPSAwXHJcbiAgICAgICAgICAgICAgaWYgKHBsYXlTZWxlY3Rpb24gJiYgYWMgJiYgYWMuc2VsZWN0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBzID0gYWMuc2VsZWN0aW9uO1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgc3IgPSBhYy5hdWRpb0RhdGFIb2xkZXIuc2FtcGxlUmF0ZTtcclxuICAgICAgICAgICAgICAgIG9mZnNldCA9IHMubGVmdEZyYW1lIC8gc3I7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBzdG9wUG9zSW5zZWNzID0gcy5yaWdodEZyYW1lIC8gc3I7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBkdXIgPSBzdG9wUG9zSW5zZWNzIC0gb2Zmc2V0XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNvdXJjZUF1ZGlvV29ya2xldE5vZGUuc3RhcnQoMCwgb2Zmc2V0LCBkdXIpXHJcbiAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc291cmNlQXVkaW9Xb3JrbGV0Tm9kZS5zdGFydCgpO1xyXG4gICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgLy90aGlzLnBsYXlTdGFydFRpbWUgPSB0aGlzLmNvbnRleHQuY3VycmVudFRpbWUgLSBvZmZzZXQ7XHJcbiAgICAgICAgICAgICAgdGhpcy5fc3RhcnRBY3Rpb24uZGlzYWJsZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgIHRoaXMuX3N0YXJ0U2VsZWN0aW9uQWN0aW9uLmRpc2FibGVkID0gdHJ1ZVxyXG4gICAgICAgICAgICAgIHRoaXMuX3N0b3BBY3Rpb24uZGlzYWJsZWQgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgICAgICAgaWYgKHRoaXMubGlzdGVuZXIpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubGlzdGVuZXIuYXVkaW9QbGF5ZXJVcGRhdGUobmV3IEF1ZGlvUGxheWVyRXZlbnQoRXZlbnRUeXBlLlNUQVJURUQpKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICBzdGFydFNlbGVjdGVkKCkge1xyXG4gICAgICAgIGlmKCF0aGlzLl9zdGFydEFjdGlvbi5kaXNhYmxlZCAmJiAhdGhpcy5ydW5uaW5nKSB7XHJcbiAgICAgICAgICBpZiAodGhpcy5jb250ZXh0LnN0YXRlICE9PSAncnVubmluZycpIHtcclxuICAgICAgICAgICAgdGhpcy5jb250ZXh0LnJlc3VtZSgpLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgICAgICAgIHRoaXMuX3N0YXJ0KHRydWUpO1xyXG4gICAgICAgICAgICB9KS5jYXRjaCgocmVhc29uKSA9PiB7XHJcbiAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignQ291bGQgbm90IHJlc3VtZSBhdWRpbyBjb250ZXh0OiAnICsgcmVhc29uKTtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICB0aGlzLl9zdGFydCh0cnVlKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgICAgc3RvcCgpe1xyXG4gICAgICAgICAgICBpZih0aGlzLnJ1bm5pbmcpIHtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLnNvdXJjZUJ1ZmZlck5vZGUpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNvdXJjZUJ1ZmZlck5vZGUuc3RvcCgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYodGhpcy5zb3VyY2VBdWRpb1dvcmtsZXROb2RlKXtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5zb3VyY2VBdWRpb1dvcmtsZXROb2RlLnN0b3AoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgaWYgKHRoaXMudGltZXJWYXIgIT09IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICB3aW5kb3cuY2xlYXJJbnRlcnZhbCh0aGlzLnRpbWVyVmFyKTtcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICB0aGlzLnJ1bm5pbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgaWYgKHRoaXMubGlzdGVuZXIpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmxpc3RlbmVyLmF1ZGlvUGxheWVyVXBkYXRlKG5ldyBBdWRpb1BsYXllckV2ZW50KEV2ZW50VHlwZS5TVE9QUEVEKSk7XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIG9uZW5kZWQoKSB7XHJcbiAgICAgICAgICAgIGlmKHRoaXMudGltZXJWYXIhPW51bGwpIHtcclxuICAgICAgICAgICAgICAgIHdpbmRvdy5jbGVhckludGVydmFsKHRoaXMudGltZXJWYXIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuX3N0YXJ0QWN0aW9uLmRpc2FibGVkID0gIXRoaXMuX2F1ZGlvU291cmNlO1xyXG4gICAgICAgICAgICB0aGlzLl9zdGFydFNlbGVjdGlvbkFjdGlvbi5kaXNhYmxlZD10aGlzLnN0YXJ0U2VsZWN0aW9uRGlzYWJsZWQoKVxyXG4gICAgICAgICAgICB0aGlzLl9zdG9wQWN0aW9uLmRpc2FibGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5ydW5uaW5nPWZhbHNlO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5saXN0ZW5lcikge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5saXN0ZW5lci5hdWRpb1BsYXllclVwZGF0ZShuZXcgQXVkaW9QbGF5ZXJFdmVudChFdmVudFR5cGUuRU5ERUQpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZ2V0IHBsYXlQb3NpdGlvblRpbWUoKTpudW1iZXJ8bnVsbCB7XHJcbiAgICAgICAgICAgIGxldCBwcHQ9bnVsbDtcclxuICAgICAgICAgICAgaWYodGhpcy5wbGF5U3RhcnRUaW1lIT09bnVsbCkge1xyXG4gICAgICAgICAgICAgICAgcHB0PSB0aGlzLmNvbnRleHQuY3VycmVudFRpbWUgLSB0aGlzLnBsYXlTdGFydFRpbWU7XHJcbiAgICAgICAgICAgIH1lbHNlIGlmKHRoaXMuc291cmNlQXVkaW9Xb3JrbGV0Tm9kZSl7XHJcbiAgICAgICAgICAgICAgcHB0PXRoaXMuc291cmNlQXVkaW9Xb3JrbGV0Tm9kZS5wbGF5UG9zaXRpb25UaW1lO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBwcHQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgZ2V0IHBsYXlQb3NpdGlvbkZyYW1lcygpOm51bWJlcnxudWxsIHtcclxuICAgICAgICBsZXQgcHBGcnM6bnVtYmVyfG51bGw9bnVsbDtcclxuICAgICAgIGlmKHRoaXMuX2F1ZGlvU291cmNlKSB7XHJcbiAgICAgICAgIGxldCBzcj10aGlzLl9hdWRpb1NvdXJjZS5zYW1wbGVSYXRlO1xyXG4gICAgICAgICBpZiAoc3IpIHtcclxuICAgICAgICAgICBsZXQgcHBUaW1lID0gdGhpcy5wbGF5UG9zaXRpb25UaW1lO1xyXG4gICAgICAgICAgIGlmIChwcFRpbWUgIT09IG51bGwpIHtcclxuICAgICAgICAgICAgIHBwRnJzID0gc3IgKiBwcFRpbWU7XHJcbiAgICAgICAgICAgfVxyXG4gICAgICAgICB9XHJcbiAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHBwRnJzO1xyXG4gICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuIl19
361
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGxheWVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc3BlZWNocmVjb3JkZXJuZy9zcmMvbGliL2F1ZGlvL3BsYXliYWNrL3BsYXllci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0scUJBQXFCLENBQUE7QUFFNUMsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFDdkQsT0FBTyxFQUFDLDBCQUEwQixFQUFDLE1BQU0sa0NBQWtDLENBQUM7QUFDNUUsT0FBTyxFQUFDLG9CQUFvQixFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFDM0QsT0FBTyxFQUFDLDhCQUE4QixFQUFDLE1BQU0sc0NBQXNDLENBQUM7QUFDcEYsT0FBTyxFQUFDLDhCQUE4QixFQUFDLE1BQU0sa0NBQWtDLENBQUM7QUFFaEYsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLHFCQUFxQixDQUFDO0FBQ25ELE9BQU8sRUFBQyx3QkFBd0IsRUFBQyxNQUFNLGdDQUFnQyxDQUFDO0FBQ3hFLE9BQU8sRUFBQyxpQkFBaUIsRUFBYyxNQUFNLHNCQUFzQixDQUFDO0FBSWhFLE1BQU0sQ0FBTixJQUFhLFNBQWlFO0FBQTlFLFdBQWEsU0FBUztJQUFFLDZDQUFNLENBQUE7SUFBQywyQ0FBSyxDQUFBO0lBQUMsK0NBQU8sQ0FBQTtJQUFDLHFEQUFVLENBQUE7SUFBRSwrQ0FBTyxDQUFBO0lBQUUsMkNBQUssQ0FBQTtJQUFDLDJDQUFLLENBQUE7QUFBQSxDQUFDLEVBQWpFLFNBQVMsS0FBVCxTQUFTLFFBQXdEO0FBRTlFLE1BQU0sT0FBTyxnQkFBZ0I7SUFLekIsWUFBWSxJQUFjLEVBQUUsWUFBb0I7UUFDNUMsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7UUFDbEIsSUFBSSxDQUFDLGFBQWEsR0FBRyxZQUFZLENBQUM7SUFDdEMsQ0FBQztJQUVELElBQUksSUFBSTtRQUNKLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQztJQUN0QixDQUFDO0lBRUQsSUFBSSxZQUFZO1FBQ1osT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDO0lBQzlCLENBQUM7Q0FDSjtBQUtELE1BQU0sT0FBTyxXQUFXO0lBNEJwQixZQUFZLE9BQW9CLEVBQUUsUUFBNEI7UUF0QnRELFlBQU8sR0FBQyxLQUFLLENBQUM7UUFPdEIsVUFBSyxHQUFDLEtBQUssQ0FBQztRQUVaLGVBQVUsR0FBZ0IsSUFBSSxDQUFDO1FBQ3ZCLGlCQUFZLEdBQWtCLElBQUksQ0FBQztRQUMzQyxxQkFBZ0IsR0FBNEIsSUFBSSxDQUFDO1FBQ2pELDJCQUFzQixHQUFzQixJQUFJLENBQUM7UUFNekMsa0JBQWEsR0FBYSxJQUFJLENBQUM7UUFFL0IsYUFBUSxHQUFhLElBQUksQ0FBQztRQUcvQixJQUFJLENBQUMsT0FBTyxHQUFDLE9BQU8sQ0FBQztRQUNwQixJQUFJLENBQUMsUUFBUSxHQUFDLFFBQVEsQ0FBQztRQUN2QixJQUFJLENBQUMsT0FBTyxHQUFHLFdBQVcsQ0FBQyxlQUFlLENBQUM7UUFDM0MsSUFBSSxDQUFDLENBQUMsR0FBQyxTQUFTLENBQUM7UUFDakIsSUFBSSxDQUFDLE9BQU8sR0FBQyxDQUFDLENBQUM7UUFDZixJQUFJLENBQUMsVUFBVSxHQUFDLENBQUMsQ0FBQztRQUNsQixJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksWUFBWSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUN6QyxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3hDLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztRQUNsQyxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsR0FBRyxHQUFFLEVBQUUsQ0FBQSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDOUMsSUFBSSxDQUFDLHFCQUFxQixHQUFDLElBQUksTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUE7UUFDdkQsSUFBSSxDQUFDLHFCQUFxQixDQUFDLFFBQVEsR0FBQyxJQUFJLENBQUE7UUFDeEMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLFFBQVEsR0FBRyxHQUFFLEVBQUUsQ0FBQSxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDL0QsSUFBSSxDQUFDLDZCQUE2QixHQUFDLElBQUksTUFBTSxDQUFVLG9CQUFvQixFQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ25GLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDdEMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO1FBQ2pDLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxHQUFHLEdBQUUsRUFBRSxDQUFBLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUM5QyxJQUFJLENBQUMsT0FBTyxDQUFDLGdCQUFnQixDQUFDLGFBQWEsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFO1lBQ2hELElBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEtBQUcsU0FBUyxFQUFDO2dCQUNoQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7YUFDYjtRQUNILENBQUMsQ0FDRixDQUFDO0lBQ0osQ0FBQztJQWxERCxJQUFJLDRCQUE0QjtRQUM1QixPQUFPLElBQUksQ0FBQyw2QkFBNkIsQ0FBQztJQUM5QyxDQUFDO0lBa0RELElBQUksV0FBVztRQUNYLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQztJQUM3QixDQUFDO0lBRUQsSUFBSSxvQkFBb0I7UUFDdEIsT0FBTyxJQUFJLENBQUMscUJBQXFCLENBQUE7SUFDbkMsQ0FBQztJQUVELElBQUksVUFBVTtRQUNWLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQztJQUM1QixDQUFDO0lBRUQsSUFBSSxTQUFTLENBQUMsU0FBeUI7UUFDckMsSUFBSSxDQUFDLFVBQVUsR0FBQyxTQUFTLENBQUE7UUFDdkIsSUFBSSxNQUFNLEdBQUcsQ0FBQyxDQUFDO1FBQ2YsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDO1FBQ1osSUFBSSxTQUFTLElBQUksU0FBUyxDQUFDLGVBQWUsRUFBRTtZQUN4QyxJQUFJLGVBQWUsR0FBQyxTQUFTLENBQUMsZUFBZSxDQUFDO1lBQzlDLEdBQUcsR0FBRyxlQUFlLENBQUMsZ0JBQWdCLENBQUE7WUFDdEMsSUFBSSxHQUFHLEdBQUcsQ0FBQyxFQUFFO2dCQUNULE1BQU0sR0FBRyxlQUFlLENBQUMsUUFBUSxDQUFDO2dCQUNsQyxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxlQUFlLEVBQUU7b0JBQ2hELGlCQUFpQjtpQkFDcEI7YUFDSjtZQUNELElBQUksQ0FBQyxXQUFXLEdBQUMsZUFBZSxDQUFDLFdBQVcsQ0FBQztZQUU3QyxTQUFTLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxFQUFFLEVBQUMsRUFBRTtnQkFDakMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQTtnQkFDbkUsSUFBSSxDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLDZCQUE2QixDQUFDLEtBQUssRUFBRTtvQkFDbkYsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFBO2lCQUNyQjtZQUNILENBQUMsQ0FDRixDQUFBO1NBQ0o7YUFBSTtZQUNELElBQUksQ0FBQyxXQUFXLEdBQUMsSUFBSSxDQUFDO1NBQ3pCO0lBQ0wsQ0FBQztJQUVILElBQUksV0FBVztRQUNiLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQztJQUMzQixDQUFDO0lBRUQsSUFBSSxXQUFXLENBQUMsS0FBeUI7UUFDdkMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ1osSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUM7UUFDdEIsSUFBSSxJQUFJLENBQUMsWUFBWSxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUU7WUFDckMsSUFBSSxJQUFJLENBQUMsWUFBWSxZQUFZLGlCQUFpQixFQUFFO2dCQUNsRCxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztnQkFDbEIsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7Z0JBQzFCLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRTtvQkFDakIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO2lCQUN4RTthQUNGO2lCQUFNO2dCQUNMLElBQUksQ0FBQyw4QkFBOEIsRUFBRSxDQUFDO2FBQ3ZDO1NBQ0Y7YUFBSztZQUNKLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1lBQ25CLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1lBQzFCLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRTtnQkFDakIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO2FBQ3pFO1NBQ0Y7SUFDUCxDQUFDO0lBRVMsOEJBQThCO1FBQ3BDLDhCQUE4QixDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUUsRUFBRTtZQUMvRCwrRUFBK0U7WUFDL0UsSUFBSSxDQUFDLEtBQUssR0FBQyxJQUFJLENBQUM7WUFDaEIsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7WUFDMUIsSUFBRyxJQUFJLENBQUMsUUFBUSxFQUFDO2dCQUNmLElBQUksQ0FBQyxRQUFRLENBQUMsaUJBQWlCLENBQUMsSUFBSSxnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQzthQUN4RTtRQUNILENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEtBQVUsRUFBQyxFQUFFO1lBQ3JCLElBQUksQ0FBQyxLQUFLLEdBQUMsS0FBSyxDQUFDO1lBQ2hCLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1lBQzNCLElBQUcsSUFBSSxDQUFDLFFBQVEsRUFBQztnQkFDZixJQUFJLENBQUMsUUFBUSxDQUFDLGlCQUFpQixDQUFDLElBQUksZ0JBQWdCLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7YUFDekU7WUFDRCxPQUFPLENBQUMsS0FBSyxDQUFDLHVCQUF1QixHQUFDLEtBQUssQ0FBQyxDQUFDO1FBQy9DLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUdDLDRCQUE0QjtRQUM1QixJQUFHLElBQUksQ0FBQyxzQkFBc0IsRUFBRTtZQUM5QixJQUFJLENBQUMsc0JBQXNCLENBQUMsZ0JBQWdCLEdBQUcsQ0FBQyxFQUFTLEVBQUUsRUFBRTtnQkFDM0QsSUFBSSxHQUFHLEdBQUcsZUFBZSxDQUFDO2dCQUMxQixJQUFJLEVBQUUsWUFBWSxVQUFVLEVBQUU7b0JBQzVCLEdBQUcsR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDO2lCQUNsQjtnQkFDRCxPQUFPLENBQUMsS0FBSyxDQUFDLDhCQUE4QixHQUFHLEdBQUcsQ0FBQyxDQUFDO2dCQUNwRCxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUU7b0JBQ2pCLE9BQU87b0JBQ1AsNEJBQTRCO29CQUM1QiwyREFBMkQ7aUJBQzVEO1lBQ0gsQ0FBQyxDQUFDO1lBRUYsSUFBSSxDQUFDLHNCQUFzQixDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsOEJBQThCO1lBQzdGLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxPQUFPLEdBQUcsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQzNELElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO1lBQ3BCLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNwQyw4RkFBOEY7WUFDOUYsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO1lBQ2xDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFBO1lBQzFDLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztZQUVsQyxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUU7Z0JBQ2pCLElBQUksQ0FBQyxRQUFRLENBQUMsaUJBQWlCLENBQUMsSUFBSSxnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQzthQUMxRTtTQUNGO0lBRVQsQ0FBQztJQUVLLEtBQUs7UUFDRCxJQUFHLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFO1lBQy9DLElBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEtBQUcsU0FBUyxFQUFFO2dCQUNqQyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUU7b0JBQzlCLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztnQkFDaEIsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUU7b0JBQ2xCLE9BQU8sQ0FBQyxLQUFLLENBQUMsa0NBQWtDLEdBQUcsTUFBTSxDQUFDLENBQUM7Z0JBQzdELENBQUMsQ0FBQyxDQUFBO2FBQ0g7aUJBQUk7Z0JBQ0gsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO2FBQ2Y7U0FDRjtJQUNMLENBQUM7SUFFRCxrQkFBa0I7UUFFaEIsSUFBRyxJQUFJLENBQUMsS0FBSyxFQUFDO1lBQ1osSUFBRyxJQUFJLENBQUMsWUFBWSxZQUFZLGlCQUFpQixJQUFJLElBQUksQ0FBQyxZQUFZLFlBQVksZ0JBQWdCLElBQUksSUFBSSxDQUFDLFlBQVksWUFBWSxvQkFBb0IsRUFBQztnQkFDdEosSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLEdBQUMsS0FBSyxDQUFDO2dCQUNqQyxJQUFJLENBQUMscUJBQXFCLENBQUMsUUFBUSxHQUFDLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO2FBQ25FO2lCQUFJO2dCQUNILElBQUcsSUFBSSxDQUFDLFlBQVksWUFBWSxjQUFjLEVBQUM7b0JBQzdDLElBQUksQ0FBQyxZQUFZLENBQUMsa0JBQWtCLENBQUMsR0FBRSxFQUFFO3dCQUN2QyxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsR0FBQyxLQUFLLENBQUM7d0JBQ2pDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxRQUFRLEdBQUMsSUFBSSxDQUFDLHNCQUFzQixFQUFFLENBQUM7b0JBQ3BFLENBQUMsQ0FBQyxDQUFDO2lCQUNKO2FBQ0Y7U0FDRjthQUFJO1lBQ0gsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLEdBQUMsSUFBSSxDQUFDO1lBQ2hDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxRQUFRLEdBQUMsSUFBSSxDQUFDO1NBQzFDO0lBQ0gsQ0FBQztJQUVELHNCQUFzQjtRQUNwQixPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxJQUFJLElBQUksQ0FBQyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBRSxDQUFBO0lBQ3ZHLENBQUM7SUFHTyxNQUFNLENBQUMsYUFBYSxHQUFDLEtBQUs7UUFDaEMsSUFBSSxJQUFJLENBQUMsWUFBWSxZQUFZLGlCQUFpQixFQUFFO1lBQ2xELElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLGtCQUFrQixFQUFFLENBQUM7WUFDMUQsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLFdBQVcsQ0FBQztZQUM3RCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDeEQsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sR0FBRyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDckQsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQztZQUM5QyxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztZQUNwQiwwREFBMEQ7WUFDMUQsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQTtZQUMxQixJQUFJLE1BQU0sR0FBRyxDQUFDLENBQUM7WUFDZixJQUFJLGFBQWEsSUFBSSxFQUFFLElBQUksRUFBRSxDQUFDLFNBQVMsRUFBRTtnQkFFdkMsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDLFNBQVMsQ0FBQztnQkFDdkIsTUFBTSxFQUFFLEdBQUcsRUFBRSxDQUFDLGVBQWUsQ0FBQyxVQUFVLENBQUM7Z0JBQ3pDLE1BQU0sR0FBRyxDQUFDLENBQUMsU0FBUyxHQUFHLEVBQUUsQ0FBQztnQkFDMUIsTUFBTSxhQUFhLEdBQUcsQ0FBQyxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUM7Z0JBQ3hDLE1BQU0sR0FBRyxHQUFHLGFBQWEsR0FBRyxNQUFNLENBQUM7Z0JBQ25DLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQTthQUM1QztpQkFBTTtnQkFDTCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxFQUFFLENBQUM7YUFDL0I7WUFDRCxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxHQUFHLE1BQU0sQ0FBQztZQUN2RCxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7WUFDbEMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUE7WUFDMUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO1lBRWxDLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRTtnQkFDakIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO2FBQzFFO1NBQ0Y7YUFBTSxJQUFJLElBQUksQ0FBQyxZQUFZLFlBQVksZ0JBQWdCLElBQUksSUFBSSxDQUFDLFlBQVksWUFBWSxvQkFBb0IsSUFBSSxJQUFJLENBQUMsWUFBWSxZQUFZLGNBQWMsRUFBRTtZQUM1SixJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQztZQUMxQixJQUFJLElBQUksQ0FBQyxZQUFZLFlBQVksZ0JBQWdCLEVBQUU7Z0JBQ2pELE1BQU0sS0FBSyxHQUFHLElBQUksMEJBQTBCLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO2dCQUMzRCxLQUFLLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQztnQkFDM0MsSUFBSSxDQUFDLHNCQUFzQixHQUFHLEtBQUssQ0FBQzthQUNyQztpQkFBTSxJQUFJLElBQUksQ0FBQyxZQUFZLFlBQVksb0JBQW9CLEVBQUU7Z0JBQzVELE1BQU0sSUFBSSxHQUFHLElBQUksOEJBQThCLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO2dCQUM5RCxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQztnQkFDMUMsSUFBSSxDQUFDLHNCQUFzQixHQUFHLElBQUksQ0FBQzthQUNwQztpQkFBTSxJQUFJLElBQUksQ0FBQyxZQUFZLFlBQVksY0FBYyxFQUFFO2dCQUN0RCxNQUFNLEtBQUssR0FBRyxJQUFJLHdCQUF3QixDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFDekQsS0FBSyxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDO2dCQUN6QyxJQUFJLENBQUMsc0JBQXNCLEdBQUcsS0FBSyxDQUFDO2FBQ3JDO1lBQ0QsSUFBSSxJQUFJLENBQUMsc0JBQXNCLEVBQUU7Z0JBQy9CLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxnQkFBZ0IsR0FBRyxDQUFDLEVBQVMsRUFBRSxFQUFFO29CQUMzRCxJQUFJLEdBQUcsR0FBRyxlQUFlLENBQUM7b0JBQzFCLElBQUksRUFBRSxZQUFZLFVBQVUsRUFBRTt3QkFDNUIsR0FBRyxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUM7cUJBQ2xCO29CQUNELE9BQU8sQ0FBQyxLQUFLLENBQUMsOEJBQThCLEdBQUcsR0FBRyxDQUFDLENBQUM7b0JBQ3BELElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRTt3QkFDakIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO3FCQUN4RTtnQkFDSCxDQUFDLENBQUM7Z0JBRUYsSUFBSSxDQUFDLHNCQUFzQixDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsOEJBQThCO2dCQUM3RixJQUFJLENBQUMsc0JBQXNCLENBQUMsT0FBTyxHQUFHLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztnQkFFM0QsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7Z0JBRXBCLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUE7Z0JBQzFCLElBQUksTUFBTSxHQUFHLENBQUMsQ0FBQTtnQkFDZCxJQUFJLGFBQWEsSUFBSSxFQUFFLElBQUksRUFBRSxDQUFDLFNBQVMsRUFBRTtvQkFDdkMsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDLFNBQVMsQ0FBQztvQkFDdkIsTUFBTSxFQUFFLEdBQUcsRUFBRSxDQUFDLGVBQWUsQ0FBQyxVQUFVLENBQUM7b0JBQ3pDLE1BQU0sR0FBRyxDQUFDLENBQUMsU0FBUyxHQUFHLEVBQUUsQ0FBQztvQkFDMUIsTUFBTSxhQUFhLEdBQUcsQ0FBQyxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUM7b0JBQ3hDLE1BQU0sR0FBRyxHQUFHLGFBQWEsR0FBRyxNQUFNLENBQUE7b0JBQ2xDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQTtpQkFDbEQ7cUJBQU07b0JBQ0wsSUFBSSxDQUFDLHNCQUFzQixDQUFDLEtBQUssRUFBRSxDQUFDO2lCQUNyQztnQkFFRCx5REFBeUQ7Z0JBQ3pELElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztnQkFDbEMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUE7Z0JBQzFDLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztnQkFFbEMsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFO29CQUNqQixJQUFJLENBQUMsUUFBUSxDQUFDLGlCQUFpQixDQUFDLElBQUksZ0JBQWdCLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7aUJBQzFFO2FBQ0Y7U0FDRjtJQUNILENBQUM7SUFFSCxhQUFhO1FBQ1gsSUFBRyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRTtZQUMvQyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxLQUFLLFNBQVMsRUFBRTtnQkFDcEMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFO29CQUM5QixJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUNwQixDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRTtvQkFDbEIsT0FBTyxDQUFDLEtBQUssQ0FBQyxrQ0FBa0MsR0FBRyxNQUFNLENBQUMsQ0FBQztnQkFDN0QsQ0FBQyxDQUFDLENBQUE7YUFDSDtpQkFBSTtnQkFDSCxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO2FBQ25CO1NBQ0Y7SUFDSCxDQUFDO0lBRUMsSUFBSTtRQUNBLElBQUcsSUFBSSxDQUFDLE9BQU8sRUFBRTtZQUNiLElBQUksSUFBSSxDQUFDLGdCQUFnQixFQUFFO2dCQUN2QixJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxFQUFFLENBQUM7YUFDaEM7WUFDRCxJQUFHLElBQUksQ0FBQyxzQkFBc0IsRUFBQztnQkFDN0IsSUFBSSxDQUFDLHNCQUFzQixDQUFDLElBQUksRUFBRSxDQUFDO2FBQ3BDO1lBQ0MsSUFBSSxJQUFJLENBQUMsUUFBUSxLQUFLLElBQUksRUFBRTtnQkFDMUIsTUFBTSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7YUFDckM7WUFDRCxJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztZQUNyQixJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUU7Z0JBQ2pCLElBQUksQ0FBQyxRQUFRLENBQUMsaUJBQWlCLENBQUMsSUFBSSxnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQzthQUMxRTtTQUNGO0lBQ1QsQ0FBQztJQUVELE9BQU87UUFDSCxJQUFHLElBQUksQ0FBQyxRQUFRLElBQUUsSUFBSSxFQUFFO1lBQ3BCLE1BQU0sQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1NBQ3ZDO1FBQ0QsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDO1FBQ2hELElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxRQUFRLEdBQUMsSUFBSSxDQUFDLHNCQUFzQixFQUFFLENBQUE7UUFDakUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO1FBQ2pDLElBQUksQ0FBQyxPQUFPLEdBQUMsS0FBSyxDQUFDO1FBQ25CLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRTtZQUNmLElBQUksQ0FBQyxRQUFRLENBQUMsaUJBQWlCLENBQUMsSUFBSSxnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztTQUMxRTtJQUNMLENBQUM7SUFFRCxJQUFJLGdCQUFnQjtRQUNoQixJQUFJLEdBQUcsR0FBQyxJQUFJLENBQUM7UUFDYixJQUFHLElBQUksQ0FBQyxhQUFhLEtBQUcsSUFBSSxFQUFFO1lBQzFCLEdBQUcsR0FBRSxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDO1NBQ3REO2FBQUssSUFBRyxJQUFJLENBQUMsc0JBQXNCLEVBQUM7WUFDbkMsR0FBRyxHQUFDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxnQkFBZ0IsQ0FBQztTQUNsRDtRQUNELE9BQU8sR0FBRyxDQUFDO0lBQ2YsQ0FBQztJQUVILElBQUksa0JBQWtCO1FBQ3BCLElBQUksS0FBSyxHQUFhLElBQUksQ0FBQztRQUM1QixJQUFHLElBQUksQ0FBQyxZQUFZLEVBQUU7WUFDcEIsSUFBSSxFQUFFLEdBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxVQUFVLENBQUM7WUFDcEMsSUFBSSxFQUFFLEVBQUU7Z0JBQ04sSUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDO2dCQUNuQyxJQUFJLE1BQU0sS0FBSyxJQUFJLEVBQUU7b0JBQ25CLEtBQUssR0FBRyxFQUFFLEdBQUcsTUFBTSxDQUFDO2lCQUNyQjthQUNGO1NBQ0Y7UUFDQSxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7O0FBcldlLDJCQUFlLEdBQVUsSUFBSSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWN0aW9uIH0gZnJvbSAnLi4vLi4vYWN0aW9uL2FjdGlvbidcclxuaW1wb3J0IHsgQXVkaW9DbGlwIH0gZnJvbSAnLi4vcGVyc2lzdG9yJ1xyXG5pbXBvcnQge0FycmF5QXVkaW9CdWZmZXJ9IGZyb20gXCIuLi9hcnJheV9hdWRpb19idWZmZXJcIjtcclxuaW1wb3J0IHtBcnJheUF1ZGlvQnVmZmVyU291cmNlTm9kZX0gZnJvbSBcIi4vYXJyYXlfYXVkaW9fYnVmZmVyX3NvdXJjZV9ub2RlXCI7XHJcbmltcG9ydCB7SW5kZXhlZERiQXVkaW9CdWZmZXJ9IGZyb20gXCIuLi9pbmRkYl9hdWRpb19idWZmZXJcIjtcclxuaW1wb3J0IHtBdWRpb1NvdXJjZVdvcmtsZXRNb2R1bGVMb2FkZXJ9IGZyb20gXCIuL2F1ZGlvX3NvdXJjZV93b3JrbGV0X21vZHVsZV9sb2FkZXJcIjtcclxuaW1wb3J0IHtJbmRleGVkRGJBdWRpb0J1ZmZlclNvdXJjZU5vZGV9IGZyb20gXCIuL2luZGRiX2F1ZGlvX2J1ZmZlcl9zb3VyY2Vfbm9kZVwiO1xyXG5pbXBvcnQge0F1ZGlvU291cmNlTm9kZX0gZnJvbSBcIi4vYXVkaW9fc291cmNlX25vZGVcIjtcclxuaW1wb3J0IHtOZXRBdWRpb0J1ZmZlcn0gZnJvbSBcIi4uL25ldF9hdWRpb19idWZmZXJcIjtcclxuaW1wb3J0IHtOZXRBdWRpb0J1ZmZlclNvdXJjZU5vZGV9IGZyb20gXCIuL25ldF9hdWRpb19idWZmZXJfc291cmNlX25vZGVcIjtcclxuaW1wb3J0IHtBdWRpb0J1ZmZlclNvdXJjZSwgQXVkaW9Tb3VyY2V9IGZyb20gXCIuLi9hdWRpb19kYXRhX2hvbGRlclwiO1xyXG5cclxuXHJcblxyXG4gICAgZXhwb3J0IGVudW0gIEV2ZW50VHlwZSB7Q0xPU0VELFJFQURZLFNUQVJURUQsUE9TX1VQREFURSwgU1RPUFBFRCwgRU5ERUQsRVJST1J9XHJcblxyXG4gICAgZXhwb3J0IGNsYXNzIEF1ZGlvUGxheWVyRXZlbnR7XHJcblxyXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgX3R5cGU6RXZlbnRUeXBlO1xyXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgX3RpbWVQb3NpdGlvbjpudW1iZXIgfCB1bmRlZmluZWQ7XHJcblxyXG4gICAgICAgIGNvbnN0cnVjdG9yKHR5cGU6RXZlbnRUeXBlLCB0aW1lUG9zaXRpb24/Om51bWJlcikge1xyXG4gICAgICAgICAgICB0aGlzLl90eXBlID0gdHlwZTtcclxuICAgICAgICAgICAgdGhpcy5fdGltZVBvc2l0aW9uID0gdGltZVBvc2l0aW9uO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZ2V0IHR5cGUoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl90eXBlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZ2V0IHRpbWVQb3NpdGlvbigpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3RpbWVQb3NpdGlvbjtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBleHBvcnQgaW50ZXJmYWNlIEF1ZGlvUGxheWVyTGlzdGVuZXIge1xyXG4gICAgICAgIGF1ZGlvUGxheWVyVXBkYXRlKGU6QXVkaW9QbGF5ZXJFdmVudCk6dm9pZDtcclxuICAgIH1cclxuXHJcbiAgICBleHBvcnQgY2xhc3MgQXVkaW9QbGF5ZXIge1xyXG5cclxuICAgICAgICBnZXQgYXV0b1BsYXlPblNlbGVjdFRvZ2dsZUFjdGlvbigpOiBBY3Rpb248Ym9vbGVhbj4ge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fYXV0b1BsYXlPblNlbGVjdFRvZ2dsZUFjdGlvbjtcclxuICAgICAgICB9XHJcbiAgICAgICAgcHVibGljIHN0YXRpYyBERUZBVUxUX0JVRlNJWkU6bnVtYmVyID0gODE5MjtcclxuICAgICAgICBwcml2YXRlIHJ1bm5pbmc9ZmFsc2U7XHJcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBfc3RhcnRBY3Rpb246QWN0aW9uPHZvaWQ+O1xyXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgX3N0YXJ0U2VsZWN0aW9uQWN0aW9uOkFjdGlvbjx2b2lkPjtcclxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IF9hdXRvUGxheU9uU2VsZWN0VG9nZ2xlQWN0aW9uOkFjdGlvbjxib29sZWFuPlxyXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgX3N0b3BBY3Rpb246QWN0aW9uPHZvaWQ+O1xyXG4gICAgICAgIGJ1ZlNpemU6bnVtYmVyO1xyXG4gICAgICAgIGNvbnRleHQ6QXVkaW9Db250ZXh0O1xyXG4gICAgICAgIHJlYWR5PWZhbHNlO1xyXG4gICAgICAgIGxpc3RlbmVyOkF1ZGlvUGxheWVyTGlzdGVuZXI7XHJcbiAgICAgICAgX2F1ZGlvQ2xpcDpBdWRpb0NsaXB8bnVsbD1udWxsO1xyXG4gICAgICAgIHByaXZhdGUgX2F1ZGlvU291cmNlOkF1ZGlvU291cmNlfG51bGw9bnVsbDtcclxuICAgICAgICBzb3VyY2VCdWZmZXJOb2RlOkF1ZGlvQnVmZmVyU291cmNlTm9kZXxudWxsPW51bGw7XHJcbiAgICAgICAgc291cmNlQXVkaW9Xb3JrbGV0Tm9kZTpBdWRpb1NvdXJjZU5vZGV8bnVsbD1udWxsO1xyXG5cclxuICAgICAgICBidWZmUG9zOm51bWJlcjtcclxuICAgICAgICBwcml2YXRlIHplcm9CdWZDbnQ6bnVtYmVyO1xyXG4gICAgICAgIG46YW55O1xyXG4gICAgICAgIHpiOkZsb2F0MzJBcnJheTtcclxuICAgICAgICBwcml2YXRlIHBsYXlTdGFydFRpbWU6bnVtYmVyfG51bGw9bnVsbDtcclxuXHJcbiAgICAgICAgcHJpdmF0ZSB0aW1lclZhcjpudW1iZXJ8bnVsbD1udWxsO1xyXG5cclxuICAgICAgICBjb25zdHJ1Y3Rvcihjb250ZXh0OkF1ZGlvQ29udGV4dCwgbGlzdGVuZXI6QXVkaW9QbGF5ZXJMaXN0ZW5lcikge1xyXG4gICAgICAgICAgIHRoaXMuY29udGV4dD1jb250ZXh0O1xyXG4gICAgICAgICAgICB0aGlzLmxpc3RlbmVyPWxpc3RlbmVyO1xyXG4gICAgICAgICAgICB0aGlzLmJ1ZlNpemUgPSBBdWRpb1BsYXllci5ERUZBVUxUX0JVRlNJWkU7XHJcbiAgICAgICAgICAgIHRoaXMubj1uYXZpZ2F0b3I7XHJcbiAgICAgICAgICAgIHRoaXMuYnVmZlBvcz0wO1xyXG4gICAgICAgICAgICB0aGlzLnplcm9CdWZDbnQ9MDtcclxuICAgICAgICAgICAgdGhpcy56YiA9IG5ldyBGbG9hdDMyQXJyYXkodGhpcy5idWZTaXplKTtcclxuICAgICAgICAgICAgdGhpcy5fc3RhcnRBY3Rpb24gPSBuZXcgQWN0aW9uKCdTdGFydCcpO1xyXG4gICAgICAgICAgICB0aGlzLl9zdGFydEFjdGlvbi5kaXNhYmxlZCA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMuX3N0YXJ0QWN0aW9uLm9uQWN0aW9uID0gKCk9PnRoaXMuc3RhcnQoKTtcclxuICAgICAgICAgICAgdGhpcy5fc3RhcnRTZWxlY3Rpb25BY3Rpb249bmV3IEFjdGlvbignU3RhcnQgc2VsZWN0ZWQnKVxyXG4gICAgICAgICAgICB0aGlzLl9zdGFydFNlbGVjdGlvbkFjdGlvbi5kaXNhYmxlZD10cnVlXHJcbiAgICAgICAgICAgIHRoaXMuX3N0YXJ0U2VsZWN0aW9uQWN0aW9uLm9uQWN0aW9uID0gKCk9PnRoaXMuc3RhcnRTZWxlY3RlZCgpO1xyXG4gICAgICAgICAgICB0aGlzLl9hdXRvUGxheU9uU2VsZWN0VG9nZ2xlQWN0aW9uPW5ldyBBY3Rpb248Ym9vbGVhbj4oXCJBdXRvcGxheSBvbiBzZWxlY3RcIixmYWxzZSk7XHJcbiAgICAgICAgICAgIHRoaXMuX3N0b3BBY3Rpb24gPSBuZXcgQWN0aW9uKCdTdG9wJyk7XHJcbiAgICAgICAgICAgIHRoaXMuX3N0b3BBY3Rpb24uZGlzYWJsZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLl9zdG9wQWN0aW9uLm9uQWN0aW9uID0gKCk9PnRoaXMuc3RvcCgpO1xyXG4gICAgICAgICAgdGhpcy5jb250ZXh0LmFkZEV2ZW50TGlzdGVuZXIoJ3N0YXRlY2hhbmdlJywgKGV2KSA9PiB7XHJcbiAgICAgICAgICAgICAgaWYodGhpcy5jb250ZXh0LnN0YXRlIT09J3J1bm5pbmcnKXtcclxuICAgICAgICAgICAgICAgIHRoaXMuc3RvcCgpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGdldCBzdGFydEFjdGlvbigpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3N0YXJ0QWN0aW9uO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZ2V0IHN0YXJ0U2VsZWN0aW9uQWN0aW9uKCl7XHJcbiAgICAgICAgICByZXR1cm4gdGhpcy5fc3RhcnRTZWxlY3Rpb25BY3Rpb25cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGdldCBzdG9wQWN0aW9uKCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fc3RvcEFjdGlvbjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHNldCBhdWRpb0NsaXAoYXVkaW9DbGlwOkF1ZGlvQ2xpcHwgbnVsbCkge1xyXG4gICAgICAgICAgdGhpcy5fYXVkaW9DbGlwPWF1ZGlvQ2xpcFxyXG4gICAgICAgICAgICBsZXQgbGVuZ3RoID0gMDtcclxuICAgICAgICAgICAgbGV0IGNocyA9IDA7XHJcbiAgICAgICAgICAgIGlmIChhdWRpb0NsaXAgJiYgYXVkaW9DbGlwLmF1ZGlvRGF0YUhvbGRlcikge1xyXG4gICAgICAgICAgICAgICAgbGV0IGF1ZGlvRGF0YUhvbGRlcj1hdWRpb0NsaXAuYXVkaW9EYXRhSG9sZGVyO1xyXG4gICAgICAgICAgICAgICAgY2hzID0gYXVkaW9EYXRhSG9sZGVyLm51bWJlck9mQ2hhbm5lbHNcclxuICAgICAgICAgICAgICAgIGlmIChjaHMgPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGVuZ3RoID0gYXVkaW9EYXRhSG9sZGVyLmZyYW1lTGVuO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChjaHMgPiB0aGlzLmNvbnRleHQuZGVzdGluYXRpb24ubWF4Q2hhbm5lbENvdW50KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRPRE8gZXhjZXB0aW9uXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhpcy5hdWRpb1NvdXJjZT1hdWRpb0RhdGFIb2xkZXIuYXVkaW9Tb3VyY2U7XHJcblxyXG4gICAgICAgICAgICAgICAgYXVkaW9DbGlwLmFkZFNlbGVjdGlvbk9ic2VydmVyKChhYyk9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fc3RhcnRTZWxlY3Rpb25BY3Rpb24uZGlzYWJsZWQgPSB0aGlzLnN0YXJ0U2VsZWN0aW9uRGlzYWJsZWQoKVxyXG4gICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5zdGFydFNlbGVjdGlvbkFjdGlvbi5kaXNhYmxlZCAmJiB0aGlzLl9hdXRvUGxheU9uU2VsZWN0VG9nZ2xlQWN0aW9uLnZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YXJ0U2VsZWN0ZWQoKVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgIHRoaXMuYXVkaW9Tb3VyY2U9bnVsbDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgIGdldCBhdWRpb1NvdXJjZSgpOiBBdWRpb1NvdXJjZSB8IG51bGwge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9hdWRpb1NvdXJjZTtcclxuICAgICAgfVxyXG5cclxuICAgICAgc2V0IGF1ZGlvU291cmNlKHZhbHVlOiBBdWRpb1NvdXJjZSB8IG51bGwpIHtcclxuICAgICAgICB0aGlzLnN0b3AoKTtcclxuICAgICAgICB0aGlzLl9hdWRpb1NvdXJjZSA9IHZhbHVlO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5fYXVkaW9Tb3VyY2UgJiYgdGhpcy5jb250ZXh0KSB7XHJcbiAgICAgICAgICAgICAgaWYgKHRoaXMuX2F1ZGlvU291cmNlIGluc3RhbmNlb2YgQXVkaW9CdWZmZXJTb3VyY2UpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMucmVhZHkgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVTdGFydEFjdGlvbnMoKTtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmxpc3RlbmVyKSB7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMubGlzdGVuZXIuYXVkaW9QbGF5ZXJVcGRhdGUobmV3IEF1ZGlvUGxheWVyRXZlbnQoRXZlbnRUeXBlLlJFQURZKSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX2xvYWRTb3VyY2VXb3JrbGV0QW5kSW5pdFN0YXJ0KCk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9ZWxzZSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5yZWFkeSA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgIHRoaXMudXBkYXRlU3RhcnRBY3Rpb25zKCk7XHJcbiAgICAgICAgICAgICAgaWYgKHRoaXMubGlzdGVuZXIpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubGlzdGVuZXIuYXVkaW9QbGF5ZXJVcGRhdGUobmV3IEF1ZGlvUGxheWVyRXZlbnQoRXZlbnRUeXBlLkNMT1NFRCkpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICAgIHByaXZhdGUgX2xvYWRTb3VyY2VXb3JrbGV0QW5kSW5pdFN0YXJ0KCl7XHJcbiAgICAgICAgICBBdWRpb1NvdXJjZVdvcmtsZXRNb2R1bGVMb2FkZXIubG9hZE1vZHVsZSh0aGlzLmNvbnRleHQpLnRoZW4oKCk9PntcclxuICAgICAgICAgICAgLy9jb25zb2xlLmRlYnVnKFwiUGxheWVyIHJlYWR5LiAoIGJ5IFBsYXllcjo6X2xvYWRTb3VyY2VXb3JrbGV0QW5kSW5pdFN0YXJ0KClcIik7XHJcbiAgICAgICAgICAgIHRoaXMucmVhZHk9dHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy51cGRhdGVTdGFydEFjdGlvbnMoKTtcclxuICAgICAgICAgICAgaWYodGhpcy5saXN0ZW5lcil7XHJcbiAgICAgICAgICAgICAgdGhpcy5saXN0ZW5lci5hdWRpb1BsYXllclVwZGF0ZShuZXcgQXVkaW9QbGF5ZXJFdmVudChFdmVudFR5cGUuUkVBRFkpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSkuY2F0Y2goKGVycm9yOiBhbnkpPT57XHJcbiAgICAgICAgICAgIHRoaXMucmVhZHk9ZmFsc2U7XHJcbiAgICAgICAgICAgICB0aGlzLnVwZGF0ZVN0YXJ0QWN0aW9ucygpO1xyXG4gICAgICAgICAgICBpZih0aGlzLmxpc3RlbmVyKXtcclxuICAgICAgICAgICAgICB0aGlzLmxpc3RlbmVyLmF1ZGlvUGxheWVyVXBkYXRlKG5ldyBBdWRpb1BsYXllckV2ZW50KEV2ZW50VHlwZS5DTE9TRUQpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdDb3VsZCBub3QgYWRkIG1vZHVsZSAnK2Vycm9yKTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuXHJcblxyXG4gIHByaXZhdGUgX3N0YXJ0QXVkaW9Tb3VyY2VXb3JrbGV0Tm9kZSgpe1xyXG4gICAgICAgICAgaWYodGhpcy5zb3VyY2VBdWRpb1dvcmtsZXROb2RlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc291cmNlQXVkaW9Xb3JrbGV0Tm9kZS5vbnByb2Nlc3NvcmVycm9yID0gKGV2OiBFdmVudCkgPT4ge1xyXG4gICAgICAgICAgICAgIGxldCBtc2cgPSAnVW5rbndvbiBlcnJvcic7XHJcbiAgICAgICAgICAgICAgaWYgKGV2IGluc3RhbmNlb2YgRXJyb3JFdmVudCkge1xyXG4gICAgICAgICAgICAgICAgbXNnID0gZXYubWVzc2FnZTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcIkF1ZGlvIHNvdXJjZSB3b3JrbGV0IGVycm9yOiBcIiArIG1zZyk7XHJcbiAgICAgICAgICAgICAgaWYgKHRoaXMubGlzdGVuZXIpIHtcclxuICAgICAgICAgICAgICAgIC8vIFRPRE9cclxuICAgICAgICAgICAgICAgIC8vIHRoaXMubGlzdGVuZXIuZXJyb3IobXNnKTtcclxuICAgICAgICAgICAgICAgIC8vIHRoaXMubGlzdGVuZXIuYXVkaW9QbGF5ZXJVcGRhdGUobmV3IEF1ZGlvUGxheWVyRXZlbnQoKSk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgdGhpcy5zb3VyY2VBdWRpb1dvcmtsZXROb2RlLmNvbm5lY3QodGhpcy5jb250ZXh0LmRlc3RpbmF0aW9uKTsgLy8gdGhpcyBhbHJlYWR5IHN0YXJ0cyBwbGF5aW5nXHJcbiAgICAgICAgICAgIHRoaXMuc291cmNlQXVkaW9Xb3JrbGV0Tm9kZS5vbmVuZGVkID0gKCkgPT4gdGhpcy5vbmVuZGVkKCk7XHJcbiAgICAgICAgICAgIHRoaXMucnVubmluZyA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMuc291cmNlQXVkaW9Xb3JrbGV0Tm9kZS5zdGFydCgpO1xyXG4gICAgICAgICAgICAvL2NvbnNvbGUuZGVidWcoXCJQbGF5YmFjayBzdGFydCBhY3Rpb24gZW5hYmxlZC4gKCBieSBQbGF5ZXI6Ol9zdGFydEF1ZGlvU291cmNlV29ya2xldE5vZGUoKVwiKTtcclxuICAgICAgICAgICAgdGhpcy5fc3RhcnRBY3Rpb24uZGlzYWJsZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLl9zdGFydFNlbGVjdGlvbkFjdGlvbi5kaXNhYmxlZCA9IHRydWVcclxuICAgICAgICAgICAgdGhpcy5fc3RvcEFjdGlvbi5kaXNhYmxlZCA9IGZhbHNlO1xyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMubGlzdGVuZXIpIHtcclxuICAgICAgICAgICAgICB0aGlzLmxpc3RlbmVyLmF1ZGlvUGxheWVyVXBkYXRlKG5ldyBBdWRpb1BsYXllckV2ZW50KEV2ZW50VHlwZS5TVEFSVEVEKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuXHJcbiAgfVxyXG5cclxuICAgICAgICBzdGFydCgpIHtcclxuICAgICAgICAgICAgaWYoIXRoaXMuX3N0YXJ0QWN0aW9uLmRpc2FibGVkICYmICF0aGlzLnJ1bm5pbmcpIHtcclxuICAgICAgICAgICAgICBpZih0aGlzLmNvbnRleHQuc3RhdGUhPT0ncnVubmluZycpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY29udGV4dC5yZXN1bWUoKS50aGVuKCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5fc3RhcnQoKTtcclxuICAgICAgICAgICAgICAgIH0pLmNhdGNoKChyZWFzb24pID0+IHtcclxuICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignQ291bGQgbm90IHJlc3VtZSBhdWRpbyBjb250ZXh0OiAnICsgcmVhc29uKTtcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9zdGFydCgpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdXBkYXRlU3RhcnRBY3Rpb25zKCl7XHJcblxyXG4gICAgICAgICAgaWYodGhpcy5yZWFkeSl7XHJcbiAgICAgICAgICAgIGlmKHRoaXMuX2F1ZGlvU291cmNlIGluc3RhbmNlb2YgQXVkaW9CdWZmZXJTb3VyY2UgfHwgdGhpcy5fYXVkaW9Tb3VyY2UgaW5zdGFuY2VvZiBBcnJheUF1ZGlvQnVmZmVyIHx8IHRoaXMuX2F1ZGlvU291cmNlIGluc3RhbmNlb2YgSW5kZXhlZERiQXVkaW9CdWZmZXIpe1xyXG4gICAgICAgICAgICAgIHRoaXMuX3N0YXJ0QWN0aW9uLmRpc2FibGVkPWZhbHNlO1xyXG4gICAgICAgICAgICAgIHRoaXMuX3N0YXJ0U2VsZWN0aW9uQWN0aW9uLmRpc2FibGVkPXRoaXMuc3RhcnRTZWxlY3Rpb25EaXNhYmxlZCgpO1xyXG4gICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICBpZih0aGlzLl9hdWRpb1NvdXJjZSBpbnN0YW5jZW9mIE5ldEF1ZGlvQnVmZmVyKXtcclxuICAgICAgICAgICAgICAgIHRoaXMuX2F1ZGlvU291cmNlLmFkZE9uUmVhZHlMaXN0ZW5lcigoKT0+e1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLl9zdGFydEFjdGlvbi5kaXNhYmxlZD1mYWxzZTtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5fc3RhcnRTZWxlY3Rpb25BY3Rpb24uZGlzYWJsZWQ9dGhpcy5zdGFydFNlbGVjdGlvbkRpc2FibGVkKCk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICB0aGlzLl9zdGFydEFjdGlvbi5kaXNhYmxlZD10cnVlO1xyXG4gICAgICAgICAgICB0aGlzLl9zdGFydFNlbGVjdGlvbkFjdGlvbi5kaXNhYmxlZD10cnVlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgc3RhcnRTZWxlY3Rpb25EaXNhYmxlZCgpe1xyXG4gICAgICAgICAgcmV0dXJuICEodGhpcy5fYXVkaW9DbGlwICYmIHRoaXMuY29udGV4dCAmJiAhdGhpcy5zdGFydEFjdGlvbi5kaXNhYmxlZCAmJiB0aGlzLl9hdWRpb0NsaXAuc2VsZWN0aW9uIClcclxuICAgICAgICB9XHJcblxyXG5cclxuICAgICAgICBwcml2YXRlIF9zdGFydChwbGF5U2VsZWN0aW9uPWZhbHNlKXtcclxuICAgICAgICAgIGlmICh0aGlzLl9hdWRpb1NvdXJjZSBpbnN0YW5jZW9mIEF1ZGlvQnVmZmVyU291cmNlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc291cmNlQnVmZmVyTm9kZSA9IHRoaXMuY29udGV4dC5jcmVhdGVCdWZmZXJTb3VyY2UoKTtcclxuICAgICAgICAgICAgdGhpcy5zb3VyY2VCdWZmZXJOb2RlLmJ1ZmZlciA9IHRoaXMuX2F1ZGlvU291cmNlLmF1ZGlvQnVmZmVyO1xyXG4gICAgICAgICAgICB0aGlzLnNvdXJjZUJ1ZmZlck5vZGUuY29ubmVjdCh0aGlzLmNvbnRleHQuZGVzdGluYXRpb24pO1xyXG4gICAgICAgICAgICB0aGlzLnNvdXJjZUJ1ZmZlck5vZGUub25lbmRlZCA9ICgpID0+IHRoaXMub25lbmRlZCgpO1xyXG4gICAgICAgICAgICB0aGlzLnBsYXlTdGFydFRpbWUgPSB0aGlzLmNvbnRleHQuY3VycmVudFRpbWU7XHJcbiAgICAgICAgICAgIHRoaXMucnVubmluZyA9IHRydWU7XHJcbiAgICAgICAgICAgIC8vIHVuZm9ydHVuYXRlbHkgV2ViIEF1ZGlvIEFQSSB1c2VzIHRpbWUgdmFsdWVzIG5vdCBmcmFtZXNcclxuICAgICAgICAgICAgY29uc3QgYWMgPSB0aGlzLl9hdWRpb0NsaXBcclxuICAgICAgICAgICAgbGV0IG9mZnNldCA9IDA7XHJcbiAgICAgICAgICAgIGlmIChwbGF5U2VsZWN0aW9uICYmIGFjICYmIGFjLnNlbGVjdGlvbikge1xyXG5cclxuICAgICAgICAgICAgICBjb25zdCBzID0gYWMuc2VsZWN0aW9uO1xyXG4gICAgICAgICAgICAgIGNvbnN0IHNyID0gYWMuYXVkaW9EYXRhSG9sZGVyLnNhbXBsZVJhdGU7XHJcbiAgICAgICAgICAgICAgb2Zmc2V0ID0gcy5sZWZ0RnJhbWUgLyBzcjtcclxuICAgICAgICAgICAgICBjb25zdCBzdG9wUG9zSW5zZWNzID0gcy5yaWdodEZyYW1lIC8gc3I7XHJcbiAgICAgICAgICAgICAgY29uc3QgZHVyID0gc3RvcFBvc0luc2VjcyAtIG9mZnNldDtcclxuICAgICAgICAgICAgICB0aGlzLnNvdXJjZUJ1ZmZlck5vZGUuc3RhcnQoMCwgb2Zmc2V0LCBkdXIpXHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5zb3VyY2VCdWZmZXJOb2RlLnN0YXJ0KCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5wbGF5U3RhcnRUaW1lID0gdGhpcy5jb250ZXh0LmN1cnJlbnRUaW1lIC0gb2Zmc2V0O1xyXG4gICAgICAgICAgICB0aGlzLl9zdGFydEFjdGlvbi5kaXNhYmxlZCA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMuX3N0YXJ0U2VsZWN0aW9uQWN0aW9uLmRpc2FibGVkID0gdHJ1ZVxyXG4gICAgICAgICAgICB0aGlzLl9zdG9wQWN0aW9uLmRpc2FibGVkID0gZmFsc2U7XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5saXN0ZW5lcikge1xyXG4gICAgICAgICAgICAgIHRoaXMubGlzdGVuZXIuYXVkaW9QbGF5ZXJVcGRhdGUobmV3IEF1ZGlvUGxheWVyRXZlbnQoRXZlbnRUeXBlLlNUQVJURUQpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSBlbHNlIGlmICh0aGlzLl9hdWRpb1NvdXJjZSBpbnN0YW5jZW9mIEFycmF5QXVkaW9CdWZmZXIgfHwgdGhpcy5fYXVkaW9Tb3VyY2UgaW5zdGFuY2VvZiBJbmRleGVkRGJBdWRpb0J1ZmZlciB8fCB0aGlzLl9hdWRpb1NvdXJjZSBpbnN0YW5jZW9mIE5ldEF1ZGlvQnVmZmVyKSB7XHJcbiAgICAgICAgICAgIHRoaXMucGxheVN0YXJ0VGltZSA9IG51bGw7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLl9hdWRpb1NvdXJjZSBpbnN0YW5jZW9mIEFycmF5QXVkaW9CdWZmZXIpIHtcclxuICAgICAgICAgICAgICBjb25zdCBhYWJzbiA9IG5ldyBBcnJheUF1ZGlvQnVmZmVyU291cmNlTm9kZSh0aGlzLmNvbnRleHQpO1xyXG4gICAgICAgICAgICAgIGFhYnNuLmFycmF5QXVkaW9CdWZmZXIgPSB0aGlzLl9hdWRpb1NvdXJjZTtcclxuICAgICAgICAgICAgICB0aGlzLnNvdXJjZUF1ZGlvV29ya2xldE5vZGUgPSBhYWJzbjtcclxuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLl9hdWRpb1NvdXJjZSBpbnN0YW5jZW9mIEluZGV4ZWREYkF1ZGlvQnVmZmVyKSB7XHJcbiAgICAgICAgICAgICAgY29uc3QgaWFzbiA9IG5ldyBJbmRleGVkRGJBdWRpb0J1ZmZlclNvdXJjZU5vZGUodGhpcy5jb250ZXh0KTtcclxuICAgICAgICAgICAgICBpYXNuLmluZGRiQXVkaW9CdWZmZXIgPSB0aGlzLl9hdWRpb1NvdXJjZTtcclxuICAgICAgICAgICAgICB0aGlzLnNvdXJjZUF1ZGlvV29ya2xldE5vZGUgPSBpYXNuO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuX2F1ZGlvU291cmNlIGluc3RhbmNlb2YgTmV0QXVkaW9CdWZmZXIpIHtcclxuICAgICAgICAgICAgICBjb25zdCBuYWJzbiA9IG5ldyBOZXRBdWRpb0J1ZmZlclNvdXJjZU5vZGUodGhpcy5jb250ZXh0KTtcclxuICAgICAgICAgICAgICBuYWJzbi5uZXRBdWRpb0J1ZmZlciA9IHRoaXMuX2F1ZGlvU291cmNlO1xyXG4gICAgICAgICAgICAgIHRoaXMuc291cmNlQXVkaW9Xb3JrbGV0Tm9kZSA9IG5hYnNuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnNvdXJjZUF1ZGlvV29ya2xldE5vZGUpIHtcclxuICAgICAgICAgICAgICB0aGlzLnNvdXJjZUF1ZGlvV29ya2xldE5vZGUub25wcm9jZXNzb3JlcnJvciA9IChldjogRXZlbnQpID0+IHtcclxuICAgICAgICAgICAgICAgIGxldCBtc2cgPSAnVW5rbndvbiBlcnJvcic7XHJcbiAgICAgICAgICAgICAgICBpZiAoZXYgaW5zdGFuY2VvZiBFcnJvckV2ZW50KSB7XHJcbiAgICAgICAgICAgICAgICAgIG1zZyA9IGV2Lm1lc3NhZ2U7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFwiQXVkaW8gc291cmNlIHdvcmtsZXQgZXJyb3I6IFwiICsgbXNnKTtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmxpc3RlbmVyKSB7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMubGlzdGVuZXIuYXVkaW9QbGF5ZXJVcGRhdGUobmV3IEF1ZGlvUGxheWVyRXZlbnQoRXZlbnRUeXBlLkVSUk9SKSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgICAgdGhpcy5zb3VyY2VBdWRpb1dvcmtsZXROb2RlLmNvbm5lY3QodGhpcy5jb250ZXh0LmRlc3RpbmF0aW9uKTsgLy8gdGhpcyBhbHJlYWR5IHN0YXJ0cyBwbGF5aW5nXHJcbiAgICAgICAgICAgICAgdGhpcy5zb3VyY2VBdWRpb1dvcmtsZXROb2RlLm9uZW5kZWQgPSAoKSA9PiB0aGlzLm9uZW5kZWQoKTtcclxuXHJcbiAgICAgICAgICAgICAgdGhpcy5ydW5uaW5nID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgICAgICAgY29uc3QgYWMgPSB0aGlzLl9hdWRpb0NsaXBcclxuICAgICAgICAgICAgICBsZXQgb2Zmc2V0ID0gMFxyXG4gICAgICAgICAgICAgIGlmIChwbGF5U2VsZWN0aW9uICYmIGFjICYmIGFjLnNlbGVjdGlvbikge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgcyA9IGFjLnNlbGVjdGlvbjtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHNyID0gYWMuYXVkaW9EYXRhSG9sZGVyLnNhbXBsZVJhdGU7XHJcbiAgICAgICAgICAgICAgICBvZmZzZXQgPSBzLmxlZnRGcmFtZSAvIHNyO1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgc3RvcFBvc0luc2VjcyA9IHMucmlnaHRGcmFtZSAvIHNyO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZHVyID0gc3RvcFBvc0luc2VjcyAtIG9mZnNldFxyXG4gICAgICAgICAgICAgICAgdGhpcy5zb3VyY2VBdWRpb1dvcmtsZXROb2RlLnN0YXJ0KDAsIG9mZnNldCwgZHVyKVxyXG4gICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNvdXJjZUF1ZGlvV29ya2xldE5vZGUuc3RhcnQoKTtcclxuICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgIC8vdGhpcy5wbGF5U3RhcnRUaW1lID0gdGhpcy5jb250ZXh0LmN1cnJlbnRUaW1lIC0gb2Zmc2V0O1xyXG4gICAgICAgICAgICAgIHRoaXMuX3N0YXJ0QWN0aW9uLmRpc2FibGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICB0aGlzLl9zdGFydFNlbGVjdGlvbkFjdGlvbi5kaXNhYmxlZCA9IHRydWVcclxuICAgICAgICAgICAgICB0aGlzLl9zdG9wQWN0aW9uLmRpc2FibGVkID0gZmFsc2U7XHJcblxyXG4gICAgICAgICAgICAgIGlmICh0aGlzLmxpc3RlbmVyKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxpc3RlbmVyLmF1ZGlvUGxheWVyVXBkYXRlKG5ldyBBdWRpb1BsYXllckV2ZW50KEV2ZW50VHlwZS5TVEFSVEVEKSk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgc3RhcnRTZWxlY3RlZCgpIHtcclxuICAgICAgICBpZighdGhpcy5fc3RhcnRBY3Rpb24uZGlzYWJsZWQgJiYgIXRoaXMucnVubmluZykge1xyXG4gICAgICAgICAgaWYgKHRoaXMuY29udGV4dC5zdGF0ZSAhPT0gJ3J1bm5pbmcnKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY29udGV4dC5yZXN1bWUoKS50aGVuKCgpID0+IHtcclxuICAgICAgICAgICAgICB0aGlzLl9zdGFydCh0cnVlKTtcclxuICAgICAgICAgICAgfSkuY2F0Y2goKHJlYXNvbikgPT4ge1xyXG4gICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0NvdWxkIG5vdCByZXN1bWUgYXVkaW8gY29udGV4dDogJyArIHJlYXNvbik7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgdGhpcy5fc3RhcnQodHJ1ZSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICAgIHN0b3AoKXtcclxuICAgICAgICAgICAgaWYodGhpcy5ydW5uaW5nKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5zb3VyY2VCdWZmZXJOb2RlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zb3VyY2VCdWZmZXJOb2RlLnN0b3AoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmKHRoaXMuc291cmNlQXVkaW9Xb3JrbGV0Tm9kZSl7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuc291cmNlQXVkaW9Xb3JrbGV0Tm9kZS5zdG9wKCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnRpbWVyVmFyICE9PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgd2luZG93LmNsZWFySW50ZXJ2YWwodGhpcy50aW1lclZhcik7XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgdGhpcy5ydW5uaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmxpc3RlbmVyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5saXN0ZW5lci5hdWRpb1BsYXllclVwZGF0ZShuZXcgQXVkaW9QbGF5ZXJFdmVudChFdmVudFR5cGUuU1RPUFBFRCkpO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBvbmVuZGVkKCkge1xyXG4gICAgICAgICAgICBpZih0aGlzLnRpbWVyVmFyIT1udWxsKSB7XHJcbiAgICAgICAgICAgICAgICB3aW5kb3cuY2xlYXJJbnRlcnZhbCh0aGlzLnRpbWVyVmFyKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLl9zdGFydEFjdGlvbi5kaXNhYmxlZCA9ICF0aGlzLl9hdWRpb1NvdXJjZTtcclxuICAgICAgICAgICAgdGhpcy5fc3RhcnRTZWxlY3Rpb25BY3Rpb24uZGlzYWJsZWQ9dGhpcy5zdGFydFNlbGVjdGlvbkRpc2FibGVkKClcclxuICAgICAgICAgICAgdGhpcy5fc3RvcEFjdGlvbi5kaXNhYmxlZCA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMucnVubmluZz1mYWxzZTtcclxuICAgICAgICAgICAgaWYgKHRoaXMubGlzdGVuZXIpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubGlzdGVuZXIuYXVkaW9QbGF5ZXJVcGRhdGUobmV3IEF1ZGlvUGxheWVyRXZlbnQoRXZlbnRUeXBlLkVOREVEKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGdldCBwbGF5UG9zaXRpb25UaW1lKCk6bnVtYmVyfG51bGwge1xyXG4gICAgICAgICAgICBsZXQgcHB0PW51bGw7XHJcbiAgICAgICAgICAgIGlmKHRoaXMucGxheVN0YXJ0VGltZSE9PW51bGwpIHtcclxuICAgICAgICAgICAgICAgIHBwdD0gdGhpcy5jb250ZXh0LmN1cnJlbnRUaW1lIC0gdGhpcy5wbGF5U3RhcnRUaW1lO1xyXG4gICAgICAgICAgICB9ZWxzZSBpZih0aGlzLnNvdXJjZUF1ZGlvV29ya2xldE5vZGUpe1xyXG4gICAgICAgICAgICAgIHBwdD10aGlzLnNvdXJjZUF1ZGlvV29ya2xldE5vZGUucGxheVBvc2l0aW9uVGltZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gcHB0O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgIGdldCBwbGF5UG9zaXRpb25GcmFtZXMoKTpudW1iZXJ8bnVsbCB7XHJcbiAgICAgICAgbGV0IHBwRnJzOm51bWJlcnxudWxsPW51bGw7XHJcbiAgICAgICBpZih0aGlzLl9hdWRpb1NvdXJjZSkge1xyXG4gICAgICAgICBsZXQgc3I9dGhpcy5fYXVkaW9Tb3VyY2Uuc2FtcGxlUmF0ZTtcclxuICAgICAgICAgaWYgKHNyKSB7XHJcbiAgICAgICAgICAgbGV0IHBwVGltZSA9IHRoaXMucGxheVBvc2l0aW9uVGltZTtcclxuICAgICAgICAgICBpZiAocHBUaW1lICE9PSBudWxsKSB7XHJcbiAgICAgICAgICAgICBwcEZycyA9IHNyICogcHBUaW1lO1xyXG4gICAgICAgICAgIH1cclxuICAgICAgICAgfVxyXG4gICAgICAgfVxyXG4gICAgICAgIHJldHVybiBwcEZycztcclxuICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbiJdfQ==