video_info 3.0.0 → 3.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (169) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/unit_test.yml +3 -0
  3. data/lib/video_info/providers/youtube_scraper.rb +1 -0
  4. data/lib/video_info/version.rb +1 -1
  5. data/video_info.gemspec +1 -2
  6. metadata +3 -329
  7. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Dailymotion/_available_/with_invalid_video_url/_available_/1_2_2_1_1.yml +0 -82
  8. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Dailymotion/_available_/with_valid_video/_available_/1_2_1_1_1.yml +0 -87
  9. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Dailymotion/with_video_x7lni3/_author/1_3_7_1.yml +0 -91
  10. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Dailymotion/with_video_x7lni3/_author_thumbnail/1_3_9_1.yml +0 -91
  11. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Dailymotion/with_video_x7lni3/_author_url/1_3_8_1.yml +0 -91
  12. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Dailymotion/with_video_x7lni3/_date/should_show_correct_date.yml +0 -91
  13. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Dailymotion/with_video_x7lni3/_description/1_3_10_1.yml +0 -91
  14. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Dailymotion/with_video_x7lni3/_duration/1_3_12_1.yml +0 -91
  15. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Dailymotion/with_video_x7lni3/_keywords/1_3_11_1.yml +0 -91
  16. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Dailymotion/with_video_x7lni3/_thumbnail/1_3_21_1.yml +0 -91
  17. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Dailymotion/with_video_x7lni3/_thumbnail_large/1_3_18_1.yml +0 -91
  18. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Dailymotion/with_video_x7lni3/_thumbnail_medium/1_3_17_1.yml +0 -91
  19. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Dailymotion/with_video_x7lni3/_thumbnail_small/1_3_16_1.yml +0 -91
  20. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Dailymotion/with_video_x7lni3/_title/1_3_6_1.yml +0 -91
  21. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Dailymotion/with_video_x7lni3/_view_count/1_3_22_1.yml +0 -91
  22. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vimeo/_available_/with_password_required_video/_available_/1_2_3_1_1.yml +0 -151
  23. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vimeo/_available_/with_password_required_video/_available_/2_2_3_1_1.yml +0 -68
  24. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vimeo/_available_/with_this_video_does_not_exist_video/_available_/1_2_2_1_1.yml +0 -127
  25. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vimeo/_available_/with_this_video_does_not_exist_video/_available_/2_2_2_1_1.yml +0 -70
  26. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vimeo/_available_/with_valid_video/_available_/1_2_1_1_1.yml +0 -158
  27. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vimeo/_available_/with_valid_video/_available_/2_2_1_1_1.yml +0 -68
  28. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vimeo/with_unavailable_video/author/1_13_2_1.yml +0 -130
  29. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vimeo/with_unavailable_video/author_thumbnail/1_13_3_1.yml +0 -130
  30. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vimeo/with_unavailable_video/author_url/1_13_4_1.yml +0 -132
  31. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vimeo/with_unavailable_video/available_/1_13_1_1.yml +0 -130
  32. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vimeo/with_unavailable_video/date/1_13_7_1.yml +0 -128
  33. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vimeo/with_unavailable_video/description/1_13_6_1.yml +0 -131
  34. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vimeo/with_unavailable_video/duration/1_13_8_1.yml +0 -130
  35. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vimeo/with_unavailable_video/height/1_13_10_1.yml +0 -131
  36. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vimeo/with_unavailable_video/keywords/1_13_9_1.yml +0 -128
  37. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vimeo/with_unavailable_video/thumbnail_large/1_13_14_1.yml +0 -129
  38. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vimeo/with_unavailable_video/thumbnail_medium/1_13_13_1.yml +0 -129
  39. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vimeo/with_unavailable_video/thumbnail_small/1_13_12_1.yml +0 -129
  40. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vimeo/with_unavailable_video/title/1_13_5_1.yml +0 -130
  41. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vimeo/with_unavailable_video/view_count/1_13_15_1.yml +0 -129
  42. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vimeo/with_unavailable_video/width/1_13_11_1.yml +0 -129
  43. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vimeo/with_video_136971428/_author/1_3_20_1.yml +0 -158
  44. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vimeo/with_video_136971428/_author/2_3_20_1.yml +0 -80
  45. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vimeo/with_video_136971428/_author_thumbnail/1_3_19_1.yml +0 -158
  46. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vimeo/with_video_136971428/_author_thumbnail/2_3_19_1.yml +0 -85
  47. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vimeo/with_video_136971428/_author_url/1_3_21_1.yml +0 -159
  48. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vimeo/with_video_136971428/_author_url/2_3_21_1.yml +0 -80
  49. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vimeo/with_video_136971428/_date/should_have_correct_upload_date.yml +0 -240
  50. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vimeo/with_video_136971428/_description/1_3_7_1.yml +0 -160
  51. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vimeo/with_video_136971428/_description/2_3_7_1.yml +0 -80
  52. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vimeo/with_video_136971428/_duration/1_3_9_1.yml +0 -158
  53. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vimeo/with_video_136971428/_duration/2_3_9_1.yml +0 -85
  54. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vimeo/with_video_136971428/_height/1_3_11_1.yml +0 -158
  55. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vimeo/with_video_136971428/_height/2_3_11_1.yml +0 -80
  56. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vimeo/with_video_136971428/_keywords/should_return_a_string_list_of_keywords.yml +0 -240
  57. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vimeo/with_video_136971428/_thumbnail/1_3_18_1.yml +0 -236
  58. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vimeo/with_video_136971428/_thumbnail/2_3_18_1.yml +0 -82
  59. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vimeo/with_video_136971428/_thumbnail_large/1_3_15_1.yml +0 -236
  60. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vimeo/with_video_136971428/_thumbnail_large/2_3_15_1.yml +0 -82
  61. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vimeo/with_video_136971428/_thumbnail_medium/1_3_14_1.yml +0 -235
  62. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vimeo/with_video_136971428/_thumbnail_medium/2_3_14_1.yml +0 -84
  63. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vimeo/with_video_136971428/_thumbnail_small/1_3_13_1.yml +0 -236
  64. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vimeo/with_video_136971428/_thumbnail_small/2_3_13_1.yml +0 -84
  65. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vimeo/with_video_136971428/_title/1_3_6_1.yml +0 -159
  66. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vimeo/with_video_136971428/_title/2_3_6_1.yml +0 -85
  67. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vimeo/with_video_136971428/_view_count/1_3_22_1.yml +0 -158
  68. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vimeo/with_video_136971428/_view_count/2_3_22_1.yml +0 -84
  69. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vimeo/with_video_136971428/_width/1_3_10_1.yml +0 -156
  70. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vimeo/with_video_136971428/_width/2_3_10_1.yml +0 -82
  71. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vimeo/with_video_141349194/thumbnail/1_12_1_1.yml +0 -234
  72. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vimeo/with_video_141349194/thumbnail/2_12_1_1.yml +0 -78
  73. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vimeo/with_video_141349194/thumbnail_large/1_12_2_1.yml +0 -233
  74. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vimeo/with_video_141349194/thumbnail_large/2_12_2_1.yml +0 -78
  75. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vimeo/with_video_141349194/thumbnail_medium/1_12_3_1.yml +0 -235
  76. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vimeo/with_video_141349194/thumbnail_medium/2_12_3_1.yml +0 -73
  77. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vimeo/with_video_141349194/thumbnail_small/1_12_4_1.yml +0 -234
  78. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vimeo/with_video_141349194/thumbnail_small/2_12_4_1.yml +0 -77
  79. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Wistia/_available_/with_invalid_video/_available_/1_2_2_1_1.yml +0 -75
  80. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Wistia/_available_/with_valid_video/_available_/1_2_1_1_1.yml +0 -79
  81. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Wistia/with_video_pxonqr42is/_duration/1_4_7_1.yml +0 -85
  82. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Wistia/with_video_pxonqr42is/_height/1_4_9_1.yml +0 -85
  83. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Wistia/with_video_pxonqr42is/_thumbnail_large/1_4_12_1.yml +0 -86
  84. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Wistia/with_video_pxonqr42is/_thumbnail_medium/1_4_11_1.yml +0 -86
  85. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Wistia/with_video_pxonqr42is/_thumbnail_small/1_4_10_1.yml +0 -85
  86. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Wistia/with_video_pxonqr42is/_title/1_4_6_1.yml +0 -86
  87. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Wistia/with_video_pxonqr42is/_width/1_4_8_1.yml +0 -86
  88. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Wistia/with_video_rs1me54mpw/_duration/1_3_7_1.yml +0 -85
  89. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Wistia/with_video_rs1me54mpw/_height/1_3_9_1.yml +0 -87
  90. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Wistia/with_video_rs1me54mpw/_thumbnail/1_3_15_1.yml +0 -87
  91. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Wistia/with_video_rs1me54mpw/_thumbnail_large/1_3_12_1.yml +0 -87
  92. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Wistia/with_video_rs1me54mpw/_thumbnail_medium/1_3_11_1.yml +0 -87
  93. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Wistia/with_video_rs1me54mpw/_thumbnail_small/1_3_10_1.yml +0 -85
  94. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Wistia/with_video_rs1me54mpw/_title/1_3_6_1.yml +0 -85
  95. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Wistia/with_video_rs1me54mpw/_width/1_3_8_1.yml +0 -87
  96. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Youtube/_available_/with_unavailable_video/_available_/1_2_2_1_1.yml +0 -59
  97. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Youtube/_available_/with_unavailable_video/_available_/2_2_2_1_1.yml +0 -114
  98. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Youtube/_available_/with_unavailable_video/_date/1_2_2_11_1.yml +0 -59
  99. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Youtube/_available_/with_unavailable_video/_date/2_2_2_11_1.yml +0 -114
  100. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Youtube/_available_/with_unavailable_video/_description/1_2_2_8_1.yml +0 -59
  101. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Youtube/_available_/with_unavailable_video/_description/2_2_2_8_1.yml +0 -114
  102. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Youtube/_available_/with_unavailable_video/_duration/1_2_2_10_1.yml +0 -59
  103. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Youtube/_available_/with_unavailable_video/_duration/2_2_2_10_1.yml +0 -114
  104. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Youtube/_available_/with_unavailable_video/_keywords/1_2_2_9_1.yml +0 -59
  105. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Youtube/_available_/with_unavailable_video/_keywords/2_2_2_9_1.yml +0 -114
  106. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Youtube/_available_/with_unavailable_video/_title/1_2_2_7_1.yml +0 -59
  107. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Youtube/_available_/with_unavailable_video/_title/2_2_2_7_1.yml +0 -114
  108. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Youtube/_available_/with_unavailable_video/_view_count/1_2_2_18_1.yml +0 -59
  109. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Youtube/_available_/with_unavailable_video/_view_count/2_2_2_18_1.yml +0 -114
  110. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Youtube/_available_/with_valid_video/_available_/1_2_1_1_1.yml +0 -59
  111. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Youtube/_available_/with_valid_video/_available_/2_2_1_1_1.yml +0 -187
  112. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Youtube/_available_/with_video_removed_because_of_copyright_claim/_available_/1_2_3_1_1.yml +0 -59
  113. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Youtube/_available_/with_video_removed_because_of_copyright_claim/_available_/2_2_3_1_1.yml +0 -114
  114. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Youtube/with_a_video_without_description/_description/1_1_1_1.yml +0 -59
  115. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Youtube/with_full_screen_video_URLs/_date/should_return_date_video_was_posted.yml +0 -249
  116. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Youtube/with_full_screen_video_URLs/_description/1_17_7_1.yml +0 -59
  117. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Youtube/with_full_screen_video_URLs/_description/2_17_7_1.yml +0 -187
  118. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Youtube/with_full_screen_video_URLs/_duration/1_17_9_1.yml +0 -59
  119. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Youtube/with_full_screen_video_URLs/_duration/2_17_9_1.yml +0 -187
  120. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Youtube/with_full_screen_video_URLs/_keywords/1_17_8_1.yml +0 -59
  121. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Youtube/with_full_screen_video_URLs/_keywords/2_17_8_1.yml +0 -187
  122. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Youtube/with_full_screen_video_URLs/_title/1_17_6_1.yml +0 -59
  123. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Youtube/with_full_screen_video_URLs/_title/2_17_6_1.yml +0 -187
  124. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Youtube/with_full_screen_video_URLs/_view_count/1_17_17_1.yml +0 -59
  125. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Youtube/with_full_screen_video_URLs/_view_count/2_17_17_1.yml +0 -187
  126. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Youtube/with_video_mZqGqE0D0n4/_author/1_3_6_1.yml +0 -115
  127. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Youtube/with_video_mZqGqE0D0n4/_author/2_3_6_1.yml +0 -187
  128. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Youtube/with_video_mZqGqE0D0n4/_author_thumbnail/1_3_7_1.yml +0 -115
  129. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Youtube/with_video_mZqGqE0D0n4/_author_thumbnail/2_3_7_1.yml +0 -335
  130. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Youtube/with_video_mZqGqE0D0n4/_author_url/1_3_8_1.yml +0 -59
  131. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Youtube/with_video_mZqGqE0D0n4/_author_url/2_3_8_1.yml +0 -335
  132. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Youtube/with_video_mZqGqE0D0n4/_author_url/can_be_called_twice_and_receive_the_same_value.yml +0 -391
  133. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Youtube/with_video_mZqGqE0D0n4/_date/should_return_date_video_was_posted.yml +0 -243
  134. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Youtube/with_video_mZqGqE0D0n4/_description/1_3_10_1.yml +0 -60
  135. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Youtube/with_video_mZqGqE0D0n4/_description/2_3_10_1.yml +0 -187
  136. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Youtube/with_video_mZqGqE0D0n4/_duration/1_3_12_1.yml +0 -59
  137. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Youtube/with_video_mZqGqE0D0n4/_duration/2_3_12_1.yml +0 -187
  138. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Youtube/with_video_mZqGqE0D0n4/_keywords/1_3_11_1.yml +0 -59
  139. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Youtube/with_video_mZqGqE0D0n4/_keywords/2_3_11_1.yml +0 -187
  140. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Youtube/with_video_mZqGqE0D0n4/_title/1_3_9_1.yml +0 -59
  141. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Youtube/with_video_mZqGqE0D0n4/_title/2_3_9_1.yml +0 -187
  142. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Youtube/with_video_mZqGqE0D0n4/_view_count/1_3_21_1.yml +0 -59
  143. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Youtube/with_video_mZqGqE0D0n4/_view_count/2_3_21_1.yml +0 -187
  144. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_YoutubePlaylist/_available_/with_invalid_playlist/_available_/1_2_2_1_1.yml +0 -120
  145. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_YoutubePlaylist/_available_/with_list_url/_available_/1_2_3_1_1.yml +0 -154
  146. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_YoutubePlaylist/_available_/with_valid_playlist/_available_/1_2_1_1_1.yml +0 -154
  147. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_YoutubePlaylist/with_playlist_PL9hW1uS6HUftLdHI6RIsaf/_author/1_3_21_1.yml +0 -165
  148. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_YoutubePlaylist/with_playlist_PL9hW1uS6HUftLdHI6RIsaf/_author_thumbnail/1_3_22_1.yml +0 -274
  149. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_YoutubePlaylist/with_playlist_PL9hW1uS6HUftLdHI6RIsaf/_author_url/1_3_23_1.yml +0 -274
  150. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_YoutubePlaylist/with_playlist_PL9hW1uS6HUftLdHI6RIsaf/_description/1_3_7_1.yml +0 -165
  151. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_YoutubePlaylist/with_playlist_PL9hW1uS6HUftLdHI6RIsaf/_keywords/1_3_8_1.yml +0 -165
  152. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_YoutubePlaylist/with_playlist_PL9hW1uS6HUftLdHI6RIsaf/_thumbnail/1_3_18_1.yml +0 -165
  153. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_YoutubePlaylist/with_playlist_PL9hW1uS6HUftLdHI6RIsaf/_thumbnail_large/1_3_15_1.yml +0 -165
  154. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_YoutubePlaylist/with_playlist_PL9hW1uS6HUftLdHI6RIsaf/_thumbnail_large_2x/1_3_16_1.yml +0 -165
  155. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_YoutubePlaylist/with_playlist_PL9hW1uS6HUftLdHI6RIsaf/_thumbnail_maxres/1_3_17_1.yml +0 -165
  156. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_YoutubePlaylist/with_playlist_PL9hW1uS6HUftLdHI6RIsaf/_thumbnail_medium/1_3_14_1.yml +0 -165
  157. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_YoutubePlaylist/with_playlist_PL9hW1uS6HUftLdHI6RIsaf/_thumbnail_small/1_3_13_1.yml +0 -165
  158. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_YoutubePlaylist/with_playlist_PL9hW1uS6HUftLdHI6RIsaf/_title/1_3_6_1.yml +0 -165
  159. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_YoutubePlaylist/with_playlist_PL9hW1uS6HUftLdHI6RIsaf/_videos/returns_list_of_videos_in_playlist.yml +0 -112
  160. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_YoutubePlaylist/with_playlist_that_does_not_exist_in_embed_path/_videos/1_4_2_1.yml +0 -114
  161. data/spec/lib/video_info/provider_spec.rb +0 -80
  162. data/spec/lib/video_info/providers/dailymotion_spec.rb +0 -204
  163. data/spec/lib/video_info/providers/vimeo_spec.rb +0 -338
  164. data/spec/lib/video_info/providers/wistia_spec.rb +0 -207
  165. data/spec/lib/video_info/providers/youtube_playlist_spec.rb +0 -240
  166. data/spec/lib/video_info/providers/youtube_scraper_spec.rb +0 -14
  167. data/spec/lib/video_info/providers/youtube_spec.rb +0 -599
  168. data/spec/lib/video_info_spec.rb +0 -102
  169. data/spec/spec_helper.rb +0 -31
@@ -1,91 +0,0 @@
1
- ---
2
- http_interactions:
3
- - request:
4
- method: get
5
- uri: https://api.dailymotion.com/video/x7lni3?fields=id,title,description,duration,created_time,url,views_total,tags,thumbnail_url,thumbnail_720_url,owner.url,owner.screenname,owner.avatar_60_url,thumbnail_240_url,thumbnail_60_url
6
- body:
7
- encoding: US-ASCII
8
- string: ''
9
- headers:
10
- User-Agent:
11
- - VideoInfo/2.8.0
12
- Accept-Encoding:
13
- - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
14
- Accept:
15
- - "*/*"
16
- response:
17
- status:
18
- code: 200
19
- message: OK
20
- headers:
21
- Content-Security-Policy-Report-Only:
22
- - 'default-src https: blob: wss: data: android-webview-video-poster: android-webview:
23
- chrome-extension: safari-extension: ''unsafe-eval'' ''unsafe-inline''; report-uri
24
- https://www.dailymotion.com/content_security_policy_report_uri'
25
- Server:
26
- - DMS/1.0.42
27
- X-Dm-Api-Object:
28
- - video
29
- X-Dm-Backnode:
30
- - web-026.adm.ix7.dailymotion.com:80
31
- Vary:
32
- - X-DM-SSL,Accept-Encoding
33
- X-Dm-Api-Method:
34
- - info
35
- Cache-Control:
36
- - public, max-age=900, stale-if-error=900
37
- Content-Type:
38
- - application/json; charset=UTF-8
39
- Access-Control-Expose-Headers:
40
- - Date, X-DM-BackNode-Response-Time, X-DM-Edge, X-DM-Cache-Status, X-Served-By,
41
- X-DM-BackNode-Response-Time
42
- Content-Security-Policy:
43
- - upgrade-insecure-requests
44
- Date:
45
- - Tue, 27 Oct 2020 10:44:27 GMT
46
- Surrogate-Key:
47
- - v-x7lni3
48
- X-Dm-Lb-Ip:
49
- - 195.8.215.129
50
- X-Dm-Tg:
51
- - v-x7lni3
52
- X-Dm-Lb-Name:
53
- - lb-03
54
- X-Dm-Random-Number:
55
- - '7539843'
56
- Access-Control-Allow-Origin:
57
- - "*"
58
- X-Dm-Backnode-Response-Time:
59
- - '28'
60
- Etag:
61
- - W/"rQeFNlJ5iMPO8gmsSDhiVw-gzip"
62
- X-Robots-Tag:
63
- - noindex
64
- X-Frame-Options:
65
- - DENY
66
- Last-Modified:
67
- - Tue, 19 May 2015 07:03:39 GMT
68
- Expect-Ct:
69
- - max-age=0, report-uri="https://www.dailymotion.com/content_security_policy_report_uri"
70
- X-Dm-Cache-Status:
71
- - MISS
72
- Access-Control-Allow-Headers:
73
- - Content-Type, Authorization
74
- Access-Control-Allow-Methods:
75
- - GET, POST, DELETE
76
- Referrer-Policy:
77
- - no-referrer-when-downgrade
78
- X-Dm-Edge:
79
- - DMParis
80
- Content-Length:
81
- - '500'
82
- body:
83
- encoding: ASCII-8BIT
84
- string: '{"id":"x7lni3","title":"Mario Kart (R\u00e9mi Gaillard)","description":"Super
85
- R\u00e9mi Kart est un jeu vid\u00e9o de course d\u00e9velopp\u00e9 et \u00e9dit\u00e9
86
- par N''Importe Quoi TV. Sa principale originalit\u00e9 vient de sa r\u00e9alit\u00e9...<br
87
- \/>L''aventure continue sur www.nimportequi.com","duration":136,"created_time":1228321771,"url":"https:\/\/www.dailymotion.com\/video\/x7lni3","views_total":10339941,"tags":["r\u00e9mi","remi","gaillard","imposteur","imposture","mario","bros","kart","nintendo","jeux"],"thumbnail_url":"https:\/\/s1.dmcdn.net\/v\/mj4x1VaO59zYd5Qm","thumbnail_720_url":"https:\/\/s1.dmcdn.net\/v\/mj4x1VaO59VyFzJt\/x720","owner.url":"https:\/\/www.dailymotion.com\/nqtv","owner.screenname":"R\u00e9mi
88
- Gaillard","owner.avatar_60_url":"https:\/\/s1.dmcdn.net\/u\/US931VO3V-24wNr1\/60x60","thumbnail_240_url":"https:\/\/s2.dmcdn.net\/v\/mj4x1VaO59Vm42lt\/x240","thumbnail_60_url":"https:\/\/s2.dmcdn.net\/v\/mj4x1VaO59OF6TK6\/x60"}'
89
- http_version:
90
- recorded_at: Tue, 27 Oct 2020 10:44:27 GMT
91
- recorded_with: VCR 3.0.3
@@ -1,91 +0,0 @@
1
- ---
2
- http_interactions:
3
- - request:
4
- method: get
5
- uri: https://api.dailymotion.com/video/x7lni3?fields=id,title,description,duration,created_time,url,views_total,tags,thumbnail_url,thumbnail_720_url,owner.url,owner.screenname,owner.avatar_60_url,thumbnail_240_url,thumbnail_60_url
6
- body:
7
- encoding: US-ASCII
8
- string: ''
9
- headers:
10
- User-Agent:
11
- - VideoInfo/2.8.0
12
- Accept-Encoding:
13
- - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
14
- Accept:
15
- - "*/*"
16
- response:
17
- status:
18
- code: 200
19
- message: OK
20
- headers:
21
- Content-Security-Policy-Report-Only:
22
- - 'default-src https: blob: wss: data: android-webview-video-poster: android-webview:
23
- chrome-extension: safari-extension: ''unsafe-eval'' ''unsafe-inline''; report-uri
24
- https://www.dailymotion.com/content_security_policy_report_uri'
25
- Server:
26
- - DMS/1.0.42
27
- X-Dm-Api-Object:
28
- - video
29
- X-Dm-Backnode:
30
- - web-087.adm.ix7.dailymotion.com:80
31
- Vary:
32
- - X-DM-SSL,Accept-Encoding
33
- X-Dm-Api-Method:
34
- - info
35
- Cache-Control:
36
- - public, max-age=900, stale-if-error=900
37
- Content-Type:
38
- - application/json; charset=UTF-8
39
- Access-Control-Expose-Headers:
40
- - Date, X-DM-BackNode-Response-Time, X-DM-Edge, X-DM-Cache-Status, X-Served-By,
41
- X-DM-BackNode-Response-Time
42
- Content-Security-Policy:
43
- - upgrade-insecure-requests
44
- Date:
45
- - Tue, 27 Oct 2020 10:44:25 GMT
46
- Surrogate-Key:
47
- - v-x7lni3
48
- X-Dm-Lb-Ip:
49
- - 195.8.215.129
50
- X-Dm-Tg:
51
- - v-x7lni3
52
- X-Dm-Lb-Name:
53
- - lb-03
54
- X-Dm-Random-Number:
55
- - '3311298'
56
- Access-Control-Allow-Origin:
57
- - "*"
58
- X-Dm-Backnode-Response-Time:
59
- - '36'
60
- Etag:
61
- - W/"rQeFNlJ5iMPO8gmsSDhiVw-gzip"
62
- X-Robots-Tag:
63
- - noindex
64
- X-Frame-Options:
65
- - DENY
66
- Last-Modified:
67
- - Tue, 19 May 2015 07:03:39 GMT
68
- Expect-Ct:
69
- - max-age=0, report-uri="https://www.dailymotion.com/content_security_policy_report_uri"
70
- X-Dm-Cache-Status:
71
- - MISS
72
- Access-Control-Allow-Headers:
73
- - Content-Type, Authorization
74
- Access-Control-Allow-Methods:
75
- - GET, POST, DELETE
76
- Referrer-Policy:
77
- - no-referrer-when-downgrade
78
- X-Dm-Edge:
79
- - DMParis
80
- Content-Length:
81
- - '500'
82
- body:
83
- encoding: ASCII-8BIT
84
- string: '{"id":"x7lni3","title":"Mario Kart (R\u00e9mi Gaillard)","description":"Super
85
- R\u00e9mi Kart est un jeu vid\u00e9o de course d\u00e9velopp\u00e9 et \u00e9dit\u00e9
86
- par N''Importe Quoi TV. Sa principale originalit\u00e9 vient de sa r\u00e9alit\u00e9...<br
87
- \/>L''aventure continue sur www.nimportequi.com","duration":136,"created_time":1228321771,"url":"https:\/\/www.dailymotion.com\/video\/x7lni3","views_total":10339941,"tags":["r\u00e9mi","remi","gaillard","imposteur","imposture","mario","bros","kart","nintendo","jeux"],"thumbnail_url":"https:\/\/s1.dmcdn.net\/v\/mj4x1VaO59zYd5Qm","thumbnail_720_url":"https:\/\/s1.dmcdn.net\/v\/mj4x1VaO59VyFzJt\/x720","owner.url":"https:\/\/www.dailymotion.com\/nqtv","owner.screenname":"R\u00e9mi
88
- Gaillard","owner.avatar_60_url":"https:\/\/s1.dmcdn.net\/u\/US931VO3V-24wNr1\/60x60","thumbnail_240_url":"https:\/\/s2.dmcdn.net\/v\/mj4x1VaO59Vm42lt\/x240","thumbnail_60_url":"https:\/\/s2.dmcdn.net\/v\/mj4x1VaO59OF6TK6\/x60"}'
89
- http_version:
90
- recorded_at: Tue, 27 Oct 2020 10:44:26 GMT
91
- recorded_with: VCR 3.0.3
@@ -1,91 +0,0 @@
1
- ---
2
- http_interactions:
3
- - request:
4
- method: get
5
- uri: https://api.dailymotion.com/video/x7lni3?fields=id,title,description,duration,created_time,url,views_total,tags,thumbnail_url,thumbnail_720_url,owner.url,owner.screenname,owner.avatar_60_url,thumbnail_240_url,thumbnail_60_url
6
- body:
7
- encoding: US-ASCII
8
- string: ''
9
- headers:
10
- User-Agent:
11
- - VideoInfo/2.8.0
12
- Accept-Encoding:
13
- - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
14
- Accept:
15
- - "*/*"
16
- response:
17
- status:
18
- code: 200
19
- message: OK
20
- headers:
21
- Content-Security-Policy-Report-Only:
22
- - 'default-src https: blob: wss: data: android-webview-video-poster: android-webview:
23
- chrome-extension: safari-extension: ''unsafe-eval'' ''unsafe-inline''; report-uri
24
- https://www.dailymotion.com/content_security_policy_report_uri'
25
- Server:
26
- - DMS/1.0.42
27
- X-Dm-Api-Object:
28
- - video
29
- X-Dm-Backnode:
30
- - web-059.adm.ix7.dailymotion.com:80
31
- Vary:
32
- - X-DM-SSL,Accept-Encoding
33
- X-Dm-Api-Method:
34
- - info
35
- Cache-Control:
36
- - public, max-age=900, stale-if-error=900
37
- Content-Type:
38
- - application/json; charset=UTF-8
39
- Access-Control-Expose-Headers:
40
- - Date, X-DM-BackNode-Response-Time, X-DM-Edge, X-DM-Cache-Status, X-Served-By,
41
- X-DM-BackNode-Response-Time
42
- Content-Security-Policy:
43
- - upgrade-insecure-requests
44
- Date:
45
- - Tue, 27 Oct 2020 10:44:16 GMT
46
- Surrogate-Key:
47
- - v-x7lni3
48
- X-Dm-Lb-Ip:
49
- - 195.8.215.129
50
- X-Dm-Tg:
51
- - v-x7lni3
52
- X-Dm-Lb-Name:
53
- - lb-03
54
- X-Dm-Random-Number:
55
- - '5131166'
56
- Access-Control-Allow-Origin:
57
- - "*"
58
- X-Dm-Backnode-Response-Time:
59
- - '31'
60
- Etag:
61
- - W/"rQeFNlJ5iMPO8gmsSDhiVw-gzip"
62
- X-Robots-Tag:
63
- - noindex
64
- X-Frame-Options:
65
- - DENY
66
- Last-Modified:
67
- - Tue, 19 May 2015 07:03:39 GMT
68
- Expect-Ct:
69
- - max-age=0, report-uri="https://www.dailymotion.com/content_security_policy_report_uri"
70
- X-Dm-Cache-Status:
71
- - MISS
72
- Access-Control-Allow-Headers:
73
- - Content-Type, Authorization
74
- Access-Control-Allow-Methods:
75
- - GET, POST, DELETE
76
- Referrer-Policy:
77
- - no-referrer-when-downgrade
78
- X-Dm-Edge:
79
- - DMParis
80
- Content-Length:
81
- - '503'
82
- body:
83
- encoding: ASCII-8BIT
84
- string: '{"id":"x7lni3","title":"Mario Kart (R\u00e9mi Gaillard)","description":"Super
85
- R\u00e9mi Kart est un jeu vid\u00e9o de course d\u00e9velopp\u00e9 et \u00e9dit\u00e9
86
- par N''Importe Quoi TV. Sa principale originalit\u00e9 vient de sa r\u00e9alit\u00e9...<br
87
- \/>L''aventure continue sur www.nimportequi.com","duration":136,"created_time":1228321771,"url":"https:\/\/www.dailymotion.com\/video\/x7lni3","views_total":10339941,"tags":["r\u00e9mi","remi","gaillard","imposteur","imposture","mario","bros","kart","nintendo","jeux"],"thumbnail_url":"https:\/\/s2.dmcdn.net\/v\/mj4x1VaO59zYd5Qm","thumbnail_720_url":"https:\/\/s1.dmcdn.net\/v\/mj4x1VaO59VyFzJt\/x720","owner.url":"https:\/\/www.dailymotion.com\/nqtv","owner.screenname":"R\u00e9mi
88
- Gaillard","owner.avatar_60_url":"https:\/\/s2.dmcdn.net\/u\/US931VO3V-24wNr1\/60x60","thumbnail_240_url":"https:\/\/s2.dmcdn.net\/v\/mj4x1VaO59Vm42lt\/x240","thumbnail_60_url":"https:\/\/s2.dmcdn.net\/v\/mj4x1VaO59OF6TK6\/x60"}'
89
- http_version:
90
- recorded_at: Tue, 27 Oct 2020 10:44:16 GMT
91
- recorded_with: VCR 3.0.3
@@ -1,91 +0,0 @@
1
- ---
2
- http_interactions:
3
- - request:
4
- method: get
5
- uri: https://api.dailymotion.com/video/x7lni3?fields=id,title,description,duration,created_time,url,views_total,tags,thumbnail_url,thumbnail_720_url,owner.url,owner.screenname,owner.avatar_60_url,thumbnail_240_url,thumbnail_60_url
6
- body:
7
- encoding: US-ASCII
8
- string: ''
9
- headers:
10
- User-Agent:
11
- - VideoInfo/2.8.0
12
- Accept-Encoding:
13
- - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
14
- Accept:
15
- - "*/*"
16
- response:
17
- status:
18
- code: 200
19
- message: OK
20
- headers:
21
- Content-Security-Policy-Report-Only:
22
- - 'default-src https: blob: wss: data: android-webview-video-poster: android-webview:
23
- chrome-extension: safari-extension: ''unsafe-eval'' ''unsafe-inline''; report-uri
24
- https://www.dailymotion.com/content_security_policy_report_uri'
25
- Server:
26
- - DMS/1.0.42
27
- X-Dm-Api-Object:
28
- - video
29
- X-Dm-Backnode:
30
- - web-033.adm.ix7.dailymotion.com:80
31
- Vary:
32
- - X-DM-SSL,Accept-Encoding
33
- X-Dm-Api-Method:
34
- - info
35
- Cache-Control:
36
- - public, max-age=900, stale-if-error=900
37
- Content-Type:
38
- - application/json; charset=UTF-8
39
- Access-Control-Expose-Headers:
40
- - Date, X-DM-BackNode-Response-Time, X-DM-Edge, X-DM-Cache-Status, X-Served-By,
41
- X-DM-BackNode-Response-Time
42
- Content-Security-Policy:
43
- - upgrade-insecure-requests
44
- Date:
45
- - Tue, 27 Oct 2020 10:44:30 GMT
46
- Surrogate-Key:
47
- - v-x7lni3
48
- X-Dm-Lb-Ip:
49
- - 195.8.215.129
50
- X-Dm-Tg:
51
- - v-x7lni3
52
- X-Dm-Lb-Name:
53
- - lb-03
54
- X-Dm-Random-Number:
55
- - '5907083'
56
- Access-Control-Allow-Origin:
57
- - "*"
58
- X-Dm-Backnode-Response-Time:
59
- - '30'
60
- Etag:
61
- - W/"rQeFNlJ5iMPO8gmsSDhiVw-gzip"
62
- X-Robots-Tag:
63
- - noindex
64
- X-Frame-Options:
65
- - DENY
66
- Last-Modified:
67
- - Tue, 19 May 2015 07:03:39 GMT
68
- Expect-Ct:
69
- - max-age=0, report-uri="https://www.dailymotion.com/content_security_policy_report_uri"
70
- X-Dm-Cache-Status:
71
- - MISS
72
- Access-Control-Allow-Headers:
73
- - Content-Type, Authorization
74
- Access-Control-Allow-Methods:
75
- - GET, POST, DELETE
76
- Referrer-Policy:
77
- - no-referrer-when-downgrade
78
- X-Dm-Edge:
79
- - DMParis
80
- Content-Length:
81
- - '502'
82
- body:
83
- encoding: ASCII-8BIT
84
- string: '{"id":"x7lni3","title":"Mario Kart (R\u00e9mi Gaillard)","description":"Super
85
- R\u00e9mi Kart est un jeu vid\u00e9o de course d\u00e9velopp\u00e9 et \u00e9dit\u00e9
86
- par N''Importe Quoi TV. Sa principale originalit\u00e9 vient de sa r\u00e9alit\u00e9...<br
87
- \/>L''aventure continue sur www.nimportequi.com","duration":136,"created_time":1228321771,"url":"https:\/\/www.dailymotion.com\/video\/x7lni3","views_total":10339941,"tags":["r\u00e9mi","remi","gaillard","imposteur","imposture","mario","bros","kart","nintendo","jeux"],"thumbnail_url":"https:\/\/s2.dmcdn.net\/v\/mj4x1VaO59zYd5Qm","thumbnail_720_url":"https:\/\/s1.dmcdn.net\/v\/mj4x1VaO59VyFzJt\/x720","owner.url":"https:\/\/www.dailymotion.com\/nqtv","owner.screenname":"R\u00e9mi
88
- Gaillard","owner.avatar_60_url":"https:\/\/s2.dmcdn.net\/u\/US931VO3V-24wNr1\/60x60","thumbnail_240_url":"https:\/\/s1.dmcdn.net\/v\/mj4x1VaO59Vm42lt\/x240","thumbnail_60_url":"https:\/\/s2.dmcdn.net\/v\/mj4x1VaO59OF6TK6\/x60"}'
89
- http_version:
90
- recorded_at: Tue, 27 Oct 2020 10:44:30 GMT
91
- recorded_with: VCR 3.0.3
@@ -1,151 +0,0 @@
1
- ---
2
- http_interactions:
3
- - request:
4
- method: head
5
- uri: https://vimeo.com/74636562
6
- body:
7
- encoding: US-ASCII
8
- string: ''
9
- headers:
10
- User-Agent:
11
- - VideoInfo/2.8.0
12
- Accept:
13
- - "*/*"
14
- response:
15
- status:
16
- code: 200
17
- message: OK
18
- headers:
19
- Connection:
20
- - keep-alive
21
- Content-Length:
22
- - '151209'
23
- Server:
24
- - nginx
25
- Content-Type:
26
- - text/html; charset=UTF-8
27
- Expires:
28
- - Tue, 27 Oct 2020 06:22:03 GMT
29
- X-Ua-Compatible:
30
- - IE=edge
31
- X-Xss-Protection:
32
- - 1; mode=block
33
- X-Content-Type-Options:
34
- - nosniff
35
- X-Frame-Options:
36
- - sameorigin
37
- Strict-Transport-Security:
38
- - max-age=31536000; includeSubDomains; preload
39
- Content-Security-Policy-Report-Only:
40
- - 'default-src https: data: blob: wss: ''unsafe-inline'' ''unsafe-eval''; report-uri
41
- /_csp'
42
- X-Bapp-Server:
43
- - pweb-v4874-xrxx9
44
- Via:
45
- - 1.1 varnish
46
- - 1.1 varnish, 1.1 varnish
47
- Cache-Control:
48
- - no-store, no-cache, must-revalidate, post-check=0, pre-check=0
49
- X-Varnish-Cache:
50
- - '0'
51
- X-Vserver:
52
- - infra-webproxy-a-15
53
- X-Vimeo-Dc:
54
- - ge
55
- Accept-Ranges:
56
- - bytes
57
- Date:
58
- - Tue, 27 Oct 2020 18:22:03 GMT
59
- Age:
60
- - '0'
61
- X-Served-By:
62
- - cache-bwi5133-BWI, cache-cwb20525-CWB
63
- X-Cache:
64
- - MISS, MISS
65
- X-Cache-Hits:
66
- - 0, 0
67
- X-Timer:
68
- - S1603822923.385452,VS0,VE302
69
- Vary:
70
- - User-Agent,Accept-Encoding
71
- body:
72
- encoding: UTF-8
73
- string: ''
74
- http_version:
75
- recorded_at: Tue, 27 Oct 2020 18:22:03 GMT
76
- - request:
77
- method: get
78
- uri: https://vimeo.com/74636562
79
- body:
80
- encoding: US-ASCII
81
- string: ''
82
- headers:
83
- Accept-Encoding:
84
- - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
85
- Accept:
86
- - "*/*"
87
- User-Agent:
88
- - Ruby
89
- response:
90
- status:
91
- code: 200
92
- message: OK
93
- headers:
94
- Connection:
95
- - keep-alive
96
- Content-Length:
97
- - '35083'
98
- Server:
99
- - nginx
100
- Content-Type:
101
- - text/html; charset=UTF-8
102
- Expires:
103
- - Tue, 27 Oct 2020 06:22:04 GMT
104
- X-Ua-Compatible:
105
- - IE=edge
106
- X-Xss-Protection:
107
- - 1; mode=block
108
- X-Content-Type-Options:
109
- - nosniff
110
- X-Frame-Options:
111
- - sameorigin
112
- Strict-Transport-Security:
113
- - max-age=31536000; includeSubDomains; preload
114
- Content-Security-Policy-Report-Only:
115
- - 'default-src https: data: blob: wss: ''unsafe-inline'' ''unsafe-eval''; report-uri
116
- /_csp'
117
- X-Bapp-Server:
118
- - pweb-v4874-qqxbn
119
- Via:
120
- - 1.1 varnish, 1.1 varnish, 1.1 varnish
121
- Cache-Control:
122
- - no-store, no-cache, must-revalidate, post-check=0, pre-check=0
123
- X-Varnish-Cache:
124
- - '0'
125
- X-Vserver:
126
- - infra-webproxy-a-15
127
- X-Vimeo-Dc:
128
- - ge
129
- Accept-Ranges:
130
- - bytes
131
- Date:
132
- - Tue, 27 Oct 2020 18:22:04 GMT
133
- Age:
134
- - '0'
135
- X-Served-By:
136
- - cache-bwi5124-BWI, cache-cwb20520-CWB
137
- X-Cache:
138
- - MISS, MISS
139
- X-Cache-Hits:
140
- - 0, 0
141
- X-Timer:
142
- - S1603822924.960004,VS0,VE371
143
- Vary:
144
- - User-Agent,Accept-Encoding
145
- body:
146
- encoding: ASCII-8BIT
147
- string: !binary |-
148
- PCFET0NUWVBFIGh0bWw+CjxodG1sIGxhbmc9ImVuIj4KICAgIDxoZWFkPgogICAgICAgIAo8bWV0YSBjaGFyc2V0PSJ1dGYtOCI+CjxtZXRhIHByb3BlcnR5PSJmYjphcHBfaWQiIGNvbnRlbnQ9IjE5ODg0MDI4OTYzIj4KPG1ldGEgbmFtZT0idmlld3BvcnQiIGNvbnRlbnQ9IndpZHRoPWRldmljZS13aWR0aCwgaW5pdGlhbC1zY2FsZT0xLjAiPgo8bGluayByZWw9InByZWNvbm5lY3QiIGhyZWY9Ii8vcGxheWVyLnZpbWVvLmNvbSI+CjxsaW5rIHJlbD0icHJlY29ubmVjdCIgaHJlZj0iLy9pLnZpbWVvY2RuLmNvbSI+CjxsaW5rIHJlbD0icHJlY29ubmVjdCIgaHJlZj0iLy9mLnZpbWVvY2RuLmNvbSI+CjxsaW5rIHJlbD0ic2VhcmNoIiB0eXBlPSJhcHBsaWNhdGlvbi9vcGVuc2VhcmNoZGVzY3JpcHRpb24reG1sIiBocmVmPSIvc2VhcmNoL29wZW5zZWFyY2gueG1sIiB0aXRsZT0iVmltZW8iPgo8bGluayByZWw9ImxvZ28iIHR5cGU9ImltYWdlL3N2ZyIgaHJlZj0iaHR0cHM6Ly9mLnZpbWVvY2RuLmNvbS9sb2dvLnN2ZyI+CgoKICAgICAgICAgICAgPG1ldGEgbmFtZT0idmlld3BvcnQiIGNvbnRlbnQ9IndpZHRoPWRldmljZS13aWR0aCxpbml0aWFsLXNjYWxlPTEuMCxtYXhpbXVtLXNjYWxlPTUuMCx1c2VyLXNjYWxhYmxlPXllcyI+CiAgICAKCiAgICAgICAgPG1ldGEgbmFtZT0icm9ib3RzIiBjb250ZW50PSJub2luZGV4LCBub2ZvbGxvdyI+CgogICAgPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IkpvaW4gdGhlIHdlYuKAmXMgbW9zdCBzdXBwb3J0aXZlIGNvbW11bml0eSBvZiBjcmVhdG9ycyBhbmQgZ2V0IGhpZ2gtcXVhbGl0eSB0b29scyBmb3IgaG9zdGluZywgc2hhcmluZywgYW5kIHN0cmVhbWluZyB2aWRlb3MgaW4gZ29yZ2VvdXMgSEQgd2l0aCBubyBhZHMuIj4KCgoKICAgICAgICAgICAgPGxpbmsgcmVsPSJjYW5vbmljYWwiIGhyZWY9Ii83NDYzNjU2MiI+CiAgICAgICAgPGxpbmsgcmVsPSJhcHBsZS10b3VjaC1pY29uLXByZWNvbXBvc2VkIiBocmVmPSJodHRwczovL2kudmltZW9jZG4uY29tL2Zhdmljb24vbWFpbi10b3VjaF8xODAiPgoKPGxpbmsgcmVsPSJtYXNrLWljb24iIGhyZWY9Imh0dHBzOi8vZi52aW1lb2Nkbi5jb20vc3ZnL2xlZ2FjeV92aWV3X3N1cHBvcnQvaXJpc19pY29uX3ZfNjQuc3ZnP2UxMDEzZGViNmU4NDQ3MGM3NWQwNzVmODZkYjNjZDRkOTRkMjE4MTYiIGNvbG9yPSIjMTcyNzJlIj4KCiAgICA8bGluayByZWw9InNob3J0Y3V0IGljb24iIGhyZWY9Imh0dHBzOi8vZi52aW1lb2Nkbi5jb20vaW1hZ2VzX3Y2L2Zhdmljb24uaWNvP2UxMDEzZGViNmU4NDQ3MGM3NWQwNzVmODZkYjNjZDRkOTRkMjE4MTYiIGRhdGEtcGxheT0iaHR0cHM6Ly9pLnZpbWVvY2RuLmNvbS9mYXZpY29uL3BsYXlfMzIiIGRhdGEtcGF1c2U9Imh0dHBzOi8vaS52aW1lb2Nkbi5jb20vZmF2aWNvbi9wYXVzZV8zMiI+Cgo8bWV0YSBuYW1lPSJtc2FwcGxpY2F0aW9uLVRpbGVJbWFnZSIgY29udGVudD0iaHR0cHM6Ly9pLnZpbWVvY2RuLmNvbS9mYXZpY29uL21haW4tdG91Y2hfMTQ0Ij4KPG1ldGEgbmFtZT0ibXNhcHBsaWNhdGlvbi1UaWxlQ29sb3IiIGNvbnRlbnQ9IiMwMGFkZWYiPgogICAgICAgIDx0aXRsZT5Qcml2YXRlIHZpZGVvIG9uIFZpbWVvPC90aXRsZT4KICAgICAgICA8c2NyaXB0PgogICAgICAgICAgICAvLyBGaXJzdCBJbnB1dCBEZWxheSB0cmFja2luZy4gSGlnaCBwcmlvcml0eSBsb2FkaW5nIHRvIG5vdCBtaXNzIGV2ZW50CiAgICAgICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9Hb29nbGVDaHJvbWVMYWJzL2ZpcnN0LWlucHV0LWRlbGF5L2Jsb2IvbWFzdGVyL2Rpc3QvZmlyc3QtaW5wdXQtZGVsYXkubWluLmpzCiAgICAgICAgICAgICFmdW5jdGlvbihuLGUpe3ZhciB0LG8saSxjPVtdLGY9e3Bhc3NpdmU6ITAsY2FwdHVyZTohMH0scj1uZXcgRGF0ZSxhPSJwb2ludGVydXAiLHU9InBvaW50ZXJjYW5jZWwiO2Z1bmN0aW9uIHAobixjKXt0fHwodD1jLG89bixpPW5ldyBEYXRlLHcoZSkscygpKX1mdW5jdGlvbiBzKCl7bz49MCYmbzxpLXImJihjLmZvckVhY2goZnVuY3Rpb24obil7bihvLHQpfSksYz1bXSl9ZnVuY3Rpb24gbCh0KXtpZih0LmNhbmNlbGFibGUpe3ZhciBvPSh0LnRpbWVTdGFtcD4xZTEyP25ldyBEYXRlOnBlcmZvcm1hbmNlLm5vdygpKS10LnRpbWVTdGFtcDsicG9pbnRlcmRvd24iPT10LnR5cGU/ZnVuY3Rpb24odCxvKXtmdW5jdGlvbiBpKCl7cCh0LG8pLHIoKX1mdW5jdGlvbiBjKCl7cigpfWZ1bmN0aW9uIHIoKXtlKGEsaSxmKSxlKHUsYyxmKX1uKGEsaSxmKSxuKHUsYyxmKX0obyx0KTpwKG8sdCl9fWZ1bmN0aW9uIHcobil7WyJjbGljayIsIm1vdXNlZG93biIsImtleWRvd24iLCJ0b3VjaHN0YXJ0IiwicG9pbnRlcmRvd24iXS5mb3JFYWNoKGZ1bmN0aW9uKGUpe24oZSxsLGYpfSl9dyhuKSxzZWxmLnBlcmZNZXRyaWNzPXNlbGYucGVyZk1ldHJpY3N8fHt9LHNlbGYucGVyZk1ldHJpY3Mub25GaXJzdElucHV0RGVsYXk9ZnVuY3Rpb24obil7Yy5wdXNoKG4pLHMoKX19KGFkZEV2ZW50TGlzdGVuZXIscmVtb3ZlRXZlbnRMaXN0ZW5lcik7CiAgICAgICAgPC9zY3JpcHQ+CiAgICAgICAgPHNjcmlwdD4KICAgICAgICAgIC8vIENyZWF0ZSBQZXJmb3JtYW5jZU9ic2VydmVyIGZvciB0cmFja2luZyBUVEkKICAgICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9Hb29nbGVDaHJvbWVMYWJzL3R0aS1wb2x5ZmlsbAogICAgICAgICAgIWZ1bmN0aW9uKCl7aWYoJ1BlcmZvcm1hbmNlTG9uZ1Rhc2tUaW1pbmcnIGluIHdpbmRvdyl7dmFyIGc9d2luZG93Ll9fdHRpPXtlOltdfTsKICAgICAgICAgIGcubz1uZXcgUGVyZm9ybWFuY2VPYnNlcnZlcihmdW5jdGlvbihsKXtnLmU9Zy5lLmNvbmNhdChsLmdldEVudHJpZXMoKSl9KTsKICAgICAgICAgIGcuby5vYnNlcnZlKHtlbnRyeVR5cGVzOlsnbG9uZ3Rhc2snXX0pfX0oKTsKICAgICAgICA8L3NjcmlwdD4KICAgICAgICA8c2NyaXB0PgogICAgICAgICAgLy8gTmV3IFJlbGljIEFnZW50CiAgICAgICAgICA7d2luZG93Lk5SRVVNfHwoTlJFVU09e30pO05SRVVNLmluaXQ9e2Rpc3RyaWJ1dGVkX3RyYWNpbmc6e2VuYWJsZWQ6dHJ1ZX0scHJpdmFjeTp7Y29va2llc19lbmFibGVkOnRydWV9fTsKICAgICAgICAgIHdpbmRvdy5OUkVVTXx8KE5SRVVNPXt9KSxfX25yX3JlcXVpcmU9ZnVuY3Rpb24odCxlLG4pe2Z1bmN0aW9uIHIobil7aWYoIWVbbl0pe3ZhciBvPWVbbl09e2V4cG9ydHM6e319O3Rbbl1bMF0uY2FsbChvLmV4cG9ydHMsZnVuY3Rpb24oZSl7dmFyIG89dFtuXVsxXVtlXTtyZXR1cm4gcihvfHxlKX0sbyxvLmV4cG9ydHMpfXJldHVybiBlW25dLmV4cG9ydHN9aWYoImZ1bmN0aW9uIj09dHlwZW9mIF9fbnJfcmVxdWlyZSlyZXR1cm4gX19ucl9yZXF1aXJlO2Zvcih2YXIgbz0wO288bi5sZW5ndGg7bysrKXIobltvXSk7cmV0dXJuIHJ9KHsxOltmdW5jdGlvbih0LGUsbil7ZnVuY3Rpb24gcih0KXt0cnl7cy5jb25zb2xlJiZjb25zb2xlLmxvZyh0KX1jYXRjaChlKXt9fXZhciBvLGk9dCgiZWUiKSxhPXQoMjUpLHM9e307dHJ5e289bG9jYWxTdG9yYWdlLmdldEl0ZW0oIl9fbnJfZmxhZ3MiKS5zcGxpdCgiLCIpLGNvbnNvbGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBjb25zb2xlLmxvZyYmKHMuY29uc29sZT0hMCxvLmluZGV4T2YoImRldiIpIT09LTEmJihzLmRldj0hMCksby5pbmRleE9mKCJucl9kZXYiKSE9PS0xJiYocy5uckRldj0hMCkpfWNhdGNoKGMpe31zLm5yRGV2JiZpLm9uKCJpbnRlcm5hbC1lcnJvciIsZnVuY3Rpb24odCl7cih0LnN0YWNrKX0pLHMuZGV2JiZpLm9uKCJmbi1lcnIiLGZ1bmN0aW9uKHQsZSxuKXtyKG4uc3RhY2spfSkscy5kZXYmJihyKCJOUiBBR0VOVCBJTiBERVZFTE9QTUVOVCBNT0RFIikscigiZmxhZ3M6ICIrYShzLGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHR9KS5qb2luKCIsICIpKSl9LHt9XSwyOltmdW5jdGlvbih0LGUsbil7ZnVuY3Rpb24gcih0LGUsbixyLHMpe3RyeXtsP2wtPTE6byhzfHxuZXcgVW5jYXVnaHRFeGNlcHRpb24odCxlLG4pLCEwKX1jYXRjaChmKXt0cnl7aSgiaWVyciIsW2YsYy5ub3coKSwhMF0pfWNhdGNoKGQpe319cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHUmJnUuYXBwbHkodGhpcyxhKGFyZ3VtZW50cykpfWZ1bmN0aW9uIFVuY2F1Z2h0RXhjZXB0aW9uKHQsZSxuKXt0aGlzLm1lc3NhZ2U9dHx8IlVuY2F1Z2h0IGVycm9yIHdpdGggbm8gYWRkaXRpb25hbCBpbmZvcm1hdGlvbiIsdGhpcy5zb3VyY2VVUkw9ZSx0aGlzLmxpbmU9bn1mdW5jdGlvbiBvKHQsZSl7dmFyIG49ZT9udWxsOmMubm93KCk7aSgiZXJyIixbdCxuXSl9dmFyIGk9dCgiaGFuZGxlIiksYT10KDI2KSxzPXQoImVlIiksYz10KCJsb2FkZXIiKSxmPXQoImdvcyIpLHU9d2luZG93Lm9uZXJyb3IsZD0hMSxwPSJuckBzZWVuRXJyb3IiLGw9MDtjLmZlYXR1cmVzLmVycj0hMCx0KDEpLHdpbmRvdy5vbmVycm9yPXI7dHJ5e3Rocm93IG5ldyBFcnJvcn1jYXRjaChoKXsic3RhY2siaW4gaCYmKHQoMTMpLHQoMTIpLCJhZGRFdmVudExpc3RlbmVyImluIHdpbmRvdyYmdCg2KSxjLnhocldyYXBwYWJsZSYmdCgxNCksZD0hMCl9cy5vbigiZm4tc3RhcnQiLGZ1bmN0aW9uKHQsZSxuKXtkJiYobCs9MSl9KSxzLm9uKCJmbi1lcnIiLGZ1bmN0aW9uKHQsZSxuKXtkJiYhbltwXSYmKGYobixwLGZ1bmN0aW9uKCl7cmV0dXJuITB9KSx0aGlzLnRocm93bj0hMCxvKG4pKX0pLHMub24oImZuLWVuZCIsZnVuY3Rpb24oKXtkJiYhdGhpcy50aHJvd24mJmw+MCYmKGwtPTEpfSkscy5vbigiaW50ZXJuYWwtZXJyb3IiLGZ1bmN0aW9uKHQpe2koImllcnIiLFt0LGMubm93KCksITBdKX0pfSx7fV0sMzpbZnVuY3Rpb24odCxlLG4pe3QoImxvYWRlciIpLmZlYXR1cmVzLmlucz0hMH0se31dLDQ6W2Z1bmN0aW9uKHQsZSxuKXtmdW5jdGlvbiByKCl7TCsrLEM9Zy5oYXNoLHRoaXNbdV09eS5ub3coKX1mdW5jdGlvbiBvKCl7TC0tLGcuaGFzaCE9PUMmJmkoMCwhMCk7dmFyIHQ9eS5ub3coKTt0aGlzW2hdPX5+dGhpc1toXSt0LXRoaXNbdV0sdGhpc1tkXT10fWZ1bmN0aW9uIGkodCxlKXtFLmVtaXQoIm5ld1VSTCIsWyIiK2csZV0pfWZ1bmN0aW9uIGEodCxlKXt0Lm9uKGUsZnVuY3Rpb24oKXt0aGlzW2VdPXkubm93KCl9KX12YXIgcz0iLXN0YXJ0IixjPSItZW5kIixmPSItYm9keSIsdT0iZm4iK3MsZD0iZm4iK2MscD0iY2IiK3MsbD0iY2IiK2MsaD0ianNUaW1lIixtPSJmZXRjaCIsdj0iYWRkRXZlbnRMaXN0ZW5lciIsdz13aW5kb3csZz13LmxvY2F0aW9uLHk9dCgibG9hZGVyIik7aWYod1t2XSYmeS54aHJXcmFwcGFibGUpe3ZhciB4PXQoMTApLGI9dCgxMSksRT10KDgpLE89dCg2KSxSPXQoMTMpLFA9dCg3KSxUPXQoMTQpLE49dCg5KSxNPXQoImVlIiksUz1NLmdldCgidHJhY2VyIik7dCgxNikseS5mZWF0dXJlcy5zcGE9ITA7dmFyIEMsTD0wO00ub24odSxyKSxNLm9uKHAsciksTS5vbihkLG8pLE0ub24obCxvKSxNLmJ1ZmZlcihbdSxkLCJ4aHItZG9uZSIsInhoci1yZXNvbHZlZCJdKSxPLmJ1ZmZlcihbdV0pLFIuYnVmZmVyKFsic2V0VGltZW91dCIrYywiY2xlYXJUaW1lb3V0IitzLHVdKSxULmJ1ZmZlcihbdSwibmV3LXhociIsInNlbmQteGhyIitzXSksUC5idWZmZXIoW20rcyxtKyItZG9uZSIsbStmK3MsbStmK2NdKSxFLmJ1ZmZlcihbIm5ld1VSTCJdKSx4LmJ1ZmZlcihbdV0pLGIuYnVmZmVyKFsicHJvcGFnYXRlIixwLGwsImV4ZWN1dG9yLWVyciIsInJlc29sdmUiK3NdKSxTLmJ1ZmZlcihbdSwibm8tIit1XSksTi5idWZmZXIoWyJuZXctanNvbnAiLCJjYi1zdGFydCIsImpzb25wLWVycm9yIiwianNvbnAtZW5kIl0pLGEoVCwic2VuZC14aHIiK3MpLGEoTSwieGhyLXJlc29sdmVkIiksYShNLCJ4aHItZG9uZSIpLGEoUCxtK3MpLGEoUCxtKyItZG9uZSIpLGEoTiwibmV3LWpzb25wIiksYShOLCJqc29ucC1lbmQiKSxhKE4sImNiLXN0YXJ0IiksRS5vbigicHVzaFN0YXRlLWVuZCIsaSksRS5vbigicmVwbGFjZVN0YXRlLWVuZCIsaSksd1t2XSgiaGFzaGNoYW5nZSIsaSwhMCksd1t2XSgibG9hZCIsaSwhMCksd1t2XSgicG9wc3RhdGUiLGZ1bmN0aW9uKCl7aSgwLEw+MSl9LCEwKX19LHt9XSw1OltmdW5jdGlvbih0LGUsbil7ZnVuY3Rpb24gcih0KXt9aWYod2luZG93LnBlcmZvcm1hbmNlJiZ3aW5kb3cucGVyZm9ybWFuY2UudGltaW5nJiZ3aW5kb3cucGVyZm9ybWFuY2UuZ2V0RW50cmllc0J5VHlwZSl7dmFyIG89dCgiZWUiKSxpPXQoImhhbmRsZSIpLGE9dCgxMykscz10KDEyKSxjPSJsZWFyUmVzb3VyY2VUaW1pbmdzIixmPSJhZGRFdmVudExpc3RlbmVyIix1PSJyZXNvdXJjZXRpbWluZ2J1ZmZlcmZ1bGwiLGQ9ImJzdFJlc291cmNlIixwPSJyZXNvdXJjZSIsbD0iLXN0YXJ0IixoPSItZW5kIixtPSJmbiIrbCx2PSJmbiIraCx3PSJic3RUaW1lciIsZz0icHVzaFN0YXRlIix5PXQoImxvYWRlciIpO3kuZmVhdHVyZXMuc3RuPSEwLHQoOCksImFkZEV2ZW50TGlzdGVuZXIiaW4gd2luZG93JiZ0KDYpO3ZhciB4PU5SRVVNLm8uRVY7by5vbihtLGZ1bmN0aW9uKHQsZSl7dmFyIG49dFswXTtuIGluc3RhbmNlb2YgeCYmKHRoaXMuYnN0U3RhcnQ9eS5ub3coKSl9KSxvLm9uKHYsZnVuY3Rpb24odCxlKXt2YXIgbj10WzBdO24gaW5zdGFuY2VvZiB4JiZpKCJic3QiLFtuLGUsdGhpcy5ic3RTdGFydCx5Lm5vdygpXSl9KSxhLm9uKG0sZnVuY3Rpb24odCxlLG4pe3RoaXMuYnN0U3RhcnQ9eS5ub3coKSx0aGlzLmJzdFR5cGU9bn0pLGEub24odixmdW5jdGlvbih0LGUpe2kodyxbZSx0aGlzLmJzdFN0YXJ0LHkubm93KCksdGhpcy5ic3RUeXBlXSl9KSxzLm9uKG0sZnVuY3Rpb24oKXt0aGlzLmJzdFN0YXJ0PXkubm93KCl9KSxzLm9uKHYsZnVuY3Rpb24odCxlKXtpKHcsW2UsdGhpcy5ic3RTdGFydCx5Lm5vdygpLCJyZXF1ZXN0QW5pbWF0aW9uRnJhbWUiXSl9KSxvLm9uKGcrbCxmdW5jdGlvbih0KXt0aGlzLnRpbWU9eS5ub3coKSx0aGlzLnN0YXJ0UGF0aD1sb2NhdGlvbi5wYXRobmFtZStsb2NhdGlvbi5oYXNofSksby5vbihnK2gsZnVuY3Rpb24odCl7aSgiYnN0SGlzdCIsW2xvY2F0aW9uLnBhdGhuYW1lK2xvY2F0aW9uLmhhc2gsdGhpcy5zdGFydFBhdGgsdGhpcy50aW1lXSl9KSxmIGluIHdpbmRvdy5wZXJmb3JtYW5jZSYmKHdpbmRvdy5wZXJmb3JtYW5jZVsiYyIrY10/d2luZG93LnBlcmZvcm1hbmNlW2ZdKHUsZnVuY3Rpb24odCl7aShkLFt3aW5kb3cucGVyZm9ybWFuY2UuZ2V0RW50cmllc0J5VHlwZShwKV0pLHdpbmRvdy5wZXJmb3JtYW5jZVsiYyIrY10oKX0sITEpOndpbmRvdy5wZXJmb3JtYW5jZVtmXSgid2Via2l0Iit1LGZ1bmN0aW9uKHQpe2koZCxbd2luZG93LnBlcmZvcm1hbmNlLmdldEVudHJpZXNCeVR5cGUocCldKSx3aW5kb3cucGVyZm9ybWFuY2VbIndlYmtpdEMiK2NdKCl9LCExKSksZG9jdW1lbnRbZl0oInNjcm9sbCIscix7cGFzc2l2ZTohMH0pLGRvY3VtZW50W2ZdKCJrZXlwcmVzcyIsciwhMSksZG9jdW1lbnRbZl0oImNsaWNrIixyLCExKX19LHt9XSw2OltmdW5jdGlvbih0LGUsbil7ZnVuY3Rpb24gcih0KXtmb3IodmFyIGU9dDtlJiYhZS5oYXNPd25Qcm9wZXJ0eSh1KTspZT1PYmplY3QuZ2V0UHJvdG90eXBlT2YoZSk7ZSYmbyhlKX1mdW5jdGlvbiBvKHQpe3MuaW5QbGFjZSh0LFt1LGRdLCItIixpKX1mdW5jdGlvbiBpKHQsZSl7cmV0dXJuIHRbMV19dmFyIGE9dCgiZWUiKS5nZXQoImV2ZW50cyIpLHM9dCgid3JhcC1mdW5jdGlvbiIpKGEsITApLGM9dCgiZ29zIiksZj1YTUxIdHRwUmVxdWVzdCx1PSJhZGRFdmVudExpc3RlbmVyIixkPSJyZW1vdmVFdmVudExpc3RlbmVyIjtlLmV4cG9ydHM9YSwiZ2V0UHJvdG90eXBlT2YiaW4gT2JqZWN0PyhyKGRvY3VtZW50KSxyKHdpbmRvdykscihmLnByb3RvdHlwZSkpOmYucHJvdG90eXBlLmhhc093blByb3BlcnR5KHUpJiYobyh3aW5kb3cpLG8oZi5wcm90b3R5cGUpKSxhLm9uKHUrIi1zdGFydCIsZnVuY3Rpb24odCxlKXt2YXIgbj10WzFdLHI9YyhuLCJuckB3cmFwcGVkIixmdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXtpZigiZnVuY3Rpb24iPT10eXBlb2Ygbi5oYW5kbGVFdmVudClyZXR1cm4gbi5oYW5kbGVFdmVudC5hcHBseShuLGFyZ3VtZW50cyl9dmFyIGU9e29iamVjdDp0LCJmdW5jdGlvbiI6bn1bdHlwZW9mIG5dO3JldHVybiBlP3MoZSwiZm4tIixudWxsLGUubmFtZXx8ImFub255bW91cyIpOm59KTt0aGlzLndyYXBwZWQ9dFsxXT1yfSksYS5vbihkKyItc3RhcnQiLGZ1bmN0aW9uKHQpe3RbMV09dGhpcy53cmFwcGVkfHx0WzFdfSl9LHt9XSw3OltmdW5jdGlvbih0LGUsbil7ZnVuY3Rpb24gcih0LGUsbil7dmFyIHI9dFtlXTsiZnVuY3Rpb24iPT10eXBlb2YgciYmKHRbZV09ZnVuY3Rpb24oKXt2YXIgdD1pKGFyZ3VtZW50cyksZT17fTtvLmVtaXQobisiYmVmb3JlLXN0YXJ0IixbdF0sZSk7dmFyIGE7ZVttXSYmZVttXS5kdCYmKGE9ZVttXS5kdCk7dmFyIHM9ci5hcHBseSh0aGlzLHQpO3JldHVybiBvLmVtaXQobisic3RhcnQiLFt0LGFdLHMpLHMudGhlbihmdW5jdGlvbih0KXtyZXR1cm4gby5lbWl0KG4rImVuZCIsW251bGwsdF0scyksdH0sZnVuY3Rpb24odCl7dGhyb3cgby5lbWl0KG4rImVuZCIsW3RdLHMpLHR9KX0pfXZhciBvPXQoImVlIikuZ2V0KCJmZXRjaCIpLGk9dCgyNiksYT10KDI1KTtlLmV4cG9ydHM9bzt2YXIgcz13aW5kb3csYz0iZmV0Y2gtIixmPWMrImJvZHktIix1PVsiYXJyYXlCdWZmZXIiLCJibG9iIiwianNvbiIsInRleHQiLCJmb3JtRGF0YSJdLGQ9cy5SZXF1ZXN0LHA9cy5SZXNwb25zZSxsPXMuZmV0Y2gsaD0icHJvdG90eXBlIixtPSJuckBjb250ZXh0IjtkJiZwJiZsJiYoYSh1LGZ1bmN0aW9uKHQsZSl7cihkW2hdLGUsZikscihwW2hdLGUsZil9KSxyKHMsImZldGNoIixjKSxvLm9uKGMrImVuZCIsZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzO2lmKGUpe3ZhciByPWUuaGVhZGVycy5nZXQoImNvbnRlbnQtbGVuZ3RoIik7bnVsbCE9PXImJihuLnJ4U2l6ZT1yKSxvLmVtaXQoYysiZG9uZSIsW251bGwsZV0sbil9ZWxzZSBvLmVtaXQoYysiZG9uZSIsW3RdLG4pfSkpfSx7fV0sODpbZnVuY3Rpb24odCxlLG4pe3ZhciByPXQoImVlIikuZ2V0KCJoaXN0b3J5Iiksbz10KCJ3cmFwLWZ1bmN0aW9uIikocik7ZS5leHBvcnRzPXI7dmFyIGk9d2luZG93Lmhpc3RvcnkmJndpbmRvdy5oaXN0b3J5LmNvbnN0cnVjdG9yJiZ3aW5kb3cuaGlzdG9yeS5jb25zdHJ1Y3Rvci5wcm90b3R5cGUsYT13aW5kb3cuaGlzdG9yeTtpJiZpLnB1c2hTdGF0ZSYmaS5yZXBsYWNlU3RhdGUmJihhPWkpLG8uaW5QbGFjZShhLFsicHVzaFN0YXRlIiwicmVwbGFjZVN0YXRlIl0sIi0iKX0se31dLDk6W2Z1bmN0aW9uKHQsZSxuKXtmdW5jdGlvbiByKHQpe2Z1bmN0aW9uIGUoKXtjLmVtaXQoImpzb25wLWVuZCIsW10scCksdC5yZW1vdmVFdmVudExpc3RlbmVyKCJsb2FkIixlLCExKSx0LnJlbW92ZUV2ZW50TGlzdGVuZXIoImVycm9yIixuLCExKX1mdW5jdGlvbiBuKCl7Yy5lbWl0KCJqc29ucC1lcnJvciIsW10scCksYy5lbWl0KCJqc29ucC1lbmQiLFtdLHApLHQucmVtb3ZlRXZlbnRMaXN0ZW5lcigibG9hZCIsZSwhMSksdC5yZW1vdmVFdmVudExpc3RlbmVyKCJlcnJvciIsbiwhMSl9dmFyIHI9dCYmInN0cmluZyI9PXR5cGVvZiB0Lm5vZGVOYW1lJiYic2NyaXB0Ij09PXQubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtpZihyKXt2YXIgbz0iZnVuY3Rpb24iPT10eXBlb2YgdC5hZGRFdmVudExpc3RlbmVyO2lmKG8pe3ZhciBhPWkodC5zcmMpO2lmKGEpe3ZhciB1PXMoYSksZD0iZnVuY3Rpb24iPT10eXBlb2YgdS5wYXJlbnRbdS5rZXldO2lmKGQpe3ZhciBwPXt9O2YuaW5QbGFjZSh1LnBhcmVudCxbdS5rZXldLCJjYi0iLHApLHQuYWRkRXZlbnRMaXN0ZW5lcigibG9hZCIsZSwhMSksdC5hZGRFdmVudExpc3RlbmVyKCJlcnJvciIsbiwhMSksYy5lbWl0KCJuZXctanNvbnAiLFt0LnNyY10scCl9fX19fWZ1bmN0aW9uIG8oKXtyZXR1cm4iYWRkRXZlbnRMaXN0ZW5lciJpbiB3aW5kb3d9ZnVuY3Rpb24gaSh0KXt2YXIgZT10Lm1hdGNoKHUpO3JldHVybiBlP2VbMV06bnVsbH1mdW5jdGlvbiBhKHQsZSl7dmFyIG49dC5tYXRjaChwKSxyPW5bMV0sbz1uWzNdO3JldHVybiBvP2EobyxlW3JdKTplW3JdfWZ1bmN0aW9uIHModCl7dmFyIGU9dC5tYXRjaChkKTtyZXR1cm4gZSYmZS5sZW5ndGg+PTM/e2tleTplWzJdLHBhcmVudDphKGVbMV0sd2luZG93KX06e2tleTp0LHBhcmVudDp3aW5kb3d9fXZhciBjPXQoImVlIikuZ2V0KCJqc29ucCIpLGY9dCgid3JhcC1mdW5jdGlvbiIpKGMpO2lmKGUuZXhwb3J0cz1jLG8oKSl7dmFyIHU9L1s/Jl0oPzpjYWxsYmFja3xjYik9KFteJiNdKykvLGQ9LyguKilcLihbXi5dKykvLHA9L14oXHcrKShcLnwkKSguKikkLyxsPVsiYXBwZW5kQ2hpbGQiLCJpbnNlcnRCZWZvcmUiLCJyZXBsYWNlQ2hpbGQiXTtOb2RlJiZOb2RlLnByb3RvdHlwZSYmTm9kZS5wcm90b3R5cGUuYXBwZW5kQ2hpbGQ/Zi5pblBsYWNlKE5vZGUucHJvdG90eXBlLGwsImRvbS0iKTooZi5pblBsYWNlKEhUTUxFbGVtZW50LnByb3RvdHlwZSxsLCJkb20tIiksZi5pblBsYWNlKEhUTUxIZWFkRWxlbWVudC5wcm90b3R5cGUsbCwiZG9tLSIpLGYuaW5QbGFjZShIVE1MQm9keUVsZW1lbnQucHJvdG90eXBlLGwsImRvbS0iKSksYy5vbigiZG9tLXN0YXJ0IixmdW5jdGlvbih0KXtyKHRbMF0pfSl9fSx7fV0sMTA6W2Z1bmN0aW9uKHQsZSxuKXt2YXIgcj10KCJlZSIpLmdldCgibXV0YXRpb24iKSxvPXQoIndyYXAtZnVuY3Rpb24iKShyKSxpPU5SRVVNLm8uTU87ZS5leHBvcnRzPXIsaSYmKHdpbmRvdy5NdXRhdGlvbk9ic2VydmVyPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzIGluc3RhbmNlb2YgaT9uZXcgaShvKHQsImZuLSIpKTppLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sTXV0YXRpb25PYnNlcnZlci5wcm90b3R5cGU9aS5wcm90b3R5cGUpfSx7fV0sMTE6W2Z1bmN0aW9uKHQsZSxuKXtmdW5jdGlvbiByKHQpe3ZhciBlPWEuY29udGV4dCgpLG49cyh0LCJleGVjdXRvci0iLGUpLHI9bmV3IGYobik7cmV0dXJuIGEuY29udGV4dChyKS5nZXRDdHg9ZnVuY3Rpb24oKXtyZXR1cm4gZX0sYS5lbWl0KCJuZXctcHJvbWlzZSIsW3IsZV0sZSkscn1mdW5jdGlvbiBvKHQsZSl7cmV0dXJuIGV9dmFyIGk9dCgid3JhcC1mdW5jdGlvbiIpLGE9dCgiZWUiKS5nZXQoInByb21pc2UiKSxzPWkoYSksYz10KDI1KSxmPU5SRVVNLm8uUFI7ZS5leHBvcnRzPWEsZiYmKHdpbmRvdy5Qcm9taXNlPXIsWyJhbGwiLCJyYWNlIl0uZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgZT1mW3RdO2ZbdF09ZnVuY3Rpb24obil7ZnVuY3Rpb24gcih0KXtyZXR1cm4gZnVuY3Rpb24oKXthLmVtaXQoInByb3BhZ2F0ZSIsW251bGwsIW9dLGkpLG89b3x8IXR9fXZhciBvPSExO2MobixmdW5jdGlvbihlLG4pe1Byb21pc2UucmVzb2x2ZShuKS50aGVuKHIoImFsbCI9PT10KSxyKCExKSl9KTt2YXIgaT1lLmFwcGx5KGYsYXJndW1lbnRzKSxzPWYucmVzb2x2ZShpKTtyZXR1cm4gc319KSxbInJlc29sdmUiLCJyZWplY3QiXS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3ZhciBlPWZbdF07Zlt0XT1mdW5jdGlvbih0KXt2YXIgbj1lLmFwcGx5KGYsYXJndW1lbnRzKTtyZXR1cm4gdCE9PW4mJmEuZW1pdCgicHJvcGFnYXRlIixbdCwhMF0sbiksbn19KSxmLnByb3RvdHlwZVsiY2F0Y2giXT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy50aGVuKG51bGwsdCl9LGYucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZi5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTpyfX0pLGMoT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoZiksZnVuY3Rpb24odCxlKXt0cnl7cltlXT1mW2VdfWNhdGNoKG4pe319KSxhLm9uKCJleGVjdXRvci1zdGFydCIsZnVuY3Rpb24odCl7dFswXT1zKHRbMF0sInJlc29sdmUtIix0aGlzKSx0WzFdPXModFsxXSwicmVzb2x2ZS0iLHRoaXMpfSksYS5vbigiZXhlY3V0b3ItZXJyIixmdW5jdGlvbih0LGUsbil7dFsxXShuKX0pLHMuaW5QbGFjZShmLnByb3RvdHlwZSxbInRoZW4iXSwidGhlbi0iLG8pLGEub24oInRoZW4tc3RhcnQiLGZ1bmN0aW9uKHQsZSl7dGhpcy5wcm9taXNlPWUsdFswXT1zKHRbMF0sImNiLSIsdGhpcyksdFsxXT1zKHRbMV0sImNiLSIsdGhpcyl9KSxhLm9uKCJ0aGVuLWVuZCIsZnVuY3Rpb24odCxlLG4pe3RoaXMubmV4dFByb21pc2U9bjt2YXIgcj10aGlzLnByb21pc2U7YS5lbWl0KCJwcm9wYWdhdGUiLFtyLCEwXSxuKX0pLGEub24oImNiLWVuZCIsZnVuY3Rpb24odCxlLG4pe2EuZW1pdCgicHJvcGFnYXRlIixbbiwhMF0sdGhpcy5uZXh0UHJvbWlzZSl9KSxhLm9uKCJwcm9wYWdhdGUiLGZ1bmN0aW9uKHQsZSxuKXt0aGlzLmdldEN0eCYmIWV8fCh0aGlzLmdldEN0eD1mdW5jdGlvbigpe2lmKHQgaW5zdGFuY2VvZiBQcm9taXNlKXZhciBlPWEuY29udGV4dCh0KTtyZXR1cm4gZSYmZS5nZXRDdHg/ZS5nZXRDdHgoKTp0aGlzfSl9KSxyLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIiIrZn0pfSx7fV0sMTI6W2Z1bmN0aW9uKHQsZSxuKXt2YXIgcj10KCJlZSIpLmdldCgicmFmIiksbz10KCJ3cmFwLWZ1bmN0aW9uIikociksaT0iZXF1ZXN0QW5pbWF0aW9uRnJhbWUiO2UuZXhwb3J0cz1yLG8uaW5QbGFjZSh3aW5kb3csWyJyIitpLCJtb3pSIitpLCJ3ZWJraXRSIitpLCJtc1IiK2ldLCJyYWYtIiksci5vbigicmFmLXN0YXJ0IixmdW5jdGlvbih0KXt0WzBdPW8odFswXSwiZm4tIil9KX0se31dLDEzOltmdW5jdGlvbih0LGUsbil7ZnVuY3Rpb24gcih0LGUsbil7dFswXT1hKHRbMF0sImZuLSIsbnVsbCxuKX1mdW5jdGlvbiBvKHQsZSxuKXt0aGlzLm1ldGhvZD1uLHRoaXMudGltZXJEdXJhdGlvbj1pc05hTih0WzFdKT8wOit0WzFdLHRbMF09YSh0WzBdLCJmbi0iLHRoaXMsbil9dmFyIGk9dCgiZWUiKS5nZXQoInRpbWVyIiksYT10KCJ3cmFwLWZ1bmN0aW9uIikoaSkscz0ic2V0VGltZW91dCIsYz0ic2V0SW50ZXJ2YWwiLGY9ImNsZWFyVGltZW91dCIsdT0iLXN0YXJ0IixkPSItIjtlLmV4cG9ydHM9aSxhLmluUGxhY2Uod2luZG93LFtzLCJzZXRJbW1lZGlhdGUiXSxzK2QpLGEuaW5QbGFjZSh3aW5kb3csW2NdLGMrZCksYS5pblBsYWNlKHdpbmRvdyxbZiwiY2xlYXJJbW1lZGlhdGUiXSxmK2QpLGkub24oYyt1LHIpLGkub24ocyt1LG8pfSx7fV0sMTQ6W2Z1bmN0aW9uKHQsZSxuKXtmdW5jdGlvbiByKHQsZSl7ZC5pblBsYWNlKGUsWyJvbnJlYWR5c3RhdGVjaGFuZ2UiXSwiZm4tIixzKX1mdW5jdGlvbiBvKCl7dmFyIHQ9dGhpcyxlPXUuY29udGV4dCh0KTt0LnJlYWR5U3RhdGU+MyYmIWUucmVzb2x2ZWQmJihlLnJlc29sdmVkPSEwLHUuZW1pdCgieGhyLXJlc29sdmVkIixbXSx0KSksZC5pblBsYWNlKHQsZywiZm4tIixzKX1mdW5jdGlvbiBpKHQpe3kucHVzaCh0KSxoJiYoYj9iLnRoZW4oYSk6dj92KGEpOihFPS1FLE8uZGF0YT1FKSl9ZnVuY3Rpb24gYSgpe2Zvcih2YXIgdD0wO3Q8eS5sZW5ndGg7dCsrKXIoW10seVt0XSk7eS5sZW5ndGgmJih5PVtdKX1mdW5jdGlvbiBzKHQsZSl7cmV0dXJuIGV9ZnVuY3Rpb24gYyh0LGUpe2Zvcih2YXIgbiBpbiB0KWVbbl09dFtuXTtyZXR1cm4gZX10KDYpO3ZhciBmPXQoImVlIiksdT1mLmdldCgieGhyIiksZD10KCJ3cmFwLWZ1bmN0aW9uIikodSkscD1OUkVVTS5vLGw9cC5YSFIsaD1wLk1PLG09cC5QUix2PXAuU0ksdz0icmVhZHlzdGF0ZWNoYW5nZSIsZz1bIm9ubG9hZCIsIm9uZXJyb3IiLCJvbmFib3J0Iiwib25sb2Fkc3RhcnQiLCJvbmxvYWRlbmQiLCJvbnByb2dyZXNzIiwib250aW1lb3V0Il0seT1bXTtlLmV4cG9ydHM9dTt2YXIgeD13aW5kb3cuWE1MSHR0cFJlcXVlc3Q9ZnVuY3Rpb24odCl7dmFyIGU9bmV3IGwodCk7dHJ5e3UuZW1pdCgibmV3LXhociIsW2VdLGUpLGUuYWRkRXZlbnRMaXN0ZW5lcih3LG8sITEpfWNhdGNoKG4pe3RyeXt1LmVtaXQoImludGVybmFsLWVycm9yIixbbl0pfWNhdGNoKHIpe319cmV0dXJuIGV9O2lmKGMobCx4KSx4LnByb3RvdHlwZT1sLnByb3RvdHlwZSxkLmluUGxhY2UoeC5wcm90b3R5cGUsWyJvcGVuIiwic2VuZCJdLCIteGhyLSIscyksdS5vbigic2VuZC14aHItc3RhcnQiLGZ1bmN0aW9uKHQsZSl7cih0LGUpLGkoZSl9KSx1Lm9uKCJvcGVuLXhoci1zdGFydCIsciksaCl7dmFyIGI9bSYmbS5yZXNvbHZlKCk7aWYoIXYmJiFtKXt2YXIgRT0xLE89ZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoRSk7bmV3IGgoYSkub2JzZXJ2ZShPLHtjaGFyYWN0ZXJEYXRhOiEwfSl9fWVsc2UgZi5vbigiZm4tZW5kIixmdW5jdGlvbih0KXt0WzBdJiZ0WzBdLnR5cGU9PT13fHxhKCl9KX0se31dLDE1OltmdW5jdGlvbih0LGUsbil7ZnVuY3Rpb24gcih0KXtpZighaSh0KSlyZXR1cm4gbnVsbDt2YXIgZT13aW5kb3cuTlJFVU07aWYoIWUubG9hZGVyX2NvbmZpZylyZXR1cm4gbnVsbDt2YXIgbj0oZS5sb2FkZXJfY29uZmlnLmFjY291bnRJRHx8IiIpLnRvU3RyaW5nKCl8fG51bGwscj0oZS5sb2FkZXJfY29uZmlnLmFnZW50SUR8fCIiKS50b1N0cmluZygpfHxudWxsLHM9KGUubG9hZGVyX2NvbmZpZy50cnVzdEtleXx8IiIpLnRvU3RyaW5nKCl8fG51bGw7aWYoIW58fCFyKXJldHVybiBudWxsO3ZhciBjPWEuZ2VuZXJhdGVDYXRJZCgpLGY9YS5nZW5lcmF0ZUNhdElkKCksdT1EYXRlLm5vdygpLGQ9byhjLGYsdSxuLHIscyk7cmV0dXJue2hlYWRlcjpkLGd1aWQ6Yyx0cmFjZUlkOmYsdGltZXN0YW1wOnV9fWZ1bmN0aW9uIG8odCxlLG4scixvLGkpe3ZhciBhPSJidG9hImluIHdpbmRvdyYmImZ1bmN0aW9uIj09dHlwZW9mIHdpbmRvdy5idG9hO2lmKCFhKXJldHVybiBudWxsO3ZhciBzPXt2OlswLDFdLGQ6e3R5OiJCcm93c2VyIixhYzpyLGFwOm8saWQ6dCx0cjplLHRpOm59fTtyZXR1cm4gaSYmciE9PWkmJihzLmQudGs9aSksYnRvYShKU09OLnN0cmluZ2lmeShzKSl9ZnVuY3Rpb24gaSh0KXt2YXIgZT0hMSxuPSExLHI9e307aWYoImluaXQiaW4gTlJFVU0mJiJkaXN0cmlidXRlZF90cmFjaW5nImluIE5SRVVNLmluaXQmJihyPU5SRVVNLmluaXQuZGlzdHJpYnV0ZWRfdHJhY2luZyxuPSEhci5lbmFibGVkKSxuKWlmKHQuc2FtZU9yaWdpbillPSEwO2Vsc2UgaWYoci5hbGxvd2VkX29yaWdpbnMgaW5zdGFuY2VvZiBBcnJheSlmb3IodmFyIG89MDtvPHIuYWxsb3dlZF9vcmlnaW5zLmxlbmd0aDtvKyspe3ZhciBpPXMoci5hbGxvd2VkX29yaWdpbnNbb10pO2lmKHQuaG9zdG5hbWU9PT1pLmhvc3RuYW1lJiZ0LnByb3RvY29sPT09aS5wcm90b2NvbCYmdC5wb3J0PT09aS5wb3J0KXtlPSEwO2JyZWFrfX1yZXR1cm4gbiYmZX12YXIgYT10KDIzKSxzPXQoMTcpO2UuZXhwb3J0cz17Z2VuZXJhdGVUcmFjZVBheWxvYWQ6cixzaG91bGRHZW5lcmF0ZVRyYWNlOml9fSx7fV0sMTY6W2Z1bmN0aW9uKHQsZSxuKXtmdW5jdGlvbiByKHQpe3ZhciBlPXRoaXMucGFyYW1zLG49dGhpcy5tZXRyaWNzO2lmKCF0aGlzLmVuZGVkKXt0aGlzLmVuZGVkPSEwO2Zvcih2YXIgcj0wO3I8cDtyKyspdC5yZW1vdmVFdmVudExpc3RlbmVyKGRbcl0sdGhpcy5saXN0ZW5lciwhMSk7ZS5hYm9ydGVkfHwobi5kdXJhdGlvbj1hLm5vdygpLXRoaXMuc3RhcnRUaW1lLHRoaXMubG9hZENhcHR1cmVDYWxsZWR8fDQhPT10LnJlYWR5U3RhdGU/bnVsbD09ZS5zdGF0dXMmJihlLnN0YXR1cz0wKTppKHRoaXMsdCksbi5jYlRpbWU9dGhpcy5jYlRpbWUsdS5lbWl0KCJ4aHItZG9uZSIsW3RdLHQpLHMoInhociIsW2Usbix0aGlzLnN0YXJ0VGltZV0pKX19ZnVuY3Rpb24gbyh0LGUpe3ZhciBuPWMoZSkscj10LnBhcmFtcztyLmhvc3Q9bi5ob3N0bmFtZSsiOiIrbi5wb3J0LHIucGF0aG5hbWU9bi5wYXRobmFtZSx0LnBhcnNlZE9yaWdpbj1jKGUpLHQuc2FtZU9yaWdpbj10LnBhcnNlZE9yaWdpbi5zYW1lT3JpZ2lufWZ1bmN0aW9uIGkodCxlKXt0LnBhcmFtcy5zdGF0dXM9ZS5zdGF0dXM7dmFyIG49dihlLHQubGFzdFNpemUpO2lmKG4mJih0Lm1ldHJpY3MucnhTaXplPW4pLHQuc2FtZU9yaWdpbil7dmFyIHI9ZS5nZXRSZXNwb25zZUhlYWRlcigiWC1OZXdSZWxpYy1BcHAtRGF0YSIpO3ImJih0LnBhcmFtcy5jYXQ9ci5zcGxpdCgiLCAiKS5wb3AoKSl9dC5sb2FkQ2FwdHVyZUNhbGxlZD0hMH12YXIgYT10KCJsb2FkZXIiKTtpZihhLnhocldyYXBwYWJsZSl7dmFyIHM9dCgiaGFuZGxlIiksYz10KDE3KSxmPXQoMTUpLmdlbmVyYXRlVHJhY2VQYXlsb2FkLHU9dCgiZWUiKSxkPVsibG9hZCIsImVycm9yIiwiYWJvcnQiLCJ0aW1lb3V0Il0scD1kLmxlbmd0aCxsPXQoImlkIiksaD10KDIxKSxtPXQoMjApLHY9dCgxOCksdz13aW5kb3cuWE1MSHR0cFJlcXVlc3Q7YS5mZWF0dXJlcy54aHI9ITAsdCgxNCksdCg3KSx1Lm9uKCJuZXcteGhyIixmdW5jdGlvbih0KXt2YXIgZT10aGlzO2UudG90YWxDYnM9MCxlLmNhbGxlZD0wLGUuY2JUaW1lPTAsZS5lbmQ9cixlLmVuZGVkPSExLGUueGhyR3VpZHM9e30sZS5sYXN0U2l6ZT1udWxsLGUubG9hZENhcHR1cmVDYWxsZWQ9ITEsdC5hZGRFdmVudExpc3RlbmVyKCJsb2FkIixmdW5jdGlvbihuKXtpKGUsdCl9LCExKSxoJiYoaD4zNHx8aDwxMCl8fHdpbmRvdy5vcGVyYXx8dC5hZGRFdmVudExpc3RlbmVyKCJwcm9ncmVzcyIsZnVuY3Rpb24odCl7ZS5sYXN0U2l6ZT10LmxvYWRlZH0sITEpfSksdS5vbigib3Blbi14aHItc3RhcnQiLGZ1bmN0aW9uKHQpe3RoaXMucGFyYW1zPXttZXRob2Q6dFswXX0sbyh0aGlzLHRbMV0pLHRoaXMubWV0cmljcz17fX0pLHUub24oIm9wZW4teGhyLWVuZCIsZnVuY3Rpb24odCxlKXsibG9hZGVyX2NvbmZpZyJpbiBOUkVVTSYmInhwaWQiaW4gTlJFVU0ubG9hZGVyX2NvbmZpZyYmdGhpcy5zYW1lT3JpZ2luJiZlLnNldFJlcXVlc3RIZWFkZXIoIlgtTmV3UmVsaWMtSUQiLE5SRVVNLmxvYWRlcl9jb25maWcueHBpZCk7dmFyIG49Zih0aGlzLnBhcnNlZE9yaWdpbik7biYmbi5oZWFkZXImJihlLnNldFJlcXVlc3RIZWFkZXIoIm5ld3JlbGljIixuLmhlYWRlciksdGhpcy5kdD1uKX0pLHUub24oInNlbmQteGhyLXN0YXJ0IixmdW5jdGlvbih0LGUpe3ZhciBuPXRoaXMubWV0cmljcyxyPXRbMF0sbz10aGlzO2lmKG4mJnIpe3ZhciBpPW0ocik7aSYmKG4udHhTaXplPWkpfXRoaXMuc3RhcnRUaW1lPWEubm93KCksdGhpcy5saXN0ZW5lcj1mdW5jdGlvbih0KXt0cnl7ImFib3J0IiE9PXQudHlwZXx8by5sb2FkQ2FwdHVyZUNhbGxlZHx8KG8ucGFyYW1zLmFib3J0ZWQ9ITApLCgibG9hZCIhPT10LnR5cGV8fG8uY2FsbGVkPT09by50b3RhbENicyYmKG8ub25sb2FkQ2FsbGVkfHwiZnVuY3Rpb24iIT10eXBlb2YgZS5vbmxvYWQpKSYmby5lbmQoZSl9Y2F0Y2gobil7dHJ5e3UuZW1pdCgiaW50ZXJuYWwtZXJyb3IiLFtuXSl9Y2F0Y2gocil7fX19O2Zvcih2YXIgcz0wO3M8cDtzKyspZS5hZGRFdmVudExpc3RlbmVyKGRbc10sdGhpcy5saXN0ZW5lciwhMSl9KSx1Lm9uKCJ4aHItY2ItdGltZSIsZnVuY3Rpb24odCxlLG4pe3RoaXMuY2JUaW1lKz10LGU/dGhpcy5vbmxvYWRDYWxsZWQ9ITA6dGhpcy5jYWxsZWQrPTEsdGhpcy5jYWxsZWQhPT10aGlzLnRvdGFsQ2JzfHwhdGhpcy5vbmxvYWRDYWxsZWQmJiJmdW5jdGlvbiI9PXR5cGVvZiBuLm9ubG9hZHx8dGhpcy5lbmQobil9KSx1Lm9uKCJ4aHItbG9hZC1hZGRlZCIsZnVuY3Rpb24odCxlKXt2YXIgbj0iIitsKHQpKyEhZTt0aGlzLnhockd1aWRzJiYhdGhpcy54aHJHdWlkc1tuXSYmKHRoaXMueGhyR3VpZHNbbl09ITAsdGhpcy50b3RhbENicys9MSl9KSx1Lm9uKCJ4aHItbG9hZC1yZW1vdmVkIixmdW5jdGlvbih0LGUpe3ZhciBuPSIiK2wodCkrISFlO3RoaXMueGhyR3VpZHMmJnRoaXMueGhyR3VpZHNbbl0mJihkZWxldGUgdGhpcy54aHJHdWlkc1tuXSx0aGlzLnRvdGFsQ2JzLT0xKX0pLHUub24oImFkZEV2ZW50TGlzdGVuZXItZW5kIixmdW5jdGlvbih0LGUpe2UgaW5zdGFuY2VvZiB3JiYibG9hZCI9PT10WzBdJiZ1LmVtaXQoInhoci1sb2FkLWFkZGVkIixbdFsxXSx0WzJdXSxlKX0pLHUub24oInJlbW92ZUV2ZW50TGlzdGVuZXItZW5kIixmdW5jdGlvbih0LGUpe2UgaW5zdGFuY2VvZiB3JiYibG9hZCI9PT10WzBdJiZ1LmVtaXQoInhoci1sb2FkLXJlbW92ZWQiLFt0WzFdLHRbMl1dLGUpfSksdS5vbigiZm4tc3RhcnQiLGZ1bmN0aW9uKHQsZSxuKXtlIGluc3RhbmNlb2YgdyYmKCJvbmxvYWQiPT09biYmKHRoaXMub25sb2FkPSEwKSwoImxvYWQiPT09KHRbMF0mJnRbMF0udHlwZSl8fHRoaXMub25sb2FkKSYmKHRoaXMueGhyQ2JTdGFydD1hLm5vdygpKSl9KSx1Lm9uKCJmbi1lbmQiLGZ1bmN0aW9uKHQsZSl7dGhpcy54aHJDYlN0YXJ0JiZ1LmVtaXQoInhoci1jYi10aW1lIixbYS5ub3coKS10aGlzLnhockNiU3RhcnQsdGhpcy5vbmxvYWQsZV0sZSl9KSx1Lm9uKCJmZXRjaC1iZWZvcmUtc3RhcnQiLGZ1bmN0aW9uKHQpe3ZhciBlLG49dFsxXXx8e307InN0cmluZyI9PXR5cGVvZiB0WzBdP2U9dFswXTp0WzBdJiZ0WzBdLnVybCYmKGU9dFswXS51cmwpLGUmJih0aGlzLnBhcnNlZE9yaWdpbj1jKGUpLHRoaXMuc2FtZU9yaWdpbj10aGlzLnBhcnNlZE9yaWdpbi5zYW1lT3JpZ2luKTt2YXIgcj1mKHRoaXMucGFyc2VkT3JpZ2luKTtpZihyJiZyLmhlYWRlcil7dmFyIG89ci5oZWFkZXI7aWYoInN0cmluZyI9PXR5cGVvZiB0WzBdKXt2YXIgaT17fTtmb3IodmFyIGEgaW4gbilpW2FdPW5bYV07aS5oZWFkZXJzPW5ldyBIZWFkZXJzKG4uaGVhZGVyc3x8e30pLGkuaGVhZGVycy5zZXQoIm5ld3JlbGljIixvKSx0aGlzLmR0PXIsdC5sZW5ndGg+MT90WzFdPWk6dC5wdXNoKGkpfWVsc2UgdFswXSYmdFswXS5oZWFkZXJzJiYodFswXS5oZWFkZXJzLmFwcGVuZCgibmV3cmVsaWMiLG8pLHRoaXMuZHQ9cil9fSl9fSx7fV0sMTc6W2Z1bmN0aW9uKHQsZSxuKXt2YXIgcj17fTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7aWYodCBpbiByKXJldHVybiByW3RdO3ZhciBlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKSxuPXdpbmRvdy5sb2NhdGlvbixvPXt9O2UuaHJlZj10LG8ucG9ydD1lLnBvcnQ7dmFyIGk9ZS5ocmVmLnNwbGl0KCI6Ly8iKTshby5wb3J0JiZpWzFdJiYoby5wb3J0PWlbMV0uc3BsaXQoIi8iKVswXS5zcGxpdCgiQCIpLnBvcCgpLnNwbGl0KCI6IilbMV0pLG8ucG9ydCYmIjAiIT09by5wb3J0fHwoby5wb3J0PSJodHRwcyI9PT1pWzBdPyI0NDMiOiI4MCIpLG8uaG9zdG5hbWU9ZS5ob3N0bmFtZXx8bi5ob3N0bmFtZSxvLnBhdGhuYW1lPWUucGF0aG5hbWUsby5wcm90b2NvbD1pWzBdLCIvIiE9PW8ucGF0aG5hbWUuY2hhckF0KDApJiYoby5wYXRobmFtZT0iLyIrby5wYXRobmFtZSk7dmFyIGE9IWUucHJvdG9jb2x8fCI6Ij09PWUucHJvdG9jb2x8fGUucHJvdG9jb2w9PT1uLnByb3RvY29sLHM9ZS5ob3N0bmFtZT09PWRvY3VtZW50LmRvbWFpbiYmZS5wb3J0PT09bi5wb3J0O3JldHVybiBvLnNhbWVPcmlnaW49YSYmKCFlLmhvc3RuYW1lfHxzKSwiLyI9PT1vLnBhdGhuYW1lJiYoclt0XT1vKSxvfX0se31dLDE4OltmdW5jdGlvbih0LGUsbil7ZnVuY3Rpb24gcih0LGUpe3ZhciBuPXQucmVzcG9uc2VUeXBlO3JldHVybiJqc29uIj09PW4mJm51bGwhPT1lP2U6ImFycmF5YnVmZmVyIj09PW58fCJibG9iIj09PW58fCJqc29uIj09PW4/byh0LnJlc3BvbnNlKToidGV4dCI9PT1ufHwiIj09PW58fHZvaWQgMD09PW4/byh0LnJlc3BvbnNlVGV4dCk6dm9pZCAwfXZhciBvPXQoMjApO2UuZXhwb3J0cz1yfSx7fV0sMTk6W2Z1bmN0aW9uKHQsZSxuKXtmdW5jdGlvbiByKCl7fWZ1bmN0aW9uIG8odCxlLG4pe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBpKHQsW2Yubm93KCldLmNvbmNhdChzKGFyZ3VtZW50cykpLGU/bnVsbDp0aGlzLG4pLGU/dm9pZCAwOnRoaXN9fXZhciBpPXQoImhhbmRsZSIpLGE9dCgyNSkscz10KDI2KSxjPXQoImVlIikuZ2V0KCJ0cmFjZXIiKSxmPXQoImxvYWRlciIpLHU9TlJFVU07InVuZGVmaW5lZCI9PXR5cGVvZiB3aW5kb3cubmV3cmVsaWMmJihuZXdyZWxpYz11KTt2YXIgZD1bInNldFBhZ2VWaWV3TmFtZSIsInNldEN1c3RvbUF0dHJpYnV0ZSIsInNldEVycm9ySGFuZGxlciIsImZpbmlzaGVkIiwiYWRkVG9UcmFjZSIsImlubGluZUhpdCIsImFkZFJlbGVhc2UiXSxwPSJhcGktIixsPXArIml4bi0iO2EoZCxmdW5jdGlvbih0LGUpe3VbZV09byhwK2UsITAsImFwaSIpfSksdS5hZGRQYWdlQWN0aW9uPW8ocCsiYWRkUGFnZUFjdGlvbiIsITApLHUuc2V0Q3VycmVudFJvdXRlTmFtZT1vKHArInJvdXRlTmFtZSIsITApLGUuZXhwb3J0cz1uZXdyZWxpYyx1LmludGVyYWN0aW9uPWZ1bmN0aW9uKCl7cmV0dXJuKG5ldyByKS5nZXQoKX07dmFyIGg9ci5wcm90b3R5cGU9e2NyZWF0ZVRyYWNlcjpmdW5jdGlvbih0LGUpe3ZhciBuPXt9LHI9dGhpcyxvPSJmdW5jdGlvbiI9PXR5cGVvZiBlO3JldHVybiBpKGwrInRyYWNlciIsW2Yubm93KCksdCxuXSxyKSxmdW5jdGlvbigpe2lmKGMuZW1pdCgobz8iIjoibm8tIikrImZuLXN0YXJ0IixbZi5ub3coKSxyLG9dLG4pLG8pdHJ5e3JldHVybiBlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1jYXRjaCh0KXt0aHJvdyBjLmVtaXQoImZuLWVyciIsW2FyZ3VtZW50cyx0aGlzLHRdLG4pLHR9ZmluYWxseXtjLmVtaXQoImZuLWVuZCIsW2Yubm93KCldLG4pfX19fTthKCJhY3Rpb25UZXh0LHNldE5hbWUsc2V0QXR0cmlidXRlLHNhdmUsaWdub3JlLG9uRW5kLGdldENvbnRleHQsZW5kLGdldCIuc3BsaXQoIiwiKSxmdW5jdGlvbih0LGUpe2hbZV09byhsK2UpfSksbmV3cmVsaWMubm90aWNlRXJyb3I9ZnVuY3Rpb24odCxlKXsic3RyaW5nIj09dHlwZW9mIHQmJih0PW5ldyBFcnJvcih0KSksaSgiZXJyIixbdCxmLm5vdygpLCExLGVdKX19LHt9XSwyMDpbZnVuY3Rpb24odCxlLG4pe2UuZXhwb3J0cz1mdW5jdGlvbih0KXtpZigic3RyaW5nIj09dHlwZW9mIHQmJnQubGVuZ3RoKXJldHVybiB0Lmxlbmd0aDtpZigib2JqZWN0Ij09dHlwZW9mIHQpe2lmKCJ1bmRlZmluZWQiIT10eXBlb2YgQXJyYXlCdWZmZXImJnQgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlciYmdC5ieXRlTGVuZ3RoKXJldHVybiB0LmJ5dGVMZW5ndGg7aWYoInVuZGVmaW5lZCIhPXR5cGVvZiBCbG9iJiZ0IGluc3RhbmNlb2YgQmxvYiYmdC5zaXplKXJldHVybiB0LnNpemU7aWYoISgidW5kZWZpbmVkIiE9dHlwZW9mIEZvcm1EYXRhJiZ0IGluc3RhbmNlb2YgRm9ybURhdGEpKXRyeXtyZXR1cm4gSlNPTi5zdHJpbmdpZnkodCkubGVuZ3RofWNhdGNoKGUpe3JldHVybn19fX0se31dLDIxOltmdW5jdGlvbih0LGUsbil7dmFyIHI9MCxvPW5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL0ZpcmVmb3hbXC9cc10oXGQrXC5cZCspLyk7byYmKHI9K29bMV0pLGUuZXhwb3J0cz1yfSx7fV0sMjI6W2Z1bmN0aW9uKHQsZSxuKXtmdW5jdGlvbiByKHQsZSl7dmFyIG49dC5nZXRFbnRyaWVzKCk7bi5mb3JFYWNoKGZ1bmN0aW9uKHQpeyJmaXJzdC1wYWludCI9PT10Lm5hbWU/YygidGltaW5nIixbImZwIixNYXRoLmZsb29yKHQuc3RhcnRUaW1lKV0pOiJmaXJzdC1jb250ZW50ZnVsLXBhaW50Ij09PXQubmFtZSYmYygidGltaW5nIixbImZjcCIsTWF0aC5mbG9vcih0LnN0YXJ0VGltZSldKX0pfWZ1bmN0aW9uIG8odCxlKXt2YXIgbj10LmdldEVudHJpZXMoKTtuLmxlbmd0aD4wJiZjKCJsY3AiLFtuW24ubGVuZ3RoLTFdXSl9ZnVuY3Rpb24gaSh0KXtpZih0IGluc3RhbmNlb2YgdSYmIXApe3ZhciBlLG49TWF0aC5yb3VuZCh0LnRpbWVTdGFtcCk7ZT1uPjFlMTI/RGF0ZS5ub3coKS1uOmYubm93KCktbixwPSEwLGMoInRpbWluZyIsWyJmaSIsbix7dHlwZTp0LnR5cGUsZmlkOmV9XSl9fWlmKCEoImluaXQiaW4gTlJFVU0mJiJwYWdlX3ZpZXdfdGltaW5nImluIE5SRVVNLmluaXQmJiJlbmFibGVkImluIE5SRVVNLmluaXQucGFnZV92aWV3X3RpbWluZyYmTlJFVU0uaW5pdC5wYWdlX3ZpZXdfdGltaW5nLmVuYWJsZWQ9PT0hMSkpe3ZhciBhLHMsYz10KCJoYW5kbGUiKSxmPXQoImxvYWRlciIpLHU9TlJFVU0uby5FVjtpZigiUGVyZm9ybWFuY2VPYnNlcnZlciJpbiB3aW5kb3cmJiJmdW5jdGlvbiI9PXR5cGVvZiB3aW5kb3cuUGVyZm9ybWFuY2VPYnNlcnZlcil7YT1uZXcgUGVyZm9ybWFuY2VPYnNlcnZlcihyKSxzPW5ldyBQZXJmb3JtYW5jZU9ic2VydmVyKG8pO3RyeXthLm9ic2VydmUoe2VudHJ5VHlwZXM6WyJwYWludCJdfSkscy5vYnNlcnZlKHtlbnRyeVR5cGVzOlsibGFyZ2VzdC1jb250ZW50ZnVsLXBhaW50Il19KX1jYXRjaChkKXt9fWlmKCJhZGRFdmVudExpc3RlbmVyImluIGRvY3VtZW50KXt2YXIgcD0hMSxsPVsiY2xpY2siLCJrZXlkb3duIiwibW91c2Vkb3duIiwicG9pbnRlcmRvd24iLCJ0b3VjaHN0YXJ0Il07bC5mb3JFYWNoKGZ1bmN0aW9uKHQpe2RvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIodCxpLCExKX0pfX19LHt9XSwyMzpbZnVuY3Rpb24odCxlLG4pe2Z1bmN0aW9uIHIoKXtmdW5jdGlvbiB0KCl7cmV0dXJuIGU/MTUmZVtuKytdOjE2Kk1hdGgucmFuZG9tKCl8MH12YXIgZT1udWxsLG49MCxyPXdpbmRvdy5jcnlwdG98fHdpbmRvdy5tc0NyeXB0bztyJiZyLmdldFJhbmRvbVZhbHVlcyYmKGU9ci5nZXRSYW5kb21WYWx1ZXMobmV3IFVpbnQ4QXJyYXkoMzEpKSk7Zm9yKHZhciBvLGk9Inh4eHh4eHh4LXh4eHgtNHh4eC15eHh4LXh4eHh4eHh4eHh4eCIsYT0iIixzPTA7czxpLmxlbmd0aDtzKyspbz1pW3NdLCJ4Ij09PW8/YSs9dCgpLnRvU3RyaW5nKDE2KToieSI9PT1vPyhvPTMmdCgpfDgsYSs9by50b1N0cmluZygxNikpOmErPW87cmV0dXJuIGF9ZnVuY3Rpb24gbygpe2Z1bmN0aW9uIHQoKXtyZXR1cm4gZT8xNSZlW24rK106MTYqTWF0aC5yYW5kb20oKXwwfXZhciBlPW51bGwsbj0wLHI9d2luZG93LmNyeXB0b3x8d2luZG93Lm1zQ3J5cHRvO3ImJnIuZ2V0UmFuZG9tVmFsdWVzJiZVaW50OEFycmF5JiYoZT1yLmdldFJhbmRvbVZhbHVlcyhuZXcgVWludDhBcnJheSgzMSkpKTtmb3IodmFyIG89W10saT0wO2k8MTY7aSsrKW8ucHVzaCh0KCkudG9TdHJpbmcoMTYpKTtyZXR1cm4gby5qb2luKCIiKX1lLmV4cG9ydHM9e2dlbmVyYXRlVXVpZDpyLGdlbmVyYXRlQ2F0SWQ6b319LHt9XSwyNDpbZnVuY3Rpb24odCxlLG4pe2Z1bmN0aW9uIHIodCxlKXtpZighbylyZXR1cm4hMTtpZih0IT09bylyZXR1cm4hMTtpZighZSlyZXR1cm4hMDtpZighaSlyZXR1cm4hMTtmb3IodmFyIG49aS5zcGxpdCgiLiIpLHI9ZS5zcGxpdCgiLiIpLGE9MDthPHIubGVuZ3RoO2ErKylpZihyW2FdIT09blthXSlyZXR1cm4hMTtyZXR1cm4hMH12YXIgbz1udWxsLGk9bnVsbCxhPS9WZXJzaW9uXC8oXFMrKVxzK1NhZmFyaS87aWYobmF2aWdhdG9yLnVzZXJBZ2VudCl7dmFyIHM9bmF2aWdhdG9yLnVzZXJBZ2VudCxjPXMubWF0Y2goYSk7YyYmcy5pbmRleE9mKCJDaHJvbWUiKT09PS0xJiZzLmluZGV4T2YoIkNocm9taXVtIik9PT0tMSYmKG89IlNhZmFyaSIsaT1jWzFdKX1lLmV4cG9ydHM9e2FnZW50Om8sdmVyc2lvbjppLG1hdGNoOnJ9fSx7fV0sMjU6W2Z1bmN0aW9uKHQsZSxuKXtmdW5jdGlvbiByKHQsZSl7dmFyIG49W10scj0iIixpPTA7Zm9yKHIgaW4gdClvLmNhbGwodCxyKSYmKG5baV09ZShyLHRbcl0pLGkrPTEpO3JldHVybiBufXZhciBvPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7ZS5leHBvcnRzPXJ9LHt9XSwyNjpbZnVuY3Rpb24odCxlLG4pe2Z1bmN0aW9uIHIodCxlLG4pe2V8fChlPTApLCJ1bmRlZmluZWQiPT10eXBlb2YgbiYmKG49dD90Lmxlbmd0aDowKTtmb3IodmFyIHI9LTEsbz1uLWV8fDAsaT1BcnJheShvPDA/MDpvKTsrK3I8bzspaVtyXT10W2Urcl07cmV0dXJuIGl9ZS5leHBvcnRzPXJ9LHt9XSwyNzpbZnVuY3Rpb24odCxlLG4pe2UuZXhwb3J0cz17ZXhpc3RzOiJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93LnBlcmZvcm1hbmNlJiZ3aW5kb3cucGVyZm9ybWFuY2UudGltaW5nJiYidW5kZWZpbmVkIiE9dHlwZW9mIHdpbmRvdy5wZXJmb3JtYW5jZS50aW1pbmcubmF2aWdhdGlvblN0YXJ0fX0se31dLGVlOltmdW5jdGlvbih0LGUsbil7ZnVuY3Rpb24gcigpe31mdW5jdGlvbiBvKHQpe2Z1bmN0aW9uIGUodCl7cmV0dXJuIHQmJnQgaW5zdGFuY2VvZiByP3Q6dD9jKHQscyxpKTppKCl9ZnVuY3Rpb24gbihuLHIsbyxpKXtpZighcC5hYm9ydGVkfHxpKXt0JiZ0KG4scixvKTtmb3IodmFyIGE9ZShvKSxzPW0obiksYz1zLmxlbmd0aCxmPTA7ZjxjO2YrKylzW2ZdLmFwcGx5KGEscik7dmFyIGQ9dVt5W25dXTtyZXR1cm4gZCYmZC5wdXNoKFt4LG4scixhXSksYX19ZnVuY3Rpb24gbCh0LGUpe2dbdF09bSh0KS5jb25jYXQoZSl9ZnVuY3Rpb24gaCh0LGUpe3ZhciBuPWdbdF07aWYobilmb3IodmFyIHI9MDtyPG4ubGVuZ3RoO3IrKyluW3JdPT09ZSYmbi5zcGxpY2UociwxKX1mdW5jdGlvbiBtKHQpe3JldHVybiBnW3RdfHxbXX1mdW5jdGlvbiB2KHQpe3JldHVybiBkW3RdPWRbdF18fG8obil9ZnVuY3Rpb24gdyh0LGUpe2YodCxmdW5jdGlvbih0LG4pe2U9ZXx8ImZlYXR1cmUiLHlbbl09ZSxlIGluIHV8fCh1W2VdPVtdKX0pfXZhciBnPXt9LHk9e30seD17b246bCxhZGRFdmVudExpc3RlbmVyOmwscmVtb3ZlRXZlbnRMaXN0ZW5lcjpoLGVtaXQ6bixnZXQ6dixsaXN0ZW5lcnM6bSxjb250ZXh0OmUsYnVmZmVyOncsYWJvcnQ6YSxhYm9ydGVkOiExfTtyZXR1cm4geH1mdW5jdGlvbiBpKCl7cmV0dXJuIG5ldyByfWZ1bmN0aW9uIGEoKXsodS5hcGl8fHUuZmVhdHVyZSkmJihwLmFib3J0ZWQ9ITAsdT1wLmJhY2tsb2c9e30pfXZhciBzPSJuckBjb250ZXh0IixjPXQoImdvcyIpLGY9dCgyNSksdT17fSxkPXt9LHA9ZS5leHBvcnRzPW8oKTtwLmJhY2tsb2c9dX0se31dLGdvczpbZnVuY3Rpb24odCxlLG4pe2Z1bmN0aW9uIHIodCxlLG4pe2lmKG8uY2FsbCh0LGUpKXJldHVybiB0W2VdO3ZhciByPW4oKTtpZihPYmplY3QuZGVmaW5lUHJvcGVydHkmJk9iamVjdC5rZXlzKXRyeXtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsZSx7dmFsdWU6cix3cml0YWJsZTohMCxlbnVtZXJhYmxlOiExfSkscn1jYXRjaChpKXt9cmV0dXJuIHRbZV09cixyfXZhciBvPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7ZS5leHBvcnRzPXJ9LHt9XSxoYW5kbGU6W2Z1bmN0aW9uKHQsZSxuKXtmdW5jdGlvbiByKHQsZSxuLHIpe28uYnVmZmVyKFt0XSxyKSxvLmVtaXQodCxlLG4pfXZhciBvPXQoImVlIikuZ2V0KCJoYW5kbGUiKTtlLmV4cG9ydHM9cixyLmVlPW99LHt9XSxpZDpbZnVuY3Rpb24odCxlLG4pe2Z1bmN0aW9uIHIodCl7dmFyIGU9dHlwZW9mIHQ7cmV0dXJuIXR8fCJvYmplY3QiIT09ZSYmImZ1bmN0aW9uIiE9PWU/LTE6dD09PXdpbmRvdz8wOmEodCxpLGZ1bmN0aW9uKCl7cmV0dXJuIG8rK30pfXZhciBvPTEsaT0ibnJAaWQiLGE9dCgiZ29zIik7ZS5leHBvcnRzPXJ9LHt9XSxsb2FkZXI6W2Z1bmN0aW9uKHQsZSxuKXtmdW5jdGlvbiByKCl7aWYoIUUrKyl7dmFyIHQ9Yi5pbmZvPU5SRVVNLmluZm8sZT1sLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJzY3JpcHQiKVswXTtpZihzZXRUaW1lb3V0KHUuYWJvcnQsM2U0KSwhKHQmJnQubGljZW5zZUtleSYmdC5hcHBsaWNhdGlvbklEJiZlKSlyZXR1cm4gdS5hYm9ydCgpO2YoeSxmdW5jdGlvbihlLG4pe3RbZV18fCh0W2VdPW4pfSksYygibWFyayIsWyJvbmxvYWQiLGEoKStiLm9mZnNldF0sbnVsbCwiYXBpIik7dmFyIG49bC5jcmVhdGVFbGVtZW50KCJzY3JpcHQiKTtuLnNyYz0iaHR0cHM6Ly8iK3QuYWdlbnQsZS5wYXJlbnROb2RlLmluc2VydEJlZm9yZShuLGUpfX1mdW5jdGlvbiBvKCl7ImNvbXBsZXRlIj09PWwucmVhZHlTdGF0ZSYmaSgpfWZ1bmN0aW9uIGkoKXtjKCJtYXJrIixbImRvbUNvbnRlbnQiLGEoKStiLm9mZnNldF0sbnVsbCwiYXBpIil9ZnVuY3Rpb24gYSgpe3JldHVybiBPLmV4aXN0cyYmcGVyZm9ybWFuY2Uubm93P01hdGgucm91bmQocGVyZm9ybWFuY2Uubm93KCkpOihzPU1hdGgubWF4KChuZXcgRGF0ZSkuZ2V0VGltZSgpLHMpKS1iLm9mZnNldH12YXIgcz0obmV3IERhdGUpLmdldFRpbWUoKSxjPXQoImhhbmRsZSIpLGY9dCgyNSksdT10KCJlZSIpLGQ9dCgyNCkscD13aW5kb3csbD1wLmRvY3VtZW50LGg9ImFkZEV2ZW50TGlzdGVuZXIiLG09ImF0dGFjaEV2ZW50Iix2PXAuWE1MSHR0cFJlcXVlc3Qsdz12JiZ2LnByb3RvdHlwZTtOUkVVTS5vPXtTVDpzZXRUaW1lb3V0LFNJOnAuc2V0SW1tZWRpYXRlLENUOmNsZWFyVGltZW91dCxYSFI6dixSRVE6cC5SZXF1ZXN0LEVWOnAuRXZlbnQsUFI6cC5Qcm9taXNlLE1POnAuTXV0YXRpb25PYnNlcnZlcn07dmFyIGc9IiIrbG9jYXRpb24seT17YmVhY29uOiJiYW0ubnItZGF0YS5uZXQiLGVycm9yQmVhY29uOiJiYW0ubnItZGF0YS5uZXQiLGFnZW50OiJqcy1hZ2VudC5uZXdyZWxpYy5jb20vbnItc3BhLTExNjkubWluLmpzIn0seD12JiZ3JiZ3W2hdJiYhL0NyaU9TLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpLGI9ZS5leHBvcnRzPXtvZmZzZXQ6cyxub3c6YSxvcmlnaW46ZyxmZWF0dXJlczp7fSx4aHJXcmFwcGFibGU6eCx1c2VyQWdlbnQ6ZH07dCgxOSksdCgyMiksbFtoXT8obFtoXSgiRE9NQ29udGVudExvYWRlZCIsaSwhMSkscFtoXSgibG9hZCIsciwhMSkpOihsW21dKCJvbnJlYWR5c3RhdGVjaGFuZ2UiLG8pLHBbbV0oIm9ubG9hZCIscikpLGMoIm1hcmsiLFsiZmlyc3RieXRlIixzXSxudWxsLCJhcGkiKTt2YXIgRT0wLE89dCgyNyl9LHt9XSwid3JhcC1mdW5jdGlvbiI6W2Z1bmN0aW9uKHQsZSxuKXtmdW5jdGlvbiByKHQpe3JldHVybiEodCYmdCBpbnN0YW5jZW9mIEZ1bmN0aW9uJiZ0LmFwcGx5JiYhdFthXSl9dmFyIG89dCgiZWUiKSxpPXQoMjYpLGE9Im5yQG9yaWdpbmFsIixzPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHksYz0hMTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtmdW5jdGlvbiBuKHQsZSxuLG8pe2Z1bmN0aW9uIG5yV3JhcHBlcigpe3ZhciByLGEscyxjO3RyeXthPXRoaXMscj1pKGFyZ3VtZW50cykscz0iZnVuY3Rpb24iPT10eXBlb2Ygbj9uKHIsYSk6bnx8e319Y2F0Y2goZil7cChbZiwiIixbcixhLG9dLHNdKX11KGUrInN0YXJ0IixbcixhLG9dLHMpO3RyeXtyZXR1cm4gYz10LmFwcGx5KGEscil9Y2F0Y2goZCl7dGhyb3cgdShlKyJlcnIiLFtyLGEsZF0scyksZH1maW5hbGx5e3UoZSsiZW5kIixbcixhLGNdLHMpfX1yZXR1cm4gcih0KT90OihlfHwoZT0iIiksbnJXcmFwcGVyW2FdPXQsZCh0LG5yV3JhcHBlciksbnJXcmFwcGVyKX1mdW5jdGlvbiBmKHQsZSxvLGkpe298fChvPSIiKTt2YXIgYSxzLGMsZj0iLSI9PT1vLmNoYXJBdCgwKTtmb3IoYz0wO2M8ZS5sZW5ndGg7YysrKXM9ZVtjXSxhPXRbc10scihhKXx8KHRbc109bihhLGY/cytvOm8saSxzKSl9ZnVuY3Rpb24gdShuLHIsbyl7aWYoIWN8fGUpe3ZhciBpPWM7Yz0hMDt0cnl7dC5lbWl0KG4scixvLGUpfWNhdGNoKGEpe3AoW2EsbixyLG9dKX1jPWl9fWZ1bmN0aW9uIGQodCxlKXtpZihPYmplY3QuZGVmaW5lUHJvcGVydHkmJk9iamVjdC5rZXlzKXRyeXt2YXIgbj1PYmplY3Qua2V5cyh0KTtyZXR1cm4gbi5mb3JFYWNoKGZ1bmN0aW9uKG4pe09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLG4se2dldDpmdW5jdGlvbigpe3JldHVybiB0W25dfSxzZXQ6ZnVuY3Rpb24oZSl7cmV0dXJuIHRbbl09ZSxlfX0pfSksZX1jYXRjaChyKXtwKFtyXSl9Zm9yKHZhciBvIGluIHQpcy5jYWxsKHQsbykmJihlW29dPXRbb10pO3JldHVybiBlfWZ1bmN0aW9uIHAoZSl7dHJ5e3QuZW1pdCgiaW50ZXJuYWwtZXJyb3IiLGUpfWNhdGNoKG4pe319cmV0dXJuIHR8fCh0PW8pLG4uaW5QbGFjZT1mLG4uZmxhZz1hLG59fSx7fV19LHt9LFsibG9hZGVyIiwyLDE2LDUsMyw0XSk7CiAgICAgICAgICA7TlJFVU0ubG9hZGVyX2NvbmZpZz17YWNjb3VudElEOiIzOTI4NCIsdHJ1c3RLZXk6IjM5Mjg0IixhZ2VudElEOiI3NDQ3NDY4IixsaWNlbnNlS2V5OiI2ODlkNWI0NTYyIixhcHBsaWNhdGlvbklEOiIyMDExMjI0In0KICAgICAgICAgIDtOUkVVTS5pbmZvPXtiZWFjb246ImJhbS5uci1kYXRhLm5ldCIsZXJyb3JCZWFjb246ImJhbS5uci1kYXRhLm5ldCIsbGljZW5zZUtleToiNjg5ZDViNDU2MiIsYXBwbGljYXRpb25JRDoiMjAxMTIyNCIsc2E6MX0KICAgICAgICA8L3NjcmlwdD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly9mLnZpbWVvY2RuLmNvbS9zdHlsZXMvY3NzX29wdC9nbG9iYWwvaWNvbl9mb250cy5taW4uY3NzP2UxMDEzZGViNmU4NDQ3MGM3NWQwNzVmODZkYjNjZDRkOTRkMjE4MTYiPgoKICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly9mLnZpbWVvY2RuLmNvbS9zdHlsZXMvY3NzX29wdC9nbG9iYWxfbWFpbl9jb21iaW5lZC5taW4uY3NzP2EzOThkNzU4Ij4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly9mLnZpbWVvY2RuLmNvbS9zdHlsZXMvY3NzX29wdC9nbG9iYWxfY29tYmluZWQubWluLmNzcz9hMzI4MjFkMCI+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Imh0dHBzOi8vZi52aW1lb2Nkbi5jb20vc3R5bGVzL2Nzc19vcHQvdG9wbmF2X2NhcnRfYnV0dG9uX2NvbWJpbmVkLm1pbi5jc3M/YTIwYTc1NjYiPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL2YudmltZW9jZG4uY29tL3N0eWxlcy9jc3Nfb3B0L21vZGVybi9pcmlzL3BhZ2VzL2V4Y2VwdGlvbi9leGNlcHRpb24ubWluLmNzcz9jOGQ3YWYyYyI+CgoKCiAgICAgICAgPHNjcmlwdD4KICAgICAgICAKICAgICAgICB2YXIgcGxheWVyQXNzZXRVcmxzID0geyJiYXJlYm9uZV9qcyI6Imh0dHBzOlwvXC9mLnZpbWVvY2RuLmNvbVwvcFwvMy4yMy4wXC9qc1wvYmFyZWJvbmUuanMiLCJqcyI6Imh0dHBzOlwvXC9mLnZpbWVvY2RuLmNvbVwvcFwvMy4yMy4wXC9qc1wvcGxheWVyLmpzIiwiY2hyb21lbGVzc19jc3MiOiJodHRwczpcL1wvZi52aW1lb2Nkbi5jb21cL3BcLzMuMjMuMFwvY3NzXC9jaHJvbWVsZXNzLmNzcyIsImNocm9tZWxlc3NfanMiOiJodHRwczpcL1wvZi52aW1lb2Nkbi5jb21cL3BcLzMuMjMuMFwvanNcL2Nocm9tZWxlc3MuanMiLCJjc3MiOiJodHRwczpcL1wvZi52aW1lb2Nkbi5jb21cL3BcLzMuMjMuMFwvY3NzXC9wbGF5ZXIuY3NzIiwicGxheWVyX3VybCI6InBsYXllci52aW1lby5jb20ifTsKCiAgICAgICAgdmFyIF9leHRlbmQgPSBmdW5jdGlvbigpe2Zvcih2YXIgcj1hcmd1bWVudHNbMF0sbj0xLGU9YXJndW1lbnRzLmxlbmd0aDtlPm47bisrKXt2YXIgdD1hcmd1bWVudHNbbl07Zm9yKHZhciBhIGluIHQpdC5oYXNPd25Qcm9wZXJ0eShhKSYmKHJbYV09dFthXSl9cmV0dXJuIHJ9OwoKICAgICAgICAgICAgd2luZG93ID0gX2V4dGVuZCh3aW5kb3csIHsidmltZW9fZXNpIjp7ImNvbmZpZyI6eyJyb3V0ZSI6IlZpbWVvXFxDb250cm9sbGVyXFxDbGlwQ29udHJvbGxlcjptYWluIiwiY29udHJvbGxlciI6IlZpbWVvXFxDb250cm9sbGVyXFxDbGlwQ29udHJvbGxlciIsImF1dG9jb21wbGV0ZV9lbmFibGVkIjp0cnVlLCJvbnNpdGVfcmVmZXJyZXIiOmZhbHNlfX0sImFibGluY29sbl9jb25maWciOltdLCJ2aW1lbyI6eyJjb25maWciOnsiY2FydCI6eyJjYXJ0X2NvbnRlbnQiOnsic3RvY2siOnsic3RvcmUiOiJzdG9jayIsInZlcnNpb24iOjEsInF1YW50aXRpZXMiOltdLCJpdGVtcyI6W10sImF0dHJpYnV0ZXMiOltdLCJjdXJyZW5jeSI6IkJSTCIsIml0ZW1zX3NvcnRlZF9ieV9pbmRleCI6W10sIml0ZW1zX2NvdW50IjowfX19fX19KTsKPC9zY3JpcHQ+CgogICAgICAgICAgICAgICAgCiAgICA8c2NyaXB0PgogICAgICAgIHZhciBhYmxpbmNvbG5fY29uZmlnID0gYWJsaW5jb2xuX2NvbmZpZyB8fCB7fTsKICAgICAgICBhYmxpbmNvbG5fY29uZmlnLnRlc3RzID0geyJKUy5PbW5pc2VhcmNoIjp7ImlkIjo1MjcsIm5hbWUiOiJKUy5PbW5pc2VhcmNoIiwiYnVja2V0cyI6MTAwMCwiaW5wdXQiOiJjdWlkIiwidXJsIjoiXC8iLCJleHBlcmltZW50cyI6W3siaWQiOjE0NTIsIm5hbWUiOiJwaGFzZTEiLCJidWNrZXRzIjoxMDAsInN0YXRlIjoxLCJwdWJsaXNoZWRfb24iOiIyMDIwLTEwLTIyIDEzOjQ2OjUxIiwicGF1c2VkX29uIjoiMDAwMC0wMC0wMCAwMDowMDowMCIsInN0b3BwZWRfb24iOiIwMDAwLTAwLTAwIDAwOjAwOjAwIiwicGFyYW1ldGVycyI6W3siaWQiOjI1NDUsIm5hbWUiOiJvbW5pc2VhcmNoX2VuYWJsZWQiLCJjaG9pY2UiOiJ0cnVlIiwid2VpZ2h0IjoxfSx7ImlkIjoyNTQ2LCJuYW1lIjoib21uaXNlYXJjaF9lbmFibGVkIiwiY2hvaWNlIjoiZmFsc2UiLCJ3ZWlnaHQiOjF9XSwic2VnbWVudHMiOltdfSx7ImlkIjoxNDU0LCJuYW1lIjoicGhhc2UyIiwiYnVja2V0cyI6MjAwLCJzdGF0ZSI6MSwicHVibGlzaGVkX29uIjoiMjAyMC0xMC0yMyAwODoxNjo1NSIsInBhdXNlZF9vbiI6IjAwMDAtMDAtMDAgMDA6MDA6MDAiLCJzdG9wcGVkX29uIjoiMDAwMC0wMC0wMCAwMDowMDowMCIsInBhcmFtZXRlcnMiOlt7ImlkIjoyNTUxLCJuYW1lIjoib21uaXNlYXJjaF9lbmFibGVkIiwiY2hvaWNlIjoidHJ1ZSIsIndlaWdodCI6MX0seyJpZCI6MjU1MiwibmFtZSI6Im9tbmlzZWFyY2hfZW5hYmxlZCIsImNob2ljZSI6ImZhbHNlIiwid2VpZ2h0IjoxfV0sInNlZ21lbnRzIjpbXX0seyJpZCI6MTQ1OCwibmFtZSI6InBoYXNlMyIsImJ1Y2tldHMiOjMwMCwic3RhdGUiOjEsInB1Ymxpc2hlZF9vbiI6IjIwMjAtMTAtMjYgMDg6NTQ6NDgiLCJwYXVzZWRfb24iOiIwMDAwLTAwLTAwIDAwOjAwOjAwIiwic3RvcHBlZF9vbiI6IjAwMDAtMDAtMDAgMDA6MDA6MDAiLCJwYXJhbWV0ZXJzIjpbeyJpZCI6MjU1NywibmFtZSI6Im9tbmlzZWFyY2hfZW5hYmxlZCIsImNob2ljZSI6InRydWUiLCJ3ZWlnaHQiOjF9LHsiaWQiOjI1NTgsIm5hbWUiOiJvbW5pc2VhcmNoX2VuYWJsZWQiLCJjaG9pY2UiOiJmYWxzZSIsIndlaWdodCI6MX1dLCJzZWdtZW50cyI6W119LHsiaWQiOjE0NjEsIm5hbWUiOiJwaGFzZTQiLCJidWNrZXRzIjo0MDAsInN0YXRlIjoxLCJwdWJsaXNoZWRfb24iOiIyMDIwLTEwLTI3IDA4OjQ2OjU2IiwicGF1c2VkX29uIjoiMDAwMC0wMC0wMCAwMDowMDowMCIsInN0b3BwZWRfb24iOiIwMDAwLTAwLTAwIDAwOjAwOjAwIiwicGFyYW1ldGVycyI6W3siaWQiOjI1NjUsIm5hbWUiOiJvbW5pc2VhcmNoX2VuYWJsZWQiLCJjaG9pY2UiOiJ0cnVlIiwid2VpZ2h0IjoxfSx7ImlkIjoyNTY2LCJuYW1lIjoib21uaXNlYXJjaF9lbmFibGVkIiwiY2hvaWNlIjoiZmFsc2UiLCJ3ZWlnaHQiOjF9XSwic2VnbWVudHMiOltdfV19LCJKUy5Ub3BOYXYuQ3JlYXRlIjp7ImlkIjo0NTIsIm5hbWUiOiJKUy5Ub3BOYXYuQ3JlYXRlIiwiYnVja2V0cyI6MTAwMCwiaW5wdXQiOiJ2dWlkIiwidXJsIjoiOmFsbCIsImV4cGVyaW1lbnRzIjpbeyJpZCI6MTIzNSwibmFtZSI6IiogTG9nZ2VkIG91dCBKb2luIE1vZGFsIiwiYnVja2V0cyI6MTAwLCJzdGF0ZSI6MywicHVibGlzaGVkX29uIjoiMjAyMC0wNi0xNSAxNjoxNzoxNSIsInBhdXNlZF9vbiI6IjAwMDAtMDAtMDAgMDA6MDA6MDAiLCJzdG9wcGVkX29uIjoiMjAyMC0xMC0xNSAwNjo1MzoyNSIsInBhcmFtZXRlcnMiOlt7ImlkIjoyMTUwLCJuYW1lIjoidG9wX25hdl9jcmVhdGUiLCJjaG9pY2UiOiJjb250cm9sIiwid2VpZ2h0IjoxfSx7ImlkIjoyMTUxLCJuYW1lIjoidG9wX25hdl9jcmVhdGUiLCJjaG9pY2UiOiJqb2luX3dpdGhvdXRfZGVzaWduIiwid2VpZ2h0IjoxfSx7ImlkIjoyMTUyLCJuYW1lIjoidG9wX25hdl9jcmVhdGUiLCJjaG9pY2UiOiJqb2luX3dpdGhfZGVzaWduIiwid2VpZ2h0IjoxfV0sInNlZ21lbnRzIjpbXX0seyJpZCI6MTMxMSwibmFtZSI6IiogKiBMb2dnZWQgb3V0IEpvaW4gTW9kYWwiLCJidWNrZXRzIjo5MDAsInN0YXRlIjozLCJwdWJsaXNoZWRfb24iOiIyMDIwLTA2LTIzIDE1OjAxOjUyIiwicGF1c2VkX29uIjoiMDAwMC0wMC0wMCAwMDowMDowMCIsInN0b3BwZWRfb24iOiIyMDIwLTEwLTE1IDA2OjUzOjM1IiwicGFyYW1ldGVycyI6W3siaWQiOjIyNzUsIm5hbWUiOiJ0b3BfbmF2X2NyZWF0ZSIsImNob2ljZSI6ImNvbnRyb2wiLCJ3ZWlnaHQiOjF9LHsiaWQiOjIyNzYsIm5hbWUiOiJ0b3BfbmF2X2NyZWF0ZSIsImNob2ljZSI6ImpvaW5fd2l0aG91dF9kZXNpZ24iLCJ3ZWlnaHQiOjF9LHsiaWQiOjIyNzcsIm5hbWUiOiJ0b3BfbmF2X2NyZWF0ZSIsImNob2ljZSI6ImpvaW5fd2l0aF9kZXNpZ24iLCJ3ZWlnaHQiOjF9XSwic2VnbWVudHMiOltdfV19LCJKUy5VcHNlbGwuUmV2aWV3Ijp7ImlkIjo0NDQsIm5hbWUiOiJKUy5VcHNlbGwuUmV2aWV3IiwiYnVja2V0cyI6MTAwMCwiaW5wdXQiOiJ2dWlkIiwidXJsIjoiXC8iLCJleHBlcmltZW50cyI6W119LCJUb3BOYXYuTmV3VmlkZW8uU2NyZWVuUmVjb3JkRm9yQWxsIjp7ImlkIjo1NDEsIm5hbWUiOiJUb3BOYXYuTmV3VmlkZW8uU2NyZWVuUmVjb3JkRm9yQWxsIiwiYnVja2V0cyI6MTAwMCwiaW5wdXQiOiJ2dWlkIiwidXJsIjoiXC8iLCJleHBlcmltZW50cyI6W3siaWQiOjE0MTgsIm5hbWUiOiJTaG93IHJlY29yZGVyIGxpbmsgZm9yIGFsbCIsImJ1Y2tldHMiOjEwMCwic3RhdGUiOjMsInB1Ymxpc2hlZF9vbiI6IjIwMjAtMTAtMDUgMTQ6MzA6NDAiLCJwYXVzZWRfb24iOiIwMDAwLTAwLTAwIDAwOjAwOjAwIiwic3RvcHBlZF9vbiI6IjIwMjAtMTAtMjEgMDM6Mjg6NDMiLCJwYXJhbWV0ZXJzIjpbeyJpZCI6MjQ3NywibmFtZSI6InNob3dfcmVjb3JkZXJfZm9yX2FsbCIsImNob2ljZSI6ImNvbnRyb2wiLCJ3ZWlnaHQiOjF9LHsiaWQiOjI0NzgsIm5hbWUiOiJzaG93X3JlY29yZGVyX2Zvcl9hbGwiLCJjaG9pY2UiOiJ2YXJpYW50X3NjcmVlbiIsIndlaWdodCI6MX1dLCJzZWdtZW50cyI6W119LHsiaWQiOjE0NTAsIm5hbWUiOiIqIFNob3cgcmVjb3JkZXIgbGluayBmb3IgYWxsIiwiYnVja2V0cyI6MCwic3RhdGUiOjMsInB1Ymxpc2hlZF9vbiI6IjIwMjAtMTAtMjIgMTc6MTc6MTEiLCJwYXVzZWRfb24iOiIyMDIwLTEwLTIyIDE3OjE3OjI3Iiwic3RvcHBlZF9vbiI6IjIwMjAtMTAtMjIgMTc6MTc6NDAiLCJwYXJhbWV0ZXJzIjpbeyJpZCI6MjU0MCwibmFtZSI6InNob3dfcmVjb3JkZXJfZm9yX2FsbCIsImNob2ljZSI6ImNvbnRyb2wiLCJ3ZWlnaHQiOjF9LHsiaWQiOjI1NDEsIm5hbWUiOiJzaG93X3JlY29yZGVyX2Zvcl9hbGwiLCJjaG9pY2UiOiJ2YXJpYW50X3NjcmVlbiIsIndlaWdodCI6MX0seyJpZCI6MjU0MiwibmFtZSI6InNob3dfcmVjb3JkZXJfZm9yX2FsbCIsImNob2ljZSI6InZhcmlhbnRfc2NyZWVuX2FuaW1hdGlvbiIsIndlaWdodCI6MX1dLCJzZWdtZW50cyI6W119LHsiaWQiOjE0NTMsIm5hbWUiOiIqICogU2hvdyByZWNvcmRlciBsaW5rIGZvciBhbGwiLCJidWNrZXRzIjo1MCwic3RhdGUiOjMsInB1Ymxpc2hlZF9vbiI6IjIwMjAtMTAtMjIgMTc6MzY6NDEiLCJwYXVzZWRfb24iOiIyMDIwLTEwLTI2IDE1OjA3OjI4Iiwic3RvcHBlZF9vbiI6IjIwMjAtMTAtMjYgMTU6MDc6NTYiLCJwYXJhbWV0ZXJzIjpbeyJpZCI6MjU0NywibmFtZSI6InNob3dfcmVjb3JkZXJfZm9yX2FsbCIsImNob2ljZSI6ImNvbnRyb2wiLCJ3ZWlnaHQiOjF9LHsiaWQiOjI1NDgsIm5hbWUiOiJzaG93X3JlY29yZGVyX2Zvcl9hbGwiLCJjaG9pY2UiOiJ2YXJpYW50X3NjcmVlbiIsIndlaWdodCI6MX0seyJpZCI6MjU0OSwibmFtZSI6InNob3dfcmVjb3JkZXJfZm9yX2FsbCIsImNob2ljZSI6InZhcmlhbnRfc2NyZWVuX2FuaW1hdGlvbiIsIndlaWdodCI6MX1dLCJzZWdtZW50cyI6W119LHsiaWQiOjE0NjAsIm5hbWUiOiIqICogKiBTaG93IHJlY29yZGVyIGxpbmsgZm9yIGFsbCIsImJ1Y2tldHMiOjEwMCwic3RhdGUiOjMsInB1Ymxpc2hlZF9vbiI6IjIwMjAtMTAtMjYgMTU6MDg6NTQiLCJwYXVzZWRfb24iOiIwMDAwLTAwLTAwIDAwOjAwOjAwIiwic3RvcHBlZF9vbiI6IjIwMjAtMTAtMjcgMTA6MDI6NTQiLCJwYXJhbWV0ZXJzIjpbeyJpZCI6MjU2MiwibmFtZSI6InNob3dfcmVjb3JkZXJfZm9yX2FsbCIsImNob2ljZSI6ImNvbnRyb2wiLCJ3ZWlnaHQiOjF9LHsiaWQiOjI1NjMsIm5hbWUiOiJzaG93X3JlY29yZGVyX2Zvcl9hbGwiLCJjaG9pY2UiOiJ2YXJpYW50X3NjcmVlbiIsIndlaWdodCI6MX0seyJpZCI6MjU2NCwibmFtZSI6InNob3dfcmVjb3JkZXJfZm9yX2FsbCIsImNob2ljZSI6InZhcmlhbnRfc2NyZWVuX2FuaW1hdGlvbiIsIndlaWdodCI6MX1dLCJzZWdtZW50cyI6W119LHsiaWQiOjE0NjIsIm5hbWUiOiIqICogKiAqIFNob3cgcmVjb3JkZXIgbGluayBmb3IgYWxsIiwiYnVja2V0cyI6MTAwMCwic3RhdGUiOjEsInB1Ymxpc2hlZF9vbiI6IjIwMjAtMTAtMjcgMTA6MDQ6MTAiLCJwYXVzZWRfb24iOiIwMDAwLTAwLTAwIDAwOjAwOjAwIiwic3RvcHBlZF9vbiI6IjAwMDAtMDAtMDAgMDA6MDA6MDAiLCJwYXJhbWV0ZXJzIjpbeyJpZCI6MjU2NywibmFtZSI6InNob3dfcmVjb3JkZXJfZm9yX2FsbCIsImNob2ljZSI6ImNvbnRyb2wiLCJ3ZWlnaHQiOjV9LHsiaWQiOjI1NjgsIm5hbWUiOiJzaG93X3JlY29yZGVyX2Zvcl9hbGwiLCJjaG9pY2UiOiJ2YXJpYW50X3NjcmVlbiIsIndlaWdodCI6OTB9LHsiaWQiOjI1NjksIm5hbWUiOiJzaG93X3JlY29yZGVyX2Zvcl9hbGwiLCJjaG9pY2UiOiJ2YXJpYW50X3NjcmVlbl9hbmltYXRpb24iLCJ3ZWlnaHQiOjV9XSwic2VnbWVudHMiOltdfV19LCJKUy5DcmVhdGVBcHBCYW5uZXIiOnsiaWQiOjQ2MSwibmFtZSI6IkpTLkNyZWF0ZUFwcEJhbm5lciIsImJ1Y2tldHMiOjEwMDAsImlucHV0IjoidnVpZCIsInVybCI6IlwvOmNsaXBJZCIsImV4cGVyaW1lbnRzIjpbeyJpZCI6MTE1NywibmFtZSI6IlNob3cgY3JlYXRlIGJhbm5lciIsImJ1Y2tldHMiOjEwMCwic3RhdGUiOjMsInB1Ymxpc2hlZF9vbiI6IjIwMjAtMDQtMDEgMDg6NDg6MzIiLCJwYXVzZWRfb24iOiIwMDAwLTAwLTAwIDAwOjAwOjAwIiwic3RvcHBlZF9vbiI6IjIwMjAtMDctMTYgMTY6MTE6MjciLCJwYXJhbWV0ZXJzIjpbeyJpZCI6MjAyNCwibmFtZSI6InNob3dfY3JlYXRlX2Jhbm5lciIsImNob2ljZSI6ImNvbnRyb2wiLCJ3ZWlnaHQiOjF9LHsiaWQiOjIwMjUsIm5hbWUiOiJzaG93X2NyZWF0ZV9iYW5uZXIiLCJjaG9pY2UiOiJ2YXJpYW50Iiwid2VpZ2h0IjoxfV0sInNlZ21lbnRzIjpbXX0seyJpZCI6MTE3OCwibmFtZSI6Iis0MCUgU2hvdyBjcmVhdGUgYmFubmVyIiwiYnVja2V0cyI6NDAwLCJzdGF0ZSI6MywicHVibGlzaGVkX29uIjoiMjAyMC0wNC0wMyAxNjoxNTo0NyIsInBhdXNlZF9vbiI6IjAwMDAtMDAtMDAgMDA6MDA6MDAiLCJzdG9wcGVkX29uIjoiMjAyMC0wNy0xNiAxNjoxMTozMyIsInBhcmFtZXRlcnMiOlt7ImlkIjoyMDU4LCJuYW1lIjoic2hvd19jcmVhdGVfYmFubmVyIiwiY2hvaWNlIjoiY29udHJvbCIsIndlaWdodCI6MX0seyJpZCI6MjA1OSwibmFtZSI6InNob3dfY3JlYXRlX2Jhbm5lciIsImNob2ljZSI6InZhcmlhbnQiLCJ3ZWlnaHQiOjF9XSwic2VnbWVudHMiOltdfV19LCJKUy5DbGlwLkJhbm5lckZyZXF1ZW5jeSI6eyJpZCI6NTQzLCJuYW1lIjoiSlMuQ2xpcC5CYW5uZXJGcmVxdWVuY3kiLCJidWNrZXRzIjoxMDAwLCJpbnB1dCI6InZ1aWQiLCJ1cmwiOiJcLyoiLCJleHBlcmltZW50cyI6W3siaWQiOjE0MjIsIm5hbWUiOiJDbGlwIEJhbm5lciBGcmVxdWVuY3kgVGVzdCIsImJ1Y2tldHMiOjEwMCwic3RhdGUiOjEsInB1Ymxpc2hlZF9vbiI6IjIwMjAtMTAtMDcgMTM6MDA6MzgiLCJwYXVzZWRfb24iOiIwMDAwLTAwLTAwIDAwOjAwOjAwIiwic3RvcHBlZF9vbiI6IjAwMDAtMDAtMDAgMDA6MDA6MDAiLCJwYXJhbWV0ZXJzIjpbeyJpZCI6MjQ4NCwibmFtZSI6ImJhbm5lcl9mcmVxdWVuY3kiLCJjaG9pY2UiOiJjb250cm9sIiwid2VpZ2h0IjoxfSx7ImlkIjoyNDg1LCJuYW1lIjoiYmFubmVyX2ZyZXF1ZW5jeSIsImNob2ljZSI6InZhcmlhbnQiLCJ3ZWlnaHQiOjF9XSwic2VnbWVudHMiOltdfV19fTsKICAgIDwvc2NyaXB0Pgo8c2NyaXB0PgooZnVuY3Rpb24oKSB7CiAgICB3aW5kb3cuX2d0bSA9IFt7Imxhbmd1YWdlIjoiZW4iLCJ1c2VyX3N0YXR1cyI6ImxvZ2dlZF9vdXQiLCJ1c2VyX3R5cGUiOiJub25lIiwiZ2FfdW5pdmVyc2FsX2lkIjoiVUEtNzY2NDEtOCIsImNvbXNjb3JlX3NpdGVfaWQiOjEwMzQ4Mjg5fV07CgogICAgICAgIHZhciBnZHByQ29va2llID0gKGRvY3VtZW50LmNvb2tpZS5tYXRjaCgvXig/Oi4qOyk/XHMqdmltZW9fZ2Rwcl9vcHRpblxzKj1ccyooW147XSspKD86LiopPyQvKXx8WyxudWxsXSlbMV07CiAgICBpZiAoZ2RwckNvb2tpZSA9PT0gJy0xJykgewogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAgICAgd2luZG93Ll9ndG0ucHVzaCh7CiAgICAgICAgJ3Z1aWQnOiBkb2N1bWVudC5jb29raWUucmVwbGFjZSgvKD86KD86XnwuKjtccyopdnVpZFxzKlw9XHMqKFteO10qKS4qJCl8Xi4qJC8sICIkMSIpLAogICAgICAgICdndG0uc3RhcnQnOiBuZXcgRGF0ZSgpLmdldFRpbWUoKSwKICAgICAgICAnZXZlbnQnOiAnZ3RtLmpzJwogICAgfSk7CiAgICB2YXIgZ3RtcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpLAogICAgICAgIG5vZGU7CiAgICBndG1zLmFzeW5jID0gdHJ1ZTsKICAgIGd0bXMudHlwZSA9ICd0ZXh0L2phdmFzY3JpcHQnOwogICAgZ3Rtcy5zcmMgPSAnLy93d3cuZ29vZ2xldGFnbWFuYWdlci5jb20vZ3RtLmpzP2lkPUdUTS1SQktLJmw9X2d0bSc7CiAgICBub2RlID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ3NjcmlwdCcpWzBdOwogICAgbm9kZS5wYXJlbnROb2RlLmluc2VydEJlZm9yZShndG1zLCBub2RlKTsKfSkoKTsKPC9zY3JpcHQ+CjxzY3JpcHQ+CiAgICB2YXIgZ29vZ2xldGFnID0gZ29vZ2xldGFnIHx8IHt9LAogICAgICAgIGdwdGFkc2xvdHMgPSBbXSwKICAgICAgICBsYW5ndWFnZSwKICAgICAgICBoYXNfdXBsb2FkZWQsCiAgICAgICAgY29ob3J0OwogICAgZ29vZ2xldGFnLmNtZCA9IGdvb2dsZXRhZy5jbWQgfHwgW107CgogICAgKGZ1bmN0aW9uKCkgewogICAgICAgIHZhciBnZHByQ29va2llID0gKGRvY3VtZW50LmNvb2tpZS5tYXRjaCgvXig/Oi4qOyk/XHMqdmltZW9fZ2Rwcl9vcHRpblxzKj1ccyooW147XSspKD86LiopPyQvKXx8WyxudWxsXSlbMV07CiAgICAgICAgaWYgKGdkcHJDb29raWUgPT09ICctMScpIHsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICB2YXIgZ2FkcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpLAogICAgICAgICAgICB1c2VTU0wgPSAnaHR0cHM6JyA9PSBkb2N1bWVudC5sb2NhdGlvbi5wcm90b2NvbCwKICAgICAgICAgICAgbm9kZTsKICAgICAgICBnYWRzLmFzeW5jID0gdHJ1ZTsKICAgICAgICBnYWRzLnR5cGUgPSAndGV4dC9qYXZhc2NyaXB0JzsKICAgICAgICBnYWRzLnNyYyA9ICh1c2VTU0wgPyAnaHR0cHM6JyA6ICdodHRwOicpICsgJy8vd3d3Lmdvb2dsZXRhZ3NlcnZpY2VzLmNvbS90YWcvanMvZ3B0LmpzJzsKICAgICAgICBub2RlID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ3NjcmlwdCcpWzBdOwogICAgICAgIG5vZGUucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoZ2Fkcywgbm9kZSk7CiAgICB9KSgpOwoKICAgIGdvb2dsZXRhZy5jbWQucHVzaChmdW5jdGlvbigpIHsKICAgICAgICAKICAgICAgICAgICAgICAgICAgICBsYW5ndWFnZSA9IGRvY3VtZW50LmNvb2tpZS5yZXBsYWNlKC8oPzooPzpefC4qO1xzKilsYW5ndWFnZVxzKlw9XHMqKFteO10qKS4qJCl8Xi4qJC8sICIkMSIpOwogICAgICAgICAgICBoYXNfdXBsb2FkZWQgPSAoZG9jdW1lbnQuY29va2llLnJlcGxhY2UoLyg/Oig/Ol58Lio7XHMqKWhhc191cGxvYWRlZFxzKlw9XHMqKFteO10qKS4qJCl8Xi4qJC8sICIkMSIpKSA/ICdZJyA6ICdOJzsKICAgICAgICAgICAgY29uc2VudCA9IChkb2N1bWVudC5jb29raWUucmVwbGFjZSgvKD86KD86XnwuKjtccyopdmltZW9fZ2Rwcl9vcHRpblxzKlw9XHMqKFteO10qKS4qJCl8Xi4qJC8sICIkMSIpKSA9PT0gJy0xJyA/IDEgOiAwOwogICAgICAgICAgICBjb2hvcnQgPSAnQSc7CiAgICAgICAgCiAgICAgICAgZ29vZ2xldGFnLnB1YmFkcygpLnNldFRhcmdldGluZygnbGFuZ3VhZ2UnLCBbbGFuZ3VhZ2VdKTsKICAgICAgICBnb29nbGV0YWcucHViYWRzKCkuc2V0VGFyZ2V0aW5nKCdpc191cGxvYWRlcicsIFtoYXNfdXBsb2FkZWRdKTsKICAgICAgICBnb29nbGV0YWcucHViYWRzKCkuc2V0VGFyZ2V0aW5nKCdjb2hvcnQnLCBbY29ob3J0XSk7CiAgICAgICAgZ29vZ2xldGFnLnB1YmFkcygpLnNldFRhcmdldGluZygnY29ob3J0X2EnLCBbKGNvaG9ydCA9PT0gJ0EnKSA/ICdZJyA6ICdOJ10pOwogICAgICAgIGdvb2dsZXRhZy5wdWJhZHMoKS5zZXRUYXJnZXRpbmcoJ2NvaG9ydF9iJywgWyhjb2hvcnQgPT09ICdCJykgPyAnWScgOiAnTiddKTsKICAgICAgICBnb29nbGV0YWcucHViYWRzKCkuc2V0VGFyZ2V0aW5nKCdwcm9kdWN0JywgWycnXSk7CiAgICAgICAgZ29vZ2xldGFnLnB1YmFkcygpLnNldFRhcmdldGluZygnc3RvcmFnZScsIFsnTiddKTsKCiAgICAgICAgICAgICAgICBnb29nbGV0YWcucHViYWRzKCkuc2V0VGFyZ2V0aW5nKCdzZWMnLCBbJ2ZhbHNlJ10pOwoKICAgICAgICBnb29nbGV0YWcucHViYWRzKCkuc2V0VGFyZ2V0aW5nKCdsb2dnZWRfaW4nLCBbJ2ZhbHNlJ10pOwoKICAgICAgICAgICAgICAgIGdvb2dsZXRhZy5wdWJhZHMoKS5zZXRUYXJnZXRpbmcoJ3JwdicsIChNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqMTAwKSsxKS50b1N0cmluZygpKTsKCiAgICAgICAgZ29vZ2xldGFnLnB1YmFkcygpLnNldFJlcXVlc3ROb25QZXJzb25hbGl6ZWRBZHMoY29uc2VudCk7CiAgICAgICAgZ29vZ2xldGFnLnB1YmFkcygpLmVuYWJsZUFzeW5jUmVuZGVyaW5nKCk7CiAgICAgICAgZ29vZ2xldGFnLnB1YmFkcygpLmRpc2FibGVJbml0aWFsTG9hZCgpOwogICAgICAgIGdvb2dsZXRhZy5lbmFibGVTZXJ2aWNlcygpOwogICAgfSk7Cjwvc2NyaXB0PgoKICAgIDxzY3JpcHQgc3JjPSJodHRwczovL2YudmltZW9jZG4uY29tL2pzX29wdC9sb2dnaW5nX2NvbWJpbmVkLm1pbi5qcz85NzQyMTNkMSI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9mLnZpbWVvY2RuLmNvbS9qc19vcHQvYWJsaW5jb2xuX2NvbWJpbmVkLm1pbi5qcz82YzRhY2I1NyI+PC9zY3JpcHQ+CgoKCiAgICA8L2hlYWQ+CiAgICA8Ym9keSBjbGFzcz0ib25zaXRlICI+CiAgICAgICAgPGRpdiBpZD0id3JhcCIgY2xhc3M9Im91dGVyX3dyYXAiPgogICAgICAgICAgICA8ZGl2IGlkPSJ0b3BuYXZfb3V0ZXJfd3JhcCI+CiAgICAgICAgICAgICAgICA8ZGl2IGlkPSJjcmVhdGUtZmFjZWJvb2staGVhZGVyIj48L2Rpdj4KICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iVmltZW9CcmFuZF9Db2xvclJpYmJvbiAiPjwvZGl2PgoKICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgCgo8c3R5bGU+CiAgICBALXdlYmtpdC1rZXlmcmFtZXMgcmVjb3JkX2FuaW1hdGlvbiB7CiAgICAgICAgMCUsIDIwJSwgNTAlLCA4MCUsIDEwMCUgewogICAgICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlWSgwKTsKICAgICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDApOwogICAgICAgIH0KICAgICAgICA0MCUgewogICAgICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlWSgycHgpOwogICAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMnB4KTsKICAgICAgICB9CiAgICAgICAgNjAlIHsKICAgICAgICAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZVkoM3B4KTsKICAgICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDNweCk7CiAgICAgICAgfQogICAgfQoKICAgIEBrZXlmcmFtZXMgcmVjb3JkX2FuaW1hdGlvbiB7CiAgICAgICAgMCUsIDIwJSwgNTAlLCA4MCUsIDEwMCUgewogICAgICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlWSgwKTsKICAgICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDApOwogICAgICAgIH0KICAgICAgICA0MCUgewogICAgICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlWSgycHgpOwogICAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMnB4KTsKICAgICAgICB9CiAgICAgICAgNjAlIHsKICAgICAgICAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZVkoM3B4KTsKICAgICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDNweCk7CiAgICAgICAgfQogICAgfQoKICAgIC5sb2dnZWRfb3V0X3JlY29yZF9hbmltYXRpb24gewogICAgICAgIGFuaW1hdGlvbjogcmVjb3JkX2FuaW1hdGlvbiAxLjVzIC4yNXMgNTsKICAgIH0KCiAgICAubG9nZ2VkX2luX3JlY29yZF9hbmltYXRpb24gewogICAgICAgIGFuaW1hdGlvbjogcmVjb3JkX2FuaW1hdGlvbiAxLjVzIC4yNXMgaW5maW5pdGU7CiAgICB9CgogICAgLnJlY29yZGVyX25ld19sYWJlbCB7CiAgICAgICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMTE0MEM2OwogICAgICAgIGNvbG9yOiAjZmZmOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDJweDsKICAgICAgICBoZWlnaHQ6IDIwcHg7CiAgICAgICAgbGluZS1oZWlnaHQ6IDIwcHg7CiAgICAgICAgbWFyZ2luLWxlZnQ6IDE0cHg7CiAgICAgICAgZm9udC1zaXplOiAxMHB4OwogICAgICAgIHdpZHRoOiA0MHB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA3MDA7CiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgfQo8L3N0eWxlPgoKPHNjcmlwdD4KICAgIHdpbmRvdy52aW1lbyA9IHdpbmRvdy52aW1lbyB8fCB7fTsKPC9zY3JpcHQ+Cgo8ZGl2IGlkPSJ0b3BuYXZfZGVza3RvcCIgY2xhc3M9InRvcG5hdl9kZXNrdG9wICIgcm9sZT0iYmFubmVyIj4KICAgIDxkaXYgY2xhc3M9InRvcG5hdl9kZXNrdG9wX3dyYXBwZXIiPgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJ0b3BuYXZfZGVza3RvcF9sb2dvIiBocmVmPSIvL3ZpbWVvLmNvbSIgYWx0PSJHbyB0byBWaW1lbyBob21lIHBhZ2UiIHRpdGxlPSJHbyB0byBWaW1lbyBob21lIHBhZ2UiIGFyaWEtbGFiZWw9IkdvIHRvIFZpbWVvIGhvbWUgcGFnZSIgZGF0YS1mYXRhbC1hdHRyYWN0aW9uPSJjb250YWluZXI6dG9wX25hdnxjb21wb25lbnQ6dmltZW9faG9tZSIgZGF0YS1ndG0tY2xpY2s9InRvcF9uYXZfaG9tZV9jbGljayI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgYWx0PSJWaW1lbyIgd2lkdGg9IjEwMCIgaGVpZ2h0PSI0MCI+PHBhdGggZD0iTTIyLjQ0OCAxNC41NzVjLS4xMDQgMi4xNy0xLjYxOCA1LjE0Ni00LjU0NCA4LjkxMi0zLjAzIDMuOTQyLTUuNTkgNS45MTItNy42ODYgNS45MTItMS4yOTcgMC0yLjM5Ny0xLjIwNC0zLjMtMy42LS42LTIuMi0xLjIwMi00LjM5OC0xLjc5NC02LjU5OC0uNjY0LTIuMzk2LTEuMzgtMy42LTIuMTQ3LTMuNi0uMTY2IDAtLjc0Ny4zNTQtMS43NTMgMS4wNWwtMS4wNDgtMS4zNWMxLjEtLjk2NSAyLjE5LTEuOTMgMy4yNTctMi45MDUgMS40NjMtMS4yNjUgMi41NzMtMS45NCAzLjMtMi4wMDIgMS43MzItLjE2NiAyLjggMS4wMTcgMy4yMDUgMy41NTguNDM1IDIuNzQuNzM2IDQuNDQuOTAyIDUuMTE1LjQ5OCAyLjI3IDEuMDQ4IDMuNDAyIDEuNjUgMy40MDIuNDY2IDAgMS4xNzItLjczNyAyLjEwNS0yLjIxLjkzNC0xLjQ3MyAxLjQzMi0yLjU5MyAxLjUwNC0zLjM3LjEzMy0xLjI3Ny0uMzY1LTEuOTEtMS41MDYtMS45MS0uNTMgMC0xLjA4LjEyNS0xLjY1LjM2NCAxLjEtMy41OSAzLjE4Ni01LjMzMyA2LjI3Ny01LjIzIDIuMjczLjA3MyAzLjM1IDEuNTU2IDMuMjI3IDQuNDZtMTMuNzU1IDcuMDM0Yy0uOTMzIDEuNzY0LTIuMjIgMy4zNy0zLjg2IDQuODAzLTIuMjQgMS45My00LjQ3IDIuOTA1LTYuNyAyLjkwNS0xLjAzNy4wMDItMS44MjYtLjMzLTIuMzc2LS45OTQtLjU1LS42NjMtLjgxLTEuNTM1LS43NzctMi42MDMuMDMtMS4xLjM3Mi0yLjggMS4wMjUtNS4xMDQuNjU0LTIuMzAzLjk3Ni0zLjUzNy45NzYtMy43MDMgMC0uODYtLjMtMS4yOTctLjkwMi0xLjI5Ny0uMTk4IDAtLjc3LjM1My0xLjcwMiAxLjA0OGwtMS4xNTItMS4zNWMxLjA3LS45NjIgMi4xMzctMS45MjcgMy4yMDYtMi45MDIgMS40My0xLjI2NiAyLjUtMS45NCAzLjIwNS0yLjAwMiAxLjEtLjEwMyAxLjkxLjIzIDIuNDI4Ljk3Ni41MTguNzQ3LjcwNSAxLjcyMi41OCAyLjkxNS0uNDM1IDIuMDM0LS45MDIgNC42MDctMS40IDcuNzMtLjAzIDEuNDMuNDg4IDIuMTQ2IDEuNTU2IDIuMTQ2LjQ2NyAwIDEuMjk3LS40OTggMi41LTEuNDgzLjk5Ni0uODIgMS44MTUtMS41OTggMi40NS0yLjMyNGwuOTQyIDEuMjQ0bS00LjM1Ny0xNy44Yy0uMDMuODMtLjQ0NiAxLjYyOC0xLjI1NSAyLjM5NS0uOS44Ni0xLjk3IDEuMjk2LTMuMjA0IDEuMjk2LTEuOSAwLTIuODIyLS44My0yLjc1LTIuNDkuMDMyLS44Ni41NC0xLjY5IDEuNTI2LTIuNDkuOTg1LS43OTcgMi4wNzQtMS4xOSAzLjI3OC0xLjE5LjcwNSAwIDEuMjg2LjI3IDEuNzUzLjgyLjQ2Ny41NC42ODQgMS4xLjY1MyAxLjY2bTM1LjYxMiAxNy44Yy0uOTMzIDEuNzYzLTIuMjIgMy4zNy0zLjg2IDQuODAyLTIuMjQgMS45My00LjQ3IDIuOTA0LTYuNyAyLjkwNC0yLjE2OC4wMDItMy4yMTYtMS4yMDItMy4xNTMtMy41OTguMDMtMS4wNy4yMzgtMi4zNTUuNjIyLTMuODUuMzg0LTEuNTAzLjU5LTIuNjY1LjYyMy0zLjUwNS4wMy0xLjI2NS0uMzUzLTEuODk4LTEuMTUyLTEuODk4LS44NyAwLTEuOTEgMS4wMzYtMy4xMTIgMy4xLTEuMjc2IDIuMTY4LTEuOTYgNC4yNzQtMi4wNjQgNi4zMDgtLjA3MyAxLjQzLjA3MiAyLjU0LjQyNSAzLjI5OC0yLjMyNC4wNjQtMy45NjMtLjMyLTQuODg2LTEuMTUtLjgzLS43MzctMS4yMTItMS45NS0xLjE1LTMuNjUyLjAzLTEuMDY4LjE5OC0yLjEzNy40ODgtMy4yMDUuMjktMS4wNy40NTctMi4wMjMuNDg4LTIuODUzLjA2Mi0xLjIzNC0uMzg0LTEuODU3LTEuMzUtMS44NTctLjg0IDAtMS43NC45NTUtMi43MDYgMi44NTMtLjk2NiAxLjktMS41MDUgMy44OS0xLjYxIDUuOTU2LS4wNiAxLjg2Ny4wNTMgMy4xNzQuMzY0IDMuOS0yLjI5My4wNjItMy45Mi0uNDE1LTQuODc2LTEuNDUyLS43OTgtLjg2LTEuMTYtMi4xOC0xLjEtMy45NDIuMDMyLS44Ni4xODgtMi4wNzUuNDU3LTMuNjIuMjgtMS41NDYuNDI1LTIuNzUuNDU3LTMuNjIuMDYyLS42MDMtLjA4My0uOTAzLS40NDYtLjkwMy0uMTk3IDAtLjc2OC4zNC0xLjcwMiAxLjAxNWwtMS4yMDMtMS4zNDhjLjE2OC0uMTM1IDEuMjE2LTEuMSAzLjE1Ni0yLjkwNSAxLjQtMS4yOTcgMi4zNTQtMS45NyAyLjg1Mi0yLjAwMi44NzItLjA3MyAxLjU2Ny4yOSAyLjEwNiAxLjA4LjUzLjc4Ny44IDEuNjkuOCAyLjcyNyAwIC4zMzItLjAzMi42NTQtLjEwNS45NTQuNDk3LS43NjYgMS4wOC0xLjQzIDEuNzUyLTIgMS41MzctMS4zNCAzLjI2LTIuMDg2IDUuMTU3LTIuMjUyIDEuNjQtLjEzNSAyLjguMjUgMy41MDUgMS4xNTIuNTcuNzM2LjgzIDEuNzg0LjggMy4xNTMuMjM3LS4xOTguNDg2LS40MTYuNzQ2LS42NTQuNzY3LS45MDMgMS41MTQtMS42MiAyLjI1LTIuMTQ4IDEuMjM1LS45MDIgMi41Mi0xLjQgMy44Ni0xLjUwNCAxLjU5Ny0uMTM1IDIuNzUuMjUgMy40NTQgMS4xNTIuNjAyLjcyNi44NyAxLjc3NC44IDMuMTQzLS4wMzIuOTMzLS4yNiAyLjI4LS42NzUgNC4wNjUtLjQxNiAxLjc3My0uNjI0IDIuOC0uNjI0IDMuMDctLjAzLjY5NS4wMyAxLjE4Mi4xOTcgMS40NDIuMTY2LjI3LjU3LjM5NCAxLjIwMy4zOTQuNDY3IDAgMS4yOTctLjQ5NyAyLjUtMS40ODIuOTk2LS44MiAxLjgxNi0xLjU5OCAyLjQ1LTIuMzI0bC45NjMgMS4yNTRtMTguNzY1LS4wNTJjLS45NjUgMS41OTgtMi44NzQgMy4xOTUtNS43MDYgNC43OTMtMy41MzggMi4wMzItNy4xMjcgMy4wNS0xMC43NTggMy4wNS0yLjcwNiAwLTQuNjM2LS45MDQtNS44MDgtMi43LS44My0xLjIzMy0xLjIzNC0yLjY5Ni0xLjIwMy00LjQwNy4wMy0yLjY5OCAxLjIzNC01LjI3IDMuNi03LjcxIDIuNjAzLTIuNjY1IDUuNjc0LTQuMDAzIDkuMjEtNC4wMDMgMy4yNyAwIDUgMS4zMjggNS4yMDggMy45OTQuMTM1IDEuNzAyLS43OTggMy40NDUtMi44IDUuMjQtMi4xMzcgMS45Ni00LjgyNCAzLjIxNS04LjA2IDMuNzQ0LjYuODMgMS41MDQgMS4yNDUgMi43MDcgMS4yNDUgMi4zOTYgMCA1LjAyLS42MTMgNy44NjMtMS44MzcgMi4wMzMtLjg2IDMuNjMtMS43NTMgNC44MDMtMi42NzZsLjk0NSAxLjI2NW0tMTEuMzYtNS4yMjhjLjAzMi0uODkyLS4zMy0xLjM1LTEuMS0xLjM1LS45OTQgMC0yLjAxLjY4Ni0zLjA0OCAyLjA2Ni0xLjAzOCAxLjM4LTEuNTY3IDIuNjk3LTEuNTk4IDMuOTYyLS4wMiAwLS4wMi4yMTggMCAuNjQzIDEuNjMtLjYgMy4wNS0xLjUxNCA0LjI0Mi0yLjczOC45NjYtMS4wNTggMS40NjMtMS45MiAxLjUwNS0yLjU4M20yNC45NDYgMS44NjhjLS4xMzUgMy4wNzItMS4yNjUgNS43MTctMy40MDIgNy45NDctMi4xMzUgMi4yMy00Ljc5IDMuMzUtNy45NTUgMy4zNS0yLjYzNSAwLTQuNjM3LS44NS02LjAwNi0yLjU1LS45OTctMS4yNjctMS41NTctMi44NTQtMS42NS00Ljc1Mi0uMTY2LTIuODYzLjg2LTUuNDk4IDMuMS03Ljg5NCAyLjQwOC0yLjY2NSA1LjQyNy0zLjk5MyA5LjA1Ny0zLjk5MyAyLjMzNCAwIDQuMDk4Ljc4OCA1LjMgMi4zNDQgMS4xMzIgMS40NDMgMS42NSAzLjI5IDEuNTU3IDUuNTVtLTUuNjY0LS4xODVjLjAzLS45MDMtLjA5NC0xLjczMy0uMzc0LTIuNDgtLjI4LS43NDctLjY5NS0xLjEzLTEuMjI0LTEuMTMtMS43MDIgMC0zLjEwMi45MjMtNC4yMDIgMi43Ni0uOTMzIDEuNTAzLTEuNDMgMy4xMS0xLjUwNCA0LjgxMi0uMDMuODQuMTE0IDEuNTc3LjQ0NiAyLjIxLjM2NC43MzYuODgyIDEuMSAxLjU1NiAxLjEgMS41MDUgMCAyLjc5LS44ODMgMy44Ni0yLjY1Ni44OTItMS40NzIgMS4zOC0zLjAwOCAxLjQ0LTQuNjE1aC4wMDJ6IiBmaWxsPSIjMTEyMjMzIi8+PC9zdmc+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+CiAgICAgICAgICAgIDxhIGNsYXNzPSJ0b3BuYXZfc3RvY2tfbG9nbyIgaHJlZj0iL3N0b2NrIj4KICAgICAgICAgICAgICAgIDxzdmcgYWx0PSJWaW1lbyIgd2lkdGg9IjE3MCIgaGVpZ2h0PSI0MCIgZGF0YS1uYW1lPSJMYXllciAxIiB2aWV3Qm94PSIwIDAgNzgwIDEyMCI+PHBhdGggZD0iTTQ3MS45IDcwLjMxYy0xMi4xNC0yLjc0LTI0LjI4LTMuOS0yNC4yOC0xMiAwLTYuNSA4LjgyLTcuNjYgMTMuNTktNy42NiA3LjIyIDAgMTMuNzMgMi4xNyAxNS4xNyAxMGgxNy4yYy0yLTE2LjYyLTE1LjktMjMtMzEuMjItMjMtMTMuNTggMC0zMS4yMSA1LjA1LTMxLjIxIDIxLjM4IDAgMTUuMTcgMTEuODUgMTkuNTEgMjQgMjIuMTFzMjQgMy43NiAyNC40MiAxMi40M2MuNDMgOC41Mi0xMC40IDkuODItMTYuNjIgOS44Mi04LjgxIDAtMTYtMy40Ni0xNi45LTEzaC0xNi40OWMuMjkgMTcuNjMgMTQuMzEgMjYgMzMuMDkgMjYgMTUuNDYgMCAzMy4zOC02LjUgMzMuMzgtMjQuMjgtLjAzLTE0LjcyLTEyLjE0LTE5LjA1LTI0LjEzLTIxLjh6TTUyNS42NiAxNy4yOGgtMTYuNDh2MjIuNGgtMTIuNDJWNTJoMTIuNDJ2NDRjLjI5IDEyLjQzIDMuNDcgMTkuMDggMjAuNjcgMTkuMDggMy42MSAwIDcuMDgtLjU4IDEwLjY5LS44N3YtMTIuNjhhMjguNTIgMjguNTIgMCAwIDEtNi45NC41N2MtNy4zNyAwLTcuOTQtMy40Ny03Ljk0LTEwLjI2VjUyaDE0Ljg4VjM5LjY4aC0xNC44OHpNNTgwLjg1IDM3LjY2Yy0yNCAwLTM3LjcxIDE2LjQ3LTM3LjcxIDM5LjMgMCAyMyAxMy43MyAzOS40NSAzNy43MSAzOS40NVM2MTguNTcgOTkuOTQgNjE4LjU3IDc3YzAtMjIuODctMTMuNzMtMzkuMzQtMzcuNzItMzkuMzR6bTAgNjUuNzRjLTE0LjczIDAtMjEuMjQtMTMuNC0yMS4yNC0yNi40czYuNTEtMjYuMyAyMS4yNC0yNi4zUzYwMi4xIDY0LjEgNjAyLjEgNzdzLTYuNTEgMjYuNC0yMS4yNSAyNi40ek02NjIuNzkgNTAuNjZjOS4xIDAgMTUuNzUgNC45MSAxNy4wNSAxNGgxNi40N2MtMS41OS0xOC4zNS0xNi4zMy0yNy0zMy42Ny0yNy0yNC41NiAwLTM2Ljg1IDE3LjYzLTM2Ljg1IDQwLjE3IDAgMjIgMTIuODYgMzguNTggMzYuMjcgMzguNTggMTkuMjIgMCAzMS4yMi0xMC42OSAzNC4yNS0zMC4wNmgtMTYuNDdjLTEuNTkgMTAuNy04LjI0IDE3LjA1LTE3Ljc4IDE3LjA1LTE0LjMgMC0xOS43OS0xMy4xNS0xOS43OS0yNS41NyAwLTIyLjY5IDExLjk5LTI3LjE3IDIwLjUyLTI3LjE3ek03NDIuMjYgNjcuMTNsMjguNjEtMjcuNDVoLTIwLjIzbC0yOS43NiAzMC4yVjExLjIxSDcwNC40djEwMy4xOGgxNi40OFY4Ny42NWw5LjgyLTkuNTMgMjIuODMgMzYuMjdoMjAuMDlsLTMxLjM2LTQ3LjI2eiIgZmlsbD0iI2ZmZiI+PC9wYXRoPjxwYXRoIGQ9Ik0xMTcuMjUgMjYuNzJhMTguMzcgMTguMzcgMCAwIDAgMTMuMTQtNS4zMXE0LjkyLTQuNjkgNS4xMy05LjhhOS42MiA5LjYyIDAgMCAwLTIuNjctNi44NCA5LjA4IDkuMDggMCAwIDAtNy4xOC0zLjM3IDIwLjkxIDIwLjkxIDAgMCAwLTEzLjQ1IDQuOXEtNi4wNiA0LjkxLTYuMjYgMTAuMjEtLjQgMTAuMjIgMTEuMjkgMTAuMjF6TTM4Ni4xMiAzOC4yNXEtMjIuMzggMC0zNy4xNSAxNi4zOVEzMzUuMiA2OS40IDMzNi4yNCA4N2MuMDUuODYuMTIgMS43LjIyIDIuNTNsLTEuNTQuNjhxLTE3LjQ2IDcuNTItMzIuMjMgNy41MS03LjQgMC0xMS4wOS01LjEyIDE5LjktMy4yNyAzMy0xNS4zNSAxMi40LTExLjAzIDExLjU0LTIxLjQ3LTEuMjMtMTYuMzctMjEuMzQtMTYuMzgtMjEuOCAwLTM3LjggMTYuNDItMTQuNTYgMTUtMTQuNzcgMzEuNmEzNy41NyAzNy41NyAwIDAgMCAuMjcgNS4zN2MtMi4yOSAxLjUxLTQgMi4yNy01LjIgMi4yN3EtMy45IDAtNC45Mi0xLjYzYy0uNjktMS4wOS0xLTMuMDYtLjgzLTUuOTNxMC0xLjY0IDIuNTctMTIuNTd0Mi43Ny0xNi42N3EuNC04LjM3LTMuMjgtMTIuODgtNC4zMi01LjUyLTE0LjE3LTQuN2EzMC40MiAzMC40MiAwIDAgMC0xNS44IDYuMTYgNTQuNTcgNTQuNTcgMCAwIDAtOS4yMyA4LjgyYy0xLjEgMS0yLjEyIDEuODYtMy4wOCAyLjY3cS4xOS04LjQxLTMuMjgtMTIuOTMtNC4zMi01LjUzLTE0LjM4LTQuNzJhMzYuNDYgMzYuNDYgMCAwIDAtMjEuMTMgOS4yNCAzNy42NyAzNy42NyAwIDAgMC03LjE5IDguMjEgMTguMTUgMTguMTUgMCAwIDAgLjQxLTMuOUExOS40MiAxOS40MiAwIDAgMCAxNjIuNSA0M3EtMy4yOC00LjgyLTguNjItNC40MS0zLjA3LjIxLTExLjY5IDguMjEtMTEuOTEgMTEuMDgtMTIuOTMgMTEuOWw0LjkyIDUuNTRjMy44My0yLjc2IDYuMTYtNC4xNSA3LTQuMTVxMi4yNSAwIDEuODUgMy42OGExMTQuMTEgMTE0LjExIDAgMCAxLTEuODkgMTQuODRjLS43IDMuOTQtMS4yIDcuMzMtMS41MiAxMC4xOWwtLjE4LjE1cS03LjM5IDYuMDgtMTAuMjYgNi4wN2MtNC4zOCAwLTYuNS0yLjkyLTYuMzctOC43OXEzLjA4LTE5LjIyIDUuNzYtMzEuNjkuODEtNy4zNi0yLjM3LTEydC0xMC00cS00LjMyLjQtMTMuMTQgOC4yMUw5NyA1Mi4zOWMtLjQxLTkuNjgtNC44Mi0xNC42Ni0xMy4yOC0xNC45MXEtMTktLjYtMjUuNzQgMjEuNDZhMTcuMTkgMTcuMTkgMCAwIDEgNi43Ni0xLjVxNyAwIDYuMTYgNy44NC0uNDYgNC43Mi02LjIgMTMuODF0LTguNjIgOS4wNnEtMy42OSAwLTYuNzctMTQtMS00LjExLTMuNjktMjEtMi40Ny0xNS41NC0xMy4xNC0xNC41MlEyOCAzOSAxOC45NCA0Ni44NHEtNi41NyA2LTEzLjM0IDExLjlsNC4zIDUuNTRRMTYuMDUgNjAgMTcuMDcgNjBxNC43MSAwIDguODEgMTQuNzZsNy4zOCAyNy4wNnE1LjUyIDE0Ljc2IDEzLjUxIDE0Ljc2IDEyLjkyIDAgMzEuNTUtMjQuMjQgMTMuMS0xNi44NCAxNy0yOC41YzMuNDQtMi41NSA1LjU3LTMuODQgNi4zNS0zLjg0cTMuNjkgMCAzLjY5IDUuMzMgMCAxLTQgMTUuMTh0LTQuMiAyMC45MnEtLjIxIDYuNTcgMy4xOCAxMC42NmMyLjI1IDIuNzQgNS41MSA0LjExIDkuNzUgNC4xMXExMy43NSAwIDI3LjUtMTEuOWMuODItLjcxIDEuNjEtMS40NCAyLjM5LTIuMThhMTYuNTEgMTYuNTEgMCAwIDAgMy43NyA3LjU2cTUuOTMgNi4zNCAyMCA1LjkzLTEuODktNC41Mi0xLjQ3LTE2YTU5LjcgNTkuNyAwIDAgMSA2LjU3LTI0LjQzcTYtMTEuNjggMTEuMS0xMS43IDYgMCA1LjU1IDcuNTlhNTMuMTMgNTMuMTMgMCAwIDEtMiAxMS43MSA1NS4yMyA1NS4yMyAwIDAgMC0yIDEzLjEzcS0uNDEgMTAuNDcgNC43MSAxNSA1LjczIDUuMTMgMjAuMDUgNC43Mi0yLjEzLTQuNzEtMS43Mi0xMy41NC42LTEyLjUyIDguNDQtMjUuODYgNy40MS0xMi43MiAxMi43Ni0xMi43MyA1IDAgNC43NCA3LjhhNzQuOTQgNzQuOTQgMCAwIDEtMi41NiAxNC4zNiA3NC42MSA3NC42MSAwIDAgMC0yLjU3IDE1Ljc5cS0uNDEgMTQuNzggMTIuOTQgMTQuNzcgMTMuNzQgMCAyNy41LTExLjlsLjQ0LS40Yy4zMi41NC42NCAxLjA4IDEgMS42cTcuMTkgMTEuMDggMjMuODEgMTEuMDggMjIuMzYgMCA0NC4xMy0xMi41YzEuNjMtLjkyIDMuMTctMS44MyA0LjY1LTIuNzVhMjkuNDMgMjkuNDMgMCAwIDAgMy4yNCA1LjE4cTguNDIgMTAuNDUgMjQuNjMgMTAuNDUgMTkuNSAwIDMyLjY0LTEzLjczYTQ4Ljc5IDQ4Ljc5IDAgMCAwIDE0LTMyLjU4cS42MS0xMy45My02LjM2LTIyLjc1LTcuNDktOS42NS0yMS44NS05LjY3em0tOTcuNzYgNDYuNTZhMTEuMTIgMTEuMTIgMCAwIDEgMC0yLjY2cS4xOS03Ljc1IDYuNTUtMTYuMjN0MTIuNS04LjQ4YzMuMTUgMCA0LjY1IDEuODUgNC41MSA1LjUycS0uMTkgNC4wOC02LjE0IDEwLjYyYTQ2LjI1IDQ2LjI1IDAgMCAxLTE3LjQyIDExLjIzek0zOTEgNjkuODVhMzkgMzkgMCAwIDEtNiAxOC45MnEtNi41NyAxMC45MS0xNS44MSAxMC45LTQuMTEgMC02LjM2LTQuNTJhMTcuNjYgMTcuNjYgMCAwIDEtMS44NS05LjA1IDM5LjgxIDM5LjgxIDAgMCAxIDYuMTYtMTkuNzRxNi44Ni0xMS4zMSAxNy4zMy0xMS4zMWMyLjE5IDAgMy44NiAxLjU0IDUgNC42M0EyNS44MiAyNS44MiAwIDAgMSAzOTEgNjkuODV6IiBmaWxsPSIjMDBhZGVmIj48L3BhdGg+PC9zdmc+CiAgICAgICAgICAgIDwvYT4KICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuYXYgY2xhc3M9InRvcG5hdl9kZXNrdG9wX21lbnUiIHJvbGU9Im5hdmlnYXRpb24iIGFyaWEtbGFiZWw9Ik1haW4gbWVudSI+CiAgICAgICAgICAgICAgICA8dWwgY2xhc3M9InRvcG5hdl9tZW51X2Rlc2t0b3BfbWFpbiIgcm9sZT0ibWVudWJhciI+CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgIAoKICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz0idG9wbmF2X2Rlc2t0b3BfbWVudV9pdGVtcyIgZGF0YS1tZW51LWlkPSJqb2luIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJ0b3BuYXZfbWVudV9qb2luIGpzLXRvcG5hdl9tZW51X2F1dGgiIG9uY2xpY2s9ImV2ZW50LnByZXZlbnREZWZhdWx0KCk7dmltZW8uTW9kYWwuY3JlYXRlKHtzaXplOid4c21hbGwnLGNvbnRlbnQ6Jy9qb2luP21vZGFsPW5ldyd9KS50aGVuKGNvbXBsZXRlVXNlckxvZ2luKSIgZGF0YS1nYS1ldmVudC1jbGljaz0idG9wX25hdnxqb2luIiBkYXRhLWZhdGFsLWF0dHJhY3Rpb249ImNvbnRhaW5lcjp0b3BfbmF2fGNvbXBvbmVudDpqb2luIiBkYXRhLWd0bS1jbGljaz0idG9wX25hdl9qb2luX2NsaWNrIiBocmVmPSIvL3ZpbWVvLmNvbS9qb2luIiB0aXRsZT0iQmVjb21lIGEgVmltZW8gbWVtYmVyIiByZWw9InRvZ2dsZSIgcm9sZT0iYnV0dG9uIiBhcmlhLW93bnM9InRvcG5hdl9qb2luIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKb2luICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT4KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saT4KICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgCgogICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJ0b3BuYXZfZGVza3RvcF9tZW51X2l0ZW1zIiBkYXRhLW1lbnUtaWQ9ImxvZ2luIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJqcy10b3BuYXZfbWVudV9hdXRoIiBvbmNsaWNrPSJldmVudC5wcmV2ZW50RGVmYXVsdCgpO3ZpbWVvLk1vZGFsLmNyZWF0ZSh7c2l6ZToneHNtYWxsJyxjb250ZW50OicvbG9nX2luP21vZGFsPW5ldyd9KS50aGVuKGNvbXBsZXRlVXNlckxvZ2luKSIgZGF0YS1nYS1ldmVudC1jbGljaz0idG9wX25hdnxsb2dpbiIgZGF0YS1mYXRhbC1hdHRyYWN0aW9uPSJjb250YWluZXI6dG9wX25hdnxjb21wb25lbnQ6bG9naW4iIGRhdGEtZ3RtLWNsaWNrPSJ0b3BfbmF2X2xvZ2luX2NsaWNrIiBocmVmPSIvL3ZpbWVvLmNvbS9sb2dfaW4iIHRpdGxlPSJMb2cgaW4gdG8geW91ciBhY2NvdW50IiByZWw9InRvZ2dsZSIgcm9sZT0iYnV0dG9uIiBhcmlhLW93bnM9InRvcG5hdl9sb2dpbiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTG9nIGluICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT4KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saT4KICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgCgogICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJ0b3BuYXZfZGVza3RvcF9tZW51X2l0ZW1zIiBkYXRhLW1lbnUtaWQ9InByaWNpbmciPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgZGF0YS1mYXRhbC1hdHRyYWN0aW9uPSJjb250YWluZXI6dG9wX25hdnxjb21wb25lbnQ6cHJpY2luZyIgZGF0YS1ndG0tY2xpY2s9InRvcF9uYXZfcHJpY2luZ19jbGljayIgaHJlZj0iLy92aW1lby5jb20vdXBncmFkZSIgdGl0bGU9IlByaWNpbmciIHJlbD0idG9nZ2xlIiByb2xlPSJidXR0b24iIGFyaWEtb3ducz0idG9wbmF2X3ByaWNpbmciPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByaWNpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hPgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpPgogICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAKCiAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9InRvcG5hdl9kZXNrdG9wX21lbnVfaXRlbXMiIGRhdGEtbWVudS1pZD0icHJvZHVjdCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBvbmNsaWNrPSJldmVudC5wcmV2ZW50RGVmYXVsdCgpO2V2ZW50LnRhcmdldC5ibHVyKCk7IiBjbGFzcz0idG9wbmF2X21lbnVfbm9fbGluayB0b3BuYXZfaGFzX2Ryb3Bkb3duIHRvcG5hdl9pY29uX2NoZXZyb25fYSIgaHJlZj0iIyIgdGl0bGU9IlByb2R1Y3QiIHJlbD0idG9nZ2xlIiByb2xlPSJidXR0b24iIGFyaWEtb3ducz0idG9wbmF2X3Byb2R1Y3QiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2R1Y3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hPgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRvcG5hdl9kZXNrdG9wX21lbnVfaXRlbXNfZHJvcGRvd24tLXdyYXBwZXIiIHJvbGU9Im1lbnUiIGFyaWEtaGlkZGVuPSJ0cnVlIiBpZD0idG9wbmF2X3Byb2R1Y3QiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idG9wbmF2X2Rlc2t0b3Bfc29sdXRpb25zLS1mZWF0dXJlcyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idG9wbmF2X2Rlc2t0b3BfbWVudV9pdGVtc19kcm9wZG93bi0tbGFiZWxzIj5GRUFUVVJFUzwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bCBjbGFzcz0idG9wbmF2X2Rlc2t0b3BfbWVudV9pdGVtc19saXN0Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz0idG9wbmF2X2Rlc2t0b3BfbWVudV9pdGVtc19kcm9wZG93bl9pdGVtIiByb2xlPSJtZW51aXRlbSIgdGFiaW5kZXg9Ii0xIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgZGF0YS1mYXRhbC1hdHRyYWN0aW9uPSJjb250YWluZXI6dG9wX25hdnxjb21wb25lbnQ6cHJvZHVjdHxrZXl3b3JkOnZpZGVvX3BsYXllciIgZGF0YS1ndG0tY2xpY2s9InRvcF9uYXZfcHJvZHVjdF92aWRlb19wbGF5ZXIiIGhyZWY9Ii8vdmltZW8uY29tL2ZlYXR1cmVzL3ZpZGVvLXBsYXllciIgdGl0bGU9IlZpZGVvIHBsYXllciI+VmlkZW8gcGxheWVyPC9hPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJ0b3BuYXZfZGVza3RvcF9tZW51X2l0ZW1zX2Ryb3Bkb3duX2l0ZW0iIHJvbGU9Im1lbnVpdGVtIiB0YWJpbmRleD0iLTEiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBkYXRhLWZhdGFsLWF0dHJhY3Rpb249ImNvbnRhaW5lcjp0b3BfbmF2fGNvbXBvbmVudDpwcm9kdWN0fGtleXdvcmQ6c2NyZWVuX3JlY29yZGVyIiBkYXRhLWd0bS1jbGljaz0idG9wX25hdl9wcm9kdWN0X3NjcmVlbl9yZWNvcmRlciIgaHJlZj0iLy92aW1lby5jb20vZmVhdHVyZXMvc2NyZWVuLXJlY29yZGVyIiB0aXRsZT0iU2NyZWVuIHJlY29yZGVyIj5TY3JlZW4gcmVjb3JkZXI8L2E+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9InRvcG5hdl9kZXNrdG9wX21lbnVfaXRlbXNfZHJvcGRvd25faXRlbSIgcm9sZT0ibWVudWl0ZW0iIHRhYmluZGV4PSItMSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGRhdGEtZmF0YWwtYXR0cmFjdGlvbj0iY29udGFpbmVyOnRvcF9uYXZ8Y29tcG9uZW50OnByb2R1Y3R8a2V5d29yZDpsaXZlX3N0cmVhbWluZyIgZGF0YS1ndG0tY2xpY2s9InRvcF9uYXZfcHJvZHVjdF9saXZlX3N0cmVhbWluZyIgaHJlZj0iLy92aW1lby5jb20vbGl2ZSIgdGl0bGU9IkxpdmUgc3RyZWFtaW5nIj5MaXZlIHN0cmVhbWluZzwvYT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz0idG9wbmF2X2Rlc2t0b3BfbWVudV9pdGVtc19kcm9wZG93bl9pdGVtIiByb2xlPSJtZW51aXRlbSIgdGFiaW5kZXg9Ii0xIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgZGF0YS1mYXRhbC1hdHRyYWN0aW9uPSJjb250YWluZXI6dG9wX25hdnxjb21wb25lbnQ6cHJvZHVjdHxrZXl3b3JkOnByaXZhY3kiIGRhdGEtZ3RtLWNsaWNrPSJ0b3BfbmF2X3Byb2R1Y3RfcHJpdmFjeSIgaHJlZj0iLy92aW1lby5jb20vZmVhdHVyZXMvdmlkZW8tcHJpdmFjeSIgdGl0bGU9IlByaXZhY3kiPlByaXZhY3k8L2E+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9InRvcG5hdl9kZXNrdG9wX21lbnVfaXRlbXNfZHJvcGRvd25faXRlbSIgcm9sZT0ibWVudWl0ZW0iIHRhYmluZGV4PSItMSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGRhdGEtZmF0YWwtYXR0cmFjdGlvbj0iY29udGFpbmVyOnRvcF9uYXZ8Y29tcG9uZW50OnByb2R1Y3R8a2V5d29yZDpjb2xsYWJvcmF0aW9uIiBkYXRhLWd0bS1jbGljaz0idG9wX25hdl9wcm9kdWN0X2NvbGxhYm9yYXRpb24iIGhyZWY9Ii8vdmltZW8uY29tL2ZlYXR1cmVzL3ZpZGVvLWNvbGxhYm9yYXRpb24iIHRpdGxlPSJDb2xsYWJvcmF0aW9uIj5Db2xsYWJvcmF0aW9uPC9hPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJ0b3BuYXZfZGVza3RvcF9tZW51X2l0ZW1zX2Ryb3Bkb3duX2l0ZW0iIHJvbGU9Im1lbnVpdGVtIiB0YWJpbmRleD0iLTEiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBkYXRhLWZhdGFsLWF0dHJhY3Rpb249ImNvbnRhaW5lcjp0b3BfbmF2fGNvbXBvbmVudDpwcm9kdWN0fGtleXdvcmQ6ZGlzdHJpYnV0aW9uIiBkYXRhLWd0bS1jbGljaz0idG9wX25hdl9wcm9kdWN0X2Rpc3RyaWJ1dGlvbiIgaHJlZj0iLy92aW1lby5jb20vZmVhdHVyZXMvdmlkZW8tbWFya2V0aW5nIiB0aXRsZT0iRGlzdHJpYnV0aW9uIGFuZCBtYXJrZXRpbmciPkRpc3RyaWJ1dGlvbiAmIG1hcmtldGluZzwvYT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz0idG9wbmF2X2Rlc2t0b3BfbWVudV9pdGVtc19kcm9wZG93bl9pdGVtIiByb2xlPSJtZW51aXRlbSIgdGFiaW5kZXg9Ii0xIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgZGF0YS1mYXRhbC1hdHRyYWN0aW9uPSJjb250YWluZXI6dG9wX25hdnxjb21wb25lbnQ6cHJvZHVjdHxrZXl3b3JkOm1vbmV0aXphdGlvbiIgZGF0YS1ndG0tY2xpY2s9InRvcF9uYXZfcHJvZHVjdF9tb25ldGl6YXRpb24iIGhyZWY9Ii8vdmltZW8uY29tL2ZlYXR1cmVzL3ZpZGVvLW1vbmV0aXphdGlvbiIgdGl0bGU9Ik1vbmV0aXphdGlvbiI+TW9uZXRpemF0aW9uPC9hPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJ0b3BuYXZfZGVza3RvcF9tZW51X2l0ZW1zX2Ryb3Bkb3duX2l0ZW0iIHJvbGU9Im1lbnVpdGVtIiB0YWJpbmRleD0iLTEiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBkYXRhLWZhdGFsLWF0dHJhY3Rpb249ImNvbnRhaW5lcjp0b3BfbmF2fGNvbXBvbmVudDpwcm9kdWN0fGtleXdvcmQ6YW5hbHl0aWNzIiBkYXRhLWd0bS1jbGljaz0idG9wX25hdl9wcm9kdWN0X2FuYWx5dGljcyIgaHJlZj0iLy92aW1lby5jb20vZmVhdHVyZXMvdmlkZW8tYW5hbHl0aWNzIiB0aXRsZT0iQW5hbHl0aWNzIj5BbmFseXRpY3M8L2E+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9InRvcG5hdl9kZXNrdG9wX21lbnVfaXRlbXNfZHJvcGRvd25faXRlbSIgcm9sZT0ibWVudWl0ZW0iIHRhYmluZGV4PSItMSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGRhdGEtZmF0YWwtYXR0cmFjdGlvbj0iY29udGFpbmVyOnRvcF9uYXZ8Y29tcG9uZW50OnByb2R1Y3R8a2V5d29yZDpob3N0aW5nIiBkYXRhLWd0bS1jbGljaz0idG9wX25hdl9wcm9kdWN0X2hvc3RpbmciIGhyZWY9Ii8vdmltZW8uY29tL2ZlYXR1cmVzL29ubGluZS12aWRlby1ob3N0aW5nIiB0aXRsZT0iSG9zdGluZyBhbmQgbWFuYWdlbWVudCI+SG9zdGluZyAmIG1hbmFnZW1lbnQ8L2E+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Ii91cGdyYWRlIiBjbGFzcz0idG9wbmF2X2Rlc2t0b3BfbWVudV9pdGVtc19kcm9wZG93bi0tY29tcGFyZV9wbGFucyIgZGF0YS1mYXRhbC1hdHRyYWN0aW9uPSJjb250YWluZXI6dG9wX25hdnxjb21wb25lbnQ6cHJvZHVjdHxrZXl3b3JkOmNvbXBhcmVfcGxhbnN8dGFyZ2V0Oi91cGdyYWRlfHR5cGU6Y2xpY2siPkNvbXBhcmUgUGxhbnM8L2E+CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdWw+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRvcG5hdl9kZXNrdG9wX3NvbHV0aW9ucy0tc2VydmljZXMiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRvcG5hdl9kZXNrdG9wX21lbnVfaXRlbXNfZHJvcGRvd24tLWxhYmVscyI+U0VSVklDRVM8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0b3BuYXZfZGVza3RvcF9zb2x1dGlvbnMtLXNlcnZpY2VzX2NvbnRhaW5lciI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzZXJ2aWNlc193cmFwcGVyIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBkYXRhLWZhdGFsLWF0dHJhY3Rpb249ImNvbnRhaW5lcjp0b3BfbmF2fGNvbXBvbmVudDpzb2x1dGlvbnN8a2V5d29yZDpjcmVhdGV8dGFyZ2V0Oi9jcmVhdGV8dHlwZTpjbGljayIgY2xhc3M9InRvcG5hdl9kZXNrdG9wX3NvbHV0aW9ucy0tc2VydmljZXNfYmxvY2siIGhyZWY9Ii8vdmltZW8uY29tL2NyZWF0ZSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENyZWF0ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cD5NYWtlIHNvY2lhbCB2aWRlb3MgaW4gYW4gaW5zdGFudDogdXNlIGN1c3RvbSB0ZW1wbGF0ZXMgdG8gdGVsbCB0aGUgcmlnaHQgc3RvcnkgZm9yIHlvdXIgYnVzaW5lc3MuPC9wPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ic2VydmljZXNfd3JhcHBlciI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgZGF0YS1mYXRhbC1hdHRyYWN0aW9uPSJjb250YWluZXI6dG9wX25hdnxjb21wb25lbnQ6c29sdXRpb25zfGtleXdvcmQ6Zm9yX2hpcmV8dGFyZ2V0Oi9mb3ItaGlyZXx0eXBlOmNsaWNrIiBjbGFzcz0idG9wbmF2X2Rlc2t0b3Bfc29sdXRpb25zLS1zZXJ2aWNlc19ibG9jayIgaHJlZj0iLy92aW1lby5jb20vZm9yLWhpcmUiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgSGlyZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cD5Qb3N0IGpvYnMsIGZpbmQgcHJvcywgYW5kIGNvbGxhYm9yYXRlIGNvbW1pc3Npb24tZnJlZSBpbiBvdXIgcHJvZmVzc2lvbmFsIG1hcmtldHBsYWNlLjwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InNlcnZpY2VzX3dyYXBwZXIiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGRhdGEtZmF0YWwtYXR0cmFjdGlvbj0iY29udGFpbmVyOnRvcF9uYXZ8Y29tcG9uZW50OnNvbHV0aW9uc3xrZXl3b3JkOmVudGVycHJpc2V8dGFyZ2V0Oi9lbnRlcnByaXNlfHR5cGU6Y2xpY2siIGNsYXNzPSJ0b3BuYXZfZGVza3RvcF9zb2x1dGlvbnMtLXNlcnZpY2VzX2Jsb2NrIiBocmVmPSIvL3ZpbWVvLmNvbS9lbnRlcnByaXNlIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRW50ZXJwcmlzZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cD5HZXQgeW91ciB0ZWFtIGFsaWduZWQgd2l0aCBhbGwgdGhlIHRvb2xzIHlvdSBuZWVkIG9uIG9uZSBzZWN1cmUsIHJlbGlhYmxlIHZpZGVvIHBsYXRmb3JtLjwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InNlcnZpY2VzX3dyYXBwZXIiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGRhdGEtZmF0YWwtYXR0cmFjdGlvbj0iY29udGFpbmVyOnRvcF9uYXZ8Y29tcG9uZW50OnNvbHV0aW9uc3xrZXl3b3JkOnN0b2NrfHRhcmdldDovc3RvY2t8dHlwZTpjbGljayIgY2xhc3M9InRvcG5hdl9kZXNrdG9wX3NvbHV0aW9ucy0tc2VydmljZXNfYmxvY2siIGhyZWY9Ii8vdmltZW8uY29tL3N0b2NrIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RvY2sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHA+QnJvd3NlIGFuZCBidXkgZXhjZXB0aW9uYWwsIHJveWFsdHktZnJlZSBzdG9jayBjbGlwcywgaGFuZHBpY2tlZCBieSB0aGUgYmVzdC48L3A+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpPgogICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAKCiAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9InRvcG5hdl9kZXNrdG9wX21lbnVfaXRlbXMiIGRhdGEtbWVudS1pZD0ic29sdXRpb25zIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJ0b3BuYXZfaGFzX2Ryb3Bkb3duIHRvcG5hdl9pY29uX2NoZXZyb25fYSIgZGF0YS1mYXRhbC1hdHRyYWN0aW9uPSJjb250YWluZXI6dG9wX25hdnxjb21wb25lbnQ6c29sdXRpb25zfGtleXdvcmQ6c29sdXRpb25zIiBocmVmPSIjIiB0aXRsZT0iU29sdXRpb25zIiByZWw9InRvZ2dsZSIgcm9sZT0iYnV0dG9uIiBhcmlhLW93bnM9InRvcG5hdl9zb2x1dGlvbnMiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNvbHV0aW9ucyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHVsIGNsYXNzPSJ0b3BuYXZfZGVza3RvcF9tZW51X2l0ZW1zX2Ryb3Bkb3duIiByb2xlPSJtZW51IiBhcmlhLWhpZGRlbj0idHJ1ZSIgaWQ9InRvcG5hdl9zb2x1dGlvbnMiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9InRvcG5hdl9kZXNrdG9wX21lbnVfaXRlbXNfZHJvcGRvd25faXRlbSIgcm9sZT0ibWVudWl0ZW0iIHRhYmluZGV4PSItMSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBkYXRhLWZhdGFsLWF0dHJhY3Rpb249ImNvbnRhaW5lcjp0b3BfbmF2fGNvbXBvbmVudDpzb2x1dGlvbnN8a2V5d29yZDpjcmVhdGl2ZV9wcm9mZXNzaW9uYWxzIiBocmVmPSIvL3ZpbWVvLmNvbS9zb2x1dGlvbnMvY3JlYXRpdmUtcHJvZmVzc2lvbmFscy1zb2x1dGlvbnMiIHRpdGxlPSJBbGwgeW91IG5lZWQgdG8gbWFrZSBncmVhdCB2aWRlby4iPkNyZWF0aXZlIFByb2Zlc3Npb25hbHM8L2E+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJ0b3BuYXZfZGVza3RvcF9tZW51X2l0ZW1zX2Ryb3Bkb3duX2l0ZW0iIHJvbGU9Im1lbnVpdGVtIiB0YWJpbmRleD0iLTEiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgZGF0YS1mYXRhbC1hdHRyYWN0aW9uPSJjb250YWluZXI6dG9wX25hdnxjb21wb25lbnQ6c29sdXRpb25zfGtleXdvcmQ6c21hbGxfYnVzaW5lc3MiIGhyZWY9Ii8vdmltZW8uY29tL3NvbHV0aW9ucy9zbWFsbC1idXNpbmVzcy1zb2x1dGlvbnMiIHRpdGxlPSJDYXB0dXJlIHlvdXIgY3VzdG9tZXJz4oCZIGF0dGVudGlvbiB3aXRoIHZpZGVvLiI+U21hbGwgQnVzaW5lc3M8L2E+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJ0b3BuYXZfZGVza3RvcF9tZW51X2l0ZW1zX2Ryb3Bkb3duX2l0ZW0iIHJvbGU9Im1lbnVpdGVtIiB0YWJpbmRleD0iLTEiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgZGF0YS1mYXRhbC1hdHRyYWN0aW9uPSJjb250YWluZXI6dG9wX25hdnxjb21wb25lbnQ6c29sdXRpb25zfGtleXdvcmQ6ZW50ZXJwcmlzZSIgaHJlZj0iLy92aW1lby5jb20vZW50ZXJwcmlzZSIgdGl0bGU9IkVudGVycHJpc2UiPkVudGVycHJpc2U8L2E+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJ0b3BuYXZfZGVza3RvcF9tZW51X2l0ZW1zX2Ryb3Bkb3duX2l0ZW0iIHJvbGU9Im1lbnVpdGVtIiB0YWJpbmRleD0iLTEiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgZGF0YS1mYXRhbC1hdHRyYWN0aW9uPSJjb250YWluZXI6dG9wX25hdnxjb21wb25lbnQ6c29sdXRpb25zfGtleXdvcmQ6ZWR1Y2F0aW9uIiBocmVmPSIvL3ZpbWVvLmNvbS9zb2x1dGlvbnMvZWR1Y2F0aW9uLXNvbHV0aW9ucyIgdGl0bGU9IlNoYXJlIGtub3dsZWRnZSB3aXRoIHZpZGVvLiI+RWR1Y2F0aW9uPC9hPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz0idG9wbmF2X2Rlc2t0b3BfbWVudV9pdGVtc19kcm9wZG93bl9pdGVtIiByb2xlPSJtZW51aXRlbSIgdGFiaW5kZXg9Ii0xIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGRhdGEtZmF0YWwtYXR0cmFjdGlvbj0iY29udGFpbmVyOnRvcF9uYXZ8Y29tcG9uZW50OnNvbHV0aW9uc3xrZXl3b3JkOmZpdG5lc3MiIGhyZWY9Ii8vdmltZW8uY29tL3NvbHV0aW9ucy9maXRuZXNzLXNvbHV0aW9ucyIgdGl0bGU9IkdldCB5b3VyIGZpdG5lc3Mgc3R1ZGlvIG9ubGluZS4iPkZpdG5lc3M8L2E+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJ0b3BuYXZfZGVza3RvcF9tZW51X2l0ZW1zX2Ryb3Bkb3duX2l0ZW0iIHJvbGU9Im1lbnVpdGVtIiB0YWJpbmRleD0iLTEiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgZGF0YS1mYXRhbC1hdHRyYWN0aW9uPSJjb250YWluZXI6dG9wX25hdnxjb21wb25lbnQ6c29sdXRpb25zfGtleXdvcmQ6ZmFpdGgiIGhyZWY9Ii8vdmltZW8uY29tL3NvbHV0aW9ucy9mYWl0aC1zb2x1dGlvbnMiIHRpdGxlPSJLZWVwIHlvdXIgY29tbXVuaXR5IGNvbm5lY3RlZC4iPkZhaXRoPC9hPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3VsPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saT4KICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgCgogICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJ0b3BuYXZfZGVza3RvcF9tZW51X2l0ZW1zIiBkYXRhLW1lbnUtaWQ9Imluc3BpcmF0aW9uIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIG9uY2xpY2s9ImV2ZW50LnByZXZlbnREZWZhdWx0KCk7ZXZlbnQudGFyZ2V0LmJsdXIoKTsiIGNsYXNzPSJ0b3BuYXZfbWVudV9ub19saW5rIHRvcG5hdl9oYXNfZHJvcGRvd24gdG9wbmF2X2ljb25fY2hldnJvbl9hIiBocmVmPSIjIiB0aXRsZT0iV2F0Y2giIHJlbD0idG9nZ2xlIiByb2xlPSJidXR0b24iIGFyaWEtb3ducz0idG9wbmF2X2luc3BpcmF0aW9uIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXYXRjaCAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHVsIGNsYXNzPSJ0b3BuYXZfZGVza3RvcF9tZW51X2l0ZW1zX2Ryb3Bkb3duIiByb2xlPSJtZW51IiBhcmlhLWhpZGRlbj0idHJ1ZSIgaWQ9InRvcG5hdl9pbnNwaXJhdGlvbiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz0idG9wbmF2X2Rlc2t0b3BfbWVudV9pdGVtc19kcm9wZG93bl9pdGVtIiByb2xlPSJtZW51aXRlbSIgdGFiaW5kZXg9Ii0xIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGRhdGEtZmF0YWwtYXR0cmFjdGlvbj0iY29udGFpbmVyOnRvcF9uYXZ8Y29tcG9uZW50OndhdGNofGtleXdvcmQ6d2F0Y2giIGRhdGEtZ3RtLWNsaWNrPSJ0b3BfbmF2X3dhdGNoX2NsaWNrIiBocmVmPSIvL3ZpbWVvLmNvbS93YXRjaCIgdGl0bGU9IkV4cGxvcmUiPkV4cGxvcmU8L2E+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJ0b3BuYXZfZGVza3RvcF9tZW51X2l0ZW1zX2Ryb3Bkb3duX2l0ZW0iIHJvbGU9Im1lbnVpdGVtIiB0YWJpbmRleD0iLTEiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgZGF0YS1mYXRhbC1hdHRyYWN0aW9uPSJjb250YWluZXI6dG9wX25hdnxjb21wb25lbnQ6d2F0Y2h8a2V5d29yZDpzdGFmZl9waWNrcyIgZGF0YS1ndG0tY2xpY2s9InRvcF9uYXZfd2F0Y2hfc3RhZmZfcGlja3NfY2xpY2siIGhyZWY9Ii8vdmltZW8uY29tL2NoYW5uZWxzL3N0YWZmcGlja3MiIHRpdGxlPSJUaGUgYmVzdCB2aWRlb3Mgb24gVmltZW8sIGN1cmF0ZWQgZGFpbHkgYnkgb3VyIHRlYW0iPlN0YWZmIFBpY2tzPC9hPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz0idG9wbmF2X2Rlc2t0b3BfbWVudV9pdGVtc19kcm9wZG93bl9pdGVtIiByb2xlPSJtZW51aXRlbSIgdGFiaW5kZXg9Ii0xIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGRhdGEtZmF0YWwtYXR0cmFjdGlvbj0iY29udGFpbmVyOnRvcF9uYXZ8Y29tcG9uZW50Om1hbmFnZV92aWRlb3N8a2V5d29yZDp2aWRlb19zY2hvb2wiIGRhdGEtZ3RtLWNsaWNrPSJ0b3BfbmF2X2NyZWF0ZV92aWRlb19zY2hvb2xfY2xpY2siIGhyZWY9Ii8vdmltZW8uY29tL3ZpZGVvc2Nob29sIiB0aXRsZT0iTGVhcm4gaG93IHRvIG1ha2UgYmV0dGVyIHZpZGVvcyI+VmlkZW8gU2Nob29sPC9hPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3VsPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saT4KICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIDwvdWw+CiAgICAgICAgICAgIDwvbmF2PjwhLS0gLy50b3BuYXZfZGVza3RvcF9tZW51IC0tPgogICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD0idG9wbmF2X21lbnVfc2VhcmNoX29tbmlzZWFyY2giIGNsYXNzPSJ0b3BuYXZfbWVudV9zZWFyY2giIGRhdGEtcXVlcnk9IiIgZGF0YS1wbGFjZWhvbGRlcj0iU2VhcmNoIHZpZGVvcywgcGVvcGxlLCBhbmQgbW9yZSI+PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idG9wbmF2X21lbnVfcmlnaHQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSJyZWNvcmRfdGlwX3dyYXBwZXIiIGNsYXNzPSJ0b3BuYXZfZGVza3RvcF92aWRlb19wb3BvdmVyIiBvbk1vdXNlZW50ZXI9InRyYWNrTmV3VmlkZW9Ecm9wZG93bkltcHJlc3Npb24oJycpIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ9Im5ld192aWRlb19kcm9wZG93bl9idXR0b24iCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0idG9wbmF2X2Rlc2t0b3BfdmlkZW9fcG9wb3Zlcl9idXR0b24gaXJpc19idG4tLXByaW1hcnkiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLWZhdGFsLWF0dHJhY3Rpb249ImNvbnRhaW5lcjp0b3BfbmF2fGNvbXBvbmVudDpuZXdfdmlkZW8iCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbmNsaWNrPSJoYW5kbGVOZXdWaWRlb0NsaWNrKCkiCiAgICAgICAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0b3BuYXZfZGVza3RvcF92aWRlb19wb3BvdmVyX3NwYW5fd3JhcHBlciI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTmV3IHZpZGVvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBpZD0icmVjb3JkX2FuaW1hdGlvbl93cmFwcGVyIiBjbGFzcz0idG9wbmF2X2Rlc2t0b3BfdmlkZW9fcG9wb3Zlcl9zcGFuX3ZhcmlhbnQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjI0cHgiIGhlaWdodD0iMjRweCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9Ik0xMiAxNS41YTEgMSAwIDAgMS0uNjctLjI2bC01LTQuNSAxLjM0LTEuNDhMMTIgMTMuMTVsNC4zMy0zLjkgMS4zNCAxLjQ5LTUgNC41YTEgMSAwIDAgMS0uNjcuMjZ6IgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw9IiNmZmZmZmYiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPgogICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bCBpZD0ibmV3X3ZpZGVvX2Ryb3Bkb3duX3ZhcmlhbnQiIGNsYXNzPSJ0b3BuYXZfZGVza3RvcF9tZW51X2l0ZW1zX2Ryb3Bkb3duIHRvcG5hdl9kZXNrdG9wX3ZpZGVvX3BvcG92ZXJfZHJvcGRvd25fdmFyaWFudCIgcm9sZT0ibWVudSIgYXJpYS1oaWRkZW49InRydWUiIHN0eWxlPSJwYWRkaW5nOiB1bnNldDsiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9InRvcG5hdl9kZXNrdG9wX21lbnVfaXRlbXNfZHJvcGRvd25faXRlbV92YXJpYW50IiByb2xlPSJtZW51aXRlbSIgdGFiaW5kZXg9Ii0xIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIG9uY2xpY2s9IihmdW5jdGlvbihldmVudCkgeyBpZiAod2luZG93LmhhbmRsZVVwbG9hZEJ1dHRvbkNsaWNrKSB7IGhhbmRsZVVwbG9hZEJ1dHRvbkNsaWNrKGV2ZW50KTsgfX0pKGV2ZW50KSIgZGF0YS1mYXRhbC1hdHRyYWN0aW9uPSJjb250YWluZXI6dG9wX25hdnxjb21wb25lbnQ6bmV3X3ZpZGVvfGtleXdvcmQ6eydhY3Rpb24nOid1cGxvYWQnfXx0YXJnZXQ6L3VwbG9hZHx0eXBlOmNsaWNrIiBpZD0idG9wbmF2X2Rlc2t0b3BfdXBsb2FkX2J1dHRvbiIgaHJlZj0iLy92aW1lby5jb20vdXBsb2FkIiA+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iYWxpZ25fdG9wbmF2X2Ryb3Bkb3duX2ljb25zIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRvcG5hdl9kcm9wZG93bl9pY29ucyI+PHN2ZyB2aWV3Qm94PSIwIDAgMjAgMjAiIHdpZHRoPSIyNHB4IiBoZWlnaHQ9IjI0cHgiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPSJNMTggOC40OGE3LjE2IDcuMTYgMCAwIDAtMS44NC00Ljc2QTUuODEgNS44MSAwIDAgMCA2LjkyIDVhNS4yNCA1LjI0IDAgMCAwLTQuNjkgMy44NUE0LjkxIDQuOTEgMCAwIDAgMCAxM2E1LjEzIDUuMTMgMCAwIDAgNSA1aDEwYTUuMSA1LjEgMCAwIDAgNS00Ljk0IDUuODkgNS44OSAwIDAgMC0yLTQuNTh6TTE1IDE2aC00di0zLjU5bDEuMjkgMS4yOSAxLjQxLTEuNDEtMy43LTMuNy0zLjcxIDMuN0w3LjcgMTMuNyA5IDEyLjQxVjE2SDVhMy4xNiAzLjE2IDAgMCAxLTMtMyAyLjkxIDIuOTEgMCAwIDEgMS41Mi0yLjU4bC40LS4yLjA4LS40NEEzLjM4IDMuMzggMCAwIDEgNy41OSA3aC43bC4yNC0uNjZBMy42OSAzLjY5IDAgMCAxIDEyIDRhMy43MyAzLjczIDAgMCAxIDIuNzIgMS4xMkE1LjQ1IDUuNDUgMCAwIDEgMTYgOXYuNTRsLjQ1LjNBMy43OSAzLjc5IDAgMCAxIDE4IDEzLjA2IDMuMDkgMy4wOSAwIDAgMSAxNSAxNnoiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbD0iIzFhMmUzYiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPjwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVXBsb2FkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJ0b3BuYXZfZGVza3RvcF9tZW51X2l0ZW1zX2Ryb3Bkb3duX2l0ZW1fdmFyaWFudCIgcm9sZT0ibWVudWl0ZW0iIHRhYmluZGV4PSItMSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBvbmNsaWNrPSJoYW5kbGVDcmVhdGVWaWRlb0NsaWNrKGV2ZW50KSIgZGF0YS1mYXRhbC1hdHRyYWN0aW9uPSJjb250YWluZXI6dG9wX25hdnxjb21wb25lbnQ6bmV3X3ZpZGVvfGtleXdvcmQ6eydhY3Rpb24nOidjcmVhdGUnfXx0YXJnZXQ6L2NyZWF0ZS92aWRlby1tYWtlcnx0eXBlOmNsaWNrIiBpZD0idG9wbmF2X2Rlc2t0b3BfY3JlYXRlX3ZpZGVvX2J1dHRvbiIgaHJlZj0iLy92aW1lby5jb20vY3JlYXRlL3ZpZGVvLW1ha2VyIiA+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iYWxpZ25fdG9wbmF2X2Ryb3Bkb3duX2ljb25zIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRvcG5hdl9kcm9wZG93bl9pY29ucyI+PHN2ZyB2aWV3Qm94PSIwIDAgMjAgMjAiIHdpZHRoPSIyNHB4IiBoZWlnaHQ9IjI0cHgiPgogICAgICAgICAgICAgICAgICAgICAgICA8cGF0aAogICAgICAgICAgICAgICAgICAgICAgICAgICAgZD0iTTMuMiAxNi44bDMuOC0xIDEwLTEwYy4yLS4yLjItLjUgMC0uN0wxNC45IDNjLS4yLS4yLS41LS4yLS43IDBsLTIuMSAyLjEgMi44IDIuOEwxMy44IDkgMTEgNi4yIDQuMiAxM2wtMSAzLjh6bTkuOS0xNC45Yy44LS44IDItLjggMi44IDBMMTguMSA0Yy44LjguOCAyIDAgMi44TDcuOCAxNy4ybC01LjYgMS41Yy0uNS4xLS45LS4yLS43LS43bDEuNC01LjdMMTMuMSAxLjl6IgogICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbD0iIzFhMmUzYiIKICAgICAgICAgICAgICAgICAgICAgICAgLz4KICAgICAgICAgICAgICAgICAgICA8L3N2Zz48L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENyZWF0ZSBhIHZpZGVvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC91bD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgPGRpdiBpZD0iY2FydF90b3BfbmF2IiBjbGFzcz0idG9wbmF2X2NhcnRfYnV0dG9uIj48L2Rpdj4KCiAgICAgICAgICAgIDwvZGl2PjwhLS0gLy50b3BuYXZfbWVudV9yaWdodCAtLT4KICAgICAgICAgICAgPC9kaXY+PCEtLSAvLnRvcG5hdl9kZXNrdG9wX3dyYXBwZXIgLS0+CjwvZGl2PgoKICAgIDxzY3JpcHQ+CiAgICAgICAgdmFyIGlzTW9iaWxlID0gL2lwaG9uZXxpcG9kfGFuZHJvaWR8d2Vib3N8YmxhY2tiZXJyeXx3aW5kb3dzIHBob25lL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50LnRvTG93ZXJDYXNlKCkpOwoKICAgICAgICAvLyBETyBOT1QgUkVNT1ZFLiBUaGlzIGlzIGEgY2FsbGJhY2sgZm9yIHRoZSBsb2dpbiAmIGpvaW4gYnV0dG9ucyBpbiBUb3BOYXZCdWlsZGVyLgogICAgICAgIGZ1bmN0aW9uIGNvbXBsZXRlVXNlckxvZ2luKHJlc3BvbnNlKSB7CiAgICAgICAgICAgIGlmIChyZXNwb25zZSAmJiAhcmVzcG9uc2Uuc2lnbnVwKSB7CiAgICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24ucmVsb2FkKCk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZnVuY3Rpb24gaGFuZGxlVXBsb2FkQnV0dG9uQ2xpY2soZXZlbnQpIHsKICAgICAgICAgICAgLy8gT3BlbnMgdGhlIGF1dGggbW9kYWwgZm9yIGxvZ2dlZCBvdXQgdXNlcnMKICAgICAgICAgICAgaWYgKAogICAgICAgICAgICAgICB3aW5kb3cudmltZW8KICAgICAgICAgICAgICAgJiYgd2luZG93LnZpbWVvLmNvbmZpZwogICAgICAgICAgICAgICAmJiB3aW5kb3cudmltZW8uTW9kYWwKICAgICAgICAgICAgICAgJiYgIXdpbmRvdy52aW1lby5jdXJfdXNlcgogICAgICAgICAgICApewogICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsKICAgICAgICAgICAgICAgIGlzTW9iaWxlID8gd2luZG93LmxvY2F0aW9uLmhyZWY9Ii91cGxvYWQiIDogdmltZW8uTW9kYWwuY3JlYXRlKHsKICAgICAgICAgICAgICAgICAgICBzaXplOiAneHNtYWxsJywKICAgICAgICAgICAgICAgICAgICBjb250ZW50OiAnL2pvaW4/bW9kYWw9bmV3JnJlZGlyZWN0PS91cGxvYWQnLAogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgIDwvc2NyaXB0PgoKPHNjcmlwdD4KICAgIHZhciBzZXJ2aWNlRWxlbWVudHMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcuc2VydmljZXNfd3JhcHBlcicpOwogICAgdmFyIGhpZGRlblNlcnZpY2VFbGVtZW50cyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5zZXJ2aWNlc193cmFwcGVyLmhpZGUnKTsKICAgIHZhciBjb3VudCA9IHNlcnZpY2VFbGVtZW50cy5sZW5ndGggLSBoaWRkZW5TZXJ2aWNlRWxlbWVudHMubGVuZ3RoOwogICAgaWYgKGNvdW50ID4gMikgewogICAgICAgIHZhciBzZXJ2aWNlQ29udGFpbmVyID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLnRvcG5hdl9kZXNrdG9wX3NvbHV0aW9ucy0tc2VydmljZXNfY29udGFpbmVyJyk7CiAgICAgICAgaWYgKHNlcnZpY2VDb250YWluZXIpIHsKICAgICAgICAgICAgc2VydmljZUNvbnRhaW5lci5zdHlsZS53aWR0aCA9ICc0NTBweCc7CiAgICAgICAgfQogICAgfQo8L3NjcmlwdD4KCjxzY3JpcHQ+CiAgICBmdW5jdGlvbiBoYW5kbGVOZXdWaWRlb0NsaWNrKCkgewogICAgICAgIGlmICh3aW5kb3cudmltZW8gJiYgd2luZG93LnZpbWVvLmN1cl91c2VyKSB7CiAgICAgICAgICAgIGlmICh3aW5kb3cubG9jYXRpb24ucGF0aG5hbWUgIT09ICcvdXBsb2FkJykgewogICAgICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLmhyZWYgPSAnL3VwbG9hZCc7CiAgICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgewogICAgICAgICAgICB3aW5kb3cudmltZW8uTW9kYWwuY3JlYXRlKHsgc2l6ZTogJ3hzbWFsbCcsIGNvbnRlbnQ6ICcvam9pbj9tb2RhbD1uZXcmcmVkaXJlY3Q9L3VwbG9hZCcgfSkKICAgICAgICAgICAgICAgIC50aGVuKGNvbXBsZXRlVXNlckxvZ2luKTsKICAgICAgICB9CiAgICB9CgogICAgZnVuY3Rpb24gaGFuZGxlQ3JlYXRlVmlkZW9DbGljayhlLCBpc1JlY29yZFNjcmVlbiA9IGZhbHNlKSB7CiAgICAgICAgaWYgKHdpbmRvdy52aW1lbyAmJiAhd2luZG93LnZpbWVvLmN1cl91c2VyKSB7CiAgICAgICAgICAgIGlmICghaXNSZWNvcmRTY3JlZW4pIHsKICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTsKCiAgICAgICAgICAgICAgICB3aW5kb3cudmltZW8uTW9kYWwuY3JlYXRlKHsKICAgICAgICAgICAgICAgICAgICBzaXplOiAneHNtYWxsJywKICAgICAgICAgICAgICAgICAgICBjb250ZW50OiAnL2pvaW4/bW9kYWw9bmV3JnJlZGlyZWN0PS9jcmVhdGUvdmlkZW8tbWFrZXInCiAgICAgICAgICAgICAgICB9KS50aGVuKGNvbXBsZXRlVXNlckxvZ2luKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICBmdW5jdGlvbiB0cmFja05ld1ZpZGVvRHJvcGRvd25JbXByZXNzaW9uKHJlY29yZE9wdGlvbikgewogICAgICAgIGlmICh3aW5kb3cuX19mYSkgewogICAgICAgICAgICB3aW5kb3cuX19mYS5wdXNoKFsndHJhY2tFdmVudCcsIHsKICAgICAgICAgICAgICAgIHR5cGU6ICdpbXByZXNzaW9uJywKICAgICAgICAgICAgICAgIGNvbnRhaW5lcjogJ3RvcF9uYXYnLAogICAgICAgICAgICAgICAgY29tcG9uZW50OiAnbmV3X3ZpZGVvJywKICAgICAgICAgICAgfV0pOwoKICAgICAgICAgICAgaWYgKHJlY29yZE9wdGlvbikgewogICAgICAgICAgICAgICAgd2luZG93Ll9fZmEucHVzaChbJ3RyYWNrRXZlbnQnLCB7CiAgICAgICAgICAgICAgICAgICAgdHlwZTogJ2ltcHJlc3Npb24nLAogICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lcjogJ3RvcF9uYXYnLAogICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudDogJ3JlY29yZCcsCiAgICAgICAgICAgICAgICAgICAga2V5d29yZDogcmVjb3JkT3B0aW9uLAogICAgICAgICAgICAgICAgfV0pOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQo8L3NjcmlwdD4KCjxzY3JpcHQ+CiAgICAvKioKICAgICAqIFRoaXMgaXMgcGFydCBvZiBhbiBBQiBFeHBlcmltZW50CiAgICAgKiBFeHBlcmltZW50IGxpbms6IGh0dHBzOi8vdmltZW8uY29tL21vZHdvcmxkL2FibGluY29sbi81MjgKICAgICAqIEV4cGVyaW1lbnQgcGFyYW06IHNob3dfbXlfZHJhZnRzCiAgICAgKi8KICAgIHZhciBzaG93VmFyaWFudCA9IGZ1bmN0aW9uICgpIHsKICAgICAgICB2YXIgc2hvd015RHJhZnRzOwogICAgICAgIGlmICh3aW5kb3cuQUJMaW5jb2xuICYmIHdpbmRvdy5BQkxpbmNvbG4uZ2V0VGVzdCgnSlMuVG9wbmF2Lk15RHJhZnRzJykuZ2V0KCdzaG93X215X2RyYWZ0cycsICdjb250cm9sJykgPT09ICd2YXJpYW50JykgewogICAgICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcuanMtdG9wbmF2LW1hbmFnZS1kcmFmdHMnKS5jbGFzc0xpc3QucmVtb3ZlKCdoaWRlJyk7CiAgICAgICAgfQogICAgfTsKICAgIHNob3dWYXJpYW50KCk7Cjwvc2NyaXB0PgoKICAgIDxzY3JpcHQ+CiAgICAgICAgdmFyIGFycm93ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3JlY29yZF9hbmltYXRpb25fd3JhcHBlcicpOwogICAgICAgIHZhciBuZXdWaWRlb0J0biA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdyZWNvcmRfdGlwX3dyYXBwZXInKTsKCiAgICAgICAgaWYgKGFycm93KSB7CiAgICAgICAgICAgIGFycm93LmNsYXNzTGlzdC5hZGQoJ25vX2FuaW1hdGlvbicpOwogICAgICAgIH0KCiAgICAgICAgdmFyIGlzSG92ZXJlZCA9IGZhbHNlOwoKICAgICAgICBpZiAobmV3VmlkZW9CdG4gJiYgZmFsc2UpIHsKICAgICAgICAgICAgbmV3VmlkZW9CdG4uYWRkRXZlbnRMaXN0ZW5lcignbW91c2VlbnRlcicsIGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgaWYgKGlzSG92ZXJlZCkgcmV0dXJuOwoKICAgICAgICAgICAgICAgIGlzSG92ZXJlZCA9IHRydWU7CgogICAgICAgICAgICAgICAgaWYgKGFycm93KSB7CiAgICAgICAgICAgICAgICAgICAgYXJyb3cuY2xhc3NMaXN0LnJlbW92ZSgnbm9fYW5pbWF0aW9uJyk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgc3RvcmVfcmVjb3JkX3RpcF9zZXR0aW5ncygxKTsKCiAgICAgICAgICAgIH0sIGZhbHNlKTsKICAgICAgICB9CgogICAgICAgIGZ1bmN0aW9uIHN0b3JlX3JlY29yZF90aXBfc2V0dGluZ3ModmFsdWUpIHsKICAgICAgICAgICAgdmFyIHhociA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpOwoKICAgICAgICAgICAgeGhyLm9wZW4oJ1BPU1QnLCAnL3NldHRpbmdzL25hdl9yZWNvcmRlcl90aXAnKTsKICAgICAgICAgICAgeGhyLnNldFJlcXVlc3RIZWFkZXIoJ1gtUmVxdWVzdGVkLVdpdGgnLCAnWE1MSHR0cFJlcXVlc3QnKTsKICAgICAgICAgICAgeGhyLnNldFJlcXVlc3RIZWFkZXIoJ0NvbnRlbnQtdHlwZScsICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnKTsKICAgICAgICAgICAgeGhyLnNlbmQoJ3JlY29yZF9zY3JlZW5fdGlwX3N0YXRlPScgKyB2YWx1ZSArICcmdG9rZW49JyArIHZpbWVvLnhzcmZ0KTsKCiAgICAgICAgICAgIC8vIE5vdGhpbmcgdG8gaGFuZGxlLiBXZSBob3BlIGZvciB0aGUgYmVzdCBpbiB0aGlzIGNhc2UKICAgICAgICAgICAgeGhyLm9ubG9hZCA9IGZ1bmN0aW9uICgpIHt9OwogICAgICAgIH07CiAgICA8L3NjcmlwdD4KCgogICAgCjwhLS0gUmVzcG9uc2l2ZSBUb3AgTmF2IChFeHBsb3JlLCBMT0hQLCBXYXRjaCwgdGMpIC0tPgo8bmF2IGlkPSJ0b3BuYXZfbW9iaWxlIiBjbGFzcz0idG9wbmF2X21vYmlsZSAgICBuYXZfYmFyLS1saSIgcm9sZT0iYmFubmVyIj4KCiAgICA8ZGl2IGNsYXNzPSJ0b3BuYXZfbW9iaWxlX2JhciI+CiAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyBkYXRhLWFjdGlvbj0ibWVudS5vcGVuIiBjbGFzcz0ibmF2YmFyX2hhbWJ1cmdlciBuYXZfYmFyX2ljb24gdG9wbmF2X21vYmlsZV9idXR0b24gdG9wbmF2X21vYmlsZV9wdWxsX2xlZnQganMtdG9wbmF2X21vYmlsZV9oZWFkZXJfbG9nbyIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2aWV3Qm94PSIwIDAgMzIgMzIiPgogICAgICAgICAgICAgICAgPHRpdGxlPk1lbnU8L3RpdGxlPgogICAgICAgICAgICAgICAgPHBhdGggaWQ9IlJlY3RhbmdsZS00IiBkPSJNNyw4SDI1YTEsMSwwLDAsMSwxLDFoMGExLDEsMCwwLDEtMSwxSDdBMSwxLDAsMCwxLDYsOUg2QTEsMSwwLDAsMSw3LDhaIiAvPgogICAgICAgICAgICAgICAgPHBhdGggZD0iTTcsMTVIMjVhMSwxLDAsMCwxLDEsMWgwYTEsMSwwLDAsMS0xLDFIN2ExLDEsMCwwLDEtMS0xSDZBMSwxLDAsMCwxLDcsMTVaIi8+CiAgICAgICAgICAgICAgICA8cGF0aCBkPSJNNywyMkgyNWExLDEsMCwwLDEsMSwxaDBhMSwxLDAsMCwxLTEsMUg3YTEsMSwwLDAsMS0xLTFINkExLDEsMCwwLDEsNywyMloiLz4KICAgICAgICAgICAgPC9zdmc+CgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0b3BuYXZfYWN0aW9uX2J1dHRvbnMiPgogICAgICAgICAgICAgICAgPGEgaHJlZj0iLy92aW1lby5jb20vc2VhcmNoIiBjbGFzcz0idG9wbmF2X21vYmlsZV9idXR0b24gdG9wbmF2X21vYmlsZV9wdWxsX3JpZ2h0IHRvcG5hdl9tb2JpbGVfaGVhZGVyX3NlYXJjaCI+CiAgICAgICAgICAgICAgICAgICAgPHN2ZyBjbGFzcz0ibmF2X2Jhcl9zZWFyY2hfaWNvbiBuYXZfYmFyX2ljb24iIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgdmlld0JveD0iMCAwIDMyIDMyIj4KICAgICAgICAgICAgICAgICAgICAgICAgPHRpdGxlPlNlYXJjaDwvdGl0bGU+CiAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi43NCwyNS4zMmwtNC41My00LjUzYTEsMSwwLDAsMC0uMjEtLjE0QTksOSwwLDEsMCwyMC42NSwyMmExLDEsMCwwLDAsLjE0LjIxbDQuNTMsNC41M2ExLDEsMCwwLDAsMS40MS0xLjQxWk0xNSwyMmE3LDcsMCwxLDEsNy03QTcsNywwLDAsMSwxNSwyMloiLz4KICAgICAgICAgICAgICAgICAgICA8L3N2Zz4KICAgICAgICAgICAgICAgIDwvYT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSJjYXJ0X3RvcF9uYXZfbW9iaWxlIiBjbGFzcz0idG9wbmF2X2NhcnRfYnV0dG9uIj48L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwhLS0gVmltZW8gTG9nbyAtLT4KICAgICAgICAgICAgPGRpdiBjbGFzcz0ibmF2X2Jhcl90aXRsZSBqcy1uYXZfYmFyX3RpdGxlIj4KICAgICAgICAgICAgICAgIDxhIGhyZWY9Imh0dHBzOi8vdmltZW8uY29tIiBndG0tZGF0YS1jbGljaz0ibW9iaWxlX25hdl9ob21lX2xvZ29fY2xpY2siPgogICAgICAgICAgICAgICAgICAgIDxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiIHZpZXdCb3g9IjAgMCA0NDEgMTI0LjY4MiIgd2lkdGg9Ijg2cHgiIGhlaWdodD0iMjdweCI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxnPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD0iTTEyMC40ODEsMjcuMzI2YzUuNDYyLDAsMTAuMTg4LTEuOTEsMTQuMTc0LTUuNzI4YzMuNTQ3LTMuMzc5LDUuMzkyLTYuOTA2LDUuNTQtMTAuNTgzYzAuMTQzLTIuNDkyLTAuODE1LTQuOTUxLTIuODgtNy4zNzhDMTM1LjI0NCwxLjIxNywxMzIuNjYyLDAsMTI5LjU2MiwwYy01LjMyLDAtMTAuMTU1LDEuNzY3LTE0LjUxMSw1LjI4OGMtNC4zNTYsMy41MjctNi42MDgsNy4yMDQtNi43NSwxMS4wMjJDMTA4LjAwMiwyMy42NTYsMTEyLjA2NywyNy4zMjYsMTIwLjQ4MSwyNy4zMjZ6Ii8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPSJNNDM0LjA3OSw1MC4xNmMtNS4zMTktNi45MjUtMTMuMTQ1LTEwLjM5NS0yMy40NzUtMTAuMzk1Yy0xNi4wOTcsMC0yOS40NTUsNS44OTYtNDAuMDgzLDE3LjY4OGMtOS45MDIsMTAuNjE0LTE0LjQ3OCwyMi4yNjUtMTMuNzMzLDM0Ljk0NGMwLjA0OSwwLjkzMiwwLjEzMiwxLjg0LDAuMjI5LDIuNzM4Yy0wLjU1NCwwLjI0MS0xLjA5MywwLjQ4My0xLjY2MiwwLjcyNGMtMTIuNTU2LDUuNDExLTI0LjE0Nyw4LjExLTM0Ljc3NSw4LjExYy01LjMyLDAtOS4zMDctMS44MzktMTEuOTYtNS41MjFjMTQuMzE2LTIuMzU1LDI2LjIwNi03Ljg3NiwzNS42NjItMTYuNTY4YzguODU0LTcuOTU1LDEyLjk4OS0xNS42ODksMTIuNC0yMy4xOTdjLTAuODg3LTExLjc4LTguNTYyLTE3LjY3Ni0yMy4wMzQtMTcuNjc2Yy0xNS42NSwwLTI5LjIzNSw1LjkwOS00MC43NSwxNy43MTRjLTEwLjQ4NCwxMC43ODMtMTUuODA1LDIyLjE0OC0xNS45NDcsMzQuMTAzYy0wLjA0LDIuMDA1LDAuMDY2LDMuOTMyLDAuMyw1Ljc4OWMtMi40NzcsMS42MzItNC4zNTIsMi40NTYtNS42MTMsMi40NTZjLTIuODEsMC00LjU3Ni0wLjU4Mi01LjMxNC0xLjc2Yy0wLjczNy0xLjE3OC0xLjAzNS0zLjMwOC0wLjg4Ny02LjQwMWMwLTEuMTc4LDAuOTE5LTUuNjk1LDIuNzcxLTEzLjU2NWMxLjg0NS03Ljg3LDIuODQxLTEzLjg2NCwyLjk5LTE3Ljk4N2MwLjI5MS02LjAyNS0wLjg5NC0xMC42Ni0zLjU0Ny0xMy44OTZjLTMuMTAxLTMuOTc0LTguMTk0LTUuNjYzLTE1LjI4MS01LjA3NGMtNS45MDIsMC40NDctMTEuNTkyLDIuNjYtMTcuMDU0LDYuNjQ3Yy0zLjI0OSwyLjM2My02LjU2OSw1LjUzNC05Ljk2MSw5LjUyMWMtMS4xODUsMS4wMzYtMi4yOTEsMi0zLjMyNywyLjg4YzAuMTQzLTYuMDUxLTEuMDM2LTEwLjcwNS0zLjU0LTEzLjk1NGMtMy4xMDctMy45ODctOC4yNzItNS42ODMtMTUuNTA4LTUuMDk0Yy04LjQxNSwwLjczOC0xNi4wMiw0LjA2NS0yMi44MDksOS45NjdjLTIuOTU4LDIuNTExLTUuNTQsNS40NjktNy43NTMsOC44NjFjMC4yOTEtMS4zMjcsMC40NC0yLjczMSwwLjQ0LTQuMjA3YzAtNC41NzYtMS4xODUtOC42MDItMy41NDctMTIuMDcxcy01LjQ2Mi01LjA1NS05LjMwMS00Ljc1N2MtMi4yMTMsMC4xNDktNi40MiwzLjEwMS0xMi42MjEsOC44NTRjLTguNTY5LDcuOTc0LTEzLjIxNiwxMi4yNTktMTMuOTU0LDEyLjg0MWw1LjMxMyw1Ljk4YzQuMTM2LTIuOTg0LDYuNjQ3LTQuNDc5LDcuNTM0LTQuNDc5YzEuNjE4LDAsMi4yODUsMS4zMjcsMS45OTQsMy45NzVjLTAuMTQzLDMuODMxLTAuODIyLDkuMTY0LTIuMDM5LDE2LjAxMmMtMC43NTQsNC4yNDMtMS4yOTgsNy45MDQtMS42MzgsMTAuOTg4Yy0wLjA2NiwwLjA1NS0wLjEyOSwwLjEwOS0wLjE5NiwwLjE2NGMtNS4zMiw0LjM3NS05LjAwOSw2LjU1Ni0xMS4wNzQsNi41NTZjLTQuNzI1LDAtNy4wMTYtMy4xNTgtNi44NjctOS40ODhjMi4yMTMtMTMuODI0LDQuMjg1LTI1LjIyMiw2LjIwNy0zNC4xOTljMC41ODMtNS4yOTQtMC4yNjYtOS41OTItMi41NS0xMi45MDZjLTIuMjkxLTMuMzE0LTUuODctNC43NDQtMTAuNzM3LTQuMzA0Yy0zLjEwNywwLjI5OC03LjgzMiwzLjI0OS0xNC4xODEsOC44NmMtMi4yMDUsMi00LjQxLDMuOTk2LTYuNjE1LDUuOTkzYy0wLjQzNy0xMC40NDctNS4yMDQtMTUuODIyLTE0LjMyOS0xNi4wOWMtMTMuNjY5LTAuNDQtMjIuOTMxLDcuMjc1LTI3Ljc3OSwyMy4xNThjMi41MDQtMS4wNzQsNC45MzgtMS42MTgsNy4zMDEtMS42MThjNS4wMTYsMCw3LjIyOSwyLjgyMiw2LjY0LDguNDUzYy0wLjI5NywzLjQxMS0yLjUxMSw4LjM3NS02LjY0LDE0Ljg5OWMtNC4xMzYsNi41MjMtNy4yMzYsOS43ODYtOS4zMDEsOS43ODZjLTIuNjYsMC01LjA5NC01LjAyMy03LjMwNy0xNS4wODFjLTAuNzQ1LTIuOTUxLTIuMDcxLTEwLjQ5MS0zLjk4Ny0yMi42MTRjLTEuNzczLTExLjIzNi02LjQ5OS0xNi40ODUtMTQuMTc0LTE1Ljc0N2MtMy4yNDksMC4yOTgtOC4xMjMsMy4yNDktMTQuNjE0LDguODZDOS42NjksNTMuMzE4LDQuODY3LDU3LjU5NywwLDYxLjg3NWw0LjY0MSw1Ljk4YzQuNDItMy4wOTQsNy4wMDMtNC42NDcsNy43NDEtNC42NDdjMy4zODUsMCw2LjU1LDUuMzEzLDkuNTAxLDE1LjkyOWMyLjY1Myw5LjczMyw1LjMwNywxOS40NjgsNy45NjEsMjkuMjAyYzMuOTc0LDEwLjYyMSw4Ljg0MSwxNS45MjksMTQuNTg4LDE1LjkyOWM5LjI4MSwwLDIwLjYyNy04LjcxOSwzNC4wMzgtMjYuMTU0Qzg3Ljg5Miw4NS45ODcsOTMuOTksNzUuNzQsOTYuOCw2Ny4zNTRjMy43Mi0yLjc0OCw2LjAxOC00LjE0Niw2Ljg1My00LjE0NmMyLjY1MywwLDMuOTg3LDEuOTIyLDMuOTg3LDUuNzU0YzAsMC43MzgtMS40NDMsNi4yLTQuMzI0LDE2LjM4MWMtMi44OCwxMC4xODItNC4zOTUsMTcuNzA5LTQuNTM3LDIyLjU3NWMtMC4xNDksNC43MjYsMC45OTcsOC41NTcsMy40MywxMS41MDhjMi40MzQsMi45NTIsNS45NDEsNC40MjgsMTAuNTI0LDQuNDI4YzkuODksMCwxOS43NzktNC4yNzgsMjkuNjc1LTEyLjgzNWMwLjg4MS0wLjc3MiwxLjczOC0xLjU1NywyLjU3My0yLjM1MmMwLjc4MywzLjMxMiwyLjEyNCw2LjA0NSw0LjA3LDguMTVjNC4yNTksNC41NjksMTEuNDU2LDYuNzA2LDIxLjU5Miw2LjQwOGMtMS4zNTMtMy4yNDktMS44ODQtOS4wMDMtMS41ODYtMTcuMjc0YzAuNDQtOS4xNTIsMi44MDktMTcuOTQxLDcuMDk0LTI2LjM1NXM4LjI3OC0xMi42MjcsMTEuOTgtMTIuNjI3YzQuMjg1LDAsNi4yODUsMi43MzEsNS45ODcsOC4xOTNjLTAuMTQ5LDMuNjk2LTAuODc0LDcuOTAzLTIuMTc1LDEyLjYyOGMtMS4zMDcsNC43MjUtMi4wMzIsOS40NDktMi4xNzQsMTQuMTc0Yy0wLjI5OCw3LjUzNCwxLjM5MiwxMi45MTksNS4wODEsMTYuMTY4YzQuMTE2LDMuNjg5LDExLjMzNCw1LjM5MiwyMS42MzgsNS4wOTRjLTEuNTQxLTMuMzkyLTIuMTYyLTguMjY2LTEuODY0LTE0LjYyMWMwLjQ0LTkuMDAzLDMuNDgyLTE4LjMwNCw5LjExMy0yNy45MDJjNS4zMzMtOS4xNTEsOS45MjItMTMuNzMzLDEzLjc3Mi0xMy43MzNjMy41NiwwLDUuMjYzLDIuODA5LDUuMTEzLDguNDE0Yy0wLjE0OCwzLjY4OC0xLjA3NCw4Ljg1NC0yLjc3MSwxNS40OTRjLTEuNjk1LDYuNjQxLTIuNjIxLDEyLjMxNi0yLjc2NCwxNy4wNDFjLTAuMjk3LDEwLjYyOCw0LjM1LDE1LjkzNiwxMy45NTUsMTUuOTM2YzkuODg5LDAsMTkuNzc5LTQuMjc4LDI5LjY3NS0xMi44MzVjMC4xNjQtMC4xNDQsMC4zMTYtMC4yOTMsMC40NzktMC40MzhjMC4zNCwwLjU4NiwwLjY4OCwxLjE2OCwxLjA2OCwxLjczMmM1LjE2NSw3Ljk2NywxMy43MzQsMTEuOTU0LDI1LjY5NSwxMS45NTRjMTYuMDksMCwzMS45NjYtNC40OTIsNDcuNjE2LTEzLjQ4OGMxLjc1Ni0wLjk5LDMuNDIyLTEuOTc5LDUuMDE3LTIuOTdjMC45ODYsMS45OTEsMi4xMzgsMy44NjYsMy41MDIsNS41OTFjNi4wNTIsNy41MjEsMTQuOTEyLDExLjI4MSwyNi41NzUsMTEuMjgxYzE0LjAyNSwwLDI1Ljc2Ny00LjkzOCwzNS4yMTYtMTQuODE1YzkuNDQ5LTkuODc2LDE0LjQ2Ni0yMS41OTgsMTUuMDYxLTM1LjE2M0M0NDEuMzg3LDY0LjY4NCw0MzkuMTAyLDU2LjUwMyw0MzQuMDc5LDUwLjE2eiBNMzA1LjExOCw5MC4wMDNjLTAuMDg0LTEuOTA5LTAuMDg0LTIuODY3LDAtMi44NjdjMC4xNDMtNS41NzksMi41MDUtMTEuNDE3LDcuMDc0LTE3LjUxNHM5LjA2Mi05LjE0NiwxMy40ODgtOS4xNDZjMy4zOTIsMCw1LjAxLDEuOTg3LDQuODY3LDUuOTQ4Yy0wLjE0OSwyLjkzOC0yLjM2Miw2Ljc2NC02LjYzNCwxMS40NjJDMzE4LjYwNiw4My4zMjQsMzEyLjM0MSw4Ny4zNjIsMzA1LjExOCw5MC4wMDN6IE00MTUuOTE4LDczLjg2OGMtMC4yOTcsNy4xLTIuNDM0LDEzLjkwMi02LjQyLDIwLjQxM2MtNC43MjUsNy44NDUtMTAuNDE0LDExLjc2LTE3LjA1NSwxMS43NmMtMi45NTgsMC01LjI0OS0xLjYyNC02Ljg2Ny00Ljg4Yy0xLjQ3Ni0yLjgwOS0yLjE0Mi02LjA2NC0xLjk5My05Ljc2N2MwLjI5MS03LjU0LDIuNTA1LTE0LjY0LDYuNjQ3LTIxLjNjNC44NjYtOC4xMzYsMTEuMDY3LTEyLjIwNywxOC42MDEtMTIuMjA3YzIuMzU2LDAsNC4xNjgsMS42Nyw1LjQyNCw0Ljk5N1M0MTYuMDY3LDY5Ljg3NSw0MTUuOTE4LDczLjg2OHoiLz4KICAgICAgICAgICAgICAgICAgICAgICAgPC9nPgogICAgICAgICAgICAgICAgICAgIDwvc3ZnPgogICAgICAgICAgICAgICAgPC9hPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CgogICAgICAgIDxkaXYgY2xhc3M9InRvcG5hdl9tb2JpbGVfbWVudSBqcy10b3BuYXZfbW9iaWxlX21lbnVfbWFpbiI+CiAgICAgICAgPGRpdiBjbGFzcz0idG9wbmF2X21vYmlsZV9iYXIiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gZGF0YS1hY3Rpb249Im1lbnUuY2xvc2UiIGRhdGEtZ3RtLWNsaWNrPSJtb2JpbGVfbmF2X21lbnVfY2xvc2VfY2xpY2siIGNsYXNzPSJtZW51X2Nsb3NlIHB1bGxfbGVmdCBqcy10b3BuYXZfbW9iaWxlX2hlYWRlcl9jbG9zZSI+CiAgICAgICAgICAgICAgICA8c3ZnIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgeD0iMHB4IiB5PSIwcHgiIHdpZHRoPSIxMC40OXB4IgogICAgICAgICAgICAgICAgCSBoZWlnaHQ9IjEwLjQ5cHgiIHZpZXdCb3g9IjAgMCAxMC40OSAxMC40OSIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgMTAuNDkgMTAuNDk7IiB4bWw6c3BhY2U9InByZXNlcnZlIj4KICAgICAgICAgICAgICAgIDxnIGlkPSJjbG9zZV8xXyI+CiAgICAgICAgICAgICAgICAJPGc+CiAgICAgICAgICAgICAgICAJCTxnIGlkPSJHcm91cF8xXyIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoNi41MDAwMDAsIDYuNTAwMDAwKSI+CiAgICAgICAgICAgICAgICAJCQk8cGF0aCBpZD0iUmVjdGFuZ2xlLTRfMV8iIHN0eWxlPSJmaWxsLXJ1bGU6ZXZlbm9kZDtjbGlwLXJ1bGU6ZXZlbm9kZDtmaWxsOiNGRkZGRkY7IiBkPSJNMy42OS02LjIxTDMuNjktNi4yMWMwLjM5LDAuMzksMC4zOSwxLjAyLDAsMS40MWwtOC40OSw4LjQ5CiAgICAgICAgICAgICAgICAJCQkJYy0wLjM5LDAuMzktMS4wMiwwLjM5LTEuNDEsMGwwLDBjLTAuMzktMC4zOS0wLjM5LTEuMDIsMC0xLjQxbDguNDktOC40OUMyLjY3LTYuNiwzLjMtNi42LDMuNjktNi4yMXoiLz4KICAgICAgICAgICAgICAgIAkJCTxwYXRoIHN0eWxlPSJmaWxsLXJ1bGU6ZXZlbm9kZDtjbGlwLXJ1bGU6ZXZlbm9kZDtmaWxsOiNGRkZGRkY7IiBkPSJNLTYuMjEtNi4yMUwtNi4yMS02LjIxYzAuMzktMC4zOSwxLjAyLTAuMzksMS40MSwwbDguNDksOC40OWMwLjM5LDAuMzksMC4zOSwxLjAyLDAsMS40MWwwLDAKICAgICAgICAgICAgICAgIAkJCQljLTAuMzksMC4zOS0xLjAyLDAuMzktMS40MSwwbC04LjQ5LTguNDlDLTYuNi01LjE4LTYuNi01LjgyLTYuMjEtNi4yMXoiLz4KICAgICAgICAgICAgICAgIAkJPC9nPgogICAgICAgICAgICAgICAgCTwvZz4KICAgICAgICAgICAgICAgIDwvZz4KICAgICAgICAgICAgICAgIDwvc3ZnPgogICAgICAgICAgICA8L2J1dHRvbj4KCiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24KICAgICAgICAgICAgICAgIGRhdGEtYWN0aW9uPSJtZW51LnNldHRpbmdzLm9wZW4iCiAgICAgICAgICAgICAgICBkYXRhLWd0bS1jbGljaz0ibW9iaWxlX25hdl9zZXR0aW5nc19jbGljayIKICAgICAgICAgICAgICAgIGRhdGEtZmF0YWwtYXR0cmFjdGlvbj0iY29udGFpbmVyOnRvcF9uYXZ8Y29tcG9uZW50OnNldHRpbmdzIgogICAgICAgICAgICAgICAgY2xhc3M9Im1lbnVfc2V0dGluZ3MgcHVsbF9yaWdodCBqcy10b3BuYXZfbW9iaWxlX2hlYWRlcl9zZXR0aW5ncyIKICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4IiB3aWR0aD0iMTguODZweCIKICAgICAgICAgICAgICAgIAkgaGVpZ2h0PSIyMHB4IiB2aWV3Qm94PSIwIDAgMTguODYgMjAiIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDE4Ljg2IDIwOyIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+CiAgICAgICAgICAgICAgICA8ZyBpZD0iZ2Vhcl8xXyI+CiAgICAgICAgICAgICAgICAJPGc+CiAgICAgICAgICAgICAgICAJCTxnIGlkPSJJY29uXzFfIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSg1LjAwMDAwMCwgNS4wMDAwMDApIj4KICAgICAgICAgICAgICAgIAkJCTxnIGlkPSJHcm91cC0xMF8xXyI+CiAgICAgICAgICAgICAgICAJCQk8L2c+CiAgICAgICAgICAgICAgICAJCTwvZz4KICAgICAgICAgICAgICAgIAkJPHBhdGggaWQ9IkNvbWJpbmVkLVNoYXBlXzFfIiBzdHlsZT0iZmlsbDpub25lO3N0cm9rZTojRkZGRkZGO3N0cm9rZS13aWR0aDoyOyIgZD0iTTEyLDQuNThsLTAuNTctMC4yN1YxLjk5YzAtMC41NC0wLjQ1LTAuOTktMS0wLjk5aC0yYy0wLjU1LDAtMSwwLjQ1LTEsMC45OXYyLjMxCiAgICAgICAgICAgICAgICAJCQlMNi44Niw0LjU4Yy0wLjI5LDAuMTQtMC41NywwLjMtMC44NCwwLjQ4TDUuNSw1LjQyTDMuNDksNC4yNkMzLjAyLDMuOTksMi40MSw0LjE2LDIuMTQsNC42M2wtMSwxLjc0CiAgICAgICAgICAgICAgICAJCQlDMC44Niw2Ljg0LDEuMDIsNy40NiwxLjQ5LDcuNzNMMy41LDguODlMMy40NSw5LjUyQzMuNDQsOS42OCwzLjQzLDkuODQsMy40MywxMHMwLjAxLDAuMzIsMC4wMiwwLjQ4bDAuMDUsMC42M2wtMi4wMSwxLjE2CiAgICAgICAgICAgICAgICAJCQljLTAuNDcsMC4yNy0wLjYzLDAuODgtMC4zNiwxLjM2bDEsMS43NGMwLjI3LDAuNDgsMC44OSwwLjY0LDEuMzYsMC4zN2wyLjAxLTEuMTZsMC41MiwwLjM2YzAuMjcsMC4xOCwwLjU1LDAuMzUsMC44NCwwLjQ4CiAgICAgICAgICAgICAgICAJCQlsMC41NywwLjI3djIuMzFjMCwwLjU0LDAuNDUsMC45OSwxLDAuOTloMmMwLjU1LDAsMS0wLjQ1LDEtMC45OXYtMi4zMUwxMiwxNS40MmMwLjI5LTAuMTQsMC41Ny0wLjMsMC44NC0wLjQ4bDAuNTItMC4zNgogICAgICAgICAgICAgICAgCQkJbDIuMDEsMS4xNmMwLjQ3LDAuMjcsMS4wOCwwLjExLDEuMzYtMC4zN2wxLTEuNzRjMC4yNy0wLjQ4LDAuMTEtMS4wOS0wLjM2LTEuMzZsLTIuMDEtMS4xNmwwLjA1LTAuNjMKICAgICAgICAgICAgICAgIAkJCWMwLjAxLTAuMTYsMC4wMi0wLjMyLDAuMDItMC40OHMtMC4wMS0wLjMyLTAuMDItMC40OGwtMC4wNS0wLjYzbDIuMDEtMS4xNmMwLjQ3LTAuMjcsMC42My0wLjg4LDAuMzYtMS4zNmwtMS0xLjc0CiAgICAgICAgICAgICAgICAJCQljLTAuMjctMC40OC0wLjg5LTAuNjQtMS4zNi0wLjM3bC0yLjAxLDEuMTZsLTAuNTItMC4zNkMxMi41Nyw0Ljg4LDEyLjI5LDQuNzIsMTIsNC41OHoiLz4KICAgICAgICAgICAgICAgIAkJPGNpcmNsZSBpZD0iT3ZhbF8xXyIgc3R5bGU9ImZpbGw6bm9uZTtzdHJva2U6I0ZGRkZGRjtzdHJva2Utd2lkdGg6MjsiIGN4PSI5LjQzIiBjeT0iMTAiIHI9IjIiLz4KICAgICAgICAgICAgICAgIAk8L2c+CiAgICAgICAgICAgICAgICA8L2c+CiAgICAgICAgICAgICAgICA8L3N2Zz4KICAgICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgPHVsIGlkPSJtZW51X2xpc3QiIGNsYXNzPSJtZW51X2xpc3RfbG9nZ2VkX291dCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpPgogICAgICAgICAgICAgICAgICAgIDxhIGRhdGEtYnJlZXplLWlnbm9yZSBkYXRhLWZhdGFsLWF0dHJhY3Rpb249ImNvbnRhaW5lcjp0b3BfbmF2fGNvbXBvbmVudDpqb2luIiBkYXRhLWd0bS1jbGljaz0idG9wX25hdl9qb2luX2NsaWNrIiBpZD0ianMtam9pbi1saW5rIiBocmVmPSIvL3ZpbWVvLmNvbS9qb2luIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgY2xhc3M9Im1lbnVfaWNvbl9qb2luIiB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4IiB3aWR0aD0iMTZweCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodD0iMjBweCIgdmlld0JveD0iMCAwIDE2IDIwIiBzdHlsZT0iZW5hYmxlLWJhY2tncm91bmQ6bmV3IDAgMCAxNiAyMDsiIHhtbDpzcGFjZT0icHJlc2VydmUiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxnIGlkPSJqb2luLWxvZy1pbl8xXyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxnPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNpcmNsZSBpZD0iT3ZhbC04XzFfIiBzdHlsZT0iZmlsbDpub25lO3N0cm9rZTojRkZGRkZGO3N0cm9rZS13aWR0aDoyOyIgY3g9IjgiIGN5PSI1IiByPSI0Ii8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBpZD0iUmVjdGFuZ2xlLTI1XzFfIiBzdHlsZT0iZmlsbDpub25lO3N0cm9rZTojRkZGRkZGO3N0cm9rZS13aWR0aDoyOyIgZD0iTTEsMTloMTR2LTNjMC0yLjIxLTEuNzktNC00LTRINWMtMi4yMSwwLTQsMS43OS00LDRWMTl6Ii8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2c+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSm9pbiBvciBsb2cgaW4gICAgICAgICAgICAgICAgICAgIDwvYT4KICAgICAgICAgICAgICAgIDwvbGk+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpPgogICAgICAgICAgICAgICAgICAgIDxhICBpZD0ianMtZmVhdHVyZXMtbGluayIgY2xhc3M9ImZlYXR1cmVzLWxhYmVsIiBocmVmPSJqYXZhc2NyaXB0OnZvaWQoMCkiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyBjbGFzcz0ibWVudV9pY29uX2hvc3QiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgeD0iMHB4IiB5PSIwcHgiIHdpZHRoPSIyMHB4IgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0PSIyMHB4IiB2aWV3Qm94PSIwIDAgMjAgMjAiIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDIwIDIwOyIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGcgaWQ9ImZlYXR1cmVzXzFfIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGc+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZyBpZD0iR3JvdXAtMl8xXyIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMi4wMDAwMDAsIDIuMDAwMDAwKSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggaWQ9IlJlY3RhbmdsZS04XzFfIiBzdHlsZT0iZmlsbDpub25lO3N0cm9rZTojRkZGRkZGO3N0cm9rZS13aWR0aDoyOyIgZD0iTTEtMWgxMGMxLjEsMCwyLDAuOSwyLDJ2MTBjMCwxLjEtMC45LDItMiwySDFjLTEuMSwwLTItMC45LTItMlYxQy0xLTAuMS0wLjEtMSwxLTF6Ii8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggaWQ9IlBhdGgtNV8xXyIgc3R5bGU9ImZpbGwtcnVsZTpldmVub2RkO2NsaXAtcnVsZTpldmVub2RkO2ZpbGw6I0ZGRkZGRjsiIGQ9Ik0zLjYsMy41MWMwLTAuNTUsMC4zOS0wLjc3LDAuODYtMC41bDQuMjgsMi41YzAuNDcsMC4yOCwwLjQ4LDAuNzMsMCwxLjAxTDQuNDYsOS4wOAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDMy45OCw5LjM2LDMuNiw5LjE1LDMuNiw4LjU5TDMuNiwzLjUxeiIvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxnIGlkPSJHcm91cF8xXyIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMy4wMDAwMDAsIDMuMDAwMDAwKSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGlkPSJQYWdlLTFfMV8iIHN0eWxlPSJmaWxsLXJ1bGU6ZXZlbm9kZDtjbGlwLXJ1bGU6ZXZlbm9kZDtmaWxsOiNGRkZGRkY7IiBkPSJNMTEsMTVjMi4yMSwwLDQtMS43OSw0LTRWMGMwLTEuMTEtMC45LTItMi0ydjEzYzAsMS4xLTAuOSwyLTIsMkgtMmMwLDEuMSwwLjg5LDIsMiwySDExeiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9nPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9nPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2c+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9nPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZlYXR1cmVzICAgICAgICAgICAgICAgICAgICA8L2E+CiAgICAgICAgICAgICAgICA8L2xpPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaT4KICAgICAgICAgICAgICAgICAgICA8YSBkYXRhLWJyZWV6ZS1pZ25vcmUgZGF0YS1mYXRhbC1hdHRyYWN0aW9uPSJjb250YWluZXI6dG9wX25hdnxjb21wb25lbnQ6ZmVhdHVyZXN8a2V5d29yZDp2aWRlb19wbGF5ZXIiIGRhdGEtZ3RtLWNsaWNrPSJ0b3BfbmF2X2ZlYXR1cmVzX3ZpZGVvX3BsYXllciIgaHJlZj0iLy92aW1lby5jb20vZmVhdHVyZXMvdmlkZW8tcGxheWVyIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgY2xhc3M9Im1lbnVfaWNvbl91cGxvYWQiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgeD0iMHB4IiB5PSIwcHgiIHdpZHRoPSIyMHB4IgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0PSIxNnB4IiB2aWV3Qm94PSIwIDAgMjAgMTYiIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDIwIDE2OyIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmlkZW8gcGxheWVyICAgICAgICAgICAgICAgICAgICA8L2E+CiAgICAgICAgICAgICAgICA8L2xpPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaT4KICAgICAgICAgICAgICAgICAgICA8YSBkYXRhLWJyZWV6ZS1pZ25vcmUgZGF0YS1mYXRhbC1hdHRyYWN0aW9uPSJjb250YWluZXI6dG9wX25hdnxjb21wb25lbnQ6ZmVhdHVyZXN8a2V5d29yZDpsaXZlX3N0cmVhbWluZyIgZGF0YS1ndG0tY2xpY2s9InRvcF9uYXZfZmVhdHVyZXNfbGl2ZV9zdHJlYW1pbmciIGhyZWY9Ii8vdmltZW8uY29tL2ZlYXR1cmVzL2xpdmVzdHJlYW1pbmciPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyBjbGFzcz0ibWVudV9pY29uX3VwbG9hZCIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4PSIwcHgiIHk9IjBweCIgd2lkdGg9IjIwcHgiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ9IjE2cHgiIHZpZXdCb3g9IjAgMCAyMCAxNiIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgMjAgMTY7IiB4bWw6c3BhY2U9InByZXNlcnZlIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMaXZlIHN0cmVhbWluZyAgICAgICAgICAgICAgICAgICAgPC9hPgogICAgICAgICAgICAgICAgPC9saT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGk+CiAgICAgICAgICAgICAgICAgICAgPGEgZGF0YS1hY3Rpb249Im1lbnUuY2xvc2UiIGRhdGEtZmF0YWwtYXR0cmFjdGlvbj0iY29udGFpbmVyOnRvcF9uYXZ8Y29tcG9uZW50OnN0b2NrIiAiIGhyZWY9Ii8vdmltZW8uY29tL3N0b2NrIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgY2xhc3M9Im1lbnVfaWNvbl91cGxvYWQiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgeD0iMHB4IiB5PSIwcHgiIHdpZHRoPSIyMHB4IgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0PSIxNnB4IiB2aWV3Qm94PSIwIDAgMjAgMTYiIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDIwIDE2OyIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RvY2sgdmlkZW9zICAgICAgICAgICAgICAgICAgICA8L2E+CiAgICAgICAgICAgICAgICA8L2xpPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaT4KICAgICAgICAgICAgICAgICAgICA8YSBkYXRhLWJyZWV6ZS1pZ25vcmUgZGF0YS1mYXRhbC1hdHRyYWN0aW9uPSJjb250YWluZXI6dG9wX25hdnxjb21wb25lbnQ6ZmVhdHVyZXN8a2V5d29yZDpwcml2YWN5IiBkYXRhLWd0bS1jbGljaz0idG9wX25hdl9mZWF0dXJlc19wcml2YWN5IiBocmVmPSIvL3ZpbWVvLmNvbS9mZWF0dXJlcy92aWRlby1wcml2YWN5Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgY2xhc3M9Im1lbnVfaWNvbl91cGxvYWQiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgeD0iMHB4IiB5PSIwcHgiIHdpZHRoPSIyMHB4IgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0PSIxNnB4IiB2aWV3Qm94PSIwIDAgMjAgMTYiIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDIwIDE2OyIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByaXZhY3kgICAgICAgICAgICAgICAgICAgIDwvYT4KICAgICAgICAgICAgICAgIDwvbGk+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpPgogICAgICAgICAgICAgICAgICAgIDxhIGRhdGEtYnJlZXplLWlnbm9yZSBkYXRhLWZhdGFsLWF0dHJhY3Rpb249ImNvbnRhaW5lcjp0b3BfbmF2fGNvbXBvbmVudDpmZWF0dXJlc3xrZXl3b3JkOmRpc3RyaWJ1dGlvbiIgZGF0YS1ndG0tY2xpY2s9InRvcF9uYXZfZmVhdHVyZXNfZGlzdHJpYnV0aW9uIiBocmVmPSIvL3ZpbWVvLmNvbS9mZWF0dXJlcy92aWRlby1tYXJrZXRpbmciPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyBjbGFzcz0ibWVudV9pY29uX3VwbG9hZCIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4PSIwcHgiIHk9IjBweCIgd2lkdGg9IjIwcHgiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ9IjE2cHgiIHZpZXdCb3g9IjAgMCAyMCAxNiIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgMjAgMTY7IiB4bWw6c3BhY2U9InByZXNlcnZlIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEaXN0cmlidXRpb24gJiBNYXJrZXRpbmcgICAgICAgICAgICAgICAgICAgIDwvYT4KICAgICAgICAgICAgICAgIDwvbGk+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpPgogICAgICAgICAgICAgICAgICAgIDxhIGRhdGEtYnJlZXplLWlnbm9yZSBkYXRhLWZhdGFsLWF0dHJhY3Rpb249ImNvbnRhaW5lcjp0b3BfbmF2fGNvbXBvbmVudDpmZWF0dXJlc3xrZXl3b3JkOmhvc3RpbmciIGRhdGEtZ3RtLWNsaWNrPSJ0b3BfbmF2X2ZlYXR1cmVzX2hvc3RpbmciIGhyZWY9Ii8vdmltZW8uY29tL2ZlYXR1cmVzL29ubGluZS12aWRlby1ob3N0aW5nIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgY2xhc3M9Im1lbnVfaWNvbl91cGxvYWQiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgeD0iMHB4IiB5PSIwcHgiIHdpZHRoPSIyMHB4IgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0PSIxNnB4IiB2aWV3Qm94PSIwIDAgMjAgMTYiIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDIwIDE2OyIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSG9zdGluZyAmIE1hbmFnZW1lbnQgICAgICAgICAgICAgICAgICAgIDwvYT4KICAgICAgICAgICAgICAgIDwvbGk+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpPgogICAgICAgICAgICAgICAgICAgIDxhIGRhdGEtYnJlZXplLWlnbm9yZSBkYXRhLWZhdGFsLWF0dHJhY3Rpb249ImNvbnRhaW5lcjp0b3BfbmF2fGNvbXBvbmVudDppbnNwaXJhdGlvbnxrZXl3b3JkOndhdGNoIiBkYXRhLWd0bS1jbGljaz0idG9wX25hdl9pbnNwaXJhdGlvbl93YXRjaCIgaWQ9ImpzLWluc3BpcmF0aW9uLWxpbmsiICBocmVmPSIvL3ZpbWVvLmNvbS93YXRjaCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIGNsYXNzPSJtZW51X2ljb25fd2F0Y2giIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgeD0iMHB4IiB5PSIwcHgiIHdpZHRoPSIyMHB4IgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0PSIxNHB4IiB2aWV3Qm94PSIwIDAgMjAgMTQiIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDIwIDE0OyIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGcgaWQ9Imluc3BpcmF0aW9uXzFfIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGc+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZyBpZD0iR3JvdXBfMV8iIHRyYW5zZm9ybT0idHJhbnNsYXRlKDMuMDAwMDAwLCA2LjAwMDAwMCkiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGlkPSJPdmFsXzFfIiBzdHlsZT0iZmlsbDpub25lO3N0cm9rZTojRkZGRkZGO3N0cm9rZS13aWR0aDoyO3N0cm9rZS1saW5lam9pbjpyb3VuZDsiIGQ9Ik03LDdjMy4zMSwwLDYuMzEtMiw5LTZjLTIuNjktNC01LjY5LTYtOS02UzAuNjktMy0yLDFDMC42OSw1LDMuNjksNyw3LDd6Ii8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNpcmNsZSBpZD0iT3ZhbC0yXzFfIiBzdHlsZT0iZmlsbC1ydWxlOmV2ZW5vZGQ7Y2xpcC1ydWxlOmV2ZW5vZGQ7ZmlsbDojRkZGRkZGOyIgY3g9IjciIGN5PSIxIiByPSIzIi8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2c+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2c+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5zcGlyYXRpb24gICAgICAgICAgICAgICAgICAgIDwvYT4KICAgICAgICAgICAgICAgIDwvbGk+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpPgogICAgICAgICAgICAgICAgICAgIDxhIGRhdGEtYnJlZXplLWlnbm9yZSBkYXRhLWZhdGFsLWF0dHJhY3Rpb249ImNvbnRhaW5lcjp0b3BfbmF2fGtleXdvcmQ6dXBsb2FkIiBkYXRhLWd0bS1jbGljaz0idG9wX25hdl91cGxvYWRfY2xpY2siIGlkPSJqcy11cGxvYWQtbGluayIgaHJlZj0iLy92aW1lby5jb20vdXBsb2FkIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgY2xhc3M9Im1lbnVfaWNvbl91cGxvYWQiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgeD0iMHB4IiB5PSIwcHgiIHdpZHRoPSIyMHB4IgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0PSIxNnB4IiB2aWV3Qm94PSIwIDAgMjAgMTYiIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDIwIDE2OyIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGcgaWQ9InVwbG9hZF8xXyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDEuMDAwMDAwLCAxLjAwMDAwMCkiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggaWQ9IkNvbWJpbmVkLVNoYXBlXzFfIiBzdHlsZT0iZmlsbDpub25lO3N0cm9rZTojRkZGRkZGO3N0cm9rZS13aWR0aDoyOyIgZD0iTTAsMTBjMCwyLjE3LDEuOTYsNCw0LDRoMTBjMi4wNCwwLDQtMS43Niw0LTMuOTRjMC0xLjc5LTAuOC0zLjI4LTEuOTktNC4wNwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEMxNi4wMSwxLjc5LDEzLjQ5LDAsMTEsMEM5LjA4LDAsNy4yNCwxLjE5LDYuNTksM0MzLjgyLDMuMDEsMi41Nyw0LjcxLDIuMDcsNi41MkMxLjA4LDcuMDIsMCw4LjI2LDAsMTB6Ii8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cmVjdCBpZD0iUmVjdGFuZ2xlXzFfIiB4PSI4IiB5PSI4IiBzdHlsZT0iZmlsbC1ydWxlOmV2ZW5vZGQ7Y2xpcC1ydWxlOmV2ZW5vZGQ7ZmlsbDojRkZGRkZGOyIgd2lkdGg9IjIiIGhlaWdodD0iNiIvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBvbHlsaW5lIGlkPSJQYXRoLTEzXzFfIiBzdHlsZT0iZmlsbDpub25lO3N0cm9rZTojRkZGRkZGO3N0cm9rZS13aWR0aDoyOyIgcG9pbnRzPSI2LDEwIDksNyAxMiwxMCAgICAgICAiLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9nPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVcGxvYWQgICAgICAgICAgICAgICAgICAgIDwvYT4KICAgICAgICAgICAgICAgIDwvbGk+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpPgogICAgICAgICAgICAgICAgICAgIDxhIGRhdGEtYWN0aW9uPSJtZW51LmNsb3NlIiBkYXRhLWZhdGFsLWF0dHJhY3Rpb249ImNvbnRhaW5lcjp0b3BfbmF2fGNvbXBvbmVudDp1cGdyYWRlIiBkYXRhLWd0bS1jbGljaz0ibW9iaWxlX25hdl91cGdyYWRlX2NsaWNrIiBpZD0gImpzLXVwZ3JhZGUtbGluayIgY2xhc3M9IiIgaHJlZj0iLy92aW1lby5jb20vdXBncmFkZSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIGNsYXNzPSJtZW51X2ljb25fdXBncmFkZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2aWV3Qm94PSIwIDAgMzIgMzIiIHdpZHRoPSIzMnB4IiBoZWlnaHQ9IjMycHgiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD0iTTI0LDdIMTVWOWg2LjU4TDcuMjksMjMuMjlsMS40MSwxLjQxTDIzLDEwLjQxVjE3aDJWOEExLDEsMCwwLDAsMjQsN1oiIGZpbGw9IiNmZmZmZmYiLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVwZ3JhZGUgICAgICAgICAgICAgICAgICAgIDwvYT4KICAgICAgICAgICAgICAgIDwvbGk+CiAgICAgICAgICAgICAgICAgICAgPC91bD4KICAgIDwvZGl2PgoKICAgICAgICA8c2VjdGlvbiBjbGFzcz0idG9wbmF2X21vYmlsZV9tZW51IHRvcG5hdl9tb2JpbGVfbWVudV9zZXR0aW5ncyBqcy10b3BuYXZfbW9iaWxlX21lbnVfc2V0dGluZ3MiPgogICAgICAgIDxkaXYgY2xhc3M9InRvcG5hdl9tb2JpbGVfYmFyIHN1Ym1lbnUiPgogICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJ0b3BuYXZfbW9iaWxlX2J1dHRvbiB0b3BuYXZfbW9iaWxlX3B1bGxfbGVmdCBqcy10b3BuYXZfbW9iaWxlX2hlYWRlcl9zZXR0aW5zX2Nsb3NlIHRvcG5hdl9pY29uX21vYmlsZV9hcnJvd2xlZnRfYiI+IDwvYnV0dG9uPgogICAgICAgICAgICA8aDEgY2xhc3M9InRvcG5hdl9tb2JpbGVfaGVhZGVyX3RpdGxlIHN1Ym1lbnUiPk1vcmUgc3R1ZmY8L2gxPgogICAgICAgIDwvZGl2PgoKICAgICAgICA8dWwgY2xhc3M9Im1lbnVfbGlzdF9zZXR0aW5nc19sb2dnZWRfb3V0Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBkYXRhLWFjdGlvbj0ibWVudS5jbG9zZSIgY2xhc3M9IiAiIGhyZWY9Ii8vdmltZW8uY29tL3Rlcm1zIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRlcm1zIG9mIFNlcnZpY2UgICAgICAgICAgICAgICAgICAgICAgICA8L2E+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBkYXRhLWFjdGlvbj0ibWVudS5jbG9zZSIgY2xhc3M9IiAiIGhyZWY9Ii8vdmltZW8uY29tL3ByaXZhY3kiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJpdmFjeSBQb2xpY3kgICAgICAgICAgICAgICAgICAgICAgICA8L2E+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBkYXRhLWFjdGlvbj0ibWVudS5jbG9zZSIgY2xhc3M9IiAiIGhyZWY9Ii8vdmltZW8uY29tL2RtY2EiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29weXJpZ2h0ICAgICAgICAgICAgICAgICAgICAgICAgPC9hPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGk+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgZGF0YS1hY3Rpb249Im1lbnUuY2xvc2UiIGNsYXNzPSIgIiBocmVmPSIvL3ZpbWVvLmNvbS9jb29raWVfcG9saWN5Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvb2tpZXMgICAgICAgICAgICAgICAgICAgICAgICA8L2E+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBkYXRhLWFjdGlvbj0iZGVza3RvcCIgb25jbGljaz0idmltZW8ubW9iaWxlLmRlc2t0b3Bfc2hhcmVkLl9zMmRzKCk7IHJldHVybiBmYWxzZSIgaHJlZj0iamF2YXNjcmlwdDp2b2lkKDApIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIERlc2t0b3Agc2l0ZSAgICAgICAgICAgICAgICAgICAgICAgIDwvYT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGxhbmd1YWdlIGhyZWY9IiMiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgTGFuZ3VhZ2UgICAgICAgICAgICAgICAgICAgICAgICA8L2E+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IG9uY2hhbmdlPSJ2aW1lby5tb2JpbGUuZGVza3RvcF9zaGFyZWQuX3MybCh0aGlzKSIgdGl0bGU9IkNob29zZSBhIGRpZmZlcmVudCBsYW5ndWFnZSIgY2xhc3M9InRvcG5hdl9tb2JpbGVfbWVudV9zZXR0aW5nc19sYW5ndWFnZSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIGNsYXNzPSJzZWxlY3RlZCIgc2VsZWN0ZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT0iZW4iCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9InNlbGVjdF9sYW5ndWFnZSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVuZ2xpc2ggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvb3B0aW9uPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9ImVzIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lPSJzZWxlY3RfbGFuZ3VhZ2UiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFc3Bhw7FvbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9vcHRpb24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT0iZGUtREUiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9InNlbGVjdF9sYW5ndWFnZSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERldXRzY2ggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvb3B0aW9uPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9ImZyLUZSIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lPSJzZWxlY3RfbGFuZ3VhZ2UiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGcmFuw6dhaXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvb3B0aW9uPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9ImphLUpQIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lPSJzZWxlY3RfbGFuZ3VhZ2UiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICDml6XmnKzoqp4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvb3B0aW9uPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9InB0LUJSIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lPSJzZWxlY3RfbGFuZ3VhZ2UiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQb3J0dWd1w6pzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L29wdGlvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPSJrby1LUiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZT0ic2VsZWN0X2xhbmd1YWdlIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg7ZWc6rWt7Ja0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L29wdGlvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGRhdGEtYWN0aW9uPSJtZW51LmNsb3NlIiBjbGFzcz0iICIgaHJlZj0iLy92aW1lby5jb20vZmFxIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZBUSAgICAgICAgICAgICAgICAgICAgICAgIDwvYT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGRhdGEtYWN0aW9uPSJtZW51LmNsb3NlIiBjbGFzcz0iICIgaHJlZj0iLy92aW1lby5jb21oZWxwLnZpbWVvLmNvbS9oYyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBIZWxwICAgICAgICAgICAgICAgICAgICAgICAgPC9hPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+CiAgICAgICAgICAgICAgICAgICAgPC91bD4KCgogICAgICAgIDxkaXYgY2xhc3M9InRvcG5hdl9tb2JpbGVfbWVudV9jb3B5cmlnaHQiPlRNICsgwqkgMjAyMCBWaW1lbywgSW5jLjwvZGl2PgogICAgPC9zZWN0aW9uPgoKCiAgICAgICAgPC9uYXY+Cgo8c2NyaXB0PgooZnVuY3Rpb24od2luZG93LCBkb2N1bWVudCl7CgogICAgLy8gR2xvYmFsIHZhbHVlcwogICAgd2luZG93LnZpbWVvID0gd2luZG93LnZpbWVvIHx8IHt9OwogICAgdmltZW8ubW9iaWxlID0gdmltZW8ubW9iaWxlIHx8IHt9OwogICAgVmltZW8gPSB2aW1lby5tb2JpbGUgfHwge307CiAgICBWaW1lby5kZXNrdG9wX3NoYXJlZCA9IFZpbWVvLmRlc2t0b3Bfc2hhcmVkIHx8IHt9OwoKICAgIC8vIERFU0tUT1AgSEFORExFUlMKCiAgICB2YXIgZGVza3RvcCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b3BuYXZfZGVza3RvcCcpOwoKICAgIC8vIFByZXZlbnQgdG91Y2ggZGV2aWNlIHRvIGhpZ3RsaWdodCB0aGUgYXJlYSB0YXBwZWQKICAgIGRlc2t0b3AuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2hzdGFydCcsIGZ1bmN0aW9uKGUpewogICAgICAgIC8vIFRha2UgaW50byBjb25zaWRlcmF0aW9uIGF2YXRhciBpbWcKICAgICAgICB2YXIgdGFyZ2V0ID0gKGUudGFyZ2V0LnRhZ05hbWUudG9Mb3dlckNhc2UoKSA9PT0gJ2ltZycpID8gZS50YXJnZXQucGFyZW50Tm9kZSA6IGUudGFyZ2V0OwoKICAgICAgICBpZiAodGFyZ2V0LmNsYXNzTGlzdC5jb250YWlucygndG9wbmF2X2hhc19kcm9wZG93bicpKSB7CiAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTsKICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTsKICAgICAgICB9CiAgICB9LCBmYWxzZSk7CgogICAgLy8gQWRkIGxhc3RfcGFnZSBjb29raWUKICAgIHZhciBsaXN0ZW4gPSAnb250b3VjaHN0YXJ0JyBpbiB3aW5kb3cgPyAndG91Y2hzdGFydCcgOiB3aW5kb3cuUG9pbnRlckV2ZW50ID8gJ3BvaW50ZXJkb3duJyA6IHdpbmRvdy5NU1BvaW50ZXJFdmVudCA/ICdNU1BvaW50ZXJEb3duJyA6ICdjbGljayc7CiAgICBkZXNrdG9wLmFkZEV2ZW50TGlzdGVuZXIobGlzdGVuLCBmdW5jdGlvbihlKXsKICAgICAgICBpZiAoZS50YXJnZXQuY2xhc3NMaXN0LmNvbnRhaW5zKCdqcy10b3BuYXZfbWVudV9hdXRoJykpIHsKICAgICAgICAgICAgZG9jdW1lbnQuY29va2llID0gJ2xhc3RfcGFnZT0nICsgZW5jb2RlVVJJQ29tcG9uZW50KHdpbmRvdy5sb2NhdGlvbi5wYXRobmFtZSkgKyAnO3BhdGg9XCcvXCc7bWF4LWFnZT0xODAwOyc7CiAgICAgICAgfQogICAgfSwgZmFsc2UpOwoKICAgIC8vIE1PQklMRSBIQU5ETEVSUwoKICAgIC8vIFRyaWdnZXIgaU9TIFVwbG9hZCBmbG93CiAgICBWaW1lby5kZXNrdG9wX3NoYXJlZC5fdXBsb2FkID0gZnVuY3Rpb24oZSkgewogICAgICAgIC8vIHNob3cgaVR1bmVzIG9ubHkgaWYgd2UgYXJlIGluIGlPUyB3b3JsZAogICAgICAgIGlmICgvaVBhZHxpUGhvbmV8aVBvZC8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSl7CiAgICAgICAgICAgIHZhciBkZWVwbGluayA9ICd2aW1lbzovL2FwcC52aW1lby5jb20vdXBsb2FkP3JlZj1tb2JpbGV3ZWInLAogICAgICAgICAgICAgICAgZmFsbGJhY2sgPSAnL3VwbG9hZCcsCiAgICAgICAgICAgICAgICB3ZWJraXRIaWRkZW5DYWxsYmFjaywKICAgICAgICAgICAgICAgIGhpdENhbGxiYWNrOwoKICAgICAgICAgICAgLy8gQ2FsbGJhY2tzCiAgICAgICAgICAgIHdlYmtpdEhpZGRlbkNhbGxiYWNrID0gZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAvLyBJZiB0aGUgdXNlciBpcyBzdGlsbCBoZXJlIG9wZW4gdGhlIHVybCBwYWdlLgogICAgICAgICAgICAgICAgaWYgKCFkb2N1bWVudC53ZWJraXRIaWRkZW4pIHsKICAgICAgICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24gPSBmYWxsYmFjazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfTsKCiAgICAgICAgICAgIC8vIFRyeSB0byBvcGVuIHRoZSBWaW1lbyBBcHAKICAgICAgICAgICAgaGl0Q2FsbGJhY2sgPSBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbiA9IGRlZXBsaW5rOwogICAgICAgICAgICAgICAgc2V0VGltZW91dCh3ZWJraXRIaWRkZW5DYWxsYmFjaywgMjUpOwogICAgICAgICAgICB9OwoKICAgICAgICAgICAgaGl0Q2FsbGJhY2soKTsKCiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CgogICAgICAgIHdpbmRvdy5sb2NhdGlvbiA9IGUuaHJlZjsKCiAgICB9CgoKLy8gQUZURVIgTU9CSUxFIE5BViBURVNUIFJFQ09OQ0lMRSBXSVRIIFRIRSBgbW9iaWxlX21lbnVfc2NyaXB0LnBodG1sYAovLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAvLyBTd2l0Y2ggdG8gZGVza3RvcCBzaXRlCiAgICBWaW1lby5kZXNrdG9wX3NoYXJlZC5fczJkcyA9IGZ1bmN0aW9uKCkgewogICAgICAgIGRvY3VtZW50LmNvb2tpZT0nb3B0X291dF9tb2JpbGU9MTtleHBpcmVzPUZyaSwgMzEgRGVjIDk5OTkgMjM6NTk6NTkgR01UO2RvbWFpbj0nICsgdmltZW8uZG9tYWluOwogICAgICAgIHdpbmRvdy5sb2NhdGlvbi5yZWxvYWQoKTsKICAgIH07CgogICAgLy8gU3dpdGNoIHRvIGxhbmd1YWdlCiAgICBWaW1lby5kZXNrdG9wX3NoYXJlZC5fczJsID0gZnVuY3Rpb24oc2VsKSB7CiAgICAgICAgdmFyIGxhbmcgPSBzZWwudmFsdWUsCiAgICAgICAgICAgIHhociA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpOwoKICAgICAgICB4aHIub3BlbignUE9TVCcsICcvc2V0dGluZ3MvbG9jYWxlJyk7CiAgICAgICAgeGhyLnNldFJlcXVlc3RIZWFkZXIoJ1gtUmVxdWVzdGVkLVdpdGgnLCAnWE1MSHR0cFJlcXVlc3QnKTsKICAgICAgICB4aHIuc2V0UmVxdWVzdEhlYWRlcignQ29udGVudC10eXBlJywgJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcpOwogICAgICAgIHhoci5zZW5kKCdsb2NhbGU9JyArIGxhbmcgKyAnJnRva2VuPScgKyB2aW1lby54c3JmdCk7CiAgICAgICAgeGhyLm9ubG9hZCA9IGZ1bmN0aW9uIHBvc3QoKSB7CiAgICAgICAgICAgIGlmICh4aHIuc3RhdHVzID09PSAyMDApIHsKICAgICAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5yZWxvYWQoKTsKICAgICAgICAgICAgfQogICAgICAgIH07CiAgICB9OwoKICAgIHZhciBtb2JpbGVNZW51RWxlID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLmpzLXRvcG5hdl9tb2JpbGVfaGVhZGVyX2xvZ28nKTsKICAgIGlmIChtb2JpbGVNZW51RWxlKSB7CiAgICAgICAgbW9iaWxlTWVudUVsZS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uKGUpIHsKCiAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7CiAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTsKICAgICAgICAgICAgLy8gT3BlbiBNZW51CiAgICAgICAgICAgIHZhciBtb2JpbGVfbWVudV9tYWluID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLmpzLXRvcG5hdl9tb2JpbGVfbWVudV9tYWluJyk7CiAgICAgICAgICAgIG1vYmlsZV9tZW51X21haW4uc3R5bGUuZGlzcGxheSA9ICdibG9jayc7CgogICAgICAgICAgICAvLyBDbG9zZSBNZW51CiAgICAgICAgICAgIHZhciBtb2JpbGVfaGVhZGVyX2Nsb3NlID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLmpzLXRvcG5hdl9tb2JpbGVfaGVhZGVyX2Nsb3NlJyk7CiAgICAgICAgICAgIG1vYmlsZV9oZWFkZXJfY2xvc2UuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbihlKSB7CiAgICAgICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpOwogICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgICAgICAgICAgbW9iaWxlX21lbnVfbWFpbi5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOwogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIC8vIFRvZ2dsZSBTZXR0aW5ncwogICAgICAgICAgICB2YXIgbW9iaWxlX21lbnVfc2V0dGluZ3MgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcuanMtdG9wbmF2X21vYmlsZV9tZW51X3NldHRpbmdzJyk7CiAgICAgICAgICAgIHZhciB0b3BuYXYyMDE1X21vYmlsZV9oZWFkZXJfc2V0dGluZ3MgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcuanMtdG9wbmF2X21vYmlsZV9oZWFkZXJfc2V0dGluZ3MnKTsKICAgICAgICAgICAgdG9wbmF2MjAxNV9tb2JpbGVfaGVhZGVyX3NldHRpbmdzLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24oZSkgewogICAgICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTsKICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTsKICAgICAgICAgICAgICAgIG1vYmlsZV9tZW51X3NldHRpbmdzLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snOwogICAgICAgICAgICAgICAgbW9iaWxlX21lbnVfbWFpbi5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOwogICAgICAgICAgICAgICAgdmFyIHRvcG5hdjIwMTVfbW9iaWxlX2hlYWRlcl9zZXR0aW5nc19jbG9zZSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5qcy10b3BuYXZfbW9iaWxlX2hlYWRlcl9zZXR0aW5zX2Nsb3NlJyk7CiAgICAgICAgICAgICAgICB0b3BuYXYyMDE1X21vYmlsZV9oZWFkZXJfc2V0dGluZ3NfY2xvc2UuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbihlKSB7CiAgICAgICAgICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTsKICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgICAgICAgICAgICAgbW9iaWxlX21lbnVfc2V0dGluZ3Muc3R5bGUuZGlzcGxheSA9ICdub25lJzsKICAgICAgICAgICAgICAgICAgICBtb2JpbGVfbWVudV9tYWluLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snOwogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIH0pOwoKICAgICAgICB9LCBmYWxzZSk7CiAgICB9OwoKICAgIHZhciBtb2JpbGVBbGJ1bXNFbGUgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcuanMtdG9wbmF2X21vYmlsZV9oZWFkZXJfYWxidW1zJyk7CiAgICBpZiAobW9iaWxlQWxidW1zRWxlKSB7CiAgICAgICAgbW9iaWxlQWxidW1zRWxlLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24oZSkgewogICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpOwogICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgICAgIHZhciBtb2JpbGVfbWVudV9hbGJ1bXMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcuanMtdG9wbmF2X21vYmlsZV9hbGJ1bV9saXN0Jyk7CiAgICAgICAgICAgIG1vYmlsZV9tZW51X2FsYnVtcy5jbGFzc0xpc3QuYWRkKCdvcGVuJyk7CgogICAgICAgICAgICAvLyBDbG9zZQogICAgICAgICAgICB2YXIgbW9iaWxlX2FsYnVtc19jbG9zZSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5qcy10b3BuYXZfbW9iaWxlX2FsYnVtX2xpc3RfY2xvc2UnKTsKICAgICAgICAgICAgaWYgKG1vYmlsZV9hbGJ1bXNfY2xvc2UpIHsKICAgICAgICAgICAgICAgIG1vYmlsZV9hbGJ1bXNfY2xvc2UuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbihlKSB7CiAgICAgICAgICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTsKICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgICAgICAgICAgICAgbW9iaWxlX21lbnVfYWxidW1zLmNsYXNzTGlzdC5yZW1vdmUoJ29wZW4nKTsKICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICB9CiAgICAgICAgfSwgZmFsc2UpOwogICAgfTsKCgoKLy8gXl5eXl5eXl5eXl5eXl5eXl5eXl4KLy8gQUZURVIgTU9CSUxFIE5BViBURVNUIFJFQ09OQ0lMRSBXSVRIIFRIRSBgbW9iaWxlX21lbnVfc2NyaXB0LnBodG1sYAovLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgogICAgLy8gVVNFUiBNRVNTQUdFCgogICAgLy8gU2hvdyBub3RpZmljYXRpb24gaWYgaXQgaXMgdGhlIGNhc2UKICAgIC8vIFdlIHdyYXAgdGhpcyBpbiBhIHNldFRpbWVvdXQgc2luY2UgdGhlIG5vdGlmaWNhdGlvbnMgc2hvdWxkCiAgICAvLyBoYXZlIGEgbG93ZXIgcHJpb3JpdHkgaW4gdGVybXMgb2YgdmlzdWFsIGNvbXBhcmVkIHRvIG90aGVyCiAgICAvLyBpdGVtcyBvbiB0aGUgcGFnZS4KICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKXsKICAgICAgICAgLy8gRE9NIEVsZW1lbnRzCiAgICAgICAgdmFyIGF2YXRhciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b3BuYXZfbWVudV9hdmF0YXInKTsKICAgICAgICAvLyBJZiB0aGVyZSBpcyBubyBhdmF0YXIgdGhlbiBzdG9wIGl0CiAgICAgICAgaWYgKCFhdmF0YXIpIHsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KCiAgICAgICAgdmFyIGJ1YmJsZSA9IGF2YXRhci5xdWVyeVNlbGVjdG9yKCcudG9wbmF2X21lbnVfYXZhdGFyX2J1YmJsZScpOwogICAgICAgIHZhciBkcm9wZG93biA9IGF2YXRhci5xdWVyeVNlbGVjdG9yKCcjdG9wbmF2X3VzZXJfZHJvcGRvd24nKTsKICAgICAgICAvL3ZhciBtZXNzYWdlID0gYXZhdGFyLnF1ZXJ5U2VsZWN0b3IoJy50b3BuYXZfdXNlcl9tZW51X21lc3NhZ2UnKTsKICAgICAgICAvL3ZhciBjbG9zZSA9IGF2YXRhci5xdWVyeVNlbGVjdG9yKCcudG9wbmF2X3VzZXJfbWVudV9tZXNzYWdlX2Nsb3NlJyk7CiAgICAgICAgdmFyIG9uX2hvdmVyID0gZmFsc2U7CgogICAgICAgIC8vIElmIHRoZXJlIGlzIG5vIGJ1YmJsZSB0aGVuIHN0b3AgaXQKICAgICAgICBpZiAoYnViYmxlKSB7CiAgICAgICAgICAgIGJ1YmJsZS5jbGFzc0xpc3QuYWRkKCdvbicpOwogICAgICAgIH0KCiAgICAgICAgLy8gQW5kIHdlIGF0dGFjaCBoaWRlIHRoZSBidWJibGUKICAgICAgICBhdmF0YXIuYWRkRXZlbnRMaXN0ZW5lcignbW91c2VvdmVyJywgZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIGlmIChvbl9ob3ZlcikgcmV0dXJuOwoKICAgICAgICAgICAgb25faG92ZXIgPSB0cnVlOwoKICAgICAgICAgICAgaWYgKGJ1YmJsZSkgewogICAgICAgICAgICAgICAgYnViYmxlLmNsYXNzTGlzdC5yZW1vdmUoJ29uJyk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIC8vIFNhdmUgcmVtb3ZlZCBzdGF0ZSBbMSBtZWFucyB0aGUgdXNlciBvcGVuIHRoZSBkcm9wZG93bl0KICAgICAgICAgICAgc3RvcmVfdXNlcl9tZXNzYWdlX3NldHRpbmdzKDEpOwoKICAgICAgICB9LCBmYWxzZSk7CgogICAgICAgIC8vIFN0b3JlIHN0YXR1cyBvZiB1c2VyIG5hdiBtZXNzYWdlIChidWJibGUgY2xvc2VkIFsxXSwgbWVzc2FnZSBoaWRkZW4gWzJdKQogICAgICAgIGZ1bmN0aW9uIHN0b3JlX3VzZXJfbWVzc2FnZV9zZXR0aW5ncyh2YWx1ZSkgewogICAgICAgICAgICB2YXIgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7CgogICAgICAgICAgICB4aHIub3BlbignUE9TVCcsICcvc2V0dGluZ3MvbmF2Jyk7CiAgICAgICAgICAgIHhoci5zZXRSZXF1ZXN0SGVhZGVyKCdYLVJlcXVlc3RlZC1XaXRoJywgJ1hNTEh0dHBSZXF1ZXN0Jyk7CiAgICAgICAgICAgIHhoci5zZXRSZXF1ZXN0SGVhZGVyKCdDb250ZW50LXR5cGUnLCAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJyk7CiAgICAgICAgICAgIHhoci5zZW5kKCdtZXNzYWdlX3N0YXRlPScgKyB2YWx1ZSArICcmdG9rZW49JyArIHZpbWVvLnhzcmZ0KTsKCiAgICAgICAgICAgIC8vIE5vdGhpbmcgdG8gaGFuZGxlLiBXZSBob3BlIGZvciB0aGUgYmVzdCBpbiB0aGlzIGNhc2UKICAgICAgICAgICAgeGhyLm9ubG9hZCA9IGZ1bmN0aW9uICgpIHt9OwogICAgICAgIH07CgogICAgfSwgMTAwMCk7Cn0pKHdpbmRvdywgZG9jdW1lbnQpOwo8L3NjcmlwdD4KICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJ3cmFwX2NvbnRlbnQgdmFyaWFudC12MiI+CiAgICAgICAgICAgICAgICAKPGRpdiBjbGFzcz0iZXhjZXB0aW9uX2NvbnRhaW5lciI+CiAgICA8ZGl2IGNsYXNzPSJleGNlcHRpb25fc2VjdGlvbi0tcGFzc3dvcmQiPgogICAgICAgIDxoMSBjbGFzcz0iZXhjZXB0aW9uX3RpdGxlLS1wYXNzd29yZCBpcmlzX2hlYWRlciI+VGhpcyB2aWRlbyBpcyBwcml2YXRlPC9oMT4KCiAgICAgICAgPGRpdiBjbGFzcz0iZXhjZXB0aW9uX2NvbnRlbnQiPgogICAgICAgICAgICA8Zm9ybSBpZD0icHdfZm9ybSIgY2xhc3M9ImV4Y2VwdGlvbl9wYXNzd29yZCIgYWN0aW9uPSIvNzQ2MzY1NjIvcGFzc3dvcmQiIG1ldGhvZD0icG9zdCI+CiAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0icGFzc3dvcmQiIGlkPSJwYXNzd29yZCIgY2xhc3M9ImV4Y2VwdGlvbl9wYXNzd29yZC1pbnB1dCBpcmlzX2lucHV0IiBuYW1lPSJwYXNzd29yZCIgcGxhY2Vob2xkZXI9IkVudGVyIHBhc3N3b3JkIiBjbGFzcz0icGFzc3dvcmQgaXJpc19mb3JtX3RleHQiIGF1dG9jb21wbGV0ZT0ib2ZmIiBkYXRhLXZhbGlkYXRvcnM9InJlcXVpcmVkIj4KICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9ImlzX3JldmlldyIgdmFsdWU9IiI+CiAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJpc19maWxlX3RyYW5zZmVyIiB2YWx1ZT0iIj4KICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJzdWJtaXQiIHZhbHVlPSJTdWJtaXQiIGNsYXNzPSJpcmlzX2J0biBpcmlzX2J0bi0tcHJpbWFyeSI+CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9mb3JtPgoKICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgIDwvZGl2Pgo8L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKPGZvb3RlciBjbGFzcz0iZm9vdGVyX3YyIGZvb3Rlcl92Mi0tcmVzcG9uc2l2ZSI+CiAgICAgICAgICAgICAgICAgICAgPHNlY3Rpb24gY2xhc3M9ImZvb3Rlcl92Ml9fc2l0ZW1hcCI+CiAgICA8ZGl2IGNsYXNzPSJmb290ZXJfdjJfX2xpbmtzIj4KICAgICAgICA8c2VjdGlvbiBjbGFzcz0iZm9vdGVyX3YyX19saW5rIGZvb3Rlcl92Ml9hY2NvcmRpb24iPgogICAgICAgICAgICA8aW5wdXQgY2xhc3M9ImZvb3Rlcl92Ml9hY2NvcmRpb25fX2NoZWNrIiB0eXBlPSJjaGVja2JveCI+CiAgICAgICAgICAgIDxoNCBjbGFzcz0iZm9vdGVyX3YyX19saW5rLWhlYWRlciI+CiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iZm9vdGVyX3YyX19saW5rLWhlYWRlci10ZXh0Ij5WSU1FTzwvc3Bhbj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZvb3Rlcl92Ml9hY2NvcmRpb25fX3JldmVhbCI+CiAgICAgICAgICAgICAgICAgICAgPHN2ZyBjbGFzcz0iaXJpc19pYyBpcy0tMTIiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgdmlld0JveD0iMCAwIDggOCI+PHBhdGggZD0iTTcuNzA3IDIuMjkzYy0uMzktLjM5LTEuMDI0LS4zOS0xLjQxNCAwTDQgNC41ODYgMS43MDcgMi4yOTNjLS4zOS0uMzktMS4wMjQtLjM5LTEuNDE0IDAtLjM5LjM5LS4zOSAxLjAyNCAwIDEuNDE0bDMgM2MuMzkuMzkgMS4wMjQuMzkgMS40MTQgMGwzLTNjLjM5LS4zOS4zOS0xLjAyNCAwLTEuNDE0eiIvPjwvc3ZnPgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvaDQ+CiAgICAgICAgICAgIDx1bCBjbGFzcz0iZm9vdGVyX3YyX19saW5rLWxpc3QgZm9vdGVyX3YyX2FjY29yZGlvbl9fbWVudSI+CiAgICAgICAgICAgICAgICA8bGkgY2xhc3M9ImZvb3Rlcl92Ml9fbGluay1pdGVtIj4KICAgICAgICAgICAgICAgICAgICA8YQogICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0iaXJpc19saW5rIGlyaXNfbGluay0tZ3JheS0zIGlyaXNfbGluay0tZm9vdGVyIgogICAgICAgICAgICAgICAgICAgICAgICBocmVmPSIvdXBncmFkZSIKICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1ndG0tY2xpY2s9ImZvb3Rlcl9saW5rX3ByaWNpbmciCiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtZmF0YWwtYXR0cmFjdGlvbj0iY29udGFpbmVyOmZvb3Rlcnxjb21wb25lbnQ6dmltZW98a2V5d29yZDpwcmljaW5nIgogICAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICAgICAgUHJpY2luZyAgICAgICAgICAgICAgICAgICAgPC9hPgogICAgICAgICAgICAgICAgPC9saT4KICAgICAgICAgICAgICAgIDxsaSBjbGFzcz0iZm9vdGVyX3YyX19saW5rLWl0ZW0iPgogICAgICAgICAgICAgICAgICAgIDxhCiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJpcmlzX2xpbmsgaXJpc19saW5rLS1ncmF5LTMgaXJpc19saW5rLS1mb290ZXIiCiAgICAgICAgICAgICAgICAgICAgICAgIGhyZWY9Ii91cGxvYWQiCiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtZ3RtLWNsaWNrPSJmb290ZXJfbGlua191cGxvYWRfY2xpY2siCiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtZmF0YWwtYXR0cmFjdGlvbj0iY29udGFpbmVyOmZvb3Rlcnxjb21wb25lbnQ6dmltZW98a2V5d29yZDp1cGxvYWQiCiAgICAgICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICAgICAgICBVcGxvYWQgICAgICAgICAgICAgICAgICAgIDwvYT4KICAgICAgICAgICAgICAgIDwvbGk+CiAgICAgICAgICAgICAgICA8bGkgY2xhc3M9ImZvb3Rlcl92Ml9fbGluay1pdGVtIj4KICAgICAgICAgICAgICAgICAgICA8YQogICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0iaXJpc19saW5rIGlyaXNfbGluay0tZ3JheS0zIGlyaXNfbGluay0tZm9vdGVyIgogICAgICAgICAgICAgICAgICAgICAgICBocmVmPSIvY2hhbm5lbHMvc3RhZmZwaWNrcyIKICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1ndG0tY2xpY2s9ImZvb3Rlcl9saW5rX3N0YWZmX3BpY2tzIgogICAgICAgICAgICAgICAgICAgICAgICBkYXRhLWZhdGFsLWF0dHJhY3Rpb249ImNvbnRhaW5lcjpmb290ZXJ8Y29tcG9uZW50OnZpbWVvfGtleXdvcmQ6c3RhZmZfcGlja3MiCiAgICAgICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICAgICAgICBTdGFmZiBQaWNrcyAgICAgICAgICAgICAgICAgICAgPC9hPgogICAgICAgICAgICAgICAgPC9saT4KICAgICAgICAgICAgICAgIDxsaSBjbGFzcz0iZm9vdGVyX3YyX19saW5rLWl0ZW0iPgogICAgICAgICAgICAgICAgICAgIDxhCiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJpcmlzX2xpbmsgaXJpc19saW5rLS1ncmF5LTMgaXJpc19saW5rLS1mb290ZXIiCiAgICAgICAgICAgICAgICAgICAgICAgIGhyZWY9Ii9vbmRlbWFuZCIKICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1ndG0tY2xpY2s9ImZvb3Rlcl9saW5rX29uX2RlbWFuZF9jbGljayIKICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1mYXRhbC1hdHRyYWN0aW9uPSJjb250YWluZXI6Zm9vdGVyfGNvbXBvbmVudDp2aW1lb3xrZXl3b3JkOm9uX2RlbWFuZCIKICAgICAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgICAgICAgIE9uIERlbWFuZCAgICAgICAgICAgICAgICAgICAgPC9hPgogICAgICAgICAgICAgICAgPC9saT4KICAgICAgICAgICAgICAgIDxsaSBjbGFzcz0iZm9vdGVyX3YyX19saW5rLWl0ZW0iPgogICAgICAgICAgICAgICAgICAgIDxhCiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJpcmlzX2xpbmsgaXJpc19saW5rLS1ncmF5LTMgaXJpc19saW5rLS1mb290ZXIiCiAgICAgICAgICAgICAgICAgICAgICAgIGhyZWY9Imh0dHBzOi8vdmltZW8uY29tL290dCIKICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1ndG0tY2xpY2s9ImZvb3Rlcl9saW5rX3ZpbWVvX290dCIKICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1mYXRhbC1hdHRyYWN0aW9uPSJjb250YWluZXI6Zm9vdGVyfGNvbXBvbmVudDp2aW1lb3xrZXl3b3JkOm90dCIKICAgICAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgICAgICAgIFZpbWVvIE9UVCAgICAgICAgICAgICAgICAgICAgPC9hPgogICAgICAgICAgICAgICAgPC9saT4KICAgICAgICAgICAgICAgIDxsaSBjbGFzcz0iZm9vdGVyX3YyX19saW5rLWl0ZW0iPgogICAgICAgICAgICAgICAgICAgIDxhCiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJpcmlzX2xpbmsgaXJpc19saW5rLS1ncmF5LTMgaXJpc19saW5rLS1mb290ZXIiCiAgICAgICAgICAgICAgICAgICAgICAgIGhyZWY9Ii9zaXRlX21hcCIKICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1ndG0tY2xpY2s9ImZvb3Rlcl9saW5rX3NpdGVfbWFwX2NsaWNrIgogICAgICAgICAgICAgICAgICAgICAgICBkYXRhLWZhdGFsLWF0dHJhY3Rpb249ImNvbnRhaW5lcjpmb290ZXJ8Y29tcG9uZW50OnZpbWVvfGtleXdvcmQ6c2l0ZV9tYXAiCiAgICAgICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICAgICAgICBTaXRlIG1hcCAgICAgICAgICAgICAgICAgICAgPC9hPgogICAgICAgICAgICAgICAgPC9saT4KICAgICAgICAgICAgPC91bD4KICAgICAgICA8L3NlY3Rpb24+CgogICAgICAgIDxzZWN0aW9uIGNsYXNzPSJmb290ZXJfdjJfX2xpbmsgZm9vdGVyX3YyX2FjY29yZGlvbiI+CiAgICAgICAgICAgIDxpbnB1dCBjbGFzcz0iZm9vdGVyX3YyX2FjY29yZGlvbl9fY2hlY2siIHR5cGU9ImNoZWNrYm94Ij4KICAgICAgICAgICAgPGg0IGNsYXNzPSJmb290ZXJfdjJfX2xpbmstaGVhZGVyIj4KICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJmb290ZXJfdjJfX2xpbmstaGVhZGVyLXRleHQiPlNPTFVUSU9OUzwvc3Bhbj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZvb3Rlcl92Ml9hY2NvcmRpb25fX3JldmVhbCI+CiAgICAgICAgICAgICAgICAgICAgPHN2ZyBjbGFzcz0iaXJpc19pYyBpcy0tMTIiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgdmlld0JveD0iMCAwIDggOCI+PHBhdGggZD0iTTcuNzA3IDIuMjkzYy0uMzktLjM5LTEuMDI0LS4zOS0xLjQxNCAwTDQgNC41ODYgMS43MDcgMi4yOTNjLS4zOS0uMzktMS4wMjQtLjM5LTEuNDE0IDAtLjM5LjM5LS4zOSAxLjAyNCAwIDEuNDE0bDMgM2MuMzkuMzkgMS4wMjQuMzkgMS40MTQgMGwzLTNjLjM5LS4zOS4zOS0xLjAyNCAwLTEuNDE0eiIvPjwvc3ZnPgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvaDQ+CiAgICAgICAgICAgIDx1bCBjbGFzcz0iZm9vdGVyX3YyX19saW5rLWxpc3QgZm9vdGVyX3YyX2FjY29yZGlvbl9fbWVudSI+CiAgICAgICAgICAgICAgICA8bGkgY2xhc3M9ImZvb3Rlcl92Ml9fbGluay1pdGVtIj4KICAgICAgICAgICAgICAgICAgICA8YQogICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0iaXJpc19saW5rIGlyaXNfbGluay0tZ3JheS0zIGlyaXNfbGluay0tZm9vdGVyIgogICAgICAgICAgICAgICAgICAgICAgICBocmVmPSIvZmVhdHVyZXMvdmlkZW8tcGxheWVyIgogICAgICAgICAgICAgICAgICAgICAgICBkYXRhLWd0bS1jbGljaz0iZm9vdGVyX2xpbmtfdmlkZW9fcGxheWVyIgogICAgICAgICAgICAgICAgICAgICAgICBkYXRhLWZhdGFsLWF0dHJhY3Rpb249ImNvbnRhaW5lcjpmb290ZXJ8Y29tcG9uZW50OmZlYXR1cmVzfGtleXdvcmQ6dmlkZW9fcGxheWVyIgogICAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICAgICAgVmlkZW8gUGxheWVyICAgICAgICAgICAgICAgICAgICA8L2E+CiAgICAgICAgICAgICAgICA8L2xpPgogICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJmb290ZXJfdjJfX2xpbmstaXRlbSI+CiAgICAgICAgICAgICAgICAgICAgPGEKICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9ImlyaXNfbGluayBpcmlzX2xpbmstLWdyYXktMyBpcmlzX2xpbmstLWZvb3RlciIKICAgICAgICAgICAgICAgICAgICAgICAgaHJlZj0iL2NyZWF0ZSIKICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1ndG0tY2xpY2s9ImZvb3Rlcl9saW5rX2NyZWF0aW9uIgogICAgICAgICAgICAgICAgICAgICAgICBkYXRhLWZhdGFsLWF0dHJhY3Rpb249ImNvbnRhaW5lcjpmb290ZXJ8Y29tcG9uZW50OnNvbHV0aW9uc3xrZXl3b3JkOmNyZWF0ZSIKICAgICAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgICAgICAgIENyZWF0ZSAgICAgICAgICAgICAgICAgICAgPC9hPgogICAgICAgICAgICAgICAgPC9saT4KICAgICAgICAgICAgICAgIDxsaSBjbGFzcz0iZm9vdGVyX3YyX19saW5rLWl0ZW0iPgogICAgICAgICAgICAgICAgICAgIDxhCiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJpcmlzX2xpbmsgaXJpc19saW5rLS1ncmF5LTMgaXJpc19saW5rLS1mb290ZXIiCiAgICAgICAgICAgICAgICAgICAgICAgIGhyZWY9Ii9mZWF0dXJlcy92aWRlby1wcml2YWN5IgogICAgICAgICAgICAgICAgICAgICAgICBkYXRhLWd0bS1jbGljaz0iZm9vdGVyX2xpbmtfcHJpdmFjeSIKICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1mYXRhbC1hdHRyYWN0aW9uPSJjb250YWluZXI6Zm9vdGVyfGNvbXBvbmVudDpmZWF0dXJlc3xrZXl3b3JkOnByaXZhY3kiCiAgICAgICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICAgICAgICBQcml2YWN5ICAgICAgICAgICAgICAgICAgICA8L2E+CiAgICAgICAgICAgICAgICA8L2xpPgogICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJmb290ZXJfdjJfX2xpbmstaXRlbSI+CiAgICAgICAgICAgICAgICAgICAgPGEKICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9ImlyaXNfbGluayBpcmlzX2xpbmstLWdyYXktMyBpcmlzX2xpbmstLWZvb3RlciIKICAgICAgICAgICAgICAgICAgICAgICAgaHJlZj0iL2ZlYXR1cmVzL3ZpZGVvLWNvbGxhYm9yYXRpb24iCiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtZ3RtLWNsaWNrPSJmb290ZXJfbGlua19jb2xsYWJvcmF0aW9uIgogICAgICAgICAgICAgICAgICAgICAgICBkYXRhLWZhdGFsLWF0dHJhY3Rpb249ImNvbnRhaW5lcjpmb290ZXJ8Y29tcG9uZW50OmZlYXR1cmVzfGtleXdvcmQ6Y29sbGFib3JhdGlvbiIKICAgICAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgICAgICAgIENvbGxhYm9yYXRpb24gICAgICAgICAgICAgICAgICAgIDwvYT4KICAgICAgICAgICAgICAgIDwvbGk+CiAgICAgICAgICAgICAgICA8bGkgY2xhc3M9ImZvb3Rlcl92Ml9fbGluay1pdGVtIj4KICAgICAgICAgICAgICAgICAgICA8YQogICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0iaXJpc19saW5rIGlyaXNfbGluay0tZ3JheS0zIGlyaXNfbGluay0tZm9vdGVyIgogICAgICAgICAgICAgICAgICAgICAgICBocmVmPSIvZmVhdHVyZXMvdmlkZW8tbWFya2V0aW5nIgogICAgICAgICAgICAgICAgICAgICAgICBkYXRhLWd0bS1jbGljaz0iZm9vdGVyX2xpbmtfZGlzdHJpYnV0aW9uIgogICAgICAgICAgICAgICAgICAgICAgICBkYXRhLWZhdGFsLWF0dHJhY3Rpb249ImNvbnRhaW5lcjpmb290ZXJ8Y29tcG9uZW50OmZlYXR1cmVzfGtleXdvcmQ6ZGlzdHJpYnV0aW9uIgogICAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICAgICAgRGlzdHJpYnV0aW9uICYgbWFya2V0aW5nICAgICAgICAgICAgICAgICAgICA8L2E+CiAgICAgICAgICAgICAgICA8L2xpPgogICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJmb290ZXJfdjJfX2xpbmstaXRlbSI+CiAgICAgICAgICAgICAgICAgICAgPGEKICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9ImlyaXNfbGluayBpcmlzX2xpbmstLWdyYXktMyBpcmlzX2xpbmstLWZvb3RlciIKICAgICAgICAgICAgICAgICAgICAgICAgaHJlZj0iL2ZlYXR1cmVzL3ZpZGVvLW1vbmV0aXphdGlvbiIKICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1ndG0tY2xpY2s9ImZvb3Rlcl9saW5rX21vbmV0aXphdGlvbiIKICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1mYXRhbC1hdHRyYWN0aW9uPSJjb250YWluZXI6Zm9vdGVyfGNvbXBvbmVudDpmZWF0dXJlc3xrZXl3b3JkOm1vbmV0aXphdGlvbiIKICAgICAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgICAgICAgIE1vbmV0aXphdGlvbiAgICAgICAgICAgICAgICAgICAgPC9hPgogICAgICAgICAgICAgICAgPC9saT4KICAgICAgICAgICAgICAgIDxsaSBjbGFzcz0iZm9vdGVyX3YyX19saW5rLWl0ZW0iPgogICAgICAgICAgICAgICAgICAgIDxhCiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJpcmlzX2xpbmsgaXJpc19saW5rLS1ncmF5LTMgaXJpc19saW5rLS1mb290ZXIiCiAgICAgICAgICAgICAgICAgICAgICAgIGhyZWY9Ii9saXZlIgogICAgICAgICAgICAgICAgICAgICAgICBkYXRhLWd0bS1jbGljaz0iZm9vdGVyX2xpbmtfbGl2ZV9zdHJlYW1pbmciCiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtZmF0YWwtYXR0cmFjdGlvbj0iY29udGFpbmVyOmZvb3Rlcnxjb21wb25lbnQ6ZmVhdHVyZXN8a2V5d29yZDpsaXZlX3N0cmVhbWluZyIKICAgICAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgICAgICAgIExpdmUgc3RyZWFtaW5nICAgICAgICAgICAgICAgICAgICA8L2E+CiAgICAgICAgICAgICAgICA8L2xpPgogICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJmb290ZXJfdjJfX2xpbmstaXRlbSI+CiAgICAgICAgICAgICAgICAgICAgPGEKICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9ImlyaXNfbGluayBpcmlzX2xpbmstLWdyYXktMyBpcmlzX2xpbmstLWZvb3RlciIKICAgICAgICAgICAgICAgICAgICAgICAgaHJlZj0iL2ZlYXR1cmVzL3ZpZGVvLWFuYWx5dGljcyIKICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1ndG0tY2xpY2s9ImZvb3Rlcl9saW5rX2FuYWx5dGljcyIKICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1mYXRhbC1hdHRyYWN0aW9uPSJjb250YWluZXI6Zm9vdGVyfGNvbXBvbmVudDpmZWF0dXJlc3xrZXl3b3JkOmFuYWx5dGljcyIKICAgICAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgICAgICAgIEFuYWx5dGljcyAgICAgICAgICAgICAgICAgICAgPC9hPgogICAgICAgICAgICAgICAgPC9saT4KICAgICAgICAgICAgICAgIDxsaSBjbGFzcz0iZm9vdGVyX3YyX19saW5rLWl0ZW0iPgogICAgICAgICAgICAgICAgICAgIDxhCiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJpcmlzX2xpbmsgaXJpc19saW5rLS1ncmF5LTMgaXJpc19saW5rLS1mb290ZXIiCiAgICAgICAgICAgICAgICAgICAgICAgIGhyZWY9Ii9mZWF0dXJlcy9vbmxpbmUtdmlkZW8taG9zdGluZyIKICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1ndG0tY2xpY2s9ImZvb3Rlcl9saW5rX2hvc3RpbmciCiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtZmF0YWwtYXR0cmFjdGlvbj0iY29udGFpbmVyOmZvb3Rlcnxjb21wb25lbnQ6ZmVhdHVyZXN8a2V5d29yZDpob3N0aW5nIgogICAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICAgICAgSG9zdGluZyAmIG1hbmFnZW1lbnQgICAgICAgICAgICAgICAgICAgIDwvYT4KICAgICAgICAgICAgICAgIDwvbGk+CiAgICAgICAgICAgICAgICA8bGkgY2xhc3M9ImZvb3Rlcl92Ml9fbGluay1pdGVtIj4KICAgICAgICAgICAgICAgICAgICA8YQogICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0iaXJpc19saW5rIGlyaXNfbGluay0tZ3JheS0zIGlyaXNfbGluay0tZm9vdGVyIgogICAgICAgICAgICAgICAgICAgICAgICBocmVmPSIvZW50ZXJwcmlzZSIKICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1ndG0tY2xpY2s9ImZvb3Rlcl9saW5rX2VudGVycHJpc2UiCiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtZmF0YWwtYXR0cmFjdGlvbj0iY29udGFpbmVyOmZvb3Rlcnxjb21wb25lbnQ6c29sdXRpb25zfGtleXdvcmQ6ZW50ZXJwcmlzZSIKICAgICAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgICAgICAgIEVudGVycHJpc2UgICAgICAgICAgICAgICAgICAgIDwvYT4KICAgICAgICAgICAgICAgIDwvbGk+CiAgICAgICAgICAgICAgICA8bGkgY2xhc3M9ImZvb3Rlcl92Ml9fbGluay1pdGVtIj4KICAgICAgICAgICAgICAgICAgICA8YQogICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0iaXJpc19saW5rIGlyaXNfbGluay0tZ3JheS0zIGlyaXNfbGluay0tZm9vdGVyIgogICAgICAgICAgICAgICAgICAgICAgICBocmVmPSIvZm9yLWhpcmUiCiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtZ3RtLWNsaWNrPSJmb290ZXJfbGlua19mb3JfaGlyZSIKICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1mYXRhbC1hdHRyYWN0aW9uPSJjb250YWluZXI6Zm9vdGVyfGNvbXBvbmVudDpzb2x1dGlvbnN8a2V5d29yZDpmb3JfaGlyZSIKICAgICAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgICAgICAgIEZvciBIaXJlICAgICAgICAgICAgICAgICAgICA8L2E+CiAgICAgICAgICAgICAgICA8L2xpPgogICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJmb290ZXJfdjJfX2xpbmstaXRlbSI+CiAgICAgICAgICAgICAgICAgICAgPGEKICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9ImlyaXNfbGluayBpcmlzX2xpbmstLWdyYXktMyBpcmlzX2xpbmstLWZvb3RlciIKICAgICAgICAgICAgICAgICAgICAgICAgaHJlZj0iL3N0b2NrIgogICAgICAgICAgICAgICAgICAgICAgICBkYXRhLWd0bS1jbGljaz0iZm9vdGVyX2xpbmtfc3RvY2siCiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtZmF0YWwtYXR0cmFjdGlvbj0iY29udGFpbmVyOmZvb3Rlcnxjb21wb25lbnQ6c29sdXRpb25zfGtleXdvcmQ6c3RvY2siCiAgICAgICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICAgICAgICBTdG9jayAgICAgICAgICAgICAgICAgICAgPC9hPgogICAgICAgICAgICAgICAgPC9saT4KICAgICAgICAgICAgPC91bD4KICAgICAgICA8L3NlY3Rpb24+CgogICAgICAgIDxzZWN0aW9uIGNsYXNzPSJmb290ZXJfdjJfX2xpbmsgZm9vdGVyX3YyX2FjY29yZGlvbiI+CiAgICAgICAgICAgIDxpbnB1dCBjbGFzcz0iZm9vdGVyX3YyX2FjY29yZGlvbl9fY2hlY2siIHR5cGU9ImNoZWNrYm94Ij4KICAgICAgICAgICAgPGg0IGNsYXNzPSJmb290ZXJfdjJfX2xpbmstaGVhZGVyIj4KICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJmb290ZXJfdjJfX2xpbmstaGVhZGVyLXRleHQiPkFQUFM8L3NwYW4+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmb290ZXJfdjJfYWNjb3JkaW9uX19yZXZlYWwiPgogICAgICAgICAgICAgICAgICAgIDxzdmcgY2xhc3M9ImlyaXNfaWMgaXMtLTEyIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA4IDgiPjxwYXRoIGQ9Ik03LjcwNyAyLjI5M2MtLjM5LS4zOS0xLjAyNC0uMzktMS40MTQgMEw0IDQuNTg2IDEuNzA3IDIuMjkzYy0uMzktLjM5LTEuMDI0LS4zOS0xLjQxNCAwLS4zOS4zOS0uMzkgMS4wMjQgMCAxLjQxNGwzIDNjLjM5LjM5IDEuMDI0LjM5IDEuNDE0IDBsMy0zYy4zOS0uMzkuMzktMS4wMjQgMC0xLjQxNHoiLz48L3N2Zz4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2g0PgogICAgICAgICAgICA8dWwgY2xhc3M9ImZvb3Rlcl92Ml9fbGluay1saXN0IGZvb3Rlcl92Ml9hY2NvcmRpb25fX21lbnUiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9ImZvb3Rlcl92Ml9fbGluay1pdGVtIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGEKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJpcmlzX2xpbmsgaXJpc19saW5rLS1ncmF5LTMgaXJpc19saW5rLS1mb290ZXIiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBocmVmPSJodHRwczovL2FwcHMuYXBwbGUuY29tL2FwcC9hcHBsZS1zdG9yZS9pZDEzNTY2ODY3NjM/cHQ9NDE3NzMxJmFtcDtjdD1sb2hwJmFtcDttdD04IgogICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1mYXRhbC1hdHRyYWN0aW9uPSJjb250YWluZXI6Zm9vdGVyfGNvbXBvbmVudDphcHBzfGtleXdvcmQ6bWFjb3MiCiAgICAgICAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZpbWVvIGZvciBtYWNPUyAgICAgICAgICAgICAgICAgICAgICAgIDwvYT4KICAgICAgICAgICAgICAgICAgICA8L2xpPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9ImZvb3Rlcl92Ml9fbGluay1pdGVtIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGEKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJpcmlzX2xpbmsgaXJpc19saW5rLS1ncmF5LTMgaXJpc19saW5rLS1mb290ZXIiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBocmVmPSJodHRwczovL2l0dW5lcy5hcHBsZS5jb20vYXBwL3ZpbWVvL2lkNDI1MTk0NzU5P210PTgiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLWZhdGFsLWF0dHJhY3Rpb249ImNvbnRhaW5lcjpmb290ZXJ8Y29tcG9uZW50OmFwcHN8a2V5d29yZDppb3MiCiAgICAgICAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZpbWVvIGZvciBpT1MgICAgICAgICAgICAgICAgICAgICAgICA8L2E+CiAgICAgICAgICAgICAgICAgICAgPC9saT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJmb290ZXJfdjJfX2xpbmstaXRlbSI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0iaXJpc19saW5rIGlyaXNfbGluay0tZ3JheS0zIGlyaXNfbGluay0tZm9vdGVyIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgaHJlZj0iaHR0cHM6Ly9wbGF5Lmdvb2dsZS5jb20vc3RvcmUvYXBwcy9kZXRhaWxzP2lkPWNvbS52aW1lby5hbmRyb2lkLnZpZGVvYXBwJmFtcDtyZWZlcnJlcj11dG1fc291cmNlJTNEZm9vdGVyJTI2dXRtX21lZGl1bSUzRGxvaHAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLWZhdGFsLWF0dHJhY3Rpb249ImNvbnRhaW5lcjpmb290ZXJ8Y29tcG9uZW50OmFwcHN8a2V5d29yZDphbmRyb2lkIgogICAgICAgICAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBWaW1lbyBmb3IgQW5kcm9pZCAgICAgICAgICAgICAgICAgICAgICAgIDwvYT4KICAgICAgICAgICAgICAgICAgICA8L2xpPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9ImZvb3Rlcl92Ml9fbGluay1pdGVtIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGEKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJpcmlzX2xpbmsgaXJpc19saW5rLS1ncmF5LTMgaXJpc19saW5rLS1mb290ZXIiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBocmVmPSJodHRwczovL2FwcHMuYXBwbGUuY29tL3VzL2FwcC92aW1lby1jcmVhdGUvaWQxNDkxNzkxNTEzIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1mYXRhbC1hdHRyYWN0aW9uPSJjb250YWluZXI6Zm9vdGVyfGNvbXBvbmVudDphcHBzfGtleXdvcmQ6Y3JlYXRlX2lvcyIKICAgICAgICAgICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgVmltZW8gQ3JlYXRlIGZvciBpT1MgICAgICAgICAgICAgICAgICAgICAgICA8L2E+CiAgICAgICAgICAgICAgICAgICAgPC9saT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJmb290ZXJfdjJfX2xpbmstaXRlbSI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0iaXJpc19saW5rIGlyaXNfbGluay0tZ3JheS0zIGlyaXNfbGluay0tZm9vdGVyIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgaHJlZj0iaHR0cHM6Ly9wbGF5Lmdvb2dsZS5jb20vc3RvcmUvYXBwcy9kZXRhaWxzP2lkPWNvbS52aW1lb2NyZWF0ZS52aWRlb2VkaXRvci5tb3ZpZW1ha2VyJmFtcDtyZWZlcnJlcj11dG1fc291cmNlJTNEZm9vdGVyJTI2dXRtX21lZGl1bSUzRGxvaHAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLWZhdGFsLWF0dHJhY3Rpb249ImNvbnRhaW5lcjpmb290ZXJ8Y29tcG9uZW50OmFwcHN8a2V5d29yZDpjcmVhdGVfYW5kcm9pZCIKICAgICAgICAgICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgVmltZW8gQ3JlYXRlIGZvciBBbmRyb2lkICAgICAgICAgICAgICAgICAgICAgICAgPC9hPgogICAgICAgICAgICAgICAgICAgIDwvbGk+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz0iZm9vdGVyX3YyX19saW5rLWl0ZW0iPgogICAgICAgICAgICAgICAgICAgICAgICA8YQogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9ImlyaXNfbGluayBpcmlzX2xpbmstLWdyYXktMyBpcmlzX2xpbmstLWZvb3RlciIKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhyZWY9Imh0dHBzOi8vbWFnaXN0by5jb20iCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLWZhdGFsLWF0dHJhY3Rpb249ImNvbnRhaW5lcjpmb290ZXJ8Y29tcG9uZW50OmFwcHN8a2V5d29yZDptYWdpc3RvIgogICAgICAgICAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYWdpc3RvICAgICAgICAgICAgICAgICAgICAgICAgPC9hPgogICAgICAgICAgICAgICAgICAgIDwvbGk+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3VsPgogICAgICAgIDwvc2VjdGlvbj4KCiAgICAgICAgPHNlY3Rpb24gY2xhc3M9ImZvb3Rlcl92Ml9fbGluayBmb290ZXJfdjJfYWNjb3JkaW9uIj4KICAgICAgICAgICAgPGlucHV0IGNsYXNzPSJmb290ZXJfdjJfYWNjb3JkaW9uX19jaGVjayIgdHlwZT0iY2hlY2tib3giPgogICAgICAgICAgICA8aDQgY2xhc3M9ImZvb3Rlcl92Ml9fbGluay1oZWFkZXIiPgogICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImZvb3Rlcl92Ml9fbGluay1oZWFkZXItdGV4dCI+UkVTT1VSQ0VTPC9zcGFuPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZm9vdGVyX3YyX2FjY29yZGlvbl9fcmV2ZWFsIj4KICAgICAgICAgICAgICAgICAgICA8c3ZnIGNsYXNzPSJpcmlzX2ljIGlzLS0xMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2aWV3Qm94PSIwIDAgOCA4Ij48cGF0aCBkPSJNNy43MDcgMi4yOTNjLS4zOS0uMzktMS4wMjQtLjM5LTEuNDE0IDBMNCA0LjU4NiAxLjcwNyAyLjI5M2MtLjM5LS4zOS0xLjAyNC0uMzktMS40MTQgMC0uMzkuMzktLjM5IDEuMDI0IDAgMS40MTRsMyAzYy4zOS4zOSAxLjAyNC4zOSAxLjQxNCAwbDMtM2MuMzktLjM5LjM5LTEuMDI0IDAtMS40MTR6Ii8+PC9zdmc+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9oND4KICAgICAgICAgICAgPHVsIGNsYXNzPSJmb290ZXJfdjJfX2xpbmstbGlzdCBmb290ZXJfdjJfYWNjb3JkaW9uX19tZW51Ij4KICAgICAgICAgICAgICAgIDxsaSBjbGFzcz0iZm9vdGVyX3YyX19saW5rLWl0ZW0iPgogICAgICAgICAgICAgICAgICAgIDxhCiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJpcmlzX2xpbmsgaXJpc19saW5rLS1ncmF5LTMgaXJpc19saW5rLS1mb290ZXIiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBocmVmPSIvaGVscCIKICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1ndG0tY2xpY2s9ImZvb3Rlcl9saW5rX2hlbHBfY2VudGVyX2NsaWNrIgogICAgICAgICAgICAgICAgICAgICAgICBkYXRhLWZhdGFsLWF0dHJhY3Rpb249ImNvbnRhaW5lcjpmb290ZXJ8Y29tcG9uZW50OnJlc291cmNlc3xrZXl3b3JkOmhlbHBfY2VudGVyIgogICAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICAgICAgSGVscCBDZW50ZXIgICAgICAgICAgICAgICAgICAgIDwvYT4KICAgICAgICAgICAgICAgIDwvbGk+CiAgICAgICAgICAgICAgICA8bGkgY2xhc3M9ImZvb3Rlcl92Ml9fbGluay1pdGVtIj4KICAgICAgICAgICAgICAgICAgICA8YQogICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0iaXJpc19saW5rIGlyaXNfbGluay0tZ3JheS0zIGlyaXNfbGluay0tZm9vdGVyIgogICAgICAgICAgICAgICAgICAgICAgICBocmVmPSIvYmxvZyIKICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1ndG0tY2xpY2s9ImZvb3Rlcl9saW5rX3ZpbWVvX2Jsb2dfY2xpY2siCiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtZmF0YWwtYXR0cmFjdGlvbj0iY29udGFpbmVyOmZvb3Rlcnxjb21wb25lbnQ6cmVzb3VyY2VzfGtleXdvcmQ6dmltZW9fYmxvZyIKICAgICAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgICAgICAgIEJsb2cgICAgICAgICAgICAgICAgICAgIDwvYT4KICAgICAgICAgICAgICAgIDwvbGk+CiAgICAgICAgICAgICAgICA8bGkgY2xhc3M9ImZvb3Rlcl92Ml9fbGluay1pdGVtIj4KICAgICAgICAgICAgICAgICAgICA8YQogICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0iaXJpc19saW5rIGlyaXNfbGluay0tZ3JheS0zIGlyaXNfbGluay0tZm9vdGVyIgogICAgICAgICAgICAgICAgICAgICAgICBocmVmPSIvYmxvZy9jYXRlZ29yeS92aWRlby1zY2hvb2wiCiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtZ3RtLWNsaWNrPSJmb290ZXJfbGlua192aWRlb19zY2hvb2xfY2xpY2siCiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtZmF0YWwtYXR0cmFjdGlvbj0iY29udGFpbmVyOmZvb3Rlcnxjb21wb25lbnQ6cmVzb3VyY2VzfGtleXdvcmQ6dmlkZW9fc2Nob29sIgogICAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICAgICAgVmlkZW8gU2Nob29sICAgICAgICAgICAgICAgICAgICA8L2E+CiAgICAgICAgICAgICAgICA8L2xpPgogICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJmb290ZXJfdjJfX2xpbmstaXRlbSI+CiAgICAgICAgICAgICAgICAgICAgPGEKICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9ImlyaXNfbGluayBpcmlzX2xpbmstLWdyYXktMyBpcmlzX2xpbmstLWZvb3RlciIKICAgICAgICAgICAgICAgICAgICAgICAgaHJlZj0iaHR0cHM6Ly92aW1lby5jb20vb3R0L3Jlc291cmNlcyIKICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1ndG0tY2xpY2s9ImZvb3Rlcl9saW5rX290dF9yZXNvdXJjZXMiCiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtZmF0YWwtYXR0cmFjdGlvbj0iY29udGFpbmVyOmZvb3Rlcnxjb21wb25lbnQ6cmVzb3VyY2VzfGtleXdvcmQ6b3R0X3Jlc291cmNlcyIKICAgICAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgICAgICAgIE9UVCBSZXNvdXJjZXMgICAgICAgICAgICAgICAgICAgIDwvYT4KICAgICAgICAgICAgICAgIDwvbGk+CiAgICAgICAgICAgICAgICA8bGkgY2xhc3M9ImZvb3Rlcl92Ml9fbGluay1pdGVtIj4KICAgICAgICAgICAgICAgICAgICA8YQogICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0iaXJpc19saW5rIGlyaXNfbGluay0tZ3JheS0zIGlyaXNfbGluay0tZm9vdGVyIgogICAgICAgICAgICAgICAgICAgICAgICBocmVmPSJodHRwczovL2RldmVsb3Blci52aW1lby5jb20iCiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtZ3RtLWNsaWNrPSJmb290ZXJfbGlua19kZXZlbG9wZXJzX2NsaWNrIgogICAgICAgICAgICAgICAgICAgICAgICBkYXRhLWZhdGFsLWF0dHJhY3Rpb249ImNvbnRhaW5lcjpmb290ZXJ8Y29tcG9uZW50OnJlc291cmNlc3xrZXl3b3JkOmRldmVsb3BlcnMiCiAgICAgICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICAgICAgICBEZXZlbG9wZXJzICAgICAgICAgICAgICAgICAgICA8L2E+CiAgICAgICAgICAgICAgICA8L2xpPgogICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJmb290ZXJfdjJfX2xpbmstaXRlbSI+CiAgICAgICAgICAgICAgICAgICAgPGEKICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9ImlyaXNfbGluayBpcmlzX2xpbmstLWdyYXktMyBpcmlzX2xpbmstLWZvb3RlciIKICAgICAgICAgICAgICAgICAgICAgICAgaHJlZj0iL3N0dWRlbnRzIgogICAgICAgICAgICAgICAgICAgICAgICBkYXRhLWd0bS1jbGljaz0iZm9vdGVyX2xpbmtfc3R1ZGVudHMiCiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtZmF0YWwtYXR0cmFjdGlvbj0iY29udGFpbmVyOmZvb3Rlcnxjb21wb25lbnQ6cmVzb3VyY2VzfGtleXdvcmQ6c3R1ZGVudHMiCiAgICAgICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICAgICAgICBTdHVkZW50cyAgICAgICAgICAgICAgICAgICAgPC9hPgogICAgICAgICAgICAgICAgPC9saT4KICAgICAgICAgICAgICAgIDxsaSBjbGFzcz0iZm9vdGVyX3YyX19saW5rLWl0ZW0iPgogICAgICAgICAgICAgICAgICAgIDxhCiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJpcmlzX2xpbmsgaXJpc19saW5rLS1ncmF5LTMgaXJpc19saW5rLS1mb290ZXIiCiAgICAgICAgICAgICAgICAgICAgICAgIGhyZWY9Ii9oZWxwL2d1aWRlbGluZXMiCiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtZ3RtLWNsaWNrPSJmb290ZXJfbGlua192aW1lb19ndWlkZWxpbmVzX2NsaWNrIgogICAgICAgICAgICAgICAgICAgICAgICBkYXRhLWZhdGFsLWF0dHJhY3Rpb249ImNvbnRhaW5lcjpmb290ZXJ8Y29tcG9uZW50OnJlc291cmNlc3xrZXl3b3JkOnZpbWVvX2d1aWRlbGluZXMiCiAgICAgICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICAgICAgICBHdWlkZWxpbmVzICAgICAgICAgICAgICAgICAgICA8L2E+CiAgICAgICAgICAgICAgICA8L2xpPgogICAgICAgICAgICA8L3VsPgogICAgICAgIDwvc2VjdGlvbj4KCiAgICAgICAgPHNlY3Rpb24gY2xhc3M9ImZvb3Rlcl92Ml9fbGluayBmb290ZXJfdjJfYWNjb3JkaW9uIj4KICAgICAgICAgICAgPGlucHV0IGNsYXNzPSJmb290ZXJfdjJfYWNjb3JkaW9uX19jaGVjayIgdHlwZT0iY2hlY2tib3giPgogICAgICAgICAgICA8aDQgY2xhc3M9ImZvb3Rlcl92Ml9fbGluay1oZWFkZXIiPgogICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImZvb3Rlcl92Ml9fbGluay1oZWFkZXItdGV4dCI+VVBHUkFERTwvc3Bhbj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZvb3Rlcl92Ml9hY2NvcmRpb25fX3JldmVhbCI+CiAgICAgICAgICAgICAgICAgICAgPHN2ZyBjbGFzcz0iaXJpc19pYyBpcy0tMTIiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgdmlld0JveD0iMCAwIDggOCI+PHBhdGggZD0iTTcuNzA3IDIuMjkzYy0uMzktLjM5LTEuMDI0LS4zOS0xLjQxNCAwTDQgNC41ODYgMS43MDcgMi4yOTNjLS4zOS0uMzktMS4wMjQtLjM5LTEuNDE0IDAtLjM5LjM5LS4zOSAxLjAyNCAwIDEuNDE0bDMgM2MuMzkuMzkgMS4wMjQuMzkgMS40MTQgMGwzLTNjLjM5LS4zOS4zOS0xLjAyNCAwLTEuNDE0eiIvPjwvc3ZnPgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvaDQ+CiAgICAgICAgICAgIDx1bCBjbGFzcz0iZm9vdGVyX3YyX19saW5rLWxpc3QgZm9vdGVyX3YyX2FjY29yZGlvbl9fbWVudSI+CiAgICAgICAgICAgICAgICA8bGkgY2xhc3M9ImZvb3Rlcl92Ml9fbGluay1pdGVtIj4KICAgICAgICAgICAgICAgICAgICA8YQogICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0iaXJpc19saW5rIGlyaXNfbGluay0tZ3JheS0zIGlyaXNfbGluay0tZm9vdGVyIgogICAgICAgICAgICAgICAgICAgICAgICBocmVmPSIvc3RvcmUvcGx1cyIKICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1ndG0tY2xpY2s9ImZvb3Rlcl9saW5rX3VwZ3JhZGVfcGx1cyIKICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1mYXRhbC1hdHRyYWN0aW9uPSJjb250YWluZXI6Zm9vdGVyfGNvbXBvbmVudDp1cGdyYWRlX2xpbmt8a2V5d29yZDpwbHVzIgogICAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICAgICAgVmltZW8gUGx1cyAgICAgICAgICAgICAgICAgICAgPC9hPgogICAgICAgICAgICAgICAgPC9saT4KICAgICAgICAgICAgICAgIDxsaSBjbGFzcz0iZm9vdGVyX3YyX19saW5rLWl0ZW0iPgogICAgICAgICAgICAgICAgICAgIDxhCiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJpcmlzX2xpbmsgaXJpc19saW5rLS1ncmF5LTMgaXJpc19saW5rLS1mb290ZXIiCiAgICAgICAgICAgICAgICAgICAgICAgIGhyZWY9Ii9zdG9yZS9wcm8iCiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtZ3RtLWNsaWNrPSJmb290ZXJfbGlua191cGdyYWRlX3BybyIKICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1mYXRhbC1hdHRyYWN0aW9uPSJjb250YWluZXI6Zm9vdGVyfGNvbXBvbmVudDp1cGdyYWRlX2xpbmt8a2V5d29yZDpwcm8iCiAgICAgICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICAgICAgICBWaW1lbyBQUk8gICAgICAgICAgICAgICAgICAgIDwvYT4KICAgICAgICAgICAgICAgIDwvbGk+CiAgICAgICAgICAgICAgICA8bGkgY2xhc3M9ImZvb3Rlcl92Ml9fbGluay1pdGVtIj4KICAgICAgICAgICAgICAgICAgICA8YQogICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0iaXJpc19saW5rIGlyaXNfbGluay0tZ3JheS0zIGlyaXNfbGluay0tZm9vdGVyIgogICAgICAgICAgICAgICAgICAgICAgICBocmVmPSIvc3RvcmUvYnVzaW5lc3MiCiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtZ3RtLWNsaWNrPSJmb290ZXJfbGlua191cGdyYWRlX2J1c2luZXNzIgogICAgICAgICAgICAgICAgICAgICAgICBkYXRhLWZhdGFsLWF0dHJhY3Rpb249ImNvbnRhaW5lcjpmb290ZXJ8Y29tcG9uZW50OnVwZ3JhZGVfbGlua3xrZXl3b3JkOmJ1c2luZXNzIgogICAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICAgICAgVmltZW8gQnVzaW5lc3MgICAgICAgICAgICAgICAgICAgIDwvYT4KICAgICAgICAgICAgICAgIDwvbGk+CiAgICAgICAgICAgICAgICA8bGkgY2xhc3M9ImZvb3Rlcl92Ml9fbGluay1pdGVtIj4KICAgICAgICAgICAgICAgICAgICA8YQogICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0iaXJpc19saW5rIGlyaXNfbGluay0tZ3JheS0zIGlyaXNfbGluay0tZm9vdGVyIgogICAgICAgICAgICAgICAgICAgICAgICBocmVmPSIvc3RvcmUvcHJlbWl1bSIKICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1ndG0tY2xpY2s9ImZvb3Rlcl9saW5rX3VwZ3JhZGVfcHJlbWl1bSIKICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1mYXRhbC1hdHRyYWN0aW9uPSJjb250YWluZXI6Zm9vdGVyfGNvbXBvbmVudDp1cGdyYWRlX2xpbmt8a2V5d29yZDpwcmVtaXVtIgogICAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICAgICAgVmltZW8gUHJlbWl1bSAgICAgICAgICAgICAgICAgICAgPC9hPgogICAgICAgICAgICAgICAgPC9saT4KICAgICAgICAgICAgICAgIDxsaSBjbGFzcz0iZm9vdGVyX3YyX19saW5rLWl0ZW0iPgogICAgICAgICAgICAgICAgICAgIDxhCiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJpcmlzX2xpbmsgaXJpc19saW5rLS1ncmF5LTMgaXJpc19saW5rLS1mb290ZXIiCiAgICAgICAgICAgICAgICAgICAgICAgIGhyZWY9Ii9lbnRlcnByaXNlIgogICAgICAgICAgICAgICAgICAgICAgICBkYXRhLWd0bS1jbGljaz0iZm9vdGVyX2xpbmtfdXBncmFkZV9lbnRlcnByaXNlIgogICAgICAgICAgICAgICAgICAgICAgICBkYXRhLWZhdGFsLWF0dHJhY3Rpb249ImNvbnRhaW5lcjpmb290ZXJ8Y29tcG9uZW50OnVwZ3JhZGVfbGlua3xrZXl3b3JkOmVudGVycHJpc2UiCiAgICAgICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICAgICAgICBWaW1lbyBFbnRlcnByaXNlICAgICAgICAgICAgICAgICAgICA8L2E+CiAgICAgICAgICAgICAgICA8L2xpPgogICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJmb290ZXJfdjJfX2xpbmstaXRlbSI+CiAgICAgICAgICAgICAgICAgICAgPGEKICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9ImlyaXNfbGluayBpcmlzX2xpbmstLWdyYXktMyBpcmlzX2xpbmstLWZvb3RlciIKICAgICAgICAgICAgICAgICAgICAgICAgaHJlZj0iaHR0cDovL3ZpbWVvLmV4dG9sZS5jb20vd2Vic2l0ZV9mb290ZXIiCiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtZ3RtLWNsaWNrPSJmb290ZXJfbGlua191cGdyYWRlX3JlZl9mcmllbmQiCiAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldD0iX2JsYW5rIgogICAgICAgICAgICAgICAgICAgICAgICBkYXRhLWZhdGFsLWF0dHJhY3Rpb249ImNvbnRhaW5lcjpmb290ZXJ8Y29tcG9uZW50OnVwZ3JhZGVfbGlua3xrZXl3b3JkOnJlZmVyX2FfZnJpZW5kIgogICAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICAgICAgUmVmZXIgYSBmcmllbmQgICAgICAgICAgICAgICAgICAgIDwvYT4KICAgICAgICAgICAgICAgIDwvbGk+CiAgICAgICAgICAgIDwvdWw+CiAgICAgICAgPC9zZWN0aW9uPgoKICAgICAgICA8c2VjdGlvbiBjbGFzcz0iZm9vdGVyX3YyX19saW5rIGZvb3Rlcl92Ml9hY2NvcmRpb24iPgogICAgICAgICAgICA8aW5wdXQgY2xhc3M9ImZvb3Rlcl92Ml9hY2NvcmRpb25fX2NoZWNrIiB0eXBlPSJjaGVja2JveCI+CiAgICAgICAgICAgIDxoNCBjbGFzcz0iZm9vdGVyX3YyX19saW5rLWhlYWRlciI+CiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iZm9vdGVyX3YyX19saW5rLWhlYWRlci10ZXh0Ij5DT01QQU5ZPC9zcGFuPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZm9vdGVyX3YyX2FjY29yZGlvbl9fcmV2ZWFsIj4KICAgICAgICAgICAgICAgICAgICA8c3ZnIGNsYXNzPSJpcmlzX2ljIGlzLS0xMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2aWV3Qm94PSIwIDAgOCA4Ij48cGF0aCBkPSJNNy43MDcgMi4yOTNjLS4zOS0uMzktMS4wMjQtLjM5LTEuNDE0IDBMNCA0LjU4NiAxLjcwNyAyLjI5M2MtLjM5LS4zOS0xLjAyNC0uMzktMS40MTQgMC0uMzkuMzktLjM5IDEuMDI0IDAgMS40MTRsMyAzYy4zOS4zOSAxLjAyNC4zOSAxLjQxNCAwbDMtM2MuMzktLjM5LjM5LTEuMDI0IDAtMS40MTR6Ii8+PC9zdmc+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9oND4KICAgICAgICAgICAgPHVsIGNsYXNzPSJmb290ZXJfdjJfX2xpbmstbGlzdCBmb290ZXJfdjJfYWNjb3JkaW9uX19tZW51Ij4KICAgICAgICAgICAgICAgIDxsaSBjbGFzcz0iZm9vdGVyX3YyX19saW5rLWl0ZW0iPgogICAgICAgICAgICAgICAgICAgIDxhCiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJpcmlzX2xpbmsgaXJpc19saW5rLS1ncmF5LTMgaXJpc19saW5rLS1mb290ZXIiCiAgICAgICAgICAgICAgICAgICAgICAgIGhyZWY9Ii9hYm91dCIKICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1ndG0tY2xpY2s9ImZvb3Rlcl9saW5rX2Fib3V0X2NsaWNrIgogICAgICAgICAgICAgICAgICAgICAgICBkYXRhLWZhdGFsLWF0dHJhY3Rpb249ImNvbnRhaW5lcjpmb290ZXJ8Y29tcG9uZW50OmNvbXBhbnl8a2V5d29yZDphYm91dF92aW1lbyIKICAgICAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgICAgICAgIEFib3V0ICAgICAgICAgICAgICAgICAgICA8L2E+CiAgICAgICAgICAgICAgICA8L2xpPgogICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJmb290ZXJfdjJfX2xpbmstaXRlbSI+CiAgICAgICAgICAgICAgICAgICAgPGEKICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9ImlyaXNfbGluayBpcmlzX2xpbmstLWdyYXktMyBpcmlzX2xpbmstLWZvb3RlciIKICAgICAgICAgICAgICAgICAgICAgICAgaHJlZj0iL2pvYnMiCiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtZ3RtLWNsaWNrPSJmb290ZXJfbGlua19qb2JzIgogICAgICAgICAgICAgICAgICAgICAgICBkYXRhLWZhdGFsLWF0dHJhY3Rpb249ImNvbnRhaW5lcjpmb290ZXJ8Y29tcG9uZW50OmNvbXBhbnl8a2V5d29yZDpqb2JzIgogICAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICAgICAgSm9icyAgICAgICAgICAgICAgICAgICAgPC9hPgogICAgICAgICAgICAgICAgPC9saT4KICAgICAgICAgICAgPC91bD4KICAgICAgICA8L3NlY3Rpb24+CiAgICA8L2Rpdj4KCiAgICAgICAgICAgICAgICA8YXNpZGUgaWQ9ImZvb3Rlcl90aXAiIGNsYXNzPSJmb290ZXJfdjJfX3RpcCIgYXJpYS1saXZlPSJwb2xpdGUiPgogICAgICAgICAgICA8aDQgY2xhc3M9ImZvb3Rlcl92Ml9fdGlwLWhlYWRlciI+RGlkIHlvdSBrbm93PzwvaDQ+CiAgICAgICAgICAgIDxwIGNsYXNzPSJhY3RpdmUgZm9vdGVyX3YyX190aXAtY29udGVudCI+WW91IGNhbiB1cGxvYWQgdmlkZW9zIHRvIFZpbWVvIDxhIGhyZWY9Ii9zZXR0aW5ncy9hcHBzIiBkYXRhLWZhdGFsLWF0dHJhY3Rpb249ImNvbnRhaW5lcjpkaWRfeW91X2tub3dfYm94fGNvbXBvbmVudDpwcm9kdWN0Ij5kaXJlY3RseSBmcm9tIERyb3Bib3g8L2E+ISBEcm9wIGl0IGxpa2UgdGhlcmXigJlzIGEgYm94IHVuZGVybmVhdGggaXQuPC9wPgogICAgICAgIDwvYXNpZGU+CiAgICA8L3NlY3Rpb24+CiAgICAKICAgICAgICA8c2VjdGlvbiBjbGFzcz0iZm9vdGVyX3YyX19hdXhpbGlhcnkgIj4KCiAgICA8ZGl2IGNsYXNzPSJmb290ZXJfdjJfX2xlZ2FsIj4KICAgICAgICA8ZGl2IGNsYXNzPSJmb290ZXJfdjJfX2F1eGlsaWFyeS1jb250ZW50Ij4KICAgICAgICAgICAgPHA+VE0gKyAmY29weTsgMjAyMCBWaW1lbywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLjwvcD4KICAgICAgICA8L2Rpdj4KICAgICAgICA8dWwgY2xhc3M9ImZvb3Rlcl92Ml9fbGVnYWwtbGlzdCI+CiAgICAgICAgICAgIDxsaSBjbGFzcz0iZm9vdGVyX3YyX19sZWdhbC1saXN0LWl0ZW0iPgogICAgICAgICAgICAgICAgPGEgY2xhc3M9ImlyaXNfbGluayBpcmlzX2xpbmstLWdyYXktNCIgaHJlZj0iL3Rlcm1zIiB0aXRsZT0iVGVybXMgJmFtcDsgQ29uZGl0aW9ucyI+CiAgICAgICAgICAgICAgICAgICAgVGVybXMgICAgICAgICAgICAgICAgPC9hPgogICAgICAgICAgICA8L2xpPgogICAgICAgICAgICA8bGkgY2xhc3M9ImZvb3Rlcl92Ml9fbGVnYWwtbGlzdC1pdGVtIj4KICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJpcmlzX2xpbmsgaXJpc19saW5rLS1ncmF5LTQiIGhyZWY9Ii9wcml2YWN5IiB0aXRsZT0iUHJpdmFjeSBQb2xpY3kiPgogICAgICAgICAgICAgICAgICAgIFByaXZhY3kgICAgICAgICAgICAgICAgPC9hPgogICAgICAgICAgICA8L2xpPgogICAgICAgICAgICA8bGkgY2xhc3M9ImZvb3Rlcl92Ml9fbGVnYWwtbGlzdC1pdGVtIj4KICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJpcmlzX2xpbmsgaXJpc19saW5rLS1ncmF5LTQiIGhyZWY9Ii9wcml2YWN5L2NhbGlmb3JuaWEtcHJpdmFjeSIgdGl0bGU9IkNBIFByaXZhY3kiPgogICAgICAgICAgICAgICAgICAgIENBIFByaXZhY3kgICAgICAgICAgICAgICAgPC9hPgogICAgICAgICAgICA8L2xpPgogICAgICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9ImZvb3Rlcl92Ml9fbGVnYWwtbGlzdC1pdGVtIj4KICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJpcmlzX2xpbmsgaXJpc19saW5rLS1ncmF5LTQiIGhyZWY9Ii9kbWNhIiB0aXRsZT0iQ29weXJpZ2h0IEluZm9ybWF0aW9uIj4KICAgICAgICAgICAgICAgICAgICBDb3B5cmlnaHQgICAgICAgICAgICAgICAgPC9hPgogICAgICAgICAgICA8L2xpPgogICAgICAgICAgICA8bGkgY2xhc3M9ImZvb3Rlcl92Ml9fbGVnYWwtbGlzdC1pdGVtIj4KICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJpcmlzX2xpbmsgaXJpc19saW5rLS1ncmF5LTQiIGhyZWY9Ii9jb29raWVfcG9saWN5IiB0aXRsZT0iTGVhcm4gbW9yZSBhYm91dCBob3cgVmltZW8gdXNlcyBjb29raWVzIj4KICAgICAgICAgICAgICAgICAgICBDb29raWVzICAgICAgICAgICAgICAgIDwvYT4KICAgICAgICAgICAgPC9saT4KICAgICAgICA8L3VsPgogICAgICAgIDxkaXYgY2xhc3M9ImZvb3Rlcl92Ml9fYXV4aWxpYXJ5LWNvbnRlbnQgZm9vdGVyX3YyX193aXRobG92ZSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYWRlIHdpdGggPHN2ZyBjbGFzcz0iaXJpc19pYyBpcy0tMTIgZm9vdGVyX3YyX19sb3ZlaGVhcnQgZm9vdGVyX3YyX19hdXhpbGlhcnktaWNvbiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2aWV3Qm94PSIwIDAgMTIgMTIiPjxwYXRoIGQ9Ik05IDJDNy4zMTIgMiA2IDMuNSA2IDMuNVM0LjY4NyAyIDMgMkMxLjMxMiAyIDAgMy4zMTIgMCA1YzAgMy4xODggMy43NSAzLjAxMiA2IDYgMi4yNS0yLjk4OCA2LTIuODEyIDYtNiAwLTEuNjg4LTEuMzEzLTMtMy0zeiIvPjwvc3ZnPiBpbiBOWUMuICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgIDwvZGl2PgoKICAgIDxkaXYgY2xhc3M9ImZvb3Rlcl92Ml9fZmlsdGVycyBmb290ZXJfdjJfX2F1eGlsaWFyeS1jb250ZW50Ij4KICAgICAgICA8c3BhbiBjbGFzcz0ibGFuZ3VhZ2UiPgogICAgICAgICAgICBMYW5ndWFnZToKICAgICAgICAgICAgPGEgY2xhc3M9ImlyaXNfbGluayBpcmlzX2xpbmstLWdyYXktNCIgaHJlZj0iI2xhbmd1YWdlIiBvbmNsaWNrPSJ2aW1lby5Nb2RhbC5jcmVhdGUoe2NvbnRlbnQ6ICcvc2V0dGluZ3MvbG9jYWxlJywgc2l6ZTogJ3NtYWxsJ30pOyByZXR1cm4gZmFsc2U7IiB0aXRsZT0iQ2hvb3NlIGEgZGlmZmVyZW50IGxhbmd1YWdlIj5FbmdsaXNoPC9hPgogICAgICAgIDwvc3Bhbj4KCiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImZvb3Rlcl92Ml9fZmlsdGVyIj5NYXR1cmUgY29udGVudCBmaWx0ZXI6IDwvc3Bhbj48YSBjbGFzcz0iaXJpc19saW5rIGlyaXNfbGluay0tZ3JheS00IGZvb3Rlcl92Ml9fZmlsdGVyc19fbGFuZyBjb250ZW50ZmlsdGVyIGpzLWZvb3Rlcl9jb250ZW50ZmlsdGVyX2xpbmsiIGhyZWY9ImphdmFzY3JpcHQ6dm9pZCgwKSIgb25jbGljaz0idmltZW8uTW9kYWwuY3JlYXRlKHtjb250ZW50OiAnL3NldHRpbmdzL2NvbnRlbnRyYXRpbmcnfSkiIHRpdGxlPSJDaGFuZ2UgeW91ciBtYXR1cmUgY29udGVudCBmaWx0ZXIiPk5vbmU8L2E+CiAgICAgICAgICAgIDwvZGl2PgoKPC9zZWN0aW9uPgo8L2Zvb3Rlcj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CgogICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgIAo8c2NyaXB0PgogICAgdmFyIF9fZmEgPSBfX2ZhIHx8IFtdOwogICAgLyoqCiAgICAgKiBCZWNhdXNlIHNpbmdsZSBwYWdlIGFwcGxpY2F0aW9ucyBzdWNoIGFzIHRoZSBhcHAgc2hlbGwgd2lsbCBiZSB0cmFja2luZwogICAgICogRmF0YWwgQXR0cmFjdGlvbiBwYWdlIHZpZXdzIG9uIFJlYWN0IGxpZmVjeWNsZSBob29rcyAoY29tcG9uZW50RGlkTW91bnQpCiAgICAgKiB3ZSB3YW50IHRvIGF2b2lkIGRpc3BhdGNoaW5nIHRoZSBwYWdldmlldyBldmVudCBmcm9tIHRoZSBQSFAgdGVtcGxhdGUKICAgICAqIGFuZCBkZWZlciB0aGlzIHNvcnQgb2YgdHJhY2tpbmcgbG9naWMgdG8gdGhlIGZyb250IGVuZC4KICAgICAqCiAgICAgKiBUaGlzIGNoZWNrIGFsbG93cyB1cyB0byBkZWNsYXJlIGluIGEgY29udHJvbGxlciB3aGV0aGVyIG9yIG5vdCB3ZQogICAgICogd2FudCB0byBkaXNwYXRjaCB0aGF0IHByZWxpbWluYXJ5IHBhZ2V2aWV3LgogICAgICoKICAgICAqIFRoZSBwcm9wZXJ0eSBpcyBhZGRpdGl2ZSBvbmx5LCBhcyB0byBub3QgYWZmZWN0IGV4aXN0aW5nIHBhZ2V2aWV3cy4KICAgICAqLwogICAgICAgICAgICBfX2ZhLnB1c2goWyd0cmFja1BhZ2V2aWV3J10pOwogICAgCiAgICAvKioKICAgICAqIEFkZCBzZXJ2ZXIgc2lkZSBBQkxpbmNvbG4gZXhwZXJpbWVudHMgdG8gR1RNIGRhdGEgbGF5ZXIuCiAgICAgKi8KICAgIAogICAgICAgIHZhciBfZXh0ZW5kID0gZnVuY3Rpb24oKXtmb3IodmFyIHI9YXJndW1lbnRzWzBdLG49MSxlPWFyZ3VtZW50cy5sZW5ndGg7ZT5uO24rKyl7dmFyIHQ9YXJndW1lbnRzW25dO2Zvcih2YXIgYSBpbiB0KXQuaGFzT3duUHJvcGVydHkoYSkmJihyW2FdPXRbYV0pfXJldHVybiByfTsKCiAgICAgICAgdmFyIENTU19ESVIgPSAnaHR0cHM6Ly9mLnZpbWVvY2RuLmNvbS9zdHlsZXMvY3NzX29wdC8nLAogICAgICAgIEpTX0RJUiA9ICdodHRwczovL2YudmltZW9jZG4uY29tL2pzX29wdC8nLAogICAgICAgIElNQUdFX0RJUiA9ICdodHRwczovL2YudmltZW9jZG4uY29tL2ltYWdlc192Ni8nLAogICAgICAgIEZPTlRfRElSID0gJ2h0dHBzOi8vZi52aW1lb2Nkbi5jb20vZm9udHMvJywKICAgICAgICBTVkdfRElSID0gJ2h0dHBzOi8vZi52aW1lb2Nkbi5jb20vc3ZnLycsCiAgICAgICAgICAgICAgICBCVUlMRF9IQVNIID0gJzZhZWJlJzsKCiAgICAKICAgICAgICB2YXIgdmltZW8gPSBfZXh0ZW5kKCh3aW5kb3cudmltZW8gfHwge30pLCB7ImFwcF92ZXJzaW9uIjoidjYiLCJkb21haW4iOiJ2aW1lby5jb20iLCJ1cmwiOiJ2aW1lby5jb20iLCJjdXJfdXNlciI6ZmFsc2UsIm9yaWdpbl91c2VyX2lkIjpudWxsLCJvcmlnaW5fdXNlciI6ZmFsc2UsImlzX21vYmlsZSI6ZmFsc2V9KTsKICAgIHZpbWVvLmNvbmZpZyA9IF9leHRlbmQoKHZpbWVvLmNvbmZpZyB8fCB7fSksIHsic3RpY2t5X3RvcG5hdiI6eyJleGNsdWRlZF9wYWdlcyI6WyJWaW1lb1xcQ29udHJvbGxlclxcQWJvdXRDb250cm9sbGVyOm1haW4iLCJWaW1lb1xcQ29udHJvbGxlclxcQWJvdXRDb250cm9sbGVyOnByb2Zlc3Npb25hbHMiLCJWaW1lb1xcQ29udHJvbGxlclxcQWJvdXRDb250cm9sbGVyOmV2ZXJ5b25lIiwiVmltZW9cXENvbnRyb2xsZXJcXEhvbWVDb250cm9sbGVyOnVwZ3JhZGUiLCJWaW1lb1xcQ29udHJvbGxlclxcU3RvcmVDb250cm9sbGVyOm1haW4iLCJWaW1lb1xcQ29udHJvbGxlclxcVXNlclxcU2V0dGluZ3MyQ29udHJvbGxlcjptYWluIiwiVmltZW9cXENvbnRyb2xsZXJcXFVzZXJcXFNldHRpbmdzMkNvbnRyb2xsZXI6dGVhbV9tZW1iZXJzIiwiVmltZW9cXENvbnRyb2xsZXJcXFVzZXJcXFNldHRpbmdzMkNvbnRyb2xsZXI6cGFzc3dvcmQiLCJWaW1lb1xcQ29udHJvbGxlclxcUHJvZmlsZUNvbnRyb2xsZXI6bWFpbiIsIlZpbWVvXFxDb250cm9sbGVyXFxDbGlwU3RhdHNDb250cm9sbGVyOm1haW4iLCJWaW1lb1xcQ29udHJvbGxlclxcQ2xpcFxcU2V0dGluZ3NcXEVtYmVkQ29udHJvbGxlcjplbWJlZCIsIlZpbWVvXFxDb250cm9sbGVyXFxWaWRlb01hbmFnZXJDb250cm9sbGVyIiwiVmltZW9cXENvbnRyb2xsZXJcXFZpZGVvUmV2aWV3Q29udHJvbGxlciIsIlZpbWVvXFxDb250cm9sbGVyXFxNZXNzYWdlc0NvbnRyb2xsZXIiLCJWaW1lb1xcQ29udHJvbGxlclxcU3RhdHNDb250cm9sbGVyIiwiVmltZW9cXENvbnRyb2xsZXJcXFVwbG9hZENvbnRyb2xsZXIiLCJWaW1lb1xcQ29udHJvbGxlclxcT25EZW1hbmRcXFNldHRpbmdzQ29udHJvbGxlciIsIlZpbWVvXFxDb250cm9sbGVyXFxDbGlwXFxTZXR0aW5nc0NvbnRyb2xsZXIiXSwic3RpY2t5X2luY2x1ZGVkX3BhZ2VzIjpbIlZpbWVvXFxDb250cm9sbGVyXFxTdG9ja1xcU3RvY2tIb21lUGFnZUNvbnRyb2xsZXIiLCJWaW1lb1xcQ29udHJvbGxlclxcU3RvY2tcXFN0b2NrRm9vdGFnZUNvbnRyb2xsZXIiLCJWaW1lb1xcQ29udHJvbGxlclxcU3RvY2tcXFN0b2NrU2VhcmNoQ29udHJvbGxlciIsIlZpbWVvXFxDb250cm9sbGVyXFxTdG9ja1xcU3RvY2tDb2xsZWN0aW9uc0NvbnRyb2xsZXIiLCJWaW1lb1xcQ29udHJvbGxlclxcQWxidW1Db250cm9sbGVyIl0sInRvcG5hdl93cmFwX3NlbGVjdG9yIjoiI3RvcG5hdl9vdXRlcl93cmFwIiwiY29udGVudF93cmFwX3NlbGVjdG9yIjoiLndyYXBfY29udGVudCJ9LCJsb2NhbGUiOiJlbiIsIm9tbmlzZWFyY2hfZW5hYmxlZCI6ZmFsc2UsIm9tbmlzZWFyY2hfZGlzYWJsZWQiOm51bGwsIm9tbmlzZWFyY2hfand0IjoiZXlKMGVYQWlPaUpLVjFRaUxDSmhiR2NpT2lKSVV6STFOaUo5LmV5SmxlSEFpT2pFMk1ETTRNak00T0RBc0luVnpaWEpmYVdRaU9tNTFiR3dzSW1Gd2NGOXBaQ0k2TlRnME56a3NJbk5qYjNCbGN5STZJbkIxWW14cFl5QndjbWwyWVhSbElHUmxiR1YwWlNJc0luUmxZVzFmZFhObGNsOXBaQ0k2Ym5Wc2JIMC4zRHVXbWpKMVdlV0MzX1VhN1pEV0tsYXk4alloS2d5Rjg3RTB2SGtrR2hVIiwib21uaXNlYXJjaF91c2VyIjpudWxsLCJhcGlfdXJsIjoiYXBpLnZpbWVvLmNvbSIsInNob3dfb21uaXNlYXJjaF90aXAiOmZhbHNlfSk7CgogICAgICAgIHZhciBfX2kxOG5Mb2NhbGUgPSAnZW4nOwogICAgdmFyIGxvY2FsZUNvbmZpZyA9IHsKICAgICAgICBsYW5nOiAnZW4nLAogICAgICAgICdEYXRlJzogewogICAgICAgICAgICBtb250aHM6IFsiSmFudWFyeSIsIkZlYnJ1YXJ5IiwiTWFyY2giLCJBcHJpbCIsIk1heSIsIkp1bmUiLCJKdWx5IiwiQXVndXN0IiwiU2VwdGVtYmVyIiwiT2N0b2JlciIsIk5vdmVtYmVyIiwiRGVjZW1iZXIiXSwKICAgICAgICAgICAgbW9udGhzX2FiYnI6IFsiSmFuIiwiRmViIiwiTWFyIiwiQXByIiwiTWF5IiwiSnVuIiwiSnVsIiwiQXVnIiwiU2VwIiwiT2N0IiwiTm92IiwiRGVjIl0sCiAgICAgICAgICAgIGRheXM6IFsiU3VuZGF5IiwiTW9uZGF5IiwiVHVlc2RheSIsIldlZG5lc2RheSIsIlRodXJzZGF5IiwiRnJpZGF5IiwiU2F0dXJkYXkiXSwKICAgICAgICAgICAgZGF5c19hYmJyOiBbIlN1biIsIk1vbiIsIlR1ZSIsIldlZCIsIlRodSIsIkZyaSIsIlNhdCJdLAoKICAgICAgICAgICAgLy8gQ3VsdHVyZSdzIGRhdGUgb3JkZXI6IE1NL0REL1lZWVkKICAgICAgICAgICAgZGF0ZU9yZGVyOiBbJ2RhdGUnLCAnbW9udGgnLCAneWVhciddLAogICAgICAgICAgICBzaG9ydERhdGU6ICclZC8lbS8lWScsCiAgICAgICAgICAgIHNob3J0VGltZTogJyVJOiVNJXAnLAogICAgICAgICAgICBBTTogJ0FNJywKICAgICAgICAgICAgUE06ICdQTScsCiAgICAgICAgICAgIGZpcnN0RGF5T2ZXZWVrOiAwLAoKICAgICAgICAgICAgLy8gRGF0ZS5FeHRyYXMKICAgICAgICAgICAgb3JkaW5hbDogZnVuY3Rpb24oZGF5T2ZNb250aCl7CiAgICAgICAgICAgICAgICByZXR1cm4gZGF5T2ZNb250aDsKICAgICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgJ0RhdGVQaWNrZXInOiB7CiAgICAgICAgICAgIHNlbGVjdF9hX3RpbWU6ICJTZWxlY3QgYSB0aW1lIiwKICAgICAgICAgICAgdXNlX21vdXNlX3doZWVsOiAiVXNlIHRoZSBtb3VzZSB3aGVlbCB0byBxdWlja2x5IGNoYW5nZSB2YWx1ZSIsCiAgICAgICAgICAgIHRpbWVfY29uZmlybV9idXR0b246ICJPSyIsCiAgICAgICAgICAgIGFwcGx5X3JhbmdlOiAiQXBwbHkiLAogICAgICAgICAgICBjYW5jZWw6ICJDYW5jZWwiLAogICAgICAgICAgICB3ZWVrOiAiV2siICAgICAgICB9LAogICAgICAgICAgICAgICAgJ051bWJlcic6IHsKICAgICAgICAgICAgZGVjaW1hbDogJy4nLAogICAgICAgICAgICBncm91cDogJywnLAogICAgICAgICAgICBjdXJyZW5jeTogewogICAgICAgICAgICAgICAgcHJlZml4OiAnJCcKICAgICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgJ0Zvcm1WYWxpZGF0b3InOiB7InJlcXVpcmVkIjoiVGhpcyBmaWVsZCBpcyByZXF1aXJlZC4iLCJyZXF1aXJlZENoayI6IlRoaXMgZmllbGQgaXMgcmVxdWlyZWQuIn0gICAgfTsKCiAgICB2YXIgZnVsbExvY2FsZSA9ICcnOwoKICAgIAogICAgICAgIHZhciBDb3B5ID0ge3RyYW5zbGF0ZTpmdW5jdGlvbih0LGksdSl7dmFyIGU9J29iamVjdCchPXR5cGVvZiB0aGlzLmRpY3RbdF0/dGhpcy5kaWN0W3RdOmk/dGhpcy5kaWN0W3RdLnBsdXJhbDp0aGlzLmRpY3RbdF0uc2luZ3VsYXI7cmV0dXJuJ29iamVjdCc9PXR5cGVvZiB1JiYoZT10aGlzLnN1YnN0aXR1dGUoZSx1KSksZX0sc3Vic3RpdHV0ZTpmdW5jdGlvbih0LGkpe3JldHVybiB2b2lkIDAhPT10LnN1YnN0aXR1dGU/dC5zdWJzdGl0dXRlKGkpOnQucmVwbGFjZSgvXFw/XHsoW157fV0rKVx9L2csZnVuY3Rpb24odCx1KXtyZXR1cm4nXFwnPT10LmNoYXJBdCgwKT90LnNsaWNlKDEpOm51bGwhPWlbdV0/aVt1XTonJ30pfSxkaWN0Ont9fTsKICAgIENvcHkuZGljdCA9IHsiZGlkX3lvdV9tZWFuX2VtYWlsIjoiRGlkIHlvdSBtZWFuIDxlbT57U1VHR0VTVH08XC9lbT4/IiwiZW1haWxfcGFzc3dvcmRfbWlzbWF0Y2giOiJFbWFpbCBhbmQgcGFzc3dvcmQgZG8gbm90IG1hdGNoIiwib29wc190cnlfYWdhaW4iOiJPb3BzISBTb21ldGhpbmcgd2VudCB3cm9uZy4gUGxlYXNlIHRyeSBhZ2Fpbi4iLCJqdXN0X25vdyI6Imp1c3Qgbm93Iiwic2Vjb25kc19hZ28iOnsic2luZ3VsYXIiOiJ7Q09VTlR9IHNlY29uZCBhZ28iLCJwbHVyYWwiOiJ7Q09VTlR9IHNlY29uZHMgYWdvIn0sIm1pbnV0ZXNfYWdvIjp7InNpbmd1bGFyIjoie0NPVU5UfSBtaW51dGUgYWdvIiwicGx1cmFsIjoie0NPVU5UfSBtaW51dGVzIGFnbyJ9LCJob3Vyc19hZ28iOnsic2luZ3VsYXIiOiJ7Q09VTlR9IGhvdXIgYWdvIiwicGx1cmFsIjoie0NPVU5UfSBob3VycyBhZ28ifSwib3Blbl9jb21tZW50X2JveCI6IkFkZCBuZXcgY29tbWVudCBpbnN0ZWFkICZyYXF1bzsiLCJ1cmxfdW5hdmFpbGFibGUiOiJTb3JyeSwgdGhpcyB1cmwgaXMgdW5hdmFpbGFibGUuIiwidW5zYXZlZF9jaGFuZ2VzX2dlbmVyaWMiOiJZb3UgaGF2ZSB1bnNhdmVkIGNoYW5nZXMsIGFyZSB5b3Ugc3VyZSB5b3Ugd2lzaCB0byBsZWF2ZT8iLCJhZGQiOiJBZGQiLCJyZW1vdmUiOiJSZW1vdmUiLCJzZWxlY3QiOiJTZWxlY3QiLCJub19mb2xsb3dlcnNfZm9yX2xldHRlciI6IllvdSBkb24mcnNxdW87dCBmb2xsb3cgYW55b25lIHRoYXQgYmVnaW4gd2l0aCB0aGUgbGV0dGVyICZsZHF1bzt7UEFHRV9MRVRURVJ9JnJkcXVvOyIsInNoYXJlX2xpbWl0X3JlYWNoZWQiOiJZb3UgaGF2ZSByZWFjaGVkIHRoZSBtYXhpbXVtIG51bWJlciBvZiB1c2VycyB0byBzaGFyZSB3aXRoLiIsImF0X2xlYXN0X29uZSI6IlRoZXJlIG11c3QgYmUgYXQgbGVhc3Qgb25lIHVzZXIuIiwiYXZhaWxhYmxlIjoiQXZhaWxhYmxlIiwidW5hdmFpbGFibGUiOiJVbmF2YWlsYWJsZSIsImJyb3dzZV9lcnJvcl9nZW5lcmljIjoiU29ycnksIHRoZXJlIHdhcyBhbiBlcnJvciIsImJyb3dzZV9lcnJvcl9ub192aWRlb3MiOiJTb3JyeSwgbm8gdmlkZW9zIGZvdW5kIiwiZm9sbG93IjoiRm9sbG93IiwiZm9sbG93aW5nIjoiRm9sbG93aW5nIiwidW5mb2xsb3ciOiJVbmZvbGxvdyIsInVuZm9sbG93aW5nIjoiVW5mb2xsb3dpbmciLCJjb3VudF9jb21tZW50cyI6eyJzaW5ndWxhciI6IntDT1VOVH0gY29tbWVudCIsInBsdXJhbCI6IntDT1VOVH0gY29tbWVudHMifSwiZmlyc3RfY29tbWVudCI6IkJlIHRoZSBmaXJzdCB0byBjb21tZW50XHUyMDI2Iiwibm9fY29tbWVudHNfZm9yX3lvdSI6IkZvcmJpZGRlbi4gWW91IGNhbm5vdCBwb3N0IGNvbW1lbnRzIG9uIHRoaXMgcGFnZS4iLCJvb3BzIjoiT29wcyEiLCJwbGF5ZXJfdHJ5X2FnYWluIjoiVGhhdCB3YXNuJ3Qgc3VwcG9zZWQgdG8gaGFwcGVuLiBQbGVhc2UgdHJ5IGFnYWluIGluIGEgZmV3IG1pbnV0ZXMuIiwiZHVyYXRpb25faW5wdXRfbWluX2R1cmF0aW9uIjoiVGhlIGR1cmF0aW9uIGNhbm5vdCBiZSBsZXNzIHRoYW4ge01JTl9EVVJBVElPTn0uIiwiZHVyYXRpb25faW5wdXRfbWF4X2R1cmF0aW9uIjoiVGhlIGR1cmF0aW9uIGNhbm5vdCBiZSBncmVhdGVyIHRoYW4ge01BWF9EVVJBVElPTn0uIiwiZHVyYXRpb25faW5wdXRfaW52YWxpZF9jaGFyYWN0ZXJzIjoiMC05IGFuZCA6IGFyZSB0aGUgb25seSBhY2NlcHRhYmxlIGlucHV0cy4iLCJjbG9zZSI6IkNsb3NlIiwiZXhwYW5kIjoiRXhwYW5kIiwibG9hZGluZyI6IkxvYWRpbmcuLi4iLCJ0b3AiOiJ0b3AiLCJhZHZhbmNlZF9zZWFyY2giOiJBZHZhbmNlZCBTZWFyY2giLCJub19zdWdnZXN0aW9ucyI6Ik5vIHN1Z2dlc3Rpb25zIiwicmVjZW50X3NlYXJjaGVzIjoiUmVjZW50IFNlYXJjaGVzIiwic2VhcmNoX2FsbCI6IlNlYXJjaCBBbGwgb2YgVmltZW8iLCJlbWFpbF9hbmRfcGFzc3dvcmQiOiJQbGVhc2UgZW50ZXIgeW91ciBlbWFpbCBhbmQgcGFzc3dvcmQiLCJlbWFpbF9hZGRyZXNzIjoiUGxlYXNlIGVudGVyIGEgdmFsaWQgZW1haWwgYWRkcmVzcyIsIm5hbWVfZW1haWxfYW5kX3Bhc3N3b3JkIjoiUGxlYXNlIGVudGVyIHlvdXIgbmFtZSwgZW1haWwsIGFuZCBwYXNzd29yZCIsInJlcXVpcmVkX2ZpZWxkIjoiVGhpcyBmaWVsZCBpcyByZXF1aXJlZC4ifTsKPC9zY3JpcHQ+CgogICAgPHNjcmlwdCBzcmM9Imh0dHBzOi8vZi52aW1lb2Nkbi5jb20vanNfb3B0L2dsb2JhbC9wbGF5ZXJfbWFuYWdlci5taW4uanM/NzE4YjEwZjUiPjwvc2NyaXB0PgogICAgPHNjcmlwdD4KICAgICAgICBpZiAodHlwZW9mIHBsYXllckFzc2V0VXJscyAhPT0gJ3VuZGVmaW5lZCcpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBsYXllck1hbmFnZXIucnVuKHBsYXllckFzc2V0VXJscyk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgPC9zY3JpcHQ+CgogICAgPHNjcmlwdCBzcmM9Imh0dHBzOi8vZi52aW1lb2Nkbi5jb20vanNfb3B0L3JlYWN0X3Byb2RfY29tYmluZWQubWluLmpzPzAzMTc3NWE0Ij48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJodHRwczovL2YudmltZW9jZG4uY29tL2pzX29wdC9nbG9iYWxfbGliX2NvbWJpbmVkLm1pbi5qcz83ZTUzNDc3YyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9mLnZpbWVvY2RuLmNvbS9qc19vcHQvZ2xvYmFsX2NvbWJpbmVkLm1pbi5qcz9hMzAyZTJjZiI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9mLnZpbWVvY2RuLmNvbS9qc19vcHQvc3RpY2t5X3RvcG5hdl9jb21iaW5lZC5taW4uanM/NWZmZDZkNGUiPjwvc2NyaXB0PgogICAgPHNjcmlwdCBzcmM9Imh0dHBzOi8vZi52aW1lb2Nkbi5jb20vanNfb3B0L3RvcG5hdl9jYXJ0X2J1dHRvbl9jb21iaW5lZC5taW4uanM/NDQ4OGMwOTIiPjwvc2NyaXB0PgoKICAgIDxzY3JpcHQgYXN5bmMgc3JjPSJodHRwczovL2YudmltZW9jZG4uY29tL2pzX29wdC9fYnVuZGxlcy9jcmVhdGVfZmFjZWJvb2tfaGVhZGVyLmJ1bmRsZS5taW4uanM/OTU0YzQ2MDAiPjwvc2NyaXB0PgogICAgPHNjcmlwdD4KICAgICAgICBmdW5jdGlvbiBvblZpbWVvRG9tUmVhZHkoZSkgewogICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF2aW1lby5ieXBhc3NfcGxheWVyX3Jlc3BvbnNpdmVfZGVsZWdhdGVzKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHZpbWVvLnBsYXllcl9yZXNwb25zaXZlX2RlbGVnYXRlcyA9IHZpbWVvLnBsYXllcl9yZXNwb25zaXZlX2RlbGVnYXRlcyB8fCB7fTsKICAgICAgICAgICAgICAgICAgICAgICAgdmltZW8ucGxheWVyX3Jlc3BvbnNpdmVfZGVsZWdhdGVzLndpbGxPcGVuU2hhcmVPdmVybGF5ID0gdmltZW8ucGxheWVyX3Jlc3BvbnNpdmVfZGVsZWdhdGVzLndpbGxPcGVuU2hhcmVPdmVybGF5IHx8IGZ1bmN0aW9uKGlkKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGxheWVyTWFuYWdlci5wYXVzZUFsbFBsYXllcnMoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aW1lby5zaGFyZS5Qb3B1cChpZCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfTsKCiAgICAgICAgICAgICAgICAgICAgICAgIHZpbWVvLnBsYXllcl9yZXNwb25zaXZlX2RlbGVnYXRlcy53aWxsT3BlbkxvZ2luRm9ybSA9IHZpbWVvLnBsYXllcl9yZXNwb25zaXZlX2RlbGVnYXRlcy53aWxsT3BlbkxvZ2luRm9ybSB8fCBmdW5jdGlvbihpZCwgY29udGV4dCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB2aW1lby5Nb2RhbCAhPT0gJ3VuZGVmaW5lZCcpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQbGF5ZXJNYW5hZ2VyLnBhdXNlQWxsUGxheWVycygpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29udGV4dCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aW1lby5TZXNzaW9uLmNyZWF0ZSh7IHBsYXllcjogMSwgY2xpcF9pZDogaWQsIGNvbnRleHQ6IGNvbnRleHQgfSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aW1lby5TZXNzaW9uLmNyZWF0ZSgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9OwoKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFBsYXllck1hbmFnZXIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBsYXllck1hbmFnZXIuc2V0RGVmYXVsdERlbGVnYXRlKHZpbWVvLnBsYXllcl9yZXNwb25zaXZlX2RlbGVnYXRlcyk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIGlmIChQbGF5ZXJNYW5hZ2VyKSB7CiAgICAgICAgICAgICAgICAgICAgUGxheWVyTWFuYWdlci5kaXNwYXRjaFJlYWR5U2lnbmFscygpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICQoZG9jdW1lbnQpLnJlYWR5KG9uVmltZW9Eb21SZWFkeSk7CiAgICAgICAgICAgIDwvc2NyaXB0PgoKCiAgICA8L2JvZHk+CjwvaHRtbD4K
149
- http_version:
150
- recorded_at: Tue, 27 Oct 2020 18:22:04 GMT
151
- recorded_with: VCR 3.0.3