speechrecorderng 3.9.8 → 3.9.9

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 (84) hide show
  1. package/esm2022/lib/action/action.mjs +1 -1
  2. package/esm2022/lib/audio/array_audio_buffer.mjs +1 -1
  3. package/esm2022/lib/audio/array_audio_buffer_input_stream.mjs +1 -1
  4. package/esm2022/lib/audio/audio_data_holder.mjs +1 -1
  5. package/esm2022/lib/audio/audio_display.mjs +4 -4
  6. package/esm2022/lib/audio/audio_player.mjs +4 -4
  7. package/esm2022/lib/audio/capture/capture.mjs +1 -1
  8. package/esm2022/lib/audio/context.mjs +1 -1
  9. package/esm2022/lib/audio/dsp/level_measure.mjs +5 -4
  10. package/esm2022/lib/audio/impl/wavreader.mjs +1 -1
  11. package/esm2022/lib/audio/impl/wavwriter.mjs +1 -1
  12. package/esm2022/lib/audio/inddb_audio_buffer.mjs +1 -1
  13. package/esm2022/lib/audio/io/stream.mjs +1 -1
  14. package/esm2022/lib/audio/net_audio_buffer.mjs +1 -1
  15. package/esm2022/lib/audio/persistor.mjs +1 -1
  16. package/esm2022/lib/audio/playback/array_audio_buffer_source_node.mjs +1 -1
  17. package/esm2022/lib/audio/playback/audio_source_node.mjs +1 -1
  18. package/esm2022/lib/audio/playback/audio_source_worklet_module_loader.mjs +1 -1
  19. package/esm2022/lib/audio/playback/inddb_audio_buffer_source_node.mjs +1 -1
  20. package/esm2022/lib/audio/playback/net_audio_buffer_source_node.mjs +1 -1
  21. package/esm2022/lib/audio/playback/player.mjs +1 -1
  22. package/esm2022/lib/audio/ui/audio_canvas_layer_comp.mjs +7 -7
  23. package/esm2022/lib/audio/ui/audio_display_control.mjs +4 -4
  24. package/esm2022/lib/audio/ui/audio_display_scroll_pane.mjs +4 -4
  25. package/esm2022/lib/audio/ui/audiosignal.mjs +4 -4
  26. package/esm2022/lib/audio/ui/container.mjs +4 -4
  27. package/esm2022/lib/audio/ui/livelevel.mjs +4 -4
  28. package/esm2022/lib/audio/ui/scroll_pane_horizontal.mjs +3 -3
  29. package/esm2022/lib/audio/ui/sonagram.mjs +4 -4
  30. package/esm2022/lib/db/inddb.mjs +4 -4
  31. package/esm2022/lib/dsp/utils.mjs +1 -1
  32. package/esm2022/lib/io/BinaryReader.mjs +1 -1
  33. package/esm2022/lib/io/BinaryWriter.mjs +1 -1
  34. package/esm2022/lib/io/stream.mjs +1 -1
  35. package/esm2022/lib/math/complex.mjs +1 -1
  36. package/esm2022/lib/math/dft.mjs +1 -1
  37. package/esm2022/lib/net/uploader.mjs +1 -1
  38. package/esm2022/lib/recorder_component.mjs +1 -1
  39. package/esm2022/lib/speechrecorder/project/project.mjs +1 -1
  40. package/esm2022/lib/speechrecorder/project/project.service.mjs +4 -4
  41. package/esm2022/lib/speechrecorder/recording.mjs +1 -1
  42. package/esm2022/lib/speechrecorder/recordings/basic_recording.service.mjs +1 -1
  43. package/esm2022/lib/speechrecorder/recordings/recordings.service.mjs +4 -4
  44. package/esm2022/lib/speechrecorder/script/script.mjs +1 -1
  45. package/esm2022/lib/speechrecorder/script/script.service.mjs +4 -4
  46. package/esm2022/lib/speechrecorder/session/audiorecorder.mjs +7 -7
  47. package/esm2022/lib/speechrecorder/session/basicrecorder.mjs +1 -1
  48. package/esm2022/lib/speechrecorder/session/controlpanel.mjs +22 -22
  49. package/esm2022/lib/speechrecorder/session/item.mjs +1 -1
  50. package/esm2022/lib/speechrecorder/session/progress.mjs +4 -4
  51. package/esm2022/lib/speechrecorder/session/prompting.mjs +16 -16
  52. package/esm2022/lib/speechrecorder/session/recorder_combi_pane.mjs +3 -3
  53. package/esm2022/lib/speechrecorder/session/recording_file_cache.mjs +1 -1
  54. package/esm2022/lib/speechrecorder/session/recording_list.mjs +4 -4
  55. package/esm2022/lib/speechrecorder/session/recordingfile/recording-file-meta.component.mjs +4 -4
  56. package/esm2022/lib/speechrecorder/session/recordingfile/recording-file-navi.component.mjs +4 -4
  57. package/esm2022/lib/speechrecorder/session/recordingfile/recording-file-u-i.component.mjs +4 -4
  58. package/esm2022/lib/speechrecorder/session/recordingfile/recording-file-view.component.mjs +4 -4
  59. package/esm2022/lib/speechrecorder/session/recordingfile/recording-file.mjs +1 -1
  60. package/esm2022/lib/speechrecorder/session/recordingfile/recordingfile-service.mjs +4 -4
  61. package/esm2022/lib/speechrecorder/session/session.service.mjs +4 -4
  62. package/esm2022/lib/speechrecorder/session/session_finished_dialog.mjs +3 -3
  63. package/esm2022/lib/speechrecorder/session/sessionmanager.mjs +4 -4
  64. package/esm2022/lib/speechrecorder/session/warning_bar.mjs +4 -4
  65. package/esm2022/lib/speechrecorder/spruploader.mjs +4 -4
  66. package/esm2022/lib/speechrecorder/startstopsignal/ui/simpletrafficlight.mjs +4 -4
  67. package/esm2022/lib/speechrecorderng.component.mjs +4 -4
  68. package/esm2022/lib/speechrecorderng.module.mjs +9 -13
  69. package/esm2022/lib/spr.config.mjs +3 -3
  70. package/esm2022/lib/spr.module.version.mjs +2 -2
  71. package/esm2022/lib/ui/canvas_layer_comp.mjs +4 -4
  72. package/esm2022/lib/ui/intersection-observer.directive.mjs +4 -4
  73. package/esm2022/lib/ui/message_dialog.mjs +3 -3
  74. package/esm2022/lib/ui/recordingitem_display.mjs +7 -7
  75. package/esm2022/lib/ui/responsive_component.mjs +3 -3
  76. package/esm2022/lib/utils/scrollIntoViewToBottom.mjs +4 -4
  77. package/esm2022/lib/utils/ua-parser.mjs +1 -1
  78. package/esm2022/lib/utils/utils.mjs +1 -1
  79. package/esm2022/lib/utils/wake_lock.mjs +1 -1
  80. package/fesm2022/speechrecorderng.mjs +171 -174
  81. package/fesm2022/speechrecorderng.mjs.map +1 -1
  82. package/lib/speechrecorderng.module.d.ts +11 -12
  83. package/lib/spr.module.version.d.ts +1 -1
  84. package/package.json +12 -12
@@ -852,4 +852,4 @@ export class AudioCapture {
852
852
  }
853
853
  }
854
854
  }
855
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FwdHVyZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NwZWVjaHJlY29yZGVybmcvc3JjL2xpYi9hdWRpby9jYXB0dXJlL2NhcHR1cmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFDLE9BQU8sRUFBRSxRQUFRLEVBQUUsZ0JBQWdCLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUUxRSxPQUFPLEVBQUMsZ0JBQWdCLEVBQXlCLFFBQVEsSUFBSSxXQUFXLEVBQUMsTUFBTSxzQ0FBc0MsQ0FBQztBQUN0SCxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUN2RCxPQUFPLEVBQUMsSUFBSSxFQUFDLE1BQU0sbUJBQW1CLENBQUM7QUFDdkMsT0FBTyxFQUFDLG9CQUFvQixFQUErQixNQUFNLHVCQUF1QixDQUFDO0FBQ3pGLE9BQU8sRUFBQyxvQkFBb0IsRUFBQyxNQUFNLFlBQVksQ0FBQztBQUdoRCxNQUFNLENBQUMsTUFBTSwwQ0FBMEMsR0FBQyxLQUFLLENBQUM7QUFFOUQsTUFBTSxpQkFBaUIsR0FBQyxDQUFDLENBQUM7QUFFMUIsZ0NBQWdDO0FBQ2hDLHdEQUF3RDtBQUN4RCxNQUFNLE1BQU0sR0FBQyx5RUFBeUU7SUFDbEYsSUFBSTtJQUNKLDJCQUEyQjtJQUMzQiw4QkFBOEI7SUFDOUIscUVBQXFFO0lBQ3JFLG9CQUFvQjtJQUNwQixvQkFBb0I7SUFDcEIseUJBQXlCO0lBQ3pCLHVCQUF1QjtJQUN2QixvQkFBb0I7SUFDcEIsSUFBSTtJQUNKLFNBQVM7SUFDVCxJQUFJO0lBQ0osYUFBYTtJQUNiLGlCQUFpQjtJQUNqQixrQkFBa0I7SUFDbEIsb0JBQW9CO0lBQ3BCLFFBQVE7SUFDUixJQUFJO0lBQ0oscUNBQXFDO0lBQ3JDLDRCQUE0QjtJQUM1Qix3QkFBd0I7SUFDeEIsNkJBQTZCO0lBQzdCLDBCQUEwQjtJQUMxQixvQ0FBb0M7SUFDcEMsMENB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Y2VBdWRpb0Zsb2F0MzJPdXRTdHJlYW19IGZyb20gXCIuLi9pby9zdHJlYW1cIjtcclxuaW1wb3J0IHtCcm93c2VyLCBQbGF0Zm9ybSwgVXNlckFnZW50QnVpbGRlcn0gZnJvbSBcIi4uLy4uL3V0aWxzL3VhLXBhcnNlclwiO1xyXG5cclxuaW1wb3J0IHtBdWRpb1N0b3JhZ2VUeXBlLCBBdXRvR2FpbkNvbnRyb2xDb25maWcsIFBsYXRmb3JtIGFzIENmZ1BsYXRmb3JtfSBmcm9tIFwiLi4vLi4vc3BlZWNocmVjb3JkZXIvcHJvamVjdC9wcm9qZWN0XCI7XHJcbmltcG9ydCB7QXJyYXlBdWRpb0J1ZmZlcn0gZnJvbSBcIi4uL2FycmF5X2F1ZGlvX2J1ZmZlclwiO1xyXG5pbXBvcnQge1VVSUR9IGZyb20gXCIuLi8uLi91dGlscy91dGlsc1wiO1xyXG5pbXBvcnQge0luZGV4ZWREYkF1ZGlvQnVmZmVyLCBQZXJzaXN0ZW50QXVkaW9TdG9yYWdlVGFyZ2V0fSBmcm9tIFwiLi4vaW5kZGJfYXVkaW9fYnVmZmVyXCI7XHJcbmltcG9ydCB7QXVkaW9Db250ZXh0UHJvdmlkZXJ9IGZyb20gXCIuLi9jb250ZXh0XCI7XHJcblxyXG5cclxuZXhwb3J0IGNvbnN0IENIUk9NRV9BQ1RJVkFURV9FQ0hPX0NBTkNFTExBVElPTl9XSVRIX0FHQz1mYWxzZTtcclxuXHJcbmNvbnN0IERFQlVHX1RSQUNFX0xFVkVMPTA7XHJcblxyXG4vLyBEaXJ0eSB3YXkgdG8gbG9hZCB0aGlzIG1vZHVsZVxyXG4vLyBDb3B5IGNvbnRlbnQgb2YgaW50ZXJjZXB0b3Jfd29ya2xldC5qcyB0byB0aGlzIHN0cmluZ1xyXG5jb25zdCBhd3BTdHI9XCJjbGFzcyBBdWRpb0NhcHR1cmVJbnRlcmNlcHRvclByb2Nlc3NvciBleHRlbmRzIEF1ZGlvV29ya2xldFByb2Nlc3NvcntcXG5cIiArXHJcbiAgICBcIlxcblwiICtcclxuICAgIFwiICAgIEJVRkZFUl9RVUFOVFVNUz02NDtcXG5cIiArXHJcbiAgICBcIiAgICBRVUFOVFVNX0ZSQU1FX0xFTj0xMjg7XFxuXCIgK1xyXG4gICAgXCIgICAgQlVGRkVSX0ZSQU1FX0xFTj10aGlzLlFVQU5UVU1fRlJBTUVfTEVOKnRoaXMuQlVGRkVSX1FVQU5UVU1TO1xcblwiICtcclxuICAgIFwiICAgIGJ1ZmZlcj1udWxsO1xcblwiICtcclxuICAgIFwiICAgIGJ1ZmZlclBvcz0wO1xcblwiICtcclxuICAgIFwiICAgIGJ1ZmZlclBvc0J5dGVzPTA7XFxuXCIgK1xyXG4gICAgXCIgICAgY29uc3RydWN0b3IoKSB7XFxuXCIgK1xyXG4gICAgXCIgICAgICAgIHN1cGVyKCk7XFxuXCIgK1xyXG4gICAgXCJcXG5cIiArXHJcbiAgICBcIiAgICB9XFxuXCIgK1xyXG4gICAgXCJcXG5cIiArXHJcbiAgICBcIiBwcm9jZXNzKFxcblwiICtcclxuICAgIFwiICAgICAgaW5wdXRzLFxcblwiICtcclxuICAgIFwiICAgICAgb3V0cHV0cyxcXG5cIiArXHJcbiAgICBcIiAgICAgIHBhcmFtZXRlcnNcXG5cIiArXHJcbiAgICBcIiAgKXtcXG5cIiArXHJcbiAgICBcIlxcblwiICtcclxuICAgIFwiICAgICBsZXQgaW5wdXRzQ250PWlucHV0cy5sZW5ndGg7XFxuXCIgK1xyXG4gICAgXCIgICAgIGxldCBjaGFubmVsQ291bnQ9MDtcXG5cIiArXHJcbiAgICBcIiAgICAgbGV0IGlucHV0TGVuPTA7XFxuXCIgK1xyXG4gICAgXCIgICAgIGxldCBpbnB1dExlbkJ5dGVzPTA7XFxuXCIgK1xyXG4gICAgXCIgICAgIGlmKGlucHV0c0NudD4wKSB7XFxuXCIgK1xyXG4gICAgXCIgICAgICAgICBsZXQgaW5wdXQwID0gaW5wdXRzWzBdO1xcblwiICtcclxuICAgIFwiICAgICAgICAgY2hhbm5lbENvdW50ID0gaW5wdXQwLmxlbmd0aDtcXG5cIiArXHJcbiAgICBcIiAgICAgICAgIGlmIChjaGFubmVsQ291bnQgPiAwKSB7XFxuXCIgK1xyXG4gICAgXCIgICAgICAgICAgICAgbGV0IGlucHV0MGNoMD1pbnB1dDBbMF07XFxuXCIgK1xyXG4gICAgXCIgICAgICAgICAgICAgaW5wdXRMZW49aW5wdXQwY2gwLmxlbmd0aDtcXG5cIiArXHJcbiAgICBcIiAgICAgICAgICAgICBpbnB1dExlbkJ5dGVzPWlucHV0MGNoMC5idWZmZXIubGVuZ3RoO1xcblwiICtcclxuICAgIFwiICAgICAgICAgfVxcblwiICtcclxuICAgIFwiICAgICB9XFxuXCIgK1xyXG4gICAgXCIgICAgIGlmICghdGhpcy5idWZmZXIgfHwgdGhpcy5idWZmZXIubGVuZ3RoIDwgY2hhbm5lbENvdW50KSB7XFxuXCIgK1xyXG4gICAgXCIgICAgICAgICB0aGlzLmJ1ZmZlciA9IG5ldyBBcnJheShjaGFubmVsQ291bnQpO1xcblwiICtcclxuICAgIFwiICAgICAgICAgdGhpcy5idWZmZXJQb3MgPSAwXFxuXCIgK1xyXG4gICAgXCIgICAgICAgICBmb3IgKGxldCBiY2ggPSAwOyBiY2ggPCBjaGFubmVsQ291bnQ7IGJjaCsrKSB7XFxuXCIgK1xyXG4gICAgXCIgICAgICAgICAgICAgdGhpcy5idWZmZXJbYmNoXSA9IG5ldyBGbG9hdDMyQXJyYXkodGhpcy5CVUZGRVJfRlJBTUVfTEVOKTtcXG5cIiArXHJcbiAgICBcIiAgICAgICAgICAgICB0aGlzLmJ1ZmZlclBvcyA9IDA7XFxuXCIgK1xyXG4gICAgXCIgICAgICAgICAgICAgdGhpcy5idWZmZXJQb3NCeXRlcz0wO1xcblwiICtcclxuICAgIFwiICAgICAgICAgfVxcblwiICtcclxuICAgIFwiICAgICB9XFxuXCIgK1xyXG4gICAgXCIgICAgIGxldCBidWZBdmFpbCA9IHRoaXMuQlVGRkVSX0ZSQU1FX0xFTiAtIHRoaXMuYnVmZmVyUG9zO1xcblwiICtcclxuICAgIFwiICAgICAvLyBjaGVjayBpZiBidWZmZXIgaGFzIHRvIGJlIHRyYW5zZmVycmVkXFxuXCIgK1xyXG4gICAgXCIgICAgIGlmIChpbnB1dExlbiA+IGJ1ZkF2YWlsKSB7XFxuXCIgK1xyXG4gICAgXCIgICAgICAgICBsZXQgYWRhPW5ldyBBcnJheShjaGFubmVsQ291bnQpO1xcblwiICtcclxuICAgIFwiICAgICAgICAgZm9yIChsZXQgY2ggPSAwOyBjaCA8IGNoYW5uZWxDb3VudDsgY2grKykge1xcblwiICtcclxuICAgIFwiICAgICAgICAgICAgIGFkYVtjaF09dGhpcy5idWZmZXJbY2hdLmJ1ZmZlci5zbGljZSgwKTtcXG5cIiArXHJcbiAgICBcIiAgICAgICAgIH1cXG5cIiArXHJcbiAgICBcIiAgICAgICAgIHRoaXMucG9ydC5wb3N0TWVzc2FnZSh7XFxuXCIgK1xyXG4gICAgXCIgICAgICAgICAgICAgZGF0YTogYWRhLFxcblwiICtcclxuICAgIFwiICAgICAgICAgICAgIGNoczogY2hhbm5lbENvdW50LFxcblwiICtcclxuICAgIFwiICAgICAgICAgICAgIGxlbjogdGhpcy5idWZmZXJQb3NcXG5cIiArXHJcbiAgICBcIiAgICAgICAgIH0sIGFkYSk7XFxuXCIgK1xyXG4gICAgXCIgICAgICAgICAvLyBidWZmZXIgdHJhbnNmZXJyZWQsIHJlc2V0XFxuXCIgK1xyXG4gICAgXCIgICAgICAgICB0aGlzLmJ1ZmZlclBvcyA9IDA7XFxuXCIgK1xyXG4gICAgXCIgICAgICAgICB0aGlzLmJ1ZmZlclBvc0J5dGVzPTA7XFxuXCIgK1xyXG4gICAgXCIgICAgIH1cXG5cIiArXHJcbiAgICBcIlxcblwiICtcclxuICAgIFwiICAgICBmb3IobGV0IGlpPTA7aWk8aW5wdXRzQ250O2lpKyspIHtcXG5cIiArXHJcbiAgICBcIiAgICAgICAgIGZvciAobGV0IGNoID0gMDsgY2ggPCBjaGFubmVsQ291bnQ7IGNoKyspIHtcXG5cIiArXHJcbiAgICBcIiAgICAgICAgICAgICAvLyBNdXRlIG91dHB1dHNcXG5cIiArXHJcbiAgICBcIiAgICAgICAgICAgICAvL291dHB1dHNbaWldW2NoXS5maWxsKDApO1xcblwiICtcclxuICAgIFwiICAgICAgICAgICAgIGxldCBjaFNhbXBsZXMgPSBpbnB1dHNbaWldW2NoXTtcXG5cIiArXHJcbiAgICBcIiAgICAgICAgICAgICB0aGlzLmJ1ZmZlcltjaF0uc2V0KGNoU2FtcGxlcyx0aGlzLmJ1ZmZlclBvcyk7XFxuXCIgK1xyXG4gICAgXCIgICAgICAgICB9XFxuXCIgK1xyXG4gICAgXCIgICAgICAgICB0aGlzLmJ1ZmZlclBvcys9aW5wdXRMZW47XFxuXCIgK1xyXG4gICAgXCIgICAgICAgICB0aGlzLmJ1ZmZlclBvc0J5dGVzKz1pbnB1dExlbkJ5dGVzO1xcblwiICtcclxuICAgIFwiICAgICB9XFxuXCIgK1xyXG4gICAgXCIgICAgXFxuXCIgK1xyXG4gICAgXCIgICAgIHJldHVybiB0cnVlO1xcblwiICtcclxuICAgIFwiICB9XFxuXCIgK1xyXG4gICAgXCJ9XFxuXCIgK1xyXG4gICAgXCJcXG5cIiArXHJcbiAgICBcInJlZ2lzdGVyUHJvY2Vzc29yKCdjYXB0dXJlLWludGVyY2VwdG9yJyxBdWRpb0NhcHR1cmVJbnRlcmNlcHRvclByb2Nlc3Nvcik7XFxuXCI7XHJcblxyXG5cclxuXHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIEF1ZGlvQ2FwdHVyZUxpc3RlbmVyIHtcclxuICBvcGVuZWQoKTogdm9pZDtcclxuXHJcbiAgc3RhcnRlZCgpOiB2b2lkO1xyXG5cclxuICBzdG9wcGVkKCk6IHZvaWQ7XHJcblxyXG4gIGNsb3NlZCgpOiB2b2lkO1xyXG5cclxuICBlcnJvcihtc2c/OnN0cmluZyxhZHZpY2U/OnN0cmluZyk6IHZvaWQ7XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBBdWRpb0NhcHR1cmUge1xyXG5cclxuICBnZXQgbWF4QXV0b05ldE1lbVN0b3JlU2FtcGxlcygpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIHRoaXMuX21heEF1dG9OZXRNZW1TdG9yZVNhbXBsZXM7XHJcbiAgfVxyXG5cclxuICBzZXQgbWF4QXV0b05ldE1lbVN0b3JlU2FtcGxlcyh2YWx1ZTogbnVtYmVyKSB7XHJcbiAgICB0aGlzLl9tYXhBdXRvTmV0TWVtU3RvcmVTYW1wbGVzID0gdmFsdWU7XHJcbiAgfVxyXG4gIHNldCByZWNVVUlEKHZhbHVlOiBzdHJpbmd8bnVsbCkge1xyXG4gICAgdGhpcy5fcmVjVVVJRCA9IHZhbHVlO1xyXG4gIH1cclxuICBnZXQgcmVjVVVJRCgpOiBzdHJpbmcgfG51bGx7XHJcbiAgICByZXR1cm4gdGhpcy5fcmVjVVVJRDtcclxuICB9XHJcbiAgZ2V0IGF1ZGlvU3RvcmFnZVR5cGUoKTogQXVkaW9TdG9yYWdlVHlwZSB7XHJcbiAgICByZXR1cm4gdGhpcy5fYXVkaW9TdG9yYWdlVHlwZTtcclxuICB9XHJcblxyXG4gIHNldCBhdWRpb1N0b3JhZ2VUeXBlKHZhbHVlOiBBdWRpb1N0b3JhZ2VUeXBlKSB7XHJcbiAgICB0aGlzLl9hdWRpb1N0b3JhZ2VUeXBlID0gdmFsdWU7XHJcbiAgfVxyXG4gIGdldCBwZXJzaXN0ZW50QXVkaW9TdG9yYWdlVGFyZ2V0KCk6IFBlcnNpc3RlbnRBdWRpb1N0b3JhZ2VUYXJnZXQgfCBudWxsIHtcclxuICAgIHJldHVybiB0aGlzLl9wZXJzaXN0ZW50QXVkaW9TdG9yYWdlVGFyZ2V0O1xyXG4gIH1cclxuXHJcbiAgc2V0IHBlcnNpc3RlbnRBdWRpb1N0b3JhZ2VUYXJnZXQodmFsdWU6IFBlcnNpc3RlbnRBdWRpb1N0b3JhZ2VUYXJnZXQgfCBudWxsKSB7XHJcbiAgICB0aGlzLl9wZXJzaXN0ZW50QXVkaW9TdG9yYWdlVGFyZ2V0ID0gdmFsdWU7XHJcbiAgfVxyXG5cclxuXHJcbiAgZ2V0IG9wZW5lZCgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl9vcGVuZWQ7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgQlVGRkVSX1NJWkU6IG51bWJlciA9IDgxOTI7XHJcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgREVGQVVMVF9NQVhfTkVUX0FVVE9fTUVNX1NUT1JFX1NBTVBMRVM6bnVtYmVyPTI4ODAwMDAqNTsgLy8gRGVmYXVsdCA1IG1pbnV0ZSBhdCA0OGtIelxyXG4gIHByaXZhdGUgX21heEF1dG9OZXRNZW1TdG9yZVNhbXBsZXM6bnVtYmVyPUF1ZGlvQ2FwdHVyZS5ERUZBVUxUX01BWF9ORVRfQVVUT19NRU1fU1RPUkVfU0FNUExFUztcclxuICBwcml2YXRlIHN0YXRpYyBjYXB0dXJlSW50ZXJjZXB0b3JNb2R1bGVSZWdpc3RlcmVkPWZhbHNlO1xyXG4gIGNvbnRleHQ6IEF1ZGlvQ29udGV4dHxudWxsPW51bGw7XHJcbiAgc3RyZWFtITogTWVkaWFTdHJlYW07XHJcbiAgY2hhbm5lbENvdW50ITogbnVtYmVyO1xyXG4gIHByaXZhdGUgX3JlY1VVSUQ6c3RyaW5nfG51bGw9bnVsbDtcclxuICBtZWRpYVN0cmVhbTogYW55O1xyXG4gIGFnY1N0YXR1czpib29sZWFufG51bGw9bnVsbDtcclxuICBidWZmZXJpbmdOb2RlOiBBdWRpb05vZGV8bnVsbD1udWxsO1xyXG4gIGxpc3RlbmVyITogQXVkaW9DYXB0dXJlTGlzdGVuZXI7XHJcbiAgZGF0YTogQXJyYXk8QXJyYXk8RmxvYXQzMkFycmF5Pj58bnVsbD1udWxsO1xyXG4gIGN1cnJlbnRTYW1wbGVSYXRlITogbnVtYmVyO1xyXG4gIG46IE5hdmlnYXRvcjtcclxuICBhdWRpb091dFN0cmVhbTogU2VxdWVuY2VBdWRpb0Zsb2F0MzJPdXRTdHJlYW0gfCBudWxsPW51bGw7XHJcbiAgcHJpdmF0ZSBkaXNjb25uZWN0U3RyZWFtcyA9IHRydWU7XHJcbiAgcHJpdmF0ZSBfb3BlbmVkPWZhbHNlO1xyXG4gIHByaXZhdGUgY2FwdHVyaW5nID0gZmFsc2U7XHJcblxyXG4gIGZyYW1lc1JlY29yZGVkOiBudW1iZXI9MDtcclxuXHJcbiAgcHJpdmF0ZSBfYXVkaW9TdG9yYWdlVHlwZTpBdWRpb1N0b3JhZ2VUeXBlPUF1ZGlvU3RvcmFnZVR5cGUuTUVNX0VOVElSRTtcclxuICBwcml2YXRlIF9wZXJzaXN0ZW50QXVkaW9TdG9yYWdlVGFyZ2V0OlBlcnNpc3RlbnRBdWRpb1N0b3JhZ2VUYXJnZXR8bnVsbD1udWxsO1xyXG5cclxuICBwcml2YXRlIHBlcnNpc3RlZD10cnVlO1xyXG4gIHByaXZhdGUgcGVyc2lzdEVycm9yOkVycm9yfG51bGw9bnVsbDtcclxuICBwcml2YXRlIGluZGRiQXVkaW9CdWZmZXI6SW5kZXhlZERiQXVkaW9CdWZmZXJ8bnVsbD1udWxsO1xyXG5cclxuICAvL3ByaXZhdGUgY29udGV4dDpBdWRpb0NvbnRleHR8bnVsbD1udWxsO1xyXG5cclxuICBjb25zdHJ1Y3RvcigpIHtcclxuICAgIHRoaXMubiA9IG5hdmlnYXRvcjtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2F1ZGlvQ29udGV4dCgpOkF1ZGlvQ29udGV4dHxudWxse1xyXG4gICAgaWYoIXRoaXMuY29udGV4dCl7XHJcbiAgICAgIHRoaXMuY29udGV4dD1BdWRpb0NvbnRleHRQcm92aWRlci5hdWRpb0NvbnRleHRJbnN0YW5jZSgpO1xyXG4gICAgICBpZih0aGlzLmNvbnRleHQpIHtcclxuICAgICAgICB0aGlzLmNvbnRleHQuYWRkRXZlbnRMaXN0ZW5lcignc3RhdGVjaGFuZ2UnLCAoKSA9PiB7XHJcbiAgICAgICAgICBpZiAodGhpcy5jb250ZXh0ICYmIHRoaXMuY29udGV4dC5zdGF0ZSAhPT0gJ3J1bm5pbmcnKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY2xvc2UoKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRoaXMuY29udGV4dDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaW5pdERhdGEoKSB7XHJcbiAgICBpZighdGhpcy5fcmVjVVVJRCkge1xyXG4gICAgICB0aGlzLl9yZWNVVUlEID0gVVVJRC5nZW5lcmF0ZSgpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5wZXJzaXN0RXJyb3I9bnVsbDtcclxuICAgIC8vY29uc29sZS5kZWJ1ZyhcIkF1ZGlvIGNhcHR1cmUgaW5pdGlhbGl6ZSBzdG9yYWdlIGZvciB0eXBlOiBcIit0aGlzLl9hdWRpb1N0b3JhZ2VUeXBlKTtcclxuICAgIGlmKEF1ZGlvU3RvcmFnZVR5cGUuREJfQ0hVTktFRCA9PT0gdGhpcy5fYXVkaW9TdG9yYWdlVHlwZSAmJiB0aGlzLl9wZXJzaXN0ZW50QXVkaW9TdG9yYWdlVGFyZ2V0ICYmIHRoaXMuX3JlY1VVSUQpIHtcclxuICAgICAgLy9jb25zb2xlLmRlYnVnKFwiQ3JlYXRlIGluZGV4ZWQgZGIgYXVkaW8gYnVmZmVyLlwiKTtcclxuICAgICAgdGhpcy5pbmRkYkF1ZGlvQnVmZmVyID0gbmV3IEluZGV4ZWREYkF1ZGlvQnVmZmVyKHRoaXMuX3BlcnNpc3RlbnRBdWRpb1N0b3JhZ2VUYXJnZXQsIHRoaXMuY2hhbm5lbENvdW50LHRoaXMuY3VycmVudFNhbXBsZVJhdGUsQXVkaW9DYXB0dXJlLkJVRkZFUl9TSVpFLDAsdGhpcy5fcmVjVVVJRClcclxuICAgIH1cclxuICAgIGlmKCEoQXVkaW9TdG9yYWdlVHlwZS5ORVRfQ0hVTktFRCA9PT0gdGhpcy5fYXVkaW9TdG9yYWdlVHlwZSkpIHtcclxuICAgICAgLy8gSW5pdGlhbGl6ZSBhdWRpbyBkYXRhIGFycmF5IGV4Y2VwdCBmb3IgbmV0IGF1ZGlvIGJ1ZmZlciBtb2RlXHJcbiAgICAgIHRoaXMuZGF0YSA9IG5ldyBBcnJheTxBcnJheTxGbG9hdDMyQXJyYXk+PigpO1xyXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuY2hhbm5lbENvdW50OyBpKyspIHtcclxuICAgICAgICB0aGlzLmRhdGEucHVzaChuZXcgQXJyYXk8RmxvYXQzMkFycmF5PigpKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgdGhpcy5mcmFtZXNSZWNvcmRlZCA9IDA7XHJcbiAgfVxyXG5cclxuICBsaXN0RGV2aWNlcygpIHtcclxuICAgIG5hdmlnYXRvci5tZWRpYURldmljZXMuZW51bWVyYXRlRGV2aWNlcygpLnRoZW4oKGw6IE1lZGlhRGV2aWNlSW5mb1tdKSA9PiB0aGlzLnByaW50RGV2aWNlcyhsKSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGR1bW15U2Vzc2lvbigpOlByb21pc2U8TWVkaWFTdHJlYW0+e1xyXG4gICAgLy8gd29ya2Fyb3VuZCB0byByZXF1ZXN0IHBlcm1pc3Npb25zOlxyXG4gICAgLy8gU3RhcnQgYSBkdW1teSBzZXNzaW9uXHJcbiAgICBsZXQgbWVkaWFTdHJDbnN0cnMgPSA8TWVkaWFTdHJlYW1Db25zdHJhaW50cz57YXVkaW86XHJcbiAgICAgICAge2VjaG9DYW5jZWxhdGlvbjogZmFsc2V9XHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIG5hdmlnYXRvci5tZWRpYURldmljZXMuZ2V0VXNlck1lZGlhKG1lZGlhU3RyQ25zdHJzKTtcclxuXHJcbiAgfVxyXG5cclxuXHJcbiAgcHJpdmF0ZSBzdG9wQWxsU2Vzc2lvblRyYWNrcyhtZWRpYVN0cmVhbTpNZWRpYVN0cmVhbSl7XHJcbiAgICAgIGxldCBhdHMgPSBtZWRpYVN0cmVhbS5nZXRUcmFja3MoKTtcclxuICAgICAgZm9yIChsZXQgYXRJZHggPSAwOyBhdElkeCA8IGF0cy5sZW5ndGg7IGF0SWR4KyspIHtcclxuICAgICAgICAvL2NvbnNvbGUuZGVidWcoXCJTdG9wIGR1bW15IHNlc3Npb24gdHJhY2s6ICNcIiArIGF0SWR4KVxyXG4gICAgICAgIGF0c1thdElkeF0uc3RvcCgpO1xyXG4gICAgICB9XHJcbiAgfVxyXG5cclxuICBkZXZpY2VJbmZvcyhjYjogKGRldmljZUluZm9zOiBNZWRpYURldmljZUluZm9bXSB8IG51bGwpID0+IGFueSwgcmV0cnkgPSB0cnVlLGR1bW15U3RyZWFtPzpNZWRpYVN0cmVhbSkge1xyXG5cclxuICAgIG5hdmlnYXRvci5tZWRpYURldmljZXMuZW51bWVyYXRlRGV2aWNlcygpLnRoZW4oKGw6IE1lZGlhRGV2aWNlSW5mb1tdKSA9PiB7XHJcbiAgICAgIGxldCBsYWJlbHNBdmFpbGFibGUgPSBmYWxzZTtcclxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgbGV0IGRpID0gbFtpXTtcclxuICAgICAgICBpZiAoZGkubGFiZWwpIHtcclxuICAgICAgICAgIGxhYmVsc0F2YWlsYWJsZSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGlmICghbGFiZWxzQXZhaWxhYmxlKSB7XHJcbiAgICAgICAgLy9jb25zb2xlLmRlYnVnKFwiTWVkaWEgZGV2aWNlIGVudW1lcmF0aW9uOiBObyBsYWJlbHMuXCIpXHJcbiAgICAgICAgaWYgKHJldHJ5KSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUuaW5mbyhcIlN0YXJ0aW5nIGR1bW15IHNlc3Npb24gdG8gcmVxdWVzdCBhdWRpbyBwZXJtaXNzaW9ucy4uLlwiKVxyXG5cclxuICAgICAgICAgICAgdGhpcy5kdW1teVNlc3Npb24oKS50aGVuKChzOiBNZWRpYVN0cmVhbSkgPT4ge1xyXG4gICAgICAgICAgICAvLyBhbmQgc3RvcCBpdCBpbW1lZGlhdGVseVxyXG5cclxuICAgICAgICAgICAgaWYocykge1xyXG4gICAgICAgICAgICAgIC8vY29uc29sZS5kZWJ1ZyhcIkdvdCBkdW1teSBzZXNzaW9uIHN0cmVhbTogXCIgKyBzICsgXCIgLlwiKVxyXG4gICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAvL2NvbnNvbGUuZGVidWcoXCJObyBkdW1teSBzdHJlYW1cIilcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvLyByZXRyeSAob25seSBvbmNlKVxyXG4gICAgICAgICAgICB0aGlzLmRldmljZUluZm9zKGNiLCBmYWxzZSxzKTtcclxuICAgICAgICAgIH0scmVhc29uID0+IHtcclxuICAgICAgICAgICAgLy9jb25zb2xlLmRlYnVnKFwiRHVtbXkgc2Vzc2lvbiByZWplY3RlZC5cIilcclxuICAgICAgICAgICAgLy8gVE9ETyBlcnJvciBjYWxsYmFja1xyXG4gICAgICAgICAgICBjYihudWxsKTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBjYihudWxsKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgLy8gc3VjY2Vzc1xyXG4gICAgICAgIGNiKGwpO1xyXG4gICAgICB9XHJcbiAgICAgIGlmKGR1bW15U3RyZWFtKXtcclxuICAgICAgICB0aGlzLnN0b3BBbGxTZXNzaW9uVHJhY2tzKGR1bW15U3RyZWFtKTtcclxuICAgICAgfVxyXG4gICAgfSwocmVhc29uKT0+IHtcclxuICAgICAgLy9yZWplY3RlZFxyXG4gICAgICAvL2NvbnNvbGUuZGVidWcoXCJNZWRpYSBkZXZpY2UgZW51bWVyYXRpb24gcmVqZWN0ZWQuXCIpXHJcbiAgICAgIGlmIChyZXRyeSkge1xyXG4gICAgICAgIC8vY29uc29sZS5kZWJ1ZyhcIlN0YXJ0aW5nIGR1bW15IHNlc3Npb24gdG8gcmVxdWVzdCBhdWRpbyBwZXJtaXNzaW9ucy4uLlwiKVxyXG4gICAgICAgIHRoaXMuZHVtbXlTZXNzaW9uKCkudGhlbigoczogTWVkaWFTdHJlYW0pID0+IHtcclxuICAgICAgICAgIC8vIGFuZCBzdG9wIGl0IGltbWVkaWF0ZWx5XHJcbiAgICAgICAgICAvL2NvbnNvbGUuZGVidWcoXCJEdW1teSBzZXNzaW9uLlwiKVxyXG4gICAgICAgICAgaWYocykge1xyXG4gICAgICAgICAgICAvL2NvbnNvbGUuZGVidWcoXCJHb3QgZHVtbXkgc2Vzc2lvbiBzdHJlYW06IFwiICsgcyArIFwiIC5cIilcclxuICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAvL2NvbnNvbGUuZGVidWcoXCJObyBkdW1teSBzdHJlYW1cIilcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIC8vIHJldHJ5IChvbmx5IG9uY2UpXHJcbiAgICAgICAgICB0aGlzLmRldmljZUluZm9zKGNiLCBmYWxzZSxzKTtcclxuICAgICAgICB9LCByZWFzb24gPT4ge1xyXG4gICAgICAgICAgLy9jb25zb2xlLmRlYnVnKFwiRHVtbXkgc2Vzc2lvbiByZWplY3RlZC5cIilcclxuICAgICAgICAgIC8vIFRPRE8gZXJyb3IgY2FsbGJhY2tcclxuICAgICAgICAgIGNiKG51bGwpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGNiKG51bGwpO1xyXG4gICAgICB9XHJcbiAgICAgIGlmKGR1bW15U3RyZWFtKXtcclxuICAgICAgICB0aGlzLnN0b3BBbGxTZXNzaW9uVHJhY2tzKGR1bW15U3RyZWFtKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG5cclxuXHJcbiAgfVxyXG5cclxuXHJcbiAgcHJpbnREZXZpY2VzKGw6IE1lZGlhRGV2aWNlSW5mb1tdKTogdm9pZCB7XHJcbiAgICAvL2xldCBzZWxEZXZpY2VJZCA9ICdfX19kdW1teV9fXyc7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGwubGVuZ3RoOyBpKyspIHtcclxuICAgICAgbGV0IGRpID0gbFtpXTtcclxuICAgICAgY29uc29sZS5sb2coXCJBdWRpbyBkZXZpY2U6IElkOiBcIiArIGRpLmRldmljZUlkICsgXCIgZ3JvdXBJZDogXCIgKyBkaS5ncm91cElkICsgXCIgbGFiZWw6IFwiICsgZGkubGFiZWwgKyBcIiBraW5kOiBcIiArIGRpLmtpbmQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYWRkQ2FwdHVyZUludGVyY2VwdG9yKCkge1xyXG4gICAgaWYgKHRoaXMuY29udGV4dCkge1xyXG5cclxuICAgIGNvbnN0IGF3biA9IG5ldyBBdWRpb1dvcmtsZXROb2RlKHRoaXMuY29udGV4dCwgJ2NhcHR1cmUtaW50ZXJjZXB0b3InKTtcclxuICAgIGF3bi5vbnByb2Nlc3NvcmVycm9yID0gKGV2OiBFdmVudCkgPT4ge1xyXG4gICAgICBsZXQgbXNnID0gJ1Vua253b24gZXJyb3InO1xyXG4gICAgICBpZiAoZXYgaW5zdGFuY2VvZiBFcnJvckV2ZW50KSB7XHJcbiAgICAgICAgbXNnID0gZXYubWVzc2FnZTtcclxuICAgICAgfVxyXG4gICAgICBjb25zb2xlLmVycm9yKFwiQ2FwdHVyZSBhdWRpbyB3b3JrbGV0IGVycm9yOiBcIiArIG1zZyk7XHJcbiAgICAgIGlmICh0aGlzLmxpc3RlbmVyKSB7XHJcbiAgICAgICAgdGhpcy5saXN0ZW5lci5lcnJvcihtc2cpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBsZXQgYXduUHQgPSBhd24ucG9ydDtcclxuICAgIGlmIChhd25QdCkge1xyXG4gICAgICBhd25QdC5vbm1lc3NhZ2UgPSAoZXY6IE1lc3NhZ2VFdmVudCkgPT4ge1xyXG4gICAgICAgIGlmICh0aGlzLmNhcHR1cmluZykge1xyXG4gICAgICAgICAgbGV0IGR0ID0gZXYuZGF0YTtcclxuICAgICAgICAgIGxldCBjaHMgPSBkdC5jaHM7XHJcbiAgICAgICAgICBsZXQgYWRhTGVuID0gZHQuZGF0YS5sZW5ndGg7XHJcbiAgICAgICAgICBpZiAoREVCVUdfVFJBQ0VfTEVWRUwgPiA4KSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUuZGVidWcoJ1JlY2VpdmVkIGRhdGEgZnJvbSB3b3JrbGV0OiAnICsgY2hzICsgJyAnICsgZHQubGVuICsgJyBEYXRhIGNoczogJyArIGFkYUxlbik7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBsZXQgY2h1bmsgPSBuZXcgQXJyYXk8RmxvYXQzMkFycmF5PihjaHMpO1xyXG4gICAgICAgICAgY29uc3Qgc2FtcGxlcyA9IHRoaXMuZnJhbWVzUmVjb3JkZWQgKiBjaHM7XHJcbiAgICAgICAgICBpZiAoKEF1ZGlvU3RvcmFnZVR5cGUuTUVNX0VOVElSRV9BVVRPX05FVF9DSFVOS0VEID09PSB0aGlzLmF1ZGlvU3RvcmFnZVR5cGUgfHwgQXVkaW9TdG9yYWdlVHlwZS5NRU1fQ0hVTktFRF9BVVRPX05FVF9DSFVOS0VEID09PSB0aGlzLmF1ZGlvU3RvcmFnZVR5cGUpICYmIHRoaXMuZGF0YSAmJiBzYW1wbGVzID4gdGhpcy5fbWF4QXV0b05ldE1lbVN0b3JlU2FtcGxlcykge1xyXG4gICAgICAgICAgICB0aGlzLmRhdGEgPSBudWxsO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIC8vY29uc29sZS5kZWJ1ZyhcIkRhdGEgaW5pdGlhbGl6ZWQ6IFwiKyh0aGlzLmRhdGEhPW51bGwpKTtcclxuICAgICAgICAgIGZvciAobGV0IGNoID0gMDsgY2ggPCBjaHM7IGNoKyspIHtcclxuICAgICAgICAgICAgLy9jb25zb2xlLmRlYnVnKFwiRGF0YSBjaCBpbml0aWFsaXplZDogXCIrKHRoaXMuZGF0YSAhPW51bGwgJiYgdGhpcy5kYXRhW2NoXSAhPW51bGwpKTtcclxuICAgICAgICAgICAgaWYgKGNoIDwgdGhpcy5jaGFubmVsQ291bnQpIHtcclxuICAgICAgICAgICAgICBpZiAoZHQuZGF0YVtjaF0pIHtcclxuICAgICAgICAgICAgICAgIGxldCBmYSA9IG5ldyBGbG9hdDMyQXJyYXkoZHQuZGF0YVtjaF0pO1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuZGF0YSAmJiB0aGlzLmRhdGFbY2hdKSB7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuZGF0YVtjaF0ucHVzaChmYSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBjaHVua1tjaF0gPSBmYTtcclxuICAgICAgICAgICAgICAgIC8vIFVzZSBzYW1wbGVzIG9mIGNoYW5uZWwgMCB0byBjb3VudCBmcmFtZXMgKHNhbXBsZXMpXHJcbiAgICAgICAgICAgICAgICBpZiAoY2ggPT0gMCkge1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLmZyYW1lc1JlY29yZGVkICs9IGZhLmxlbmd0aDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmICh0aGlzLmF1ZGlvT3V0U3RyZWFtKSB7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5hdWRpb091dFN0cmVhbS53cml0ZShjaHVuayk7XHJcbiAgICAgICAgICAgICAgLy8gLy8gUmFuZG9tIHRlc3QgZXJyb3I6XHJcbiAgICAgICAgICAgICAgLy8gaWYoTWF0aC5yYW5kb20oKT4wLjk4KSB7XHJcbiAgICAgICAgICAgICAgLy8gICB0aHJvdyBuZXcgRXJyb3IoJ1Rlc3QnKTtcclxuICAgICAgICAgICAgICAvLyB9XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xyXG4gICAgICAgICAgICAgIGlmIChlcnIgaW5zdGFuY2VvZiBFcnJvcikge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5wZXJzaXN0RXJyb3IgPSBlcnI7XHJcbiAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMucGVyc2lzdEVycm9yID0gbmV3IEVycm9yKCdFcnJvciBoYW5kbGluZyByZWNvcmRlZCBhdWRpbyBkYXRhJyk7XHJcbiAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFwiQ2FwdHVyZSBlcnJvcjogXCIgKyBlcnIpO1xyXG4gICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnN0b3AoKTtcclxuICAgICAgICAgICAgICB9IGNhdGNoIChlcnIyKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFwiQ2FwdHVyZSBuZXh0IGVycm9yIChpZ25vcmVkKTogXCIgKyBlcnIyKTtcclxuICAgICAgICAgICAgICB9IGZpbmFsbHkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMubGlzdGVuZXIpIHtcclxuICAgICAgICAgICAgICAgICAgbGV0IGVyckV4cGwgPSAnJztcclxuICAgICAgICAgICAgICAgICAgaWYgKGVyciBpbnN0YW5jZW9mIERPTUV4Y2VwdGlvbikge1xyXG4gICAgICAgICAgICAgICAgICAgIGVyckV4cGwgPSAnOiAnICsgZXJyLm5hbWUgKyAnOiAnICsgZXJyLm1lc3NhZ2U7XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgdGhpcy5saXN0ZW5lci5lcnJvcihcIkNvdWxkIG5vdCBoYW5kbGUgcmVjb3JkZWQgYXVkaW8gZGF0YVwiICsgZXJyRXhwbCwgXCJQbGVhc2UgdHJ5IHRvIHJlY29yZCBhZ2Fpbi5cIik7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLmNsb3NlKCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAoQXVkaW9TdG9yYWdlVHlwZS5EQl9DSFVOS0VEID09PSB0aGlzLl9hdWRpb1N0b3JhZ2VUeXBlICYmIHRoaXMuX3BlcnNpc3RlbnRBdWRpb1N0b3JhZ2VUYXJnZXQpIHtcclxuICAgICAgICAgICAgdGhpcy5zdG9yZSgpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfTtcclxuICAgIH1cclxuICAgIC8vIFRyaWVkIHRvIGZpeCB0aGF0IFNhZmFyaSBkb2VzIG5vdCByZWNvcmQgdGhlIHNlY29uZCBjaGFubmVsXHJcbiAgICAvLyBEb2VzIG5vdCBoZWxwXHJcbiAgICAvL2F3bi5jaGFubmVsQ291bnQ9dGhpcy5jaGFubmVsQ291bnQ7XHJcbiAgICAvL2F3bi5jaGFubmVsQ291bnRNb2RlPSdleHBsaWNpdCc7XHJcbiAgICAvL2NvbnNvbGUuZGVidWcoJ0NoYW5uZWwgY291bnQgZXhwbGljaXRseSBzZXQgdG8gJyt0aGlzLmNoYW5uZWxDb3VudCk7XHJcblxyXG4gICAgdGhpcy5idWZmZXJpbmdOb2RlID0gYXduO1xyXG4gICAgLy90aGlzLmJ1ZmZlcmluZ05vZGUuY2hhbm5lbENvdW50PXRoaXMuY2hhbm5lbENvdW50O1xyXG4gICAgdGhpcy5fb3BlbmVkID0gdHJ1ZTtcclxuICAgIGlmICh0aGlzLmxpc3RlbmVyKSB7XHJcbiAgICAgIHRoaXMubGlzdGVuZXIub3BlbmVkKCk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIH1cclxuXHJcbiAgb3BlbihjaGFubmVsQ291bnQ6IG51bWJlciwgc2VsRGV2aWNlSWQ/OiBDb25zdHJhaW5ET01TdHJpbmd8dW5kZWZpbmVkLGF1dG9HYWluQ29udHJvbENvbmZpZ3M/OkFycmF5PEF1dG9HYWluQ29udHJvbENvbmZpZz58bnVsbHx1bmRlZmluZWQsYWxsb3dFY2hvQ2FuY2VsbGF0aW9uPzpib29sZWFuKXtcclxuICAgIC8vY29uc29sZS5kZWJ1ZyhcIkNhcHR1cmUgb3BlbjogY3R4IHN0YXRlOiBcIit0aGlzLmNvbnRleHQuc3RhdGUpO1xyXG4gICAgdGhpcy5jb250ZXh0PXRoaXMuX2F1ZGlvQ29udGV4dCgpO1xyXG4gICAgaWYoIXRoaXMuY29udGV4dCl7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkNvdWxkIG5vdCBnZXQgYXVkaW8gY29udGV4dCFcIik7XHJcbiAgICB9XHJcbiAgICBpZih0aGlzLmNvbnRleHQuc3RhdGU9PT0nc3VzcGVuZGVkJyl7XHJcbiAgICAgIC8vY29uc29sZS5kZWJ1ZyhcIkNhcHR1cmUgb3BlbjogUmVzdW1lIGNvbnRleHRcIik7XHJcbiAgICAgIHRoaXMuY29udGV4dC5yZXN1bWUoKS50aGVuKCgpPT57XHJcbiAgICAgICAgLy9jb25zb2xlLmRlYnVnKFwiQ2FwdHVyZSBvcGVuIChjdHggcmVzdW1lZCk6IGN0eCBzdGF0ZTogXCIrdGhpcy5jb250ZXh0LnN0YXRlKTtcclxuICAgICAgICB0aGlzLl9vcGVuKGNoYW5uZWxDb3VudCwgc2VsRGV2aWNlSWQsIGF1dG9HYWluQ29udHJvbENvbmZpZ3MsYWxsb3dFY2hvQ2FuY2VsbGF0aW9uKTtcclxuICAgICAgfSkuY2F0Y2goKGVycik9PntcclxuICAgICAgICBjb25zb2xlLmVycm9yKGVyci5tZXNzYWdlKTtcclxuICAgICAgICB0aHJvdyBlcnI7XHJcbiAgICAgIH0pXHJcbiAgICB9ZWxzZSBpZih0aGlzLmNvbnRleHQuc3RhdGU9PT0nY2xvc2VkJykge1xyXG4gICAgICAgIGNvbnN0IG1zZz0nRXJyb3Igb24gc3RhcnQgY2FwdHVyZTogVGhlIGF1ZGlvIGNvbnRleHQgaXMgYWxyZWFkeSBjbG9zZWQuJztcclxuICAgICAgICBjb25zb2xlLmVycm9yKG1zZyk7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKG1zZyk7XHJcbiAgICB9ZWxzZSB7XHJcbiAgICAgIHRoaXMuX29wZW4oY2hhbm5lbENvdW50LCBzZWxEZXZpY2VJZCwgYXV0b0dhaW5Db250cm9sQ29uZmlncyxhbGxvd0VjaG9DYW5jZWxsYXRpb24pO1xyXG4gICAgfVxyXG5cclxuICB9XHJcblxyXG4gIF9vcGVuKGNoYW5uZWxDb3VudDogbnVtYmVyLCBzZWxEZXZpY2VJZD86IENvbnN0cmFpbkRPTVN0cmluZ3x1bmRlZmluZWQsYXV0b0dhaW5Db250cm9sQ29uZmlncz86QXJyYXk8QXV0b0dhaW5Db250cm9sQ29uZmlnPnxudWxsfHVuZGVmaW5lZCxhbGxvd0VjaG9DYW5jZWxsYXRpb24/OmJvb2xlYW4pIHtcclxuICAgIHRoaXMuY2hhbm5lbENvdW50ID0gY2hhbm5lbENvdW50O1xyXG4gICAgdGhpcy5mcmFtZXNSZWNvcmRlZCA9IDA7XHJcblxyXG4gICAgdGhpcy5jb250ZXh0PXRoaXMuX2F1ZGlvQ29udGV4dCgpO1xyXG5cclxuICAgIGlmKCF0aGlzLmNvbnRleHQpe1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDb3VsZCBub3QgZ2V0IGF1ZGlvIGNvbnRleHQhXCIpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vdmFyIG1zYyA9IG5ldyBBdWRpb1N0cmVhbUNvbnN0cigpO1xyXG4gICAgLy8gdmFyIG1zYz17fTtcclxuICAgIC8vbXNjLnZpZGVvID0gZmFsc2U7XHJcbiAgICAvL21zYy5hdWRpbyA9IHRydWU7XHJcblxyXG4gICAgLy8gQ2hyb21lIGFuZCBGaXJlZm94IHN0ZXJlbyBjaGFubmVscyBhcmUgaWRlbnRpY2FsICEhXHJcbiAgICAvLyBBbmQgZXZlbiB3b3JzZTogVGhlIGRhdGEgY29taW5nIGZyb20gdGhlIHNvdXJjZSBpcyBhbHJlYWR5IHByZXByb2Nlc3NlZCBvbiBGRiBhbmQgQ2hyb21lLiBJdCBjb250YWlucyBEU1AgYXJ0aWZhY3RzISFcclxuXHJcbiAgICAvLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvY2hyb21pdW0vaXNzdWVzL2RldGFpbD9pZD0zODc3MzdcclxuICAgIC8vIFRoZSB3b3JrYXJvdW5kIHRvIHNldCB0aGVzZSBjb25zdHJhaW50cyBkb2VzIF9OT1RfIGhlbHA6XHJcbiAgICAvL3ZhciBtc2M9e2F1ZGlvOiB7ZWNob0NhbmNlbGxhdGlvbjogZmFsc2UsY2hhbm5lbENvdW50OiAyLCBnb29nQXVkaW9NaXJyb3Jpbmc6IGZhbHNlfSx2aWRlbzogZmFsc2V9O1xyXG5cclxuICAgIC8vIFNhZmFyaSBhdCBsZWFzdCB2ZXJzaW9uIDExOiBTdXBwb3J0IGZvciBtZWRpYSBzdHJlYW1zXHJcbiAgICAvLyBUT0RPIHRlc3QgaWYgaW5wdXQgaXMgdW5wcm9jZXNzZWRcclxuXHJcbiAgICBsZXQgbXNjOk1lZGlhU3RyZWFtQ29uc3RyYWludHM7XHJcbiAgICBjb25zb2xlLmluZm8oJ1VzZXIgYWdlbnQ6ICcrbmF2aWdhdG9yLnVzZXJBZ2VudCk7XHJcblxyXG5cclxuICAgICAgbGV0IHVhPVVzZXJBZ2VudEJ1aWxkZXIudXNlckFnZW50KCk7XHJcblxyXG4gICAgICAvLyB1YS5jb21wb25lbnRzLmZvckVhY2goKGMpPT57XHJcbiAgICAgIC8vICAgY29uc29sZS5pbmZvKFwiVUFfQ29tcDogXCIrYy50b1N0cmluZygpKTtcclxuICAgICAgLy8gfSlcclxuXHJcbiAgICAgbGV0IGFnY0NmZzpBdXRvR2FpbkNvbnRyb2xDb25maWd8bnVsbD1udWxsO1xyXG5cclxuICAgIGxldCBhdXRvR2FpbkNvbnRyb2w9ZmFsc2U7XHJcbiAgICBsZXQgY2hyb21lRWNob0NhbmNlbGxhdGlvbj1mYWxzZTtcclxuICAgIGlmKGF1dG9HYWluQ29udHJvbENvbmZpZ3Mpe1xyXG4gICAgICBmb3IobGV0IGFnY2Mgb2YgYXV0b0dhaW5Db250cm9sQ29uZmlncyl7XHJcbiAgICAgICAgaWYoYWdjYy5wbGF0Zm9ybT09PUNmZ1BsYXRmb3JtLkFuZHJvaWQgJiYgdWEuZGV0ZWN0ZWRQbGF0Zm9ybT09PVBsYXRmb3JtLkFuZHJvaWQpe1xyXG4gICAgICAgICAgICBhZ2NDZmc9YWdjYztcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmKGFnY2MucGxhdGZvcm09PT1DZmdQbGF0Zm9ybS5XaW5kb3dzICYmIHVhLmRldGVjdGVkUGxhdGZvcm09PT1QbGF0Zm9ybS5XaW5kb3dzKXtcclxuICAgICAgICAgIGFnY0NmZz1hZ2NjO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGlmKGFnY0NmZyl7XHJcbiAgICAgICAgLy8gVE9ETyB1c2UgRVhBQ1QvSURFQUwgY29uc3RyYWludFxyXG4gICAgICAgIGF1dG9HYWluQ29udHJvbD1hZ2NDZmcudmFsdWU7XHJcbiAgICAgICAgaWYoQ0hST01FX0FDVElWQVRFX0VDSE9fQ0FOQ0VMTEFUSU9OX1dJVEhfQUdDKXtcclxuICAgICAgICAgIGNocm9tZUVjaG9DYW5jZWxsYXRpb249YWdjQ2ZnLnZhbHVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBUT0RPIHF1ZXJ5IHJlYWwgQUdDIHN0YXR1c1xyXG4gICAgICAgIHRoaXMuYWdjU3RhdHVzPWFnY0NmZy52YWx1ZTtcclxuICAgICAgfWVsc2V7XHJcbiAgICAgICAgdGhpcy5hZ2NTdGF0dXM9ZmFsc2U7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyBkZWZhdWx0XHJcbiAgICBtc2MgPSB7XHJcbiAgICAgIGF1ZGlvOiB7XHJcbiAgICAgICAgZGV2aWNlSWQ6IHNlbERldmljZUlkLFxyXG4gICAgICAgIGVjaG9DYW5jZWxsYXRpb246IGZhbHNlLFxyXG4gICAgICAgIGNoYW5uZWxDb3VudDogY2hhbm5lbENvdW50LFxyXG4gICAgICAgIGF1dG9HYWluQ29udHJvbDogYXV0b0dhaW5Db250cm9sXHJcbiAgICAgIH0sXHJcbiAgICAgIHZpZGVvOiBmYWxzZVxyXG4gICAgfTtcclxuXHJcbiAgICBpZiAodWEuZGV0ZWN0ZWRCcm93c2VyPT09QnJvd3Nlci5FZGdlKSB7XHJcblxyXG4gICAgICAvLyBNaWNyb3NvZnQgRWRnZSBzZW5kcyB1bm1vZGlmaWVkIGF1ZGlvXHJcbiAgICAgIC8vIFRoZSBjb25zdHJhaW50IGNhbiBmb2xsb3cgdGhlIHNwZWNpZmljYXRpb25cclxuICAgICAgY29uc29sZS5pbmZvKFwiU2V0dGluZyBtZWRpYSB0cmFjayBjb25zdHJhaW50cyBmb3IgTWljcm9zb2Z0IEVkZ2UuXCIpO1xyXG4gICAgICBtc2MgPSB7XHJcbiAgICAgICAgYXVkaW86IHtcclxuICAgICAgICAgIGRldmljZUlkOiBzZWxEZXZpY2VJZCxcclxuICAgICAgICAgIGVjaG9DYW5jZWxsYXRpb246IGZhbHNlLFxyXG4gICAgICAgICAgY2hhbm5lbENvdW50OiBjaGFubmVsQ291bnQsXHJcbiAgICAgICAgICBhdXRvR2FpbkNvbnRyb2w6IGF1dG9HYWluQ29udHJvbFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgdmlkZW86IGZhbHNlXHJcbiAgICAgIH07XHJcbiAgICB9IGVsc2UgaWYgKHVhLmRldGVjdGVkQnJvd3Nlcj09PUJyb3dzZXIuQ2hyb21lKSB7XHJcbiAgICAgIC8vIEdvb2dsZSBDaHJvbWU6IHdlIG5lZWQgdG8gc3dpdGNoIG9mIGVhY2ggb2YgdGhlIHByZXByb2Nlc3NpbmcgdW5pdHMgaW5jbHVkaW5nIHRoZVxyXG4gICAgICBjb25zb2xlLmluZm8oXCJTZXR0aW5nIG1lZGlhIHRyYWNrIGNvbnN0cmFpbnRzIGZvciBHb29nbGUgQ2hyb21lLlwiKTtcclxuXHJcbiAgICAgIC8vIENocm9tZSA2MCAtPiA2MSBjaGFuZ2VkXHJcbiAgICAgIC8vIGl0IHdvcmtzIG5vdyB3aXRob3V0IG1hbmRhdG9yeS9vcHRpb25hbCBzdWItb2JqZWN0c1xyXG5cclxuXHJcbiAgICAgIC8vIFJlcXVpcmVzIGF0IGxlYXN0IENocm9tZSA2MVxyXG4gICAgICBtc2MgPSB7XHJcbiAgICAgICAgYXVkaW86IHtcclxuICAgICAgICAgIGRldmljZUlkOiBzZWxEZXZpY2VJZCxcclxuICAgICAgICAgIGNoYW5uZWxDb3VudDogY2hhbm5lbENvdW50LFxyXG4gICAgICAgICAgZWNob0NhbmNlbGxhdGlvbjoge2V4YWN0OmNocm9tZUVjaG9DYW5jZWxsYXRpb259LFxyXG4gICAgICAgICAgYXV0b0dhaW5Db250cm9sOiB7ZXhhY3Q6YXV0b0dhaW5Db250cm9sfSxcclxuICAgICAgICAgIHNhbXBsZVNpemU6e21pbjogMTZ9LFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgdmlkZW86IGZhbHNlLFxyXG4gICAgICB9XHJcblxyXG4gICAgfSBlbHNlIGlmICh1YS5kZXRlY3RlZEJyb3dzZXI9PT1Ccm93c2VyLkZpcmVmb3gpIHtcclxuICAgICAgY29uc29sZS5pbmZvKFwiU2V0dGluZyBtZWRpYSB0cmFjayBjb25zdHJhaW50cyBmb3IgTW96aWxsYSBGaXJlZm94LlwiKTtcclxuICAgICAgLy8gRmlyZWZveFxyXG4gICAgICBtc2MgPSB7XHJcbiAgICAgICAgYXVkaW86IHtcclxuICAgICAgICAgICAgZGV2aWNlSWQ6IHNlbERldmljZUlkLFxyXG4gICAgICAgICAgICBjaGFubmVsQ291bnQ6IGNoYW5uZWxDb3VudCxcclxuICAgICAgICAgIGVjaG9DYW5jZWxsYXRpb246IGZhbHNlLFxyXG4gICAgICAgICAgICBhdXRvR2FpbkNvbnRyb2w6IGF1dG9HYWluQ29udHJvbCxcclxuICAgICAgICAgIG5vaXNlU3VwcHJlc3Npb246IGZhbHNlXHJcbiAgICAgICAgfSxcclxuICAgICAgICB2aWRlbzogZmFsc2UsXHJcbiAgICAgIH1cclxuXHJcbiAgICB9IGVsc2UgaWYgKHVhLmRldGVjdGVkQnJvd3Nlcj09PUJyb3dzZXIuU2FmYXJpKSB7XHJcbiAgICAgIGNvbnNvbGUuaW5mbyhcIlNldHRpbmcgbWVkaWEgdHJhY2sgY29uc3RyYWludHMgZm9yIFNhZmFyaSBicm93c2VyLlwiKVxyXG4gICAgICAvL2NvbnNvbGUuaW5mbyhcIkFwcGx5IHdvcmthcm91bmQgZm9yIFNhZmFyaTogQXZvaWQgZGlzY29ubmVjdCBvZiBzdHJlYW1zLlwiKTtcclxuXHJcbiAgICAgIHRoaXMuZGlzY29ubmVjdFN0cmVhbXMgPSB0cnVlO1xyXG5cclxuICAgICAgbXNjID0ge1xyXG4gICAgICAgIGF1ZGlvOiB7XHJcbiAgICAgICAgICBkZXZpY2VJZDogc2VsRGV2aWNlSWQsXHJcbiAgICAgICAgICBjaGFubmVsQ291bnQ6IGNoYW5uZWxDb3VudCxcclxuICAgICAgICAgIGVjaG9DYW5jZWxsYXRpb246IGFsbG93RWNob0NhbmNlbGxhdGlvbj91bmRlZmluZWQ6ZmFsc2VcclxuICAgICAgICB9LFxyXG4gICAgICAgIHZpZGVvOiBmYWxzZSxcclxuICAgICAgfVxyXG5cclxuICAgIH0gZWxzZSB7XHJcblxyXG4gICAgICAvLyBUT0RPIGRlZmF1bHQgY29uc3RyYWludHMgb3IgZXJyb3IgQnJvd3NlciBub3Qgc3VwcG9ydGVkXHJcbiAgICB9XHJcblxyXG5cclxuXHJcbiAgICBjb25zb2xlLmRlYnVnKFwiQXVkaW8gY2FwdHVyZSwgQUdDOiBcIit0aGlzLmFnY1N0YXR1cylcclxuXHJcbiAgICBsZXQgdW1wID0gbmF2aWdhdG9yLm1lZGlhRGV2aWNlcy5nZXRVc2VyTWVkaWEobXNjKTtcclxuICAgIHVtcC50aGVuKChzKSA9PiB7XHJcblxyXG4gICAgICBpZiAodGhpcy5jb250ZXh0KSB7XHJcbiAgICAgIHRoaXMuc3RyZWFtID0gcztcclxuXHJcbiAgICAgIGxldCBhVHJhY2tzID0gcy5nZXRBdWRpb1RyYWNrcygpO1xyXG5cclxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhVHJhY2tzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgbGV0IGFUcmFjayA9IGFUcmFja3NbaV07XHJcblxyXG4gICAgICAgIGNvbnNvbGUuaW5mbyhcIlRyYWNrIGF1ZGlvIGluZm86IGlkOiBcIiArIGFUcmFjay5pZCArIFwiIGtpbmQ6IFwiICsgYVRyYWNrLmtpbmQgKyBcIiBsYWJlbDogXFxcIlwiICsgYVRyYWNrLmxhYmVsICsgXCJcXFwiXCIpO1xyXG4gICAgICAgIGxldCBtdHJTdHMgPSBhVHJhY2suZ2V0U2V0dGluZ3MoKTtcclxuXHJcbiAgICAgICAgLy8gVHlwZXNjcmlwdCBsaWIuZG9tLnRzIE1lZGlhVHJhY2tTZXR0aW5ncy5jaGFubmVsQ291bnQgaXMgbWlzc2luZ1xyXG4gICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9tZG4vYnJvd3Nlci1jb21wYXQtZGF0YS9ibG9iLzU0OTNkOGY5MzdlMDViMmRkYmQ0MWI5OWY1YmRmYWQ0YTFmMmVkODUvYXBpL01lZGlhVHJhY2tTZXR0aW5ncy5qc29uXHJcbiAgICAgICAgLy9AdHMtaWdub3JlXHJcbiAgICAgICAgY29uc29sZS5pbmZvKFwiVHJhY2sgYXVkaW8gc2V0dGluZ3M6IENoIGNudDogXCIgKyBtdHJTdHMuY2hhbm5lbENvdW50ICsgXCIsIEFHQzogXCIgKyBtdHJTdHMuYXV0b0dhaW5Db250cm9sICsgXCIsIEVjaG8gY2FuY2VsbC46IFwiICsgbXRyU3RzLmVjaG9DYW5jZWxsYXRpb24pO1xyXG4gICAgICAgIGlmIChtdHJTdHMuYXV0b0dhaW5Db250cm9sKSB7XHJcbiAgICAgICAgICB0aGlzLmFnY1N0YXR1cyA9IG10clN0cy5hdXRvR2FpbkNvbnRyb2w7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zb2xlLmRlYnVnKFwiRWNobyBjYW5jZWxsYXRpb246IFwiK210clN0cy5lY2hvQ2FuY2VsbGF0aW9uKTtcclxuXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGxldCB2VHJhY2tzID0gcy5nZXRWaWRlb1RyYWNrcygpO1xyXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHZUcmFja3MubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBsZXQgdlRyYWNrID0gdlRyYWNrc1tpXTtcclxuICAgICAgICBjb25zb2xlLmluZm8oXCJUcmFjayB2aWRlbyBpbmZvOiBpZDogXCIgKyB2VHJhY2suaWQgKyBcIiBraW5kOiBcIiArIHZUcmFjay5raW5kICsgXCIgbGFiZWw6IFwiICsgdlRyYWNrLmxhYmVsKTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLm1lZGlhU3RyZWFtID0gdGhpcy5jb250ZXh0LmNyZWF0ZU1lZGlhU3RyZWFtU291cmNlKHMpO1xyXG4gICAgICAvLyBzdHJlYW0gY2hhbm5lbCBjb3VudCAoIGlzIGFsd2F5cyAyICEpXHJcbiAgICAgIGxldCBzdHJlYW1DaGFubmVsQ291bnQ6IG51bWJlciA9IHRoaXMubWVkaWFTdHJlYW0uY2hhbm5lbENvdW50O1xyXG4gICAgICBjb25zb2xlLmluZm8oXCJTdHJlYW0gY2hhbm5lbCBjb3VudDogXCIgKyBzdHJlYW1DaGFubmVsQ291bnQpO1xyXG4gICAgICAvLyBpcyBub3Qgc2V0ISFcclxuICAgICAgLy90aGlzLmN1cnJlbnRTYW1wbGVSYXRlID0gdGhpcy5tZWRpYVN0cmVhbS5zYW1wbGVSYXRlO1xyXG4gICAgICB0aGlzLmN1cnJlbnRTYW1wbGVSYXRlID0gdGhpcy5jb250ZXh0LnNhbXBsZVJhdGU7XHJcbiAgICAgIGNvbnNvbGUuaW5mbyhcIlNvdXJjZSBhdWRpbyBub2RlOiBjaGFubmVsczogXCIgKyBzdHJlYW1DaGFubmVsQ291bnQgKyBcIiBzYW1wbGVyYXRlOiBcIiArIHRoaXMuY3VycmVudFNhbXBsZVJhdGUpO1xyXG4gICAgICBpZiAodGhpcy5hdWRpb091dFN0cmVhbSkge1xyXG4gICAgICAgIHRoaXMuYXVkaW9PdXRTdHJlYW0uc2V0Rm9ybWF0KHRoaXMuY2hhbm5lbENvdW50LCB0aGlzLmN1cnJlbnRTYW1wbGVSYXRlKTtcclxuICAgICAgfVxyXG4gICAgICAvLyBXM0MgIC0+IG5ldyBuYW1lIGlzIGNyZWF0ZVNjcmlwdFByb2Nlc3NvclxyXG4gICAgICAvL1xyXG4gICAgICAvLyBBZ2FpbiBkZXByZWNhdGVkLCBidXQgQXVkaW9Xb3JrZXIgbm90IHlldCBpbXBsZW1lbnRlZCBpbiBzdGFibGUgcmVsZWFzZXMgKEp1bmUgMjAxNilcclxuICAgICAgLy8gQXVkaW9Xb3JrZXIgaXMgbm93IEF1ZGlvV29ya2xldFByb2Nlc3NvciAuLi4gKE1heSAyMDE3KVxyXG5cclxuICAgICAgLy8gVXBkYXRlIDEyLTIwMjA6XHJcbiAgICAgIC8vIFRoZSBTY3JpcHRQcm9jZXNzb3JOb2RlIEludGVyZmFjZSAtIERFUFJFQ0FURURcclxuXHJcbiAgICAgIC8vIFVwZGF0ZSAwNi0yMDIxXHJcbiAgICAgIC8vICBBdWRpb1dvcmtsZXRQcm9jZXNzb3IgaXMgaGVyZSB0byBzdGF5LiBXZWIgQXVkaW8gQVBJIGhhcyBub3cgUmVjb21tZW5kYXRpb24gc3RhdHVzICFcclxuXHJcbiAgICAgIGlmICh0aGlzLmNvbnRleHQuYXVkaW9Xb3JrbGV0KSB7XHJcbiAgICAgICAgLy9jb25zdCB3b3JrbGV0RmlsZU5hbWUgPSAoJ2ZpbGUtbG9hZGVyIS4vaW50ZXJjZXB0b3Jfd29ya2xldC5qcycpO1xyXG4gICAgICAgIC8vY29uc3Qgd29ya2xldEZpbGVOYW1lID0gJ2h0dHA6Ly9sb2NhbGhvc3Q6NDIwMC9hc3NldHMvaW50ZXJjZXB0b3Jfd29ya2xldC5qcyc7XHJcbiAgICAgICAgLy9jb25zb2xlLmxvZyhhd3BTdHIpO1xyXG4gICAgICAgIGlmIChBdWRpb0NhcHR1cmUuY2FwdHVyZUludGVyY2VwdG9yTW9kdWxlUmVnaXN0ZXJlZCkge1xyXG4gICAgICAgICAgLy8gUmVxdWlyZWQgY2FwdHVyZSBpbnRlcmNlcHRvciBtb2R1bGUgYWxyZWFkeSByZWdpc3RlcmVkXHJcbiAgICAgICAgICB0aGlzLmFkZENhcHR1cmVJbnRlcmNlcHRvcigpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcblxyXG4gICAgICAgICAgLy8gUmVnaXN0ZXIgY2FwdHVyZSBpbnRlcmNlcHRvciBtb2R1bGVcclxuICAgICAgICAgIGxldCBhdWRpb1dvcmtsZXRNb2R1bGVCbG9iID0gbmV3IEJsb2IoW2F3cFN0cl0sIHt0eXBlOiAndGV4dC9qYXZhc2NyaXB0J30pO1xyXG5cclxuICAgICAgICAgIGxldCBhdWRpb1dvcmtsZXRNb2R1bGVCbG9iVXJsID0gd2luZG93LlVSTC5jcmVhdGVPYmplY3RVUkwoYXVkaW9Xb3JrbGV0TW9kdWxlQmxvYik7XHJcblxyXG4gICAgICAgICAgdGhpcy5jb250ZXh0LmF1ZGlvV29ya2xldC5hZGRNb2R1bGUoYXVkaW9Xb3JrbGV0TW9kdWxlQmxvYlVybCkudGhlbigoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBBdWRpb0NhcHR1cmUuY2FwdHVyZUludGVyY2VwdG9yTW9kdWxlUmVnaXN0ZXJlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmFkZENhcHR1cmVJbnRlcmNlcHRvcigpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICkuY2F0Y2goKGVycm9yOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coJ0NvdWxkIG5vdCBhZGQgbW9kdWxlICcgKyBlcnJvcik7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5jb250ZXh0LmNyZWF0ZVNjcmlwdFByb2Nlc3Nvcikge1xyXG4gICAgICAgIC8vIFRoZSBTY3JpcHRQcm9jZXNzb3JOb2RlIEludGVyZmFjZSAtIERFUFJFQ0FURUQgT25seSBhcyBmYWxsYmFja1xyXG4gICAgICAgIC8vIFRPRE8gc2hvdWxkIHdlIHVzZSBzdHJlYW1DaGFubmVsQ291bnQgb3IgY2hhbm5lbENvdW50IGhlcmUgP1xyXG4gICAgICAgIGxldCBzY3JpcHRQcm9jZXNzb3JOb2RlID0gdGhpcy5jb250ZXh0LmNyZWF0ZVNjcmlwdFByb2Nlc3NvcihBdWRpb0NhcHR1cmUuQlVGRkVSX1NJWkUsIHN0cmVhbUNoYW5uZWxDb3VudCwgc3RyZWFtQ2hhbm5lbENvdW50KTtcclxuICAgICAgICB0aGlzLmJ1ZmZlcmluZ05vZGUgPSBzY3JpcHRQcm9jZXNzb3JOb2RlO1xyXG4gICAgICAgIGxldCBjID0gMDtcclxuICAgICAgICBpZiAoc2NyaXB0UHJvY2Vzc29yTm9kZS5vbmF1ZGlvcHJvY2Vzcykge1xyXG4gICAgICAgICAgc2NyaXB0UHJvY2Vzc29yTm9kZS5vbmF1ZGlvcHJvY2VzcyA9IChlOiBBdWRpb1Byb2Nlc3NpbmdFdmVudCkgPT4ge1xyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMuY2FwdHVyaW5nKSB7XHJcbiAgICAgICAgICAgICAgbGV0IGluQnVmZmVyID0gZS5pbnB1dEJ1ZmZlcjtcclxuICAgICAgICAgICAgICAvLyBvbmx5IHByb2Nlc3MgcmVxdWVzdGVkIGNvdW50IG9mIGNoYW5uZWxzXHJcbiAgICAgICAgICAgICAgbGV0IGN1cnJlbnRCdWZmZXJzID0gbmV3IEFycmF5PEZsb2F0MzJBcnJheT4oY2hhbm5lbENvdW50KTtcclxuICAgICAgICAgICAgICBmb3IgKGxldCBjaDogbnVtYmVyID0gMDsgY2ggPCBjaGFubmVsQ291bnQ7IGNoKyspIHtcclxuICAgICAgICAgICAgICAgIGxldCBjaFNhbXBsZXMgPSBpbkJ1ZmZlci5nZXRDaGFubmVsRGF0YShjaCk7XHJcbiAgICAgICAgICAgICAgICBsZXQgY2hTYW1wbGVzQ29weSA9IGNoU2FtcGxlcy5zbGljZSgwKTtcclxuICAgICAgICAgICAgICAgIGN1cnJlbnRCdWZmZXJzW2NoXSA9IGNoU2FtcGxlc0NvcHkuc2xpY2UoMCk7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5kYXRhKSB7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuZGF0YVtjaF0ucHVzaChjaFNhbXBsZXNDb3B5KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChERUJVR19UUkFDRV9MRVZFTCA+IDgpIHtcclxuICAgICAgICAgICAgICAgICAgY29uc29sZS5kZWJ1ZyhcIlByb2Nlc3MgXCIgKyBjaFNhbXBsZXNDb3B5Lmxlbmd0aCArIFwiIHNhbXBsZXMuXCIpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhpcy5mcmFtZXNSZWNvcmRlZCArPSBjaFNhbXBsZXNDb3B5Lmxlbmd0aDtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgYysrO1xyXG4gICAgICAgICAgICAgIGlmICh0aGlzLmF1ZGlvT3V0U3RyZWFtKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmF1ZGlvT3V0U3RyZWFtLndyaXRlKGN1cnJlbnRCdWZmZXJzKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH07XHJcbiAgICAgICAgICB0aGlzLl9vcGVuZWQgPSB0cnVlO1xyXG4gICAgICAgICAgaWYgKHRoaXMubGlzdGVuZXIpIHtcclxuICAgICAgICAgICAgdGhpcy5saXN0ZW5lci5vcGVuZWQoKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5saXN0ZW5lci5lcnJvcignQnJvd3NlciBkb2VzIG5vdCBzdXBwb3J0IGF1ZGlvIHByb2Nlc3NpbmcgKFNjcmlwdFByb2Nlc3Nvci5vbmF1ZGlvcHJvY2VzcyBtZXRob2Qgbm90IGZvdW5kKSEnKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5saXN0ZW5lci5lcnJvcignQnJvd3NlciBkb2VzIG5vdCBzdXBwb3J0IGF1ZGlvIHByb2Nlc3NpbmcgKG5laXRoZXIgQXVkaW9Xb3JrbGV0UHJvY2Vzc29yIG5vciBTY3JpcHRQcm9jZXNzb3IpIScpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICAgICAgfSwgKGUpID0+IHtcclxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZSArIFwiIEVycm9yIG5hbWU6IFwiICtlLm5hbWUpO1xyXG4gICAgICAgICAgaWYgKHRoaXMubGlzdGVuZXIpIHtcclxuICAgICAgICAgICAgaWYoJ05vdEFsbG93ZWRFcnJvcicgPT09IGUubmFtZSl7XHJcbiAgICAgICAgICAgICAgdGhpcy5saXN0ZW5lci5lcnJvcignTm90IGFsbG93ZWQgdG8gdXNlIHlvdXIgbWljcm9waG9uZS4nLCdQbGVhc2UgbWFrZSBzdXJlIHRoYXQgbWljcm9waG9uZSBhY2Nlc3MgaXMgYWxsb3dlZCBmb3IgdGhpcyB3ZWIgcGFnZSBhbmQgcmVsb2FkIHRoZSBwYWdlLicpO1xyXG4gICAgICAgICAgICB9ZWxzZSBpZignTm90UmVhZGFibGVFcnJvcicgPT09IGUubmFtZSl7XHJcbiAgICAgICAgICAgICAgdGhpcy5saXN0ZW5lci5lcnJvcignQ291bGQgbm90IHJlYWQgZnJvbSB5b3VyIGF1ZGlvIGRldmljZS4nLCdQbGVhc2UgbWFrZSBzdXJlIHlvdXIgYXVkaW8gZGV2aWNlIGlzIHdvcmtpbmcuJyk7XHJcbiAgICAgICAgICAgIH1lbHNlIGlmKCdPdmVyY29uc3RyYWluZWRFcnJvcicgPT09IGUubmFtZSl7XHJcbiAgICAgICAgICAgICAgbGV0IGVNc2c9ZS5tc2c/ZS5tc2c6J092ZXJjb25zdHJhaW5lZCBtZWRpYSBkZXZpY2UgcmVxdWVzdCBlcnJvci4nO1xyXG4gICAgICAgICAgICAgIHRoaXMubGlzdGVuZXIuZXJyb3IoZU1zZyk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5saXN0ZW5lci5lcnJvcigpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgKVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfc3RhcnQoKXtcclxuICAgIGlmKHRoaXMuY29udGV4dCkge1xyXG4gICAgICB0aGlzLmluaXREYXRhKCk7XHJcbiAgICAgIGlmICh0aGlzLmF1ZGlvT3V0U3RyZWFtKSB7XHJcbiAgICAgICAgdGhpcy5hdWRpb091dFN0cmVhbS5uZXh0U3RyZWFtKClcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmNhcHR1cmluZyA9IHRydWU7XHJcbiAgICAgIGlmICh0aGlzLmJ1ZmZlcmluZ05vZGUpIHtcclxuICAgICAgICB0aGlzLm1lZGlhU3RyZWFtLmNvbm5lY3QodGhpcy5idWZmZXJpbmdOb2RlKTtcclxuICAgICAgICB0aGlzLmJ1ZmZlcmluZ05vZGUuY29ubmVjdCh0aGlzLmNvbnRleHQuZGVzdGluYXRpb24pO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICh0aGlzLmxpc3RlbmVyKSB7XHJcbiAgICAgICAgdGhpcy5saXN0ZW5lci5zdGFydGVkKCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHN0YXJ0KCkge1xyXG4gICAgaWYodGhpcy5jb250ZXh0KSB7XHJcbiAgICAgIGNvbnN0IGFTdCA9IHRoaXMuY29udGV4dC5zdGF0ZTtcclxuICAgICAgaWYgKGFTdCA9PT0gJ3J1bm5pbmcnKSB7XHJcbiAgICAgICAgdGhpcy5fc3RhcnQoKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBjb25zb2xlLmRlYnVnKFwiQ2FwdHVyZSBzdGFydDogYXVkaW8gY29udGV4dCBub3QgcnVubmluZywgc3RhdGU6IFwiICsgYVN0ICsgXCIsIHJlc3VtaW5nLi4uXCIpO1xyXG4gICAgICAgIHRoaXMuY29udGV4dC5yZXN1bWUoKS50aGVuKCgpID0+IHtcclxuICAgICAgICAgIGNvbnNvbGUuZGVidWcoXCJDYXB0dXJlIHN0YXJ0OiBhdWRpbyBjb250ZXh0IHJlc3VtZWQsIHN0YXJ0aW5nLi4uXCIpO1xyXG4gICAgICAgICAgdGhpcy5fc3RhcnQoKTtcclxuICAgICAgICB9KVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzdG9wKCkge1xyXG5cclxuICAgIGlmICh0aGlzLmRpc2Nvbm5lY3RTdHJlYW1zICYmIHRoaXMuYnVmZmVyaW5nTm9kZSkge1xyXG4gICAgICB0aGlzLm1lZGlhU3RyZWFtLmRpc2Nvbm5lY3QodGhpcy5idWZmZXJpbmdOb2RlKTtcclxuICAgICAgaWYodGhpcy5jb250ZXh0KSB7XHJcbiAgICAgICAgdGhpcy5idWZmZXJpbmdOb2RlLmRpc2Nvbm5lY3QodGhpcy5jb250ZXh0LmRlc3RpbmF0aW9uKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHRyeSB7XHJcbiAgICAgIGlmICh0aGlzLmF1ZGlvT3V0U3RyZWFtKSB7XHJcbiAgICAgICAgdGhpcy5hdWRpb091dFN0cmVhbS5mbHVzaCgpO1xyXG4gICAgICB9XHJcbiAgICB9Y2F0Y2goZXJyKXtcclxuICAgICAgY29uc29sZS5lcnJvcihcIkNvdWxkIG5vdCBmbHVzaCBjYXB0dXJlIHN0cmVhbS5cIik7XHJcbiAgICAgdGhyb3cgZXJyO1xyXG4gICAgfWZpbmFsbHkge1xyXG4gICAgICB0aGlzLmNhcHR1cmluZyA9IGZhbHNlO1xyXG4gICAgICBpZiAodGhpcy5pbmRkYkF1ZGlvQnVmZmVyICYmIHRoaXMucGVyc2lzdEVycm9yKSB7XHJcbiAgICAgICAgLy8gRGVsZXRlIGludmFsaWQgcGVyc2lzdGVudCBhdWRpbyBkYXRhIGFuZCBob3BlIHRoYXQgaXQgd2lsbCBiZSBjb21wbGV0ZWx5IHVwbG9hZGVkIHRvIHRoZSBzZXJ2ZXJcclxuICAgICAgICB0aGlzLmluZGRiQXVkaW9CdWZmZXIucmVsZWFzZUF1ZGlvRGF0YSgpO1xyXG4gICAgICAgIHRoaXMuaW5kZGJBdWRpb0J1ZmZlciA9IG51bGw7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHRoaXMubGlzdGVuZXIgJiYgKHRoaXMucGVyc2lzdEVycm9yIHx8IHRoaXMucGVyc2lzdGVkKSkge1xyXG4gICAgICAgIC8vY29uc29sZS5kZWJ1ZyhcIlN0b3BwZWQgYnkgc3RvcCgpIG1ldGhvZCBjYWxsXCIpO1xyXG4gICAgICAgIHRoaXMubGlzdGVuZXIuc3RvcHBlZCgpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuXHJcbiAgc3RvcmUoKXtcclxuICAgLy8gaWYodGhpcy5kYiAmJiB0aGlzLnJlY1VVSUQpe1xyXG4gICAvLyAgICBsZXQgdHI9IHRoaXMuZGIudHJhbnNhY3Rpb24oU3ByRGIuUkVDT1JESU5HX0ZJTEVfQ0hVTktTX09CSkVDVF9TVE9SRV9OQU1FLCAncmVhZHdyaXRlJyk7XHJcbiAgIC8vICAgIGxldCByZWNGaWxlT2JqU3RvcmUgPSB0ci5vYmplY3RTdG9yZShTcHJEYi5SRUNPUkRJTkdfRklMRV9DSFVOS1NfT0JKRUNUX1NUT1JFX05BTUUpO1xyXG4gICAvL1xyXG4gICAvLyAgICAgIHRyeSB7XHJcbiAgIC8vICAgICAgICBsZXQgY2gwRGF0YT10aGlzLmRhdGFbMF07XHJcbiAgIC8vICAgICAgICBsZXQgZGF0YUNoa0NudD1jaDBEYXRhLmxlbmd0aDtcclxuICAgLy8gICAgICAgICAgbGV0IHBvcyA9IDA7XHJcbiAgIC8vICAgICAgICAgIGZvciAobGV0IGNoQ2tJZHggPSAwOyBjaENrSWR4IDwgZGF0YUNoa0NudDsgY2hDa0lkeCsrKSB7XHJcbiAgIC8vICAgICAgICAgICAgbGV0IGJ1Zkxlbj0wO1xyXG4gICAvLyAgICAgICAgICAgIGZvciAobGV0IGNoID0gMDsgY2ggPCB0aGlzLmNoYW5uZWxDb3VudDsgY2grKykge1xyXG4gICAvLyAgICAgICAgICAgICAgbGV0IGNoQ2hrID0gdGhpcy5kYXRhW2NoXVtjaENrSWR4XTtcclxuICAgLy8gICAgICAgICAgICAgIGJ1ZkxlbiA9IGNoQ2hrLmxlbmd0aDtcclxuICAgLy8gICAgICAgICAgICAgIC8vbGV0IGNhY2hlSWQgPSB1dWlkICsgJ18nICsgY2ggKyAnXycgKyBjaENrSWR4O1xyXG4gICAvLyAgICAgICAgICAgICAgbGV0IGNoa0RiSWQgPSBbdGhpcy5yZWNVVUlELCB0aGlzLmluZERiQ2hrSWR4ICsgY2hDa0lkeCwgY2hdO1xyXG4gICAvLyAgICAgICAgICAgICAgbGV0IGNyID0gcmVjRmlsZU9ialN0b3JlLmFkZChjaENoaywgY2hrRGJJZCk7XHJcbiAgIC8vICAgICAgICAgICAgICAvL2NvbnNvbGUuZGVidWcoXCJBZGRlZDogXCIrY2grXCIgXCIrKHRoaXMuaW5kRGJDaGtJZHgrY2hDa0lkeCkpO1xyXG4gICAvLyAgICAgICAgICAgICAgY3Iub25zdWNjZXNzPSgpPT57XHJcbiAgIC8vICAgICAgICAgICAgICAgIC8vY29uc29sZS5kZWJ1ZyhcIlN0b3JlZCBhdWRpbyBkYXRhIHRvIGluZGV4ZWQgZGJcIik7XHJcbiAgIC8vICAgICAgICAgICAgICB9XHJcbiAgIC8vICAgICAgICAgICAgICBjci5vbmVycm9yPSgpPT57XHJcbiAgIC8vICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXCJFcnJvciBzdG9yaW5nIGF1ZGlvIGRhdGEgdG8gaW5kZXhlZCBkYlwiKTtcclxuICAgLy8gICAgICAgICAgICAgIH1cclxuICAgLy8gICAgICAgICAgICB9XHJcbiAgIC8vICAgICAgICAgICAgcG9zICs9IGJ1ZkxlbjtcclxuICAgLy8gICAgICAgIH1cclxuICAgLy8gICAgICAgIHRoaXMuaW5kRGJDaGtJZHgrPWRhdGFDaGtDbnQ7XHJcbiAgIC8vXHJcbiAgIC8vICAgICAgICB0ci5vbmVycm9yID0gKGVycikgPT4ge1xyXG4gICAvLyAgICAgICAgICBjb25zb2xlLmVycm9yKCdGYWlsZWQgdG8gY2FjaGUgYXVkaW8gZGF0YSB0byBpbmRleGVkIGRiOiAnICsgZXJyKVxyXG4gICAvLyAgICAgICAgfVxyXG4gICAvLyAgICAgICAgdHIub25jb21wbGV0ZSA9ICgpID0+IHtcclxuICAgLy8gICAgICAgICAgLy9jb25zb2xlLmRlYnVnKCdUcmFuc2ZlcnJlZCBjYXB0dXJlIGF1ZGlvIGRhdGEgdG8gaW5kZXhlZCBkYiwgZGVsZXRpbmcgb3JpZ2luYWwgZGF0YSBmcm9tIG1lbW9yeS4uLicpO1xyXG4gICAvL1xyXG4gICAvLyAgICAgICAgICAvLy8gQXVkaW8gZGF0YSBzYXZlZCB0byBpbmRleCBkYiBkZWxldGUgZnJvbSBpbiBtZW1vcnkgZGF0YSBhcnJheVxyXG4gICAvLyAgICAgICAgICBmb3IgKGxldCBjaCA9IDA7IGNoIDwgdGhpcy5jaGFubmVsQ291bnQ7IGNoKyspIHtcclxuICAgLy8gICAgICAgICAgIHRoaXMuZGF0YVtjaF0uc3BsaWNlKDApO1xyXG4gICAvLyAgICAgICAgICAgIC8vY29uc29sZS5kZWJ1ZyhcIlNwbGljZWQvcmVtb3ZlZCBjaDogXCIrY2gpO1xyXG4gICAvLyAgICAgICAgICB9XHJcbiAgIC8vXHJcbiAgIC8vICAgICAgICAgIHRoaXMucGVyc2lzdGVkPXRydWU7XHJcbiAgIC8vICAgICAgICAgIGlmKHRoaXMubGlzdGVuZXIgJiYgIXRoaXMuY2FwdHVyaW5nKXtcclxuICAgLy8gICAgICAgICAgICAvL2NvbnNvbGUuZGVidWcoXCJTdG9wcGVkIGJ5IGluZGV4ZWQgZGIgaG9va1wiKTtcclxuICAgLy8gICAgICAgICAgICB0aGlzLmxpc3RlbmVyLnN0b3BwZWQoKTtcclxuICAgLy8gICAgICAgICAgfVxyXG4gICAvLyAgICAgICAgfVxyXG4gICAvLyAgICAgICAgLy8gQ29tbWl0IGNodW5rc1xyXG4gICAvLyAgICAgICAgdGhpcy5wZXJzaXN0ZWQ9ZmFsc2U7XHJcbiAgIC8vICAgICAgICB0ci5jb21taXQoKTtcclxuICAgLy8gICAgICB9IGNhdGNoIChlcnIpIHtcclxuICAgLy8gICAgICAgIGNvbnNvbGUuZXJyb3IoJ1RyYW5zZmVyIGNhcHR1cmUgYXVkaW8gZGF0YSBlcnJvcjogJytlcnIpO1xyXG4gICAvLyAgICAgIH1cclxuICAgLy8gICAgfVxyXG5cclxuICAgIC8vIGlmKCF0aGlzLmluZGRiQXVkaW9CdWZmZXIgJiYgdGhpcy5fcGVyc2lzdGVudEF1ZGlvU3RvcmFnZVRhcmdldCAmJiB0aGlzLnJlY1VVSUQpIHtcclxuICAgIC8vICAgdGhpcy5pbmRkYkF1ZGlvQnVmZmVyID0gbmV3IEluZGV4ZWREYkF1ZGlvQnVmZmVyKHRoaXMuX3BlcnNpc3RlbnRBdWRpb1N0b3JhZ2VUYXJnZXQsIHRoaXMuY2hhbm5lbENvdW50LHRoaXMuY3VycmVudFNhbXBsZVJhdGUsQXVkaW9DYXB0dXJlLkJVRkZFUl9TSVpFLDAsdGhpcy5yZWNVVUlEKVxyXG4gICAgLy8gfVxyXG4gICAgaWYodGhpcy5pbmRkYkF1ZGlvQnVmZmVyICYmIHRoaXMuZGF0YSl7XHJcblxyXG4gICAgICAvLyBUcnkgdG8gYXBwZW5kIHRvXHJcbiAgICAgIHRoaXMuaW5kZGJBdWRpb0J1ZmZlci5hcHBlbmRSYXdBdWRpb0RhdGEodGhpcy5kYXRhKS5zdWJzY3JpYmUoe1xyXG4gICAgICAgIGNvbXBsZXRlOiAoKSA9PiB7XHJcbiAgICAgICAgICAvL2NvbnNvbGUuZGVidWcoJ1RyYW5zZmVycmVkIGNhcHR1cmUgYXVkaW8gZGF0YSB0byBpbmRleGVkIGRiLCBkZWxldGluZyBvcmlnaW5hbCBkYXRhIGZyb20gbWVtb3J5Li4uJyk7XHJcblxyXG4gICAgICAgICAgLy8vIEF1ZGlvIGRhdGEgc2F2ZWQgdG8gaW5kZXggZGIgZGVsZXRlIGZyb20gaW4gbWVtb3J5IGRhdGEgYXJyYXlcclxuICAgICAgICAgIGlmKHRoaXMuZGF0YSkge1xyXG4gICAgICAgICAgICBmb3IgKGxldCBjaCA9IDA7IGNoIDwgdGhpcy5jaGFubmVsQ291bnQ7IGNoKyspIHtcclxuICAgICAgICAgICAgICB0aGlzLmRhdGFbY2hdLnNwbGljZSgwKTtcclxuICAgICAgICAgICAgICAvL2NvbnNvbGUuZGVidWcoXCJTcGxpY2VkL3JlbW92ZWQgY2g6IFwiK2NoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdGhpcy5wZXJzaXN0ZWQgPSB0cnVlO1xyXG4gICAgICAgICAgaWYgKHRoaXMubGlzdGVuZXIgJiYgIXRoaXMuY2FwdHVyaW5nKSB7XHJcbiAgICAgICAgICAgIC8vY29uc29sZS5kZWJ1ZyhcIlN0b3BwZWQgYnkgaW5kZXhlZCBkYiBob29rXCIpO1xyXG4gICAgICAgICAgICB0aGlzLmxpc3RlbmVyLnN0b3BwZWQoKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LGVycm9yOihlcnIpPT57XHJcbiAgICAgICAgICAvLyBPbmx5IGxvZyB0aGUgZmlyc3QgZXJyb3JcclxuICAgICAgICAgIGlmKCF0aGlzLnBlcnNpc3RFcnJvcikge1xyXG4gICAgICAgICAgICB0aGlzLnBlcnNpc3RFcnJvciA9IGVycjtcclxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihcIkVycm9yIHBlcnNpc3RpbmcgYXVkaW8gZGF0YTogXCIgKyBlcnIpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICAgIHRoaXMucGVyc2lzdGVkPWZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcblxyXG4gIGNsb3NlKCkge1xyXG4gICAgaWYodGhpcy5tZWRpYVN0cmVhbSkge1xyXG4gICAgICB0aGlzLm1lZGlhU3RyZWFtLmRpc2Nvbm5lY3QoKTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLnN0cmVhbSkge1xyXG4gICAgICBjb25zdCBtdHMgPSB0aGlzLnN0cmVhbS5nZXRUcmFja3MoKTtcclxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtdHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBtdHNbaV0uc3RvcCgpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICB0aGlzLl9vcGVuZWQ9ZmFsc2U7XHJcbiAgfVxyXG5cclxuICBhdWRpb0J1ZmZlcigpOiBBdWRpb0J1ZmZlciB8bnVsbHtcclxuICAgIGxldCBhYjogQXVkaW9CdWZmZXJ8bnVsbD1udWxsO1xyXG4gICAgaWYodGhpcy5jb250ZXh0ICYmIHRoaXMuZGF0YSkge1xyXG4gICAgICBsZXQgZnJhbWVMZW46IG51bWJlciA9IDA7XHJcblxyXG4gICAgICBsZXQgY2gwRGF0YSA9IHRoaXMuZGF0YVswXTtcclxuXHJcbiAgICAgIGZvciAobGV0IGNoMENoayBvZiBjaDBEYXRhKSB7XHJcbiAgICAgICAgZnJhbWVMZW4gKz0gY2gwQ2hrLmxlbmd0aDtcclxuICAgICAgfVxyXG5cclxuICAgICAgdHJ5IHtcclxuICAgICAgICBhYiA9IHRoaXMuY29udGV4dC5jcmVhdGVCdWZmZXIodGhpcy5jaGFubmVsQ291bnQsIGZyYW1lTGVuLCB0aGlzLmNvbnRleHQuc2FtcGxlUmF0ZSk7XHJcbiAgICAgIH0gY2F0Y2ggKGVycikge1xyXG4gICAgICAgIGlmIChlcnIgaW5zdGFuY2VvZiBET01FeGNlcHRpb24pIHtcclxuICAgICAgICAgIGlmIChlcnIubmFtZSA9PT0gJ05vdFN1cHBvcnRlZEVycm9yJykge1xyXG4gICAgICAgICAgICBpZiAoZnJhbWVMZW4gPT0gMCkge1xyXG4gICAgICAgICAgICAgIC8vIEVtcHR5IGJ1ZmZlcnMgYXJlIG5vdCBzdXBwb3J0ZWQgYnkgQ2hyb21pdW1cclxuICAgICAgICAgICAgICAvLyBDcmVhdGUgZHVtbXkgYnVmZmVyIHdpdGggb25lIHNhbXBsZVxyXG4gICAgICAgICAgICAgIGFiID0gdGhpcy5jb250ZXh0LmNyZWF0ZUJ1ZmZlcih0aGlzLmNoYW5uZWxDb3VudCwgMSwgdGhpcy5jb250ZXh0LnNhbXBsZVJhdGUpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIHRocm93IGVycjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhyb3cgZXJyO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSBpZiAoZXJyIGluc3RhbmNlb2YgUmFuZ2VFcnJvcikge1xyXG4gICAgICAgICAgLy8gT3V0IG9mIG1lbW9yeVxyXG4gICAgICAgICAgLy8gVE9ETyBXaGF0IHRvIGRvID8/XHJcbiAgICAgICAgICB0aHJvdyBlcnI7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRocm93IGVycjtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgZm9yIChsZXQgY2ggPSAwOyBjaCA8IHRoaXMuY2hhbm5lbENvdW50OyBjaCsrKSB7XHJcbiAgICAgICAgbGV0IGNoRCA9IGFiLmdldENoYW5uZWxEYXRhKGNoKTtcclxuICAgICAgICBsZXQgcG9zID0gMDtcclxuICAgICAgICBmb3IgKGxldCBjaENoayBvZiB0aGlzLmRhdGFbY2hdKSB7XHJcbiAgICAgICAgICBsZXQgYnVmTGVuID0gY2hDaGsubGVuZ3RoO1xyXG4gICAgICAgICAgY2hELnNldChjaENoaywgcG9zKTtcclxuICAgICAgICAgIHBvcyArPSBidWZMZW47XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gYWI7XHJcbiAgfVxyXG5cclxuICBhdWRpb0J1ZmZlckFycmF5KCk6QXJyYXlBdWRpb0J1ZmZlcnxudWxse1xyXG4gICAgICBsZXQgYXJyQWI6QXJyYXlBdWRpb0J1ZmZlcnxudWxsPW51bGw7XHJcbiAgICAgIGlmKHRoaXMuZGF0YSkge1xyXG4gICAgICAgIGFyckFiPW5ldyBBcnJheUF1ZGlvQnVmZmVyKHRoaXMuY2hhbm5lbENvdW50LCB0aGlzLmN1cnJlbnRTYW1wbGVSYXRlLCB0aGlzLmRhdGEpO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBhcnJBYjtcclxuICB9XHJcblxyXG4gIGluZGRiQXVkaW9CdWZmZXJBcnJheSgpOkluZGV4ZWREYkF1ZGlvQnVmZmVyfG51bGx7XHJcbiAgICBpZih0aGlzLnBlcnNpc3RFcnJvcil7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfWVsc2Uge1xyXG4gICAgICByZXR1cm4gdGhpcy5pbmRkYkF1ZGlvQnVmZmVyO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcblxyXG59XHJcblxyXG4iXX0=
855
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FwdHVyZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NwZWVjaHJlY29yZGVybmcvc3JjL2xpYi9hdWRpby9jYXB0dXJlL2NhcHR1cmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFDLE9BQU8sRUFBRSxRQUFRLEVBQUUsZ0JBQWdCLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUUxRSxPQUFPLEVBQUMsZ0JBQWdCLEVBQXlCLFFBQVEsSUFBSSxXQUFXLEVBQUMsTUFBTSxzQ0FBc0MsQ0FBQztBQUN0SCxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUN2RCxPQUFPLEVBQUMsSUFBSSxFQUFDLE1BQU0sbUJBQW1CLENBQUM7QUFDdkMsT0FBTyxFQUFDLG9CQUFvQixFQUErQixNQUFNLHVCQUF1QixDQUFDO0FBQ3pGLE9BQU8sRUFBQyxvQkFBb0IsRUFBQyxNQUFNLFlBQVksQ0FBQztBQUdoRCxNQUFNLENBQUMsTUFBTSwwQ0FBMEMsR0FBQyxLQUFLLENBQUM7QUFFOUQsTUFBTSxpQkFBaUIsR0FBQyxDQUFDLENBQUM7QUFFMUIsZ0NBQWdDO0FBQ2hDLHdEQUF3RDtBQUN4RCxNQUFNLE1BQU0sR0FBQyx5RUFBeUU7SUFDbEYsSUFBSTtJQUNKLDJCQUEyQjtJQUMzQiw4QkFBOEI7SUFDOUIscUVBQXFFO0lBQ3JFLG9CQUFvQjtJQUNwQixvQkFBb0I7SUFDcEIseUJBQXlCO0lBQ3pCLHVCQUF1QjtJQUN2QixvQkFBb0I7SUFDcEIsSUFBSTtJQUNKLFNBQVM7SUFDVCxJQUFJO0lBQ0osYUFBYTtJQUNiLGlCQUFpQjtJQUNqQixrQkFBa0I7SUFDbEIsb0JBQW9CO0lBQ3BCLFFBQVE7SUFDUixJQUFJO0lBQ0oscUNBQXFDO0lBQ3JDLDRCQUE0QjtJQUM1Qix3QkFBd0I7SUFDeEIsNkJBQTZCO0lBQzdCLDBCQUEwQjtJQUMxQixvQ0FBb0M7SUFDcEMsMENB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Q1osSUFBSSxLQUFLLEdBQXVCLElBQUksQ0FBQztRQUNyQyxJQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNiLEtBQUssR0FBQyxJQUFJLGdCQUFnQixDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsSUFBSSxDQUFDLGlCQUFpQixFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNuRixDQUFDO1FBQ0QsT0FBTyxLQUFLLENBQUM7SUFDakIsQ0FBQztJQUVELHFCQUFxQjtRQUNuQixJQUFHLElBQUksQ0FBQyxZQUFZLEVBQUMsQ0FBQztZQUNwQixPQUFPLElBQUksQ0FBQztRQUNkLENBQUM7YUFBSyxDQUFDO1lBQ0wsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUM7UUFDL0IsQ0FBQztJQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1NlcXVlbmNlQXVkaW9GbG9hdDMyT3V0U3RyZWFtfSBmcm9tIFwiLi4vaW8vc3RyZWFtXCI7XHJcbmltcG9ydCB7QnJvd3NlciwgUGxhdGZvcm0sIFVzZXJBZ2VudEJ1aWxkZXJ9IGZyb20gXCIuLi8uLi91dGlscy91YS1wYXJzZXJcIjtcclxuXHJcbmltcG9ydCB7QXVkaW9TdG9yYWdlVHlwZSwgQXV0b0dhaW5Db250cm9sQ29uZmlnLCBQbGF0Zm9ybSBhcyBDZmdQbGF0Zm9ybX0gZnJvbSBcIi4uLy4uL3NwZWVjaHJlY29yZGVyL3Byb2plY3QvcHJvamVjdFwiO1xyXG5pbXBvcnQge0FycmF5QXVkaW9CdWZmZXJ9IGZyb20gXCIuLi9hcnJheV9hdWRpb19idWZmZXJcIjtcclxuaW1wb3J0IHtVVUlEfSBmcm9tIFwiLi4vLi4vdXRpbHMvdXRpbHNcIjtcclxuaW1wb3J0IHtJbmRleGVkRGJBdWRpb0J1ZmZlciwgUGVyc2lzdGVudEF1ZGlvU3RvcmFnZVRhcmdldH0gZnJvbSBcIi4uL2luZGRiX2F1ZGlvX2J1ZmZlclwiO1xyXG5pbXBvcnQge0F1ZGlvQ29udGV4dFByb3ZpZGVyfSBmcm9tIFwiLi4vY29udGV4dFwiO1xyXG5cclxuXHJcbmV4cG9ydCBjb25zdCBDSFJPTUVfQUNUSVZBVEVfRUNIT19DQU5DRUxMQVRJT05fV0lUSF9BR0M9ZmFsc2U7XHJcblxyXG5jb25zdCBERUJVR19UUkFDRV9MRVZFTD0wO1xyXG5cclxuLy8gRGlydHkgd2F5IHRvIGxvYWQgdGhpcyBtb2R1bGVcclxuLy8gQ29weSBjb250ZW50IG9mIGludGVyY2VwdG9yX3dvcmtsZXQuanMgdG8gdGhpcyBzdHJpbmdcclxuY29uc3QgYXdwU3RyPVwiY2xhc3MgQXVkaW9DYXB0dXJlSW50ZXJjZXB0b3JQcm9jZXNzb3IgZXh0ZW5kcyBBdWRpb1dvcmtsZXRQcm9jZXNzb3J7XFxuXCIgK1xyXG4gICAgXCJcXG5cIiArXHJcbiAgICBcIiAgICBCVUZGRVJfUVVBTlRVTVM9NjQ7XFxuXCIgK1xyXG4gICAgXCIgICAgUVVBTlRVTV9GUkFNRV9MRU49MTI4O1xcblwiICtcclxuICAgIFwiICAgIEJVRkZFUl9GUkFNRV9MRU49dGhpcy5RVUFOVFVNX0ZSQU1FX0xFTip0aGlzLkJVRkZFUl9RVUFOVFVNUztcXG5cIiArXHJcbiAgICBcIiAgICBidWZmZXI9bnVsbDtcXG5cIiArXHJcbiAgICBcIiAgICBidWZmZXJQb3M9MDtcXG5cIiArXHJcbiAgICBcIiAgICBidWZmZXJQb3NCeXRlcz0wO1xcblwiICtcclxuICAgIFwiICAgIGNvbnN0cnVjdG9yKCkge1xcblwiICtcclxuICAgIFwiICAgICAgICBzdXBlcigpO1xcblwiICtcclxuICAgIFwiXFxuXCIgK1xyXG4gICAgXCIgICAgfVxcblwiICtcclxuICAgIFwiXFxuXCIgK1xyXG4gICAgXCIgcHJvY2VzcyhcXG5cIiArXHJcbiAgICBcIiAgICAgIGlucHV0cyxcXG5cIiArXHJcbiAgICBcIiAgICAgIG91dHB1dHMsXFxuXCIgK1xyXG4gICAgXCIgICAgICBwYXJhbWV0ZXJzXFxuXCIgK1xyXG4gICAgXCIgICl7XFxuXCIgK1xyXG4gICAgXCJcXG5cIiArXHJcbiAgICBcIiAgICAgbGV0IGlucHV0c0NudD1pbnB1dHMubGVuZ3RoO1xcblwiICtcclxuICAgIFwiICAgICBsZXQgY2hhbm5lbENvdW50PTA7XFxuXCIgK1xyXG4gICAgXCIgICAgIGxldCBpbnB1dExlbj0wO1xcblwiICtcclxuICAgIFwiICAgICBsZXQgaW5wdXRMZW5CeXRlcz0wO1xcblwiICtcclxuICAgIFwiICAgICBpZihpbnB1dHNDbnQ+MCkge1xcblwiICtcclxuICAgIFwiICAgICAgICAgbGV0IGlucHV0MCA9IGlucHV0c1swXTtcXG5cIiArXHJcbiAgICBcIiAgICAgICAgIGNoYW5uZWxDb3VudCA9IGlucHV0MC5sZW5ndGg7XFxuXCIgK1xyXG4gICAgXCIgICAgICAgICBpZiAoY2hhbm5lbENvdW50ID4gMCkge1xcblwiICtcclxuICAgIFwiICAgICAgICAgICAgIGxldCBpbnB1dDBjaDA9aW5wdXQwWzBdO1xcblwiICtcclxuICAgIFwiICAgICAgICAgICAgIGlucHV0TGVuPWlucHV0MGNoMC5sZW5ndGg7XFxuXCIgK1xyXG4gICAgXCIgICAgICAgICAgICAgaW5wdXRMZW5CeXRlcz1pbnB1dDBjaDAuYnVmZmVyLmxlbmd0aDtcXG5cIiArXHJcbiAgICBcIiAgICAgICAgIH1cXG5cIiArXHJcbiAgICBcIiAgICAgfVxcblwiICtcclxuICAgIFwiICAgICBpZiAoIXRoaXMuYnVmZmVyIHx8IHRoaXMuYnVmZmVyLmxlbmd0aCA8IGNoYW5uZWxDb3VudCkge1xcblwiICtcclxuICAgIFwiICAgICAgICAgdGhpcy5idWZmZXIgPSBuZXcgQXJyYXkoY2hhbm5lbENvdW50KTtcXG5cIiArXHJcbiAgICBcIiAgICAgICAgIHRoaXMuYnVmZmVyUG9zID0gMFxcblwiICtcclxuICAgIFwiICAgICAgICAgZm9yIChsZXQgYmNoID0gMDsgYmNoIDwgY2hhbm5lbENvdW50OyBiY2grKykge1xcblwiICtcclxuICAgIFwiICAgICAgICAgICAgIHRoaXMuYnVmZmVyW2JjaF0gPSBuZXcgRmxvYXQzMkFycmF5KHRoaXMuQlVGRkVSX0ZSQU1FX0xFTik7XFxuXCIgK1xyXG4gICAgXCIgICAgICAgICAgICAgdGhpcy5idWZmZXJQb3MgPSAwO1xcblwiICtcclxuICAgIFwiICAgICAgICAgICAgIHRoaXMuYnVmZmVyUG9zQnl0ZXM9MDtcXG5cIiArXHJcbiAgICBcIiAgICAgICAgIH1cXG5cIiArXHJcbiAgICBcIiAgICAgfVxcblwiICtcclxuICAgIFwiICAgICBsZXQgYnVmQXZhaWwgPSB0aGlzLkJVRkZFUl9GUkFNRV9MRU4gLSB0aGlzLmJ1ZmZlclBvcztcXG5cIiArXHJcbiAgICBcIiAgICAgLy8gY2hlY2sgaWYgYnVmZmVyIGhhcyB0byBiZSB0cmFuc2ZlcnJlZFxcblwiICtcclxuICAgIFwiICAgICBpZiAoaW5wdXRMZW4gPiBidWZBdmFpbCkge1xcblwiICtcclxuICAgIFwiICAgICAgICAgbGV0IGFkYT1uZXcgQXJyYXkoY2hhbm5lbENvdW50KTtcXG5cIiArXHJcbiAgICBcIiAgICAgICAgIGZvciAobGV0IGNoID0gMDsgY2ggPCBjaGFubmVsQ291bnQ7IGNoKyspIHtcXG5cIiArXHJcbiAgICBcIiAgICAgICAgICAgICBhZGFbY2hdPXRoaXMuYnVmZmVyW2NoXS5idWZmZXIuc2xpY2UoMCk7XFxuXCIgK1xyXG4gICAgXCIgICAgICAgICB9XFxuXCIgK1xyXG4gICAgXCIgICAgICAgICB0aGlzLnBvcnQucG9zdE1lc3NhZ2Uoe1xcblwiICtcclxuICAgIFwiICAgICAgICAgICAgIGRhdGE6IGFkYSxcXG5cIiArXHJcbiAgICBcIiAgICAgICAgICAgICBjaHM6IGNoYW5uZWxDb3VudCxcXG5cIiArXHJcbiAgICBcIiAgICAgICAgICAgICBsZW46IHRoaXMuYnVmZmVyUG9zXFxuXCIgK1xyXG4gICAgXCIgICAgICAgICB9LCBhZGEpO1xcblwiICtcclxuICAgIFwiICAgICAgICAgLy8gYnVmZmVyIHRyYW5zZmVycmVkLCByZXNldFxcblwiICtcclxuICAgIFwiICAgICAgICAgdGhpcy5idWZmZXJQb3MgPSAwO1xcblwiICtcclxuICAgIFwiICAgICAgICAgdGhpcy5idWZmZXJQb3NCeXRlcz0wO1xcblwiICtcclxuICAgIFwiICAgICB9XFxuXCIgK1xyXG4gICAgXCJcXG5cIiArXHJcbiAgICBcIiAgICAgZm9yKGxldCBpaT0wO2lpPGlucHV0c0NudDtpaSsrKSB7XFxuXCIgK1xyXG4gICAgXCIgICAgICAgICBmb3IgKGxldCBjaCA9IDA7IGNoIDwgY2hhbm5lbENvdW50OyBjaCsrKSB7XFxuXCIgK1xyXG4gICAgXCIgICAgICAgICAgICAgLy8gTXV0ZSBvdXRwdXRzXFxuXCIgK1xyXG4gICAgXCIgICAgICAgICAgICAgLy9vdXRwdXRzW2lpXVtjaF0uZmlsbCgwKTtcXG5cIiArXHJcbiAgICBcIiAgICAgICAgICAgICBsZXQgY2hTYW1wbGVzID0gaW5wdXRzW2lpXVtjaF07XFxuXCIgK1xyXG4gICAgXCIgICAgICAgICAgICAgdGhpcy5idWZmZXJbY2hdLnNldChjaFNhbXBsZXMsdGhpcy5idWZmZXJQb3MpO1xcblwiICtcclxuICAgIFwiICAgICAgICAgfVxcblwiICtcclxuICAgIFwiICAgICAgICAgdGhpcy5idWZmZXJQb3MrPWlucHV0TGVuO1xcblwiICtcclxuICAgIFwiICAgICAgICAgdGhpcy5idWZmZXJQb3NCeXRlcys9aW5wdXRMZW5CeXRlcztcXG5cIiArXHJcbiAgICBcIiAgICAgfVxcblwiICtcclxuICAgIFwiICAgIFxcblwiICtcclxuICAgIFwiICAgICByZXR1cm4gdHJ1ZTtcXG5cIiArXHJcbiAgICBcIiAgfVxcblwiICtcclxuICAgIFwifVxcblwiICtcclxuICAgIFwiXFxuXCIgK1xyXG4gICAgXCJyZWdpc3RlclByb2Nlc3NvcignY2FwdHVyZS1pbnRlcmNlcHRvcicsQXVkaW9DYXB0dXJlSW50ZXJjZXB0b3JQcm9jZXNzb3IpO1xcblwiO1xyXG5cclxuXHJcblxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBBdWRpb0NhcHR1cmVMaXN0ZW5lciB7XHJcbiAgb3BlbmVkKCk6IHZvaWQ7XHJcblxyXG4gIHN0YXJ0ZWQoKTogdm9pZDtcclxuXHJcbiAgc3RvcHBlZCgpOiB2b2lkO1xyXG5cclxuICBjbG9zZWQoKTogdm9pZDtcclxuXHJcbiAgZXJyb3IobXNnPzpzdHJpbmcsYWR2aWNlPzpzdHJpbmcpOiB2b2lkO1xyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgQXVkaW9DYXB0dXJlIHtcclxuXHJcbiAgZ2V0IG1heEF1dG9OZXRNZW1TdG9yZVNhbXBsZXMoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLl9tYXhBdXRvTmV0TWVtU3RvcmVTYW1wbGVzO1xyXG4gIH1cclxuXHJcbiAgc2V0IG1heEF1dG9OZXRNZW1TdG9yZVNhbXBsZXModmFsdWU6IG51bWJlcikge1xyXG4gICAgdGhpcy5fbWF4QXV0b05ldE1lbVN0b3JlU2FtcGxlcyA9IHZhbHVlO1xyXG4gIH1cclxuICBzZXQgcmVjVVVJRCh2YWx1ZTogc3RyaW5nfG51bGwpIHtcclxuICAgIHRoaXMuX3JlY1VVSUQgPSB2YWx1ZTtcclxuICB9XHJcbiAgZ2V0IHJlY1VVSUQoKTogc3RyaW5nIHxudWxse1xyXG4gICAgcmV0dXJuIHRoaXMuX3JlY1VVSUQ7XHJcbiAgfVxyXG4gIGdldCBhdWRpb1N0b3JhZ2VUeXBlKCk6IEF1ZGlvU3RvcmFnZVR5cGUge1xyXG4gICAgcmV0dXJuIHRoaXMuX2F1ZGlvU3RvcmFnZVR5cGU7XHJcbiAgfVxyXG5cclxuICBzZXQgYXVkaW9TdG9yYWdlVHlwZSh2YWx1ZTogQXVkaW9TdG9yYWdlVHlwZSkge1xyXG4gICAgdGhpcy5fYXVkaW9TdG9yYWdlVHlwZSA9IHZhbHVlO1xyXG4gIH1cclxuICBnZXQgcGVyc2lzdGVudEF1ZGlvU3RvcmFnZVRhcmdldCgpOiBQZXJzaXN0ZW50QXVkaW9TdG9yYWdlVGFyZ2V0IHwgbnVsbCB7XHJcbiAgICByZXR1cm4gdGhpcy5fcGVyc2lzdGVudEF1ZGlvU3RvcmFnZVRhcmdldDtcclxuICB9XHJcblxyXG4gIHNldCBwZXJzaXN0ZW50QXVkaW9TdG9yYWdlVGFyZ2V0KHZhbHVlOiBQZXJzaXN0ZW50QXVkaW9TdG9yYWdlVGFyZ2V0IHwgbnVsbCkge1xyXG4gICAgdGhpcy5fcGVyc2lzdGVudEF1ZGlvU3RvcmFnZVRhcmdldCA9IHZhbHVlO1xyXG4gIH1cclxuXHJcblxyXG4gIGdldCBvcGVuZWQoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5fb3BlbmVkO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIEJVRkZFUl9TSVpFOiBudW1iZXIgPSA4MTkyO1xyXG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IERFRkFVTFRfTUFYX05FVF9BVVRPX01FTV9TVE9SRV9TQU1QTEVTOm51bWJlcj0yODgwMDAwKjU7IC8vIERlZmF1bHQgNSBtaW51dGUgYXQgNDhrSHpcclxuICBwcml2YXRlIF9tYXhBdXRvTmV0TWVtU3RvcmVTYW1wbGVzOm51bWJlcj1BdWRpb0NhcHR1cmUuREVGQVVMVF9NQVhfTkVUX0FVVE9fTUVNX1NUT1JFX1NBTVBMRVM7XHJcbiAgcHJpdmF0ZSBzdGF0aWMgY2FwdHVyZUludGVyY2VwdG9yTW9kdWxlUmVnaXN0ZXJlZD1mYWxzZTtcclxuICBjb250ZXh0OiBBdWRpb0NvbnRleHR8bnVsbD1udWxsO1xyXG4gIHN0cmVhbSE6IE1lZGlhU3RyZWFtO1xyXG4gIGNoYW5uZWxDb3VudCE6IG51bWJlcjtcclxuICBwcml2YXRlIF9yZWNVVUlEOnN0cmluZ3xudWxsPW51bGw7XHJcbiAgbWVkaWFTdHJlYW06IGFueTtcclxuICBhZ2NTdGF0dXM6Ym9vbGVhbnxudWxsPW51bGw7XHJcbiAgYnVmZmVyaW5nTm9kZTogQXVkaW9Ob2RlfG51bGw9bnVsbDtcclxuICBsaXN0ZW5lciE6IEF1ZGlvQ2FwdHVyZUxpc3RlbmVyO1xyXG4gIGRhdGE6IEFycmF5PEFycmF5PEZsb2F0MzJBcnJheT4+fG51bGw9bnVsbDtcclxuICBjdXJyZW50U2FtcGxlUmF0ZSE6IG51bWJlcjtcclxuICBuOiBOYXZpZ2F0b3I7XHJcbiAgYXVkaW9PdXRTdHJlYW06IFNlcXVlbmNlQXVkaW9GbG9hdDMyT3V0U3RyZWFtIHwgbnVsbD1udWxsO1xyXG4gIHByaXZhdGUgZGlzY29ubmVjdFN0cmVhbXMgPSB0cnVlO1xyXG4gIHByaXZhdGUgX29wZW5lZD1mYWxzZTtcclxuICBwcml2YXRlIGNhcHR1cmluZyA9IGZhbHNlO1xyXG5cclxuICBmcmFtZXNSZWNvcmRlZDogbnVtYmVyPTA7XHJcblxyXG4gIHByaXZhdGUgX2F1ZGlvU3RvcmFnZVR5cGU6QXVkaW9TdG9yYWdlVHlwZT1BdWRpb1N0b3JhZ2VUeXBlLk1FTV9FTlRJUkU7XHJcbiAgcHJpdmF0ZSBfcGVyc2lzdGVudEF1ZGlvU3RvcmFnZVRhcmdldDpQZXJzaXN0ZW50QXVkaW9TdG9yYWdlVGFyZ2V0fG51bGw9bnVsbDtcclxuXHJcbiAgcHJpdmF0ZSBwZXJzaXN0ZWQ9dHJ1ZTtcclxuICBwcml2YXRlIHBlcnNpc3RFcnJvcjpFcnJvcnxudWxsPW51bGw7XHJcbiAgcHJpdmF0ZSBpbmRkYkF1ZGlvQnVmZmVyOkluZGV4ZWREYkF1ZGlvQnVmZmVyfG51bGw9bnVsbDtcclxuXHJcbiAgLy9wcml2YXRlIGNvbnRleHQ6QXVkaW9Db250ZXh0fG51bGw9bnVsbDtcclxuXHJcbiAgY29uc3RydWN0b3IoKSB7XHJcbiAgICB0aGlzLm4gPSBuYXZpZ2F0b3I7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9hdWRpb0NvbnRleHQoKTpBdWRpb0NvbnRleHR8bnVsbHtcclxuICAgIGlmKCF0aGlzLmNvbnRleHQpe1xyXG4gICAgICB0aGlzLmNvbnRleHQ9QXVkaW9Db250ZXh0UHJvdmlkZXIuYXVkaW9Db250ZXh0SW5zdGFuY2UoKTtcclxuICAgICAgaWYodGhpcy5jb250ZXh0KSB7XHJcbiAgICAgICAgdGhpcy5jb250ZXh0LmFkZEV2ZW50TGlzdGVuZXIoJ3N0YXRlY2hhbmdlJywgKCkgPT4ge1xyXG4gICAgICAgICAgaWYgKHRoaXMuY29udGV4dCAmJiB0aGlzLmNvbnRleHQuc3RhdGUgIT09ICdydW5uaW5nJykge1xyXG4gICAgICAgICAgICB0aGlzLmNsb3NlKCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiB0aGlzLmNvbnRleHQ7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGluaXREYXRhKCkge1xyXG4gICAgaWYoIXRoaXMuX3JlY1VVSUQpIHtcclxuICAgICAgdGhpcy5fcmVjVVVJRCA9IFVVSUQuZ2VuZXJhdGUoKTtcclxuICAgIH1cclxuICAgIHRoaXMucGVyc2lzdEVycm9yPW51bGw7XHJcbiAgICAvL2NvbnNvbGUuZGVidWcoXCJBdWRpbyBjYXB0dXJlIGluaXRpYWxpemUgc3RvcmFnZSBmb3IgdHlwZTogXCIrdGhpcy5fYXVkaW9TdG9yYWdlVHlwZSk7XHJcbiAgICBpZihBdWRpb1N0b3JhZ2VUeXBlLkRCX0NIVU5LRUQgPT09IHRoaXMuX2F1ZGlvU3RvcmFnZVR5cGUgJiYgdGhpcy5fcGVyc2lzdGVudEF1ZGlvU3RvcmFnZVRhcmdldCAmJiB0aGlzLl9yZWNVVUlEKSB7XHJcbiAgICAgIC8vY29uc29sZS5kZWJ1ZyhcIkNyZWF0ZSBpbmRleGVkIGRiIGF1ZGlvIGJ1ZmZlci5cIik7XHJcbiAgICAgIHRoaXMuaW5kZGJBdWRpb0J1ZmZlciA9IG5ldyBJbmRleGVkRGJBdWRpb0J1ZmZlcih0aGlzLl9wZXJzaXN0ZW50QXVkaW9TdG9yYWdlVGFyZ2V0LCB0aGlzLmNoYW5uZWxDb3VudCx0aGlzLmN1cnJlbnRTYW1wbGVSYXRlLEF1ZGlvQ2FwdHVyZS5CVUZGRVJfU0laRSwwLHRoaXMuX3JlY1VVSUQpXHJcbiAgICB9XHJcbiAgICBpZighKEF1ZGlvU3RvcmFnZVR5cGUuTkVUX0NIVU5LRUQgPT09IHRoaXMuX2F1ZGlvU3RvcmFnZVR5cGUpKSB7XHJcbiAgICAgIC8vIEluaXRpYWxpemUgYXVkaW8gZGF0YSBhcnJheSBleGNlcHQgZm9yIG5ldCBhdWRpbyBidWZmZXIgbW9kZVxyXG4gICAgICB0aGlzLmRhdGEgPSBuZXcgQXJyYXk8QXJyYXk8RmxvYXQzMkFycmF5Pj4oKTtcclxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmNoYW5uZWxDb3VudDsgaSsrKSB7XHJcbiAgICAgICAgdGhpcy5kYXRhLnB1c2gobmV3IEFycmF5PEZsb2F0MzJBcnJheT4oKSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHRoaXMuZnJhbWVzUmVjb3JkZWQgPSAwO1xyXG4gIH1cclxuXHJcbiAgbGlzdERldmljZXMoKSB7XHJcbiAgICBuYXZpZ2F0b3IubWVkaWFEZXZpY2VzLmVudW1lcmF0ZURldmljZXMoKS50aGVuKChsOiBNZWRpYURldmljZUluZm9bXSkgPT4gdGhpcy5wcmludERldmljZXMobCkpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBkdW1teVNlc3Npb24oKTpQcm9taXNlPE1lZGlhU3RyZWFtPntcclxuICAgIC8vIHdvcmthcm91bmQgdG8gcmVxdWVzdCBwZXJtaXNzaW9uczpcclxuICAgIC8vIFN0YXJ0IGEgZHVtbXkgc2Vzc2lvblxyXG4gICAgbGV0IG1lZGlhU3RyQ25zdHJzID0gPE1lZGlhU3RyZWFtQ29uc3RyYWludHM+e2F1ZGlvOlxyXG4gICAgICAgIHtlY2hvQ2FuY2VsYXRpb246IGZhbHNlfVxyXG4gICAgfTtcclxuICAgIHJldHVybiBuYXZpZ2F0b3IubWVkaWFEZXZpY2VzLmdldFVzZXJNZWRpYShtZWRpYVN0ckNuc3Rycyk7XHJcblxyXG4gIH1cclxuXHJcblxyXG4gIHByaXZhdGUgc3RvcEFsbFNlc3Npb25UcmFja3MobWVkaWFTdHJlYW06TWVkaWFTdHJlYW0pe1xyXG4gICAgICBsZXQgYXRzID0gbWVkaWFTdHJlYW0uZ2V0VHJhY2tzKCk7XHJcbiAgICAgIGZvciAobGV0IGF0SWR4ID0gMDsgYXRJZHggPCBhdHMubGVuZ3RoOyBhdElkeCsrKSB7XHJcbiAgICAgICAgLy9jb25zb2xlLmRlYnVnKFwiU3RvcCBkdW1teSBzZXNzaW9uIHRyYWNrOiAjXCIgKyBhdElkeClcclxuICAgICAgICBhdHNbYXRJZHhdLnN0b3AoKTtcclxuICAgICAgfVxyXG4gIH1cclxuXHJcbiAgZGV2aWNlSW5mb3MoY2I6IChkZXZpY2VJbmZvczogTWVkaWFEZXZpY2VJbmZvW10gfCBudWxsKSA9PiBhbnksIHJldHJ5ID0gdHJ1ZSxkdW1teVN0cmVhbT86TWVkaWFTdHJlYW0pIHtcclxuXHJcbiAgICBuYXZpZ2F0b3IubWVkaWFEZXZpY2VzLmVudW1lcmF0ZURldmljZXMoKS50aGVuKChsOiBNZWRpYURldmljZUluZm9bXSkgPT4ge1xyXG4gICAgICBsZXQgbGFiZWxzQXZhaWxhYmxlID0gZmFsc2U7XHJcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbC5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGxldCBkaSA9IGxbaV07XHJcbiAgICAgICAgaWYgKGRpLmxhYmVsKSB7XHJcbiAgICAgICAgICBsYWJlbHNBdmFpbGFibGUgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBpZiAoIWxhYmVsc0F2YWlsYWJsZSkge1xyXG4gICAgICAgIC8vY29uc29sZS5kZWJ1ZyhcIk1lZGlhIGRldmljZSBlbnVtZXJhdGlvbjogTm8gbGFiZWxzLlwiKVxyXG4gICAgICAgIGlmIChyZXRyeSkge1xyXG4gICAgICAgICAgICBjb25zb2xlLmluZm8oXCJTdGFydGluZyBkdW1teSBzZXNzaW9uIHRvIHJlcXVlc3QgYXVkaW8gcGVybWlzc2lvbnMuLi5cIilcclxuXHJcbiAgICAgICAgICAgIHRoaXMuZHVtbXlTZXNzaW9uKCkudGhlbigoczogTWVkaWFTdHJlYW0pID0+IHtcclxuICAgICAgICAgICAgLy8gYW5kIHN0b3AgaXQgaW1tZWRpYXRlbHlcclxuXHJcbiAgICAgICAgICAgIGlmKHMpIHtcclxuICAgICAgICAgICAgICAvL2NvbnNvbGUuZGVidWcoXCJHb3QgZHVtbXkgc2Vzc2lvbiBzdHJlYW06IFwiICsgcyArIFwiIC5cIilcclxuICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgLy9jb25zb2xlLmRlYnVnKFwiTm8gZHVtbXkgc3RyZWFtXCIpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gcmV0cnkgKG9ubHkgb25jZSlcclxuICAgICAgICAgICAgdGhpcy5kZXZpY2VJbmZvcyhjYiwgZmFsc2Uscyk7XHJcbiAgICAgICAgICB9LHJlYXNvbiA9PiB7XHJcbiAgICAgICAgICAgIC8vY29uc29sZS5kZWJ1ZyhcIkR1bW15IHNlc3Npb24gcmVqZWN0ZWQuXCIpXHJcbiAgICAgICAgICAgIC8vIFRPRE8gZXJyb3IgY2FsbGJhY2tcclxuICAgICAgICAgICAgY2IobnVsbCk7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgY2IobnVsbCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIC8vIHN1Y2Nlc3NcclxuICAgICAgICBjYihsKTtcclxuICAgICAgfVxyXG4gICAgICBpZihkdW1teVN0cmVhbSl7XHJcbiAgICAgICAgdGhpcy5zdG9wQWxsU2Vzc2lvblRyYWNrcyhkdW1teVN0cmVhbSk7XHJcbiAgICAgIH1cclxuICAgIH0sKHJlYXNvbik9PiB7XHJcbiAgICAgIC8vcmVqZWN0ZWRcclxuICAgICAgLy9jb25zb2xlLmRlYnVnKFwiTWVkaWEgZGV2aWNlIGVudW1lcmF0aW9uIHJlamVjdGVkLlwiKVxyXG4gICAgICBpZiAocmV0cnkpIHtcclxuICAgICAgICAvL2NvbnNvbGUuZGVidWcoXCJTdGFydGluZyBkdW1teSBzZXNzaW9uIHRvIHJlcXVlc3QgYXVkaW8gcGVybWlzc2lvbnMuLi5cIilcclxuICAgICAgICB0aGlzLmR1bW15U2Vzc2lvbigpLnRoZW4oKHM6IE1lZGlhU3RyZWFtKSA9PiB7XHJcbiAgICAgICAgICAvLyBhbmQgc3RvcCBpdCBpbW1lZGlhdGVseVxyXG4gICAgICAgICAgLy9jb25zb2xlLmRlYnVnKFwiRHVtbXkgc2Vzc2lvbi5cIilcclxuICAgICAgICAgIGlmKHMpIHtcclxuICAgICAgICAgICAgLy9jb25zb2xlLmRlYnVnKFwiR290IGR1bW15IHNlc3Npb24gc3RyZWFtOiBcIiArIHMgKyBcIiAuXCIpXHJcbiAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgLy9jb25zb2xlLmRlYnVnKFwiTm8gZHVtbXkgc3RyZWFtXCIpXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICAvLyByZXRyeSAob25seSBvbmNlKVxyXG4gICAgICAgICAgdGhpcy5kZXZpY2VJbmZvcyhjYiwgZmFsc2Uscyk7XHJcbiAgICAgICAgfSwgcmVhc29uID0+IHtcclxuICAgICAgICAgIC8vY29uc29sZS5kZWJ1ZyhcIkR1bW15IHNlc3Npb24gcmVqZWN0ZWQuXCIpXHJcbiAgICAgICAgICAvLyBUT0RPIGVycm9yIGNhbGxiYWNrXHJcbiAgICAgICAgICBjYihudWxsKTtcclxuICAgICAgICB9KTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBjYihudWxsKTtcclxuICAgICAgfVxyXG4gICAgICBpZihkdW1teVN0cmVhbSl7XHJcbiAgICAgICAgdGhpcy5zdG9wQWxsU2Vzc2lvblRyYWNrcyhkdW1teVN0cmVhbSk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuXHJcblxyXG4gIH1cclxuXHJcblxyXG4gIHByaW50RGV2aWNlcyhsOiBNZWRpYURldmljZUluZm9bXSk6IHZvaWQge1xyXG4gICAgLy9sZXQgc2VsRGV2aWNlSWQgPSAnX19fZHVtbXlfX18nO1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGxldCBkaSA9IGxbaV07XHJcbiAgICAgIGNvbnNvbGUubG9nKFwiQXVkaW8gZGV2aWNlOiBJZDogXCIgKyBkaS5kZXZpY2VJZCArIFwiIGdyb3VwSWQ6IFwiICsgZGkuZ3JvdXBJZCArIFwiIGxhYmVsOiBcIiArIGRpLmxhYmVsICsgXCIga2luZDogXCIgKyBkaS5raW5kKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGFkZENhcHR1cmVJbnRlcmNlcHRvcigpIHtcclxuICAgIGlmICh0aGlzLmNvbnRleHQpIHtcclxuXHJcbiAgICBjb25zdCBhd24gPSBuZXcgQXVkaW9Xb3JrbGV0Tm9kZSh0aGlzLmNvbnRleHQsICdjYXB0dXJlLWludGVyY2VwdG9yJyk7XHJcbiAgICBhd24ub25wcm9jZXNzb3JlcnJvciA9IChldjogRXZlbnQpID0+IHtcclxuICAgICAgbGV0IG1zZyA9ICdVbmtud29uIGVycm9yJztcclxuICAgICAgaWYgKGV2IGluc3RhbmNlb2YgRXJyb3JFdmVudCkge1xyXG4gICAgICAgIG1zZyA9IGV2Lm1lc3NhZ2U7XHJcbiAgICAgIH1cclxuICAgICAgY29uc29sZS5lcnJvcihcIkNhcHR1cmUgYXVkaW8gd29ya2xldCBlcnJvcjogXCIgKyBtc2cpO1xyXG4gICAgICBpZiAodGhpcy5saXN0ZW5lcikge1xyXG4gICAgICAgIHRoaXMubGlzdGVuZXIuZXJyb3IobXNnKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgbGV0IGF3blB0ID0gYXduLnBvcnQ7XHJcbiAgICBpZiAoYXduUHQpIHtcclxuICAgICAgYXduUHQub25tZXNzYWdlID0gKGV2OiBNZXNzYWdlRXZlbnQpID0+IHtcclxuICAgICAgICBpZiAodGhpcy5jYXB0dXJpbmcpIHtcclxuICAgICAgICAgIGxldCBkdCA9IGV2LmRhdGE7XHJcbiAgICAgICAgICBsZXQgY2hzID0gZHQuY2hzO1xyXG4gICAgICAgICAgbGV0IGFkYUxlbiA9IGR0LmRhdGEubGVuZ3RoO1xyXG4gICAgICAgICAgaWYgKERFQlVHX1RSQUNFX0xFVkVMID4gOCkge1xyXG4gICAgICAgICAgICBjb25zb2xlLmRlYnVnKCdSZWNlaXZlZCBkYXRhIGZyb20gd29ya2xldDogJyArIGNocyArICcgJyArIGR0LmxlbiArICcgRGF0YSBjaHM6ICcgKyBhZGFMZW4pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgbGV0IGNodW5rID0gbmV3IEFycmF5PEZsb2F0MzJBcnJheT4oY2hzKTtcclxuICAgICAgICAgIGNvbnN0IHNhbXBsZXMgPSB0aGlzLmZyYW1lc1JlY29yZGVkICogY2hzO1xyXG4gICAgICAgICAgaWYgKChBdWRpb1N0b3JhZ2VUeXBlLk1FTV9FTlRJUkVfQVVUT19ORVRfQ0hVTktFRCA9PT0gdGhpcy5hdWRpb1N0b3JhZ2VUeXBlIHx8IEF1ZGlvU3RvcmFnZVR5cGUuTUVNX0NIVU5LRURfQVVUT19ORVRfQ0hVTktFRCA9PT0gdGhpcy5hdWRpb1N0b3JhZ2VUeXBlKSAmJiB0aGlzLmRhdGEgJiYgc2FtcGxlcyA+IHRoaXMuX21heEF1dG9OZXRNZW1TdG9yZVNhbXBsZXMpIHtcclxuICAgICAgICAgICAgdGhpcy5kYXRhID0gbnVsbDtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAvL2NvbnNvbGUuZGVidWcoXCJEYXRhIGluaXRpYWxpemVkOiBcIisodGhpcy5kYXRhIT1udWxsKSk7XHJcbiAgICAgICAgICBmb3IgKGxldCBjaCA9IDA7IGNoIDwgY2hzOyBjaCsrKSB7XHJcbiAgICAgICAgICAgIC8vY29uc29sZS5kZWJ1ZyhcIkRhdGEgY2ggaW5pdGlhbGl6ZWQ6IFwiKyh0aGlzLmRhdGEgIT1udWxsICYmIHRoaXMuZGF0YVtjaF0gIT1udWxsKSk7XHJcbiAgICAgICAgICAgIGlmIChjaCA8IHRoaXMuY2hhbm5lbENvdW50KSB7XHJcbiAgICAgICAgICAgICAgaWYgKGR0LmRhdGFbY2hdKSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgZmEgPSBuZXcgRmxvYXQzMkFycmF5KGR0LmRhdGFbY2hdKTtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmRhdGEgJiYgdGhpcy5kYXRhW2NoXSkge1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLmRhdGFbY2hdLnB1c2goZmEpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgY2h1bmtbY2hdID0gZmE7XHJcbiAgICAgICAgICAgICAgICAvLyBVc2Ugc2FtcGxlcyBvZiBjaGFubmVsIDAgdG8gY291bnQgZnJhbWVzIChzYW1wbGVzKVxyXG4gICAgICAgICAgICAgICAgaWYgKGNoID09IDApIHtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5mcmFtZXNSZWNvcmRlZCArPSBmYS5sZW5ndGg7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAodGhpcy5hdWRpb091dFN0cmVhbSkge1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgIHRoaXMuYXVkaW9PdXRTdHJlYW0ud3JpdGUoY2h1bmspO1xyXG4gICAgICAgICAgICAgIC8vIC8vIFJhbmRvbSB0ZXN0IGVycm9yOlxyXG4gICAgICAgICAgICAgIC8vIGlmKE1hdGgucmFuZG9tKCk+MC45OCkge1xyXG4gICAgICAgICAgICAgIC8vICAgdGhyb3cgbmV3IEVycm9yKCdUZXN0Jyk7XHJcbiAgICAgICAgICAgICAgLy8gfVxyXG4gICAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcclxuICAgICAgICAgICAgICBpZiAoZXJyIGluc3RhbmNlb2YgRXJyb3IpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMucGVyc2lzdEVycm9yID0gZXJyO1xyXG4gICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnBlcnNpc3RFcnJvciA9IG5ldyBFcnJvcignRXJyb3IgaGFuZGxpbmcgcmVjb3JkZWQgYXVkaW8gZGF0YScpO1xyXG4gICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcIkNhcHR1cmUgZXJyb3I6IFwiICsgZXJyKTtcclxuICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zdG9wKCk7XHJcbiAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyMikge1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcIkNhcHR1cmUgbmV4dCBlcnJvciAoaWdub3JlZCk6IFwiICsgZXJyMik7XHJcbiAgICAgICAgICAgICAgfSBmaW5hbGx5IHtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmxpc3RlbmVyKSB7XHJcbiAgICAgICAgICAgICAgICAgIGxldCBlcnJFeHBsID0gJyc7XHJcbiAgICAgICAgICAgICAgICAgIGlmIChlcnIgaW5zdGFuY2VvZiBET01FeGNlcHRpb24pIHtcclxuICAgICAgICAgICAgICAgICAgICBlcnJFeHBsID0gJzogJyArIGVyci5uYW1lICsgJzogJyArIGVyci5tZXNzYWdlO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMubGlzdGVuZXIuZXJyb3IoXCJDb3VsZCBub3QgaGFuZGxlIHJlY29yZGVkIGF1ZGlvIGRhdGFcIiArIGVyckV4cGwsIFwiUGxlYXNlIHRyeSB0byByZWNvcmQgYWdhaW4uXCIpO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5jbG9zZSgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKEF1ZGlvU3RvcmFnZVR5cGUuREJfQ0hVTktFRCA9PT0gdGhpcy5fYXVkaW9TdG9yYWdlVHlwZSAmJiB0aGlzLl9wZXJzaXN0ZW50QXVkaW9TdG9yYWdlVGFyZ2V0KSB7XHJcbiAgICAgICAgICAgIHRoaXMuc3RvcmUoKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH07XHJcbiAgICB9XHJcbiAgICAvLyBUcmllZCB0byBmaXggdGhhdCBTYWZhcmkgZG9lcyBub3QgcmVjb3JkIHRoZSBzZWNvbmQgY2hhbm5lbFxyXG4gICAgLy8gRG9lcyBub3QgaGVscFxyXG4gICAgLy9hd24uY2hhbm5lbENvdW50PXRoaXMuY2hhbm5lbENvdW50O1xyXG4gICAgLy9hd24uY2hhbm5lbENvdW50TW9kZT0nZXhwbGljaXQnO1xyXG4gICAgLy9jb25zb2xlLmRlYnVnKCdDaGFubmVsIGNvdW50IGV4cGxpY2l0bHkgc2V0IHRvICcrdGhpcy5jaGFubmVsQ291bnQpO1xyXG5cclxuICAgIHRoaXMuYnVmZmVyaW5nTm9kZSA9IGF3bjtcclxuICAgIC8vdGhpcy5idWZmZXJpbmdOb2RlLmNoYW5uZWxDb3VudD10aGlzLmNoYW5uZWxDb3VudDtcclxuICAgIHRoaXMuX29wZW5lZCA9IHRydWU7XHJcbiAgICBpZiAodGhpcy5saXN0ZW5lcikge1xyXG4gICAgICB0aGlzLmxpc3RlbmVyLm9wZW5lZCgpO1xyXG4gICAgfVxyXG4gIH1cclxuICB9XHJcblxyXG4gIG9wZW4oY2hhbm5lbENvdW50OiBudW1iZXIsIHNlbERldmljZUlkPzogQ29uc3RyYWluRE9NU3RyaW5nfHVuZGVmaW5lZCxhdXRvR2FpbkNvbnRyb2xDb25maWdzPzpBcnJheTxBdXRvR2FpbkNvbnRyb2xDb25maWc+fG51bGx8dW5kZWZpbmVkLGFsbG93RWNob0NhbmNlbGxhdGlvbj86Ym9vbGVhbil7XHJcbiAgICAvL2NvbnNvbGUuZGVidWcoXCJDYXB0dXJlIG9wZW46IGN0eCBzdGF0ZTogXCIrdGhpcy5jb250ZXh0LnN0YXRlKTtcclxuICAgIHRoaXMuY29udGV4dD10aGlzLl9hdWRpb0NvbnRleHQoKTtcclxuICAgIGlmKCF0aGlzLmNvbnRleHQpe1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDb3VsZCBub3QgZ2V0IGF1ZGlvIGNvbnRleHQhXCIpO1xyXG4gICAgfVxyXG4gICAgaWYodGhpcy5jb250ZXh0LnN0YXRlPT09J3N1c3BlbmRlZCcpe1xyXG4gICAgICAvL2NvbnNvbGUuZGVidWcoXCJDYXB0dXJlIG9wZW46IFJlc3VtZSBjb250ZXh0XCIpO1xyXG4gICAgICB0aGlzLmNvbnRleHQucmVzdW1lKCkudGhlbigoKT0+e1xyXG4gICAgICAgIC8vY29uc29sZS5kZWJ1ZyhcIkNhcHR1cmUgb3BlbiAoY3R4IHJlc3VtZWQpOiBjdHggc3RhdGU6IFwiK3RoaXMuY29udGV4dC5zdGF0ZSk7XHJcbiAgICAgICAgdGhpcy5fb3BlbihjaGFubmVsQ291bnQsIHNlbERldmljZUlkLCBhdXRvR2FpbkNvbnRyb2xDb25maWdzLGFsbG93RWNob0NhbmNlbGxhdGlvbik7XHJcbiAgICAgIH0pLmNhdGNoKChlcnIpPT57XHJcbiAgICAgICAgY29uc29sZS5lcnJvcihlcnIubWVzc2FnZSk7XHJcbiAgICAgICAgdGhyb3cgZXJyO1xyXG4gICAgICB9KVxyXG4gICAgfWVsc2UgaWYodGhpcy5jb250ZXh0LnN0YXRlPT09J2Nsb3NlZCcpIHtcclxuICAgICAgICBjb25zdCBtc2c9J0Vycm9yIG9uIHN0YXJ0IGNhcHR1cmU6IFRoZSBhdWRpbyBjb250ZXh0IGlzIGFscmVhZHkgY2xvc2VkLic7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcihtc2cpO1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihtc2cpO1xyXG4gICAgfWVsc2Uge1xyXG4gICAgICB0aGlzLl9vcGVuKGNoYW5uZWxDb3VudCwgc2VsRGV2aWNlSWQsIGF1dG9HYWluQ29udHJvbENvbmZpZ3MsYWxsb3dFY2hvQ2FuY2VsbGF0aW9uKTtcclxuICAgIH1cclxuXHJcbiAgfVxyXG5cclxuICBfb3BlbihjaGFubmVsQ291bnQ6IG51bWJlciwgc2VsRGV2aWNlSWQ/OiBDb25zdHJhaW5ET01TdHJpbmd8dW5kZWZpbmVkLGF1dG9HYWluQ29udHJvbENvbmZpZ3M/OkFycmF5PEF1dG9HYWluQ29udHJvbENvbmZpZz58bnVsbHx1bmRlZmluZWQsYWxsb3dFY2hvQ2FuY2VsbGF0aW9uPzpib29sZWFuKSB7XHJcbiAgICB0aGlzLmNoYW5uZWxDb3VudCA9IGNoYW5uZWxDb3VudDtcclxuICAgIHRoaXMuZnJhbWVzUmVjb3JkZWQgPSAwO1xyXG5cclxuICAgIHRoaXMuY29udGV4dD10aGlzLl9hdWRpb0NvbnRleHQoKTtcclxuXHJcbiAgICBpZighdGhpcy5jb250ZXh0KXtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ291bGQgbm90IGdldCBhdWRpbyBjb250ZXh0IVwiKTtcclxuICAgIH1cclxuXHJcbiAgICAvL3ZhciBtc2MgPSBuZXcgQXVkaW9TdHJlYW1Db25zdHIoKTtcclxuICAgIC8vIHZhciBtc2M9e307XHJcbiAgICAvL21zYy52aWRlbyA9IGZhbHNlO1xyXG4gICAgLy9tc2MuYXVkaW8gPSB0cnVlO1xyXG5cclxuICAgIC8vIENocm9tZSBhbmQgRmlyZWZveCBzdGVyZW8gY2hhbm5lbHMgYXJlIGlkZW50aWNhbCAhIVxyXG4gICAgLy8gQW5kIGV2ZW4gd29yc2U6IFRoZSBkYXRhIGNvbWluZyBmcm9tIHRoZSBzb3VyY2UgaXMgYWxyZWFkeSBwcmVwcm9jZXNzZWQgb24gRkYgYW5kIENocm9tZS4gSXQgY29udGFpbnMgRFNQIGFydGlmYWN0cyEhXHJcblxyXG4gICAgLy8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL2Nocm9taXVtL2lzc3Vlcy9kZXRhaWw/aWQ9Mzg3NzM3XHJcbiAgICAvLyBUaGUgd29ya2Fyb3VuZCB0byBzZXQgdGhlc2UgY29uc3RyYWludHMgZG9lcyBfTk9UXyBoZWxwOlxyXG4gICAgLy92YXIgbXNjPXthdWRpbzoge2VjaG9DYW5jZWxsYXRpb246IGZhbHNlLGNoYW5uZWxDb3VudDogMiwgZ29vZ0F1ZGlvTWlycm9yaW5nOiBmYWxzZX0sdmlkZW86IGZhbHNlfTtcclxuXHJcbiAgICAvLyBTYWZhcmkgYXQgbGVhc3QgdmVyc2lvbiAxMTogU3VwcG9ydCBmb3IgbWVkaWEgc3RyZWFtc1xyXG4gICAgLy8gVE9ETyB0ZXN0IGlmIGlucHV0IGlzIHVucHJvY2Vzc2VkXHJcblxyXG4gICAgbGV0IG1zYzpNZWRpYVN0cmVhbUNvbnN0cmFpbnRzO1xyXG4gICAgY29uc29sZS5pbmZvKCdVc2VyIGFnZW50OiAnK25hdmlnYXRvci51c2VyQWdlbnQpO1xyXG5cclxuXHJcbiAgICAgIGxldCB1YT1Vc2VyQWdlbnRCdWlsZGVyLnVzZXJBZ2VudCgpO1xyXG5cclxuICAgICAgLy8gdWEuY29tcG9uZW50cy5mb3JFYWNoKChjKT0+e1xyXG4gICAgICAvLyAgIGNvbnNvbGUuaW5mbyhcIlVBX0NvbXA6IFwiK2MudG9TdHJpbmcoKSk7XHJcbiAgICAgIC8vIH0pXHJcblxyXG4gICAgIGxldCBhZ2NDZmc6QXV0b0dhaW5Db250cm9sQ29uZmlnfG51bGw9bnVsbDtcclxuXHJcbiAgICBsZXQgYXV0b0dhaW5Db250cm9sPWZhbHNlO1xyXG4gICAgbGV0IGNocm9tZUVjaG9DYW5jZWxsYXRpb249ZmFsc2U7XHJcbiAgICBpZihhdXRvR2FpbkNvbnRyb2xDb25maWdzKXtcclxuICAgICAgZm9yKGxldCBhZ2NjIG9mIGF1dG9HYWluQ29udHJvbENvbmZpZ3Mpe1xyXG4gICAgICAgIGlmKGFnY2MucGxhdGZvcm09PT1DZmdQbGF0Zm9ybS5BbmRyb2lkICYmIHVhLmRldGVjdGVkUGxhdGZvcm09PT1QbGF0Zm9ybS5BbmRyb2lkKXtcclxuICAgICAgICAgICAgYWdjQ2ZnPWFnY2M7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZihhZ2NjLnBsYXRmb3JtPT09Q2ZnUGxhdGZvcm0uV2luZG93cyAmJiB1YS5kZXRlY3RlZFBsYXRmb3JtPT09UGxhdGZvcm0uV2luZG93cyl7XHJcbiAgICAgICAgICBhZ2NDZmc9YWdjYztcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBpZihhZ2NDZmcpe1xyXG4gICAgICAgIC8vIFRPRE8gdXNlIEVYQUNUL0lERUFMIGNvbnN0cmFpbnRcclxuICAgICAgICBhdXRvR2FpbkNvbnRyb2w9YWdjQ2ZnLnZhbHVlO1xyXG4gICAgICAgIGlmKENIUk9NRV9BQ1RJVkFURV9FQ0hPX0NBTkNFTExBVElPTl9XSVRIX0FHQyl7XHJcbiAgICAgICAgICBjaHJvbWVFY2hvQ2FuY2VsbGF0aW9uPWFnY0NmZy52YWx1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gVE9ETyBxdWVyeSByZWFsIEFHQyBzdGF0dXNcclxuICAgICAgICB0aGlzLmFnY1N0YXR1cz1hZ2NDZmcudmFsdWU7XHJcbiAgICAgIH1lbHNle1xyXG4gICAgICAgIHRoaXMuYWdjU3RhdHVzPWZhbHNlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gZGVmYXVsdFxyXG4gICAgbXNjID0ge1xyXG4gICAgICBhdWRpbzoge1xyXG4gICAgICAgIGRldmljZUlkOiBzZWxEZXZpY2VJZCxcclxuICAgICAgICBlY2hvQ2FuY2VsbGF0aW9uOiBmYWxzZSxcclxuICAgICAgICBjaGFubmVsQ291bnQ6IGNoYW5uZWxDb3VudCxcclxuICAgICAgICBhdXRvR2FpbkNvbnRyb2w6IGF1dG9HYWluQ29udHJvbFxyXG4gICAgICB9LFxyXG4gICAgICB2aWRlbzogZmFsc2VcclxuICAgIH07XHJcblxyXG4gICAgaWYgKHVhLmRldGVjdGVkQnJvd3Nlcj09PUJyb3dzZXIuRWRnZSkge1xyXG5cclxuICAgICAgLy8gTWljcm9zb2Z0IEVkZ2Ugc2VuZHMgdW5tb2RpZmllZCBhdWRpb1xyXG4gICAgICAvLyBUaGUgY29uc3RyYWludCBjYW4gZm9sbG93IHRoZSBzcGVjaWZpY2F0aW9uXHJcbiAgICAgIGNvbnNvbGUuaW5mbyhcIlNldHRpbmcgbWVkaWEgdHJhY2sgY29uc3RyYWludHMgZm9yIE1pY3Jvc29mdCBFZGdlLlwiKTtcclxuICAgICAgbXNjID0ge1xyXG4gICAgICAgIGF1ZGlvOiB7XHJcbiAgICAgICAgICBkZXZpY2VJZDogc2VsRGV2aWNlSWQsXHJcbiAgICAgICAgICBlY2hvQ2FuY2VsbGF0aW9uOiBmYWxzZSxcclxuICAgICAgICAgIGNoYW5uZWxDb3VudDogY2hhbm5lbENvdW50LFxyXG4gICAgICAgICAgYXV0b0dhaW5Db250cm9sOiBhdXRvR2FpbkNvbnRyb2xcclxuICAgICAgICB9LFxyXG4gICAgICAgIHZpZGVvOiBmYWxzZVxyXG4gICAgICB9O1xyXG4gICAgfSBlbHNlIGlmICh1YS5kZXRlY3RlZEJyb3dzZXI9PT1Ccm93c2VyLkNocm9tZSkge1xyXG4gICAgICAvLyBHb29nbGUgQ2hyb21lOiB3ZSBuZWVkIHRvIHN3aXRjaCBvZiBlYWNoIG9mIHRoZSBwcmVwcm9jZXNzaW5nIHVuaXRzIGluY2x1ZGluZyB0aGVcclxuICAgICAgY29uc29sZS5pbmZvKFwiU2V0dGluZyBtZWRpYSB0cmFjayBjb25zdHJhaW50cyBmb3IgR29vZ2xlIENocm9tZS5cIik7XHJcblxyXG4gICAgICAvLyBDaHJvbWUgNjAgLT4gNjEgY2hhbmdlZFxyXG4gICAgICAvLyBpdCB3b3JrcyBub3cgd2l0aG91dCBtYW5kYXRvcnkvb3B0aW9uYWwgc3ViLW9iamVjdHNcclxuXHJcblxyXG4gICAgICAvLyBSZXF1aXJlcyBhdCBsZWFzdCBDaHJvbWUgNjFcclxuICAgICAgbXNjID0ge1xyXG4gICAgICAgIGF1ZGlvOiB7XHJcbiAgICAgICAgICBkZXZpY2VJZDogc2VsRGV2aWNlSWQsXHJcbiAgICAgICAgICBjaGFubmVsQ291bnQ6IGNoYW5uZWxDb3VudCxcclxuICAgICAgICAgIGVjaG9DYW5jZWxsYXRpb246IHtleGFjdDpjaHJvbWVFY2hvQ2FuY2VsbGF0aW9ufSxcclxuICAgICAgICAgIGF1dG9HYWluQ29udHJvbDoge2V4YWN0OmF1dG9HYWluQ29udHJvbH0sXHJcbiAgICAgICAgICBzYW1wbGVTaXplOnttaW46IDE2fSxcclxuICAgICAgICB9LFxyXG4gICAgICAgIHZpZGVvOiBmYWxzZSxcclxuICAgICAgfVxyXG5cclxuICAgIH0gZWxzZSBpZiAodWEuZGV0ZWN0ZWRCcm93c2VyPT09QnJvd3Nlci5GaXJlZm94KSB7XHJcbiAgICAgIGNvbnNvbGUuaW5mbyhcIlNldHRpbmcgbWVkaWEgdHJhY2sgY29uc3RyYWludHMgZm9yIE1vemlsbGEgRmlyZWZveC5cIik7XHJcbiAgICAgIC8vIEZpcmVmb3hcclxuICAgICAgbXNjID0ge1xyXG4gICAgICAgIGF1ZGlvOiB7XHJcbiAgICAgICAgICAgIGRldmljZUlkOiBzZWxEZXZpY2VJZCxcclxuICAgICAgICAgICAgY2hhbm5lbENvdW50OiBjaGFubmVsQ291bnQsXHJcbiAgICAgICAgICBlY2hvQ2FuY2VsbGF0aW9uOiBmYWxzZSxcclxuICAgICAgICAgICAgYXV0b0dhaW5Db250cm9sOiBhdXRvR2FpbkNvbnRyb2wsXHJcbiAgICAgICAgICBub2lzZVN1cHByZXNzaW9uOiBmYWxzZVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgdmlkZW86IGZhbHNlLFxyXG4gICAgICB9XHJcblxyXG4gICAgfSBlbHNlIGlmICh1YS5kZXRlY3RlZEJyb3dzZXI9PT1Ccm93c2VyLlNhZmFyaSkge1xyXG4gICAgICBjb25zb2xlLmluZm8oXCJTZXR0aW5nIG1lZGlhIHRyYWNrIGNvbnN0cmFpbnRzIGZvciBTYWZhcmkgYnJvd3Nlci5cIilcclxuICAgICAgLy9jb25zb2xlLmluZm8oXCJBcHBseSB3b3JrYXJvdW5kIGZvciBTYWZhcmk6IEF2b2lkIGRpc2Nvbm5lY3Qgb2Ygc3RyZWFtcy5cIik7XHJcblxyXG4gICAgICB0aGlzLmRpc2Nvbm5lY3RTdHJlYW1zID0gdHJ1ZTtcclxuXHJcbiAgICAgIG1zYyA9IHtcclxuICAgICAgICBhdWRpbzoge1xyXG4gICAgICAgICAgZGV2aWNlSWQ6IHNlbERldmljZUlkLFxyXG4gICAgICAgICAgY2hhbm5lbENvdW50OiBjaGFubmVsQ291bnQsXHJcbiAgICAgICAgICBlY2hvQ2FuY2VsbGF0aW9uOiBhbGxvd0VjaG9DYW5jZWxsYXRpb24/dW5kZWZpbmVkOmZhbHNlXHJcbiAgICAgICAgfSxcclxuICAgICAgICB2aWRlbzogZmFsc2UsXHJcbiAgICAgIH1cclxuXHJcbiAgICB9IGVsc2Uge1xyXG5cclxuICAgICAgLy8gVE9ETyBkZWZhdWx0IGNvbnN0cmFpbnRzIG9yIGVycm9yIEJyb3dzZXIgbm90IHN1cHBvcnRlZFxyXG4gICAgfVxyXG5cclxuXHJcblxyXG4gICAgY29uc29sZS5kZWJ1ZyhcIkF1ZGlvIGNhcHR1cmUsIEFHQzogXCIrdGhpcy5hZ2NTdGF0dXMpXHJcblxyXG4gICAgbGV0IHVtcCA9IG5hdmlnYXRvci5tZWRpYURldmljZXMuZ2V0VXNlck1lZGlhKG1zYyk7XHJcbiAgICB1bXAudGhlbigocykgPT4ge1xyXG5cclxuICAgICAgaWYgKHRoaXMuY29udGV4dCkge1xyXG4gICAgICB0aGlzLnN0cmVhbSA9IHM7XHJcblxyXG4gICAgICBsZXQgYVRyYWNrcyA9IHMuZ2V0QXVkaW9UcmFja3MoKTtcclxuXHJcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYVRyYWNrcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGxldCBhVHJhY2sgPSBhVHJhY2tzW2ldO1xyXG5cclxuICAgICAgICBjb25zb2xlLmluZm8oXCJUcmFjayBhdWRpbyBpbmZvOiBpZDogXCIgKyBhVHJhY2suaWQgKyBcIiBraW5kOiBcIiArIGFUcmFjay5raW5kICsgXCIgbGFiZWw6IFxcXCJcIiArIGFUcmFjay5sYWJlbCArIFwiXFxcIlwiKTtcclxuICAgICAgICBsZXQgbXRyU3RzID0gYVRyYWNrLmdldFNldHRpbmdzKCk7XHJcblxyXG4gICAgICAgIC8vIFR5cGVzY3JpcHQgbGliLmRvbS50cyBNZWRpYVRyYWNrU2V0dGluZ3MuY2hhbm5lbENvdW50IGlzIG1pc3NpbmdcclxuICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vbWRuL2Jyb3dzZXItY29tcGF0LWRhdGEvYmxvYi81NDkzZDhmOTM3ZTA1YjJkZGJkNDFiOTlmNWJkZmFkNGExZjJlZDg1L2FwaS9NZWRpYVRyYWNrU2V0dGluZ3MuanNvblxyXG4gICAgICAgIC8vQHRzLWlnbm9yZVxyXG4gICAgICAgIGNvbnNvbGUuaW5mbyhcIlRyYWNrIGF1ZGlvIHNldHRpbmdzOiBDaCBjbnQ6IFwiICsgbXRyU3RzLmNoYW5uZWxDb3VudCArIFwiLCBBR0M6IFwiICsgbXRyU3RzLmF1dG9HYWluQ29udHJvbCArIFwiLCBFY2hvIGNhbmNlbGwuOiBcIiArIG10clN0cy5lY2hvQ2FuY2VsbGF0aW9uKTtcclxuICAgICAgICBpZiAobXRyU3RzLmF1dG9HYWluQ29udHJvbCkge1xyXG4gICAgICAgICAgdGhpcy5hZ2NTdGF0dXMgPSBtdHJTdHMuYXV0b0dhaW5Db250cm9sO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc29sZS5kZWJ1ZyhcIkVjaG8gY2FuY2VsbGF0aW9uOiBcIittdHJTdHMuZWNob0NhbmNlbGxhdGlvbik7XHJcblxyXG4gICAgICB9XHJcblxyXG4gICAgICBsZXQgdlRyYWNrcyA9IHMuZ2V0VmlkZW9UcmFja3MoKTtcclxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB2VHJhY2tzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgbGV0IHZUcmFjayA9IHZUcmFja3NbaV07XHJcbiAgICAgICAgY29uc29sZS5pbmZvKFwiVHJhY2sgdmlkZW8gaW5mbzogaWQ6IFwiICsgdlRyYWNrLmlkICsgXCIga2luZDogXCIgKyB2VHJhY2sua2luZCArIFwiIGxhYmVsOiBcIiArIHZUcmFjay5sYWJlbCk7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5tZWRpYVN0cmVhbSA9IHRoaXMuY29udGV4dC5jcmVhdGVNZWRpYVN0cmVhbVNvdXJjZShzKTtcclxuICAgICAgLy8gc3RyZWFtIGNoYW5uZWwgY291bnQgKCBpcyBhbHdheXMgMiAhKVxyXG4gICAgICBsZXQgc3RyZWFtQ2hhbm5lbENvdW50OiBudW1iZXIgPSB0aGlzLm1lZGlhU3RyZWFtLmNoYW5uZWxDb3VudDtcclxuICAgICAgY29uc29sZS5pbmZvKFwiU3RyZWFtIGNoYW5uZWwgY291bnQ6IFwiICsgc3RyZWFtQ2hhbm5lbENvdW50KTtcclxuICAgICAgLy8gaXMgbm90IHNldCEhXHJcbiAgICAgIC8vdGhpcy5jdXJyZW50U2FtcGxlUmF0ZSA9IHRoaXMubWVkaWFTdHJlYW0uc2FtcGxlUmF0ZTtcclxuICAgICAgdGhpcy5jdXJyZW50U2FtcGxlUmF0ZSA9IHRoaXMuY29udGV4dC5zYW1wbGVSYXRlO1xyXG4gICAgICBjb25zb2xlLmluZm8oXCJTb3VyY2UgYXVkaW8gbm9kZTogY2hhbm5lbHM6IFwiICsgc3RyZWFtQ2hhbm5lbENvdW50ICsgXCIgc2FtcGxlcmF0ZTogXCIgKyB0aGlzLmN1cnJlbnRTYW1wbGVSYXRlKTtcclxuICAgICAgaWYgKHRoaXMuYXVkaW9PdXRTdHJlYW0pIHtcclxuICAgICAgICB0aGlzLmF1ZGlvT3V0U3RyZWFtLnNldEZvcm1hdCh0aGlzLmNoYW5uZWxDb3VudCwgdGhpcy5jdXJyZW50U2FtcGxlUmF0ZSk7XHJcbiAgICAgIH1cclxuICAgICAgLy8gVzNDICAtPiBuZXcgbmFtZSBpcyBjcmVhdGVTY3JpcHRQcm9jZXNzb3JcclxuICAgICAgLy9cclxuICAgICAgLy8gQWdhaW4gZGVwcmVjYXRlZCwgYnV0IEF1ZGlvV29ya2VyIG5vdCB5ZXQgaW1wbGVtZW50ZWQgaW4gc3RhYmxlIHJlbGVhc2VzIChKdW5lIDIwMTYpXHJcbiAgICAgIC8vIEF1ZGlvV29ya2VyIGlzIG5vdyBBdWRpb1dvcmtsZXRQcm9jZXNzb3IgLi4uIChNYXkgMjAxNylcclxuXHJcbiAgICAgIC8vIFVwZGF0ZSAxMi0yMDIwOlxyXG4gICAgICAvLyBUaGUgU2NyaXB0UHJvY2Vzc29yTm9kZSBJbnRlcmZhY2UgLSBERVBSRUNBVEVEXHJcblxyXG4gICAgICAvLyBVcGRhdGUgMDYtMjAyMVxyXG4gICAgICAvLyAgQXVkaW9Xb3JrbGV0UHJvY2Vzc29yIGlzIGhlcmUgdG8gc3RheS4gV2ViIEF1ZGlvIEFQSSBoYXMgbm93IFJlY29tbWVuZGF0aW9uIHN0YXR1cyAhXHJcblxyXG4gICAgICBpZiAodGhpcy5jb250ZXh0LmF1ZGlvV29ya2xldCkge1xyXG4gICAgICAgIC8vY29uc3Qgd29ya2xldEZpbGVOYW1lID0gKCdmaWxlLWxvYWRlciEuL2ludGVyY2VwdG9yX3dvcmtsZXQuanMnKTtcclxuICAgICAgICAvL2NvbnN0IHdvcmtsZXRGaWxlTmFtZSA9ICdodHRwOi8vbG9jYWxob3N0OjQyMDAvYXNzZXRzL2ludGVyY2VwdG9yX3dvcmtsZXQuanMnO1xyXG4gICAgICAgIC8vY29uc29sZS5sb2coYXdwU3RyKTtcclxuICAgICAgICBpZiAoQXVkaW9DYXB0dXJlLmNhcHR1cmVJbnRlcmNlcHRvck1vZHVsZVJlZ2lzdGVyZWQpIHtcclxuICAgICAgICAgIC8vIFJlcXVpcmVkIGNhcHR1cmUgaW50ZXJjZXB0b3IgbW9kdWxlIGFscmVhZHkgcmVnaXN0ZXJlZFxyXG4gICAgICAgICAgdGhpcy5hZGRDYXB0dXJlSW50ZXJjZXB0b3IoKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG5cclxuICAgICAgICAgIC8vIFJlZ2lzdGVyIGNhcHR1cmUgaW50ZXJjZXB0b3IgbW9kdWxlXHJcbiAgICAgICAgICBsZXQgYXVkaW9Xb3JrbGV0TW9kdWxlQmxvYiA9IG5ldyBCbG9iKFthd3BTdHJdLCB7dHlwZTogJ3RleHQvamF2YXNjcmlwdCd9KTtcclxuXHJcbiAgICAgICAgICBsZXQgYXVkaW9Xb3JrbGV0TW9kdWxlQmxvYlVybCA9IHdpbmRvdy5VUkwuY3JlYXRlT2JqZWN0VVJMKGF1ZGlvV29ya2xldE1vZHVsZUJsb2IpO1xyXG5cclxuICAgICAgICAgIHRoaXMuY29udGV4dC5hdWRpb1dvcmtsZXQuYWRkTW9kdWxlKGF1ZGlvV29ya2xldE1vZHVsZUJsb2JVcmwpLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgQXVkaW9DYXB0dXJlLmNhcHR1cmVJbnRlcmNlcHRvck1vZHVsZVJlZ2lzdGVyZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5hZGRDYXB0dXJlSW50ZXJjZXB0b3IoKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICApLmNhdGNoKChlcnJvcjogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdDb3VsZCBub3QgYWRkIG1vZHVsZSAnICsgZXJyb3IpO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2UgaWYgKHRoaXMuY29udGV4dC5jcmVhdGVTY3JpcHRQcm9jZXNzb3IpIHtcclxuICAgICAgICAvLyBUaGUgU2NyaXB0UHJvY2Vzc29yTm9kZSBJbnRlcmZhY2UgLSBERVBSRUNBVEVEIE9ubHkgYXMgZmFsbGJhY2tcclxuICAgICAgICAvLyBUT0RPIHNob3VsZCB3ZSB1c2Ugc3RyZWFtQ2hhbm5lbENvdW50IG9yIGNoYW5uZWxDb3VudCBoZXJlID9cclxuICAgICAgICBsZXQgc2NyaXB0UHJvY2Vzc29yTm9kZSA9IHRoaXMuY29udGV4dC5jcmVhdGVTY3JpcHRQcm9jZXNzb3IoQXVkaW9DYXB0dXJlLkJVRkZFUl9TSVpFLCBzdHJlYW1DaGFubmVsQ291bnQsIHN0cmVhbUNoYW5uZWxDb3VudCk7XHJcbiAgICAgICAgdGhpcy5idWZmZXJpbmdOb2RlID0gc2NyaXB0UHJvY2Vzc29yTm9kZTtcclxuICAgICAgICBsZXQgYyA9IDA7XHJcbiAgICAgICAgaWYgKHNjcmlwdFByb2Nlc3Nvck5vZGUub25hdWRpb3Byb2Nlc3MpIHtcclxuICAgICAgICAgIHNjcmlwdFByb2Nlc3Nvck5vZGUub25hdWRpb3Byb2Nlc3MgPSAoZTogQXVkaW9Qcm9jZXNzaW5nRXZlbnQpID0+IHtcclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLmNhcHR1cmluZykge1xyXG4gICAgICAgICAgICAgIGxldCBpbkJ1ZmZlciA9IGUuaW5wdXRCdWZmZXI7XHJcbiAgICAgICAgICAgICAgLy8gb25seSBwcm9jZXNzIHJlcXVlc3RlZCBjb3VudCBvZiBjaGFubmVsc1xyXG4gICAgICAgICAgICAgIGxldCBjdXJyZW50QnVmZmVycyA9IG5ldyBBcnJheTxGbG9hdDMyQXJyYXk+KGNoYW5uZWxDb3VudCk7XHJcbiAgICAgICAgICAgICAgZm9yIChsZXQgY2g6IG51bWJlciA9IDA7IGNoIDwgY2hhbm5lbENvdW50OyBjaCsrKSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgY2hTYW1wbGVzID0gaW5CdWZmZXIuZ2V0Q2hhbm5lbERhdGEoY2gpO1xyXG4gICAgICAgICAgICAgICAgbGV0IGNoU2FtcGxlc0NvcHkgPSBjaFNhbXBsZXMuc2xpY2UoMCk7XHJcbiAgICAgICAgICAgICAgICBjdXJyZW50QnVmZmVyc1tjaF0gPSBjaFNhbXBsZXNDb3B5LnNsaWNlKDApO1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuZGF0YSkge1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLmRhdGFbY2hdLnB1c2goY2hTYW1wbGVzQ29weSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAoREVCVUdfVFJBQ0VfTEVWRUwgPiA4KSB7XHJcbiAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZGVidWcoXCJQcm9jZXNzIFwiICsgY2hTYW1wbGVzQ29weS5sZW5ndGggKyBcIiBzYW1wbGVzLlwiKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRoaXMuZnJhbWVzUmVjb3JkZWQgKz0gY2hTYW1wbGVzQ29weS5sZW5ndGg7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGMrKztcclxuICAgICAgICAgICAgICBpZiAodGhpcy5hdWRpb091dFN0cmVhbSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5hdWRpb091dFN0cmVhbS53cml0ZShjdXJyZW50QnVmZmVycyk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgICAgdGhpcy5fb3BlbmVkID0gdHJ1ZTtcclxuICAgICAgICAgIGlmICh0aGlzLmxpc3RlbmVyKSB7XHJcbiAgICAgICAgICAgIHRoaXMubGlzdGVuZXIub3BlbmVkKCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMubGlzdGVuZXIuZXJyb3IoJ0Jyb3dzZXIgZG9lcyBub3Qgc3VwcG9ydCBhdWRpbyBwcm9jZXNzaW5nIChTY3JpcHRQcm9jZXNzb3Iub25hdWRpb3Byb2Nlc3MgbWV0aG9kIG5vdCBmb3VuZCkhJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMubGlzdGVuZXIuZXJyb3IoJ0Jyb3dzZXIgZG9lcyBub3Qgc3VwcG9ydCBhdWRpbyBwcm9jZXNzaW5nIChuZWl0aGVyIEF1ZGlvV29ya2xldFByb2Nlc3NvciBub3IgU2NyaXB0UHJvY2Vzc29yKSEnKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgICAgIH0sIChlKSA9PiB7XHJcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGUgKyBcIiBFcnJvciBuYW1lOiBcIiArZS5uYW1lKTtcclxuICAgICAgICAgIGlmICh0aGlzLmxpc3RlbmVyKSB7XHJcbiAgICAgICAgICAgIGlmKCdOb3RBbGxvd2VkRXJyb3InID09PSBlLm5hbWUpe1xyXG4gICAgICAgICAgICAgIHRoaXMubGlzdGVuZXIuZXJyb3IoJ05vdCBhbGxvd2VkIHRvIHVzZSB5b3VyIG1pY3JvcGhvbmUuJywnUGxlYXNlIG1ha2Ugc3VyZSB0aGF0IG1pY3JvcGhvbmUgYWNjZXNzIGlzIGFsbG93ZWQgZm9yIHRoaXMgd2ViIHBhZ2UgYW5kIHJlbG9hZCB0aGUgcGFnZS4nKTtcclxuICAgICAgICAgICAgfWVsc2UgaWYoJ05vdFJlYWRhYmxlRXJyb3InID09PSBlLm5hbWUpe1xyXG4gICAgICAgICAgICAgIHRoaXMubGlzdGVuZXIuZXJyb3IoJ0NvdWxkIG5vdCByZWFkIGZyb20geW91ciBhdWRpbyBkZXZpY2UuJywnUGxlYXNlIG1ha2Ugc3VyZSB5b3VyIGF1ZGlvIGRldmljZSBpcyB3b3JraW5nLicpO1xyXG4gICAgICAgICAgICB9ZWxzZSBpZignT3ZlcmNvbnN0cmFpbmVkRXJyb3InID09PSBlLm5hbWUpe1xyXG4gICAgICAgICAgICAgIGxldCBlTXNnPWUubXNnP2UubXNnOidPdmVyY29uc3RyYWluZWQgbWVkaWEgZGV2aWNlIHJlcXVlc3QgZXJyb3IuJztcclxuICAgICAgICAgICAgICB0aGlzLmxpc3RlbmVyLmVycm9yKGVNc2cpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIHRoaXMubGlzdGVuZXIuZXJyb3IoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIClcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3N0YXJ0KCl7XHJcbiAgICBpZih0aGlzLmNvbnRleHQpIHtcclxuICAgICAgdGhpcy5pbml0RGF0YSgpO1xyXG4gICAgICBpZiAodGhpcy5hdWRpb091dFN0cmVhbSkge1xyXG4gICAgICAgIHRoaXMuYXVkaW9PdXRTdHJlYW0ubmV4dFN0cmVhbSgpXHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5jYXB0dXJpbmcgPSB0cnVlO1xyXG4gICAgICBpZiAodGhpcy5idWZmZXJpbmdOb2RlKSB7XHJcbiAgICAgICAgdGhpcy5tZWRpYVN0cmVhbS5jb25uZWN0KHRoaXMuYnVmZmVyaW5nTm9kZSk7XHJcbiAgICAgICAgdGhpcy5idWZmZXJpbmdOb2RlLmNvbm5lY3QodGhpcy5jb250ZXh0LmRlc3RpbmF0aW9uKTtcclxuICAgICAgfVxyXG4gICAgICBpZiAodGhpcy5saXN0ZW5lcikge1xyXG4gICAgICAgIHRoaXMubGlzdGVuZXIuc3RhcnRlZCgpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzdGFydCgpIHtcclxuICAgIGlmKHRoaXMuY29udGV4dCkge1xyXG4gICAgICBjb25zdCBhU3QgPSB0aGlzLmNvbnRleHQuc3RhdGU7XHJcbiAgICAgIGlmIChhU3QgPT09ICdydW5uaW5nJykge1xyXG4gICAgICAgIHRoaXMuX3N0YXJ0KCk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgY29uc29sZS5kZWJ1ZyhcIkNhcHR1cmUgc3RhcnQ6IGF1ZGlvIGNvbnRleHQgbm90IHJ1bm5pbmcsIHN0YXRlOiBcIiArIGFTdCArIFwiLCByZXN1bWluZy4uLlwiKTtcclxuICAgICAgICB0aGlzLmNvbnRleHQucmVzdW1lKCkudGhlbigoKSA9PiB7XHJcbiAgICAgICAgICBjb25zb2xlLmRlYnVnKFwiQ2FwdHVyZSBzdGFydDogYXVkaW8gY29udGV4dCByZXN1bWVkLCBzdGFydGluZy4uLlwiKTtcclxuICAgICAgICAgIHRoaXMuX3N0YXJ0KCk7XHJcbiAgICAgICAgfSlcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc3RvcCgpIHtcclxuXHJcbiAgICBpZiAodGhpcy5kaXNjb25uZWN0U3RyZWFtcyAmJiB0aGlzLmJ1ZmZlcmluZ05vZGUpIHtcclxuICAgICAgdGhpcy5tZWRpYVN0cmVhbS5kaXNjb25uZWN0KHRoaXMuYnVmZmVyaW5nTm9kZSk7XHJcbiAgICAgIGlmKHRoaXMuY29udGV4dCkge1xyXG4gICAgICAgIHRoaXMuYnVmZmVyaW5nTm9kZS5kaXNjb25uZWN0KHRoaXMuY29udGV4dC5kZXN0aW5hdGlvbik7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB0cnkge1xyXG4gICAgICBpZiAodGhpcy5hdWRpb091dFN0cmVhbSkge1xyXG4gICAgICAgIHRoaXMuYXVkaW9PdXRTdHJlYW0uZmx1c2goKTtcclxuICAgICAgfVxyXG4gICAgfWNhdGNoKGVycil7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoXCJDb3VsZCBub3QgZmx1c2ggY2FwdHVyZSBzdHJlYW0uXCIpO1xyXG4gICAgIHRocm93IGVycjtcclxuICAgIH1maW5hbGx5IHtcclxuICAgICAgdGhpcy5jYXB0dXJpbmcgPSBmYWxzZTtcclxuICAgICAgaWYgKHRoaXMuaW5kZGJBdWRpb0J1ZmZlciAmJiB0aGlzLnBlcnNpc3RFcnJvcikge1xyXG4gICAgICAgIC8vIERlbGV0ZSBpbnZhbGlkIHBlcnNpc3RlbnQgYXVkaW8gZGF0YSBhbmQgaG9wZSB0aGF0IGl0IHdpbGwgYmUgY29tcGxldGVseSB1cGxvYWRlZCB0byB0aGUgc2VydmVyXHJcbiAgICAgICAgdGhpcy5pbmRkYkF1ZGlvQnVmZmVyLnJlbGVhc2VBdWRpb0RhdGEoKTtcclxuICAgICAgICB0aGlzLmluZGRiQXVkaW9CdWZmZXIgPSBudWxsO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICh0aGlzLmxpc3RlbmVyICYmICh0aGlzLnBlcnNpc3RFcnJvciB8fCB0aGlzLnBlcnNpc3RlZCkpIHtcclxuICAgICAgICAvL2NvbnNvbGUuZGVidWcoXCJTdG9wcGVkIGJ5IHN0b3AoKSBtZXRob2QgY2FsbFwiKTtcclxuICAgICAgICB0aGlzLmxpc3RlbmVyLnN0b3BwZWQoKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcblxyXG4gIHN0b3JlKCl7XHJcbiAgIC8vIGlmKHRoaXMuZGIgJiYgdGhpcy5yZWNVVUlEKXtcclxuICAgLy8gICAgbGV0IHRyPSB0aGlzLmRiLnRyYW5zYWN0aW9uKFNwckRiLlJFQ09SRElOR19GSUxFX0NIVU5LU19PQkpFQ1RfU1RPUkVfTkFNRSwgJ3JlYWR3cml0ZScpO1xyXG4gICAvLyAgICBsZXQgcmVjRmlsZU9ialN0b3JlID0gdHIub2JqZWN0U3RvcmUoU3ByRGIuUkVDT1JESU5HX0ZJTEVfQ0hVTktTX09CSkVDVF9TVE9SRV9OQU1FKTtcclxuICAgLy9cclxuICAgLy8gICAgICB0cnkge1xyXG4gICAvLyAgICAgICAgbGV0IGNoMERhdGE9dGhpcy5kYXRhWzBdO1xyXG4gICAvLyAgICAgICAgbGV0IGRhdGFDaGtDbnQ9Y2gwRGF0YS5sZW5ndGg7XHJcbiAgIC8vICAgICAgICAgIGxldCBwb3MgPSAwO1xyXG4gICAvLyAgICAgICAgICBmb3IgKGxldCBjaENrSWR4ID0gMDsgY2hDa0lkeCA8IGRhdGFDaGtDbnQ7IGNoQ2tJZHgrKykge1xyXG4gICAvLyAgICAgICAgICAgIGxldCBidWZMZW49MDtcclxuICAgLy8gICAgICAgICAgICBmb3IgKGxldCBjaCA9IDA7IGNoIDwgdGhpcy5jaGFubmVsQ291bnQ7IGNoKyspIHtcclxuICAgLy8gICAgICAgICAgICAgIGxldCBjaENoayA9IHRoaXMuZGF0YVtjaF1bY2hDa0lkeF07XHJcbiAgIC8vICAgICAgICAgICAgICBidWZMZW4gPSBjaENoay5sZW5ndGg7XHJcbiAgIC8vICAgICAgICAgICAgICAvL2xldCBjYWNoZUlkID0gdXVpZCArICdfJyArIGNoICsgJ18nICsgY2hDa0lkeDtcclxuICAgLy8gICAgICAgICAgICAgIGxldCBjaGtEYklkID0gW3RoaXMucmVjVVVJRCwgdGhpcy5pbmREYkNoa0lkeCArIGNoQ2tJZHgsIGNoXTtcclxuICAgLy8gICAgICAgICAgICAgIGxldCBjciA9IHJlY0ZpbGVPYmpTdG9yZS5hZGQoY2hDaGssIGNoa0RiSWQpO1xyXG4gICAvLyAgICAgICAgICAgICAgLy9jb25zb2xlLmRlYnVnKFwiQWRkZWQ6IFwiK2NoK1wiIFwiKyh0aGlzLmluZERiQ2hrSWR4K2NoQ2tJZHgpKTtcclxuICAgLy8gICAgICAgICAgICAgIGNyLm9uc3VjY2Vzcz0oKT0+e1xyXG4gICAvLyAgICAgICAgICAgICAgICAvL2NvbnNvbGUuZGVidWcoXCJTdG9yZWQgYXVkaW8gZGF0YSB0byBpbmRleGVkIGRiXCIpO1xyXG4gICAvLyAgICAgICAgICAgICAgfVxyXG4gICAvLyAgICAgICAgICAgICAgY3Iub25lcnJvcj0oKT0+e1xyXG4gICAvLyAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFwiRXJyb3Igc3RvcmluZyBhdWRpbyBkYXRhIHRvIGluZGV4ZWQgZGJcIik7XHJcbiAgIC8vICAgICAgICAgICAgICB9XHJcbiAgIC8vICAgICAgICAgICAgfVxyXG4gICAvLyAgICAgICAgICAgIHBvcyArPSBidWZMZW47XHJcbiAgIC8vICAgICAgICB9XHJcbiAgIC8vICAgICAgICB0aGlzLmluZERiQ2hrSWR4Kz1kYXRhQ2hrQ250O1xyXG4gICAvL1xyXG4gICAvLyAgICAgICAgdHIub25lcnJvciA9IChlcnIpID0+IHtcclxuICAgLy8gICAgICAgICAgY29uc29sZS5lcnJvcignRmFpbGVkIHRvIGNhY2hlIGF1ZGlvIGRhdGEgdG8gaW5kZXhlZCBkYjogJyArIGVycilcclxuICAgLy8gICAgICAgIH1cclxuICAgLy8gICAgICAgIHRyLm9uY29tcGxldGUgPSAoKSA9PiB7XHJcbiAgIC8vICAgICAgICAgIC8vY29uc29sZS5kZWJ1ZygnVHJhbnNmZXJyZWQgY2FwdHVyZSBhdWRpbyBkYXRhIHRvIGluZGV4ZWQgZGIsIGRlbGV0aW5nIG9yaWdpbmFsIGRhdGEgZnJvbSBtZW1vcnkuLi4nKTtcclxuICAgLy9cclxuICAgLy8gICAgICAgICAgLy8vIEF1ZGlvIGRhdGEgc2F2ZWQgdG8gaW5kZXggZGIgZGVsZXRlIGZyb20gaW4gbWVtb3J5IGRhdGEgYXJyYXlcclxuICAgLy8gICAgICAgICAgZm9yIChsZXQgY2ggPSAwOyBjaCA8IHRoaXMuY2hhbm5lbENvdW50OyBjaCsrKSB7XHJcbiAgIC8vICAgICAgICAgICB0aGlzLmRhdGFbY2hdLnNwbGljZSgwKTtcclxuICAgLy8gICAgICAgICAgICAvL2NvbnNvbGUuZGVidWcoXCJTcGxpY2VkL3JlbW92ZWQgY2g6IFwiK2NoKTtcclxuICAgLy8gICAgICAgICAgfVxyXG4gICAvL1xyXG4gICAvLyAgICAgICAgICB0aGlzLnBlcnNpc3RlZD10cnVlO1xyXG4gICAvLyAgICAgICAgICBpZih0aGlzLmxpc3RlbmVyICYmICF0aGlzLmNhcHR1cmluZyl7XHJcbiAgIC8vICAgICAgICAgICAgLy9jb25zb2xlLmRlYnVnKFwiU3RvcHBlZCBieSBpbmRleGVkIGRiIGhvb2tcIik7XHJcbiAgIC8vICAgICAgICAgICAgdGhpcy5saXN0ZW5lci5zdG9wcGVkKCk7XHJcbiAgIC8vICAgICAgICAgIH1cclxuICAgLy8gICAgICAgIH1cclxuICAgLy8gICAgICAgIC8vIENvbW1pdCBjaHVua3NcclxuICAgLy8gICAgICAgIHRoaXMucGVyc2lzdGVkPWZhbHNlO1xyXG4gICAvLyAgICAgICAgdHIuY29tbWl0KCk7XHJcbiAgIC8vICAgICAgfSBjYXRjaCAoZXJyKSB7XHJcbiAgIC8vICAgICAgICBjb25zb2xlLmVycm9yKCdUcmFuc2ZlciBjYXB0dXJlIGF1ZGlvIGRhdGEgZXJyb3I6ICcrZXJyKTtcclxuICAgLy8gICAgICB9XHJcbiAgIC8vICAgIH1cclxuXHJcbiAgICAvLyBpZighdGhpcy5pbmRkYkF1ZGlvQnVmZmVyICYmIHRoaXMuX3BlcnNpc3RlbnRBdWRpb1N0b3JhZ2VUYXJnZXQgJiYgdGhpcy5yZWNVVUlEKSB7XHJcbiAgICAvLyAgIHRoaXMuaW5kZGJBdWRpb0J1ZmZlciA9IG5ldyBJbmRleGVkRGJBdWRpb0J1ZmZlcih0aGlzLl9wZXJzaXN0ZW50QXVkaW9TdG9yYWdlVGFyZ2V0LCB0aGlzLmNoYW5uZWxDb3VudCx0aGlzLmN1cnJlbnRTYW1wbGVSYXRlLEF1ZGlvQ2FwdHVyZS5CVUZGRVJfU0laRSwwLHRoaXMucmVjVVVJRClcclxuICAgIC8vIH1cclxuICAgIGlmKHRoaXMuaW5kZGJBdWRpb0J1ZmZlciAmJiB0aGlzLmRhdGEpe1xyXG5cclxuICAgICAgLy8gVHJ5IHRvIGFwcGVuZCB0b1xyXG4gICAgICB0aGlzLmluZGRiQXVkaW9CdWZmZXIuYXBwZW5kUmF3QXVkaW9EYXRhKHRoaXMuZGF0YSkuc3Vic2NyaWJlKHtcclxuICAgICAgICBjb21wbGV0ZTogKCkgPT4ge1xyXG4gICAgICAgICAgLy9jb25zb2xlLmRlYnVnKCdUcmFuc2ZlcnJlZCBjYXB0dXJlIGF1ZGlvIGRhdGEgdG8gaW5kZXhlZCBkYiwgZGVsZXRpbmcgb3JpZ2luYWwgZGF0YSBmcm9tIG1lbW9yeS4uLicpO1xyXG5cclxuICAgICAgICAgIC8vLyBBdWRpbyBkYXRhIHNhdmVkIHRvIGluZGV4IGRiIGRlbGV0ZSBmcm9tIGluIG1lbW9yeSBkYXRhIGFycmF5XHJcbiAgICAgICAgICBpZih0aGlzLmRhdGEpIHtcclxuICAgICAgICAgICAgZm9yIChsZXQgY2ggPSAwOyBjaCA8IHRoaXMuY2hhbm5lbENvdW50OyBjaCsrKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5kYXRhW2NoXS5zcGxpY2UoMCk7XHJcbiAgICAgICAgICAgICAgLy9jb25zb2xlLmRlYnVnKFwiU3BsaWNlZC9yZW1vdmVkIGNoOiBcIitjaCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRoaXMucGVyc2lzdGVkID0gdHJ1ZTtcclxuICAgICAgICAgIGlmICh0aGlzLmxpc3RlbmVyICYmICF0aGlzLmNhcHR1cmluZykge1xyXG4gICAgICAgICAgICAvL2NvbnNvbGUuZGVidWcoXCJTdG9wcGVkIGJ5IGluZGV4ZWQgZGIgaG9va1wiKTtcclxuICAgICAgICAgICAgdGhpcy5saXN0ZW5lci5zdG9wcGVkKCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxlcnJvcjooZXJyKT0+e1xyXG4gICAgICAgICAgLy8gT25seSBsb2cgdGhlIGZpcnN0IGVycm9yXHJcbiAgICAgICAgICBpZighdGhpcy5wZXJzaXN0RXJyb3IpIHtcclxuICAgICAgICAgICAgdGhpcy5wZXJzaXN0RXJyb3IgPSBlcnI7XHJcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXCJFcnJvciBwZXJzaXN0aW5nIGF1ZGlvIGRhdGE6IFwiICsgZXJyKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgICB0aGlzLnBlcnNpc3RlZD1mYWxzZTtcclxuICAgIH1cclxuICB9XHJcblxyXG5cclxuICBjbG9zZSgpIHtcclxuICAgIGlmKHRoaXMubWVkaWFTdHJlYW0pIHtcclxuICAgICAgdGhpcy5tZWRpYVN0cmVhbS5kaXNjb25uZWN0KCk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5zdHJlYW0pIHtcclxuICAgICAgY29uc3QgbXRzID0gdGhpcy5zdHJlYW0uZ2V0VHJhY2tzKCk7XHJcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbXRzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgbXRzW2ldLnN0b3AoKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgdGhpcy5fb3BlbmVkPWZhbHNlO1xyXG4gIH1cclxuXHJcbiAgYXVkaW9CdWZmZXIoKTogQXVkaW9CdWZmZXIgfG51bGx7XHJcbiAgICBsZXQgYWI6IEF1ZGlvQnVmZmVyfG51bGw9bnVsbDtcclxuICAgIGlmKHRoaXMuY29udGV4dCAmJiB0aGlzLmRhdGEpIHtcclxuICAgICAgbGV0IGZyYW1lTGVuOiBudW1iZXIgPSAwO1xyXG5cclxuICAgICAgbGV0IGNoMERhdGEgPSB0aGlzLmRhdGFbMF07XHJcblxyXG4gICAgICBmb3IgKGxldCBjaDBDaGsgb2YgY2gwRGF0YSkge1xyXG4gICAgICAgIGZyYW1lTGVuICs9IGNoMENoay5sZW5ndGg7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRyeSB7XHJcbiAgICAgICAgYWIgPSB0aGlzLmNvbnRleHQuY3JlYXRlQnVmZmVyKHRoaXMuY2hhbm5lbENvdW50LCBmcmFtZUxlbiwgdGhpcy5jb250ZXh0LnNhbXBsZVJhdGUpO1xyXG4gICAgICB9IGNhdGNoIChlcnIpIHtcclxuICAgICAgICBpZiAoZXJyIGluc3RhbmNlb2YgRE9NRXhjZXB0aW9uKSB7XHJcbiAgICAgICAgICBpZiAoZXJyLm5hbWUgPT09ICdOb3RTdXBwb3J0ZWRFcnJvcicpIHtcclxuICAgICAgICAgICAgaWYgKGZyYW1lTGVuID09IDApIHtcclxuICAgICAgICAgICAgICAvLyBFbXB0eSBidWZmZXJzIGFyZSBub3Qgc3VwcG9ydGVkIGJ5IENocm9taXVtXHJcbiAgICAgICAgICAgICAgLy8gQ3JlYXRlIGR1bW15IGJ1ZmZlciB3aXRoIG9uZSBzYW1wbGVcclxuICAgICAgICAgICAgICBhYiA9IHRoaXMuY29udGV4dC5jcmVhdGVCdWZmZXIodGhpcy5jaGFubmVsQ291bnQsIDEsIHRoaXMuY29udGV4dC5zYW1wbGVSYXRlKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICB0aHJvdyBlcnI7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRocm93IGVycjtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2UgaWYgKGVyciBpbnN0YW5jZW9mIFJhbmdlRXJyb3IpIHtcclxuICAgICAgICAgIC8vIE91dCBvZiBtZW1vcnlcclxuICAgICAgICAgIC8vIFRPRE8gV2hhdCB0byBkbyA/P1xyXG4gICAgICAgICAgdGhyb3cgZXJyO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aHJvdyBlcnI7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGZvciAobGV0IGNoID0gMDsgY2ggPCB0aGlzLmNoYW5uZWxDb3VudDsgY2grKykge1xyXG4gICAgICAgIGxldCBjaEQgPSBhYi5nZXRDaGFubmVsRGF0YShjaCk7XHJcbiAgICAgICAgbGV0IHBvcyA9IDA7XHJcbiAgICAgICAgZm9yIChsZXQgY2hDaGsgb2YgdGhpcy5kYXRhW2NoXSkge1xyXG4gICAgICAgICAgbGV0IGJ1ZkxlbiA9IGNoQ2hrLmxlbmd0aDtcclxuICAgICAgICAgIGNoRC5zZXQoY2hDaGssIHBvcyk7XHJcbiAgICAgICAgICBwb3MgKz0gYnVmTGVuO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGFiO1xyXG4gIH1cclxuXHJcbiAgYXVkaW9CdWZmZXJBcnJheSgpOkFycmF5QXVkaW9CdWZmZXJ8bnVsbHtcclxuICAgICAgbGV0IGFyckFiOkFycmF5QXVkaW9CdWZmZXJ8bnVsbD1udWxsO1xyXG4gICAgICBpZih0aGlzLmRhdGEpIHtcclxuICAgICAgICBhcnJBYj1uZXcgQXJyYXlBdWRpb0J1ZmZlcih0aGlzLmNoYW5uZWxDb3VudCwgdGhpcy5jdXJyZW50U2FtcGxlUmF0ZSwgdGhpcy5kYXRhKTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gYXJyQWI7XHJcbiAgfVxyXG5cclxuICBpbmRkYkF1ZGlvQnVmZmVyQXJyYXkoKTpJbmRleGVkRGJBdWRpb0J1ZmZlcnxudWxse1xyXG4gICAgaWYodGhpcy5wZXJzaXN0RXJyb3Ipe1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1lbHNlIHtcclxuICAgICAgcmV0dXJuIHRoaXMuaW5kZGJBdWRpb0J1ZmZlcjtcclxuICAgIH1cclxuICB9XHJcblxyXG5cclxufVxyXG5cclxuIl19
@@ -76,4 +76,4 @@ export class AudioContextProvider {
76
76
  });
77
77
  }
78
78
  }
79
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGV4dC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NwZWVjaHJlY29yZGVybmcvc3JjL2xpYi9hdWRpby9jb250ZXh0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE1BQU0sT0FBTyxvQkFBb0I7YUFFaEIsa0JBQWEsR0FBb0IsSUFBSSxDQUFDO2FBQ3RDLHlCQUFvQixHQUEwQixJQUFJLENBQUM7SUFFM0QsTUFBTSxDQUFDLG9CQUFvQjtRQUVoQyxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRTtZQUN2QixJQUFJLFNBQVMsR0FBRyxLQUFLLENBQUM7WUFDdEIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLElBQUksT0FBTyxNQUFNLENBQUMsWUFBWSxLQUFLLFVBQVUsSUFBSSxTQUFTLEVBQUU7Z0JBQ2xGLElBQUksQ0FBQyxhQUFhLEdBQUMsSUFBSSxDQUFDO2dCQUN4QixNQUFNLElBQUksS0FBSyxDQUFDLHlDQUF5QyxDQUFDLENBQUM7YUFDNUQ7aUJBQU07Z0JBQ0wsT0FBTyxDQUFDLEtBQUssQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO2dCQUMxQyxJQUFJLENBQUMsYUFBYSxHQUFFLElBQUksTUFBTSxDQUFDLFlBQVksRUFBRSxDQUFDO2dCQUM5QyxPQUFPLENBQUMsS0FBSyxDQUFDLDRCQUE0QixDQUFDLENBQUM7Z0JBQzVDLElBQUksQ0FBQyxhQUFhLENBQUMsZ0JBQWdCLENBQUMsYUFBYSxFQUFFLEdBQUcsRUFBRTtvQkFDdEQsT0FBTyxDQUFDLEtBQUssQ0FBQywrQkFBK0IsR0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLEtBQUssQ0FBQyxDQUFDO2dCQUMzRSxDQUFDLENBQUMsQ0FBQztnQkFDSCxPQUFPLENBQUMsS0FBSyxDQUFDLHdDQUF3QyxHQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsS0FBSyxDQUFDLENBQUM7YUFDbkY7U0FDRjtRQUNELE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQztJQUM1QixDQUFDO0lBRUQsK0ZBQStGO0lBQy9GLEVBQUU7SUFDRiwyREFBMkQ7SUFDM0Qsd0ZBQXdGO0lBQ3hGLG1CQUFtQjtJQUNuQixzQ0FBc0M7SUFDdEMsZ0VBQWdFO0lBQ2hFLDZDQUE2QztJQUM3QywyQkFBMkI7SUFDM0IsaUJBQWlCO0lBQ2pCLHVDQUF1QztJQUN2Qyx5QkFBeUI7SUFDekIsK0JBQStCO0lBQy9CLHFCQUFxQjtJQUNyQixrRUFBa0U7SUFDbEUsZ0JBQWdCO0lBQ2hCLDZCQUE2QjtJQUM3QixtRUFBbUU7SUFDbkUsZUFBZTtJQUNmLFlBQVk7SUFDWixlQUFlO0lBQ2YseUVBQXlFO0lBQ3pFLFVBQVU7SUFDVixRQUFRO0lBQ1IsSUFBSTtJQUVKLG1HQUFtRztJQUNuRyx3REFBd0Q7SUFDeEQsb0VBQW9FO0lBQ3BFLDJFQUEyRTtJQUMzRSxrQkFBa0I7SUFDbEIsNEVBQTRFO0lBQzVFLHFEQUFxRDtJQUNyRCxrQ0FBa0M7SUFDbEMsMEJBQTBCO0lBQzFCLDRCQUE0QjtJQUM1QixjQUFjO0lBQ2QsVUFBVTtJQUNWLDBCQUEwQjtJQUMxQix3QkFBd0I7SUFDeEIsU0FBUztJQUNULE9BQU87SUFDUCxJQUFJO0lBR0csTUFBTSxDQUFDLGVBQWUsQ0FBQyxJQUFnQjtRQUMxQyxPQUFPLElBQUksT0FBTyxDQUFjLENBQUMsT0FBTyxFQUFDLE1BQU0sRUFBQyxFQUFFO1lBQ2hELElBQUcsQ0FBQyxJQUFJLENBQUMsb0JBQW9CLEVBQUU7Z0JBQzNCLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxJQUFJLG1CQUFtQixDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7YUFDeEU7WUFDQyxpRUFBaUU7WUFDakUsSUFBSSxDQUFDLG9CQUFvQixDQUFDLGVBQWUsQ0FBQyxJQUFJLEVBQUMsV0FBVyxDQUFDLEVBQUU7Z0JBQzNELE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUN2QixDQUFDLEVBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRTtnQkFDWCxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDakIsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDLENBQ0YsQ0FBQTtJQUVMLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJcclxuZXhwb3J0IGNsYXNzIEF1ZGlvQ29udGV4dFByb3ZpZGVyXHJcbntcclxuICBwcml2YXRlIHN0YXRpYyBfYXVkaW9Db250ZXh0OkF1ZGlvQ29udGV4dHwgbnVsbD1udWxsO1xyXG4gIHByaXZhdGUgc3RhdGljIF9vZmZsaW5lQXVkaW9Db250ZXh0Ok9mZmxpbmVBdWRpb0NvbnRleHR8bnVsbD1udWxsO1xyXG5cclxuICBwdWJsaWMgc3RhdGljIGF1ZGlvQ29udGV4dEluc3RhbmNlKCk6QXVkaW9Db250ZXh0fG51bGxcclxuICB7XHJcbiAgICBpZiAoIXRoaXMuX2F1ZGlvQ29udGV4dCkge1xyXG4gICAgICBsZXQgZGVidWdGYWlsID0gZmFsc2U7XHJcbiAgICAgIGlmICghd2luZG93LkF1ZGlvQ29udGV4dCB8fCB0eXBlb2Ygd2luZG93LkF1ZGlvQ29udGV4dCAhPT0gJ2Z1bmN0aW9uJyB8fCBkZWJ1Z0ZhaWwpIHtcclxuICAgICAgICB0aGlzLl9hdWRpb0NvbnRleHQ9bnVsbDtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Jyb3dzZXIgZG9lcyBub3Qgc3VwcG9ydCBXZWIgQXVkaW8gQVBJIScpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGNvbnNvbGUuZGVidWcoXCJHZXQgbmV3IGF1ZGlvIGNvbnRleHQuLi5cIik7XHJcbiAgICAgICAgdGhpcy5fYXVkaW9Db250ZXh0PSBuZXcgd2luZG93LkF1ZGlvQ29udGV4dCgpO1xyXG4gICAgICAgIGNvbnNvbGUuZGVidWcoXCJDcmVhdGVkIG5ldyBhdWRpbyBjb250ZXh0LlwiKTtcclxuICAgICAgICB0aGlzLl9hdWRpb0NvbnRleHQuYWRkRXZlbnRMaXN0ZW5lcignc3RhdGVjaGFuZ2UnLCAoKSA9PiB7XHJcbiAgICAgICAgICBjb25zb2xlLmRlYnVnKFwiQXVkaW8gY29udGV4dCBzdGF0ZSBjaGFuZ2VkOiBcIit0aGlzLl9hdWRpb0NvbnRleHQ/LnN0YXRlKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICBjb25zb2xlLmRlYnVnKFwiQ3JlYXRlZCBuZXcgYXVkaW8gY29udGV4dCB3aXRoIHN0YXRlOiBcIit0aGlzLl9hdWRpb0NvbnRleHQ/LnN0YXRlKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRoaXMuX2F1ZGlvQ29udGV4dDtcclxuICB9XHJcblxyXG4gIC8vIHB1YmxpYyBzdGF0aWMgYXVkaW9Db250ZXh0SW5zdGFuY2VSdW5uaW5nKGF1ZGlvQ29udGV4dD86QXVkaW9Db250ZXh0KTpQcm9taXNlPEF1ZGlvQ29udGV4dD57XHJcbiAgLy9cclxuICAvLyAgICAgcmV0dXJuIG5ldyBQcm9taXNlPEF1ZGlvQ29udGV4dD4oKHJlc29sdmUscmVqZWN0KT0+e1xyXG4gIC8vICAgICAgIGxldCBhQ3R4PWF1ZGlvQ29udGV4dD9hdWRpb0NvbnRleHQ6QXVkaW9Db250ZXh0UHJvdmlkZXIuYXVkaW9Db250ZXh0SW5zdGFuY2UoKTtcclxuICAvLyAgICAgICBpZihhQ3R4KSB7XHJcbiAgLy8gICAgICAgICBpZihhQ3R4LnN0YXRlPT09J2Nsb3NlZCcpIHtcclxuICAvLyAgICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcignQXVkaW8gY29udGV4dCBhbHJlYWR5IGNsb3NlZC4nKSk7XHJcbiAgLy8gICAgICAgICB9ZWxzZSBpZihhQ3R4LnN0YXRlPT09J3J1bm5pbmcnKSB7XHJcbiAgLy8gICAgICAgICAgIHJlc29sdmUoYUN0eCk7XHJcbiAgLy8gICAgICAgICB9ZWxzZXtcclxuICAvLyAgICAgICAgICAgYUN0eC5yZXN1bWUoKS50aGVuKCgpID0+IHtcclxuICAvLyAgICAgICAgICAgICBpZihhQ3R4KSB7XHJcbiAgLy8gICAgICAgICAgICAgICByZXNvbHZlKGFDdHgpO1xyXG4gIC8vICAgICAgICAgICAgIH1lbHNle1xyXG4gIC8vICAgICAgICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcignQ291bGQgbm90IGdldCBhdWRpbyBjb250ZXh0JykpO1xyXG4gIC8vICAgICAgICAgICAgIH1cclxuICAvLyAgICAgICAgICAgfSkuY2F0Y2goKCkgPT4ge1xyXG4gIC8vICAgICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoJ0NvdWxkIG5vdCByZXN1bWUgYXVkaW8gY29udGV4dCcpKTtcclxuICAvLyAgICAgICAgICAgfSlcclxuICAvLyAgICAgICAgIH1cclxuICAvLyAgICAgICB9ZWxzZXtcclxuICAvLyAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoJ0NvdWxkIG5vdCBnZXQgYXVkaW8gY29udGV4dCBmcm9tIGJyb3dzZXInKSk7XHJcbiAgLy8gICAgICAgfVxyXG4gIC8vICAgfSk7XHJcbiAgLy8gfVxyXG5cclxuICAvLyBwdWJsaWMgc3RhdGljIGRlY29kZUF1ZGlvRGF0YShkYXRhOkFycmF5QnVmZmVyLGF1ZGlvQ29udGV4dD86QXVkaW9Db250ZXh0KTpQcm9taXNlPEF1ZGlvQnVmZmVyPntcclxuICAvLyAgIHJldHVybiBuZXcgUHJvbWlzZTxBdWRpb0J1ZmZlcj4oKHJlc29sdmUscmVqZWN0KT0+e1xyXG4gIC8vICAgICAvLyBkZWNvZGVBdWRpb0RhdGEgcmVxdWlyZXMgYW4gYXVkaW8gY29udGV4dCBpbiBydW5uaW5nIHN0YXRlXHJcbiAgLy8gICAgIEF1ZGlvQ29udGV4dFByb3ZpZGVyLmF1ZGlvQ29udGV4dEluc3RhbmNlUnVubmluZyhhdWRpb0NvbnRleHQpLnRoZW4oXHJcbiAgLy8gICAgICAgKGFDdHgpPT57XHJcbiAgLy8gICAgICAgICAvLyBEbyBub3QgdXNlIFByb21pc2UgdmVyc2lvbiwgd2hpY2ggZG9lcyBub3Qgd29yayB3aXRoIFNhZmFyaSAxM1xyXG4gIC8vICAgICAgICAgYUN0eC5kZWNvZGVBdWRpb0RhdGEoZGF0YSxkZWNvZGVkRGF0YSA9PiB7XHJcbiAgLy8gICAgICAgICAgIHJlc29sdmUoZGVjb2RlZERhdGEpO1xyXG4gIC8vICAgICAgICAgfSwocmVhc29uKSA9PiB7XHJcbiAgLy8gICAgICAgICAgIHJlamVjdChyZWFzb24pO1xyXG4gIC8vICAgICAgICAgfSk7XHJcbiAgLy8gICAgICAgfVxyXG4gIC8vICAgICApLmNhdGNoKChyZWFzb24pPT57XHJcbiAgLy8gICAgICAgcmVqZWN0KHJlYXNvbik7XHJcbiAgLy8gICAgIH0pXHJcbiAgLy8gICB9KVxyXG4gIC8vIH1cclxuXHJcblxyXG4gIHB1YmxpYyBzdGF0aWMgZGVjb2RlQXVkaW9EYXRhKGRhdGE6QXJyYXlCdWZmZXIpOlByb21pc2U8QXVkaW9CdWZmZXI+e1xyXG4gICAgICByZXR1cm4gbmV3IFByb21pc2U8QXVkaW9CdWZmZXI+KChyZXNvbHZlLHJlamVjdCk9PntcclxuICAgICAgICBpZighdGhpcy5fb2ZmbGluZUF1ZGlvQ29udGV4dCkge1xyXG4gICAgICAgICAgICB0aGlzLl9vZmZsaW5lQXVkaW9Db250ZXh0ID0gbmV3IE9mZmxpbmVBdWRpb0NvbnRleHQoMSwgNDQxMDAsIDQ0MTAwKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgICAvLyBEbyBub3QgdXNlIFByb21pc2UgdmVyc2lvbiwgd2hpY2ggZG9lcyBub3Qgd29yayB3aXRoIFNhZmFyaSAxM1xyXG4gICAgICAgICAgdGhpcy5fb2ZmbGluZUF1ZGlvQ29udGV4dC5kZWNvZGVBdWRpb0RhdGEoZGF0YSxkZWNvZGVkRGF0YSA9PiB7XHJcbiAgICAgICAgICAgIHJlc29sdmUoZGVjb2RlZERhdGEpO1xyXG4gICAgICAgICAgfSwocmVhc29uKSA9PiB7XHJcbiAgICAgICAgICAgIHJlamVjdChyZWFzb24pO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICApXHJcblxyXG4gIH1cclxuXHJcbn1cclxuIl19
79
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGV4dC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NwZWVjaHJlY29yZGVybmcvc3JjL2xpYi9hdWRpby9jb250ZXh0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE1BQU0sT0FBTyxvQkFBb0I7YUFFaEIsa0JBQWEsR0FBb0IsSUFBSSxDQUFDO2FBQ3RDLHlCQUFvQixHQUEwQixJQUFJLENBQUM7SUFFM0QsTUFBTSxDQUFDLG9CQUFvQjtRQUVoQyxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQ3hCLElBQUksU0FBUyxHQUFHLEtBQUssQ0FBQztZQUN0QixJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksSUFBSSxPQUFPLE1BQU0sQ0FBQyxZQUFZLEtBQUssVUFBVSxJQUFJLFNBQVMsRUFBRSxDQUFDO2dCQUNuRixJQUFJLENBQUMsYUFBYSxHQUFDLElBQUksQ0FBQztnQkFDeEIsTUFBTSxJQUFJLEtBQUssQ0FBQyx5Q0FBeUMsQ0FBQyxDQUFDO1lBQzdELENBQUM7aUJBQU0sQ0FBQztnQkFDTixPQUFPLENBQUMsS0FBSyxDQUFDLDBCQUEwQixDQUFDLENBQUM7Z0JBQzFDLElBQUksQ0FBQyxhQUFhLEdBQUUsSUFBSSxNQUFNLENBQUMsWUFBWSxFQUFFLENBQUM7Z0JBQzlDLE9BQU8sQ0FBQyxLQUFLLENBQUMsNEJBQTRCLENBQUMsQ0FBQztnQkFDNUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxnQkFBZ0IsQ0FBQyxhQUFhLEVBQUUsR0FBRyxFQUFFO29CQUN0RCxPQUFPLENBQUMsS0FBSyxDQUFDLCtCQUErQixHQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsS0FBSyxDQUFDLENBQUM7Z0JBQzNFLENBQUMsQ0FBQyxDQUFDO2dCQUNILE9BQU8sQ0FBQyxLQUFLLENBQUMsd0NBQXdDLEdBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUNwRixDQUFDO1FBQ0gsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQztJQUM1QixDQUFDO0lBRUQsK0ZBQStGO0lBQy9GLEVBQUU7SUFDRiwyREFBMkQ7SUFDM0Qsd0ZBQXdGO0lBQ3hGLG1CQUFtQjtJQUNuQixzQ0FBc0M7SUFDdEMsZ0VBQWdFO0lBQ2hFLDZDQUE2QztJQUM3QywyQkFBMkI7SUFDM0IsaUJBQWlCO0lBQ2pCLHVDQUF1QztJQUN2Qyx5QkFBeUI7SUFDekIsK0JBQStCO0lBQy9CLHFCQUFxQjtJQUNyQixrRUFBa0U7SUFDbEUsZ0JBQWdCO0lBQ2hCLDZCQUE2QjtJQUM3QixtRUFBbUU7SUFDbkUsZUFBZTtJQUNmLFlBQVk7SUFDWixlQUFlO0lBQ2YseUVBQXlFO0lBQ3pFLFVBQVU7SUFDVixRQUFRO0lBQ1IsSUFBSTtJQUVKLG1HQUFtRztJQUNuRyx3REFBd0Q7SUFDeEQsb0VBQW9FO0lBQ3BFLDJFQUEyRTtJQUMzRSxrQkFBa0I7SUFDbEIsNEVBQTRFO0lBQzVFLHFEQUFxRDtJQUNyRCxrQ0FBa0M7SUFDbEMsMEJBQTBCO0lBQzFCLDRCQUE0QjtJQUM1QixjQUFjO0lBQ2QsVUFBVTtJQUNWLDBCQUEwQjtJQUMxQix3QkFBd0I7SUFDeEIsU0FBUztJQUNULE9BQU87SUFDUCxJQUFJO0lBR0csTUFBTSxDQUFDLGVBQWUsQ0FBQyxJQUFnQjtRQUMxQyxPQUFPLElBQUksT0FBTyxDQUFjLENBQUMsT0FBTyxFQUFDLE1BQU0sRUFBQyxFQUFFO1lBQ2hELElBQUcsQ0FBQyxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztnQkFDNUIsSUFBSSxDQUFDLG9CQUFvQixHQUFHLElBQUksbUJBQW1CLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQztZQUN6RSxDQUFDO1lBQ0MsaUVBQWlFO1lBQ2pFLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxlQUFlLENBQUMsSUFBSSxFQUFDLFdBQVcsQ0FBQyxFQUFFO2dCQUMzRCxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDdkIsQ0FBQyxFQUFDLENBQUMsTUFBTSxFQUFFLEVBQUU7Z0JBQ1gsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ2pCLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUNGLENBQUE7SUFFTCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiXHJcbmV4cG9ydCBjbGFzcyBBdWRpb0NvbnRleHRQcm92aWRlclxyXG57XHJcbiAgcHJpdmF0ZSBzdGF0aWMgX2F1ZGlvQ29udGV4dDpBdWRpb0NvbnRleHR8IG51bGw9bnVsbDtcclxuICBwcml2YXRlIHN0YXRpYyBfb2ZmbGluZUF1ZGlvQ29udGV4dDpPZmZsaW5lQXVkaW9Db250ZXh0fG51bGw9bnVsbDtcclxuXHJcbiAgcHVibGljIHN0YXRpYyBhdWRpb0NvbnRleHRJbnN0YW5jZSgpOkF1ZGlvQ29udGV4dHxudWxsXHJcbiAge1xyXG4gICAgaWYgKCF0aGlzLl9hdWRpb0NvbnRleHQpIHtcclxuICAgICAgbGV0IGRlYnVnRmFpbCA9IGZhbHNlO1xyXG4gICAgICBpZiAoIXdpbmRvdy5BdWRpb0NvbnRleHQgfHwgdHlwZW9mIHdpbmRvdy5BdWRpb0NvbnRleHQgIT09ICdmdW5jdGlvbicgfHwgZGVidWdGYWlsKSB7XHJcbiAgICAgICAgdGhpcy5fYXVkaW9Db250ZXh0PW51bGw7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdCcm93c2VyIGRvZXMgbm90IHN1cHBvcnQgV2ViIEF1ZGlvIEFQSSEnKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBjb25zb2xlLmRlYnVnKFwiR2V0IG5ldyBhdWRpbyBjb250ZXh0Li4uXCIpO1xyXG4gICAgICAgIHRoaXMuX2F1ZGlvQ29udGV4dD0gbmV3IHdpbmRvdy5BdWRpb0NvbnRleHQoKTtcclxuICAgICAgICBjb25zb2xlLmRlYnVnKFwiQ3JlYXRlZCBuZXcgYXVkaW8gY29udGV4dC5cIik7XHJcbiAgICAgICAgdGhpcy5fYXVkaW9Db250ZXh0LmFkZEV2ZW50TGlzdGVuZXIoJ3N0YXRlY2hhbmdlJywgKCkgPT4ge1xyXG4gICAgICAgICAgY29uc29sZS5kZWJ1ZyhcIkF1ZGlvIGNvbnRleHQgc3RhdGUgY2hhbmdlZDogXCIrdGhpcy5fYXVkaW9Db250ZXh0Py5zdGF0ZSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgY29uc29sZS5kZWJ1ZyhcIkNyZWF0ZWQgbmV3IGF1ZGlvIGNvbnRleHQgd2l0aCBzdGF0ZTogXCIrdGhpcy5fYXVkaW9Db250ZXh0Py5zdGF0ZSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiB0aGlzLl9hdWRpb0NvbnRleHQ7XHJcbiAgfVxyXG5cclxuICAvLyBwdWJsaWMgc3RhdGljIGF1ZGlvQ29udGV4dEluc3RhbmNlUnVubmluZyhhdWRpb0NvbnRleHQ/OkF1ZGlvQ29udGV4dCk6UHJvbWlzZTxBdWRpb0NvbnRleHQ+e1xyXG4gIC8vXHJcbiAgLy8gICAgIHJldHVybiBuZXcgUHJvbWlzZTxBdWRpb0NvbnRleHQ+KChyZXNvbHZlLHJlamVjdCk9PntcclxuICAvLyAgICAgICBsZXQgYUN0eD1hdWRpb0NvbnRleHQ/YXVkaW9Db250ZXh0OkF1ZGlvQ29udGV4dFByb3ZpZGVyLmF1ZGlvQ29udGV4dEluc3RhbmNlKCk7XHJcbiAgLy8gICAgICAgaWYoYUN0eCkge1xyXG4gIC8vICAgICAgICAgaWYoYUN0eC5zdGF0ZT09PSdjbG9zZWQnKSB7XHJcbiAgLy8gICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoJ0F1ZGlvIGNvbnRleHQgYWxyZWFkeSBjbG9zZWQuJykpO1xyXG4gIC8vICAgICAgICAgfWVsc2UgaWYoYUN0eC5zdGF0ZT09PSdydW5uaW5nJykge1xyXG4gIC8vICAgICAgICAgICByZXNvbHZlKGFDdHgpO1xyXG4gIC8vICAgICAgICAgfWVsc2V7XHJcbiAgLy8gICAgICAgICAgIGFDdHgucmVzdW1lKCkudGhlbigoKSA9PiB7XHJcbiAgLy8gICAgICAgICAgICAgaWYoYUN0eCkge1xyXG4gIC8vICAgICAgICAgICAgICAgcmVzb2x2ZShhQ3R4KTtcclxuICAvLyAgICAgICAgICAgICB9ZWxzZXtcclxuICAvLyAgICAgICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoJ0NvdWxkIG5vdCBnZXQgYXVkaW8gY29udGV4dCcpKTtcclxuICAvLyAgICAgICAgICAgICB9XHJcbiAgLy8gICAgICAgICAgIH0pLmNhdGNoKCgpID0+IHtcclxuICAvLyAgICAgICAgICAgICByZWplY3QobmV3IEVycm9yKCdDb3VsZCBub3QgcmVzdW1lIGF1ZGlvIGNvbnRleHQnKSk7XHJcbiAgLy8gICAgICAgICAgIH0pXHJcbiAgLy8gICAgICAgICB9XHJcbiAgLy8gICAgICAgfWVsc2V7XHJcbiAgLy8gICAgICAgICByZWplY3QobmV3IEVycm9yKCdDb3VsZCBub3QgZ2V0IGF1ZGlvIGNvbnRleHQgZnJvbSBicm93c2VyJykpO1xyXG4gIC8vICAgICAgIH1cclxuICAvLyAgIH0pO1xyXG4gIC8vIH1cclxuXHJcbiAgLy8gcHVibGljIHN0YXRpYyBkZWNvZGVBdWRpb0RhdGEoZGF0YTpBcnJheUJ1ZmZlcixhdWRpb0NvbnRleHQ/OkF1ZGlvQ29udGV4dCk6UHJvbWlzZTxBdWRpb0J1ZmZlcj57XHJcbiAgLy8gICByZXR1cm4gbmV3IFByb21pc2U8QXVkaW9CdWZmZXI+KChyZXNvbHZlLHJlamVjdCk9PntcclxuICAvLyAgICAgLy8gZGVjb2RlQXVkaW9EYXRhIHJlcXVpcmVzIGFuIGF1ZGlvIGNvbnRleHQgaW4gcnVubmluZyBzdGF0ZVxyXG4gIC8vICAgICBBdWRpb0NvbnRleHRQcm92aWRlci5hdWRpb0NvbnRleHRJbnN0YW5jZVJ1bm5pbmcoYXVkaW9Db250ZXh0KS50aGVuKFxyXG4gIC8vICAgICAgIChhQ3R4KT0+e1xyXG4gIC8vICAgICAgICAgLy8gRG8gbm90IHVzZSBQcm9taXNlIHZlcnNpb24sIHdoaWNoIGRvZXMgbm90IHdvcmsgd2l0aCBTYWZhcmkgMTNcclxuICAvLyAgICAgICAgIGFDdHguZGVjb2RlQXVkaW9EYXRhKGRhdGEsZGVjb2RlZERhdGEgPT4ge1xyXG4gIC8vICAgICAgICAgICByZXNvbHZlKGRlY29kZWREYXRhKTtcclxuICAvLyAgICAgICAgIH0sKHJlYXNvbikgPT4ge1xyXG4gIC8vICAgICAgICAgICByZWplY3QocmVhc29uKTtcclxuICAvLyAgICAgICAgIH0pO1xyXG4gIC8vICAgICAgIH1cclxuICAvLyAgICAgKS5jYXRjaCgocmVhc29uKT0+e1xyXG4gIC8vICAgICAgIHJlamVjdChyZWFzb24pO1xyXG4gIC8vICAgICB9KVxyXG4gIC8vICAgfSlcclxuICAvLyB9XHJcblxyXG5cclxuICBwdWJsaWMgc3RhdGljIGRlY29kZUF1ZGlvRGF0YShkYXRhOkFycmF5QnVmZmVyKTpQcm9taXNlPEF1ZGlvQnVmZmVyPntcclxuICAgICAgcmV0dXJuIG5ldyBQcm9taXNlPEF1ZGlvQnVmZmVyPigocmVzb2x2ZSxyZWplY3QpPT57XHJcbiAgICAgICAgaWYoIXRoaXMuX29mZmxpbmVBdWRpb0NvbnRleHQpIHtcclxuICAgICAgICAgICAgdGhpcy5fb2ZmbGluZUF1ZGlvQ29udGV4dCA9IG5ldyBPZmZsaW5lQXVkaW9Db250ZXh0KDEsIDQ0MTAwLCA0NDEwMCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgICAgLy8gRG8gbm90IHVzZSBQcm9taXNlIHZlcnNpb24sIHdoaWNoIGRvZXMgbm90IHdvcmsgd2l0aCBTYWZhcmkgMTNcclxuICAgICAgICAgIHRoaXMuX29mZmxpbmVBdWRpb0NvbnRleHQuZGVjb2RlQXVkaW9EYXRhKGRhdGEsZGVjb2RlZERhdGEgPT4ge1xyXG4gICAgICAgICAgICByZXNvbHZlKGRlY29kZWREYXRhKTtcclxuICAgICAgICAgIH0sKHJlYXNvbikgPT4ge1xyXG4gICAgICAgICAgICByZWplY3QocmVhc29uKTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgKVxyXG5cclxuICB9XHJcblxyXG59XHJcbiJdfQ==