video_info 2.7.1 → 3.0.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (246) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/unit_test.yml +42 -0
  3. data/Guardfile +1 -1
  4. data/README.md +8 -19
  5. data/lib/video_info/provider.rb +11 -2
  6. data/lib/video_info/providers/vimeo_api.rb +9 -3
  7. data/lib/video_info/providers/vimeo_scraper.rb +12 -2
  8. data/lib/video_info/providers/youtube.rb +8 -0
  9. data/lib/video_info/providers/youtube_api.rb +1 -2
  10. data/lib/video_info/providers/youtube_scraper.rb +43 -25
  11. data/lib/video_info/providers/youtubeplaylist_api.rb +15 -1
  12. data/lib/video_info/version.rb +1 -1
  13. data/lib/video_info.rb +3 -3
  14. data/tmp/rspec_guard_result +25 -0
  15. data/video_info.gemspec +5 -6
  16. metadata +16 -472
  17. data/.travis.yml +0 -21
  18. data/lib/video_info/providers/vkontakte.rb +0 -212
  19. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Dailymotion/_available_/with_invalid_video_url/_available_/1_2_2_1_1.yml +0 -93
  20. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Dailymotion/_available_/with_valid_video/_available_/1_2_1_1_1.yml +0 -96
  21. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Dailymotion/with_video_x7lni3/_author/1_3_7_1.yml +0 -100
  22. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Dailymotion/with_video_x7lni3/_author_thumbnail/1_3_9_1.yml +0 -100
  23. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Dailymotion/with_video_x7lni3/_author_url/1_3_8_1.yml +0 -100
  24. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Dailymotion/with_video_x7lni3/_date/should_show_correct_date.yml +0 -100
  25. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Dailymotion/with_video_x7lni3/_description/1_3_10_1.yml +0 -100
  26. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Dailymotion/with_video_x7lni3/_duration/1_3_12_1.yml +0 -100
  27. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Dailymotion/with_video_x7lni3/_keywords/1_3_11_1.yml +0 -100
  28. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Dailymotion/with_video_x7lni3/_thumbnail/1_3_19_1.yml +0 -100
  29. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Dailymotion/with_video_x7lni3/_thumbnail_large/1_3_18_1.yml +0 -100
  30. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Dailymotion/with_video_x7lni3/_thumbnail_medium/1_3_17_1.yml +0 -100
  31. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Dailymotion/with_video_x7lni3/_thumbnail_small/1_3_16_1.yml +0 -100
  32. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Dailymotion/with_video_x7lni3/_title/1_3_6_1.yml +0 -100
  33. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Dailymotion/with_video_x7lni3/_view_count/1_3_20_1.yml +0 -100
  34. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vimeo/_available_/with_password_required_video/_available_/1_2_3_1_1.yml +0 -150
  35. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vimeo/_available_/with_password_required_video/_available_/2_2_3_1_1.yml +0 -65
  36. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vimeo/_available_/with_this_video_does_not_exist_video/_available_/1_2_2_1_1.yml +0 -124
  37. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vimeo/_available_/with_this_video_does_not_exist_video/_available_/2_2_2_1_1.yml +0 -67
  38. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vimeo/_available_/with_valid_video/_available_/1_2_1_1_1.yml +0 -150
  39. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vimeo/_available_/with_valid_video/_available_/2_2_1_1_1.yml +0 -67
  40. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vimeo/with_unavailable_video/author/1_13_2_1.yml +0 -128
  41. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vimeo/with_unavailable_video/author_thumbnail/1_13_3_1.yml +0 -128
  42. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vimeo/with_unavailable_video/author_url/1_13_4_1.yml +0 -128
  43. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vimeo/with_unavailable_video/available_/1_13_1_1.yml +0 -128
  44. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vimeo/with_unavailable_video/date/1_13_7_1.yml +0 -128
  45. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vimeo/with_unavailable_video/description/1_13_6_1.yml +0 -128
  46. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vimeo/with_unavailable_video/duration/1_13_8_1.yml +0 -128
  47. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vimeo/with_unavailable_video/height/1_13_10_1.yml +0 -128
  48. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vimeo/with_unavailable_video/keywords/1_13_9_1.yml +0 -128
  49. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vimeo/with_unavailable_video/thumbnail_large/1_13_14_1.yml +0 -128
  50. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vimeo/with_unavailable_video/thumbnail_medium/1_13_13_1.yml +0 -128
  51. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vimeo/with_unavailable_video/thumbnail_small/1_13_12_1.yml +0 -128
  52. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vimeo/with_unavailable_video/title/1_13_5_1.yml +0 -128
  53. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vimeo/with_unavailable_video/view_count/1_13_15_1.yml +0 -128
  54. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vimeo/with_unavailable_video/width/1_13_11_1.yml +0 -128
  55. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vimeo/with_video_136971428/_author/1_3_18_1.yml +0 -150
  56. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vimeo/with_video_136971428/_author/2_3_18_1.yml +0 -79
  57. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vimeo/with_video_136971428/_author_thumbnail/1_3_17_1.yml +0 -150
  58. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vimeo/with_video_136971428/_author_thumbnail/2_3_17_1.yml +0 -79
  59. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vimeo/with_video_136971428/_author_url/1_3_19_1.yml +0 -150
  60. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vimeo/with_video_136971428/_author_url/2_3_19_1.yml +0 -79
  61. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vimeo/with_video_136971428/_date/should_have_correct_upload_date.yml +0 -226
  62. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vimeo/with_video_136971428/_description/1_3_7_1.yml +0 -150
  63. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vimeo/with_video_136971428/_description/2_3_7_1.yml +0 -79
  64. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vimeo/with_video_136971428/_duration/1_3_9_1.yml +0 -150
  65. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vimeo/with_video_136971428/_duration/2_3_9_1.yml +0 -79
  66. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vimeo/with_video_136971428/_height/1_3_11_1.yml +0 -150
  67. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vimeo/with_video_136971428/_height/2_3_11_1.yml +0 -79
  68. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vimeo/with_video_136971428/_keywords/should_return_a_string_list_of_keywords.yml +0 -226
  69. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vimeo/with_video_136971428/_thumbnail/1_3_16_1.yml +0 -222
  70. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vimeo/with_video_136971428/_thumbnail/2_3_16_1.yml +0 -79
  71. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vimeo/with_video_136971428/_thumbnail_large/1_3_15_1.yml +0 -222
  72. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vimeo/with_video_136971428/_thumbnail_large/2_3_15_1.yml +0 -79
  73. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vimeo/with_video_136971428/_thumbnail_medium/1_3_14_1.yml +0 -222
  74. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vimeo/with_video_136971428/_thumbnail_medium/2_3_14_1.yml +0 -79
  75. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vimeo/with_video_136971428/_thumbnail_small/1_3_13_1.yml +0 -222
  76. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vimeo/with_video_136971428/_thumbnail_small/2_3_13_1.yml +0 -79
  77. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vimeo/with_video_136971428/_title/1_3_6_1.yml +0 -150
  78. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vimeo/with_video_136971428/_title/2_3_6_1.yml +0 -79
  79. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vimeo/with_video_136971428/_view_count/1_3_20_1.yml +0 -150
  80. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vimeo/with_video_136971428/_view_count/2_3_20_1.yml +0 -79
  81. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vimeo/with_video_136971428/_width/1_3_10_1.yml +0 -150
  82. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vimeo/with_video_136971428/_width/2_3_10_1.yml +0 -79
  83. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vimeo/with_video_193970014/thumbnail/1_12_1_1.yml +0 -222
  84. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vimeo/with_video_193970014/thumbnail/2_12_1_1.yml +0 -75
  85. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vimeo/with_video_193970014/thumbnail_large/1_12_2_1.yml +0 -222
  86. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vimeo/with_video_193970014/thumbnail_large/2_12_2_1.yml +0 -75
  87. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vimeo/with_video_193970014/thumbnail_medium/1_12_3_1.yml +0 -222
  88. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vimeo/with_video_193970014/thumbnail_medium/2_12_3_1.yml +0 -75
  89. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vimeo/with_video_193970014/thumbnail_small/1_12_4_1.yml +0 -222
  90. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vimeo/with_video_193970014/thumbnail_small/2_12_4_1.yml +0 -75
  91. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vkontakte/_available_/with_hashes/available_/1_2_6_1_1.yml +0 -86
  92. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vkontakte/_available_/with_invalid_video/available_/1_2_2_1_1.yml +0 -50
  93. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vkontakte/_available_/with_private_video/available_/1_2_3_1_1.yml +0 -132
  94. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vkontakte/_available_/with_redirect/available_/1_2_4_1_1.yml +0 -134
  95. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vkontakte/_available_/with_redirect_to_main_page_for_auth/available_/1_2_5_1_1.yml +0 -85
  96. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vkontakte/_available_/with_valid_video/available_/1_2_1_1_1.yml +0 -87
  97. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vkontakte/with_video_from_kirill_lyanoi_z_video2152699_168591741_2F56fd229a9dfe2dcdbe/author/1_5_14_1.yml +0 -48
  98. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vkontakte/with_video_from_kirill_lyanoi_z_video2152699_168591741_2F56fd229a9dfe2dcdbe/author_thumbnail/1_5_15_1.yml +0 -48
  99. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vkontakte/with_video_from_kirill_lyanoi_z_video2152699_168591741_2F56fd229a9dfe2dcdbe/author_url/1_5_16_1.yml +0 -48
  100. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vkontakte/with_video_from_kirill_lyanoi_z_video2152699_168591741_2F56fd229a9dfe2dcdbe/description/1_5_8_1.yml +0 -48
  101. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vkontakte/with_video_from_kirill_lyanoi_z_video2152699_168591741_2F56fd229a9dfe2dcdbe/duration/1_5_10_1.yml +0 -48
  102. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vkontakte/with_video_from_kirill_lyanoi_z_video2152699_168591741_2F56fd229a9dfe2dcdbe/embed_code/1_5_6_1.yml +0 -48
  103. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vkontakte/with_video_from_kirill_lyanoi_z_video2152699_168591741_2F56fd229a9dfe2dcdbe/embed_url/1_5_5_1.yml +0 -48
  104. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vkontakte/with_video_from_kirill_lyanoi_z_video2152699_168591741_2F56fd229a9dfe2dcdbe/height/1_5_12_1.yml +0 -48
  105. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vkontakte/with_video_from_kirill_lyanoi_z_video2152699_168591741_2F56fd229a9dfe2dcdbe/thumbnail_small/1_5_18_1.yml +0 -48
  106. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vkontakte/with_video_from_kirill_lyanoi_z_video2152699_168591741_2F56fd229a9dfe2dcdbe/title/1_5_7_1.yml +0 -48
  107. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vkontakte/with_video_from_kirill_lyanoi_z_video2152699_168591741_2F56fd229a9dfe2dcdbe/view_count/1_5_13_1.yml +0 -48
  108. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vkontakte/with_video_from_kirill_lyanoi_z_video2152699_168591741_2F56fd229a9dfe2dcdbe/width/1_5_11_1.yml +0 -50
  109. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vkontakte/with_video_https_/vk_com/id44052340_z_video61291456_159590018_2F2521d92730a272a9ea/author/1_3_7_1.yml +0 -48
  110. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vkontakte/with_video_https_/vk_com/id44052340_z_video61291456_159590018_2F2521d92730a272a9ea/embed_code/1_3_6_1.yml +0 -48
  111. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vkontakte/with_video_https_/vk_com/id44052340_z_video61291456_159590018_2F2521d92730a272a9ea/embed_url/1_3_5_1.yml +0 -48
  112. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vkontakte/with_video_https_/vk_com/id44052340_z_video61291456_159590018_2F2521d92730a272a9ea/title/1_3_4_1.yml +0 -48
  113. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vkontakte/with_video_video-54799401_165822734/title/1_7_4_1.yml +0 -48
  114. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vkontakte/with_video_video3552522_171340713/embed_url/1_10_1_1.yml +0 -48
  115. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vkontakte/with_video_video39576223_161598544/description/1_6_8_1.yml +0 -48
  116. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vkontakte/with_video_video39576223_161598544/duration/1_6_10_1.yml +0 -48
  117. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vkontakte/with_video_video39576223_161598544/embed_code/1_6_6_1.yml +0 -48
  118. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vkontakte/with_video_video39576223_161598544/embed_url/1_6_5_1.yml +0 -48
  119. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vkontakte/with_video_video39576223_161598544/height/1_6_12_1.yml +0 -48
  120. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vkontakte/with_video_video39576223_161598544/title/1_6_7_1.yml +0 -48
  121. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vkontakte/with_video_video39576223_161598544/view_count/1_6_13_1.yml +0 -48
  122. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vkontakte/with_video_video39576223_161598544/width/1_6_11_1.yml +0 -48
  123. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vkontakte/with_video_videos43640822_/video43640822_168790809/author/1_4_5_1.yml +0 -48
  124. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vkontakte/with_video_videos43640822_/video43640822_168790809/author_thumbnail/1_4_6_1.yml +0 -48
  125. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vkontakte/with_video_videos43640822_/video43640822_168790809/author_url/1_4_7_1.yml +0 -48
  126. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vkontakte/with_video_videos43640822_/video43640822_168790809/title/1_4_4_1.yml +0 -48
  127. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Wistia/_available_/with_invalid_video/_available_/1_2_2_1_1.yml +0 -67
  128. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Wistia/_available_/with_valid_video/_available_/1_2_1_1_1.yml +0 -69
  129. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Wistia/with_video_pxonqr42is/_duration/1_4_7_1.yml +0 -77
  130. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Wistia/with_video_pxonqr42is/_height/1_4_9_1.yml +0 -77
  131. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Wistia/with_video_pxonqr42is/_thumbnail_large/1_4_12_1.yml +0 -77
  132. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Wistia/with_video_pxonqr42is/_thumbnail_medium/1_4_11_1.yml +0 -77
  133. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Wistia/with_video_pxonqr42is/_thumbnail_small/1_4_10_1.yml +0 -77
  134. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Wistia/with_video_pxonqr42is/_title/1_4_6_1.yml +0 -77
  135. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Wistia/with_video_pxonqr42is/_width/1_4_8_1.yml +0 -77
  136. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Wistia/with_video_rs1me54mpw/_duration/1_3_7_1.yml +0 -77
  137. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Wistia/with_video_rs1me54mpw/_height/1_3_9_1.yml +0 -77
  138. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Wistia/with_video_rs1me54mpw/_thumbnail/1_3_13_1.yml +0 -77
  139. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Wistia/with_video_rs1me54mpw/_thumbnail_large/1_3_12_1.yml +0 -77
  140. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Wistia/with_video_rs1me54mpw/_thumbnail_medium/1_3_11_1.yml +0 -77
  141. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Wistia/with_video_rs1me54mpw/_thumbnail_small/1_3_10_1.yml +0 -77
  142. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Wistia/with_video_rs1me54mpw/_title/1_3_6_1.yml +0 -77
  143. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Wistia/with_video_rs1me54mpw/_width/1_3_8_1.yml +0 -77
  144. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Youtube/_available_/foo/_available/1_2_2_1_1.yml +0 -1447
  145. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Youtube/_available_/foo/_available/2_2_2_1_1.yml +0 -156
  146. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Youtube/_available_/with_unavailable_video/_available_/1_2_2_1_1.yml +0 -481
  147. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Youtube/_available_/with_unavailable_video/_available_/1_2_3_1_1.yml +0 -485
  148. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Youtube/_available_/with_unavailable_video/_available_/2_2_2_1_1.yml +0 -54
  149. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Youtube/_available_/with_unavailable_video/_available_/2_2_3_1_1.yml +0 -54
  150. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Youtube/_available_/with_unavailable_video/_date/1_2_2_11_1.yml +0 -481
  151. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Youtube/_available_/with_unavailable_video/_date/1_2_3_11_1.yml +0 -481
  152. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Youtube/_available_/with_unavailable_video/_date/2_2_2_11_1.yml +0 -54
  153. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Youtube/_available_/with_unavailable_video/_date/2_2_3_11_1.yml +0 -54
  154. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Youtube/_available_/with_unavailable_video/_description/1_2_2_8_1.yml +0 -483
  155. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Youtube/_available_/with_unavailable_video/_description/1_2_3_8_1.yml +0 -483
  156. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Youtube/_available_/with_unavailable_video/_description/2_2_2_8_1.yml +0 -54
  157. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Youtube/_available_/with_unavailable_video/_description/2_2_3_8_1.yml +0 -54
  158. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Youtube/_available_/with_unavailable_video/_duration/1_2_2_10_1.yml +0 -485
  159. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Youtube/_available_/with_unavailable_video/_duration/1_2_3_10_1.yml +0 -484
  160. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Youtube/_available_/with_unavailable_video/_duration/2_2_2_10_1.yml +0 -54
  161. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Youtube/_available_/with_unavailable_video/_duration/2_2_3_10_1.yml +0 -54
  162. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Youtube/_available_/with_unavailable_video/_keywords/1_2_2_9_1.yml +0 -485
  163. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Youtube/_available_/with_unavailable_video/_keywords/1_2_3_9_1.yml +0 -484
  164. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Youtube/_available_/with_unavailable_video/_keywords/2_2_2_9_1.yml +0 -54
  165. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Youtube/_available_/with_unavailable_video/_keywords/2_2_3_9_1.yml +0 -54
  166. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Youtube/_available_/with_unavailable_video/_title/1_2_2_7_1.yml +0 -481
  167. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Youtube/_available_/with_unavailable_video/_title/1_2_3_7_1.yml +0 -484
  168. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Youtube/_available_/with_unavailable_video/_title/2_2_2_7_1.yml +0 -54
  169. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Youtube/_available_/with_unavailable_video/_title/2_2_3_7_1.yml +0 -54
  170. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Youtube/_available_/with_unavailable_video/_view_count/1_2_2_17_1.yml +0 -485
  171. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Youtube/_available_/with_unavailable_video/_view_count/1_2_3_17_1.yml +0 -485
  172. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Youtube/_available_/with_unavailable_video/_view_count/2_2_2_17_1.yml +0 -54
  173. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Youtube/_available_/with_unavailable_video/_view_count/2_2_3_17_1.yml +0 -54
  174. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Youtube/_available_/with_valid_video/_available_/1_2_1_1_1.yml +0 -56
  175. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Youtube/_available_/with_valid_video/_available_/2_2_1_1_1.yml +0 -125
  176. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Youtube/_available_/with_video_removed_because_of_copyright_claim/_available_/1_2_3_1_1.yml +0 -483
  177. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Youtube/_available_/with_video_removed_because_of_copyright_claim/_available_/1_2_4_1_1.yml +0 -484
  178. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Youtube/_available_/with_video_removed_because_of_copyright_claim/_available_/2_2_3_1_1.yml +0 -54
  179. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Youtube/_available_/with_video_removed_because_of_copyright_claim/_available_/2_2_4_1_1.yml +0 -54
  180. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Youtube/with_full_screen_video_URLs/_date/should_return_date_video_was_posted.yml +0 -178
  181. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Youtube/with_full_screen_video_URLs/_description/1_17_7_1.yml +0 -56
  182. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Youtube/with_full_screen_video_URLs/_description/2_17_7_1.yml +0 -125
  183. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Youtube/with_full_screen_video_URLs/_duration/1_17_9_1.yml +0 -56
  184. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Youtube/with_full_screen_video_URLs/_duration/2_17_9_1.yml +0 -125
  185. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Youtube/with_full_screen_video_URLs/_keywords/1_17_8_1.yml +0 -56
  186. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Youtube/with_full_screen_video_URLs/_keywords/2_17_8_1.yml +0 -125
  187. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Youtube/with_full_screen_video_URLs/_title/1_17_6_1.yml +0 -56
  188. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Youtube/with_full_screen_video_URLs/_title/2_17_6_1.yml +0 -125
  189. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Youtube/with_full_screen_video_URLs/_view_count/1_17_16_1.yml +0 -56
  190. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Youtube/with_full_screen_video_URLs/_view_count/2_17_16_1.yml +0 -125
  191. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Youtube/with_video_mZqGqE0D0n4/_author/1_3_6_1.yml +0 -56
  192. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Youtube/with_video_mZqGqE0D0n4/_author/2_3_6_1.yml +0 -125
  193. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Youtube/with_video_mZqGqE0D0n4/_author_thumbnail/1_3_7_1.yml +0 -56
  194. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Youtube/with_video_mZqGqE0D0n4/_author_thumbnail/2_3_7_1.yml +0 -208
  195. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Youtube/with_video_mZqGqE0D0n4/_author_url/1_3_8_1.yml +0 -56
  196. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Youtube/with_video_mZqGqE0D0n4/_author_url/2_3_8_1.yml +0 -208
  197. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Youtube/with_video_mZqGqE0D0n4/_date/should_return_date_video_was_posted.yml +0 -178
  198. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Youtube/with_video_mZqGqE0D0n4/_description/1_3_10_1.yml +0 -56
  199. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Youtube/with_video_mZqGqE0D0n4/_description/2_3_10_1.yml +0 -125
  200. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Youtube/with_video_mZqGqE0D0n4/_duration/1_3_12_1.yml +0 -56
  201. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Youtube/with_video_mZqGqE0D0n4/_duration/2_3_12_1.yml +0 -125
  202. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Youtube/with_video_mZqGqE0D0n4/_keywords/1_3_11_1.yml +0 -56
  203. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Youtube/with_video_mZqGqE0D0n4/_keywords/2_3_11_1.yml +0 -125
  204. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Youtube/with_video_mZqGqE0D0n4/_title/1_3_9_1.yml +0 -56
  205. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Youtube/with_video_mZqGqE0D0n4/_title/2_3_9_1.yml +0 -125
  206. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Youtube/with_video_mZqGqE0D0n4/_view_count/1_3_20_1.yml +0 -56
  207. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Youtube/with_video_mZqGqE0D0n4/_view_count/2_3_20_1.yml +0 -125
  208. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_YoutubePlaylist/_available_/with_invalid_playlist/_available_/1_2_2_1_1.yml +0 -60
  209. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_YoutubePlaylist/_available_/with_invalid_playlist/_available_/2_2_2_1_1.yml +0 -60
  210. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_YoutubePlaylist/_available_/with_list_url/_available_/1_2_3_1_1.yml +0 -94
  211. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_YoutubePlaylist/_available_/with_list_url/_available_/2_2_3_1_1.yml +0 -94
  212. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_YoutubePlaylist/_available_/with_valid_playlist/_available_/1_2_1_1_1.yml +0 -94
  213. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_YoutubePlaylist/_available_/with_valid_playlist/_available_/2_2_1_1_1.yml +0 -94
  214. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_YoutubePlaylist/with_playlist_PL9hW1uS6HUftLdHI6RIsaf/_author/1_3_19_1.yml +0 -105
  215. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_YoutubePlaylist/with_playlist_PL9hW1uS6HUftLdHI6RIsaf/_author/2_3_19_1.yml +0 -105
  216. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_YoutubePlaylist/with_playlist_PL9hW1uS6HUftLdHI6RIsaf/_author_thumbnail/1_3_20_1.yml +0 -189
  217. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_YoutubePlaylist/with_playlist_PL9hW1uS6HUftLdHI6RIsaf/_author_thumbnail/2_3_20_1.yml +0 -189
  218. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_YoutubePlaylist/with_playlist_PL9hW1uS6HUftLdHI6RIsaf/_author_url/1_3_21_1.yml +0 -189
  219. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_YoutubePlaylist/with_playlist_PL9hW1uS6HUftLdHI6RIsaf/_author_url/2_3_21_1.yml +0 -189
  220. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_YoutubePlaylist/with_playlist_PL9hW1uS6HUftLdHI6RIsaf/_description/1_3_7_1.yml +0 -105
  221. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_YoutubePlaylist/with_playlist_PL9hW1uS6HUftLdHI6RIsaf/_description/2_3_7_1.yml +0 -105
  222. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_YoutubePlaylist/with_playlist_PL9hW1uS6HUftLdHI6RIsaf/_keywords/1_3_8_1.yml +0 -105
  223. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_YoutubePlaylist/with_playlist_PL9hW1uS6HUftLdHI6RIsaf/_keywords/2_3_8_1.yml +0 -105
  224. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_YoutubePlaylist/with_playlist_PL9hW1uS6HUftLdHI6RIsaf/_thumbnail/1_3_16_1.yml +0 -105
  225. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_YoutubePlaylist/with_playlist_PL9hW1uS6HUftLdHI6RIsaf/_thumbnail/2_3_16_1.yml +0 -105
  226. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_YoutubePlaylist/with_playlist_PL9hW1uS6HUftLdHI6RIsaf/_thumbnail_large/1_3_15_1.yml +0 -105
  227. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_YoutubePlaylist/with_playlist_PL9hW1uS6HUftLdHI6RIsaf/_thumbnail_large/2_3_15_1.yml +0 -105
  228. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_YoutubePlaylist/with_playlist_PL9hW1uS6HUftLdHI6RIsaf/_thumbnail_medium/1_3_14_1.yml +0 -105
  229. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_YoutubePlaylist/with_playlist_PL9hW1uS6HUftLdHI6RIsaf/_thumbnail_medium/2_3_14_1.yml +0 -105
  230. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_YoutubePlaylist/with_playlist_PL9hW1uS6HUftLdHI6RIsaf/_thumbnail_small/1_3_13_1.yml +0 -105
  231. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_YoutubePlaylist/with_playlist_PL9hW1uS6HUftLdHI6RIsaf/_thumbnail_small/2_3_13_1.yml +0 -105
  232. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_YoutubePlaylist/with_playlist_PL9hW1uS6HUftLdHI6RIsaf/_title/1_3_6_1.yml +0 -105
  233. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_YoutubePlaylist/with_playlist_PL9hW1uS6HUftLdHI6RIsaf/_title/2_3_6_1.yml +0 -105
  234. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_YoutubePlaylist/with_playlist_PL9hW1uS6HUftLdHI6RIsaf/_videos/returns_list_of_videos_in_playlist.yml +0 -265
  235. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_YoutubePlaylist/with_playlist_that_does_not_exist_in_embed_path/_videos/1_4_2_1.yml +0 -54
  236. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_YoutubePlaylist/with_playlist_that_does_not_exist_in_embed_path/_videos/2_4_2_1.yml +0 -54
  237. data/spec/lib/video_info/provider_spec.rb +0 -80
  238. data/spec/lib/video_info/providers/dailymotion_spec.rb +0 -194
  239. data/spec/lib/video_info/providers/vimeo_spec.rb +0 -328
  240. data/spec/lib/video_info/providers/vkontakte_spec.rb +0 -236
  241. data/spec/lib/video_info/providers/wistia_spec.rb +0 -197
  242. data/spec/lib/video_info/providers/youtube_playlist_spec.rb +0 -236
  243. data/spec/lib/video_info/providers/youtube_scraper_spec.rb +0 -12
  244. data/spec/lib/video_info/providers/youtube_spec.rb +0 -575
  245. data/spec/lib/video_info_spec.rb +0 -106
  246. data/spec/spec_helper.rb +0 -26
@@ -1,150 +0,0 @@
1
- ---
2
- http_interactions:
3
- - request:
4
- method: head
5
- uri: https://vimeo.com/98605382
6
- body:
7
- encoding: US-ASCII
8
- string: ''
9
- headers:
10
- User-Agent:
11
- - VideoInfo/2.7
12
- Accept:
13
- - "*/*"
14
- response:
15
- status:
16
- code: 200
17
- message: OK
18
- headers:
19
- Server:
20
- - nginx
21
- Content-Type:
22
- - text/html; charset=UTF-8
23
- Expires:
24
- - Mon, 27 Mar 2017 22:23:34 GMT
25
- X-Ua-Compatible:
26
- - IE=edge
27
- X-Xss-Protection:
28
- - 1; mode=block
29
- X-Content-Type-Options:
30
- - nosniff
31
- X-Frame-Options:
32
- - sameorigin
33
- Strict-Transport-Security:
34
- - max-age=15552000; includeSubDomains; preload
35
- Content-Security-Policy-Report-Only:
36
- - 'default-src https: data: blob: ''unsafe-inline'' ''unsafe-eval''; report-uri
37
- /_csp'
38
- Via:
39
- - 1.1 varnish
40
- - 1.1 varnish
41
- - 1.1 varnish
42
- Cache-Control:
43
- - no-store, no-cache, must-revalidate, post-check=0, pre-check=0
44
- X-Varnish-Cache:
45
- - '1'
46
- X-Vserver:
47
- - dfvimeowebproxy2
48
- Fastly-Debug-Digest:
49
- - 51397d80d3af7e88eeca454b2a3f4a5d5f237a363fe1693b080b35bc045c8543
50
- Content-Length:
51
- - '74391'
52
- Accept-Ranges:
53
- - bytes
54
- Date:
55
- - Mon, 27 Mar 2017 21:00:50 GMT
56
- Age:
57
- - '0'
58
- Connection:
59
- - keep-alive
60
- X-Served-By:
61
- - cache-iad2131-IAD, cache-lax8645-LAX
62
- X-Cache:
63
- - MISS, MISS
64
- X-Cache-Hits:
65
- - 0, 0
66
- X-Timer:
67
- - S1490648450.022246,VS0,VE85
68
- Vary:
69
- - User-Agent,Accept-Encoding
70
- body:
71
- encoding: UTF-8
72
- string: ''
73
- http_version:
74
- recorded_at: Mon, 27 Mar 2017 21:00:50 GMT
75
- - request:
76
- method: get
77
- uri: https://vimeo.com/98605382
78
- body:
79
- encoding: US-ASCII
80
- string: ''
81
- headers:
82
- Accept-Encoding:
83
- - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
84
- Accept:
85
- - "*/*"
86
- User-Agent:
87
- - Ruby
88
- response:
89
- status:
90
- code: 200
91
- message: OK
92
- headers:
93
- Server:
94
- - nginx
95
- Content-Type:
96
- - text/html; charset=UTF-8
97
- Expires:
98
- - Mon, 27 Mar 2017 22:23:34 GMT
99
- X-Ua-Compatible:
100
- - IE=edge
101
- X-Xss-Protection:
102
- - 1; mode=block
103
- X-Content-Type-Options:
104
- - nosniff
105
- X-Frame-Options:
106
- - sameorigin
107
- Strict-Transport-Security:
108
- - max-age=15552000; includeSubDomains; preload
109
- Content-Security-Policy-Report-Only:
110
- - 'default-src https: data: blob: ''unsafe-inline'' ''unsafe-eval''; report-uri
111
- /_csp'
112
- Via:
113
- - 1.1 varnish
114
- - 1.1 varnish
115
- - 1.1 varnish
116
- Cache-Control:
117
- - no-store, no-cache, must-revalidate, post-check=0, pre-check=0
118
- X-Varnish-Cache:
119
- - '1'
120
- X-Vserver:
121
- - dfvimeowebproxy2
122
- Fastly-Debug-Digest:
123
- - 51397d80d3af7e88eeca454b2a3f4a5d5f237a363fe1693b080b35bc045c8543
124
- Content-Length:
125
- - '24808'
126
- Accept-Ranges:
127
- - bytes
128
- Date:
129
- - Mon, 27 Mar 2017 21:00:50 GMT
130
- Age:
131
- - '0'
132
- Connection:
133
- - keep-alive
134
- X-Served-By:
135
- - cache-iad2124-IAD, cache-lax8642-LAX
136
- X-Cache:
137
- - MISS, MISS
138
- X-Cache-Hits:
139
- - 0, 0
140
- X-Timer:
141
- - S1490648450.138287,VS0,VE93
142
- Vary:
143
- - User-Agent,Accept-Encoding
144
- body:
145
- encoding: ASCII-8BIT
146
- string: !binary |-
147
- PCFET0NUWVBFIGh0bWw+CjxodG1sIGxhbmc9ImVuIj4KIDxoZWFkPgogPG1ldGEgY2hhcnNldD0idXRmLTgiPgoKCiAgPG1ldGEgbmFtZT0idmlld3BvcnQiIGNvbnRlbnQ9IndpZHRoPWRldmljZS13aWR0aCxpbml0aWFsLXNjYWxlPTEuMCxtYXhpbXVtLXNjYWxlPTEuMCx1c2VyLXNjYWxhYmxlPW5vIj4KIAo8bGluayByZWw9InByZWNvbm5lY3QiIGhyZWY9Ii8vcGxheWVyLnZpbWVvLmNvbSI+CjxsaW5rIHJlbD0icHJlY29ubmVjdCIgaHJlZj0iLy9pLnZpbWVvY2RuLmNvbSI+CjxsaW5rIHJlbD0icHJlY29ubmVjdCIgaHJlZj0iLy9mLnZpbWVvY2RuLmNvbSI+CjxtZXRhIHByb3BlcnR5PSJmYjphcHBfaWQiIGNvbnRlbnQ9IjE5ODg0MDI4OTYzIj4KCiAgIDxtZXRhIHByb3BlcnR5PSJvZzpzaXRlX25hbWUiIGNvbnRlbnQ9IlZpbWVvIj4KICAgIDxtZXRhIHByb3BlcnR5PSJvZzp1cmwiIGNvbnRlbnQ9Imh0dHBzOi8vdmltZW8uY29tLzk4NjA1MzgyIj4KICAgIDxtZXRhIHByb3BlcnR5PSJvZzp0eXBlIiBjb250ZW50PSJhcnRpY2xlIj4KICAgIDxtZXRhIHByb3BlcnR5PSJvZzp0aXRsZSIgY29udGVudD0iRGVhZmhlYXZlbiAtIFRoZSBQZWNhbiBUcmVlIChMaXZlKSI+CiAgICA8bWV0YSBwcm9wZXJ0eT0ib2c6ZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlRoaXMgdmlkZW8gdGFrZW4gbGl2ZSBmcm9tIERlYWZoZWF2ZW4gbGl2ZSBpbiBKYWthcnRhIG9uIE1heSA4dGggMjAxNCBhdCBUaGUgQmFzZW1lbnQgQ2FmZSwgS2VtYW5nIFJheWEsIEpha2FydGEuICBEZWFmaGVhdmVuIGlzIGFuIEFtZXJpY2FuIHBvc3QtYmxhY2sgbWV0YWwgYmFuZCZoZWxsaXA7Ij4KICAgIDxtZXRhIHByb3BlcnR5PSJvZzp1cGRhdGVkX3RpbWUiIGNvbnRlbnQ9IjIwMTYtMTEtMjVUMDU6MTA6MTctMDU6MDAiPgogICAgPG1ldGEgcHJvcGVydHk9Im9nOmltYWdlIiBjb250ZW50PSJodHRwczovL2kudmltZW9jZG4uY29tL2ZpbHRlci9vdmVybGF5P3NyYzA9aHR0cHMlM0ElMkYlMkZpLnZpbWVvY2RuLmNvbSUyRnZpZGVvJTJGNDc5Mzk5OTI3XzEyODB4NzIwLmpwZyZzcmMxPWh0dHBzJTNBJTJGJTJGZi52aW1lb2Nkbi5jb20lMkZpbWFnZXNfdjYlMkZzaGFyZSUyRnBsYXlfaWNvbl9vdmVybGF5LnBuZyI+CiAgICA8bWV0YSBwcm9wZXJ0eT0ib2c6aW1hZ2U6c2VjdXJlX3VybCIgY29udGVudD0iaHR0cHM6Ly9pLnZpbWVvY2RuLmNvbS9maWx0ZXIvb3ZlcmxheT9zcmMwPWh0dHBzJTNBJTJGJTJGaS52aW1lb2Nkbi5jb20lMkZ2aWRlbyUyRjQ3OTM5OTkyN18xMjgweDcyMC5qcGcmc3JjMT1odHRwcyUzQSUyRiUyRmYudmltZW9jZG4uY29tJTJGaW1hZ2VzX3Y2JTJGc2hhcmUlMkZwbGF5X2ljb25fb3ZlcmxheS5wbmciPgogICAgPG1ldGEgcHJvcGVydHk9Im9nOmltYWdlOnR5cGUiIGNvbnRlbnQ9ImltYWdlL2pwZyI+CiAgICA8bWV0YSBwcm9wZXJ0eT0ib2c6aW1hZ2U6d2lkdGgiIGNvbnRlbnQ9IjEyODAiPgogICAgPG1ldGEgcHJvcGVydHk9Im9nOmltYWdlOmhlaWdodCIgY29udGVudD0iNzIwIj4KICAgIDxtZXRhIHByb3BlcnR5PSJhbDppb3M6YXBwX25hbWUiIGNvbnRlbnQ9IlZpbWVvIj4KICAgIDxtZXRhIHByb3BlcnR5PSJhbDppb3M6YXBwX3N0b3JlX2lkIiBjb250ZW50PSI0MjUxOTQ3NTkiPgogICAgPG1ldGEgcHJvcGVydHk9ImFsOmlvczp1cmwiIGNvbnRlbnQ9InZpbWVvOi8vYXBwLnZpbWVvLmNvbS92aWRlb3MvOTg2MDUzODIiPgogICAgPG1ldGEgcHJvcGVydHk9ImFsOmFuZHJvaWQ6YXBwX25hbWUiIGNvbnRlbnQ9IlZpbWVvIj4KICAgIDxtZXRhIHByb3BlcnR5PSJhbDphbmRyb2lkOnBhY2thZ2UiIGNvbnRlbnQ9ImNvbS52aW1lby5hbmRyb2lkLnZpZGVvYXBwIj4KICAgIDxtZXRhIHByb3BlcnR5PSJhbDphbmRyb2lkOnVybCIgY29udGVudD0idmltZW86Ly9hcHAudmltZW8uY29tL3ZpZGVvcy85ODYwNTM4MiI+CiAgICA8bWV0YSBwcm9wZXJ0eT0iYWw6d2ViOnNob3VsZF9mYWxsYmFjayIgY29udGVudD0idHJ1ZSI+CiAgICA8bWV0YSBwcm9wZXJ0eT0iYXJ0aWNsZTp0YWciIGNvbnRlbnQ9IkRlYWZoZWF2ZW4iPgogICAgPG1ldGEgcHJvcGVydHk9ImFydGljbGU6dGFnIiBjb250ZW50PSJEZWF0aHdpc2giPgogICAgPG1ldGEgcHJvcGVydHk9ImFydGljbGU6dGFnIiBjb250ZW50PSJEZWF0aHdpc2hpbmMiPgogICAgPG1ldGEgcHJvcGVydHk9ImFydGljbGU6dGFnIiBjb250ZW50PSJUb3VyIj4KICAgIDxtZXRhIHByb3BlcnR5PSJhcnRpY2xlOnRhZyIgY29udGVudD0iTGl2ZSI+CiAgICA8bWV0YSBwcm9wZXJ0eT0iYXJ0aWNsZTp0YWciIGNvbnRlbnQ9Ikpha2FydGEiPgogICAgPG1ldGEgcHJvcGVydHk9ImFydGljbGU6dGFnIiBjb250ZW50PSJJbmRvbmVzaWEiPgogICAgPG1ldGEgcHJvcGVydHk9ImFydGljbGU6dGFnIiBjb250ZW50PSJwb3N0LWJsYWNrIG1ldGFsIj4KICAgIDxtZXRhIHByb3BlcnR5PSJhcnRpY2xlOnRhZyIgY29udGVudD0iQmFuZCI+CiAgICA8bWV0YSBwcm9wZXJ0eT0iYXJ0aWNsZTp0YWciIGNvbnRlbnQ9IkFtZXJpY2EiPgogICAgPG1ldGEgcHJvcGVydHk9ImFydGljbGU6dGFnIiBjb250ZW50PSIyMDE0Ij4KICAgIDxtZXRhIHByb3BlcnR5PSJhcnRpY2xlOnRhZyIgY29udGVudD0iVmltZW8gU3RhZmYiPgogICAgPG1ldGEgcHJvcGVydHk9ImFydGljbGU6dGFnIiBjb250ZW50PSJWaW1lbyI+CiAgCiAgPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlRoaXMgdmlkZW8gdGFrZW4gbGl2ZSBmcm9tIERlYWZoZWF2ZW4gbGl2ZSBpbiBKYWthcnRhIG9uIE1heSA4dGggMjAxNCBhdCBUaGUgQmFzZW1lbnQgQ2FmZSwgS2VtYW5nIFJheWEsIEpha2FydGEuICBEZWFmaGVhdmVuIGlzIGFuIEFtZXJpY2FuIHBvc3QtYmxhY2sgbWV0YWwgYmFuZCZoZWxsaXA7Ij4KICA8bWV0YSBuYW1lPSJ0d2l0dGVyOmNhcmQiIGNvbnRlbnQ9InBsYXllciI+CiAgPG1ldGEgbmFtZT0idHdpdHRlcjpzaXRlIiBjb250ZW50PSJAdmltZW8iPgogIDxtZXRhIG5hbWU9InR3aXR0ZXI6dGl0bGUiIGNvbnRlbnQ9IkRlYWZoZWF2ZW4gLSBUaGUgUGVjYW4gVHJlZSAoTGl2ZSkiPgogIDxtZXRhIG5hbWU9InR3aXR0ZXI6ZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlRoaXMgdmlkZW8gdGFrZW4gbGl2ZSBmcm9tIERlYWZoZWF2ZW4gbGl2ZSBpbiBKYWthcnRhIG9uIE1heSA4dGggMjAxNCBhdCBUaGUgQmFzZW1lbnQgQ2FmZSwgS2VtYW5nIFJheWEsIEpha2FydGEuICBEZWFmaGVhdmVuIGlzIGFuIEFtZXJpY2FuIHBvc3QtYmxhY2sgbWV0YWwgYmFuZCZoZWxsaXA7Ij4KICA8bWV0YSBuYW1lPSJ0d2l0dGVyOmltYWdlIiBjb250ZW50PSJodHRwczovL2kudmltZW9jZG4uY29tL2ZpbHRlci9vdmVybGF5P3NyYzA9aHR0cHMlM0ElMkYlMkZpLnZpbWVvY2RuLmNvbSUyRnZpZGVvJTJGNDc5Mzk5OTI3XzEyODB4NzIwLmpwZyZhbXA7c3JjMT1odHRwcyUzQSUyRiUyRmYudmltZW9jZG4uY29tJTJGaW1hZ2VzX3Y2JTJGc2hhcmUlMkZwbGF5X2ljb25fb3ZlcmxheS5wbmciPgogIDxtZXRhIG5hbWU9InR3aXR0ZXI6cGxheWVyIiBjb250ZW50PSJodHRwczovL3BsYXllci52aW1lby5jb20vdmlkZW8vOTg2MDUzODIiPgogIDxtZXRhIG5hbWU9InR3aXR0ZXI6cGxheWVyOndpZHRoIiBjb250ZW50PSIxMjgwIj4KICA8bWV0YSBuYW1lPSJ0d2l0dGVyOnBsYXllcjpoZWlnaHQiIGNvbnRlbnQ9IjcyMCI+CiAgPG1ldGEgbmFtZT0idHdpdHRlcjpzaXRlIiBjb250ZW50PSJAdmltZW8iPgogIDxtZXRhIG5hbWU9InR3aXR0ZXI6YXBwOm5hbWU6aXBob25lIiBjb250ZW50PSJWaW1lbyI+CiAgPG1ldGEgbmFtZT0idHdpdHRlcjphcHA6aWQ6aXBob25lIiBjb250ZW50PSI0MjUxOTQ3NTkiPgogIDxtZXRhIG5hbWU9InR3aXR0ZXI6YXBwOnVybDppcGhvbmUiIGNvbnRlbnQ9InZpbWVvOi8vYXBwLnZpbWVvLmNvbS92aWRlb3MvOTg2MDUzODIiPgogIDxtZXRhIG5hbWU9InR3aXR0ZXI6YXBwOm5hbWU6aXBhZCIgY29udGVudD0iVmltZW8iPgogIDxtZXRhIG5hbWU9InR3aXR0ZXI6YXBwOmlkOmlwYWQiIGNvbnRlbnQ9IjQyNTE5NDc1OSI+CiAgPG1ldGEgbmFtZT0idHdpdHRlcjphcHA6dXJsOmlwYWQiIGNvbnRlbnQ9InZpbWVvOi8vYXBwLnZpbWVvLmNvbS92aWRlb3MvOTg2MDUzODIiPgogIDxtZXRhIG5hbWU9InR3aXR0ZXI6YXBwOm5hbWU6Z29vZ2xlcGxheSIgY29udGVudD0iVmltZW8iPgogIDxtZXRhIG5hbWU9InR3aXR0ZXI6YXBwOmlkOmdvb2dsZXBsYXkiIGNvbnRlbnQ9ImNvbS52aW1lby5hbmRyb2lkLnZpZGVvYXBwIj4KICA8bWV0YSBuYW1lPSJ0d2l0dGVyOmFwcDp1cmw6Z29vZ2xlcGxheSIgY29udGVudD0idmltZW86Ly9hcHAudmltZW8uY29tL3ZpZGVvcy85ODYwNTM4MiI+CiAgPG1ldGEgbmFtZT0idHdpdHRlcjpjcmVhdG9yIiBjb250ZW50PSJtZWdhbGF1bWFuIj4KICA8bWV0YSBuYW1lPSJ0d2l0dGVyOmNyZWF0b3I6aWQiIGNvbnRlbnQ9IjExMzU4MzM0NiI+CgoKCgogPGxpbmsgPgogPGxpbmsgPgogPGxpbmsgcmVsPSJhbHRlcm5hdGUiIGhyZWY9Imh0dHBzOi8vdmltZW8uY29tL2FwaS9vZW1iZWQuanNvbj91cmw9aHR0cHMlM0ElMkYlMkZ2aW1lby5jb20lMkY5ODYwNTM4MiIgdHlwZT0iYXBwbGljYXRpb24vanNvbitvZW1iZWQiIHRpdGxlPSJEZWFmaGVhdmVuIC0gVGhlIFBlY2FuIFRyZWUgKExpdmUpIj4KIDxsaW5rIHJlbD0iYWx0ZXJuYXRlIiBocmVmPSJodHRwczovL3ZpbWVvLmNvbS9hcGkvb2VtYmVkLnhtbD91cmw9aHR0cHMlM0ElMkYlMkZ2aW1lby5jb20lMkY5ODYwNTM4MiIgdHlwZT0idGV4dC94bWwrb2VtYmVkIiB0aXRsZT0iRGVhZmhlYXZlbiAtIFRoZSBQZWNhbiBUcmVlIChMaXZlKSI+CiA8bGluayByZWw9InBpbmdiYWNrIiBocmVmPSJodHRwczovL3ZpbWVvLmNvbS9fcGluZ2JhY2siPgogPGxpbmsgYWJvdXQ9Imh0dHBzOi8vaS52aW1lb2Nkbi5jb20vZmlsdGVyL292ZXJsYXk/c3JjMD1odHRwcyUzQSUyRiUyRmkudmltZW9jZG4uY29tJTJGdmlkZW8lMkY0NzkzOTk5MjdfMTI4MHg3MjAuanBnJmFtcDtzcmMxPWh0dHBzJTNBJTJGJTJGZi52aW1lb2Nkbi5jb20lMkZpbWFnZXNfdjYlMkZzaGFyZSUyRnBsYXlfaWNvbl9vdmVybGF5LnBuZyIgcmVsPSJsaWNlbnNlIiBocmVmPSJodHRwczovL2NyZWF0aXZlY29tbW9ucy5vcmcvbGljZW5zZXMvYnkvMy4wLyI+CiA8bGluayByZWw9ImNhbm9uaWNhbCIgaHJlZj0iLzk4NjA1MzgyIj4KCiA8bGluayByZWw9ImFwcGxlLXRvdWNoLWljb24tcHJlY29tcG9zZWQiIGhyZWY9Imh0dHBzOi8vaS52aW1lb2Nkbi5jb20vZmF2aWNvbi9tYWluLXRvdWNoXzE4MCI+Cgo8bGluayByZWw9Im1hc2staWNvbiIgaHJlZj0iaHR0cHM6Ly9mLnZpbWVvY2RuLmNvbS9zdmcvbGVnYWN5X3ZpZXdfc3VwcG9ydC9pcmlzX2ljb25fdl82NC5zdmciIGNvbG9yPSIjMTcyNzJlIj4KPGxpbmsgcmVsPSJzaG9ydGN1dCBpY29uIiBocmVmPSJodHRwczovL2YudmltZW9jZG4uY29tL2ltYWdlc192Ni9mYXZpY29uLmljbyIgZGF0YS1wbGF5PSJodHRwczovL2kudmltZW9jZG4uY29tL2Zhdmljb24vcGxheV8zMiIgZGF0YS1wYXVzZT0iaHR0cHM6Ly9pLnZpbWVvY2RuLmNvbS9mYXZpY29uL3BhdXNlXzMyIj4KCjxtZXRhIG5hbWU9Im1zYXBwbGljYXRpb24tVGlsZUltYWdlIiBjb250ZW50PSJodHRwczovL2kudmltZW9jZG4uY29tL2Zhdmljb24vbWFpbi10b3VjaF8xNDQiPgo8bWV0YSBuYW1lPSJtc2FwcGxpY2F0aW9uLVRpbGVDb2xvciIgY29udGVudD0iIzAwYWRlZiI+Cgo8bGluayByZWw9InNlYXJjaCIgdHlwZT0iYXBwbGljYXRpb24vb3BlbnNlYXJjaGRlc2NyaXB0aW9uK3htbCIgaHJlZj0iL3NlYXJjaC9vcGVuc2VhcmNoLnhtbCIgdGl0bGU9IlZpbWVvIHNlYXJjaCI+CjxsaW5rIHJlbD0ibG9nbyIgdHlwZT0iaW1hZ2Uvc3ZnIiBocmVmPSJodHRwczovL2YudmltZW9jZG4uY29tL2xvZ28uc3ZnIj4KIDx0aXRsZT5EZWFmaGVhdmVuIC0gVGhlIFBlY2FuIFRyZWUgKExpdmUpIG9uIFZpbWVvPC90aXRsZT4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly9mLnZpbWVvY2RuLmNvbS9zdHlsZXMvY3NzX29wdC9nbG9iYWwvaWNvbl9mb250cy5taW4uY3NzP0RFViI+CgogPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL2YudmltZW9jZG4uY29tL3N0eWxlcy9jc3Nfb3B0L2NsaXBfYmV0YV9jb21iaW5lZC5taW4uY3NzP2VhNTM4NjNiIj4KCgoKIDxzY3JpcHQ+CiAgCiAgdmFyIHBsYXllckFzc2V0VXJscyA9IHsianMiOiJodHRwczpcL1wvZi52aW1lb2Nkbi5jb21cL3BcLzIuNTMuMTBcL2pzXC9wbGF5ZXIuanMiLCJtb29nIjoiaHR0cHM6XC9cL2YudmltZW9jZG4uY29tXC9wXC9mbGFzaFwvbW9vZ2Fsb29wXC82LjQuNVwvbW9vZ2Fsb29wLnN3ZiIsImNocm9tZWxlc3NfY3NzIjoiaHR0cHM6XC9cL2YudmltZW9jZG4uY29tXC9wXC8yLjUzLjEwXC9jc3NcL2Nocm9tZWxlc3MuY3NzIiwiY2hyb21lbGVzc19qcyI6Imh0dHBzOlwvXC9mLnZpbWVvY2RuLmNvbVwvcFwvMi41My4xMFwvanNcL2Nocm9tZWxlc3MuanMiLCJtb29nX2pzIjoiaHR0cHM6XC9cL2YudmltZW9jZG4uY29tXC9wXC8yLjUzLjEwXC9qc1wvbW9vZ2Fsb29wLmpzIiwiY3NzIjoiaHR0cHM6XC9cL2YudmltZW9jZG4uY29tXC9wXC8yLjUzLjEwXC9jc3NcL3BsYXllci5jc3MiLCJwbGF5ZXJfdXJsIjoicGxheWVyLnZpbWVvLmNvbSJ9OwoKICB2YXIgX2V4dGVuZCA9IGZ1bmN0aW9uKCl7Zm9yKHZhciByPWFyZ3VtZW50c1swXSxuPTEsZT1hcmd1bWVudHMubGVuZ3RoO2U+bjtuKyspe3ZhciB0PWFyZ3VtZW50c1tuXTtmb3IodmFyIGEgaW4gdCl0Lmhhc093blByb3BlcnR5KGEpJiYoclthXT10W2FdKX1yZXR1cm4gcn07CgogIHdpbmRvdyA9IF9leHRlbmQod2luZG93LCB7InZpbWVvX2VzaSI6eyJjb25maWciOnsiYXV0b2NvbXBsZXRlX2VuYWJsZWQiOnRydWV9fSwiZ2xvYmFsX25vdGlmaWNhdGlvbnMiOltdfSk7Cjwvc2NyaXB0PgoKIDxzdHlsZSBpZD0iZXNpX3JpYmJvbiI+CiAuZXNpX3JpYmJvbiB7CiBiYWNrZ3JvdW5kOiB1cmwoZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJTNDc3ZnJTIweG1sbnMlM0QlMjJodHRwJTNBJTJGJTJGd3d3LnczLm9yZyUyRjIwMDAlMkZzdmclMjIlMjB3aWR0aCUzRCUyMjUwMCUyMiUzRSUzQ3JlY3QlMjB4JTNEJTIyMCUyMiUyMHdpZHRoJTNEJTIyMjglMjIlMjBoZWlnaHQlM0QlMjIxMDAlMjUlMjIlMjBzdHlsZSUzRCUyMmZpbGwlM0ElMjMyOGExZDglMjIlMkYlM0UlM0NyZWN0JTIweCUzRCUyMjI4JTIyJTIwd2lkdGglM0QlMjI3NyUyMiUyMGhlaWdodCUzRCUyMjEwMCUyNSUyMiUyMHN0eWxlJTNEJTIyZmlsbCUzQSUyMzI0OGJjNyUyMiUyRiUzRSUzQ3JlY3QlMjB4JTNEJTIyMTA1JTIyJTIwd2lkdGglM0QlMjIxNiUyMiUyMGhlaWdodCUzRCUyMjEwMCUyNSUyMiUyMHN0eWxlJTNEJTIyZmlsbCUzQSUyMzFlMzk1NSUyMiUyRiUzRSUzQ3JlY3QlMjB4JTNEJTIyMTIxJTIyJTIwd2lkdGglM0QlMjI2JTIyJTIwaGVpZ2h0JTNEJTIyMTAwJTI1JTIyJTIwc3R5bGUlM0QlMjJmaWxsJTNBJTIzMmY1MTMyJTIyJTJGJTNFJTNDcmVjdCUyMHglM0QlMjIxMjclMjIlMjB3aWR0aCUzRCUyMjMlMjIlMjBoZWlnaHQlM0QlMjIxMDAlMjUlMjIlMjBzdHlsZSUzRCUyMmZpbGwlM0ElMjM0MTY4MjglMjIlMkYlM0UlM0NyZWN0JTIweCUzRCUyMjEzMCUyMiUyMHdpZHRoJTNEJTIyMTc3JTIyJTIwaGVpZ2h0JTNEJTIyMTAwJTI1JTIyJTIwc3R5bGUlM0QlMjJmaWxsJTNBJTIzN2VhYTI5JTIyJTJGJTNFJTNDcmVjdCUyMHglM0QlMjIzMDclMjIlMjB3aWR0aCUzRCUyMjMyJTIyJTIwaGVpZ2h0JTNEJTIyMTAwJTI1JTIyJTIwc3R5bGUlM0QlMjJmaWxsJTNBJTIzZGNiZDQyJTIyJTJGJTNFJTNDcmVjdCUyMHglM0QlMjIzMzklMjIlMjB3aWR0aCUzRCUyMjEwJTIyJTIwaGVpZ2h0JTNEJTIyMTAwJTI1JTIyJTIwc3R5bGUlM0QlMjJmaWxsJTNBJTIzZGNhZDI3JTIyJTJGJTNFJTNDcmVjdCUyMHglM0QlMjIzNDklMjIlMjB3aWR0aCUzRCUyMjE4JTIyJTIwaGVpZ2h0JTNEJTIyMTAwJTI1JTIyJTIwc3R5bGUlM0QlMjJmaWxsJTNBJTIzZTM5YTIzJTIyJTJGJTNFJTNDcmVjdCUyMHglM0QlMjIzNjclMjIlMjB3aWR0aCUzRCUyMjQzJTIyJTIwaGVpZ2h0JTNEJTIyMTAwJTI1JTIyJTIwc3R5bGUlM0QlMjJmaWxsJTNBJTIzY2M1NTRjJTIyJTJGJTNFJTNDcmVjdCUyMHglM0QlMjI0MTAlMjIlMjB3aWR0aCUzRCUyMjExJTIyJTIwaGVpZ2h0JTNEJTIyMTAwJTI1JTIyJTIwc3R5bGUlM0QlMjJmaWxsJTNBJTIzY2E0NzNmJTIyJTJGJTNFJTNDcmVjdCUyMHglM0QlMjI0MjElMjIlMjB3aWR0aCUzRCUyMjIyJTIyJTIwaGVpZ2h0JTNEJTIyMTAwJTI1JTIyJTIwc3R5bGUlM0QlMjJmaWxsJTNBJTIzYTcyODM0JTIyJTJGJTNFJTNDcmVjdCUyMHglM0QlMjI0NDMlMjIlMjB3aWR0aCUzRCUyMjM1JTIyJTIwaGVpZ2h0JTNEJTIyMTAwJTI1JTIyJTIwc3R5bGUlM0QlMjJmaWxsJTNBJTIzNzM1Njc1JTIyJTJGJTNFJTNDcmVjdCUyMHglM0QlMjI0NzglMjIlMjB3aWR0aCUzRCUyMjE4JTIyJTIwaGVpZ2h0JTNEJTIyMTAwJTI1JTIyJTIwc3R5bGUlM0QlMjJmaWxsJTNBJTIzNjUzZTY2JTIyJTJGJTNFJTNDcmVjdCUyMHglM0QlMjI0OTYlMjIlMjB3aWR0aCUzRCUyMjQlMjIlMjBoZWlnaHQlM0QlMjIxMDAlMjUlMjIlMjBzdHlsZSUzRCUyMmZpbGwlM0ElMjMzYjMxNWIlMjIlMkYlM0UlM0MlMkZzdmclM0UlMEEpIHRvcCBsZWZ0LzUwMHB4IDEwMCUgcmVwZWF0LXggIWltcG9ydGFudDsKIH0KIDwvc3R5bGU+CiAKIDxzY3JpcHQ+CiB2YXIgYWJsaW5jb2xuX2NvbmZpZyA9IGFibGluY29sbl9jb25maWcgfHwge307CiBhYmxpbmNvbG5fY29uZmlnLnRlc3RzID0geyJERlBBZENvaG9ydHMiOnsiaWQiOjY5LCJuYW1lIjoiREZQQWRDb2hvcnRzIiwiYnVja2V0cyI6MTAwMCwiaW5wdXQiOiJ2dWlkIiwidXJsIjpudWxsLCJleHBlcmltZW50cyI6W119LCJFeHBsb3JlIjp7ImlkIjo2NCwibmFtZSI6IkV4cGxvcmUiLCJidWNrZXRzIjoxMDAwLCJpbnB1dCI6InZ1aWQiLCJ1cmwiOiJcLyIsImV4cGVyaW1lbnRzIjpbXX0sIlRvcE5hdkFCIjp7ImlkIjo2NywibmFtZSI6IlRvcE5hdkFCIiwiYnVja2V0cyI6MTAwMCwiaW5wdXQiOiJ2dWlkIiwidXJsIjoiXC8iLCJleHBlcmltZW50cyI6W119LCJUb3BOYXZDb3B5VGVzdCI6eyJpZCI6NzcsIm5hbWUiOiJUb3BOYXZDb3B5VGVzdCIsImJ1Y2tldHMiOjEwMDAsImlucHV0IjoidnVpZCIsInVybCI6IlwvYWJvdXQiLCJleHBlcmltZW50cyI6W119LCJUb3BOYXYuSG9zdFZpZGVvc0xpbmsiOnsiaWQiOjEwMywibmFtZSI6IlRvcE5hdi5Ib3N0VmlkZW9zTGluayIsImJ1Y2tldHMiOjEwMDAsImlucHV0IjoidnVpZCIsInVybCI6bnVsbCwiZXhwZXJpbWVudHMiOltdfSwiVmlkZW9QYWdlLlZpZXdlclNlZ21lbnRhdGlvblN1cnZleSI6eyJpZCI6OTIsIm5hbWUiOiJWaWRlb1BhZ2UuVmlld2VyU2VnbWVudGF0aW9uU3VydmV5IiwiYnVja2V0cyI6MTAwMCwiaW5wdXQiOiJ2dWlkIiwidXJsIjpudWxsLCJleHBlcmltZW50cyI6W119LCJEZXNrdG9wT3V0cm8iOnsiaWQiOjg0LCJuYW1lIjoiRGVza3RvcE91dHJvIiwiYnVja2V0cyI6MTAwMCwiaW5wdXQiOiJ2dWlkIiwidXJsIjpudWxsLCJleHBlcmltZW50cyI6W119fTsKIDwvc2NyaXB0PgoKCiA8c2NyaXB0Pgp3aW5kb3cuTlJFVU18fChOUkVVTT17fSksX19ucl9yZXF1aXJlPWZ1bmN0aW9uKHQsZSxuKXtmdW5jdGlvbiByKG4pe2lmKCFlW25dKXt2YXIgbz1lW25dPXtleHBvcnRzOnt9fTt0W25dWzBdLmNhbGwoby5leHBvcnRzLGZ1bmN0aW9uKGUpe3ZhciBvPXRbbl1bMV1bZV07cmV0dXJuIHIobz9vOmUpfSxvLG8uZXhwb3J0cyl9cmV0dXJuIGVbbl0uZXhwb3J0c31pZigiZnVuY3Rpb24iPT10eXBlb2YgX19ucl9yZXF1aXJlKXJldHVybiBfX25yX3JlcXVpcmU7Zm9yKHZhciBvPTA7bzxuLmxlbmd0aDtvKyspcihuW29dKTtyZXR1cm4gcn0oe1FKZjNheDpbZnVuY3Rpb24odCxlKXtmdW5jdGlvbiBuKHQpe2Z1bmN0aW9uIGUoZSxuLGEpe3QmJnQoZSxuLGEpLGF8fChhPXt9KTtmb3IodmFyIGM9cyhlKSxmPWMubGVuZ3RoLHU9aShhLG8sciksZD0wO2Y+ZDtkKyspY1tkXS5hcHBseSh1LG4pO3JldHVybiB1fWZ1bmN0aW9uIGEodCxlKXtmW3RdPXModCkuY29uY2F0KGUpfWZ1bmN0aW9uIHModCl7cmV0dXJuIGZbdF18fFtdfWZ1bmN0aW9uIGMoKXtyZXR1cm4gbihlKX12YXIgZj17fTtyZXR1cm57b246YSxlbWl0OmUsY3JlYXRlOmMsbGlzdGVuZXJzOnMsX2V2ZW50czpmfX1mdW5jdGlvbiByKCl7cmV0dXJue319dmFyIG89Im5yQGNvbnRleHQiLGk9dCgiZ29zIik7ZS5leHBvcnRzPW4oKX0se2dvczoiN2VTREZoIn1dLGVlOltmdW5jdGlvbih0LGUpe2UuZXhwb3J0cz10KCJRSmYzYXgiKX0se31dLDM6W2Z1bmN0aW9uKHQpe2Z1bmN0aW9uIGUodCxlLG4saSxzKXt0cnl7Yz9jLT0xOnIoImVyciIsW3N8fG5ldyBVbmNhdWdodEV4Y2VwdGlvbih0LGUsbildKX1jYXRjaChmKXt0cnl7cigiaWVyciIsW2YsKG5ldyBEYXRlKS5nZXRUaW1lKCksITBdKX1jYXRjaCh1KXt9fXJldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBhP2EuYXBwbHkodGhpcyxvKGFyZ3VtZW50cykpOiExfWZ1bmN0aW9uIFVuY2F1Z2h0RXhjZXB0aW9uKHQsZSxuKXt0aGlzLm1lc3NhZ2U9dHx8IlVuY2F1Z2h0IGVycm9yIHdpdGggbm8gYWRkaXRpb25hbCBpbmZvcm1hdGlvbiIsdGhpcy5zb3VyY2VVUkw9ZSx0aGlzLmxpbmU9bn1mdW5jdGlvbiBuKHQpe3IoImVyciIsW3QsKG5ldyBEYXRlKS5nZXRUaW1lKCldKX12YXIgcj10KCJoYW5kbGUiKSxvPXQoNSksaT10KCJlZSIpLGE9d2luZG93Lm9uZXJyb3Iscz0hMSxjPTA7dCgibG9hZGVyIikuZmVhdHVyZXMuZXJyPSEwLHdpbmRvdy5vbmVycm9yPWUsTlJFVU0ubm90aWNlRXJyb3I9bjt0cnl7dGhyb3cgbmV3IEVycm9yfWNhdGNoKGYpeyJzdGFjayJpbiBmJiYodCgxKSx0KDQpLCJhZGRFdmVudExpc3RlbmVyImluIHdpbmRvdyYmdCgyKSx3aW5kb3cuWE1MSHR0cFJlcXVlc3QmJlhNTEh0dHBSZXF1ZXN0LnByb3RvdHlwZSYmWE1MSHR0cFJlcXVlc3QucHJvdG90eXBlLmFkZEV2ZW50TGlzdGVuZXImJnQoMykscz0hMCl9aS5vbigiZm4tc3RhcnQiLGZ1bmN0aW9uKCl7cyYmKGMrPTEpfSksaS5vbigiZm4tZXJyIixmdW5jdGlvbih0LGUscil7cyYmKHRoaXMudGhyb3duPSEwLG4ocikpfSksaS5vbigiZm4tZW5kIixmdW5jdGlvbigpe3MmJiF0aGlzLnRocm93biYmYz4wJiYoYy09MSl9KSxpLm9uKCJpbnRlcm5hbC1lcnJvciIsZnVuY3Rpb24odCl7cigiaWVyciIsW3QsKG5ldyBEYXRlKS5nZXRUaW1lKCksITBdKX0pfSx7MTo4LDI6NSwzOjksNDo3LDU6MjAsZWU6IlFKZjNheCIsaGFuZGxlOiJENUR1TFAiLGxvYWRlcjoiRzl6MEJsIn1dLDQ6W2Z1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt9aWYod2luZG93LnBlcmZvcm1hbmNlJiZ3aW5kb3cucGVyZm9ybWFuY2UudGltaW5nJiZ3aW5kb3cucGVyZm9ybWFuY2UuZ2V0RW50cmllc0J5VHlwZSl7dmFyIG49dCgiZWUiKSxyPXQoImhhbmRsZSIpLG89dCgyKTt0KCJsb2FkZXIiKS5mZWF0dXJlcy5zdG49ITAsdCgxKSxuLm9uKCJmbi1zdGFydCIsZnVuY3Rpb24odCl7dmFyIGU9dFswXTtlIGluc3RhbmNlb2YgRXZlbnQmJih0aGlzLmJzdFN0YXJ0PURhdGUubm93KCkpfSksbi5vbigiZm4tZW5kIixmdW5jdGlvbih0LGUpe3ZhciBuPXRbMF07biBpbnN0YW5jZW9mIEV2ZW50JiZyKCJic3QiLFtuLGUsdGhpcy5ic3RTdGFydCxEYXRlLm5vdygpXSl9KSxvLm9uKCJmbi1zdGFydCIsZnVuY3Rpb24odCxlLG4pe3RoaXMuYnN0U3RhcnQ9RGF0ZS5ub3coKSx0aGlzLmJzdFR5cGU9bn0pLG8ub24oImZuLWVuZCIsZnVuY3Rpb24odCxlKXtyKCJic3RUaW1lciIsW2UsdGhpcy5ic3RTdGFydCxEYXRlLm5vdygpLHRoaXMuYnN0VHlwZV0pfSksbi5vbigicHVzaFN0YXRlLXN0YXJ0IixmdW5jdGlvbigpe3RoaXMudGltZT1EYXRlLm5vdygpLHRoaXMuc3RhcnRQYXRoPWxvY2F0aW9uLnBhdGhuYW1lK2xvY2F0aW9uLmhhc2h9KSxuLm9uKCJwdXNoU3RhdGUtZW5kIixmdW5jdGlvbigpe3IoImJzdEhpc3QiLFtsb2NhdGlvbi5wYXRobmFtZStsb2NhdGlvbi5oYXNoLHRoaXMuc3RhcnRQYXRoLHRoaXMudGltZV0pfSksImFkZEV2ZW50TGlzdGVuZXIiaW4gd2luZG93LnBlcmZvcm1hbmNlJiYod2luZG93LnBlcmZvcm1hbmNlLmFkZEV2ZW50TGlzdGVuZXIoIndlYmtpdHJlc291cmNldGltaW5nYnVmZmVyZnVsbCIsZnVuY3Rpb24oKXtyKCJic3RSZXNvdXJjZSIsW3dpbmRvdy5wZXJmb3JtYW5jZS5nZXRFbnRyaWVzQnlUeXBlKCJyZXNvdXJjZSIpXSksd2luZG93LnBlcmZvcm1hbmNlLndlYmtpdENsZWFyUmVzb3VyY2VUaW1pbmdzKCl9LCExKSx3aW5kb3cucGVyZm9ybWFuY2UuYWRkRXZlbnRMaXN0ZW5lcigicmVzb3VyY2V0aW1pbmdidWZmZXJmdWxsIixmdW5jdGlvbigpe3IoImJzdFJlc291cmNlIixbd2luZG93LnBlcmZvcm1hbmNlLmdldEVudHJpZXNCeVR5cGUoInJlc291cmNlIildKSx3aW5kb3cucGVyZm9ybWFuY2UuY2xlYXJSZXNvdXJjZVRpbWluZ3MoKX0sITEpKSxkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJzY3JvbGwiLGUsITEpLGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoImtleXByZXNzIixlLCExKSxkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsZSwhMSl9fSx7MTo2LDI6OCxlZToiUUpmM2F4IixoYW5kbGU6IkQ1RHVMUCIsbG9hZGVyOiJHOXowQmwifV0sNTpbZnVuY3Rpb24odCxlKXtmdW5jdGlvbiBuKHQpe2kuaW5QbGFjZSh0LFsiYWRkRXZlbnRMaXN0ZW5lciIsInJlbW92ZUV2ZW50TGlzdGVuZXIiXSwiLSIscil9ZnVuY3Rpb24gcih0KXtyZXR1cm4gdFsxXX12YXIgbz0odCgxKSx0KCJlZSIpLmNyZWF0ZSgpKSxpPXQoMikobyksYT10KCJnb3MiKTtpZihlLmV4cG9ydHM9byxuKHdpbmRvdyksImdldFByb3RvdHlwZU9mImluIE9iamVjdCl7Zm9yKHZhciBzPWRvY3VtZW50O3MmJiFzLmhhc093blByb3BlcnR5KCJhZGRFdmVudExpc3RlbmVyIik7KXM9T2JqZWN0LmdldFByb3RvdHlwZU9mKHMpO3MmJm4ocyk7Zm9yKHZhciBjPVhNTEh0dHBSZXF1ZXN0LnByb3RvdHlwZTtjJiYhYy5oYXNPd25Qcm9wZXJ0eSgiYWRkRXZlbnRMaXN0ZW5lciIpOyljPU9iamVjdC5nZXRQcm90b3R5cGVPZihjKTtjJiZuKGMpfWVsc2UgWE1MSHR0cFJlcXVlc3QucHJvdG90eXBlLmhhc093blByb3BlcnR5KCJhZGRFdmVudExpc3RlbmVyIikmJm4oWE1MSHR0cFJlcXVlc3QucHJvdG90eXBlKTtvLm9uKCJhZGRFdmVudExpc3RlbmVyLXN0YXJ0IixmdW5jdGlvbih0KXtpZih0WzFdKXt2YXIgZT10WzFdOyJmdW5jdGlvbiI9PXR5cGVvZiBlP3RoaXMud3JhcHBlZD10WzFdPWEoZSwibnJAd3JhcHBlZCIsZnVuY3Rpb24oKXtyZXR1cm4gaShlLCJmbi0iLG51bGwsZS5uYW1lfHwiYW5vbnltb3VzIil9KToiZnVuY3Rpb24iPT10eXBlb2YgZS5oYW5kbGVFdmVudCYmaS5pblBsYWNlKGUsWyJoYW5kbGVFdmVudCJdLCJmbi0iKX19KSxvLm9uKCJyZW1vdmVFdmVudExpc3RlbmVyLXN0YXJ0IixmdW5jdGlvbih0KXt2YXIgZT10aGlzLndyYXBwZWQ7ZSYmKHRbMV09ZSl9KX0sezE6MjAsMjoyMSxlZToiUUpmM2F4Iixnb3M6IjdlU0RGaCJ9XSw2OltmdW5jdGlvbih0LGUpe3ZhciBuPSh0KDIpLHQoImVlIikuY3JlYXRlKCkpLHI9dCgxKShuKTtlLmV4cG9ydHM9bixyLmluUGxhY2Uod2luZG93Lmhpc3RvcnksWyJwdXNoU3RhdGUiXSwiLSIpfSx7MToyMSwyOjIwLGVlOiJRSmYzYXgifV0sNzpbZnVuY3Rpb24odCxlKXt2YXIgbj0odCgyKSx0KCJlZSIpLmNyZWF0ZSgpKSxyPXQoMSkobik7ZS5leHBvcnRzPW4sci5pblBsYWNlKHdpbmRvdyxbInJlcXVlc3RBbmltYXRpb25GcmFtZSIsIm1velJlcXVlc3RBbmltYXRpb25GcmFtZSIsIndlYmtpdFJlcXVlc3RBbmltYXRpb25GcmFtZSIsIm1zUmVxdWVzdEFuaW1hdGlvbkZyYW1lIl0sInJhZi0iKSxuLm9uKCJyYWYtc3RhcnQiLGZ1bmN0aW9uKHQpe3RbMF09cih0WzBdLCJmbi0iKX0pfSx7MToyMSwyOjIwLGVlOiJRSmYzYXgifV0sODpbZnVuY3Rpb24odCxlKXtmdW5jdGlvbiBuKHQsZSxuKXt2YXIgcj10WzBdOyJzdHJpbmciPT10eXBlb2YgciYmKHI9bmV3IEZ1bmN0aW9uKHIpKSx0WzBdPW8ociwiZm4tIixudWxsLG4pfXZhciByPSh0KDIpLHQoImVlIikuY3JlYXRlKCkpLG89dCgxKShyKTtlLmV4cG9ydHM9cixvLmluUGxhY2Uod2luZG93LFsic2V0VGltZW91dCIsInNldEludGVydmFsIiwic2V0SW1tZWRpYXRlIl0sInNldFRpbWVyLSIpLHIub24oInNldFRpbWVyLXN0YXJ0IixuKX0sezE6MjEsMjoyMCxlZToiUUpmM2F4In1dLDk6W2Z1bmN0aW9uKHQsZSl7ZnVuY3Rpb24gbigpe2MuaW5QbGFjZSh0aGlzLGQsImZuLSIpfWZ1bmN0aW9uIHIodCxlKXtjLmluUGxhY2UoZSxbIm9ucmVhZHlzdGF0ZWNoYW5nZSJdLCJmbi0iKX1mdW5jdGlvbiBvKHQsZSl7cmV0dXJuIGV9dmFyIGk9dCgiZWUiKS5jcmVhdGUoKSxhPXQoMSkscz10KDIpLGM9cyhpKSxmPXMoYSksdT13aW5kb3cuWE1MSHR0cFJlcXVlc3QsZD1bIm9ubG9hZCIsIm9uZXJyb3IiLCJvbmFib3J0Iiwib25sb2Fkc3RhcnQiLCJvbmxvYWRlbmQiLCJvbnByb2dyZXNzIiwib250aW1lb3V0Il07ZS5leHBvcnRzPWksd2luZG93LlhNTEh0dHBSZXF1ZXN0PWZ1bmN0aW9uKHQpe3ZhciBlPW5ldyB1KHQpO3RyeXtpLmVtaXQoIm5ldy14aHIiLFtdLGUpLGYuaW5QbGFjZShlLFsiYWRkRXZlbnRMaXN0ZW5lciIsInJlbW92ZUV2ZW50TGlzdGVuZXIiXSwiLSIsZnVuY3Rpb24odCxlKXtyZXR1cm4gZX0pLGUuYWRkRXZlbnRMaXN0ZW5lcigicmVhZHlzdGF0ZWNoYW5nZSIsbiwhMSl9Y2F0Y2gocil7dHJ5e2kuZW1pdCgiaW50ZXJuYWwtZXJyb3IiLFtyXSl9Y2F0Y2gobyl7fX1yZXR1cm4gZX0sd2luZG93LlhNTEh0dHBSZXF1ZXN0LnByb3RvdHlwZT11LnByb3RvdHlwZSxjLmluUGxhY2UoWE1MSHR0cFJlcXVlc3QucHJvdG90eXBlLFsib3BlbiIsInNlbmQiXSwiLXhoci0iLG8pLGkub24oInNlbmQteGhyLXN0YXJ0IixyKSxpLm9uKCJvcGVuLXhoci1zdGFydCIscil9LHsxOjUsMjoyMSxlZToiUUpmM2F4In1dLDEwOltmdW5jdGlvbih0KXtmdW5jdGlvbiBlKHQpe2lmKCJzdHJpbmciPT10eXBlb2YgdCYmdC5sZW5ndGgpcmV0dXJuIHQubGVuZ3RoO2lmKCJvYmplY3QiIT10eXBlb2YgdClyZXR1cm4gdm9pZCAwO2lmKCJ1bmRlZmluZWQiIT10eXBlb2YgQXJyYXlCdWZmZXImJnQgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlciYmdC5ieXRlTGVuZ3RoKXJldHVybiB0LmJ5dGVMZW5ndGg7aWYoInVuZGVmaW5lZCIhPXR5cGVvZiBCbG9iJiZ0IGluc3RhbmNlb2YgQmxvYiYmdC5zaXplKXJldHVybiB0LnNpemU7aWYoInVuZGVmaW5lZCIhPXR5cGVvZiBGb3JtRGF0YSYmdCBpbnN0YW5jZW9mIEZvcm1EYXRhKXJldHVybiB2b2lkIDA7dHJ5e3JldHVybiBKU09OLnN0cmluZ2lmeSh0KS5sZW5ndGh9Y2F0Y2goZSl7cmV0dXJuIHZvaWQgMH19ZnVuY3Rpb24gbih0KXt2YXIgbj10aGlzLnBhcmFtcyxyPXRoaXMubWV0cmljcztpZighdGhpcy5lbmRlZCl7dGhpcy5lbmRlZD0hMDtmb3IodmFyIGk9MDtjPmk7aSsrKXQucmVtb3ZlRXZlbnRMaXN0ZW5lcihzW2ldLHRoaXMubGlzdGVuZXIsITEpO2lmKCFuLmFib3J0ZWQpe2lmKHIuZHVyYXRpb249KG5ldyBEYXRlKS5nZXRUaW1lKCktdGhpcy5zdGFydFRpbWUsND09PXQucmVhZHlTdGF0ZSl7bi5zdGF0dXM9dC5zdGF0dXM7dmFyIGE9dC5yZXNwb25zZVR5cGUsZj0iYXJyYXlidWZmZXIiPT09YXx8ImJsb2IiPT09YXx8Impzb24iPT09YT90LnJlc3BvbnNlOnQucmVzcG9uc2VUZXh0LHU9ZShmKTtpZih1JiYoci5yeFNpemU9dSksdGhpcy5zYW1lT3JpZ2luKXt2YXIgZD10LmdldFJlc3BvbnNlSGVhZGVyKCJYLU5ld1JlbGljLUFwcC1EYXRhIik7ZCYmKG4uY2F0PWQuc3BsaXQoIiwgIikucG9wKCkpfX1lbHNlIG4uc3RhdHVzPTA7ci5jYlRpbWU9dGhpcy5jYlRpbWUsbygieGhyIixbbixyLHRoaXMuc3RhcnRUaW1lXSl9fX1mdW5jdGlvbiByKHQsZSl7dmFyIG49aShlKSxyPXQucGFyYW1zO3IuaG9zdD1uLmhvc3RuYW1lKyI6IituLnBvcnQsci5wYXRobmFtZT1uLnBhdGhuYW1lLHQuc2FtZU9yaWdpbj1uLnNhbWVPcmlnaW59aWYod2luZG93LlhNTEh0dHBSZXF1ZXN0JiZYTUxIdHRwUmVxdWVzdC5wcm90b3R5cGUmJlhNTEh0dHBSZXF1ZXN0LnByb3RvdHlwZS5hZGRFdmVudExpc3RlbmVyJiYhL0NyaU9TLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpKXt0KCJsb2FkZXIiKS5mZWF0dXJlcy54aHI9ITA7dmFyIG89dCgiaGFuZGxlIiksaT10KDIpLGE9dCgiZWUiKSxzPVsibG9hZCIsImVycm9yIiwiYWJvcnQiLCJ0aW1lb3V0Il0sYz1zLmxlbmd0aCxmPXQoMSk7dCg0KSx0KDMpLGEub24oIm5ldy14aHIiLGZ1bmN0aW9uKCl7dGhpcy50b3RhbENicz0wLHRoaXMuY2FsbGVkPTAsdGhpcy5jYlRpbWU9MCx0aGlzLmVuZD1uLHRoaXMuZW5kZWQ9ITEsdGhpcy54aHJHdWlkcz17fX0pLGEub24oIm9wZW4teGhyLXN0YXJ0IixmdW5jdGlvbih0KXt0aGlzLnBhcmFtcz17bWV0aG9kOnRbMF19LHIodGhpcyx0WzFdKSx0aGlzLm1ldHJpY3M9e319KSxhLm9uKCJvcGVuLXhoci1lbmQiLGZ1bmN0aW9uKHQsZSl7ImxvYWRlcl9jb25maWciaW4gTlJFVU0mJiJ4cGlkImluIE5SRVVNLmxvYWRlcl9jb25maWcmJnRoaXMuc2FtZU9yaWdpbiYmZS5zZXRSZXF1ZXN0SGVhZGVyKCJYLU5ld1JlbGljLUlEIixOUkVVTS5sb2FkZXJfY29uZmlnLnhwaWQpfSksYS5vbigic2VuZC14aHItc3RhcnQiLGZ1bmN0aW9uKHQsbil7dmFyIHI9dGhpcy5tZXRyaWNzLG89dFswXSxpPXRoaXM7aWYociYmbyl7dmFyIGY9ZShvKTtmJiYoci50eFNpemU9Zil9dGhpcy5zdGFydFRpbWU9KG5ldyBEYXRlKS5nZXRUaW1lKCksdGhpcy5saXN0ZW5lcj1mdW5jdGlvbih0KXt0cnl7ImFib3J0Ij09PXQudHlwZSYmKGkucGFyYW1zLmFib3J0ZWQ9ITApLCgibG9hZCIhPT10LnR5cGV8fGkuY2FsbGVkPT09aS50b3RhbENicyYmKGkub25sb2FkQ2FsbGVkfHwiZnVuY3Rpb24iIT10eXBlb2Ygbi5vbmxvYWQpKSYmaS5lbmQobil9Y2F0Y2goZSl7dHJ5e2EuZW1pdCgiaW50ZXJuYWwtZXJyb3IiLFtlXSl9Y2F0Y2gocil7fX19O2Zvcih2YXIgdT0wO2M+dTt1Kyspbi5hZGRFdmVudExpc3RlbmVyKHNbdV0sdGhpcy5saXN0ZW5lciwhMSl9KSxhLm9uKCJ4aHItY2ItdGltZSIsZnVuY3Rpb24odCxlLG4pe3RoaXMuY2JUaW1lKz10LGU/dGhpcy5vbmxvYWRDYWxsZWQ9ITA6dGhpcy5jYWxsZWQrPTEsdGhpcy5jYWxsZWQhPT10aGlzLnRvdGFsQ2JzfHwhdGhpcy5vbmxvYWRDYWxsZWQmJiJmdW5jdGlvbiI9PXR5cGVvZiBuLm9ubG9hZHx8dGhpcy5lbmQobil9KSxhLm9uKCJ4aHItbG9hZC1hZGRlZCIsZnVuY3Rpb24odCxlKXt2YXIgbj0iIitmKHQpKyEhZTt0aGlzLnhockd1aWRzJiYhdGhpcy54aHJHdWlkc1tuXSYmKHRoaXMueGhyR3VpZHNbbl09ITAsdGhpcy50b3RhbENicys9MSl9KSxhLm9uKCJ4aHItbG9hZC1yZW1vdmVkIixmdW5jdGlvbih0LGUpe3ZhciBuPSIiK2YodCkrISFlO3RoaXMueGhyR3VpZHMmJnRoaXMueGhyR3VpZHNbbl0mJihkZWxldGUgdGhpcy54aHJHdWlkc1tuXSx0aGlzLnRvdGFsQ2JzLT0xKX0pLGEub24oImFkZEV2ZW50TGlzdGVuZXItZW5kIixmdW5jdGlvbih0LGUpe2UgaW5zdGFuY2VvZiBYTUxIdHRwUmVxdWVzdCYmImxvYWQiPT09dFswXSYmYS5lbWl0KCJ4aHItbG9hZC1hZGRlZCIsW3RbMV0sdFsyXV0sZSl9KSxhLm9uKCJyZW1vdmVFdmVudExpc3RlbmVyLWVuZCIsZnVuY3Rpb24odCxlKXtlIGluc3RhbmNlb2YgWE1MSHR0cFJlcXVlc3QmJiJsb2FkIj09PXRbMF0mJmEuZW1pdCgieGhyLWxvYWQtcmVtb3ZlZCIsW3RbMV0sdFsyXV0sZSl9KSxhLm9uKCJmbi1zdGFydCIsZnVuY3Rpb24odCxlLG4pe2UgaW5zdGFuY2VvZiBYTUxIdHRwUmVxdWVzdCYmKCJvbmxvYWQiPT09biYmKHRoaXMub25sb2FkPSEwKSwoImxvYWQiPT09KHRbMF0mJnRbMF0udHlwZSl8fHRoaXMub25sb2FkKSYmKHRoaXMueGhyQ2JTdGFydD0obmV3IERhdGUpLmdldFRpbWUoKSkpfSksYS5vbigiZm4tZW5kIixmdW5jdGlvbih0LGUpe3RoaXMueGhyQ2JTdGFydCYmYS5lbWl0KCJ4aHItY2ItdGltZSIsWyhuZXcgRGF0ZSkuZ2V0VGltZSgpLXRoaXMueGhyQ2JTdGFydCx0aGlzLm9ubG9hZCxlXSxlKX0pfX0sezE6IlhMN0hCSSIsMjoxMSwzOjksNDo1LGVlOiJRSmYzYXgiLGhhbmRsZToiRDVEdUxQIixsb2FkZXI6Ikc5ejBCbCJ9XSwxMTpbZnVuY3Rpb24odCxlKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYSIpLG49d2luZG93LmxvY2F0aW9uLHI9e307ZS5ocmVmPXQsci5wb3J0PWUucG9ydDt2YXIgbz1lLmhyZWYuc3BsaXQoIjovLyIpO3JldHVybiFyLnBvcnQmJm9bMV0mJihyLnBvcnQ9b1sxXS5zcGxpdCgiLyIpWzBdLnNwbGl0KCI6IilbMV0pLHIucG9ydCYmIjAiIT09ci5wb3J0fHwoci5wb3J0PSJodHRwcyI9PT1vWzBdPyI0NDMiOiI4MCIpLHIuaG9zdG5hbWU9ZS5ob3N0bmFtZXx8bi5ob3N0bmFtZSxyLnBhdGhuYW1lPWUucGF0aG5hbWUsIi8iIT09ci5wYXRobmFtZS5jaGFyQXQoMCkmJihyLnBhdGhuYW1lPSIvIityLnBhdGhuYW1lKSxyLnNhbWVPcmlnaW49IWUuaG9zdG5hbWV8fGUuaG9zdG5hbWU9PT1kb2N1bWVudC5kb21haW4mJmUucG9ydD09PW4ucG9ydCYmZS5wcm90b2NvbD09PW4ucHJvdG9jb2wscn19LHt9XSxnb3M6W2Z1bmN0aW9uKHQsZSl7ZS5leHBvcnRzPXQoIjdlU0RGaCIpfSx7fV0sIjdlU0RGaCI6W2Z1bmN0aW9uKHQsZSl7ZnVuY3Rpb24gbih0LGUsbil7aWYoci5jYWxsKHQsZSkpcmV0dXJuIHRbZV07dmFyIG89bigpO2lmKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSYmT2JqZWN0LmtleXMpdHJ5e3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkodCxlLHt2YWx1ZTpvLHdyaXRhYmxlOiEwLGVudW1lcmFibGU6ITF9KSxvfWNhdGNoKGkpe31yZXR1cm4gdFtlXT1vLG99dmFyIHI9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtlLmV4cG9ydHM9bn0se31dLEQ1RHVMUDpbZnVuY3Rpb24odCxlKXtmdW5jdGlvbiBuKHQsZSxuKXtyZXR1cm4gci5saXN0ZW5lcnModCkubGVuZ3RoP3IuZW1pdCh0LGUsbik6KG9bdF18fChvW3RdPVtdKSx2b2lkIG9bdF0ucHVzaChlKSl9dmFyIHI9dCgiZWUiKS5jcmVhdGUoKSxvPXt9O2UuZXhwb3J0cz1uLG4uZWU9cixyLnE9b30se2VlOiJRSmYzYXgifV0saGFuZGxlOltmdW5jdGlvbih0LGUpe2UuZXhwb3J0cz10KCJENUR1TFAiKX0se31dLFhMN0hCSTpbZnVuY3Rpb24odCxlKXtmdW5jdGlvbiBuKHQpe3ZhciBlPXR5cGVvZiB0O3JldHVybiF0fHwib2JqZWN0IiE9PWUmJiJmdW5jdGlvbiIhPT1lPy0xOnQ9PT13aW5kb3c/MDppKHQsbyxmdW5jdGlvbigpe3JldHVybiByKyt9KX12YXIgcj0xLG89Im5yQGlkIixpPXQoImdvcyIpO2UuZXhwb3J0cz1ufSx7Z29zOiI3ZVNERmgifV0saWQ6W2Z1bmN0aW9uKHQsZSl7ZS5leHBvcnRzPXQoIlhMN0hCSSIpfSx7fV0sbG9hZGVyOltmdW5jdGlvbih0LGUpe2UuZXhwb3J0cz10KCJHOXowQmwiKX0se31dLEc5ejBCbDpbZnVuY3Rpb24odCxlKXtmdW5jdGlvbiBuKCl7dmFyIHQ9cC5pbmZvPU5SRVVNLmluZm87aWYodCYmdC5hZ2VudCYmdC5saWNlbnNlS2V5JiZ0LmFwcGxpY2F0aW9uSUQmJmMmJmMuYm9keSl7cC5wcm90bz0iaHR0cHMiPT09ZC5zcGxpdCgiOiIpWzBdfHx0LnNzbEZvckh0dHA/Imh0dHBzOi8vIjoiaHR0cDovLyIsYSgibWFyayIsWyJvbmxvYWQiLGkoKV0pO3ZhciBlPWMuY3JlYXRlRWxlbWVudCgic2NyaXB0Iik7ZS5zcmM9cC5wcm90byt0LmFnZW50LGMuYm9keS5hcHBlbmRDaGlsZChlKX19ZnVuY3Rpb24gcigpeyJjb21wbGV0ZSI9PT1jLnJlYWR5U3RhdGUmJm8oKX1mdW5jdGlvbiBvKCl7YSgibWFyayIsWyJkb21Db250ZW50IixpKCldKX1mdW5jdGlvbiBpKCl7cmV0dXJuKG5ldyBEYXRlKS5nZXRUaW1lKCl9dmFyIGE9dCgiaGFuZGxlIikscz13aW5kb3csYz1zLmRvY3VtZW50LGY9ImFkZEV2ZW50TGlzdGVuZXIiLHU9ImF0dGFjaEV2ZW50IixkPSgiIitsb2NhdGlvbikuc3BsaXQoIj8iKVswXSxwPWUuZXhwb3J0cz17b2Zmc2V0OmkoKSxvcmlnaW46ZCxmZWF0dXJlczp7fX07Y1tmXT8oY1tmXSgiRE9NQ29udGVudExvYWRlZCIsbywhMSksc1tmXSgibG9hZCIsbiwhMSkpOihjW3VdKCJvbnJlYWR5c3RhdGVjaGFuZ2UiLHIpLHNbdV0oIm9ubG9hZCIsbikpLGEoIm1hcmsiLFsiZmlyc3RieXRlIixpKCldKX0se2hhbmRsZToiRDVEdUxQIn1dLDIwOltmdW5jdGlvbih0LGUpe2Z1bmN0aW9uIG4odCxlLG4pe2V8fChlPTApLCJ1bmRlZmluZWQiPT10eXBlb2YgbiYmKG49dD90Lmxlbmd0aDowKTtmb3IodmFyIHI9LTEsbz1uLWV8fDAsaT1BcnJheSgwPm8/MDpvKTsrK3I8bzspaVtyXT10W2Urcl07cmV0dXJuIGl9ZS5leHBvcnRzPW59LHt9XSwyMTpbZnVuY3Rpb24odCxlKXtmdW5jdGlvbiBuKHQpe3JldHVybiEodCYmImZ1bmN0aW9uIj09dHlwZW9mIHQmJnQuYXBwbHkmJiF0W2ldKX12YXIgcj10KCJlZSIpLG89dCgxKSxpPSJuckB3cmFwcGVyIixhPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUodCxlLHIsYSl7ZnVuY3Rpb24gbnJXcmFwcGVyKCl7dmFyIG4saSxzLGY7dHJ5e2k9dGhpcyxuPW8oYXJndW1lbnRzKSxzPXImJnIobixpKXx8e319Y2F0Y2goZCl7dShbZCwiIixbbixpLGFdLHNdKX1jKGUrInN0YXJ0IixbbixpLGFdLHMpO3RyeXtyZXR1cm4gZj10LmFwcGx5KGksbil9Y2F0Y2gocCl7dGhyb3cgYyhlKyJlcnIiLFtuLGkscF0scykscH1maW5hbGx5e2MoZSsiZW5kIixbbixpLGZdLHMpfX1yZXR1cm4gbih0KT90OihlfHwoZT0iIiksbnJXcmFwcGVyW2ldPSEwLGYodCxucldyYXBwZXIpLG5yV3JhcHBlcil9ZnVuY3Rpb24gcyh0LHIsbyxpKXtvfHwobz0iIik7dmFyIGEscyxjLGY9Ii0iPT09by5jaGFyQXQoMCk7Zm9yKGM9MDtjPHIubGVuZ3RoO2MrKylzPXJbY10sYT10W3NdLG4oYSl8fCh0W3NdPWUoYSxmP3MrbzpvLGkscyx0KSl9ZnVuY3Rpb24gYyhlLG4scil7dHJ5e3QuZW1pdChlLG4scil9Y2F0Y2gobyl7dShbbyxlLG4scl0pfX1mdW5jdGlvbiBmKHQsZSl7aWYoT2JqZWN0LmRlZmluZVByb3BlcnR5JiZPYmplY3Qua2V5cyl0cnl7dmFyIG49T2JqZWN0LmtleXModCk7cmV0dXJuIG4uZm9yRWFjaChmdW5jdGlvbihuKXtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxuLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdFtuXX0sc2V0OmZ1bmN0aW9uKGUpe3JldHVybiB0W25dPWUsZX19KX0pLGV9Y2F0Y2gocil7dShbcl0pfWZvcih2YXIgbyBpbiB0KWEuY2FsbCh0LG8pJiYoZVtvXT10W29dKTtyZXR1cm4gZX1mdW5jdGlvbiB1KGUpe3RyeXt0LmVtaXQoImludGVybmFsLWVycm9yIixlKX1jYXRjaChuKXt9fXJldHVybiB0fHwodD1yKSxlLmluUGxhY2U9cyxlLmZsYWc9aSxlfX0sezE6MjAsZWU6IlFKZjNheCJ9XX0se30sWyJHOXowQmwiLDMsMTAsNF0pOwo7TlJFVU0uaW5mbz17YmVhY29uOiJiYW0ubnItZGF0YS5uZXQiLGVycm9yQmVhY29uOiJiYW0ubnItZGF0YS5uZXQiLGxpY2Vuc2VLZXk6IjY4OWQ1YjQ1NjIiLGFwcGxpY2F0aW9uSUQ6IjIwMTEyMjQiLHNhOjEsYWdlbnQ6ImpzLWFnZW50Lm5ld3JlbGljLmNvbS9uci00NzYubWluLmpzIn0KPC9zY3JpcHQ+CgogPHNjcmlwdD4KIHZhciBnb29nbGV0YWcgPSBnb29nbGV0YWcgfHwge30sCiBncHRhZHNsb3RzID0gW10sCiBsYW5ndWFnZSwKIGhhc191cGxvYWRlZCwKIGNvaG9ydDsKIGdvb2dsZXRhZy5jbWQgPSBnb29nbGV0YWcuY21kIHx8IFtdOwoKIChmdW5jdGlvbigpIHsKIHZhciBnYWRzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc2NyaXB0JyksCiB1c2VTU0wgPSAnaHR0cHM6JyA9PSBkb2N1bWVudC5sb2NhdGlvbi5wcm90b2NvbCwKIG5vZGU7CiBnYWRzLmFzeW5jID0gdHJ1ZTsKIGdhZHMudHlwZSA9ICd0ZXh0L2phdmFzY3JpcHQnOwogZ2Fkcy5zcmMgPSAodXNlU1NMID8gJ2h0dHBzOicgOiAnaHR0cDonKSArICcvL3d3dy5nb29nbGV0YWdzZXJ2aWNlcy5jb20vdGFnL2pzL2dwdC5qcyc7CiBub2RlID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ3NjcmlwdCcpWzBdOwogbm9kZS5wYXJlbnROb2RlLmluc2VydEJlZm9yZShnYWRzLCBub2RlKTsKIH0pKCk7CgogZ29vZ2xldGFnLmNtZC5wdXNoKGZ1bmN0aW9uKCkgewogCiAgbGFuZ3VhZ2UgPSBkb2N1bWVudC5jb29raWUucmVwbGFjZSgvKD86KD86XnwuKjtccyopbGFuZ3VhZ2VccypcPVxzKihbXjtdKikuKiQpfF4uKiQvLCAiJDEiKTsKIGhhc191cGxvYWRlZCA9IChkb2N1bWVudC5jb29raWUucmVwbGFjZSgvKD86KD86XnwuKjtccyopaGFzX3VwbG9hZGVkXHMqXD1ccyooW147XSopLiokKXxeLiokLywgIiQxIikpID8gJ1knIDogJ04nOwogCiBjb2hvcnQgPSAod2luZG93LkFCTGluY29sbikgPyB3aW5kb3cuQUJMaW5jb2xuLmdldFRlc3QoJ0RGUEFkQ29ob3J0cycpLmdldCgnY29ob3J0JywgJ0EnKSA6ICdBJzsKCiBnb29nbGV0YWcucHViYWRzKCkuc2V0VGFyZ2V0aW5nKCdsYW5ndWFnZScsIFtsYW5ndWFnZV0pOwogZ29vZ2xldGFnLnB1YmFkcygpLnNldFRhcmdldGluZygnaXNfdXBsb2FkZXInLCBbaGFzX3VwbG9hZGVkXSk7CiBnb29nbGV0YWcucHViYWRzKCkuc2V0VGFyZ2V0aW5nKCdjb2hvcnQnLCBbY29ob3J0XSk7CiBnb29nbGV0YWcucHViYWRzKCkuc2V0VGFyZ2V0aW5nKCdjb2hvcnRfYScsIFsoY29ob3J0ID09PSAnQScpID8gJ1knIDogJ04nXSk7CiBnb29nbGV0YWcucHViYWRzKCkuc2V0VGFyZ2V0aW5nKCdjb2hvcnRfYicsIFsoY29ob3J0ID09PSAnQicpID8gJ1knIDogJ04nXSk7CgogIGdvb2dsZXRhZy5wdWJhZHMoKS5zZXRUYXJnZXRpbmcoJ3NlYycsIFsnZmFsc2UnXSk7CgogZ29vZ2xldGFnLnB1YmFkcygpLnNldFRhcmdldGluZygnbG9nZ2VkX2luJywgWydmYWxzZSddKTsKCiAgZ29vZ2xldGFnLnB1YmFkcygpLnNldFRhcmdldGluZygncnB2JywgKE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSoxMDApKzEpLnRvU3RyaW5nKCkpOwoKIGdvb2dsZXRhZy5wdWJhZHMoKS5lbmFibGVBc3luY1JlbmRlcmluZygpOwogZ29vZ2xldGFnLmVuYWJsZVNlcnZpY2VzKCk7CiB9KTsKIDwvc2NyaXB0PgoKPHNjcmlwdD4KIWZ1bmN0aW9uKCl7dmFyIGU9InVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3c/d2luZG93OmV4cG9ydHMscj1bXTtpZihlLnBlcmZvcm1hbmNlfHwoZS5wZXJmb3JtYW5jZT17fSksZS5wZXJmb3JtYW5jZS5ub3d8fChlLnBlcmZvcm1hbmNlLm5vdz1wZXJmb3JtYW5jZS5ub3d8fHBlcmZvcm1hbmNlLndlYmtpdE5vd3x8cGVyZm9ybWFuY2UubXNOb3d8fHBlcmZvcm1hbmNlLm1vek5vdyksIWUucGVyZm9ybWFuY2Uubm93KXt2YXIgbj1EYXRlLm5vdz9EYXRlLm5vdygpOituZXcgRGF0ZTtwZXJmb3JtYW5jZS50aW1pbmcmJnBlcmZvcm1hbmNlLnRpbWluZyYmKG49cGVyZm9ybWFuY2UudGltaW5nLm5hdmlnYXRpb25TdGFydCksZS5wZXJmb3JtYW5jZS5ub3c9ZnVuY3Rpb24oKXt2YXIgZT1EYXRlLm5vdz9EYXRlLm5vdygpOituZXcgRGF0ZTtyZXR1cm4gZS1ufX1lLnBlcmZvcm1hbmNlLm1hcmt8fChlLnBlcmZvcm1hbmNlLm1hcms9ZS5wZXJmb3JtYW5jZS53ZWJraXRNYXJrP2UucGVyZm9ybWFuY2Uud2Via2l0TWFyazpmdW5jdGlvbihuKXtyLmZvckVhY2goZnVuY3Rpb24oZSxyLGEpe2UubmFtZT09PW4mJmEuc3BsaWNlKHIsMSl9KSxyLnB1c2goe25hbWU6bixlbnRyeVR5cGU6Im1hcmsiLHN0YXJ0VGltZTplLnBlcmZvcm1hbmNlLm5vdygpLGR1cmF0aW9uOjB9KX0pLGUucGVyZm9ybWFuY2UuZ2V0RW50cmllc0J5VHlwZXx8KGUucGVyZm9ybWFuY2UuZ2V0RW50cmllc0J5VHlwZT1lLnBlcmZvcm1hbmNlLndlYmtpdEdldEVudHJpZXNCeVR5cGU/ZS5wZXJmb3JtYW5jZS53ZWJraXRHZXRFbnRyaWVzQnlUeXBlOmZ1bmN0aW9uKGUpe3ZhciBuPWZ1bmN0aW9uKHIpe3JldHVybiByLmVudHJ5VHlwZT09PWV9O3JldHVybi0xIT09WyJtYXJrIiwibWVhc3VyZSJdLmluZGV4T2YoZSk/ci5maWx0ZXIobik6dm9pZCAwfSksZS5wZXJmb3JtYW5jZS5nZXRFbnRyaWVzQnlOYW1lfHwoZS5wZXJmb3JtYW5jZS5nZXRFbnRyaWVzQnlOYW1lPWUucGVyZm9ybWFuY2Uud2Via2l0R2V0RW50cmllc0J5TmFtZT9lLnBlcmZvcm1hbmNlLndlYmtpdEdldEVudHJpZXNCeU5hbWU6ZnVuY3Rpb24oZSl7cmV0dXJuIHIuZmlsdGVyKGZ1bmN0aW9uKHIpe3JldHVybiByLm5hbWU9PT1lfSl9KSxlLnBlcmZvcm1hbmNlLmNsZWFyTWVhc3VyZXN8fChlLnBlcmZvcm1hbmNlLmNsZWFyTWVhc3VyZXM9ZS5wZXJmb3JtYW5jZS53ZWJraXRDbGVhck1lYXN1cmVzP2UucGVyZm9ybWFuY2Uud2Via2l0Q2xlYXJNZWFzdXJlczpmdW5jdGlvbigpe3IuZm9yRWFjaChmdW5jdGlvbihlLHIsbil7Im1lYXN1cmUiPT09ZS5lbnRyeVR5cGUmJm4uc3BsaWNlKHIsMSl9KSxyPVtdfSksZS5wZXJmb3JtYW5jZS5jbGVhck1hcmtzfHwoZS5wZXJmb3JtYW5jZS5jbGVhck1hcmtzPWUucGVyZm9ybWFuY2Uud2Via2l0Q2xlYXJNYXJrcz9lLnBlcmZvcm1hbmNlLndlYmtpdENsZWFyTWFya3M6ZnVuY3Rpb24oKXtyLmZvckVhY2goZnVuY3Rpb24oZSxyLG4peyJtYXJrIj09PWUuZW50cnlUeXBlJiZuLnNwbGljZShyLDEpfSkscj1bXX0pLGUucGVyZm9ybWFuY2UubWVhc3VyZXx8KGUucGVyZm9ybWFuY2UubWVhc3VyZT1lLnBlcmZvcm1hbmNlLndlYmtpdE1lYXN1cmU/ZS5wZXJmb3JtYW5jZS53ZWJraXRNZWFzdXJlOmZ1bmN0aW9uKGUsbixhKXt2YXIgdD1mdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24ocil7cmV0dXJuIHIubmFtZT09PWUmJiJtYXJrIj09PXIuZW50cnlUeXBlfX0sbz1yLmZpbHRlcih0KG4pKVswXSxtPXIuZmlsdGVyKHQoYSkpWzBdLGk9bS5zdGFydFRpbWUtby5zdGFydFRpbWU7ci5wdXNoKHtuYW1lOmUsZW50cnlUeXBlOiJtZWFzdXJlIixzdGFydFRpbWU6by5zdGFydFRpbWUsZHVyYXRpb246aX0pfSl9KCksd2luZG93Lm1hcmtVc2VyVGltZT1mdW5jdGlvbihlKXt2YXIgcj13aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lfHxmdW5jdGlvbihlKXtzZXRUaW1lb3V0KGUsMCl9O3IoZnVuY3Rpb24oKXt3aW5kb3cucGVyZm9ybWFuY2UubWFyayhlKSx3aW5kb3cuY29uc29sZSYmY29uc29sZS50aW1lU3RhbXAmJmNvbnNvbGUudGltZVN0YW1wKGUpfSl9OwoKKGZ1bmN0aW9uKCkgewogd2luZG93Lm1hcmtVc2VyVGltZSA9IGZ1bmN0aW9uKGxhYmVsKSB7CiB3aW5kb3cuX2d0bSA9IHdpbmRvdy5fZ3RtIHx8IFtdOwoKIC8vIEV4aXQgZWFybHkgaWYgdGhlIGJyb3dzZXIgY2FuJ3QgaGFuZGxlIG5ldyB0aGluZ3MKIGlmICh0eXBlb2YgcGVyZm9ybWFuY2UgPT09ICd1bmRlZmluZWQnIHx8IHR5cGVvZiBwZXJmb3JtYW5jZS5tYXJrICE9PSAnZnVuY3Rpb24nIHx8IHR5cGVvZiBwZXJmb3JtYW5jZS5nZXRFbnRyaWVzQnlOYW1lICE9PSAnZnVuY3Rpb24nIHx8IHR5cGVvZiBwZXJmb3JtYW5jZS5jbGVhck1hcmtzICE9PSAnZnVuY3Rpb24nKSB7CiByZXR1cm47CiB9CgogdmFyIHVpZCA9IHBhcnNlSW50KE1hdGgucmFuZG9tKCkudG9TdHJpbmcoKS5zcGxpdCgnMC4nKVsxXSkgKyBuZXcgRGF0ZSgpLmdldFRpbWUoKSwKIG1hcmtfbmFtZSA9IGxhYmVsICsgJ18nICsgdWlkLAogcGFydHMgPSBsYWJlbC5zcGxpdCgnfCcpLAogY2F0ZWdvcnkgPSBwYXJ0c1swXSwKIHZhcmlhYmxlID0gcGFydHNbMV0sCiBsYWJlbCA9IHBhcnRzWzJdLAogbWFya190aW1lLAogbWFya19lbnRyaWVzOwoKIHBlcmZvcm1hbmNlLm1hcmsobWFya19uYW1lKTsKIG1hcmtfZW50cmllcyA9IHBlcmZvcm1hbmNlLmdldEVudHJpZXNCeU5hbWUobWFya19uYW1lKTsKCiBpZiAobWFya19lbnRyaWVzLmxlbmd0aCkgewogbWFya190aW1lID0gbWFya19lbnRyaWVzWzBdLnN0YXJ0VGltZTsKIHdpbmRvdy5fZ3RtLnB1c2goewogJ2V2ZW50JzogJ3BlcmZvcm1hbmNlX3RpbWluZycsCiAncGVyZm9ybWFuY2VfdGltaW5nLmNhdGVnb3J5JzogY2F0ZWdvcnksCiAncGVyZm9ybWFuY2VfdGltaW5nLnZhcmlhYmxlJzogdmFyaWFibGUsCiAncGVyZm9ybWFuY2VfdGltaW5nLnRpbWUnOiBtYXJrX3RpbWUgLyAxMDAwLAogJ3BlcmZvcm1hbmNlX3RpbWluZy5sYWJlbCc6IGxhYmVsCiB9KTsKIH0KIH07Cn0oKSk7Cjwvc2NyaXB0PgoKIDxzY3JpcHQgc3JjPSJodHRwczovL2YudmltZW9jZG4uY29tL2pzX29wdC9hYmxpbmNvbG5fY29tYmluZWQubWluLmpzPzQ2NDIzMGYwIj48L3NjcmlwdD4KCgoKIDwvaGVhZD4KIDxib2R5IGNsYXNzPSJvbnNpdGUgIj4KIDxkaXYgaWQ9IndyYXAiIGNsYXNzPSJvdXRlcl93cmFwIj4KIAogPGRpdiBjbGFzcz0iYm9keV9yaWJib24gZXNpX3JpYmJvbiI+PC9kaXY+CgogCiAKPHNjcmlwdD4KIHdpbmRvdy52aW1lbyA9IHdpbmRvdy52aW1lbyB8fCB7fTsKPC9zY3JpcHQ+CjxkaXYgaWQ9InRvcG5hdl9kZXNrdG9wIiBjbGFzcz0idG9wbmF2X2Rlc2t0b3AgIiByb2xlPSJiYW5uZXIiPgogPGRpdiBjbGFzcz0idG9wbmF2X2Rlc2t0b3Bfd3JhcHBlciI+CgogICA8YSBjbGFzcz0idG9wbmF2X2Rlc2t0b3BfbG9nbyIgaHJlZj0iLy92aW1lby5jb20iIGFsdD0iR28gdG8gVmltZW8gaG9tZSBwYWdlIiB0aXRsZT0iR28gdG8gVmltZW8gaG9tZSBwYWdlIiBhcmlhLWxhYmVsPSJHbyB0byBWaW1lbyBob21lIHBhZ2UiIGRhdGEtZmF0YWwtYXR0cmFjdGlvbj0iY29udGFpbmVyOnRvcF9uYXZ8Y29tcG9uZW50OnZpbWVvX2hvbWUiIGRhdGEtZ3RtLWNsaWNrPSJ0b3BfbmF2X2hvbWVfY2xpY2siPgogIDxzdmcgYWx0PSJWaW1lbyIgd2lkdGg9IjEwMCIgaGVpZ2h0PSI0MCI+PHBhdGggZD0iTTIyLjQ0OCAxNC41NzVjLS4xMDQgMi4xNy0xLjYxOCA1LjE0Ni00LjU0NCA4LjkxMi0zLjAzIDMuOTQyLTUuNTkgNS45MTItNy42ODYgNS45MTItMS4yOTcgMC0yLjM5Ny0xLjIwNC0zLjMtMy42LS42LTIuMi0xLjIwMi00LjM5OC0xLjc5NC02LjU5OC0uNjY0LTIuMzk2LTEuMzgtMy42LTIuMTQ3LTMuNi0uMTY2IDAtLjc0Ny4zNTQtMS43NTMgMS4wNWwtMS4wNDgtMS4zNWMxLjEtLjk2NSAyLjE5LTEuOTMgMy4yNTctMi45MDUgMS40NjMtMS4yNjUgMi41NzMtMS45NCAzLjMtMi4wMDIgMS43MzItLjE2NiAyLjggMS4wMTcgMy4yMDUgMy41NTguNDM1IDIuNzQuNzM2IDQuNDQuOTAyIDUuMTE1LjQ5OCAyLjI3IDEuMDQ4IDMuNDAyIDEuNjUgMy40MDIuNDY2IDAgMS4xNzItLjczNyAyLjEwNS0yLjIxLjkzNC0xLjQ3MyAxLjQzMi0yLjU5MyAxLjUwNC0zLjM3LjEzMy0xLjI3Ny0uMzY1LTEuOTEtMS41MDYtMS45MS0uNTMgMC0xLjA4LjEyNS0xLjY1LjM2NCAxLjEtMy41OSAzLjE4Ni01LjMzMyA2LjI3Ny01LjIzIDIuMjczLjA3MyAzLjM1IDEuNTU2IDMuMjI3IDQuNDZtMTMuNzU1IDcuMDM0Yy0uOTMzIDEuNzY0LTIuMjIgMy4zNy0zLjg2IDQuODAzLTIuMjQgMS45My00LjQ3IDIuOTA1LTYuNyAyLjkwNS0xLjAzNy4wMDItMS44MjYtLjMzLTIuMzc2LS45OTQtLjU1LS42NjMtLjgxLTEuNTM1LS43NzctMi42MDMuMDMtMS4xLjM3Mi0yLjggMS4wMjUtNS4xMDQuNjU0LTIuMzAzLjk3Ni0zLjUzNy45NzYtMy43MDMgMC0uODYtLjMtMS4yOTctLjkwMi0xLjI5Ny0uMTk4IDAtLjc3LjM1My0xLjcwMiAxLjA0OGwtMS4xNTItMS4zNWMxLjA3LS45NjIgMi4xMzctMS45MjcgMy4yMDYtMi45MDIgMS40My0xLjI2NiAyLjUtMS45NCAzLjIwNS0yLjAwMiAxLjEtLjEwMyAxLjkxLjIzIDIuNDI4Ljk3Ni41MTguNzQ3LjcwNSAxLjcyMi41OCAyLjkxNS0uNDM1IDIuMDM0LS45MDIgNC42MDctMS40IDcuNzMtLjAzIDEuNDMuNDg4IDIuMTQ2IDEuNTU2IDIuMTQ2LjQ2NyAwIDEuMjk3LS40OTggMi41LTEuNDgzLjk5Ni0uODIgMS44MTUtMS41OTggMi40NS0yLjMyNGwuOTQyIDEuMjQ0bS00LjM1Ny0xNy44Yy0uMDMuODMtLjQ0NiAxLjYyOC0xLjI1NSAyLjM5NS0uOS44Ni0xLjk3IDEuMjk2LTMuMjA0IDEuMjk2LTEuOSAwLTIuODIyLS44My0yLjc1LTIuNDkuMDMyLS44Ni41NC0xLjY5IDEuNTI2LTIuNDkuOTg1LS43OTcgMi4wNzQtMS4xOSAzLjI3OC0xLjE5LjcwNSAwIDEuMjg2LjI3IDEuNzUzLjgyLjQ2Ny41NC42ODQgMS4xLjY1MyAxLjY2bTM1LjYxMiAxNy44Yy0uOTMzIDEuNzYzLTIuMjIgMy4zNy0zLjg2IDQuODAyLTIuMjQgMS45My00LjQ3IDIuOTA0LTYuNyAyLjkwNC0yLjE2OC4wMDItMy4yMTYtMS4yMDItMy4xNTMtMy41OTguMDMtMS4wNy4yMzgtMi4zNTUuNjIyLTMuODUuMzg0LTEuNTAzLjU5LTIuNjY1LjYyMy0zLjUwNS4wMy0xLjI2NS0uMzUzLTEuODk4LTEuMTUyLTEuODk4LS44NyAwLTEuOTEgMS4wMzYtMy4xMTIgMy4xLTEuMjc2IDIuMTY4LTEuOTYgNC4yNzQtMi4wNjQgNi4zMDgtLjA3MyAxLjQzLjA3MiAyLjU0LjQyNSAzLjI5OC0yLjMyNC4wNjQtMy45NjMtLjMyLTQuODg2LTEuMTUtLjgzLS43MzctMS4yMTItMS45NS0xLjE1LTMuNjUyLjAzLTEuMDY4LjE5OC0yLjEzNy40ODgtMy4yMDUuMjktMS4wNy40NTctMi4wMjMuNDg4LTIuODUzLjA2Mi0xLjIzNC0uMzg0LTEuODU3LTEuMzUtMS44NTctLjg0IDAtMS43NC45NTUtMi43MDYgMi44NTMtLjk2NiAxLjktMS41MDUgMy44OS0xLjYxIDUuOTU2LS4wNiAxLjg2Ny4wNTMgMy4xNzQuMzY0IDMuOS0yLjI5My4wNjItMy45Mi0uNDE1LTQuODc2LTEuNDUyLS43OTgtLjg2LTEuMTYtMi4xOC0xLjEtMy45NDIuMDMyLS44Ni4xODgtMi4wNzUuNDU3LTMuNjIuMjgtMS41NDYuNDI1LTIuNzUuNDU3LTMuNjIuMDYyLS42MDMtLjA4My0uOTAzLS40NDYtLjkwMy0uMTk3IDAtLjc2OC4zNC0xLjcwMiAxLjAxNWwtMS4yMDMtMS4zNDhjLjE2OC0uMTM1IDEuMjE2LTEuMSAzLjE1Ni0yLjkwNSAxLjQtMS4yOTcgMi4zNTQtMS45NyAyLjg1Mi0yLjAwMi44NzItLjA3MyAxLjU2Ny4yOSAyLjEwNiAxLjA4LjUzLjc4Ny44IDEuNjkuOCAyLjcyNyAwIC4zMzItLjAzMi42NTQtLjEwNS45NTQuNDk3LS43NjYgMS4wOC0xLjQzIDEuNzUyLTIgMS41MzctMS4zNCAzLjI2LTIuMDg2IDUuMTU3LTIuMjUyIDEuNjQtLjEzNSAyLjguMjUgMy41MDUgMS4xNTIuNTcuNzM2LjgzIDEuNzg0LjggMy4xNTMuMjM3LS4xOTguNDg2LS40MTYuNzQ2LS42NTQuNzY3LS45MDMgMS41MTQtMS42MiAyLjI1LTIuMTQ4IDEuMjM1LS45MDIgMi41Mi0xLjQgMy44Ni0xLjUwNCAxLjU5Ny0uMTM1IDIuNzUuMjUgMy40NTQgMS4xNTIuNjAyLjcyNi44NyAxLjc3NC44IDMuMTQzLS4wMzIuOTMzLS4yNiAyLjI4LS42NzUgNC4wNjUtLjQxNiAxLjc3My0uNjI0IDIuOC0uNjI0IDMuMDctLjAzLjY5NS4wMyAxLjE4Mi4xOTcgMS40NDIuMTY2LjI3LjU3LjM5NCAxLjIwMy4zOTQuNDY3IDAgMS4yOTctLjQ5NyAyLjUtMS40ODIuOTk2LS44MiAxLjgxNi0xLjU5OCAyLjQ1LTIuMzI0bC45NjMgMS4yNTRtMTguNzY1LS4wNTJjLS45NjUgMS41OTgtMi44NzQgMy4xOTUtNS43MDYgNC43OTMtMy41MzggMi4wMzItNy4xMjcgMy4wNS0xMC43NTggMy4wNS0yLjcwNiAwLTQuNjM2LS45MDQtNS44MDgtMi43LS44My0xLjIzMy0xLjIzNC0yLjY5Ni0xLjIwMy00LjQwNy4wMy0yLjY5OCAxLjIzNC01LjI3IDMuNi03LjcxIDIuNjAzLTIuNjY1IDUuNjc0LTQuMDAzIDkuMjEtNC4wMDMgMy4yNyAwIDUgMS4zMjggNS4yMDggMy45OTQuMTM1IDEuNzAyLS43OTggMy40NDUtMi44IDUuMjQtMi4xMzcgMS45Ni00LjgyNCAzLjIxNS04LjA2IDMuNzQ0LjYuODMgMS41MDQgMS4yNDUgMi43MDcgMS4yNDUgMi4zOTYgMCA1LjAyLS42MTMgNy44NjMtMS44MzcgMi4wMzMtLjg2IDMuNjMtMS43NTMgNC44MDMtMi42NzZsLjk0NSAxLjI2NW0tMTEuMzYtNS4yMjhjLjAzMi0uODkyLS4zMy0xLjM1LTEuMS0xLjM1LS45OTQgMC0yLjAxLjY4Ni0zLjA0OCAyLjA2Ni0xLjAzOCAxLjM4LTEuNTY3IDIuNjk3LTEuNTk4IDMuOTYyLS4wMiAwLS4wMi4yMTggMCAuNjQzIDEuNjMtLjYgMy4wNS0xLjUxNCA0LjI0Mi0yLjczOC45NjYtMS4wNTggMS40NjMtMS45MiAxLjUwNS0yLjU4M20yNC45NDYgMS44NjhjLS4xMzUgMy4wNzItMS4yNjUgNS43MTctMy40MDIgNy45NDctMi4xMzUgMi4yMy00Ljc5IDMuMzUtNy45NTUgMy4zNS0yLjYzNSAwLTQuNjM3LS44NS02LjAwNi0yLjU1LS45OTctMS4yNjctMS41NTctMi44NTQtMS42NS00Ljc1Mi0uMTY2LTIuODYzLjg2LTUuNDk4IDMuMS03Ljg5NCAyLjQwOC0yLjY2NSA1LjQyNy0zLjk5MyA5LjA1Ny0zLjk5MyAyLjMzNCAwIDQuMDk4Ljc4OCA1LjMgMi4zNDQgMS4xMzIgMS40NDMgMS42NSAzLjI5IDEuNTU3IDUuNTVtLTUuNjY0LS4xODVjLjAzLS45MDMtLjA5NC0xLjczMy0uMzc0LTIuNDgtLjI4LS43NDctLjY5NS0xLjEzLTEuMjI0LTEuMTMtMS43MDIgMC0zLjEwMi45MjMtNC4yMDIgMi43Ni0uOTMzIDEuNTAzLTEuNDMgMy4xMS0xLjUwNCA0LjgxMi0uMDMuODQuMTE0IDEuNTc3LjQ0NiAyLjIxLjM2NC43MzYuODgyIDEuMSAxLjU1NiAxLjEgMS41MDUgMCAyLjc5LS44ODMgMy44Ni0yLjY1Ni44OTItMS40NzIgMS4zOC0zLjAwOCAxLjQ0LTQuNjE1aC4wMDJ6IiBmaWxsPSIjMTEyMjMzIi8+PC9zdmc+CiAgPC9hPgogCiAgIDxuYXYgY2xhc3M9InRvcG5hdl9kZXNrdG9wX21lbnUiIHJvbGU9Im5hdmlnYXRpb24iIGFyaWEtbGFiZWw9Ik1haW4gbWVudSI+CiA8dWwgY2xhc3M9InRvcG5hdl9tZW51X2Rlc2t0b3BfbWFpbiIgcm9sZT0ibWVudWJhciI+CgogIAogCiA8bGkgY2xhc3M9InRvcG5hdl9kZXNrdG9wX21lbnVfaXRlbXMiIGRhdGEtbWVudS1pZD0iam9pbiI+CiA8YSBjbGFzcz0idG9wbmF2X21lbnVfam9pbiBqcy10b3BuYXZfbWVudV9hdXRoIiBvbmNsaWNrPSJldmVudC5wcmV2ZW50RGVmYXVsdCgpO3ZpbWVvLk1vZGFsLmNyZWF0ZSh7c2l6ZToneHNtYWxsJyxjb250ZW50Oicvam9pbj9tb2RhbD1uZXcnfSkiIGRhdGEtZ2EtZXZlbnQtY2xpY2s9InRvcF9uYXZ8am9pbiIgZGF0YS1mYXRhbC1hdHRyYWN0aW9uPSJjb250YWluZXI6dG9wX25hdnxjb21wb25lbnQ6am9pbiIgZGF0YS1ndG0tY2xpY2s9InRvcF9uYXZfam9pbl9jbGljayIgaHJlZj0iLy92aW1lby5jb20vam9pbiIgdGl0bGU9IkJlY29tZSBhIFZpbWVvIG1lbWJlciIgdGFiaW5kZXg9IjAiIHJlbD0idG9nZ2xlIiByb2xlPSJidXR0b24iIGFyaWEtb3ducz0idG9wbmF2X2pvaW4iPgogSm9pbiA8L2E+CgogICA8L2xpPgogCiAKIDxsaSBjbGFzcz0idG9wbmF2X2Rlc2t0b3BfbWVudV9pdGVtcyIgZGF0YS1tZW51LWlkPSJsb2dpbiI+CiA8YSBjbGFzcz0ianMtdG9wbmF2X21lbnVfYXV0aCIgb25jbGljaz0iZXZlbnQucHJldmVudERlZmF1bHQoKTt2aW1lby5TZXNzaW9uLmNyZWF0ZSgncmVnJywgbnVsbCwgdHJ1ZSk7IiBkYXRhLWdhLWV2ZW50LWNsaWNrPSJ0b3BfbmF2fGxvZ2luIiBkYXRhLWZhdGFsLWF0dHJhY3Rpb249ImNvbnRhaW5lcjp0b3BfbmF2fGNvbXBvbmVudDpsb2dpbiIgZGF0YS1ndG0tY2xpY2s9InRvcF9uYXZfbG9naW5fY2xpY2siIGhyZWY9Ii8vdmltZW8uY29tL2xvZ19pbiIgdGl0bGU9IkxvZyBpbiB0byB5b3VyIGFjY291bnQiIHRhYmluZGV4PSIwIiByZWw9InRvZ2dsZSIgcm9sZT0iYnV0dG9uIiBhcmlhLW93bnM9InRvcG5hdl9sb2dpbiI+CiBMb2cgaW4gPC9hPgoKICAgPC9saT4KIAogCiA8bGkgY2xhc3M9InRvcG5hdl9kZXNrdG9wX21lbnVfaXRlbXMiIGRhdGEtbWVudS1pZD0iY3JlYXRlIj4KIDxhIGNsYXNzPSJqcy10b3BuYXYtY3JlYXRlIHRvcG5hdl9oYXNfZHJvcGRvd24gdG9wbmF2X2ljb25fY2hldnJvbl9hIiBkYXRhLWZhdGFsLWF0dHJhY3Rpb249ImNvbnRhaW5lcjp0b3BfbmF2fGNvbXBvbmVudDptYW5hZ2VfdmlkZW9zfGtleXdvcmQ6aG9zdF92aWRlb3MiIGRhdGEtZ3RtLWNsaWNrPSJ0b3BfbmF2X2NyZWF0ZV9jbGljayIgaHJlZj0iLy92aW1lby5jb20vY3JlYXRlIiB0aXRsZT0iIiB0YWJpbmRleD0iMCIgcmVsPSJ0b2dnbGUiIHJvbGU9ImJ1dHRvbiIgYXJpYS1vd25zPSJ0b3BuYXZfY3JlYXRlIj4KIEhvc3QgdmlkZW9zIDwvYT4KCiAgIDx1bCBjbGFzcz0idG9wbmF2X2Rlc2t0b3BfbWVudV9pdGVtc19kcm9wZG93biIgcm9sZT0ibWVudSIgYXJpYS1oaWRkZW49InRydWUiIGlkPSJ0b3BuYXZfY3JlYXRlIj4KICAKICA8bGkgY2xhc3M9InRvcG5hdl9kZXNrdG9wX21lbnVfaXRlbXNfZHJvcGRvd25faXRlbSIgcm9sZT0ibWVudWl0ZW0iIHRhYmluZGV4PSItMSI+CiA8YSBkYXRhLWZhdGFsLWF0dHJhY3Rpb249ImNvbnRhaW5lcjp0b3BfbmF2fGNvbXBvbmVudDpob3N0X3ZpZGVvc3xrZXl3b3JkOmNvbXBhcmVfcGxhbnMiIGRhdGEtZ3RtLWNsaWNrPSJ0b3BfbmF2X2NyZWF0ZV9tZW1iZXJzaGlwX29wdGlvbnNfY2xpY2siIGhyZWY9Ii8vdmltZW8uY29tL3VwZ3JhZGUiIHRpdGxlPSJVcGdyYWRlIG9yIGNvbXBhcmUgb3VyIHBsYW5zIj5Db21wYXJlIHBsYW5zPC9hPgogPC9saT4KICAgCiAgPGxpIGNsYXNzPSJ0b3BuYXZfZGVza3RvcF9tZW51X2l0ZW1zX2Ryb3Bkb3duX2l0ZW0iIHJvbGU9Im1lbnVpdGVtIiB0YWJpbmRleD0iLTEiPgogPGEgZGF0YS1mYXRhbC1hdHRyYWN0aW9uPSJjb250YWluZXI6dG9wX25hdnxjb21wb25lbnQ6aG9zdF92aWRlb3N8a2V5d29yZDpwcm9mZXNzaW9uYWxzIiBkYXRhLWd0bS1jbGljaz0idG9wX25hdl9jcmVhdGVfbWVtYmVyc2hpcF9vcHRpb25zX2NsaWNrIiBocmVmPSIvL3ZpbWVvLmNvbS9wcm9mZXNzaW9uYWxzIiB0aXRsZT0iR2V0IHByb2Zlc3Npb25hbCB2aWRlbyBob3N0aW5nIHRvb2xzIj5Qcm9mZXNzaW9uYWxzPC9hPgogPC9saT4KICAgCiAgPGxpIGNsYXNzPSJ0b3BuYXZfZGVza3RvcF9tZW51X2l0ZW1zX2Ryb3Bkb3duX2l0ZW0iIHJvbGU9Im1lbnVpdGVtIiB0YWJpbmRleD0iLTEiPgogPGEgZGF0YS1mYXRhbC1hdHRyYWN0aW9uPSJjb250YWluZXI6dG9wX25hdnxjb21wb25lbnQ6aG9zdF92aWRlb3N8a2V5d29yZDpidXNpbmVzc2VzIiBkYXRhLWd0bS1jbGljaz0idG9wX25hdl9jcmVhdGVfbWVtYmVyc2hpcF9vcHRpb25zX2NsaWNrIiBocmVmPSIvL3ZpbWVvLmNvbS9idXNpbmVzcyIgdGl0bGU9IkdldCBwb3dlcmZ1bCB2aWRlbyBtYXJrZXRpbmcgdG9vbHMiPkJ1c2luZXNzZXM8L2E+CiA8L2xpPgogICAKICA8bGkgY2xhc3M9InRvcG5hdl9kZXNrdG9wX21lbnVfaXRlbXNfZHJvcGRvd25faXRlbSIgcm9sZT0ibWVudWl0ZW0iIHRhYmluZGV4PSItMSI+CiA8YSBkYXRhLWZhdGFsLWF0dHJhY3Rpb249ImNvbnRhaW5lcjp0b3BfbmF2fGNvbXBvbmVudDpob3N0X3ZpZGVvc3xrZXl3b3JkOnZpZGVvX2xvdmVycyIgZGF0YS1ndG0tY2xpY2s9InRvcF9uYXZfY3JlYXRlX21lbWJlcnNoaXBfb3B0aW9uc19jbGljayIgaHJlZj0iLy92aW1lby5jb20vZXZlcnlvbmUiIHRpdGxlPSJVcGxvYWQgYW5kIHNoYXJlIHlvdXIgdmlkZW9zIj5WaWRlbyBsb3ZlcnM8L2E+CiA8L2xpPgogICAKICA8bGkgY2xhc3M9InRvcG5hdl9kZXNrdG9wX21lbnVfaXRlbXNfZHJvcGRvd25faXRlbSIgcm9sZT0ibWVudWl0ZW0iIHRhYmluZGV4PSItMSI+CiA8YSBkYXRhLWZhdGFsLWF0dHJhY3Rpb249ImNvbnRhaW5lcjp0b3BfbmF2fGNvbXBvbmVudDpob3N0X3ZpZGVvc3xrZXl3b3JkOnZpZGVvX3NjaG9vbCIgZGF0YS1ndG0tY2xpY2s9InRvcF9uYXZfY3JlYXRlX3ZpZGVvX3NjaG9vbF9jbGljayIgaHJlZj0iLy92aW1lby5jb20vdmlkZW9zY2hvb2wiIHRpdGxlPSJMZWFybiBob3cgdG8gbWFrZSBiZXR0ZXIgdmlkZW9zIj5WaWRlbyBTY2hvb2w8L2E+CiA8L2xpPgogICA8L3VsPgogIDwvbGk+CiAKIAogPGxpIGNsYXNzPSJ0b3BuYXZfZGVza3RvcF9tZW51X2l0ZW1zIiBkYXRhLW1lbnUtaWQ9IndhdGNoIj4KIDxhIGNsYXNzPSJ0b3BuYXZfaGFzX2Ryb3Bkb3duIHRvcG5hdl9pY29uX2NoZXZyb25fYSIgZGF0YS1mYXRhbC1hdHRyYWN0aW9uPSJjb250YWluZXI6dG9wX25hdnxjb21wb25lbnQ6d2F0Y2h8a2V5d29yZDp3YXRjaCIgZGF0YS1ndG0tY2xpY2s9InRvcF9uYXZfd2F0Y2hfY2xpY2siIGhyZWY9Ii8vdmltZW8uY29tL3dhdGNoIiB0aXRsZT0iIiB0YWJpbmRleD0iMCIgcmVsPSJ0b2dnbGUiIHJvbGU9ImJ1dHRvbiIgYXJpYS1vd25zPSJ0b3BuYXZfd2F0Y2giPgogV2F0Y2ggPC9hPgoKICAgPHVsIGNsYXNzPSJ0b3BuYXZfZGVza3RvcF9tZW51X2l0ZW1zX2Ryb3Bkb3duIiByb2xlPSJtZW51IiBhcmlhLWhpZGRlbj0idHJ1ZSIgaWQ9InRvcG5hdl93YXRjaCI+CiAgCiAgPGxpIGNsYXNzPSJ0b3BuYXZfZGVza3RvcF9tZW51X2l0ZW1zX2Ryb3Bkb3duX2l0ZW0iIHJvbGU9Im1lbnVpdGVtIiB0YWJpbmRleD0iLTEiPgogPGEgZGF0YS1mYXRhbC1hdHRyYWN0aW9uPSJjb250YWluZXI6dG9wX25hdnxjb21wb25lbnQ6d2F0Y2h8a2V5d29yZDpzdGFmZl9waWNrcyIgZGF0YS1ndG0tY2xpY2s9InRvcF9uYXZfd2F0Y2hfc3RhZmZfcGlja3NfY2xpY2siIGhyZWY9Ii8vdmltZW8uY29tL2NoYW5uZWxzL3N0YWZmcGlja3MiIHRpdGxlPSJUaGUgYmVzdCB2aWRlb3Mgb24gVmltZW8sIGN1cmF0ZWQgZGFpbHkgYnkgb3VyIHRlYW0iPlN0YWZmIFBpY2tzPC9hPgogPC9saT4KICAgCiAgPGxpIGNsYXNzPSJ0b3BuYXZfZGVza3RvcF9tZW51X2l0ZW1zX2Ryb3Bkb3duX2l0ZW0iIHJvbGU9Im1lbnVpdGVtIiB0YWJpbmRleD0iLTEiPgogPGEgZGF0YS1mYXRhbC1hdHRyYWN0aW9uPSJjb250YWluZXI6dG9wX25hdnxjb21wb25lbnQ6d2F0Y2h8a2V5d29yZDpjYXRlZ29yaWVzIiBkYXRhLWd0bS1jbGljaz0idG9wX25hdl93YXRjaF9jYXRlZ29yaWVzX2NsaWNrIiBocmVmPSIvL3ZpbWVvLmNvbS9jYXRlZ29yaWVzIiB0aXRsZT0iQnJvd3NlIHZpZGVvcyBieSBpbnRlcmVzdCwgZ2VucmUsIGFuZCBtb3JlIj5DYXRlZ29yaWVzPC9hPgogPC9saT4KICAgCiAgPGxpIGNsYXNzPSJ0b3BuYXZfZGVza3RvcF9tZW51X2l0ZW1zX2Ryb3Bkb3duX2l0ZW0iIHJvbGU9Im1lbnVpdGVtIiB0YWJpbmRleD0iLTEiPgogPGEgZGF0YS1mYXRhbC1hdHRyYWN0aW9uPSJjb250YWluZXI6dG9wX25hdnxjb21wb25lbnQ6d2F0Y2h8a2V5d29yZDpjaGFubmVscyIgZGF0YS1ndG0tY2xpY2s9InRvcF9uYXZfd2F0Y2hfY2hhbm5lbHNfY2xpY2siIGhyZWY9Ii8vdmltZW8uY29tL2NoYW5uZWxzIiB0aXRsZT0iVmlldyB2aWRlbyBwbGF5bGlzdHMgY3JlYXRlZCBhbmQgY3VyYXRlZCBieSBvdGhlciBtZW1iZXJzIj5DaGFubmVsczwvYT4KIDwvbGk+CiAgIAogIDxsaSBjbGFzcz0idG9wbmF2X2Rlc2t0b3BfbWVudV9pdGVtc19kcm9wZG93bl9pdGVtIiByb2xlPSJtZW51aXRlbSIgdGFiaW5kZXg9Ii0xIj4KIDxhIGRhdGEtZmF0YWwtYXR0cmFjdGlvbj0iY29udGFpbmVyOnRvcF9uYXZ8Y29tcG9uZW50OndhdGNofGtleXdvcmQ6Z3JvdXBzIiBkYXRhLWd0bS1jbGljaz0idG9wX25hdl93YXRjaF9ncm91cHNfY2xpY2siIGhyZWY9Ii8vdmltZW8uY29tL2dyb3VwcyIgdGl0bGU9IldhdGNoIGFuZCBkaXNjdXNzIHZpZGVvcyB3aXRoIG90aGVycyI+R3JvdXBzPC9hPgogPC9saT4KICAgCiAgPGxpIGNsYXNzPSJ0b3BuYXZfZGVza3RvcF9tZW51X2l0ZW1zX2Ryb3Bkb3duX2l0ZW0iIHJvbGU9Im1lbnVpdGVtIiB0YWJpbmRleD0iLTEiPgogPGEgZGF0YS1mYXRhbC1hdHRyYWN0aW9uPSJjb250YWluZXI6dG9wX25hdnxjb21wb25lbnQ6d2F0Y2h8a2V5d29yZDphcHAiIGRhdGEtZ3RtLWNsaWNrPSJ0b3BfbmF2X3dhdGNoX2FwcHNfY2xpY2siIGhyZWY9Ii8vdmltZW8uY29tL2V2ZXJ5d2hlcmUiIHRpdGxlPSJXYXRjaCBWaW1lbyB2aWRlb3Mgb24gVFZzLCBwaG9uZXMsIHRhYmxldHMsIGFuZCBtb3JlIj5BcHBzPC9hPgogPC9saT4KICAgCiAgPGxpIGNsYXNzPSJ0b3BuYXZfZGVza3RvcF9tZW51X2l0ZW1zX2Ryb3Bkb3duX2l0ZW0iIHJvbGU9Im1lbnVpdGVtIiB0YWJpbmRleD0iLTEiPgogPGEgZGF0YS1mYXRhbC1hdHRyYWN0aW9uPSJjb250YWluZXI6dG9wX25hdnxjb21wb25lbnQ6d2F0Y2h8a2V5d29yZDptb3JlIiBkYXRhLWd0bS1jbGljaz0idG9wX25hdl93YXRjaF9tb3JlX2NsaWNrIiBocmVmPSIvL3ZpbWVvLmNvbS93YXRjaCIgdGl0bGU9IkRpc2NvdmVyIG1vcmUgd2F5cyB0byB3YXRjaCBvbiBWaW1lbyI+TW9yZeKApjwvYT4KIDwvbGk+CiAgIDwvdWw+CiAgPC9saT4KIAogCiA8bGkgY2xhc3M9InRvcG5hdl9kZXNrdG9wX21lbnVfaXRlbXMiIGRhdGEtbWVudS1pZD0ib25kZW1hbmQiPgogPGEgY2xhc3M9InRvcG5hdl9oYXNfZHJvcGRvd24gdG9wbmF2X2lzX29uZGVtYW5kIHRvcG5hdl9pY29uX2NoZXZyb25fYSIgZGF0YS1mYXRhbC1hdHRyYWN0aW9uPSJjb250YWluZXI6dG9wX25hdnxjb21wb25lbnQ6b25fZGVtYW5kfGtleXdvcmQ6b25fZGVtYW5kIiBkYXRhLWd0bS1jbGljaz0idG9wX25hdl9vbmRlbWFuZF9jbGljayIgaHJlZj0iLy92aW1lby5jb20vb25kZW1hbmQiIHRpdGxlPSJXYXRjaCBtb3ZpZXMsIHNlcmllcywgYW5kIG1vcmUiIHRhYmluZGV4PSIwIiByZWw9InRvZ2dsZSIgcm9sZT0iYnV0dG9uIiBhcmlhLW93bnM9InRvcG5hdl9vbmRlbWFuZCI+CiBPbiBEZW1hbmQgPC9hPgoKICAgPHVsIGNsYXNzPSJ0b3BuYXZfZGVza3RvcF9tZW51X2l0ZW1zX2Ryb3Bkb3duIiByb2xlPSJtZW51IiBhcmlhLWhpZGRlbj0idHJ1ZSIgaWQ9InRvcG5hdl9vbmRlbWFuZCI+CiAgCiAgPGxpIGNsYXNzPSJ0b3BuYXZfZGVza3RvcF9tZW51X2l0ZW1zX2Ryb3Bkb3duX2l0ZW0iIHJvbGU9Im1lbnVpdGVtIiB0YWJpbmRleD0iLTEiPgogPGEgZGF0YS1mYXRhbC1hdHRyYWN0aW9uPSJjb250YWluZXI6dG9wX25hdnxjb21wb25lbnQ6b25fZGVtYW5kfGtleXdvcmQ6d2hhdHNfbmV3IiBkYXRhLWd0bS1jbGljaz0idG9wX25hdl9vbmRlbWFuZF93aGF0c19uZXdfY2xpY2siIGhyZWY9Ii8vdmltZW8uY29tL29uZGVtYW5kIiB0aXRsZT0iU2VlIG5ldyBhbmQgbm90ZXdvcnRoeSB0aXRsZXMgYWRkZWQgdG8gT24gRGVtYW5kIj5XaGF04oCZcyBuZXc8L2E+CiA8L2xpPgogICAKICA8bGkgY2xhc3M9InRvcG5hdl9kZXNrdG9wX21lbnVfaXRlbXNfZHJvcGRvd25faXRlbSIgcm9sZT0ibWVudWl0ZW0iIHRhYmluZGV4PSItMSI+CiA8YSBkYXRhLWZhdGFsLWF0dHJhY3Rpb249ImNvbnRhaW5lcjp0b3BfbmF2fGNvbXBvbmVudDpvbl9kZW1hbmR8a2V5d29yZDpkaXNjb3ZlciIgZGF0YS1ndG0tY2xpY2s9InRvcF9uYXZfb25kZW1hbmRfZGlzY292ZXJfY2xpY2siIGhyZWY9Ii8vdmltZW8uY29tL29uZGVtYW5kL2Rpc2NvdmVyIiB0aXRsZT0iRGlzY292ZXIgdGl0bGVzIG91ciB0ZWFtIHJlY29tbWVuZHMiPkRpc2NvdmVyPC9hPgogPC9saT4KICAgCiAgPGxpIGNsYXNzPSJ0b3BuYXZfZGVza3RvcF9tZW51X2l0ZW1zX2Ryb3Bkb3duX2l0ZW0iIHJvbGU9Im1lbnVpdGVtIiB0YWJpbmRleD0iLTEiPgogPGEgZGF0YS1mYXRhbC1hdHRyYWN0aW9uPSJjb250YWluZXI6dG9wX25hdnxjb21wb25lbnQ6b25fZGVtYW5kfGtleXdvcmQ6Z2VucmVzIiBkYXRhLWd0bS1jbGljaz0idG9wX25hdl9vbmRlbWFuZF9nZW5yZXNfY2xpY2siIGhyZWY9Ii8vdmltZW8uY29tL29uZGVtYW5kL2Jyb3dzZSIgdGl0bGU9IkJyb3dzZSB0aXRsZXMgYnkgZ2VucmUiPkdlbnJlczwvYT4KIDwvbGk+CiAgIAogIDxsaSBjbGFzcz0idG9wbmF2X2Rlc2t0b3BfbWVudV9pdGVtc19kcm9wZG93bl9pdGVtIiByb2xlPSJtZW51aXRlbSIgdGFiaW5kZXg9Ii0xIj4KIDxhIGRhdGEtZmF0YWwtYXR0cmFjdGlvbj0iY29udGFpbmVyOnRvcF9uYXZ8Y29tcG9uZW50Om9uX2RlbWFuZHxrZXl3b3JkOnR2X3NlcmllcyIgZGF0YS1ndG0tY2xpY2s9InRvcF9uYXZfb25kZW1hbmRfdHZfc2VyaWVzX2NsaWNrIiBocmVmPSIvL3ZpbWVvLmNvbS9vbmRlbWFuZC9icm93c2UvdHYrc2VyaWVzIiB0aXRsZT0iQnJvd3NlIHNlcmllcyBhbmQgVFYgc2hvd3MiPlRWICsgU2VyaWVzPC9hPgogPC9saT4KICAgCiAgPGxpIGNsYXNzPSJ0b3BuYXZfZGVza3RvcF9tZW51X2l0ZW1zX2Ryb3Bkb3duX2l0ZW0iIHJvbGU9Im1lbnVpdGVtIiB0YWJpbmRleD0iLTEiPgogPGEgZGF0YS1mYXRhbC1hdHRyYWN0aW9uPSJjb250YWluZXI6dG9wX25hdnxjb21wb25lbnQ6b25fZGVtYW5kfGtleXdvcmQ6c3RhcnRfc2VsbGluZyIgZGF0YS1ndG0tY2xpY2s9InRvcF9uYXZfb25kZW1hbmRfc2VsbF9jbGljayIgaHJlZj0iLy92aW1lby5jb20vb25kZW1hbmQvc3RhcnRzZWxsaW5nIiB0aXRsZT0iU2VsbCBkaXJlY3RseSB0byB5b3VyIGZhbnMgd2l0aCBWaW1lbyBPbiBEZW1hbmQiPlN0YXJ0IHNlbGxpbmc8L2E+CiA8L2xpPgogICA8L3VsPgogIDwvbGk+CiAKIDwvdWw+CiA8L25hdj48IS0tIC8udG9wbmF2X2Rlc2t0b3BfbWVudSAtLT4KIAogICA8ZGl2IGNsYXNzPSJ0b3BuYXZfbWVudV9yaWdodCI+CgogICA8Zm9ybSBjbGFzcz0idG9wbmF2X21lbnVfc2VhcmNoIiBhY3Rpb249Ii8vdmltZW8uY29tL3NlYXJjaCIgbWV0aG9kPSJnZXQiIHJvbGU9InNlYXJjaCIgZGF0YS1kcy1wcm90ZWN0aW9uPgogPGlucHV0IGNsYXNzPSJ0b3BuYXZfbWVudV9zZWFyY2hfaW5wdXQganMtdG9wbmF2X21lbnVfc2VhcmNoX2lucHV0IGpzLXNlYXJjaF9hdXRvY29tcGxldGUiICB0eXBlPSJ0ZXh0IiBuYW1lPSJxIiB0aXRsZT0iU2VhcmNoIHZpZGVvcywgcGVvcGxlLCBhbmQgbW9yZSIgdmFsdWU9IiIgYXJpYS1sYWJlbD0iU2VhcmNoIHZpZGVvcywgcGVvcGxlLCBhbmQgbW9yZSIgcGxhY2Vob2xkZXI9IlNlYXJjaCB2aWRlb3MsIHBlb3BsZSwgYW5kIG1vcmUiIGF1dG9jb21wbGV0ZT0ib2ZmIj48YnV0dG9uIGNsYXNzPSJ0b3BuYXZfbWVudV9zZWFyY2hfc3VibWl0IHRvcG5hdl9pY29uX3NlYXJjaF9iIiB0eXBlPSJzdWJtaXQiIGFyaWEtbGFiZWw9IlNlYXJjaCI+PC9idXR0b24+CiA8L2Zvcm0+CiAKICAKICAKICAgPGEgY2xhc3M9InRvcG5hdl9kZXNrdG9wX3VwbG9hZCB0b3BuYXZfaWNvbl91cGxvYWRfYiIgaHJlZj0iL3VwbG9hZCIgdGl0bGU9IlVwbG9hZCB5b3VyIHZpZGVvcyIgcm9sZT0iYnV0dG9uIiBkYXRhLWZhdGFsLWF0dHJhY3Rpb249ImNvbXBvbmVudDp0b3BfbmF2fGtleXdvcmQ6dXBsb2FkIiBkYXRhLWd0bS1jbGljaz0idG9wX25hdl91cGxvYWRfY2xpY2siPjxzcGFuPlVwbG9hZDwvc3Bhbj48L2E+CiAgPC9kaXY+PCEtLSAvLnRvcG5hdl9tZW51X3JpZ2h0IC0tPgogIDwvZGl2PjwhLS0gLy50b3BuYXZfZGVza3RvcF93cmFwcGVyIC0tPgo8L2Rpdj4KCiA8bmF2IGlkPSJ0b3BuYXZfbW9iaWxlIiBjbGFzcz0idG9wbmF2X21vYmlsZSAiIHJvbGU9ImJhbm5lciI+CgogPGRpdiBjbGFzcz0idG9wbmF2X21vYmlsZV9iYXIiPgogIDxidXR0b24gY2xhc3M9InRvcG5hdl9tb2JpbGVfYnV0dG9uIHRvcG5hdl9tb2JpbGVfcHVsbF9sZWZ0IHRvcG5hdl9tb2JpbGVfaGVhZGVyX2xvZ28ganMtdG9wbmF2X21vYmlsZV9oZWFkZXJfbG9nbyB0b3BuYXZfaWNvbl9tb2JpbGVfdmxvZ29fYiI+CiAgPC9idXR0b24+CiA8YSBocmVmPSIvL3ZpbWVvLmNvbS9zZWFyY2giIGNsYXNzPSJ0b3BuYXZfbW9iaWxlX2J1dHRvbiB0b3BuYXZfbW9iaWxlX3B1bGxfcmlnaHQgdG9wbmF2X21vYmlsZV9oZWFkZXJfc2VhcmNoIHRvcG5hdl9pY29uX21vYmlsZV9zZWFyY2hfYiI+IDwvYT4KIDxzcGFuIGNsYXNzPSJ0b3BuYXZfbW9iaWxlX2hlYWRlcl90aXRsZSI+PC9zcGFuPgogPC9kaXY+CgogIDxzZWN0aW9uIGNsYXNzPSJ0b3BuYXZfbW9iaWxlX21lbnUganMtdG9wbmF2X21vYmlsZV9tZW51X21haW4iPgogPGRpdiBjbGFzcz0idG9wbmF2X21vYmlsZV9iYXIiPgogPGJ1dHRvbiBjbGFzcz0idG9wbmF2X21vYmlsZV9idXR0b24gdG9wbmF2X21vYmlsZV9wdWxsX2xlZnQganMtdG9wbmF2X21vYmlsZV9oZWFkZXJfY2xvc2UgdG9wbmF2X2ljb25fbW9iaWxlX3hfYiI+IDwvYnV0dG9uPgogPGJ1dHRvbiBjbGFzcz0idG9wbmF2X21vYmlsZV9idXR0b24gdG9wbmF2X21vYmlsZV9wdWxsX3JpZ2h0IGpzLXRvcG5hdl9tb2JpbGVfaGVhZGVyX3NldHRpbmdzIHRvcG5hdl9pY29uX21vYmlsZV9nZWFyX2IiPiA8L2J1dHRvbj4KIDwvZGl2PgoKIDx1bD4KICAgPGxpPgogPGEgZGF0YS1hY3Rpb249Im1lbnUuY2xvc2UiIGNsYXNzPSJ0b3BuYXZfaWNvbl9tb2JpbGVfY2hhbm5lbF9iICIgaHJlZj0iLy92aW1lby5jb20vIj4KIFN0YWZmIFBpY2tzIDwvYT4KIDwvbGk+CiAgIDxsaT4KIDxhIGRhdGEtYWN0aW9uPSJsYXN0X3BhZ2UiIGRhdGEtYnJlZXplLWlnbm9yZSBjbGFzcz0idG9wbmF2X2ljb25fbW9iaWxlX2F2YXRhcl9iICIgaHJlZj0iL2xvZ19pbiI+CiA8c3BhbiBjbGFzcz0ibWVudV9hdXRoIj5Kb2luIG9yIGxvZyBpbjwvc3Bhbj4gPC9hPgogPC9saT4KICAgPGxpPgogPGEgZGF0YS1icmVlemUtaWdub3JlIGNsYXNzPSJ0b3BuYXZfaWNvbl9tb2JpbGVfc3Rhcl9iIiBocmVmPSIvL3ZpbWVvLmNvbS93YXRjaCI+CiBXYXRjaCA8L2E+CiA8L2xpPgogICA8bGk+CiA8YSBvbmNsaWNrPSJ2aW1lby5tb2JpbGUuZGVza3RvcF9zaGFyZWQuX3VwbG9hZCh0aGlzKTsgcmV0dXJuIGZhbHNlOyIgZGF0YS1icmVlemUtaWdub3JlIGNsYXNzPSJ0b3BuYXZfaWNvbl9tb2JpbGVfdXBsb2FkX2IiIGhyZWY9Ii8vdmltZW8uY29tL3VwbG9hZCI+CiBVcGxvYWQgPC9hPgogPC9saT4KICAgPGxpPgogPGEgZGF0YS1icmVlemUtaWdub3JlIGNsYXNzPSJ0b3BuYXZfaWNvbl9tb2JpbGVfdm9kX2IgIiBocmVmPSIvL3ZpbWVvLmNvbS9vbmRlbWFuZCI+CiBPbiBEZW1hbmQgPC9hPgogPC9saT4KICAgPGxpPgogPGEgZGF0YS1hY3Rpb249Im1lbnUuY2xvc2UiIGNsYXNzPSJ0b3BuYXZfaWNvbl9tb2JpbGVfZm9yZ290X2IgIiBocmVmPSJodHRwczovL2hlbHAudmltZW8uY29tL2hjL2VuLXVzIj4KIEhlbHAgPC9hPgogPC9saT4KICA8L3VsPgogPC9zZWN0aW9uPgoKICA8c2VjdGlvbiBjbGFzcz0idG9wbmF2X21vYmlsZV9tZW51IHRvcG5hdl9tb2JpbGVfbWVudV9zZXR0aW5ncyBqcy10b3BuYXZfbW9iaWxlX21lbnVfc2V0dGluZ3MiPgogPGRpdiBjbGFzcz0idG9wbmF2X21vYmlsZV9iYXIiPgogPGJ1dHRvbiBjbGFzcz0idG9wbmF2X21vYmlsZV9idXR0b24gdG9wbmF2X21vYmlsZV9wdWxsX2xlZnQganMtdG9wbmF2X21vYmlsZV9oZWFkZXJfc2V0dGluc19jbG9zZSB0b3BuYXZfaWNvbl9tb2JpbGVfYXJyb3dsZWZ0X2IiPiA8L2J1dHRvbj4KIDxzcGFuIGNsYXNzPSJ0b3BuYXZfbW9iaWxlX2hlYWRlcl90aXRsZSI+TW9yZSBzdHVmZjwvc3Bhbj4KIDwvZGl2PgoKIDx1bD4KICA8bGk+CiAgPGEgZGF0YS1hY3Rpb249Im1lbnUuY2xvc2UiIGNsYXNzPSIgIiBocmVmPSIvL3ZpbWVvLmNvbS90ZXJtcyI+CiBUZXJtcyBvZiBTZXJ2aWNlIDwvYT4KICAgPC9saT4KICA8bGk+CiAgPGEgZGF0YS1hY3Rpb249Im1lbnUuY2xvc2UiIGNsYXNzPSIgIiBocmVmPSIvL3ZpbWVvLmNvbS9wcml2YWN5Ij4KIFByaXZhY3kgUG9saWN5IDwvYT4KICAgPC9saT4KICA8bGk+CiAgPGEgZGF0YS1hY3Rpb249Im1lbnUuY2xvc2UiIGNsYXNzPSIgIiBocmVmPSIvL3ZpbWVvLmNvbS9kbWNhIj4KIENvcHlyaWdodCA8L2E+CiAgIDwvbGk+CiAgPGxpPgogIDxhIGRhdGEtYWN0aW9uPSJtZW51LmNsb3NlIiBjbGFzcz0iICIgaHJlZj0iLy92aW1lby5jb20vY29va2llX3BvbGljeSI+CiBDb29raWVzIDwvYT4KICAgPC9saT4KICA8bGk+CiAgPGEgZGF0YS1hY3Rpb249ImRlc2t0b3AiIG9uY2xpY2s9InZpbWVvLm1vYmlsZS5kZXNrdG9wX3NoYXJlZC5fczJkcygpOyByZXR1cm4gZmFsc2UiIGhyZWY9ImphdmFzY3JpcHQ6dm9pZCgwKSI+CiBEZXNrdG9wIHNpdGUgPC9hPgogICA8L2xpPgogIDxsaT4KICA8YSBsYW5ndWFnZSBocmVmPSIjIj4KIExhbmd1YWdlIDwvYT4KICAgPHNlbGVjdCBvbmNoYW5nZT0idmltZW8ubW9iaWxlLmRlc2t0b3Bfc2hhcmVkLl9zMmwodGhpcykiIHRpdGxlPSJDaG9vc2UgYSBkaWZmZXJlbnQgbGFuZ3VhZ2UiIGNsYXNzPSJ0b3BuYXZfbW9iaWxlX21lbnVfc2V0dGluZ3NfbGFuZ3VhZ2UiPgogICA8b3B0aW9uIGNsYXNzPSJzZWxlY3RlZCIgc2VsZWN0ZWQgdmFsdWU9ImVuIgogbmFtZT0ic2VsZWN0X2xhbmd1YWdlIj4KIEVuZ2xpc2ggPC9vcHRpb24+CiAgPG9wdGlvbiB2YWx1ZT0iZXMiCiBuYW1lPSJzZWxlY3RfbGFuZ3VhZ2UiPgogRXNwYcOxb2wgPC9vcHRpb24+CiAgPG9wdGlvbiB2YWx1ZT0iZGUtREUiCiBuYW1lPSJzZWxlY3RfbGFuZ3VhZ2UiPgogRGV1dHNjaCA8L29wdGlvbj4KICA8b3B0aW9uIHZhbHVlPSJmci1GUiIKIG5hbWU9InNlbGVjdF9sYW5ndWFnZSI+CiBGcmFuw6dhaXMgPC9vcHRpb24+CiAgPG9wdGlvbiB2YWx1ZT0iamEtSlAiCiBuYW1lPSJzZWxlY3RfbGFuZ3VhZ2UiPgog5pel5pys6KqeIDwvb3B0aW9uPgogIDxvcHRpb24gdmFsdWU9InB0LUJSIgogbmFtZT0ic2VsZWN0X2xhbmd1YWdlIj4KIFBvcnR1Z3XDqnMgPC9vcHRpb24+CiAgPG9wdGlvbiB2YWx1ZT0ia28tS1IiCiBuYW1lPSJzZWxlY3RfbGFuZ3VhZ2UiPgog7ZWc6rWt7Ja0IDwvb3B0aW9uPgogIDwvc2VsZWN0PgogIDwvbGk+CiAgPGxpPgogIDxhIGRhdGEtYWN0aW9uPSJtZW51LmNsb3NlIiBjbGFzcz0iICIgaHJlZj0iLy92aW1lby5jb20vZmFxIj4KIEZBUSA8L2E+CiAgIDwvbGk+CiAgPC91bD4KCiA8ZGl2IGNsYXNzPSJ0b3BuYXZfbW9iaWxlX21lbnVfY29weXJpZ2h0Ij5UTSArIMKpIDIwMTcgVmltZW8sIEluYy48L2Rpdj4KIDwvc2VjdGlvbj4KPC9uYXY+Cgo8c2NyaXB0PgohZnVuY3Rpb24oYSxiKXthLnZpbWVvPWEudmltZW98fHt9LHZpbWVvLm1vYmlsZT12aW1lby5tb2JpbGV8fHt9LFZpbWVvPXZpbWVvLm1vYmlsZXx8e30sVmltZW8uZGVza3RvcF9zaGFyZWQ9VmltZW8uZGVza3RvcF9zaGFyZWR8fHt9O3ZhciBjPWIuZ2V0RWxlbWVudEJ5SWQoInRvcG5hdl9kZXNrdG9wIiksZD0ib250b3VjaHN0YXJ0ImluIGE/InRvdWNoc3RhcnQiOmEuUG9pbnRlckV2ZW50PyJwb2ludGVyZG93biI6YS5NU1BvaW50ZXJFdmVudD8iTVNQb2ludGVyRG93biI6ImNsaWNrIjsiY2xpY2siIT09ZCYmYy5hZGRFdmVudExpc3RlbmVyKGQsZnVuY3Rpb24oYSl7dmFyIGI9ImltZyI9PT1hLnRhcmdldC50YWdOYW1lLnRvTG93ZXJDYXNlKCk/YS50YXJnZXQucGFyZW50Tm9kZTphLnRhcmdldDtiLmNsYXNzTGlzdC5jb250YWlucygidG9wbmF2X2hhc19kcm9wZG93biIpJiYoYS5wcmV2ZW50RGVmYXVsdCgpLGEuc3RvcFByb3BhZ2F0aW9uKCkpfSwhMSksYy5hZGRFdmVudExpc3RlbmVyKGQsZnVuY3Rpb24oYyl7Yy50YXJnZXQuY2xhc3NMaXN0LmNvbnRhaW5zKCJqcy10b3BuYXZfbWVudV9hdXRoIikmJihiLmNvb2tpZT0ibGFzdF9wYWdlPSIrZW5jb2RlVVJJQ29tcG9uZW50KGEubG9jYXRpb24ucGF0aG5hbWUpKyI7cGF0aD0nLyc7bWF4LWFnZT0xODAwOyIpfSwhMSksVmltZW8uZGVza3RvcF9zaGFyZWQuX3VwbG9hZD1mdW5jdGlvbihjKXtpZigvaVBhZHxpUGhvbmV8aVBvZC8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSl7dmFyIGYsZyxkPSJ2aW1lbzovL2FwcC52aW1lby5jb20vdXBsb2FkP3JlZj1tb2JpbGV3ZWIiLGU9Ii91cGxvYWQiO3JldHVybiBmPWZ1bmN0aW9uKCl7Yi53ZWJraXRIaWRkZW58fChhLmxvY2F0aW9uPWUpfSxnPWZ1bmN0aW9uKCl7YS5sb2NhdGlvbj1kLHNldFRpbWVvdXQoZiwyNSl9LGcoKSwhMX1hLmxvY2F0aW9uPWMuaHJlZn0sVmltZW8uZGVza3RvcF9zaGFyZWQuX3MyZHM9ZnVuY3Rpb24oKXtiLmNvb2tpZT0ib3B0X291dF9tb2JpbGU9MTtleHBpcmVzPUZyaSwgMzEgRGVjIDk5OTkgMjM6NTk6NTkgR01UO2RvbWFpbj0iK3ZpbWVvLmRvbWFpbixhLmxvY2F0aW9uLnJlbG9hZCgpfSxWaW1lby5kZXNrdG9wX3NoYXJlZC5fczJsPWZ1bmN0aW9uKGIpe3ZhciBjPWIudmFsdWUsZD1uZXcgWE1MSHR0cFJlcXVlc3Q7ZC5vcGVuKCJQT1NUIiwiL3NldHRpbmdzL2xvY2FsZSIpLGQuc2V0UmVxdWVzdEhlYWRlcigiWC1SZXF1ZXN0ZWQtV2l0aCIsIlhNTEh0dHBSZXF1ZXN0IiksZC5zZXRSZXF1ZXN0SGVhZGVyKCJDb250ZW50LXR5cGUiLCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQiKSxkLnNlbmQoImxvY2FsZT0iK2MrIiZ0b2tlbj0iK3ZpbWVvLnhzcmZ0KSxkLm9ubG9hZD1mdW5jdGlvbigpezIwMD09PWQuc3RhdHVzJiZhLmxvY2F0aW9uLnJlbG9hZCgpfX07dmFyIGU9ImNsaWNrIixmPSJibG9jayIsZz0ibm9uZSIsaD1iLnF1ZXJ5U2VsZWN0b3IoIi5qcy10b3BuYXZfbW9iaWxlX2hlYWRlcl9sb2dvIik7aCYmaC5hZGRFdmVudExpc3RlbmVyKGUsZnVuY3Rpb24oYSl7YS5zdG9wUHJvcGFnYXRpb24oKSxhLnByZXZlbnREZWZhdWx0KCk7dmFyIGM9Yi5xdWVyeVNlbGVjdG9yKCIuanMtdG9wbmF2X21vYmlsZV9tZW51X21haW4iKTtjLnN0eWxlLmRpc3BsYXk9Zjt2YXIgZD1iLnF1ZXJ5U2VsZWN0b3IoIi5qcy10b3BuYXZfbW9iaWxlX2hlYWRlcl9jbG9zZSIpO2QuYWRkRXZlbnRMaXN0ZW5lcihlLGZ1bmN0aW9uKGEpe2Euc3RvcFByb3BhZ2F0aW9uKCksYS5wcmV2ZW50RGVmYXVsdCgpLGMuc3R5bGUuZGlzcGxheT1nfSk7dmFyIGg9Yi5xdWVyeVNlbGVjdG9yKCIuanMtdG9wbmF2X21vYmlsZV9tZW51X3NldHRpbmdzIiksaT1iLnF1ZXJ5U2VsZWN0b3IoIi5qcy10b3BuYXZfbW9iaWxlX2hlYWRlcl9zZXR0aW5ncyIpO2kuYWRkRXZlbnRMaXN0ZW5lcihlLGZ1bmN0aW9uKGEpe2Euc3RvcFByb3BhZ2F0aW9uKCksYS5wcmV2ZW50RGVmYXVsdCgpLGguc3R5bGUuZGlzcGxheT1mLGMuc3R5bGUuZGlzcGxheT1nO3ZhciBkPWIucXVlcnlTZWxlY3RvcigiLmpzLXRvcG5hdl9tb2JpbGVfaGVhZGVyX3NldHRpbnNfY2xvc2UiKTtkLmFkZEV2ZW50TGlzdGVuZXIoZSxmdW5jdGlvbihhKXthLnN0b3BQcm9wYWdhdGlvbigpLGEucHJldmVudERlZmF1bHQoKSxoLnN0eWxlLmRpc3BsYXk9ZyxjLnN0eWxlLmRpc3BsYXk9Zn0pfSl9LCExKSxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ZnVuY3Rpb24gZihhKXt2YXIgYj1uZXcgWE1MSHR0cFJlcXVlc3Q7Yi5vcGVuKCJQT1NUIiwiL3NldHRpbmdzL25hdiIpLGIuc2V0UmVxdWVzdEhlYWRlcigiWC1SZXF1ZXN0ZWQtV2l0aCIsIlhNTEh0dHBSZXF1ZXN0IiksYi5zZXRSZXF1ZXN0SGVhZGVyKCJDb250ZW50LXR5cGUiLCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQiKSxiLnNlbmQoIm1lc3NhZ2Vfc3RhdGU9IithKyImdG9rZW49Iit2aW1lby54c3JmdCksYi5vbmxvYWQ9ZnVuY3Rpb24oKXt9fXZhciBhPWIuZ2V0RWxlbWVudEJ5SWQoInRvcG5hdl9tZW51X2F2YXRhciIpO2lmKGEpe3ZhciBjPWEucXVlcnlTZWxlY3RvcigiLnRvcG5hdl9tZW51X2F2YXRhcl9idWJibGUiKSxlPShhLnF1ZXJ5U2VsZWN0b3IoIiN0b3BuYXZfdXNlcl9kcm9wZG93biIpLCExKTtjJiZjLmNsYXNzTGlzdC5hZGQoIm9uIiksYS5hZGRFdmVudExpc3RlbmVyKCJtb3VzZW92ZXIiLGZ1bmN0aW9uKCl7ZXx8KGU9ITAsYyYmYy5jbGFzc0xpc3QucmVtb3ZlKCJvbiIpLGYoMSkpfSwhMSl9fSwxZTMpfSh3aW5kb3csZG9jdW1lbnQpOwo8L3NjcmlwdD4KCiA8ZGl2IGNsYXNzPSJ3cmFwX2NvbnRlbnQiPgogCjxkaXYgY2xhc3M9ImFwcF9iYW5uZXJfY29udGFpbmVyIj4KCiA8ZGl2IGNsYXNzPSJhcHBfYmFubmVyIGhpZGUganMtYXBwX2Jhbm5lciI+CgogPGJ1dHRvbiBjbGFzcz0iYXBwX2Jhbm5lcl9jbG9zZSBqcy1hcHBfYmFubmVyX2Nsb3NlIj4mdGltZXM7PC9idXR0b24+CgogPGRpdiBjbGFzcz0iYXBwX2Jhbm5lcl9pY29uX3dyYXBwZXIiPgogPHN2ZyBjbGFzcz0iYXBwX2Jhbm5lcl9pY29uIiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNHB4IiBoZWlnaHQ9IjI0cHgiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0iTTI0IDYuNjQzQzI0IDExLjI4NiAxNSAyMiAxMC44NzUgMjIgNiAyMiA2IDcuNzE0IDMuMDEzIDcuNzE0Yy0uMzg4IDAtMS44ODMgMS4wNy0xLjg4MyAxLjA3TDAgNy4zNThzNS4yNS01IDcuNS01YzQuNSAwIDMgMTIuNSA1LjYyNSAxMi41IDEuNSAwIDYuNzUtNy44NTcgMi4yNS03Ljg1Ny0uNzUgMC0xLjUuMzU3LTEuNS4zNTdDMTUgMy43ODcgMTcuMjUgMiAyMC42MjUgMiAyMi44NzUgMiAyNCAzLjc4NiAyNCA2LjY0M3oiLz48L3N2Zz4KIDwvZGl2PgoKIDxkaXYgY2xhc3M9ImFwcF9iYW5uZXJfY3RhIj4KIFdhdGNoIGluIG91ciBhcHAgPC9kaXY+CgogPGEgY2xhc3M9ImFwcF9iYW5uZXJfYnV0dG9uIGpzLWFwcF9iYW5uZXJfb3Blbl9hcHAiIGRhdGEtZGVlcC1saW5rPSJ2aWRlb3MvOTg2MDUzODIiIGRhdGEtc291cmNlLWNvbnRleHQ9ImNsaXAiPgogPHNwYW4gY2xhc3M9ImFwcF9iYW5uZXJfYnV0dG9uX3RleHQiPk9wZW4gaW4gYXBwPC9zcGFuPgogPC9hPgoKIDwvZGl2PgoKPC9kaXY+CgoKICA8c2NyaXB0PgogICFmdW5jdGlvbihpKXtpZih2b2lkIDA9PT1pLnZpbWVvfHx2b2lkIDA9PT1pLnZpbWVvLmNsaXBzKXtpLnZpbWVvPWkudmltZW98fHt9LGkudmltZW8uY2xpcHM9aS52aW1lby5jbGlwc3x8e307dmFyIGU9bmV3IFhNTEh0dHBSZXF1ZXN0O2Uub3BlbigiR0VUIiwiaHR0cHM6Ly9wbGF5ZXIudmltZW8uY29tL3ZpZGVvLzk4NjA1MzgyL2NvbmZpZz9ieWxpbmU9MCZjb2xsZWN0aW9ucz0xJmNvbnRleHQ9VmltZW8lNUNDb250cm9sbGVyJTVDQ2xpcENvbnRyb2xsZXIubWFpbiZkZWZhdWx0X3RvX2hkPTEmb3V0cm89bm90aGluZyZwb3J0cmFpdD0wJnNoYXJlPTEmdGl0bGU9MCZ3YXRjaF90cmFpbGVyPTAmcz02NWRlNDUwOThlMWY5ZGIwN2U0ZDgxZWVjZGE5YjUyYzlhNjMxYjVlXzE0OTA3NDcwMTQiLCEwKSxlLm9ubG9hZD1mdW5jdGlvbigpe2kudmltZW8uY2xpcHNbIjk4NjA1MzgyIl09SlNPTi5wYXJzZShlLnJlc3BvbnNlVGV4dCl9LGUud2l0aENyZWRlbnRpYWxzPSEwLGUuc2VuZCgpfX0od2luZG93KTsKIDwvc2NyaXB0PgoKPCEtLVtpZiBsdGUgSUUgOV0+CiA8c2NyaXB0PndpbmRvdy5sb2NhdGlvbiA9IHdpbmRvdy5sb2NhdGlvbiArICc/bGl0ZT0xJzs8L3NjcmlwdD4KPCFbZW5kaWZdLS0+Cgo8bWFpbiBpZD0ibWFpbiIgY2xhc3M9ImlzX2xvYWRpbmciPgogPGRpdiBjbGFzcz0iaXJpc19ncmlkIGlyaXNfZ3JpZF9mcDk2MCI+CiA8ZGl2IGNsYXNzPSJjbGlwX21haW4iPgogPGRpdiBjbGFzcz0icGxheWVyX2FyZWEiPgogPG5vc2NyaXB0PgogPGltZyBzcmM9Imh0dHBzOi8vaS52aW1lb2Nkbi5jb20vdmlkZW8vNDc5Mzk5OTI3LmpwZz9tdz0xOTIwJmFtcDttaD0xMDgwJmFtcDtxPTcwIiBhbHQ9IiIgc3R5bGU9ImRpc3BsYXk6IGJsb2NrOyBtYXJnaW46IDAgYXV0bzsgbWF4LWhlaWdodDogNTQwcHg7IiAvPgogPC9ub3NjcmlwdD4KIDwvZGl2PgoKIDxub3NjcmlwdD4KIDxkaXYgY2xhc3M9ImNsaXBfbWFpbi1jb250ZW50IGlyaXNfZ3JpZC13cmFwcGVyLS1jb250ZW50Ij4KIDxkaXYgY2xhc3M9ImlyaXNfZ3JpZC1jb250ZW50Ij4KIDxkaXYgY2xhc3M9InJvdyB1LWNvbGxhcHNlIGNsaXAtbm90aWZpY2F0aW9uIiBzdHlsZT0ibWFyZ2luLXRvcDogMWVtOyBtYXJnaW4tYm90dG9tOiAxLjVlbTsiPgogPGRpdiBjbGFzcz0iaXJpc19ub3RpZmljYXRpb24gaXJpc19ub3RpZmljYXRpb24tY2xpcCBpcmlzX25vdGlmaWNhdGlvbi1jbGlwLS1jYXV0aW9uIGlyaXNfbm90aWZpY2F0aW9uLS1uby1jbG9zZSBjbGVhcmZpeCIgc3R5bGU9Im1hcmdpbi1ib3R0b206IDA7Ij4KIDxwPlBsZWFzZSBlbmFibGUgSmF2YVNjcmlwdCB0byBleHBlcmllbmNlIFZpbWVvIGluIGFsbCBvZiBpdHMgZ2xvcnkuPC9wPgogPC9kaXY+CiA8L2Rpdj4KCiA8ZGl2IGNsYXNzPSJpcmlzX2dyaWQtY29udGVudCI+CiA8ZGl2IGNsYXNzPSJjbGlwX2luZm8td3JhcHBlciI+CiA8ZGl2IGNsYXNzPSJjbGlwX2luZm8iPgogPGgxIGNsYXNzPSJjbGlwX2luZm8taGVhZGVyIj5EZWFmaGVhdmVuIC0gVGhlIFBlY2FuIFRyZWUgKExpdmUpPC9oMT4KIDwvZGl2PgogPGRpdiBjbGFzcz0iY2xpcF9pbmZvLXN1YmxpbmUtLXdhdGNoIGNsaXBfaW5mby1zdWJsaW5lLS1pbmxpbmUiPgogPHAgY2xhc3M9InVzZXJieWxpbmUtc3VibGluZSB1c2VyYnlsaW5lLXN1YmxpbmUtLWxnIj4KIDxzcGFuPmZyb208L3NwYW4+CiA8c3BhbiBjbGFzcz0idXNlcmxpbmsgdXNlcmxpbmstLW1kIj4KIDxhIGhyZWY9Ii9tZWdhbGF1bWFuIj5tZWdhbGF1bWFuPC9hPgogPHNwYW4gc3R5bGU9ImRpc3BsYXk6IGlubGluZS1ibG9jayI+CiAgPC9zcGFuPgogPC9zcGFuPgogPC9wPgogPHNwYW4gY2xhc3M9ImNsaXBfaW5mby10aW1lIj48dGltZSBkYXRldGltZT0iMjAxNC0wNi0xOFQyMjozMzo0MS0wNDowMCIgdGl0bGU9IldlZG5lc2RheSwgSnVuZSAxOCwgMjAxNCBhdCAxMDozMyBQTSI+MyB5ZWFycyBhZ288L3RpbWU+PC9zcGFuPgogPC9kaXY+CiA8L2Rpdj4KIDwvZGl2PgogPC9kaXY+CgogPGRpdiBjbGFzcz0iY2xpcF9kZXRhaWxzIGlyaXNfZGl2aWRlci0tZGFyayBpcmlzX2RpdmlkZXItdG9wIGlyaXNfZGl2aWRlci10b3AtLW0gaXJpc19kaXZpZGVyLWJvdCBpcmlzX2RpdmlkZXItYm90LS1tIHUtY29sbGFwc2UgY2xlYXJmaXgiPgogPGRpdiBjbGFzcz0iaXJpc19ncmlkLWNvbnRlbnQiPgogPGRpdiBjbGFzcz0iY2xpcF9kZXRhaWxzLWRlc2NyaXB0aW9uIGRlc2NyaXB0aW9uLXdyYXBwZXIgaXJpc19kZXNjIj4KIDxwIGNsYXNzPSJmaXJzdCI+VGhpcyB2aWRlbyB0YWtlbiBsaXZlIGZyb20gRGVhZmhlYXZlbiBsaXZlIGluIEpha2FydGEgb24gTWF5IDh0aCAyMDE0IGF0IFRoZSBCYXNlbWVudCBDYWZlLCBLZW1hbmcgUmF5YSwgSmFrYXJ0YS48L3A+CjxwPkRlYWZoZWF2ZW4gaXMgYW4gQW1lcmljYW4gcG9zdC1ibGFjayBtZXRhbCBiYW5kIHRoYXQgZm9ybWVkIGluIDIwMTAgaW4gU2FuIEZyYW5jaXNjbywgQ2FsaWZvcm5pYSwgVW5pdGVkIFN0YXRlcy4gVGhlIGdyb3VwIGJlZ2FuIGFzIGEgdHdvLXBpZWNlIHdpdGggR2VvcmdlIENsYXJrZSBhbmQgS2VycnkgTWNDb3kgd2hvIHJlY29yZGVkIGFuZCBzZWxmLXJlbGVhc2VkIGEgZGVtbyBhbGJ1bSB0b2dldGhlci4gQWZ0ZXIgYSB3YXJtIHJlY2VwdGlvbiwgRGVhZmhlYXZlbiByZWNydWl0ZWQgdGhyZWUgbmV3IG1lbWJlcnMgYW5kIGJlZ2FuIHRvIHRvdXIuIEJlZm9yZSB0aGUgY2xvc2Ugb2YgMjAxMCwgdGhlIGJhbmQgc2lnbmVkIHRvIERlYXRod2lzaCBJbmMuIGFuZCBsYXRlciByZWxlYXNlZCB0aGVpciBkZWJ1dCBhbGJ1bSBSb2FkcyB0byBKdWRhaCBpbiBBcHJpbCAyMDExLiBUaGUgZm9sbG93LXVwIGFsYnVtLCBTdW5iYXRoZXIsIHdhcyByZWxlYXNlZCBvbiBKdW5lIDExLCAyMDEzLiBBZnRlciBhbm90aGVyIGxpbmV1cCBjaGFuZ2UsIHRoZSBiYW5kIHRvdXJlZCBmb3IgdGhlIGFsYnVtIGV4dGVuc2l2ZWx5IGFuZCBhcmUgc3RpbGwgb24gYSBtYXNzaXZlIGludGVybmF0aW9uYWwgdG91ci48L3A+CjxwPkRlYWZoZWF2ZW4gZm9ybWVkIGluIEZlYnJ1YXJ5IDIwMTAgaW4gU2FuIEZyYW5jaXNjbyB3aXRoIHZvY2FsaXN0IEdlb3JnZSBDbGFya2UgYW5kIGd1aXRhcmlzdCBLZXJyeSBNY0NveSwgd2hvIHByZXZpb3VzbHkgcGVyZm9ybWVkIGluIGEgZ3JpbmRjb3JlIGJhbmQgdG9nZXRoZXIuIENsYXJrZSBpc24mIzAzOTt0IHN1cmUgaG93IGhlIGFycml2ZWQgb24gdGhlIG5hbWUgRGVhZmhlYXZlbiwgdGhvdWdoIGhlIGlzIGF3YXJlIG9mIGl0cyBhcHBlYXJhbmNlIGluIFdpbGxpYW0gU2hha2VzcGVhcmUmIzAzOTtzIFNvbm5ldCAyOS4gVGhlIHR3byB3b3JkcyAmIzAzOTtkZWFmJiMwMzk7IGFuZCAmIzAzOTtoZWF2ZW4mIzAzOTsgd2VyZSBjb21iaW5lZCBhcyBhbiBob21hZ2UgdG8gU2xvd2RpdmUuPC9wPgo8cD5DbGFya2UgYW5kIE1jQ295IHJlY29yZGVkIHRoZSBEZW1vIGFsYnVtIGluIEFwcmlsIDIwMTAgYXQgQXRvbWljIEdhcmRlbiBTdHVkaW9zLCB3aGljaCB3YXMgcmVsZWFzZWQgYm90aCBvbiBjYXNzZXR0ZSB0YXBlIGluIGxpbWl0ZWQgcXVhbnRpdGllcyBhbmQgZGlnaXRhbGx5LiBUaGUgdW50aXRsZWQgZGVtbyBmZWF0dXJlZCBmb3VyIHNvbmdzIHRoYXQgY29tYmluZWQgdHJhZGl0aW9uYWwgc2NyZWFtbyB3aXRoIGJsYWNrIG1ldGFsIGFuZCBwb3N0LXJvY2suIE9yaWdpbmFsbHksIERlYWZoZWF2ZW4gZGlkbiYjMDM5O3QgaW50ZW5kIHRvIHJlbGVhc2UgdGhlIG1hdGVyaWFsLCBidXQgdGhleSBsYXRlciBzZW50IGl0IG91dCB0byBhIGZldyBvZiB0aGVpciBmYXZvcml0ZSBibG9ncy48L3A+CjxwPkFmdGVyIHRoZSBkZW1vIGhhZCBiZWVuIHBvc2l0aXZlbHkgcmVjZWl2ZWQsIENsYXJrZSBhbmQgTWNDb3kgcmVjcnVpdGVkIHRocmVlIGFkZGl0aW9uYWwgbXVzaWNpYW5zIC0gYmFzc2lzdCBEZXJlayBQcmluZSwgZ3VpdGFyaXN0IE5pY2sgQmFzc2V0dCBvZiB0aGUgc2hvZWdhemUgYmFuZHMgV2hpcnIgKGZvcm1lcmx5IFdoaXJsKSBhbmQgTm90aGluZywgYW5kIGRydW1tZXIgVHJldm9yIERlc2Nocnl2ZXIsIHdobyByZXNwb25kZWQgdG8gYW4gYWQgb24gQ3JhaWdzbGlzdCAtIHRvIGZvcm0gYSBmaXZlLXBpZWNlIGdyb3VwLCBhbmQgc3RhcnRlZCBwbGF5aW5nIHRoZWlyIGZpcnN0IHNob3dzIGluIEp1bHkgMjAxMC48L3A+CjxwPkZpbG1lZCBieSBtZWdhbGF1bWFuPGJyPgpzb3VuZCByZWNvcmRlZCBieSBab29tIEg0bjxicj4KRWRpdGVkIGJ5IG1lZ2FsYXVtYW48L3A+IDwvZGl2PgogPC9kaXY+CiA8L2Rpdj4KIDwvZGl2PgogPC9ub3NjcmlwdD4KIDwvZGl2PgogPC9kaXY+CjwvbWFpbj4KCjxzY3JpcHQ+CiB3aW5kb3cudmltZW8gPSB3aW5kb3cudmltZW8gfHwge307CiB3aW5kb3cudmltZW8uY2xpcF9wYWdlX2NvbmZpZyA9IHsiY2xpcCI6eyJpZCI6OTg2MDUzODIsInRpdGxlIjoiRGVhZmhlYXZlbiAtIFRoZSBQZWNhbiBUcmVlIChMaXZlKSIsImRlc2NyaXB0aW9uIjoiPHAgY2xhc3M9XCJmaXJzdFwiPlRoaXMgdmlkZW8gdGFrZW4gbGl2ZSBmcm9tIERlYWZoZWF2ZW4gbGl2ZSBpbiBKYWthcnRhIG9uIE1heSA4dGggMjAxNCBhdCBUaGUgQmFzZW1lbnQgQ2FmZSwgS2VtYW5nIFJheWEsIEpha2FydGEuPFwvcD5cbjxwPkRlYWZoZWF2ZW4gaXMgYW4gQW1lcmljYW4gcG9zdC1ibGFjayBtZXRhbCBiYW5kIHRoYXQgZm9ybWVkIGluIDIwMTAgaW4gU2FuIEZyYW5jaXNjbywgQ2FsaWZvcm5pYSwgVW5pdGVkIFN0YXRlcy4gVGhlIGdyb3VwIGJlZ2FuIGFzIGEgdHdvLXBpZWNlIHdpdGggR2VvcmdlIENsYXJrZSBhbmQgS2VycnkgTWNDb3kgd2hvIHJlY29yZGVkIGFuZCBzZWxmLXJlbGVhc2VkIGEgZGVtbyBhbGJ1bSB0b2dldGhlci4gQWZ0ZXIgYSB3YXJtIHJlY2VwdGlvbiwgRGVhZmhlYXZlbiByZWNydWl0ZWQgdGhyZWUgbmV3IG1lbWJlcnMgYW5kIGJlZ2FuIHRvIHRvdXIuIEJlZm9yZSB0aGUgY2xvc2Ugb2YgMjAxMCwgdGhlIGJhbmQgc2lnbmVkIHRvIERlYXRod2lzaCBJbmMuIGFuZCBsYXRlciByZWxlYXNlZCB0aGVpciBkZWJ1dCBhbGJ1bSBSb2FkcyB0byBKdWRhaCBpbiBBcHJpbCAyMDExLiBUaGUgZm9sbG93LXVwIGFsYnVtLCBTdW5iYXRoZXIsIHdhcyByZWxlYXNlZCBvbiBKdW5lIDExLCAyMDEzLiBBZnRlciBhbm90aGVyIGxpbmV1cCBjaGFuZ2UsIHRoZSBiYW5kIHRvdXJlZCBmb3IgdGhlIGFsYnVtIGV4dGVuc2l2ZWx5IGFuZCBhcmUgc3RpbGwgb24gYSBtYXNzaXZlIGludGVybmF0aW9uYWwgdG91ci48XC9wPlxuPHA+RGVhZmhlYXZlbiBmb3JtZWQgaW4gRmVicnVhcnkgMjAxMCBpbiBTYW4gRnJhbmNpc2NvIHdpdGggdm9jYWxpc3QgR2VvcmdlIENsYXJrZSBhbmQgZ3VpdGFyaXN0IEtlcnJ5IE1jQ295LCB3aG8gcHJldmlvdXNseSBwZXJmb3JtZWQgaW4gYSBncmluZGNvcmUgYmFuZCB0b2dldGhlci4gQ2xhcmtlIGlzbiYjMDM5O3Qgc3VyZSBob3cgaGUgYXJyaXZlZCBvbiB0aGUgbmFtZSBEZWFmaGVhdmVuLCB0aG91Z2ggaGUgaXMgYXdhcmUgb2YgaXRzIGFwcGVhcmFuY2UgaW4gV2lsbGlhbSBTaGFrZXNwZWFyZSYjMDM5O3MgU29ubmV0IDI5LiBUaGUgdHdvIHdvcmRzICYjMDM5O2RlYWYmIzAzOTsgYW5kICYjMDM5O2hlYXZlbiYjMDM5OyB3ZXJlIGNvbWJpbmVkIGFzIGFuIGhvbWFnZSB0byBTbG93ZGl2ZS48XC9wPlxuPHA+Q2xhcmtlIGFuZCBNY0NveSByZWNvcmRlZCB0aGUgRGVtbyBhbGJ1bSBpbiBBcHJpbCAyMDEwIGF0IEF0b21pYyBHYXJkZW4gU3R1ZGlvcywgd2hpY2ggd2FzIHJlbGVhc2VkIGJvdGggb24gY2Fzc2V0dGUgdGFwZSBpbiBsaW1pdGVkIHF1YW50aXRpZXMgYW5kIGRpZ2l0YWxseS4gVGhlIHVudGl0bGVkIGRlbW8gZmVhdHVyZWQgZm91ciBzb25ncyB0aGF0IGNvbWJpbmVkIHRyYWRpdGlvbmFsIHNjcmVhbW8gd2l0aCBibGFjayBtZXRhbCBhbmQgcG9zdC1yb2NrLiBPcmlnaW5hbGx5LCBEZWFmaGVhdmVuIGRpZG4mIzAzOTt0IGludGVuZCB0byByZWxlYXNlIHRoZSBtYXRlcmlhbCwgYnV0IHRoZXkgbGF0ZXIgc2VudCBpdCBvdXQgdG8gYSBmZXcgb2YgdGhlaXIgZmF2b3JpdGUgYmxvZ3MuPFwvcD5cbjxwPkFmdGVyIHRoZSBkZW1vIGhhZCBiZWVuIHBvc2l0aXZlbHkgcmVjZWl2ZWQsIENsYXJrZSBhbmQgTWNDb3kgcmVjcnVpdGVkIHRocmVlIGFkZGl0aW9uYWwgbXVzaWNpYW5zIC0gYmFzc2lzdCBEZXJlayBQcmluZSwgZ3VpdGFyaXN0IE5pY2sgQmFzc2V0dCBvZiB0aGUgc2hvZWdhemUgYmFuZHMgV2hpcnIgKGZvcm1lcmx5IFdoaXJsKSBhbmQgTm90aGluZywgYW5kIGRydW1tZXIgVHJldm9yIERlc2Nocnl2ZXIsIHdobyByZXNwb25kZWQgdG8gYW4gYWQgb24gQ3JhaWdzbGlzdCAtIHRvIGZvcm0gYSBmaXZlLXBpZWNlIGdyb3VwLCBhbmQgc3RhcnRlZCBwbGF5aW5nIHRoZWlyIGZpcnN0IHNob3dzIGluIEp1bHkgMjAxMC48XC9wPlxuPHA+RmlsbWVkIGJ5IG1lZ2FsYXVtYW48YnI+XG5zb3VuZCByZWNvcmRlZCBieSBab29tIEg0bjxicj5cbkVkaXRlZCBieSBtZWdhbGF1bWFuPFwvcD4iLCJ1cGxvYWRlZF9vbiI6IjIwMTQtMDYtMTggMjI6MzM6NDEiLCJ1cGxvYWRlZF9vbl9yZWxhdGl2ZSI6IjMgeWVhcnMgYWdvIiwidXBsb2FkZWRfb25fZnVsbCI6IldlZG5lc2RheSwgSnVuZSAxOCwgMjAxNCBhdCAxMDozMyBQTSBFU1QiLCJpc19zcGF0aWFsIjpmYWxzZSwicHJpdmFjeSI6eyJpc19wdWJsaWMiOnRydWUsInR5cGUiOiJhbnlib2R5IiwiZGVzY3JpcHRpb24iOiJQdWJsaWMifSwiZHVyYXRpb24iOnsicmF3Ijo3NTMsImZvcm1hdHRlZCI6IjEyOjMzIn0sImlzX2xpa2VkIjpmYWxzZSwiaXNfdW5hdmFpbGFibGUiOmZhbHNlfSwib3duZXIiOnsiaWQiOjk2MjcyODMsImRpc3BsYXlfbmFtZSI6Im1lZ2FsYXVtYW4iLCJhY2NvdW50X3R5cGUiOiIiLCJiYWRnZSI6bnVsbCwicG9ydHJhaXQiOnsic3JjIjoiaHR0cHM6XC9cL2kudmltZW9jZG4uY29tXC9wb3J0cmFpdFwvNzg1OTExNV83NXg3NSIsInNyY18yeCI6Imh0dHBzOlwvXC9pLnZpbWVvY2RuLmNvbVwvcG9ydHJhaXRcLzc4NTkxMTVfMTUweDE1MCJ9LCJ1cmwiOiJcL21lZ2FsYXVtYW4iLCJ2ZXJpZmllZCI6dHJ1ZSwiaXNfZm9sbG93aW5nIjpmYWxzZX0sIm9uZGVtYW5kIjpudWxsLCJicmFuZF9jaGFubmVsIjpudWxsLCJjdXJfdXNlciI6bnVsbCwic3RhdHVzIjp7InN0YXRlIjoicmVhZHkifSwiY29weXJpZ2h0X3N0YXR1cyI6eyJpc19ibG9ja2VkIjpmYWxzZX0sImNvbnRlbnRfYmxvY2tfc3RhdHVzIjp7ImlzX2Jsb2NrZWQiOmZhbHNlLCJtZXNzYWdlIjpudWxsLCJjb250aW51b3VzX3BsYXlfZW5hYmxlZCI6ZmFsc2V9LCJwbGF5ZXIiOnsiY29uZmlnX3VybCI6Imh0dHBzOlwvXC9wbGF5ZXIudmltZW8uY29tXC92aWRlb1wvOTg2MDUzODJcL2NvbmZpZz9ieWxpbmU9MCZjb2xsZWN0aW9ucz0xJmNvbnRleHQ9VmltZW8lNUNDb250cm9sbGVyJTVDQ2xpcENvbnRyb2xsZXIubWFpbiZkZWZhdWx0X3RvX2hkPTEmb3V0cm89bm90aGluZyZwb3J0cmFpdD0wJnNoYXJlPTEmdGl0bGU9MCZ3YXRjaF90cmFpbGVyPTAmcz02NWRlNDUwOThlMWY5ZGIwN2U0ZDgxZWVjZGE5YjUyYzlhNjMxYjVlXzE0OTA3NDcwMTQiLCJwbGF5ZXJfdXJsIjoicGxheWVyLnZpbWVvLmNvbSIsImRpbWVuc2lvbnMiOnsiaGVpZ2h0Ijo1NDAsIndpZHRoIjo5NjB9LCJwb3N0ZXIiOnsidXJsIjoiaHR0cHM6XC9cL2kudmltZW9jZG4uY29tXC92aWRlb1wvNDc5Mzk5OTI3LmpwZz9tdz0yMDAwJm1oPTEwODAmcT03MCJ9fSwic2hhcmVfZW5hYmxlZCI6dHJ1ZSwiY29udGludW91c19wbGF5X2VuYWJsZWQiOnRydWUsInNlbmRfdG9fd2lwc3Rlcl9lbmFibGVkIjpmYWxzZSwidGh1bWJuYWlsIjp7InNyYyI6Imh0dHBzOlwvXC9pLnZpbWVvY2RuLmNvbVwvdmlkZW9cLzQ3OTM5OTkyN18xOTB4MTA3LmpwZyIsInNyY18yeCI6Imh0dHBzOlwvXC9pLnZpbWVvY2RuLmNvbVwvdmlkZW9cLzQ3OTM5OTkyN18zODB4MjE0LmpwZyIsIndpZHRoIjoxOTAsImhlaWdodCI6MTA3LCJpZCI6NDc5Mzk5OTI3fSwiYWRzIjp7ImFmY190ZXh0X2FkIjp7InB1Yl9pZCI6ImNhLXB1Yi0yNDU5MjQyMTk5MDQ4NzAwIn0sImRpc3BsYXlfYWQiOnsibmV0d29ya19pZCI6IjU0NTQ5NTQ0IiwidW5pdF9uYW1lIjoiY2xpcCIsInNpemVzIjpbMzAwLDI1MF0sImN1c3RvbV90YXJnZXRpbmciOnsiY29udGVudF9yYXRpbmciOnt9fX19LCJjb250ZW50X3JhdGluZyI6bnVsbCwibm90aWZpY2F0aW9ucyI6W10sImNhdGVnb3JpZXNfY29uZmlnIjp7ImNhdGVnb3JpZXMiOm51bGwsInRvdGFsX2NhdGVnb3JpZXMiOjB9LCJtdXNpY190cmFjayI6bnVsbCwiY2NfbGljZW5zZSI6ImJ5IiwiY3JlZGl0cyI6eyJ0b3RhbF9jcmVkaXRzIjp7InJhdyI6MCwiZm9ybWF0dGVkIjowfX0sInN0cmVhbSI6eyJpZCI6bnVsbCwicG9zIjowfSwiY29sbGVjdGlvbl9hZGRlciI6eyJlbmFibGVkIjp0cnVlfSwiY2xpcF9zdGF0cyI6eyJlbmFibGVkIjpmYWxzZX0sImRvd25sb2FkX2NvbmZpZyI6W10sInN1cnZleV91cmwiOiJodHRwczpcL1wvd3d3Lm1hcmtldGluZ3Jlc2VhcmNocmVzb3VyY2VzLmNvbVwvaW1hZ2VzXC9vdm0wMDUxNlwvbXJyLmFzcD9JLlVzZXIxPU8mdXNlcj1sb2dnZWRvdXQmY2xpcD05ODYwNTM4MiZ2dWlkPSJ9Owogd2luZG93LmNhbl9wcmVsb2FkID0gdHJ1ZTsKCiA8L3NjcmlwdD4KCiA8ZGl2IGNsYXNzPSJoaWRlIj4KIDxkaXYgaWQ9Imdvb2dsZV9hZmNfYWRzIiBjbGFzcz0iZ29vZ2xlX2FkIj48L2Rpdj4KCiA8L2Rpdj4KCjxzY3JpcHQ+CmNvbnNvbGUubG9nKCclYyBcblwK4o6cICAgICAgIEBAQCYgICAgICAgQEBAQEBAXG5cCuKOnCAgICAjQEBAQEBAQCAgICAmQEBAQEBAQEAgICAgICAgQnVpbHQgdXNpbmc6XG5cCuKOnCAgI0BAQEBAQEBAQC4gICUlJkBAQEBAQEAgICAgICAgIOKAoiBSZWFjdCArIEZsdXhcblwK4o6cICAgICAgJkBAQEBAJSAgICAgKEBAQEBAKCAgICAgICDigKIgRVM2XG5cCuKOnCAgICAgICBAQEBAQEAgICAgIEBAQEBAQCAgICAgICAg4oCiIEZldGNoIEFQSVxuXArijpwgICAgICAgJUBAQEBAKCAgLkBAQEBAKCAgICAgICAgIOKAoiBGbGV4Ym94XG5cCuKOnCAgICAgICAgQEBAQEBAKEBAQEBAQFxuXArijpwgICAgICAgIC9AQEBAQEBAQEBAJSAgICAgICAgICAgIExpa2UgcGxheWluZyB3aXRoIG5ldyB0ZWNobm9sb2d5LCB0b28/XG5cCuKOnCAgICAgICAgICZAQEBAQEBAJSAgICAgICAgICAgICAgaHR0cHM6Ly92aW1lby5jb20vam9ic1xuXArijpwgICAgICAgICAgQEBAQEAjXG5cClxuXAonLCAnY29sb3I6ICMwMGFkZWY7Jyk7Cjwvc2NyaXB0PgogPC9kaXY+CgogIAo8Zm9vdGVyIGNsYXNzPSJmb290ZXJfdjIgZm9vdGVyX3YyLS1yZXNwb25zaXZlIj4KICAgIDxzZWN0aW9uIGNsYXNzPSJmb290ZXJfdjJfX3NpdGVtYXAiPgogPGRpdiBjbGFzcz0iZm9vdGVyX3YyX19saW5rcyI+CgogPHNlY3Rpb24gY2xhc3M9ImZvb3Rlcl92Ml9fbGluayBmb290ZXJfdjJfYWNjb3JkaW9uIj4KIDxpbnB1dCBjbGFzcz0iZm9vdGVyX3YyX2FjY29yZGlvbl9fY2hlY2siIHR5cGU9ImNoZWNrYm94Ij4KIDxoNCBjbGFzcz0iZm9vdGVyX3YyX19saW5rLWhlYWRlciI+CiA8c3BhbiBjbGFzcz0iZm9vdGVyX3YyX19saW5rLWhlYWRlci10ZXh0Ij5WaW1lbzwvc3Bhbj4KIDxkaXYgY2xhc3M9ImZvb3Rlcl92Ml9hY2NvcmRpb25fX3JldmVhbCI+CiA8c3ZnIGNsYXNzPSJpcmlzX2ljIGlzLS0xMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2aWV3Qm94PSIwIDAgOCA4Ij48cGF0aCBkPSJNNy43MDcgMi4yOTNjLS4zOS0uMzktMS4wMjQtLjM5LTEuNDE0IDBMNCA0LjU4NiAxLjcwNyAyLjI5M2MtLjM5LS4zOS0xLjAyNC0uMzktMS40MTQgMC0uMzkuMzktLjM5IDEuMDI0IDAgMS40MTRsMyAzYy4zOS4zOSAxLjAyNC4zOSAxLjQxNCAwbDMtM2MuMzktLjM5LjM5LTEuMDI0IDAtMS40MTR6Ii8+PC9zdmc+CiA8L2Rpdj4KIDwvaDQ+CiA8dWwgY2xhc3M9ImZvb3Rlcl92Ml9fbGluay1saXN0IGZvb3Rlcl92Ml9hY2NvcmRpb25fX21lbnUiPgogPGxpIGNsYXNzPSJmb290ZXJfdjJfX2xpbmstaXRlbSI+CiA8YSBjbGFzcz0iaXJpc19saW5rIGlyaXNfbGluay0tZ3JheS0zIGlyaXNfbGluay0tZm9vdGVyIiBocmVmPSIvYWJvdXQiIGRhdGEtZ3RtLWNsaWNrPSJmb290ZXJfbGlua19hYm91dF9jbGljayI+CiBBYm91dCBWaW1lbyA8L2E+CiA8L2xpPgogPGxpIGNsYXNzPSJmb290ZXJfdjJfX2xpbmstaXRlbSI+CiA8YSBjbGFzcz0iaXJpc19saW5rIGlyaXNfbGluay0tZ3JheS0zIGlyaXNfbGluay0tZm9vdGVyIiBocmVmPSIvYmxvZyIgZGF0YS1ndG0tY2xpY2s9ImZvb3Rlcl9saW5rX3ZpbWVvX2Jsb2dfY2xpY2siPgogVmltZW8gQmxvZyA8L2E+CiA8L2xpPgogPGxpIGNsYXNzPSJmb290ZXJfdjJfX2xpbmstaXRlbSI+CiA8YSBjbGFzcz0iaXJpc19saW5rIGlyaXNfbGluay0tZ3JheS0zIGlyaXNfbGluay0tZm9vdGVyIiBocmVmPSIvaGVscC9ndWlkZWxpbmVzIiBkYXRhLWd0bS1jbGljaz0iZm9vdGVyX2xpbmtfdmltZW9fZ3VpZGVsaW5lc19jbGljayI+CiBWaW1lbyBHdWlkZWxpbmVzIDwvYT4KIDwvbGk+CiA8bGkgY2xhc3M9ImZvb3Rlcl92Ml9fbGluay1pdGVtIj4KIDxhIGNsYXNzPSJpcmlzX2xpbmsgaXJpc19saW5rLS1ncmF5LTMgaXJpc19saW5rLS1mb290ZXIiIGhyZWY9Imh0dHBzOi8vZGV2ZWxvcGVyLnZpbWVvLmNvbSIgZGF0YS1ndG0tY2xpY2s9ImZvb3Rlcl9saW5rX2RldmVsb3BlcnNfY2xpY2siPgogRGV2ZWxvcGVycyA8L2E+CiA8L2xpPgogPGxpIGNsYXNzPSJmb290ZXJfdjJfX2xpbmstaXRlbSI+CiA8YSBjbGFzcz0iaXJpc19saW5rIGlyaXNfbGluay0tZ3JheS0zIGlyaXNfbGluay0tZm9vdGVyIiBocmVmPSIvam9icyI+CiBKb2JzIDwvYT4KIDwvbGk+CiA8L3VsPgogPC9zZWN0aW9uPgoKIDxzZWN0aW9uIGNsYXNzPSJmb290ZXJfdjJfX2xpbmsgZm9vdGVyX3YyX2FjY29yZGlvbiI+CiA8aW5wdXQgY2xhc3M9ImZvb3Rlcl92Ml9hY2NvcmRpb25fX2NoZWNrIiB0eXBlPSJjaGVja2JveCI+CiA8aDQgY2xhc3M9ImZvb3Rlcl92Ml9fbGluay1oZWFkZXIiPgogPHNwYW4gY2xhc3M9ImZvb3Rlcl92Ml9fbGluay1oZWFkZXItdGV4dCI+SGVscDwvc3Bhbj4KIDxkaXYgY2xhc3M9ImZvb3Rlcl92Ml9hY2NvcmRpb25fX3JldmVhbCI+CiA8c3ZnIGNsYXNzPSJpcmlzX2ljIGlzLS0xMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2aWV3Qm94PSIwIDAgOCA4Ij48cGF0aCBkPSJNNy43MDcgMi4yOTNjLS4zOS0uMzktMS4wMjQtLjM5LTEuNDE0IDBMNCA0LjU4NiAxLjcwNyAyLjI5M2MtLjM5LS4zOS0xLjAyNC0uMzktMS40MTQgMC0uMzkuMzktLjM5IDEuMDI0IDAgMS40MTRsMyAzYy4zOS4zOSAxLjAyNC4zOSAxLjQxNCAwbDMtM2MuMzktLjM5LjM5LTEuMDI0IDAtMS40MTR6Ii8+PC9zdmc+CiA8L2Rpdj4KIDwvaDQ+CiA8dWwgY2xhc3M9ImZvb3Rlcl92Ml9fbGluay1saXN0IGZvb3Rlcl92Ml9hY2NvcmRpb25fX21lbnUiPgogPGxpIGNsYXNzPSJmb290ZXJfdjJfX2xpbmstaXRlbSI+CiA8YSBjbGFzcz0iaXJpc19saW5rIGlyaXNfbGluay0tZ3JheS0zIGlyaXNfbGluay0tZm9vdGVyIiBocmVmPSIvaGVscCIgZGF0YS1ndG0tY2xpY2s9ImZvb3Rlcl9saW5rX2hlbHBfY2VudGVyX2NsaWNrIj4KIEhlbHAgQ2VudGVyIDwvYT4KIDwvbGk+CiA8bGkgY2xhc3M9ImZvb3Rlcl92Ml9fbGluay1pdGVtIj4KIDxhIGNsYXNzPSJpcmlzX2xpbmsgaXJpc19saW5rLS1ncmF5LTMgaXJpc19saW5rLS1mb290ZXIiIGhyZWY9Ii92aWRlb3NjaG9vbCIgZGF0YS1ndG0tY2xpY2s9ImZvb3Rlcl9saW5rX3ZpZGVvX3NjaG9vbF9jbGljayI+CiBWaWRlbyBTY2hvb2wgPC9hPgogPC9saT4KIDxsaSBjbGFzcz0iZm9vdGVyX3YyX19saW5rLWl0ZW0iPgogPGEgY2xhc3M9ImlyaXNfbGluayBpcmlzX2xpbmstLWdyYXktMyBpcmlzX2xpbmstLWZvb3RlciIgaHJlZj0iL2hlbHAvZmFxIiBkYXRhLWd0bS1jbGljaz0iZm9vdGVyX2xpbmtfZmFxX2NsaWNrIj4KIEZBUSA8L2E+CiA8L2xpPgogPGxpIGNsYXNzPSJmb290ZXJfdjJfX2xpbmstaXRlbSI+CiA8YSBjbGFzcz0iaXJpc19saW5rIGlyaXNfbGluay0tZ3JheS0zIGlyaXNfbGluay0tZm9vdGVyIiBocmVmPSIvZm9ydW1zIiBkYXRhLWd0bS1jbGljaz0iZm9vdGVyX2xpbmtfZm9ydW1zX2NsaWNrIj4KIEZvcnVtcyA8L2E+CiA8L2xpPgogPC91bD4KIDwvc2VjdGlvbj4KCiA8c2VjdGlvbiBjbGFzcz0iZm9vdGVyX3YyX19saW5rIGZvb3Rlcl92Ml9hY2NvcmRpb24iPgogPGlucHV0IGNsYXNzPSJmb290ZXJfdjJfYWNjb3JkaW9uX19jaGVjayIgdHlwZT0iY2hlY2tib3giPgogPGg0IGNsYXNzPSJmb290ZXJfdjJfX2xpbmstaGVhZGVyIj4KIDxzcGFuIGNsYXNzPSJmb290ZXJfdjJfX2xpbmstaGVhZGVyLXRleHQiPk1vcmU8L3NwYW4+CiA8ZGl2IGNsYXNzPSJmb290ZXJfdjJfYWNjb3JkaW9uX19yZXZlYWwiPgogPHN2ZyBjbGFzcz0iaXJpc19pYyBpcy0tMTIiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgdmlld0JveD0iMCAwIDggOCI+PHBhdGggZD0iTTcuNzA3IDIuMjkzYy0uMzktLjM5LTEuMDI0LS4zOS0xLjQxNCAwTDQgNC41ODYgMS43MDcgMi4yOTNjLS4zOS0uMzktMS4wMjQtLjM5LTEuNDE0IDAtLjM5LjM5LS4zOSAxLjAyNCAwIDEuNDE0bDMgM2MuMzkuMzkgMS4wMjQuMzkgMS40MTQgMGwzLTNjLjM5LS4zOS4zOS0xLjAyNCAwLTEuNDE0eiIvPjwvc3ZnPgogPC9kaXY+CiA8L2g0PgogPHVsIGNsYXNzPSJmb290ZXJfdjJfX2xpbmstbGlzdCBmb290ZXJfdjJfYWNjb3JkaW9uX19tZW51Ij4KIDxsaSBjbGFzcz0iZm9vdGVyX3YyX19saW5rLWl0ZW0iPgogPGEgY2xhc3M9ImlyaXNfbGluayBpcmlzX2xpbmstLWdyYXktMyBpcmlzX2xpbmstLWZvb3RlciIgaHJlZj0iL29uZGVtYW5kIiBkYXRhLWd0bS1jbGljaz0iZm9vdGVyX2xpbmtfb25fZGVtYW5kX2NsaWNrIj4KIE9uIERlbWFuZCA8L2E+CiA8L2xpPgogPGxpIGNsYXNzPSJmb290ZXJfdjJfX2xpbmstaXRlbSI+CiA8YSBjbGFzcz0iaXJpc19saW5rIGlyaXNfbGluay0tZ3JheS0zIGlyaXNfbGluay0tZm9vdGVyIiBocmVmPSIvZXZlcnl3aGVyZSIgZGF0YS1ndG0tY2xpY2s9ImZvb3Rlcl9saW5rX2V2ZXJ5d2hlcmVfY2xpY2siPgogRXZlcnl3aGVyZSA8L2E+CiA8L2xpPgogPGxpIGNsYXNzPSJmb290ZXJfdjJfX2xpbmstaXRlbSI+CiA8YSBjbGFzcz0iaXJpc19saW5rIGlyaXNfbGluay0tZ3JheS0zIGlyaXNfbGluay0tZm9vdGVyIiBocmVmPSIvdXBsb2FkIiBkYXRhLWd0bS1jbGljaz0iZm9vdGVyX2xpbmtfdXBsb2FkX2NsaWNrIj4KIFVwbG9hZCA8L2E+CiA8L2xpPgogPGxpIGNsYXNzPSJmb290ZXJfdjJfX2xpbmstaXRlbSI+CiA8YSBjbGFzcz0iaXJpc19saW5rIGlyaXNfbGluay0tZ3JheS0zIGlyaXNfbGluay0tZm9vdGVyIiBocmVmPSIvc2l0ZV9tYXAiIGRhdGEtZ3RtLWNsaWNrPSJmb290ZXJfbGlua19zaXRlX21hcF9jbGljayI+CiBTaXRlIE1hcCA8L2E+CiA8L2xpPgogPC91bD4KIDwvc2VjdGlvbj4KCiA8c2VjdGlvbiBjbGFzcz0iZm9vdGVyX3YyX19saW5rIGZvb3Rlcl92Ml9hY2NvcmRpb24iPgogPGlucHV0IGNsYXNzPSJmb290ZXJfdjJfYWNjb3JkaW9uX19jaGVjayIgdHlwZT0iY2hlY2tib3giPgogPGg0IGNsYXNzPSJmb290ZXJfdjJfX2xpbmstaGVhZGVyIj4KIDxzcGFuIGNsYXNzPSJmb290ZXJfdjJfX2xpbmstaGVhZGVyLXRleHQiPlVwZ3JhZGU8L3NwYW4+CiA8ZGl2IGNsYXNzPSJmb290ZXJfdjJfYWNjb3JkaW9uX19yZXZlYWwiPgogPHN2ZyBjbGFzcz0iaXJpc19pYyBpcy0tMTIiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgdmlld0JveD0iMCAwIDggOCI+PHBhdGggZD0iTTcuNzA3IDIuMjkzYy0uMzktLjM5LTEuMDI0LS4zOS0xLjQxNCAwTDQgNC41ODYgMS43MDcgMi4yOTNjLS4zOS0uMzktMS4wMjQtLjM5LTEuNDE0IDAtLjM5LjM5LS4zOSAxLjAyNCAwIDEuNDE0bDMgM2MuMzkuMzkgMS4wMjQuMzkgMS40MTQgMGwzLTNjLjM5LS4zOS4zOS0xLjAyNCAwLTEuNDE0eiIvPjwvc3ZnPgogPC9kaXY+CiA8L2g0PgogPHVsIGNsYXNzPSJmb290ZXJfdjJfX2xpbmstbGlzdCBmb290ZXJfdjJfYWNjb3JkaW9uX19tZW51Ij4KIDxsaSBjbGFzcz0iZm9vdGVyX3YyX19saW5rLWl0ZW0iPgogPGEgY2xhc3M9ImlyaXNfbGluayBpcmlzX2xpbmstLWdyYXktMyBpcmlzX2xpbmstLWZvb3RlciIgaHJlZj0iL3BsdXM/dj1mb290ZXIiPgogVmltZW8gUGx1cyA8L2E+CiA8L2xpPgogPGxpIGNsYXNzPSJmb290ZXJfdjJfX2xpbmstaXRlbSI+CiA8YSBjbGFzcz0iaXJpc19saW5rIGlyaXNfbGluay0tZ3JheS0zIGlyaXNfbGluay0tZm9vdGVyIiBocmVmPSIvcHJvP3Y9Zm9vdGVyIj4KIFZpbWVvIFBSTyA8L2E+CiA8L2xpPgogPGxpIGNsYXNzPSJmb290ZXJfdjJfX2xpbmstaXRlbSI+CiA8YSBjbGFzcz0iaXJpc19saW5rIGlyaXNfbGluay0tZ3JheS0zIGlyaXNfbGluay0tZm9vdGVyIiBocmVmPSIvYnVzaW5lc3MiPgogVmltZW8gQnVzaW5lc3MgPC9hPgogPC9saT4KIDwvdWw+CiA8L3NlY3Rpb24+CiA8L2Rpdj4KCiAgIDxhc2lkZSBpZD0iZm9vdGVyX3RpcCIgY2xhc3M9ImZvb3Rlcl92Ml9fdGlwIiBhcmlhLWxpdmU9InBvbGl0ZSI+CiA8aDQgY2xhc3M9ImZvb3Rlcl92Ml9fdGlwLWhlYWRlciI+RGlkIHlvdSBrbm93PzwvaDQ+CiA8cCBjbGFzcz0iYWN0aXZlIGZvb3Rlcl92Ml9fdGlwLWNvbnRlbnQiPllvdSBjYW4gd2luIGEgZnJlZSA8YSBocmVmPSIvcGx1cyI+VmltZW8gUGx1czwvYT4gbWVtYmVyc2hpcCBieSBzdHJldGNoaW5nIHlvdXIgZmlsbW1ha2luZyBtdXNjbGVzIGluIG9uZSBvZiBvdXIgPGEgaHJlZj0iaHR0cHM6Ly92aW1lby5jb20vZ3JvdXBzL3dlZWtlbmRjaGFsbGVuZ2UiPldlZWtlbmQgQ2hhbGxlbmdlczwvYT48L3A+CiA8L2FzaWRlPgogPC9zZWN0aW9uPgogCiAgPHNlY3Rpb24gY2xhc3M9ImZvb3Rlcl92Ml9fYXV4aWxpYXJ5ICI+CgogPGRpdiBjbGFzcz0iZm9vdGVyX3YyX19sZWdhbCI+CiA8ZGl2IGNsYXNzPSJmb290ZXJfdjJfX2F1eGlsaWFyeS1jb250ZW50Ij4KIDxwPlRNICsgJmNvcHk7IDIwMTcgVmltZW8sIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC48L3A+CiA8L2Rpdj4KIDx1bCBjbGFzcz0iZm9vdGVyX3YyX19sZWdhbC1saXN0Ij4KIDxsaSBjbGFzcz0iZm9vdGVyX3YyX19sZWdhbC1saXN0LWl0ZW0iPgogPGEgY2xhc3M9ImlyaXNfbGluayBpcmlzX2xpbmstLWdyYXktNCIgaHJlZj0iL3Rlcm1zIiB0aXRsZT0iVGVybXMgJmFtcDsgQ29uZGl0aW9ucyI+CiBUZXJtcyA8L2E+CiA8L2xpPgogPGxpIGNsYXNzPSJmb290ZXJfdjJfX2xlZ2FsLWxpc3QtaXRlbSI+CiA8YSBjbGFzcz0iaXJpc19saW5rIGlyaXNfbGluay0tZ3JheS00IiBocmVmPSIvcHJpdmFjeSIgdGl0bGU9IlByaXZhY3kgUG9saWN5Ij4KIFByaXZhY3kgPC9hPgogPC9saT4KIDxsaSBjbGFzcz0iZm9vdGVyX3YyX19sZWdhbC1saXN0LWl0ZW0iPgogPGEgY2xhc3M9ImlyaXNfbGluayBpcmlzX2xpbmstLWdyYXktNCIgaHJlZj0iL2RtY2EiIHRpdGxlPSJDb3B5cmlnaHQgSW5mb3JtYXRpb24iPgogQ29weXJpZ2h0IDwvYT4KIDwvbGk+CiA8bGkgY2xhc3M9ImZvb3Rlcl92Ml9fbGVnYWwtbGlzdC1pdGVtIj4KIDxhIGNsYXNzPSJpcmlzX2xpbmsgaXJpc19saW5rLS1ncmF5LTQiIGhyZWY9Ii9jb29raWVfcG9saWN5IiB0aXRsZT0iTGVhcm4gbW9yZSBhYm91dCBob3cgVmltZW8gdXNlcyBjb29raWVzIj4KIENvb2tpZXMgPC9hPgogPC9saT4KIDwvdWw+CiA8ZGl2IGNsYXNzPSJmb290ZXJfdjJfX2F1eGlsaWFyeS1jb250ZW50IGZvb3Rlcl92Ml9fd2l0aGxvdmUiPgogTWFkZSB3aXRoIDxhIGhyZWY9Imh0dHBzOi8vdmltZW8uY29tL2xvdmUiPjxzdmcgY2xhc3M9ImlyaXNfaWMgaXMtLTEyIGZvb3Rlcl92Ml9fbG92ZWhlYXJ0IGZvb3Rlcl92Ml9fYXV4aWxpYXJ5LWljb24iIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgdmlld0JveD0iMCAwIDEyIDEyIj48cGF0aCBkPSJNOSAyQzcuMzEyIDIgNiAzLjUgNiAzLjVTNC42ODcgMiAzIDJDMS4zMTIgMiAwIDMuMzEyIDAgNWMwIDMuMTg4IDMuNzUgMy4wMTIgNiA2IDIuMjUtMi45ODggNi0yLjgxMiA2LTYgMC0xLjY4OC0xLjMxMy0zLTMtM3oiLz48L3N2Zz48L2E+IGluIE5ZQy4gPC9kaXY+CiA8L2Rpdj4KCiA8ZGl2IGNsYXNzPSJmb290ZXJfdjJfX2ZpbHRlcnMgZm9vdGVyX3YyX19hdXhpbGlhcnktY29udGVudCI+CiA8c3BhbiBjbGFzcz0ibGFuZ3VhZ2UiPgogTGFuZ3VhZ2U6CiA8YSBjbGFzcz0iaXJpc19saW5rIGlyaXNfbGluay0tZ3JheS00IiBocmVmPSIjbGFuZ3VhZ2UiIG9uY2xpY2s9InZpbWVvLk1vZGFsLmNyZWF0ZSh7Y29udGVudDogJy9zZXR0aW5ncy9sb2NhbGUnLCBzaXplOiAnc21hbGwnfSk7IHJldHVybiBmYWxzZTsiIHRpdGxlPSJDaG9vc2UgYSBkaWZmZXJlbnQgbGFuZ3VhZ2UiPkVuZ2xpc2g8L2E+CiA8L3NwYW4+CgogIDxzcGFuIGNsYXNzPSJmb290ZXJfdjJfX2ZpbHRlciI+TWF0dXJlIGNvbnRlbnQgZmlsdGVyOiA8L3NwYW4+PGEgY2xhc3M9ImlyaXNfbGluayBpcmlzX2xpbmstLWdyYXktNCBmb290ZXJfdjJfX2ZpbHRlcnNfX2xhbmcgY29udGVudGZpbHRlciBqcy1mb290ZXJfY29udGVudGZpbHRlcl9saW5rIiBocmVmPSJqYXZhc2NyaXB0OnZvaWQoMCkiIG9uY2xpY2s9InZpbWVvLk1vZGFsLmNyZWF0ZSh7Y29udGVudDogJy9zZXR0aW5ncy9jb250ZW50cmF0aW5nJ30pIiB0aXRsZT0iQ2hhbmdlIHlvdXIgbWF0dXJlIGNvbnRlbnQgZmlsdGVyIj5Ob25lPC9hPgogIDwvZGl2PgoKPC9zZWN0aW9uPgo8L2Zvb3Rlcj4KIAogPC9kaXY+CgogCiAKIAogIDxzY3JpcHQgdHlwZT0iYXBwbGljYXRpb24vbGQranNvbiI+CiBbeyJ1cmwiOiJodHRwczovL3ZpbWVvLmNvbS85ODYwNTM4MiIsInRodW1ibmFpbFVybCI6Imh0dHBzOi8vaS52aW1lb2Nkbi5jb20vZmlsdGVyL292ZXJsYXk/c3JjMD1odHRwcyUzQSUyRiUyRmkudmltZW9jZG4uY29tJTJGdmlkZW8lMkY0NzkzOTk5MjdfMTI4MHg3MjAuanBnJnNyYzE9aHR0cHMlM0ElMkYlMkZmLnZpbWVvY2RuLmNvbSUyRmltYWdlc192NiUyRnNoYXJlJTJGcGxheV9pY29uX292ZXJsYXkucG5nIiwiZW1iZWRVcmwiOiJodHRwczovL3BsYXllci52aW1lby5jb20vdmlkZW8vOTg2MDUzODIiLCJuYW1lIjoiRGVhZmhlYXZlbiAtIFRoZSBQZWNhbiBUcmVlIChMaXZlKSIsImRlc2NyaXB0aW9uIjoiVGhpcyB2aWRlbyB0YWtlbiBsaXZlIGZyb20gRGVhZmhlYXZlbiBsaXZlIGluIEpha2FydGEgb24gTWF5IDh0aCAyMDE0IGF0IFRoZSBCYXNlbWVudCBDYWZlLCBLZW1hbmcgUmF5YSwgSmFrYXJ0YS4gIERlYWZoZWF2ZW4gaXMgYW4gQW1lcmljYW4gcG9zdC1ibGFjayBtZXRhbCBiYW5kJmhlbGxpcDsiLCJoZWlnaHQiOjcyMCwid2lkdGgiOjEyODAsInBsYXllclR5cGUiOiJIVE1MNSBGbGFzaCIsInZpZGVvUXVhbGl0eSI6IkhEIiwiZHVyYXRpb24iOiJQVDAwSDEyTTMzUyIsInVwbG9hZERhdGUiOiIyMDE0LTA2LTE4VDIyOjMzOjQxLTA0OjAwIiwidGh1bWJuYWlsIjp7IkB0eXBlIjoiSW1hZ2VPYmplY3QiLCJ1cmwiOiJodHRwczovL2kudmltZW9jZG4uY29tL2ZpbHRlci9vdmVybGF5P3NyYzA9aHR0cHMlM0ElMkYlMkZpLnZpbWVvY2RuLmNvbSUyRnZpZGVvJTJGNDc5Mzk5OTI3XzEyODB4NzIwLmpwZyZzcmMxPWh0dHBzJTNBJTJGJTJGZi52aW1lb2Nkbi5jb20lMkZpbWFnZXNfdjYlMkZzaGFyZSUyRnBsYXlfaWNvbl9vdmVybGF5LnBuZyIsIndpZHRoIjoxMjgwLCJoZWlnaHQiOjcyMH0sImF1dGhvciI6eyJAdHlwZSI6IlBlcnNvbiIsIm5hbWUiOiJtZWdhbGF1bWFuIiwidXJsIjoiaHR0cHM6Ly92aW1lby5jb20vbWVnYWxhdW1hbiJ9LCJwb3RlbnRpYWxBY3Rpb24iOnsiQHR5cGUiOiJWaWV3QWN0aW9uIiwidGFyZ2V0IjoidmltZW86Ly9hcHAudmltZW8uY29tL3ZpZGVvcy85ODYwNTM4MiJ9LCJpbnRlcmFjdGlvbkNvdW50IjoxOTEsImtleXdvcmRzIjoiW0RlYWZoZWF2ZW4sRGVhdGh3aXNoLERlYXRod2lzaGluYyxUb3VyLExpdmUsSmFrYXJ0YSxJbmRvbmVzaWEscG9zdC1ibGFjayBtZXRhbCxCYW5kLEFtZXJpY2EsMjAxNCxWaW1lbyBTdGFmZixWaW1lb10iLCJAdHlwZSI6IlZpZGVvT2JqZWN0IiwiQGNvbnRleHQiOiJodHRwOi8vc2NoZW1hLm9yZyJ9LHsiaXRlbUxpc3RFbGVtZW50IjpbeyJAdHlwZSI6Ikxpc3RJdGVtIiwicG9zaXRpb24iOjEsIml0ZW0iOnsiQGlkIjoiaHR0cHM6Ly92aW1lby5jb20vbWVnYWxhdW1hbiIsIm5hbWUiOiJtZWdhbGF1bWFuIn19LHsiQHR5cGUiOiJMaXN0SXRlbSIsInBvc2l0aW9uIjoyLCJpdGVtIjp7IkBpZCI6Imh0dHBzOi8vdmltZW8uY29tL21lZ2FsYXVtYW4vdmlkZW9zIiwibmFtZSI6IlZpZGVvcyJ9fV0sIkB0eXBlIjoiQnJlYWRjcnVtYkxpc3QiLCJAY29udGV4dCI6Imh0dHA6Ly9zY2hlbWEub3JnIn1dIDwvc2NyaXB0PgoKPHNjcmlwdD4KIHZhciBfX2ZhID0gX19mYSB8fCBbXTsKIF9fZmEucHVzaChbJ3RyYWNrUGFnZXZpZXcnXSk7CgogIC8vIEFuYWx5dGljcyBTZXR1cAogdmFyIF9ndG0gPSBfZ3RtIHx8IFtdLAogX2luaXRpYWxfZ3RtX3N0YXRlID0geyJjbGlwX2lkIjo5ODYwNTM4MiwiY3JlYXRvcl9pZCI6OTYyNzI4MywiY2F0ZWdvcnkiOiIiLCJwcml2YWN5IjoiYW55Ym9keSIsInN0YWZmX3BpY2siOiJubyIsImxhbmd1YWdlIjoiZW4iLCJ1c2VyX3N0YXR1cyI6ImxvZ2dlZF9vdXQiLCJ1c2VyX3R5cGUiOiJub25lIiwiZ2FfdW5pdmVyc2FsX2lkIjoiVUEtNzY2NDEtOCIsImNvbXNjb3JlX3NpdGVfaWQiOjEwMzQ4Mjg5fTsKCiBfaW5pdGlhbF9ndG1fc3RhdGVbJ3Z1aWQnXSA9IGRvY3VtZW50LmNvb2tpZS5yZXBsYWNlKC8oPzooPzpefC4qO1xzKil2dWlkXHMqXD1ccyooW147XSopLiokKXxeLiokLywgIiQxIik7CiBfaW5pdGlhbF9ndG1fc3RhdGVbJ2d0bS5zdGFydCddID0gbmV3IERhdGUoKS5nZXRUaW1lKCk7CiBfaW5pdGlhbF9ndG1fc3RhdGVbJ2V2ZW50J10gPSAnZ3RtLmpzJzsKIF9ndG0ucHVzaChfaW5pdGlhbF9ndG1fc3RhdGUpOwogCiAvKioKICogSWYgdGhlIGN1cnJlbnQgcmVxdWVzdCB3YXMgYnVja2V0ZWQgaW4gYW4gQUJMaW5jb2xuIGV4cGVyaW1lbnQsCiAqIHNlbmQgdGhlIHNlbGVjdGVkIHRyZWF0bWVudCBiYWNrIGZyb20gdGhlIGNsaWVudCwgdG8gZmlsdGVyIGFiIHRlc3QKICogZGF0YSBkb3duIHRvIG5vbi1yb2JvdCB1c2VycyB0aGF0IHJ1biBKYXZhU2NyaXB0LgogKi8KIGlmICgiQUJMaW5jb2xuIiBpbiB3aW5kb3cpIHsKIChmdW5jdGlvbiAoKSB7CiAgIH0pKCk7CiB9CgogIHZhciBfZXh0ZW5kID0gZnVuY3Rpb24oKXtmb3IodmFyIHI9YXJndW1lbnRzWzBdLG49MSxlPWFyZ3VtZW50cy5sZW5ndGg7ZT5uO24rKyl7dmFyIHQ9YXJndW1lbnRzW25dO2Zvcih2YXIgYSBpbiB0KXQuaGFzT3duUHJvcGVydHkoYSkmJihyW2FdPXRbYV0pfXJldHVybiByfTsKCiAgdmFyIENTU19ESVIgPSAnaHR0cHM6Ly9mLnZpbWVvY2RuLmNvbS9zdHlsZXMvY3NzX29wdC8nLAogSlNfRElSID0gJ2h0dHBzOi8vZi52aW1lb2Nkbi5jb20vanNfb3B0LycsCiBJTUFHRV9ESVIgPSAnaHR0cHM6Ly9mLnZpbWVvY2RuLmNvbS9pbWFnZXNfdjYvJywKIFNWR19ESVIgPSAnaHR0cHM6Ly9mLnZpbWVvY2RuLmNvbS9zdmcvJywKICBCVUlMRF9IQVNIID0gJzcyNDU0JzsKCiAgdmFyIHZpbWVvID0gX2V4dGVuZCgod2luZG93LnZpbWVvIHx8IHt9KSwgeyJhcHBfdmVyc2lvbiI6InY2IiwiZG9tYWluIjoidmltZW8uY29tIiwidXJsIjoidmltZW8uY29tIiwiY3VyX3VzZXIiOmZhbHNlLCJpc19tb2JpbGUiOmZhbHNlfSk7CiB2aW1lby5jb25maWcgPSBfZXh0ZW5kKCh2aW1lby5jb25maWcgfHwge30pLCB7ImxvY2FsZSI6ImVuIn0pOwoKICB2YXIgbG9jYWxlQ29uZmlnID0gewogbGFuZzogJ2VuJywKICdEYXRlJzogewogbW9udGhzOiBbIkphbnVhcnkiLCJGZWJydWFyeSIsIk1hcmNoIiwiQXByaWwiLCJNYXkiLCJKdW5lIiwiSnVseSIsIkF1Z3VzdCIsIlNlcHRlbWJlciIsIk9jdG9iZXIiLCJOb3ZlbWJlciIsIkRlY2VtYmVyIl0sCiBtb250aHNfYWJicjogWyJKYW4iLCJGZWIiLCJNYXIiLCJBcHIiLCJNYXkiLCJKdW4iLCJKdWwiLCJBdWciLCJTZXAiLCJPY3QiLCJOb3YiLCJEZWMiXSwKIGRheXM6IFsiU3VuZGF5IiwiTW9uZGF5IiwiVHVlc2RheSIsIldlZG5lc2RheSIsIlRodXJzZGF5IiwiRnJpZGF5IiwiU2F0dXJkYXkiXSwKIGRheXNfYWJicjogWyJTdW4iLCJNb24iLCJUdWUiLCJXZWQiLCJUaHUiLCJGcmkiLCJTYXQiXSwKCiAvLyBDdWx0dXJlJ3MgZGF0ZSBvcmRlcjogTU0vREQvWVlZWQogZGF0ZU9yZGVyOiBbJ2RhdGUnLCAnbW9udGgnLCAneWVhciddLAogc2hvcnREYXRlOiAnJWQvJW0vJVknLAogc2hvcnRUaW1lOiAnJUk6JU0lcCcsCiBBTTogJ0FNJywKIFBNOiAnUE0nLAogZmlyc3REYXlPZldlZWs6IDAsCgogLy8gRGF0ZS5FeHRyYXMKIG9yZGluYWw6IGZ1bmN0aW9uKGRheU9mTW9udGgpewogcmV0dXJuIGRheU9mTW9udGg7CiB9CiB9LAogJ0RhdGVQaWNrZXInOiB7CiBzZWxlY3RfYV90aW1lOiAiU2VsZWN0IGEgdGltZSIsCiB1c2VfbW91c2Vfd2hlZWw6ICJVc2UgdGhlIG1vdXNlIHdoZWVsIHRvIHF1aWNrbHkgY2hhbmdlIHZhbHVlIiwKIHRpbWVfY29uZmlybV9idXR0b246ICJPSyIsCiBhcHBseV9yYW5nZTogIkFwcGx5IiwKIGNhbmNlbDogIkNhbmNlbCIsCiB3ZWVrOiAiV2siIH0sCiAgJ051bWJlcic6IHsKIGRlY2ltYWw6ICcuJywKIGdyb3VwOiAnLCcsCiBjdXJyZW5jeTogewogcHJlZml4OiAnJCcKIH0KIH0sCiAnRm9ybVZhbGlkYXRvcic6IHsicmVxdWlyZWQiOiJUaGlzIGZpZWxkIGlzIHJlcXVpcmVkLiIsInJlcXVpcmVkQ2hrIjoiVGhpcyBmaWVsZCBpcyByZXF1aXJlZC4ifSB9OwoKIHZhciBmdWxsTG9jYWxlID0gJyc7CgogCiAgdmFyIENvcHkgPSB7dHJhbnNsYXRlOmZ1bmN0aW9uKHQsaSx1KXt2YXIgZT0nb2JqZWN0JyE9dHlwZW9mIHRoaXMuZGljdFt0XT90aGlzLmRpY3RbdF06aT90aGlzLmRpY3RbdF0ucGx1cmFsOnRoaXMuZGljdFt0XS5zaW5ndWxhcjtyZXR1cm4nb2JqZWN0Jz09dHlwZW9mIHUmJihlPXRoaXMuc3Vic3RpdHV0ZShlLHUpKSxlfSxzdWJzdGl0dXRlOmZ1bmN0aW9uKHQsaSl7cmV0dXJuIHZvaWQgMCE9PXQuc3Vic3RpdHV0ZT90LnN1YnN0aXR1dGUoaSk6dC5yZXBsYWNlKC9cXD9ceyhbXnt9XSspXH0vZyxmdW5jdGlvbih0LHUpe3JldHVybidcXCc9PXQuY2hhckF0KDApP3Quc2xpY2UoMSk6bnVsbCE9aVt1XT9pW3VdOicnfSl9LGRpY3Q6e319OwogQ29weS5kaWN0ID0geyJkaWRfeW91X21lYW5fZW1haWwiOiJEaWQgeW91IG1lYW4gPGVtPntTVUdHRVNUfTxcL2VtPj8iLCJlbWFpbF9wYXNzd29yZF9taXNtYXRjaCI6IkVtYWlsIGFuZCBwYXNzd29yZCBkbyBub3QgbWF0Y2giLCJqdXN0X25vdyI6Imp1c3Qgbm93Iiwic2Vjb25kc19hZ28iOnsic2luZ3VsYXIiOiJ7Q09VTlR9IHNlY29uZCBhZ28iLCJwbHVyYWwiOiJ7Q09VTlR9IHNlY29uZHMgYWdvIn0sIm1pbnV0ZXNfYWdvIjp7InNpbmd1bGFyIjoie0NPVU5UfSBtaW51dGUgYWdvIiwicGx1cmFsIjoie0NPVU5UfSBtaW51dGVzIGFnbyJ9LCJob3Vyc19hZ28iOnsic2luZ3VsYXIiOiJ7Q09VTlR9IGhvdXIgYWdvIiwicGx1cmFsIjoie0NPVU5UfSBob3VycyBhZ28ifSwib3Blbl9jb21tZW50X2JveCI6IkFkZCBuZXcgY29tbWVudCBpbnN0ZWFkICZyYXF1bzsiLCJ1cmxfdW5hdmFpbGFibGUiOiJTb3JyeSwgdGhpcyB1cmwgaXMgdW5hdmFpbGFibGUuIiwidW5zYXZlZF9jaGFuZ2VzX2dlbmVyaWMiOiJZb3UgaGF2ZSB1bnNhdmVkIGNoYW5nZXMsIGFyZSB5b3Ugc3VyZSB5b3Ugd2lzaCB0byBsZWF2ZT8iLCJhZGQiOiJBZGQiLCJyZW1vdmUiOiJSZW1vdmUiLCJzZWxlY3QiOiJTZWxlY3QiLCJub19mb2xsb3dlcnNfZm9yX2xldHRlciI6IllvdSBkb24mcnNxdW87dCBmb2xsb3cgYW55b25lIHRoYXQgYmVnaW4gd2l0aCB0aGUgbGV0dGVyICZsZHF1bzt7UEFHRV9MRVRURVJ9JnJkcXVvOyIsInNoYXJlX2xpbWl0X3JlYWNoZWQiOiJZb3UgaGF2ZSByZWFjaGVkIHRoZSBtYXhpbXVtIG51bWJlciBvZiB1c2VycyB0byBzaGFyZSB3aXRoLiIsImF0X2xlYXN0X29uZSI6IlRoZXJlIG11c3QgYmUgYXQgbGVhc3Qgb25lIHVzZXIuIiwiYXZhaWxhYmxlIjoiQXZhaWxhYmxlIiwidW5hdmFpbGFibGUiOiJVbmF2YWlsYWJsZSIsImJyb3dzZV9lcnJvcl9nZW5lcmljIjoiU29ycnksIHRoZXJlIHdhcyBhbiBlcnJvciIsImJyb3dzZV9lcnJvcl9ub192aWRlb3MiOiJTb3JyeSwgbm8gdmlkZW9zIGZvdW5kIiwiZm9sbG93IjoiRm9sbG93IiwiZm9sbG93aW5nIjoiRm9sbG93aW5nIiwidW5mb2xsb3ciOiJVbmZvbGxvdyIsInVuZm9sbG93aW5nIjoiVW5mb2xsb3dpbmciLCJjb3VudF9jb21tZW50cyI6eyJzaW5ndWxhciI6IntDT1VOVH0gY29tbWVudCIsInBsdXJhbCI6IntDT1VOVH0gY29tbWVudHMifSwiZmlyc3RfY29tbWVudCI6IkJlIHRoZSBmaXJzdCB0byBjb21tZW50XHUyMDI2Iiwibm9fY29tbWVudHNfZm9yX3lvdSI6IkZvcmJpZGRlbi4gWW91IGNhbm5vdCBwb3N0IGNvbW1lbnRzIG9uIHRoaXMgcGFnZS4iLCJvb3BzIjoiT29wcyEiLCJwbGF5ZXJfdHJ5X2FnYWluIjoiVGhhdCB3YXNuJ3Qgc3VwcG9zZWQgdG8gaGFwcGVuLiBQbGVhc2UgdHJ5IGFnYWluIGluIGEgZmV3IG1pbnV0ZXMuIiwiZHVyYXRpb25faW5wdXRfbWluX2R1cmF0aW9uIjoiVGhlIGR1cmF0aW9uIGNhbm5vdCBiZSBsZXNzIHRoYW4ge01JTl9EVVJBVElPTn0uIiwiZHVyYXRpb25faW5wdXRfbWF4X2R1cmF0aW9uIjoiVGhlIGR1cmF0aW9uIGNhbm5vdCBiZSBncmVhdGVyIHRoYW4ge01BWF9EVVJBVElPTn0uIiwiZHVyYXRpb25faW5wdXRfaW52YWxpZF9jaGFyYWN0ZXJzIjoiMC05IGFuZCA6IGFyZSB0aGUgb25seSBhY2NlcHRhYmxlIGlucHV0cy4iLCJjbG9zZSI6IkNsb3NlIiwiZXhwYW5kIjoiRXhwYW5kIiwibG9hZGluZyI6IkxvYWRpbmcuLi4iLCJ0b3AiOiJ0b3AiLCJhZHZhbmNlZF9zZWFyY2giOiJBZHZhbmNlZCBTZWFyY2giLCJub19zdWdnZXN0aW9ucyI6Ik5vIHN1Z2dlc3Rpb25zIiwicmVjZW50X3NlYXJjaGVzIjoiUmVjZW50IFNlYXJjaGVzIiwic2VhcmNoX2FsbCI6IlNlYXJjaCBBbGwgb2YgVmltZW8iLCJlbWFpbF9hbmRfcGFzc3dvcmQiOiJQbGVhc2UgZW50ZXIgeW91ciBlbWFpbCBhbmQgcGFzc3dvcmQiLCJlbWFpbF9hZGRyZXNzIjoiUGxlYXNlIGVudGVyIGEgdmFsaWQgZW1haWwgYWRkcmVzcyIsIm5hbWVfZW1haWxfYW5kX3Bhc3N3b3JkIjoiUGxlYXNlIGVudGVyIHlvdXIgbmFtZSwgZW1haWwsIGFuZCBwYXNzd29yZCIsIjEgVHJhY2siOiIxIFRyYWNrIiwiQWJvdXQiOiJBYm91dCIsIkFjY2VwdCI6IkFjY2VwdCIsIkFkZCBhIG5ldyBjb21tZW50IjoiQWRkIGEgbmV3IGNvbW1lbnQiLCJBZGQgY29tbWVudCI6IkFkZCBjb21tZW50IiwiQWRkIHJlcGx5IjoiQWRkIHJlcGx5IiwiQWRkIHRvIGNvbGxlY3Rpb25zIjoiQWRkIHRvIGNvbGxlY3Rpb25zIiwiQWRkIjoiQWRkIiwiQWxidW1zIjoiQWxidW1zIiwiQXBwcm94aW1hdGUgVGltZSBSZW1haW5pbmciOiJBcHByb3hpbWF0ZSBUaW1lIFJlbWFpbmluZyIsIkFyZSB5b3Ugc3VyZSB5b3Ugd2FudCBkZWxldGUgdGhpcyBjb21tZW50IHBlcm1hbmVudGx5PyI6IkFyZSB5b3Ugc3VyZSB5b3Ugd2FudCBkZWxldGUgdGhpcyBjb21tZW50IHBlcm1hbmVudGx5PyIsIkF1dG9wbGF5IG5leHQgdmlkZW8iOiJBdXRvcGxheSBuZXh0IHZpZGVvIiwiQnV5IHtESVNQTEFZX1BSSUNFfSI6IkJ1eSB7RElTUExBWV9QUklDRX0iLCJieSB7QVJUSVNUX05BTUV9IjoiYnkge0FSVElTVF9OQU1FfSIsIkNhbmNlbCI6IkNhbmNlbCIsIkNoYW5nZSBzZXR0aW5ncy4iOiJDaGFuZ2Ugc2V0dGluZ3MuIiwiQ2hhbmdlIHlvdXIgY29udGVudCBmaWx0ZXIgcHJlZmVyZW5jZSI6IkNoYW5nZSB5b3VyIGNvbnRlbnQgZmlsdGVyIHByZWZlcmVuY2UiLCJDaGFubmVscyI6IkNoYW5uZWxzIiwiQ2hvb3NlIGZpbGUiOiJDaG9vc2UgZmlsZSIsIkNsaWNrIGhlcmUgdG8gYWRkIGEgbmV3IGNvbW1lbnQiOiJDbGljayBoZXJlIHRvIGFkZCBhIG5ldyBjb21tZW50IiwiQ2xpY2sgdG8gc2hhcmUgdGhpcyBjb21tZW50IG9uIHtTT0NJQUxfQVBQfSI6IkNsaWNrIHRvIHNoYXJlIHRoaXMgY29tbWVudCBvbiB7U09DSUFMX0FQUH0iLCJDb2xsZWN0aW9uIG5hbWUiOiJDb2xsZWN0aW9uIG5hbWUiLCJDb21tZW50cyBhcmUgZGlzYWJsZWQuIjoiQ29tbWVudHMgYXJlIGRpc2FibGVkLiIsIkNvbW1lbnRzIjoiQ29tbWVudHMiLCJDcmVhdGl2ZSBDb21tb25zIExpY2Vuc2U6IjoiQ3JlYXRpdmUgQ29tbW9ucyBMaWNlbnNlOiIsIkRlbGV0ZSI6IkRlbGV0ZSIsIkRpbWVuc2lvbnMiOiJEaW1lbnNpb25zIiwiRG9uXHUyMDE5dCB3b3JyeSEgT25seSB5b3UgKHRoZSBjcmVhdG9yKSBjYW4gZG93bmxvYWQgdGhpcyB2aWRlby4iOiJEb25cdTIwMTl0IHdvcnJ5ISBPbmx5IHlvdSAodGhlIGNyZWF0b3IpIGNhbiBkb3dubG9hZCB0aGlzIHZpZGVvLiIsIkRvd25sb2FkIGNhcHRpb25zIGFuZCBzdWJ0aXRsZXMiOiJEb3dubG9hZCBjYXB0aW9ucyBhbmQgc3VidGl0bGVzIiwiRG93bmxvYWQgTGluayI6IkRvd25sb2FkIExpbmsiLCJEb3dubG9hZCI6IkRvd25sb2FkIiwiRHVlIHRvIHlvdXIgcHJpdmFjeSBzZXR0aW5ncywgdGhpcyB2aWRlbyBjYW5ub3QgYmUgYWRkZWQgdG8gY2hhbm5lbHMgb3IgZ3JvdXBzLiI6IkR1ZSB0byB5b3VyIHByaXZhY3kgc2V0dGluZ3MsIHRoaXMgdmlkZW8gY2Fubm90IGJlIGFkZGVkIHRvIGNoYW5uZWxzIG9yIGdyb3Vwcy4iLCJFZGl0IFNldHRpbmdzIjoiRWRpdCBTZXR0aW5ncyIsIkVkaXQiOiJFZGl0IiwiRXhpdCBmdWxsc2NyZWVuIjoiRXhpdCBmdWxsc2NyZWVuIiwiRmV0Y2giOiJGZXRjaCIsIkZpbGUgU2l6ZSI6IkZpbGUgU2l6ZSIsIkZpbGUiOiJGaWxlIiwiRmluaXNoZXMiOiJGaW5pc2hlcyIsIkZvbGxvdyI6IkZvbGxvdyIsIkZvbGxvd2luZyI6IkZvbGxvd2luZyIsIkZvcm1lciBWaW1lbyBzdGFmZiBtZW1iZXIiOiJGb3JtZXIgVmltZW8gc3RhZmYgbWVtYmVyIiwiZnJvbSB7VVNFUl9OQU1FfSI6ImZyb20ge1VTRVJfTkFNRX0iLCJmcm9tIHtWT0RfVElUTEV9IjoiZnJvbSB7Vk9EX1RJVExFfSIsIkdldCBtZSBvdXQgb2YgaGVyZSEiOiJHZXQgbWUgb3V0IG9mIGhlcmUhIiwiR3JvdXBzIjoiR3JvdXBzIiwiSG93IHdhcyB5b3VyIHZpZXdpbmcgZXhwZXJpZW5jZT8gIjoiSG93IHdhcyB5b3VyIHZpZXdpbmcgZXhwZXJpZW5jZT8gIiwiSW5jb3JyZWN0IHJhdGluZyI6IkluY29ycmVjdCByYXRpbmciLCJKdXN0IGNoZWNrIHlvdXIgaW5ib3ggZm9yIGEgbWVzc2FnZSBmcm9tIHVzIGFuZCB2ZXJpZnkgeW91ciBlbWFpbCBhZGRyZXNzLiBUaGVuIHlvdSBjYW4gZG8gYWxsIGtpbmRzIG9mIGNvb2wgc3R1ZmYgb24gVmltZW8hICh7QX1IZWxwe1wvQX0pIjoiSnVzdCBjaGVjayB5b3VyIGluYm94IGZvciBhIG1lc3NhZ2UgZnJvbSB1cyBhbmQgdmVyaWZ5IHlvdXIgZW1haWwgYWRkcmVzcy4gVGhlbiB5b3UgY2FuIGRvIGFsbCBraW5kcyBvZiBjb29sIHN0dWZmIG9uIFZpbWVvISAoe0F9SGVscHtcL0F9KSIsIkxlYXJuIGFib3V0IG90aGVyIHZpb2xhdGlvbnMiOiJMZWFybiBhYm91dCBvdGhlciB2aW9sYXRpb25zIiwiTGVhcm4gYWJvdXQgU3RhdHMiOiJMZWFybiBhYm91dCBTdGF0cyIsIkxlYXJuIG1vcmUiOiJMZWFybiBtb3JlIiwiTGVhdmUgdGhlIGZpcnN0IGNvbW1lbnQ6IjoiTGVhdmUgdGhlIGZpcnN0IGNvbW1lbnQ6IiwiTGV0IHVzIGtub3cuIjoiTGV0IHVzIGtub3cuIiwiTGlrZSB3aGF0IHlvdSBzYXc/IFNlZSB0aGUgZnVsbCB0aXRsZS4iOiJMaWtlIHdoYXQgeW91IHNhdz8gU2VlIHRoZSBmdWxsIHRpdGxlLiIsIkxpa2UiOiJMaWtlIiwiTGlrZWQiOiJMaWtlZCIsIkxpa2VzIjoiTGlrZXMiLCJMb2FkIHtDT1VOVH0gcHJldmlvdXMgY29tbWVudCI6eyJzaW5ndWxhciI6IkxvYWQge0NPVU5UfSBwcmV2aW91cyBjb21tZW50IiwicGx1cmFsIjoiTG9hZCB7Q09VTlR9IHByZXZpb3VzIGNvbW1lbnRzIn0sIkxvYWRpbmciOiJMb2FkaW5nIiwiTWFuYWdlIGNvbGxlY3Rpb25zIjoiTWFuYWdlIGNvbGxlY3Rpb25zIiwiTW9uZXltYWtlciI6Ik1vbmV5bWFrZXIiLCJtb3JlIjoibW9yZSIsIk5leHQgdmlkZW8iOiJOZXh0IHZpZGVvIiwiTm90IHBsYXlpbmcgbmljZSI6Ik5vdCBwbGF5aW5nIG5pY2UiLCJPbmx5IHZpc2libGUgdG8geW91IjoiT25seSB2aXNpYmxlIHRvIHlvdSIsIk9yaWdpbmFsIGZpbGUgaXMgaW4gdGhlIGFyY2hpdmUiOiJPcmlnaW5hbCBmaWxlIGlzIGluIHRoZSBhcmNoaXZlIiwiUGVuZGluZyBzdWJtaXNzaW9uIjoiUGVuZGluZyBzdWJtaXNzaW9uIiwiUGVybWFsaW5rIHRvIHRoaXMgY29tbWVudCI6IlBlcm1hbGluayB0byB0aGlzIGNvbW1lbnQiLCJQbGF5cyI6IlBsYXlzIiwicGxlYXNlIGxldCB1cyBrbm93IjoicGxlYXNlIGxldCB1cyBrbm93IiwiUG9ydGZvbGlvcyI6IlBvcnRmb2xpb3MiLCJQcmVzZW50ZWQgYnkge0JSQU5EX05BTUV9XHUyMDE5cyB7Q0FNUEFJR05fVElUTEV9IjoiUHJlc2VudGVkIGJ5IHtCUkFORF9OQU1FfVx1MjAxOXMge0NBTVBBSUdOX1RJVExFfSIsIlByZXNpZGVudCBvZiB0aGUgVW5pdGVkIFN0YXRlcyI6IlByZXNpZGVudCBvZiB0aGUgVW5pdGVkIFN0YXRlcyIsIlByZXZpb3VzIHZpZGVvIjoiUHJldmlvdXMgdmlkZW8iLCJQdWJsaWMgRG9tYWluIERlZGljYXRpb24iOiJQdWJsaWMgRG9tYWluIERlZGljYXRpb24iLCJSZWFkIG1vcmVcdTIwMjYiOiJSZWFkIG1vcmVcdTIwMjYiLCJSZWplY3QiOiJSZWplY3QiLCJSZW1lbWJlciB0byBiZSBjb29sIGFuZCBwbGF5IG5pY2UhIjoiUmVtZW1iZXIgdG8gYmUgY29vbCBhbmQgcGxheSBuaWNlISIsIlJlbW92ZSBjcmVkaXQiOiJSZW1vdmUgY3JlZGl0IiwiUmVudCB7RElTUExBWV9QUklDRX0iOiJSZW50IHtESVNQTEFZX1BSSUNFfSIsIlJlcGxheSI6IlJlcGxheSIsIlJlcGx5IHRvIHRoaXMgY29tbWVudCI6IlJlcGx5IHRvIHRoaXMgY29tbWVudCIsIlJlcGx5IjoiUmVwbHkiLCJSZXBvcnQgdGhpcyB2aWRlbyI6IlJlcG9ydCB0aGlzIHZpZGVvIiwiUmVwb3J0IHRoaXMgdmlkZW8/IjoiUmVwb3J0IHRoaXMgdmlkZW8/IiwiUmV0cnkgdXBsb2FkIjoiUmV0cnkgdXBsb2FkIiwiUmV2aWV3IHBhZ2UiOiJSZXZpZXcgcGFnZSIsIlNlZSBhbGwgdmlkZW8gc3RhdHMiOiJTZWUgYWxsIHZpZGVvIHN0YXRzIiwiU2VlIGZ1bGwgc3RhdGlzdGljcyI6IlNlZSBmdWxsIHN0YXRpc3RpY3MiLCJTZXR0aW5ncyI6IlNldHRpbmdzIiwiU2hhcmUiOiJTaGFyZSIsIlNob3cgbWUgdGhlIHZpZGVvIjoiU2hvdyBtZSB0aGUgdmlkZW8iLCJTaG93IG1vcmVcdTIwMjYiOiJTaG93IG1vcmVcdTIwMjYiLCJTb3VyY2UgZmlsZXMgbm90IGFjY2Vzc2VkIGZvciAzMCBkYXlzIGFyZSBhdXRvbWF0aWNhbGx5IHN0b3JlZCBpbiBvdXIgc2VjcmV0IHVuZGVyZ3JvdW5kIHN0b3JhZ2UgYXJjaGl2ZS4gQXMgc3VjaCwgaXQgbWF5IHRha2UgYSBmZXcgaG91cnMgdG8gcmV0cmlldmUgdGhlIGZpbGUuIFN0aWxsIHdhbnQgdGhlIG9yaWdpbmFsIHNvdXJjZSBmaWxlPyI6IlNvdXJjZSBmaWxlcyBub3QgYWNjZXNzZWQgZm9yIDMwIGRheXMgYXJlIGF1dG9tYXRpY2FsbHkgc3RvcmVkIGluIG91ciBzZWNyZXQgdW5kZXJncm91bmQgc3RvcmFnZSBhcmNoaXZlLiBBcyBzdWNoLCBpdCBtYXkgdGFrZSBhIGZldyBob3VycyB0byByZXRyaWV2ZSB0aGUgZmlsZS4gU3RpbGwgd2FudCB0aGUgb3JpZ2luYWwgc291cmNlIGZpbGU/IiwiU3BhbSI6IlNwYW0iLCJTdGF0cyI6IlN0YXRzIiwiU3Vic2NyaWJlIHtESVNQTEFZX1BSSUNFfVwve0JJTExJTkdfUEVSSU9EfSI6IlN1YnNjcmliZSB7RElTUExBWV9QUklDRX1cL3tCSUxMSU5HX1BFUklPRH0iLCJUaGUgcGVyc29uIHdobyBhc3NvY2lhdGVkIGEgd29yayB3aXRoIHRoaXMgZGVlZCBoYXMgZGVkaWNhdGVkIHRoZSB3b3JrIHRvIHRoZSBwdWJsaWMgZG9tYWluIGJ5IHdhaXZpbmcgYWxsIG9mIGhpcyBvciBoZXIgcmlnaHRzIHRvIHRoZSB3b3JrIHdvcmxkd2lkZSB1bmRlciBjb3B5cmlnaHQgbGF3LCBpbmNsdWRpbmcgYWxsIHJlbGF0ZWQgYW5kIG5laWdoYm9yaW5nIHJpZ2h0cywgdG8gdGhlIGV4dGVudCBhbGxvd2VkIGJ5IGxhdy4gWW91IGNhbiBjb3B5LCBtb2RpZnksIGRpc3RyaWJ1dGUgYW5kIHBlcmZvcm0gdGhlIHdvcmssIGV2ZW4gZm9yIGNvbW1lcmNpYWwgcHVycG9zZXMsIGFsbCB3aXRob3V0IGFza2luZyBwZXJtaXNzaW9uLiI6IlRoZSBwZXJzb24gd2hvIGFzc29jaWF0ZWQgYSB3b3JrIHdpdGggdGhpcyBkZWVkIGhhcyBkZWRpY2F0ZWQgdGhlIHdvcmsgdG8gdGhlIHB1YmxpYyBkb21haW4gYnkgd2FpdmluZyBhbGwgb2YgaGlzIG9yIGhlciByaWdodHMgdG8gdGhlIHdvcmsgd29ybGR3aWRlIHVuZGVyIGNvcHlyaWdodCBsYXcsIGluY2x1ZGluZyBhbGwgcmVsYXRlZCBhbmQgbmVpZ2hib3JpbmcgcmlnaHRzLCB0byB0aGUgZXh0ZW50IGFsbG93ZWQgYnkgbGF3LiBZb3UgY2FuIGNvcHksIG1vZGlmeSwgZGlzdHJpYnV0ZSBhbmQgcGVyZm9ybSB0aGUgd29yaywgZXZlbiBmb3IgY29tbWVyY2lhbCBwdXJwb3NlcywgYWxsIHdpdGhvdXQgYXNraW5nIHBlcm1pc3Npb24uIiwiVGhlIHBlcnNvbiB3aG8gdXBsb2FkZWQgdGhpcyB2aWRlbyBvYnZpb3VzbHkgZGlkblx1MjAxOXQgbWFrZSBpdCAoaXRcdTIwMTlzIGEgVFYgc2hvdywgbW92aWUgdHJhaWxlciwgb3IgcmlwcGVkIGZyb20gZWxzZXdoZXJlIHRoZSB3ZWIuKSI6IlRoZSBwZXJzb24gd2hvIHVwbG9hZGVkIHRoaXMgdmlkZW8gb2J2aW91c2x5IGRpZG5cdTIwMTl0IG1ha2UgaXQgKGl0XHUyMDE5cyBhIFRWIHNob3csIG1vdmllIHRyYWlsZXIsIG9yIHJpcHBlZCBmcm9tIGVsc2V3aGVyZSB0aGUgd2ViLikiLCJUaGlzIGNvbW1lbnQgd2lsbCBiZSBzaGFyZWQgb24ge1NPQ0lBTF9BUFB9IjoiVGhpcyBjb21tZW50IHdpbGwgYmUgc2hhcmVkIG9uIHtTT0NJQUxfQVBQfSIsIlRoaXMgbGljZW5zZSBhbGxvd3MgZm9yIHJlZGlzdHJpYnV0aW9uLCBjb21tZXJjaWFsIGFuZCBub24tY29tbWVyY2lhbCwgYXMgbG9uZyBhcyBpdCBpcyBwYXNzZWQgYWxvbmcgdW5jaGFuZ2VkIGFuZCBpbiB3aG9sZSwgd2l0aCBjcmVkaXQgdG8geW91LiI6IlRoaXMgbGljZW5zZSBhbGxvd3MgZm9yIHJlZGlzdHJpYnV0aW9uLCBjb21tZXJjaWFsIGFuZCBub24tY29tbWVyY2lhbCwgYXMgbG9uZyBhcyBpdCBpcyBwYXNzZWQgYWxvbmcgdW5jaGFuZ2VkIGFuZCBpbiB3aG9sZSwgd2l0aCBjcmVkaXQgdG8geW91LiIsIlRoaXMgbGljZW5zZSBpcyB0aGUgbW9zdCByZXN0cmljdGl2ZSBvZiBvdXIgc2l4IG1haW4gbGljZW5zZXMsIG9ubHkgYWxsb3dpbmcgb3RoZXJzIHRvIGRvd25sb2FkIHlvdXIgd29ya3MgYW5kIHNoYXJlIHRoZW0gd2l0aCBvdGhlcnMgYXMgbG9uZyBhcyB0aGV5IGNyZWRpdCB5b3UsIGJ1dCB0aGV5IGNhblx1MjAxOXQgY2hhbmdlIHRoZW0gaW4gYW55IHdheSBvciB1c2UgdGhlbSBjb21tZXJjaWFsbHkuIjoiVGhpcyBsaWNlbnNlIGlzIHRoZSBtb3N0IHJlc3RyaWN0aXZlIG9mIG91ciBzaXggbWFpbiBsaWNlbnNlcywgb25seSBhbGxvd2luZyBvdGhlcnMgdG8gZG93bmxvYWQgeW91ciB3b3JrcyBhbmQgc2hhcmUgdGhlbSB3aXRoIG90aGVycyBhcyBsb25nIGFzIHRoZXkgY3JlZGl0IHlvdSwgYnV0IHRoZXkgY2FuXHUyMDE5dCBjaGFuZ2UgdGhlbSBpbiBhbnkgd2F5IG9yIHVzZSB0aGVtIGNvbW1lcmNpYWxseS4iLCJUaGlzIGxpY2Vuc2UgbGV0cyBvdGhlcnMgZGlzdHJpYnV0ZSwgcmVtaXgsIHR3ZWFrLCBhbmQgYnVpbGQgdXBvbiB5b3VyIHdvcmssIGV2ZW4gY29tbWVyY2lhbGx5LCBhcyBsb25nIGFzIHRoZXkgY3JlZGl0IHlvdSBmb3IgdGhlIG9yaWdpbmFsIGNyZWF0aW9uLiBUaGlzIGlzIHRoZSBtb3N0IGFjY29tbW9kYXRpbmcgb2YgbGljZW5zZXMgb2ZmZXJlZC4gUmVjb21tZW5kZWQgZm9yIG1heGltdW0gZGlzc2VtaW5hdGlvbiBhbmQgdXNlIG9mIGxpY2Vuc2VkIG1hdGVyaWFscy4iOiJUaGlzIGxpY2Vuc2UgbGV0cyBvdGhlcnMgZGlzdHJpYnV0ZSwgcmVtaXgsIHR3ZWFrLCBhbmQgYnVpbGQgdXBvbiB5b3VyIHdvcmssIGV2ZW4gY29tbWVyY2lhbGx5LCBhcyBsb25nIGFzIHRoZXkgY3JlZGl0IHlvdSBmb3IgdGhlIG9yaWdpbmFsIGNyZWF0aW9uLiBUaGlzIGlzIHRoZSBtb3N0IGFjY29tbW9kYXRpbmcgb2YgbGljZW5zZXMgb2ZmZXJlZC4gUmVjb21tZW5kZWQgZm9yIG1heGltdW0gZGlzc2VtaW5hdGlvbiBhbmQgdXNlIG9mIGxpY2Vuc2VkIG1hdGVyaWFscy4iLCJUaGlzIGxpY2Vuc2UgbGV0cyBvdGhlcnMgcmVtaXgsIHR3ZWFrLCBhbmQgYnVpbGQgdXBvbiB5b3VyIHdvcmsgZXZlbiBmb3IgY29tbWVyY2lhbCBwdXJwb3NlcywgYXMgbG9uZyBhcyB0aGV5IGNyZWRpdCB5b3UgYW5kIGxpY2Vuc2UgdGhlaXIgbmV3IGNyZWF0aW9ucyB1bmRlciB0aGUgaWRlbnRpY2FsIHRlcm1zLiBUaGlzIGxpY2Vuc2UgaXMgb2Z0ZW4gY29tcGFyZWQgdG8gJmxkcXVvO2NvcHlsZWZ0JnJkcXVvOyBmcmVlIGFuZCBvcGVuIHNvdXJjZSBzb2Z0d2FyZSBsaWNlbnNlcy4gQWxsIG5ldyB3b3JrcyBiYXNlZCBvbiB5b3VycyB3aWxsIGNhcnJ5IHRoZSBzYW1lIGxpY2Vuc2UsIHNvIGFueSBkZXJpdmF0aXZlcyB3aWxsIGFsc28gYWxsb3cgY29tbWVyY2lhbCB1c2UuIFRoaXMgaXMgdGhlIGxpY2Vuc2UgdXNlZCBieSBXaWtpcGVkaWEsIGFuZCBpcyByZWNvbW1lbmRlZCBmb3IgbWF0ZXJpYWxzIHRoYXQgd291bGQgYmVuZWZpdCBmcm9tIGluY29ycG9yYXRpbmcgY29udGVudCBmcm9tIFdpa2lwZWRpYSBhbmQgc2ltaWxhcmx5IGxpY2Vuc2VkIHByb2plY3RzLiI6IlRoaXMgbGljZW5zZSBsZXRzIG90aGVycyByZW1peCwgdHdlYWssIGFuZCBidWlsZCB1cG9uIHlvdXIgd29yayBldmVuIGZvciBjb21tZXJjaWFsIHB1cnBvc2VzLCBhcyBsb25nIGFzIHRoZXkgY3JlZGl0IHlvdSBhbmQgbGljZW5zZSB0aGVpciBuZXcgY3JlYXRpb25zIHVuZGVyIHRoZSBpZGVudGljYWwgdGVybXMuIFRoaXMgbGljZW5zZSBpcyBvZnRlbiBjb21wYXJlZCB0byAmbGRxdW87Y29weWxlZnQmcmRxdW87IGZyZWUgYW5kIG9wZW4gc291cmNlIHNvZnR3YXJlIGxpY2Vuc2VzLiBBbGwgbmV3IHdvcmtzIGJhc2VkIG9uIHlvdXJzIHdpbGwgY2FycnkgdGhlIHNhbWUgbGljZW5zZSwgc28gYW55IGRlcml2YXRpdmVzIHdpbGwgYWxzbyBhbGxvdyBjb21tZXJjaWFsIHVzZS4gVGhpcyBpcyB0aGUgbGljZW5zZSB1c2VkIGJ5IFdpa2lwZWRpYSwgYW5kIGlzIHJlY29tbWVuZGVkIGZvciBtYXRlcmlhbHMgdGhhdCB3b3VsZCBiZW5lZml0IGZyb20gaW5jb3Jwb3JhdGluZyBjb250ZW50IGZyb20gV2lraXBlZGlhIGFuZCBzaW1pbGFybHkgbGljZW5zZWQgcHJvamVjdHMuIiwiVGhpcyBsaWNlbnNlIGxldHMgb3RoZXJzIHJlbWl4LCB0d2VhaywgYW5kIGJ1aWxkIHVwb24geW91ciB3b3JrIG5vbi1jb21tZXJjaWFsbHksIGFuZCBhbHRob3VnaCB0aGVpciBuZXcgd29ya3MgbXVzdCBhbHNvIGFja25vd2xlZGdlIHlvdSBhbmQgYmUgbm9uLWNvbW1lcmNpYWwsIHRoZXkgZG9uXHUyMDE5dCBoYXZlIHRvIGxpY2Vuc2UgdGhlaXIgZGVyaXZhdGl2ZSB3b3JrcyBvbiB0aGUgc2FtZSB0ZXJtcy4iOiJUaGlzIGxpY2Vuc2UgbGV0cyBvdGhlcnMgcmVtaXgsIHR3ZWFrLCBhbmQgYnVpbGQgdXBvbiB5b3VyIHdvcmsgbm9uLWNvbW1lcmNpYWxseSwgYW5kIGFsdGhvdWdoIHRoZWlyIG5ldyB3b3JrcyBtdXN0IGFsc28gYWNrbm93bGVkZ2UgeW91IGFuZCBiZSBub24tY29tbWVyY2lhbCwgdGhleSBkb25cdTIwMTl0IGhhdmUgdG8gbGljZW5zZSB0aGVpciBkZXJpdmF0aXZlIHdvcmtzIG9uIHRoZSBzYW1lIHRlcm1zLiIsIlRoaXMgbGljZW5zZSBsZXRzIG90aGVycyByZW1peCwgdHdlYWssIGFuZCBidWlsZCB1cG9uIHlvdXIgd29yayBub24tY29tbWVyY2lhbGx5LCBhcyBsb25nIGFzIHRoZXkgY3JlZGl0IHlvdSBhbmQgbGljZW5zZSB0aGVpciBuZXcgY3JlYXRpb25zIHVuZGVyIHRoZSBpZGVudGljYWwgdGVybXMuIjoiVGhpcyBsaWNlbnNlIGxldHMgb3RoZXJzIHJlbWl4LCB0d2VhaywgYW5kIGJ1aWxkIHVwb24geW91ciB3b3JrIG5vbi1jb21tZXJjaWFsbHksIGFzIGxvbmcgYXMgdGhleSBjcmVkaXQgeW91IGFuZCBsaWNlbnNlIHRoZWlyIG5ldyBjcmVhdGlvbnMgdW5kZXIgdGhlIGlkZW50aWNhbCB0ZXJtcy4iLCJUaGlzIHNvdXJjZSBmaWxlIGhhcyBiZWVuIGxvdmluZ2x5IHN0b3JlZCBpbiBvdXIgYXJjaGl2ZS4iOiJUaGlzIHNvdXJjZSBmaWxlIGhhcyBiZWVuIGxvdmluZ2x5IHN0b3JlZCBpbiBvdXIgYXJjaGl2ZS4iLCJUaGlzIHZpZGVvIGNvbnRhaW5zIGhhcmFzc21lbnQsIGluY2l0ZXMgaGF0cmVkLCBvciBkZXBpY3RzIGV4dHJlbWUgb3IgcmVhbC1saWZlIHZpb2xlbmNlLiI6IlRoaXMgdmlkZW8gY29udGFpbnMgaGFyYXNzbWVudCwgaW5jaXRlcyBoYXRyZWQsIG9yIGRlcGljdHMgZXh0cmVtZSBvciByZWFsLWxpZmUgdmlvbGVuY2UuIiwiVGhpcyB2aWRlbyBjb250YWlucyBwb3Jub2dyYXBoeSwgYWR2ZXJ0aXNlcyBhIHByb2R1Y3Qgb3Igc2VydmljZSBvZiBhbiBlcm90aWMgbmF0dXJlLCBvciBzZWVtcyBwcmltYXJpbHkgZm9jdXNlZCBvbiBzZXh1YWwgc3RpbXVsYXRpb24uIjoiVGhpcyB2aWRlbyBjb250YWlucyBwb3Jub2dyYXBoeSwgYWR2ZXJ0aXNlcyBhIHByb2R1Y3Qgb3Igc2VydmljZSBvZiBhbiBlcm90aWMgbmF0dXJlLCBvciBzZWVtcyBwcmltYXJpbHkgZm9jdXNlZCBvbiBzZXh1YWwgc3RpbXVsYXRpb24uIiwiVGhpcyB2aWRlbyBpcyBhbHNvIGluIHtDT1VOVH0gb3RoZXIgY29sbGVjdGlvbi4iOnsic2luZ3VsYXIiOiJUaGlzIHZpZGVvIGlzIGFsc28gaW4ge0NPVU5UfSBvdGhlciBjb2xsZWN0aW9uLiIsInBsdXJhbCI6IlRoaXMgdmlkZW8gaXMgYWxzbyBpbiB7Q09VTlR9IG90aGVyIGNvbGxlY3Rpb25zLiJ9LCJUaGlzIHZpZGVvIGlzIGFuIGFkdmVydGlzZW1lbnQsIGNvbW1lcmNpYWwsIG9yIGlzIGEgdmlkZW8gdGhhdCBhY3RpdmVseSBzZWxscyBhIHByb2R1Y3Qgb3Igc2VydmljZS4iOiJUaGlzIHZpZGVvIGlzIGFuIGFkdmVydGlzZW1lbnQsIGNvbW1lcmNpYWwsIG9yIGlzIGEgdmlkZW8gdGhhdCBhY3RpdmVseSBzZWxscyBhIHByb2R1Y3Qgb3Igc2VydmljZS4iLCJUaGlzIHZpZGVvIGlzIGhpZGRlbiBmcm9tIHZpbWVvLmNvbS4gSXQgY2Fubm90IGJlIGFkZGVkIHRvIHtUSVRMRX0iOiJUaGlzIHZpZGVvIGlzIGhpZGRlbiBmcm9tIHZpbWVvLmNvbS4gSXQgY2Fubm90IGJlIGFkZGVkIHRvIHtUSVRMRX0iLCJUaGlzIHZpZGVvIGlzIHByaW1hcmlseSBkZXNpZ25lZCB0byBkcml2ZSB0cmFmZmljIHRvIHRoaXJkIHBhcnR5IHNpdGVzLCB1c2UgU2VhcmNoIEVuZ2luZSBPcHRpbWl6YXRpb24gKFNFTykgdG8gbWFuaXB1bGF0ZSBzZWFyY2ggcmFua2luZ3MsIG9yIG90aGVyd2lzZSBkZWNlaXZlIG9yIG1pc2xlYWQgdGhlIGF1ZGllbmNlLiI6IlRoaXMgdmlkZW8gaXMgcHJpbWFyaWx5IGRlc2lnbmVkIHRvIGRyaXZlIHRyYWZmaWMgdG8gdGhpcmQgcGFydHkgc2l0ZXMsIHVzZSBTZWFyY2ggRW5naW5lIE9wdGltaXphdGlvbiAoU0VPKSB0byBtYW5pcHVsYXRlIHNlYXJjaCByYW5raW5ncywgb3Igb3RoZXJ3aXNlIGRlY2VpdmUgb3IgbWlzbGVhZCB0aGUgYXVkaWVuY2UuIiwiVGhpcyB2aWRlbyBzaG91bGQgYmUgbWFya2VkIGFzIFx1MjAxY01hdHVyZVx1MjAxZCBkdWUgdG8gbnVkaXR5LCBwcm9mYW5pdHksIHZpb2xlbmNlLCBvciBkcnVnXC9hbGNvaG9sIHVzZS4iOiJUaGlzIHZpZGVvIHNob3VsZCBiZSBtYXJrZWQgYXMgXHUyMDFjTWF0dXJlXHUyMDFkIGR1ZSB0byBudWRpdHksIHByb2Zhbml0eSwgdmlvbGVuY2UsIG9yIGRydWdcL2FsY29ob2wgdXNlLiIsIlRvZ2dsZSB2aXNpYmlsaXR5IG9mIHN0YXRzIGdyYXBoIjoiVG9nZ2xlIHZpc2liaWxpdHkgb2Ygc3RhdHMgZ3JhcGgiLCJVbmZvbGxvdyI6IlVuZm9sbG93IiwiVW5saWtlIjoiVW5saWtlIiwiVXAgbmV4dCI6IlVwIG5leHQiLCJ1cGRhdGUgeW91ciBjb250ZW50IHJhdGluZyBwcmVmZXJlbmNlcyI6InVwZGF0ZSB5b3VyIGNvbnRlbnQgcmF0aW5nIHByZWZlcmVuY2VzIiwiVXBncmFkZSBhbmQgd2VcdTIwMTlsbCBob2xkIG9uIHRvIHlvdXIgb3JpZ2luYWwgdmlkZW8gZmlsZXMuIjoiVXBncmFkZSBhbmQgd2VcdTIwMTlsbCBob2xkIG9uIHRvIHlvdXIgb3JpZ2luYWwgdmlkZW8gZmlsZXMuIiwiVXBsb2FkZWQgYnkge1VTRVJ9IjoiVXBsb2FkZWQgYnkge1VTRVJ9IiwiVXBsb2FkZXIgZGlkIG5vdCBtYWtlIHRoaXMiOiJVcGxvYWRlciBkaWQgbm90IG1ha2UgdGhpcyIsIlVzZXIgdmVyaWZpY2F0aW9uIjoiVXNlciB2ZXJpZmljYXRpb24iLCJWZXJpZnkgeW91ciBhY291bnQiOiJWZXJpZnkgeW91ciBhY291bnQiLCJWZXJpZnkiOiJWZXJpZnkiLCJ2aWEge0FQUF9OQU1FfSI6InZpYSB7QVBQX05BTUV9IiwidmlhIHtDQU1FT30iOiJ2aWEge0NBTUVPfSIsIlZpZGVvIGZsYWdnaW5nIGZvcm0iOiJWaWRlbyBmbGFnZ2luZyBmb3JtIiwiVmlldyBhbGwgY2F0ZWdvcmllcyBhc3NvY2lhdGVkIHdpdGggdGhpcyB2aWRlbyI6IlZpZXcgYWxsIGNhdGVnb3JpZXMgYXNzb2NpYXRlZCB3aXRoIHRoaXMgdmlkZW8iLCJWaWV3IGFsbCB1c2VycyBjcmVkaXRlZCBieSB0aGlzIHZpZGVvIjoiVmlldyBhbGwgdXNlcnMgY3JlZGl0ZWQgYnkgdGhpcyB2aWRlbyIsIlZpZXcgYWxsIjoiVmlldyBhbGwiLCJWaWV3IGNoYW5uZWwiOiJWaWV3IGNoYW5uZWwiLCJWaWV3IG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhpcyB2aWRlbyI6IlZpZXcgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGlzIHZpZGVvIiwiVmlldyB0aXRsZSI6IlZpZXcgdGl0bGUiLCJWaW1lbyBCdXNpbmVzcyB1c2VyIjoiVmltZW8gQnVzaW5lc3MgdXNlciIsIlZpbWVvIGN1cmF0aW9uIHRlYW0gbWVtYmVyIjoiVmltZW8gY3VyYXRpb24gdGVhbSBtZW1iZXIiLCJWaW1lbyBwYXJ0bmVyIjoiVmltZW8gcGFydG5lciIsIlZpbWVvIFBsdXMgdXNlciI6IlZpbWVvIFBsdXMgdXNlciIsIlZpbWVvIFBybyB1c2VyIjoiVmltZW8gUHJvIHVzZXIiLCJWaW1lbyBzcG9uc29yIjoiVmltZW8gc3BvbnNvciIsIlZpbWVvIHN0YWZmIG1lbWJlciI6IlZpbWVvIHN0YWZmIG1lbWJlciIsIlZpbWVvIHN1cHBvcnQgc3BlY2lhbGlzdCI6IlZpbWVvIHN1cHBvcnQgc3BlY2lhbGlzdCIsIldhbnQgdG8gbGVhdmUgYSBjb21tZW50PyBGaXJzdCB5b3VcdTIwMTlsbCBuZWVkIHRvIHZlcmlmeSB5b3VyIFZpbWVvIGFjY291bnQuIjoiV2FudCB0byBsZWF2ZSBhIGNvbW1lbnQ/IEZpcnN0IHlvdVx1MjAxOWxsIG5lZWQgdG8gdmVyaWZ5IHlvdXIgVmltZW8gYWNjb3VudC4iLCJXYW50IHRvIGxlYXZlIGEgY29tbWVudD8iOiJXYW50IHRvIGxlYXZlIGEgY29tbWVudD8iLCJXYXRjaCBpdCBhZ2FpbiI6IldhdGNoIGl0IGFnYWluIiwiV2VcdTIwMTlyZSBvbiBpdCEgUGxlYXNlIGNoZWNrIGJhY2sgbGF0ZXIsIGFzIGl0IGNvdWxkIHRha2UgYSBmZXcgaG91cnMuIjoiV2VcdTIwMTlyZSBvbiBpdCEgUGxlYXNlIGNoZWNrIGJhY2sgbGF0ZXIsIGFzIGl0IGNvdWxkIHRha2UgYSBmZXcgaG91cnMuIiwiV2hlbiB5b3UgYWRkIHRoaXMgcHJpdmF0ZSB2aWRlbyB0byBhIGNvbGxlY3Rpb24sIHRoZSB2aWRlbyB3aWxsIGJlIHZpZXdhYmxlIHdpdGhpbiB0aGF0IGFsYnVtLCBncm91cCwgZXRjLiI6IldoZW4geW91IGFkZCB0aGlzIHByaXZhdGUgdmlkZW8gdG8gYSBjb2xsZWN0aW9uLCB0aGUgdmlkZW8gd2lsbCBiZSB2aWV3YWJsZSB3aXRoaW4gdGhhdCBhbGJ1bSwgZ3JvdXAsIGV0Yy4iLCJXaHkgYXJlIHlvdSByZXBvcnRpbmcgdGhpcyB2aWRlbz8iOiJXaHkgYXJlIHlvdSByZXBvcnRpbmcgdGhpcyB2aWRlbz8iLCJXb3VsZCB5b3UgbGlrZSB0byBpbmNsdWRlIHRoaXMgdmlkZW8gc3VibWl0dGVkIGJ5IHtVU0VSX05BTUV9IGluIHRoZSB7R1JPVVBfTkFNRX0gZ3JvdXA/IjoiV291bGQgeW91IGxpa2UgdG8gaW5jbHVkZSB0aGlzIHZpZGVvIHN1Ym1pdHRlZCBieSB7VVNFUl9OQU1FfSBpbiB0aGUge0dST1VQX05BTUV9IGdyb3VwPyIsIlhYWC1yYXRlZCI6IlhYWC1yYXRlZCIsIlllcywgZmV0Y2ggb3JpZ2luYWwgZmlsZSI6IlllcywgZmV0Y2ggb3JpZ2luYWwgZmlsZSIsIllvdSBjYW4ge1VQREFURV9ZT1VSX1BSRUZFUkVOQ0VTX0xJTkt9IGF0IGFueSB0aW1lLiI6IllvdSBjYW4ge1VQREFURV9ZT1VSX1BSRUZFUkVOQ0VTX0xJTkt9IGF0IGFueSB0aW1lLiIsIllvdSBjYW5ub3QgY3JlYXRlIHtUSVRMRX0gd2hpbGUgaW4gUHJpdmF0ZSBNb2RlLiBJZiB5b3UgdGhpbmsgaXQgd2FzIGZsYWdnZWQgaW4gZXJyb3IsIHtQTEVBU0VfTEVUX1VTX0tOT1dfTElOS30iOiJZb3UgY2Fubm90IGNyZWF0ZSB7VElUTEV9IHdoaWxlIGluIFByaXZhdGUgTW9kZS4gSWYgeW91IHRoaW5rIGl0IHdhcyBmbGFnZ2VkIGluIGVycm9yLCB7UExFQVNFX0xFVF9VU19LTk9XX0xJTkt9IiwiWW91IG5lZWQgYSAzNjAgcGxheWVyIHRvIHdhdGNoIHRoaXMgZG93bmxvYWQuIHtBfVNlZSBvdXIgcmVjb21tZW5kYXRpb25ze1wvQX0uIjoiWW91IG5lZWQgYSAzNjAgcGxheWVyIHRvIHdhdGNoIHRoaXMgZG93bmxvYWQuIHtBfVNlZSBvdXIgcmVjb21tZW5kYXRpb25ze1wvQX0uIiwiWW91ciBhY2NvdW50IGhhcyBiZWVuIGZsYWdnZWQgZm9yIHNwYW0uIElmIHlvdSB0aGluayBpdCB3YXMgZmxhZ2dlZCBpbiBlcnJvciwge1BMRUFTRV9MRVRfVVNfS05PV19MSU5LfS4iOiJZb3VyIGFjY291bnQgaGFzIGJlZW4gZmxhZ2dlZCBmb3Igc3BhbS4gSWYgeW91IHRoaW5rIGl0IHdhcyBmbGFnZ2VkIGluIGVycm9yLCB7UExFQVNFX0xFVF9VU19LTk9XX0xJTkt9LiIsIntDT1VOVH0gQ2F0ZWdvcnkiOnsic2luZ3VsYXIiOiJ7Q09VTlR9IENhdGVnb3J5IiwicGx1cmFsIjoie0NPVU5UfSBDYXRlZ29yaWVzIn0sIntDT1VOVH0gQ29sbGVjdGlvbiI6eyJzaW5ndWxhciI6IntDT1VOVH0gQ29sbGVjdGlvbiIsInBsdXJhbCI6IntDT1VOVH0gQ29sbGVjdGlvbnMifSwie0NPVU5UfSBDb21tZW50Ijp7InNpbmd1bGFyIjoie0NPVU5UfSBDb21tZW50IiwicGx1cmFsIjoie0NPVU5UfSBDb21tZW50cyJ9LCJ7Q09VTlR9IENyZWRpdCI6eyJzaW5ndWxhciI6IntDT1VOVH0gQ3JlZGl0IiwicGx1cmFsIjoie0NPVU5UfSBDcmVkaXRzIn0sIntDT1VOVH0gTGlrZSI6eyJzaW5ndWxhciI6IntDT1VOVH0gTGlrZSIsInBsdXJhbCI6IntDT1VOVH0gTGlrZXMifSwie0NPVU5UfSBQaG90byI6eyJzaW5ndWxhciI6IntDT1VOVH0gUGhvdG8iLCJwbHVyYWwiOiJ7Q09VTlR9IFBob3RvcyJ9LCJ7Q09VTlR9IFBsYXkiOnsic2luZ3VsYXIiOiJ7Q09VTlR9IFBsYXkiLCJwbHVyYWwiOiJ7Q09VTlR9IFBsYXlzIn0sIkFjdGl2aXR5IjoiQWN0aXZpdHkiLCJObyBhY3Rpdml0eSBpbiB0aGUgcGFzdCAzMCBkYXlzIjoiTm8gYWN0aXZpdHkgaW4gdGhlIHBhc3QgMzAgZGF5cyIsIlNlZSBhbGwiOiJTZWUgYWxsIiwiVmlldyBtZXNzYWdlIjoiVmlldyBtZXNzYWdlIiwiV2UnbGwgYWxlcnQgeW91IG9uY2Ugc29tZXRoaW5nIGNvb2wgaGFwcGVucy4iOiJXZSdsbCBhbGVydCB5b3Ugb25jZSBzb21ldGhpbmcgY29vbCBoYXBwZW5zLiJ9Owo8L3NjcmlwdD4KCiA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9mLnZpbWVvY2RuLmNvbS9qc19vcHQvdXRpbHMvcGxheWVyX21hbmFnZXIvcGxheWVyX21hbmFnZXIubWluLmpzPzU1YWI3MDgzIj48L3NjcmlwdD4KIDxzY3JpcHQ+CiBpZiAodHlwZW9mIHBsYXllckFzc2V0VXJscyAhPT0gJ3VuZGVmaW5lZCcpIHsKICBQbGF5ZXJNYW5hZ2VyLnJ1bihwbGF5ZXJBc3NldFVybHMpOwogIH0KIDwvc2NyaXB0PgoKIDxzY3JpcHQgc3JjPSJodHRwczovL2YudmltZW9jZG4uY29tL2pzX29wdC9yZWFjdF9wcm9kX2NvbWJpbmVkLm1pbi5qcz9iNmVlN2E0ZSI+PC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9mLnZpbWVvY2RuLmNvbS9qc19vcHQvY2xpcF9jb21iaW5lZC5taW4uanM/ZGI0YjlhYzEiPjwvc2NyaXB0PgogPHNjcmlwdCBzcmM9Imh0dHBzOi8vZi52aW1lb2Nkbi5jb20vanNfb3B0L2FjdGl2aXR5X3RvcG5hdl9jb21iaW5lZC5taW4uanM/NTM5YjZjODMiPjwvc2NyaXB0PgogPHNjcmlwdCBzcmM9Imh0dHBzOi8vZi52aW1lb2Nkbi5jb20vanNfb3B0L19idW5kbGVzL2NsaXAuYnVuZGxlLm1pbi5qcz85NTBkZWI3YiI+PC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9mLnZpbWVvY2RuLmNvbS9qc19vcHQvbW9kdWxlcy9nbG9iYWwvYWJsaW5jb2xuL2hvc3RfdmlkZW9zLm1pbi5qcz82NWRjNDUxYSI+PC9zY3JpcHQ+CgogPHNjcmlwdCBhc3luYyBzcmM9Imh0dHBzOi8vZi52aW1lb2Nkbi5jb20vanNfb3B0L2NsaXBfYmV0YV9saWJzX2FzeW5jX2NvbWJpbmVkLm1pbi5qcz8xOGZiZTY5YSI+PC9zY3JpcHQ+CiA8c2NyaXB0IGFzeW5jIHNyYz0iLy93d3cuZ29vZ2xldGFnbWFuYWdlci5jb20vZ3RtLmpzP2lkPUdUTS1SQktLJmw9X2d0bSI+PC9zY3JpcHQ+CiA8c2NyaXB0PgogZnVuY3Rpb24gb25WaW1lb0RvbVJlYWR5KGUpIHsKIAogICBpZiAoIXZpbWVvLmJ5cGFzc19wbGF5ZXJfcmVzcG9uc2l2ZV9kZWxlZ2F0ZXMpIHsKIHZpbWVvLnBsYXllcl9yZXNwb25zaXZlX2RlbGVnYXRlcyA9IHZpbWVvLnBsYXllcl9yZXNwb25zaXZlX2RlbGVnYXRlcyB8fCB7fTsKIHZpbWVvLnBsYXllcl9yZXNwb25zaXZlX2RlbGVnYXRlcy53aWxsT3BlblNoYXJlT3ZlcmxheSA9IHZpbWVvLnBsYXllcl9yZXNwb25zaXZlX2RlbGVnYXRlcy53aWxsT3BlblNoYXJlT3ZlcmxheSB8fCBmdW5jdGlvbihpZCkgewogUGxheWVyTWFuYWdlci5wYXVzZUFsbFBsYXllcnMoKTsKIHZpbWVvLnNoYXJlLlBvcHVwKGlkKTsKIHJldHVybiBmYWxzZTsKIH07CgogdmltZW8ucGxheWVyX3Jlc3BvbnNpdmVfZGVsZWdhdGVzLndpbGxPcGVuTG9naW5Gb3JtID0gdmltZW8ucGxheWVyX3Jlc3BvbnNpdmVfZGVsZWdhdGVzLndpbGxPcGVuTG9naW5Gb3JtIHx8IGZ1bmN0aW9uKGlkLCBjb250ZXh0KSB7CiBpZiAodHlwZW9mIHZpbWVvLk1vZGFsICE9PSAndW5kZWZpbmVkJykgewogUGxheWVyTWFuYWdlci5wYXVzZUFsbFBsYXllcnMoKTsKCiBpZiAoY29udGV4dCkgewogdmltZW8uU2Vzc2lvbi5jcmVhdGUoeyBwbGF5ZXI6IDEsIGNsaXBfaWQ6IGlkLCBjb250ZXh0OiBjb250ZXh0IH0pOwogfQogZWxzZSB7CiB2aW1lby5TZXNzaW9uLmNyZWF0ZSgpOwogfQoKIHJldHVybiBmYWxzZTsKIH0KIH07CgogaWYgKFBsYXllck1hbmFnZXIpIHsKIFBsYXllck1hbmFnZXIuc2V0RGVmYXVsdERlbGVnYXRlKHZpbWVvLnBsYXllcl9yZXNwb25zaXZlX2RlbGVnYXRlcyk7CiB9CiB9CiAKIGlmIChQbGF5ZXJNYW5hZ2VyKSB7CiBQbGF5ZXJNYW5hZ2VyLmRpc3BhdGNoUmVhZHlTaWduYWxzKCk7CiB9CiAKICB9CgogICQoZG9jdW1lbnQpLnJlYWR5KG9uVmltZW9Eb21SZWFkeSk7CiAgPC9zY3JpcHQ+CgogIDxzY3JpcHQ+CiB2YXIgZ29vZ2xlX2FkX2NsaWVudCA9ICdjYS1pd29uLXZpbWVvJywKIGdvb2dsZV9hZF9vdXRwdXQgPSAnanMnLAogZ29vZ2xlX21heF9udW1fYWRzID0gJzMnLAogZ29vZ2xlX2FkX3R5cGUgPSAndGV4dCcsCiBnb29nbGVfZW5jb2RpbmcgPSAndXRmOCcsCiBnb29nbGVfZmVlZGJhY2sgPSAnb24nLAogZ29vZ2xlX2t3X3R5cGUgPSAnYnJvYWQnLAogZ29vZ2xlX2t3ID0gJyc7CgogZG9jdW1lbnQud3JpdGUoJzxzY3InKydpcHQgc3JjPSIvL3BhZ2VhZDIuZ29vZ2xlc3luZGljYXRpb24uY29tL3BhZ2VhZC9zaG93X2Fkcy5qcyI+PC9zY3InKydpcHQ+Jyk7CiA8L3NjcmlwdD4gCiA8L2JvZHk+CjwvaHRtbD4K
148
- http_version:
149
- recorded_at: Mon, 27 Mar 2017 21:00:50 GMT
150
- recorded_with: VCR 3.0.3
@@ -1,67 +0,0 @@
1
- ---
2
- http_interactions:
3
- - request:
4
- method: head
5
- uri: https://api.vimeo.com/videos/98605382
6
- body:
7
- encoding: US-ASCII
8
- string: ''
9
- headers:
10
- User-Agent:
11
- - VideoInfo/2.7
12
- Authorization:
13
- - bearer 6b66b015a3504793b4f541d878f46ff6
14
- Accept:
15
- - application/vnd.vimeo.*+json;version=3.2
16
- response:
17
- status:
18
- code: 200
19
- message: OK
20
- headers:
21
- Server:
22
- - nginx
23
- Content-Type:
24
- - application/vnd.vimeo.video+json
25
- Cache-Control:
26
- - no-cache, max-age=315360000
27
- Strict-Transport-Security:
28
- - max-age=15552000; includeSubDomains; preload
29
- X-Ratelimit-Limit:
30
- - '500'
31
- X-Ratelimit-Remaining:
32
- - '499'
33
- X-Ratelimit-Reset:
34
- - '2017-03-27T21:16:13+00:00'
35
- Expires:
36
- - Thu, 25 Mar 2027 21:01:13 GMT
37
- Via:
38
- - 1.1 varnish
39
- - 1.1 varnish
40
- Fastly-Debug-Digest:
41
- - e1a6082c7056329c14f1d8da1dbc41c69e2a21b9c94e74b98a8cbf1b484af80a
42
- Content-Length:
43
- - '10745'
44
- Accept-Ranges:
45
- - bytes
46
- Date:
47
- - Mon, 27 Mar 2017 21:01:13 GMT
48
- Age:
49
- - '0'
50
- Connection:
51
- - keep-alive
52
- X-Served-By:
53
- - cache-iad2133-IAD, cache-lax8643-LAX
54
- X-Cache:
55
- - MISS, MISS
56
- X-Cache-Hits:
57
- - 0, 0
58
- X-Timer:
59
- - S1490648473.175310,VS0,VE176
60
- Vary:
61
- - Accept,Vimeo-Client-Id,Accept-Encoding
62
- body:
63
- encoding: UTF-8
64
- string: ''
65
- http_version:
66
- recorded_at: Mon, 27 Mar 2017 21:01:13 GMT
67
- recorded_with: VCR 3.0.3